浏览代码

提交一下

1
mo 3 年之前
父节点
当前提交
4ea705047a
共有 4 个文件被更改,包括 286 次插入190 次删除
  1. 9 3
      src/views/accompaniment/index.vue
  2. 224 157
      src/views/accompaniment/modals/form.vue
  3. 1 1
      src/views/teachManager/api.js
  4. 52 29
      src/views/teachManager/index.vue

+ 9 - 3
src/views/accompaniment/index.vue

@@ -39,17 +39,18 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <!-- <el-form-item prop="clientType">
+        <el-form-item prop="clientType">
           <el-select v-model="searchForm.clientType" clearable filterable placeholder="请选择客户端类型">
             <el-option value="NETWORK_ROOM" label="网络教室" ></el-option>
             <el-option value="SMART_PRACTICE" label="智能陪练" ></el-option>
           </el-select>
-        </el-form-item> -->
+        </el-form-item>
         <el-form-item prop="categoriesId">
           <el-cascader v-model="searchForm.categoriesId"
                     style="width:100%"
                     :options="tree"
                     placeholder="请选择分类"
+
                     clearable
                     :show-all-levels="true"
                     :props="treeProps"></el-cascader>
@@ -286,7 +287,7 @@ export default {
         type: "",
         subjectId: "",
         categoriesId: null,
-        clientType:'NETWORK_ROOM',
+        clientType:'',
         rankType: null,
         showFlag: null
       },
@@ -304,6 +305,7 @@ export default {
         value: 'id',
         label: 'name',
         children: 'sysMusicScoreCategoriesList',
+        checkStrictly: true
       }
     };
   },
