Bläddra i källkod

词汇表接口

natasha 1 år sedan
förälder
incheckning
e6ebd99077
1 ändrade filer med 159 tillägg och 59 borttagningar
  1. 159 59
      src/views/Textanalysis/WordTable.vue

+ 159 - 59
src/views/Textanalysis/WordTable.vue

@@ -22,12 +22,32 @@
           </el-radio-group> -->
         </div>
         <div class="right">
-          <el-cascader
+          <!-- <el-cascader
             v-model="level"
             :options="levelList"
+            :props="props"
             style="width: 140px; margin-right: 24px"
             @change="page1getdata"
-          />
+          >
+            <template slot-scope="{ data }">
+                <span>{{ data.name }}</span>
+            </template>
+          </el-cascader> -->
+          <el-select
+            v-model="level"
+            multiple
+            collapse-tags
+            style="width: 180px; margin-right: 24px"
+            placeholder="请选择"
+            @change="page1getdata">
+            <el-checkbox class="checkAllCheckbox" :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全部</el-checkbox>
+            <el-option
+                v-for="item in levelList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+            </el-option>
+          </el-select>
           <div class="seek">
             <img src="../../assets/teacherdev/search-icon.png" alt="" />
             <input v-model="keyword" type="text" />
@@ -79,7 +99,7 @@
               </th>
             </template>
           </tr>
-          <tr v-for="(item, index) in dataList.list" :key="index + 'td'">
+          <tr v-for="(item, index) in dataList.word_list" :key="index + 'td'">
             <td class="sort-td">{{ item.number }}</td>
             <td :class="['sort-td', typeIndex === 0 ? 'pinyin' : 'hanzi']">
               <span
@@ -87,22 +107,22 @@
                   fontFamily: typeIndex !== 0 ? '楷体' : '',
                   fontWeight: '400',
                   fontSize: '18px',
-                  color: item.levelName && levelMap[item.levelName] ? levelMap[item.levelName].color : '',
+                  color: item.level_id && levelMap[item.level_id] ? levelMap[item.level_id].color : '',
                 }"
                 >{{ item.word }}</span
               >
             </td>
             <td v-if="typeIndex !== 0" class="sort-td" style="font-family: 'GB-PINYINOK-B'; text-align: left">
-              {{ item.pinYin }}
+              {{ item.pinyin }}
             </td>
             <td class="sort-td">
               <span
                 :style="{
                   fontFamily: '楷体',
                   fontSize: '16px',
-                  color: item.gradeName && levelMap[item.gradeName] ? levelMap[item.gradeName].color : '',
+                  color: item.grade_id && levelMap[item.grade_id] ? levelMap[item.grade_id].color : '',
                 }"
-                >{{ item.gradeName }}</span
+                >{{ item.grade_name }}</span
               >
             </td>
             <td class="sort-td jb" style="text-align: right">
@@ -110,19 +130,19 @@
                 :style="{
                   fontFamily: '楷体',
                   fontSize: '16px',
-                  color: item.levelName && levelMap[item.levelName] ? levelMap[item.levelName].color : '',
+                  color: item.level_id && levelMap[item.level_id] ? levelMap[item.level_id].color : '',
                 }"
-                >{{ item.levelName }}</span
+                >{{ item.level_name }}</span
               >
             </td>
             <td
               class="sort-td"
               style="font-size: 16px; cursor: pointer"
-              @click="backHighlight(item, levelMap[item.levelName].color, 'all', index)"
+              @click="backHighlight(item, levelMap[item.level_id].color, 'all', index)"
             >
               {{ item.freq }}
             </td>
-            <td class="sort-td">{{ item.textRatio }}%</td>
+            <td class="sort-td">{{ item.text_ratio }}%</td>
             <td>
               <div style="display: flex; flex-wrap: wrap">
                 <span
@@ -133,17 +153,17 @@
                     marginRight: '10px',
                     cursor: 'pointer',
                     borderColor:
-                      items.levelName && levelMap[items.levelName] ? levelMap[items.levelName].color + '16' : '',
+                      items.levelId && levelMap[items.levelId] ? levelMap[items.levelId].color + '16' : '',
                     background:
-                      items.levelName && levelMap[items.levelName] ? levelMap[items.levelName].color + '50' : '',
+                      items.levelId && levelMap[items.levelId] ? levelMap[items.levelId].color + '50' : '',
                   }"
-                  @click="backHighlight(items, levelMap[item.levelName].color, 'one', index)"
+                  @click="backHighlight(items, levelMap[item.levelId].color, 'one', index)"
                 >
                   <span style="font-family: '楷体'" v-html="items.word"> </span>
                   <span
                     :style="{
                       fontFamily: '楷体',
