Browse Source

添加转码功能

wolyshaw 3 years ago
parent
commit
0b5bab7955
2 changed files with 58 additions and 3 deletions
  1. 12 0
      src/views/accompaniment/api.js
  2. 46 3
      src/views/accompaniment/index.vue

+ 12 - 0
src/views/accompaniment/api.js

@@ -10,6 +10,18 @@ export const QueryPage = params => {
   })
 }
 
+export const Transcod = params => {
+  return request({
+    url: '/api-web/sysMusicScore/transcod',
+    data: {},
+    params: {
+      sysMusicScoreId: params.id,
+    },
+    requestType: 'json',
+    method: 'post'
+  })
+}
+
 export const Add = data => {
   return request({
     url: '/api-web/sysMusicScore/add',

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

@@ -281,6 +281,13 @@
             }}</el-button>
             <el-button
               type="text"
+              @click="transcod(scope.row)"
+              :disabled="!!scope.row.showFlag"
+              v-permission="'sysMusicScore/transcod'"
+              >转码</el-button
+            >
+            <el-button
+              type="text"
               @click="edit(scope.row)"
               :disabled="!!scope.row.showFlag"
               v-permission="'sysMusicScore/update'"
@@ -332,12 +339,23 @@
       :visible.sync="lookVisible"
       title="预览"
     >
+      <template slot="title">
+        <span style="color: #fff;">预览</span>
+        <el-select v-model="selectPart" placeholder="请选择分谱">
+          <el-option
+            v-for="(item, index) in parts"
+            :key="item"
+            :label="item"
+            :value="index">
+          </el-option>
+        </el-select>
+      </template>
       <iframe
         id="iframe"
         v-if="lookVisible"
         style="width: 667px; height: 386px"
         ref="iframe"
-        :src="accompanyUrl"
+        :src="accompanyUrl + '?part-index=' + selectPart"
       />
       <div class="iframe_back"></div>
       <div class="iframe_help"></div>
@@ -349,7 +367,7 @@
 import saveform from "@/components/save-form";
 import pagination from "@/components/Pagination/index";
 import { songUseType } from "@/constant";
-import { QueryPage, Del, Show, queryTree } from "./api";
+import { QueryPage, Del, Show, queryTree, Transcod } from "./api";
 import form from "./modals/form";
 import { vaildTeachingUrl } from "@/utils/validate";
 import { getToken } from "@/utils/auth";
@@ -365,6 +383,8 @@ export default {
   },
   data() {
     return {
+      parts: [],
+      selectPart: 0,
       tabName: 'first',
       type: "",
       activeUrl: "",
@@ -487,7 +507,24 @@ export default {
       this.$refs.searchForm.resetFields();
       this.FetchList();
     },
-    looker(row, num) {
+    getPartListNames(xml) {
+      if (!xml) return []
+      const xmlParse = new DOMParser().parseFromString(xml, 'text/xml')
+      const partList = xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
+      const partListNames = Array.from(partList).map(item => item.getElementsByTagName('part-name')?.[0].textContent || '')
+      this.xmlFirstSpeed = xmlParse.getElementsByTagName('per-minute')?.[0]?.textContent || ''
+      return partListNames
+    },
+    async looker(row, num) {
+      try {
+        this.selectPart = 0
+        const res = await fetch(row.xmlUrl)
+        const text = await res.text()
+        this.parts = this.getPartListNames(text)
+      } catch (error) {
+        this.parts = []
+        this.selectPart = 0
+      }
       this.accompanyUrl =
         vaildTeachingUrl() +
         "/accompany?Authorization=" +
@@ -528,6 +565,12 @@ export default {
       this.detail = row;
       this.visible = true;
     },
+    async transcod(row) {
+      try {
+       const res = await Transcod(row)
+       console.log(res)
+      } catch (error) {}
+    },
     open(type) {
       this.type = type;
       this.detail = null;