Browse Source

04/13 15:40

111
Xiao_Mo 5 năm trước cách đây
mục cha
commit
9192eaaa7d

+ 1 - 0
package.json

@@ -22,6 +22,7 @@
     "element-ui": "^2.12.0",
     "i": "^0.3.6",
     "js-cookie": "2.2.0",
+    "linq": "^3.2.2",
     "normalize.css": "7.0.0",
     "npm": "^6.13.0",
     "nprogress": "0.2.0",

+ 0 - 1
src/main.js

@@ -8,7 +8,6 @@ import 'element-ui/lib/theme-chalk/index.css'
 import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
 
 import '@/styles/index.scss' // global css
-
 import App from './App'
 import store from './store'
 import router from './router'

+ 8 - 8
src/views/afterSchoolManager/afterWorkList.vue

@@ -37,13 +37,13 @@
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-select placeholder="是否回复" v-model="searchForm.isReplied" clearable>
+          <el-select placeholder="是否评价" v-model="searchForm.isReplied" clearable>
             <el-option label="是" value="1"></el-option>
             <el-option label="否" value="0"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-select placeholder="是否查看" v-model="searchForm.isView" clearable>
+          <el-select placeholder="是否及时评价" v-model="searchForm.isRepliedTimely" clearable>
             <el-option label="是" value="1"></el-option>
             <el-option label="否" value="0"></el-option>
           </el-select>
@@ -118,14 +118,14 @@
               <div>{{scope.row.status?'是':'否'}}</div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="isReplied" label="是否回复">
+          <el-table-column align="center" prop="isReplied" label="是否评价">
             <template slot-scope="scope">
               <div>{{scope.row.isReplied?'是':'否'}}</div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="isView" label="是否查看">
+          <el-table-column align="center" prop="repliedTimely" label="是否及时评价">
             <template slot-scope="scope">
-              <div>{{scope.row.isView?'是':'否'}}</div>
+              <div>{{scope.row.repliedTimely?'是':'否'}}</div>
             </template>
           </el-table-column>
           <!-- <el-table-column align="center" prop="teacherName" label="老师姓名">