@@ -318,6 +320,10 @@ export default {
     },
   },
   async mounted() {
+      const { query,params } = this.$route;
+      if(params.categoriesId){
+       this.searchForm.categoriesId = params.categoriesId;
+    }
     this.$store.dispatch("setSubjects");
     await this.FetchTree()
     await this.FetchList();

+ 224 - 157
src/views/accompaniment/modals/form.vue

@@ -1,23 +1,25 @@
 <template>
   <div>
-    <el-form ref="form" :model="form" label-width="100px">
+    <el-form ref="form" :model="form" label-width="130px">
       <el-form-item
         prop="sysMusicScore.name"
         label="曲名"
-        :rules="[{required: true, message: '请输入曲名'}]"
+        :rules="[{ required: true, message: '请输入曲名' }]"
       >
-        <el-input placeholder="请输入曲名" v-model="form.sysMusicScore.name"/>
+        <el-input placeholder="请输入曲名" v-model="form.sysMusicScore.name" />
       </el-form-item>
       <el-form-item
         prop="sysMusicScore.musicScoreCategoriesId"
         label="分类"
-        :rules="[{required: true, message: '请选择分类'}]"
+        :rules="[{ required: true, message: '请选择分类' }]"
       >
-      <el-cascader v-model="form.sysMusicScore.musicScoreCategoriesId"
-                    style="width:100%"
-                    :options="tree"
-                     placeholder="请选择分类"
-                    :props="treeProps"></el-cascader>
+        <el-cascader
+          v-model="form.sysMusicScore.musicScoreCategoriesId"
+          style="width: 100%"
+          :options="tree"
+          placeholder="请选择分类"
+          :props="treeProps"
+        ></el-cascader>
         <!-- <el-select style="width: 100%!important;" v-model="form.sysMusicScore.musicScoreCategoriesId" placeholder="请选择声部">
           <el-option
             v-for="item in selects.subjects"
@@ -31,73 +33,75 @@
       <el-form-item
         prop="rankIdType"
         label="是否收费"
-        :rules="[{required: true, message: '请选择是否收费'}]"
+        :rules="[{ required: true, message: '请选择是否收费' }]"
       >
-        <el-select style="width: 100%!important;" v-model="form.rankIdType" placeholder="请选择是否收费" @change="rankChange">
+        <el-select
+          style="width: 100% !important"
+          v-model="form.rankIdType"
+          placeholder="请选择是否收费"
+          @change="rankChange"
+        >
           <!-- <el-option
             :value="item.id"
             :label="item.name"
             v-for="item in memberRankList"
             :key="item.id"
           ></el-option> -->
-          <el-option
-            :value="0"
-            label="免费"
-          ></el-option>
-          <el-option
-            :value="1"
-            label="收费"
-          ></el-option>
+          <el-option :value="0" label="免费"></el-option>
+          <el-option :value="1" label="收费"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item
         prop="isOpenMetronome"
         label="节拍器"
-        :rules="[{required: true, message: '请选择节拍器'}]"
+        :rules="[{ required: true, message: '请选择节拍器' }]"
       >
-        <el-select style="width: 100%!important;" v-model="form.isOpenMetronome" placeholder="请选择节拍器" @change="rankChange">
+        <el-select
+          style="width: 100% !important"
+          v-model="form.isOpenMetronome"
+          placeholder="请选择节拍器"
+          @change="rankChange"
+        >
           <!-- <el-option
             :value="item.id"
             :label="item.name"
             v-for="item in memberRankList"
             :key="item.id"
           ></el-option> -->
-          <el-option
-            :value="0"
-            label="不播放"
-          ></el-option>
-          <el-option
-            :value="1"
-            label="播放"
-          ></el-option>
+          <el-option :value="0" label="不播放"></el-option>
+          <el-option :value="1" label="播放"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item
         prop="sysMusicScore.clientType"
         label="客户端类型"
-        :rules="[{required: true, message: '请选择客户端类型'}]"
+        :rules="[{ required: true, message: '请选择客户端类型' }]"
       >
-        <el-select style="width: 100%!important;" v-model="form.sysMusicScore.clientType" placeholder="请选择客户端类型">
-          <el-option
-            value="NETWORK_ROOM"
-            label="网络教室"
-          ></el-option>
-          <el-option
-            value="SMART_PRACTICE"
-            label="智能陪练"
-          ></el-option>
+        <el-select
+          style="width: 100% !important"
+          v-model="form.sysMusicScore.clientType"
+          placeholder="请选择客户端类型"
+        >
+          <el-option value="NETWORK_ROOM" label="网络教室"></el-option>
+          <el-option value="SMART_PRACTICE" label="智能陪练"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item
         prop="sysMusicScore.order"
         label="排序"
-        :rules="[{required: true, message: '请输入排序'}]"
+        :rules="[{ required: true, message: '请输入排序' }]"
       >
-        <el-input placeholder="请输入排序" v-model="form.sysMusicScore.order"/>
+        <el-input placeholder="请输入排序" v-model="form.sysMusicScore.order" />
       </el-form-item>
       <el-form-item
         label="原音"
         prop="sysMusicScore.url"
+        :rules="[
+          {
+            required: form.isOpenMetronome ? false : true,
+            message: '请上传原音',
+          },
+        ]"
       >
         <singe-file-upload
           tips="仅支持上传 mp3/aac 格式音频文件"
@@ -105,15 +109,40 @@
           v-model="form.sysMusicScore.url"
         />
       </el-form-item>
-      <div class="files" v-for="(song, index) in form.sysMusicScoreAccompaniments" :key="index">
+      <el-form-item
+        label="原音(节拍器)"
+        prop="sysMusicScore.metronomeUrl"
+        :rules="[
+          {
+            required: form.isOpenMetronome ? true : false,
+            message: '原音(带节拍器)',
+          },
+        ]"
+      >
+        <singe-file-upload
+          tips="仅支持上传 mp3/aac 格式音频文件"
+          accept=".mp3, .aac"
+          v-model="form.sysMusicScore.metronomeUrl"
+        />
+      </el-form-item>
+      <div
+        class="files"
+        v-for="(song, index) in form.sysMusicScoreAccompaniments"
+        :key="index"
+      >
         <el-row>
           <el-col :span="12">
             <el-form-item
               :prop="`sysMusicScoreAccompaniments.${index}.subjectId`"
               label="声部"
             >
