From 38522f1b875a3149b952fd7cf38b5659af865cde Mon Sep 17 00:00:00 2001 From: xpz2018 <107107461@qq.com> Date: Fri, 27 Jun 2025 10:38:30 +0800 Subject: [PATCH] no message --- mock/sys/user.ts | 4 +- src/api/clue/index.ts | 44 +- src/enums/pageEnum.ts | 2 +- src/locales/lang/zh-CN/routes/basic.ts | 1 + src/locales/lang/zh-CN/routes/clue.ts | 8 +- src/locales/lang/zh-CN/routes/invite.ts | 6 +- src/router/helper/menuHelper.ts | 4 +- src/router/menu.ts | 56 ++ src/router/menus/modules/clue.ts | 8 + src/router/menus/modules/invite.ts | 8 + src/router/menus/modules/workbench.ts | 17 + src/router/routes/modules/clue.ts | 16 + src/router/routes/modules/invite.ts | 16 + src/router/routes/workbench.ts | 31 + src/store/modules/permission.ts | 8 +- src/views/clue/clueList/data.ts | 60 +- src/views/clue/clueList/index.vue | 48 +- src/views/clue/cluePool/data.ts | 574 +--------------- src/views/clue/cluePool/index.vue | 32 +- src/views/clue/components/data.ts | 571 ++++++++++++++++ .../clue/{cluePool => components}/modal.vue | 14 +- src/views/clue/customer/index.vue | 2 +- src/views/clue/followlist/data.ts | 124 ++++ src/views/clue/followlist/index.vue | 171 +++++ src/views/clue/poolist/data.ts | 124 ++++ src/views/clue/poolist/index.vue | 254 +++++++ src/views/invite/components/data.ts | 42 ++ src/views/invite/components/modal.vue | 54 ++ src/views/invite/index/data.ts | 627 +----------------- src/views/invite/index/index.vue | 22 +- src/views/invite/index/modal.vue | 211 ------ src/views/invite/list/data.ts | 627 +----------------- src/views/invite/list/index.vue | 24 +- src/views/invite/list/modal.vue | 211 ------ src/views/invite/myList/data.ts | 124 ++++ src/views/invite/myList/index.vue | 188 ++++++ src/views/invite/seasList/data.ts | 124 ++++ src/views/invite/seasList/index.vue | 191 ++++++ src/views/sys/workbench/data.ts | 109 +++ src/views/sys/workbench/index.vue | 9 + 40 files changed, 2471 insertions(+), 2295 deletions(-) create mode 100644 src/router/menus/modules/workbench.ts create mode 100644 src/router/routes/workbench.ts create mode 100644 src/views/clue/components/data.ts rename src/views/clue/{cluePool => components}/modal.vue (97%) create mode 100644 src/views/clue/followlist/data.ts create mode 100644 src/views/clue/followlist/index.vue create mode 100644 src/views/clue/poolist/data.ts create mode 100644 src/views/clue/poolist/index.vue create mode 100644 src/views/invite/components/data.ts create mode 100644 src/views/invite/components/modal.vue delete mode 100644 src/views/invite/index/modal.vue delete mode 100644 src/views/invite/list/modal.vue create mode 100644 src/views/invite/myList/data.ts create mode 100644 src/views/invite/myList/index.vue create mode 100644 src/views/invite/seasList/data.ts create mode 100644 src/views/invite/seasList/index.vue create mode 100644 src/views/sys/workbench/data.ts create mode 100644 src/views/sys/workbench/index.vue diff --git a/mock/sys/user.ts b/mock/sys/user.ts index cd7082a..fdaca1e 100644 --- a/mock/sys/user.ts +++ b/mock/sys/user.ts @@ -12,7 +12,7 @@ export function createFakeUserList() { password: '123456', token: 'QNT iHP4V/g6O5DXHixyNrf7tjJzhv1uzd15gp7AgTwJsmPLbOmqa7ZoSiaGTLfB/eLpbse0PBxScusDqEpdm1ZVRA==', - homePath: '/clue/clueList', + homePath: '/workbench', roles: [ { roleName: 'Super Admin', @@ -28,7 +28,7 @@ export function createFakeUserList() { avatar: 'https://q1.qlogo.cn/g?b=qq&nk=339449197&s=640', desc: 'tester', token: 'fakeToken2', - homePath: '/clue/clueList', + homePath: '/workbench', roles: [ { roleName: 'Tester', diff --git a/src/api/clue/index.ts b/src/api/clue/index.ts index e263f8c..7cbaf25 100644 --- a/src/api/clue/index.ts +++ b/src/api/clue/index.ts @@ -9,7 +9,19 @@ export const getCluePage = (params: any) => export const getClueList = (params: any) => defHttp.get>({ - url: '/dating-clue-service/user/page/own-dating-clue', + url: '/dating-clue-service/user/page/allocated-dating-clue-pool/by/clue-team', + params, +}) + +export const getCluePool = (params: any) => + defHttp.get>({ + url: '/dating-clue-service/user/page/own-dating-clue-pool/by/clue-team', + params, +}) + +export const getClueFollow = (params: any) => + defHttp.get>({ + url: '/dating-clue-service/user/page/own-allocated-dating-clue-pool/by/clue-team', params, }) @@ -29,3 +41,33 @@ export const getClueRecord = (id: string) => defHttp.get({ url: '/dating-cl export const deleteCluingList = (params: any) => defHttp.post({ url: '/dating-clue-service/user/batch-delete/dating-clue', params }) + +export const receiveCluing = (params: any) => defHttp.post({ url: '/dating-clue-service/user/collect/dating-clue-public-pool', params }) + + +export const getInvitationPage = (params: any) => + defHttp.get>({ + url: '/dating-clue-service/user/page/dating-clue-pool/by/telephone-invitation-team', + params, +}) + + +export const getInvitationList = (params: any) => + defHttp.get>({ + url: '/dating-clue-service/user/page/allocated-dating-clue-pool/by/telephone-invitation-team', + params, +}) + + +export const getMyInvitationList = (params: any) => + defHttp.get>({ + url: '/dating-clue-service/user/page/own-dating-clue-pool/by/telephone-invitation-team', + params, +}) + +export const getSeasList = (params: any) => + defHttp.get>({ + url: '/dating-clue-service/user/page/dating-clue-public-pool/by/telephone-invitation-team', + params, +}) + diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts index 609dcec..3e047db 100644 --- a/src/enums/pageEnum.ts +++ b/src/enums/pageEnum.ts @@ -2,7 +2,7 @@ export enum PageEnum { // basic login path BASE_LOGIN = '/login', // basic home path - BASE_HOME = '/customer', + BASE_HOME = '/workbench', // error page path ERROR_PAGE = '/exception', // error log page path diff --git a/src/locales/lang/zh-CN/routes/basic.ts b/src/locales/lang/zh-CN/routes/basic.ts index 8027a14..8dbdfec 100644 --- a/src/locales/lang/zh-CN/routes/basic.ts +++ b/src/locales/lang/zh-CN/routes/basic.ts @@ -1,4 +1,5 @@ export default { login: '登录', + workbench: '工作台', errorLogList: '错误日志列表', } diff --git a/src/locales/lang/zh-CN/routes/clue.ts b/src/locales/lang/zh-CN/routes/clue.ts index a35d7c1..2ea87ad 100644 --- a/src/locales/lang/zh-CN/routes/clue.ts +++ b/src/locales/lang/zh-CN/routes/clue.ts @@ -1,6 +1,8 @@ export default { clue: '线索管理', - cluePool: '线索池', - clueList: '我的线索', - customer: '客户信息' + cluePool: '待分配线索', + clueList: '已分配线索', + customer: '客户信息', + poolist: '我的线索', + followlist: '跟进记录' } diff --git a/src/locales/lang/zh-CN/routes/invite.ts b/src/locales/lang/zh-CN/routes/invite.ts index 7b87cd3..40f54aa 100644 --- a/src/locales/lang/zh-CN/routes/invite.ts +++ b/src/locales/lang/zh-CN/routes/invite.ts @@ -1,5 +1,7 @@ export default { invite: '电邀管理', - index: '线索分配', - list: '我的线索' + index: '待分配线索', + list: '已分配线索', + myList: '我的线索', + seasList: '公海线索' } diff --git a/src/router/helper/menuHelper.ts b/src/router/helper/menuHelper.ts index 849519b..90cad2c 100644 --- a/src/router/helper/menuHelper.ts +++ b/src/router/helper/menuHelper.ts @@ -125,12 +125,12 @@ export function transformMenu(menus: any[]): Menu[] { let element: Menu = {path: item.path, name: item.name, component: 'LAYOUT', redirect: item.redirect, meta: item.meta} let children: Menu[] = [] item.children?.forEach(menu => { - // 这里只考虑二级菜单,没有做 if(menus.includes(menu.path)){ children.push(cloneDeep(menu)) + } else if(item.meta.hideChildrenInMenu && menus.includes(item.path)){ + children.push(cloneDeep(menu)) } - }) if(children.length){ element.children = children diff --git a/src/router/menu.ts b/src/router/menu.ts index e3097cb..bd2ec0e 100644 --- a/src/router/menu.ts +++ b/src/router/menu.ts @@ -1,5 +1,28 @@ import type { Menu } from '/@/router/types' +const workbenchMenu: Menu = { + path: '/workbench', + name: 'Workbench', + component: 'LAYOUT', + redirect: '/workbench/index', + meta: { + orderNo: 90001, + hideChildrenInMenu: true, + icon: 'ant-design:pay-circle-outlined', + title: 'routes.basic.workbench', + }, + children: [ + { + path: 'index', + name: 'WorkbenchPage', + component: '/sys/workbench/index.vue', + meta: { + title: 'routes.basic.workbench', + }, + }, + ], +} + const clueMenu: Menu = { path: '/clue', name: 'clue', @@ -28,6 +51,22 @@ const clueMenu: Menu = { title: 'routes.clue.clueList', }, }, + { + path: 'poolist', + name: 'Poolist', + component: '/clue/poolist/index.vue', + meta: { + title: 'routes.clue.poolist', + }, + }, + { + path: 'followlist', + name: 'Followlist', + component: '/clue/followlist/index.vue', + meta: { + title: 'routes.clue.followlist', + }, + }, { path: 'customer', name: 'Customer', @@ -68,6 +107,22 @@ const inviteMenu: Menu = { title: 'routes.invite.list', }, }, + { + path: 'myList', + name: 'MyList', + component: '/invite/myList/index.vue', + meta: { + title: 'routes.invite.myList', + }, + }, + { + path: 'seasList', + name: 'SeasList', + component: '/invite/seasList/index.vue', + meta: { + title: 'routes.invite.seasList', + }, + }, ], } @@ -111,6 +166,7 @@ const systemMenu: Menu = { } const appMenuList: Menu[] = [ + workbenchMenu, clueMenu, inviteMenu, systemMenu, diff --git a/src/router/menus/modules/clue.ts b/src/router/menus/modules/clue.ts index afbd976..b4cb4b4 100644 --- a/src/router/menus/modules/clue.ts +++ b/src/router/menus/modules/clue.ts @@ -14,6 +14,14 @@ const clueMenu: MenuModule = { path: 'clueList', name: t('routes.clue.clueList'), }, + { + path: 'poolist', + name: t('routes.clue.poolist'), + }, + { + path: 'followlist', + name: t('routes.clue.followlist'), + }, { path: 'customer', name: t('routes.clue.customer'), diff --git a/src/router/menus/modules/invite.ts b/src/router/menus/modules/invite.ts index 7d13d95..99aeca6 100644 --- a/src/router/menus/modules/invite.ts +++ b/src/router/menus/modules/invite.ts @@ -14,6 +14,14 @@ const inviteMenu: MenuModule = { path: 'list', name: t('routes.invite.list'), }, + { + path: 'myList', + name: t('routes.invite.myList'), + }, + { + path: 'seasList', + name: t('routes.invite.seasList'), + }, ], }, } diff --git a/src/router/menus/modules/workbench.ts b/src/router/menus/modules/workbench.ts new file mode 100644 index 0000000..a810259 --- /dev/null +++ b/src/router/menus/modules/workbench.ts @@ -0,0 +1,17 @@ +import type { MenuModule } from '/@/router/types' +import { t } from '/@/hooks/web/useI18n' + +const workbenchMenu: MenuModule = { + orderNo: 90001, + menu: { + path: '/workbench', + name: t('routes.basic.workbench'), + children: [ + { + path: 'index', + name: t('routes.basic.workbench'), + }, + ], + }, +} +export default workbenchMenu diff --git a/src/router/routes/modules/clue.ts b/src/router/routes/modules/clue.ts index 11b351e..9bffbb7 100644 --- a/src/router/routes/modules/clue.ts +++ b/src/router/routes/modules/clue.ts @@ -31,6 +31,22 @@ const clueRoute: AppRouteModule = { title: t('routes.clue.clueList'), }, }, + { + path: 'poolist', + name: 'Poolist', + component: () => import('/src/views/clue/poolist/index.vue'), + meta: { + title: t('routes.clue.poolist'), + }, + }, + { + path: 'followlist', + name: 'Followlist', + component: () => import('/src/views/clue/followlist/index.vue'), + meta: { + title: t('routes.clue.followlist'), + }, + }, { path: 'customer', name: 'Customer', diff --git a/src/router/routes/modules/invite.ts b/src/router/routes/modules/invite.ts index 402d132..2562a12 100644 --- a/src/router/routes/modules/invite.ts +++ b/src/router/routes/modules/invite.ts @@ -31,6 +31,22 @@ const inviteRoute: AppRouteModule = { title: t('routes.invite.list'), }, }, + { + path: 'myList', + name: 'MyList', + component: () => import('/src/views/invite/myList/index.vue'), + meta: { + title: t('routes.invite.seasList'), + }, + }, + { + path: 'seasList', + name: 'SeasList', + component: () => import('/src/views/invite/seasList/index.vue'), + meta: { + title: t('routes.invite.seasList'), + }, + }, ], } diff --git a/src/router/routes/workbench.ts b/src/router/routes/workbench.ts new file mode 100644 index 0000000..df160f1 --- /dev/null +++ b/src/router/routes/workbench.ts @@ -0,0 +1,31 @@ +import type { AppRouteModule } from '/@/router/types' + +import { LAYOUT } from '/@/router/constant' +import { t } from '/@/hooks/web/useI18n' + +const workbenchRoute: AppRouteModule = { + path: '/workbench', + name: 'Workbench', + component: LAYOUT, + redirect: '/workbench/index', + meta: { + hideChildrenInMenu: true, + icon: 'ant-design:pay-circle-outlined', + title: t('routes.basic.workbench'), + orderNo: 90001, + }, + children: [ + { + path: 'index', + name: 'WorkbenchPage', + component: () => import('@/views/sys/workbench/index.vue'), + meta: { + title: t('routes.basic.workbench'), + icon: 'ant-design:pay-circle-outlined', + hideMenu: true, + }, + }, + ], +} + +export default workbenchRoute; diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index 532f71c..c701f51 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -140,9 +140,11 @@ export const usePermissionStore = defineStore({ * @description 根据设置的首页path,修正routes中的affix标记(固定首页) * */ const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { - if (!routes || routes.length === 0) return - // let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME - let homePath: string = routes[1].redirect as string + if (!routes || routes.length === 0) { + return + } + let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME + // let homePath: string = routes[1].redirect as string userStore.getUserInfo.homePath = homePath || PageEnum.BASE_HOME // console.log(routes[1].redirect) function patcher(routes: AppRouteRecordRaw[], parentPath = '') { diff --git a/src/views/clue/clueList/data.ts b/src/views/clue/clueList/data.ts index 01f8194..726b17f 100644 --- a/src/views/clue/clueList/data.ts +++ b/src/views/clue/clueList/data.ts @@ -1,48 +1,36 @@ import { BasicColumn, FormSchema } from '/@/components/Table' import { genderList, channelList, clueStatusList, followStatusList, validStatusList } from '/@/enums/customerEnum' -import { - getIncomeList, - getNationList, - getEducationList, - getFamilyTiesList, - getOccupationList, - getBodilyFormList, - getPropertyPermits, - getAccountTypeList, - getIdentityTypeList, - getMaritalStatusList, - getConstellationList, - getCarPurchaseSituation, -} from '/@/api/essentialData' +import { getEducationList, getMaritalStatusList } from '/@/api/essentialData' export const tableColumns: BasicColumn[] = [ { title: '用户信息', dataIndex: 'userinfo', slots: { customRender: 'userinfo' } }, - { width: 70, title: '性别', dataIndex: 'genderCode', customRender: ({ text }) => { return genderList.find((find) => find.value === text)?.label} }, - { width: 110, title: '手机号码', dataIndex: 'phone' }, - { width: 100, title: '渠道来源', dataIndex: 'channelType', - customRender: ({ text }) => { - return channelList.find((find) => find.value === text)?.label - }, - }, + // { width: 70, title: '性别', dataIndex: 'genderCode', customRender: ({ text }) => { return genderList.find((find) => find.value === text)?.label} }, + // { width: 110, title: '手机号码', dataIndex: 'phone' }, + // { width: 100, title: '渠道来源', dataIndex: 'channelType', + // customRender: ({ text }) => { + // return channelList.find((find) => find.value === text)?.label + // }, + // }, + { title: '分配信息', dataIndex: 'allocateInfo', slots: { customRender: 'allocateInfo' } }, // { width: 80, title: '状态', dataIndex: 'validStatus', // customRender: ({ text }) => { // return clueStatusList.find((find) => find.value === text)?.label // }, // }, - { width: 100, title: '创建人', dataIndex: 'creatorName' }, - { width: 100, title: '核验人', dataIndex: 'verifierName' }, - { width: 100, title: '跟进状态', dataIndex: 'followStatus', - customRender: ({ text }) => { - return followStatusList.find((find) => find.value === text)?.label - }, - }, - { width: 160, title: '最后跟进时间', dataIndex: 'finalFollowTime' }, - { width: 100, title: '跟进结果', dataIndex: 'validStatus', - customRender: ({ text }) => { - return validStatusList.find((find) => find.value === text)?.label - }, - }, - { width: 160, title: '录入时间', dataIndex: 'creatTime' }, + // { width: 100, title: '创建人', dataIndex: 'creatorName' }, + // { width: 100, title: '核验人', dataIndex: 'verifierName' }, + // { width: 100, title: '跟进状态', dataIndex: 'followStatus', + // customRender: ({ text }) => { + // return followStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 160, title: '最后跟进时间', dataIndex: 'finalFollowTime' }, + // { width: 100, title: '跟进结果', dataIndex: 'validStatus', + // customRender: ({ text }) => { + // return validStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 160, title: '录入时间', dataIndex: 'creatTime' }, ] export const tableFormSchema: FormSchema[] = [ @@ -133,4 +121,4 @@ export const tableFormSchema: FormSchema[] = [ component: 'Input', colProps: { span: 6}, }, -] +] \ No newline at end of file diff --git a/src/views/clue/clueList/index.vue b/src/views/clue/clueList/index.vue index f38f08e..f69b6f0 100644 --- a/src/views/clue/clueList/index.vue +++ b/src/views/clue/clueList/index.vue @@ -16,12 +16,14 @@ + - @@ -94,8 +93,7 @@ import { tableColumns, tableFormSchema } from './data' import { useModal } from '/@/components/Modal' import { BasicTable, useTable, TableAction } from '/@/components/Table' - import ClueModal from './modal.vue' - import { getCluePage, allocateCluing } from '/@/api/clue' + import { getInvitationList, allocateCluing } from '/@/api/clue' import { pageOrganizationMember } from '/@/api/staff/staff' import { educationList, maritalList } from '/@/enums/customerEnum' @@ -127,16 +125,16 @@ columns: tableColumns, showIndexColumn: true, showTableSetting: false, - api: getCluePage, - rowKey: 'id', - rowSelection: { - type: 'checkbox', - onChange, - getCheckboxProps(record: Recordable) { - // Demo: 第一行(id为0)的选择框禁用 - return { disabled: record.allocationStatus !== 1 }; - }, - }, + api: getInvitationList, + // rowKey: 'id', + // rowSelection: { + // type: 'checkbox', + // onChange, + // getCheckboxProps(record: Recordable) { + // // Demo: 第一行(id为0)的选择框禁用 + // return { disabled: record.allocationStatus !== 1 }; + // }, + // }, formConfig: { labelWidth: 120, schemas: tableFormSchema, diff --git a/src/views/invite/list/modal.vue b/src/views/invite/list/modal.vue deleted file mode 100644 index 60f9546..0000000 --- a/src/views/invite/list/modal.vue +++ /dev/null @@ -1,211 +0,0 @@ - - - - - diff --git a/src/views/invite/myList/data.ts b/src/views/invite/myList/data.ts new file mode 100644 index 0000000..726b17f --- /dev/null +++ b/src/views/invite/myList/data.ts @@ -0,0 +1,124 @@ +import { BasicColumn, FormSchema } from '/@/components/Table' +import { genderList, channelList, clueStatusList, followStatusList, validStatusList } from '/@/enums/customerEnum' +import { getEducationList, getMaritalStatusList } from '/@/api/essentialData' + +export const tableColumns: BasicColumn[] = [ + { title: '用户信息', dataIndex: 'userinfo', slots: { customRender: 'userinfo' } }, + // { width: 70, title: '性别', dataIndex: 'genderCode', customRender: ({ text }) => { return genderList.find((find) => find.value === text)?.label} }, + // { width: 110, title: '手机号码', dataIndex: 'phone' }, + // { width: 100, title: '渠道来源', dataIndex: 'channelType', + // customRender: ({ text }) => { + // return channelList.find((find) => find.value === text)?.label + // }, + // }, + { title: '分配信息', dataIndex: 'allocateInfo', slots: { customRender: 'allocateInfo' } }, + // { width: 80, title: '状态', dataIndex: 'validStatus', + // customRender: ({ text }) => { + // return clueStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 100, title: '创建人', dataIndex: 'creatorName' }, + // { width: 100, title: '核验人', dataIndex: 'verifierName' }, + // { width: 100, title: '跟进状态', dataIndex: 'followStatus', + // customRender: ({ text }) => { + // return followStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 160, title: '最后跟进时间', dataIndex: 'finalFollowTime' }, + // { width: 100, title: '跟进结果', dataIndex: 'validStatus', + // customRender: ({ text }) => { + // return validStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 160, title: '录入时间', dataIndex: 'creatTime' }, +] + +export const tableFormSchema: FormSchema[] = [ + { + field: 'genderCode', + label: '用户性别', + colProps: { span: 6 }, + component: 'Select', + componentProps: { + options: genderList, + }, + }, + { + field: 'channelType', + label: '渠道来源', + colProps: { span: 6 }, + component: 'Select', + componentProps: { + options: channelList, + }, + }, + // { + // field: 'status', + // label: '状态', + // component: 'Input', + // colProps: { span: 6 }, + // }, + { + field: 'nickName', + label: '用户昵称', + component: 'Input', + colProps: { span: 6 }, + }, + { + field: 'phone', + label: '电话号码', + component: 'Input', + colProps: { span: 6 }, + }, + { + field: 'maritalStatusCode', + label: '婚姻状况', + colProps: { span: 6 }, + component: 'ApiSelect', + componentProps: { + labelField: 'desc', + api: getMaritalStatusList, + }, + }, + { + field: 'age', + label: '年龄', + slot: 'age', + component: 'InputNumber', + colProps: { span: 6 }, + }, + { + field: 'educationCode', + label: '学历', + colProps: { span: 6 }, + component: 'ApiSelect', + componentProps: { + labelField: 'desc', + api: getEducationList, + }, + }, + { + field: 'createTime', + label: '创建时间', + component: 'RangePicker', + colProps: { span: 6 }, + }, + { + field: 'creatorName', + label: '创建人名称', + component: 'Input', + colProps: { span: 6}, + }, + { + field: 'followTime', + label: '最后跟进时间', + component: 'RangePicker', + colProps: { span: 6 }, + }, + { + field: 'verifierName', + label: '核验人名称', + component: 'Input', + colProps: { span: 6}, + }, +] \ No newline at end of file diff --git a/src/views/invite/myList/index.vue b/src/views/invite/myList/index.vue new file mode 100644 index 0000000..daa7cd1 --- /dev/null +++ b/src/views/invite/myList/index.vue @@ -0,0 +1,188 @@ + + + + + diff --git a/src/views/invite/seasList/data.ts b/src/views/invite/seasList/data.ts new file mode 100644 index 0000000..726b17f --- /dev/null +++ b/src/views/invite/seasList/data.ts @@ -0,0 +1,124 @@ +import { BasicColumn, FormSchema } from '/@/components/Table' +import { genderList, channelList, clueStatusList, followStatusList, validStatusList } from '/@/enums/customerEnum' +import { getEducationList, getMaritalStatusList } from '/@/api/essentialData' + +export const tableColumns: BasicColumn[] = [ + { title: '用户信息', dataIndex: 'userinfo', slots: { customRender: 'userinfo' } }, + // { width: 70, title: '性别', dataIndex: 'genderCode', customRender: ({ text }) => { return genderList.find((find) => find.value === text)?.label} }, + // { width: 110, title: '手机号码', dataIndex: 'phone' }, + // { width: 100, title: '渠道来源', dataIndex: 'channelType', + // customRender: ({ text }) => { + // return channelList.find((find) => find.value === text)?.label + // }, + // }, + { title: '分配信息', dataIndex: 'allocateInfo', slots: { customRender: 'allocateInfo' } }, + // { width: 80, title: '状态', dataIndex: 'validStatus', + // customRender: ({ text }) => { + // return clueStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 100, title: '创建人', dataIndex: 'creatorName' }, + // { width: 100, title: '核验人', dataIndex: 'verifierName' }, + // { width: 100, title: '跟进状态', dataIndex: 'followStatus', + // customRender: ({ text }) => { + // return followStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 160, title: '最后跟进时间', dataIndex: 'finalFollowTime' }, + // { width: 100, title: '跟进结果', dataIndex: 'validStatus', + // customRender: ({ text }) => { + // return validStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 160, title: '录入时间', dataIndex: 'creatTime' }, +] + +export const tableFormSchema: FormSchema[] = [ + { + field: 'genderCode', + label: '用户性别', + colProps: { span: 6 }, + component: 'Select', + componentProps: { + options: genderList, + }, + }, + { + field: 'channelType', + label: '渠道来源', + colProps: { span: 6 }, + component: 'Select', + componentProps: { + options: channelList, + }, + }, + // { + // field: 'status', + // label: '状态', + // component: 'Input', + // colProps: { span: 6 }, + // }, + { + field: 'nickName', + label: '用户昵称', + component: 'Input', + colProps: { span: 6 }, + }, + { + field: 'phone', + label: '电话号码', + component: 'Input', + colProps: { span: 6 }, + }, + { + field: 'maritalStatusCode', + label: '婚姻状况', + colProps: { span: 6 }, + component: 'ApiSelect', + componentProps: { + labelField: 'desc', + api: getMaritalStatusList, + }, + }, + { + field: 'age', + label: '年龄', + slot: 'age', + component: 'InputNumber', + colProps: { span: 6 }, + }, + { + field: 'educationCode', + label: '学历', + colProps: { span: 6 }, + component: 'ApiSelect', + componentProps: { + labelField: 'desc', + api: getEducationList, + }, + }, + { + field: 'createTime', + label: '创建时间', + component: 'RangePicker', + colProps: { span: 6 }, + }, + { + field: 'creatorName', + label: '创建人名称', + component: 'Input', + colProps: { span: 6}, + }, + { + field: 'followTime', + label: '最后跟进时间', + component: 'RangePicker', + colProps: { span: 6 }, + }, + { + field: 'verifierName', + label: '核验人名称', + component: 'Input', + colProps: { span: 6}, + }, +] \ No newline at end of file diff --git a/src/views/invite/seasList/index.vue b/src/views/invite/seasList/index.vue new file mode 100644 index 0000000..2394eea --- /dev/null +++ b/src/views/invite/seasList/index.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/src/views/sys/workbench/data.ts b/src/views/sys/workbench/data.ts new file mode 100644 index 0000000..9ed78c4 --- /dev/null +++ b/src/views/sys/workbench/data.ts @@ -0,0 +1,109 @@ +import { BasicColumn, FormSchema } from '/@/components/Table'; + +export const columns: BasicColumn[] = [ + { + title: '菜单名称', + dataIndex: 'name', + width: 300, + align: 'left', + }, + { + title: '权限标识', + dataIndex: 'permission', + width: 180, + }, + { + title: '路由地址', + dataIndex: 'path', + }, + { + title: '组件', + dataIndex: 'component', + }, + { + title: '创建时间', + dataIndex: 'createTime', + width: 240, + }, +]; + +const isDir = (type: string) => type === '1'; +const isMenu = (type: string) => type === '2'; +const isButton = (type: number) => type === 3; + +export const searchFormSchema: FormSchema[] = [ + // { + // field: 'menuName', + // label: '菜单名称', + // component: 'Input', + // colProps: { span: 8 }, + // }, + { + field: 'status', + label: '状态', + component: 'Select', + componentProps: { + options: [ + { label: '启用', value: '0' }, + { label: '停用', value: '1' }, + ], + }, + colProps: { span: 8 }, + }, +]; + +export const formSchema: FormSchema[] = [ + { + field: 'type', + label: '菜单类型', + component: 'RadioButtonGroup', + defaultValue: 1, + componentProps: { + options: [ + { label: '目录', value: 1 }, + { label: '菜单', value: 2 }, + // { label: '按钮', value: '3' }, + ], + }, + colProps: { lg: 24, md: 24 }, + }, + { + field: 'name', + label: '菜单名称', + component: 'Input', + required: true, + }, + + { + field: 'parentId', + label: '上级菜单', + component: 'TreeSelect', + componentProps: { + replaceFields: { + title: 'name', + value: 'id', + key: 'id', + }, + getPopupContainer: () => document.body, + }, + }, + { + field: 'path', + label: '路由地址', + component: 'Input', + required: true, + ifShow: ({ values }) => !isButton(values.type), + }, + // { + // field: 'component', + // label: '组件路径', + // component: 'Input', + // ifShow: ({ values }) => isMenu(values.type), + // }, + // { + // field: 'permission', + // label: '权限标识', + // component: 'Input', + // ifShow: ({ values }) => !isDir(values.type), + // }, +]; \ No newline at end of file diff --git a/src/views/sys/workbench/index.vue b/src/views/sys/workbench/index.vue new file mode 100644 index 0000000..fdc87ac --- /dev/null +++ b/src/views/sys/workbench/index.vue @@ -0,0 +1,9 @@ + + \ No newline at end of file