瀏覽代碼

修复+密码加密方式更改

fangq 4 年之前
父節點
當前提交
1594048db0

+ 63 - 0
src/components/common/cy-form-design.vue

@@ -30,6 +30,69 @@
         designVisible: false,
         options: {
           column: [
+            {
+              label: "銀行號",
+              prop: "bankNo",
+              span: 24,
+              hide: true,
+              disabled: true,
+              search: true,
+              searchSpan: 4,
+              rules: [{
+                required: true,
+                message: "請輸入銀行號",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "機構號",
+              prop: "orgNo",
+              hide: true,
+              disabled: true,
+              filterable: true,
+              dicData: [],
+              props: {
+                label: "orgNo",
+                value: "orgNo"
+              },
+              rules: [{
+                required: true,
+                message: "請輸入機構號",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "機構名稱",
+              prop: "orgName",
+              disabled: true,
+              rules: [{
+                required: true,
+                message: "請輸入機構號",
+                trigger: "blur"
+              }]
+            },
+            /*{
+              label: "填報時間",
+              prop: "createTime",
+              addDisplay: false,
+              editDisplay: false,
+              rules: [{
+                required: true,
+                message: "請輸入填報時間",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "填報人",
+              prop: "createUserName",
+              addDisplay: false,
+              editDisplay: false,
+              rules: [{
+                required: true,
+                message: "請輸入填報人",
+                trigger: "blur"
+              }]
+            },*/
             {
               type: 'input',
               label: '姓名',

+ 7 - 7
src/option/user/info.js

@@ -5,11 +5,11 @@ export default {
   emptyBtn: false,
   group: [
     {
-      label: '人信息',
+      label: '人信息',
       prop: 'info',
       column: [
         /*{
-        label: '像',
+        label: '像',
         type: 'upload',
         listType: 'picture-img',
         propsHttp: {
@@ -21,7 +21,7 @@ export default {
           ratio: 0.1
         },
         action: '/api/blade-resource/oss/endpoint/put-file',
-        tip: '只能上传jpg/png用户头像,且不超过500kb',
+        tip: '只能上傳jpg/png用戶頭像,且不超過500kb',
         span: 12,
         row: true,
         prop: 'avatar'
@@ -59,10 +59,10 @@ export default {
       }]
     },
     {
-      label: '修改密',
+      label: '修改密',
       prop: 'password',
       column: [{
-        label: '原密',
+        label: '原密',
         span: 12,
         row: true,
         type: 'password',
@@ -73,7 +73,7 @@ export default {
           trigger: "blur"
         }]
       }, {
-        label: '新密',
+        label: '新密',
         span: 12,
         row: true,
         type: 'password',
@@ -84,7 +84,7 @@ export default {
           trigger: "blur"
         }]
       }, {
-        label: '确认密码',
+        label: '確認密碼',
         span: 12,
         row: true,
         type: 'password',

+ 2 - 2
src/store/modules/user.js

@@ -7,7 +7,7 @@ import website from '@/config/website'
 import {loginByUsername, loginBySocial, getUserInfo, logout, refreshToken, getButtons} from '@/api/user'
 import {getTopMenu, getRoutes} from '@/api/system/menu'
 import md5 from 'js-md5'
-import {cyEncryptByDES} from "../../util/util";
+import {cyEncryptByDES,cyEncryptByAES} from "../../util/util";
 
 
 function addPath(ele, first) {
@@ -49,7 +49,7 @@ const user = {
     //根据用户名登录
     LoginByUsername({commit}, userInfo) {
       return new Promise((resolve, reject) => {
-        loginByUsername(userInfo.tenantId, userInfo.username, cyEncryptByDES(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
+        loginByUsername(userInfo.tenantId, userInfo.username, cyEncryptByAES(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
           const data = res.data;
           if (data.error_description) {
             Message({

+ 21 - 0
src/util/util.js

@@ -378,8 +378,23 @@ export const downloadFileBase64 = (path, name) => {
   };
 }
 
+export const encryptByAES = (data, key) => {
+  var srcs = CryptoJS.enc.Utf8.parse(data);
+  var key1  = CryptoJS.enc.Utf8.parse(key);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
+  var encrypted = CryptoJS.AES.encrypt(srcs, key1, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
+  return encrypted.toString();
+}
+
+// 解密
+function decryptByAES(data,key){ //key,iv:16位的字符串
+  var key1  = CryptoJS.enc.Utf8.parse(key);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
+  var decrypt = CryptoJS.AES.decrypt(data, key1, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
+  return CryptoJS.enc.Utf8.stringify(decrypt).toString();
+}
+
 export const encryptByDES = (message, key) => {
   var keyHex = CryptoJS.enc.Utf8.parse(key);
+  // CryptoJS.AES.encryptAES(message, keyHex, {});
   var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
     mode: CryptoJS.mode.ECB,
     padding: CryptoJS.pad.Pkcs7
@@ -409,6 +424,12 @@ export const cyEncryptByDES = (message) => {
   return encryptByDES(message, key)
 }
 
+export const cyEncryptByAES = (message) => {
+  var key  = CryptoJS.enc.Latin1.parse('cyzh20211126java');
+  var iv   = CryptoJS.enc.Latin1.parse('cyzh20211126java');
+  return CryptoJS.AES.encrypt(message, key, {iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding}).toString();
+}
+
 export const tableToExcel = (function(){
   var uri = 'data:application/vnd.ms-excel;base64,',
     template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',

+ 46 - 7
src/views/bank/autodata.vue

@@ -49,6 +49,7 @@
   import {mapGetters} from "vuex";
   import {getSelectAndPermissionByDept} from "@/api/bank/autostruct";
   import {opStr2opObj} from "../../api/bank/autostruct";
+  import { getCurrentDept } from "@/api/system/dept";
 
   export default {
     data() {
@@ -81,11 +82,37 @@
           column: [
           ]
         },
-        data: []
+        data: [],
+        defaultColumn: [
+          {
+            label: "填報時間",
+            prop: "createTime",
+            viewDisplay: false,
+            addDisplay: false,
+            editDisplay: false,
+            rules: [{
+              required: true,
+              message: "請輸入填報時間",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "填報人",
+            prop: "createUserName",
+            viewDisplay: false,
+            addDisplay: false,
+            editDisplay: false,
+            rules: [{
+              required: true,
+              message: "請輸入填報人",
+              trigger: "blur"
+            }]
+          },
+        ]
       };
     },
     computed: {
-      ...mapGetters(["permission"]),
+      ...mapGetters(["permission", "userInfo"]),
       permissionList() {
         return {
           addBtn: this.vaildData(this.permission.autodata_add, false),
@@ -131,7 +158,7 @@
         option.viewBtn = true;
         option.searchMenuSpan = 6;
         option.column.forEach((item, index) => {
-          item.search = index < 4 && item.type != 'title';
+          item.search = index >= 3 && index < 7 && item.type != 'title';
           item.editDisabled = true;
           if (item.dicUrl){
             item.dicFormatter = (res) => {
@@ -139,7 +166,9 @@
               return res.data;
             };
           }
-        })
+        });
+        option.column.push(this.defaultColumn[0]);
+        option.column.push(this.defaultColumn[1]);
         this.option = option;
         setTimeout(() => {
           _this.show = true;
@@ -161,7 +190,7 @@
         let n = 1;
         for(let i = 0; i < keys.length; i++){
           let item = {};
-          if (keys[i].indexOf("$") == 0){
+          if (keys[i].indexOf("$") == 0 || keys[i].indexOf("createTime") != -1 || keys[i].indexOf("createUser") != -1){
           }else{
             item['' + keys[i]] = row[''+keys[i]];
             form['params'+(n++)] = JSON.stringify(item);
@@ -172,6 +201,7 @@
         return form;
       },
       rowSave(row, done, loading) {
+        delete row.createTime,delete row.createUser,delete row.createUserName;
         let form = this.beforeSave(row)
         add(form).then(() => {
           this.onLoad(this.page);
@@ -242,12 +272,19 @@
           });
       },
       beforeOpen(done, type) {
-        console.log(this.form)
         if (["edit", "view"].includes(type)) {
           /*getDetail(this.form.id).then(res => {
             this.form = res.data.data;
           });*/
         }
+        if (type == 'add'){
+          getCurrentDept().then(res => {
+            const data =  res.data.data;
+            this.form.bankNo = data.bankNo;
+            this.form.orgNo = data.orgNo;
+            this.form.orgName = data.deptName;
+          });
+        }
         done();
       },
       searchReset() {
@@ -300,12 +337,14 @@
         for (let i = 0; i < data.length; i++) {
           let row = data[i];
           let form = {};
-          form.id = row.id, form.createUser = row.createUser, form.createTime = row.createTime, form.createDept = row.createDept;
+          form.id = row.id, form.createUser = row.createUser,form.createUserName = row.createUserName, form.createTime = row.createTime, form.createDept = row.createDept;
+          delete row.id, delete row.createUser, delete row.createUserName, delete row.createTime, delete row.createDept;
           let keys = Object.keys(row);
           for (let j = 0; j < keys.length; j++) {
             let key = keys[j];
             if (key.indexOf("params") != -1){
               let value = row['' + key];
+              console.log('value' + value)
               if (value != ''){
                 let item = JSON.parse(value);
                 item.key = key;

+ 131 - 1
src/views/system/userinfo.vue

@@ -21,14 +21,141 @@
       return {
         index: 0,
         option: {},
-        optionTem: option,
+        optionTem: {
+          tabs: true,
+          tabsActive: 1,
+          submitBtn: false,
+          emptyBtn: false,
+          group: [
+            {
+              label: '個人信息',
+              prop: 'info',
+              column: [
+                /*{
+                label: '頭像',
+                type: 'upload',
+                listType: 'picture-img',
+                propsHttp: {
+                  res: 'data',
+                  url: 'link',
+                },
+                canvasOption: {
+                  text: ' ',
+                  ratio: 0.1
+                },
+                action: '/api/blade-resource/oss/endpoint/put-file',
+                tip: '只能上傳jpg/png用戶頭像,且不超過500kb',
+                span: 12,
+                row: true,
+                prop: 'avatar'
+              },*/
+                {
+                  label: '姓名',
+                  span: 12,
+                  row: true,
+                  disabled: true,
+                  prop: 'name'
+                }, {
+                  label: 'Mo碼',
+                  span: 12,
+                  row: true,
+                  prop: 'code',
+                  disabled: true,
+                }, {
+                  label: 'EHR號',
+                  span: 12,
+                  row: true,
+                  prop: 'ehr',
+                  disabled: true,
+                }, {
+                  label: '所屬機構',
+                  prop: 'deptName',
+                  span: 12,
+                  row: true,
+                  disabled: true,
+                }, {
+                  label: '所屬角色',
+                  prop: 'roleName',
+                  span: 12,
+                  row: true,
+                  disabled: true,
+                }]
+            },
+            {
+              label: '修改密碼',
+              prop: 'password',
+              column: [{
+                label: '原密碼',
+                span: 12,
+                row: true,
+                type: 'password',
+                prop: 'oldPassword',
+                rules: [{
+                  required: true,
+                  message: "請輸入原密碼",
+                  trigger: "blur"
+                }]
+              }, {
+                label: '新密碼',
+                span: 12,
+                row: true,
+                type: 'password',
+                prop: 'newPassword',
+                rules: [{
+                  required: true,
+                  message: "請輸入新密碼",
+                  trigger: "blur"
+                },
+                  {required: true, validator: this.validatePass, trigger: 'blur'}
+                ]
+              }, {
+                label: '確認密碼',
+                span: 12,
+                row: true,
+                type: 'password',
+                prop: 'newPassword1',
+                rules: [{
+                  required: true,
+                  message: "請重複新密碼",
+                  trigger: "blur"
+                },
+                  {required: true, validator: this.validatePass2, trigger: 'blur'}
+                ]
+              }]
+            }
+          ],
+        },
         form: {}
       };
     },
     created() {
+      // this.findObject(this.optionTem.group[1].column, 'newPassword').rules.push({required: true, validator: this.validatePass, trigger: 'blur'});
+      // this.findObject(this.optionTem.group[1].column, 'newPassword1').rules.push({required: true, validator: this.validatePass2, trigger: 'blur'});
       this.handleWitch();
     },
     methods: {
+      validatePass(rule, value, callback){
+        const pwdRule = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,}$/;
+        if (value === '') {
+          callback(new Error('請輸入密碼'));
+        } else if (!pwdRule.test(value)) {
+          callback(new Error("長度至少為6,且需包含數字、英文、符號任2款組合"));
+        } else {
+          callback();
+        }
+      },
+      validatePass2(rule, value, callback){
+        const pwdRule = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,}$/;
+        if (value === '') {
+          callback(new Error('請再次輸入密碼'));
+        } else if (!pwdRule.test(value)) {
+          callback(new Error("長度至少為6,且需包含數字、英文、符號任2款組合"));
+        } else if (value !== this.form.newPassword) {
+          callback(new Error('兩次輸入密碼不一致!'));
+        } else {
+          callback();
+        }
+      },
       handleSubmit(form, done) {
         if (this.index === 0) {
           updateInfo(form).then(res => {
@@ -71,6 +198,9 @@
         }
       },
       handleWitch() {
+
+
+
         if (this.index === 0) {
           getUserInfo().then(res => {
             const user = res.data.data;