|
|
|
|
@ -14,7 +14,7 @@
|
|
|
|
|
</el-card>
|
|
|
|
|
<el-card shadow="never">
|
|
|
|
|
<!-- 统一表单包裹所有分区,便于整体验证 -->
|
|
|
|
|
<el-form ref="quoteFormRef" :model="form" :rules="rules" label-width="120px" :disabled="isView">
|
|
|
|
|
<el-form ref="quoteFormRef" :model="form" :rules="rules" label-width="120px">
|
|
|
|
|
<el-divider content-position="left">基本信息</el-divider>
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
@ -28,7 +28,7 @@
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="报价单名称" prop="quoteName">
|
|
|
|
|
<el-input v-model="form.quoteName" placeholder="请输入报价单名称" />
|
|
|
|
|
<el-input v-model="form.quoteName" placeholder="请输入报价单名称" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
|
|
@ -58,53 +58,74 @@
|
|
|
|
|
-->
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="报价日期" prop="quoteDate">
|
|
|
|
|
<el-date-picker clearable v-model="form.quoteDate" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择报价日期" />
|
|
|
|
|
<el-date-picker
|
|
|
|
|
clearable
|
|
|
|
|
v-model="form.quoteDate"
|
|
|
|
|
type="date"
|
|
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
placeholder="请选择报价日期"
|
|
|
|
|
:disabled="isView"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="有效期起" prop="validFrom">
|
|
|
|
|
<el-date-picker clearable v-model="form.validFrom" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择有效期起" />
|
|
|
|
|
<el-date-picker
|
|
|
|
|
clearable
|
|
|
|
|
v-model="form.validFrom"
|
|
|
|
|
type="date"
|
|
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
placeholder="请选择有效期起"
|
|
|
|
|
:disabled="isView"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="有效期止" prop="validTo">
|
|
|
|
|
<el-date-picker clearable v-model="form.validTo" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择有效期止" />
|
|
|
|
|
<el-date-picker
|
|
|
|
|
clearable
|
|
|
|
|
v-model="form.validTo"
|
|
|
|
|
type="date"
|
|
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
placeholder="请选择有效期止"
|
|
|
|
|
:disabled="isView"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="交货期(天)" prop="deliveryPeriod">
|
|
|
|
|
<!-- 使用数字输入框,禁用随表单统一控制 -->
|
|
|
|
|
<el-input-number v-model="form.deliveryPeriod" :min="0" :precision="0" style="width: 100%" />
|
|
|
|
|
<el-input-number v-model="form.deliveryPeriod" :min="0" :precision="0" :disabled="isView" style="width: 100%" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="交货方式" prop="deliveryMethod">
|
|
|
|
|
<el-input v-model="form.deliveryMethod" placeholder="请输入交货方式" />
|
|
|
|
|
<el-input v-model="form.deliveryMethod" placeholder="请输入交货方式" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="付款方式" prop="paymentMethod">
|
|
|
|
|
<el-select v-model="form.paymentMethod" placeholder="请选择付款方式">
|
|
|
|
|
<el-select v-model="form.paymentMethod" placeholder="请选择付款方式" :disabled="isView">
|
|
|
|
|
<el-option v-for="dict in payment_method" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="币种" prop="currencyType">
|
|
|
|
|
<el-select v-model="form.currencyType" placeholder="请选择币种">
|
|
|
|
|
<el-select v-model="form.currencyType" placeholder="请选择币种" :disabled="isView">
|
|
|
|
|
<el-option v-for="dict in currency_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="含税信息" prop="taxIncludedInfo">
|
|
|
|
|
<el-input v-model="form.taxIncludedInfo" placeholder="如:含13%增值税" />
|
|
|
|
|
<el-input v-model="form.taxIncludedInfo" placeholder="如:含13%增值税" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="税率(%)" prop="taxRate">
|
|
|
|
|
<!-- 使用数字输入框(两位小数,步长0.01) -->
|
|
|
|
|
<el-input-number v-model="form.taxRate" :min="0" :precision="2" :step="0.01" style="width: 100%" />
|
|
|
|
|
<el-input-number v-model="form.taxRate" :min="0" :precision="2" :step="0.01" :disabled="isView" style="width: 100%" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
|
|
@ -269,7 +290,13 @@
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="客户联系人" prop="customerContactId">
|
|
|
|
|
<el-select v-model="form.customerContactId" filterable placeholder="请选择客户联系人" @change="onCustomerContactChanged">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="form.customerContactId"
|
|
|
|
|
filterable
|
|
|
|
|
placeholder="请选择客户联系人"
|
|
|
|
|
@change="onCustomerContactChanged"
|
|
|
|
|
:disabled="isView"
|
|
|
|
|
>
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="c in customerContactList"
|
|
|
|
|
:key="c.contactId"
|
|
|
|
|
@ -281,12 +308,12 @@
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="客户联系电话" prop="customerContactPhone">
|
|
|
|
|
<el-input v-model="form.customerContactPhone" placeholder="客户联系电话" />
|
|
|
|
|
<el-input v-model="form.customerContactPhone" placeholder="客户联系电话" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="客户邮箱" prop="customerContactEmail">
|
|
|
|
|
<el-input v-model="form.customerContactEmail" placeholder="客户邮箱" />
|
|
|
|
|
<el-input v-model="form.customerContactEmail" placeholder="客户邮箱" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
@ -295,7 +322,7 @@
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="计划标识" prop="supplierPlanFlag">
|
|
|
|
|
<el-radio-group v-model="supplierPlanFlag" @change="onSupplierPlanFlagChanged">
|
|
|
|
|
<el-radio-group v-model="supplierPlanFlag" @change="onSupplierPlanFlagChanged" :disabled="isView">
|
|
|
|
|
<el-radio value="1">计划内</el-radio>
|
|
|
|
|
<el-radio value="2">计划外</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
@ -303,24 +330,24 @@
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12" v-if="supplierPlanFlag === '1'">
|
|
|
|
|
<el-form-item label="供应商" prop="supplierContactId">
|
|
|
|
|
<el-select v-model="form.supplierContactId" filterable placeholder="请选择供应商" @change="onSupplierChanged">
|
|
|
|
|
<el-select v-model="form.supplierContactId" filterable placeholder="请选择供应商" @change="onSupplierChanged" :disabled="isView">
|
|
|
|
|
<el-option v-for="s in supplierList" :key="s.supplierId" :label="s.supplierName" :value="s.supplierId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="供货方联系人" prop="supplierContactName">
|
|
|
|
|
<el-input v-model="form.supplierContactName" placeholder="供货方联系人" />
|
|
|
|
|
<el-input v-model="form.supplierContactName" placeholder="供货方联系人" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="供货方联系电话" prop="supplierContactPhone">
|
|
|
|
|
<el-input v-model="form.supplierContactPhone" placeholder="供货方联系电话" />
|
|
|
|
|
<el-input v-model="form.supplierContactPhone" placeholder="供货方联系电话" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="供货方邮箱" prop="supplierContactEmail">
|
|
|
|
|
<el-input v-model="form.supplierContactEmail" placeholder="供货方邮箱" />
|
|
|
|
|
<el-input v-model="form.supplierContactEmail" placeholder="供货方邮箱" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
@ -328,15 +355,22 @@
|
|
|
|
|
<el-divider content-position="left">附件与备注</el-divider>
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="附件">
|
|
|
|
|
<el-button type="primary" plain icon="Upload" @click="handleFile" :disabled="isView">上传附件</el-button>
|
|
|
|
|
<el-form-item label="附件" prop="ossId">
|
|
|
|
|
<FileUpload
|
|
|
|
|
v-model="ossIdString"
|
|
|
|
|
:limit="5"
|
|
|
|
|
:fileSize="20"
|
|
|
|
|
:fileType="['doc', 'docx', 'pdf', 'xls', 'xlsx']"
|
|
|
|
|
:disabled="isView"
|
|
|
|
|
:isShowTip="true"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
|
|
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
|
|
|
|
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" :disabled="isView" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
@ -398,21 +432,6 @@
|
|
|
|
|
</el-card>
|
|
|
|
|
<ApprovalRecord ref="approvalRecordRef" />
|
|
|
|
|
<SubmitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" />
|
|
|
|
|
<!-- 附件上传对话框 -->
|
|
|
|
|
<el-dialog v-model="dialog.visible" :title="dialog.title" width="500px" append-to-body>
|
|
|
|
|
<el-form label-width="80px">
|
|
|
|
|
<el-form-item label="文件名">
|
|
|
|
|
<fileUpload v-if="type === 0" v-model="ossFileModel" />
|
|
|
|
|
<imageUpload v-if="type === 1" v-model="ossFileModel" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<div class="dialog-footer">
|
|
|
|
|
<el-button type="primary" @click="submitOss">确 定</el-button>
|
|
|
|
|
<el-button @click="cancel">取 消</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
@ -478,7 +497,8 @@ const form = reactive<CrmQuoteInfoForm>({
|
|
|
|
|
supplierContactName: undefined,
|
|
|
|
|
supplierContactPhone: undefined,
|
|
|
|
|
supplierContactEmail: undefined,
|
|
|
|
|
remark: undefined
|
|
|
|
|
remark: undefined,
|
|
|
|
|
ossId: undefined
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const rules = {
|
|
|
|
|
@ -759,22 +779,16 @@ const generateQuoteCode = async () => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 附件上传对话框(UI占位,复用通用上传组件)
|
|
|
|
|
const type = ref(0);
|
|
|
|
|
const dialog = reactive({ visible: false, title: '' });
|
|
|
|
|
const ossFileModel = ref<string | string[] | undefined>(undefined);
|
|
|
|
|
const handleFile = () => {
|
|
|
|
|
type.value = 0;
|
|
|
|
|
dialog.visible = true;
|
|
|
|
|
dialog.title = '上传报价附件';
|
|
|
|
|
};
|
|
|
|
|
const submitOss = () => {
|
|
|
|
|
dialog.visible = false;
|
|
|
|
|
proxy?.$modal.msgSuccess('附件已更新');
|
|
|
|
|
};
|
|
|
|
|
const cancel = () => {
|
|
|
|
|
dialog.visible = false;
|
|
|
|
|
};
|
|
|
|
|
// 附件ID字符串转换(用于FileUpload组件)
|
|
|
|
|
const ossIdString = computed({
|
|
|
|
|
get() {
|
|
|
|
|
const v = (form as any).ossId;
|
|
|
|
|
return v === undefined || v === null ? '' : String(v);
|
|
|
|
|
},
|
|
|
|
|
set(val: string) {
|
|
|
|
|
(form as any).ossId = val || undefined;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
const submitForm = (status: string, mode: boolean) => {
|
|
|
|
|
quoteFormRef.value?.validate(async (valid: boolean) => {
|
|
|
|
|
if (!valid) return;
|
|
|
|
|
@ -873,6 +887,7 @@ onMounted(async () => {
|
|
|
|
|
form.quoteId = id as any;
|
|
|
|
|
const res = await getCrmQuoteInfo(id as any);
|
|
|
|
|
Object.assign(form, res.data);
|
|
|
|
|
console.log('crmQuoteInfo/edit.vue数据加载成功,ossId:', form.ossId); // 添加调试日志
|
|
|
|
|
// 编辑模式:已存在编号则禁用生成
|
|
|
|
|
isCodeGenerated.value = !!form.quoteCode;
|
|
|
|
|
// 根据已有联系人ID回填姓名、电话、邮箱(若后端已返回则保持)
|
|
|
|
|
|