|
|
|
|
@ -46,10 +46,16 @@
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="客户名称" prop="customerUnitId">
|
|
|
|
|
<el-select v-model="form.customerUnitId" placeholder="请选择客户" filterable @change="handleCustomerChange" style="width: 100%">
|
|
|
|
|
<el-option v-for="customer in customerList" :key="customer.customerId" :label="customer.customerName" :value="customer.customerId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
<el-form-item label="客户名称" prop="customerUnitName">
|
|
|
|
|
<el-autocomplete
|
|
|
|
|
v-model="form.customerUnitName"
|
|
|
|
|
:fetch-suggestions="queryCustomerSuggestions"
|
|
|
|
|
clearable
|
|
|
|
|
placeholder="请输入或选择客户名称"
|
|
|
|
|
style="width: 100%"
|
|
|
|
|
@select="handleCustomerSuggestSelect"
|
|
|
|
|
@blur="onCustomerNameBlur"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
@ -82,8 +88,8 @@
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-table :data="form.detailList" border style="width: 100%">
|
|
|
|
|
<el-table-column type="index" label="序号" width="60" align="center" />
|
|
|
|
|
<el-table-column label="礼品" min-width="200" align="center">
|
|
|
|
|
<el-table-column type="index" label="序号" width="52" align="center" />
|
|
|
|
|
<el-table-column label="礼品" min-width="150" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button
|
|
|
|
|
type="primary"
|
|
|
|
|
@ -92,40 +98,41 @@
|
|
|
|
|
:disabled="routeParams.type === 'view' || routeParams.type === 'approval'"
|
|
|
|
|
@click="openGiftSelect(scope.$index)"
|
|
|
|
|
>
|
|
|
|
|
{{ scope.row.giftName ? `${scope.row.giftCode || ''} ${scope.row.giftName}` : '选择礼品' }}
|
|
|
|
|
{{ scope.row.giftName || '选择礼品' }}
|
|
|
|
|
</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="规格型号" prop="specification" min-width="120" align="center" />
|
|
|
|
|
<el-table-column label="单价(元)" prop="unitPrice" width="100" align="center">
|
|
|
|
|
<el-table-column label="规格型号" prop="specification" min-width="200" align="center" show-overflow-tooltip />
|
|
|
|
|
<el-table-column label="单价(元)" prop="unitPrice" width="92" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
{{ scope.row.unitPrice ? '¥' + scope.row.unitPrice : '-' }}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="库存数量" prop="inventoryQuantity" width="100" align="center" />
|
|
|
|
|
<el-table-column label="申请数量" width="120" align="center">
|
|
|
|
|
<el-table-column label="库存数量" prop="inventoryQuantity" width="92" align="center" />
|
|
|
|
|
<el-table-column label="申请数量" width="128" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input-number
|
|
|
|
|
v-model="scope.row.applicationQuantity"
|
|
|
|
|
:min="1"
|
|
|
|
|
:max="scope.row.inventoryQuantity || 999999"
|
|
|
|
|
size="small"
|
|
|
|
|
style="width: 100%"
|
|
|
|
|
@change="calculateAmount(scope.$index)"
|
|
|
|
|
:disabled="routeParams.type === 'view' || routeParams.type === 'approval'"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="金额(元)" width="120" align="center">
|
|
|
|
|
<el-table-column label="金额(元)" width="104" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
{{ scope.row.giftAmount ? '¥' + scope.row.giftAmount : '-' }}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="备注" min-width="150" align="center">
|
|
|
|
|
<el-table-column label="备注" min-width="140" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input v-model="scope.row.remark" placeholder="备注" :disabled="routeParams.type === 'view' || routeParams.type === 'approval'" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="操作" width="80" align="center" fixed="right" v-if="routeParams.type !== 'view' && routeParams.type !== 'approval'">
|
|
|
|
|
<el-table-column label="操作" width="64" align="center" fixed="right" v-if="routeParams.type !== 'view' && routeParams.type !== 'approval'">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button link type="danger" icon="Delete" @click="handleDeleteDetail(scope.$index)"></el-button>
|
|
|
|
|
</template>
|
|
|
|
|
@ -266,7 +273,7 @@ const rules = reactive({
|
|
|
|
|
applicationCode: [], // 编号由后端自动生成,前端不需要校验
|
|
|
|
|
applicationDate: [{ required: true, message: '申请日期不能为空', trigger: 'change' }],
|
|
|
|
|
applicantId: [{ required: true, message: '申请人不能为空', trigger: 'blur' }],
|
|
|
|
|
customerUnitId: [{ required: true, message: '客户不能为空', trigger: 'change' }]
|
|
|
|
|
customerUnitName: [{ required: true, message: '客户名称不能为空', trigger: ['blur', 'change'] }]
|
|
|
|
|
// 'variables.approverId': [
|
|
|
|
|
// {
|
|
|
|
|
// validator: (rule: any, value: any, callback: any) => {
|
|
|
|
|
@ -341,7 +348,7 @@ const initUserInfo = async () => {
|
|
|
|
|
form.value.applicantId = user.userId;
|
|
|
|
|
form.value.applicantName = user.nickName;
|
|
|
|
|
form.value.applicantDeptId = user.deptId;
|
|
|
|
|
form.value.applicantDeptName = user.dept?.deptName;
|
|
|
|
|
form.value.applicantDeptName = user.deptName;
|
|
|
|
|
// 默认领用人为申请人
|
|
|
|
|
form.value.recipientId = user.userId;
|
|
|
|
|
form.value.recipientName = user.nickName;
|
|
|
|
|
@ -371,12 +378,38 @@ const handleApproverSelectChange = (approverId: number | string) => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 客户选择变更 */
|
|
|
|
|
const handleCustomerChange = (customerId: number | string) => {
|
|
|
|
|
const customer = customerList.value.find((c) => c.customerId === customerId);
|
|
|
|
|
if (customer) {
|
|
|
|
|
form.value.customerUnitName = customer.customerName;
|
|
|
|
|
/** 根据客户名称与档案列表同步 customerUnitId(手填无匹配则清空关联 ID) */
|
|
|
|
|
const syncCustomerUnitIdFromName = () => {
|
|
|
|
|
const name = form.value.customerUnitName?.trim();
|
|
|
|
|
if (!name) {
|
|
|
|
|
form.value.customerUnitId = undefined;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const matched = customerList.value.find((c) => c.customerName?.trim() === name);
|
|
|
|
|
form.value.customerUnitId = matched?.customerId;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
type CustomerNameSuggest = { value: string; customerId: string | number };
|
|
|
|
|
|
|
|
|
|
/** 客户名称联想(档案客户,可点选) */
|
|
|
|
|
const queryCustomerSuggestions = (queryString: string, cb: (rows: CustomerNameSuggest[]) => void) => {
|
|
|
|
|
const q = (queryString || '').trim().toLowerCase();
|
|
|
|
|
const rows = customerList.value
|
|
|
|
|
.filter((c) => c.customerName)
|
|
|
|
|
.filter((c) => !q || String(c.customerName).toLowerCase().includes(q))
|
|
|
|
|
.map((c) => ({ value: c.customerName!, customerId: c.customerId }));
|
|
|
|
|
cb(rows);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 从联想列表选中时写入档案客户 ID */
|
|
|
|
|
const handleCustomerSuggestSelect = (item: CustomerNameSuggest) => {
|
|
|
|
|
form.value.customerUnitName = item.value;
|
|
|
|
|
form.value.customerUnitId = item.customerId;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 失焦保留手输内容并同步关联客户 ID */
|
|
|
|
|
const onCustomerNameBlur = () => {
|
|
|
|
|
syncCustomerUnitIdFromName();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 礼品选择回填 */
|
|
|
|
|
@ -450,6 +483,7 @@ const handleDeleteDetail = (index: number) => {
|
|
|
|
|
const submitForm = async (status: string) => {
|
|
|
|
|
try {
|
|
|
|
|
await formRef.value?.validate();
|
|
|
|
|
syncCustomerUnitIdFromName();
|
|
|
|
|
|
|
|
|
|
// P0-1: 校验业务状态 - 只有草稿状态才能修改
|
|
|
|
|
if (form.value.giftApplyId && form.value.applicationStatus !== '1') {
|
|
|
|
|
|