|
|
@@ -19,16 +19,12 @@
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="客户名称" prop="customerName">
|
|
|
- <el-input v-model="form.customerName" placeholder="请输入客户名称">
|
|
|
- <template #append>
|
|
|
- <el-button @click="selectBusinessBtn">查询工商信息</el-button>
|
|
|
- </template>
|
|
|
- </el-input>
|
|
|
+ <el-input v-model="form.customerName" placeholder="请输入客户名称"> </el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="工商名称" prop="businessCustomerName">
|
|
|
- <el-input v-model="form.businessCustomerName" placeholder="请输入工商名称" />
|
|
|
+ <el-input v-model="form.businessCustomerName" placeholder="请输入工商名称" @blur="selectBusinessBtn"> </el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -140,7 +136,7 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="发票抬头" prop="invoiceTop">
|
|
|
- <el-input v-model="form.invoiceTop" placeholder="请输入发票抬头" />
|
|
|
+ <el-input v-model="form.invoiceTop" placeholder="请输入发票抬头" disabled />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
@@ -248,8 +244,6 @@
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s;
|
|
|
"
|
|
|
- @mouseenter="(e) => (e.currentTarget.style.borderColor = '#409eff')"
|
|
|
- @mouseleave="(e) => (e.currentTarget.style.borderColor = '#d9d9d9')"
|
|
|
>
|
|
|
<div style="text-align: center; color: #8c939d">
|
|
|
<el-icon :size="40" style="margin-bottom: 8px">
|
|
|
@@ -446,6 +440,100 @@ const customerTypeList = ref<CustomerTypeVO[]>([]);
|
|
|
const comStaffList = ref<ComStaffVO[]>([]);
|
|
|
const comDeptList = ref<DeptVO[]>([]);
|
|
|
|
|
|
+// 企业基本信息表单
|
|
|
+const form = reactive<CustomerInfoForm>({
|
|
|
+ customerNo: '',
|
|
|
+ belongCompanyId: undefined,
|
|
|
+ companyName: '',
|
|
|
+ businessCustomerName: '',
|
|
|
+ shortName: '',
|
|
|
+ invoiceTypeId: undefined,
|
|
|
+ enterpriseScaleId: undefined,
|
|
|
+ customerTypeId: undefined,
|
|
|
+ industryCategoryId: undefined,
|
|
|
+ customerLevelId: undefined,
|
|
|
+ landline: '',
|
|
|
+ fax: '',
|
|
|
+ url: '',
|
|
|
+ postCode: '',
|
|
|
+ validityFromDate: undefined,
|
|
|
+ validityToDate: undefined,
|
|
|
+ invoiceTop: '',
|
|
|
+ address: '',
|
|
|
+ status: '0',
|
|
|
+ remark: ''
|
|
|
+});
|
|
|
+
|
|
|
+// 工商信息
|
|
|
+const businessForm = reactive<BusinessInfoForm>({
|
|
|
+ businessCustomerName: '',
|
|
|
+ socialCreditCode: '',
|
|
|
+ legalPersonName: '',
|
|
|
+ registeredCapital: '',
|
|
|
+ registrationAuthority: '',
|
|
|
+ establishmentDate: '',
|
|
|
+ revocationDate: '',
|
|
|
+ registrationStatus: '',
|
|
|
+ paidInCapital: undefined,
|
|
|
+ businessAddress: '',
|
|
|
+ businessLicense: '',
|
|
|
+ status: '0'
|
|
|
+});
|
|
|
+
|
|
|
+// 联系人列表
|
|
|
+const contactList = ref<CustomerContactForm[]>([]);
|
|
|
+const contactDialogVisible = ref(false);
|
|
|
+const currentContact = ref<CustomerContactForm | undefined>(undefined);
|
|
|
+const currentContactIndex = ref<number>(-1);
|
|
|
+
|
|
|
+// 销售信息
|
|
|
+const salesForm = reactive<SalesInfoForm>({
|
|
|
+ salesPersonId: undefined,
|
|
|
+ serviceStaffId: undefined,
|
|
|
+ belongingDepartmentId: undefined,
|
|
|
+ status: '0'
|
|
|
+});
|
|
|
+
|
|
|
+// 开票信息列表
|
|
|
+const invoiceList = ref<InvoiceInfoForm[]>([]);
|
|
|
+const invoiceDialogVisible = ref(false);
|
|
|
+const currentInvoice = ref<InvoiceInfoForm | undefined>(undefined);
|
|
|
+const currentInvoiceIndex = ref<number>(-1);
|
|
|
+
|
|
|
+// 表单验证规则
|
|
|
+const rules = {
|
|
|
+ belongCompanyId: [{ required: true, message: '请选择所属公司', trigger: 'change' }],
|
|
|
+ customerName: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
|
|
|
+ businessCustomerName: [
|
|
|
+ { required: true, message: '请输入工商名称', trigger: 'blur' },
|
|
|
+ {
|
|
|
+ // 允许:中文 + 常见标点 (括号、中圆点、横杠)
|
|
|
+ // 禁止:数字、字母、空格、@#$%等其他符号
|
|
|
+ pattern: /^[\u4e00-\u9fa5()()·\-]+$/,
|
|
|
+ message: '名称不能包含数字、字母或特殊符号,仅限中文及常用标点',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ shortName: [{ required: true, message: '请输入企业简称', trigger: 'blur' }],
|
|
|
+ invoiceTypeId: [{ required: true, message: '请选择开票类型', trigger: 'change' }],
|
|
|
+ enterpriseScaleId: [{ required: true, message: '请选择企业规模', trigger: 'change' }],
|
|
|
+ customerTypeId: [{ required: true, message: '请选择客户类别', trigger: 'change' }],
|
|
|
+ industryCategoryId: [{ required: true, message: '请选择行业类别', trigger: 'change' }],
|
|
|
+ customerLevelId: [{ required: true, message: '请选择客户等级', trigger: 'change' }],
|
|
|
+ address: [{ required: true, message: '请输入详细地址', trigger: 'blur' }]
|
|
|
+};
|
|
|
+
|
|
|
+// 销售信息表单验证规则
|
|
|
+const salesRules = {
|
|
|
+ salesPersonId: [{ required: true, message: '请选择业务人员', trigger: 'change' }],
|
|
|
+ serviceStaffId: [{ required: true, message: '请选择客服人员', trigger: 'change' }]
|
|
|
+};
|
|
|
+
|
|
|
+// 获取角色名称
|
|
|
+// const getRoleName = (roleId: string | number | undefined) => {
|
|
|
+// return roleMap[String(roleId)] || '-';
|
|
|
+// };
|
|
|
+
|
|
|
// Logo选择器相关
|
|
|
const logoSelectorVisible = ref(false);
|
|
|
const businessLicenseSelectorVisible = ref(false);
|
|
|
@@ -476,7 +564,7 @@ const handleBusinessLicenseSelected = (files: any[]) => {
|
|
|
const file = files[0]; // 取第一个文件
|
|
|
if (file && (file.url || file.path)) {
|
|
|
businessForm.businessLicense = file.url || file.path;
|
|
|
- ElMessage.success('营业执照选择成功');
|
|
|
+ // ElMessage.success('营业执照选择成功');
|
|
|
|
|
|
// 选择完成后清理表单验证状态
|
|
|
nextTick(() => {
|
|
|
@@ -528,14 +616,16 @@ onMounted(async () => {
|
|
|
|
|
|
const selectBusinessBtn = async () => {
|
|
|
try {
|
|
|
- const res = await getBusinessInfoBycustomerName(form.customerName);
|
|
|
+ // 验证基本信息表单
|
|
|
+ await formRef.value.validateField('businessCustomerName');
|
|
|
+ const res = await getBusinessInfoBycustomerName(form.businessCustomerName);
|
|
|
const data = res.data;
|
|
|
// 填充信息
|
|
|
Object.assign(businessForm, data);
|
|
|
+ form.invoiceTop = data.businessCustomerName;
|
|
|
form.businessCustomerName = data.businessCustomerName;
|
|
|
} catch (error) {
|
|
|
- console.error('查询工商信息失败:', error);
|
|
|
- ElMessage.error('查询工商信息失败');
|
|
|
+ // ElMessage.error('查询工商信息失败');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -582,7 +672,7 @@ const loadCustomerData = async (id: string) => {
|
|
|
// 加载企业规模列表
|
|
|
const loadEnterpriseScaleList = async () => {
|
|
|
try {
|
|
|
- const res = await listEnterpriseScale();
|
|
|
+ const res = await listEnterpriseScale({ dataSource: 'A10' } as any);
|
|
|
enterpriseScaleList.value = res.rows || [];
|
|
|
} catch (error) {
|
|
|
console.error('加载企业规模列表失败:', error);
|
|
|
@@ -592,7 +682,7 @@ const loadEnterpriseScaleList = async () => {
|
|
|
// 加载行业类别列表
|
|
|
const loadIndustryCategoryList = async () => {
|
|
|
try {
|
|
|
- const res = await listIndustryCategory();
|
|
|
+ const res = await listIndustryCategory({ dataSource: 'A10' } as any);
|
|
|
industryCategoryList.value = res.rows || [];
|
|
|
} catch (error) {
|
|
|
console.error('加载行业类别列表失败:', error);
|
|
|
@@ -602,7 +692,7 @@ const loadIndustryCategoryList = async () => {
|
|
|
// 加载开票类型列表
|
|
|
const loadInvoiceTypeList = async () => {
|
|
|
try {
|
|
|
- const res = await listInvoiceType();
|
|
|
+ const res = await listInvoiceType({ dataSource: 'A10' } as any);
|
|
|
invoiceTypeList.value = res.rows || [];
|
|
|
} catch (error) {
|
|
|
console.error('加载开票类型列表失败:', error);
|
|
|
@@ -612,7 +702,7 @@ const loadInvoiceTypeList = async () => {
|
|
|
// 加载公司列表
|
|
|
const loadCompanyList = async () => {
|
|
|
try {
|
|
|
- const query: any = { isShow: '0' };
|
|
|
+ const query: any = { isShow: '0', dataSource: 'A10' };
|
|
|
const res = await listCompany(query);
|
|
|
companyList.value = res.rows || [];
|
|
|
} catch (error) {
|
|
|
@@ -634,7 +724,7 @@ const loadSettlementMethodList = async () => {
|
|
|
// 加载客户等级列表
|
|
|
const loadCustomerLevelList = async () => {
|
|
|
try {
|
|
|
- const res = await listCustomerLevel();
|
|
|
+ const res = await listCustomerLevel({ dataSource: 'A10' } as any);
|
|
|
customerLevelList.value = res.rows || [];
|
|
|
} catch (error) {
|
|
|
console.error('加载客户等级列表失败:', error);
|
|
|
@@ -644,7 +734,7 @@ const loadCustomerLevelList = async () => {
|
|
|
// 加载客户类别列表
|
|
|
const loadCustomerTypeList = async () => {
|
|
|
try {
|
|
|
- const res = await listCustomerType();
|
|
|
+ const res = await listCustomerType({ dataSource: 'A10' } as any);
|
|
|
customerTypeList.value = res.rows || [];
|
|
|
} catch (error) {
|
|
|
console.error('加载客户类别列表失败:', error);
|
|
|
@@ -654,7 +744,7 @@ const loadCustomerTypeList = async () => {
|
|
|
// 加载员工列表
|
|
|
const loadComStaffList = async () => {
|
|
|
try {
|
|
|
- const query: ComStaffQuery = { status: '0' };
|
|
|
+ const query: any = { status: '0' };
|
|
|
const res = await listComStaff(query);
|
|
|
comStaffList.value = res.rows || [];
|
|
|
} catch (error) {
|
|
|
@@ -673,91 +763,6 @@ const loadComDeptList = async () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-// 企业基本信息表单
|
|
|
-const form = reactive<CustomerInfoForm>({
|
|
|
- customerNo: '',
|
|
|
- belongCompanyId: undefined,
|
|
|
- companyName: '',
|
|
|
- businessCustomerName: '',
|
|
|
- shortName: '',
|
|
|
- invoiceTypeId: undefined,
|
|
|
- enterpriseScaleId: undefined,
|
|
|
- customerTypeId: undefined,
|
|
|
- industryCategoryId: undefined,
|
|
|
- customerLevelId: undefined,
|
|
|
- landline: '',
|
|
|
- fax: '',
|
|
|
- url: '',
|
|
|
- postCode: '',
|
|
|
- validityFromDate: undefined,
|
|
|
- validityToDate: undefined,
|
|
|
- invoiceTop: '',
|
|
|
- address: '',
|
|
|
- status: '0',
|
|
|
- remark: ''
|
|
|
-});
|
|
|
-
|
|
|
-// 工商信息
|
|
|
-const businessForm = reactive<BusinessInfoForm>({
|
|
|
- businessCustomerName: '',
|
|
|
- socialCreditCode: '',
|
|
|
- legalPersonName: '',
|
|
|
- registeredCapital: '',
|
|
|
- registrationAuthority: '',
|
|
|
- establishmentDate: '',
|
|
|
- revocationDate: '',
|
|
|
- registrationStatus: '',
|
|
|
- paidInCapital: undefined,
|
|
|
- businessAddress: '',
|
|
|
- businessLicense: '',
|
|
|
- status: '0'
|
|
|
-});
|
|
|
-
|
|
|
-// 联系人列表
|
|
|
-const contactList = ref<CustomerContactForm[]>([]);
|
|
|
-const contactDialogVisible = ref(false);
|
|
|
-const currentContact = ref<CustomerContactForm | undefined>(undefined);
|
|
|
-const currentContactIndex = ref<number>(-1);
|
|
|
-
|
|
|
-// 销售信息
|
|
|
-const salesForm = reactive<SalesInfoForm>({
|
|
|
- salesPersonId: undefined,
|
|
|
- serviceStaffId: undefined,
|
|
|
- belongingDepartmentId: undefined,
|
|
|
- status: '0'
|
|
|
-});
|
|
|
-
|
|
|
-// 开票信息列表
|
|
|
-const invoiceList = ref<InvoiceInfoForm[]>([]);
|
|
|
-const invoiceDialogVisible = ref(false);
|
|
|
-const currentInvoice = ref<InvoiceInfoForm | undefined>(undefined);
|
|
|
-const currentInvoiceIndex = ref<number>(-1);
|
|
|
-
|
|
|
-// 表单验证规则
|
|
|
-const rules = {
|
|
|
- belongCompanyId: [{ required: true, message: '请选择所属公司', trigger: 'change' }],
|
|
|
- customerName: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
|
|
|
- businessCustomerName: [{ required: true, message: '请输入工商名称', trigger: 'blur' }],
|
|
|
- shortName: [{ required: true, message: '请输入企业简称', trigger: 'blur' }],
|
|
|
- invoiceTypeId: [{ required: true, message: '请选择开票类型', trigger: 'change' }],
|
|
|
- enterpriseScaleId: [{ required: true, message: '请选择企业规模', trigger: 'change' }],
|
|
|
- customerTypeId: [{ required: true, message: '请选择客户类别', trigger: 'change' }],
|
|
|
- industryCategoryId: [{ required: true, message: '请选择行业类别', trigger: 'change' }],
|
|
|
- customerLevelId: [{ required: true, message: '请选择客户等级', trigger: 'change' }],
|
|
|
- address: [{ required: true, message: '请输入详细地址', trigger: 'blur' }]
|
|
|
-};
|
|
|
-
|
|
|
-// 销售信息表单验证规则
|
|
|
-const salesRules = {
|
|
|
- salesPersonId: [{ required: true, message: '请选择业务人员', trigger: 'change' }],
|
|
|
- serviceStaffId: [{ required: true, message: '请选择客服人员', trigger: 'change' }]
|
|
|
-};
|
|
|
-
|
|
|
-// 获取角色名称
|
|
|
-const getRoleName = (roleId: string | number | undefined) => {
|
|
|
- return roleMap[String(roleId)] || '-';
|
|
|
-};
|
|
|
-
|
|
|
// 打开添加联系人对话框
|
|
|
const handleAddContact = () => {
|
|
|
currentContact.value = undefined;
|
|
|
@@ -948,3 +953,8 @@ const handleSubmit = async () => {
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
+<style scoped>
|
|
|
+.upload-box:hover {
|
|
|
+ border-color: #409eff !important; /* 鼠标悬停时变蓝 */
|
|
|
+}
|
|
|
+</style>
|