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 @@ + + + +