189 lines
7.1 KiB
JavaScript
189 lines
7.1 KiB
JavaScript
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()
|
|
router.use(requireAuth)
|
|
|
|
function orgName(orgId) {
|
|
return orgs.find((o) => o.id === orgId)?.name || ''
|
|
}
|
|
|
|
function nowStr() {
|
|
return new Date().toISOString().slice(0, 19).replace('T', ' ')
|
|
}
|
|
|
|
// ---------------- 核心企业管理 ----------------
|
|
|
|
router.get('/channel/list', (req, res) => {
|
|
const { orgId, channelCode, channelName, page = 1, pageSize = 10 } = req.query || {}
|
|
let list = channels
|
|
if (orgId) list = list.filter((c) => c.orgId === orgId)
|
|
if (channelCode) list = list.filter((c) => c.channelCode.includes(channelCode))
|
|
if (channelName) list = list.filter((c) => c.name.includes(channelName))
|
|
|
|
const total = list.length
|
|
const start = (Number(page) - 1) * Number(pageSize)
|
|
const pageList = list.slice(start, start + Number(pageSize)).map((c) => ({
|
|
id: c.id,
|
|
name: c.name,
|
|
channelCode: c.channelCode,
|
|
appCode: c.appCode,
|
|
motherAccountBank: c.motherAccountBank,
|
|
orgId: c.orgId,
|
|
orgName: orgName(c.orgId),
|
|
createdAt: c.createdAt
|
|
}))
|
|
res.json({ code: 200, msg: 'ok', data: { list: pageList, total } })
|
|
})
|
|
|
|
router.post('/channel', (req, res) => {
|
|
const { name, channelCode, appCode, motherAccountBank, orgId } = req.body || {}
|
|
if (!name) return res.json({ code: 40025, msg: '请输入渠道名称', data: null })
|
|
if (!channelCode) return res.json({ code: 40026, msg: '请输入渠道编号', data: null })
|
|
if (!appCode) return res.json({ code: 40027, msg: '请输入应用编号', data: null })
|
|
if (!motherAccountBank) return res.json({ code: 40028, msg: '请输入母户开户行', data: null })
|
|
if (!orgId || !orgs.some((o) => o.id === orgId)) {
|
|
return res.json({ code: 40029, msg: '请选择有效的所属机构', data: null })
|
|
}
|
|
|
|
const channel = {
|
|
id: nextChannelId(),
|
|
name,
|
|
channelCode,
|
|
appCode,
|
|
motherAccountBank,
|
|
orgId,
|
|
createdAt: nowStr()
|
|
}
|
|
channels.push(channel)
|
|
res.json({ code: 200, msg: 'ok', data: channel })
|
|
})
|
|
|
|
router.put('/channel/:id', (req, res) => {
|
|
const { id } = req.params
|
|
const { name, channelCode, appCode, motherAccountBank, orgId } = req.body || {}
|
|
const channel = channels.find((c) => c.id === id)
|
|
if (!channel) return res.json({ code: 40404, msg: '核心企业不存在', data: null })
|
|
if (!name) return res.json({ code: 40025, msg: '请输入渠道名称', data: null })
|
|
if (!channelCode) return res.json({ code: 40026, msg: '请输入渠道编号', data: null })
|
|
if (!appCode) return res.json({ code: 40027, msg: '请输入应用编号', data: null })
|
|
if (!motherAccountBank) return res.json({ code: 40028, msg: '请输入母户开户行', data: null })
|
|
if (!orgId || !orgs.some((o) => o.id === orgId)) {
|
|
return res.json({ code: 40029, msg: '请选择有效的所属机构', data: null })
|
|
}
|
|
|
|
channel.name = name
|
|
channel.channelCode = channelCode
|
|
channel.appCode = appCode
|
|
channel.motherAccountBank = motherAccountBank
|
|
channel.orgId = orgId
|
|
res.json({ code: 200, msg: 'ok', data: channel })
|
|
})
|
|
|
|
router.delete('/channel/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 channel = channels.find((c) => c.id === id)
|
|
if (!channel) {
|
|
failed.push({ id, name: id, reason: '核心企业不存在' })
|
|
return
|
|
}
|
|
successIds.push(id)
|
|
})
|
|
successIds.forEach((id) => {
|
|
const index = channels.findIndex((c) => c.id === id)
|
|
if (index !== -1) channels.splice(index, 1)
|
|
})
|
|
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
|