-            <!-- :rules="[{required: true, message: '请选择声部'}]" -->
-              <el-select style="width: 100%!important;" v-model="song.subjectId" clearable placeholder="请选择声部">
+              <!-- :rules="[{required: true, message: '请选择声部'}]" -->
+              <el-select
+                style="width: 100% !important"
+                v-model="song.subjectId"
+                clearable
+                placeholder="请选择声部"
+              >
                 <el-option
                   v-for="item in selects.subjects"
                   :value="item.id"
@@ -128,26 +157,28 @@
             <el-form-item
               :prop="`sysMusicScoreAccompaniments.${index}.speed`"
               label="速度"
-              :rules="[{required: true, message: '请输入速度'}]"
+              :rules="[{ required: true, message: '请输入速度' }]"
             >
-              <el-input type="number" placeholder="请输入速度" v-model="song.speed"/>
+              <el-input
+                type="number"
+                placeholder="请输入速度"
+                v-model="song.speed"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item
               :prop="`sysMusicScoreAccompaniments.${index}.isShowFingering`"
               label="指法展示"
-              :rules="[{required: true, message: '请选择是否展示指法'}]"
+              :rules="[{ required: true, message: '请选择是否展示指法' }]"
             >
-              <el-select style="width: 100%!important;" v-model="song.isShowFingering" placeholder="请选择是否展示指法">
-                <el-option
-                  :value="true"
-                  label="是"
-                ></el-option>
-                <el-option
-                  :value="false"
-                  label="否"
-                ></el-option>
+              <el-select
+                style="width: 100% !important"
+                v-model="song.isShowFingering"
+                placeholder="请选择是否展示指法"
+              >
+                <el-option :value="true" label="是"></el-option>
+                <el-option :value="false" label="否"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -156,7 +187,7 @@
               :prop="`sysMusicScoreAccompaniments.${index}.memo`"
               label="描述"
             >
-              <el-input placeholder="请输入描述" v-model="song.memo"/>
+              <el-input placeholder="请输入描述" v-model="song.memo" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -173,9 +204,23 @@
           </el-col>
           <el-col :span="12">
             <el-form-item
+              label="mp3文件(节拍器)"
+              :prop="`sysMusicScoreAccompaniments.${index}.metronomeUrl`"
+            >
+              <singe-file-upload
+                tips="仅支持上传 mp3/aac 格式音频文件"
+                accept=".mp3, .aac"
+                v-model="song.metronomeUrl"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item
               label="MusicXML"
               :prop="`sysMusicScoreAccompaniments.${index}.xmlUrl`"
-              :rules="[{required: true, message: '请选择MusicXML文件'}]"
+              :rules="[{ required: true, message: '请选择MusicXML文件' }]"
             >
               <singe-file-upload
                 tips="仅支持上传 xml 格式文件"
@@ -185,9 +230,21 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-button class="file-remove" type="text" @click="removeSys(index)" :disabled="form.sysMusicScoreAccompaniments.length == 1">删除</el-button>
+        <el-button
+          class="file-remove"
+          type="text"
+          @click="removeSys(index)"
+          :disabled="form.sysMusicScoreAccompaniments.length == 1"
+          >删除</el-button
+        >
       </div>
-      <el-button @click="createSys" type="info" style="width: 100%;margin-bottom: 20px;" plain>添加伴奏</el-button>
+      <el-button
+        @click="createSys"
+        type="info"
+        style="width: 100%; margin-bottom: 20px"
+        plain
+        >添加伴奏</el-button
+      >
       <div class="btns">
         <el-button type="primary" @click="submit">提交</el-button>
         <el-button @click="$listeners.close">取消</el-button>
@@ -196,10 +253,10 @@
   </div>
 </template>
 <script>
