浏览代码

准备提交修改学生云教练 网管课线上下调整

1
mo 2 年之前
父节点
当前提交
a508453511

+ 3 - 10
src/views/liveClassManager/modals/setBlack.vue

@@ -32,11 +32,7 @@
             ref="multipleSelection"
           >
             <el-table-column type="selection" width="55"> </el-table-column>
-            <el-table-column
-              align="center"
-              prop="id"
-              label="学员编号"
-            ></el-table-column>
+            <el-table-column align="center" prop="id" label="学员编号"></el-table-column>
             <el-table-column
               align="center"
               prop="username"
@@ -160,10 +156,7 @@ export default {
     handleSelectionChange(val) {
       if (val.length > 0) {
         this.chioseIdList = this.chioseIdList.concat(val);
-        this.chioseIdList = this.$helpers.lodash.uniqBy(
-          this.chioseIdList,
-          "id"
-        );
+        this.chioseIdList = this.$helpers.lodash.uniqBy(this.chioseIdList, "id");
       } else {
         if (this.isNewPage) return;
         let idList = this.chioseIdList.map((group) => {
@@ -206,7 +199,7 @@ export default {
     },
     onClose() {
       this.clearCom();
-      this.searchForm.search = ''
+      this.searchForm.search = "";
       this.lookVisible = false;
     },
     openDioag(row) {

+ 95 - 0
src/views/studentManager/modals/setMemberDate.vue

@@ -0,0 +1,95 @@
+<template>
+  <div>
+    <!-- <p class="title">已选择{{ multipleSelection.length }}名学员</p> -->
+    <el-form :model="memberForm" label-width="100px" ref="memberForm">
+      <el-form-item
+        label="到期日期"
+        prop="endTime"
+        :rules="[{ required: true, message: '请选择到期日期', trigger: 'blur' }]"
+      >
+        <el-date-picker
+          style="width: 360px !important"
+          v-model.trim="memberForm.endTime"
+          align="right"
+          type="date"
+          placeholder="选择日期"
+          value-format="yyyy-MM-dd"
+          :picker-options="pickerOptions"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item
+        label="备注"
+        prop="memo"
+        :rules="[{ required: true, message: '请输入备注', trigger: 'blur' }]"
+      >
+        <el-input
+          type="textarea"
+          show-word-limit
+          maxlength="100"
+          :rows="3"
+          v-model.trim="memberForm.memo"
+          placeholder="请输入备注"
+        ></el-input>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import { add, update } from "../api";
+import { getmemberRankOrganizationFeeMapper } from "@/views/categroyManager/productSystem/api";
+import { sysConfigList } from "@/api/generalSettings"; // 平台的修改和查
+export default {
+  props: ["row", "type"],
+  data() {
+    return {
+      memberForm: {
+        userId: null,
+        endTime: null,
+        memo: null,
+      },
+      userIds: [],
+      organId: null,
+      rulesForm: null, // 范围
+      memberFeeSetting: null,
+      pickerOptions: {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() < new Date().getTime() - 86400000;
+        },
+      },
+    };
+  },
+  mounted() {
+    console.log(this.row, "mounted");
+
+    this.memberForm.userId = this.row.userId;
+    this.memberForm.endTime = this.row.membershipEndTime;
+    console.log(this.memberForm);
+  },
+  methods: {
+    async __init() {},
+
+    submit() {
+      this.$refs.memberForm.validate(async (res) => {
+        console.log(res, this.type, "res");
+        if (res) {
+          try {
+            console.log(this.memberForm, "memberForm");
+            this.$emit("close");
+            this.$emit("submited");
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.title {
+  margin-bottom: 30px;
+  font-size: 16px;
+  color: #000;
+}
+</style>

+ 224 - 155
src/views/studentManager/studentList.vue

@@ -19,7 +19,7 @@
             clearable
             placeholder="学生姓名或电话"
             @keydown.enter.native="
-              e => {
+              (e) => {
                 e.target.blur();
                 $refs.saveForm.save();
                 onSearch();
@@ -185,11 +185,7 @@
       >
         新增学员
       </el-button>
-      <el-button
-        @click="onCreateQRCode"
-        type="primary"
-        style="margin-bottom: 20px"
-      >
+      <el-button @click="onCreateQRCode" type="primary" style="margin-bottom: 20px">
         学员激活列表
       </el-button>
       <!-- 列表 -->
@@ -226,11 +222,7 @@
                               }
                             "
                             class="el-icon-question question"
-                            style="
-                              font-size: 18px;
-                              color: #f56c6c;
-                              cursor: pointer;
-                            "
+                            style="font-size: 18px; color: #f56c6c; cursor: pointer"
                           ></i> </el-tooltip
                       ></span>
                       <div>{{ props.row.isActive ? "是" : "否" }}</div>
@@ -259,9 +251,7 @@
                     <el-form-item label="VIP老师" v-if="tenantId == 1">
                       <Tooltip
                         :content="
-                          props.row.vipTeacherName
-                            ? props.row.vipTeacherName
-                            : '--'
+                          props.row.vipTeacherName ? props.row.vipTeacherName : '--'
                         "
                       /> </el-form-item
                   ></el-col>
@@ -279,9 +269,7 @@
                     <el-form-item label="声部课老师">
                       <Tooltip
                         :content="
-                          props.row.normalTeacherName
-                            ? props.row.normalTeacherName
-                            : '--'
+                          props.row.normalTeacherName ? props.row.normalTeacherName : '--'
                         "
                       /> </el-form-item
                   ></el-col>
@@ -289,9 +277,7 @@
                     <el-form-item label="合奏课老师">
                       <Tooltip
                         :content="
-                          props.row.mixTeacherName
-                            ? props.row.mixTeacherName
-                            : '--'
+                          props.row.mixTeacherName ? props.row.mixTeacherName : '--'
                         "
                       /> </el-form-item
                   ></el-col>
@@ -314,9 +300,7 @@
                   >
                   <el-col :span="4">
                     <el-form-item label="加油包">
-                      <span>{{
-                        props.row.comeOnPackage | studentPackage
-                      }}</span>
+                      <span>{{ props.row.comeOnPackage | studentPackage }}</span>
                     </el-form-item></el-col
                   >
                   <el-col :span="4">
@@ -346,12 +330,7 @@
               <copy-text>{{ scope.row.organName }}</copy-text>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="userId"
-            label="学员信息"
-            width="140px"
-          >
+          <el-table-column align="center" prop="userId" label="学员信息" width="140px">
             <template slot-scope="scope">
               {{ scope.row.username }}
               ({{ scope.row.gender ? "男" : "女" }})<br />
@@ -361,12 +340,7 @@
           <!-- <el-table-column align="center" prop="username" label="学员姓名">
             <template slot-scope="scope"> </template>
           </el-table-column> -->
-          <el-table-column
-            align="center"
-            prop="realName"
-            label="家长信息"
-            width="140px"
-          >
+          <el-table-column align="center" prop="realName" label="家长信息" width="140px">
             <template slot-scope="scope">
               {{ scope.row.realName }}
               <br />
@@ -568,47 +542,134 @@
           </el-table-column> -->
           <el-table-column align="center" width="180px" label="操作">
             <template slot-scope="scope">
-              <router-link
+              <div
+                @click="
+                  () => {
+                    activeRow = scope.row;
+                  }
+                "
+              >
+                <el-dropdown
+                  trigger="click"
+                  placement="bottom"
+                  :hide-on-click="false"
+                  @visible-change="(val) => showDropdown(val, scope.row)"
+                >
+                  <span class="el-dropdown-link">
+                    操作<i
+                      class="el-icon--right"
+                      :class="[
+                        showDropdownFlag &&
+                        activeRow &&
+                        activeRow.userId == scope.row.userId
+                          ? 'el-icon-arrow-up'
+                          : 'el-icon-arrow-down',
+                      ]"
+                    ></i>
+                  </span>
+                  <el-dropdown-menu slot="dropdown" style="width: 180px">
+                    <el-dropdown-item
+                      style="width: 180px"
+                      v-if="$helpers.permission('/studentDetail')"
+                    >
+                      <router-link
+                        style="padding-left: 10px"
+                        v-if="$helpers.permission('/studentDetail')"
+                        class="el-button--text"
+                        :to="{
+                          path: `/business/studentDetail`,
+                          query: { ...scope.row },
+                        }"
+                        >查看</router-link
+                      >
+                    </el-dropdown-item>
+                    <el-dropdown-item
+                      style="width: 180px"
+                      v-if="$helpers.permission('studentManage/studentUpdate/setStudent')"
+                      @click.native="setStudent(scope.row)"
+                    >
+                      <el-button type="text" style="padding-left: 10px"
+                        >设置扩展声部</el-button
+                      >
+                    </el-dropdown-item>
+                    <el-dropdown-item
+                      style="width: 180px"
+                      v-if="$helpers.permission('studentManage/studentUpdate')"
+                      @click.native="resetStudent(scope.row)"
+                    >
+                      <el-button type="text" style="padding-left: 10px">修改</el-button>
+                    </el-dropdown-item>
+                    <el-dropdown-item
+                      style="width: 180px"
+                      v-if="$helpers.permission('api-auth/user/updatePassword2')"
+                      @click.native="resetPassWrod(scope.row)"
+                    >
+                      <el-button type="text" style="padding-left: 10px"
+                        >修改密码</el-button
+                      >
+                    </el-dropdown-item>
+                    <el-dropdown-item
+                      style="width: 180px"
+                      v-if="
+                        scope.row.isSignedContract &&
+                        $helpers.permission('sysUserContracts/getLatest')
+                      "
+                      @click.native="lookContracts(scope.row)"
+                    >
+                      <el-button type="text" style="padding-left: 10px"
+                        >下载协议</el-button
+                      >
+                    </el-dropdown-item>
+                    <el-dropdown-item
+                      style="width: 180px"
+                      v-if="$helpers.permission('studentManage/studentUpdate/setStudent')"
+                      @click.native="setClound(scope.row)"
+                    >
+                      <el-button type="text" style="padding-left: 10px">云教练</el-button>
+                    </el-dropdown-item>
+                  </el-dropdown-menu>
+                </el-dropdown>
+              </div>
+
+              <!-- <router-link
                 v-if="$helpers.permission('/studentDetail')"
                 class="el-button--text"
                 :to="{
                   path: `/business/studentDetail`,
-                  query: { ...scope.row }
+                  query: { ...scope.row },
                 }"
                 >查看</router-link
-              >
-              <el-button
+              > -->
+              <!-- <el-button
                 type="text"
                 style="padding-left: 10px"
-                v-if="
-                  $helpers.permission('studentManage/studentUpdate/setStudent')
-                "
+                v-if="$helpers.permission('studentManage/studentUpdate/setStudent')"
                 @click="setStudent(scope.row)"
                 >设置扩展声部</el-button
-              >
-              <el-button
+              > -->
+              <!-- <el-button
                 type="text"
                 style="padding-left: 10px"
                 v-if="$helpers.permission('studentManage/studentUpdate')"
                 @click="resetStudent(scope.row)"
                 >修改</el-button
-              >
+              > -->
               <!-- api-auth/user/updatePassword2 -->
-              <el-button
+              <!-- <el-button
                 v-if="$helpers.permission('api-auth/user/updatePassword2')"
                 @click="resetPassWrod(scope.row)"
                 type="text"
                 >修改密码</el-button
-              >
-              <el-button
+              > -->
+              <!-- <el-button
                 v-if="
                   scope.row.isSignedContract &&
-                    $helpers.permission('sysUserContracts/getLatest')
+                  $helpers.permission('sysUserContracts/getLatest')
                 "
                 type="text"
                 @click="lookContracts(scope.row)"
                 >下载协议</el-button
-              >
+              > -->
             </template>
           </el-table-column>
         </el-table>
@@ -647,14 +708,11 @@
           style="margin-bottom: 15px"
         ></el-alert>
         <el-form-item label="学生姓名" prop="name">
-          <el-input
-            v-model.trim="studentForm.name"
-            stlye="width:202px"
-          ></el-input>
+          <el-input v-model.trim="studentForm.name" stlye="width:202px"></el-input>
         </el-form-item>
         <el-form-item label="学生性别" prop="sex">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             class="multiple"
             filterable
             v-model.trim="studentForm.sex"
@@ -672,14 +730,14 @@
             value-format="yyyy-MM-dd"
             type="date"
             :picker-options="{
-              firstDayOfWeek: 1
+              firstDayOfWeek: 1,
             }"
             placeholder="选择日期"
           ></el-date-picker>
         </el-form-item>
         <el-form-item label="学生声部" prop="subjectIdList">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             v-model.trim="studentForm.subjectIdList"
             filterable
             clearable
@@ -702,7 +760,7 @@
 
         <el-form-item label="家长姓名" prop="parseName">
           <el-input
-            style="width: 202px!important"
+            style="width: 202px !important"
             v-model.trim="studentForm.parseName"
             :disabled="!isNew"
           ></el-input>
@@ -715,23 +773,20 @@
             {
               pattern: /^1\d{10}$/,
               message: '请输入正确的手机号',
-              trigger: 'blur'
-            }
+              trigger: 'blur',
+            },
           ]"
         >
           <!--   @blur="checkPhone(studentForm.phone)" -->
           <el-input
-            style="width: 202px!important"
+            style="width: 202px !important"
             :maxlength="11"
             v-model.trim="studentForm.phone"
           ></el-input>
         </el-form-item>
-        <el-form-item
-          :label="tenantId == 28 ? '城市' : '所属分部'"
-          prop="organId"
-        >
+        <el-form-item :label="tenantId == 28 ? '城市' : '所属分部'" prop="organId">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             class="multiple"
             v-model.trim="studentForm.organId"
             filterable
@@ -749,7 +804,7 @@
         </el-form-item>
         <el-form-item prop="school" label="所属学校">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             v-model.trim="studentForm.school"
             filterable
             clearable
@@ -767,7 +822,7 @@
         <el-form-item label="学员年级" prop="currentGradeNum">
           <el-select
             class="multiple"
-            style="width: 202px!important"
+            style="width: 202px !important"
             v-model.trim="studentForm.currentGradeNum"
             clearable
             filterable
@@ -783,7 +838,7 @@
         </el-form-item>
         <el-form-item label="学员班级" prop="currentClass">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             placeholder="班级"
             filterable
             clearable
@@ -861,7 +916,7 @@
         ></el-alert>
         <el-form-item label="是否运营" prop="operatingTag" v-if="tenantId == 1">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             class="multiple"
             v-model.trim="studentForm.operatingTag"
             clearable
@@ -872,7 +927,7 @@
         </el-form-item>
         <el-form-item label="是否服务" prop="serviceTag" v-if="tenantId == 1">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             class="multiple"
             v-model.trim="studentForm.serviceTag"
             clearable
@@ -887,15 +942,12 @@
               是否是新用户
               <el-tooltip placement="top" popper-class="mTooltip">
                 <div slot="content">未购买VIP课程的学员为新用户</div>
-                <i
-                  class="el-icon-question"
-                  style="font-size: 18px; color: #f56c6c"
-                ></i>
+                <i class="el-icon-question" style="font-size: 18px; color: #f56c6c"></i>
               </el-tooltip>
             </p>
           </template>
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             class="multiple"
             v-model.trim="studentForm.isNewUser"
             clearable
@@ -906,7 +958,7 @@
         </el-form-item>
         <el-form-item label="关心包" prop="carePackage">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             class="multiple"
             v-model.trim="studentForm.carePackage"
             clearable
@@ -920,7 +972,7 @@
         </el-form-item>
         <el-form-item label="加油包" prop="comeOnPackage">
           <el-select
-            style="width: 202px!important"
+            style="width: 202px !important"
             class="multiple"
             v-model.trim="studentForm.comeOnPackage"
             clearable
@@ -943,9 +995,7 @@
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="studentVisible = false">取 消</el-button>
-        <el-button type="primary" v-if="isNew" @click="submitAddStudent"
-          >确 定</el-button
-        >
+        <el-button type="primary" v-if="isNew" @click="submitAddStudent">确 定</el-button>
         <el-button type="primary" v-if="!isNew" @click="resetStudentSubmie"
           >确 定</el-button
         >
@@ -970,8 +1020,8 @@
             {
               pattern: /^1\d{10}$/,
               message: '请输入正确的手机号',
-              trigger: 'blur'
-            }
+              trigger: 'blur',
+            },
           ]"
         >
           <copy-text>{{ passwrodForm.phone }}</copy-text>
@@ -985,8 +1035,8 @@
             {
               pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
               message: '密码为6-20位数字和字母组合',
-              trigger: 'blur'
-            }
+              trigger: 'blur',
+            },
           ]"
         >
           <el-input v-model.trim="passwrodForm.password"></el-input>
@@ -1000,8 +1050,8 @@
             {
               pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
               message: '密码为6-20位数字和字母组合',
-              trigger: 'blur'
-            }
+              trigger: 'blur',
+            },
           ]"
         >
           <el-input v-model.trim="passwrodForm.password2"></el-input>
@@ -1031,11 +1081,7 @@
       />
     </el-dialog>
 
-    <el-dialog
-      title="创建云教练缴费"
-      width="500px"
-      :visible.sync="memberVisible"
-    >
+    <el-dialog title="创建云教练缴费" width="500px" :visible.sync="memberVisible">
       <createMember
         ref="addMember"
         v-if="memberVisible"
@@ -1048,6 +1094,19 @@
         <el-button type="primary" @click="submitAddMember">确 定</el-button>
       </div>
     </el-dialog>
+    <el-dialog title="云教练时长调整" width="500px" :visible.sync="cloundDateVisible">
+      <setMemberDate
+        v-if="cloundDateVisible"
+        :row="activatedRow"
+        ref="submitDateReset"
+        @close="memberVisible = false"
+        @submited="getList"
+      ></setMemberDate>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="cloundDateVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitDateReset">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -1058,7 +1117,7 @@ import {
   getStudentInfoByPhone,
   registerStudent,
   updateStudent,
-  getLatest
+  getLatest,
 } from "@/api/studentManager";
 import { queryByOrganId } from "@/api/systemManage";
 import { getGradeList } from "@/views/2021memeberActionManager/api";
@@ -1067,13 +1126,14 @@ import { vaildStudentUrl } from "@/utils/validate";
 import { resetPassword2, getTeacher, getAgreement } from "@/api/buildTeam";
 import {
   organizationCloudTeacherFeeQueryPage,
-  subjectListTree
+  subjectListTree,
 } from "@/api/specialSetting";
 import axios from "axios";
 import qs from "qs";
 import { getToken, getTenantId } from "@/utils/auth";
 import load from "@/utils/loading";
 import createMember from "./modals/createMember";
+import setMemberDate from "./modals/setMemberDate";
 import studentExt from "./modals/studentExt";
 import Tooltip from "@/components/Tooltip";
 export default {
@@ -1084,7 +1144,8 @@ export default {
     createMember,
     protocolModel,
     studentExt,
-    Tooltip
+    Tooltip,
+    setMemberDate,
   },
   data() {
     return {
@@ -1107,7 +1168,7 @@ export default {
         isNewUser: null,
         hasTeacher: null,
         isRecord: null,
-        hasMember: null
+        hasMember: null,
       },
       memberVisible: false,
       multipleSelection: [],
@@ -1122,7 +1183,7 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       studentForm: {
         phone: "",
@@ -1140,11 +1201,11 @@ export default {
         comeOnPackage: 0,
         school: null,
         currentClass: "",
-        currentGradeNum: ""
+        currentGradeNum: "",
       },
       studentUpdatePackage: {
         carePackage: 0,
-        comeOnPackage: 0
+        comeOnPackage: 0,
       },
       studentRules: {
         name: [{ required: true, message: "请输入学生姓名" }],
@@ -1155,7 +1216,7 @@ export default {
         serviceTag: [{ required: true, message: "请选择是否参与服务" }],
         isNewUser: [{ required: true, message: "请选择是否是新用户" }],
         operatingTag: [{ required: true, message: "请选择是否参与运营" }],
-        teacherId: [{ required: true, message: "请选择指导老师" }]
+        teacherId: [{ required: true, message: "请选择指导老师" }],
       },
       isNew: false,
       active: null,
@@ -1167,14 +1228,16 @@ export default {
       passwrodForm: {
         phone: "",
         password: "",
-        password2: ""
+        password2: "",
       },
       activatedRow: null,
       protocolVisible: false,
       protocolVersions: [],
       cooperationList: [],
       tenantId: null,
-      studentGradeList: []
+      studentGradeList: [],
+      showDropdownFlag: false,
+      cloundDateVisible: false,
     };
   },
   mounted() {
@@ -1190,9 +1253,7 @@ export default {
     if (this.$route.params.organId) {
       this.searchForm.organId = [];
 
-      this.searchForm.organId = this.searchForm.organId.push(
-        this.$route.params.organId
-      );
+      this.searchForm.organId = this.searchForm.organId.push(this.$route.params.organId);
     }
     this.$store.dispatch("setBranchs");
     this.$store.dispatch("setTeachers");
@@ -1201,6 +1262,14 @@ export default {
     this.tenantId = this.$helpers.tenantId;
   },
   methods: {
+    setClound(row) {
+      this.activatedRow = row;
+      this.cloundDateVisible = true;
+      console.log(row, "setClound");
+    },
+    submitDateReset() {
+      this.$refs.submitDateReset.submit();
+    },
     async getAgreement() {
       try {
         const res = await getAgreement();
@@ -1215,10 +1284,13 @@ export default {
     submitAddMember() {
       this.$refs.addMember.submit();
     },
+    showDropdown(flag) {
+      this.showDropdownFlag = flag;
+    },
     addStudentMember() {
       if (this.multipleSelection.length > 0) {
         let organIds = [];
-        this.multipleSelection.forEach(m => {
+        this.multipleSelection.forEach((m) => {
           if (!organIds.includes(m.organId)) {
             organIds.push(m.organId);
           }
@@ -1240,15 +1312,14 @@ export default {
     onCreateQRCode() {
       // 生成报名二维码
       this.qrcodeStatus = true;
-      this.qrcodeUrl =
-        vaildStudentUrl() + `/#/queryStudentPer?tenantId=` + this.tenantId;
+      this.qrcodeUrl = vaildStudentUrl() + `/#/queryStudentPer?tenantId=` + this.tenantId;
     },
     getList() {
       let params = { ...this.searchForm };
       params.rows = this.pageInfo.limit;
       params.page = this.pageInfo.page;
       params.organId = this.searchForm.organId.join(",");
-      queryStudentList(params).then(res => {
+      queryStudentList(params).then((res) => {
         if (res.code == 200) {
           this.tableList = res.data.rows;
           this.pageInfo.total = res.data.total;
@@ -1266,7 +1337,7 @@ export default {
         hasPracticeCourse: null,
         operatingTag: null,
         serviceTag: null,
-        teacherId: null
+        teacherId: null,
       };
       this.getList();
     },
@@ -1280,49 +1351,44 @@ export default {
         hasCourse: searchForm.hasCourse == "" ? null : searchForm.hasCourse,
         // isMake: searchForm.isMake ? searchForm.isMake : null,
         hasPracticeCourse:
-          searchForm.hasPracticeCourse + ""
-            ? searchForm.hasPracticeCourse
-            : null,
-        operatingTag:
-          searchForm.operatingTag + "" ? searchForm.operatingTag : null,
+          searchForm.hasPracticeCourse + "" ? searchForm.hasPracticeCourse : null,
+        operatingTag: searchForm.operatingTag + "" ? searchForm.operatingTag : null,
         serviceTag: searchForm.serviceTag + "" ? searchForm.serviceTag : null,
         teacherId: searchForm.teacherId + "" ? searchForm.teacherId : null,
-        carePackage:
-          searchForm.carePackage + "" ? searchForm.carePackage : null,
-        comeOnPackage:
-          searchForm.comeOnPackage + "" ? searchForm.comeOnPackage : null,
+        carePackage: searchForm.carePackage + "" ? searchForm.carePackage : null,
+        comeOnPackage: searchForm.comeOnPackage + "" ? searchForm.comeOnPackage : null,
         isNewUser: searchForm.isNewUser + "" ? searchForm.isNewUser : null,
         hasTeacher: searchForm.hasTeacher + "" ? searchForm.hasTeacher : null,
         isRecord: searchForm.isRecord + "" ? searchForm.isRecord : null,
-        hasMember: searchForm.hasMember + "" ? searchForm.hasMember : null
+        hasMember: searchForm.hasMember + "" ? searchForm.hasMember : null,
       };
       const options = {
         method: "POST",
         headers: {
           Authorization: getToken(),
-          tenantId: getTenantId()
+          tenantId: getTenantId(),
         },
         url,
         data: qs.stringify(data),
-        responseType: "blob"
+        responseType: "blob",
       };
 
       this.$confirm("确定导出学员名单?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       })
         .then(() => {
           load.startLoading();
           axios(options)
-            .then(res => {
+            .then((res) => {
               let blob = new Blob([res.data], {
                 // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8',
-                type: "application/vnd.ms-excel;charset=utf-8"
+                type: "application/vnd.ms-excel;charset=utf-8",
                 // word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
               });
               let text = new Response(blob).text();
-              text.then(res => {
+              text.then((res) => {
                 // 判断是否报错
                 if (res.indexOf("code") != -1) {
                   let json = JSON.parse(res);
@@ -1341,9 +1407,7 @@ export default {
                   let link = document.createElement("a");
                   let nowTime = new Date();
                   let ymd =
-                    nowTime.getFullYear() +
-                    (nowTime.getMonth() + 1) +
-                    nowTime.getDate();
+                    nowTime.getFullYear() + (nowTime.getMonth() + 1) + nowTime.getDate();
                   let fname = `导出学员名单` + ymd + ".xls"; //下载文件的名字
                   link.href = objectUrl;
                   link.setAttribute("download", fname);
@@ -1354,7 +1418,7 @@ export default {
 
               load.endLoading();
             })
-            .catch(error => {
+            .catch((error) => {
               this.$message.error("导出数据失败,请联系管理员");
               load.endLoading();
             });
@@ -1365,7 +1429,7 @@ export default {
       var regu = /^1\d{10}$/;
       var re = new RegExp(regu);
       if (re.test(val)) {
-        getStudentInfoByPhone({ mobile: this.studentForm.phone }).then(res => {
+        getStudentInfoByPhone({ mobile: this.studentForm.phone }).then((res) => {
           if (res.code == 200) {
             if (res.data) {
               this.studentForm = {
@@ -1374,7 +1438,7 @@ export default {
                 parseName: res.data.parentsName,
                 // sound: parseInt(res.data.subjectIdList),
                 phone: val,
-                date: res.data.birthdate
+                date: res.data.birthdate,
               };
             }
           }
@@ -1384,7 +1448,7 @@ export default {
     submitAddStudent() {
       const studentForm = this.studentForm;
       // 效验  然后组数据提交
-      this.$refs["studentForm"].validate(item => {
+      this.$refs["studentForm"].validate((item) => {
         if (item) {
           let obj = {
             phone: studentForm.phone,
@@ -1403,9 +1467,9 @@ export default {
             cooperationOrganId: studentForm.school,
             currentClass: studentForm.currentClass,
             currentGradeNum: studentForm.currentGradeNum,
-            courseTeacher: studentForm.courseTeacher
+            courseTeacher: studentForm.courseTeacher,
           };
-          registerStudent(obj).then(res => {
+          registerStudent(obj).then((res) => {
             if (res.code == 200) {
               this.$message.success("添加成功");
               this.studentVisible = false;
@@ -1418,7 +1482,7 @@ export default {
     // 修改学生信息
     resetStudentSubmie() {
       const studentForm = this.studentForm;
-      this.$refs["studentForm"].validate(item => {
+      this.$refs["studentForm"].validate((item) => {
         if (item) {
           let obj = {
             phone: studentForm.phone,
@@ -1438,9 +1502,9 @@ export default {
             cooperationOrganId: studentForm.school,
             currentClass: studentForm.currentClass,
             currentGradeNum: studentForm.currentGradeNum,
-            courseTeacher: studentForm.courseTeacher
+            courseTeacher: studentForm.courseTeacher,
           };
-          updateStudent(obj).then(res => {
+          updateStudent(obj).then((res) => {
             if (res.code == 200) {
               this.$message.success("修改成功");
               this.studentVisible = false;
@@ -1450,12 +1514,13 @@ export default {
         }
       });
     },
+
     async getSubjectList() {
       try {
         await subjectListTree({
           delFlag: "NO",
-          rows: 9999
-        }).then(res => {
+          rows: 9999,
+        }).then((res) => {
           let result = res.data;
           if (res.code == 200) {
             let tempArray = [];
@@ -1463,17 +1528,17 @@ export default {
             result.rows.forEach((item, index) => {
               let subject = [];
               let nowSubject = item.subjects || [];
-              nowSubject.forEach(s => {
+              nowSubject.forEach((s) => {
                 subject.push({
                   value: s.id,
-                  label: s.name
+                  label: s.name,
                 });
               });
 
               tempArray[index] = {
                 label: item.name,
                 value: item.id,
-                options: subject
+                options: subject,
               };
             });
             this.subjectList = tempArray;
@@ -1528,11 +1593,11 @@ export default {
           extSubjectIds: row.extSubjectIds || null,
           currentClass: row.currentClass || null,
           currentGradeNum: row.currentGradeNum || null,
-          courseTeacher: row.courseTeacher || null
+          courseTeacher: row.courseTeacher || null,
         };
         this.studentUpdatePackage = {
           carePackage: row.carePackage,
-          comeOnPackage: row.comeOnPackage
+          comeOnPackage: row.comeOnPackage,
         };
       });
     },
@@ -1555,7 +1620,7 @@ export default {
         carePackage: row.carePackage,
         comeOnPackage: row.comeOnPackage,
         cooperationOrganId: row.cooperationOrganId || null,
-        extSubjectIds: row.extSubjectIds
+        extSubjectIds: row.extSubjectIds,
       };
       this.extVisible = true;
     },
@@ -1572,7 +1637,7 @@ export default {
       this.passwrodForm = {
         phone: "",
         password: "",
-        password2: ""
+        password2: "",
       };
       this.$refs["passwrodForm"].resetFields();
       this.passwrodVisiable = false;
@@ -1582,14 +1647,14 @@ export default {
         this.$message.error("两次密码必须相同");
         return;
       }
-      this.$refs["passwrodForm"].validate(res => {
+      this.$refs["passwrodForm"].validate((res) => {
         if (res) {
           // 发请求
           resetPassword2({
             mobile: this.passwrodForm.phone,
             newPassword: this.passwrodForm.password,
-            userId: this.activatedRow.userId
-          }).then(res => {
+            userId: this.activatedRow.userId,
+          }).then((res) => {
             if (res.code == 200) {
               // 修改成功
               this.$message.success("修改成功");
@@ -1603,7 +1668,7 @@ export default {
       this.studentForm.teacherId = null;
       this.studentForm.school = null;
       if (val) {
-        await getTeacher({ organId: val }).then(res => {
+        await getTeacher({ organId: val }).then((res) => {
           if (res.code == 200) {
             this.maskTeacherList = res.data;
             if (this.maskTeacherList <= 0) {
@@ -1613,7 +1678,7 @@ export default {
             }
           }
         });
-        queryByOrganId({ organId: val }).then(res => {
+        queryByOrganId({ organId: val }).then((res) => {
           if (res.code == 200) {
             this.cooperationList = res.data;
           }
@@ -1624,7 +1689,7 @@ export default {
       }
     },
     async lookContracts(row) {
-      await getLatest({ userId: row.userId }).then(res => {
+      await getLatest({ userId: row.userId }).then((res) => {
         if (res.code == 200) {
           if (res.data) {
             this.protocolVersions = res.data;
@@ -1637,8 +1702,8 @@ export default {
       let dayjs = this.$helpers.dayjs;
       let nowDate = new Date().getTime();
       return nowDate - dayjs(dateStr).valueOf() < 0;
-    }
-  }
+    },
+  },
 };
 </script>
 <style lang="scss" scoped>
@@ -1691,4 +1756,8 @@ export default {
   text-overflow: ellipsis;
   white-space: nowrap;
 }
+.el-dropdown-link {
+  color: #00a79d;
+  cursor: pointer;
+}
 </style>

+ 19 - 24
src/views/teamDetail/componentCourse/addCompound.vue

@@ -10,10 +10,7 @@
         <el-popover placement="top" v-model="isLook" trigger="manual">
           <div>
             <p class="title">
-              待处理课程列表<i
-                class="el-icon-minus minus"
-                @click="isLook = false"
-              ></i>
+              待处理课程列表<i class="el-icon-minus minus" @click="isLook = false"></i>
             </p>
 
             <el-divider></el-divider>
@@ -50,9 +47,7 @@
                 label="指导老师"
               >
                 <template slot-scope="scope">
-                  <div>
-                    {{ scope.row.teacherName }}({{ scope.row.actualTeacherId }})
-                  </div>
+                  <div>{{ scope.row.teacherName }}({{ scope.row.actualTeacherId }})</div>
                 </template>
               </el-table-column>
               <el-table-column align="center" width="200px" label="上课时间">
@@ -62,9 +57,7 @@
                       ? scope.row.startClassTime.substr(0, 16)
                       : ""
                   }}-{{
-                    scope.row.endClassTime
-                      ? scope.row.endClassTime.substr(11, 5)
-                      : ""
+                    scope.row.endClassTime ? scope.row.endClassTime.substr(11, 5) : ""
                   }}</template
                 >
               </el-table-column>
@@ -77,9 +70,7 @@
               </el-table-column>
               <el-table-column align="center" label="操作">
                 <template slot-scope="scope">
-                  <el-button type="text" @click="cancleCom(scope.row)"
-                    >取消</el-button
-                  >
+                  <el-button type="text" @click="cancleCom(scope.row)">取消</el-button>
                 </template>
               </el-table-column>
             </el-table>
@@ -178,14 +169,12 @@ export default {
       let arr = [];
       let idList = [];
       let isFlage = false;
+
+      //   com.type == "HIGH_ONLINE" 旋爷要求线上基础技能课可以合并
       this.dataList.forEach((com) => {
         arr.push(com.type);
         idList.push(com.id);
-        if (
-          com.groupType != "MUSIC" ||
-          com.type == "MUSIC_NETWORK" ||
-          com.type == "HIGH_ONLINE"
-        ) {
+        if (com.groupType != "MUSIC" || com.type == "MUSIC_NETWORK") {
           this.$message.error("只有乐团的线下课可以合并");
           isFlage = true;
           return;
@@ -224,6 +213,14 @@ export default {
         }
       }
 
+      //
+      if (arr.indexOf("HIGH_ONLINE") != -1) {
+        arr = [...new Set(arr)];
+        if (arr.length != 1) {
+          this.$message.error("线上基础技能课只能和线上基础技能课合并");
+          return;
+        }
+      }
       if (this.dataList.length <= 1) {
         this.$message.error("请至少选择2节课程");
         return;
@@ -260,17 +257,17 @@ export default {
       this.dataList.forEach((course) => {
         idList.push(course.id);
         if (course.status != "NOT_START") {
-           this.$message.error("请选择未开始的课程");
+          this.$message.error("请选择未开始的课程");
           isNotStart = true;
         }
         if (course.newCourseId > 0 || course.beMerged) {
           this.$message.error("已经合并课程不能调整");
-        isNotStart = true;
+          isNotStart = true;
           return;
         }
         if (course.isLock) {
           this.$message.error("已锁定的课程不能调整");
-         isNotStart = true;
+          isNotStart = true;
           return;
         }
       });
@@ -297,9 +294,7 @@ export default {
       this.dataList.forEach((course) => {
         let dayjs = this.$helpers.dayjs;
         arr.push(
-          Math.abs(
-            dayjs(course.startClassTime).diff(course.endClassTime, "Minute")
-          )
+          Math.abs(dayjs(course.startClassTime).diff(course.endClassTime, "Minute"))
         );
       });
       if ((arr = [...new Set(arr)].length != 1)) {

+ 56 - 51
src/views/teamDetail/componentCourse/resetClass.vue

@@ -10,11 +10,7 @@
       :inline="true"
     >
       <!--    -->
-      <el-form-item
-        label="主教老师"
-        v-if="maskForm.type == 'VIP'"
-        prop="teacher"
-      >
+      <el-form-item label="主教老师" v-if="maskForm.type == 'VIP'" prop="teacher">
         <remote-search
           :commit="'setTeachers'"
           v-model="maskForm.teacher"
@@ -23,18 +19,14 @@
         />
       </el-form-item>
       <el-form-item label="主教老师" v-else prop="teacher">
-        <remote-search
-          :commit="'setTeachers'"
-          v-model="maskForm.teacher"
-          :width="220"
-        />
+        <remote-search :commit="'setTeachers'" v-model="maskForm.teacher" :width="220" />
       </el-form-item>
       <el-form-item
         label="助教老师"
         v-if="
           maskForm.type != 'MUSIC_NETWORK' &&
-            maskForm.type != 'HIGH_ONLINE' &&
-            maskForm.groupType == 'MUSIC'
+          maskForm.type != 'HIGH_ONLINE' &&
+          maskForm.groupType == 'MUSIC'
         "
         prop="assistant"
       >
@@ -79,7 +71,7 @@
           format="HH:mm"
           value-format="HH:mm"
           :picker-options="{
-            selectableRange: `06:00:00 - 23:30:00`
+            selectableRange: `06:00:00 - 23:30:00`,
           }"
           clearable
         ></el-time-picker>
@@ -95,19 +87,30 @@
             start: '04:30',
             step: '00:05',
             end: '23:30',
-            minTime: maskForm.startTime
+            minTime: maskForm.startTime,
           }"
           clearable
         ></el-time-picker>
       </el-form-item>
+      <el-form-item label="课程类型" v-if="maskForm.type == 'VIP'" prop="courseType">
+        <el-select
+          clearable
+          @change="typeChange"
+          style="width: 220px !important"
+          v-model.trim="maskForm.teachMode"
+        >
+          <el-option label="线上课" value="ONLINE"></el-option>
+          <el-option label="线下课" value="OFFLINE"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item
         label="课程类型"
-        v-if="maskForm.type == 'VIP'"
+        v-if="maskForm.type == 'HIGH' || maskForm.type == 'HIGH_ONLINE'"
         prop="courseType"
       >
         <el-select
           clearable
-          @change="typeChange"
+          @change="typeChangeHight"
           style="width: 220px !important"
           v-model.trim="maskForm.teachMode"
         >
@@ -143,7 +146,7 @@ import {
   getTeacher,
   resetCourse,
   getCourseScheduleDetail,
-  getOrganCourseDurationSettings
+  getOrganCourseDurationSettings,
 } from "@/api/buildTeam";
 import { getTeachSchool } from "@/api/teacherManager";
 import { getSchool } from "@/api/systemManage";
@@ -162,26 +165,20 @@ export default {
         date: null,
         timer: null,
         startTime: null,
-        endTime: null
+        endTime: null,
       },
       maskRules: {
-        teacher: [
-          { required: true, message: "请选择主教老师名称", trigger: "blur" }
-        ],
+        teacher: [{ required: true, message: "请选择主教老师名称", trigger: "blur" }],
         date: [{ required: true, message: "请选择上课时间", trigger: "blur" }],
-        startTime: [
-          { required: true, message: "请选择上课开始时间", trigger: "blur" }
-        ],
-        endTime: [
-          { required: true, message: "请选择上课结束时间", trigger: "blur" }
-        ]
+        startTime: [{ required: true, message: "请选择上课开始时间", trigger: "blur" }],
+        endTime: [{ required: true, message: "请选择上课结束时间", trigger: "blur" }],
       },
       teacherList: [],
       schoolList: [],
       typeTimeList: [],
       courseTimeList: {},
       organId: "",
-      bigin: this.beginDate()
+      bigin: this.beginDate(),
     };
   },
   created() {
@@ -215,7 +212,7 @@ export default {
       this.$confirm("是否确定?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       })
         .then(() => {
           let teachingTeacherIdList = maskForm.assistant.join(",");
@@ -225,17 +222,16 @@ export default {
           let obj = {
             actualTeacherId: maskForm.teacher,
             startClassTimeStr: maskForm.startTime,
-            endClassTimeStr:
-              maskForm.groupType == "MUSIC" ? maskForm.endTime : null,
+            endClassTimeStr: maskForm.groupType == "MUSIC" ? maskForm.endTime : null,
             id: maskForm.id,
             teachingTeacherIdList,
             classDate: maskForm.date,
             type: maskForm.type,
             groupType: maskForm.groupType,
             schoolId: this.maskForm.address,
-            teachMode: this.maskForm.teachMode
+            teachMode: this.maskForm.teachMode,
           };
-          resetCourse(cleanDeep(obj)).then(res => {
+          resetCourse(cleanDeep(obj)).then((res) => {
             if (res.code == 200) {
               this.$message.success("修改成功");
               this.$emit("getList");
@@ -247,10 +243,10 @@ export default {
               this.$confirm(`当前课程课酬预计为0,是否继续`, "提示", {
                 confirmButtonText: "确定",
                 cancelButtonText: "取消",
-                type: "warning"
-              }).then(res => {
+                type: "warning",
+              }).then((res) => {
                 obj.allowZeroSalary = true;
-                resetCourse(cleanDeep(obj)).then(res => {
+                resetCourse(cleanDeep(obj)).then((res) => {
                   if (res.code == 200) {
                     this.$message.success("修改成功");
                     this.$emit("getList");
@@ -266,8 +262,17 @@ export default {
     typeChange() {
       this.$set(this.maskForm, "address", null);
     },
+    typeChangeHight(val) {
+      //   v-if="maskForm.type == 'HIGH' || maskForm.type == 'HIGH_ONLINE'"
+      this.$set(this.maskForm, "address", null);
+      if (val == "ONLINE") {
+        this.$set(this.maskForm, "type", "HIGH_ONLINE");
+      } else {
+        this.$set(this.maskForm, "type", "HIGH");
+      }
+    },
     changeStartTime(val) {
-      this.$nextTick(res => {
+      this.$nextTick((res) => {
         if (val) {
           this.$set(
             this.maskForm,
@@ -280,7 +285,7 @@ export default {
       });
     },
     changeTime(val) {
-      this.$nextTick(res => {
+      this.$nextTick((res) => {
         this.maskForm.endTime = addTimerFormMinute(
           this.maskForm.date,
           this.maskForm.startTime,
@@ -291,8 +296,8 @@ export default {
     changeTeacher(val) {
       if (val) {
         getTeachSchool({
-          userId: val
-        }).then(res => {
+          userId: val,
+        }).then((res) => {
           if (res.code == 200) {
             this.schoolList = res.data;
           }
@@ -301,7 +306,7 @@ export default {
       }
     },
     getDetail(id) {
-      getCourseScheduleDetail({ courseScheduleId: id }).then(async res => {
+      getCourseScheduleDetail({ courseScheduleId: id }).then(async (res) => {
         if (res.code == 200) {
           this.maskForm = {
             id: res.data.id,
@@ -314,7 +319,7 @@ export default {
             type: res.data.type,
             groupType: res.data.groupType,
             address: res.data.schoolId,
-            teachMode: res.data.teachMode
+            teachMode: res.data.teachMode,
           };
           for (let key in this.courseTimeList) {
             if (key == row.courseScheduleType) {
@@ -333,7 +338,7 @@ export default {
           if (res.data.groupType == "MUSIC") {
             try {
               const res = await getOrganCourseDurationSettings({
-                organId: this.organId
+                organId: this.organId,
               });
               this.courseTimeList = res.data;
               for (let key in this.courseTimeList) {
@@ -347,14 +352,14 @@ export default {
           this.maskForm.timer = time;
           if (this.maskForm.teacher && this.maskForm.type == "VIP") {
             getTeachSchool({
-              userId: this.maskForm.teacher
-            }).then(res => {
+              userId: this.maskForm.teacher,
+            }).then((res) => {
               if (res.code == 200) {
                 this.schoolList = res.data;
               }
             });
           } else {
-            getSchool({ organId: res.data.organId }).then(res => {
+            getSchool({ organId: res.data.organId }).then((res) => {
               if (res.code == 200) {
                 this.schoolList = res.data;
               }
@@ -369,9 +374,9 @@ export default {
         disabledDate(time) {
           return time.getTime() + 86400000 <= new Date().getTime();
           //开始时间不选时,结束时间最大值小于等于当天
-        }
+        },
       };
-    }
+    },
   },
 
   watch: {
@@ -381,7 +386,7 @@ export default {
       }
     },
     "maskForm.timer"(val) {
-      this.$nextTick(res => {
+      this.$nextTick((res) => {
         if (val) {
           this.$set(
             this.maskForm,
@@ -392,8 +397,8 @@ export default {
           this.$set(this.maskForm, "endTime", "");
         }
       });
-    }
-  }
+    },
+  },
 };
 </script>
 <style lang="scss" scoped>