mo 4 年之前
父節點
當前提交
735d4236b1
共有 47 個文件被更改,包括 771 次插入149 次删除
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/chunk-00832bd2.c76da7ab.css
  3. 0 0
      dist/static/css/chunk-0889ada0.530c240e.css
  4. 0 0
      dist/static/css/chunk-142dfc60.a58fda73.css
  5. 0 0
      dist/static/css/chunk-19fa5582.003713ea.css
  6. 1 0
      dist/static/css/chunk-4b7354eb.14afb3b5.css
  7. 0 0
      dist/static/css/chunk-4f42f31e.6afaee79.css
  8. 0 0
      dist/static/css/chunk-5680dc17.d6bd7e43.css
  9. 1 0
      dist/static/css/chunk-6541b5d8.069ba985.css
  10. 1 0
      dist/static/css/chunk-731b88cb.b28f5017.css
  11. 1 0
      dist/static/css/chunk-7386f3b0.f1521516.css
  12. 0 0
      dist/static/css/chunk-759197e3.21b678d3.css
  13. 1 0
      dist/static/css/chunk-7da979e6.d5077bae.css
  14. 1 0
      dist/static/css/chunk-92c25d3e.5c82c130.css
  15. 0 0
      dist/static/css/chunk-bf6f74a4.bcdea30f.css
  16. 0 0
      dist/static/css/chunk-bf85971a.0adeff11.css
  17. 1 0
      dist/static/css/chunk-c38de4c8.44c33e30.css
  18. 0 0
      dist/static/css/chunk-c826dafa.80057066.css
  19. 0 0
      dist/static/js/app.a4cfe96a.js
  20. 0 0
      dist/static/js/chunk-00832bd2.ddd39276.js
  21. 0 0
      dist/static/js/chunk-0889ada0.bc997f53.js
  22. 0 0
      dist/static/js/chunk-1341b691.8a925af8.js
  23. 0 0
      dist/static/js/chunk-142dfc60.9db7b8dd.js
  24. 0 0
      dist/static/js/chunk-19fa5582.9821560a.js
  25. 0 0
      dist/static/js/chunk-359433da.cf628b5c.js
  26. 0 0
      dist/static/js/chunk-4b7354eb.7ef6ccb1.js
  27. 0 0
      dist/static/js/chunk-6541b5d8.f7d147d0.js
  28. 0 0
      dist/static/js/chunk-68259a14.65f21dea.js
  29. 0 0
      dist/static/js/chunk-731b88cb.94bd8a7f.js
  30. 0 0
      dist/static/js/chunk-7da979e6.e6d23922.js
  31. 0 0
      dist/static/js/chunk-92c25d3e.90ca1d53.js
  32. 0 0
      dist/static/js/chunk-bf6f74a4.a850d59d.js
  33. 0 0
      dist/static/js/chunk-bf85971a.9a610abe.js
  34. 0 0
      dist/static/js/chunk-c38de4c8.c3f65526.js
  35. 0 0
      dist/static/js/chunk-c826dafa.197e332b.js
  36. 0 0
      dist/static/js/chunk-d5006d16.1bf0c347.js
  37. 0 0
      dist/static/js/chunk-ede6ad82.0870ce42.js
  38. 31 1
      src/api/buildTeam.js
  39. 2 0
      src/router/index.js
  40. 1 0
      src/router/notKeepAliveList.js
  41. 227 0
      src/views/musicalManager/index.vue
  42. 79 6
      src/views/repairManager/repairList.vue
  43. 181 0
      src/views/studentManager/components/studentLebao.vue
  44. 11 0
      src/views/studentManager/index.vue
  45. 145 0
      src/views/studentManager/modals/addMusic.vue
  46. 83 138
      src/views/teamBuild/components/teamBaseInfo.vue
  47. 4 4
      vue.config.js

文件差異過大導致無法顯示
+ 0 - 0
dist/index.html


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-00832bd2.c76da7ab.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-0889ada0.530c240e.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-142dfc60.a58fda73.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-19fa5582.003713ea.css


文件差異過大導致無法顯示
+ 1 - 0
dist/static/css/chunk-4b7354eb.14afb3b5.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-4f42f31e.6afaee79.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-5680dc17.d6bd7e43.css


文件差異過大導致無法顯示
+ 1 - 0
dist/static/css/chunk-6541b5d8.069ba985.css


+ 1 - 0
dist/static/css/chunk-731b88cb.b28f5017.css

