更新新增市场经营--合同信息

This commit is contained in:
mkm 2024-04-19 11:51:14 +08:00
parent 2506f3e189
commit 9045ce63a4
2 changed files with 524 additions and 479 deletions

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
@ -25,7 +26,8 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同编号" prop="contract_code"> <el-form-item label="合同编号" prop="contract_code">
<el-input v-model="formData.contract_code" clearable placeholder="请输入合同编号" v-type="'code'" /> <el-input v-model="formData.contract_code" clearable placeholder="请输入合同编号"
v-type="'code'" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -57,31 +59,35 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="业务性质" prop="business_nature"> <el-form-item label="业务性质" prop="business_nature">
<el-select class='flex-1' v-model="formData.business_nature"> <el-select class="flex-1" v-model="formData.business_nature">
<el-option v-for="(item, index) in dictData.cost_consultation_business_nature " <el-option v-for="(
:key="index" :label="item.name" :value="parseInt(item.value)"></el-option> item, index
</el-select> ) in dictData.cost_consultation_business_nature" :key="index" :label="item.name"
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="行业性质" prop="industry_nature">
<el-select class=' flex-1' v-model="formData.industry_nature">
<el-option v-for="(item, index) in dictData.cost_consultation_industry_nature "
:key="index" :label="item.name" :value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="资金来源" prop="fund_sources">
<el-select class=' flex-1' v-model="formData.fund_sources">
<el-option v-for="(item, index) in dictData.money_source " :key="index" :label="item.name"
:value="parseInt(item.value)"></el-option> :value="parseInt(item.value)"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="行业性质" prop="industry_nature">
<el-select class="flex-1" v-model="formData.industry_nature">
<el-option v-for="(
item, index
) in dictData.cost_consultation_industry_nature" :key="index" :label="item.name"
:value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="资金来源" prop="fund_sources">
<el-select class="flex-1" v-model="formData.fund_sources">
<el-option v-for="(item, index) in dictData.money_source" :key="index"
:label="item.name" :value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="建设区域" prop="const_area"> <el-form-item label="建设区域" prop="const_area">
<el-select class=' flex-1' v-model="formData.const_area"> <el-select class="flex-1" v-model="formData.const_area">
<el-option v-for="(item, index) in dictData.const_area" :key="index" :label="item.name" <el-option v-for="(item, index) in dictData.const_area" :key="index" :label="item.name"
:value="parseInt(item.value)"></el-option> :value="parseInt(item.value)"></el-option>
</el-select> </el-select>
@ -133,7 +139,8 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="履约金"> <el-form-item label="履约金">
<el-input v-model="formData.performance_money" clearable placeholder="请输入履约金" type="number" /> <el-input v-model="formData.performance_money" clearable placeholder="请输入履约金"
type="number" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -184,7 +191,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="实施方式"> <el-form-item label="实施方式">
<el-select class=' flex-1' v-model="formData.implement_method"> <el-select class="flex-1" v-model="formData.implement_method">
<el-option v-for="(item, index) in dictData.cost_consultation_way" :key="index" <el-option v-for="(item, index) in dictData.cost_consultation_way" :key="index"
:label="item.name" :value="parseInt(item.value)"></el-option> :label="item.name" :value="parseInt(item.value)"></el-option>
</el-select> </el-select>
@ -192,7 +199,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="盖章名称"> <el-form-item label="盖章名称">
<el-select class=' flex-1' v-model="formData.seal_name"> <el-select class="flex-1" v-model="formData.seal_name">
<el-option v-for="(item, index) in dictData.cost_consultation_seal_name" :key="index" <el-option v-for="(item, index) in dictData.cost_consultation_seal_name" :key="index"
:label="item.name" :value="parseInt(item.value)"></el-option> :label="item.name" :value="parseInt(item.value)"></el-option>
</el-select> </el-select>
@ -213,7 +220,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="文件类型"> <el-form-item label="文件类型">
<el-select class='flex-1' v-model="formData.file_type"> <el-select class="flex-1" v-model="formData.file_type">
<el-option v-for="(item, index) in dictData.cost_consultation_file_type" :key="index" <el-option v-for="(item, index) in dictData.cost_consultation_file_type" :key="index"
:label="item.name" :value="parseInt(item.value)"></el-option> :label="item.name" :value="parseInt(item.value)"></el-option>
</el-select> </el-select>
@ -232,7 +239,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="骑缝盖章"> <el-form-item label="骑缝盖章">
<el-select class='flex-1' v-model="formData.plance_seal"> <el-select class="flex-1" v-model="formData.plance_seal">
<el-option v-for="(item, index) in dictData.isqfgz" :key="index" :label="item.name" <el-option v-for="(item, index) in dictData.isqfgz" :key="index" :label="item.name"
:value="parseInt(item.value)"></el-option> :value="parseInt(item.value)"></el-option>
</el-select> </el-select>
@ -267,7 +274,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
<createUserLable :form-data='formData' name='录入' flag></createUserLable> <createUserLable :form-data="formData" name="录入" flag></createUserLable>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="附件"> <el-form-item label="附件">
<upload-annex :form-data="formData" /> <upload-annex :form-data="formData" />
@ -284,110 +291,113 @@
</dialogTable> </dialogTable>
</el-dialog> </el-dialog>
<el-dialog v-model="showDialog2" title="选择甲方签订单位" width="70%"> <el-dialog v-model="showDialog2" title="选择甲方签订单位" width="70%">
<dialogTable :config="marketing_custom" @customEvent="customEvent1"> <dialogTable :config="marketing_custom" @customEvent="customEvent1"> </dialogTable>
</dialogTable>
</el-dialog> </el-dialog>
</popup> </popup>
</div> </div>
</template> </template>
<script lang="ts" setup name="marketingContractEdit"> <script lang="ts" setup name="marketingContractEdit">
import type { FormInstance } from "element-plus"; import type { FormInstance } from 'element-plus'
import Popup from "@/components/popup/index.vue"; import Popup from '@/components/popup/index.vue'
import { import {
apiMarketingContractAdd, apiMarketingContractAdd,
apiMarketingContractEdit, apiMarketingContractEdit,
apiMarketingContractDetail, apiMarketingContractDetail
} from "@/api/marketing_contract"; } from '@/api/marketing_contract'
import { timeFormat } from "@/utils/util"; import { timeFormat } from '@/utils/util'
import type { PropType } from "vue"; import type { PropType } from 'vue'
import { marketing_framework_agreement, marketing_custom } from "@/components/dialogTable/dialogTableConfig"; import {
marketing_framework_agreement,
marketing_custom
} from '@/components/dialogTable/dialogTableConfig'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}), default: () => ({})
}, },
deptList: Array deptList: Array
})
}); const emit = defineEmits(['success', 'close'])
const emit = defineEmits(["success", "close"]); const formRef = shallowRef<FormInstance>()
const formRef = shallowRef<FormInstance>(); const popupRef = shallowRef<InstanceType<typeof Popup>>()
const popupRef = shallowRef<InstanceType<typeof Popup>>(); const mode = ref('add')
const mode = ref("add");
const showDialog = ref(false) const showDialog = ref(false)
const showDialog1 = ref(false) const showDialog1 = ref(false)
const showDialog2 = ref(false) const showDialog2 = ref(false)
const personnel = ref(null) const personnel = ref(null)
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == "edit" return mode.value == 'edit' ? '编辑市场经营--合同信息' : '新增市场经营--合同信息'
? "编辑市场经营--合同信息" })
: "新增市场经营--合同信息";
});
// //
const formData = reactive({ const formData = reactive({
id: "", id: '',
related_contract_id: "", related_contract_id: '',
framework_agreement_name: "", framework_agreement_name: '',
contract_type: "", contract_type: '',
contract_name: "", contract_name: '',
contract_code: "", contract_code: '',
part_a: "", part_a: '',
part_a_name: "", part_a_name: '',
part_a_contact: "", part_a_contact: '',
part_a_address: "", part_a_address: '',
part_b: "", part_b: '',
part_b_signatory: "", part_b_signatory: '',
part_b_signatory_name: "", part_b_signatory_name: '',
business_nature: "", business_nature: '',
industry_nature: "", industry_nature: '',
fund_sources: "", fund_sources: '',
const_area: "", const_area: '',
agreement_nature: "", agreement_nature: '',
project_money: "", project_money: '',
project_scale: "", project_scale: '',
signed_amount: "", signed_amount: '',
signed_rate: "", signed_rate: '',
service_duration: "", service_duration: '',
start_date: "", start_date: '',
end_date: "", end_date: '',
performance_money: "", performance_money: '',
performance_money_expiration_time: "", performance_money_expiration_time: '',
payment_method: "", payment_method: '',
content: "", content: '',
annex: "", annex: '',
signed_dept: "", signed_dept: '',
signed_head: "", signed_head: '',
signed_head_name: "", signed_head_name: '',
supervise_dept: "", supervise_dept: '',
project_manager: "", project_manager: '',
project_manager_name: "", project_manager_name: '',
implement_method: "", implement_method: '',
seal_name: "", seal_name: '',
is_limit: "", is_limit: '',
limit_num: "", limit_num: '',
file_type: "", file_type: '',
seal_num: "", seal_num: '',
seal_user: "", seal_user: '',
seal_user_name: "", seal_user_name: '',
plance_seal: "", plance_seal: '',
send_date: "", send_date: '',
mailing_number: "", mailing_number: '',
review_status: "", review_status: '',
status: "", status: '',
create_user: "", create_user: ''
}); })
const customEvent = (e) => { const customEvent = (e) => {
formData.related_contract_id = e.id formData.related_contract_id = e.id
formData.framework_agreement_name = e.contract_name formData.framework_agreement_name = e.contract_name
formData.part_a_name = e.part_a_name
formData.part_a = e.part_a
formData.part_a_address = e.part_a_address
formData.part_a_contact = e.part_a_contact
formData.part_b = e.part_b
formData.part_b_signatory = e.part_b_signatory
formData.part_b_signatory_name = e.part_b_signatory_name
formData.business_nature = e.business_nature
showDialog1.value = false showDialog1.value = false
} }
@ -397,15 +407,12 @@ const customEvent1 = (e) => {
showDialog2.value = false showDialog2.value = false
} }
let value
let value;
const userclick = async (val) => { const userclick = async (val) => {
showDialog.value = true showDialog.value = true
value = val value = val
await nextTick() await nextTick()
personnel.value.open() personnel.value.open()
} }
// //
@ -428,148 +435,155 @@ const formRules = reactive<any>({
related_contract_id: [ related_contract_id: [
{ {
required: true, required: true,
message: "请输入关联主合同id", message: '请输入关联主合同id',
trigger: ["blur"], trigger: ['blur']
}, }
],
signed_head_name: [
{
required: true,
message: '请选择签订负责人',
trigger: ['blur']
}
], ],
contract_type: [ contract_type: [
{ {
required: true, required: true,
message: "请输入合同类型", message: '请输入合同类型',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
contract_name: [ contract_name: [
{ {
required: true, required: true,
message: "请输入合同名称", message: '请输入合同名称',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
contract_code: [ contract_code: [
{ {
required: true, required: true,
message: "请输入合同编号", message: '请输入合同编号',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
part_a: [ part_a: [
{ {
required: true, required: true,
message: "请输入甲方签约单位", message: '请输入甲方签约单位',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
part_a_contact: [ part_a_contact: [
{ {
required: true, required: true,
message: "请输入联系人", message: '请输入联系人',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
part_a_address: [ part_a_address: [
{ {
required: true, required: true,
message: "请输入业主地址", message: '请输入业主地址',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
part_b: [ part_b: [
{ {
required: true, required: true,
message: "请输入乙方签约单位", message: '请输入乙方签约单位',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
part_b_signatory: [ part_b_signatory: [
{ {
required: true, required: true,
message: "请输入乙方签约人", message: '请输入乙方签约人',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
business_nature: [ business_nature: [
{ {
required: true, required: true,
message: "请输入业务性质", message: '请输入业务性质',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
industry_nature: [ industry_nature: [
{ {
required: true, required: true,
message: "请输入行业性质", message: '请输入行业性质',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
fund_sources: [ fund_sources: [
{ {
required: true, required: true,
message: "请输入资金来源", message: '请输入资金来源',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
const_area: [ const_area: [
{ {
required: true, required: true,
message: "请输入建设区域", message: '请输入建设区域',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
agreement_nature: [ agreement_nature: [
{ {
required: true, required: true,
message: "请输入协议性质", message: '请输入协议性质',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
project_money: [ project_money: [
{ {
required: true, required: true,
message: "请输入工程总投资", message: '请输入工程总投资',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
project_scale: [ project_scale: [
{ {
required: true, required: true,
message: "请输入工程规模及概况", message: '请输入工程规模及概况',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
signed_amount: [ signed_amount: [
{ {
required: true, required: true,
message: "请输入签订金额", message: '请输入签订金额',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
signed_rate: [ signed_rate: [
{ {
required: true, required: true,
message: "请输入合同签订费率", message: '请输入合同签订费率',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
service_duration: [ service_duration: [
{ {
required: true, required: true,
message: "请输入合同服务工期", message: '请输入合同服务工期',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
start_date: [ start_date: [
{ {
required: true, required: true,
message: "请输入计划开始日期", message: '请输入计划开始日期',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
end_date: [ end_date: [
{ {
required: true, required: true,
message: "请输入计划结束日期", message: '请输入计划结束日期',
trigger: ["blur"], trigger: ['blur']
}, },
{ {
validator: chekcDate, validator: chekcDate,
@ -579,194 +593,194 @@ const formRules = reactive<any>({
performance_money: [ performance_money: [
{ {
required: true, required: true,
message: "请输入履约金", message: '请输入履约金',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
performance_money_expiration_time: [ performance_money_expiration_time: [
{ {
required: true, required: true,
message: "请输入履约金到期时间", message: '请输入履约金到期时间',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
payment_method: [ payment_method: [
{ {
required: true, required: true,
message: "请输入合同付款方式", message: '请输入合同付款方式',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
content: [ content: [
{ {
required: true, required: true,
message: "请输入合同主要内容", message: '请输入合同主要内容',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
signed_dept: [ signed_dept: [
{ {
required: true, required: true,
message: "请输入签订部门", message: '请输入签订部门',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
signed_head: [ signed_head: [
{ {
required: true, required: true,
message: "请输入签订负责人", message: '请输入签订负责人',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
supervise_dept: [ supervise_dept: [
{ {
required: true, required: true,
message: "请输入监管部门", message: '请输入监管部门',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
project_manager: [ project_manager: [
{ {
required: true, required: true,
message: "请输入项目总监/经理", message: '请输入项目总监/经理',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
implement_method: [ implement_method: [
{ {
required: true, required: true,
message: "请输入实施方式", message: '请输入实施方式',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
seal_name: [ seal_name: [
{ {
required: true, required: true,
message: "请输入盖章名称", message: '请输入盖章名称',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
is_limit: [ is_limit: [
{ {
required: true, required: true,
message: "请输入是否限制", message: '请输入是否限制',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
limit_num: [ limit_num: [
{ {
required: true, required: true,
message: "请输入限制次数", message: '请输入限制次数',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
file_type: [ file_type: [
{ {
required: true, required: true,
message: "请输入文件类型", message: '请输入文件类型',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
seal_num: [ seal_num: [
{ {
required: true, required: true,
message: "请输入盖章份数", message: '请输入盖章份数',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
seal_user: [ seal_user: [
{ {
required: true, required: true,
message: "请输入盖章人", message: '请输入盖章人',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
plance_seal: [ plance_seal: [
{ {
required: true, required: true,
message: "请输入骑缝盖章", message: '请输入骑缝盖章',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
send_date: [ send_date: [
{ {
required: true, required: true,
message: "请输入发出日期", message: '请输入发出日期',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
mailing_number: [ mailing_number: [
{ {
required: true, required: true,
message: "请输入邮寄编号", message: '请输入邮寄编号',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
review_status: [ review_status: [
{ {
required: true, required: true,
message: "请输入评审状态", message: '请输入评审状态',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
status: [ status: [
{ {
required: true, required: true,
message: "请输入立项状态", message: '请输入立项状态',
trigger: ["blur"], trigger: ['blur']
}, }
], ],
create_user: [ create_user: [
{ {
required: true, required: true,
message: "请输入录入人", message: '请输入录入人',
trigger: ["blur"], trigger: ['blur']
}, }
], ]
}); })
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key]; formData[key] = data[key]
}
} }
} }
};
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingContractDetail({ const data = await apiMarketingContractDetail({
id: row.id, id: row.id
}); })
setFormData(data); setFormData(data)
}; }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate(); await formRef.value?.validate()
const data = { ...formData }; const data = { ...formData }
mode.value == "edit" mode.value == 'edit'
? await apiMarketingContractEdit(data) ? await apiMarketingContractEdit(data)
: await apiMarketingContractAdd(data); : await apiMarketingContractAdd(data)
popupRef.value?.close(); popupRef.value?.close()
emit("success"); emit('success')
}; }
// //
const open = (type = "add") => { const open = (type = 'add') => {
mode.value = type; mode.value = type
popupRef.value?.open(); popupRef.value?.open()
}; }
// //
const handleClose = () => { const handleClose = () => {
emit("close"); emit('close')
}; }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail, getDetail
}); })
</script> </script>

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules">
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
@ -25,7 +26,6 @@
v-for="item in dictData.custom_important_level"> v-for="item in dictData.custom_important_level">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -39,7 +39,7 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="客户分类" prop="category"> <el-form-item label="客户分类" prop="category">
<el-select v-model="formData.category" placeholder="请选择客户分类" class="flex-1"> <el-select v-model="formData.category" placeholder="请选择客户分类" class="flex-1">
<el-option :label="item.name" :value="(item.value)" <el-option :label="item.name" :value="item.value"
v-for="item in dictData.custom_category"> v-for="item in dictData.custom_category">
</el-option> </el-option>
</el-select> </el-select>
@ -95,18 +95,18 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="所在省份" prop="province"> <el-form-item label="所在省份" prop="province">
<el-select v-model="formData.province" clearable placeholder="请选择省" @change="province_change" <el-select v-model="formData.province" clearable placeholder="请选择省"
class="flex-1"> @change="province_change" class="flex-1">
<el-option v-for="(item, index) in datas.provinceOptions" :key="index" <el-option v-for="(item, index) in datas.provinceOptions" :key="index"
:label="item.province_name" :value="(item.province_code)" /> :label="item.province_name" :value="item.province_code" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="所在市区" prop="city"> <el-form-item label="所在市区" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1"> <el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index" :label="item.city_name" <el-option v-for="(item, index) in datas.cityOptions" :key="index"
:value="(item.city_code)" /> :label="item.city_name" :value="item.city_code" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -144,7 +144,6 @@
</el-col> </el-col>
</el-row> </el-row>
<formTable :formData="formData.detail" :config="tableConfig" :dictData="dictData"> <formTable :formData="formData.detail" :config="tableConfig" :dictData="dictData">
</formTable> </formTable>
</el-form> </el-form>
@ -155,11 +154,16 @@
<script lang="ts" setup name="marketingCustomEdit"> <script lang="ts" setup name="marketingCustomEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiMarketingCustomAdd, apiMarketingCustomEdit, apiMarketingCustomDetail, apiMarketingCustomContactsLists, apiMarketingCustomContactsDelete } from '@/api/marketing_custom' import {
import { checkPhone, checkEmail } from "@/utils/validate" apiMarketingCustomAdd,
apiMarketingCustomEdit,
apiMarketingCustomDetail,
apiMarketingCustomContactsLists,
apiMarketingCustomContactsDelete
} from '@/api/marketing_custom'
import { checkPhone, checkEmail } from '@/utils/validate'
import type { PropType } from 'vue' import type { PropType } from 'vue'
import { apiCityList, apiProvinceList } from "@/api/common"; import { apiCityList, apiProvinceList } from '@/api/common'
defineProps({ defineProps({
dictData: { dictData: {
@ -173,7 +177,6 @@ const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--客户信息' : '新增市场经营--客户信息' return mode.value == 'edit' ? '编辑市场经营--客户信息' : '新增市场经营--客户信息'
@ -181,8 +184,8 @@ const popupTitle = computed(() => {
const datas = reactive({ const datas = reactive({
provinceOptions: [], provinceOptions: [],
cityOptions: [], cityOptions: []
}); })
// //
const formData = reactive({ const formData = reactive({
@ -214,211 +217,244 @@ const formData = reactive({
create_time: '', create_time: '',
detail: [ detail: [
{ {
"name": "", name: '',
"dept": "", dept: '',
"gender": 0, gender: 0,
"job": "", job: '',
"mobile": "", mobile: '',
"telephone": "", telephone: '',
"email": "", email: '',
"qq": "", qq: '',
"remark": "" remark: ''
} }
] ]
}) })
const tableConfig = reactive({
const tableConfig = reactive( title: '联系人',
{
title: "联系人",
tableConfig: [ tableConfig: [
{ {
label: "姓名", label: '姓名',
value: 'name', value: 'name'
}, },
{ {
label: "部门", label: '部门',
value: 'dept', value: 'dept'
}, },
{ {
label: "性别", label: '性别',
value: 'gender', value: 'gender',
select: [{ select: [
{
name: '男', name: '男',
value: 0 value: 0
}, },
{ {
name: '女', name: '女',
value: 1 value: 1
}, }
] ]
}, },
{ {
label: "职务", label: '职务',
value: 'job', value: 'job'
}, },
{ {
label: "手机", label: '手机',
value: 'mobile', value: 'mobile',
check: ['detail', checkPhone] check: ['detail', checkPhone]
}, },
{ {
label: "电话", label: '电话',
value: 'telephone', value: 'telephone'
}, },
{ {
label: "邮箱", label: '邮箱',
value: 'email', value: 'email',
check: ['detail', checkEmail] check: ['detail', checkEmail]
}, },
{ {
label: "qq", label: 'qq',
value: 'qq', value: 'qq'
}, },
{ {
label: "备注", label: '备注',
value: 'remark', value: 'remark'
},
],
deleteApi: apiMarketingCustomContactsDelete,
} }
) ],
deleteApi: apiMarketingCustomContactsDelete
})
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
name: [{ name: [
{
required: true, required: true,
message: '请输入客户名称', message: '请输入客户名称',
trigger: ['blur'] trigger: ['blur']
}], }
sub_name: [{ ],
sub_name: [
{
required: true, required: true,
message: '请输入客户简称', message: '请输入客户简称',
trigger: ['blur'] trigger: ['blur']
}], }
code: [{ ],
code: [
{
required: true, required: true,
message: '请输入客户编号', message: '请输入客户编号',
trigger: ['blur'] trigger: ['blur']
}], }
important_level: [{ ],
important_level: [
{
required: true, required: true,
message: '请输入重要等级', message: '请输入重要等级',
trigger: ['blur'] trigger: ['blur']
}], }
dept_id: [{ ],
dept_id: [
{
required: true, required: true,
message: '请输入负责部门', message: '请输入负责部门',
trigger: ['blur'] trigger: ['blur']
}], }
category: [{ ],
category: [
{
required: true, required: true,
message: '请输入客户分类', message: '请输入客户分类',
trigger: ['blur'] trigger: ['blur']
}], }
],
invoice_company: [{ invoice_company: [
{
required: true, required: true,
message: '请输入开票单位', message: '请输入开票单位',
trigger: ['blur'] trigger: ['blur']
}], }
taxpayer_identification_number: [{ ],
taxpayer_identification_number: [
{
required: true, required: true,
message: '请输入纳税人识别号', message: '请输入纳税人识别号',
trigger: ['blur'] trigger: ['blur']
}], }
opening_bank: [{ ],
opening_bank: [
{
required: true, required: true,
message: '请输入开户银行', message: '请输入开户银行',
trigger: ['blur'] trigger: ['blur']
}], }
invoice_contact: [{ ],
invoice_contact: [
{
required: true, required: true,
message: '请输入开票联系人', message: '请输入开票联系人',
trigger: ['blur'] trigger: ['blur']
}], }
invoice_company_address: [{ ],
invoice_company_address: [
{
required: true, required: true,
message: '请输入开票单位注册地址', message: '请输入开票单位注册地址',
trigger: ['blur'] trigger: ['blur']
}], }
invoice_company_telephone: [{ ],
invoice_company_telephone: [
{
required: true, required: true,
message: '请输入开票单位电话', message: '请输入开票单位电话',
trigger: ['blur'] trigger: ['blur']
}], }
opening_bank_account: [{ ],
opening_bank_account: [
{
required: true, required: true,
message: '请输入开户账号', message: '请输入开户账号',
trigger: ['blur'] trigger: ['blur']
}], }
email: [{ ],
required: true, // email: [{
message: '请输入电子邮箱', // required: true,
trigger: ['blur'] // message: '',
}, // trigger: ['blur']
// },
// {
// validator: checkEmail,
// trigger: ['blur']
// }],
province: [
{ {
validator: checkEmail,
trigger: ['blur']
}],
province: [{
required: true, required: true,
message: '请输入省份', message: '请输入省份',
trigger: ['blur'] trigger: ['blur']
}], }
city: [{ ],
city: [
{
required: true, required: true,
message: '请输入城市', message: '请输入城市',
trigger: ['blur'] trigger: ['blur']
}], }
post_code: [{ ],
post_code: [
{
required: true, required: true,
message: '请输入邮编', message: '请输入邮编',
trigger: ['blur'] trigger: ['blur']
}], }
telephone: [{ ],
required: true, // telephone: [{
message: '请输入电话', // required: true,
trigger: ['blur'] // message: '',
}], // trigger: ['blur']
// }],
// { // {
// validator: checkPhone, // validator: checkPhone,
// trigger: ['blur'] // trigger: ['blur']
// }], // }],
fax: [{ fax: [
{
required: true, required: true,
message: '请输入传真', message: '请输入传真',
trigger: ['blur'] trigger: ['blur']
}], }
website: [{ ],
website: [
{
required: true, required: true,
message: '请输入网址', message: '请输入网址',
trigger: ['blur'] trigger: ['blur']
}], }
address: [{ ],
address: [
{
required: true, required: true,
message: '请输入地址', message: '请输入地址',
trigger: ['blur'] trigger: ['blur']
}], }
create_user: [{ ],
create_user: [
{
required: true, required: true,
message: '请输入录入人', message: '请输入录入人',
trigger: ['blur'] trigger: ['blur']
}], }
create_time: [{ ],
create_time: [
{
required: true, required: true,
message: '请输入录入日期', message: '请输入录入日期',
trigger: ['blur'] trigger: ['blur']
}] }
]
}) })
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
@ -427,11 +463,9 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key] formData[key] = data[key]
} }
} }
let res = await apiMarketingCustomContactsLists({ custom_id: data.id }) const res = await apiMarketingCustomContactsLists({ custom_id: data.id })
formData.detail = res.lists formData.detail = res.lists
getCityList(); getCityList()
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
@ -441,14 +475,11 @@ const getDetail = async (row: Record<string, any>) => {
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData }
mode.value == 'edit' mode.value == 'edit' ? await apiMarketingCustomEdit(data) : await apiMarketingCustomAdd(data)
? await apiMarketingCustomEdit(data)
: await apiMarketingCustomAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
@ -465,18 +496,18 @@ const handleClose = () => {
} }
const getProvinceList = async () => { const getProvinceList = async () => {
const data = await apiProvinceList({}); const data = await apiProvinceList({})
datas["provinceOptions"] = data; datas['provinceOptions'] = data
}; }
const getCityList = async () => { const getCityList = async () => {
const data = await apiCityList({ province_code: formData.province }); const data = await apiCityList({ province_code: formData.province })
datas["cityOptions"] = data; datas['cityOptions'] = data
}; }
// //
function province_change (value: string) { function province_change (value: string) {
formData.city = '' formData.city = ''
getCityList(); getCityList()
} }
getProvinceList() getProvinceList()