diff --git a/src/locales/lang/zh-CN/menu.js b/src/locales/lang/zh-CN/menu.js index 961d7e1..651b7e6 100644 --- a/src/locales/lang/zh-CN/menu.js +++ b/src/locales/lang/zh-CN/menu.js @@ -32,10 +32,10 @@ export default { account: '个人页', 'account.trigger': '触发报错', 'account.logout': '退出登录', - 'dict': '字典管理', + dict: '字典管理', 'dict-detail': '字典数据', - 'serverObj': '服务对象管理', - 'serverList': '服务对象列表', + serverObj: '服务对象管理', + serverList: '服务对象列表', workorderMenu: '工单管理', mineWorderOrder: '我下的工单', invalidWzorkOrder: '无效工单', @@ -45,4 +45,11 @@ export default { serviceSites: '服务站点', serviceOrganization: '服务组织', nodeAdministration: '节点管理', + allocation: '待分配对象列表', + domicile: '户籍对象列表', + institution: '机构服务对象列表', + toBeInstitution: '待完善对象列表', + carePhone: '电话关爱对象', + serverSearch: '服务对象查询', + existence: '生存状态管理', } diff --git a/src/router/routes/severObj.js b/src/router/routes/severObj.js index fe043e2..f25d26d 100644 --- a/src/router/routes/severObj.js +++ b/src/router/routes/severObj.js @@ -24,6 +24,84 @@ export default [ permission: '*', }, }, + { + path: 'allocation', + name: 'allocation', + component: 'serverObj/allocation/index.vue', + meta: { + title: '服务对象分配', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, + { + path: 'domicile', + name: 'domicile', + component: 'serverObj/domicile/index.vue', + meta: { + title: '户籍对象列表', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, + { + path: 'institution', + name: 'institution', + component: 'serverObj/institution/index.vue', + meta: { + title: '机构服务对象列表', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, + { + path: 'toBeInstitution', + name: 'toBeInstitution', + component: 'serverObj/toBeInstitution/index.vue', + meta: { + title: '待完善对象列表', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, + { + path: 'carePhone', + name: 'carePhone', + component: 'serverObj/carePhone/index.vue', + meta: { + title: '电话关爱对象', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, + { + path: 'serverSearch', + name: 'serverSearch', + component: 'serverObj/serverSearch/index.vue', + meta: { + title: '服务对象查询', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, + { + path: 'existence', + name: 'existence', + component: 'serverObj/existence/index.vue', + meta: { + title: '生存状态管理', + isMenu: true, + keepAlive: true, + permission: '*', + }, + } + ], }, ] diff --git a/src/utils/validate.js b/src/utils/validate.js new file mode 100644 index 0000000..67f03d8 --- /dev/null +++ b/src/utils/validate.js @@ -0,0 +1,82 @@ +/** + * 表单验证工具 - Vue 3 兼容 + * 包含:手机号、邮箱、身份证号 验证规则 + */ + +// 验证手机号(中国大陆) +export const validatePhone = (_rule, value) => { + console.log('validatePhone', value); + const phoneRegex = /^1[3-9]\d{9}$/; + if (!value) { + return Promise.reject('手机号不能为空'); + } + if (!phoneRegex.test(value)) { + return Promise.reject('请输入正确的手机号'); + } + return Promise.resolve(); +}; + +// 验证邮箱 +export const validateEmail = (_rule, value) => { + const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; + if (!value) { + return Promise.reject('邮箱不能为空'); + } + if (!emailRegex.test(value)) { + return Promise.reject('请输入正确的邮箱地址'); + } + return Promise.resolve(); +}; + +// 验证身份证号码(支持 15 位和 18 位,含校验) +export const validateIdCard = (_rule, value) => { + const idCardRegex = /(^\d{15}$)|(^\d{18}$)|(^\d{18}X$)/i; + + if (!value) { + return Promise.reject('身份证号不能为空'); + } + + if (!idCardRegex.test(value)) { + return Promise.reject('身份证号格式不正确'); + } + + // 更严格的 18 位身份证校验(含最后一位校验码) + if (value.length === 18) { + const Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子 + const Vi = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验码 + + let sum = 0; + for (let i = 0; i < 17; i++) { + sum += parseInt(value[i], 10) * Wi[i]; + } + const checkCode = Vi[sum % 11]; + if (checkCode !== value[17].toUpperCase()) { + return Promise.reject('身份证号校验失败,请输入正确的身份证号'); + } + } + + // 可选:验证生日部分(仅做基础判断) + let year, month, day; + if (value.length === 15) { + year = '19' + value.substring(6, 8); + month = value.substring(8, 10); + day = value.substring(10, 12); + } else { + year = value.substring(6, 10); + month = value.substring(10, 12); + day = value.substring(12, 14); + } + + const isValidDate = !isNaN(new Date(year, month - 1, day)); + if (!isValidDate) { + return Promise.reject('身份证号中的出生日期不合法'); + } + + const currentYear = new Date().getFullYear(); + const birthYear = parseInt(year, 10); + if (birthYear < 1900 || birthYear > currentYear) { + return Promise.reject('出生年份不合法'); + } + + return Promise.resolve(); +}; diff --git a/src/views/serverObj/allocation/components/EditDialog.vue b/src/views/serverObj/allocation/components/EditDialog.vue new file mode 100644 index 0000000..33b0919 --- /dev/null +++ b/src/views/serverObj/allocation/components/EditDialog.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/serverObj/allocation/index.vue b/src/views/serverObj/allocation/index.vue new file mode 100644 index 0000000..df19ca7 --- /dev/null +++ b/src/views/serverObj/allocation/index.vue @@ -0,0 +1,392 @@ + + + + + diff --git a/src/views/serverObj/carePhone/components/EditDialog.vue b/src/views/serverObj/carePhone/components/EditDialog.vue new file mode 100644 index 0000000..33b0919 --- /dev/null +++ b/src/views/serverObj/carePhone/components/EditDialog.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/serverObj/carePhone/index.vue b/src/views/serverObj/carePhone/index.vue new file mode 100644 index 0000000..5622d9e --- /dev/null +++ b/src/views/serverObj/carePhone/index.vue @@ -0,0 +1,392 @@ + + + + + diff --git a/src/views/serverObj/domicile/components/EditDialog.vue b/src/views/serverObj/domicile/components/EditDialog.vue new file mode 100644 index 0000000..489bee3 --- /dev/null +++ b/src/views/serverObj/domicile/components/EditDialog.vue @@ -0,0 +1,623 @@ + + + + + diff --git a/src/views/serverObj/domicile/index.vue b/src/views/serverObj/domicile/index.vue new file mode 100644 index 0000000..773f800 --- /dev/null +++ b/src/views/serverObj/domicile/index.vue @@ -0,0 +1,570 @@ + + + + + diff --git a/src/views/serverObj/existence/components/EditDialog.vue b/src/views/serverObj/existence/components/EditDialog.vue new file mode 100644 index 0000000..33b0919 --- /dev/null +++ b/src/views/serverObj/existence/components/EditDialog.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/serverObj/existence/index.vue b/src/views/serverObj/existence/index.vue new file mode 100644 index 0000000..5622d9e --- /dev/null +++ b/src/views/serverObj/existence/index.vue @@ -0,0 +1,392 @@ + + + + + diff --git a/src/views/serverObj/institution/components/EditDialog.vue b/src/views/serverObj/institution/components/EditDialog.vue new file mode 100644 index 0000000..33b0919 --- /dev/null +++ b/src/views/serverObj/institution/components/EditDialog.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/serverObj/institution/index.vue b/src/views/serverObj/institution/index.vue new file mode 100644 index 0000000..ea9fdb4 --- /dev/null +++ b/src/views/serverObj/institution/index.vue @@ -0,0 +1,416 @@ + + + + + diff --git a/src/views/serverObj/serverList/components/EditDialog.vue b/src/views/serverObj/serverList/components/EditDialog.vue index 4f9934c..974d325 100644 --- a/src/views/serverObj/serverList/components/EditDialog.vue +++ b/src/views/serverObj/serverList/components/EditDialog.vue @@ -1,14 +1,14 @@