增加招投标模块

This commit is contained in:
2026-09-24 17:06:46 +08:00
parent bc9e32d62a
commit eafa5e1cf4
51 changed files with 13453 additions and 5 deletions
@@ -0,0 +1,152 @@
<template>
<el-dialog
:model-value="visible"
title="编辑投标"
width="780px"
:close-on-click-modal="false"
@update:model-value="handleClose"
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="投标标题" prop="title">
<el-input v-model="form.title" />
</el-form-item>
<el-form-item label="投标编号">
<el-input v-model="form.bid_no" />
</el-form-item>
<el-form-item label="投标类型">
<el-select v-model="form.bid_type" style="width: 100%">
<el-option v-for="i in bidTypeOptions" :key="i.value" :label="i.label" :value="i.value" />
</el-select>
</el-form-item>
<el-form-item label="招标方" prop="customer_name">
<el-input v-model="form.customer_name" />
</el-form-item>
<el-form-item label="发布单位">
<el-input v-model="form.publish_org" />
</el-form-item>
<el-form-item label="投标报价">
<el-input v-model.number="form.bid_amount" placeholder="0.00">
<template #append>元</template>
</el-input>
</el-form-item>
<el-form-item label="保证金">
<el-input v-model.number="form.bid_deposit" placeholder="0.00">
<template #append>元</template>
</el-input>
</el-form-item>
<el-form-item label="招标发布日期">
<el-date-picker v-model="form.publish_date" type="date" value-format="YYYY-MM-DD" style="width: 100%" />
</el-form-item>
<el-form-item label="报名截止">
<el-date-picker v-model="form.register_end_date" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
</el-form-item>
<el-form-item label="投标截止">
<el-date-picker v-model="form.bid_end_date" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
</el-form-item>
<el-form-item label="开标时间">
<el-date-picker v-model="form.open_bid_date" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
</el-form-item>
<el-form-item label="联系人">
<el-input v-model="form.contact_person" />
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="form.contact_phone" />
</el-form-item>
<el-form-item label="项目描述">
<el-input v-model="form.description" type="textarea" :rows="3" />
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" :rows="2" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" :loading="submitting" @click="handleSubmit">保存</el-button>
</template>
</el-dialog>
</template>
<script setup>
import { ref, reactive, watch } from "vue";
import { ElMessage } from "element-plus";
import { updateBid } from "@/api/crmBidding";
import { bidTypeOptions } from "@/views/apps/crm/dict";
const props = defineProps({
visible: { type: Boolean, default: false },
bid: { type: Object, default: null },
});
const emit = defineEmits(["update:visible", "success"]);
const formRef = ref();
const submitting = ref(false);
const form = reactive({
title: "",
bid_no: "",
bid_type: "1",
customer_name: "",
publish_org: "",
bid_amount: 0,
bid_deposit: 0,
publish_date: "",
register_end_date: "",
bid_end_date: "",
open_bid_date: "",
contact_person: "",
contact_phone: "",
description: "",
remark: "",
});
const rules = {
title: [{ required: true, message: "请输入投标标题", trigger: "blur" }],
customer_name: [{ required: true, message: "请输入招标方名称", trigger: "blur" }],
};
watch(
() => props.visible,
(val) => {
if (val && props.bid) {
const b = props.bid;
form.title = b.title || "";
form.bid_no = b.bid_no || "";
form.bid_type = b.bid_type || "1";
form.customer_name = b.customer_name || "";
form.publish_org = b.publish_org || "";
form.bid_amount = b.bid_amount || 0;
form.bid_deposit = b.bid_deposit || 0;
form.publish_date = b.publish_date || "";
form.register_end_date = b.register_end_date || "";
form.bid_end_date = b.bid_end_date || "";
form.open_bid_date = b.open_bid_date || "";
form.contact_person = b.contact_person || "";
form.contact_phone = b.contact_phone || "";
form.description = b.description || "";
form.remark = b.remark || "";
}
}
);
function handleClose() {
emit("update:visible", false);
}
async function handleSubmit() {
if (!formRef.value || !props.bid) return;
try {
await formRef.value.validate();
} catch (e) {
return;
}
submitting.value = true;
try {
await updateBid(props.bid.id, { ...form });
ElMessage.success("保存成功");
emit("success");
} catch (e) {
ElMessage.error(e?.message || "保存失败");
} finally {
submitting.value = false;
}
}
</script>