doum
2025-09-26 9057e04efad1b7d61c77a72e5c37a504d0aee935
admin/src/components/system/user/ResetPwdWindow.vue
@@ -31,12 +31,38 @@
      },
      rules: {
        password: [
          { required: true, message: '请输入密码' }
          { required: true, message: '请输入密码', trigger: 'blur' },
          { validator: this.validatePassword, trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    validatePassword (rule, value, callback) {
      if (!value) {
        callback(new Error('请输入密码'))
      } else {
        const lengthValid = /^.{6,20}$/.test(value)
        const hasLetter = /[a-zA-Z]/.test(value)
        const hasNumber = /[0-9]/.test(value)
        const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value)
        const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length
        if (!lengthValid) {
          callback(new Error('密码长度需为6到20个字符'))
        } else if (typesCount < 2) {
          callback(new Error('密码需包含字母、数字及特殊字符中的至少两种'))
        } else {
          callback() // 验证通过
        }
      }
    },
    /**
     * 打开窗口
     *
     * @param user 目标用户
     */
    open (user) {
      this.user = user
      this.visible = true
@@ -44,7 +70,9 @@
        this.$refs.form.resetFields()
      })
    },
    // 确认重置密码
    /**
     * 确认重置密码
     */
    confirm () {
      if (this.isWorking) {
        return