hurixing 1 год назад
Родитель
Сommit
597840e808

+ 13 - 0
src/api/doctor/physician.js

@@ -43,3 +43,16 @@ export function departmentList(query) {
     data: query
   })
 }
+
+// 用户密码重置
+export function violentResetPwd(id, pwd) {
+  const data = {
+    id,
+    pwd
+  }
+  return request({
+    url: '/doctor/violentResetPwd',
+    method: 'post',
+    data: data
+  })
+}

+ 55 - 40
src/views/doctor/physician/index.vue

@@ -21,7 +21,12 @@
     <el-table v-loading="loading" :data="listData" row-key="id">
       <el-table-column prop="userName" label="医生真实姓名" :show-overflow-tooltip="true"></el-table-column>
       <!-- <el-table-column prop="mobile" label="手机号"></el-table-column> -->
-      <el-table-column prop="idCard" label="身份证号" :show-overflow-tooltip="true"></el-table-column>
+      <el-table-column prop="idCard" label="身份证号" :show-overflow-tooltip="true">
+        <template #default="{ row }">
+        <!-- 自定义显示内容 -->
+        <span>{{ maskIdCard(row.idCard) }}</span>
+      </template>
+      </el-table-column>
       <el-table-column prop="orgName" label="在职医院"></el-table-column>
       <el-table-column prop="departmentName" label="所在科室">
         <template slot-scope="scope">
@@ -118,7 +123,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="邮箱" prop="email">
-              <el-input v-model.trim="form.email" placeholder="请输入邮箱" maxlength="30" />
+              <el-input v-model.trim="form.email" placeholder="请输入邮箱" maxlength="50" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -176,20 +181,20 @@
     <!-- 修改密码 -->
     <el-dialog title="修改密码" :visible.sync="openPass" width="700px" append-to-body destroy-on-close>
       <el-form ref="formPass" :model="formPass" :rules="rulesPass" label-width="110px">
-         <el-form-item label="旧密码" prop="oldPassword">
+        <!--  <el-form-item label="旧密码" prop="oldPassword">
           <el-input v-model="formPass.oldPassword" placeholder="请输入旧密码" type="password" show-password />
-        </el-form-item>
-        <el-form-item label="新密码" prop="newPassword">
-          <el-input v-model="formPass.newPassword" placeholder="请输入新密码" type="password" show-password />
-        </el-form-item>
-        <el-form-item label="确认密码" prop="confirmPassword">
+        </el-form-item> -->
+        <el-form-item label="新密码" prop="newPassword">
+          <el-input v-model="formPass.newPassword" placeholder="请输入新密码" type="password" show-password />
+        </el-form-item>
+<!--         <el-form-item label="确认密码" prop="confirmPassword">
           <el-input
             v-model="formPass.confirmPassword"
             placeholder="请确认新密码"
             type="password"
             show-password
           />
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item>
            <el-button type="primary" size="mini" @click="submit">修改</el-button>
           <el-button type="danger" size="mini" @click="close">关闭</el-button> 
@@ -200,7 +205,7 @@
 </template>
 
 <script>
