瀏覽代碼

1

1审批加审批人
2.员工管理  平台员工管理加权限
3.初试密码修改提示
mo 2 年之前
父節點
當前提交
ef78478a71

+ 68 - 80
src/layout/components/Navbar.vue

@@ -24,10 +24,7 @@
     <div class="indexlayout-top-menu">
       <!-- :class="{'active': getTopMenuActive === route.path}" -->
       <!-- el-scrollbar -->
-      <el-scrollbar
-        class="horizontal-scrollbar"
-        style="overflow: hidden; height: 100%"
-      >
+      <el-scrollbar class="horizontal-scrollbar" style="overflow: hidden; height: 100%">
         <template v-for="route in permission_routes">
           <app-link
             v-if="!route.hidden"
@@ -37,7 +34,13 @@
             :class="{ active: getTopMenuActive === route.path }"
           >
             <div
-              style="display: flex; align-items: center; justify-content: center; flex-direction: column; height: 76px;"
+              style="
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                flex-direction: column;
+                height: 76px;
+              "
             >
               <i :class="[route.meta.icon, 'menuSize']"></i>
               <span style="line-height: 1.2">{{ route.meta.title }}</span>
@@ -48,7 +51,7 @@
     </div>
     <div class="right-menu">
       <el-tooltip
-        style="display: flex;"
+        style="display: flex"
         effect="dark"
         v-if="tenantForm.tenantId == 1"
         content="点击进入商城系统"
@@ -59,7 +62,7 @@
         </div>
       </el-tooltip>
       <el-tooltip
-        style="display: flex;"
+        style="display: flex"
         effect="dark"
         v-if="tenantForm.tenantId == 1"
         content="点击进入OA系统"
@@ -119,21 +122,17 @@
         </div>
       </el-popover> -->
       <el-tooltip
-        style="display: flex;"
+        style="display: flex"
         effect="dark"
         content="点击查看系统日志"
         placement="bottom"
       >
-        <div
-          class="msginfo right-position"
-          v-permission="'/journal'"
-          @click="gotoRecode"
-        >
+        <div class="msginfo right-position" v-permission="'/journal'" @click="gotoRecode">
           <i class="icon_admin_message operationSize"></i>
         </div>
       </el-tooltip>
       <el-tooltip
-        style="display: flex;"
+        style="display: flex"
         effect="dark"
         content="点击打开聊天"
         placement="bottom"
@@ -149,7 +148,7 @@
           placement="top-start"
           width="300"
           trigger="hover"
-          style="display: flex;"
+          style="display: flex"
         >
           <div class="popover-container">
             <el-tag
@@ -165,11 +164,7 @@
           </span>
         </el-popover>
       </div>
-      <el-dropdown
-        class="avatar-container"
-        trigger="hover"
-        style="margin-left: 12px"
-      >
+      <el-dropdown class="avatar-container" trigger="hover" style="margin-left: 12px">
         <div class="avatar-wrapper">
           <img
             v-if="$store.getters.avatar"
@@ -212,20 +207,16 @@
                 @click="onRenew"
                 v-if="
                   $helpers.permission('/ productService') &&
-                    $helpers.permission('/serviceRenew')
+                  $helpers.permission('/serviceRenew')
                 "
               >
                 立即续费
               </div>
             </div>
             <div class="serviceTime" v-if="tenantInfo.validRemaining > 0">
-              剩余{{ tenantInfo.validRemaining }}天({{
-                tenantInfo.expiryDateEnd
-              }})到期
-            </div>
-            <div class="serviceTime" v-else>
-              已过期
+              剩余{{ tenantInfo.validRemaining }}天({{ tenantInfo.expiryDateEnd }})到期
             </div>
+            <div class="serviceTime" v-else>已过期</div>
           </div>
           <!-- divided -->
           <el-dropdown-item v-if="tenantStatus" @click.native="onTenantChange">
@@ -244,22 +235,14 @@
             <i class="icon_admin_account userSize"></i>
             <span class="dropdown-text">账号设置</span>
           </el-dropdown-item>
-          <el-dropdown-item
-            style="border-top: 1px solid #E5E5E5;"
-            @click.native="logout"
-          >
+          <el-dropdown-item style="border-top: 1px solid #e5e5e5" @click.native="logout">
             <i class="icon_admin_exit userSize"></i>
             <span class="dropdown-text">安全退出</span>
           </el-dropdown-item>
         </el-dropdown-menu>
       </el-dropdown>
     </div>
-    <el-dialog
-      title="修改密码"
-      width="500px"
-      append-to-body
-      :visible.sync="resetVisible"
-    >
+    <el-dialog title="修改密码" width="500px" append-to-body :visible.sync="resetVisible">
       <el-form
         :model="resetForm"
         label-position="right"
@@ -276,8 +259,8 @@
             {
               pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
               message: '密码为6-20位数字和字母组合',
-              trigger: 'blur'
-            }
+              trigger: 'blur',
+            },
           ]"
           prop="password"
         >
@@ -295,8 +278,8 @@
             {
               pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
               message: '密码为6-20位数字和字母组合',
-              trigger: 'blur'
-            }
+              trigger: 'blur',
+            },
           ]"
           prop="password2"
         >
@@ -309,9 +292,7 @@
         </el-form-item>
         <el-form-item
           label="验证码"
-          :rules="[
-            { required: true, message: '验证码不能为空', trigger: 'blur' }
-          ]"
+          :rules="[{ required: true, message: '验证码不能为空', trigger: 'blur' }]"
           prop="authCode"
           style=""
         >
@@ -320,9 +301,7 @@
             style="width: 180px"
             autocomplete="off"
           ></el-input>
-          <el-button :disabled="isDisable" @click="getCode">{{
-            btnName
-          }}</el-button>
+          <el-button :disabled="isDisable" @click="getCode">{{ btnName }}</el-button>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -346,9 +325,7 @@
       >
         <el-form-item
           label="选择机构"
-          :rules="[
-            { required: true, message: '请选择机构', trigger: 'change' }
-          ]"
+          :rules="[{ required: true, message: '请选择机构', trigger: 'change' }]"
           prop="tenantId"
         >
           <el-select
@@ -416,7 +393,7 @@ export default {
         phone: "",
         authCode: "",
         password: "",
-        password2: ""
+        password2: "",
       },
       isDisable: false, // 是否允许发送验证码
       timerCount: 60,
