From a69a346804bec6f22ca7e5bd7cf006997f7bdaa4 Mon Sep 17 00:00:00 2001 From: JIAL <2287346125@qq.com> Date: Tue, 28 Nov 2023 23:49:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/uiDesigner.xml | 124 ++++++++++++++++++ .../controller/EmployeeController.java | 9 +- .../com/JIAL/FMSystem/entity/Employee.java | 4 +- src/main/resources/backend/index.html | 87 ++++++------ src/main/resources/backend/js/validate.js | 6 +- .../resources/backend/page/member/add.html | 27 ++-- .../resources/backend/page/member/list.html | 4 +- target/classes/backend/index.html | 87 ++++++------ target/classes/backend/js/validate.js | 6 +- target/classes/backend/page/member/add.html | 27 ++-- target/classes/backend/page/member/list.html | 4 +- .../com/JIAL/FMSystem/FWApplication.class | Bin 0 -> 1172 bytes .../controller/EmployeeController.class | Bin 8146 -> 8025 bytes .../com/JIAL/FMSystem/entity/Employee.class | Bin 7055 -> 6580 bytes 14 files changed, 263 insertions(+), 122 deletions(-) create mode 100644 .idea/uiDesigner.xml create mode 100644 target/classes/com/JIAL/FMSystem/FWApplication.class diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/JIAL/FMSystem/controller/EmployeeController.java b/src/main/java/com/JIAL/FMSystem/controller/EmployeeController.java index c583ccb..fb3760a 100644 --- a/src/main/java/com/JIAL/FMSystem/controller/EmployeeController.java +++ b/src/main/java/com/JIAL/FMSystem/controller/EmployeeController.java @@ -82,7 +82,6 @@ public class EmployeeController { //设置初始密码123456,需要进行md5加密处理 employee.setPassword(DigestUtils.md5DigestAsHex(employee.getPassword().getBytes())); - employee.setIdNumber("64222420001025301X"); //employee.setCreateTime(LocalDateTime.now()); //employee.setUpdateTime(LocalDateTime.now()); @@ -101,12 +100,12 @@ public class EmployeeController { * 员工信息分页查询 * @param page * @param pageSize - * @param name + * @param username * @return */ @GetMapping("/page") - public R page(int page,int pageSize,String name){ - log.info("page = {},pageSize = {},name = {}" ,page,pageSize,name); + public R page(int page,int pageSize,String username){ + log.info("page = {},pageSize = {},username = {}" ,page,pageSize,username); //构造分页构造器 Page pageInfo = new Page(page,pageSize); @@ -114,7 +113,7 @@ public class EmployeeController { //构造条件构造器 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); //添加过滤条件 - queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name); + queryWrapper.like(StringUtils.isNotEmpty(username),Employee::getUsername,username); //添加排序条件 queryWrapper.orderByDesc(Employee::getUpdateTime); diff --git a/src/main/java/com/JIAL/FMSystem/entity/Employee.java b/src/main/java/com/JIAL/FMSystem/entity/Employee.java index b0e30bf..6b8d6d9 100644 --- a/src/main/java/com/JIAL/FMSystem/entity/Employee.java +++ b/src/main/java/com/JIAL/FMSystem/entity/Employee.java @@ -24,9 +24,7 @@ public class Employee implements Serializable { private String phone; - private String sex; - - private String idNumber;//身份证号码 + private String admin; private Integer status; diff --git a/src/main/resources/backend/index.html b/src/main/resources/backend/index.html index f01d574..55c0d62 100644 --- a/src/main/resources/backend/index.html +++ b/src/main/resources/backend/index.html @@ -4,7 +4,7 @@ - 瑞吉外卖管理端 + 法务管理系统 @@ -117,46 +117,9 @@ defAct: '2', menuActived: '2', userInfo: {}, - menuList: [ - // { - // id: '1', - // name: '门店管理', - // children: [ - { - id: '2', - name: '账号管理', - url: 'page/member/list.html', - icon: 'icon-member' - }, - { - id: '3', - name: '全部案件', - url: 'page/category/list.html', - icon: 'icon-category' - }, - { - id: '4', - name: '合同纠纷', - url: 'page/food/list.html', - icon: 'icon-food' - }, - { - id: '5', - name: '出资纠纷', - url: 'page/combo/list.html', - icon: 'icon-combo' - }, - { - id: '6', - name: '行政纠纷', - url: 'page/order/list.html', - icon: 'icon-order' - } - // ], - // }, - ], + menuList: [], iframeUrl: 'page/member/list.html', - headTitle: '员工管理', + headTitle: '全部案件', goBackFlag: false, loading: true, timer: null @@ -168,6 +131,8 @@ if (userInfo) { this.userInfo = JSON.parse(userInfo) } + this.menuList = this.generateMenuList(); + this.menuHandle(this.menuList.find(item => item.id === this.defAct), false); // 手动调用一次 menuHandle this.closeLoading() }, beforeDestroy() { @@ -178,6 +143,48 @@ window.menuHandle = this.menuHandle }, methods: { + generateMenuList() { + const userInfo = JSON.parse(window.localStorage.getItem('userInfo')); + const isAdmin = userInfo && userInfo.admin === "0"; + + const baseMenuList = [ + { + id: '2', + name: '全部案件', + url: 'page/category/list.html', + icon: 'icon-category' + }, + { + id: '3', + name: '合同纠纷', + url: 'page/food/list.html', + icon: 'icon-food' + }, + { + id: '4', + name: '出资纠纷', + url: 'page/combo/list.html', + icon: 'icon-combo' + }, + { + id: '5', + name: '行政纠纷', + url: 'page/order/list.html', + icon: 'icon-order' + }, + ]; + + // 添加账号管理菜单项仅当用户是管理员时 + if (!isAdmin) { + baseMenuList.push({ + id: '6', + name: '账号管理', + url: 'page/member/list.html', + icon: 'icon-member' + }); + } + return baseMenuList; + }, logout() { logoutApi().then((res)=>{ if(res.code === 1){ diff --git a/src/main/resources/backend/js/validate.js b/src/main/resources/backend/js/validate.js index 2891cff..1c18d01 100644 --- a/src/main/resources/backend/js/validate.js +++ b/src/main/resources/backend/js/validate.js @@ -50,13 +50,13 @@ function checkPhone (rule, value, callback){ function checkPassword (rule,value,callback) { - // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X + // 密码为1到32位的数字字母组合 let reg = /^[a-zA-Z0-9]{1,32}$/ if(value == '') { - callback(new Error('请输入身份证号码')) + callback(new Error('请输入密码')) } else if (reg.test(value)) { callback() } else { - callback(new Error('身份证号码不正确')) + callback(new Error('密码格式不正确,请输入1-32位的数字密码组合')) } } \ No newline at end of file diff --git a/src/main/resources/backend/page/member/add.html b/src/main/resources/backend/page/member/add.html index 744aa97..a944a63 100644 --- a/src/main/resources/backend/page/member/add.html +++ b/src/main/resources/backend/page/member/add.html @@ -46,12 +46,12 @@ /> - - - + + + { - console.log(res) if (String(res.code) === '1') { console.log(res.data) this.ruleForm = res.data - this.ruleForm.sex = res.data.sex === '0' ? '女' : '男' + this.ruleForm.admin = res.data.admin === '0' ? '否' : '是' // this.ruleForm.password = '' } else { this.$message.error(res.msg || '操作失败') @@ -159,10 +158,11 @@ if (this.actionType === 'add') { const params = { ...this.ruleForm, - sex: this.ruleForm.sex === '女' ? '0' : '1' + admin: this.ruleForm.admin === '否' ? '0' : '1' } addEmployee(params).then(res => { if (res.code === 1) { + console.log("添加成功") this.$message.success('员工添加成功!') if (!st) { this.goBack() @@ -173,7 +173,7 @@ 'phone': '', // 'password': '', // 'rePassword': '',/ - 'sex': '男', + 'admin': '是', 'password': '' } } @@ -186,11 +186,14 @@ } else { const params = { ...this.ruleForm, - sex: this.ruleForm.sex === '女' ? '0' : '1' + admin: this.ruleForm.admin === '否' ? '0' : '1' } editEmployee(params).then(res => { + console.log(res.toString()); if (res.code === 1) { - this.$message.success('员工信息修改成功!') + var vm = this; + Vue.prototype.$message.success('员工信息修改成功!') + console.log("修改成功"); this.goBack() } else { this.$message.error(res.msg || '操作失败') diff --git a/src/main/resources/backend/page/member/list.html b/src/main/resources/backend/page/member/list.html index 17f8031..e98222e 100644 --- a/src/main/resources/backend/page/member/list.html +++ b/src/main/resources/backend/page/member/list.html @@ -22,7 +22,7 @@
{ if (String(res.code) === '1') { diff --git a/target/classes/backend/index.html b/target/classes/backend/index.html index f01d574..55c0d62 100644 --- a/target/classes/backend/index.html +++ b/target/classes/backend/index.html @@ -4,7 +4,7 @@ - 瑞吉外卖管理端 + 法务管理系统 @@ -117,46 +117,9 @@ defAct: '2', menuActived: '2', userInfo: {}, - menuList: [ - // { - // id: '1', - // name: '门店管理', - // children: [ - { - id: '2', - name: '账号管理', - url: 'page/member/list.html', - icon: 'icon-member' - }, - { - id: '3', - name: '全部案件', - url: 'page/category/list.html', - icon: 'icon-category' - }, - { - id: '4', - name: '合同纠纷', - url: 'page/food/list.html', - icon: 'icon-food' - }, - { - id: '5', - name: '出资纠纷', - url: 'page/combo/list.html', - icon: 'icon-combo' - }, - { - id: '6', - name: '行政纠纷', - url: 'page/order/list.html', - icon: 'icon-order' - } - // ], - // }, - ], + menuList: [], iframeUrl: 'page/member/list.html', - headTitle: '员工管理', + headTitle: '全部案件', goBackFlag: false, loading: true, timer: null @@ -168,6 +131,8 @@ if (userInfo) { this.userInfo = JSON.parse(userInfo) } + this.menuList = this.generateMenuList(); + this.menuHandle(this.menuList.find(item => item.id === this.defAct), false); // 手动调用一次 menuHandle this.closeLoading() }, beforeDestroy() { @@ -178,6 +143,48 @@ window.menuHandle = this.menuHandle }, methods: { + generateMenuList() { + const userInfo = JSON.parse(window.localStorage.getItem('userInfo')); + const isAdmin = userInfo && userInfo.admin === "0"; + + const baseMenuList = [ + { + id: '2', + name: '全部案件', + url: 'page/category/list.html', + icon: 'icon-category' + }, + { + id: '3', + name: '合同纠纷', + url: 'page/food/list.html', + icon: 'icon-food' + }, + { + id: '4', + name: '出资纠纷', + url: 'page/combo/list.html', + icon: 'icon-combo' + }, + { + id: '5', + name: '行政纠纷', + url: 'page/order/list.html', + icon: 'icon-order' + }, + ]; + + // 添加账号管理菜单项仅当用户是管理员时 + if (!isAdmin) { + baseMenuList.push({ + id: '6', + name: '账号管理', + url: 'page/member/list.html', + icon: 'icon-member' + }); + } + return baseMenuList; + }, logout() { logoutApi().then((res)=>{ if(res.code === 1){ diff --git a/target/classes/backend/js/validate.js b/target/classes/backend/js/validate.js index 2891cff..1c18d01 100644 --- a/target/classes/backend/js/validate.js +++ b/target/classes/backend/js/validate.js @@ -50,13 +50,13 @@ function checkPhone (rule, value, callback){ function checkPassword (rule,value,callback) { - // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X + // 密码为1到32位的数字字母组合 let reg = /^[a-zA-Z0-9]{1,32}$/ if(value == '') { - callback(new Error('请输入身份证号码')) + callback(new Error('请输入密码')) } else if (reg.test(value)) { callback() } else { - callback(new Error('身份证号码不正确')) + callback(new Error('密码格式不正确,请输入1-32位的数字密码组合')) } } \ No newline at end of file diff --git a/target/classes/backend/page/member/add.html b/target/classes/backend/page/member/add.html index 744aa97..a944a63 100644 --- a/target/classes/backend/page/member/add.html +++ b/target/classes/backend/page/member/add.html @@ -46,12 +46,12 @@ /> - - - + + + { - console.log(res) if (String(res.code) === '1') { console.log(res.data) this.ruleForm = res.data - this.ruleForm.sex = res.data.sex === '0' ? '女' : '男' + this.ruleForm.admin = res.data.admin === '0' ? '否' : '是' // this.ruleForm.password = '' } else { this.$message.error(res.msg || '操作失败') @@ -159,10 +158,11 @@ if (this.actionType === 'add') { const params = { ...this.ruleForm, - sex: this.ruleForm.sex === '女' ? '0' : '1' + admin: this.ruleForm.admin === '否' ? '0' : '1' } addEmployee(params).then(res => { if (res.code === 1) { + console.log("添加成功") this.$message.success('员工添加成功!') if (!st) { this.goBack() @@ -173,7 +173,7 @@ 'phone': '', // 'password': '', // 'rePassword': '',/ - 'sex': '男', + 'admin': '是', 'password': '' } } @@ -186,11 +186,14 @@ } else { const params = { ...this.ruleForm, - sex: this.ruleForm.sex === '女' ? '0' : '1' + admin: this.ruleForm.admin === '否' ? '0' : '1' } editEmployee(params).then(res => { + console.log(res.toString()); if (res.code === 1) { - this.$message.success('员工信息修改成功!') + var vm = this; + Vue.prototype.$message.success('员工信息修改成功!') + console.log("修改成功"); this.goBack() } else { this.$message.error(res.msg || '操作失败') diff --git a/target/classes/backend/page/member/list.html b/target/classes/backend/page/member/list.html index 17f8031..e98222e 100644 --- a/target/classes/backend/page/member/list.html +++ b/target/classes/backend/page/member/list.html @@ -22,7 +22,7 @@
{ if (String(res.code) === '1') { diff --git a/target/classes/com/JIAL/FMSystem/FWApplication.class b/target/classes/com/JIAL/FMSystem/FWApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..349b274b33039d9021d4cfc476443c2c0d2f259e GIT binary patch literal 1172 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