-                      color: items.levelName && levelMap[items.levelName] ? levelMap[items.levelName].color : '',
+                      color: items.levelId && levelMap[items.levelId] ? levelMap[items.levelId].color : '',
                     }"
                   >
                     {{ items.levelName }}
@@ -156,7 +176,7 @@
             </td>
           </tr>
         </table>
-        <template v-if="dataList.list.length == 0">
+        <template v-if="dataList.word_list.length == 0">
           <div class="no_data">暂无数据</div>
         </template>
 
@@ -255,13 +275,13 @@
           </el-table-column>
         </el-table> -->
       </div>
-      <div v-if="dataList.list.length > 0" class="page">
+      <div v-if="dataList.word_list.length > 0" class="page">
         <el-pagination
           background
           :current-page="page"
           :page-size="pageSize"
           layout="prev, pager, next, jumper"
-          :total="dataList.total"
+          :total="dataList.total_count"
           @current-change="handleCurrentChange"
         />
       </div>
@@ -271,7 +291,7 @@
 
 <script>
 import HeaderPage from '@/components/Header.vue';
-import { postapi } from '@/api/api';
+import { postapi, publicMethods } from '@/api/api';
 import { levelMap } from '../../common/data';
 import { json2excel } from '@/utils/setMethods';
 
@@ -281,10 +301,13 @@ export default {
   },
   data() {
     return {
+      props: { multiple: true },
       typeIndex: 0,
       headText: 1,
       keyword: '',
-      level: null,
+      level: [],
+      checkAll: false,
+      isIndeterminate: true,
       levelList: [
         {
           value: null,
@@ -389,7 +412,7 @@ export default {
         },
       ],
       dataList: {
-        list: [],
+        word_list: [],
       },
       page: 1,
       pageSize: 10,
@@ -401,6 +424,8 @@ export default {
       sortField: 'level_id',
       routerData: null,
       alldata: null,
+      id: '',
+      allLevels: []
     };
   },
   // 生命周期 - 创建完成(可以访问当前this实例)
@@ -408,15 +433,16 @@ export default {
     this.routerData = JSON.parse(JSON.stringify(this.$route.query));
 
     this.partition_key = Number(this.$route.query.partition_key);
-
+    this.id = this.routerData.id
+    this.getLevelList()
     this.getlist();
   },
   methods: {
     // 下载
     download() {
-      let data = JSON.parse(JSON.stringify(this.alldata.list));
-      data.forEach((item) => {
-        item.textRatio += '%';
+      let data = JSON.parse(JSON.stringify(this.alldata));
+      data.forEach((item,index) => {
+        item.text_ratio += '%';
         let str = '';
         // 处理备注
         item.remarks.forEach((items) => {
@@ -425,6 +451,7 @@ export default {
           str += `${node.innerText} ${items.levelName} ${items.freq}      `;
         });
         item.remarksTxt = str;
+        item.number = index+1
       });
       let tHeader = [];
       let filterVal = [];
@@ -433,10 +460,10 @@ export default {
       });
       if (this.typeIndex === 0) {
         tHeader.splice(2, 1);
-        filterVal = ['number', 'word', 'gradeName', 'levelName', 'freq', 'textRatio', 'remarksTxt'];
+        filterVal = ['number', 'word', 'grade_name', 'level_name', 'freq', 'text_ratio', 'remarksTxt'];
       } else {
         tHeader[1] = '汉字';
-        filterVal = ['number', 'word', 'pinYin', 'gradeName', 'levelName', 'freq', 'textRatio', 'remarksTxt'];
+        filterVal = ['number', 'word', 'pinyin', 'grade_name', 'level_name', 'freq', 'text_ratio', 'remarksTxt'];
       }
       let excelDatas = [
         {
@@ -459,12 +486,12 @@ export default {
             arr.push(items.word);
           });
         } else {
-          arr.push(this.dataList.list[index].word);
+          arr.push(this.dataList.word_list[index].word);
         }
       } else if (this.typeIndex === 0) {
         arr.push(item.word);
       } else {
-        arr.push(this.dataList.list[index].word);
+        arr.push(this.dataList.word_list[index].word);
       }
       data.remarks = JSON.stringify(arr);
       data.color = color;
@@ -483,57 +510,111 @@ export default {
       this.page = val;
       this.getlist();
     },
+    // 获取等级列表
+    getLevelList(){
+        this.allLevels = []
+        // this.levelList = [{
+        //     value: '',
+        //     id: '',
+        //     name: '全部',
+        //     label: '全部'
+        // }]
+        this.levelList = []
+        publicMethods('/TeachingServer/TextAnalyser/GetLevelList',{})
+        .then((res) => {
+          if(res.status===1){
+            res.level_list.forEach(item=>{
+                item.value = item.id
+                item.label = item.name
+                this.allLevels.push(item.id)
+            })
+            this.levelList = this.levelList.concat(res.level_list)
+          }
+        })
+    },
     getlist() {
       this.loading = true;
-      postapi({
-        url: '/GCLSTCServer/tools/TS/glossary/list',
-        data: {
-          pageIndex: this.page,
-          pageSize: this.pageSize,
-          partitionKey: this.partition_key,
-          searchType: this.typeIndex,
+      let order_column_list = []
+      if(this.sortType===1){
+        order_column_list = [this.sortField + ':desc']
+      }else if(this.sortType===0){
+        // 升序不传值
+        order_column_list = [this.sortField]
+      }
+      let data = {
+          cur_page: this.page,
+          page_capacity: this.pageSize,
+          type: this.typeIndex,
           word: this.keyword,
-          sortField: this.sortField,
-          sortType: this.sortType,
-          levels: this.level ? this.level[1] : null,
-        },
-      })
+          order_column_list: order_column_list,
+          level_id_list: this.level ,
+          analyse_record_id: this.id
+      }
+      publicMethods('/TeachingServer/TextAnalyser/PageQueryWordList',data)
+    //   postapi({
+    //     url: '/GCLSTCServer/tools/TS/glossary/list',
+    //     data: {
+    //       pageIndex: this.page,
+    //       pageSize: this.pageSize,
+    //       partitionKey: this.partition_key,
+    //       searchType: this.typeIndex,
+    //       word: this.keyword,
+    //       sortField: this.sortField,
+    //       sortType: this.sortType,
+    //       levels: this.level ? this.level[1] : null,
+    //     },
+    //   })
         .then((res) => {
           let num = this.page * this.pageSize - this.pageSize + 1;
-          res.data.result.list.forEach((item) => {
+          res.word_list.forEach((item) => {
             item.remarks = JSON.parse(item.remarks);
             item.number = num;
             num += 1;
           });
-          this.dataList = res.data.result;
+          this.dataList = res;
           this.loading = false;
         })
         .catch(() => {
           this.loading = false;
         });
-      postapi({
-        url: '/GCLSTCServer/tools/TS/glossary/list',
-        data: {
-          pageIndex: 1,
-          pageSize: 9999,
-          partitionKey: this.partition_key,
-          searchType: this.typeIndex,
-          word: this.keyword,
-          sortField: this.sortField,
-          sortType: this.sortType,
-          levels: this.level ? this.level[1] : null,
-        },
-      }).then((res) => {
+    publicMethods('/TeachingServer/TextAnalyser/PageQueryWordList',{
+        cur_page: 1,
+        page_capacity: 9999,
+        type: this.typeIndex,
+        word: this.keyword,
+        order_column_list: order_column_list,
+        level_id_list: this.level ,
+        analyse_record_id: this.id
+    })
+    //   postapi({
+    //     url: '/GCLSTCServer/tools/TS/glossary/list',
+    //     data: {
+    //       pageIndex: 1,
+    //       pageSize: 9999,
+    //       partitionKey: this.partition_key,
+    //       searchType: this.typeIndex,
+    //       word: this.keyword,
+    //       sortField: this.sortField,
+    //       sortType: this.sortType,
+    //       levels: this.level ? this.level[1] : null,
+    //     },
+    //   })
+    .then((res) => {
         let num = 0;
-        res.data.result.list.forEach((item) => {
+        res.word_list.forEach((item) => {
           item.remarks = JSON.parse(item.remarks);
           item.number = num;
           num += 1;
         });
-        this.alldata = res.data.result;
+        this.alldata = res.word_list;
       });
     },
-    page1getdata() {
+    page1getdata(value) {
+      if(value){
+        let checkedCount = value.length;
+        this.checkAll = checkedCount === this.levelList.length;
+        this.isIndeterminate = checkedCount > 0 && checkedCount < this.levelList.length;
+      }
       this.loading = true;
       this.page = 1;
       this.getlist();
@@ -582,6 +663,10 @@ export default {
       this.typeIndex = index;
       this.page1getdata();
     },
+    handleCheckAllChange(val) {
+        this.level = val ? this.allLevels : [];
+        this.isIndeterminate = false;
+    },
   },
 };
 </script>
@@ -885,4 +970,19 @@ export default {
     border-radius: 2px;
   }
 }
+.checkAllCheckbox{
+    width: 100%;
+    padding: 0 20px;  
+    height: 34px;
+    line-height: 34px;
+    &:hover{
+        background-color: #F5F7FA;
+    }
+    .el-checkbox__input{
+        display: none;
+    }
+    .el-checkbox__label{
+        padding: 0;
+    }
+}
 </style>