-import { listData, doctorSave, doctorDel,departmentList,doctorEdit } from "@/api/doctor/physician";
+import { listData, doctorSave, doctorDel,departmentList,doctorEdit,violentResetPwd } from "@/api/doctor/physician";
 import { updateUserPwd,unlockUser } from "@/api/system/user";
 import { symmetryEncrypt } from '@/utils/secret.js'
 export default {
@@ -208,20 +213,20 @@ export default {
   dicts: ['department', 'dict_sex', 'dict_status', 'physician_title'],
   components: {},
   data() {
-    const equalToPassword = (rule, value, callback) => {
-      if (this.formPass.newPassword !== value) {
-        callback(new Error("两次输入的密码不一致"));
-      } else {
-        callback();
-      }
-    };
+    // const equalToPassword = (rule, value, callback) => {
+    //   if (this.formPass.newPassword !== value) {
+    //     callback(new Error("两次输入的密码不一致"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
     return {
       // 修改密码弹出层
-      openPass: false,
-      formPass: {
-        oldPassword: undefined,
+      openPass: false,
+      formPass: {
+        // oldPassword: undefined,
         newPassword: undefined,
-        confirmPassword: undefined
+        // confirmPassword: undefined
       },
       // 遮罩层
       loading: true,
@@ -245,22 +250,15 @@ export default {
 
       },
       rulesPass:{
-        oldPassword:[
-          { required: true, message: "旧密码不能为空", trigger: "blur" },
-        ],
-        newPassword: [
-          { required: true, message: "新密码不能为空", trigger: "blur" },
-          {
-            pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,19}$/,
-            message:
-              "密码长度必须大于8位数小于20位数且包含大小写字母,数字,特殊字符(!@#$%^&*)",
-            trigger: "blur"
-          }
-        ],
-        confirmPassword: [
-          { required: true, message: "确认密码不能为空", trigger: "blur" },
-          { required: true, validator: equalToPassword, trigger: "blur" }
-        ],
+        newPassword:[
+        { required: true, message: "新密码不能为空", trigger: "blur" },
+          {
+            pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,19}$/,
+            message:
+            "密码长度必须大于8位数小于20位数且包含大小写字母,数字,特殊字符(!@#$%^&*)",
+            trigger: "blur"
+          }
+        ],
       },
       // 表单校验
       rules: {
@@ -319,7 +317,8 @@ export default {
           { required: true, message: "性别不能为空", trigger: "blur" }
         ],
       },
-      department:[]
+      department:[],
+      debouncedSubmitForm: this.debounce(this.submitForm, 3000), // 防抖函数,1秒内只能触发一次
     };
   },
   created() {
@@ -327,6 +326,23 @@ export default {
     this.getdepartmentList()
   },
   methods: {
+    // 防抖函数
+    debounce(fn, delay) {
+      let timer = null;
+      return function (...args) {
+        if (timer) clearTimeout(timer);
+        timer = setTimeout(() => {
+          fn.apply(this, args);
+        }, delay);
+      }
+    },
+    maskIdCard(idCard) {
+      if (!idCard || idCard.length < 10) return idCard; // 如果身份证号码不合法,直接返回
+      const visiblePrefix = idCard.slice(0, 6); // 前6位
+      const visibleSuffix = idCard.slice(-4); // 后4位
+      const maskedPart = '*'.repeat(idCard.length - 10); // 中间用*代替
+      return `${visiblePrefix}${maskedPart}${visibleSuffix}`;
+    },
     unlockUser(id){
       unlockUser(id).then(response => {
         this.$modal.msgSuccess("解锁成功");
@@ -336,9 +352,8 @@ export default {
     submit() {
        this.$refs["formPass"].validate(valid => {
          if (valid) {
-           let oldPassword = symmetryEncrypt(this.formPass.oldPassword);
            let newPassword = symmetryEncrypt(this.formPass.newPassword);
-           updateUserPwd(this.formPass.id, oldPassword, newPassword).then(response => {
+          violentResetPwd(this.formPass.id, newPassword).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.close()
            });

+ 26 - 4
src/views/doctor/therapists/index.vue

@@ -21,7 +21,12 @@
     <el-table v-loading="loading" :data="listData" row-key="id">
       <el-table-column prop="userName" label="康复师真实姓名" :show-overflow-tooltip="true"></el-table-column>
       <!-- <el-table-column prop="mobile" label="手机号"></el-table-column> -->
-      <el-table-column prop="idCard" label="身份证号" :show-overflow-tooltip="true"></el-table-column>
+      <el-table-column prop="idCard" label="身份证号" :show-overflow-tooltip="true">
+        <template #default="{ row }">
+        <!-- 自定义显示内容 -->
+        <span>{{ maskIdCard(row.idCard) }}</span>
+      </template>
+      </el-table-column>
       <el-table-column prop="orgName" label="在职医院"></el-table-column>
       <el-table-column prop="departmentName" label="所在科室">
         <template slot-scope="scope">
@@ -104,7 +109,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="邮箱" prop="email">
-              <el-input v-model.trim="form.email" placeholder="请输入邮箱" maxlength="30" />
+              <el-input v-model.trim="form.email" placeholder="请输入邮箱" maxlength="50" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -239,8 +244,8 @@ export default {
           { required: true, message: "性别不能为空", trigger: "blur" }
         ],
       },
-      department: []
-
+      department: [],
+      debouncedSubmitForm: this.debounce(this.submitForm, 3000), // 防抖函数,1秒内只能触发一次
     };
   },
   created() {
@@ -249,6 +254,23 @@ export default {
 
   },
   methods: {
+    // 防抖函数
+    debounce(fn, delay) {
+      let timer = null;
+      return function (...args) {
+        if (timer) clearTimeout(timer);
+        timer = setTimeout(() => {
+          fn.apply(this, args);
+        }, delay);
+      }
+    },
+    maskIdCard(idCard) {
+      if (!idCard || idCard.length < 10) return idCard; // 如果身份证号码不合法,直接返回
+      const visiblePrefix = idCard.slice(0, 6); // 前6位
+      const visibleSuffix = idCard.slice(-4); // 后4位
+      const maskedPart = '*'.repeat(idCard.length - 10); // 中间用*代替
+      return `${visiblePrefix}${maskedPart}${visibleSuffix}`;
+    },
     /** 解锁 */
     unlockUser(id){
       unlockUser(id).then(response => {

+ 4 - 0
src/views/game/list/index.vue

@@ -200,6 +200,10 @@
           <el-form-item prop="desn" label="游戏玩法">
             <el-input v-model.trim="form.desn" type="textarea" placeholder="请输入游戏玩法" maxlength="800" />
           </el-form-item>
+          <el-form-item prop="recommendedCStatus" label="自由训练首次推荐">
+            <el-switch v-model="form.recommendedCStatus" active-value="0" inactive-value="1">
+            </el-switch>
+          </el-form-item>
           <el-form-item prop="gameShortDesn" label="游戏简述">
             <el-input v-model.trim="form.gameShortDesn" type="textarea" placeholder="请输入游戏简述" maxlength="100" />
           </el-form-item>

+ 1 - 1
src/views/order/list/index.vue

@@ -75,7 +75,7 @@
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" v-if="scope.row.payStatus == '2'"
+          <el-button size="mini" type="text" v-if="scope.row.payStatus == '2' && scope.row.orderType =='A' "
             @click="handleRetrun(scope.row)">退款</el-button>
         </template>
       </el-table-column>

+ 15 - 5
src/views/patient/add/index.vue

@@ -16,7 +16,7 @@
               </el-select>
             </el-form-item>
             <el-form-item prop="mobile" label="手机号码">
-              <el-input v-model.trim="form.mobile" placeholder="请输入名称" maxlength="11" />
+              <el-input v-model.trim="form.mobile" placeholder="请输入手机号" maxlength="11" />
             </el-form-item>
             <el-form-item prop="occupation" label="职业">
               <!-- <el-input v-model.trim="form.occupation" placeholder="请输入名称" maxlength="20" /> -->
@@ -338,7 +338,7 @@ export default {
         priceYUAN: 0
       },
       rules: {
-        name: [{ required: true, message: "名不能为空" }],
+        name: [{ required: true, message: "名不能为空" }],
         idCard: [{ required: true, message: "身份证不能为空" },
         {
           pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
@@ -347,7 +347,7 @@ export default {
         }],
         gender: [{ required: true, message: "性别不能为空" }],
         mobile: [
-          { required: true, message: "手机号不能为空", trigger: "blur" },
+          { required: true, message: "手机号不能为空", trigger: "blur" },
           {
             pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
             message: "请输入正确的手机号码",
@@ -390,8 +390,8 @@ export default {
       userId: '',
       oldVal: {},
       isShowPay: false,
-      isShowPay1: false
-
+      isShowPay1: false,
+      debouncedSubmitForm: this.debounce(this.handelnNext, 6000), // 防抖函数,1秒内只能触发一次
     };
   },
   mounted() {
@@ -422,6 +422,16 @@ export default {
     }
   },
   methods: {
+    // 防抖函数
+    debounce(fn, delay) {
+      let timer = null;
+      return function (...args) {
+        if (timer) clearTimeout(timer);
+        timer = setTimeout(() => {
+          fn.apply(this, args);
+        }, delay);
+      }
+    },
     handleGetEquipmentList() {
       equipmentList({ page: 1, limit: 99999999, status: 'A', equipmentType: 'A' }).then(res => {
         this.padList = res.data.records.map(item => {

+ 1 - 1
src/views/patient/historyList/lookDetail.vue

@@ -56,7 +56,7 @@
           </el-descriptions-item>
           <el-descriptions-item>
             <template slot="label">
-              脑力值
+              综合得分
             </template>
             {{ defaultVal.mentalEnergy }}
           </el-descriptions-item>

+ 3 - 3
src/views/patient/historyList/trainDetatil.vue

@@ -38,7 +38,7 @@
             </div>
             <div class="top2" v-if="!isshow">
               <div :class="activeTab == 'A' ? 'top2_item active' : 'top2_item'" @click="changeTab('A')">
-                专属训练
+                专属任务
               </div>
               <div :class="activeTab == 'B,C' ? 'top2_item active' : 'top2_item'" @click="changeTab('B,C')">
                 自由训练
@@ -58,9 +58,9 @@
                 <span style="font-size: 12px; ">游戏得分:{{ item.totalGameScore
                 }}分</span>
               </div>
-              <div style="width: 10%; padding-top: 10px;">
+              <!-- <div style="width: 10%; padding-top: 10px;">
                 {{ item.isPass == '0' ? '✔️' : '❌' }}
-              </div>
+              </div> -->
             </div>
           </div>
           <div class="btn" @click="gotoRb" v-if="activeTab == 'A' && listData.length != 0">

+ 1 - 1
src/views/patient/list/lookDetail.vue

@@ -56,7 +56,7 @@
           </el-descriptions-item>
           <el-descriptions-item>
             <template slot="label">
-              脑力值
+              综合得分
             </template>
             {{ defaultVal.mentalEnergy }}
           </el-descriptions-item>

+ 3 - 3
src/views/patient/list/trainDetatil.vue

@@ -37,7 +37,7 @@
             </div>
             <div class="top2" v-if="!isshow">
               <div :class="activeTab == 'A' ? 'top2_item active' : 'top2_item'" @click="changeTab('A')">
-                专属训练
+                专属任务
               </div>
               <div :class="activeTab == 'B,C' ? 'top2_item active' : 'top2_item'" @click="changeTab('B,C')">
                 自由训练
@@ -57,9 +57,9 @@
                 <span style="font-size: 12px; ">游戏得分:{{ item.totalGameScore
                 }}分</span>
               </div>
-              <div style="width: 10%; padding-top: 10px;">
+              <!-- <div style="width: 10%; padding-top: 10px;">
                 {{ item.isPass == '0' ? '✔️' : '❌' }}
-              </div>
+              </div> -->
             </div>
           </div>
           <div class="btn" @click="gotoRb" v-if="activeTab == 'A' && listData.length != 0">