natasha il y a 1 an
Parent
commit
e39fd550f6

+ 2 - 2
src/components/Header.vue

@@ -51,7 +51,7 @@ export default {
   methods: {
     // 切换登录的注册
     cutLoginReg() {
-      window.location.href = "https://"+window.location.host+"/21st_manager/";
+      window.location.href = window.location.href.substring(0,window.location.href.indexOf('/#/'));
     },
     QuitLogin() {
       removeToken();
@@ -62,7 +62,7 @@ export default {
       Cookies.remove("user_type");
       sessionStorage.removeItem("useragent_root_close");
       this.userMessage = null;
-      window.location.href = "https://"+window.location.host+"/21st_manager/#/login";
+      window.location.href = window.location.href.substring(0,window.location.href.indexOf('/#/'))+"/#/login";
     },
     handleLink(link,type){
         this.$router.push({

+ 8 - 0
src/components/NavMenu.vue

@@ -169,6 +169,14 @@ export default {
                     {
                         title:'分享路径',
                         index:'share_setting',
+                    },
+                    {
+                        title:'订阅价格管理',
+                        index:'order_setting',
+                    },
+                    {
+                        title:'支付配置',
+                        index:'pay_setting',
                     }
                 ]
             }

+ 3 - 0
src/icons/svg/star-filled.svg

@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7.59658 1.81764C7.76165 1.48318 8.23858 1.48318 8.40364 1.81764L10.2043 5.46619L14.2307 6.05126C14.5998 6.10489 14.7472 6.55848 14.4801 6.81882L11.5666 9.65881L12.2544 13.6689C12.3174 14.0366 11.9316 14.3169 11.6014 14.1433L8.00011 12.25L4.39879 14.1433C4.06865 14.3169 3.68281 14.0366 3.74586 13.669L4.43365 9.65881L1.52012 6.81882C1.25303 6.55848 1.40041 6.10489 1.76951 6.05126L5.79592 5.46619L7.59658 1.81764Z" fill="currentColor"/>
+</svg>

+ 5 - 0
src/router/index.js

@@ -135,6 +135,11 @@ export const constantRoutes = [{
             import ('@/views/system_config/ShareSetting.vue')
     },
     {
+        path: '/pay_setting',
+        component: () =>
+            import ('@/views/system_config/PaySetting.vue')
+    },
+    {
         path: '/personal',
         component: () =>
             import ('@/views/personal.vue')

+ 5 - 0
src/store/index.js

@@ -55,6 +55,11 @@ const store = new Vuex.Store({
                 text: '已上架',
                 bg: '#00B42A',
                 color: ''
+            },
+            9: {
+                text: '待校对',
+                bg: '#00B42A',
+                color: ''
             }
         },
         file_preview_url: 'https://docpreview.utschool.cn',

+ 20 - 18
src/styles/index.scss

@@ -263,25 +263,27 @@ div:focus {
     td.el-table__cell {
         border-bottom: 1px solid #E5E6EB;
     }
-    .primary-btn {
-        font-size: 14px;
-        color: #165DFF;
-        &:hover {
-            color: #4080FF;
-        }
-        &:focus {
-            color: #0E42D2;
-        }
+}
+
+.primary-btn {
+    font-size: 14px;
+    color: #165DFF;
+    &:hover {
+        color: #4080FF;
     }
-    .red-btn {
-        font-size: 14px;
-        color: #F53F3F;
-        &:hover {
-            color: #F76560;
-        }
-        &:focus {
-            color: #CB2634;
-        }
+    &:focus {
+        color: #0E42D2;
+    }
+}
+
+.red-btn {
+    font-size: 14px;
+    color: #F53F3F;
+    &:hover {
+        color: #F76560;
+    }
+    &:focus {
+        color: #CB2634;
     }
 }
 

+ 1 - 1
src/utils/request.js

@@ -75,7 +75,7 @@ service.interceptors.response.use(
             if (process.env.NODE_ENV === 'development') {
                 router.push(`/login`)
             } else {
-                window.location.href = "https://" + window.location.host + "/21st_manager/#/login";
+                window.location.href = window.location.href.substring(0, window.location.href.indexOf('/#/')) + "/#/login";
             }
             return false
         } else {

+ 124 - 6
src/views/content_manage/newspaper_manage/CreateArticle.vue

@@ -51,13 +51,14 @@
                 ></el-input> -->
                 <el-form :model="articleRecourseForm" ref="articleResourceForm" label-width="80px" class="registerForm" style="margin-top:16px">
                     <el-form-item label="生词" prop="newWordList">
-                        <el-button type="primary" size="small" plain class="add-btn"><i class="el-icon-plus"></i> 添加生词</el-button>
+                        <el-button type="primary" size="small" plain class="add-btn" @click="handleAddWords()"><i class="el-icon-plus"></i> 添加生词</el-button>
                     </el-form-item>
+                    <new-word-list :list="wordLit" :colorObj="colorObj" @handleAddWords="handleAddWords"></new-word-list>
                     <el-form-item label="短语" prop="newWordList">
                         <el-button type="primary" size="small" plain class="add-btn"><i class="el-icon-plus"></i> 添加短语</el-button>
                     </el-form-item>
                     <el-form-item label="注释" prop="newWordList">
-                        <el-button type="primary" size="small" plain class="add-btn"><i class="el-icon-plus"></i> 添加注释</el-button>
+                        <el-button type="primary" size="small" plain class="add-btn" @click="handleAddExplain()"><i class="el-icon-plus"></i> 添加注释</el-button>
                     </el-form-item>
                     <el-form-item label="图片" prop="pictureList">
                             <upload :datafileList="articleRecourseForm.pictureList" :changeFillId="handleAvatarSuccess" :uploadType="'image'" :fileName="'pictureList'" :filleNumber="99" tips="支持上传jpg、png格式图片,单张大小不超过2mb" :showList="true" />
@@ -114,6 +115,16 @@
           height="600px"
         ></iframe>
     </el-dialog>
+    <el-dialog
+        :visible.sync="newWordFlag"
+        :show-close="false"
+        :close-on-click-modal="false"
+        :modal-append-to-body="false"
+        width="1200px"
+        class="login-dialog"
+        v-if="newWordFlag">
+        <new-words @closeDialog="closeDialog" :itemData="newWordObj" :articleId="id||articleId" :vlInfo="vlInfo" :sentenceList="sentenceList"></new-words>
+    </el-dialog>
   </div>
 </template>
 
@@ -150,10 +161,12 @@ import Upload from "../../../components/Upload.vue"
 const Base64 = require("js-base64").Base64;
 import { mapState } from 'vuex';
 import { getToken } from '@/utils/auth'
+import NewWords from "./NewWords.vue"
+import NewWordList from './components/NewWordList.vue';
 
 export default {
   //import引入的组件需要注入到对象中才能使用
-  components: { Header, Breadcrumb, Editor, Upload },
+  components: { Header, Breadcrumb, Editor, Upload, NewWords, NewWordList },
   props: {},
   data() {
     //这里存放数据
@@ -236,7 +249,56 @@ export default {
         resourceUrl: '', // 课节资源预览地址
         resourceFlag: false,
         vlInfo: null, // 词表信息
-        articleId: null
+        sentenceList: [], // 句子信息
+        articleId: null,
+        newWordFlag: false, // 添加生词flag
+        newWordObj: null, // 生词obj
+        explainObj: null,
+        explainFlag: false,
+        pharseObj: null,
+        pharseFlag: false,
+        colorObj: {
+            type:'white',
+            contentBg:'#F2F3F5',
+            contentInnerBg:'#FFFFFF',
+            navBg:'#FFFFFF',
+            border:'#E5E6EB',
+            bg:'#FFFFFF',
+            border_active:'#3459D2',
+            boxBorder:'#E5E6EB',
+            titleColor:'#1F2C5C',
+            sourceColor:'#929CA8',
+            contentColor:'#2F3742',
+            btnColor:'#3459D2',
+            glossaryTitle:'#2F3742',
+            glossarySubtitle:'#4E5969',
+            glossaryBg:'#F7F8FA',
+            newWordColor:'#175DFF',
+            newWordOtherColor:'#667180',
+            newWordStar:'#FFB224',
+            newWordType:{
+                'daochu':{
+                    text:'导出',
+                    color:'#F5319D',
+                    bg:'#FFE8F1'
+                },
+                'xuanbi':{
+                    text:'选必',
+                    color:'#175DFF',
+                    bg:'#D9E2FC'
+                }
+            },
+            phraseColor:'#ED5F00',
+            phraseOhterColor:'#2F3742',
+            annotationTitle:'#4E5969',
+            annotationOhter:'#667180',
+            statisticTitle:'#2F3742',
+            statisticValue:'#3459D2',
+            menuBg:'#EEF3FF',
+            audiobg:'#FFFFFF',
+            audioBorder:'#EBEBEB'
+        },
+        wordLit:[]
     }
   },
   //计算属性 类似于data概念
@@ -303,7 +365,19 @@ export default {
                 .then((res) => {
                     if(res.status===1){
                         if(flag){
-                            this.articleId = res.data.id
+                            this.articleId = res.data.art.id
+                            this.vlInfo = res.data.vl.levelList
+                            this.sentenceList = res.data.art.art_corpus_data?res.data.art.art_corpus_data.sentList:[]
+                            if(flag==='newWord'){
+                                this.newWordObj = null
+                                this.newWordFlag = true
+                            }else if(flag === 'pharse'){
+                                this.pharseObj = null
+                                this.pharseFlag = true
+                            }else if(flag === 'explain'){
+                                this.explainObj = null
+                                this.explainFlag = true
+                            }
                         }else{
                             this.$message.success('文章保存成功')
                             this.$router.go(-1)
@@ -432,7 +506,8 @@ export default {
         .then((res) => {
             if(res.status===1){
                 this.articleForm = JSON.parse(JSON.stringify(res.data.art))
-                this.vlInfo = res.data.vl
+                this.vlInfo = res.data.vl.levelList
+                this.sentenceList = res.data.art.art_corpus_data?res.data.art.art_corpus_data.sentList:[]
                 this.articleForm.articleEn = JSON.parse(JSON.stringify(res.data.art)).art_org_content
                 if(res.data.art.art_sounds&&res.data.art.art_sounds.length>0){
                     this.articleForm.articleMp3_id = res.data.art.art_sounds[0]
@@ -464,12 +539,55 @@ export default {
                         })
                     })
                 }
+                if(res.data.art.art_voc_data&&res.data.art.art_voc_data.length>0){
+                    this.wordLit = []
+                    res.data.art.art_voc_data.forEach(items=>{
+                        let obj = {
+                            src: items.ph_file_url,
+                            word: items.word_name,
+                            symbol: items.word_explain.ph,
+                            paraList: items.word_explain.word_para_list,
+                            type: items.word_explain.vl_level,
+                            typeCn: items.word_explain.vl_level_name,
+                            rate: items.word_explain.star,
+                            originalObj: items
+                        }
+                        this.wordLit.push(obj)
+                    })
+                }
                 this.subtitleLoading = false
             }
         }).catch(()=>{
             this.subtitleLoading = false
         })
     },
+    // 添加生词
+    handleAddWords(obj){
+        if(obj){
+            this.newWordObj = obj.originalObj
+            this.newWordFlag = true
+        }else{
+            if(this.id||this.articleId){
+                this.newWordObj = null
+                this.newWordFlag = true
+            }else{
+                this.handleSaveArticle('articleForm','newWord')
+            }
+        }
+    },
+    // 添加注释
+    handleAddExplain(obj){
+        if(obj){
+            this.newWordObj = obj
+        }else{
+            this.newWordObj = null
+        }
+        this.newWordFlag = true
+    },
+    closeDialog(flag){
+        this[flag] = false
+        this.getArticleInfo()
+    },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {

+ 84 - 29
src/views/content_manage/newspaper_manage/CreateNewspaper.vue

@@ -611,14 +611,28 @@ export default {
                 window.localStorage.removeItem('newsStep')
                 this.issueId = res.data.id
                 this.stepIndex++
-                let chn_art_data = JSON.parse(JSON.stringify(res.data.chn_art_data))
-                chn_art_data.forEach((item,index)=>{
-                    if(index===0){
-                        item.show = true
-                    }else{
-                        item.show = false
-                    }
-                })
+                let chn_art_data = []
+                if(res.data.chn_art_data){
+                    chn_art_data = JSON.parse(JSON.stringify(res.data.chn_art_data))
+                    chn_art_data.forEach((item,index)=>{
+                        if(index===0){
+                            item.show = true
+                        }else{
+                            item.show = false
+                        }
+                    })
+                }else{
+                    JSON.parse(res.data.chn_data).forEach((itemc,index)=>{
+                        let obj = {
+                            chn_name: itemc,
+                            edit_name: itemc,
+                            arts: [],
+                            show: index===0?true:false
+                        }
+                        chn_art_data.push(obj)
+                    })
+                }
+                
                 this.issueChannel = {
                     chn_count: res.data.chn_count,
                     art_count: res.data.art_count,
@@ -661,14 +675,27 @@ export default {
                 window.localStorage.removeItem('newsForm')
                 window.localStorage.removeItem('newsStep')
                 this.stepIndex++
-                let chn_art_data = JSON.parse(JSON.stringify(res.data.chn_art_data))
-                chn_art_data.forEach((item,index)=>{
-                    if(index===0){
-                        item.show = true
-                    }else{
-                        item.show = false
-                    }
-                })
+                let chn_art_data = []
+                if(res.data.chn_art_data){
+                    chn_art_data = JSON.parse(JSON.stringify(res.data.chn_art_data))
+                    chn_art_data.forEach((item,index)=>{
+                        if(index===0){
+                            item.show = true
+                        }else{
+                            item.show = false
+                        }
+                    })
+                }else{
+                    JSON.parse(res.data.chn_data).forEach((itemc,index)=>{
+                        let obj = {
+                            chn_name: itemc,
+                            edit_name: itemc,
+                            arts: [],
+                            show: index===0?true:false
+                        }
+                        chn_art_data.push(obj)
+                    })
+                }
                 this.issueChannel = {
                     chn_count: res.data.chn_count,
                     art_count: res.data.art_count,
@@ -724,19 +751,47 @@ export default {
                 }else{
                     this.$set(this.newspaperForm,'has_discount_addon',1)
                 }
-                let chn_art_data = JSON.parse(JSON.stringify(res.data.chn_art_data))
-                chn_art_data.forEach((item,index)=>{
-                    if(!item.hasOwnProperty('arts')){
-                        this.$set(item,'arts',[])
-                    }
-                    item.editFlag = false
-                    item.edit_name = item.chn_name
-                    if(index===0){
-                        item.show = this.issueChannel&&this.issueChannel.chn_art_data&&this.issueChannel.chn_art_data[index]?this.issueChannel.chn_art_data[index].show:true
-                    }else{
-                        item.show = this.issueChannel&&this.issueChannel.chn_art_data&&this.issueChannel.chn_art_data[index]?this.issueChannel.chn_art_data[index].show:false
-                    }
-                })
+                // let chn_art_data = JSON.parse(JSON.stringify(res.data.chn_art_data))
+                // chn_art_data.forEach((item,index)=>{
+                //     if(!item.hasOwnProperty('arts')){
+                //         this.$set(item,'arts',[])
+                //     }
+                //     item.editFlag = false
+                //     item.edit_name = item.chn_name
+                //     if(index===0){
+                //         item.show = this.issueChannel&&this.issueChannel.chn_art_data&&this.issueChannel.chn_art_data[index]?this.issueChannel.chn_art_data[index].show:true
+                //     }else{
+                //         item.show = this.issueChannel&&this.issueChannel.chn_art_data&&this.issueChannel.chn_art_data[index]?this.issueChannel.chn_art_data[index].show:false
+                //     }
+                // })
+                let chn_art_data = []
+                if(res.data.chn_art_data){
+                    chn_art_data = JSON.parse(JSON.stringify(res.data.chn_art_data))
+                    chn_art_data.forEach((item,index)=>{
+                        if(!item.hasOwnProperty('arts')){
+                            this.$set(item,'arts',[])
+                        }
+                        item.editFlag = false
+                        item.edit_name = item.chn_name
+                        if(index===0){
+                            item.show = this.issueChannel&&this.issueChannel.chn_art_data&&this.issueChannel.chn_art_data[index]?this.issueChannel.chn_art_data[index].show:true
+                        }else{
+                            item.show = this.issueChannel&&this.issueChannel.chn_art_data&&this.issueChannel.chn_art_data[index]?this.issueChannel.chn_art_data[index].show:false
+                        }
+                    })
+                }else{
+                    JSON.parse(res.data.chn_data).forEach((itemc,index)=>{
+                        if(itemc){
+                            let obj = {
+                                chn_name: itemc,
+                                edit_name: itemc,
+                                arts: [],
+                                show: index===0?true:false
+                            }
+                            chn_art_data.push(obj)
+                        }
+                    })
+                }
                 this.issueChannel = {
                     chn_count: res.data.chn_count,
                     art_count: res.data.art_count,

+ 644 - 0
src/views/content_manage/newspaper_manage/NewWords.vue

@@ -0,0 +1,644 @@
+<template>
+  <div class="new-word-add">
+    <div class="new-word-add-top">
+        <h5>{{itemData?'编辑生词':'添加生词'}}</h5>
+        <div class="btn-box">
+            <el-button type="primary" size="small" @click="handleSave('newWordFlag')" :loading="loading">保存</el-button>
+            <el-button size="small" @click="onCancel('newWordFlag')">取消</el-button>
+        </div>
+    </div>
+    <div class="new-word-add-bottom">
+        <div class="new-word-add-bottom-left">
+            <el-form :model="data" :rules="dataRules" ref="articleForm" label-width="100px" class="registerForm">
+                <el-form-item label="词头" prop="word_name">
+                    <el-input v-model="data.word_name" autocomplete="off" placeholder="请输入词头" @blur="searchWordInfo" >
+                    </el-input>
+                </el-form-item>
+                <el-form-item label="类别" prop="vl_level">
+                    <el-radio-group v-model="data.vl_level" class="level-box" @input="changeLevel">
+                        <el-radio v-for="item in vlInfo" :key="item.id" :label="item.id">{{item.cn}}</el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item label="音标" prop="ph">
+                    <el-input v-model="data.ph" autocomplete="off" placeholder="请输入音标" @blur="handleTrim('data','ph')" >
+                    </el-input>
+                </el-form-item>
+                <el-form-item label="发音">
+                    <div class="voice-box">
+                        <el-button type="primary" size="small" @click="searchWordInfo()" :loading="searchLoading">自动匹配</el-button>
+                        <upload :datafileList="data.ph_mp3" :changeFillId="handleAvatarSuccess" :fileName="'ph_mp3'" uploadType="mp3" tips=' ' :filleNumber="1" :showList="true" class="voice-upload" />
+                        <p class="error-tips" v-if="!matchFlag"><svg-icon icon-class="error-warning-line"></svg-icon>匹配失败</p>
+                    </div>
+                    <ul v-if="data.ph_mp3&&data.ph_mp3.length>0" class="resource-list">
+                        <li v-for="(itemR,indexR) in data.ph_mp3" :key="indexR">
+                            <a @click="PlayAudio">
+                                <svg-icon icon-class="mp3" class="icon-logo"></svg-icon><span>{{itemR.name}}</span>
+                                <i class="el-icon-loading" v-if="audio.loading"></i>
+                                <svg-icon v-if="audio.playing&&!audio.loading" icon-class="pause" className="icon-svg"></svg-icon>
+                                <svg-icon v-if="!audio.playing&&!audio.loading" icon-class="play" className="icon-svg"></svg-icon>
+                                <audio
+                                    id="createRecorded"
+                                    ref="createRecorded"
+                                    :src="data.ph_file_url"
+                                    preload="metadata"
+                                />
+                            </a>
+                            <i class="el-icon-delete" @click="handleDelCourseResource()"></i>
+                        </li>
+                    </ul>
+                </el-form-item>
+                <el-form-item label="星级" prop="star">
+                    <el-rate v-model="data.star"></el-rate>
+                </el-form-item>
+                <el-divider></el-divider>
+                <div v-for="(item,index) in data.word_para_list" :key="'cixing'+index" class="para-list">
+                    <el-form-item label="词性" :prop="'word_para_list.'+index+'.cixing'" 
+                        :rules="{
+                            required: true, message: '词性不能为空', trigger: 'change'
+                        }">
+                        <el-radio-group v-model="item.cixing" class="level-box">
+                            <el-radio v-for="item in cixingList" :key="item.value" :label="item.label"></el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                    <el-form-item label="释义" :prop="'word_para_list.'+index+'.para'" 
+                        :rules="{
+                            required: true, message: '释义不能为空', trigger: 'blur'
+                        }">
+                        <el-input type="textarea" v-model="item.para" placeholder="请输入" maxlength="100" :rows="4" show-word-limit></el-input>
+                    </el-form-item>
+                    <i class="el-icon-delete" @click="handleDelPara(index)"></i>
+                </div>
+                <el-divider></el-divider>
+                <el-form-item>
+                    <el-button type="primary" size="small" plain class="add-btn" @click="handleAddPara()"><i class="el-icon-plus"></i> 增加词性释义</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+        <div class="new-word-add-bottom-right">
+            <div class="sentence-config">
+                <el-input v-model="data.btStr" placeholder="请输入词头本体变体信息,用/隔开"></el-input>
+                <el-button type="primary" size="small" @click="handleSentence">匹配句子</el-button>
+                <el-button type="primary" size="small" @click="handleSave('newWordFlag')"><i class="el-icon-plus"></i>添加句子</el-button>
+            </div>
+            <div class="channel-item" v-for="(item,index) in data.bind_sents" :key="index">
+                <div class="channel-top">
+                    <i class="el-icon-caret-bottom" v-if="item.show" @click="handleChangeStatus(item)"></i>
+                    <i class="el-icon-caret-top" v-else  @click="handleChangeStatus(item)"></i>
+                    <div class="channel-top-name">
+                        {{(index+1)+'. '+item.text}}
+                    </div>
+                    <i class="el-icon-delete" @click="handleDeleteSents(index)"></i>
+                </div>
+                <el-collapse-transition>
+                    <template v-if="item.show">
+                        <div class="channel-bottom">
+                            <p>匹配结果</p>
+                            <ul>
+                                <li v-for="(itent,indext) in item.tokens" :key="indext" :class="[item.highIndexArr.indexOf(indext)>-1?'active':'']" @click="handleHighIndex(item,indext)">
+                                    {{itent[2]}}
+                                </li>
+                            </ul>
+                        </div>
+                    </template>
+                </el-collapse-transition>
+            </div>
+        </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getLogin } from "@/api/ajax";
+import Upload from "../../../components/Upload.vue"
+export default {
+  components: {Upload},
+  name: "newwordstemplate",
+  props: ["itemData","articleId","vlInfo", "sentenceList"],
+  data() {
+    return {
+      data: {
+        word_name: '', // 词头
+        vl_level: null, // 类别
+        vl_level_name:'',
+        ph: '', // 音标
+        ph_mp3: [], // 发音数组
+        ph_mp3_id: '', // 发音文件id
+        ph_file_url: '', // 发音url
+        star: null, // 星级
+        word_para_list: [
+            {
+                cixing: '',
+                para: ''
+            }
+        ],
+        bind_sents: [],
+        btStr: '', // 本体变体字符串
+      },
+      loading: false,
+      dataRules: {
+        word_name: [
+            { required: true, message: '请输入词头', trigger: 'blur' }
+        ],
+        vl_level: [
+            { required: true, message: '请选择类别', trigger: 'change' }
+        ],
+      },
+      searchLoading: false,
+      player: null,
+      audio: {
+        // 该字段是音频是否处于播放状态的属性
+        playing: false,
+        loading: false,
+        playbackRate: 1,
+        volume: 100
+      },
+      cixingList:[
+        {
+            label:'n.',
+            value: 'n.'
+        },
+        {
+            label:'v.',
+            value: 'v.'
+        },
+        {
+            label:'adj.',
+            value: 'adj.'
+        },
+        {
+            label:'adv.',
+            value: 'adv.'
+        },
+        {
+            label:'prep.',
+            value: 'prep.'
+        },
+        {
+            label:'pron.',
+            value: 'pron.'
+        },
+        {
+            label:'conj.',
+            value: 'conj.'
+        },
+        {
+            label:'其他',
+            value: 'other'
+        }
+      ],
+      matchFlag: true,
+    };
+  },
+  watch: {},
+  computed: {
+  },
+  methods: {
+    handleSave(flag){
+        this.$refs['articleForm'].validate((valid) => {
+            if (valid) {
+                this.loading = true
+                let MethodName = '/PaperServer/Manager/ArticleManager/AddNewWordInArt'
+                let data = {
+                    art_id: this.articleId,
+                    word_name: this.data.word_name,
+                    word_explain: this.data,
+                    bind_sent_data: {
+                        bind_sents: this.data.bind_sents
+                    }
+                }
+                if(this.itemData){
+                    MethodName = '/PaperServer/Manager/ArticleManager/EditNewWordInArt'
+                    data.id = this.itemData.id
+                }
+                getLogin(MethodName, data)
+                .then((res) => {
+                    if(res.status===1){
+                        this.loading = false
+                        this.$message.success('保存成功')
+                        this.$emit('closeDialog',flag)
+                    }
+                }).catch(()=>{
+                    this.loading = false
+                })
+                
+            }else {
+                return false;
+            }
+        });
+    },
+    changeLevel(val){
+        this.vlInfo.forEach(item=>{
+            if(item.id===val){
+                this.vl_level_name = item.cn
+            }
+        })
+    },
+    handleHighIndex(item,index){
+        if(item.highIndexArr.indexOf(index)>-1){
+            item.highIndexArr.splice(item.highIndexArr.indexOf(index),1)
+        }else{
+            item.highIndexArr.push(index)
+        }
+        this.$forceUpdate()
+    },
+    handleChangeStatus(item){
+        item.show = !item.show
+        this.$forceUpdate()
+    },
+    handleAvatarSuccess(fileList,name) {
+        this.data.ph_mp3 = fileList
+        this.data.ph_mp3_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
+        this.data.ph_file_url = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
+        this.audio = {
+            // 该字段是音频是否处于播放状态的属性
+            playing: false,
+            loading: false,
+            playbackRate: 1,
+            volume: 100
+        }
+        setTimeout(() => {
+            this.handleLoadAudio()
+        }, 500);
+        this.$forceUpdate()
+    },
+    onCancel(flag){
+        this.$emit('closeDialog',flag)
+    },
+    // 去掉前后空格
+    handleTrim(form,fild){
+        this[form][fild] = this[form][fild].trim()
+    },
+    // 查找单词信息
+    searchWordInfo(){
+        this.data.word_name = this.data.word_name.trim()
+        if(this.data.word_name){
+            this.searchLoading = true
+            let MethodName = '/PaperServer/Manager/ArticleManager/QueryWordInfoInArt'
+            let data = {
+                art_id: this.articleId,
+                word: this.data.word_name
+            }
+            getLogin(MethodName, data)
+            .then((res) => {
+                this.searchLoading = false
+                if(res.status===1){
+                    this.matchFlag = true
+                    if(res.data.vl_level){
+                        this.data.vl_level = res.data.vl_level.id
+                        this.data.vl_level_name = res.data.vl_level.cn
+                    }
+                    let list = res.data.dict_info?res.data.dict_info:[]
+                    for(let i = 0; i < list.length; i++){
+                        if(list[i].word_name === this.data.word_name){
+                            if(list[i].symbols&&list[i].symbols.length>0){
+                                this.data.ph = '/' + (list[i].symbols[0].ph_am || list[i].symbols[0].ph_en || list[i].symbols[0].ph_other) + '/'
+                                if(list[i].symbols[0].ph_am_mp3||list[i].symbols[0].ph_en_mp3||list[i].symbols[0].ph_tts_mp3){
+                                    this.data.ph_mp3 = [{
+                                        name: this.data.word_name + '.mp3'
+                                    }]
+                                    this.data.ph_file_url = list[i].symbols[0].ph_am_mp3||list[i].symbols[0].ph_en_mp3||list[i].symbols[0].ph_tts_mp3
+                                    this.data.ph_mp3_id = ''
+                                }
+                                this.audio = {
+                                    // 该字段是音频是否处于播放状态的属性
+                                    playing: false,
+                                    loading: false,
+                                    playbackRate: 1,
+                                    volume: 100
+                                }
+                                setTimeout(() => {
+                                    this.handleLoadAudio()
+                                }, 500);
+                            }
+                        }
+                    }
+                    this.data.star = res.data.star?res.data.star:null
+                    this.data.btStr = this.data.word_name
+                    this.handleSentence()
+                }   
+            }).catch(()=>{
+                this.matchFlag = false
+                this.searchLoading = false
+            })
+        }
+    },
+    // 匹配句子
+    handleSentence(){
+        let _this = this
+        let searchSentence = []
+        let wordArr = this.data.btStr.split('/')
+        wordArr.forEach(itemw=>{
+            for(let i = 0; i < _this.sentenceList.length; i++){
+                let items = _this.sentenceList[i]
+                if(items.tokens){
+                    for(let j=0; j<items.tokens.length; j++){
+                        let itemt = items.tokens[j]
+                        if(itemt[2]===itemw){
+                            let highIndexArr = []
+                            items.tokens.forEach((itemss,index)=>{
+                                if(itemss[2]===itemw){
+                                    highIndexArr.push(index)
+                                }
+                            })
+                            items.highIndexArr = highIndexArr
+                            this.$set(items,'show',searchSentence.length===0?true:false)
+                            searchSentence.push(items)
+                            break
+                        }
+                    }
+                }
+            }
+        })
+        this.data.bind_sents = searchSentence
+    },
+    handleDeleteSents(index){
+        this.data.bind_sents.splice(index,1)
+    },
+    // 删除课程视频/音频
+    handleDelCourseResource(){
+        this.data.ph_mp3 = []
+        this.data.ph_mp3_id = ''
+        this.data.ph_file_url = ''
+        if(this.player) this.player.destroy()
+        this.audio = {
+            // 该字段是音频是否处于播放状态的属性
+            playing: false,
+            loading: false,
+            playbackRate: 1,
+            volume: 100
+        }
+    },
+    // 加载音频
+    handleLoadAudio(){
+        let _this = this;
+        let audio = document.getElementsByTagName("audio");
+        audio[0].addEventListener("play", function () {
+            _this.audio.playing = true;
+            _this.audio.loading = false;
+        });
+        audio[0].addEventListener("pause", function () {
+            _this.audio.playing = false;
+        });
+        audio[0].addEventListener("ended", function () {
+            _this.audio.playing = false;
+        });
+    },
+    PlayAudio() {
+      let audio = document.getElementsByTagName("audio");
+      if (this.audio.playing) {
+        audio[0].pause();
+        this.audio.playing = false;
+      } else {
+        audio[0].play();
+        this.audio.playing = true;
+      }
+    },
+    handleAddPara(){
+        if(this.data.word_para_list[this.data.word_para_list.length-1].cixing&&this.data.word_para_list[this.data.word_para_list.length-1].para){
+            this.data.word_para_list.push({
+                cixing: '',
+                para: ''
+            })
+        }else{
+            this.$message.warning('请填写完整')
+        }
+    },
+    handleDelPara(index){
+        if(this.data.word_para_list.length>1){
+            this.data.word_para_list.splice(index,1)
+        }else{
+            this.$message.warning('至少保留一个词性释义')
+        }
+    }
+  },
+  created() {
+    if(this.itemData){
+        let data = JSON.parse(JSON.stringify(this.itemData))
+        this.data = data.word_explain
+    }
+  },
+  mounted() {
+  },
+  beforeDestroy() {
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.new-word-add{
+    &-top{
+        display: flex;
+        border-bottom: 1px solid #E5E6EB;
+        padding: 16px 24px;
+        justify-content: space-between;
+        align-items: center;
+        h5{
+            margin: 0;
+            color: #1D2129;
+            font-size: 20px;
+            font-weight: 500;
+            line-height: 28px;
+        }
+    }
+}
+.new-word-add-bottom{
+    display: flex;
+    &-left{
+        width: 504px;
+        padding: 40px 0;
+        border-right: 1px solid #E5E6EB;
+    }
+    &-right{
+        width: 695px;
+        padding: 32px 48px;
+        .sentence-config{
+            .el-input{
+                margin-right: 10px;
+            }
+        }
+    }
+}
+.level-box{
+    .el-radio{
+        padding: 5px 0 8px 0;
+        line-height: 22px;
+    }
+}
+.voice-box{
+    display: flex;
+    >button{
+        margin-top: 2px;
+    }
+    .voice-upload{
+        margin-left: 8px;
+        height: 32px;
+        width: 90px;
+    }
+    .error-tips{
+        font-size: 14px;
+        font-weight: 500;
+        line-height: 34px;
+        color: #F53F3F;
+        margin: 0;
+        .svg-icon{
+            width: 12px;
+            height: 12px;
+            margin-right: 4px;
+        }
+    }
+}
+.resource-list{
+    list-style: none;
+    margin: 12px 0 0 0;
+    padding: 0;
+    li{
+        display: flex;
+        align-items: center;
+        a{
+            width: 360px;
+            padding: 7px 12px;
+            background: #F7F8FA;
+            border-radius: 2px;
+            color: #1D2129;
+            display: flex;
+            align-items: center;
+            span{
+                overflow:hidden;
+                text-overflow:ellipsis;
+                white-space: nowrap;
+                flex: 1;
+                display: block;
+                font-size: 14px;
+                line-height: 22px;
+            }
+            .svg-icon{
+                width: 16px;
+                height: 16px;
+                margin-right: 8px;
+                color: #4E5969;
+            }
+        }
+    }
+}
+.el-icon-delete{
+    color: #F53F3F;
+    cursor: pointer;
+    margin-left: 12px;
+    &:hover{
+        color: #F53F3F;
+    }
+}
+.para-list{
+    position: relative;
+    padding-right: 42px;
+    .el-icon-delete{
+        position: absolute;
+        right: 24px;
+        top: 10px;
+    }
+}
+.add-btn{
+    padding: 2px 12px;
+    border-radius: 2px;
+    border: 1px solid #165DFF;
+    color: #165DFF;
+    font-size: 12px;
+    font-weight: 400;
+    line-height: 20px; 
+    background: #FFF;
+    .el-icon-plus{
+        margin-right: 8px;
+    }
+    &:hover{
+        background: #FFF;
+        color: #165DFF;
+    }
+}
+.channel-item{
+        border: 1px solid #E5E6EB;
+        margin: 12px 0;
+        .channel-top{
+            display: flex;
+            padding: 0 12px;
+            height: 42px;
+            align-items: center;
+            .el-icon-caret-bottom,.el-icon-caret-top{
+                color: #4E5969;
+                width: 14px;
+                height: 14px;
+                cursor: pointer;
+            }
+            &-name{
+                margin-left: 6px;
+                flex: 1;
+                color: #1D2129;
+                font-size: 14px;
+                font-weight: 400;
+                line-height: 22px;
+                overflow: hidden;
+                white-space: nowrap;
+                text-overflow: ellipsis;
+            }
+            .el-button--text{
+                padding: 2px 12px;
+                color: #165DFF;
+                .el-icon-plus{
+                    width: 12px;
+                    height: 12px;
+                    margin-right: 8px;
+                    font-weight: bold;
+                }
+            }
+        }
+        .channel-bottom{
+            padding: 24px 40px;
+            border-top: 1px solid #E5E6EB;
+            p{
+                margin: 0 0 4px 0;
+            }
+            ul{
+                list-style: none;
+                padding: 0;
+                margin: 0;
+                display: flex;
+                flex-flow: wrap;
+                li{
+                    color: #000;
+                    font-size: 14px;
+                    font-weight: 400;
+                    line-height: 22px;
+                    padding: 0 4px;
+                    border-radius: 2px;
+                    background: #F2F3F5;
+                    margin: 4px 2px 0 0;
+                    cursor: pointer;
+                    &.active{
+                        background: #175DFF;
+                        color: #FFF;
+                    }
+                }
+            }
+        }
+}
+</style>
+<style lang="scss">
+.new-word-add{
+    .el-rate{
+        padding: 4px 0;
+        .el-rate__item{
+            width: 24px;
+            height: 24px;
+            margin-right: 8px;
+            .el-rate__icon{
+                font-size: 24px;
+            }
+        }
+    }
+    .el-divider{
+        width: 100% !important;
+    }
+    .upload-demo{
+        width: 90px !important;
+    }
+}
+</style>

+ 267 - 0
src/views/content_manage/newspaper_manage/components/NewWordList.vue

@@ -0,0 +1,267 @@
+<template>
+    <div>
+        <ul>
+            <li v-for="(itemW,indexW) in wordList" :key="indexW" :class="['li-'+colorObj.type]">
+                <svg-icon icon-class="voice" className="icon-voice"></svg-icon>
+                <div class="word-info">
+                    <div class="word-info-top">
+                        <b class="word" @click="showWord(itemW)" :style="{color:colorObj.newWordColor}">{{itemW.word}}</b>
+                        <span class="symbol" :style="{color:colorObj.newWordOtherColor}">{{itemW.symbol}}</span>
+                        <span class="star" v-if="itemW.rate">
+                            <svg-icon icon-class="star-filled" v-for="(itemS,indexS) in itemW.rate" :key="indexS" :style="{color:colorObj.newWordStar}"></svg-icon>
+                        </span>
+                        <div class="para-list">
+                            <div class="para" v-for="(itemP,indexP) in itemW.paraList" :key="indexP">
+                                <span class="cixing" :style="{color:colorObj.newWordOtherColor}">{{itemP.cixing}}</span>
+                                <span class="shiyi" :style="{color:colorObj.newWordOtherColor}">{{itemP.para}}</span>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <label class="word-type" :style="{color:colorObj.newWordType[itemW.type]?colorObj.newWordType[itemW.type].color:'',background:colorObj.newWordType[itemW.type]?olorObj.newWordType[itemW.type].bg:''}">{{itemW.typeCn}}</label>
+                <b class="border"></b>
+                <el-button
+                    @click="handleEdit(itemW,indexW)"
+                    type="text"
+                    size="small"
+                    class="primary-btn">
+                    编辑
+                </el-button>
+                <el-button
+                    @click="handleDelete(itemW, indexW)"
+                    type="text"
+                    size="small"
+                    class="red-btn">
+                    删除
+                </el-button>
+            </li>
+        </ul>
+    </div>
+    
+</template>
+
+<script>
+//这里可以导入其它文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》from ‘《组件路径》';
+import { getLogin } from "@/api/ajax";
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  components: {},
+  props: ["list", "colorObj"],
+  data() {
+    //这里存放数据
+    return {
+        wordList: []
+    }
+  },
+  //计算属性 类似于data概念
+  computed: {},
+  //监控data中数据变化
+  watch: {
+     list:{
+      handler(val, oldVal) {
+        const _this = this;
+        if (val) {
+          this.wordList = JSON.parse(JSON.stringify(this.list))
+        }
+      },
+      // 深度观察监听
+      deep: true,
+    },
+  },
+  //方法集合
+  methods: {
+    // 删除
+    handleDelete(item,index){
+        this.$confirm('确定删除吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+           let Mname = "/PaperServer/Manager/ArticleManager/DelNewWordInArt";
+            let data = {
+                id: item.originalObj.id,
+            };
+            getLogin(Mname, data).then(res => {
+                this.$message({
+                    type: 'success',
+                    message: '删除成功!'
+                });
+                this.wordList.splice(index,1)
+            });
+        }).catch(() => {
+               
+        });
+    },
+    handleEdit(item){
+        this.$emit('handleAddWords',item)
+    }
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    this.wordList = JSON.parse(JSON.stringify(this.list))
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+
+  },
+  //生命周期-创建之前
+  beforeCreated() { },
+  //生命周期-挂载之前
+  beforeMount() { },
+  //生命周期-更新之前
+  beforUpdate() { },
+  //生命周期-更新之后
+  updated() { },
+  //生命周期-销毁之前
+  beforeDestory() { },
+  //生命周期-销毁完成
+  destoryed() { },
+  //如果页面有keep-alive缓存功能,这个函数会触发
+  activated() { }
+}
+</script>
+<style lang="scss" scoped>
+/* @import url(); 引入css类 */
+ul{
+    padding: 4px;
+    margin: 0 0 16px 0;
+    border-radius: 4px;
+    background: #F7F8FA;
+    li{
+        padding: 8px;
+        display: flex;
+        margin: 1px 0;
+        border-radius: 4px;
+        &:hover{
+            background: #FFFFFF;
+        }
+        &.li-darkGreen{
+            &:hover{
+                background: #ECEFED;
+            }
+        }
+        &.li-darkBlue{
+            &:hover{
+                background: #4E5969;
+            }
+        }
+        &.li-armyGreen{
+            &:hover{
+                background: #66736D;
+            }
+        }
+        .icon-voice{
+            width: 24px;
+            height: 24px;
+            padding: 4px;
+            color: #4E5969;
+            margin-right: 8px;
+            cursor: pointer;
+        }
+        .xuhao{
+            min-width: 22px;
+            display: block;
+            font-size: 14px;
+            line-height: 22px;
+            color: #2F3742;
+        }
+        .word-info{
+            flex: 1;
+        }
+        .sentence{
+            font-size: 14px;
+            line-height: 22px;
+            color: #2F3742;
+        }
+        .icon-like{
+            // color: #F2555A;
+            width: 24px;
+            height: 24px;
+            padding: 4px;
+            margin: 0 0 0 8px;
+            cursor: pointer;
+            &.active{
+              color: #F2555A;  
+            }
+        }
+        .word-type{
+            padding: 1px 8px;
+            border-radius: 2px;
+            font-weight: 500;
+            font-size: 14px;
+            line-height: 22px;
+            height: 26px;
+        }
+        .el-icon-arrow-right{
+            width: 24px;
+            height: 24px;
+            color: #929CA8;
+            text-align: center;
+            line-height: 24px;
+            cursor: pointer;
+        }
+        .word-info-top{
+            display: flex;
+            .word{
+                font-weight: 700;
+                font-size: 14px;
+                line-height: 22px;
+                color: #175DFF;
+                margin-right: 8px;
+                font-family: 'Arial';
+                cursor: pointer;
+            }
+            .phrase{
+                font-weight: 500;
+                font-size: 14px;
+                line-height: 22px;
+                color: #ED5F00;
+            }
+            .symbol{
+                font-size: 14px;
+                line-height: 22px;
+                color: #4E5969;
+                margin-right: 8px;
+                font-family: 'Arial';
+            }
+            .star{
+                margin-right: 8px;
+                line-height: 20px;
+            }
+            .para-list{
+                flex: 1;
+                .para{
+                    display: flex;
+                    font-size: 14px;
+                    line-height: 22px;
+                    color: #4E5969;
+                    margin-bottom: 4px;
+                    .cixing{
+                        margin-right: 4px;
+                    }
+                }
+            }
+        }
+        .word-info-bottom{
+            font-size: 12px;
+            line-height: 20px;
+            color: #929CA8;
+            margin: 4px 8px 0 0;
+            span{
+                margin-right: 8px;
+            }
+        }
+        .border{
+            margin: 7px 10px;
+            background: #E5E6EB;
+            width: 1px;
+            height: 12px;
+        }
+    }
+}
+.el-button{
+    padding: 0;
+    height: 26px;
+}
+</style>

+ 37 - 3
src/views/content_manage/newspaper_manage/index.vue

@@ -12,6 +12,10 @@
                         <el-button type="primary" size="small" @click="handleEdit()">创建报纸</el-button>
                     </div>
                 </div>
+                <div class="tabs">
+                    <a :class="[tabsIndex===0?'active':'']" @click="handleChangeTabs(0)">已校对 23</a>
+                    <a :class="[tabsIndex===1?'active':'']" @click="handleChangeTabs(1)">待校对 </a>
+                </div>
                 <div class="search-box">
                     <div class="search-item">
                         <label>搜索</label>
@@ -21,7 +25,7 @@
                             <i slot="suffix" class="el-input__icon el-icon-search" @click="getList(1)" style="cursor: pointer;"></i>
                         </el-input>
                     </div>
-                    <div class="search-item">
+                    <div class="search-item" v-if="tabsIndex===0">
                         <label>状态</label>
                         <el-select v-model="searchStatus" @change="getList(1)" placeholder="请选择">
                             <el-option
@@ -286,7 +290,8 @@ export default {
         dataSort: {
             prop:'update_time',
             order: 'descending'
-        }
+        },
+        tabsIndex: 0
     }
   },
   //计算属性 类似于data概念
@@ -305,6 +310,16 @@ export default {
         this.dataSort = dataSort
         this.getList()
     },
+    handleChangeTabs(value){
+        this.tabsIndex = value
+        if(value===1){
+            this.searchStatus = 9
+        }else{
+            this.searchStatus = null
+        }
+        // this.pageNumber = 1
+        this.getList()
+    },
     // 处理学段
     formatterStudy(row){
         let studyCn = ''
@@ -530,7 +545,26 @@ export default {
 </script>
 <style lang="scss" scoped>
 /* @import url(); 引入css类 */
-
+.tabs{
+    display: flex;
+    padding: 16px 0 0 0;
+    a{
+        font-size: 14px;
+        line-height: 22px;
+        color: #4E5969;
+        border-radius: 100px;
+        padding: 5px 16px;
+        margin-right: 12px;
+        &:hover{
+            background: #F2F3F5;
+        }
+        &.active{
+            background: #F2F3F5;
+            font-weight: 500;
+            color: #165DFF;
+        }
+    }
+}
 </style>
 <style lang="scss">
 .organize-manage{

+ 298 - 0
src/views/system_config/PaySetting.vue

@@ -0,0 +1,298 @@
+<template>
+  <div class="manage-root personnel-create">
+    <Header />
+    <div class="manage-root-contain">
+        <nav-menu class="manage-root-contain-left" :activeMenuIndex="activeMenuIndex"></nav-menu>
+        <div class="manage-root-contain-right">
+            <breadcrumb :breadcrumbList="breadcrumbList" class="breadcrumb-box"></breadcrumb>
+            <div class="create-bottom">
+                <h3>支付配置</h3>
+                <el-form :model="registerForm" ref="registerForm" label-width="100px" class="registerForm" label-position="top">
+                    <h6>微信支付:</h6>
+                    <el-form-item label="开发者 ID" prop="app_id">
+                        <el-input v-model="registerForm.wx.app_id" autocomplete="off" placeholder="请输入址" @blur="handleTrim('registerForm','wx','app_id')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="商户 ID" prop="mch_id">
+                        <el-input v-model="registerForm.wx.mch_id" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','wx','mch_id')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="商户 API 安全密钥" prop="api_key">
+                        <el-input v-model="registerForm.wx.api_key" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','wx','api_key')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="终端 IP" prop="spbill_create_ip">
+                        <el-input v-model="registerForm.wx.spbill_create_ip" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','wx','spbill_create_ip')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="安全证书文件" prop="cert_file_List">
+                        <upload :datafileList="registerForm.wx.cert_file_List" :changeFillId="handleAvatarSuccess" :fileName="'courseResource'" :filleNumber="1" :showList="true" />
+                        <ul v-if="registerForm.wx.cert_file_List.length>0" class="resource-list">
+                            <li v-for="(itemR,indexR) in registerForm.wx.cert_file_List" :key="indexR">
+                                <a><span>{{itemR.name}}</span></a>
+                                <i class="el-icon-delete" @click="handleDelResource(indexR)"></i>
+                            </li>
+                        </ul>
+                    </el-form-item>
+                    <el-form-item label="支付通知地址" prop="notify_url">
+                        <el-input v-model="registerForm.wx.notify_url" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','wx','notify_url')" >
+                        </el-input>
+                    </el-form-item>
+                    <h6>支付宝支付:</h6>
+                    <el-form-item label="请求地址" prop="url">
+                        <el-input v-model="registerForm.zfb.url" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','zfb','url')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="商户 appid" prop="app_id">
+                        <el-input v-model="registerForm.zfb.app_id" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','zfb','app_id')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="应用私钥" prop="rsa_private_key">
+                        <el-input v-model="registerForm.zfb.rsa_private_key" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','zfb','rsa_private_key')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="支付宝公钥" prop="alipay_public_key">
+                        <el-input v-model="registerForm.zfb.alipay_public_key" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','zfb','alipay_public_key')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="SELLERID" prop="seller_id">
+                        <el-input v-model="registerForm.zfb.seller_id" autocomplete="off" placeholder="请输入" @blur="handleTrim('registerForm','zfb','seller_id')" >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-button type="primary" @click="onSubmit('registerForm')" size="small" :loading="loading">保存</el-button>
+                        <el-button @click="onCancel('registerForm')" size="small">取消</el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
+    </div>
+  </div>
+</template>
+
+<script>
+//这里可以导入其它文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》from ‘《组件路径》';
+import Header from "../../components/Header.vue";
+import NavMenu from "../../components/NavMenu.vue"
+import Breadcrumb from '../../components/Breadcrumb.vue';
+import { getLogin } from "@/api/ajax";
+import Upload from "../../components/Upload.vue"
+
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  components: { Header, NavMenu, Breadcrumb, Upload },
+  props: {},
+  data() {
+    //这里存放数据
+    return {
+        activeMenuIndex: "pay_setting",
+        breadcrumbList:[
+            {
+                icon:'setting',
+                url:'',
+                text:''
+            },
+            {
+                icon:'',
+                url:'',
+                notLink: true,
+                text:'系统配置'
+            },
+            {
+                icon:'',
+                url:'',
+                text:'支付配置'
+            }
+        ],
+        registerForm:{
+            wx:{
+                app_id: '',
+                mch_id: '',
+                api_key: '',
+                spbill_create_ip: '',
+                notify_url: '',
+                cert_file_id: '',
+                cert_file_List: [],
+                notify_url: ''
+            },
+            zfb:{
+                url: '',
+                app_id: '',
+                rsa_private_key: '',
+                alipay_public_key: '',
+                seller_id: ''
+            }
+        },
+        loading: false
+    }
+  },
+  //计算属性 类似于data概念
+  computed: {
+    
+  },
+  //监控data中数据变化
+  watch: {
+    
+  },
+  //方法集合
+  methods: {
+    // 去掉前后空格
+    handleTrim(form,filds,fild){
+        this[form][filds][fild] = this[form][filds][fild].trim()
+    },
+    handleAvatarSuccess(fileList,name) {
+        this.registerForm.wx.cert_file_List = fileList
+        this.registerForm.wx.cert_file_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
+        this.$forceUpdate()
+    },
+    // 删除资源文件
+    handleDelResource(i){
+        this.$confirm("确定删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        }).then(() => {
+            this.registerForm.wx.cert_file_List.splice(i, 1);
+            this.$forceUpdate()
+        });
+    },
+    // 提交表单
+    onSubmit(formName){
+        this.$refs[formName].validate((valid) => {
+          if (valid) {
+            this.loading = true
+            let MethodName = "/OrgServer/Manager/SysConfigManager/SetSysConfig_Pay";
+            let data = this.registerForm
+            getLogin(MethodName, data)
+            .then((res) => {
+                this.loading = false
+                if(res.status===1){
+                    this.$message.success("保存成功")
+                }
+            }).catch((res) =>{
+                this.loading = false
+            })
+          } else {
+            return false;
+          }
+        });
+    },
+    // 取消 恢复到修改前状态
+    onCancel(formName){
+        this.$refs[formName].resetFields();
+    },
+    // 得到配置信息
+    getInfo(){
+        let MethodName = "/OrgServer/Manager/SysConfigManager/GetSysConfig_Pay";
+        getLogin(MethodName, {})
+        .then((res) => {
+            if(res.status===1){
+                this.registerForm = res
+                this.registerForm.wx.cert_file_List = [
+                    {
+                        id: res.wx.cert_file_id,
+                        name: res.wx.cert_file_name
+                    }
+                ]
+            }
+        }).catch((res) =>{
+            
+        })
+    }
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    this.getInfo()
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+
+  },
+  //生命周期-创建之前
+  beforeCreated() { },
+  //生命周期-挂载之前
+  beforeMount() { },
+  //生命周期-更新之前
+  beforUpdate() { },
+  //生命周期-更新之后
+  updated() { },
+  //生命周期-销毁之前
+  beforeDestory() { },
+  //生命周期-销毁完成
+  destoryed() { },
+  //如果页面有keep-alive缓存功能,这个函数会触发
+  activated() { }
+}
+</script>
+<style lang="scss" scoped>
+/* @import url(); 引入css类 */
+.create-bottom{
+    padding: 40px 40px;
+    margin-top: 16px;
+    background: #FFFFFF;
+    border-radius: 4px;
+    height: calc(100vh - 140px);
+    overflow: auto;
+    h3{
+        font-size: 20px;
+        font-weight: 500;
+        line-height: 28px;
+        margin: 0 0 28px 0;
+        color: #1D2129;
+    }
+    h6{
+        color: #000;
+        font-size: 16px;
+        font-weight: 500;
+        line-height: 24px; /* 150% */
+        margin: 24px 0 16px 0;
+    }
+}
+.resource-list{
+    list-style: none;
+    margin: 12px 0 0 0;
+    padding: 0;
+    li{
+        display: flex;
+        align-items: center;
+        a{
+            width: 360px;
+            padding: 7px 12px;
+            background: #F7F8FA;
+            border-radius: 2px;
+            color: #1D2129;
+            display: flex;
+            align-items: center;
+            cursor: inherit;
+            span{
+                overflow:hidden;
+                text-overflow:ellipsis;
+                white-space: nowrap;
+                flex: 1;
+                display: block;
+                font-size: 14px;
+                line-height: 22px;
+            }
+            .svg-icon{
+                width: 16px;
+                height: 16px;
+                margin-right: 8px;
+                color: #4E5969;
+            }
+        }
+        .el-icon-delete{
+            color: #4E5969;
+            cursor: pointer;
+            margin-left: 12px;
+            &:hover{
+                color: #165DFF;
+            }
+        }
+    }
+}
+</style>
+
+<style lang="scss">
+
+</style>