Ver código fonte

Merge branch 'master' into NPC-lhd

natasha 3 anos atrás
pai
commit
2c1fd5ffd3

+ 10 - 3
src/components/Adult/common/InputRecordModule.vue

@@ -4,13 +4,13 @@
     <div class="Big-Book-content m">
       <div class="Big-Book-con-main">
         <div class="adult-book-input-item">
-          <span class="adult-book-lable">题目:</span>
+          <span class="adult-book-lable">序号:</span>
           <el-input
             type="textarea"
             class="adult-book-input"
             :autosize="{ minRows: 2 }"
-            placeholder="请输入题目"
-            v-model="curQueItem.con"
+            placeholder="请输入序号"
+            v-model="curQueItem.number"
           ></el-input>
           <img
             @click="romveoptionCon"
@@ -19,6 +19,9 @@
             alt=""
           />
         </div>
+        <div class="adult-book-input-item">
+          <SentenceSegwordChs :curQue="curQueItem.detail" />
+        </div>
         <div class="adult-book-input-item InputRecordModule_textarea">
           <span class="adult-book-lable">答案:</span>
           <el-input
@@ -29,6 +32,7 @@
             v-model="curQueItem.answer"
           ></el-input>
         </div>
+
         <div class="adult-book-input-item">
           <span class="adult-book-lable">录音:</span>
           <el-radio v-model="curQueItem.record" :label="true">需要</el-radio>
@@ -43,9 +47,12 @@
 import Upload from "./Upload.vue";
 import "@/utils/pinyin_dict_withtone";
 import "@/utils/pinyinUtil";