-import { Add, Update, queryPageSysExam, queryTree } from '../api'
+import { Add, Update, queryPageSysExam, queryTree } from "../api";
 import { getAllmemberRank } from "@/views/resetTeaming/api";
 export default {
-  props: ['detail', 'type'],
+  props: ["detail", "type"],
   data() {
     return {
       tree: [],
@@ -208,65 +265,67 @@ export default {
         rankIdType: 0, // 收费会员类型 默认免费
         isOpenMetronome: 0, // 是否开启节拍器 默认关闭
         sysMusicScore: {
-          name: '',
-          rankIds: '', // 收费会员编号
-          url: '',
-          order: '',
+          name: "",
+          rankIds: "", // 收费会员编号
+          url: "",
+          order: "",
           musicScoreCategoriesId: [],
-          clientType: '',
+          clientType: "",
         },
         sysMusicScoreAccompaniments: [
           {
-            subjectId: '',
-            speed: '',
-            mp3Url: '',
-            xmlUrl: '',
+            subjectId: "",
+            speed: "",
+            mp3Url: "",
+            xmlUrl: "",
             isShowFingering: null,
-            mome: '',
+            mome: "",
           },
         ],
-        delExamSongAccompanimentIds: []
+        delExamSongAccompanimentIds: [],
       },
       treeProps: {
-        value: 'id',
-        label: 'name',
-        children: 'sysMusicScoreCategoriesList',
-      }
-    }
+        value: "id",
+        label: "name",
+        children: "sysMusicScoreCategoriesList",
+      },
+    };
   },
   async mounted() {
-    this.$store.dispatch('setSubjects')
-    await this.FetchTree()
-    await this.memberRank()
+    this.$store.dispatch("setSubjects");
+    await this.FetchTree();
+    await this.memberRank();
     if (this.detail) {
       // console.log(this.detail)
-      this.$set(this.form, 'sysMusicScore', {
+      this.$set(this.form, "sysMusicScore", {
         name: this.detail.name,
         url: this.detail.url,
         rankIds: this.detail.rankIds,
         order: this.detail.order,
         clientType: this.detail.clientType,
-        musicScoreCategoriesId: this.detail.categoriesId ? this.formatParentId(this.detail.categoriesId, this.tree) : [],
-      })
-      if(this.detail.rankIds) {
-        this.form.rankIdType = 1
+        musicScoreCategoriesId: this.detail.categoriesId
+          ? this.formatParentId(this.detail.categoriesId, this.tree)
+          : [],
+      });
+      if (this.detail.rankIds) {
+        this.form.rankIdType = 1;
       } else {
-        this.form.rankIdType = 0
+        this.form.rankIdType = 0;
       }
-      this.FeatchDetailList()
+      this.FeatchDetailList();
     }
   },
   methods: {
     rankChange(value) {
-      if(value) {
-        let tempIds = []
-        this.memberRankList.forEach(item => {
-          tempIds.push(item.id)
-        })
-        this.form.sysMusicScore.rankIds = tempIds.join(',')
+      if (value) {
+        let tempIds = [];
+        this.memberRankList.forEach((item) => {
+          tempIds.push(item.id);
+        });
+        this.form.sysMusicScore.rankIds = tempIds.join(",");
       } else {
         // 会员购买重置
-        this.form.sysMusicScore.rankIds = ''
+        this.form.sysMusicScore.rankIds = "";
       }
     },
     async memberRank() {
@@ -280,65 +339,69 @@ export default {
     formatParentId(id, list, ids = []) {
       for (const item of list) {
         if (item.sysMusicScoreCategoriesList) {
-          const cIds = this.formatParentId(id, item.sysMusicScoreCategoriesList, [...ids, item.id])
-          if(cIds.includes(id)) {
-            return cIds
+          const cIds = this.formatParentId(
+            id,
+            item.sysMusicScoreCategoriesList,
+            [...ids, item.id]
+          );
+          if (cIds.includes(id)) {
+            return cIds;
           }
         }
         if (item.id === id) {
-          return [...ids, id]
+          return [...ids, id];
         }
       }
-      return ids
+      return ids;
     },
     async FetchTree() {
       try {
-        const res = await queryTree()
-        this.tree = res.data
-      } catch (error) {
-
-      }
+        const res = await queryTree();
+        this.tree = res.data;
+      } catch (error) {}
     },
     async FeatchDetailList() {
       try {
         const res = await queryPageSysExam({
-          sysMusicScoreId: this.detail.id
-        })
-        const result = res.data || []
-        result.forEach(item => {
-          if(!item.subjectId) {
-            item.subjectId = null
+          sysMusicScoreId: this.detail.id,
+        });
+        const result = res.data || [];
+        result.forEach((item) => {
+          if (!item.subjectId) {
+            item.subjectId = null;
           }
-        })
-        this.$set(this.form, 'sysMusicScoreAccompaniments', result)
+        });
+        this.$set(this.form, "sysMusicScoreAccompaniments", result);
       } catch (error) {}
     },
     createSys() {
       this.form.sysMusicScoreAccompaniments.push({
-        subjectId: '',
-        speed: '',
-        mp3Url: '',
-        xmlUrl: ''
-      })
+        subjectId: "",
+        speed: "",
+        mp3Url: "",
+        xmlUrl: "",
+      });
     },
     async removeSys(index) {
       try {
-        await this.$confirm('是否确认删除此伴奏?', '提示', {
-          type: 'warning'
-        })
+        await this.$confirm("是否确认删除此伴奏?", "提示", {
+          type: "warning",
+        });
         if (this.form.sysMusicScoreAccompaniments[index]) {
-          this.form.delExamSongAccompanimentIds.push(this.form.sysMusicScoreAccompaniments[index].id)
+          this.form.delExamSongAccompanimentIds.push(
+            this.form.sysMusicScoreAccompaniments[index].id
+          );
         }
 
-        this.form.sysMusicScoreAccompaniments.splice(index, 1)
+        this.form.sysMusicScoreAccompaniments.splice(index, 1);
       } catch (error) {}
     },
     hasSubjectId(id) {
-      const ids = []
+      const ids = [];
       for (const item of this.form.sysMusicScoreAccompaniments) {
-        ids.push(item.subjectId)
+        ids.push(item.subjectId);
       }
-      return ids.includes(id)
+      return ids.includes(id);
     },
     async submit() {
       this.$refs.form.validate(async (valid) => {
@@ -348,48 +411,52 @@ export default {
               ...this.form,
               sysMusicScore: {
                 ...this.form.sysMusicScore,
-                type: 'COMMON',
+                type: "COMMON",
                 showFlag: 0,
-                musicScoreCategoriesId: (this.form.sysMusicScore.musicScoreCategoriesId || []).pop(),
-              }
-            })
-            this.$message.success('提交成功')
+                musicScoreCategoriesId: (
+                  this.form.sysMusicScore.musicScoreCategoriesId || []
+                ).pop(),
+              },
+            });
+            this.$message.success("提交成功");
           } else {
             await Update({
               ...this.form,
               sysMusicScore: {
                 ...this.form.sysMusicScore,
-                type: 'COMMON',
+                type: "COMMON",
                 id: this.detail.id,
                 showFlag: this.detail.showFlag,
-                musicScoreCategoriesId: (this.form.sysMusicScore.musicScoreCategoriesId || []).pop(),
-              }
-            })
-            this.$message.success('修改成功')
+                musicScoreCategoriesId: (
+                  this.form.sysMusicScore.musicScoreCategoriesId || []
+                ).pop(),
+              },
+            });
+            this.$message.success("修改成功");
           }
