Ver Fonte

登录、重置密码、新增用户接口密码参数加密处理

cfort há 1 ano atrás
pai
commit
f1b3276586

+ 11 - 4
src/utils/encrypt.js

@@ -1,9 +1,14 @@
 import CryptoJS from 'crypto-js'
-const key = CryptoJS.enc.Utf8.parse('dmngJmmO+9GMw+tu')
-const iv = CryptoJS.enc.Utf8.parse('sanXyqhk8+U7LPP4')
+const key1 = CryptoJS.enc.Utf8.parse('dmngJmmO+9GMw+tu')
+const iv1 = CryptoJS.enc.Utf8.parse('sanXyqhk8+U7LPP4')
+const key2 = CryptoJS.enc.Utf8.parse('49PBou+TREIOzSHj')
+const iv2 = CryptoJS.enc.Utf8.parse('5lDsNRe&UduJ97uS')
+
 // AES加密
-export const encryptByAes = pwd => {
+export const encryptByAes = (pwd, type = 'normal') => {
     let encrypted = ''
+    const key = type === 'normal' ? key1 : key2
+    const iv = type === 'normal' ? iv1 : iv2
     if (typeof pwd === 'string') {
         const srcs = CryptoJS.enc.Utf8.parse(pwd)
         const options = {
@@ -25,7 +30,9 @@ export const encryptByAes = pwd => {
     return encrypted.ciphertext.toString(CryptoJS.enc.Base64)
 }
 
-export const decryptByAes = encryptedText => {
+export const decryptByAes = (encryptedText, type = 'normal') => {
+    const key = type === 'normal' ? key1 : key2
+    const iv = type === 'normal' ? iv1 : iv2
     const options = {
         iv: iv,
         mode: CryptoJS.mode.CBC, // 使用CBC模式

+ 220 - 214
src/views/platform/org/employee/change-password.vue

@@ -1,233 +1,239 @@
 <template>
-  <el-dialog
-    :title="title"
-    :visible.sync="dialogVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    class="dialog"
-    :class="isReset?'other-changePassword_dialog':'super-changePassword_dialog'"
-    @open="formValidate"
-    @close="closeDialog"
-  >
-    <el-form
-      ref="passwordForm"
-      v-loading="dialogLoading"
-      :element-loading-text="$t('common.loading')"
-      :model="password"
-      :rules="rules"
-      :label-width="formLabelWidth"
-      label-suffix=":"
-      status-icon
-      @submit.native.prevent
-      style="margin: 20px;"
+    <el-dialog
+        :title="title"
+        :visible.sync="dialogVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        append-to-body
+        class="dialog"
+        :class="isReset?'other-changePassword_dialog':'super-changePassword_dialog'"
+        @open="formValidate"
+        @close="closeDialog"
     >
-      <el-form-item v-if="!isReset" :label="$t('platform.org.employee.change-password.primitivePassword')" prop="primitivePassword">
-        <el-input v-model="password.primitivePassword" type="password" autocomplete="off" clearable show-password/>
-      </el-form-item>
-      <el-form-item :label="$t('platform.org.employee.change-password.newPassword')" prop="newPassword">
-        <el-input v-model="password.newPassword" type="password" autocomplete="off" clearable show-password/>
-      </el-form-item>
-      <el-form-item :label="$t('platform.org.employee.change-password.repeatPassword')" prop="repeatPassword">
-        <el-input v-model="password.repeatPassword" type="password" autocomplete="off" clearable show-password/>
-      </el-form-item>
-    </el-form>
-    <div slot="footer" class="el-dialog--center">
-      <ibps-toolbar
-        :actions="toolbars"
-        @action-event="handleActionEvent"
-      />
-    </div>
-  </el-dialog>
+        <el-form
+            ref="passwordForm"
+            v-loading="dialogLoading"
+            :element-loading-text="$t('common.loading')"
+            :model="password"
+            :rules="rules"
+            :label-width="formLabelWidth"
+            label-suffix=":"
+            status-icon
+            style="margin: 20px;"
+            @submit.native.prevent
+        >
+            <el-form-item v-if="!isReset" :label="$t('platform.org.employee.change-password.primitivePassword')" prop="primitivePassword">
+                <el-input v-model="password.primitivePassword" type="password" autocomplete="off" clearable show-password />
+            </el-form-item>
+            <el-form-item :label="$t('platform.org.employee.change-password.newPassword')" prop="newPassword">
+                <el-input v-model="password.newPassword" type="password" autocomplete="off" clearable show-password />
+            </el-form-item>
+            <el-form-item :label="$t('platform.org.employee.change-password.repeatPassword')" prop="repeatPassword">
+                <el-input v-model="password.repeatPassword" type="password" autocomplete="off" clearable show-password />
+            </el-form-item>
+        </el-form>
+        <div slot="footer" class="el-dialog--center">
+            <ibps-toolbar
+                :actions="toolbars"
+                @action-event="handleActionEvent"
+            />
+        </div>
+    </el-dialog>
 </template>
 <script>
 import { changePassword, registerChangePassword } from '@/api/platform/org/user'
 import { mapActions } from 'vuex'
 import ActionUtils from '@/utils/action'
+import { encryptByAes } from '@/utils/encrypt'
 
 export default {
-  props: {
-    title: {
-      type: String,
-      default: () => {
-        return this.$t('platform.org.employee.change-password.title')
-      }
-    },
-    visible: Boolean,
-    ids: String,
-    regOpen: {
-      type: Boolean,
-      default: false
-    },
-    isReset: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    const validateNewPassword = (rule, value, callback) => {
-      if (value === '') {
-        callback(new Error('请输入密码'))
-      } else {
-        if (this.password.repeatPassword !== '') {
-          this.$refs[this.formName].validateField('repeatPassword')
-        }
-        callback()
-      }
-    }
-    const validateRepeatPassword = (rule, value, callback) => {
-      if (this.restoreDefaultPassW !== '') return
-      if (value === '') {
-        callback(new Error('请再次输入密码'))
-      } else if (value !== this.password.newPassword) {
-        callback(new Error('两次输入密码不一致!'))
-      } else {
-        callback()
-      }
-    }
-    return {
-      formLabelWidth: '140px',
-      formName: 'passwordForm',
-      dialogLoading: false,
-      dialogVisible: this.visible,
-      restoreDefaultPassW: '',
-      rules: {
-        primitivePassword: [{ required: true, message: this.$t('validate.required') }],
-        newPassword: [
-          { required: true, message: this.$t('validate.required') },
-          { validator: validateNewPassword, trigger: 'change' }
-        ],
-        repeatPassword: [
-          { required: true, message: this.$t('validate.required') },
-          { validator: validateRepeatPassword, trigger: 'change' }
-        ]
-      },
-      password: {
-        userIds: this.ids,
-        // isReset: 0, // 是否重置,0-非重置、非0-重置
-        newPassword: '',
-        repeatPassword: '',
-        primitivePassword: ''// 原始密码
-      },
-      toolbars: [
-        { key: 'save' },
-        { key: 'reset',
-          type: 'warning',
-          label: this.$t('platform.org.employee.change-password.reset'),
-          icon: 'ibps-icon-reply',
-          hidden: () => { return !this.isReset }
+    props: {
+        title: {
+            type: String,
+            default: () => {
+                return this.$t('platform.org.employee.change-password.title')
+            }
         },
-        { key: 'cancel' }
-      ]
-    }
-  },
-  watch: {
-    visible: {
-      handler: function(val, oldVal) {
-        this.dialogVisible = this.visible
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    ...mapActions({
-      logout: 'ibps/account/logout'
-    }),
-    handleActionEvent({ key }) {
-      switch (key) {
-        case 'save':
-          this.handleSave()
-          break
-        case 'reset':
-          this.restoreDefault()
-          break
-        case 'cancel':
-          this.closeDialog()
-          break
-        default:
-          break
-      }
-    },
-    /**
-     * @description 登出
-     */
-    logOff() {
-      this.logout({
-        vm: this,
-        confirm: false
-      })
-    },
-    // 提交(校验)
-    handleSave() {
-      if (this.isReset) {
-        this.rules['primitivePassword'] = [{ required: false, message: this.$t('validate.required') }]
-      }
-      if (this.restoreDefaultPassW === 'restoreDefault') {
-        this.saveData()
-        return
-      }
-      this.$refs[this.formName].validate((valid) => {
-        if (valid) {
-          this.restoreDefaultPassW = ''
-          this.saveData()
-        } else {
-          ActionUtils.saveErrorMessage()
+        visible: Boolean,
+        ids: String,
+        regOpen: {
+            type: Boolean,
+            default: false
+        },
+        isReset: {
+            type: Boolean,
+            default: false
         }
-      })
     },
-    // 提交保存数据
-    saveData() {
-      this.password.userIds = this.ids
-      if (this.$store.getters.regOpen) {
-        this.password.reset = 0 // 0-非重置、1-重置
-        this.password.userIds = this.password.userIds.split(',')
-        registerChangePassword(this.password).then(response => {
-          ActionUtils.saveSuccessMessage(response.message, (rtn) => {
-            this.logOff()
-            if (rtn) {
-              this.closeDialog()
+    data () {
+        const validateNewPassword = (rule, value, callback) => {
+            if (value === '') {
+                callback(new Error('请输入密码'))
+            } else {
+                if (this.password.repeatPassword !== '') {
+                    this.$refs[this.formName].validateField('repeatPassword')
+                }
+                callback()
             }
-          })
-        }).catch((err) => {
-          console.error(err)
-        })
-      } else {
-        this.restoreDefaultPassW === 'restoreDefault' ? this.password.reset = 2 : !this.isReset ? this.password.reset = 0 : this.password.reset = 1
-        this.password.userIds = this.password.userIds.split(',')
-        changePassword(this.password).then(response => {
-          ActionUtils.saveSuccessMessage(response.message, (rtn) => {
-            if (rtn) {
-              this.closeDialog()
+        }
+        const validateRepeatPassword = (rule, value, callback) => {
+            if (this.restoreDefaultPassW !== '') return
+            if (value === '') {
+                callback(new Error('请再次输入密码'))
+            } else if (value !== this.password.newPassword) {
+                callback(new Error('两次输入密码不一致!'))
+            } else {
+                callback()
             }
-          })
-        }).catch((err) => {
-          console.error(err)
-        })
-      }
-    },
-    /**
-     * 还原默认
-     */
-    restoreDefault() {
-      this.password.newPassword = '1'
-      this.password.repeatPassword = '1'
-      this.restoreDefaultPassW = 'restoreDefault'
-      this.saveData()
+        }
+        return {
+            formLabelWidth: '140px',
+            formName: 'passwordForm',
+            dialogLoading: false,
+            dialogVisible: this.visible,
+            restoreDefaultPassW: '',
+            rules: {
+                primitivePassword: [{ required: true, message: this.$t('validate.required') }],
+                newPassword: [
+                    { required: true, message: this.$t('validate.required') },
+                    { validator: validateNewPassword, trigger: 'change' }
+                ],
+                repeatPassword: [
+                    { required: true, message: this.$t('validate.required') },
+                    { validator: validateRepeatPassword, trigger: 'change' }
+                ]
+            },
+            password: {
+                userIds: this.ids,
+                // isReset: 0, // 是否重置,0-非重置、非0-重置
+                newPassword: '',
+                repeatPassword: '',
+                primitivePassword: ''// 原始密码
+            },
+            toolbars: [
+                { key: 'save' },
+                { key: 'reset',
+                    type: 'warning',
+                    label: this.$t('platform.org.employee.change-password.reset'),
+                    icon: 'ibps-icon-reply',
+                    hidden: () => { return !this.isReset }
+                },
+                { key: 'cancel' }
+            ]
+        }
     },
-    // 关闭当前窗口
-    closeDialog() {
-      this.restoreDefaultPassW = ''
-      this.$emit('close', false)
-      this.$refs[this.formName].resetFields() // 初始化状态
+    watch: {
+        visible: {
+            handler: function (val, oldVal) {
+                this.dialogVisible = this.visible
+            },
+            immediate: true
+        }
     },
-    /**
-     * 表单验证
-     */
-    formValidate() {
-      this.$nextTick(() => {
-        this.$refs[this.formName].validate(() => {})
-      })
+    methods: {
+        ...mapActions({
+            logout: 'ibps/account/logout'
+        }),
+        handleActionEvent ({ key }) {
+            switch (key) {
+                case 'save':
+                    this.handleSave()
+                    break
+                case 'reset':
+                    this.restoreDefault()
+                    break
+                case 'cancel':
+                    this.closeDialog()
+                    break
+                default:
+                    break
+            }
+        },
+        /**
+         * @description 登出
+         */
+        logOff () {
+            this.logout({
+                vm: this,
+                confirm: false
+            })
+        },
+        // 提交(校验)
+        handleSave () {
+            if (this.isReset) {
+                this.rules['primitivePassword'] = [{ required: false, message: this.$t('validate.required') }]
+            }
+            if (this.restoreDefaultPassW === 'restoreDefault') {
+                this.saveData()
+                return
+            }
+            this.$refs[this.formName].validate((valid) => {
+                if (valid) {
+                    this.restoreDefaultPassW = ''
+                    this.saveData()
+                } else {
+                    ActionUtils.saveErrorMessage()
+                }
+            })
+        },
+        // 提交保存数据
+        saveData () {
+            this.password.userIds = this.ids
+            const { primitivePassword, repeatPassword, newPassword, userIds } = this.password
+            const params = {
+                userIds: userIds.split(','),
+                primitivePassword: primitivePassword ? encryptByAes(primitivePassword, 'pwd') : '',
+                repeatPassword: encryptByAes(repeatPassword, 'pwd'),
+                newPassword: encryptByAes(newPassword, 'pwd')
+            }
+            if (this.$store.getters.regOpen) {
+                params.reset = 0 // 0-非重置、1-重置
+                registerChangePassword(params).then(response => {
+                    ActionUtils.saveSuccessMessage(response.message, (rtn) => {
+                        this.logOff()
+                        if (rtn) {
+                            this.closeDialog()
+                        }
+                    })
+                }).catch((err) => {
+                    console.error(err)
+                })
+            } else {
+                this.restoreDefaultPassW === 'restoreDefault' ? params.reset = 2 : !this.isReset ? params.reset = 0 : params.reset = 1
+                changePassword(params).then(response => {
+                    ActionUtils.saveSuccessMessage(response.message, (rtn) => {
+                        if (rtn) {
+                            this.closeDialog()
+                        }
+                    })
+                }).catch((err) => {
+                    console.error(err)
+                })
+            }
+        },
+        /**
+         * 还原默认
+         */
+        restoreDefault () {
+            this.password.newPassword = '123456'
+            this.password.repeatPassword = '123456'
+            this.restoreDefaultPassW = 'restoreDefault'
+            this.saveData()
+        },
+        // 关闭当前窗口
+        closeDialog () {
+            this.restoreDefaultPassW = ''
+            this.$emit('close', false)
+            this.$refs[this.formName].resetFields() // 初始化状态
+        },
+        /**
+         * 表单验证
+         */
+        formValidate () {
+            this.$nextTick(() => {
+                this.$refs[this.formName].validate(() => {})
+            })
+        }
     }
-  }
 }
 </script>

+ 3 - 2
src/views/platform/org/employee/edit/basic-info.vue

@@ -122,7 +122,8 @@
                     <el-input v-if="canEdit" v-model="formData.mobile" clearable />
                     <span v-else>{{ formData.mobile }}</span>
                 </el-form-item>
-                <el-form-item v-if="!readonly">
+                <!-- 功能逻辑存在问题,弃用 -->
+                <!-- <el-form-item v-if="!readonly">
                     <template slot="label">
                         入职/转岗培训
                         <help-tip title="" content="开启时,保存数据后将为当前用户开启入职/转岗培训" />
@@ -153,7 +154,7 @@
                         type="dialog"
                         placeholder="请选择培训人员带教老师"
                     />
-                </el-form-item>
+                </el-form-item> -->
             </el-form>
         </el-col>
     </el-row>

+ 5 - 1
src/views/platform/org/employee/edit/index.vue

@@ -121,6 +121,7 @@ import PositionInfo from './position-info'
 import RoleInfo from './role-info'
 import GroupInfo from './group-info'
 import PersonalCode from './personal-qrcode'
+import { encryptByAes } from '@/utils/encrypt'
 
 export default {
     components: {
@@ -162,7 +163,7 @@ export default {
             defaultEmployee: {
                 id: '',
                 account: '',
-                password: 'jyk123456',
+                password: '',
                 isSuper: 'N',
                 name: '',
                 status: 'actived',
@@ -331,6 +332,9 @@ export default {
             const vo = this.formatSubmitData()
             if (!this.$utils.isEmpty(this.formId) && !this.ceroParams) {
                 delete vo.partyEmployeePo.password
+            } else {
+                // 创建用户时密码加密处理
+                vo.partyEmployeePo.password = encryptByAes(vo.partyEmployeePo.password, 'pwd')
             }
             if (vo.positionVoList.length === 0) {
                 ActionUtils.warning('请选择部门')

+ 2 - 1
src/views/platform/org/employee/list.vue

@@ -79,6 +79,7 @@ import CustomDataDisplayMixin from '@/business/platform/system/mixins/customData
 import importTable from '@/business/platform/form/formrender/dynamic-form/components/import-table'
 import MoreSearch from './more-search'
 import IbpsImport from '@/plugins/import'
+import { encryptByAes } from '@/utils/encrypt'
 export default {
     components: {
         Edit,
@@ -723,7 +724,7 @@ export default {
                 const userItem = {
                     id: '',
                     account: item.account,
-                    password: this.defaultPwd,
+                    password: encryptByAes(this.defaultPwd, 'pwd'),
                     isSuper: 'N',
                     name: item.username,
                     status: 'actived',

+ 4 - 1
src/views/system/login/user-login.vue

@@ -124,6 +124,7 @@
 import { mapActions } from 'vuex'
 import Utils from '@/utils/util'
 import I18n from '@/utils/i18n'
+import { encryptByAes } from '@/utils/encrypt'
 const loginForm = process.env.NODE_ENV === 'development'
     ? {
         username: 'jinyuan',
@@ -355,7 +356,9 @@ export default {
                     text: this.$t('common.loading'),
                     background: 'rgba(0, 0, 0, 0.7)'
                 })
-                this.login({ form: this.loginForm }).then(data => {
+                const submitData = structuredClone(this.loginForm)
+                submitData.password = encryptByAes(submitData.password, 'pwd')
+                this.login({ form: submitData }).then(data => {
                     localStorage.setItem('statistic', data.statistic)
                     // 更新路由 尝试去获取 cookie 里保存的需要重定向的页面完整地址
                     const redirect = this.$route.query.redirect