+import SentenceSegwordChs from "../common/SentenceSegwordChs/index.vue";
+
 export default {
   components: {
     Upload,
+    SentenceSegwordChs,
   },
   props: ["curQueItem", "index", "deleteOptionOne", "type"],
   data() {

+ 22 - 2
src/components/Adult/common/SentenceModule.vue

@@ -20,10 +20,10 @@
         />
       </div>
     </div>
-    <div class="NPC-sentence-Segword">
+    <div class="NPC-sentence-Segword" v-if="type != 'recordHZ_inputPY_chs'">
       <SentenceSegwordChs :curQue="curQueItem.detail" />
     </div>
-    <div class="adult-book-input-item">
+    <div class="adult-book-input-item" v-if="type != 'recordHZ_inputPY_chs'">
       <span class="adult-book-lable">英文:</span>
       <el-input
         size="small"
@@ -33,6 +33,26 @@
         @blur="onBlur(curQueItem, 'en')"
       ></el-input>
     </div>
+    <div class="adult-book-input-item" v-if="type == 'recordHZ_inputPY_chs'">
+      <span class="adult-book-lable">内容:</span>
+      <el-input
+        size="small"
+        class="adult-book-input"
+        placeholder="请输入内容"
+        v-model="curQueItem.con"
+        @blur="onBlur(curQueItem, 'con')"
+      ></el-input>
+    </div>
+    <div class="adult-book-input-item" v-if="type == 'recordHZ_inputPY_chs'">
+      <span class="adult-book-lable">答案:</span>
+      <el-input
+        size="small"
+        class="adult-book-input"
+        placeholder="请输入答案"
+        v-model="curQueItem.answer"
+        @blur="onBlur(curQueItem, 'answer')"
+      ></el-input>
+    </div>
     <div
       class="adult-book-input-item"
       v-if="type == 'sentence_listen_read_chs'"

Diferenças do arquivo suprimidas por serem muito extensas
+ 469 - 555
src/components/Adult/common/data.js


+ 21 - 10
src/components/Adult/inputModules/InputRecord.vue

@@ -6,7 +6,17 @@
       class="Big-Book-Record-icon"
     /> -->
     <div>
-      <SentenceSegwordChs :curQue="curQue.detail" />
+      <div class="adult-book-input-item">
+        <span class="adult-book-lable">标题:</span>
+        <el-input
+          class="adult-book-input"
+          type="textarea"
+          autosize
+          placeholder="请输入标题"
+          v-model="curQue.title"
+          @blur="onBlur(curQue, 'title')"
+        ></el-input>
+      </div>
     </div>
     <div
       class="Big-Book-hanzi-option"
@@ -37,19 +47,20 @@ export default {
       data_structure: {
         type: "input_record_chs",
         name: "输入+录音",
-        detail: {
-          type: "detail",
-          pyPosition: "top", //top 拼音在上面;bottom 拼音在下面
-          sentence: "", //句子
-          segList: [], //分词结果
-          seg_words: "",
-          wordsList: [],
-        },
+        title: "",
         option: [
           {
-            con: "", //标题
+            detail: {
+              type: "detail",
+              pyPosition: "top", //top 拼音在上面;bottom 拼音在下面
+              sentence: "", //句子
+              segList: [], //分词结果
+              seg_words: "",
+              wordsList: [],
+            },
             answer: "", //答案
             record: false, //需要录音
+            number: "",
             mp3_list: [],
           },
         ],

+ 1 - 1
src/components/Adult/inputModules/Sentence.vue

@@ -46,7 +46,7 @@
       <div class="Big-Book-addrole">
         <div class="addoption" @click="addOption">添加一个</div>
       </div>
-      <div class="lrc-box">
+      <div class="lrc-box" v-if="type != 'recordHZ_inputPY_chs'">
         <div
           v-if="this.curQue.wordTime && this.curQue.wordTime.length > 0"
           class="lrc-box"

+ 21 - 35
src/components/Adult/inputModules/SuitchControl.vue

@@ -6,16 +6,16 @@
       class="Big-Book-Record-icon"
     /> -->
     <div class="Big-Book-hanzi-option">
-        <span>标题:</span>
-        <el-input
-          style="width: 300px"
-          type="textarea"
-          autosize
-          placeholder="请输入标题"
-          v-model="curQue.con"
-          @blur="curQue.con = curQue.con.trim()"
-        ></el-input>
-      <el-switch style="margin-left:10px" v-model="value1"> </el-switch>
+      <span>标题:</span>
+      <el-input
+        style="width: 300px"
+        type="textarea"
+        autosize
+        placeholder="请输入标题"
+        v-model="curQue.con"
+        @blur="curQue.con = curQue.con.trim()"
+      ></el-input>
+      <el-switch style="margin-left: 10px" v-model="value1"> </el-switch>
     </div>
   </div>
 </template>
@@ -25,40 +25,26 @@ import AudioControlModule from "../common/AudioControlModule.vue";
 
 export default {
   components: { AudioControlModule },
-  props: ["curQue", "fn_data"],
+  props: ["curQue", "fn_data", "changeCurQue"],
   data() {
     return {
       value1: "",
+      data_structure: {
+        type: "switch_control_chs",
+        name: "开关控件",
+      },
     };
   },
   computed: {},
   watch: {},
   //方法集合
-  methods: {
-    //添加一个选项
-    addOption() {
-      let leg = this.curQue.option.length;
-      let last = this.curQue.option[leg - 1];
-      // if (!last.hanzi && !last.pinyin && !last.definition_list[0]) {
-      //   this.$message.warning("数据不能全是空");
-      //   return;
-      // }
-      let type = this.curQue.type;
-      let cur_fn_data_arr = this.fn_data.filter((item) => item.type == type);
-      let cur_fn_data = JSON.parse(JSON.stringify(cur_fn_data_arr[0]));
-      let obj = cur_fn_data.data_structure.option[0];
-      this.curQue.option.push(obj);
-    },
-    deleteOptionOne(index) {
-      if (this.curQue.option.length <= 1) {
-        this.$message.warning("至少要保留一个");
-        return;
-      }
-      this.curQue.option.splice(index, 1);
-    },
-  },
+  methods: {},
   //生命周期 - 创建完成(可以访问当前this实例)
-  created() {},
+  created() {
+    if (!this.curQue) {
+      this.changeCurQue(this.data_structure);
+    }
+  },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {},
   beforeCreate() {}, //生命周期 - 创建之前

+ 175 - 0
src/components/Adult/inputModules/Tinydemo.vue

@@ -0,0 +1,175 @@
+<!--  -->
+<template>
+  <div class="Big-Book-Record">
+    <!-- <img
+      src="../../../assets/adult/maikefeng-red.png"
+      class="Big-Book-Record-icon"
+    /> -->
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">标题:</span>
+      <el-input
+        class="adult-book-input"
+        type="textarea"
+        autosize
+        placeholder="请输入标题"
+        v-model="curQue.title"
+        @blur="curQue.title = curQue.title.trim()"
+      ></el-input>
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">图片:</span>
+      <Upload :changeFillId="changeImage" :uploadType="'image'" />
+    </div>
+    <ul v-if="curQue.img_list.length > 0" class="uploadArt_list">
+      <li
+        v-for="(artItem, artIndex) in curQue.img_list"
+        :key="'articleImgList' + artIndex"
+      >
+        <span class="art_name">{{ artItem.name }}</span>
+        <span v-if="artItem.url" :id="'file' + artIndex" class="art_url"
+          >{{ artItem.url }}
+          <i class="el-icon-document-copy" @click="copyHttp('file' + artIndex)"
+        /></span>
+      </li>
+    </ul>
+    <div class="main">
+      <Editor id="tinydemo" v-model="curQue.con" :init="init" />
+    </div>
+  </div>
+</template>
+
+<script>
+import Upload from "../common/Upload.vue";
+import tinymce from "tinymce/tinymce";
+import Editor from "@tinymce/tinymce-vue";
+import "tinymce/icons/default/icons";
+import "tinymce/themes/silver";
+// 引入富文本编辑器主题的js和css
+import "tinymce/themes/silver/theme.min";
+import "tinymce/skins/ui/oxide/skin.min.css";
+// 扩展插件
+// import "tinymce/plugins/"
+import "tinymce/plugins/image";
+import "tinymce/plugins/link";
+import "tinymce/plugins/code";
+import "tinymce/plugins/table";
+import "tinymce/plugins/lists";
+import "tinymce/plugins/wordcount"; // 字数统计插件
+import "tinymce/plugins/media"; // 插入视频插件
+import "tinymce/plugins/template"; // 模板插件
+import "tinymce/plugins/fullscreen";
+import "tinymce/plugins/paste";
+import "tinymce/plugins/preview";
+import "tinymce/plugins/contextmenu";
+import "tinymce/plugins/textcolor";
+import "tinymce/plugins/colorpicker";
+import { CopyToClipboard } from "@/utils/auth";
+
+export default {
+  components: { Editor, Upload },
+  props: ["curQue", "fn_data", "changeCurQue"],
+  data() {
+    return {
+      init: {
+        language_url: `/tinymce/langs/zh_CN.js`,
+        language: "zh_CN",
+        skin_url: "/tinymce/skins/ui/oxide",
+        height: 500,
+        plugins: "link lists image code table wordcount  preview",
+        toolbar:
+          "preview bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat",
+        branding: false,
+      }, //富文本初始化
+      data_structure: {
+        type: "tinydemo",
+        name: "富文本",
+        title: "",
+        con: "",
+        img_list: [],
+      },
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    copyHttp(id) {
+      CopyToClipboard(id, this);
+    },
+    changeImage(fileList, item, index) {
+      console.log(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: "[FID##" + item.response.file_info_list[0].file_id + "##FID]",
+          };
+          articleImgRes.push(obj);
+        }
+      });
+      this.curQue.img_list = JSON.parse(JSON.stringify(articleImgRes));
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    if (!this.curQue) {
+      this.changeCurQue(this.data_structure);
+    }
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    tinymce.init({});
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+.Big-Book-Record {
+  &-icon {
+    width: 48px;
+    height: 48px;
+  }
+  .Big-Book-hanzi-option {
+    margin-top: 20px;
+  }
+  .main {
+    margin-top: 10px;
+  }
+  .addoption {
+    width: 148px;
+    height: 40px;
+    background: #f3f3f3;
+    border: 1px dashed rgba(0, 0, 0, 0.15);
+    box-sizing: border-box;
+    border-radius: 4px;
+    text-align: center;
+    line-height: 40px;
+    cursor: pointer;
+    font-size: 14px;
+    color: #000000;
+  }
+  .Big-Book-con {
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+  }
+  .uploadArt_list {
+    > li {
+      min-height: 28px;
+      .art_name {
+        margin-right: 10px;
+      }
+    }
+  }
+}
+</style>

+ 2 - 3
src/components/Adult/inputModules/UploadControl.vue

@@ -81,9 +81,9 @@ export default {
       this.$message.success("删除成功");
     },
     changeFillId(fileList, item, index) {
-      this.curQue.fileList =JSON.parse(JSON.stringify(fileList));
+      this.curQue.fileList = JSON.parse(JSON.stringify(fileList));
       this.curQue.data = fileList[0].response.file_info_list[0];
-      if (fileList[0].name.indexOf("pdf" != -1)) {
+      if (this.curQue.data.file_name.indexOf("pdf") != -1) {
         this.curQue.data.fileRelativePath =
           process.env.VUE_APP_BASE_API + this.curQue.data.file_relative_path;
         this.getNumPages();
@@ -123,7 +123,6 @@ export default {
   created() {
     if (!this.curQue) {
       this.initcurQue();
-    } else {
     }
   },
   //生命周期 - 挂载完成(可以访问DOM元素)

+ 30 - 6
src/utils/auth.js

@@ -3,27 +3,51 @@ import Cookies from 'js-cookie'
 const TokenKey = 'GCLS_Token'
 
 export function getToken() {
-  return Cookies.get(TokenKey)
+    return Cookies.get(TokenKey)
 }
 
 export function setToken(token) {
-  return Cookies.set(TokenKey, token)
+    return Cookies.set(TokenKey, token)
 }
 
 export function removeToken() {
-  return Cookies.remove(TokenKey)
+    return Cookies.remove(TokenKey)
 }
 
 const ConfigKey = 'GCLS_Config'
 
 export function getConfig() {
-  return Cookies.get(ConfigKey)
+    return Cookies.get(ConfigKey)
 }
 
 export function setConfig(val) {
-  return Cookies.set(ConfigKey, val)
+    return Cookies.set(ConfigKey, val)
 }
 
 export function removeConfig() {
-  return Cookies.remove(ConfigKey)
+    return Cookies.remove(ConfigKey)
+}
+export function CopyToClipboard(element, root) {
+    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");
+    root.$message({
+        message: "复制成功",
+        type: "success",
+    });
+    window.getSelection().removeAllRanges();
 }

Diferenças do arquivo suprimidas por serem muito extensas
+ 535 - 510
src/views/adultInput.vue


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff