From 695bf2194f13693085799ae547ec6d8ea659a4c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E5=BC=BA?= <357099073@qq.com> Date: Thu, 13 Nov 2025 17:24:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0CRM=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc/src/api/contact.js | 33 + pc/src/api/customer.js | 72 + pc/src/api/supplier.js | 72 + pc/src/stores/menu.js | 14 +- .../apps/crm/customer/components/contact.vue | 201 ++ .../apps/crm/customer/components/detail.vue | 72 + .../apps/crm/customer/components/edit.vue | 225 ++ .../apps/crm/customer/components/invoice.vue | 107 + pc/src/views/apps/crm/customer/index.vue | 318 +++ pc/src/views/apps/crm/index.vue | 7 + .../apps/crm/supplier/components/contact.vue | 201 ++ .../apps/crm/supplier/components/detail.vue | 72 + .../apps/crm/supplier/components/edit.vue | 204 ++ .../apps/crm/supplier/components/invoice.vue | 107 + pc/src/views/apps/crm/supplier/index.vue | 310 +++ pc/src/views/apps/crm/workbench/index.vue | 2460 +++++++++++++++++ pc/src/views/system/menus/manager.vue | 65 +- server/controllers/contact.go | 90 + server/controllers/customer.go | 155 ++ server/controllers/menu.go | 44 +- server/controllers/supplier.go | 110 + server/database/yz_tenant_crm_contact.sql | 24 + server/database/yz_tenant_crm_customer.sql | 26 + server/database/yz_tenant_crm_supplier.sql | 26 + server/models/contact.go | 37 + server/models/customer.go | 36 + server/models/menu.go | 10 +- server/models/supplier.go | 36 + server/routers/router.go | 28 +- server/services/contact.go | 64 + server/services/customer.go | 79 + server/services/supplier.go | 79 + 32 files changed, 5340 insertions(+), 44 deletions(-) create mode 100644 pc/src/api/contact.js create mode 100644 pc/src/api/customer.js create mode 100644 pc/src/api/supplier.js create mode 100644 pc/src/views/apps/crm/customer/components/contact.vue create mode 100644 pc/src/views/apps/crm/customer/components/detail.vue create mode 100644 pc/src/views/apps/crm/customer/components/edit.vue create mode 100644 pc/src/views/apps/crm/customer/components/invoice.vue create mode 100644 pc/src/views/apps/crm/customer/index.vue create mode 100644 pc/src/views/apps/crm/index.vue create mode 100644 pc/src/views/apps/crm/supplier/components/contact.vue create mode 100644 pc/src/views/apps/crm/supplier/components/detail.vue create mode 100644 pc/src/views/apps/crm/supplier/components/edit.vue create mode 100644 pc/src/views/apps/crm/supplier/components/invoice.vue create mode 100644 pc/src/views/apps/crm/supplier/index.vue create mode 100644 pc/src/views/apps/crm/workbench/index.vue create mode 100644 server/controllers/contact.go create mode 100644 server/controllers/customer.go create mode 100644 server/controllers/supplier.go create mode 100644 server/database/yz_tenant_crm_contact.sql create mode 100644 server/database/yz_tenant_crm_customer.sql create mode 100644 server/database/yz_tenant_crm_supplier.sql create mode 100644 server/models/contact.go create mode 100644 server/models/customer.go create mode 100644 server/models/supplier.go create mode 100644 server/services/contact.go create mode 100644 server/services/customer.go create mode 100644 server/services/supplier.go diff --git a/pc/src/api/contact.js b/pc/src/api/contact.js new file mode 100644 index 0000000..334e768 --- /dev/null +++ b/pc/src/api/contact.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export function listContacts(params) { + return request({ + url: '/api/crm/contact/list', + method: 'get', + params, + }) +} + +export function createContact(data) { + return request({ + url: '/api/crm/contact/add', + method: 'post', + data, + }) +} + +export function updateContact(data) { + return request({ + url: '/api/crm/contact/edit', + method: 'post', + data, + }) +} + +export function deleteContact(data) { + return request({ + url: '/api/crm/contact/delete', + method: 'post', + data, + }) +} diff --git a/pc/src/api/customer.js b/pc/src/api/customer.js new file mode 100644 index 0000000..aab0be2 --- /dev/null +++ b/pc/src/api/customer.js @@ -0,0 +1,72 @@ +import request from '@/utils/request' + +/** + * 获取客户列表 + * @param {Object} params 查询参数 + * @param {number} params.tenantId 租户ID + * @returns {Promise} + */ +export function listCustomers(params) { + return request({ + url: '/api/crm/customer/list', + method: 'get', + params + }) +} + +/** + * 获取客户详情 + * @param {number|string} id 客户ID + * @param {number} params.tenantId 租户ID + * @returns {Promise} + */ +export function getCustomer(id) { + return request({ + url: '/api/crm/customer/detail', + method: 'get', + params: { id } + }) +} + +/** + * 创建客户 + * @param {Object} data 客户数据 + * @param {number} data.tenantId 租户ID + * @returns {Promise} + */ +export function createCustomer(data) { + return request({ + url: '/api/crm/customer/add', + method: 'post', + data + }) +} + +/** + * 更新客户 + * @param {number|string} id 客户ID + * @param {Object} data 更新的数据 + * @param {number} data.tenantId 租户ID + * @returns {Promise} + */ +export function updateCustomer(id, data) { + return request({ + url: '/api/crm/customer/edit', + method: 'post', + data: { id, ...data } + }) +} + +/** + * 删除客户 + * @param {number|string} id 客户ID + * @param {number} tenantId 租户ID + * @returns {Promise} + */ +export function deleteCustomer(id, tenantId) { + return request({ + url: '/api/crm/customer/delete', + method: 'post', + data: { id, tenantId } + }) +} diff --git a/pc/src/api/supplier.js b/pc/src/api/supplier.js new file mode 100644 index 0000000..3464bba --- /dev/null +++ b/pc/src/api/supplier.js @@ -0,0 +1,72 @@ +import request from '@/utils/request' + +/** + * 获取供应商列表 + * @param {Object} params 查询参数 + * @param {number} params.tenantId 租户ID + * @returns {Promise} + */ +export function listSuppliers(params) { + return request({ + url: '/api/crm/supplier/list', + method: 'get', + params + }) +} + +/** + * 获取供应商详情 + * @param {number|string} id 供应商ID + * @param {number} params.tenantId 租户ID + * @returns {Promise} + */ +export function getSupplier(id) { + return request({ + url: '/api/crm/supplier/detail', + method: 'get', + params: { id } + }) +} + +/** + * 创建供应商 + * @param {Object} data 供应商数据 + * @param {number} data.tenantId 租户ID + * @returns {Promise} + */ +export function createSupplier(data) { + return request({ + url: '/api/crm/supplier/add', + method: 'post', + data + }) +} + +/** + * 更新供应商 + * @param {number|string} id 供应商ID + * @param {Object} data 更新的数据 + * @param {number} data.tenantId 租户ID + * @returns {Promise} + */ +export function updateSupplier(id, data) { + return request({ + url: '/api/crm/supplier/edit', + method: 'post', + data: { id, ...data } + }) +} + +/** + * 删除供应商 + * @param {number|string} id 供应商ID + * @param {number} tenantId 租户ID + * @returns {Promise} + */ +export function deleteSupplier(id, tenantId) { + return request({ + url: '/api/apps/crm/supplier/delete', + method: 'post', + data: { id, tenantId } + }) +} diff --git a/pc/src/stores/menu.js b/pc/src/stores/menu.js index 9bde12f..ea382f0 100644 --- a/pc/src/stores/menu.js +++ b/pc/src/stores/menu.js @@ -139,10 +139,11 @@ export const useMenuStore = defineStore('menu', () => { if (res.data !== undefined && res.data !== null) { // 确保 data 是数组 const menuData = Array.isArray(res.data) ? res.data : []; - menus.value = menuData; + const filtered = menuData.filter(m => (m.isShow ?? 1) !== 0); + menus.value = filtered; // 保存到缓存 - saveToCache(menuData); - return menuData; + saveToCache(filtered); + return filtered; } else { // data 为 null 或 undefined,使用空数组 console.warn('菜单数据为空,使用空数组'); @@ -155,9 +156,10 @@ export const useMenuStore = defineStore('menu', () => { // 如果响应格式不符合预期,尝试直接使用 res.data if (res.data !== undefined) { const menuData = Array.isArray(res.data) ? res.data : []; - menus.value = menuData; - saveToCache(menuData); - return menuData; + const filtered = menuData.filter(m => (m.isShow ?? 1) !== 0); + menus.value = filtered; + saveToCache(filtered); + return filtered; } // 如果都不符合,抛出错误 diff --git a/pc/src/views/apps/crm/customer/components/contact.vue b/pc/src/views/apps/crm/customer/components/contact.vue new file mode 100644 index 0000000..013c08b --- /dev/null +++ b/pc/src/views/apps/crm/customer/components/contact.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/pc/src/views/apps/crm/customer/components/detail.vue b/pc/src/views/apps/crm/customer/components/detail.vue new file mode 100644 index 0000000..575cae7 --- /dev/null +++ b/pc/src/views/apps/crm/customer/components/detail.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/pc/src/views/apps/crm/customer/components/edit.vue b/pc/src/views/apps/crm/customer/components/edit.vue new file mode 100644 index 0000000..3ca483e --- /dev/null +++ b/pc/src/views/apps/crm/customer/components/edit.vue @@ -0,0 +1,225 @@ + + + + + + diff --git a/pc/src/views/apps/crm/customer/components/invoice.vue b/pc/src/views/apps/crm/customer/components/invoice.vue new file mode 100644 index 0000000..9d1f3fe --- /dev/null +++ b/pc/src/views/apps/crm/customer/components/invoice.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/pc/src/views/apps/crm/customer/index.vue b/pc/src/views/apps/crm/customer/index.vue new file mode 100644 index 0000000..e583ee9 --- /dev/null +++ b/pc/src/views/apps/crm/customer/index.vue @@ -0,0 +1,318 @@ + + + + + diff --git a/pc/src/views/apps/crm/index.vue b/pc/src/views/apps/crm/index.vue new file mode 100644 index 0000000..9024bbe --- /dev/null +++ b/pc/src/views/apps/crm/index.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/pc/src/views/apps/crm/supplier/components/contact.vue b/pc/src/views/apps/crm/supplier/components/contact.vue new file mode 100644 index 0000000..1b9be80 --- /dev/null +++ b/pc/src/views/apps/crm/supplier/components/contact.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/pc/src/views/apps/crm/supplier/components/detail.vue b/pc/src/views/apps/crm/supplier/components/detail.vue new file mode 100644 index 0000000..3130a2c --- /dev/null +++ b/pc/src/views/apps/crm/supplier/components/detail.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/pc/src/views/apps/crm/supplier/components/edit.vue b/pc/src/views/apps/crm/supplier/components/edit.vue new file mode 100644 index 0000000..2dc5d81 --- /dev/null +++ b/pc/src/views/apps/crm/supplier/components/edit.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/pc/src/views/apps/crm/supplier/components/invoice.vue b/pc/src/views/apps/crm/supplier/components/invoice.vue new file mode 100644 index 0000000..9d1f3fe --- /dev/null +++ b/pc/src/views/apps/crm/supplier/components/invoice.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/pc/src/views/apps/crm/supplier/index.vue b/pc/src/views/apps/crm/supplier/index.vue new file mode 100644 index 0000000..4c79b79 --- /dev/null +++ b/pc/src/views/apps/crm/supplier/index.vue @@ -0,0 +1,310 @@ + + + + + diff --git a/pc/src/views/apps/crm/workbench/index.vue b/pc/src/views/apps/crm/workbench/index.vue new file mode 100644 index 0000000..7a8dc80 --- /dev/null +++ b/pc/src/views/apps/crm/workbench/index.vue @@ -0,0 +1,2460 @@ + + + + + diff --git a/pc/src/views/system/menus/manager.vue b/pc/src/views/system/menus/manager.vue index 3b8c134..cdb2f4f 100644 --- a/pc/src/views/system/menus/manager.vue +++ b/pc/src/views/system/menus/manager.vue @@ -85,6 +85,18 @@ + + + +