临时更新

This commit is contained in:
2026-09-10 20:18:11 +08:00
parent e340d9a7d1
commit 26eaf1eddb
11 changed files with 4212 additions and 0 deletions
@@ -0,0 +1,284 @@
<template>
<el-dialog
:model-value="visible"
:title="isEdit ? '编辑供应商' : '新增供应商'"
width="760px"
:close-on-click-modal="false"
@update:model-value="handleClose"
@closed="handleClosed"
>
<el-tabs v-model="activeTab">
<el-tab-pane label="基本信息" name="basic">
<el-form
ref="formRef"
:model="form"
:rules="rules"
label-width="110px"
label-position="right"
>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="供应商名称" prop="supplier_name">
<el-input v-model="form.supplier_name" placeholder="请输入供应商名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商类型" prop="supplier_type">
<el-select v-model="form.supplier_type" placeholder="请选择" style="width: 100%">
<el-option
v-for="item in SUPPLIER_TYPE_OPTIONS"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商等级" prop="supplier_level">
<el-select v-model="form.supplier_level" placeholder="请选择" style="width: 100%">
<el-option
v-for="item in levelOptions('supplier')"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属行业" prop="industry">
<el-input v-model="form.industry" placeholder="如:机械设备、电子元器件" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合作开始" prop="register_time">
<el-date-picker
v-model="form.register_time"
type="date"
value-format="YYYY-MM-DD"
placeholder="选择日期"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合作到期" prop="expire_time">
<el-date-picker
v-model="form.expire_time"
type="date"
value-format="YYYY-MM-DD"
placeholder="选择日期"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="供应商地址" prop="address">
<el-input v-model="form.address" placeholder="请输入详细地址" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select v-model="form.status" placeholder="请选择" style="width: 100%">
<el-option
v-for="item in STATUS_OPTIONS"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="联系信息" name="contact">
<el-form :model="form" label-width="110px" label-position="right">
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="联系人">
<el-input v-model="form.contact_person" placeholder="请输入联系人姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话">
<el-input v-model="form.contact_phone" placeholder="请输入联系电话" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系邮箱">
<el-input v-model="form.contact_email" placeholder="请输入邮箱" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="开票信息" name="invoice">
<el-form :model="form" label-width="110px" label-position="right">
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="发票抬头">
<el-input v-model="form.invoice_title" placeholder="请输入发票抬头" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="纳税人识别号">
<el-input v-model="form.tax_number" placeholder="请输入纳税人识别号" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="注册地址">
<el-input v-model="form.registered_address" placeholder="请输入注册地址" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="注册电话">
<el-input v-model="form.registered_phone" placeholder="请输入注册电话" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开户行名称">
<el-input v-model="form.bank_name" placeholder="请输入开户行名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开户行账号">
<el-input v-model="form.bank_account" placeholder="请输入银行账号" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="备注" name="remark">
<el-form :model="form" label-width="110px" label-position="right">
<el-form-item label="备注">
<el-input
v-model="form.remark"
type="textarea"
:rows="8"
placeholder="请输入备注信息(选填)"
/>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
<template #footer>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" :loading="submitting" @click="handleSave">保存</el-button>
</template>
</el-dialog>
</template>
<script setup>
import { ref, reactive, watch, nextTick } from "vue";
import { ElMessage } from "element-plus";
import { createCrmSupplier, updateCrmSupplier } from "@/api/crm";
import { SUPPLIER_TYPE_OPTIONS, STATUS_OPTIONS, levelOptions } from "../../dict";
const props = defineProps({
visible: { type: Boolean, default: false },
editData: { type: Object, default: null },
});
const emit = defineEmits(["update:visible", "success"]);
const formRef = ref();
const activeTab = ref("basic");
const submitting = ref(false);
const isEdit = ref(false);
const internalId = ref(null);
const defaultForm = () => ({
supplier_name: "",
supplier_type: "1",
supplier_level: "3",
industry: "",
contact_person: "",
contact_phone: "",
contact_email: "",
address: "",
register_time: "",
expire_time: "",
status: "1",
remark: "",
invoice_title: "",
tax_number: "",
registered_address: "",
registered_phone: "",
bank_name: "",
bank_account: "",
});
const form = reactive(defaultForm());
const rules = {
supplier_name: [{ required: true, message: "请输入供应商名称", trigger: "blur" }],
supplier_type: [{ required: true, message: "请选择供应商类型", trigger: "change" }],
contact_phone: [
{
pattern: /^(1[3-9]\d{9}|0\d{2,3}-?\d{7,8}|\d{7,8})$/,
message: "联系电话格式不正确",
trigger: "blur",
},
],
contact_email: [{ type: "email", message: "邮箱格式不正确", trigger: "blur" }],
};
watch(
() => props.visible,
async (val) => {
if (!val) return;
activeTab.value = "basic";
isEdit.value = !!props.editData;
internalId.value = props.editData?.id ?? null;
if (props.editData) {
Object.assign(form, defaultForm(), props.editData);
} else {
Object.assign(form, defaultForm());
}
await nextTick();
formRef.value?.clearValidate();
}
);
function handleClose() {
emit("update:visible", false);
}
function handleClosed() {
formRef.value?.resetFields();
activeTab.value = "basic";
}
async function handleSave() {
if (!formRef.value) return;
try {
await formRef.value.validate();
} catch (e) {
activeTab.value = "basic";
return;
}
submitting.value = true;
try {
const payload = { ...form, is_draft: 0 };
if (internalId.value) {
await updateCrmSupplier(internalId.value, payload);
ElMessage.success("更新成功");
} else {
await createCrmSupplier(payload);
ElMessage.success("新增成功");
}
emit("success");
handleClose();
} catch (e) {
ElMessage.error(e.message || "操作失败");
} finally {
submitting.value = false;
}
}
</script>