@@ -0,0 +1 @@
+.alert[data-v-4f95a965]{margin:10px 0}.dialog-footer[data-v-3a7969a6],.dialog-footer[data-v-290cb116]{margin-top:20px;display:block;text-align:right}.el-button--primary[data-v-33b2dd9b],.el-button--primary[data-v-33b2dd9b]:active,.el-button--primary[data-v-33b2dd9b]:focus,.el-button--primary[data-v-33b2dd9b]:hover{background:#14928a;border-color:#14928a;color:#fff}[data-v-33b2dd9b] .el-date-editor.el-input,[data-v-33b2dd9b] .el-select{width:100%!important}[data-v-33b2dd9b] .el-table .cell{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical}[data-v-33b2dd9b] .el-dialog__body{padding:10px 20px}.newBand[data-v-33b2dd9b]{display:inline-block}

+ 1 - 0
dist/static/css/chunk-7386f3b0.f1521516.css

@@ -0,0 +1 @@
+.number-input[data-v-e3750f40]{width:100%}.number-input[data-v-a10777a0] .el-input__inner,.number-input[data-v-e3750f40] .el-input__inner{text-align:left}.number-input[data-v-55ad3016]{width:100%}.number-input[data-v-55ad3016] .el-input__inner{text-align:left}

文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-759197e3.21b678d3.css


+ 1 - 0
dist/static/css/chunk-7da979e6.d5077bae.css

@@ -0,0 +1 @@
+.dialog-footer[data-v-39c75a6e]{margin-top:20px;display:block;text-align:right}.alert[data-v-39c75a6e]{margin-bottom:10px}.dialog-footer[data-v-43863eea]{margin-top:20px;display:block;text-align:right}.alert[data-v-43863eea]{margin-bottom:10px}.dialog-footer[data-v-8018d522]{margin-top:20px;display:block;text-align:right}.alert[data-v-8018d522]{margin-bottom:10px}.dialog-footer[data-v-09b44c52]{margin-top:20px;display:block;text-align:right}.alert[data-v-09b44c52]{margin-bottom:10px}

文件差異過大導致無法顯示
+ 1 - 0
dist/static/css/chunk-92c25d3e.5c82c130.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-bf6f74a4.bcdea30f.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-bf85971a.0adeff11.css


+ 1 - 0
dist/static/css/chunk-c38de4c8.44c33e30.css

@@ -0,0 +1 @@
+[data-v-ed5a5b42] .dialog-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}[data-v-cd4b7950] .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;height:80px!important;min-width:118px}[data-v-cd4b7950] .current.is-selected{border:2px solid #137f79}[data-v-cd4b7950] .current.is-selected .el-calendar-day{height:76px!important}.vipDot[data-v-cd4b7950]{background-color:#2aaea6}.teamDot[data-v-cd4b7950],.vipDot[data-v-cd4b7950]{width:30px;height:30px;margin-top:10px;display:inline-block;border-radius:50%;text-align:center;line-height:30px;color:#fff;font-size:14px}.teamDot[data-v-cd4b7950]{background-color:#5a79f6}.newDot[data-v-cd4b7950]{width:30px;height:30px;margin-top:10px;background-color:#34b1f6;display:inline-block;border-radius:50%;text-align:center;line-height:30px;color:#fff;font-size:14px}

文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-c826dafa.80057066.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.a4cfe96a.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-00832bd2.ddd39276.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-0889ada0.bc997f53.js


+ 0 - 0
dist/static/js/chunk-1341b691.27806c32.js → dist/static/js/chunk-1341b691.8a925af8.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-142dfc60.9db7b8dd.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-19fa5582.9821560a.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-359433da.cf628b5c.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-4b7354eb.7ef6ccb1.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-6541b5d8.f7d147d0.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-68259a14.65f21dea.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-731b88cb.94bd8a7f.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-7da979e6.e6d23922.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-92c25d3e.90ca1d53.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-bf6f74a4.a850d59d.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-bf85971a.9a610abe.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-c38de4c8.c3f65526.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-c826dafa.197e332b.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-d5006d16.1bf0c347.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-ede6ad82.0870ce42.js


+ 31 - 1
src/api/buildTeam.js

@@ -1481,7 +1481,6 @@ export function getStudentPaymentCalenders(data) {
 }
 
 // 跨团合并班级
-
 export function spanGroupMergeClassSplitClassAffirm(data) {
   return request2({
     url: api + `/classGroup/spanGroupMergeClassSplitClassAffirm`,
@@ -1491,6 +1490,37 @@ export function spanGroupMergeClassSplitClassAffirm(data) {
   })
 }
 
+// 获取乐保列表
+export function getInstrument(data) {
+  return request2({
+    url: api + `/studentInstrument/getList`,
+    method: 'get',
+    params:data,
+    data:{}
+  })
+}
+
+// 新增乐保乐器
+
+export function addStudentInstrument(data) {
+  return request2({
+    url: api + `/studentInstrument/add`,
+    method: 'post',
+    params:{},
+    data:data,
+    requestType:'form'
+  })
+}
+
+// 获取对应角色的员工
+
+export function findUserByRole(data) {
+  return request2({
+    url: api + `/employee/findUserByRole`,
+    method: 'get',
+    params:data,
+  })
+}
 // 发送缴费提醒
 export function sendWaitRenewMessage(data) {
   return request2({

+ 2 - 0
src/router/index.js

@@ -382,6 +382,8 @@ export const asyncRoutes = {
   WithdrawalApplication:()=>import('@/views/withdrawal-application'),
   // 欠费学员列表
   ArrearageStudents: () => import('@/views/arrearage-students'),
+  // 乐器维护
+  musicalManager:()=>import('@/views/musicalManager'),
   // 服务指标明细
   serverDetail:()=>import('@/views/serverDetail')
 }

+ 1 - 0
src/router/notKeepAliveList.js

@@ -91,6 +91,7 @@ export default [
   '/arrearage-students',
   '/business/strudentPayInfo',
   '/timedTask/timedTask',
+  '/business/musicalManager', // 乐器维护
   '/business/createPayment',
   '/business/teamDraft',
   '/business/teamAudit',

+ 227 - 0
src/views/musicalManager/index.vue

@@ -0,0 +1,227 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      乐器维护
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item>
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="学生姓名、编号、电话"
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            placeholder="请选择乐器分类"
+            v-model="searchForm.goodsCategoryId"
+            clearable
+            filterable
+          >
+           <el-option
+            v-for="(item) in categoryList"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="status">
+        <el-select
+          v-model.trim="searchForm.status"
+          filterable
+          clearable
+          placeholder="是否乐保"
+        >
+          <el-option value="0" label="否"></el-option>
+          <el-option value="1" label="是"></el-option>
+        </el-select>
+      </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="organName"
+            label="分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="学员编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentName"
+            label="学员姓名"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="phone"
+            label="联系电话"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="goodsName"
+            label="乐器名称"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="goodsCategoryName"
+            label="乐器种类"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="goodsId"
+            label="乐器编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="有效期"
+          >
+           <template slot-scope="scope">
+            <div>
+              {{ scope.row.startTime|formatTimer}}~{{scope.row.endTime | formatTimer}}
+            </div>
+          </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text" @click="lookRepair(scope.row)">查看维修单</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import { categoryListTree } from "@/api/businessManager";
+import { getInstrument } from "@/api/buildTeam";
+import load from "@/utils/loading";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId:'',
+        goodsCategoryId:'',
+        status:''
+      },
+
+      soundLists: [],
+      organList: [],
+      tableList:[],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      categoryList:[]
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+    this.getList()
+  },
+  methods: {
+    init() {
+      this.getCategory()
+    },
+   search() {
+      this.rules.page = 1;
+      this.getList()
+    },
+    onReSet() {},
+    async getList() {
+     try{
+       const res = await getInstrument({...this.searchForm,rows:this.rules.limit,page:this.rules.page})
+        this.tableList = res.data.rows
+     }catch(e){
+       console.log(e)
+     }
+
+    },
+    getCategory() {
+      let params = {
+        delFlag: 0,
+        rows: 9999,
+      };
+      categoryListTree(params).then((res) => {
+        let result = res.data;
+        if (res.code == 200) {
+          let tempArray = [];
+          result.rows.forEach((row) => {
+            tempArray.push({
+              label: row.name,
+              value: row.id,
+            });
+          });
+          this.categoryList = tempArray;
+        }
+      });
+    },
+    lookRepair(row){
+      this.$router.push({path:'/business/repairList',query:{exemptionAmount:0,search:row.id}})
+    }
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 79 - 6
src/views/repairManager/repairList.vue

@@ -21,6 +21,14 @@
           ></el-input>
         </el-form-item>
         <el-form-item>
+          <el-input
+            type="number"
+            v-model.trim="searchForm.exemptionAmount"
+            clearable
+            placeholder="特权减免金额大于"
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
           <el-select
             placeholder="维修技师"
             v-model="searchForm.employeeId"
@@ -106,12 +114,8 @@
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
           :data="tableList"
         >
-          <el-table-column
-            align="center"
-            prop="organName"
-            label="分部"
-          >
-                <template slot-scope="scope">
+          <el-table-column align="center" prop="organName" label="分部">
+            <template slot-scope="scope">
               <copy-text>{{ scope.row.organName }}</copy-text>
             </template>
           </el-table-column>
@@ -267,11 +271,60 @@
               </p>
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="是否乐保乐器:">
+              <p v-if="activeRow" class="visibleCell">
+                {{ activeRow.amount | moneyFormat }}元
+              </p>
+            </el-form-item>
+          </el-col>
         </el-row>
+        <el-row>
+          <el-col>
+            <el-form-item label="乐保减免金额">
+              {{ 0.0 }}
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col>
+            <el-form-item label="实际支付服务费">
+              {{ 0.0 }}
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item>
+          <div class="imgWrap">
+            <el-row :gutter="12">
+              <el-col :span="8"  v-for="url in imgList" :key="url">
+                <el-card class="box-card" :body-style="{ padding: '0px',}">
+              <el-image
+                style="width: 100px; height: 100px"
+                :src="url"
+                fit="fill"
+                 :preview-src-list="imgList"
+              ></el-image>
+            </el-card>
+              </el-col>
+
+            </el-row>
+
+          </div>
+        </el-form-item>
         <el-form-item
           label="问题描述及解决方案:"
           style="width: 100%; margin-bottom: 0"
         ></el-form-item>
+        <div>
+          <el-image
+            v-for="(item, index) in srcList"
+            :key="index"
+            style="width: 100px; height: 100px; margin-right: 10px"
+            :src="url"
+            :preview-src-list="srcList"
+          >
+          </el-image>
+        </div>
         <el-input
           type="textarea"
           v-if="activeRow"
@@ -363,6 +416,7 @@ export default {
         repairStatus: null,
         subjectId: null,
         time: [],
+        exemptionAmount: "",
       },
       repairVisible: false,
       employeeList: [],
@@ -379,12 +433,21 @@ export default {
       isInit: false,
       visibleForm: {},
       activeRow: null,
+      srcList: [],
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
+    if (this.$route.query.search) {
+      this.searchForm = {
+        ...this.searchForm,
+        ...this.$route.query,
+      };
+      this.$router.replace('/business/repairList')
+
+    }
     findAllTechnician().then((res) => {
       if (res.code == 200) {
         this.employeeList = res.data;
@@ -486,10 +549,20 @@ export default {
       }
     },
   },
+  computed: {
+    imgList() {
+      return this.activeRow?.repairImg?.split(",") || [];
+    },
+  },
 };
 </script>
 <style lang='scss' scoped>
 .visibleCell {
   // width: 180px;
 }
+
+.box-card {
+  align-items: center;
+  height: 102px;
+}
 </style>

+ 181 - 0
src/views/studentManager/components/studentLebao.vue

@@ -0,0 +1,181 @@
+<template>
+  <div>
+    <save-form
+      :inline="true"
+      class="searchForm"
+      :model="searchForm"
+      @submit="onSearch"
+      @reset="onReSet"
+      save-key="studentDetail-studentLebao"
+    >
+      <el-form-item prop="specification">
+        <el-input
+          placeholder="具体型号"
+          clearable
+          @keyup.enter.native="onSearch"
+          v-model.trim="searchForm.specification"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="goodsCategoryId">
+        <el-select
+          v-model.trim="searchForm.goodsCategoryId"
+          clearable
+          placeholder="乐器分类"
+        >
+          <el-option
+            v-for="(item, index) in categoryList"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="status">
+        <el-select
+          v-model.trim="searchForm.status"
+          filterable
+          clearable
+          placeholder="是否乐保"
+        >
+          <el-option value="0" label="否"></el-option>
+          <el-option value="1" label="是"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" native-type="reset">重置</el-button>
+      </el-form-item>
+    </save-form>
+    <el-button @click="addMusicVisible = true" type="primary" v-permission="'studentInstrument/add'"
+      >新增乐器</el-button
+    >
+    <div class="tableWrap">
+      <el-table
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+      >
+        <el-table-column label="具体型号" align="center" prop="id">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.goodsName }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column label="乐器分类" align="center" prop="name">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.goodsCategoryName }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column label="是否乐保" align="center" prop="teacherName">
+           <template slot-scope="scope">
+            {{ scope.row.status?'是':'否' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="乐保有效期" align="center" prop="studentNum">
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.startTime|formatTimer}}~{{scope.row.endTime | formatTimer}}
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        save-key="studentDetail-studentLebao"
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+    <el-dialog
+      title="新增乐器"
+      width="600px"
+      :visible.sync="addMusicVisible"
+      v-if="addMusicVisible"
+    >
+      <addMusic :categoryList='categoryList' ref='addMusic' @getList='getList'/>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addMusicVisible = false">取 消</el-button>
+        <el-button type="primary" @click="addMusicSubmit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import addMusic from "../modals/addMusic";
+import { getInstrument } from "@/api/buildTeam";
+import { categoryListTree } from "@/api/businessManager";
+export default {
+  components: { pagination, addMusic },
+  data() {
+    return {
+      soundLists: [],
+      tableList: [],
+      searchForm: {
+        specification:'',
+        goodsCategoryId: "",
+        studentId:this.$route.query.userId
+      },
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      addMusicVisible: false,
+      categoryList: [],
+    };
+  },
+  mounted() {
+    this.getCategory();
+    this.getList()
+  },
+  methods: {
+    onSearch() {
+      this.pageInfo.page = 1;
+      this.getList()
+    },
+    onReSet() {},
+   async getList() {
+     try{
+       const res = await getInstrument({...this.searchForm,rows:this.pageInfo.limit,page:this.pageInfo.page})
+        this.tableList = res.data.rows
+     }catch(e){
+       console.log(e)
+     }
+
+    },
+    addMusicSubmit() {
+      this.$refs.addMusic.addMusicSubmit()
+    },
+    getCategory() {
+      let params = {
+        delFlag: 0,
+        rows: 9999,
+      };
+      categoryListTree(params).then((res) => {
+        let result = res.data;
+        if (res.code == 200) {
+          let tempArray = [];
+          result.rows.forEach((row) => {
+            tempArray.push({
+              label: row.name,
+              value: row.id,
+            });
+          });
+          this.categoryList = tempArray;
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.tableWrap {
+  margin-top: 20px;
+}
+</style>

+ 11 - 0
src/views/studentManager/index.vue

@@ -82,6 +82,14 @@
         >
           <studentCashout v-if="activeIndex == 8" />
         </el-tab-pane>
+          <el-tab-pane
+          label="乐器列表"
+          lazy
+          v-if="permissionList.studentLebao"
+          name="10"
+        >
+          <studentLebao v-if="activeIndex == 10" />
+        </el-tab-pane>
       </tab-router>
     </div>
   </div>
@@ -96,6 +104,7 @@ import studentOutList from "./components/studentOutList.vue";
 import studentOrder from "./components/studentOrder.vue";
 import studentCashout from "./components/studentCashout.vue";
 import studentNetwork from "./components/studentNetwork.vue";
+import studentLebao from "./components/studentLebao"
 import { permission } from "@/utils/directivePage";
 export default {
   components: {
@@ -108,6 +117,7 @@ export default {
     studentCashout,
     studentOutList,
     studentNetwork,
+    studentLebao
   },
   name: "studentDetail",
   data() {
@@ -124,6 +134,7 @@ export default {
         studentCashout: permission("/studentDetail/studentCashout"),
         studentOutList: permission("/studentDetail/studentOutList"), //
         studentNetwork: permission("/studentDetail/studentNetwork"),
+        studentLebao:permission("/studentDetail/studentLebao"),
       },
       studentName: "",
     };

+ 145 - 0
src/views/studentManager/modals/addMusic.vue

@@ -0,0 +1,145 @@
+<template>
+  <div>
+    <el-form :model="musicForm" label-width="100px" ref="form">
+      <el-form-item
+        label="乐器分类"
+        prop="goodsCategoryId"
+        :rules="[
+          { required: true, message: '请选择乐器分类', trigger: 'blur' },
+        ]"
+      >
+        <el-form-item>
+          <el-select
+            style="width: 400px !important"
+            v-model.trim="musicForm.goodsCategoryId"
+            filterable
+            clearable
+            @change="changeCategory"
+            placeholder="乐器分类"
+          >
+            <el-option
+              v-for="(item, index) in typeList"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form-item>
+      <el-form-item
+        label="乐器名称"
+        prop="goodsId"
+        :rules="[
+          { required: true, message: '请选择乐器名称', trigger: 'blur' },
+        ]"
+      >
+        <el-select
+          style="width: 400px !important"
+          :disabled="!musicForm.goodsCategoryId"
+          v-model.trim="musicForm.goodsId"
+          filterable
+          clearable
+          placeholder="乐器名称"
+        >
+          <el-option
+            v-for="(item, index) in musicList"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="是否乐保"
+        prop="status"
+        :rules="[
+          { required: true, message: '请选择是否乐保', trigger: 'blur' },
+        ]"
+      >
+        <el-select
+          style="width: 400px !important"
+          v-model.trim="musicForm.status"
+          clearable
+          placeholder="是否乐保"
+        >
+          <el-option value="0" label="否"></el-option>
+          <el-option value="1" label="是"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="乐保有效期"
+        :rules="[
+          { required: true, message: '请选择乐保有效期', trigger: 'blur' },
+        ]"
+        v-if="musicForm.status == 1"
+        prop="date"
+      >
+        <el-date-picker
+          style="width: 400px"
+          v-model="musicForm.date"
+          :clearable="false"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          range-separator="至"
+          :picker-options="{ firstDayOfWeek: 1 }"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+        >
+        </el-date-picker>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import { goodsQuery } from "@/api/businessManager";
+import { addStudentInstrument } from "@/api/buildTeam";
+import { getTimes } from "@/utils";
+export default {
+  props: ["categoryList"],
+  data() {
+    return {
+      musicForm: {
+        studentId: this.$route.query.userId,
+        goodsId: "",
+        goodsCategoryId: "",
+        status: "",
+        date: [],
+      },
+      typeList: this.categoryList,
+      musicList: [],
+    };
+  },
+  methods: {
+    changeCategory(val) {
+      this.musicForm.goodsName = "";
+      if (val) {
+        goodsQuery({ goodsCategoryId: val, rows: 99999 }).then((res) => {
+          if (res.code == 200 && res.data) {
+            this.musicList = res.data.rows;
+          }
+        });
+      }
+    },
+    addMusicSubmit() {
+      this.$refs.form.validate(async (res) => {
+        if (res) {
+          try {
+            const { date, ...rest } = this.musicForm;
+            let obj = {
+              ...rest,
+              ...getTimes(date, ["startTime", "endTime"]),
+            };
+            const res = await addStudentInstrument(obj);
+            this.$message.success('添加成功')
+            this.$emit('getList')
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 83 - 138
src/views/teamBuild/components/teamBaseInfo.vue

@@ -142,10 +142,10 @@
             clearable
           >
             <el-option
-              v-for="(item, index) in orgianList"
-              :key="index"
+              v-for="(item) in bossList"
+              :key="item.userId"
               :label="item.realName"
-              :value="item.id"
+              :value="item.userId"
             ></el-option>
           </el-select>
         </el-form-item>
@@ -161,10 +161,10 @@
             clearable
           >
             <el-option
-              v-for="(item, index) in orgianList"
+              v-for="(item, index) in educationList"
               :key="index"
               :label="item.realName"
-              :value="item.id"
+              :value="item.userId"
             ></el-option>
           </el-select>
         </el-form-item>
@@ -291,11 +291,11 @@
           <el-select
             v-model.trim="topFrom.head"
             filterable
-            :disabled="basdisabled"
+            :disabled="!topFrom.section || basdisabled"
             clearable
           >
             <el-option
-              v-for="(item, index) in orgianList"
+              v-for="(item, index) in teacherList"
               :key="index"
               :label="item.realName"
               :value="item.id"
@@ -344,6 +344,7 @@ import {
   getTeamBaseInfo,
   resetTeamBaseInfo,
   getEmployeeOrgan,
+  findUserByRole
 } from "@/api/buildTeam";
 import { findTechnician } from "@/api/repairManager";
 import dayjs from "dayjs";
@@ -398,11 +399,12 @@ export default {
       typeList: [], // 收费类型列表
       cooperationList: [], // 教学点列表
       teacherList: [], // 获取老师列表
+      educationList:[], // 乐团主管
+      bossList:[],
       addList: [], // 教学地点列表
       activeTeam: [],
       teamid: "",
       teamStatus: "",
-      orgianList: [],
       isInit: false,
       technician: [],
       basdisabled: false,
@@ -450,15 +452,11 @@ export default {
       this.basdisabled = false;
     }
   },
-  deactivated() {
-
-  },
-  beforeDestroy(){
-
-    sessionStorage.setItem(`${this.teamid}base`,JSON.stringify(this.topFrom));
+  deactivated() {},
+  beforeDestroy() {
+    sessionStorage.setItem(`${this.teamid}base`, JSON.stringify(this.topFrom));
   },
 
-
   methods: {
     //|| this.teamStatus === 'teamAudit'
     isNotEditing: function () {
@@ -517,135 +515,64 @@ export default {
       if (this.$route.query.id) {
         // 单团修改
         this.teamid = this.$route.query.id;
-        let sotrage = JSON.parse(sessionStorage.getItem(`${this.$route.query.id}base`));
-        console.log(sotrage)
+        let sotrage = JSON.parse(
+          sessionStorage.getItem(`${this.$route.query.id}base`)
+        );
         if (!sotrage?.section) {
-
           getTeamBaseInfo({ musicGroupId: this.teamid }).then((res) => {
             if (res.code == 200) {
               // if (this.$listeners.getBaseInfo) {
               //   this.$listeners.getBaseInfo(res.data);
               // }
 
-            // 头部
-            this.topFrom.name = res.data.musicGroup.name;
-            this.$emit("getName", this.topFrom.name);
-            this.topFrom.time = res.data.musicGroup.applyExpireDate;
-            this.topFrom.type = res.data.musicGroup.chargeTypeId;
-            this.topFrom.startClass = res.data.musicGroup.enrollClasses.split(
-              ","
-            );
-            this.topFrom.paymentPattern = res.data.musicGroup.paymentPattern;
-            this.topFrom.paymentValidStartDate =
-              res.data.musicGroup.paymentValidStartDate;
-            this.topFrom.paymentValidEndDate =
-              res.data.musicGroup.paymentValidEndDate;
-            this.topFrom.section = res.data.musicGroup.organId;
-            this.topFrom.courseViewType = res.data.musicGroup.courseViewType;
-            this.topFrom.school = res.data.musicGroup.cooperationOrganId;
-            this.topFrom.teacher = res.data.musicGroup.educationalTeacherId;
-            this.topFrom.boss = res.data.musicGroup.teamTeacherId;
-            this.topFrom.address = res.data.musicGroup.schoolId;
-            this.topFrom.salary = res.data.musicGroup.settlementType;
-            this.topFrom.head = res.data.musicGroup.directorUserId
-              ? res.data.musicGroup.directorUserId
-              : null;
-            this.topFrom.isClass = res.data.musicGroup.isClassroomLessons;
-            this.topFrom.startTime = res.data.musicGroup.expectStartGroupDate;
-            this.topFrom.ownershipType = res.data.musicGroup.ownershipType;
-            this.topFrom.repairUserId = res.data.musicGroup.repairUserId
-              ? res.data.musicGroup.repairUserId
-              : null;
-            this.topFrom.feeType = res.data.musicGroup.feeType
-              ? res.data.musicGroup.feeType
-              : null;
-            // // 循环缴费月
-            // this.payList.chioseMonth = res.data.months;
-            if (res.data.musicGroup.organId) {
-              // 获取员工
-              queryEmployByOrganId({
-                organId: res.data.musicGroup.organId,
-                rows: 1000,
-              }).then((res) => {
-                if (res.code == 200) {
-                  this.orgianList = res.data.rows;
-                }
-              });
-              // 获取合作单位
-              queryByOrganId({ organId: res.data.musicGroup.organId }).then(
-                (res) => {
-                  if (res.code == 200) {
-                    this.orgianList = res.data.rows;
-                  }
-                });
-                // 获取合作单位
-                queryByOrganId({ organId: res.data.musicGroup.organId }).then(
-                  (res) => {
-                    if (res.code == 200) {
-                      this.cooperationList = res.data;
-                    }
-                  }
-                );
-                // 获取教学点
-                getSchool({ organId: res.data.musicGroup.organId }).then(
-                  (res) => {
-                    if (res.code == 200) {
-                      this.addList = res.data;
-                      this.isInit = false;
-                    }
-                  }
-                );
-
-                // 获取维修技师
-                findTechnician().then((res) => {
-                  if (res.code == 200) {
-                    this.technician = res.data;
-                  }
-                });
+              // 头部
+              this.topFrom.name = res.data.musicGroup.name;
+              this.$emit("getName", this.topFrom.name);
+              this.topFrom.time = res.data.musicGroup.applyExpireDate;
+              this.topFrom.type = res.data.musicGroup.chargeTypeId;
+              this.topFrom.startClass = res.data.musicGroup.enrollClasses.split(
+                ","
+              );
+              this.topFrom.paymentPattern = res.data.musicGroup.paymentPattern;
+              this.topFrom.paymentValidStartDate =
+                res.data.musicGroup.paymentValidStartDate;
+              this.topFrom.paymentValidEndDate =
+                res.data.musicGroup.paymentValidEndDate;
+              this.topFrom.section = res.data.musicGroup.organId;
+              this.topFrom.courseViewType = res.data.musicGroup.courseViewType;
+              this.topFrom.school = res.data.musicGroup.cooperationOrganId;
+              this.topFrom.teacher = res.data.musicGroup.educationalTeacherId;
+              this.topFrom.boss = res.data.musicGroup.teamTeacherId;
+              this.topFrom.address = res.data.musicGroup.schoolId;
+              this.topFrom.salary = res.data.musicGroup.settlementType;
+              this.topFrom.head = res.data.musicGroup.directorUserId
+                ? res.data.musicGroup.directorUserId
+                : null;
+              this.topFrom.isClass = res.data.musicGroup.isClassroomLessons;
+              this.topFrom.startTime = res.data.musicGroup.expectStartGroupDate;
+              this.topFrom.ownershipType = res.data.musicGroup.ownershipType;
+              this.topFrom.repairUserId = res.data.musicGroup.repairUserId
+                ? res.data.musicGroup.repairUserId
+                : null;
+              this.topFrom.feeType = res.data.musicGroup.feeType
+                ? res.data.musicGroup.feeType
+                : null;
+              // // 循环缴费月
+              // this.payList.chioseMonth = res.data.months;
+              if (res.data.musicGroup.organId) {
+                // 获取员工
+                 this.getBaseList(res.data.musicGroup.organId)
               }
               this.$emit("getBaseInfo", res.data);
-
             }
           });
-        }else{
-          this.topFrom = sotrage
-             if ( this.topFrom.section) {
-                // 获取员工
-                queryEmployByOrganId({
-                  organId: this.topFrom.section,
-                  rows: 1000,
-                }).then((res) => {
-                  if (res.code == 200) {
-                    this.orgianList = res.data.rows;
-                  }
-                });
-                // 获取合作单位
-                queryByOrganId({ organId: this.topFrom.section }).then(
-                  (res) => {
-                    if (res.code == 200) {
-                      this.cooperationList = res.data;
-                    }
-                  }
-                );
-                // 获取教学点
-                getSchool({ organId: this.topFrom.section }).then(
-                  (res) => {
-                    if (res.code == 200) {
-                      this.addList = res.data;
-                      this.isInit = false;
-                    }
-                  }
-                );
-
-                // 获取维修技师
-                findTechnician().then((res) => {
-                  if (res.code == 200) {
-                    this.technician = res.data;
-                  }
-                });
-             }
-
-             }
+        } else {
+          this.topFrom = sotrage;
+          if (this.topFrom.section) {
+            // 获取员工
+             this.getBaseList(this.topFrom.section)
+          }
+        }
       }
       this.$emit("getName", this.topFrom.name);
       getEmployeeOrgan().then((res) => {
@@ -669,11 +596,9 @@ export default {
       this.topFrom.school = "";
       this.topFrom.address = "";
       // 发请求 根据分部id 查询所有员工
-      queryEmployByOrganId({ organId: val, rows: 1000 }).then((res) => {
-        if (res.code == 200) {
-          this.orgianList = res.data.rows;
-        }
-      });
+      this.getBaseList(val)
+    },
+    async getBaseList(val){
       // 合作单位
       queryByOrganId({ organId: val }).then((res) => {
         if (res.code == 200) {
@@ -692,6 +617,26 @@ export default {
           this.technician = res.data;
         }
       });
+      // 获取乐团主管
+      try {
+        const ruselt = await findUserByRole({organId: val,employeeRole:'EDUCATION' })
+        this.educationList = ruselt.data
+      }catch(e){
+        console.log(e)
+      }
+      // 获取运营主管
+          try {
+        const ruselt = await findUserByRole({organId: val,employeeRole:'EAM_TEACHER' })
+        this.bossList = ruselt.data
+      }catch(e){
+        console.log(e)
+      }
+      // 获取指导老师
+      getTeacher({organId: val}).then(res=>{
+        if(res.code == 200){
+          this.teacherList = res.data
+        }
+      })
     },
     chioseSchool(val) {},
     gotoNext(num) {

+ 4 - 4
vue.config.js

@@ -17,12 +17,11 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // http://47.99.212.176:8000
 // //  https://online.dayaedu.com
 // let target = 'https://online.dayaedu.com' //线上
-// let target = 'http://47.114.176.40:8000' //test环境
 // let target = 'http://192.168.3.139:8000' // 箭河
 // let target = 'http://192.168.3.38:8000' //邹璇
 // let target = 'http://192.168.3.57:8000' //勇哥
-let target = 'http://dev.dayaedu.com' // 测试服
-// let target = 'http://47.114.176.40:8000' //开发环境
+// let target = 'http://dev.dayaedu.com' // 测试服
+let target = 'http://47.114.176.40:8000' //开发环境
 // let target = 'http://192.168.3.134' // 乔
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {
@@ -64,8 +63,9 @@ module.exports = {
       // http://192.168.3.28:8000
       // http://192.168.3.134
       // http://47.114.176.40:8000
+      // http://dev.dayaedu.com
       '/api-auth': {
-        target: 'http://dev.dayaedu.com',
+        target: 'http://47.114.176.40:8000',
         changeOrigin: true,
         pathRewrite: {
           '^api-auth': ''

部分文件因文件數量過多而無法顯示