@@ -219,7 +219,7 @@ export default {
         search: null,
         timer: [],
         status: null,
-        isReplied: null,
+        isRepliedTimely: null,
         isView: null,
         organIdList: null,
         expireDate:[]
@@ -365,8 +365,8 @@ export default {
           : null;
       this.searchForm.search ? (obj.search = this.searchForm.search) : null;
       this.searchForm.status ? (obj.status = this.searchForm.status) : null;
-      this.searchForm.isReplied
-        ? (obj.isReplied = this.searchForm.isReplied)
+      this.searchForm.isRepliedTimely
+        ? (obj.isRepliedTimely = this.searchForm.isRepliedTimely)
         : null;
       this.searchForm.isView ? (obj.isView = this.searchForm.isView) : null;
       this.extracurricularExercisesId&&this.extracurricularExercisesId !='yes'

+ 122 - 58
src/views/studentManager/studentList.vue

@@ -75,11 +75,28 @@
             <el-option label="否" value="false"></el-option>
           </el-select>
         </el-form-item>
-        <!-- <el-form-item>
-          <el-input placeholder="学生姓名"
-                    @keyup.enter.native='onSearch'
-                    v-model.trim="searchForm.studentName"></el-input>
-        </el-form-item>-->
+        <el-form-item prop="hasCourse">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.operatingTag"
+            clearable
+            placeholder="是否运营"
+          >
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="hasCourse">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.serviceTag"
+            clearable
+            placeholder="是否服务"
+          >
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item>
           <el-button @click="onSearch" type="danger">搜索</el-button>
           <el-button @click="onReSet" type="primary">重置</el-button>
@@ -95,12 +112,12 @@
         <el-table :data="tableList" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
           <el-table-column align="center" prop="userId" label="学员编号"></el-table-column>
           <el-table-column align="center" prop="username" label="学员姓名"></el-table-column>
-          <el-table-column align="center" prop="organName" width="150px" label="所属分部"></el-table-column>
+          <el-table-column align="center" prop="organName" label="所属分部"></el-table-column>
           <el-table-column align="center" label="性别">
             <template slot-scope="scope">{{ scope.row.gender ? '男': '女' }}</template>
           </el-table-column>
           <el-table-column align="center" prop="realName" label="家长姓名"></el-table-column>
-          <el-table-column align="center" width="180px" prop="parentsPhone" label="家长联系电话"></el-table-column>
+          <el-table-column align="center" width="120px" prop="parentsPhone" label="家长联系电话"></el-table-column>
           <el-table-column align="center" label="是否激活">
             <template slot-scope="scope">{{ scope.row.isActive ? '是' : '否' }}</template>
           </el-table-column>
@@ -113,6 +130,12 @@
           <el-table-column align="center" label="是否有网管课">
             <template slot-scope="scope">{{ scope.row.hasPracticeCourse ? '是' : '否' }}</template>
           </el-table-column>
+          <el-table-column align="center" label="是否服务">
+            <template slot-scope="scope">{{ scope.row.serviceTag ? '是' : '否' }}</template>
+          </el-table-column>
+          <el-table-column align="center" label="是否运营">
+            <template slot-scope="scope">{{ scope.row.operatingTag ? '是' : '否' }}</template>
+          </el-table-column>
           <el-table-column align="center" prop="courseBalance" label="课程余额(元)"></el-table-column>
           <el-table-column align="center" fixed="right" width="180px" label="操作">
             <template slot-scope="scope">
@@ -200,6 +223,20 @@
             <el-option :value="1" label="男"></el-option>
           </el-select>
         </el-form-item>
+
+        <el-form-item label="是否运营" prop="operatingTag">
+          <el-select class="multiple" v-model.trim="studentForm.operatingTag" clearable>
+            <el-option value="1" label="是"></el-option>
+            <el-option value="0" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否服务" prop="serviceTag">
+          <el-select class="multiple" v-model.trim="studentForm.serviceTag" clearable>
+            <el-option value="1" label="是"></el-option>
+            <el-option value="0" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+
         <el-form-item label="家长姓名">
           <el-input v-model.trim="studentForm.parseName"></el-input>
         </el-form-item>
@@ -284,7 +321,7 @@ import axios from "axios";
 import qs from "qs";
 import { getToken } from "@/utils/auth";
 import load from "@/utils/loading";
-import {permission} from "@/utils/directivePage"
+import { permission } from "@/utils/directivePage";
 export default {
   name: "studentList",
   components: { pagination },
@@ -298,7 +335,9 @@ export default {
         isActive: null,
         hasCourse: null,
         isMake: null,
-        hasPracticeCourse: null
+        hasPracticeCourse: null,
+        operatingTag: null,
+        serviceTag: null
       },
       searchList: [],
       tableList: [],
@@ -317,14 +356,18 @@ export default {
         sex: "",
         parseName: "",
         date: "",
-        nation: ""
+        nation: "",
+        serviceTag: null,
+        operatingTag: null
       },
       studentRules: {
         name: [{ required: true, message: "请输入学生姓名" }],
         sex: [{ required: true, message: "请选择学生姓名" }],
         date: [{ required: true, message: "请选择出生日期" }],
         organId: [{ required: true, message: "请选择分部" }],
-        nation: [{ required: true, message: "请输入名族" }]
+        nation: [{ required: true, message: "请输入名族" }],
+        serviceTag: [{ required: true, message: "请选择是否参与服务" }],
+        operatingTag: [{ required: true, message: "请选择是否参与运营" }]
       },
       isNew: false,
       active: null,
@@ -405,12 +448,16 @@ export default {
         search: null,
         studentName: null,
         isActive: null,
-        isMake: null
+        hasCourse: null,
+        isMake: null,
+        hasPracticeCourse: null,
+        operatingTag: null,
+        serviceTag: null
       };
     },
-    downLoadStudent () {
-      let url = '/api-web/export/studentHasCourse'
-      let searchForm = this.searchForm
+    downLoadStudent() {
+      let url = "/api-web/export/studentHasCourse";
+      let searchForm = this.searchForm;
       let data = {
         organId: searchForm.organId ? searchForm.organId : null,
         search: searchForm.search ? searchForm.search : null,
@@ -419,7 +466,9 @@ export default {
         isMake: searchForm.isMake ? searchForm.isMake : null,
         hasPracticeCourse: searchForm.hasPracticeCourse
           ? searchForm.hasPracticeCourse
-          : null
+          : null,
+        operatingTag: searchForm.operatingTag ? searchForm.operatingTag : null,
+        serviceTag: searchForm.serviceTag ? searchForm.serviceTag : null
       };
       const options = {
         method: "POST",
@@ -431,43 +480,50 @@ export default {
         responseType: "blob"
       };
 
-      this.$confirm('确定导出学员名单?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).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'
-            // word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if(res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + (nowTime.getMonth() + 1) + nowTime.getDate()
-              let fname = `导出学员名单` + ymd //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          
-          load.endLoading();
-        }).catch(error => {
-            this.$message.error('导出数据失败,请连接管理员');
-            load.endLoading();
-          }) 
-      }).catch(() => {});
+      this.$confirm("确定导出学员名单?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .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"
+                // word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
+              let text = new Response(blob).text();
+              text.then(res => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    (nowTime.getMonth() + 1) +
+                    nowTime.getDate();
+                  let fname = `导出学员名单` + ymd; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+
+              load.endLoading();
+            })
+            .catch(error => {
+              this.$message.error("导出数据失败,请连接管理员");
+              load.endLoading();
+            });
+        })
+        .catch(() => {});
     },
     checkPhone(val) {
       var regu = /^1[3456789]\d{9}$/;
@@ -500,7 +556,9 @@ export default {
             realName: this.studentForm.parseName,
             birthdate: this.studentForm.date,
             organId: this.studentForm.organId,
-            nation: this.studentForm.nation
+            nation: this.studentForm.nation,
+            serviceTag: this.studentForm.serviceTag,
+            operatingTag: this.studentForm.operatingTag
           };
           registerStudent(obj).then(res => {
             if (res.code == 200) {
@@ -524,7 +582,9 @@ export default {
             birthdate: this.studentForm.date,
             organId: this.studentForm.organId,
             id: this.active.userId,
-            nation: this.studentForm.nation
+            nation: this.studentForm.nation,
+            serviceTag: this.studentForm.serviceTag,
+            operatingTag: this.studentForm.operatingTag
           };
           updateStudent(obj).then(res => {
             if (res.code == 200) {
@@ -553,7 +613,9 @@ export default {
         parseName: row.realName,
         date: row.birthdate,
         organId: row.organId,
-        nation: row.nation
+        nation: row.nation,
+        serviceTag: row.serviceTag.toString(),
+        operatingTag: row.operatingTag.toString()
       };
     },
     resetPassWrod(row) {
@@ -604,7 +666,9 @@ export default {
           sex: "",
           parseName: "",
           date: "",
-          nation: ""
+          nation: "",
+          serviceTag: null,
+          operatingTag: null
         };
         this.$refs["studentForm"].resetFields();
       }
@@ -632,7 +696,7 @@ export default {
     padding-bottom: 0;
   }
   .multiple.el-select {
-    width: 100% !important;
+    width: 185px !important;
   }
 }
 </style>

+ 39 - 63
src/views/teacherManager/teacherOperation/components/teacherOperation.vue

@@ -18,10 +18,9 @@
                 <el-input v-model.trim="topForm.memo"></el-input>
               </el-form-item>
             </el-col>
-           
           </el-row>
           <el-row>
-             <el-col :span="12">
+            <el-col :span="12">
               <el-form-item label="性别" prop="gender" :label-width="formLabelWidth">
                 <el-select v-model.trim="topForm.gender">
                   <el-option label="男" :value="1"></el-option>
@@ -39,7 +38,6 @@
                 ></el-date-picker>
               </el-form-item>
             </el-col>
-            
           </el-row>
           <el-row>
             <el-col :span="12">
@@ -64,10 +62,9 @@
                 </el-select>
               </el-form-item>
             </el-col>
-           
           </el-row>
           <el-row>
-             <el-col :span="12">
+            <el-col :span="12">
               <el-form-item label="所属分部" prop="organId" :label-width="formLabelWidth">
                 <el-select
                   v-model.trim="topForm.organId"
@@ -103,10 +100,9 @@
                 </el-select>
               </el-form-item>
             </el-col>
-         
           </el-row>
           <el-row>
-               <el-col :span="12">
+            <el-col :span="12">
               <el-form-item label="人事状态" prop="isProbationPeriod" :label-width="formLabelWidth">
                 <el-select
                   v-model.trim="topForm.isProbationPeriod"
@@ -124,7 +120,6 @@
                 <el-input disabled v-model.trim="teacherSchools"></el-input>
               </el-form-item>
             </el-col>
-            
           </el-row>
           <el-row>
             <el-col :span="12">
@@ -199,27 +194,22 @@
           </el-row>
           <el-row>
             <el-col :span="12">
-              <el-form-item label="专业技能" prop="subjectIds" :label-width="formLabelWidth">
+              <el-form-item label="专业技能" :label-width="formLabelWidth">
                 <el-select
                   :disabled="!topForm.organId"
-                  multiple
-                  v-model.trim="topForm.subjectIds"
+                  v-model="subjectIds"
                   clearable
-                  filterable
-                  placeholder="专业技能"
+                  placeholder="专业技能" 
+                  multiple
+                 
                 >
-                  <el-option-group
-                    v-for="group in subjectList"
-                    :key="group.label"
-                    :label="group.label"
-                  >
                     <el-option
-                      v-for="item in group.options"
-                      :key="item.value"
-                      :label="item.label"
-                      :value="item.value"
+                      v-for="item in subjectList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
                     ></el-option>
-                  </el-option-group>
+               
                 </el-select>
               </el-form-item>
             </el-col>
@@ -305,6 +295,7 @@
 import { getToken } from "@/utils/auth";
 import { branchQueryPage, subjectListTree } from "@/api/specialSetting";
 import { teacherAdd, teacherUpdate, teacherGet } from "@/api/teacherManager";
+import {getSubject} from '@/api/buildTeam'
 import store from "@/store";
 import { permission } from "@/utils/directivePage";
 import { jobNature } from "@/utils/searchArray";
@@ -318,6 +309,7 @@ let validPhone = (rule, value, callback) => {
     callback();
   }
 };
+
 export default {
   name: "teacherOperation",
   data() {
@@ -331,7 +323,7 @@ export default {
       teacherId: this.$route.query.teacherId,
       formLabelWidth: "80px",
       branchList: [], // 分部列表
-      subjectList: [], //声部列表
+      subjectList: [], //声部列表 // 多选声部列表
       teacherSchools: null,
       topForm: {
         realName: null,
@@ -347,7 +339,7 @@ export default {
         graduateSchool: null,
         email: null,
         educationBackground: null,
-        subjectIds: [],
+      
         isProbationPeriod: null,
         technicalTitles: null,
         certificateType: null,
@@ -356,12 +348,11 @@ export default {
         isSupportExtraPracticeLesson: null,
         memo: null
       },
+        subjectIds: [],
       tenantId: null,
       imageIcon: require("@/assets/images/base/warning.png"),
       rules: {
-        realName: [
-          { required: true, message: "请输入姓名", trigger: "blur" }
-        ],
+        realName: [{ required: true, message: "请输入姓名", trigger: "blur" }],
         gender: [{ required: true, message: "请选择性别", trigger: "change" }],
         entryDate: [
           { required: true, message: "请选择入职日期", trigger: "change" }
@@ -391,6 +382,7 @@ export default {
   created() {},
   mounted() {
     this.__init();
+   
   },
   activated() {
     this.pageType = this.$route.query.type;
@@ -442,7 +434,7 @@ export default {
               graduateSchool: result.graduateSchool,
               email: result.email,
               educationBackground: result.educationBackground,
-            
+
               technicalTitles: result.technicalTitles,
               certificateType: result.certificateType,
               certificateNum: result.certificateNum,
@@ -450,20 +442,20 @@ export default {
               isSupportCourseScheduleRewardsRules:
                 result.isSupportCourseScheduleRewardsRules,
               isSupportExtraPracticeLesson: result.isSupportExtraPracticeLesson,
-              memo:result.memo
+              memo: result.memo
             };
             let sn = [];
             result.teacherSchools.forEach(item => {
               sn.push(item.name);
             });
-            if(result.subjectId){
+            if (result.subjectId) {
               let arr = result.subjectId.split(",");
-              this.topForm.subjectIds = arr.map(item=>{
-                return parseInt(item)
-              })
+              this.subjectIds = arr.map(item => {
+                return parseInt(item);
+              });
             }
             this.teacherSchools = this.joinArray(sn, ","); // 教学点
-            this.switchOrgan()
+            this.switchOrgan();
           }
         });
       }
@@ -481,12 +473,17 @@ export default {
     onSubmit(formName) {
       this.$refs[formName].validate(valid => {
         if (valid) {
+          if(this.subjectIds.length <= 0 ){
+            this.$message.error('请选择专业技能')
+            return
+          }
           this.topForm.flowOrganRange = this.topForm.flowOrganRange
             ? this.topForm.flowOrganRange.join(",")
             : null;
-          this.topForm.subjectId = this.topForm.subjectIds.join(",");
+          this.subjectId = this.subjectIds.join(",");
           if (this.pageType == "update") {
             this.topForm.id = this.teacherId;
+            this.topForm.subjectId = this.subjectId
             teacherUpdate(this.topForm).then(res => {
               if (res.code == 200) {
                 // this.$emit('onTeacher')
@@ -575,35 +572,14 @@ export default {
       } else {
         this.tenantId = 1;
       }
-      subjectListTree({
-        // 声部
-        delFlag: 0,
-        rows: 9999,
-        tenantId: this.tenantId
-      }).then(res => {
-        let result = res.data;
-        if (res.code == 200) {
-          let tempArray = [];
-          result.rows.forEach((item, index) => {
-            let subject = [];
-            if (item.subjects) {
-              item.subjects.forEach(s => {
-                subject.push({
-                  value: s.id,
-                  label: s.name
-                });
-              });
-            }
-
-            tempArray[index] = {
-              label: item.name,
-              options: subject
-            };
-          });
-          this.subjectList = tempArray;
+      getSubject({tenantId: this.tenantId}).then(res=>{
+        if(res.code == 200){
+           this.subjectList= res.data;
+           
         }
-      });
+      })
     }
+
   }
 };
 </script>

+ 4 - 4
src/views/teamBuild/components/teamSoundMoney.vue

@@ -1508,16 +1508,16 @@ export default {
               couponPrice = 0; // 优惠金额
             } else if (item.chiosetype == "LEASE") {
               // 租赁
-              couponPrice = item.mode.LEASE; // 优惠金额
+              couponPrice = parseFloat(item.mode.LEASE); // 优惠金额
               if (item.name != "自备") {
-                amount += item.mode.depositFee;
+                amount += parseFloat(item.mode.depositFee);
               } else {
                 amount += 0;
               }
             } else {
               //团购
               amount += parseFloat(item.mode.price);
-              couponPrice = item.mode.GROUP;
+              couponPrice = parseFloat(item.mode.GROUP);
             }
             marketPrice += parseFloat(amount + couponPrice);
             // item.id ? goodsGroupIds[item.id] : null
@@ -2362,7 +2362,7 @@ export default {
     }
   }
   .buy {
-    position: fixed;
+    position: absolute;
     margin: 0 auto;
     bottom: 0;
     left: 0;