lanan-system-vue/src/views/base/customer/CustomerMainForm.vue

353 lines
12 KiB
Vue
Raw Normal View History

2024-08-01 17:23:47 +08:00
<template>
2024-08-02 09:55:57 +08:00
<div>
2024-08-01 17:23:47 +08:00
<!-- 对话框(添加 / 修改) -->
2024-08-02 09:55:57 +08:00
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="60%" v-dialogDrag append-to-body>
<el-form size="small" ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading"
2024-08-08 10:56:01 +08:00
label-width="100px">
<el-collapse v-model="activeNames">
2024-08-02 09:55:57 +08:00
<!--客户基本信息面板-->
<el-collapse-item title="客户基本信息" name="1">
2024-08-13 17:01:16 +08:00
<el-row :gutter="20">
<el-col :span="12">
2024-08-02 09:55:57 +08:00
<el-form-item label="客户名称" prop="cusName">
2024-08-08 10:56:01 +08:00
<el-input v-model="formData.cusName" placeholder="请输入客户名称" />
2024-08-02 09:55:57 +08:00
</el-form-item>
</el-col>
2024-08-13 17:01:16 +08:00
<el-col :span="12">
2024-08-02 09:55:57 +08:00
<el-form-item label="客户类型" prop="typeCode">
<el-select v-model="formData.typeCode" placeholder="请选择客户类型">
2024-08-08 10:56:01 +08:00
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DICT_CUS_TYPE)" :key="dict.value"
:label="dict.label" :value="dict.value" />
2024-08-02 09:55:57 +08:00
</el-select>
</el-form-item>
</el-col>
</el-row>
2024-08-13 17:01:16 +08:00
<el-row :gutter="20">
<el-col :span="12">
2024-08-08 10:56:01 +08:00
<el-form-item v-if="formData.typeCode !== '03'" label="身份证号" prop="idCard">
<el-input v-model="formData.idCard" placeholder="请输入客户身份证号" />
2024-08-02 09:55:57 +08:00
</el-form-item>
</el-col>
2024-08-13 17:01:16 +08:00
<el-col :span="12">
2024-08-08 10:56:01 +08:00
<el-form-item v-if="formData.typeCode !== '03'" label="性别" prop="sex">
2024-08-02 09:55:57 +08:00
<el-radio-group v-model="formData.sex">
2024-08-02 18:18:59 +08:00
<el-radio v-for="dict in sexDictDatas" :key="dict.value" :label="dict.value">
2024-08-02 09:55:57 +08:00
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
2024-08-13 17:01:16 +08:00
<el-row :gutter="20">
<el-col :span="12">
2024-08-08 10:56:01 +08:00
<el-form-item v-if="formData.typeCode !== '03'" label="生日" prop="birthday">
<el-date-picker v-model="formData.birthday" type="date" placeholder="选择日期">
2024-08-02 12:32:13 +08:00
</el-date-picker>
2024-08-02 09:55:57 +08:00
</el-form-item>
</el-col>
2024-08-13 17:01:16 +08:00
<el-col :span="12">
2024-08-02 09:55:57 +08:00
<el-form-item label="联系方式" prop="phoneNumber">
2024-08-08 10:56:01 +08:00
<el-input v-model="formData.phoneNumber" placeholder="请输入客户联系方式" />
2024-08-02 09:55:57 +08:00
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="2">
2024-08-13 17:01:16 +08:00
<el-col :span="12">
2024-08-02 09:55:57 +08:00
<el-form-item label="客户来源" prop="dataFrom">
<el-select v-model="formData.dataFrom" placeholder="请选择客户来源">
2024-08-08 10:56:01 +08:00
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DICT_CUS_DATA_FROM)" :key="dict.value"
:label="dict.label" :value="dict.value" />
2024-08-02 09:55:57 +08:00
</el-select>
</el-form-item>
</el-col>
2024-08-13 17:01:16 +08:00
<el-col :span="12">
2024-08-02 09:55:57 +08:00
<el-form-item label="注册方式" prop="inviterType">
<el-select v-model="formData.inviterType" placeholder="请选择注册方式">
2024-08-08 10:56:01 +08:00
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DICT_SIGN_TYPE)" :key="dict.value"
:label="dict.label" :value="dict.value" />
2024-08-02 09:55:57 +08:00
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
2024-08-13 17:01:16 +08:00
<el-col :span="24">
2024-08-02 09:55:57 +08:00
<el-form-item label="联系地址" prop="address">
2024-08-08 10:56:01 +08:00
<el-input type="textarea" v-model="formData.address" placeholder="请输入客户联系地址" />
2024-08-02 09:55:57 +08:00
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!--服务内容折叠面板面板-->
2024-08-08 10:56:01 +08:00
<el-collapse-item v-if="formData.typeCode == '03'" title="服务内容" name="2">
<el-table :data="formData.itemList" border size="small" style="width: 100%">
<el-table-column prop="serContent" align="left" width="180">
2024-08-02 09:55:57 +08:00
<template slot="header">
2024-08-08 10:56:01 +08:00
<i style="color: #409EFF;cursor:pointer" class="el-icon-circle-plus-outline" @click="addItem" />
2024-08-02 09:55:57 +08:00
服务内容
</template>
<template v-slot="scope">
2024-08-02 18:18:59 +08:00
<el-select @change="serviceChange(scope.row)" v-model="scope.row.systemCode" placeholder="请选择服务内容">
2024-08-08 10:56:01 +08:00
<el-option v-for="dict in serviceList" :key="dict.id" :label="dict.name" :value="dict.id" />
2024-08-02 09:55:57 +08:00
</el-select>
</template>
</el-table-column>
2024-08-08 10:56:01 +08:00
<el-table-column prop="serTimeStart" align="center" label="开始日期">
2024-08-02 09:55:57 +08:00
<template v-slot="scope">
2024-08-08 10:56:01 +08:00
<el-date-picker v-model="scope.row.serTimeStart" type="date" placeholder="选择服务开始日期">
2024-08-02 09:55:57 +08:00
</el-date-picker>
</template>
</el-table-column>
2024-08-08 10:56:01 +08:00
<el-table-column prop="serTimeEnd" align="center" label="结束日期">
2024-08-02 09:55:57 +08:00
<template v-slot="scope">
2024-08-08 10:56:01 +08:00
<el-date-picker v-model="scope.row.serTimeEnd" type="date" placeholder="选择服务结束日期">
2024-08-02 09:55:57 +08:00
</el-date-picker>
</template>
</el-table-column>
2024-08-08 10:56:01 +08:00
<el-table-column align="center" width="100" label="操作">
2024-08-02 09:55:57 +08:00
<template v-slot="scope">
2024-08-08 10:56:01 +08:00
<el-button v-if="formData.itemList.length > 1" size="mini" type="text" icon="el-icon-delete"
@click="deleteItem(scope.$index, formData.itemList)">删除</el-button>
2024-08-02 09:55:57 +08:00
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<!--附件-->
2024-08-08 10:56:01 +08:00
<el-collapse-item v-if="formData.typeCode !== '03'" title="身份证件信息" name="3">
2024-08-07 14:46:42 +08:00
<el-row>
<el-col>
<el-form-item>
2024-08-08 10:56:01 +08:00
<ImageUpload v-model="formData.idCardImage" />
2024-08-07 14:46:42 +08:00
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
2024-08-08 10:56:01 +08:00
<el-collapse-item v-if="formData.typeCode == '03'" title="政企客户资料" name="3">
2024-08-07 14:46:42 +08:00
<el-row>
<el-col>
<el-form-item>
2024-08-08 10:56:01 +08:00
<FileUpload v-model="formData.idCardImage" />
2024-08-07 14:46:42 +08:00
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
2024-08-02 09:55:57 +08:00
</el-collapse>
2024-08-07 14:46:42 +08:00
2024-08-01 17:23:47 +08:00
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import * as CustomerMainApi from '@/api/base/customer';
2024-08-08 10:56:01 +08:00
import { getServicePackageList } from "@/api/system/servicePackage";
2024-08-01 17:23:47 +08:00
import ImageUpload from '@/components/ImageUpload';
2024-08-07 14:46:42 +08:00
import FileUpload from '@/components/FileUpload';
2024-08-01 17:23:47 +08:00
import Editor from '@/components/Editor';
2024-08-08 10:56:01 +08:00
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
2024-08-01 17:23:47 +08:00
export default {
name: "CustomerMainForm",
components: {
ImageUpload,
Editor,
2024-08-07 14:46:42 +08:00
FileUpload
2024-08-01 17:23:47 +08:00
},
data() {
return {
// 弹出层标题
dialogTitle: "",
// 是否显示弹出层
dialogVisible: false,
// 表单的加载中1修改时的数据加载2提交的按钮禁用
formLoading: false,
2024-08-02 09:55:57 +08:00
//折叠面板默认展开
2024-08-08 10:56:01 +08:00
activeNames: ['1', '2', '3'],
2024-08-02 18:18:59 +08:00
//类型
2024-08-08 10:56:01 +08:00
typeCode: "",
2024-08-02 18:18:59 +08:00
//企业
2024-08-08 10:56:01 +08:00
deptCode: undefined,
2024-08-02 18:18:59 +08:00
//服务套餐列表
2024-08-08 10:56:01 +08:00
serviceList: [],
2024-08-01 17:23:47 +08:00
// 表单参数
formData: {
id: undefined,
userId: undefined,
2024-08-02 09:55:57 +08:00
typeCode: '01',
2024-08-01 17:23:47 +08:00
deptCode: undefined,
cusName: undefined,
phoneNumber: undefined,
birthday: undefined,
address: undefined,
2024-08-02 18:18:59 +08:00
sex: '1',
2024-08-01 17:23:47 +08:00
idCard: undefined,
idCardImage: undefined,
2024-08-02 09:55:57 +08:00
dataFrom: '08',
2024-08-01 17:23:47 +08:00
nearDoTime: undefined,
nearDoContent: undefined,
inviter: undefined,
2024-08-02 09:55:57 +08:00
inviterType: '01',
2024-08-01 17:23:47 +08:00
status: undefined,
2024-08-08 10:56:01 +08:00
itemList: [
2024-08-02 09:55:57 +08:00
{
2024-08-08 10:56:01 +08:00
systemCode: '',
serContent: '',
serTimeStart: '',
serTimeEnd: ''
2024-08-02 09:55:57 +08:00
}
],
2024-08-01 17:23:47 +08:00
},
// 表单校验
2024-08-02 12:32:13 +08:00
formRules: {
cusName: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
],
typeCode: [
{ required: true, message: '请选择客户类型', trigger: 'change' },
],
phoneNumber: [
{ required: true, message: '请输入客户联系方式', trigger: 'blur' },
],
dataFrom: [
{ required: true, message: '请选择客户来源', trigger: 'change' },
],
inviterType: [
{ required: true, message: '请选择注册方式', trigger: 'change' },
],
},
2024-08-02 09:55:57 +08:00
// 性别数据字典
sexDictDatas: getDictDatas(DICT_TYPE.DICT_SYS_USER_SEX),
cusBusiTypeDictDatas: getDictDatas(DICT_TYPE.DICT_CUS_BUSI_TYPE)
2024-08-01 17:23:47 +08:00
};
},
methods: {
2024-08-02 18:18:59 +08:00
/**获取服务套餐精简信息*/
2024-08-08 10:56:01 +08:00
getServiceList() {
2024-08-02 18:18:59 +08:00
getServicePackageList().then(response => {
this.serviceList = response.data;
});
},
/**绑定事件*/
2024-08-08 10:56:01 +08:00
serviceChange(row) {
2024-08-02 18:18:59 +08:00
this.serviceList.map(item => {
2024-08-08 10:56:01 +08:00
if (item.id == row.systemCode) {
2024-08-02 18:18:59 +08:00
row.serContent = item.name
return
}
})
},
2024-08-02 09:55:57 +08:00
/**
* 新增服务内容
*/
2024-08-08 10:56:01 +08:00
addItem() {
2024-08-02 09:55:57 +08:00
const item = {
2024-08-08 10:56:01 +08:00
serContent: '',
serTimeStart: '',
serTimeEnd: ''
2024-08-02 09:55:57 +08:00
}
this.formData.itemList.push(item)
},
/**
* 移除服务内容
*/
deleteItem(index, rows) {
rows.splice(index, 1);
},
2024-08-01 17:23:47 +08:00
/** 打开弹窗 */
2024-08-08 10:56:01 +08:00
async open(id, typeCode) {
2024-08-01 17:23:47 +08:00
this.dialogVisible = true;
2024-08-02 12:32:13 +08:00
this.typeCode = typeCode
2024-08-01 17:23:47 +08:00
this.reset();
2024-08-02 18:18:59 +08:00
this.getServiceList()
2024-08-01 17:23:47 +08:00
// 修改时,设置数据
if (id) {
this.formLoading = true;
try {
const res = await CustomerMainApi.getCustomerMain(id);
this.formData = res.data;
2024-08-02 12:32:13 +08:00
this.dialogTitle = "修改客户信息";
2024-08-01 17:23:47 +08:00
} finally {
this.formLoading = false;
}
}
2024-08-02 12:32:13 +08:00
this.dialogTitle = "新增客户";
2024-08-01 17:23:47 +08:00
},
2024-08-02 18:18:59 +08:00
/** 打开弹窗 */
async openAttn(row) {
this.dialogVisible = true;
this.typeCode = '04'
this.deptCode = row.deptCode
2024-08-07 12:00:40 +08:00
console.log(row)
console.log(this.deptCode)
2024-08-02 18:18:59 +08:00
this.reset();
this.dialogTitle = row.cusName;
},
2024-08-01 17:23:47 +08:00
/** 提交按钮 */
async submitForm() {
// 校验主表
await this.$refs["formRef"].validate();
this.formLoading = true;
try {
const data = this.formData;
2024-08-02 12:32:13 +08:00
//如果客户类型不是政企客户,没有扩展表信息
2024-08-08 10:56:01 +08:00
if (data.typeCode !== '03') {
2024-08-02 12:32:13 +08:00
data.itemList = []
}
2024-08-01 17:23:47 +08:00
// 修改的提交
if (data.id) {
await CustomerMainApi.updateCustomerMain(data);
this.$modal.msgSuccess("修改成功");
this.dialogVisible = false;
this.$emit('success');
return;
}
// 添加的提交
await CustomerMainApi.createCustomerMain(data);
this.$modal.msgSuccess("新增成功");
this.dialogVisible = false;
this.$emit('success');
} finally {
this.formLoading = false;
}
},
/** 表单重置 */
reset() {
this.formData = {
id: undefined,
userId: undefined,
2024-08-02 12:32:13 +08:00
typeCode: this.typeCode,
2024-08-02 18:18:59 +08:00
deptCode: this.deptCode,
2024-08-01 17:23:47 +08:00
cusName: undefined,
phoneNumber: undefined,
birthday: undefined,
address: undefined,
2024-08-02 18:18:59 +08:00
sex: '1',
2024-08-01 17:23:47 +08:00
idCard: undefined,
idCardImage: undefined,
2024-08-02 09:55:57 +08:00
dataFrom: '08',
2024-08-01 17:23:47 +08:00
nearDoTime: undefined,
nearDoContent: undefined,
inviter: undefined,
2024-08-02 09:55:57 +08:00
inviterType: '01',
2024-08-01 17:23:47 +08:00
status: undefined,
2024-08-08 10:56:01 +08:00
itemList: [
2024-08-02 09:55:57 +08:00
{
2024-08-08 10:56:01 +08:00
serContent: '',
serTimeStart: '',
serTimeEnd: ''
2024-08-02 09:55:57 +08:00
}
],
2024-08-01 17:23:47 +08:00
};
this.resetForm("formRef");
}
}
};
</script>