-          this.$listeners.close()
-          this.$listeners.submited()
+          this.$listeners.close();
+          this.$listeners.submited();
         }
-      })
-    }
-  }
-}
+      });
+    },
+  },
+};
 </script>
 <style lang="less" scoped>
-  .btns{
-    text-align: right;
-  }
-  .files{
-    background-color: #f8f8f8;
-    padding: 20px 0;
-    padding-right: 20px;
-    margin-bottom: 20px;
-    border-radius: 5px;
-    position: relative;
-    .file-remove{
-      position: absolute;
-      right: 20px;
-      bottom: 10px;
-    }
+.btns {
+  text-align: right;
+}
+.files {
+  background-color: #f8f8f8;
+  padding: 20px 0;
+  padding-right: 20px;
+  margin-bottom: 20px;
+  border-radius: 5px;
+  position: relative;
+  .file-remove {
+    position: absolute;
+    right: 20px;
+    bottom: 10px;
   }
+}
 </style>

+ 1 - 1
src/views/teachManager/api.js

@@ -41,5 +41,5 @@ export const removeSysMusicScore = data => request2({
   url: '/api-web/sysMusicScoreCategories/delete',
   data: data,
   method: 'post',
-  requestType:'json'
+  requestType:'form'
 })

+ 52 - 29
src/views/teachManager/index.vue

@@ -12,7 +12,7 @@
         @submit="search"
         @reset="onReSet"
       >
-        <el-form-item>
+        <el-form-item prop="search">
           <el-input
             v-model.trim="searchForm.search"
             clearable
@@ -20,9 +20,9 @@
             placeholder="教材编号、名称"
           ></el-input>
         </el-form-item>
-        <el-form-item prop="visitFlag">
+        <el-form-item prop="enable">
           <el-select
-            v-model.trim="searchForm.visitFlag"
+            v-model.trim="searchForm.enable"
             placeholder="教材状态"
             clearable
           >
@@ -36,7 +36,9 @@
         </el-form-item>
       </save-form>
       <div class="btnList">
-        <el-button type="primary" @click="addTeach">新增教材</el-button>
+        <auth auths="sysMusicScoreCategories/save">
+          <el-button type="primary" @click="addTeach">新增教材</el-button>
+        </auth>
       </div>
       <div class="tableWrap">
         <el-table
@@ -79,31 +81,42 @@
           <el-table-column align="center" prop="studentId" label="操作">
             <template slot-scope="scope">
               <div>
-                <el-button type="text">查看</el-button>
-                <el-button
-                  type="text"
-                  @click="resetTeach(scope.row)"
-                  v-if="!scope.row.enable"
-                  >修改</el-button
-                >
-                <el-button
-                  type="text"
-                  v-if="scope.row.enable"
-                  @click="stopTeach(scope.row)"
-                  >停用</el-button
-                >
-                <el-button
-                  type="text"
-                  v-if="!scope.row.enable"
-                  @click="stopTeach(scope.row)"
-                  >启用</el-button
-                >
-                <el-button
-                  type="text"
-                  v-if="!scope.row.enable"
-                  @click="removeTeach(scope.row)"
-                  >删除</el-button
+                <auth
+                  auths="/accompaniment"
                 >
+                  <el-button type="text" @click="lookMusic(scope.row)">查看</el-button>
+                </auth>
+
+                <auth auths="sysMusicScoreCategories/update">
+                  <el-button
+                    type="text"
+                    @click="resetTeach(scope.row)"
+                    v-if="!scope.row.enable"
+                    >修改</el-button
+                  >
+                </auth>
+                <auth auths="sysMusicScoreCategories/enable">
+                  <el-button
+                    type="text"
+                    v-if="scope.row.enable"
+                    @click="stopTeach(scope.row)"
+                    >停用</el-button
+                  >
+                  <el-button
+                    type="text"
+                    v-if="!scope.row.enable"
+                    @click="stopTeach(scope.row)"
+                    >启用</el-button
+                  >
+                </auth>
+                <auth auths="sysMusicScoreCategories/delete">
+                  <el-button
+                    type="text"
+                    v-if="!scope.row.enable"
+                    @click="removeTeach(scope.row)"
+                    >删除</el-button
+                  >
+                </auth>
               </div>
             </template>
           </el-table-column>
@@ -156,6 +169,7 @@ export default {
     return {
       searchForm: {
         search: null,
+        enable: null,
       },
 
       tableList: [],
@@ -198,7 +212,10 @@ export default {
       this.rules.page = 1;
       this.getList();
     },
-    onReSet() {},
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
     addTeach() {
       this.activeRow = null;
       this.teachVisible = true;
@@ -259,6 +276,12 @@ export default {
           console.log(e);
         });
     },
+    lookMusic(row){
+          this.$router.push({
+        name: "accompaniment",
+        params: { categoriesId: row.id },
+      });
+    }
   },
 };
 </script>