diff --git a/.env b/.env
index 738a9fcc7..41552c8f6 100644
--- a/.env
+++ b/.env
@@ -2,7 +2,7 @@
VITE_APP_TITLE=暖界办公
# 项目本地运行端口号
-VITE_PORT=80
+VITE_PORT=81
# open 运行 npm run dev 时自动打开浏览器
VITE_OPEN=true
@@ -14,7 +14,7 @@ VITE_APP_TENANT_ENABLE=false
VITE_APP_CAPTCHA_ENABLE=false
# 文档地址的开关
-VITE_APP_DOCALERT_ENABLE=true
+VITE_APP_DOCALERT_ENABLE=false
# 百度统计
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
diff --git a/.env.local b/.env.local
index 35765584d..49d3c9089 100644
--- a/.env.local
+++ b/.env.local
@@ -4,7 +4,7 @@ NODE_ENV=development
VITE_DEV=true
# 请求路径
-VITE_BASE_URL='http://localhost:48080'
+VITE_BASE_URL='http://192.168.251.60:48080'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
VITE_UPLOAD_TYPE=server
diff --git a/src/api/crm/customer/companyInfo/changerecorddata/index.ts b/src/api/crm/customer/companyInfo/changerecorddata/index.ts
new file mode 100644
index 000000000..416d2c393
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/changerecorddata/index.ts
@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+// 工商变更数据 API
+export const ChangeRecordDataApi = {
+ // 查询工商变更数据分页
+ getChangeRecordDataPage: async (params: any) => {
+ return await request.get({ url: `/crm/change-record-data/page`, params })
+ },
+
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/companyInfo/companyabnormalinfo/index.ts b/src/api/crm/customer/companyInfo/companyabnormalinfo/index.ts
new file mode 100644
index 000000000..d1606e441
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/companyabnormalinfo/index.ts
@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+// 企业经营异常信息 API
+export const CompanyAbnormalInfoApi = {
+ // 查询企业经营异常信息分页
+ getCompanyAbnormalInfoPage: async (params: any) => {
+ return await request.get({ url: `/crm/company-abnormal-info/page`, params })
+ },
+
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/companyInfo/companybranchinfo/index.ts b/src/api/crm/customer/companyInfo/companybranchinfo/index.ts
new file mode 100644
index 000000000..9893c528e
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/companybranchinfo/index.ts
@@ -0,0 +1,11 @@
+import request from '@/config/axios'
+
+
+// 企业分支机构信息 API
+export const CompanyBranchInfoApi = {
+ // 查询企业分支机构信息分页
+ getCompanyBranchInfoPage: async (params: any) => {
+ return await request.get({ url: `/crm/company-branch-info/page`, params })
+ },
+
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/companyInfo/companycourtinfo/index.ts b/src/api/crm/customer/companyInfo/companycourtinfo/index.ts
new file mode 100644
index 000000000..89d084e99
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/companycourtinfo/index.ts
@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+// 企业法院公告信息 API
+export const CompanyCourtInfoApi = {
+ // 查询企业法院公告信息分页
+ getCompanyCourtInfoPage: async (params: any) => {
+ return await request.get({ url: `/crm/company-court-info/page`, params })
+ },
+
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/companyInfo/companyjudgmentdebtorinfo/index.ts b/src/api/crm/customer/companyInfo/companyjudgmentdebtorinfo/index.ts
new file mode 100644
index 000000000..e6fe9c3a0
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/companyjudgmentdebtorinfo/index.ts
@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+// 企业被执行人信息 API
+export const CompanyJudgmentDebtorInfoApi = {
+ // 查询企业被执行人信息分页
+ getCompanyJudgmentDebtorInfoPage: async (params: any) => {
+ return await request.get({ url: `/crm/company-judgment-debtor-info/page`, params })
+ },
+
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/companyInfo/companylawsuitinfo/index.ts b/src/api/crm/customer/companyInfo/companylawsuitinfo/index.ts
new file mode 100644
index 000000000..9859538b5
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/companylawsuitinfo/index.ts
@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+// 企业法律诉讼信息 API
+export const CompanyLawsuitInfoApi = {
+ // 查询企业法律诉讼信息分页
+ getCompanyLawsuitInfoPage: async (params: any) => {
+ return await request.get({ url: `/crm/company-lawsuit-info/page`, params })
+ },
+
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/companyInfo/employeedata/index.ts b/src/api/crm/customer/companyInfo/employeedata/index.ts
new file mode 100644
index 000000000..c54b454af
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/employeedata/index.ts
@@ -0,0 +1,9 @@
+import request from '@/config/axios'
+
+// 董事会成员 API
+export const EmployeeDataApi = {
+ // 查询董事会成员分页
+ getEmployeeDataPage: async (params: any) => {
+ return await request.get({ url: `/crm/employee-data/page`, params })
+ },
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/companyInfo/partnerdata/index.ts b/src/api/crm/customer/companyInfo/partnerdata/index.ts
new file mode 100644
index 000000000..1b0afe3e3
--- /dev/null
+++ b/src/api/crm/customer/companyInfo/partnerdata/index.ts
@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+// 股东数据 API
+export const PartnerDataApi = {
+ // 查询股东数据分页
+ getPartnerDataPage: async (params: any) => {
+ return await request.get({ url: `/crm/partner-data/page`, params })
+ },
+
+}
\ No newline at end of file
diff --git a/src/api/crm/customer/returnvisitrecord/index.ts b/src/api/crm/customer/returnvisitrecord/index.ts
new file mode 100644
index 000000000..8a880292d
--- /dev/null
+++ b/src/api/crm/customer/returnvisitrecord/index.ts
@@ -0,0 +1,47 @@
+import request from '@/config/axios'
+
+// CRM 回访记录 VO
+export interface ReturnVisitRecordVO {
+ id: number // 编号
+ customerId: number // 数据编号
+ type: number // 回访类型
+ returnVisitDate: Date // 回访日期
+ content: string // 回访内容
+ nextTime: Date // 下次联系时间
+ picUrls: string // 图片
+ fileUrls: string // 附件
+ contactIds: string // 关联的联系人编号数组
+}
+
+// CRM 回访记录 API
+export const ReturnVisitRecordApi = {
+ // 查询CRM 回访记录分页
+ getReturnVisitRecordPage: async (params: any) => {
+ return await request.get({ url: `/crm/return-visit-record/page`, params })
+ },
+
+ // 查询CRM 回访记录详情
+ getReturnVisitRecord: async (id: number) => {
+ return await request.get({ url: `/crm/return-visit-record/get?id=` + id })
+ },
+
+ // 新增CRM 回访记录
+ createReturnVisitRecord: async (data: ReturnVisitRecordVO) => {
+ return await request.post({ url: `/crm/return-visit-record/create`, data })
+ },
+
+ // 修改CRM 回访记录
+ updateReturnVisitRecord: async (data: ReturnVisitRecordVO) => {
+ return await request.put({ url: `/crm/return-visit-record/update`, data })
+ },
+
+ // 删除CRM 回访记录
+ deleteReturnVisitRecord: async (id: number) => {
+ return await request.delete({ url: `/crm/return-visit-record/delete?id=` + id })
+ },
+
+ // 导出CRM 回访记录 Excel
+ exportReturnVisitRecord: async (params) => {
+ return await request.download({ url: `/crm/return-visit-record/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/utils/dict.ts b/src/utils/dict.ts
index ba6863cca..3dd0f01ff 100644
--- a/src/utils/dict.ts
+++ b/src/utils/dict.ts
@@ -214,6 +214,10 @@ export enum DICT_TYPE {
CRM_FOLLOW_UP_TYPE = 'crm_follow_up_type', // CRM 跟进方式
CRM_PRODUCT_CATEGORY = "crm_product_category", //CRM 产品类型
CRM_PRODUCT_DETAIL_TYPE = "crm_product_detail_type", //CRM 产品明细类型
+ CRM_COOPERATION_TYPE = "crm_cooperation_type", //CRM 合作类型
+ CRM_COOPERATION_AREA = "crm_cooperation_area", //CRM 合作地区
+ CRM_CUSTOMER_STSTUS = "crm_customer_status", //CRM 客户状态
+ CRM_RETURN_VISIT_STSTUS = "crm_return_visit_type", //CRM 回访类型
// ========== ERP - 企业资源计划模块 ==========
ERP_AUDIT_STATUS = 'erp_audit_status', // ERP 审批状态
diff --git a/src/views/crm/backlog/index.vue b/src/views/crm/backlog/index.vue
index 49a1d4ced..883238c9c 100644
--- a/src/views/crm/backlog/index.vue
+++ b/src/views/crm/backlog/index.vue
@@ -63,11 +63,11 @@ const leftSides = ref([
menu: 'customerTodayContact',
count: customerTodayContactCount
},
- {
- name: '分配给我的线索',
- menu: 'clueFollow',
- count: clueFollowCount
- },
+ // {
+ // name: '分配给我的线索',
+ // menu: 'clueFollow',
+ // count: clueFollowCount
+ // },
{
name: '分配给我的客户',
menu: 'customerFollow',
@@ -83,21 +83,21 @@ const leftSides = ref([
menu: 'contractAudit',
count: contractAuditCount
},
- {
- name: '待审核回款',
- menu: 'receivableAudit',
- count: receivableAuditCount
- },
- {
- name: '待回款提醒',
- menu: 'receivablePlanRemind',
- count: receivablePlanRemindCount
- },
- {
- name: '即将到期的合同',
- menu: 'contractRemind',
- count: contractRemindCount
- }
+ // {
+ // name: '待审核回款',
+ // menu: 'receivableAudit',
+ // count: receivableAuditCount
+ // },
+ // {
+ // name: '待回款提醒',
+ // menu: 'receivablePlanRemind',
+ // count: receivablePlanRemindCount
+ // },
+ // {
+ // name: '即将到期的合同',
+ // menu: 'contractRemind',
+ // count: contractRemindCount
+ // }
])
/** 侧边点击 */
diff --git a/src/views/crm/customer/CustomerForm.vue b/src/views/crm/customer/CustomerForm.vue
index 9a904d2e7..5495532a6 100644
--- a/src/views/crm/customer/CustomerForm.vue
+++ b/src/views/crm/customer/CustomerForm.vue
@@ -14,30 +14,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
@@ -109,7 +193,7 @@
class="w-1/1"
clearable
filterable
- placeholder="请选择城市"
+ placeholder="请选择地址"
/>
@@ -120,23 +204,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
确 定
@@ -176,11 +250,17 @@ const formData = ref({
industryId: undefined,
level: undefined,
source: undefined,
- remark: undefined
+ remark: undefined,
+ developer: undefined,
+ assist: undefined,
+ clueDeveloper: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }],
- ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
+ ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
+ developer: [{ required: true, message: '商务拓展人不能为空', trigger: 'change' }],
+ cooperationType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
+ cooperationArea: [{ required: true, message: '合作地区不能为空', trigger: 'change' }],
})
const formRef = ref() // 表单 Ref
@@ -206,7 +286,10 @@ const open = async (type: string, id?: number) => {
// 默认新建时选中自己
if (formType.value === 'create') {
formData.value.ownerUserId = useUserStore().getUser.id
+ formData.value.developer = useUserStore().getUser.id
+ formData.value.assist = useUserStore().getUser.id
}
+
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
@@ -253,7 +336,10 @@ const resetForm = () => {
industryId: undefined,
level: undefined,
source: undefined,
- remark: undefined
+ reamark: undefined,
+ developer: undefined,
+ assist: undefined,
+ clueDeveloper: undefined,
}
formRef.value?.resetFields()
}
diff --git a/src/views/crm/customer/detail/CustomerDetailsInfo.vue b/src/views/crm/customer/detail/CustomerDetailsInfo.vue
index d9ea62a17..755c2172b 100644
--- a/src/views/crm/customer/detail/CustomerDetailsInfo.vue
+++ b/src/views/crm/customer/detail/CustomerDetailsInfo.vue
@@ -12,24 +12,31 @@
- {{ customer.mobile }}
+ {{ customer.cooperationType }}
+ {{ customer.cooperationArea }}
+
+
+
+ {{ customer.developerName }}
+ {{ customer.clueDeveloperName }}
+ {{ customer.assistName }}
+ {{ customer.industryId }}
+ {{ customer.mobile }}
{{ customer.telephone }}
{{ customer.email }}
{{ customer.areaName }} {{ customer.detailAddress }}
- {{ customer.qq }}
- {{ customer.wechat }}
+
-
-
-
+ {{ customer.customerDetails }}
+
{{ formatDate(customer.contactNextTime) }}
- {{ customer.remark }}
+
diff --git a/src/views/crm/customer/detail/companyDetailsInfo.vue b/src/views/crm/customer/detail/companyDetailsInfo.vue
new file mode 100644
index 000000000..b91f87f55
--- /dev/null
+++ b/src/views/crm/customer/detail/companyDetailsInfo.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+ {{ customer.creditNo }}
+
+
+
+
+ {{ customer.serviceStatus }}
+ {{ customer.legalPersonName }}
+
+ {{ customer.website }}
+
+ {{ customer.actualCapital }}
+ {{ customer.registerCapital }}
+ {{ customer.registerCapitalCurrency }}
+ {{ customer.registeredAddress }}
+ {{ customer.actualCharacters }}
+ {{ customer.startDate }}
+ {{ customer.bankName }}
+
+ {{ customer.bankAccount }}
+
+
+
+ {{ customer.taxQualification }}
+
+ {{ customer.socialEmployeeNum }}
+
+
+ {{ customer.businessTerm }}
+
+
+ {{ customer.belongOrg }}
+
+
+ {{ customer.regType }}
+
+
+ {{ customer.registerNo }}
+
+
+ {{ customer.partnerTotal }}
+
+
+ {{ customer.changeRecordDataTotal }}
+
+
+ {{ customer.employeeDataTotal }}
+
+
+
+
+
+
+ {{ customer.businessScope }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/customer/detail/companyInfo/changerecorddata/index.vue b/src/views/crm/customer/detail/companyInfo/changerecorddata/index.vue
new file mode 100644
index 000000000..c9b80b1df
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/changerecorddata/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/companyInfo/companyabnormalinfo/index.vue b/src/views/crm/customer/detail/companyInfo/companyabnormalinfo/index.vue
new file mode 100644
index 000000000..23b9a41c4
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/companyabnormalinfo/index.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/companyInfo/companybranchinfo/index.vue b/src/views/crm/customer/detail/companyInfo/companybranchinfo/index.vue
new file mode 100644
index 000000000..f0ea79447
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/companybranchinfo/index.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/companyInfo/companycourtinfo/index.vue b/src/views/crm/customer/detail/companyInfo/companycourtinfo/index.vue
new file mode 100644
index 000000000..6c1e2d117
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/companycourtinfo/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/companyInfo/companyjudgmentdebtorinfo/index.vue b/src/views/crm/customer/detail/companyInfo/companyjudgmentdebtorinfo/index.vue
new file mode 100644
index 000000000..287d0259d
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/companyjudgmentdebtorinfo/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/companyInfo/companylawsuitinfo/index.vue b/src/views/crm/customer/detail/companyInfo/companylawsuitinfo/index.vue
new file mode 100644
index 000000000..dfbcbfc3f
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/companylawsuitinfo/index.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/companyInfo/employeedata/index.vue b/src/views/crm/customer/detail/companyInfo/employeedata/index.vue
new file mode 100644
index 000000000..d90055f1b
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/employeedata/index.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/companyInfo/partnerdata/index.vue b/src/views/crm/customer/detail/companyInfo/partnerdata/index.vue
new file mode 100644
index 000000000..d331f6dd6
--- /dev/null
+++ b/src/views/crm/customer/detail/companyInfo/partnerdata/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/index.vue b/src/views/crm/customer/detail/index.vue
index 6818f69ff..413355b9c 100644
--- a/src/views/crm/customer/detail/index.vue
+++ b/src/views/crm/customer/detail/index.vue
@@ -45,10 +45,13 @@
+
+
+
-
+
-
+
+
+
+
@@ -82,8 +88,10 @@
import { useTagsViewStore } from '@/store/modules/tagsView'
import * as CustomerApi from '@/api/crm/customer'
import CustomerForm from '@/views/crm/customer/CustomerForm.vue'
+import CompanyDetailsInfo from './companyDetailsInfo.vue' // 工商信息
import CustomerDetailsInfo from './CustomerDetailsInfo.vue' // 客户明细 - 详细信息
import CustomerDetailsHeader from './CustomerDetailsHeader.vue' // 客户明细 - 头部
+import ReturnVisitrecord from './returnvisitrecord/index.vue' // 回访
import ContactList from '@/views/crm/contact/components/ContactList.vue' // 联系人列表
import ContractList from '@/views/crm/contract/components/ContractList.vue' // 合同列表
import BusinessList from '@/views/crm/business/components/BusinessList.vue' // 商机列表
diff --git a/src/views/crm/customer/detail/returnvisitrecord/ReturnVisitRecordForm.vue b/src/views/crm/customer/detail/returnvisitrecord/ReturnVisitRecordForm.vue
new file mode 100644
index 000000000..aa060e55b
--- /dev/null
+++ b/src/views/crm/customer/detail/returnvisitrecord/ReturnVisitRecordForm.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/returnvisitrecord/index.vue b/src/views/crm/customer/detail/returnvisitrecord/index.vue
new file mode 100644
index 000000000..fdc67db4d
--- /dev/null
+++ b/src/views/crm/customer/detail/returnvisitrecord/index.vue
@@ -0,0 +1,173 @@
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file