@@ -425,17 +402,17 @@ export default {
       tenantVisible: false,
       tenantName: tenantConfig.tenantName || null,
       tenantForm: {
-        tenantId: Number(tenantConfig.tenantId) || null
+        tenantId: Number(tenantConfig.tenantId) || null,
       },
       tenantList: [],
       tenantLogo: tenantConfig.tenantLogo || null,
-      noReadNum: 0
+      noReadNum: 0,
     };
   },
 
   components: {
     AppLink,
-    userModel
+    userModel,
     // instructions,
     // Breadcrumb,
     // Hamburger
@@ -447,7 +424,7 @@ export default {
       "name",
       "positionName",
       "permission_routes",
-      "tenantInfo"
+      "tenantInfo",
     ]),
     getTopMenuActive() {
       let route = this.$route;
@@ -458,10 +435,25 @@ export default {
       // 判断是否是平台账号 true 是
       const baseTenantId = sessionStorage.getItem("baseTenantId");
       return baseTenantId < 0 ? true : false;
-    }
+    },
   },
   mounted() {
-    this.$bus.$on("getShowNums", obj => {
+    // this.$bus.$on("resetPwd", () => {
+    //   this.resetPassWord();
+    // });
+    console.log(this.$store.getters.pwdflag, "getpwdflag");
+    if (this.$store.getters.pwdflag) {
+      this.$confirm("当前账号存在安全风险是否修改密码", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.resetPassWord();
+        })
+        .catch(() => {});
+    }
+    this.$bus.$on("getShowNums", (obj) => {
       this.noReadNum = obj;
     });
     // 手动加入
@@ -485,7 +477,7 @@ export default {
           page: 1,
           rows: 999,
           payState: 1,
-          state: 1
+          state: 1,
         });
         this.tenantList = res.data?.rows || [];
         this.tenantVisible = true;
@@ -495,12 +487,12 @@ export default {
       this.$router.push("/productService");
     },
     submitTenant() {
-      this.$refs["tenantForm"].validate(res => {
+      this.$refs["tenantForm"].validate((res) => {
         if (res) {
           const tenantForm = this.tenantForm;
           let tenantName = null;
           let tenantLogo = null;
-          this.tenantList.forEach(item => {
+          this.tenantList.forEach((item) => {
             if (item.id == tenantForm.tenantId) {
               tenantName = item.name;
               tenantLogo = item.logo;
@@ -516,13 +508,10 @@ export default {
             tenantConfig.tenantId = tenantForm.tenantId;
             tenantConfig.tenantName = tenantName;
             tenantConfig.tenantLogo = tenantLogo;
-            sessionStorage.setItem(
-              "tenantConfig",
-              JSON.stringify(tenantConfig)
-            );
+            sessionStorage.setItem("tenantConfig", JSON.stringify(tenantConfig));
             this.$router.push({
               path: "/redirect",
-              query: this.$route.fullPath
+              query: this.$route.fullPath,
             });
             // } else {
             //     this.$router.push({
@@ -557,14 +546,14 @@ export default {
         this.$message.error("两次密码必须相同");
         return;
       }
-      this.$refs["pwdForm"].validate(res => {
+      this.$refs["pwdForm"].validate((res) => {
         if (res) {
           // 发请求
           resetPassword({
             authCode: this.resetForm.authCode,
             mobile: this.$store.getters.phone,
-            newPassword: this.resetForm.password
-          }).then(res => {
+            newPassword: this.resetForm.password,
+          }).then((res) => {
             if (res.code == 200) {
               // 修改成功
               this.$message.success("修改成功");
@@ -589,9 +578,9 @@ export default {
             "/api-web/code/sendSms",
             qs.stringify({ mobile: this.$store.getters.phone })
           )
-          .then(res => {
+          .then((res) => {
             if (res.data.code == 200) {
-              let timer = setInterval(res => {
+              let timer = setInterval((res) => {
                 if (this.timerCount <= 0) {
                   clearInterval(timer);
                   this.isDisable = false;
@@ -626,7 +615,7 @@ export default {
     gotoChart() {
       // 初始化未读数
       this.$bus.$emit("openChart", true);
-    }
+    },
   },
   watch: {
     resetVisible(val) {
@@ -635,11 +624,11 @@ export default {
           phone: "",
           authCode: "",
           password: "",
-          password2: ""
+          password2: "",
         };
       }
-    }
-  }
+    },
+  },
 };
 </script>
 
@@ -647,10 +636,10 @@ export default {
 .navbar_tag {
   margin: 0 5px 8px;
 }
-::v-deep .el-scrollbar__thumb{
-  background-color: rgba(255,255,255,.3);
-  &:hover{
-    background-color: rgba(255,255,255,.3);
+::v-deep .el-scrollbar__thumb {
+  background-color: rgba(255, 255, 255, 0.3);
+  &:hover {
+    background-color: rgba(255, 255, 255, 0.3);
   }
 }
 .indexlayout-top-menu {
@@ -856,8 +845,7 @@ export default {
     .avatar-wrapper {
       display: flex;
       align-items: center;
-      background: url("../../assets/images/user_tips.png") no-repeat right
-        center;
+      background: url("../../assets/images/user_tips.png") no-repeat right center;
       background-size: 45%;
       width: 100%;
       .user-avatar {

+ 1 - 0
src/store/getters.js

@@ -19,6 +19,7 @@ const getters = {
   isSuperAdmin:state=>state.user.isSuperAdmin,
   roles:state=>state.user.roles,
   newRoles:state=>state.user.newRoles,
+  pwdflag:state=>state.user.pwdflag,
   newStudentinfo: state => state.buildTeam.newStudentList,
   reactClassStudentList:state=>state.reactClassStudent.classList ,
   buildIndex:state=>state.buildTeam.buildIndex,

+ 28 - 22
src/store/modules/user.js

@@ -5,7 +5,7 @@ import {
   removeToken,
   removeCrossToken,
   setCrossToken,
-  removeTenant
+  removeTenant,
 } from "@/utils/auth";
 import { tenantInfoQueryPage, tenantInfoInfo } from "@/views/organManager/api";
 import { resetRouter } from "@/router";
@@ -21,10 +21,11 @@ const state = {
   phone: "",
   isSuperAdmin: false,
   roles: [],
-  newRoles:[],
+  newRoles: [],
   tenantId: null,
   baseTenantId: null,
-  imToken: ""
+  imToken: "",
+  pwdflag: false,
 };
 
 let stateTenantId = null; // 机构编号
@@ -60,8 +61,8 @@ const mutations = {
   SET_ROLES: (state, roles) => {
     state.roles = roles;
   },
-  SET_NEWROLES:(state,newRoles)=>{
-    state.newRoles = newRoles
+  SET_NEWROLES: (state, newRoles) => {
+    state.newRoles = newRoles;
   },
   SET_TENANTID: (state, tenantId) => {
     state.tenantId = tenantId;
@@ -74,7 +75,10 @@ const mutations = {
   },
   SET_IMTOKEN: (state, imToken) => {
     state.imToken = imToken;
-  }
+  },
+  SET_RESETPWD: (state, pwdflag) => {
+    state.pwdflag = pwdflag;
+  },
 };
 
 async function tenantQueryPage(id) {
@@ -85,7 +89,7 @@ async function tenantQueryPage(id) {
         page: 1,
         rows: 1,
         payState: 1,
-        state: 1
+        state: 1,
       });
       const tenantList = res.data?.rows || [];
       tenantId = tenantList[0]?.id;
@@ -103,7 +107,7 @@ async function tenantQueryPage(id) {
           tenantId: data.id,
           tenantName: data.name,
           tenantLogo: data.logo,
-          tenantStatus: "on" // 判断是否此状态,没有的话,刷新页面会重新请求页面
+          tenantStatus: "on", // 判断是否此状态,没有的话,刷新页面会重新请求页面
         })
       );
     }
@@ -127,15 +131,13 @@ const actions = {
         username: username.trim(),
         password: password,
         clientId: "system",
-        clientSecret: "system"
+        clientSecret: "system",
       })
-        .then(response => {
+        .then((response) => {
           const { data } = response;
           if (response.code == 200) {
             let token =
-              data.authentication.token_type +
-              " " +
-              data.authentication.access_token;
+              data.authentication.token_type + " " + data.authentication.access_token;
             commit("SET_REFRESH_TOKEN", data.authentication.refresh_token);
             commit("SET_EXPIRES_IN", data.authentication.expires_in);
             commit("SET_TOKEN", token);
@@ -144,7 +146,7 @@ const actions = {
             resolve();
           }
         })
-        .catch(error => {
+        .catch((error) => {
           reject(error);
           console.log("登录错误", error);
         });
@@ -155,7 +157,7 @@ const actions = {
     return new Promise(async (resolve, reject) => {
       try {
         await getInfo(state.token)
-          .then(async response => {
+          .then(async (response) => {
             if (response.code == 200) {
               const data = response;
               if (!data.data) {
@@ -188,6 +190,11 @@ const actions = {
                 const theme = tenantConfig.theme;
                 setTheme({ theme, themeColor });
               }
+              // if( !data.data.resetFlag){
+              //   this.$bus.$emit("resetPwd");
+              // }
+              commit("SET_RESETPWD", data.data.resetFlag);
+
               commit("SET_TENANTID", stateTenantId);
               commit("SET_NAME", username);
               commit("SET_AVATAR", avatar);
@@ -197,7 +204,7 @@ const actions = {
               commit("SET_SUPERADMIN", isSuperAdmin);
               commit("SET_ROLES", roles);
               commit("SET_NEWROLES", newRoles);
-              newRoles
+              newRoles;
               commit("SET_POSITIONNAME", positionName);
               commit("SET_IMTOKEN", imToken);
               resolve(data);
@@ -205,7 +212,7 @@ const actions = {
               reject("获取用户信息错误,请重新登录");
             }
           })
-          .catch(error => {
+          .catch((error) => {
             reject("获取用户信息错误,请重新登录");
           });
       } catch (e) {
@@ -218,7 +225,6 @@ const actions = {
     return new Promise((resolve, reject) => {
       logout()
         .then((res) => {
-          console.log(res)
           commit("SET_TOKEN", "");
           removeToken();
           setToken("");
@@ -228,7 +234,7 @@ const actions = {
           commit("SET_NAME", "");
           resolve();
         })
-        .catch(error => {
+        .catch((error) => {
           reject(error);
         });
     });
@@ -236,7 +242,7 @@ const actions = {
 
   // remove token
   resetToken({ commit }) {
-    return new Promise(resolve => {
+    return new Promise((resolve) => {
       commit("SET_TOKEN", "");
       removeToken();
       removeCrossToken();
@@ -244,12 +250,12 @@ const actions = {
       resolve();
       setToken("");
     });
-  }
+  },
 };
 
 export default {
   namespaced: true,
   state,
   mutations,
-  actions
+  actions,
 };

+ 8 - 1
src/views/auditList/api.js

@@ -4,4 +4,11 @@ export const cloudCoachPaymentProgramAudit = data => request2({
   url: '/api-web/cloudCoachPaymentProgram/audit',
   data,
   method: 'post',
-})
+})
+
+export const getCalenderUser = data => request2({
+  url: '/api-web/musicGroupPaymentCalender/queryUser',
+  params:data,
+   data,
+  method: 'get',
+})

+ 120 - 88
src/views/auditList/member.vue

@@ -32,20 +32,36 @@
             ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.audit"
+            filterable
+            clearable
+            placeholder="请选择审核人"
+          >
+            <el-option
+              v-for="(item, index) in userList"
+              :key="index"
+              :label="item.auditName"
+              :value="item.audit"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item prop="visitTime">
-            <el-date-picker
-              v-model.trim="searchForm.visitTime"
-              style="width: 410px"
-              type="daterange"
-              :picker-options="{
-                firstDayOfWeek: 1,
-              }"
-              :default-time="['00:00:00', '23:59:59']"
-              range-separator="至"
-              start-placeholder="创建开始日期"
-              end-placeholder="创建结束日期"
-            ></el-date-picker>
-          </el-form-item>
+          <el-date-picker
+            v-model.trim="searchForm.visitTime"
+            style="width: 410px"
+            type="daterange"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+            :default-time="['00:00:00', '23:59:59']"
+            range-separator="至"
+            start-placeholder="创建开始日期"
+            end-placeholder="创建结束日期"
+          ></el-date-picker>
+        </el-form-item>
         <el-form-item>
           <el-select
             class="multiple"
@@ -71,98 +87,97 @@
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
           :data="tableList"
         >
-          <el-table-column
-            align="center"
-            prop="id"
-            label="续费编号"
-          ></el-table-column>
-          <el-table-column align="center" prop="organName" label="分部名称">
+          <el-table-column align="left" prop="id" label="续费编号"></el-table-column>
+          <el-table-column align="left" prop="organName" label="分部名称">
           </el-table-column>
-          <el-table-column align="center" prop="name" label="云教练单位">
+          <el-table-column align="left" prop="name" label="云教练">
             <template slot-scope="scope">
-              {{ scope.row.period | memberEnumType }}
+              <div>
+                <p>
+                  续费周期: {{ scope.row.memberNum ? scope.row.memberNum : "--"
+                  }}{{ scope.row.period | memberEnumType }}
+                </p>
+                <p>缴费金额: {{ scope.row.actualAmount | moneyFormat(true) }}</p>
+              </div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="memberNum" label="周期数">
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="subjectName"
-            label="缴费金额(元)"
-          >
+          <!-- <el-table-column align="left" prop="memberNum" label="周期数">
+          </el-table-column> -->
+          <!-- <el-table-column align="left" prop="subjectName" label="缴费金额(元)">
             <template slot-scope="scope">
               {{ scope.row.actualAmount | moneyFormat(true) }}
             </template>
+          </el-table-column> -->
+          <el-table-column align="left" prop="type" label="人数">
+            <template slot-scope="scope">
+              <p>已缴费: {{ scope.row.paymentUserNum }}人</p>
+              <p>总人数: {{ scope.row.userNum }}人</p>
+            </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="type"
-            label="已缴费人数/总人数"
-          >
+          <el-table-column align="left" label="创建人" prop="operatorName" width="200px">
             <template slot-scope="scope">
-              {{ scope.row.paymentUserNum }}/{{ scope.row.userNum }}
+              <div>
+                <p>{{ scope.row.operatorName ? scope.row.operatorName : "--" }}</p>
+                <p>{{ scope.row.createTime ? scope.row.createTime : "--" }}</p>
+              </div>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            label="创建人"
-            prop="operatorName"
-          >
+          <el-table-column align="left" prop="createTime" label="审核人" width="140px">
+            <template slot-scope="scope">
+              <div>
+                <p>{{ scope.row.auditName ? scope.row.auditName : "--" }}</p>
+                <p>
+                  {{
+                    scope.row.auditTime ? scope.row.auditTime : "--" | dateForMinFormat
+                  }}
+                </p>
+              </div>
+            </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="remark"
-            label="备注"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="memo"
-            width="100px"
-            label="审核意见"
-          >
+          <el-table-column align="left" prop="remark" label="备注"></el-table-column>
+          <el-table-column align="left" prop="memo" label="审核意见">
             <template slot-scope="scope">
               <overflow-text width="80px" :text="scope.row.memo" />
             </template>
           </el-table-column>
           <el-table-column
-            align="center"
+            align="left"
             prop="operatorName"
             label="申请人"
           ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="status"
-            label="状态"
-            width="100px"
-          >
+          <el-table-column align="left" prop="status" label="状态" width="100px">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.status | auditType }}
               </div>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
+          <!-- <el-table-column
+            align="left"
             prop="createTime"
             label="创建时间"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="createTime"
-            label="审核时间"
-            width="140px"
-          >
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.auditTime | dateForMinFormat }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center"
-                          label="操作">
+          ></el-table-column> -->
+          <!-- </el-table-column> -->
+          <el-table-column align="left" label="操作">
             <template slot-scope="scope">
-              <el-button type="text" v-if="scope.row.status == 'AUDITING' && $helpers.permission('cloudCoachPaymentProgram/audit')" @click="onDetail(scope.row)">审核</el-button>
-              <el-button type="text" v-if="scope.row.status != 'AUDITING' && $helpers.permission('studentCloudCoachPaymentDetails/queryPage')" @click="onDetail(scope.row)">详情</el-button>
+              <el-button
+                type="text"
+                v-if="
+                  scope.row.status == 'AUDITING' &&
+                  $helpers.permission('cloudCoachPaymentProgram/audit')
+                "
+                @click="onDetail(scope.row)"
+                >审核</el-button
+              >
+              <el-button
+                type="text"
+                v-if="
+                  scope.row.status != 'AUDITING' &&
+                  $helpers.permission('studentCloudCoachPaymentDetails/queryPage')
+                "
+                @click="onDetail(scope.row)"
+                >详情</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
@@ -184,16 +199,21 @@
       v-if="recordVisible"
       append-to-body
     >
-      <member-model :detail="selectDetail" @getList="getList" @close="recordVisible = false" />
+      <member-model
+        :detail="selectDetail"
+        @getList="getList"
+        @close="recordVisible = false"
+      />
     </el-dialog>
   </div>
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
-import memberModel from './memberModel'
-import { cloudCoachPaymentProgramQueryPage } from '../studentManager/api'
+import memberModel from "./memberModel";
+import { cloudCoachPaymentProgramQueryPage } from "../studentManager/api";
 import { getTimes } from "@/utils";
 import { auditTypeList } from "@/utils/searchArray";
+import { getCalenderUser } from "./api";
 export default {
   components: { pagination, memberModel },
   data() {
@@ -203,9 +223,11 @@ export default {
         visitTime: [],
         period: null,
         organId: null,
-        status: 'AUDITING',
+        status: "AUDITING",
+        audit: null,
       },
       tableList: [],
+      userList: [],
       rules: {
         // 分页规则
         limit: 10, // 限制显示条数
@@ -219,12 +241,14 @@ export default {
   },
   async mounted() {
     await this.$store.dispatch("setBranchs");
-    this.getList()
+    this.getList();
+    this.getCalenderList();
   },
+
   methods: {
     async getList() {
       try {
-        const { visitTime, ...search } = this.searchForm
+        const { visitTime, ...search } = this.searchForm;
         const res = await cloudCoachPaymentProgramQueryPage({
           ...search,
           ...getTimes(visitTime, ["startTime", "endTime"]),
@@ -233,7 +257,7 @@ export default {
         });
         this.rules.total = res.data.total;
         this.tableList = res.data.rows;
-      } catch (e) { }
+      } catch (e) {}
     },
     search() {
       this.rules.page = 1;
@@ -243,13 +267,21 @@ export default {
       this.searchForm = {
         visitTime: [],
         period: null,
-      }
-      this.search()
+      };
+      this.search();
     },
     onDetail(row) {
-      this.selectDetail = row
-      this.recordVisible = true
-    }
+      this.selectDetail = row;
+      this.recordVisible = true;
+    },
+    async getCalenderList() {
+      try {
+        const res = await getCalenderUser({ type: "CLOUD" });
+        this.userList = res.data;
+      } catch (e) {
+        console.log(e);
+      }
+    },
   },
 };
 </script>

+ 82 - 77
src/views/auditList/musicGroup.vue

@@ -1,4 +1,3 @@
-
 <template>
   <div>
     <!-- <h2>
@@ -46,6 +45,22 @@
         <el-form-item>
           <el-select
             class="multiple"
+            v-model.trim="searchForm.audit"
+            filterable
+            clearable
+            placeholder="请选择审核人"
+          >
+            <el-option
+              v-for="(item, index) in userList"
+              :key="index"
+              :label="item.auditName"
+              :value="item.audit"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
             v-model.trim="searchForm.paymentType"
             filterable
             clearable
@@ -78,10 +93,7 @@
         <el-form-item>
           <el-button @click="search" type="primary">搜索</el-button>
           <el-button @click="reset" type="danger">重置</el-button>
-          <auth
-            auths="musicGroupPaymentCalender/batchAuditing"
-            style="margin-left: 10px"
-          >
+          <auth auths="musicGroupPaymentCalender/batchAuditing" style="margin-left: 10px">
             <el-button
               @click="typesStatus = true"
               :disabled="!selList.length > 0"
@@ -103,122 +115,113 @@
             width="55"
             :selectable="selectable"
           ></el-table-column>
-          <el-table-column align="center" prop="organName" label="分部名称">
+          <el-table-column align="left" prop="organName" label="分部名称">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.organName }}</copy-text>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            width="200px"
-            prop="musicGroupName"
-            label="乐团名称"
-          >
+          <el-table-column align="left" width="200px" prop="musicGroupName" label="乐团">
             <template slot-scope="scope">
               <div>
                 <Tooltip :content="scope.row.musicGroupName" />
+                (<copy-text>{{ scope.row.musicGroupId }}</copy-text
+                >)
               </div>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
+          <!-- <el-table-column
+            align="left"
             width="100px"
             prop="musicGroupId"
             label="乐团编号"
           >
             <template slot-scope="scope">
-              <copy-text>{{ scope.row.musicGroupId }}</copy-text>
+
             </template>
-          </el-table-column>
-          <el-table-column align="center" prop="paymentType" label="收费模式">
+          </el-table-column> -->
+          <el-table-column align="left" prop="paymentType" label="收费模式">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.paymentType | auditPaymentType }}
               </div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="paymentType" label="申请类型">
+          <el-table-column align="left" prop="paymentType" label="类型" width="150px">
             <template slot-scope="scope">
               <div>
-                {{ scope.row.paymentType | auditPaymentType }}
+                <p>申请类型: {{ scope.row.paymentType | auditPaymentType }}</p>
+                <p>订单类型: {{ scope.row.payUserType | payOrderType }}</p>
               </div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="payUserType" label="订单类型">
+          <!-- <el-table-column align="left" prop="payUserType" label="订单类型">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.payUserType | payOrderType }}
               </div>
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <!-- <el-table-column
-            align="center"
+            align="left"
             prop="addCourseTotalTime"
             label="加课总时长(分钟)"
           ></el-table-column> -->
-          <el-table-column
-            align="center"
-            prop="originalTotalAmount"
-            label="总原价(元)"
-          >
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="currentTotalAmount"
-            label="申请价格(元)"
-          >
+          <el-table-column align="left" prop="originalTotalAmount" label="价格(元)">
+            <template slot-scope="scope">
+              <div>
+                <p>总原价:{{ scope.row.originalTotalAmount }}</p>
+                <p>申请价:{{ scope.row.currentTotalAmount }}</p>
+              </div>
+            </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="memo"
-            width="100px"
-            label="备注"
-          >
+          <!-- <el-table-column align="left" prop="currentTotalAmount" label="申请价格(元)">
+          </el-table-column> -->
+          <el-table-column align="left" prop="memo" width="100px" label="备注">
             <template slot-scope="scope">
               <overflow-text width="80px" :text="scope.row.memo" />
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="auditMemo"
-            width="100px"
-            label="审核意见"
-          >
+          <el-table-column align="left" prop="auditMemo" width="100px" label="审核意见">
             <template slot-scope="scope">
               <overflow-text width="80px" :text="scope.row.auditMemo" />
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="operatorName"
-            label="申请人"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="status"
-            label="状态"
-            width="100px"
-          >
+          <el-table-column align="left" prop="operatorName" label="申请人" width="150px">
+            <template slot-scope="scope">
+              <div>
+                <p>{{ scope.row.operatorName ? scope.row.operatorName : "--" }}</p>
+                <p>{{ scope.row.createTime | dateForMinFormat }}</p>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="left" prop="operatorName" label="审核人" width="150px">
+            <template slot-scope="scope">
+              <div>
+                <p>{{ scope.row.auditName ? scope.row.auditName : "--" }}</p>
+                <p>
+                  {{
+                    scope.row.auditTime ? scope.row.auditTime : "--" | dateForMinFormat
+                  }}
+                </p>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="left" prop="status" label="状态" width="100px">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.status | auditType }}
               </div>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="createTime"
-            label="申请时间"
-            width="140px"
-          >
+          <!-- <el-table-column align="left" prop="createTime" label="申请时间" width="140px">
             <template slot-scope="scope">
               <div>
                 {{ scope.row.createTime | dateForMinFormat }}
               </div>
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <!--  -->
-          <el-table-column align="center" label="操作" fixed="right">
+          <el-table-column align="left" label="操作" fixed="right">
             <template slot-scope="scope">
               <!--     'musicGroupPaymentCalender/auditListDetail/update'
                        'musicGroupPaymentCalender/auditListDetail/look' -->
@@ -227,9 +230,7 @@
                 type="text"
                 v-if="
                   scope.row.status == 'AUDITING' &&
-                  $helpers.permission(
-                    'musicGroupPaymentCalender/auditListDetail/update'
-                  )
+                  $helpers.permission('musicGroupPaymentCalender/auditListDetail/update')
                 "
               >
                 审核
@@ -239,9 +240,7 @@
                 type="text"
                 v-if="
                   scope.row.status != 'AUDITING' &&
-                  $helpers.permission(
-                    'musicGroupPaymentCalender/getDetail/look'
-                  )
+                  $helpers.permission('musicGroupPaymentCalender/getDetail/look')
                 "
               >
                 查看
@@ -273,11 +272,7 @@
       :visible.sync="typesStatus"
       v-if="typesStatus"
     >
-      <audit
-        :selList="selList"
-        @close="typesStatus = false"
-        @submited="submited"
-      />
+      <audit :selList="selList" @close="typesStatus = false" @submited="submited" />
     </el-dialog>
   </div>
 </template>
@@ -290,12 +285,13 @@ import { getAuditList, getAuditListDetail } from "@/api/auditManager";
 import { getEmployeeOrgan } from "@/api/buildTeam";
 import Tooltip from "@/components/Tooltip/index";
 import { auditTypeList, auditPaymentTypeList } from "@/utils/searchArray";
-
+import { getCalenderUser } from "./api";
 const initSearch = {
   search: null,
   paymentType: null,
   status: "AUDITING",
   organId: null,
+  audit: null,
 };
 export default {
   components: { pagination, Tooltip, review, audit },
@@ -309,7 +305,7 @@ export default {
       statusList: auditTypeList,
       searchForm: { ...initSearch },
       tableList: [],
-
+      userList: [],
       pageInfo: {
         // 分页规则
         limit: 10, // 限制显示条数
@@ -324,6 +320,7 @@ export default {
   mounted() {
     this.$store.dispatch("setBranchs");
     this.getList();
+    this.getCalenderList();
   },
   methods: {
     selectable(row, index) {
@@ -356,6 +353,14 @@ export default {
         }
       });
     },
+    async getCalenderList() {
+      try {
+        const res = await getCalenderUser({ type: "MUSIC" });
+        this.userList = res.data;
+      } catch (e) {
+        console.log(e);
+      }
+    },
 
     lookDetail(row) {
       // this.detail = res.data

+ 42 - 120
src/views/categroyManager/insideSetting/staffManager.vue

@@ -86,10 +86,7 @@
         >添加</el-button
       >
 
-      <el-button
-        type="primary"
-        style="margin-bottom: 20px"
-        @click="onCreateQRCode"
+      <el-button type="primary" style="margin-bottom: 20px" @click="onCreateQRCode"
         >管理端APP下载</el-button
       >
       <!-- 列表 -->
@@ -115,9 +112,7 @@
           </el-table-column>
           <el-table-column align="center" label="角色分类">
             <template slot-scope="scope">
-              <tooltip
-                :content="scope.row.roleNames | joinArray(',')"
-              ></tooltip>
+              <tooltip :content="scope.row.roleNames | joinArray(',')"></tooltip>
             </template>
           </el-table-column>
           <el-table-column align="center" label="职位">
@@ -132,16 +127,10 @@
           </el-table-column>
           <el-table-column align="center" label="所属分部">
             <template slot-scope="scope">
-              <tooltip
-                :content="scope.row.organNameList | joinArray(',')"
-              ></tooltip>
+              <tooltip :content="scope.row.organNameList | joinArray(',')"></tooltip>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            label="状态"
-            :formatter="formatLockFlag"
-          >
+          <el-table-column align="center" label="状态" :formatter="formatLockFlag">
           </el-table-column>
           <el-table-column align="center" label="入职时间">
             <template slot-scope="scope">
@@ -153,12 +142,7 @@
               {{ scope.row.demissionDate | formatTimer }}
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            width="250px"
-            fixed="right"
-            label="操作"
-          >
+          <el-table-column align="center" width="250px" fixed="right" label="操作">
             <template slot-scope="scope">
               <el-button
                 @click="roleOperation('update', scope.row)"
@@ -224,20 +208,11 @@
       width="650px"
     >
       <el-form :model="form" :rules="rules" ref="ruleForm">
-        <el-alert
-          style="margin: 10px 0"
-          title="基础信息"
-          :closable="false"
-          type="info"
-        >
+        <el-alert style="margin: 10px 0" title="基础信息" :closable="false" type="info">
         </el-alert>
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="姓名"
-              prop="realName"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="姓名" prop="realName" :label-width="formLabelWidth">
               <el-input
                 v-model.trim="form.realName"
                 placeholder="请输入姓名"
@@ -246,11 +221,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item
-              label="性别"
-              prop="gender"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="性别" prop="gender" :label-width="formLabelWidth">
               <el-select
                 v-model.trim="form.gender"
                 placeholder="请选择性别"
@@ -265,11 +236,7 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="手机号"
-              prop="phone"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="手机号" prop="phone" :label-width="formLabelWidth">
               <el-input
                 v-model.trim.number="form.phone"
                 placeholder="请输入手机号"
@@ -280,11 +247,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item
-              label="工作类型"
-              prop="jobNature"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="工作类型" prop="jobNature" :label-width="formLabelWidth">
               <el-select
                 v-model.trim="form.jobNature"
                 clearable
@@ -301,11 +264,7 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="入职时间"
-              prop="entryDate"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="入职时间" prop="entryDate" :label-width="formLabelWidth">
               <el-date-picker
                 v-model.trim="form.entryDate"
                 type="date"
@@ -345,12 +304,7 @@
             ></el-input>
           </el-form-item>
         </el-row>
-        <el-alert
-          style="margin: 10px 0"
-          title="角色权限"
-          :closable="false"
-          type="info"
-        >
+        <el-alert style="margin: 10px 0" title="角色权限" :closable="false" type="info">
         </el-alert>
         <el-row>
           <el-col :span="24">
@@ -377,13 +331,9 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
+        <el-row v-if="permission('setNormalRole')">
           <el-col :span="24">
-            <el-form-item
-              label="员工角色"
-              prop="roleIds"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="员工角色" prop="roleIds" :label-width="formLabelWidth">
               <select-all
                 v-model.trim="form.roleIds"
                 placeholder="请选择员工角色"
@@ -416,13 +366,9 @@
                   <el-tooltip placement="top" popper-class="mTooltip">
                     <div slot="content">
                       <p>分部经理:分部事务审批,为乐团主管分配日程安排</p>
-                      <p>
-                        乐团主管:具体乐团、VIP、网管课课程组负责人,管理日常教务
-                      </p>
+                      <p>乐团主管:具体乐团、VIP、网管课课程组负责人,管理日常教务</p>
                       <p>维修技师:管理端APP乐器维修人员</p>
-                      <p>
-                        衔接老师:合作单位老师,可在管理端APP查看所关联乐团课程、作业
-                      </p>
+                      <p>衔接老师:合作单位老师,可在管理端APP查看所关联乐团课程、作业</p>
                       <p>HRBP:人力资源表可选择HR归属</p>
                     </div>
                     <i
@@ -555,9 +501,7 @@
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="roleStatus = false">取 消</el-button>
-        <el-button @click="onRoleSubmit('ruleForm')" type="primary"
-          >确 定</el-button
-        >
+        <el-button @click="onRoleSubmit('ruleForm')" type="primary">确 定</el-button>
       </span>
     </el-dialog>
     <el-dialog title="工作交接" :visible.sync="handoverVisible" width="500px">
@@ -586,11 +530,7 @@
             },
           ]"
         >
-          <el-select
-            v-model.trim="educationForm.targetUserId"
-            clearable
-            filterable
-          >
+          <el-select v-model.trim="educationForm.targetUserId" clearable filterable>
             <el-option
               v-for="item in selects.roles.EDUCATION"
               :key="item.userId"
@@ -606,11 +546,7 @@
       </span>
     </el-dialog>
 
-    <qr-code
-      v-model="qrCodeStatus"
-      title="管理端APP下载链接"
-      :codeUrl="codeUrl"
-    />
+    <qr-code v-model="qrCodeStatus" title="管理端APP下载链接" :codeUrl="codeUrl" />
   </div>
 </template>
 <script>
@@ -626,7 +562,7 @@ import {
   updateEducationTeacherId,
   queryEmployeeOrganByUser,
   getPosition,
-  resetPassword
+  resetPassword,
 } from "@/api/systemManage";
 import { userRole } from "./api";
 import deepClone from "@/helpers/deep-clone";
@@ -747,12 +683,8 @@ export default {
         ],
         // deptIds: [{ type: 'array', required: true, message: '请选择所属部门', trigger: 'change' }],
         // postIds: [{ type: 'array', required: true, message: '请选择所属岗位', trigger: 'change' }],
-        jobNature: [
-          { required: true, message: "请选择工作类型", trigger: "change" },
-        ],
-        entryDate: [
-          { required: true, message: "请选择入职时间", trigger: "blur" },
-        ],
+        jobNature: [{ required: true, message: "请选择工作类型", trigger: "change" }],
+        entryDate: [{ required: true, message: "请选择入职时间", trigger: "blur" }],
       },
       searchForm: {
         search: null,
@@ -788,8 +720,7 @@ export default {
     onRoleSubmit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          const { organIdLists, postDeptIds, deptIds, deptId, ...res } =
-            this.form;
+          const { organIdLists, postDeptIds, deptIds, deptId, ...res } = this.form;
           let tempPost = [];
           // console.log(postDeptIds,'deptIds',deptIds,'deptId',deptId)
           //   postDeptIds.forEach((post) => {
@@ -1073,10 +1004,7 @@ export default {
     formatParentId(id, list, ids = []) {
       for (const item of list) {
         if (item.children) {
-          const cIds = this.formatParentId(id, item.children, [
-            ...ids,
-            item.value,
-          ]);
+          const cIds = this.formatParentId(id, item.children, [...ids, item.value]);
           if (cIds.includes(id)) {
             return cIds;
           }
@@ -1121,40 +1049,34 @@ export default {
     },
     async checkStatus(data) {
       let status;
-      await hasCourseGroupRelation({ employeeId: data.id }).then(
-        async (res) => {
-          if (res.code === 200) {
-            if (res.data.hasCourseSchedule) {
-              this.$message.error("请先交接指导老师课程");
+      await hasCourseGroupRelation({ employeeId: data.id }).then(async (res) => {
+        if (res.code === 200) {
+          if (res.data.hasCourseSchedule) {
+            this.$message.error("请先交接指导老师课程");
+            status = false;
+          } else {
+            if (res.data.hasCourseGroupRelation) {
+              let userId = data.id;
+              await this.$store.dispatch("setOrganRole");
+              this.educationViseble = true;
               status = false;
             } else {
-              if (res.data.hasCourseGroupRelation) {
-                let userId = data.id;
-                await this.$store.dispatch("setOrganRole");
-                this.educationViseble = true;
-                status = false;
-              } else {
-                // 1 要弹出
-                status = true;
-              }
+              // 1 要弹出
+              status = true;
             }
           }
         }
-      );
+      });
 
       return status;
     },
     onStaffOperation(type, data) {
       const tempStatus = type == "RESET_PASSWORD" ? true : false;
-      this.$confirm(
-        `您确定${tempStatus ? "重置密码" : "修改员工状态"}?`,
-        "提示",
-        {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        }
-      )
+      this.$confirm(`您确定${tempStatus ? "重置密码" : "修改员工状态"}?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
         .then(async () => {
           if (type === "DEMISSION" && !data.demissionDate) {
             this.activeRow = data;

+ 39 - 108
src/views/categroyManager/insideSetting/staffPlatManager.vue

@@ -108,9 +108,7 @@
           </el-table-column>
           <el-table-column align="center" label="角色分类">
             <template slot-scope="scope">
-              <tooltip
-                :content="scope.row.roleNames | joinArray(',')"
-              ></tooltip>
+              <tooltip :content="scope.row.roleNames | joinArray(',')"></tooltip>
             </template>
           </el-table-column>
           <el-table-column align="center" prop="jobNature" label="工作类型">
@@ -125,11 +123,7 @@
               ></tooltip>
             </template>
           </el-table-column> -->
-          <el-table-column
-            align="center"
-            label="状态"
-            :formatter="formatLockFlag"
-          >
+          <el-table-column align="center" label="状态" :formatter="formatLockFlag">
           </el-table-column>
           <el-table-column align="center" label="入职时间">
             <template slot-scope="scope">
@@ -141,12 +135,7 @@
               {{ scope.row.demissionDate | formatTimer }}
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            width="250px"
-            fixed="right"
-            label="操作"
-          >
+          <el-table-column align="center" width="250px" fixed="right" label="操作">
             <template slot-scope="scope">
               <el-button @click="onJoinQrCode(scope.row)" type="text"
                 >入驻二维码</el-button
@@ -215,20 +204,11 @@
       width="650px"
     >
       <el-form :model="form" :rules="rules" ref="ruleForm">
-        <el-alert
-          style="margin: 10px 0"
-          title="基础信息"
-          :closable="false"
-          type="info"
-        >
+        <el-alert style="margin: 10px 0" title="基础信息" :closable="false" type="info">
         </el-alert>
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="姓名"
-              prop="realName"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="姓名" prop="realName" :label-width="formLabelWidth">
               <el-input
                 v-model.trim="form.realName"
                 placeholder="请输入姓名"
@@ -237,11 +217,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item
-              label="性别"
-              prop="gender"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="性别" prop="gender" :label-width="formLabelWidth">
               <el-select
                 v-model.trim="form.gender"
                 placeholder="请选择性别"
@@ -256,11 +232,7 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="手机号"
-              prop="phone"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="手机号" prop="phone" :label-width="formLabelWidth">
               <el-input
                 v-model.trim.number="form.phone"
                 placeholder="请输入手机号"
@@ -269,11 +241,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item
-              label="工作类型"
-              prop="jobNature"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="工作类型" prop="jobNature" :label-width="formLabelWidth">
               <el-select
                 v-model.trim="form.jobNature"
                 clearable
@@ -290,11 +258,7 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="入职时间"
-              prop="entryDate"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="入职时间" prop="entryDate" :label-width="formLabelWidth">
               <el-date-picker
                 v-model.trim="form.entryDate"
                 type="date"
@@ -334,12 +298,7 @@
             ></el-input>
           </el-form-item>
         </el-row>
-        <el-alert
-          style="margin: 10px 0"
-          title="角色权限"
-          :closable="false"
-          type="info"
-        >
+        <el-alert style="margin: 10px 0" title="角色权限" :closable="false" type="info">
         </el-alert>
         <!-- <el-row>
           <el-col :span="24">
@@ -366,13 +325,9 @@
             </el-form-item>
           </el-col>
         </el-row> -->
-        <el-row>
+        <el-row v-if="permission('setPlatRole')">
           <el-col :span="24">
-            <el-form-item
-              label="员工角色"
-              prop="roleIds"
-              :label-width="formLabelWidth"
-            >
+            <el-form-item label="员工角色" prop="roleIds" :label-width="formLabelWidth">
               <select-all
                 v-model.trim="form.roleIds"
                 placeholder="请选择员工角色"
@@ -523,9 +478,7 @@
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="roleStatus = false">取 消</el-button>
-        <el-button @click="onRoleSubmit('ruleForm')" type="primary"
-          >确 定</el-button
-        >
+        <el-button @click="onRoleSubmit('ruleForm')" type="primary">确 定</el-button>
       </span>
     </el-dialog>
     <el-dialog title="工作交接" :visible.sync="handoverVisible" width="500px">
@@ -554,11 +507,7 @@
             },
           ]"
         >
-          <el-select
-            v-model.trim="educationForm.targetUserId"
-            clearable
-            filterable
-          >
+          <el-select v-model.trim="educationForm.targetUserId" clearable filterable>
             <el-option
               v-for="item in educationList"
               :key="item.userId"
@@ -709,12 +658,8 @@ export default {
         ],
         // deptIds: [{ type: 'array', required: true, message: '请选择所属部门', trigger: 'change' }],
         // postIds: [{ type: 'array', required: true, message: '请选择所属岗位', trigger: 'change' }],
-        jobNature: [
-          { required: true, message: "请选择工作类型", trigger: "change" },
-        ],
-        entryDate: [
-          { required: true, message: "请选择入职时间", trigger: "blur" },
-        ],
+        jobNature: [{ required: true, message: "请选择工作类型", trigger: "change" }],
+        entryDate: [{ required: true, message: "请选择入职时间", trigger: "blur" }],
       },
       searchForm: {
         search: null,
@@ -733,9 +678,7 @@ export default {
     onJoinQrCode(row) {
       console.log(row);
       this.qrCodeUrl =
-        vaildStudentUrl() +
-        "/project/questionAsk/index.html?recommender=" +
-        row.id;
+        vaildStudentUrl() + "/project/questionAsk/index.html?recommender=" + row.id;
       this.codeStatus = true;
     },
     permission,
@@ -753,8 +696,7 @@ export default {
     onRoleSubmit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          const { organIdLists, postDeptIds, deptIds, deptId, ...res } =
-            this.form;
+          const { organIdLists, postDeptIds, deptIds, deptId, ...res } = this.form;
           let tempPost = [];
           postDeptIds.forEach((post) => {
             let tempIds = [];
@@ -1021,9 +963,7 @@ export default {
           gender: data.gender,
           phone: Number(data.phone),
           roleIds: data.roleIds,
-          deptId: data.deptId
-            ? this.formatParentId(data.deptId, this.deptList)
-            : null,
+          deptId: data.deptId ? this.formatParentId(data.deptId, this.deptList) : null,
           organIdLists: data.organIdList ? data.organIdList : [],
           jobNature: data.jobNature,
           entryDate: data.entryDate,
@@ -1045,10 +985,7 @@ export default {
     formatParentId(id, list, ids = []) {
       for (const item of list) {
         if (item.children) {
-          const cIds = this.formatParentId(id, item.children, [
-            ...ids,
-            item.value,
-          ]);
+          const cIds = this.formatParentId(id, item.children, [...ids, item.value]);
           if (cIds.includes(id)) {
             return cIds;
           }
@@ -1093,40 +1030,34 @@ export default {
     },
     async checkStatus(data) {
       let status;
-      await hasCourseGroupRelation({ employeeId: data.id }).then(
-        async (res) => {
-          if (res.code === 200) {
-            if (res.data.hasCourseSchedule) {
-              this.$message.error("请先交接指导老师课程");
+      await hasCourseGroupRelation({ employeeId: data.id }).then(async (res) => {
+        if (res.code === 200) {
+          if (res.data.hasCourseSchedule) {
+            this.$message.error("请先交接指导老师课程");
+            status = false;
+          } else {
+            if (res.data.hasCourseGroupRelation) {
+              let userId = data.id;
+              await this.$store.dispatch("setOrganRole");
+              this.educationViseble = true;
               status = false;
             } else {
-              if (res.data.hasCourseGroupRelation) {
-                let userId = data.id;
-                await this.$store.dispatch("setOrganRole");
-                this.educationViseble = true;
-                status = false;
-              } else {
-                // 1 要弹出
-                status = true;
-              }
+              // 1 要弹出
+              status = true;
             }
           }
         }
-      );
+      });
 
       return status;
     },
     onStaffOperation(type, data) {
       const tempStatus = type == "RESET_PASSWORD" ? true : false;
-      this.$confirm(
-        `您确定${tempStatus ? "重置密码" : "修改员工状态"}?`,
-        "提示",
-        {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        }
-      )
+      this.$confirm(`您确定${tempStatus ? "重置密码" : "修改员工状态"}?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
         .then(async () => {
           if (type === "DEMISSION" && !data.demissionDate) {
             this.activeRow = data;
@@ -1143,7 +1074,7 @@ export default {
               this.$message.success("重置密码成功");
               this.getList();
             } catch (e) {
-              console.log(e)
+              console.log(e);
             }
           } else {
             employeeOperate({

+ 91 - 95
src/views/login/index.vue

@@ -1,10 +1,9 @@
 <template>
   <div class="login-container">
-
     <div class="login-left">
       <div class="login-header">
         <div class="logo">
-          <img src="@/assets/images/base/login-logo.png" alt="">
+          <img src="@/assets/images/base/login-logo.png" alt="" />
         </div>
         <i class="line"></i>
         <div class="logo-name">乐团管理系统</div>
@@ -22,70 +21,76 @@
         </div>
       </div> -->
 
-      <el-form ref="loginForm"
-             :model="loginForm"
-             :rules="loginRules"
-             class="login-form"
-             auto-complete="on"
-             label-position="left">
+      <el-form
+        ref="loginForm"
+        :model="loginForm"
+        :rules="loginRules"
+        class="login-form"
+        auto-complete="on"
+        label-position="left"
+      >
         <div class="title-container">登录</div>
 
-        <el-form-item prop="username"
-                      class='logitem'>
+        <el-form-item prop="username" class="logitem">
           <span class="svg-container">
             <svg-icon icon-class="user" />
           </span>
-          <el-input ref="username"
-                    @keyup.enter.native="handleLogin"
-                    v-model.trim="loginForm.username"
-                    placeholder="请输入用户名"
-                    class='login-input'
-                    name="username"
-                    type="text"
-                    tabindex="1"
-                    auto-complete="off" />
+          <el-input
+            ref="username"
+            @keyup.enter.native="handleLogin"
+            v-model.trim="loginForm.username"
+            placeholder="请输入用户名"
+            class="login-input"
+            name="username"
+            type="text"
+            tabindex="1"
+            auto-complete="off"
+          />
         </el-form-item>
 
-        <el-form-item prop="password"
-                      class='logitem'>
+        <el-form-item prop="password" class="logitem">
           <span class="svg-container">
             <svg-icon icon-class="password" />
           </span>
-          <el-input :key="passwordType"
-                    ref="password"
-                    class='login-input'
-                    v-model.trim="loginForm.password"
-                    :type="passwordType"
-                    placeholder="请输入密码"
-                    name="password"
-                    tabindex="2"
-                    auto-complete="off"
-                    @keyup.enter.native="handleLogin" />
-          <span class="show-pwd"
-                @click="showPwd">
+          <el-input
+            :key="passwordType"
+            ref="password"
+            class="login-input"
+            v-model.trim="loginForm.password"
+            :type="passwordType"
+            placeholder="请输入密码"
+            name="password"
+            tabindex="2"
+            auto-complete="off"
+            @keyup.enter.native="handleLogin"
+          />
+          <span class="show-pwd" @click="showPwd">
             <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
           </span>
         </el-form-item>
-        <div class='remberBox' @click="isSaveUserInfo = !isSaveUserInfo">
+        <div class="remberBox" @click="isSaveUserInfo = !isSaveUserInfo">
           <div class="dotWrap" :class="[isSaveUserInfo ? 'checked' : '']"></div>
           记住密码
           <!-- <el-checkbox v-model="isSaveUserInfo">记住密码</el-checkbox> -->
         </div>
-        <div class="loginBtn"
-            :class="!loginForm.username || !loginForm.password?'disabled':''"
-            @click="handleLogin">登录</div>
+        <div
+          class="loginBtn"
+          :class="!loginForm.username || !loginForm.password ? 'disabled' : ''"
+          @click="handleLogin"
+        >
+          登录
+        </div>
       </el-form>
-
     </div>
   </div>
 </template>
 
 <script>
 import { validUsername } from "@/utils/validate";
-import { Searchs } from '@/helpers'
+import { Searchs } from "@/helpers";
 export default {
   name: "Login",
-  data () {
+  data() {
     const validateUsername = (rule, value, callback) => {
       // validUsername
       if (!value) {
@@ -93,47 +98,42 @@ export default {
       } else {
         callback();
       }
-    }
+    };
     const validatePassword = (rule, value, callback) => {
       if (value.length < 6) {
         callback(new Error("密码必须大于六位"));
       } else {
         callback();
       }
-    }
+    };
     return {
       loginForm: {
         username: "",
-        password: ""
+        password: "",
       },
       loginRules: {
-        username: [
-          { required: true, trigger: "blur", validator: validateUsername }
-        ],
-        password: [
-          { required: true, trigger: "blur", validator: validatePassword }
-        ]
+        username: [{ required: true, trigger: "blur", validator: validateUsername }],
+        password: [{ required: true, trigger: "blur", validator: validatePassword }],
       },
       passwordType: "password",
       redirect: undefined,
-      isSaveUserInfo: true
-    }
+      isSaveUserInfo: true,
+    };
   },
-  mounted () {
-    this.loginForm.username = localStorage.getItem('username');
-    this.loginForm.password = localStorage.getItem('password');
-
+  mounted() {
+    this.loginForm.username = localStorage.getItem("username");
+    this.loginForm.password = localStorage.getItem("password");
   },
   watch: {
     $route: {
       handler: function (route) {
         this.redirect = route.query && route.query.redirect;
       },
-      immediate: true
-    }
+      immediate: true,
+    },
   },
   methods: {
-    showPwd () {
+    showPwd() {
       if (this.passwordType === "password") {
         this.passwordType = "";
       } else {
@@ -143,44 +143,40 @@ export default {
         this.$refs.password.focus();
       });
     },
-    handleLogin () {
+    handleLogin() {
       // 清除所有savekey
       const s = new Searchs();
-       s.removeAll()
+      s.removeAll();
 
       // 判断是否点击了记住密码 =>  存储密码
       if (this.isSaveUserInfo) {
-        localStorage.setItem('username', this.loginForm.username);
-        localStorage.setItem('password', this.loginForm.password);
+        localStorage.setItem("username", this.loginForm.username);
+        localStorage.setItem("password", this.loginForm.password);
       } else {
-        localStorage.setItem('username', '');
-        localStorage.setItem('password', '');
+        localStorage.setItem("username", "");
+        localStorage.setItem("password", "");
       }
-      this.$refs.loginForm.validate(valid => {
+      this.$refs.loginForm.validate((valid) => {
         if (valid) {
-
           this.$store
             .dispatch("user/login", this.loginForm)
-            .then(() => {
-              this.$nextTick(res => {
+            .then((res) => {
+              this.$nextTick((res) => {
                 //  这里清空 tab
-                this.$store
-                  .dispatch("delAllViews")
+                this.$store.dispatch("delAllViews");
                 this.$router.push({ path: "/workbench" });
-
-              })
+              });
             })
-            .catch(() => {
-            });
+            .catch(() => {});
         } else {
           return false;
         }
       });
     },
-    saveUserInfo () {
+    saveUserInfo() {
       this.isSaveUserInfo = !this.isSaveUserInfo;
-    }
-  }
+    },
+  },
 };
 </script>
 
@@ -188,20 +184,20 @@ export default {
 body {
   background: #fff !important;
 }
-::v-deep .el-input__inner{
-   background-color:transparent!important;
-   border:1px solid transparent!important
+::v-deep .el-input__inner {
+  background-color: transparent !important;
+  border: 1px solid transparent !important;
 }
-.login-container .el-input input:-webkit-autofill{
-  background-color:transparent!important;
+.login-container .el-input input:-webkit-autofill {
+  background-color: transparent !important;
 }
 .login-input {
-  background-color:transparent!important;
+  background-color: transparent !important;
 }
 /* 修复input 背景不协调 和光标变色 */
 /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
 .loginBtn {
-  background-color: #22B4A9;
+  background-color: #22b4a9;
   text-align: center;
   margin: 0 auto;
   width: 85%;
@@ -212,7 +208,7 @@ body {
   cursor: pointer;
 }
 .loginBtn.disabled {
-  background-color: rgba(34, 180, 169, .5);
+  background-color: rgba(34, 180, 169, 0.5);
 }
 ::-webkit-input-placeholder {
   /* WebKit browsers */
@@ -243,18 +239,18 @@ body {
   padding-top: 10px;
   align-items: center;
   cursor: pointer;
-  color: #6D7278;
+  color: #6d7278;
   font-size: 16px;
   .dotWrap {
     width: 21px;
     height: 21px;
-    background: url('../../assets/images/icon_checkbox_default.png') no-repeat center;
+    background: url("../../assets/images/icon_checkbox_default.png") no-repeat center;
     background-size: contain;
     margin-right: 8px;
     position: relative;
     overflow: hidden;
     &.checked {
-      background: url('../../assets/images/icon_checkbox.png') no-repeat center;
+      background: url("../../assets/images/icon_checkbox.png") no-repeat center;
       background-size: contain;
     }
   }
@@ -285,7 +281,7 @@ $cursor: #000;
     width: 85%;
 
     input {
-      background: transparent!important;
+      background: transparent !important;
       border: 0px;
       -webkit-appearance: none;
       border-radius: 0px;
@@ -302,7 +298,7 @@ $cursor: #000;
   }
 
   .el-form-item {
-    border: 1px solid #E5E6E8;
+    border: 1px solid #e5e6e8;
     border-radius: 8px;
     color: #454545;
   }
@@ -368,14 +364,14 @@ $light_gray: #eee;
     color: #333;
     font-weight: 600;
     margin-bottom: 30px;
-    border-bottom: 1px solid #E5E6E8;
+    border-bottom: 1px solid #e5e6e8;
     &::after {
       margin-top: 12px;
       display: inline-block;
-      content: ' ';
+      content: " ";
       width: 25px;
       height: 4px;
-      background: #22B4A9;
+      background: #22b4a9;
       margin-bottom: -2px;
       margin-left: 13px;
     }
@@ -386,7 +382,7 @@ $light_gray: #eee;
     right: 10px;
     top: 7px;
     font-size: 14px;
-    color: #6D7278;
+    color: #6d7278;
     cursor: pointer;
     user-select: none;
   }
@@ -423,7 +419,7 @@ $light_gray: #eee;
       margin-bottom: 30px;
       font-size: 14px;
       position: absolute;
-      color: #B2B2B2;
+      color: #b2b2b2;
       bottom: 0;
       width: 100%;
       left: 0;