guanchunjie 3 лет назад
Родитель
Сommit
c843c35875

+ 183 - 183
src/api/ajax.js

@@ -1,227 +1,227 @@
 import request from '@/utils/request'
 import { getToken } from '@/utils/auth'
 export function getContent(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSBookWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSBookWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 
 export function getYinbiao(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        // /GCLSHMToolsServer/api/dict/basic
-        url: `/GCLSHMToolsServer/api/dict/basic?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    // /GCLSHMToolsServer/api/dict/basic
+    url: `/GCLSHMToolsServer/api/dict/basic?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 
 export function getLogin(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 
 export function getContentFile(
-    MethodName,
-    data
+  MethodName,
+  data
 ) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 
 export function getStaticContent(MethodName, data) {
-    return request({
-        url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}`,
-        method: 'post',
-        data
-    })
+  return request({
+    url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}`,
+    method: 'post',
+    data
+  })
 }
 
 //获取分词结果 == gcls.helxsoft.cn/GCLSFCServer/ServiceInterface?userCode=2021052116-QA2HTCS5J6C6ZER&userType=STUDENT&sessionId=S-QPUKZAXLEFESNRBAZ0
 export function getSegContent(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFCServer/ServiceInterface?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSFCServer/ServiceInterface?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 export function LearnWebSI(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSLearnWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data,
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSLearnWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data,
+  })
 }
 //教材
 export function TextbookAPI(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSBookWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data,
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSBookWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data,
+  })
 }
 export function getLearnWebContent(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSLearnWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSLearnWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 // 发送聊天
 export function sendrobot(data) {
-    return request({
-        url: `/GCLSAIServer/unit/utterance`,
-        method: 'post',
-        data
-    })
+  return request({
+    url: `/GCLSAIServer/unit/utterance`,
+    method: 'post',
+    data
+  })
 }
 // 语音识别 GCLSAIServer/speech/recognize
 export function speechrecognize(data) {
-    return request({
-        url: `/GCLSAIServer/speech/recognize`,
-        method: 'post',
-        data
-    })
+  return request({
+    url: `/GCLSAIServer/speech/recognize`,
+    method: 'post',
+    data
+  })
 }
 
 //分句
 export function segSentences(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFCServer/segement/split?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSHMToolsServer/api/nlp/chinese/text2Sentences?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 //批量分词
 export function BatchSegContent(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFCServer/sentenceList/split?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSHMToolsServer/api/nlp/chinese/text2word?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }
 // 生成拼音
 export function createPinyin(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFCServer/sentenceList/pinyin?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
+  let userInfor = getToken();
+  let UserCode = '',
+    UserType = '',
+    SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSFCServer/GCLSHMToolsServer/api/nlp/chinese/text2pinyin?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
 }

+ 22 - 26
src/components/Adult/Preview.vue

@@ -17,7 +17,7 @@
         >
           <div
             class="NNPE-tableList-tr"
-            v-for="(items, indexs) in item.tableList"
+            v-for="(items, indexs) in item.table_list"
             :key="indexs"
           >
             <div
@@ -28,31 +28,31 @@
               v-for="(itemss, indexss) in items"
               :key="indexss"
             >
-              <template v-if="itemss.que">
-                <template v-if="itemss.que.type == 'ligature'">
+              <template v-if="itemss.data">
+                <template v-if="itemss.data.type == 'ligature'">
                   <Ligature :curQue="itemss.que" />
                 </template>
-                <template v-if="itemss.que.type == 'image_chs'">
-                  <Picture :curQue="itemss.que" />
+                <template v-if="itemss.data.type == 'image_chs'">
+                  <Picture :curQue="itemss.data" />
                 </template>
-                <template v-if="itemss.que.type == 'record_chs'">
-                  <Record :curQue="itemss.que" />
+                <template v-if="itemss.data.type == 'record_chs'">
+                  <Record :curQue="itemss.data" />
                 </template>
-                <template v-if="itemss.que.type == 'phrase_chs'">
-                  <WordPhrase :curQue="itemss.que" />
+                <template v-if="itemss.data.type == 'phrase_chs'">
+                  <WordPhrase :curQue="itemss.data" />
                 </template>
-                <template v-if="itemss.que.type == 'NewWord_chs'">
-                  <WordPhrase :curQue="itemss.que" />
+                <template v-if="itemss.data.type == 'NewWord_chs'">
+                  <WordPhrase :curQue="itemss.data" />
                 </template>
-                <template v-if="itemss.que.type == 'annotation_chs'">
-                  <WordPhrase :curQue="itemss.que" />
+                <template v-if="itemss.data.type == 'annotation_chs'">
+                  <WordPhrase :curQue="itemss.data" />
                 </template>
-                <template v-if="itemss.que.type == 'notes_chs'">
-                  <Notes :curQue="itemss.que" />
+                <template v-if="itemss.data.type == 'notes_chs'">
+                  <Notes :curQue="itemss.data" />
                 </template>
-                <template v-if="itemss.que.type == 'article_chs'">
+                <template v-if="itemss.data.type == 'article_chs'">
                   <ArticleTemChs
-                    :curQue="itemss.que"
+                    :curQue="itemss.data"
                     :NNPENewWordList="NNPENewWordList"
                     :NNPENewPhraseList="NNPENewPhraseList"
                     :NNPEAnnotationList="NNPEAnnotationList"
@@ -130,19 +130,15 @@ export default {
           _this.cur = list[_this.queIndex];
           _this.queTotal = list.length;
           _this.cur.cur_fn_data.forEach((item) => {
-            item.tableList.forEach((items) => {
+            item.table_list.forEach((items) => {
               items.forEach((itemss) => {
-                if (itemss.que && itemss.que.type == "NewWord") {
+                if (itemss.data && itemss.data.type == "NewWord_chs") {
                   _this.NNPENewWordList = _this.NNPENewWordList.concat(
-                    itemss.que.option
+                    itemss.data.option
                   );
-                } else if (itemss.que && itemss.que.type == "phrase") {
-                  _this.NNPENewPhraseList = _this.NNPENewPhraseList.concat(
-                    itemss.que.option
-                  );
-                } else if (itemss.que && itemss.que.type == "annotation") {
+                } else if (itemss.data && itemss.data.type == "notes_chs") {
                   _this.NNPEAnnotationList = _this.NNPEAnnotationList.concat(
-                    itemss.que.option
+                    itemss.data.option
                   );
                 }
               });

+ 88 - 0
src/components/Adult/inputModules/ArticleTemChs/components/ArticleChs.vue

@@ -0,0 +1,88 @@
+<!--  -->
+<template>
+  <div class="NPC-Dialogue-article" v-if="curQue">
+    <span class="Big-Book-left-text">文章:</span>
+    <el-input
+      style="width: 85%"
+      class="NPC-Dialogue-input"
+      type="textarea"
+      :autosize="{ minRows: 10 }"
+      placeholder="请输入文章"
+      v-model="curQue.article"
+      @blur="onBlur(curQue, 'article')"
+    ></el-input>
+    <div>
+      <el-button type="primary" size="small" @click="createPara"
+        >生成段落</el-button
+      >
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: ["curQue", "changeIsPara"],
+  data() {
+    return {
+      detailItem: {
+        paraIndex: 0,
+        para: "",
+        sentences: [],
+        segList: [],
+        seg_words: [],
+        wordsList: [],
+        timeList: [],
+        isTitle: false,
+      },
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+    },
+    createPara() {
+      let paraArr = this.curQue.article.split(/\n+/g);
+
+      //this.$set(this.curQue, "detail", []);
+      for (let i = 0; i < paraArr.length; i++) {
+        let con = paraArr[i];
+        let detailItem = JSON.parse(JSON.stringify(this.detailItem));
+        if (this.curQue.detail.length == 0) {
+          detailItem.para = con;
+          detailItem.paraIndex = i;
+          this.curQue.detail.push(detailItem);
+        } else {
+          if (!(this.curQue.detail[i] && this.curQue.detail[i].para == con)) {
+            this.$set(this.curQue.detail[i], "para", con);
+          }
+        }
+      }
+      this.changeIsPara();
+      this.$message.success("生成成功");
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {},
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+.NPC-Dialogue-article {
+  .NPC-Dialogue-input {
+    margin: 20px 0;
+  }
+}
+</style>

+ 10 - 9
src/components/Adult/inputModules/ArticleTemChs/components/ClauseresultChs.vue

@@ -2,7 +2,7 @@
 <template>
   <div class="Big-Book-Maxwidth">
     <div class="Big-Book-con-top">
-      <span class="Big-Book-left-text">文章分句:</span>
+      <span class="Big-Book-left-text">分句结果:</span>
     </div>
     <div
       class="NPC-sentence-list"
@@ -11,6 +11,7 @@
     >
       <template v-if="item.para">
         <el-input
+          style="width: 85%;white-space:nowrap;"
           type="textarea"
           :autosize="{ minRows: 3 }"
           placeholder="请输入内容"
@@ -19,18 +20,17 @@
           @change="handleChange"
           @blur="onBlur(item, 'para')"
         ></el-input>
-        <el-button
-          v-if="!item.isReadonly"
-          type="primary"
-          size="small"
-          @click="sureClause(index)"
-          >确定</el-button
-        >
-        <el-button v-else type="danger" size="small" @click="editClause(item)"
+        <el-button type="danger" size="small" @click="editClause(item)"
           >编辑</el-button
         >
+        <el-button type="primary" size="small" @click="sureClause(index)"
+          >生词分词</el-button
+        >
       </template>
     </div>
+    <!-- <el-button type="primary" size="small" @click="oneClickResult"
+      >一键生成分词</el-button
+    > -->
   </div>
 </template>
 
@@ -93,6 +93,7 @@ export default {
     editClause(item) {
       item.isReadonly = false;
     },
+    oneClickResult() {},
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},

+ 11 - 6
src/components/Adult/inputModules/ArticleTemChs/components/ParagraphChs.vue

@@ -11,7 +11,7 @@
               size="small"
               @click="editPara"
               v-if="readonly"
-              >编辑文章</el-button
+              >编辑段落</el-button
             >
           </div>
           <div
@@ -19,7 +19,9 @@
             v-for="(item, index) in curQue.detail"
             :key="'para' + index"
           >
+            <span class="NPC-para-number">{{ index + 1 }}.</span>
             <el-input
+            style="width: 82%;"
               type="textarea"
               :autosize="{ minRows: 3 }"
               placeholder="请输入内容"
@@ -27,20 +29,18 @@
               @blur="onBlur(item, 'para')"
               :readonly="readonly"
             ></el-input>
-            <template v-if="index == 0 && !readonly">
+            <template v-if="index == 0">
               <el-checkbox v-model="item.isTitle">文章标题</el-checkbox>
             </template>
             <img
-              v-if="!readonly"
               @click="deleteOption(index)"
               class="close"
               src="../../../../../assets/adult/del-close.png"
               alt=""
+              v-if="!readonly"
             />
           </div>
-          <div class="NPC-footer-btn" v-if="!readonly">
-            <div class="addoption" @click="addOption">添加段落</div>
-            <div class="sureSegbtn" @click="sureSegResult">确定分句</div>
+            <el-button type="primary" size="small" @click="sureSegResult">确定分句</el-button>
           </div>
         </div>
       </div>
@@ -188,6 +188,11 @@ export default {
     justify-content: flex-start;
     align-items: flex-start;
     margin-bottom: 10px;
+    .NPC-para-number {
+      width: 28px;
+      margin-right: 5px;
+      text-align: right;
+    }
   }
   .close {
     width: 24px;

+ 1 - 0
src/components/Adult/inputModules/ArticleTemChs/components/SegbywordChs.vue

@@ -184,6 +184,7 @@ export default {
     },
     //获取段落中句子分词结果
     getParaSegWordsResult() {
+      debugger;
       let detail = this.curQue.detail;
       for (let i = 0; i < detail.length; i++) {
         if (detail[i].paraIndex == this.paraIndex) {

Разница между файлами не показана из-за своего большого размера
+ 2951 - 21
src/components/Adult/inputModules/ArticleTemChs/index.vue


+ 73 - 0
src/components/Adult/inputModules/DialogueArticleChs/components/ArticleChs.vue

@@ -0,0 +1,73 @@
+<!--  -->
+<template>
+  <div class="NPC-Dialogue-article" v-if="curOption">
+    <el-input
+      class="NPC-Dialogue-input"
+      type="textarea"
+      :autosize="{ minRows: 10 }"
+      placeholder="请输入内容"
+      v-model="curOption.article"
+      @blur="onBlur(curOption, 'article')"
+    ></el-input>
+    <el-button @click="createPara">生成段落</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: ["curOption", "changeActive"],
+  data() {
+    return {
+      detailItem: {
+        paraIndex: 0,
+        para: "",
+        sentences: [],
+        segList: [],
+        seg_words: [],
+        wordsList: [],
+        timeList: [],
+        isTitle: false,
+      },
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+    },
+    createPara() {
+      let paraArr = this.curOption.article.split(/\n+/g);
+
+      for (let i = 0; i < paraArr.length; i++) {
+        let con = paraArr[i];
+        let detailItem = JSON.parse(JSON.stringify(this.detailItem));
+        detailItem.para = con;
+        this.curOption.detail.push(detailItem);
+      }
+      this.changeActive(2);
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {},
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+.NPC-Dialogue-article {
+  .NPC-Dialogue-input {
+    margin: 20px 0;
+  }
+}
+</style>

+ 10 - 10
src/components/Adult/inputModules/DialogueArticleChs/components/ParagraphChs.vue

@@ -1,11 +1,11 @@
 <!--分句组件-->
 <template>
-  <div class="Big-Book-Maxwidth" v-if="curQue">
+  <div class="Big-Book-Maxwidth" v-if="curOption">
     <div class="Big-Book-content m">
       <div class="Big-Book-main">
         <div class="Big-Book-con">
           <div class="Big-Book-con-top">
-            <span class="Big-Book-left-text">文章:</span>
+            <span class="Big-Book-left-text">段落:</span>
             <el-button
               type="text"
               size="small"
@@ -16,7 +16,7 @@
           </div>
           <div
             class="NPC-para-list"
-            v-for="(item, index) in curQue.detail"
+            v-for="(item, index) in curOption.detail"
             :key="'para' + index"
           >
             <el-input
@@ -52,7 +52,7 @@ import "@/utils/pinyin_dict_withtone";
 import "@/utils/pinyinUtil";
 export default {
   components: {},
-  props: ["curQue", "sureSeg", "isClause", "changeIsClause"],
+  props: ["curOption", "sureSeg", "isClause", "changeIsClause"],
   data() {
     return {
       imgNumber: 10,
@@ -76,8 +76,8 @@ export default {
       item[field] = item[field] ? item[field].trim() : "";
     },
     onBlurIndex(index, field) {
-      let res = this.curQue[field][index].trim();
-      this.$set(this.curQue[field], index, res);
+      let res = this.curOption[field][index].trim();
+      this.$set(this.curOption[field], index, res);
     },
     sureSegResult() {
       let _this = this;
@@ -107,11 +107,11 @@ export default {
         this.$message.warning("不能全部删除");
         return;
       }
-      this.curQue.detail.splice(index, 1);
+      this.curOption.detail.splice(index, 1);
     },
     addOption() {
-      let leg = this.curQue.detail.length;
-      let last = this.curQue.detail[leg - 1].para;
+      let leg = this.curOption.detail.length;
+      let last = this.curOption.detail[leg - 1].para;
       if (!last) {
         this.$message.warning("数据不能全是空");
         return;
@@ -125,7 +125,7 @@ export default {
         wordsList: [],
         timeList: [],
       };
-      this.curQue.detail.push(obj);
+      this.curOption.detail.push(obj);
     },
     editPara() {
       this.$confirm("此操作需要重新校对分句分词, 是否继续?", "提示", {

+ 129 - 0
src/components/Adult/inputModules/DialogueArticleChs/components/Pinyin.vue

@@ -0,0 +1,129 @@
+<!--  -->
+<template>
+  <div class="NPC-words-box" v-if="wordsList">
+    <span class="Big-Book-left-text">校对拼音:</span>
+    <div class="NPC-proof-pinyin">
+      <div class="NPC-words-list">
+        <el-table :data="wordsList" border style="width: 400px">
+          <el-table-column prop="chs" label="词" width="180"> </el-table-column>
+          <el-table-column label="拼音" width="220">
+            <template slot-scope="scope">
+              <el-input
+                v-model="scope.row.pinyin"
+                placeholder="请输入拼音"
+                @blur="onBlur(scope.row, 'pinyin')"
+              ></el-input>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div></div>
+      </div>
+      <div class="yunmu">
+        <span>点击可复制</span>
+        <table border="1" class="yunmu-table">
+          <tr v-for="(item, index) in tableData" :key="'tableData' + index">
+            <td
+              v-for="(tdItem, tdIndex) in item"
+              :key="'pinyin' + index + tdIndex"
+              :id="'pinyin' + index + tdIndex"
+              @click="CopyToClipboard('pinyin' + index + tdIndex)"
+            >
+              {{ tdItem }}
+            </td>
+          </tr>
+        </table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: ["wordsList"],
+  data() {
+    return {
+      tableData: [
+        ["ā", "á", "ǎ", "à"],
+        ["ō", "ó", "ǒ", "ò"],
+        ["ē", "é", "ě", "è"],
+        ["ī", "í", "ǐ", "ì"],
+        ["ū", "ú", "ǔ", "ù"],
+        ["ǖ", "ǘ", "ǚ", "ǜ"],
+        ["Ā", "Á", "Â", "À"],
+        ["Ō", "Ó", "Ô", "Ò"],
+        ["Ē", "É", "Ê", "È"],
+        ["Ī", "Í", "Î", "Ì"],
+        ["Ū", "Ú", "Û", "Ù"],
+      ],
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+      item[field] = item[field].replace(/\s+/g, "");
+    },
+    CopyToClipboard(element) {
+      var doc = document,
+        text = doc.getElementById(element),
+        range,
+        selection;
+      if (doc.body.createTextRange) {
+        range = doc.body.createTextRange();
+        range.moveToElementText(text);
+        range.select();
+      } else if (window.getSelection) {
+        selection = window.getSelection();
+        range = doc.createRange();
+        range.selectNodeContents(text);
+        selection.removeAllRanges();
+        selection.addRange(range);
+      }
+      document.execCommand("copy");
+      this.$message({
+        message: "复制成功",
+        type: "success",
+      });
+      window.getSelection().removeAllRanges();
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {},
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+.NPC-words-box {
+  position: relative;
+  .NPC-proof-pinyin {
+    display: flex;
+    justify-content: flex-start;
+  }
+  .yunmu {
+    margin-left: 36px;
+    &-table {
+      width: 260px;
+      > tr {
+        td {
+          cursor: pointer;
+          text-align: center;
+          font-size: 16px;
+          height: 26px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 80 - 20
src/components/Adult/inputModules/DialogueArticleChs/components/RoleChs.vue

@@ -4,13 +4,13 @@
     <div class="NPC-da-role-flex">
       <span class="NPC-da-role-text">角色:</span>
       <el-input
+        style="width: 100px"
         class="NPC-role-input"
         placeholder="请输入角色"
-        v-model="curRole.role"
-        @blur="onBlur(item, 'para')"
-        :readonly="readonly"
+        v-model="curRole.roleName"
+        @blur="onBlur(curRole, 'roleName')"
       ></el-input>
-      或
+      <span style="margin-right: 10px"></span>
       <Upload
         type="image"
         :changeFillId="changeImage"
@@ -25,8 +25,7 @@
         class="NPC-role-input"
         placeholder="请输入内容"
         v-model="curRole.fullName"
-        @blur="onBlur(item, 'fullName')"
-        :readonly="readonly"
+        @blur="onBlur(curRole, 'fullName')"
       ></el-input>
       <el-button type="danger" @click="segWord(curRole.fullName)"
         >分词</el-button
@@ -38,20 +37,29 @@
         class="NPC-role-input"
         placeholder="请输入分词结果"
         v-model="curRole.seg_words"
-        @blur="onBlur(item, 'fullName')"
-        :readonly="readonly"
+        @change="handleChange"
+        @blur="onBlur(curRole, 'seg_words')"
       ></el-input>
-      <el-button type="danger" @click="proofName">生成拼音</el-button>
+      <el-button type="danger" @click="_createPinyin">生成拼音</el-button>
+    </div>
+    <div v-if="curRole && curRole.wordsList && curRole.wordsList.length > 0">
+      <Pinyin :wordsList="curRole.wordsList" />
     </div>
   </div>
 </template>
 
 <script>
+import Upload from "../../../common/Upload.vue";
+import Pinyin from "./Pinyin.vue";
+const Base64 = require("js-base64").Base64;
 import { segSentences, BatchSegContent, createPinyin } from "@/api/ajax";
 export default {
   name: "role",
-  components: {},
-  props: ["curRole"],
+  components: {
+    Upload,
+    Pinyin,
+  },
+  props: ["curRole", "Upload"],
   data() {
     return {
       fileCon: {
@@ -59,17 +67,28 @@ export default {
         img_list: [],
       },
       imgNumber: 1,
+      loading: false,
     };
   },
   computed: {},
   watch: {},
   //方法集合
   methods: {
-    onBlur() {},
-    proofName() {},
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+    },
+    handleChange(val) {
+      this.curRole.seg_words = val.replace(/\s+/g, " ");
+      let arr = this.curRole.seg_words.split(/\s+/);
+      this.$set(this.curRole, "segList", arr);
+    },
     //生成分词
-    segByWord(sentences) {
-      console.log(sentences);
+    segWord(sentence) {
+      if (!sentence) {
+        this.$message.warning("姓名不能为空");
+        return;
+      }
+      let sentences = [sentence];
       this.loading = true;
       let textList = [];
       sentences.forEach((item) => {
@@ -80,19 +99,60 @@ export default {
         textList: textList,
       };
       BatchSegContent(data).then((res) => {
-        this.paraIndex = paraIndex;
         this.loading = false;
         let list = res.data.result.list;
-        this.$set(this.curQue.detail[paraIndex], "segList", list);
-        this.segList = list;
-        this.isByWord = true;
+        this.$set(this.curRole, "segList", list);
+        let seg_words = list.join(" ");
+        this.$set(this.curRole, "seg_words", seg_words);
+      });
+    },
+    //生成拼音
+    _createPinyin() {
+      let res_str = this.curRole.seg_words.replace(/\s+/g, "");
+      let org_sent = this.curRole.fullName;
+      if (res_str.trim() != org_sent.trim()) {
+        this.$message.warning("跟原句不一致,请检查是否误删除或新增其他内容");
+        return;
+      }
+      let textListList = [];
+      let segArr = JSON.parse(JSON.stringify(this.curRole.segList));
+      segArr.forEach((item) => {
+        let str = Base64.encode(item);
+        textListList.push(str);
+      });
+      let data = {
+        textListList: [textListList],
+      };
+      createPinyin(data).then((res) => {
+        let wordsList = res.data.result[0];
+        this.$set(this.curRole, "wordsList", wordsList);
       });
     },
+    changeImage(fileList) {
+      const articleImgList = JSON.parse(JSON.stringify(fileList));
+      const articleImgRes = [];
+      articleImgList.forEach((item) => {
+        if (item.response) {
+          const obj = {
+            name: item.name,
+            url: item.response.file_info_list[0].file_url,
+            id: item.response.file_info_list[0].file_id,
+          };
+          articleImgRes.push(obj);
+        }
+      });
+      //this.articleImgList = articleImgRes;
+      this.curQueItem.img_list = JSON.parse(JSON.stringify(articleImgRes));
+    },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
-  mounted() {},
+  mounted() {
+    if (this.curRole) {
+      this.fileCon.img_list = this.curRole.img_list;
+    }
+  },
   beforeCreate() {}, //生命周期 - 创建之前
   beforeMount() {}, //生命周期 - 挂载之前
   beforeUpdate() {}, //生命周期 - 更新之前

+ 88 - 33
src/components/Adult/inputModules/DialogueArticleChs/index.vue

@@ -64,7 +64,9 @@
       </div>
       <!--对话内容-->
       <div class="NPC-da-article">
-        <el-button type="primary">编辑文章</el-button>
+        <el-button type="primary" @click="editDialogue(item, index)"
+          >编辑对话内容</el-button
+        >
       </div>
       <!--标注信息-->
       <div class="NPC-da-tag">
@@ -78,13 +80,51 @@
         <el-button type="primary" @click="saveTimeList">保 存</el-button>
       </span>
     </el-dialog>
-    <el-dialog title="编辑角色" :visible.sync="isEditRole" width="50%">
+    <el-dialog title="编辑角色" :visible.sync="isEditRole" width="60%">
       <template v-if="curOption">
         <RoleChs ref="roleChs" :curRole="curOption.role" />
       </template>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="cTVisible = false">取 消</el-button>
-        <el-button type="primary" @click="saveTimeList">保 存</el-button>
+        <el-button @click="isEditRole = false">取 消</el-button>
+        <el-button type="primary" @click="saveRole">保 存</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="编辑对话内容"
+      top="30px"
+      :visible.sync="isEditDia"
+      width="60%"
+    >
+      <template v-if="curOption">
+        <el-steps
+          :active="active"
+          finish-status="success"
+          simple
+          style="margin-top: 20px"
+        >
+          <el-step title="对话内容"></el-step>
+          <el-step title="分段结果"></el-step>
+          <el-step title="分句结果"></el-step>
+          <el-step title="分词结果"></el-step>
+        </el-steps>
+        <template v-if="active == 1">
+          <ArticleChs
+            ref="articleChs"
+            :curOption="curOption"
+            :changeActive="changeActive"
+          />
+        </template>
+        <template v-if="active == 2">
+          <ParagraphChs
+            ref="articleChs"
+            :curOption="curOption"
+            :changeActive="changeActive"
+          />
+        </template>
+      </template>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isEditDia = false">取 消</el-button>
+        <el-button type="primary" @click="saveDialogue">保 存</el-button>
       </span>
     </el-dialog>
   </div>
@@ -95,23 +135,25 @@ import { segSentences, BatchSegContent, createPinyin } from "@/api/ajax";
 const Base64 = require("js-base64").Base64;
 import Upload from "../../common/Upload.vue";
 import UploadArt from "../../common/UploadArt.vue";
-import Paragraph from "./components/ParagraphChs.vue";
+import ParagraphChs from "./components/ParagraphChs.vue";
 import Clauseresult from "./components/ClauseresultChs.vue";
 import Segbyword from "./components/SegbywordChs.vue";
 import Createtimelist from "./components/CreatetimelistChs.vue";
 
 import RoleChs from "./components/RoleChs.vue";
+import ArticleChs from "./components/ArticleChs.vue";
 
 export default {
-  name: "ArticleTemChs",
+  name: "DialogueArticleChs",
   components: {
     Upload,
     UploadArt,
-    Paragraph,
+    ParagraphChs,
     Clauseresult,
     Segbyword,
     Createtimelist,
     RoleChs,
+    ArticleChs,
   },
   props: ["curQue", "changeCurQue", "tmIndex"],
   data() {
@@ -129,8 +171,11 @@ export default {
       loading: false,
       segList: null,
       isEditRole: false,
+      isEditDia: false,
       curOpIndex: -1,
       curOption: null,
+      active: 1,
+
       data_structure: {
         type: "dialog_article_chs",
         name: "对话课文",
@@ -143,20 +188,13 @@ export default {
             role: {
               roleName: "",
               fullName: "",
+              segList: [],
+              seg_words: "",
+              wordsList: [],
               namePinyin: "",
             },
-            detail: [
-              {
-                paraIndex: 0,
-                para: "",
-                sentences: [],
-                segList: [],
-                seg_words: [],
-                wordsList: [],
-                timeList: [],
-                isTitle: false,
-              },
-            ],
+            article: "",
+            detail: [],
           },
         ],
       },
@@ -292,11 +330,28 @@ export default {
       let res_data = JSON.parse(JSON.stringify(this.data_structure));
       this.changeCurQue(res_data);
     },
+    //编辑角色
     editRole(item, index) {
       this.isEditRole = true;
       this.curOption = item;
       this.curOpIndex = index;
     },
+    //保存角色
+    saveRole() {
+      this.isEditRole = false;
+      console.log(this.curQue);
+    },
+    //编辑对话内容
+    editDialogue(item, index) {
+      this.isEditDia = true;
+      this.curOption = item;
+      this.curOpIndex = index;
+    },
+    //保存对话内容
+    saveDialogue() {},
+    changeActive(active) {
+      this.active = active;
+    },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
@@ -305,20 +360,20 @@ export default {
     console.log("ArticleTem");
     console.log(this.curQue);
     if (this.curQue) {
-      if (this.curQue.detail[0].sentences.length > 0) {
-        this.isClause = true;
-      }
-      if (this.curQue.detail[0].seg_words.length > 0) {
-        this.isByWord = true;
-      }
-      if (!this.curQue.img_list) {
-        this.curQue.img_list = [];
-      }
-      if (!this.curQue.mp3_list) {
-        this.curQue.mp3_list = [];
-      }
-      this.fileCon.img_list = JSON.parse(JSON.stringify(this.curQue.img_list));
-      this.fileCon.mp3_list = JSON.parse(JSON.stringify(this.curQue.mp3_list));
+      // if (this.curQue.detail[0].sentences.length > 0) {
+      //   this.isClause = true;
+      // }
+      // if (this.curQue.detail[0].seg_words.length > 0) {
+      //   this.isByWord = true;
+      // }
+      // if (!this.curQue.img_list) {
+      //   this.curQue.img_list = [];
+      // }
+      // if (!this.curQue.mp3_list) {
+      //   this.curQue.mp3_list = [];
+      // }
+      // this.fileCon.img_list = JSON.parse(JSON.stringify(this.curQue.img_list));
+      // this.fileCon.mp3_list = JSON.parse(JSON.stringify(this.curQue.mp3_list));
     } else {
       this.initCurQueData();
     }

+ 26 - 26
src/main.js

@@ -29,29 +29,29 @@ import VideoPlayer from 'vue-video-player'
 require('video.js/dist/video-js.css')
 require('vue-video-player/src/custom-theme.css')
 Vue.use(VideoPlayer)
-    /**
-     * If you don't want to use mock-server
-     * you want to use MockJs for mock api
-     * you can execute: mockXHR()
-     *
-     * Currently MockJs will be used in the production environment,
-     * please remove it before going online ! ! !
-     */
-    // set ElementUI lang to EN
-    // Vue.use(ElementUI, { locale })
-    // 如果想要中文版 element-ui,按如下方式声明
-    // element 下拉框下拉加载
+/**
+ * If you don't want to use mock-server
+ * you want to use MockJs for mock api
+ * you can execute: mockXHR()
+ *
+ * Currently MockJs will be used in the production environment,
+ * please remove it before going online ! ! !
+ */
+// set ElementUI lang to EN
+// Vue.use(ElementUI, { locale })
+// 如果想要中文版 element-ui,按如下方式声明
+// element 下拉框下拉加载
 Vue.directive('loadmore', {
-    bind(el, binding) {
-        // 获取element-ui定义好的scroll盒子
-        const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
-        SELECTWRAP_DOM.addEventListener('scroll', function() {
-            const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
-            if (CONDITION) {
-                binding.value()
-            }
-        })
-    }
+  bind(el, binding) {
+    // 获取element-ui定义好的scroll盒子
+    const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
+    SELECTWRAP_DOM.addEventListener('scroll', function () {
+      const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
+      if (CONDITION) {
+        binding.value()
+      }
+    })
+  }
 })
 
 Vue.use(ElementUI)
@@ -62,8 +62,8 @@ Vue.use(elementUtils)
 Vue.config.productionTip = false
 
 new Vue({
-    el: '#app',
-    router,
-    store,
-    render: h => h(App)
+  el: '#app',
+  router,
+  store,
+  render: h => h(App)
 })

+ 2 - 0
src/views/adultInput.vue

@@ -447,6 +447,7 @@ export default {
       //   "que",
       //   null
       // );
+      item.type = "";
       item.data = null;
       this.TopicIndex = null;
       this.RowIndex = null;
@@ -535,6 +536,7 @@ export default {
       ) {
         this.$message.warning("每列只能添加一个模板");
       } else {
+        debugger;
         console.log("不存在");
         this.module_type = item.type;
         this.$set(

Некоторые файлы не были показаны из-за большого количества измененных файлов