145 lines
6.0 KiB
Vue
145 lines
6.0 KiB
Vue
<template>
|
|
<div class="bid-basic" v-loading="loading">
|
|
<div class="section-header">
|
|
<h3 class="section-title">基本信息</h3>
|
|
<div class="section-actions">
|
|
<el-button v-if="canEdit" type="primary" link :icon="EditPen" @click="handleEdit">编辑</el-button>
|
|
<el-button v-if="canConvertContract" type="success" link :icon="Document" @click="handleConvert('contract')">
|
|
中标转合同
|
|
</el-button>
|
|
<el-button v-if="canConvertProject" type="warning" link :icon="Box" @click="handleConvert('project')">
|
|
中标转项目
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
|
|
<el-descriptions :column="2" border>
|
|
<el-descriptions-item label="投标编号">{{ bid.bid_no || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="投标标题">{{ bid.title }}</el-descriptions-item>
|
|
<el-descriptions-item label="投标类型">
|
|
<el-tag size="small">{{ bidTypeText(bid.bid_type) }}</el-tag>
|
|
</el-descriptions-item>
|
|
<el-descriptions-item label="投标状态">
|
|
<el-tag :type="bidStatusTag(bid.status)" size="small">
|
|
{{ bidStatusText(bid.status) }}
|
|
</el-tag>
|
|
</el-descriptions-item>
|
|
<el-descriptions-item label="来源">
|
|
<el-tag v-if="bid.source_type === 1" size="small" type="warning">商机</el-tag>
|
|
<el-tag v-else-if="bid.source_type === 2" size="small" type="primary">项目</el-tag>
|
|
<el-tag v-else size="small" type="info" effect="plain">独立</el-tag>
|
|
</el-descriptions-item>
|
|
<el-descriptions-item label="来源名称">
|
|
<span v-if="bid.business_name">{{ bid.business_name }}</span>
|
|
<span v-else-if="bid.project_name">{{ bid.project_name }}</span>
|
|
<span v-else>-</span>
|
|
</el-descriptions-item>
|
|
<el-descriptions-item label="招标方">{{ bid.customer_name || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="发布单位">{{ bid.publish_org || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="投标报价">{{ formatMoney(bid.bid_amount) }}</el-descriptions-item>
|
|
<el-descriptions-item label="保证金">{{ formatMoney(bid.bid_deposit) }}</el-descriptions-item>
|
|
<el-descriptions-item label="招标发布日期">{{ formatDateOnly(bid.publish_date) }}</el-descriptions-item>
|
|
<el-descriptions-item label="报名截止">{{ formatDateTime(bid.register_end_date) }}</el-descriptions-item>
|
|
<el-descriptions-item label="投标截止">{{ formatDateTime(bid.bid_end_date) }}</el-descriptions-item>
|
|
<el-descriptions-item label="开标时间">{{ formatDateTime(bid.open_bid_date) }}</el-descriptions-item>
|
|
<el-descriptions-item label="中标状态">
|
|
<el-tag v-if="bid.win_status === 1" type="success" size="small">已中标</el-tag>
|
|
<el-tag v-else-if="bid.win_status === 2" type="danger" size="small">未中标</el-tag>
|
|
<el-tag v-else-if="bid.win_status === 3" type="warning" size="small">废标</el-tag>
|
|
<el-tag v-else-if="bid.win_status === 4" type="info" size="small">流标</el-tag>
|
|
<el-tag v-else type="info" size="small" effect="plain">未开标</el-tag>
|
|
</el-descriptions-item>
|
|
<el-descriptions-item label="中标日期">{{ formatDateTime(bid.win_date) }}</el-descriptions-item>
|
|
<el-descriptions-item label="我方排名">{{ bid.our_ranking || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="我方得分">{{ bid.total_score || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="联系人">{{ bid.contact_person || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="联系电话">{{ bid.contact_phone || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="负责人">{{ bid.owner_user_name || "-" }}</el-descriptions-item>
|
|
<el-descriptions-item label="创建时间">{{ formatDateTime(bid.create_time) }}</el-descriptions-item>
|
|
<el-descriptions-item label="关联合同">
|
|
<el-link v-if="bid.contract_id" type="primary" :underline="false">合同 #{{ bid.contract_id }}</el-link>
|
|
<span v-else>-</span>
|
|
</el-descriptions-item>
|
|
<el-descriptions-item label="关联项目" v-if="bid.new_project_id || bid.project_id">
|
|
<el-link type="primary" :underline="false">
|
|
项目 #{{ bid.new_project_id || bid.project_id }}
|
|
</el-link>
|
|
</el-descriptions-item>
|
|
</el-descriptions>
|
|
|
|
<el-divider />
|
|
|
|
<h4 class="block-title">项目描述</h4>
|
|
<div class="content-box">{{ bid.description || "暂无描述" }}</div>
|
|
|
|
<h4 class="block-title">备注</h4>
|
|
<div class="content-box">{{ bid.remark || "—" }}</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { computed, ref } from "vue";
|
|
import { EditPen, Document, Box } from "@element-plus/icons-vue";
|
|
import {
|
|
bidStatusText,
|
|
bidStatusTag,
|
|
bidTypeText,
|
|
formatMoney,
|
|
formatDateOnly,
|
|
formatDateTime,
|
|
} from "@/views/apps/crm/dict";
|
|
|
|
const props = defineProps({
|
|
bid: { type: Object, required: true },
|
|
});
|
|
const emit = defineEmits(["action"]);
|
|
|
|
const loading = ref(false);
|
|
|
|
const canEdit = computed(() => props.bid.locked !== 1 && props.bid.status !== 6);
|
|
const canConvertContract = computed(
|
|
() => props.bid.win_status === 1 && !props.bid.contract_id
|
|
);
|
|
const canConvertProject = computed(
|
|
() => props.bid.win_status === 1 && !props.bid.new_project_id
|
|
);
|
|
|
|
function handleEdit() {
|
|
emit("action", { type: "edit", row: props.bid });
|
|
}
|
|
|
|
function handleConvert(type) {
|
|
emit("action", { type, row: props.bid });
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.section-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
margin-bottom: 16px;
|
|
}
|
|
.section-title {
|
|
margin: 0;
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
}
|
|
.block-title {
|
|
margin: 16px 0 8px;
|
|
font-size: 14px;
|
|
font-weight: 500;
|
|
color: var(--el-text-color-regular);
|
|
}
|
|
.content-box {
|
|
background: var(--el-bg-color-page);
|
|
border-radius: 6px;
|
|
padding: 12px;
|
|
font-size: 13px;
|
|
line-height: 1.6;
|
|
color: var(--el-text-color-primary);
|
|
min-height: 40px;
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
}
|
|
</style> |