diff --git a/mock-server/routes/baseConfig.js b/mock-server/routes/baseConfig.js index 02a64bc..57665df 100644 --- a/mock-server/routes/baseConfig.js +++ b/mock-server/routes/baseConfig.js @@ -1,6 +1,7 @@ import express from 'express' import { orgs } from '../data/orgs.js' import { channels, nextChannelId } from '../data/channels.js' +import { managers, nextManagerId } from '../data/managers.js' import { requireAuth } from '../middleware/requireAuth.js' const router = express.Router() @@ -104,4 +105,84 @@ router.delete('/channel/batch', (req, res) => { res.json({ code: 200, msg: 'ok', data: { successIds, failed } }) }) +// ---------------- 客户经理管理 ---------------- + +router.get('/manager/list', (req, res) => { + const { orgCode, orgName: orgNameQuery, name, jobNumber, page = 1, pageSize = 10 } = req.query || {} + let list = managers + if (orgCode) list = list.filter((m) => m.orgCode.includes(orgCode)) + if (orgNameQuery) list = list.filter((m) => m.orgName.includes(orgNameQuery)) + if (name) list = list.filter((m) => m.name.includes(name)) + if (jobNumber) list = list.filter((m) => m.jobNumber.includes(jobNumber)) + + const total = list.length + const start = (Number(page) - 1) * Number(pageSize) + const pageList = list.slice(start, start + Number(pageSize)) + res.json({ code: 200, msg: 'ok', data: { list: pageList, total } }) +}) + +router.post('/manager', (req, res) => { + const { orgCode, orgName: managerOrgName, jobNumber, name } = req.body || {} + if (!orgCode) return res.json({ code: 40030, msg: '请输入机构号', data: null }) + if (!managerOrgName) return res.json({ code: 40031, msg: '请输入机构名称', data: null }) + if (!jobNumber) return res.json({ code: 40032, msg: '请输入工号', data: null }) + if (!name) return res.json({ code: 40033, msg: '请输入客户经理姓名', data: null }) + if (managers.some((m) => m.jobNumber === jobNumber)) { + return res.json({ code: 40034, msg: '工号已存在', data: null }) + } + + const manager = { + id: nextManagerId(), + orgCode, + orgName: managerOrgName, + jobNumber, + name, + createdAt: nowStr() + } + managers.push(manager) + res.json({ code: 200, msg: 'ok', data: manager }) +}) + +router.put('/manager/:id', (req, res) => { + const { id } = req.params + const { orgCode, orgName: managerOrgName, jobNumber, name } = req.body || {} + const manager = managers.find((m) => m.id === id) + if (!manager) return res.json({ code: 40404, msg: '客户经理不存在', data: null }) + if (!orgCode) return res.json({ code: 40030, msg: '请输入机构号', data: null }) + if (!managerOrgName) return res.json({ code: 40031, msg: '请输入机构名称', data: null }) + if (!jobNumber) return res.json({ code: 40032, msg: '请输入工号', data: null }) + if (!name) return res.json({ code: 40033, msg: '请输入客户经理姓名', data: null }) + if (managers.some((m) => m.jobNumber === jobNumber && m.id !== id)) { + return res.json({ code: 40034, msg: '工号已存在', data: null }) + } + + manager.orgCode = orgCode + manager.orgName = managerOrgName + manager.jobNumber = jobNumber + manager.name = name + res.json({ code: 200, msg: 'ok', data: manager }) +}) + +router.delete('/manager/batch', (req, res) => { + const { ids } = req.body || {} + if (!Array.isArray(ids) || ids.length === 0) { + return res.json({ code: 40024, msg: '请选择要删除的客户经理', data: null }) + } + const successIds = [] + const failed = [] + ids.forEach((id) => { + const manager = managers.find((m) => m.id === id) + if (!manager) { + failed.push({ id, name: id, reason: '客户经理不存在' }) + return + } + successIds.push(id) + }) + successIds.forEach((id) => { + const index = managers.findIndex((m) => m.id === id) + if (index !== -1) managers.splice(index, 1) + }) + res.json({ code: 200, msg: 'ok', data: { successIds, failed } }) +}) + export default router diff --git a/src/api/baseConfig.js b/src/api/baseConfig.js index a1b7309..0ffc03f 100644 --- a/src/api/baseConfig.js +++ b/src/api/baseConfig.js @@ -5,3 +5,9 @@ export const fetchChannelListApi = (params) => request.get('/base-config/channel export const createChannelApi = (data) => request.post('/base-config/channel', data) export const updateChannelApi = (id, data) => request.put(`/base-config/channel/${id}`, data) export const batchDeleteChannelApi = (ids) => request.delete('/base-config/channel/batch', { data: { ids } }) + +// ---------------- 客户经理管理 ---------------- +export const fetchManagerListApi = (params) => request.get('/base-config/manager/list', { params }) +export const createManagerApi = (data) => request.post('/base-config/manager', data) +export const updateManagerApi = (id, data) => request.put(`/base-config/manager/${id}`, data) +export const batchDeleteManagerApi = (ids) => request.delete('/base-config/manager/batch', { data: { ids } }) diff --git a/src/views/base-config/manager/ManagerList.vue b/src/views/base-config/manager/ManagerList.vue new file mode 100644 index 0000000..0838052 --- /dev/null +++ b/src/views/base-config/manager/ManagerList.vue @@ -0,0 +1,184 @@ + + +