15724580513 5 年之前
父節點
當前提交
c8afbc0769
共有 47 個文件被更改,包括 0 次插入8027 次删除
  1. 0 123
      src/components/client/MtaRate/MtaRate.vue
  2. 0 40
      src/components/client/MtaRate/MtaRateBase.vue
  3. 0 39
      src/components/client/MtaRate/MtaRateReadOnly.vue
  4. 0 170
      src/components/client/Questions/GapFilling.vue
  5. 0 172
      src/components/client/Questions/MultipleChoice.vue
  6. 0 221
      src/components/client/Questions/ReadTheTopic.vue
  7. 0 239
      src/components/client/Questions/ShortAnswerQuestion.vue
  8. 0 163
      src/components/client/Questions/SingleChoice.vue
  9. 0 216
      src/components/client/Questions/TrueOrFalse.vue
  10. 0 320
      src/components/client/Questions/upLoadFileForJianda.vue
  11. 0 41
      src/components/client/QuestionsForCuoti/AnswerArea.vue
  12. 0 40
      src/components/client/QuestionsForCuoti/AnswerAreaTianKong.vue
  13. 0 335
      src/components/client/QuestionsForCuoti/GapFilling.vue
  14. 0 282
      src/components/client/QuestionsForCuoti/MultipleChoice.vue
  15. 0 194
      src/components/client/QuestionsForCuoti/ReadTheTopic.vue
  16. 0 312
      src/components/client/QuestionsForCuoti/ShortAnswerQuestion.vue
  17. 0 230
      src/components/client/QuestionsForCuoti/SingleChoice.vue
  18. 0 62
      src/components/client/QuestionsForCuoti/TianKongItem.vue
  19. 0 205
      src/components/client/QuestionsForCuoti/TrueOrFalse.vue
  20. 0 94
      src/components/client/kechengDetaileTab/biji.vue
  21. 0 90
      src/components/client/kechengDetaileTab/bijiDialog.vue
  22. 0 40
      src/components/client/kechengDetaileTab/bijiSlot.vue
  23. 0 53
      src/components/client/test/TestComponent.vue
  24. 0 226
      src/components/management/Layout/EditableTree/EditableTree.vue
  25. 0 125
      src/components/management/Layout/EditableTree/EditableTreeItem.vue
  26. 0 213
      src/components/management/Layout/EditableTreeOrg/EditableTree.vue
  27. 0 123
      src/components/management/Layout/EditableTreeOrg/EditableTreeItem.vue
  28. 0 138
      src/components/management/Layout/FormFieldset/FormFieldset.vue
  29. 0 272
      src/components/management/Layout/InfiniteScrollInput/InfiniteScrollInput3.vue
  30. 0 185
      src/components/management/Layout/PaperPreview/PaperPreview.vue
  31. 0 45
      src/components/management/Layout/PaperPreview/shitiStructure.vue
  32. 0 268
      src/components/management/Layout/SelectInput/SelectInputTree.vue
  33. 0 275
      src/components/management/Layout/SelectInput/StSelectInputTree.vue
  34. 0 23
      src/components/management/Layout/SelectInput/StSelectInputTreeSlot.vue
  35. 0 206
      src/components/management/Layout/SelectInput/clientSelectInputTree.vue
  36. 0 60
      src/components/management/Layout/Sidebar/SidebarItem.vue
  37. 0 113
      src/components/management/Layout/SlidingBlock/SlidingBlock.js
  38. 0 243
      src/components/management/Layout/SystemConfig/SystemThemeConfig.vue
  39. 0 73
      src/components/management/Layout/eChartTableExpand/eChartTableExpand.vue
  40. 0 21
      src/components/management/Layout/pageLayout/pageLayout.vue
  41. 0 136
      src/components/management/Layout/popoverLogin/popoverLogin.vue
  42. 0 39
      src/components/management/Layout/popoverLogin/popoverWrap.vue
  43. 0 517
      src/components/management/Layout/templateImport/AddUserImport.vue
  44. 0 620
      src/components/management/Layout/templateImport/import.vue
  45. 0 111
      src/components/management/Layout/welcomeInfo/QuickEntry.vue
  46. 0 139
      src/components/management/Layout/welcomeInfo/RecentTest.vue
  47. 0 175
      src/components/management/Layout/welcomeInfo/StatisticalAnalysis.vue

+ 0 - 123
src/components/client/MtaRate/MtaRate.vue

@@ -1,123 +0,0 @@
-<template>
-    <MtaRateReadOnly
-            :score="MtaRateReadOnlyObj.defaultText"
-            :value="MtaRateReadOnlyObj.value"
-            v-if="readOnly"></MtaRateReadOnly>
-    <MtaRateBase
-            :default-value="defaultScore"
-            @change="handleEditorRateChange"
-            ref="MtaRateBase"
-            v-else></MtaRateBase>
-</template>
-
-<script>
-    import MtaRateBase     from './MtaRateBase';
-    import MtaRateReadOnly from './MtaRateReadOnly';
-
-    export default {
-        name:       'MtaRate',
-        props:      {
-            /**
-             * readOnly 只读无法编辑
-             * editor 可以编辑评分
-             */
-            code:    {
-                type:      String,
-                required:  true,
-                validator: function (value) {
-                    return ['readOnly', 'editor'].indexOf(value) !== -1;
-                },
-            },
-            mapping: {
-                type:    Object,
-                default: () => {
-                    return {};
-                },
-            },
-            myData:  {
-                type:     Object,
-                required: true,
-            },
-            defaultValue: {
-                type: Number,
-                validator: function (value) {
-                    return value>=0 && value<=10;
-                },
-            },
-        },
-        components: {
-            MtaRateBase,
-            MtaRateReadOnly,
-        },
-        computed: {
-            defaultScore() {
-                return this.defaultValue/2
-            }
-        },
-        watch:      {
-            code:   {
-                handler(a, b) {
-                    this.readOnly = (a === 'readOnly');
-                },
-                immediate: true,
-            },
-            myData: {
-                handler(a, b) {
-                    if (typeof a === 'object') {
-                        if (this.code === 'editor') {
-                            this.MtaRateEditor.value = this.getMathScore(Number(a[this.mapping.score || 'score'])) || 0;
-
-                            // 非default时 具有dom 可重置数据
-                            if (this.$refs['MtaRateBase']) {
-                                this.$refs['MtaRateBase'].reventData(this.MtaRateEditor.value);
-                            }
-
-                        } else if (this.code === 'readOnly') {
-                            this.MtaRateReadOnlyObj.value = this.getMathScore(Number(a[this.mapping.score || 'score'])) || 0;
-                            this.MtaRateReadOnlyObj.defaultText = `${a[this.mapping.score || 'score'] || 0}分`;
-                        }
-
-                    } else {
-                        if (this.code === 'editor') {
-                            this.MtaRateEditor.value = 0;
-                        } else if (this.code === 'readOnly') {
-                            this.MtaRateReadOnlyObj.value = 0;
-                            this.MtaRateReadOnlyObj.defaultText = `0分`;
-                        }
-
-                    }
-                },
-                immediate: true,
-                deep:      true,
-
-            },
-        },
-        data() {
-            return {
-                readOnly:           false,
-                MtaRateReadOnlyObj: {
-                    defaultText: '0分',
-                    value:       0,
-                },
-                MtaRateEditor:      {
-                    value: 0,
-                },
-            };
-        },
-        methods:    {
-            getMathScore(data) {
-                if (typeof data !== 'number') {
-                    throw new Error(`MtaRate组件: ${this.mapping.score || 'score'}需要Number类型`);
-                }
-                return Math.ceil(data / 2);
-            },
-            handleEditorRateChange(data) {
-                this.$emit('change', data * 2);
-            },
-        },
-    };
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 40
src/components/client/MtaRate/MtaRateBase.vue

@@ -1,40 +0,0 @@
-<template>
-    <el-rate
-            :show-text="showText"
-            :texts="texts"
-            @change="changeRateValue"
-            v-model="value"
-    >
-    </el-rate>
-</template>
-
-<script>
-    export default {
-        name:    'MtaRateBase',
-        props:   {
-            defaultValue: {
-                type:    Number,
-                default: 0,
-            },
-        },
-        data() {
-            return {
-                texts:    ['2分', '4分', '6分', '8分', '10分'],
-                showText: false,
-                value:    this.defaultValue,
-            };
-        },
-        methods: {
-            changeRateValue(data) {
-                this.$emit('change', data);
-            },
-            reventData(data) {
-                this.value = data;
-            }
-        },
-    };
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 39
src/components/client/MtaRate/MtaRateReadOnly.vue

@@ -1,39 +0,0 @@
-<template>
-    <div class="c-mta-rate_read-only">
-        <el-rate
-                disabled
-                v-model="value"
-        />
-        <span class="c-rate-score_text">{{score}}</span>
-    </div>
-</template>
-
-<script>
-    export default {
-        name: 'MtaRateReadOnly',
-        props: {
-            score: {
-                type: String,
-                required: true
-            },
-            value: {
-                type: Number,
-                default: 0
-            }
-        },
-    };
-</script>
-
-<style lang="scss" scoped>
-.c-mta-rate_read-only {
-    display: flex;
-    justify-content: flex-start;
-    line-height: 25px;
-
-    .c-rate-score_text {
-        margin-left: 5px;
-        font-size: 16px;
-        color: #333;
-    }
-}
-</style>

+ 0 - 170
src/components/client/Questions/GapFilling.vue

@@ -1,170 +0,0 @@
-<template>
-    <div class="mta-gap-filling" v-if="questionData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiNum">
-                    <span v-if="isYueDu">({{shitiNum}})</span>
-                    <span v-else>{{shitiNum}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="questionData.name"></div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{questionData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player
-                    :options="audioOptions"
-                    @updAudioPlaytimes="updAudioPlaytimes"
-            >
-            </mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <div class="mta-inputTK-row" v-for="item in questionTKCount">
-                    <span class="mta-num">填空{{item}}:</span>
-                    <el-input v-model="tianKongResult[item-1]" @change="inputChange"
-                              :placeholder="`请输入填空${item}答案`"></el-input>
-                </div>
-
-            </el-col>
-        </el-row>
-        <div class="mta-modal" v-if="getShowModel"></div>
-    </div>
-</template>
-
-<script>
-    import { mapGetters }    from 'vuex';
-    import MtaBusAudioPlayer from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name:       'GapFilling',
-        props:      {
-            questionData: { // 单选题数据
-                require: true,
-                type:    Object,
-            },
-            shitiIndex:   { // 试题序号
-                type: String,
-            },
-            isYueDu:      {
-                type:    Boolean,
-                default: false,
-            },
-            yuduIndex:    {
-                type: Number,
-            },
-        },
-        components: {
-            MtaBusAudioPlayer,
-        },
-        computed:   {
-            questionTKCount() {
-                if (this.questionData.count) {
-                    return this.questionData.count;
-                }
-            },
-            ...mapGetters(['getShowScore', 'getShowModel']),
-        },
-        watch:      {
-            questionData: {
-                handler:   function (newVal, oldVal) {
-                    this.tianKongResult = [];
-                    this.newTiankongData = newVal.reply;
-                    if (this.newTiankongData) {
-                        this.newTiankongData.forEach(item => {
-                            // if (item && item.length) {
-                                this.tianKongResult.push(item);
-                            // }
-                        });
-                    }
-
-                    if (!this.tianKongResult.length) {
-                        for (let i = 0; i < newVal.count; i++) {
-                            this.tianKongResult.push('');
-                        }
-                    }
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-                                this.audioOptions.curPlaytimes = newVal.playtimes;
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-
-                },
-                immediate: true,
-                deep:      true,
-            },
-            shitiIndex:   {
-                handler(newVal, oldVal) {
-                    if (newVal) {
-                        let c = newVal.split('-');
-                        this.paragraph = c[0];
-                        this.shitiNum = c[1];
-                    }
-                },
-                immediate: true,
-            },
-        },
-        data() {
-            return {
-                newTiankongData: this.questionData.reply === null ? '' : this.questionData.reply,
-                tianKongResult:  [],
-                otherResult:     [],
-                // 段落
-                paragraph:       null,
-                shitiNum:        0,
-                audioOptions:    null,
-            };
-        },
-        methods:    {
-            inputChange() {
-                const myData = [];
-                this.tianKongResult.forEach(item => {
-                    myData.push(item.trim());
-                });
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        type:      'tiankong',
-                        stId:      this.questionData.stId,
-                        data:      myData,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        stId:      this.questionData.stId,
-                        data:      myData,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-
-            },
-            updAudioPlaytimes(playtimes) {
-                if (this.questionData.stId === 0) { // 阅读题
-                    this.$emit('updAudioPlaytimesSub', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                } else { // 其他题
-                    this.$emit('updAudioPlaytimes', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                }
-            },
-        },
-    };
-</script>
-

+ 0 - 172
src/components/client/Questions/MultipleChoice.vue

@@ -1,172 +0,0 @@
-<template>
-    <div class="mta-multiple-choice" v-if="questionData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiNum">
-                    <span v-if="isYueDu">({{shitiNum}})</span>
-                    <span v-else>{{shitiNum}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="questionData.name">
-                </div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{questionData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player
-                    :options="audioOptions"
-                    @updAudioPlaytimes="updAudioPlaytimes"
-            >
-            </mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <el-checkbox-group v-model="newCheckListData" @change="selectChange">
-
-                    <div class="mta-checkbox-row" v-for="item in questionDataContent">
-
-<!--                        <el-checkbox :label="item.index"><span style="display: flex;justify-content: flex-start;flex-direction: row"><span>{{item.num}}、</span><span v-html="item.label"></span></span></el-checkbox>-->
-                        <el-checkbox :label="`${item.index}`">
-                            <slot>
-                                <span style="vertical-align: top;display: inline-block;width: auto;" class="wordOption">{{item.num}}、</span>
-                                <span v-html="item.label" class="wordBox"></span>
-                            </slot>
-                        </el-checkbox>
-                    </div>
-                </el-checkbox-group>
-
-            </el-col>
-        </el-row>
-        <div class="mta-modal" v-if="getShowModel"></div>
-    </div>
-</template>
-
-<script>
-    import {getLetterByIndex} from '@/utils/common'
-    import {mapGetters} from 'vuex'
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name: "MultipleChoice",
-        props: {
-            questionData: { // 单选题数据
-                require: true,
-                type: Object,
-            },
-            shitiIndex: {
-                type: String,
-            },
-            isYueDu: {
-                type: Boolean,
-                default: false
-            },
-            yuduIndex: {
-                type: Number,
-            }
-        },
-        components: {
-            MtaBusAudioPlayer,
-        },
-        computed: {
-            questionDataContent() {
-                if (this.questionData.content && this.questionData.content.length) {
-                    return this.questionData.content.map((item, index) => {
-                        return {
-                            label: item,
-                            num: getLetterByIndex(index),
-                            index: index
-                        }
-                    });
-                }
-            },
-            ...mapGetters(['getShowScore', 'getShowModel']),
-        },
-        watch: {
-            questionData: {
-                handler(newVal, oldVal) {
-                    if (newVal.reply && newVal.reply.length) {
-                        newVal.reply.sort().forEach(item => {
-                            this.newCheckListData.push(item);
-                        })
-                    } else {
-                        this.newCheckListData = [];
-                    }
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-                                this.audioOptions.curPlaytimes = newVal.playtimes;
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-            },
-            shitiIndex: {
-                handler(newVal, oldVal) {
-                    if (newVal) {
-                        let c = newVal.split('-');
-                        this.paragraph = c[0];
-                        this.shitiNum = c[1];
-                    }
-                },
-                immediate: true,
-            },
-        },
-        data() {
-            return {
-                newCheckListData: [],
-                // 段落
-                paragraph: null,
-                shitiNum: 0,
-                audioOptions: null,
-            }
-        },
-        methods: {
-            selectChange(val) {
-                // this.$emit('reply', [this.questionData.paragraph ,this.questionData.stId,this.newCheckListData]);
-                // this.$emit('reply', [1 ,this.questionData.stId, this.newCheckListData]);
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        type: 'duoxuan',
-                        stId: this.questionData.stId,
-                        data: this.newCheckListData.sort(),
-                        number: this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        stId: this.questionData.stId,
-                        data: this.newCheckListData.sort(),
-                        number: this.shitiIndex - 1,
-                    });
-                }
-
-
-            },
-            updAudioPlaytimes(playtimes) {
-                if (this.questionData.stId === 0) { // 阅读题
-                    this.$emit('updAudioPlaytimesSub', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                } else { // 其他题
-                    this.$emit('updAudioPlaytimes', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                }
-            },
-        },
-    }
-</script>

+ 0 - 221
src/components/client/Questions/ReadTheTopic.vue

@@ -1,221 +0,0 @@
-<template>
-    <div class="mta-read-the-topic">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-
-                <!--                <span>阅读以下文字并回答问题</span>-->
-                <!--                <span class="mta-SC-score" v-if="getShowScore">({{questionData.score}}分)</span>-->
-            </el-col>
-        </el-row>
-
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <span style="margin-right: 10px;" v-if="!!shitiNum">{{shitiNum}}.</span>
-                <!-- 试题题干区域 -->
-                <div style="display: flex;justify-content: space-between;flex-direction: row;">
-
-                    <span class="mta-SC-title" v-html="questionData.name"></span>
-                    <span class="mta-SC-score" v-if="getShowScore">({{questionData.score}}分)</span>
-                </div>
-            </el-col>
-        </el-row>
-
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player
-                    :options="audioOptions"
-                    @updAudioPlaytimes="updAudioPlaytimes"
-            >
-            </mta-bus-audio-player>
-        </el-row>
-
-        <el-row class="mta-three-row" type="flex">
-            <el-col>
-                <!-- 试题区域 -->
-                <!-- 单选题 -->
-                <div v-for="(item,index) in danxuanData" :key="`danxuan${index}`" v-if="danxuanData.length > 0">
-                    <mta-single-choice
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :shitiIndex="`${paragraph}-${num+index}`"
-                            @reply="reply"
-                            @updAudioPlaytimesSub="e=> updAudioPlaytimesSub('danxuan', index, e)"
-                    ></mta-single-choice>
-                </div>
-                <!-- 多选题 -->
-                <div v-for="(item,index)  in duoxuanData" :key="`duoxuan${index}`" v-if="duoxuanData.length > 0">
-                    <mta-multiple-choice
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :shitiIndex="`${paragraph}-${num+index+danxuanData.length}`"
-                            @reply="reply"
-                            @updAudioPlaytimesSub="e=> updAudioPlaytimesSub('duoxuan', index, e)"
-                    ></mta-multiple-choice>
-                </div>
-                <!-- 判断题 -->
-                <div v-for="(item,index)  in panduanData" :key="`panduan${index}`" v-if="panduanData.length > 0">
-                    <mta-true-or-false
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :shitiIndex="`${paragraph}-${num+index+panduanData.length+duoxuanData.length}`"
-                            @reply="reply"
-                            @updAudioPlaytimesSub="e=> updAudioPlaytimesSub('panduan', index, e)"
-                    ></mta-true-or-false>
-                </div>
-                <!-- 填空题 -->
-                <div v-for="(item,index)  in tiankongData" :key="`tiankong${index}`" v-if="tiankongData.length > 0">
-                    <mta-gap-filling
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :shitiIndex="`${paragraph}-${num+index+danxuanData.length+panduanData.length+panduanData.length}`"
-                            @reply="reply"
-                            @updAudioPlaytimesSub="e=> updAudioPlaytimesSub('tiankong', index, e)"
-                    ></mta-gap-filling>
-                </div>
-                <!-- 简答题 -->
-                <div v-for="(item,index)  in jiandaData" :key="`jianda${index}`" v-if="jiandaData.length > 0">
-                    <mta-short-answer-question
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            @clickUploadFile="clickUploadFile"
-                            @richText="richText"
-                            :shitiIndex="`${paragraph}-${num+index+danxuanData.length+panduanData.length+panduanData.length+tiankongData.length}`"
-                            @reply="reply"
-                            :option="option"
-                            @updAudioPlaytimesSub="e=> updAudioPlaytimesSub('jianda', index, e)"
-                    ></mta-short-answer-question>
-                </div>
-            </el-col>
-        </el-row>
-        <div class="mta-modal" v-if="getShowModel"></div>
-    </div>
-</template>
-
-<script>
-    import MtaSingleChoice        from '@/components/client/Questions/SingleChoice.vue';
-    import MtaTrueOrFalse         from '@/components/client/Questions/TrueOrFalse.vue';
-    import MtaMultipleChoice      from '@/components/client/Questions/MultipleChoice.vue';
-    import MtaGapFilling          from '@/components/client/Questions/GapFilling.vue';
-    import MtaShortAnswerQuestion from '@/components/client/Questions/ShortAnswerQuestion.vue';
-    import { mapGetters }         from 'vuex';
-    import MtaBusAudioPlayer      from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name:       'ReadTheTopic',
-        components: {
-            MtaSingleChoice,
-            MtaMultipleChoice,
-            MtaTrueOrFalse,
-            MtaGapFilling,
-            MtaShortAnswerQuestion,
-            MtaBusAudioPlayer,
-        },
-        props:      {
-            questionData: { // 简答题数据
-                require: true,
-                type:    Object,
-            },
-            shitiIndex:   {
-                type: String,
-            },
-            option:       {
-                type:    Object,
-                default: () => ({}),
-            },
-        },
-        computed:   {
-            danxuanData() {
-                return this.questionData.danxuan;
-            },
-            duoxuanData() {
-                return this.questionData.duoxuan;
-            },
-            panduanData() {
-                return this.questionData.panduan;
-            },
-            jiandaData() {
-                return this.questionData.jianda;
-            },
-            tiankongData() {
-                return this.questionData.tiankong;
-            },
-            ...mapGetters(['getShowScore', 'getShowModel']),
-        },
-        data() {
-            return {
-                num:          1,
-                // 段落
-                paragraph:    null,
-                shitiNum:     0,
-                audioOptions: null,
-            };
-        },
-        watch:      {
-            shitiIndex:   {
-                handler(newVal, oldVal) {
-                    if (newVal) {
-                        let c = newVal.split('-');
-                        this.paragraph = c[0];
-                        this.shitiNum = c[1];
-                    }
-                },
-                immediate: true,
-            },
-            questionData: {
-                handler(newVal, oldVal) {
-                    // console.log(newVal);
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-                                this.audioOptions.curPlaytimes = newVal.playtimes;
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-            },
-        },
-        methods:    {
-            clickUploadFile(data){
-                this.$emit('clickUploadFile', data);
-            },
-            richText(){
-                this.$emit('richText','richtext');
-            },
-            reply(data) {
-                const newData = Object.assign(data, {
-                    stId:      this.questionData.stId,
-                    paragraph: this.paragraph,
-                });
-                this.$emit('reply', newData);
-            },
-            updAudioPlaytimes(playtimes) {
-                this.$emit('updAudioPlaytimes', {
-                    stId:      this.questionData.stId,
-                    playtimes: playtimes,
-                });
-            },
-            updAudioPlaytimesSub(type, index, payload) {
-                this.$emit('updAudioPlaytimes', {
-                    stId:      this.questionData.stId,
-                    type:      type,
-                    index:     index,
-                    playtimes: payload.playtimes,
-                });
-            },
-        },
-    };
-</script>
-

+ 0 - 239
src/components/client/Questions/ShortAnswerQuestion.vue

@@ -1,239 +0,0 @@
-<template>
-    <div class="mta-short-answer-question" v-if="questionData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiNum">
-                    <span v-if="isYueDu">({{shitiNum}})</span>
-                    <span v-else>{{shitiNum}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="questionData.name">
-                </div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{questionData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player
-                    :options="audioOptions"
-                    @updAudioPlaytimes="updAudioPlaytimes"
-            >
-            </mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <!--<el-input
-                        @change="inputChange"
-                        type="textarea"
-                        :rows="2"
-                        placeholder="请输入简答题答案"
-                        v-model="textarea">
-                </el-input>-->
-
-                <mta-st-quill-editor
-                        ref="editorQuill"
-                        :value="textarea"
-                        :quillEditorRef="quillEditorRef"
-                        flg="1"
-                        @richText="richText"
-                        @clickUploadFile="clickUploadFile"
-                        @syncValue="syncValue">
-                </mta-st-quill-editor>
-            </el-col>
-        </el-row>
-        <div class="mta-modal" v-if="getShowModel"></div>
-        <up-load-file-for-jianda
-                :option="option"
-                :myfileLists="questionData.files"
-                @getFileLists="handleGetFileLists"
-        />
-    </div>
-</template>
-
-<script>
-    import { mapGetters }      from 'vuex';
-    import { getStringByHtml } from '@/utils/common.js';
-    import MtaStQuillEditor    from '@/components/management/QuillEditor.vue';
-    import MtaBusAudioPlayer   from '@/components/custom/MtaBusAudioPlayer.vue';
-    import upLoadFileForJianda from '@/components/client/Questions/upLoadFileForJianda.vue';
-
-    export default {
-        name:       'ShortAnswerQuestion',
-        components: {
-            MtaStQuillEditor,
-            MtaBusAudioPlayer,
-            upLoadFileForJianda,
-        },
-        props:      {
-            questionData: { // 简答题数据
-                require: true,
-                type:    Object,
-            },
-            shitiIndex:   {
-                type: String,
-            },
-            isYueDu:      {
-                type:    Boolean,
-                default: false,
-            },
-            yuduIndex:    {
-                type: Number,
-            },
-            option:       {
-                type:    Object,
-                default: () => ({}),
-            },
-        },
-        watch:      {
-            questionData: {
-                handler:   function (newVal, oldVal) {
-                    this.textarea = newVal.reply;
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-                                this.audioOptions.curPlaytimes = newVal.playtimes;
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-            },
-            shitiIndex:   {
-                handler(newVal, oldVal) {
-                    if (newVal) {
-                        let c = newVal.split('-');
-                        this.paragraph = c[0];
-                        this.shitiNum = c[1];
-                    }
-                },
-                immediate: true,
-            },
-            textarea:     {
-                handler:   function (newVal, oldVal) {
-                    this.debounce(this.changeStr, 1000);
-                },
-                immediate: true,
-            },
-        },
-        computed:   {
-            ...mapGetters(['getShowScore', 'getShowModel']),
-        },
-        data() {
-            return {
-                textarea:       this.questionData.reply === null ? '' : this.questionData.reply,
-                // 段落
-                paragraph:      null,
-                shitiNum:       0,
-                quillEditorRef: '',
-                audioOptions:   null,
-            };
-        },
-        created() {
-            this.quillEditorRef = 'quillEditorRef' + Math.floor(Math.random() * 100000);
-        },
-        methods:    {
-
-            clickUploadFile(data){
-                this.$emit('clickUploadFile', data);
-            },
-            richText(){
-                this.$emit('richText','richtext');
-            },
-            handleGetFileLists(data) {
-                this.questionData.files = JSON.stringify(data);
-                this.changeStr();
-            },
-            syncValue(flg, content) {
-                this.content = content;
-                this.textarea = content;
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        type:      'jianda',
-                        stId:      this.questionData.stId,
-                        files:     this.questionData.files,
-                        data:      content,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        stId:      this.questionData.stId,
-                        files:     this.questionData.files,
-                        data:      content,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-
-
-            },
-            /*inputChange(val) {
-                // this.$emit('reply', [1, this.questionData.stId, val]);
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        type:      'jianda',
-                        stId:      this.questionData.stId,
-                        data:      val,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        stId:      this.questionData.stId,
-                        data:      val,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-
-            },*/
-            debounce:  function (fn, wait) {
-                if (this.fun !== null) {
-                    clearTimeout(this.fun);
-                }
-                this.fun = setTimeout(fn, wait);
-            },
-            changeStr: function () {
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        type:      'jianda',
-                        stId:      this.questionData.stId,
-                        files:     this.questionData.files,
-                        data:      this.textarea,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        stId:      this.questionData.stId,
-                        files:     this.questionData.files,
-                        data:      this.textarea,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-            },
-            updAudioPlaytimes(playtimes) {
-                if (this.questionData.stId === 0) { // 阅读题
-                    this.$emit('updAudioPlaytimesSub', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                } else { // 其他题
-                    this.$emit('updAudioPlaytimes', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                }
-            },
-        },
-    };
-</script>

+ 0 - 163
src/components/client/Questions/SingleChoice.vue

@@ -1,163 +0,0 @@
-<template>
-    <div class="mta-single-choice" v-if="questionData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-            <span class="wrap-shitiIndex" v-if="!!shitiNum">
-                <span v-if="isYueDu">({{shitiNum}})</span>
-                <span v-else>{{shitiNum}}.</span>
-            </span>
-                <!--  <span>【单选题】</span>-->
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="questionData.name"></div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{questionData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player
-                    :options="audioOptions"
-                    @updAudioPlaytimes="updAudioPlaytimes"
-            >
-            </mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <el-radio-group v-model="newRadioData" @change="selectChange">
-                    <div class="mta-radio-row" v-for="(item, index) in questionDataContent">
-                        <el-radio :label="`${index}`">
-                            <slot>
-                                <span style="vertical-align: top;display: inline-block;width: auto;" class="wordOption">{{item.num}}、</span>
-                                <span v-html="item.label" class="wordBox"></span>
-                            </slot>
-                        </el-radio>
-                    </div>
-                </el-radio-group>
-            </el-col>
-        </el-row>
-        <div class="mta-modal" v-if="getShowModel"></div>
-    </div>
-
-</template>
-
-<script>
-    import { getLetterByIndex } from '@/utils/common';
-    import { mapGetters }       from 'vuex';
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name:       'SingleChoice',
-        props:      {
-            questionData: { // 单选题数据
-                require: true,
-                type:    Object,
-            },
-            shitiIndex:   { // 题序号
-                type: String,
-            },
-            isYueDu:      {
-                type:    Boolean,
-                default: false,
-            },
-            yuduIndex:    {
-                type: Number,
-            },
-        },
-        components: {
-            MtaBusAudioPlayer,
-        },
-        data() {
-            return {
-                // 答案
-                newRadioData: this.questionData.reply,
-                // 段落
-                paragraph:    null,
-                shitiNum:     0,
-                audioOptions: null,
-            };
-        },
-        methods:    {
-            selectChange(val) {
-                this.questionData.reply = val;
-                // this.$emit('reply', [this.questionData.paragraph ,this.questionData.stId, this.newRadioData]);
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        type:      'danxuan',
-                        stId:      this.questionData.stId,
-                        data:      this.newRadioData,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        stId:      this.questionData.stId,
-                        data:      this.newRadioData,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-            },
-            updAudioPlaytimes(playtimes) {
-                if (this.questionData.stId === 0) { // 阅读题
-                    this.$emit('updAudioPlaytimesSub', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                } else { // 其他题
-                    this.$emit('updAudioPlaytimes', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                }
-            },
-        },
-        watch:      {
-
-            questionData: {
-                handler(newVal, oldVal) {
-                    // console.log(newVal);
-                    this.newRadioData = newVal.reply;
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-                                this.audioOptions.curPlaytimes = newVal.playtimes;
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-            },
-            shitiIndex:   {
-                handler(newVal, oldVal) {
-                    if (newVal) {
-                        let c = newVal.split('-');
-                        this.paragraph = c[0];
-                        this.shitiNum = c[1];
-                    }
-                },
-                immediate: true,
-            },
-        },
-        computed:   {
-            questionDataContent() {
-                if (this.questionData.content && this.questionData.content.length) {
-                    return this.questionData.content.map((item, index) => {
-                        return {
-                            label: item,
-                            num:   getLetterByIndex(index),
-                        };
-                    });
-                }
-            },
-            ...mapGetters(['getShowScore', 'getShowModel']),
-        },
-    };
-</script>

+ 0 - 216
src/components/client/Questions/TrueOrFalse.vue

@@ -1,216 +0,0 @@
-<template>
-    <div class="mta-true-or-false"  v-if="questionData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiNum">
-                    <span v-if="isYueDu">({{shitiNum}})</span>
-                    <span v-else>{{shitiNum}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="questionData.name"></div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{questionData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player
-                    :options="audioOptions"
-                    @updAudioPlaytimes="updAudioPlaytimes"
-            >
-            </mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <el-radio-group v-model="newRadioData" @change="selectChange">
-                    <div class="mta-panduan-row">
-                        <el-radio label="1">正确</el-radio>
-                    </div>
-                    <div class="mta-panduan-row">
-                        <el-radio label="0">错误</el-radio>
-                    </div>
-                </el-radio-group>
-
-            </el-col>
-        </el-row>
-        <div class="mta-modal" v-if="getShowModel"></div>
-    </div>
-</template>
-
-<script>
-    import {mapGetters} from 'vuex'
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name: "TrueOrFalse",
-        props: {
-            questionData: { // 单选题数据
-                require: true,
-                type: Object,
-            },
-            shitiIndex: { // 试题序号
-                type: String,
-            },
-            isYueDu: {
-                type: Boolean,
-                default: false
-            },
-            yuduIndex: {
-                type: Number,
-            }
-        },
-        components: {
-            MtaBusAudioPlayer,
-        },
-        data() {
-            return {
-                newRadioData: this.questionData.reply,
-                // 段落
-                paragraph: null,
-                shitiNum: 0,
-                audioOptions: null,
-            }
-        },
-        watch: {
-            questionData: {
-                handler(newVal, oldVal) {
-                    // console.log(newVal);
-                    this.newRadioData = newVal.reply;
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-                                this.audioOptions.curPlaytimes = newVal.playtimes;
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-            },
-            shitiIndex: {
-                handler(newVal, oldVal) {
-                    if (newVal) {
-                        let c = newVal.split('-');
-                        this.paragraph = c[0];
-                        this.shitiNum = c[1];
-                    }
-                },
-                immediate: true,
-            },
-        },
-        computed: {
-            ...mapGetters(['getShowScore', 'getShowModel']),
-        },
-        methods: {
-            selectChange(val) {
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        type: 'panduan',
-                        stId: this.questionData.stId,
-                        data: this.newRadioData,
-                        number: this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.paragraph,
-                        stId: this.questionData.stId,
-                        data: this.newRadioData,
-                        number: this.shitiIndex-1,
-                    });
-                }
-
-            },
-            updAudioPlaytimes(playtimes) {
-                if (this.questionData.stId === 0) { // 阅读题
-                    this.$emit('updAudioPlaytimesSub', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                } else { // 其他题
-                    this.$emit('updAudioPlaytimes', {
-                        stId:      this.questionData.stId,
-                        playtimes: playtimes,
-                    });
-                }
-            },
-        },
-    }
-</script>
-
-<style lang="scss" scoped>
-    .mta-true-or-false {
-        position: relative;
-        font-size: 14px;
-
-        .mta-first-row {
-            .el-col {
-                display: flex;
-                justify-content: flex-start;
-                flex-direction: row;
-
-                .mta-SC-title {
-                    color: #333;
-                    line-height: 24px;
-                }
-
-                .mta-SC-score {
-                    color: #999;
-                    min-width: 100px;
-                    line-height: 24px
-                }
-            }
-
-            .wrap-shitiIndex {
-                font-size: 13px;
-                line-height: 24px;
-                color: #333;
-                margin-right: 10px;
-                font-weight: bold;
-            }
-        }
-
-        .mta-two-row {
-            margin-bottom: 12px;
-
-            .el-col {
-
-                .mta-panduan-row {
-                    margin: 10px 0;
-                }
-            }
-        }
-
-        .mta-modal {
-            position: absolute;
-            left: 0;
-            top: 0;
-            bottom: 0;
-            right: 0;
-            z-index: 999;
-        }
-    }
-</style>
-<style lang="scss">
-    .mta-true-or-false {
-
-        .mta-SC-title {
-            p {
-                margin: 0;
-                padding: 0;
-            }
-        }
-
-        .el-radio {
-            color: #666;
-        }
-    }
-
-</style>

+ 0 - 320
src/components/client/Questions/upLoadFileForJianda.vue

@@ -1,320 +0,0 @@
-<template>
-    <div class="up-load-file-for-jianda">
-        <div class="my-up-load-file-main">
-            <!--    enter button    -->
-            <el-tooltip content="注:最多可以上传两个文件"
-                        placement="top"
-                        popper-class="c-aliUpload-tooltip"><i
-                    class="aliUpload-note-word"></i></el-tooltip>
-            <el-upload
-                    class="upload-demo"
-                    action=""
-                    :show-file-list="false"
-                    :http-request="importFun"
-            >
-                <el-button size="small" @click="beforeUpload('input')" type="text">上传文件</el-button>
-            </el-upload>
-            <el-button @click="handleOpenDialog" type="text">扫码上传</el-button>
-            <!--    file lists    -->
-            <template v-if="fileLists.length">
-                <span
-                        class="file-lists_span fsize-m6"
-                        v-for="(item, index) in fileLists"
-                        :key="item.url">
-                    <span v-if="!item.isImage">附件{{index+1}}</span>
-                    <span v-if="item.isImage">
-                        <img :src="item.url" width="20" height="20">
-                    </span>
-
-                    <span style="cursor: pointer;" @click="ConfirmDelete(item)">
-                        <i class="el-icon-close"></i>
-                    </span>
-                </span>
-            </template>
-        </div>
-        <!--    dialog    -->
-        <el-dialog
-                title="扫码上传图片"
-                :visible.sync="dialogImageVisible"
-                width="30%"
-                center
-                :close-on-click-modal="false"
-                @close="handleImageClose">
-            <div class="dialog-content">
-                <div class="my-box">
-                    <!--        倒计时            -->
-                    <p>请在1分钟内手机扫码上传图片:{{countdown}}秒</p>
-                    <p>
-                        <vue-qrcode :value=QRCodeUrl :options="{ color: { dark: '#0275D8' }  }"></vue-qrcode>
-                    </p>
-                </div>
-            </div>
-            <span slot="footer" class="dialog-footer"></span>
-        </el-dialog>
-
-        <MtaStDialog
-                  :dVisible.sync="mtaDeleteVisible"
-                  dType="warning"
-                  :modalAppendToBody="false"
-                  dMessage="选中的数据将彻底删除"
-                  @comfirmCallback="doDelete"
-        ></MtaStDialog>
-
-    </div>
-</template>
-
-<script>
-    import { getUploadImg }  from '@/api/AlCloud.js';
-    import axios             from 'axios';
-    import { getOpenSearch } from '@/api/base64.js';
-    import VueQrcode         from '@chenfengyuan/vue-qrcode';
-
-    export default {
-        name:       'upLoadFileForJianda',
-        components: {
-            VueQrcode,
-        },
-        data() {
-            return {
-                dialogImageVisible: false,
-                mtaDeleteVisible:   false,
-                fileLists:          [],
-                mySelectDelete:     null,
-                QRCodeUrl:          '',
-                key:                '',
-                link:               '',
-                countdown:          120, // 60秒倒计时
-                timer1:             null,
-                timer2:             null,
-            };
-        },
-        props:      {
-            option:      {
-                type:    Object,
-                default: () => ({}),
-            },
-            myfileLists: {
-                type:    String | null,
-            },
-        },
-        watch:      {
-            myfileLists: {
-                handler(a, b) {
-                    let c = a || [];
-
-                    if (typeof c === 'string') {
-                        c = JSON.parse(c);
-                    }
-
-                    c.forEach(item => {
-                        const isImage = this.checkIsImg(item);
-                        this.fileLists.push({
-                                                isImage: isImage,
-                                                url:     item,
-                                            });
-                    });
-                },
-                immediate: true,
-                deep:      true,
-            },
-        },
-        methods:    {
-
-            beforeUpload(data){
-                window.onblur = null;
-                this.$emit('clickUploadFile', data);
-            },
-            handleGetImageDataFun() {
-                this.timer2 = setInterval(() => {
-                    // 获取手机上传文件
-                    // const loading = this.loading();
-                    getOpenSearch({
-                                      key: this.key,
-                                  })
-                    .then(res => {
-                        const data = res.data.urlList || [];
-
-                        if (!data.length) {
-                            return;
-                        }
-
-                        this.handleComplateData2(data);
-                        // this.$emit('accessory', this.fileLists);
-                        // this.fileLists = [];
-                        this.dialogImageVisible = false;
-                        this.clearTimeFun();
-                        // loading.close();
-                    })
-                    .catch(err => {
-                        // this.$message.error('手机上传文件获取异常');
-                        // loading.close();
-                        console.log(err);
-                    });
-                }, 5000);
-            },
-            // 倒计时60秒
-            setTime() {
-                if (this.countdown === 0) {
-                    this.dialogImageVisible = false;
-                    this.countdown = 120;
-                    this.clearTimeFun();
-                } else {
-                    this.countdown--;
-                    this.timer1 = setTimeout(() => {
-                        this.setTime();
-                    }, 1000);
-                }
-            },
-            clearTimeFun() {
-                clearTimeout(this.timer1);
-                clearInterval(this.timer2);
-                this.timer1 = null;
-                this.timer2 = null;
-                this.countdown = 120;
-            },
-            doDelete() {
-                this.handleDelete(this.mySelectDelete);
-            },
-            ConfirmDelete(data) {
-                this.mySelectDelete = data;
-                this.mtaDeleteVisible = true;
-            },
-            // 文件上传 函数
-            importFun(params) {
-                if(this.fileLists.length > 2 || this.fileLists.length === 2){
-                    this.$message.error('最多可以上传两个文件');
-                    return;
-                }
-                if (!params) {
-                    return false;
-                }
-                const suffixList = params.file.name.split('.');
-                const options = {
-                    prefix: 'temp/',
-                    suffix: suffixList[suffixList.length-1],
-                };
-                getUploadImg(options).then((res) => {
-                    if (res.code === 0) {
-                        // 二进制文件通过forData对象进行传递
-                        const FormDataForAl = new FormData();
-                        const multipartParams = Object.assign({}, res.data, {
-                            Filename:              `images/${params.filename}`,
-                            success_action_status: '200',
-                        });
-                        // 参数数据
-                        FormDataForAl.append('key', multipartParams.key);
-                        FormDataForAl.append('policy', multipartParams.policy);
-                        FormDataForAl.append('signature', multipartParams.signature);
-                        FormDataForAl.append('OSSAccessKeyId', multipartParams.accessid);
-                        FormDataForAl.append('success_action_status', multipartParams.success_action_status);
-                        // OSS要求, file放到最后
-                        FormDataForAl.append('file', params.file);
-                        const loading = this.loading();
-                        axios.post(multipartParams.uploadUrl, FormDataForAl)
-                             .then(alRes => {
-                                 if (alRes.status === 200) {
-                                     const fileUrl = `${multipartParams.downloadUrl}/${multipartParams.key}`;
-                                     if (this.checkFileListslength()) {
-                                         this.$message.success('附件上传成功');
-                                         this.handleComplateData(fileUrl);
-                                     } else {
-                                         this.$message.error('附件最多上传2个');
-                                     }
-                                 }
-                                 loading.close();
-                             })
-                             .catch(err => {
-                                 loading.close();
-                                 console.log(err);
-                             });
-                    }
-
-                });
-            },
-            // 手机上传 图片处理
-            handleComplateData2(fileUrls) {
-                fileUrls.forEach(item => {
-                    const isImage = this.checkIsImg(item);
-
-                    this.fileLists.push({
-                                            isImage: isImage,
-                                            url:     item,
-                                        });
-                });
-
-                this.backData();
-            },
-            // Pc文件上传
-            handleComplateData(fileUrl) {
-                const isImage = this.checkIsImg(fileUrl);
-
-                this.fileLists.push({
-                                        isImage: isImage,
-                                        url:     fileUrl,
-                                    });
-                this.backData();
-                // this.$emit('accessory', this.fileLists);
-                // this.fileLists = [];
-            },
-            backData() {
-                const c = this.fileLists.map(item => {
-                    return item.url;
-                });
-                this.$emit('getFileLists', c);
-                this.fileLists = [];
-            },
-            // 校验是否是图片
-            checkIsImg(data) {
-                if (typeof data !== 'string') {
-                    throw new Error('校验是否是否图片参数错误');
-                }
-                const strArr = data.split('.');
-
-                if (!strArr.length) {
-                    throw new Error('文件地址数据缺少关键字: .');
-                }
-
-                const whiteList = ['jpg', 'png', 'jpeg', 'bmp'];
-                return whiteList.some(item => item === strArr[strArr.length - 1]);
-            },
-            // 校验 file lists 数组是否大于2
-            checkFileListslength() {
-                return true;
-            },
-            handleDelete(data) {
-                this.fileLists = this.fileLists.filter(item => item.url !== data.url);
-                this.mySelectDelete = null;
-                this.backData();
-            },
-            handleImageClose() {
-                this.clearTimeFun();
-            },
-            handleOpenDialog() {
-                this.dialogImageVisible = true;
-                this.setTime();
-                this.handleGetImageDataFun();
-            },
-            getQRCodeUrl(data) {
-                if (data.length === 0) {
-                    throw new Error('二维码唯一识别参数异常');
-                }
-
-                // console.log('queryArr:', data);
-                // console.log('全局变量:', process.env.VUE_APP_BASE_API_TARGET);
-                this.key = '';
-                data.forEach(item => {
-                    this.key += item;
-                });
-                // H5 接口地址
-                //const myH5Url = process.env.VUE_APP_BASE_API_TARGET;
-                const myH5Url = window.location.protocol + '//' + `${document.location.host}/` + process.env.VUE_APP_DIST_NAME + `/#/phoneFile`;
-                this.QRCodeUrl = `${myH5Url}?key=${this.key}`;
-
-            },
-        },
-        created() {
-            const queryArr = Object.values(this.option);
-            this.getQRCodeUrl(queryArr);
-        },
-    };
-</script>

+ 0 - 41
src/components/client/QuestionsForCuoti/AnswerArea.vue

@@ -1,41 +0,0 @@
-<template>
-    <el-row class="mta-answer-area" type="flex">
-        <el-col>
-            <!-- 试题内容区域 -->
-            <div class="mta-three-row-div">
-                <span class="three-span">正确答案:</span>
-                <span class="answer-vhtml-div" style="flex:1" v-html="showAnswer"></span>
-            </div>
-            <div class="mta-three-row-div">
-                <span class="three-span">答案解析:</span>
-<!--                <el-input type="textarea" :readonly="true" v-model="analysis" :rows="3"></el-input>-->
-                <div style="flex:1" v-html="analysis" class="answer-vhtml-div"></div>
-            </div>
-        </el-col>
-    </el-row>
-</template>
-
-<script>
-    import {getStringByHtml2} from '@/utils/common.js'
-
-    export default {
-        name: "AnswerArea",
-        props: {
-            data: {
-                type: Object,
-                require: true
-            }
-        },
-        computed: {
-            showAnswer() {
-                // return getStringByHtml(this.data.analysis);
-                return this.data.showAnswer
-            },
-            analysis() {
-                // return getStringByHtml(this.data.analysis);
-                return this.data.analysis
-            }
-        }
-    }
-</script>
-

+ 0 - 40
src/components/client/QuestionsForCuoti/AnswerAreaTianKong.vue

@@ -1,40 +0,0 @@
-<template>
-    <el-row class="mta-answer-area" type="flex">
-        <el-col>
-            <!-- 试题内容区域 -->
-            <div class="mta-three-row-div">
-                <span class="three-span">正确答案:</span>
-                <span style="flex:1" class="mta-answer-list">
-                    <span v-for="item of data.showAnswer">
-                        <span>{{item.label}}</span>
-                        <span>({{item.answer}})</span>
-                    </span>
-                </span>
-            </div>
-            <div class="mta-three-row-div">
-                <span class="three-span">答案解析:</span>
-<!--                <el-input type="textarea" :readonly="true" v-model="analysis" :rows="3"></el-input>-->
-                <div style="flex:1" v-html="analysis" class="answer-vhtml-div"></div>
-            </div>
-        </el-col>
-    </el-row>
-</template>
-
-<script>
-    import {getStringByHtml} from '@/utils/common.js'
-
-    export default {
-        name: "AnswerArea",
-        props: {
-            data: {
-                type: Object,
-                require: true
-            }
-        },
-        computed: {
-            analysis() {
-                return this.data.analysis
-            }
-        }
-    }
-</script>

+ 0 - 335
src/components/client/QuestionsForCuoti/GapFilling.vue

@@ -1,335 +0,0 @@
-<template>
-    <div class="mta-gap-filling" v-if="pageData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiIndex">
-                    <span v-if="isYueDu">({{shitiIndex}})</span>
-                    <span v-else>{{shitiIndex}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="pageData.name"></div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{pageData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player :checktimes="false" :options="audioOptions"></mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <div class="mta-inputTK-row" v-for="(item,index) in questionTKCount" :key="index">
-                    <!--<span class="mta-num">填空题{{item}}:</span>
-                    <el-input v-model="tianKongResult[item-1]"
-                              @change="inputChange"
-                              :placeholder="`请输入填空题${item}答案`"></el-input>-->
-                    <mta-tian-kong-item
-                            :data="{
-                            num: item,
-                            typeCase: typeCase,
-                            answer: tianKongResult[item-1],
-                            result: pageData.result
-                        }"
-                            @change="inputChange"></mta-tian-kong-item>
-                </div>
-                <!--                <div class="mta-modal" v-if="getShowModel"></div> -->
-            </el-col>
-        </el-row>
-        <mta-answer-area-tian-kong
-                v-if="typeCase === 'geren' || typeCase === 'cuoti2' || typeCase === 'cuoti3' || typeCase === 'yulan'"
-                :data="{
-                    showAnswer:showAnswer,
-                    analysis: pageData.answer
-                }"
-        ></mta-answer-area-tian-kong>
-
-    </div>
-</template>
-
-<script>
-    import {mapGetters} from 'vuex'
-    import MtaAnswerAreaTianKong from '@/components/client/QuestionsForCuoti/AnswerAreaTianKong.vue'
-    import MtaTianKongItem from '@/components/client/QuestionsForCuoti/TianKongItem.vue'
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name: "GapFilling",
-        props: {
-            questionData: { // 单选题数据
-                require: true,
-                type: Object,
-            },
-            shitiIndex: { // 试题序号
-                type: Number,
-                default: 0,
-            },
-            isYueDu: {
-                type: Boolean,
-                default: false
-            },
-            yuduIndex: {
-                type: Number,
-            },
-            // 组件接环状态, kaoshi,geren,yulan,cuoti2
-            typeCase: {
-                type: String,
-                default: 'kaoshi'
-            },
-            getShowModel: {
-                type: Boolean,
-                default: true
-            }
-        },
-        components: {
-            MtaAnswerAreaTianKong,
-            MtaTianKongItem,
-            MtaBusAudioPlayer,
-        },
-        data() {
-            return {
-                // 页面渲染必须数据
-                pageData: null,
-
-                // 答案
-                newTiankongData: this.questionData.reply === null ? '' : this.questionData.reply,
-                tianKongResult: [],
-                // 展示答案
-                showAnswer: null,
-                // 错误
-                showError: false,
-                // 解析
-                analysis: null,
-                audioOptions: null,
-            }
-        },
-        methods: {
-            getShowAnswer(data) {
-                let str = [];
-                if (data === undefined) {
-                    return;
-                }
-                data.forEach((item, index) => {
-                    str.push({
-                        answer: item.join(','),
-                        label: `填空${index + 1}`
-                    })
-                });
-                return str;
-            },
-            checkAnswer(result, reply) {
-                let innerStatus = false;
-
-                if (reply === null) {
-                    return true
-                }
-
-                reply.forEach((item, index) => {
-                    if (result[index].indexOf(item) === -1) {
-                        innerStatus = true;
-                    }
-                });
-
-                return innerStatus
-
-            },
-            inputChange(val) {
-                // this.$emit('reply', [this.questionData.paragraph ,this.questionData.stId,resultOpt]);
-                // this.$emit('reply', [1, this.questionData.stId, resultOpt]);
-
-                this.tianKongResult[val.num - 1] = val.data.trim();
-
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        type: 'tiankong',
-                        stId: this.questionData.stId,
-                        data: this.tianKongResult,
-                        number: this.yuduIndex
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        stId: this.questionData.stId,
-                        data: this.tianKongResult,
-                        number: this.shitiIndex - 1
-                    });
-                }
-            }
-        },
-        computed: {
-            questionTKCount() {
-                if (this.questionData.count) {
-                    return this.questionData.count;
-                }
-            },
-            ...mapGetters(['getShowScore']),
-        },
-        watch: {
-            questionData: {
-                handler: function (newVal, oldVal) {
-
-                    switch (this.typeCase) {
-                        case `kaoshi`:
-                            this.tianKongResult = [];
-                            this.pageData = newVal;
-                            this.newTiankongData = newVal.reply;
-                            if (this.newTiankongData) {
-                                this.newTiankongData.forEach(item => {
-                                    // if (item && item.length) {
-                                        this.tianKongResult.push(item);
-                                    // }
-                                });
-                            }
-
-                            if (!this.tianKongResult.length) {
-                                for (let i = 0; i < newVal.count; i++) {
-                                    this.tianKongResult.push('')
-                                }
-                            }
-                            break;
-                        case `geren`:
-                            this.tianKongResult = [];
-                            this.pageData = newVal;
-                            // 答案
-                            this.newTiankongData = newVal.reply;
-                            if (this.newTiankongData) {
-                                this.newTiankongData.forEach(item => {
-                                    if (item && item.length) {
-                                        this.tianKongResult.push(item);
-                                    }
-                                });
-                            } else {
-                                return;
-                            }
-
-                            if (!this.tianKongResult.length) {
-                                for (let i = 0; i < newVal.count; i++) {
-                                    const opt = [];
-                                    this.tianKongResult.push(opt)
-                                }
-                            }
-
-                            // 解析答案
-                            this.showAnswer = this.getShowAnswer(newVal.result);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            // 错误是否显示
-                            this.showError = this.checkAnswer(newVal.result, newVal.reply);
-                            break;
-                        case `cuoti`:
-                            this.pageData = newVal;
-                            this.newTiankongData = newVal.reply;
-                            this.tianKongResult = [];
-                            if (this.newTiankongData) {
-                                this.newTiankongData.forEach(item => {
-                                    if (item && item.length) {
-                                        this.tianKongResult.push(item);
-                                    }
-                                });
-                            }
-
-                            if (!this.tianKongResult.length) {
-                                for (let i = 0; i < newVal.count; i++) {
-                                    this.tianKongResult.push('')
-                                }
-                            }
-                            break;
-                        case `yulan`:
-                            this.pageData = newVal;
-                            this.newTiankongData = newVal.result;
-                            this.tianKongResult = [];
-
-                            if (this.newTiankongData) {
-                                this.newTiankongData.forEach(item => {
-                                    if (item && item.length) {
-                                        this.tianKongResult.push(item);
-                                    }
-                                });
-                            }
-
-                            if (!this.tianKongResult.length) {
-                                for (let i = 0; i < newVal.count; i++) {
-                                    this.tianKongResult.push('')
-                                }
-                            }
-                            // 解析答案
-                            this.showAnswer = this.getShowAnswer(this.tianKongResult);
-                            // 解析答案
-                            this.showError = this.checkAnswer(newVal.result, newVal.reply);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti2`:
-                            this.tianKongResult = [];
-                            this.pageData = newVal;
-                            // 单选题答案
-                            this.newTiankongData = newVal.reply;
-                            if (this.newTiankongData) {
-                                this.newTiankongData.forEach(item => {
-                                    if (item && item.length) {
-                                        this.tianKongResult.push(item);
-                                    }
-                                });
-                            }
-
-                            if (!this.tianKongResult.length) {
-                                for (let i = 0; i < newVal.count; i++) {
-                                    this.tianKongResult.push('')
-                                }
-                            }
-                            // 解析答案
-                            this.showAnswer = this.getShowAnswer(newVal.result);
-                            // 解析答案
-                            this.showError = this.checkAnswer(newVal.result, newVal.reply);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti3`:
-                            this.tianKongResult = [];
-                            this.pageData = newVal;
-                            // 单选题答案
-                            this.newTiankongData = newVal.reply;
-                            if (this.newTiankongData) {
-                                this.newTiankongData.forEach(item => {
-                                    if (item && item.length) {
-                                        this.tianKongResult.push(item);
-                                    }
-                                });
-                            }
-
-                            if (!this.tianKongResult.length) {
-                                for (let i = 0; i < newVal.count; i++) {
-                                    this.tianKongResult.push('')
-                                }
-                            }
-                            // 解析答案
-                            this.showAnswer = this.getShowAnswer(newVal.result);
-                            // 解析答案
-                            this.showError = this.checkAnswer(newVal.result, newVal.reply);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                    }
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-                deep: true
-            },
-        },
-    }
-</script>
-

+ 0 - 282
src/components/client/QuestionsForCuoti/MultipleChoice.vue

@@ -1,282 +0,0 @@
-<template>
-    <div class="mta-multiple-choice" v-if="pageData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiIndex">
-                    <span v-if="isYueDu">({{shitiIndex}})</span>
-                    <span v-else>{{shitiIndex}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="pageData.name">
-                </div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{pageData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player :checktimes="false" :options="audioOptions"></mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <el-checkbox-group v-model="newCheckListData" @change="selectChange">
-
-                    <div class="mta-checkbox-row" v-for="(item,index) in questionDataContent"
-                         :class="{'showError': showError && typeCase === 'geren'}">
-
-                        <el-checkbox :label="`${item.index}`">
-                            <slot>
-                                <span style="vertical-align: top;display: inline-block;width: auto;" class="wordOption">{{item.num}}、</span>
-                                <span v-html="item.label" class="wordBox"></span>
-                            </slot>
-                        </el-checkbox>
-                    </div>
-                </el-checkbox-group>
-                <div class="mta-modal" v-if="getShowModel"></div>
-            </el-col>
-        </el-row>
-        <mta-answer-area
-                v-if="typeCase === 'geren' || typeCase === 'cuoti2' || typeCase === 'cuoti3' || typeCase === 'yulan'"
-                :data="{
-                    showAnswer:showAnswer,
-                    analysis: pageData.answer
-                }"
-        ></mta-answer-area>
-
-    </div>
-</template>
-
-<script>
-    import {getLetterByIndex} from '@/utils/common'
-    import {mapGetters} from 'vuex'
-    import MtaAnswerArea from '@/components/client/QuestionsForCuoti/AnswerArea.vue'
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name: "MultipleChoice",
-        props: {
-            questionData: { // 单选题数据
-                require: true,
-                type: Object,
-            },
-            shitiIndex: {
-                type: Number,
-                default: 0,
-            },
-            isYueDu: {
-                type: Boolean,
-                default: false
-            },
-            yuduIndex: {
-                type: Number,
-            },
-            // 组件接环状态, kaoshi,geren,yulan,cuoti2
-            typeCase: {
-                type: String,
-                default: 'kaoshi'
-            },
-            getShowModel: {
-                type: Boolean,
-                default: true
-            }
-        },
-        components: {
-            MtaAnswerArea,
-            MtaBusAudioPlayer,
-        },
-        data() {
-            return {
-                // 页面渲染必须数据
-                pageData: null,
-                // 答案
-                newCheckListData: [],
-                showAnswer: null,
-                // 错误
-                showError: false,
-                // 解析
-                analysis: null,
-
-                audioOptions: null,
-            }
-        },
-        methods: {
-            checkAnswer(result, reply) {
-                let innerStatus = false;
-                if (reply === null) {
-                    return true;
-                }
-                if (result.length !== reply.length) {
-                    return true;
-                }
-                result.forEach(item => {
-                    if (reply.indexOf(item) === -1) {
-                        innerStatus = true;
-                    }
-                });
-
-
-
-                return innerStatus;
-            },
-            getShowAnswer(data) {
-                const opt = [];
-                if (data === undefined) {
-                    return;
-                }
-                // 答案排序
-                const newData  = data.sort(function sortNumber(a,b){return a - b})
-
-                newData.forEach(item => {
-                    opt.push(getLetterByIndex(Number(item)));
-                });
-                return opt.join(',');
-            },
-            selectChange(val) {
-                // this.$emit('reply', [this.questionData.paragraph ,this.questionData.stId,this.newCheckListData]);
-                // this.$emit('reply', [1 ,this.questionData.stId, this.newCheckListData]);
-                // this.questionData.reply = val;
-
-                this.pageData.reply = val;
-                this.showError = this.checkAnswer(this.pageData.result, val);
-
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        type: 'duoxuan',
-                        stId: this.questionData.stId,
-                        data: this.newCheckListData.sort(),
-                        number: this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        stId: this.questionData.stId,
-                        data: this.newCheckListData.sort(),
-                        number: this.shitiIndex - 1,
-                    });
-                }
-            }
-        },
-        computed: {
-            questionDataContent() {
-                if (this.pageData.content && this.pageData.content.length) {
-                    return this.pageData.content.map((item, index) => {
-                        return {
-                            label: item,
-                            num: getLetterByIndex(index),
-                            index: index
-                        }
-                    });
-                }
-            },
-            ...mapGetters(['getShowScore']),
-        },
-        watch: {
-            questionData: {
-                handler(newVal, oldVal) {
-                    switch (this.typeCase) {
-                        case `kaoshi`:
-                            this.pageData = newVal;
-                            if (newVal.reply && newVal.reply.length) {
-                                newVal.reply.sort().forEach(item => {
-                                    this.newCheckListData.push(item);
-                                })
-                            } else {
-                                this.newCheckListData = [];
-                            }
-                            break;
-                        case `geren`:
-                            this.pageData = newVal;
-                            // 答案
-                            if (newVal.reply && newVal.reply.length) {
-                                newVal.reply.sort().forEach(item => {
-                                    this.newCheckListData.push(item);
-                                })
-                            } else {
-                                this.newCheckListData = [];
-                            }
-                            // 解析答案
-                            // this.showAnswer = getLetterByIndex(Number(newVal.result));
-                            this.showAnswer = this.getShowAnswer(newVal.result);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            // 错误是否显示
-                            this.showError = this.checkAnswer(newVal.result, newVal.reply);
-                            break;
-                        case `cuoti`:
-                            this.pageData = newVal;
-                            if (newVal.reply && newVal.reply.length) {
-                                newVal.reply.sort().forEach(item => {
-                                    this.newCheckListData.push(item);
-                                })
-                            } else {
-                                this.newCheckListData = [];
-                            }
-                            break;
-                        case `yulan`:
-                            this.pageData = newVal;
-                            /*if (newVal.result && newVal.result.length) {
-                                newVal.result.forEach(item => {
-                                    this.newCheckListData.push(item);
-                                })
-                            } else {
-                                this.newCheckListData = [];
-                            }*/
-                            this.newCheckListData = [];
-                            // 解析答案
-                            this.showAnswer = this.getShowAnswer(newVal.result);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti2`:
-                            this.pageData = newVal;
-                            // 单选题答案
-                            if (newVal.reply && newVal.reply.length) {
-                                newVal.reply.sort().forEach(item => {
-                                    this.newCheckListData.push(item);
-                                })
-                            } else {
-                                this.newCheckListData = [];
-                            }
-                            // 解析答案
-                            this.showAnswer = this.getShowAnswer(newVal.result);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti3`:
-                            this.pageData = newVal;
-                            // 单选题答案
-                            if (newVal.reply && newVal.reply.length) {
-                                newVal.reply.sort().forEach(item => {
-                                    this.newCheckListData.push(item);
-                                })
-                            } else {
-                                this.newCheckListData = [];
-                            }
-                            // 解析答案
-                            this.showAnswer = this.getShowAnswer(newVal.result);
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                    }
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-            }
-        },
-    }
-</script>

+ 0 - 194
src/components/client/QuestionsForCuoti/ReadTheTopic.vue

@@ -1,194 +0,0 @@
-<template>
-    <div class="mta-read-the-topic">
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题题干区域 -->
-                <span class="wrap-shitiIndex" v-if="!!shitiIndex">{{shitiIndex}}.</span>
-                <div style="display: flex;justify-content: space-between;flex-direction: row;">
-                    <span class="mta-SC-title" v-html="questionData.name"></span>
-                    <span class="mta-SC-score" v-if="getShowScore">({{questionData.score}}分)</span>
-                </div>
-
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions' >
-            <mta-bus-audio-player :checktimes="false" :options="audioOptions"></mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-three-row" type="flex">
-            <el-col>
-                <!-- 试题区域 -->
-                <!-- 单选题 -->
-                <div v-for="(item,index) in danxuanData" :key="`danxuan${index}`" v-if="danxuanData.length > 0">
-                    <mta-single-choice
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :typeCase="typeCase"
-                            :yuduIndex="index"
-                            :getShowModel="getShowModel"
-                            :shitiIndex="num+index"
-                            @reply="reply"
-                    ></mta-single-choice>
-                </div>
-                <!-- 多选题 -->
-                <div v-for="(item,index)  in duoxuanData" :key="`duoxuan${index}`" v-if="duoxuanData.length > 0">
-                    <mta-multiple-choice
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :typeCase="typeCase"
-                            :getShowModel="getShowModel"
-                            :shitiIndex="num+index+danxuanData.length"
-                            @reply="reply"
-                    ></mta-multiple-choice>
-                </div>
-                <!-- 判断题 -->
-                <div v-for="(item,index)  in panduanData" :key="`panduan${index}`" v-if="panduanData.length > 0">
-                    <mta-true-or-false
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :typeCase="typeCase"
-                            :getShowModel="getShowModel"
-                            :shitiIndex="num+index+duoxuanData.length+danxuanData.length"
-                            @reply="reply"
-                    ></mta-true-or-false>
-                </div>
-                <!-- 填空题 -->
-                <div v-for="(item,index)  in tiankongData" :key="`tiankong${index}`" v-if="tiankongData.length > 0">
-                    <mta-gap-filling
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :getShowModel="getShowModel"
-                            :typeCase="typeCase"
-                            :shitiIndex="num+index+danxuanData.length+duoxuanData.length+panduanData.length"
-                            @reply="reply"
-                    ></mta-gap-filling>
-                </div>
-                <!-- 简答题 -->
-                <div v-for="(item,index)  in jiandaData" :key="`jianda${index}`" v-if="jiandaData.length > 0">
-                    <mta-short-answer-question
-                            :questionData="item"
-                            :is-yue-du="true"
-                            :yuduIndex="index"
-                            :getShowModel="getShowModel"
-                            :typeCase="typeCase"
-                            :shitiIndex="num+index+danxuanData.length+duoxuanData.length+panduanData.length+tiankongData.length"
-                            @reply="reply"
-                    ></mta-short-answer-question>
-                </div>
-            </el-col>
-        </el-row>
-        <!--<div class="mta-modal" v-if="getShowModel"></div>-->
-    </div>
-</template>
-
-<script>
-    import MtaSingleChoice from '@/components/client/QuestionsForCuoti/SingleChoice.vue';
-    import MtaTrueOrFalse from '@/components/client/QuestionsForCuoti/TrueOrFalse.vue';
-    import MtaMultipleChoice from '@/components/client/QuestionsForCuoti/MultipleChoice.vue';
-    import MtaGapFilling from '@/components/client/QuestionsForCuoti/GapFilling.vue';
-    import MtaShortAnswerQuestion from '@/components/client/QuestionsForCuoti/ShortAnswerQuestion.vue';
-    import {mapGetters} from 'vuex'
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name: "ReadTheTopic",
-        components: {
-            MtaSingleChoice,
-            MtaMultipleChoice,
-            MtaTrueOrFalse,
-            MtaGapFilling,
-            MtaShortAnswerQuestion,
-            MtaBusAudioPlayer,
-        },
-        props: {
-            questionData: { // 简答题数据
-                require: true,
-                type: Object,
-            },
-            shitiIndex: {
-                type: Number,
-                default: 0,
-            },
-            // 组件接环状态, kaoshi,geren,yulan,cuoti2
-            typeCase: {
-                type: String,
-                default: 'kaoshi'
-            },
-            getShowModel: {
-                type: Boolean,
-                default: true
-            }
-        },
-        created() {
-            /* this.danxuanData = this.questionData.shitiQueryDanxuanResponseVos ? this.questionData.shitiQueryDanxuanResponseVos :this.questionData.danxuanList;
-             this.duoxuanData = this.questionData.shitiQueryDuoxuanResponseVos ? this.questionData.shitiQueryDuoxuanResponseVos :this.questionData.duoxuanList;
-             this.panduanData = this.questionData.shitiQueryPanduanResponseVos ? this.questionData.shitiQueryPanduanResponseVos :this.questionData.panduanList;
-             this.jiandaData = this.questionData.shitiQueryJiandaResponseVos ? this.questionData.shitiQueryJiandaResponseVos :this.questionData.jiandaList;
-             this.tiankongData = this.questionData.shitiQueryTiankongResponseVos ? this.questionData.shitiQueryTiankongResponseVos :this.questionData.tiankongList;*/
-        },
-        computed: {
-            danxuanData() {
-                return this.questionData.danxuan
-            },
-            duoxuanData() {
-
-               return this.questionData.duoxuan
-
-                // return this.questionData.shitiQueryDuoxuanResponseVos ? this.questionData.shitiQueryDuoxuanResponseVos :this.questionData.duoxuanList
-            },
-            panduanData() {
-                 return this.questionData.panduan
-                // return this.questionData.shitiQueryPanduanResponseVos ? this.questionData.shitiQueryPanduanResponseVos :this.questionData.panduanList
-            },
-            jiandaData() {
-
-                return this.questionData.jianda
-
-                // return this.questionData.shitiQueryJiandaResponseVos ? this.questionData.shitiQueryJiandaResponseVos :this.questionData.jiandaList
-            },
-            tiankongData() {
-                 return this.questionData.tiankong
-                // return this.questionData.shitiQueryTiankongResponseVos ? this.questionData.shitiQueryTiankongResponseVos :this.questionData.tiankongList
-            },
-            ...mapGetters(['getShowScore']),
-        },
-        data() {
-            return {
-                num: 1,
-                audioOptions: null,
-            }
-        },
-        methods:  {
-            reply(data) {
-                const newData = Object.assign(data, {
-                    stId: this.questionData.stId,
-                    paragraph:  this.questionData.paragraph,
-                });
-                this.$emit('reply', newData)
-            }
-        },
-        watch:    {
-            questionData: {
-                handler(newVal, oldVal) {
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-            }
-        },
-    }
-</script>

+ 0 - 312
src/components/client/QuestionsForCuoti/ShortAnswerQuestion.vue

@@ -1,312 +0,0 @@
-<template>
-    <div class="mta-short-answer-question" v-if="pageData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiIndex">
-                    <span v-if="isYueDu">({{shitiIndex}})</span>
-                    <span v-else>{{shitiIndex}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="pageData.name">
-                </div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{pageData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player :options="audioOptions"
-                                  :checktimes="false"></mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <!--<el-input
-                        @change="inputChange"
-                        type="textarea"
-                        :rows="2"
-                        :readonly="typeCase=== 'yulan' || typeCase=== 'geren'"
-                        placeholder="请输入简答题答案"
-                        v-model="textarea">
-                </el-input>-->
-
-                <mta-st-quill-editor
-                        ref="editorQuill"
-                        :value="textarea"
-                        :quillEditorRef="quillEditorRef"
-                        flg="1"
-                        @syncValue="syncValue">
-                </mta-st-quill-editor>
-            </el-col>
-        </el-row>
-        <!--答案-->
-        <mta-answer-area
-                v-if="typeCase === 'geren' || typeCase === 'cuoti2' || typeCase === 'cuoti3' || typeCase === 'yulan'"
-                :data="{
-                    showAnswer:showAnswer,
-                    analysis: pageData.answer
-                }"
-        ></mta-answer-area>
-        <el-row class="mta-three-row ShortAnswer-btn-box" type="flex">
-            <el-col>
-                <el-button type="primary" v-if="filesArray&&filesArray.length>0" @click="downloadDialog=true"
-                           class="response-btn">
-                    下载附件
-                </el-button>
-                <el-button @click="yulanDialog=true" class="ShortAnswer-yl-btn"  type="primary" v-if="imgArray&&imgArray.length>0">
-                    预览图片
-                   <!-- <el-image :src="imgArray[0]" :preview-src-list="imgArray" class="ShortAnswer-image-btn"></el-image>-->
-                </el-button>
-            </el-col>
-
-        </el-row>
-        <el-dialog title="下载附件" :append-to-body="true" :visible.sync="downloadDialog" class="ShortAnswer-fj-dialog"
-                   width="30%">
-            <div v-for="(item,index) in filesArray" class="fj-box">
-                <div @click="downloadFile(item)">附件{{index+1}}</div>
-            </div>
-        </el-dialog>
-        <el-dialog title="图片"
-                   :visible.sync="yulanDialog"
-                   width="50%"
-                   center
-                   class="yulanDl"
-                   :close-on-click-modal="false"
-                   :append-to-body="true"
-                   @close="yulanDialogClose"
-                   @open="yulanDialogOpen"
-        >
-            <Perfect-scrollbar>
-                <div v-if="imgArray&&imgArray.length>0"
-                     style="display: flex;justify-content: flex-start; flex-wrap: wrap; height: 300px" >
-                    <el-image
-                            v-for="(item,index) in imgArray"
-                            :key="index"
-                            style="width: 100px; height: 100px; margin-left: 10px; margin-bottom: 6px"
-                            :src="item"
-                            :preview-src-list="[...item]">
-                        <div slot="error" class="image-slot">
-                            <!--  图片请求异常时的异常处理   -->
-                            <i class="el-icon-picture-outline"></i>
-                        </div>
-                    </el-image>
-                </div>
-            </Perfect-scrollbar>
-            <div slot="footer" class="dialog-footer">
-                <el-button @click="yulanDialog = false">关 闭</el-button>
-            </div>
-        </el-dialog>
-    </div>
-</template>
-
-<script>
-    import { mapGetters }       from 'vuex';
-    import { getStringByHtml2 } from '@/utils/common.js';
-    import MtaAnswerArea        from '@/components/client/QuestionsForCuoti/AnswerArea.vue';
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-    import MtaStQuillEditor     from '@/components/management/QuillEditor.vue';
-    import { PerfectScrollbar } from 'vue2-perfect-scrollbar';
-    export default {
-        name:       'ShortAnswerQuestion',
-        props:      {
-            questionData: { // 简答题数据
-                require: true,
-                type:    Object,
-            },
-            shitiIndex:   {
-                type:    Number,
-                default: 0,
-            },
-            isYueDu:      {
-                type:    Boolean,
-                default: false,
-            },
-            yuduIndex:    {
-                type: Number,
-            },
-            // 组件接环状态, kaoshi,geren,yulan,cuoti2
-            typeCase:     {
-                type:    String,
-                default: 'kaoshi',
-            },
-            getShowModel: {
-                type:    Boolean,
-                default: true,
-            },
-        },
-        components: {
-            MtaAnswerArea,
-            MtaBusAudioPlayer,
-            MtaStQuillEditor,
-            PerfectScrollbar
-        },
-        watch:      {
-            questionData: {
-                handler(newVal, oldVal) {
-                    switch (this.typeCase) {
-                        case `kaoshi`:
-                            this.pageData = newVal;
-                            this.textarea = newVal.reply === `null` ? '' : newVal.reply;
-                            break;
-                        case `geren`:
-                            this.pageData = newVal;
-                            // 答案
-                            this.textarea = newVal.reply === `null` ? '' : newVal.reply;
-                            // 解析答案
-                            this.showAnswer = getStringByHtml2(newVal.result);
-                            // 解析
-                            this.analysis = getStringByHtml2(newVal.answer);
-                            break;
-                        case `cuoti`:
-                            this.pageData = newVal;
-                            // 答案
-                            this.textarea = newVal.reply === `null` ? '' : newVal.reply;
-                            break;
-                        case `yulan`:
-                            this.pageData = newVal;
-                            // 答案
-                            // this.textarea = getStringByHtml(newVal.result === `null` ? '' : newVal.result);
-                            this.textarea = '';
-                            // 解析答案
-                            this.showAnswer = getStringByHtml2(newVal.result);
-                            // 解析
-                            this.analysis = getStringByHtml2(newVal.answer);
-
-                            break;
-                        case `cuoti2`:
-                            this.pageData = newVal;
-                            // 答案
-                            this.textarea = newVal.reply === `null` ? '' : newVal.reply;
-                            // 解析答案
-                            this.showAnswer = getStringByHtml2(newVal.result);
-                            // 解析
-                            this.analysis = getStringByHtml2(newVal.answer);
-                            break;
-                        case `cuoti3`:
-                            this.pageData = newVal;
-                            // 答案
-                            this.textarea = newVal.reply === `null` ? '' : newVal.reply;
-                            // 解析答案
-                            this.showAnswer = getStringByHtml2(newVal.result);
-                            // 解析
-                            this.analysis = getStringByHtml2(newVal.answer);
-                            break;
-                    }
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                    if (data.files) {
-                        let allFiles = JSON.parse(data.files);
-                        let imgArray = [];
-                        let filesArray = [];
-                        let imageType = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'];
-                        for (let name of allFiles) {
-                            var index1 = name.lastIndexOf('.');
-                            var index2 = name.length;
-                            var suffix = name.substring(index1 + 1, index2);
-                            if (imageType.indexOf(suffix) != -1) {
-                                imgArray.push(name);  // 如果为图片
-                            } else {
-                                filesArray.push(name);
-                            }
-                        }
-                        this.imgArray = imgArray;
-                        this.filesArray = filesArray;
-                    }
-                },
-                immediate: true,
-                deep:      true,
-            },
-        },
-        computed:   {
-            ...mapGetters(['getShowScore']),
-        },
-        data() {
-            return {
-                // 页面渲染必须数据
-                pageData:       null,
-                // 答案
-                textarea:       null,
-                // 显示答案
-                showAnswer:     null,
-                // 解析
-                analysis:       null,
-                audioOptions:   '',
-                imgArray:       [],
-                filesArray:     [],
-                downloadDialog: false,
-                quillEditorRef: '',
-                yulanDialog: false,
-            };
-        },
-        methods:    {
-            yulanDialogClose(){
-
-            },
-            yulanDialogOpen(){
-
-            },
-            downloadFile(data) {
-                window.location.href = data;
-            },
-            inputChange(val) {
-                // this.$emit('reply', [1, this.questionData.stId, val]);
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        type:      'jianda',
-                        stId:      this.questionData.stId,
-                        data:      val,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        stId:      this.questionData.stId,
-                        data:      val,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-
-            },
-            syncValue(flg, content) {
-                this.content = content;
-                this.textarea = content;
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        type:      'jianda',
-                        stId:      this.questionData.stId,
-                        files:     this.questionData.files,
-                        data:      content,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        stId:      this.questionData.stId,
-                        files:     this.questionData.files,
-                        data:      content,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-
-
-            },
-        },
-        created() {
-            this.quillEditorRef = 'quillEditorRef' + Math.floor(Math.random() * 100000);
-        },
-    };
-</script>

+ 0 - 230
src/components/client/QuestionsForCuoti/SingleChoice.vue

@@ -1,230 +0,0 @@
-<template>
-    <div class="mta-single-choice" v-if="pageData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-            <span class="wrap-shitiIndex" v-if="!!shitiIndex">
-                <span v-if="isYueDu">({{shitiIndex}})</span>
-                <span v-else>{{shitiIndex}}.</span>
-            </span>
-                <!--  <span>【单选题】</span>-->
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="pageData.name"></div>
-
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{pageData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions'>
-            <mta-bus-audio-player :checktimes="false" :options="audioOptions"></mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <el-radio-group v-model="newRadioData" @change="selectChange">
-                    <div class="mta-radio-row" v-for="(item, index) in questionDataContent"
-                         :class="{'showError': showError && typeCase === 'geren'}">
-
-                        <el-radio :label="`${index}`">
-                            <span style="vertical-align: top;" class="wordOption">{{item.num}}、</span>
-                            <span class="wordBox" v-html="item.label"></span></el-radio>
-                    </div>
-                </el-radio-group>
-                <div class="mta-modal" v-if="getShowModel"></div>
-            </el-col>
-        </el-row>
-        <mta-answer-area
-                v-if="typeCase === 'geren' || typeCase === 'cuoti2' || typeCase === 'cuoti3'|| typeCase === 'yulan'"
-                :data="{
-                    showAnswer:showAnswer,
-                    analysis: pageData.answer
-                }"
-        ></mta-answer-area>
-        <!--<el-row class="mta-three-row" type="flex" v-if = "typeCase === 'geren' || typeCase === 'cuoti2'">
-            <el-col>
-                &lt;!&ndash; 试题内容区域 &ndash;&gt;
-                <div class="mta-three-row-div">
-                    <span class="three-span">正确答案:</span>
-                    <span>{{showAnswer}}</span>
-                </div>
-                <div class="mta-three-row-div">
-                    <span class="three-span">答案解析:</span>
-                    <el-input type="textarea" :readonly="true" v-model="pageData.answer"></el-input>
-                </div>
-            </el-col>
-        </el-row>-->
-
-    </div>
-
-</template>
-
-<script>
-    import { getLetterByIndex } from '@/utils/common';
-    import { mapGetters }       from 'vuex';
-    import MtaAnswerArea        from '@/components/client/QuestionsForCuoti/AnswerArea.vue';
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name:       'SingleChoice',
-        props:      {
-            questionData: { // 单选题数据
-                require: true,
-                type:    Object,
-            },
-            shitiIndex:   { // 题序号
-                type:    Number,
-                default: 0,
-            },
-            isYueDu:      {
-                type:    Boolean,
-                default: false,
-            },
-            yuduIndex:    {
-                type: Number,
-            },
-            // 组件接环状态, kaoshi,geren,yulan,cuoti2
-            typeCase:     {
-                type:    String,
-                default: 'kaoshi',
-            },
-            getShowModel: {
-                type:    Boolean,
-                default: true,
-            },
-        },
-        data() {
-            return {
-                // 页面渲染必须数据
-                pageData:     null,
-                // 答案
-                newRadioData: null,
-                showAnswer:   null,
-                // 错误
-                showError:    false,
-                // 解析
-                analysis:     null,
-                audioOptions: null,
-            };
-        },
-        methods:    {
-            checkAnswer(result, reply) {
-                return result !== reply;
-            },
-            selectChange(val) {
-                this.questionData.reply = val;
-
-                this.pageData.reply = val;
-                this.showError = this.checkAnswer(this.pageData.result, val);
-
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        type:      'danxuan',
-                        stId:      this.pageData.stId,
-                        data:      this.newRadioData,
-                        number:    this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph: this.questionData.paragraph,
-                        stId:      this.questionData.stId,
-                        data:      this.newRadioData,
-                        number:    this.shitiIndex - 1,
-                    });
-                }
-            },
-        },
-        components: {
-            MtaAnswerArea,
-            MtaBusAudioPlayer,
-        },
-        watch:      {
-            questionData: {
-                handler(newVal, oldVal) {
-                    switch (this.typeCase) {
-                        case `kaoshi`:
-                            this.pageData = newVal;
-                            this.newRadioData = newVal.reply;
-                            break;
-                        case `geren`:
-                            this.pageData = newVal;
-                            // 答案
-                            this.newRadioData = newVal.reply;
-                            // 解析答案
-                            this.showAnswer = getLetterByIndex(Number(newVal.result));
-                            // 解析
-                            this.analysis = newVal.answer;
-                            // 错误是否显示
-                            this.showError = this.checkAnswer(newVal.result, newVal.reply);
-                            break;
-                        case `cuoti`:
-                            this.pageData = newVal;
-                            this.newRadioData = newVal.reply;
-                            break;
-                        case `yulan`:
-                            this.pageData = newVal;
-                            // this.newRadioData = newVal.result;
-                            this.newRadioData = null;
-                            // 解析答案
-                            this.showAnswer = getLetterByIndex(Number(newVal.result));
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti2`:
-                            this.pageData = newVal;
-                            // 单选题答案
-                            this.newRadioData = newVal.reply;
-                            // 解析答案
-                            this.showAnswer = getLetterByIndex(Number(newVal.result));
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti3`:
-                            this.pageData = newVal;
-                            // 单选题答案
-                            this.newRadioData = newVal.reply;
-                            // 解析答案
-                            this.showAnswer = getLetterByIndex(Number(newVal.result));
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                    }
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-                deep:      true,
-            },
-
-        },
-        computed:   {
-            questionDataContent() {
-                if (this.questionData.content && this.questionData.content.length) {
-                    return this.questionData.content.map((item, index) => {
-                        return {
-                            label: item,
-                            num:   getLetterByIndex(index),
-                        };
-                    });
-                }
-            },
-            ...mapGetters(['getShowScore']),
-        },
-        created() {
-
-        },
-    };
-</script>
-

+ 0 - 62
src/components/client/QuestionsForCuoti/TianKongItem.vue

@@ -1,62 +0,0 @@
-<template>
-    <div class="mta-tiankong-item">
-        <span class="mta-num">填空{{num}}:</span>
-        <el-input v-model="inputText"
-                  :class="{'showError': showError && data.typeCase === 'geren', 'showSuccess': !showError && data.typeCase === 'geren' || data.typeCase === 'cuoti2'}"
-                  @change="inputChange"
-                  :readonly="data.typeCase=== 'yulan' || data.typeCase=== 'geren'"
-                  :placeholder="`请输入填空${num}答案`"></el-input>
-    </div>
-</template>
-
-<script>
-    import {getStringByHtml} from '@/utils/common.js'
-
-    export default {
-        name: "TianKongItem",
-        props: {
-            data: {
-                type: Object,
-                require: true
-            },
-        },
-        data() {
-            return {
-                num: this.data.num,
-                inputText: undefined,
-
-            }
-        },
-        methods: {
-            inputChange(val) {
-                this.$emit('change', {
-                    num: this.num,
-                    data: val
-                });
-                this.$emit('update:result', val);
-            }
-        },
-        watch: {
-            data: {
-                handler(newVal) {
-                    if (this.data.typeCase === 'yulan') {
-                        // this.inputText = newVal.answer.join(',');
-                        this.inputText = '';
-                    } else {
-                        this.inputText = newVal.answer
-                    }
-
-                },
-                immediate: true,
-                deep: true
-            }
-        },
-        computed: {
-            showError() {
-                let status = this.data.result[this.num - 1].indexOf(this.inputText) === -1;
-                return status
-            }
-
-        }
-    }
-</script>

+ 0 - 205
src/components/client/QuestionsForCuoti/TrueOrFalse.vue

@@ -1,205 +0,0 @@
-<template>
-    <div class="mta-true-or-false" v-if="pageData.name">
-        <el-row class="mta-first-row" type="flex">
-            <el-col>
-                <span class="wrap-shitiIndex" v-if="!!shitiIndex">
-                    <span v-if="isYueDu">({{shitiIndex}})</span>
-                    <span v-else>{{shitiIndex}}.</span>
-                </span>
-                <!-- 试题题目 -->
-                <div class="mta-SC-title" v-html="pageData.name"></div>
-                <span class="mta-SC-score" v-if="getShowScore && !isYueDu">({{pageData.score}}分)</span>
-            </el-col>
-        </el-row>
-        <el-row class="mta-two-row" type="flex" v-if='audioOptions' >
-            <mta-bus-audio-player :checktimes="false" :options="audioOptions"></mta-bus-audio-player>
-        </el-row>
-        <el-row class="mta-two-row" type="flex">
-            <el-col>
-                <!-- 试题内容区域 -->
-                <el-radio-group v-model="newRadioData" @change="selectChange"
-                                :class="{'showError': showError && typeCase === 'geren'}">
-                    <div class="mta-panduan-row">
-                        <el-radio label="1">正确</el-radio>
-                    </div>
-                    <div class="mta-panduan-row">
-                        <el-radio label="0">错误</el-radio>
-                    </div>
-                </el-radio-group>
-                <div class="mta-modal" v-if="getShowModel"></div>
-            </el-col>
-        </el-row>
-        <mta-answer-area
-                v-if="typeCase === 'geren' || typeCase === 'cuoti2' || typeCase === 'cuoti3' || typeCase === 'yulan'"
-                :data="{
-                    showAnswer:showAnswer,
-                    analysis: pageData.answer
-                }"
-        ></mta-answer-area>
-
-    </div>
-</template>
-
-<script>
-    import {mapGetters} from 'vuex'
-    import MtaAnswerArea from '@/components/client/QuestionsForCuoti/AnswerArea.vue'
-    import MtaBusAudioPlayer    from '@/components/custom/MtaBusAudioPlayer.vue';
-
-    export default {
-        name: "TrueOrFalse",
-        props: {
-            questionData: { // 单选题数据
-                require: true,
-                type: Object,
-            },
-            shitiIndex: { // 试题序号
-                type: Number,
-                default: 0
-            },
-            isYueDu: {
-                type: Boolean,
-                default: false
-            },
-            yuduIndex: {
-                type: Number,
-            },
-            // 组件接环状态, kaoshi,geren,yulan,cuoti2
-            typeCase: {
-                type: String,
-                default: 'kaoshi'
-            },
-            getShowModel: {
-                type: Boolean,
-                default: true
-            }
-        },
-        components: {
-            MtaAnswerArea,
-            MtaBusAudioPlayer,
-        },
-        data() {
-            return {
-                // 页面渲染必须数据
-                pageData: null,
-                // 答案
-                newRadioData: this.questionData.reply,
-                showAnswer: null,
-                // 错误
-                showError: false,
-                // 解析
-                analysis: null,
-                audioOptions: null,
-            }
-        },
-        watch: {
-
-            questionData: {
-                handler(newVal, oldVal) {
-                    switch (this.typeCase) {
-                        case `kaoshi`:
-                            this.pageData = newVal;
-                            this.newRadioData = newVal.reply;
-                            break;
-                        case `geren`:
-                            this.pageData = newVal;
-                            // 答案
-                            this.newRadioData = newVal.reply;
-                            // 解析答案
-                            this.showAnswer = newVal.result === '0' ? '错误' : '正确';
-                            // 解析
-                            this.analysis = newVal.answer;
-                            // 错误是否显示
-                            this.showError = this.checkAnswer(newVal.result, newVal.reply);
-                            break;
-                        case `cuoti`:
-                            this.pageData = newVal;
-                            this.newRadioData = newVal.reply;
-                            break;
-                        case `yulan`:
-                            this.pageData = newVal;
-                            // this.newRadioData = newVal.result;
-                            this.newRadioData = null;
-                            // 解析答案
-                            this.showAnswer = newVal.result === '0' ? '错误' : '正确';
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti2`:
-                            this.pageData = newVal;
-                            // 单选题答案
-                            this.newRadioData = newVal.reply;
-                            // 解析答案
-                            this.showAnswer = newVal.reply === '0' ? '错误' : '正确';
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                        case `cuoti3`:
-                            this.pageData = newVal;
-                            // 单选题答案
-                            this.newRadioData = newVal.reply;
-                            // 解析答案
-                            this.showAnswer = newVal.reply === '0' ? '错误' : '正确';
-                            // 解析
-                            this.analysis = newVal.answer;
-                            break;
-                    }
-
-                    let data = this.questionData;
-                    if (data.adjunct) {
-                        let arrItem = JSON.parse(data.adjunct);
-                        for (const item of arrItem) {
-                            if (item.type === 'audio') {
-                                this.audioOptions = {};
-                                this.audioOptions.src = item.src;
-                                this.audioOptions.title = item.oriname.split('.')[0];
-                                this.audioOptions.autoplay = false;
-                                this.audioOptions.dragable = item.dragable;
-
-                                this.audioOptions.playtimes = item.playtimes;
-                            }
-                        }
-                    }
-                },
-                immediate: true,
-                deep: true
-            },
-
-            /* questionData: function (newVal, oldVal) {
-                 this.newRadioData = newVal.reply;
-             },*/
-        },
-        computed: {
-            ...mapGetters(['getShowScore']),
-        },
-        methods: {
-            checkAnswer(result, reply) {
-                return result !== reply
-            },
-            selectChange(val) {
-                this.questionData.reply = val;
-
-                this.pageData.reply = val;
-                this.showError = this.checkAnswer(this.pageData.result, val);
-
-                if (this.isYueDu) {
-                    this.$emit('reply', {
-                        paragraph:  this.questionData.paragraph,
-                        type: 'panduan',
-                        stId: this.questionData.stId,
-                        data: this.newRadioData,
-                        number: this.yuduIndex,
-                    });
-                } else {
-                    this.$emit('reply', {
-                        paragraph:  this.questionData.paragraph,
-                        stId: this.questionData.stId,
-                        data: this.newRadioData,
-                        number: this.shitiIndex - 1,
-                    });
-                }
-
-            }
-        },
-    }
-</script>
-

+ 0 - 94
src/components/client/kechengDetaileTab/biji.vue

@@ -1,94 +0,0 @@
-<template>
-    <bijiSlot>
-        <template slot="leftPart">
-            <img :src="data.userPic  || defultImg" alt="">
-        </template>
-        <template slot="titlePart">
-            <span>{{data.userName}}</span>
-        </template>
-        <template slot="contentPart">
-            {{data.content}}
-        </template>
-        <template slot="btnPart">
-            <div>
-                <el-button  @click="checkAllFun(data.content)" type="text" v-if="showBtnFlag"
-                           v-text="!checkAllFlag ? '收起' : '全文'"></el-button>
-                <el-button @click="editBtnFun(data)" type="text">编辑</el-button>
-                <el-button @click="deleteBtnFun(data)" type="text">删除</el-button>
-            </div>
-            <div>2020-12-45</div>
-            <!--<div>{{data.updatetime}}</div>-->
-        </template>
-    </bijiSlot>
-</template>
-
-<script>
-    import bijiSlot   from '@/components/client/kechengDetaileTab/bijiSlot.vue';
-    export default {
-        name:       'biji',
-        components: {
-            bijiSlot,
-        },
-        props: {
-            data: {
-                type: Object,
-            },
-        },
-        data() {
-            return {
-                showBtnFlag:false, //按钮显隐
-                checkAllFlag:false,  //按钮切换
-                defultImg:    'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
-                content:''
-
-            };
-        },
-        methods:    {
-            checkAllFun(){
-                if(this.checkAllFlag){
-                    this.data.content = this.content;
-                    this.checkAllFlag = false
-                }else {
-                    this.data.content = this.data.content.slice(0,200) + '...';
-                    this.checkAllFlag = true
-                }
-            },
-            editBtnFun(data){
-                this.$emit('editBtnFun',data)
-            },
-            deleteBtnFun(data){
-                this.$emit('deleteBtnFun',data)
-            },
-        },
-        watch: {
-            data(){
-                this.content=[];
-                if(this.data.content.length>220){
-                    this.showBtnFlag = true;
-                    this.checkAllFlag = true;
-                    this.content = this.data.content;
-                    this.data.content = this.data.content.slice(0,220) + '...';
-                }else {
-                    this.showBtnFlag = false;
-                    this.checkAllFlag = false;
-                }
-            }
-        },
-        created() {
-            this.content=[];
-            if(this.data.content.length>220){
-                this.showBtnFlag = true;
-                this.checkAllFlag = true;
-                this.content = this.data.content;
-                this.data.content = this.data.content.slice(0,220) + '...';
-            }else {
-                this.showBtnFlag = false;
-                this.checkAllFlag = false;
-            }
-        },
-    };
-</script>
-
-<style lang="scss">
-
-</style>

+ 0 - 90
src/components/client/kechengDetaileTab/bijiDialog.vue

@@ -1,90 +0,0 @@
-<template>
-    <div>
-        <el-dialog :class="type==='Delete'? 'response-tip-dialog' :'response-small-dialog'"
-                   :close-on-click-modal="false"
-                   :show="show"
-                   :title="title"
-                   :visible.sync="visible"
-                   center>
-            <div v-if="type==='Edit'">
-                <el-input :autosize="{ minRows: 6, maxRows: 10}" type="textarea" v-model="data.content"></el-input>
-            </div>
-            <div v-else-if="type==='Delete'">
-                是否删除此条笔记?
-            </div>
-            <div v-else-if="type==='Add'">
-                <el-input
-                        :autosize="{ minRows: 6, maxRows: 10}"
-                        placeholder="请输入内容"
-                        type="textarea"
-                        v-model="addDialogConent">
-                </el-input>
-            </div>
-            <span class="dialog-footer" slot="footer">
-                <el-button @click="closeFun">取 消</el-button>
-                <el-button :disabled="isDisable" @click="confirmFun" type="primary">确 定</el-button>
-            </span>
-        </el-dialog>
-    </div>
-</template>
-
-<script>
-    export default {
-        name:       'biji',
-        props: {
-            title: {
-                type: String,
-                default: '提示',
-            },
-            data: {
-                type: Object,
-            },
-            type: {
-                type: String,
-                required: true,
-            },
-            show: {
-                type: Boolean,
-                default: false
-            }
-        },
-        data() {
-            return {
-                visible: this.show,
-                addDialogConent: '',
-                isDisable: false,
-                timer:               null,
-            };
-        },
-        watch: {
-            show () {
-                this.visible = this.show;
-            }
-        },
-        methods:    {
-            closeFun(){
-                console.log('show'+this.type);
-                this.$emit('update:show', false)
-            },
-            confirmFun(){
-                let opt = {
-                    conent:this.addDialogConent
-                }
-                this.isDisable = true
-                this.timer = setTimeout(() => {
-                    this.isDisable = false
-                }, 1000);
-                this.$emit('confirmBtn'+this.type, this.data|| opt)
-            },
-            clearTime(){
-                clearTimeout(this.timer)
-            },
-        },
-        created() {
-        },
-    };
-</script>
-
-<style lang="scss">
-
-</style>

+ 0 - 40
src/components/client/kechengDetaileTab/bijiSlot.vue

@@ -1,40 +0,0 @@
-<template>
-    <div class="c-mta-biji-layout">
-        <div class="c-biji-image-box">
-            <slot name="leftPart"></slot>
-        </div>
-        <div class="c-biji-content-box">
-            <div class="c-biji-first-line">
-                <slot name="titlePart"></slot>
-            </div>
-            <div class="c-biji-two-line">
-                <slot name="contentPart"></slot>
-            </div>
-            <div class="c-biji-three-line">
-                <slot name="btnPart"></slot>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script>
-    export default {
-        name:       'biji',
-
-        data() {
-            return {
-
-            };
-        },
-        methods:    {
-
-        },
-        created() {
-
-        },
-    };
-</script>
-
-<style lang="scss">
-
-</style>

+ 0 - 53
src/components/client/test/TestComponent.vue

@@ -1,53 +0,0 @@
-<template>
-    <div>
-        <el-button @click="aaa">aaa</el-button>
-        <el-button @click="bbb">bbb</el-button>
-    </div>
-</template>
-<script>
-    export default {
-        name:     'TestComponent',
-        data() {
-            return {
-
-            };
-        },
-        props:    {
-            stData: {
-                require: true,
-                type:    Object,
-
-                /*a: {              ===  user 对象
-                    b: '232'
-                    ,c: '6767'
-                },
-                e: [],
-                f: false,
-                g: 232323,
-                    h: []
-                */
-            },
-            stStr:  {
-                require: true,
-                type:    String,
-            },
-        },
-        computed: {
-            /*stStrComputed() {
-                return this.stStr;
-            },*/
-        },
-        methods:  {
-            aaa() {
-                this.stData.a.b = parseInt(this.stData.a.b) + 1;
-                this.stData.a.c = parseInt(this.stData.a.c) + 2;
-            },
-            bbb() {
-                // this.stStr = this.stStr + 1
-                this.$emit('update:stStr', this.stStr + 1);
-            },
-        },
-        created() {
-        },
-    };
-</script>

+ 0 - 226
src/components/management/Layout/EditableTree/EditableTree.vue

@@ -1,226 +0,0 @@
-<template>
-    <div class="editableTree fsize-m4">
-        <div class="editableTree-filter" v-show="needTextFilter">
-            <el-input
-                    placeholder="输入关键字进行过滤"
-                    v-model="filterText">
-            </el-input>
-        </div>
-        <div class="wrap-tree">
-            <el-tree
-                    :data="newData"
-                    :node-key="nodeKey"
-                    :default-expanded-keys="stDefaultExpandedKeys"
-                    @node-drag-start="handleDragStart"
-                    @node-drag-enter="handleDragEnter"
-                    @node-drag-leave="handleDragLeave"
-                    @node-drag-over="handleDragOver"
-                    @node-drag-end="handleDragEnd"
-                    @node-drop="handleDrop"
-                    @node-click="handleNodeClick"
-                    @node-expand="handleNodeExpand"
-                    @node-collapse="handleNodeCollapse"
-                    :allow-drop="allowDrop"
-                    :draggable="treeDraggable"
-                    :expand-on-click-node="false"
-                    ref="tree"
-                    :filter-node-method="filterNode"
-                    :highlight-current="true"
-            >
-                <div class="custom-tree-node" slot-scope="{ node, data }">
-                    <editor-tree-item
-                            :node="node"
-                            :data="data"
-                            :needControl="isControl"
-                            @labelClick="handleLabelClick"
-                            @treeItemAppend="treeAppend"
-                            @treeItemRemove="treeRemove"
-                            @changeDragState="changeDragState"
-                            @treeItemEditor="getTreeItemEditor">
-                    </editor-tree-item>
-                </div>
-            </el-tree>
-        </div>
-    </div>
-</template>
-
-<script>
-    import EditorTreeItem from '@/components/management/Layout/EditableTree/EditableTreeItem.vue';
-    import { mapGetters } from 'vuex';
-
-    export default {
-        name:       'EditableTree',
-        components: {
-            EditorTreeItem,
-        },
-        props:      {
-            newData:         {
-                // 树的数据
-                type:    Array,
-                default: () => arr,
-            },
-            allowDropStatue: {
-                // 是否允许设置拖拽
-                type:    Boolean,
-                default: false,
-            },
-            isDraggable:     {
-                type:    Boolean,
-                default: true,
-            },
-            needTextFilter:  {
-                type:    Boolean,
-                default: false,
-            },
-            isControl:       {
-                type:    Boolean,
-                default: true,
-            },
-            nodeKey:         {
-                type:    String,
-                default: 'id',
-            },
-            expandedKeys:    {
-                // 树的数据
-                type:    Array,
-                default: () => [],
-            },
-        },
-        data() {
-            return {
-                input:                 '',
-                startData:             '',
-                showItem:              true,
-                treeDraggable:         this.isDraggable,
-                filterText:            '',
-                currentNodekey:        '',
-                stDefaultExpandedKeys: [],
-            };
-        },
-        methods:    {
-            filterNode(value, data) {
-                if (!value) {
-                    return true;
-                }
-                return data.lable.indexOf(value) !== -1;
-            },
-            handleLabelClick(data) {
-                this.$refs.tree.setCurrentKey(data.data.id);
-                this.$emit('handleClick', data);
-            },
-            setCurrentKey(id) {
-                this.$refs.tree.setCurrentKey(id);
-            },
-            handleNodeClick(data, Node, self) {
-                /*const opt = {data, Node, self};
-                this.$emit('handleClick', opt);*/
-            },
-            handleNodeExpand(data) {
-                this.$emit('syncExpandedKeys', {
-                    data:     data,
-                    isExpand: true,
-                });
-            },
-            handleNodeCollapse(data) {
-                this.$emit('syncExpandedKeys', {
-                    data:     data,
-                    isExpand: false,
-                });
-            },
-            handleDragStart(node, ev) {
-                this.startData = node;
-            },
-            handleDragEnter(draggingNode, dropNode, ev) {
-            },
-            handleDragLeave(draggingNode, dropNode, ev) {
-            },
-            handleDragOver(draggingNode, dropNode, ev) {
-            },
-            handleDragEnd(draggingNode, dropNode, dropType, ev) {
-            },
-            // 拖拽放置时触发
-            handleDrop(draggingNode, dropNode, dropType, ev) {
-                this.$emit('handleDrop', dropNode, draggingNode, dropType, ev, this.startData);
-            },
-            // 是否允许拖拽
-            allowDrop(draggingNode, dropNode, dropType) {
-                const c = dropType !== 'prev' && dropType !== 'next';
-
-                if (!c && dropNode.data.lable === this.newData[0].lable && this.allowDropStatue) {
-
-                    return false;
-                } else {
-                    return true;
-                }
-            },
-            // 编辑事件回调触发
-            getTreeItemEditor(data) {
-                this.$emit('treeEditor', data);
-            },
-            // 新增事件回调触发
-            treeAppend(payload) {
-                let { node, data } = payload;
-                this.$emit('treeAppend', data);
-            },
-            // 删除事件回调触发
-            treeRemove(payload) {
-                this.$emit('treeRemove', payload);
-            },
-
-            changeDragState(b) {
-                this.treeDraggable = b;
-            },
-            setExpanded(treeData, expandedKeys) {
-                function setTreeChildeExpanded(children, that) {
-                    for (const child of children) {
-                        if (expandedKeys.indexOf(child[that.nodeKey]) > -1) {
-                            that.stDefaultExpandedKeys.push(child[that.nodeKey]);
-                        }
-                        if (child.children) {
-                            setTreeChildeExpanded(child.children, that);
-                        }
-                    }
-                }
-
-                // default expand;
-                if (!expandedKeys || expandedKeys.length === 0) {
-                    for (const treeDataItem of treeData) {
-                        this.stDefaultExpandedKeys.push(treeDataItem[this.nodeKey]);
-                    }
-                } else if (Array.isArray(expandedKeys)) {
-                    for (const treeDataItem of treeData) {
-                        this.stDefaultExpandedKeys.push(treeDataItem[this.nodeKey]);
-                        if (treeDataItem.children) {
-                            setTreeChildeExpanded(treeDataItem.children, this);
-                        }
-                    }
-                }
-            },
-            pushExpandedKey(expandedKeys, id) {
-                if (expandedKeys.indexOf(id) === -1) {
-                    expandedKeys.push(id);
-                }
-            }
-        },
-        computed:   {},
-        mounted() {
-        },
-        watch:      {
-            newData: {
-                handler(newVal, oldVal) {
-                    this.setExpanded(newVal, this.expandedKeys);
-                },
-            },
-            /*expandedKeys: {
-                handler(newVal, oldVal) {
-                    this.setExpanded(this.newData, newVal);
-                },
-                // immediate: true
-            },*/
-            filterText(val) {
-                this.$refs.tree.filter(val);
-            },
-        },
-    };
-</script>
-

+ 0 - 125
src/components/management/Layout/EditableTree/EditableTreeItem.vue

@@ -1,125 +0,0 @@
-<template>
-    <div class="editorTreeComponent fsize-m4" :class="{ editorTreeItem: showItem }">
-        <div class="editorTreeContent">
-            <span class="treeShowLabel" @click.stop="() => labelClick(node, data)"
-                  :title="node.data.lable  === undefined ? node.data.name: node.data.lable"
-                  v-text="node.data.lable === undefined ? node.data.name: node.data.lable"></span>
-            <span class="treeCtrlBtn" slot="treeItem">
-              <i class="el-icon-edit " v-if="needControl && data.number !== 0" @click.stop="() => editor(node, data)"></i>
-              <i class="el-icon-plus " v-if="needControl" @click.stop="() => append(node, data)"></i>
-              <i class="el-icon-delete " v-if="needControl && data.number !== 0" @click.stop="remove(node, data)"></i>
-            </span>
-        </div>
-        <el-input v-model="input" ref="treeInput" placeholder="请输入内容"
-                  :key="node.id === undefined ? node.roleId : node.id" :autofocus="true"
-                  @blur="onblurFun" @keydown.native.13.prevent="onEnterFun"></el-input>
-        <!--<MtaStDialog
-                :dVisible.sync="mtaStDialogVisible"
-                dType="warning"
-                :modalAppendToBody="false"
-                dMessage="选中的数据将彻底删除"
-                @comfirmCallback="comfirmCallback()"
-        ></MtaStDialog>-->
-        <el-dialog
-                :close-on-click-modal="false"
-                :visible.sync="mtaStDialogVisible"
-                center
-                class="response-tip-dialog"
-                title="删除"
-        >
-            <div>选中的数据将彻底删除。</div>
-            <span class="dialog-footer" slot="footer">
-                    <el-button @click="comfirmCallback" type="primary">确 定</el-button>
-                    <el-button @click="mtaStDialogVisible = false">取 消</el-button>
-                    </span>
-        </el-dialog>
-    </div>
-</template>
-
-<script>
-    export default {
-        name:    'EditableTreeItem',
-        props:   {
-            node: {
-                type:    Object,
-                default: {},
-            },
-            data: {
-                type:    Object,
-                default: {},
-            },
-            needControl: {
-                type: Boolean,
-                default: true,
-            }
-        },
-        data() {
-            return {
-                mtaStDialogVisible: false,
-                input:    '',
-                showItem: true,
-                oldValue: '',
-                mydata: '',
-            };
-        },
-        methods: {
-            comfirmCallback() {
-                this.$emit('treeItemRemove', this.mydata);
-            },
-            // label 点击触发事件
-            labelClick(node, data) {
-                this.$emit('labelClick', {
-                    'data': data,
-                    'Node': node,
-                });
-            },
-            // 新增事件触发
-            append(node, data) {
-                this.$emit('treeItemAppend', {
-                    node: node,
-                    data: data,
-                });
-            },
-            // 删除事件触发
-            remove(node, data) {
-                this.mydata = {
-                    node: node,
-                    data: data
-                };
-                this.mtaStDialogVisible = true
-            },
-            // 编辑事件触发
-            editor(node, data) {
-                this.$emit('changeDragState', false);
-                // 记录当前数据缓存
-                this.oldValue = data.lable;
-                this.showItem = false;
-                this.$nextTick(() => {
-                    this.input = data.lable;
-                    this.$refs.treeInput.focus();
-                    this.$emit('drapTreeList', false);
-
-                });
-            },
-            // 失去焦点时触发
-            onEnterFun() {
-                this.$refs.treeInput.blur();
-            },
-            onblurFun() {
-                const treeItemObj = {
-                    node:       this.node,
-                    data:       this.data,
-                    editorText: _.trim(this.input),
-                };
-
-                if (this.oldValue !== this.input) {
-                    this.$emit('treeItemEditor', treeItemObj);
-                }
-                this.$emit('drapTreeList', true);
-                this.showItem = true;
-                this.$emit('changeDragState', true);
-            },
-        },
-    };
-</script>
-

+ 0 - 213
src/components/management/Layout/EditableTreeOrg/EditableTree.vue

@@ -1,213 +0,0 @@
-<template>
-    <div class="editableTree fsize-m6">
-        <el-input
-                placeholder="输入关键字进行过滤"
-                v-model="filterText">
-        </el-input>
-        <div class="wrap-tree">
-            <el-tree
-                    ref="tree"
-                    :data="newData"
-                    :filter-node-method="filterNode"
-                    :node-key="nodeKey"
-                    :default-expanded-keys="stDefaultExpandedKeys"
-                    @node-drag-start="handleDragStart"
-                    @node-drag-enter="handleDragEnter"
-                    @node-drag-leave="handleDragLeave"
-                    @node-drag-over="handleDragOver"
-                    @node-drag-end="handleDragEnd"
-                    @node-drop="handleDrop"
-                    @node-click="handleNodeClick"
-                    @node-expand="handleNodeExpand"
-                    @node-collapse="handleNodeCollapse"
-                    :draggable="treeDraggable"
-                    :allow-drag="allowDrag"
-                    :allow-drop="allowDrop"
-                    :highlight-current="true"
-                    :expand-on-click-node="false">
-                <div class="custom-tree-node" slot-scope="{ node, data }">
-                    <editor-tree-item
-                            :node="node"
-                            :data="data"
-                            @labelClick="handleLabelClick"
-                            @treeItemAppend="treeAppend"
-                            @treeItemRemove="treeRemove"
-                            @changeDragState="changeDragState"
-                            @treeItemEditor="getTreeItemEditor">
-                    </editor-tree-item>
-                </div>
-            </el-tree>
-        </div>
-    </div>
-</template>
-
-<script>
-    import EditorTreeItem               from '@/components/management/Layout/EditableTreeOrg/EditableTreeItem.vue';
-
-    export default {
-        name:       'EditableTree',
-        components: {
-            EditorTreeItem,
-        },
-        props:      {
-            nodeKey:         {
-                type:    String,
-                default: 'id',
-            },
-            newData:         {
-                // 树的数据
-                type:    Array,
-                default: () => arr,
-            },
-            draggable:         {
-                // 树的数据
-                type:    Boolean,
-                default: true,
-            },
-            expandedKeys:    {
-                // 树的数据
-                type:    Array,
-                default: () => [],
-            },
-        },
-        watch:      {
-            newData: {
-                handler(newVal, oldVal) {
-                    console.log('handler', this.expandedKeys);
-                    this.setExpanded(newVal, this.expandedKeys);
-                },
-            },
-            filterText(val) {
-                this.$refs.tree.filter(val);
-            },
-        },
-        data() {
-            return {
-                input:         '',
-                startData:     '',
-                showItem:      true,
-                treeDraggable: this.draggable,
-                filterText:    '',
-                stDefaultExpandedKeys: [],
-            };
-        },
-        methods:    {
-            changeDragState(b) {
-                this.treeDraggable = b;
-            },
-            filterNode(value, data) {
-                // console.log('filter =>', value, data, this.newData);
-                if (!value) {
-                    return true;
-                }
-                return data.lable.indexOf(value) !== -1;
-            },
-            handleLabelClick(data) {
-                this.$refs.tree.setCurrentKey(data.data.id);
-                this.$emit('handleClick', data);
-            },
-            handleNodeClick(data, Node, self) {
-                /*const opt = {data, Node, self};
-                this.$emit('handleClick', opt);*/
-            },
-            handleDragStart(node, ev) {
-                this.startData = node;
-            },
-            handleDragEnter(draggingNode, dropNode, ev) {
-            },
-            handleDragLeave(draggingNode, dropNode, ev) {
-            },
-            handleDragOver(draggingNode, dropNode, ev) {
-            },
-            handleDragEnd(draggingNode, dropNode, dropType, ev) {
-            },
-            // 拖拽放置时触发
-            handleDrop(draggingNode, dropNode, dropType, ev) {
-                this.$emit('handleDrop', dropNode, draggingNode, dropType, ev, this.startData);
-            },
-            // 编辑事件回调触发
-            getTreeItemEditor(data) {
-                this.$emit('treeEditor', data);
-            },
-            // 新增事件回调触发
-            treeAppend(data) {
-                this.$emit('treeAppend', data);
-            },
-            // 删除事件回调触发
-            treeRemove(node, data) {
-                this.$emit('treeRemove', node);
-            },
-            setExpanded(treeData, expandedKeys) {
-                function setTreeChildeExpanded(children, that) {
-                    for (const child of children) {
-                        if (expandedKeys.indexOf(child[that.nodeKey]) > -1) {
-                            that.stDefaultExpandedKeys.push(child[that.nodeKey]);
-                        }
-                        if (child.children) {
-                            setTreeChildeExpanded(child.children, that);
-                        }
-                    }
-                }
-
-                // default expand;
-                if (!expandedKeys || expandedKeys.length === 0) {
-                    for (const treeDataItem of treeData) {
-                        this.stDefaultExpandedKeys.push(treeDataItem[this.nodeKey]);
-                    }
-                } else if (Array.isArray(expandedKeys)) {
-                    for (const treeDataItem of treeData) {
-                        this.stDefaultExpandedKeys.push(treeDataItem[this.nodeKey]);
-                        if (treeDataItem.children) {
-                            setTreeChildeExpanded(treeDataItem.children, this);
-                        }
-                    }
-                }
-            },
-            pushExpandedKey(expandedKeys, id) {
-                if (expandedKeys.indexOf(id) === -1) {
-                    expandedKeys.push(id);
-                }
-            },
-            allowDrag(node) {
-                if (node.data.isConstant && node.data.isConstant === true) {
-                    return true;
-                } else {
-                    return false;
-                }
-            },
-            allowDrop(draggingNode, dropNode, type) {
-                // console.log(draggingNode, dropNode, type);
-                if (draggingNode.data.isConstant && draggingNode.data.isConstant === true
-                    && dropNode.data.isConstant && dropNode.data.isConstant === true) {
-                    return true;
-                } else if (draggingNode.data.isRoot && draggingNode.data.isRoot === true
-                    && dropNode.data.isRoot && dropNode.data.isRoot === true) {
-                    return false;
-                } else {
-                    return false;
-                }
-            },
-            setCurrentKey(id) {
-                this.$refs.tree.setCurrentKey(id);
-            },
-            handleNodeExpand(data) {
-                this.$emit('syncExpandedKeys', {
-                    data:     data,
-                    isExpand: true,
-                });
-            },
-            handleNodeCollapse(data) {
-                this.$emit('syncExpandedKeys', {
-                    data:     data,
-                    isExpand: false,
-                });
-            },
-        },
-        computed:   {
-        },
-        created() {
-            this.setExpanded(this.newData, this.stDefaultExpandedKeys);
-        }
-    };
-</script>
-

+ 0 - 123
src/components/management/Layout/EditableTreeOrg/EditableTreeItem.vue

@@ -1,123 +0,0 @@
-<template>
-    <div class="editorTreeComponent fsize-m4" :class="{ editorTreeItem: showItem }">
-        <div class="editorTreeContent">
-            <span  class="treeShowLabel org" @click.stop="() => labelClick(node, data)"
-                   :title="node.data.lable">{{ node.data.lable }}</span>
-            <span v-if="getAuth.orgFlag === 0" class="treeCtrlBtn" slot="treeItem">
-                <span v-if="data.isRoot && data.isRoot === true">
-
-                    <i class="el-icon-edit " v-if="!(data.isAdmin  && data.isAdmin === true)" @click.stop="() => editor(node, data)"></i>
-                    <i class="el-icon-plus " @click.stop="() => append(node, data)"></i>
-                </span>
-                <span v-else-if="data.isConstant && data.isConstant === true">
-                    <i class="el-icon-edit " @click.stop="() => editor(node, data)"></i>
-                    <i class="el-icon-plus " @click.stop="() => append(node, data)"></i>
-                    <i class="el-icon-delete " @click.stop="remove(node, data)"></i>
-                </span>
-            </span>
-        </div>
-        <el-input v-model="input" ref="treeInput" placeholder="请输入内容" :key="node.id" :autofocus="true"
-                  @blur="onblurFun" @keydown.native.13.prevent="onEnterFun"></el-input>
-        <MtaStDialog
-                :dVisible.sync="BatchFailureDLShow"
-                dType="warning"
-                dMessage="选中的数据将彻底删除"
-                @comfirmCallback="ToSaveDelete()"
-        ></MtaStDialog>
-    </div>
-</template>
-
-<script>
-    import { mapGetters } from 'vuex';
-
-    export default {
-        name:     'EditableTreeItem',
-        props:    {
-            node: {
-                type:    Object,
-                default: {},
-            },
-            data: {
-                type:    Object,
-                default: {},
-            },
-        },
-        data() {
-            return {
-                input:              '',
-                showItem:           true,
-                oldValue:           '',
-                BatchFailureDLShow: false,
-                mydata:             '',
-            };
-        },
-        computed: {
-            getAuthOrgId() {
-                return this.getAuth.orgId;
-            },
-            ...mapGetters([
-                              'getAuth',
-                          ]),
-        },
-        methods:  {
-            ToSaveDelete() {
-                this.$emit('treeItemRemove', this.mydata);
-            },
-            // label 点击触发事件
-            labelClick(node, data) {
-                this.$emit('labelClick', {
-                    'data': data,
-                    'Node': node,
-                });
-            },
-            // 新增事件触发
-            append(node, data) {
-                this.$emit('treeItemAppend', data);
-            },
-            // 删除事件触发
-            remove(node, data) {
-                this.BatchFailureDLShow = true;
-                this.mydata = node;
-
-            },
-            // 编辑事件触发
-            editor(node, data) {
-                this.$emit('changeDragState', false);
-                // 记录当前数据缓存
-                this.oldValue = data.lable;
-                this.showItem = false;
-                this.$nextTick(() => {
-                    this.input = data.lable;
-                    this.$refs.treeInput.focus();
-                    this.$emit('drapTreeList', false);
-
-                });
-            },
-            // 失去焦点时触发
-            onEnterFun() {
-                this.$refs.treeInput.blur();
-            },
-            onblurFun() {
-                const treeItemObj = {
-                    node:       this.node,
-                    data:       this.data,
-                    editorText: _.trim(this.input),
-                };
-
-                if (this.oldValue !== this.input) {
-                    this.$emit('treeItemEditor', treeItemObj);
-                }
-                this.$emit('drapTreeList', true);
-                this.showItem = true;
-                this.$emit('changeDragState', true);
-            },
-            handleDialogClose() {
-                this.mydata = '';
-                this.BatchFailureDLShow = false;
-            }
-
-        },
-    };
-</script>
-
-

+ 0 - 138
src/components/management/Layout/FormFieldset/FormFieldset.vue

@@ -1,138 +0,0 @@
-<template>
-    <div class="mta-formFieldset fsize-m4-l">
-        <fieldset class="re_fieldset">
-            <legend class="bt_legend"><i></i>{{list.name}}</legend>
-<!--            :indeterminate="isIndeterminate"  未全选中状态-->
-            <el-checkbox v-if="list.name !== '首页'" class="qx_box"  v-model="checkAll"
-                         @change="handleCheckAllChange">全选
-            </el-checkbox>
-            <el-checkbox v-else class="qx_box"  v-model="checkAll"
-                         @change="handleCheckAllChange">首页
-            </el-checkbox>
-            <div class="group_box">
-                <el-checkbox-group v-model="checkedList" @change="handleCheckedChange">
-                    <el-checkbox v-for="child in list.children" :label="child.menuId" :key="child.menuId">
-                        {{child.name}}
-                    </el-checkbox>
-                </el-checkbox-group>
-            </div>
-        </fieldset>
-    </div>
-</template>
-
-<script>
-    export default {
-        name: "FormFieldset",
-        props: {
-            list: { // 标题数据
-                type: Object,
-                default: () => {
-                },
-            },
-            OriginCheckedList: { // 每项checkbox数据
-                type: Array,
-                default: () => [],
-            },
-        },
-        data() {
-            return {
-                isIndeterminate: true,
-                checkAll: false,
-                checkedList: this.OriginCheckedList,
-                backListData: {},
-            };
-        },
-        methods: {
-            checkForm() {
-                this.checkAll = this.list.checked.length === this.list.children.length+1;
-            },
-            handleCheckedChange(value) {
-
-                if (value.includes(this.list.menuId)){
-                    value.splice(value.indexOf(this.list.menuId),1)
-                }
-                const checkedCount = value.length;
-                this.checkAll = checkedCount === this.list.children.length;
-                this.isIndeterminate = checkedCount > 0 && checkedCount < this.list.children.length;
-                this.backListData = {
-                    checkedMenuListFromChild: value,
-                    originList: this.list.children.map((item) => item.menuId),
-                };
-                if (this.backListData.checkedMenuListFromChild.length > 0 && !this.backListData.checkedMenuListFromChild.includes(this.list.menuId)) {
-                    this.backListData.checkedMenuListFromChild.push(this.list.menuId);
-                }
-                if (this.backListData.checkedMenuListFromChild.length === 1 && this.backListData.checkedMenuListFromChild.includes(this.list.menuId)) {
-                    this.backListData.checkedMenuListFromChild = [];
-                }
-                if (this.backListData.checkedMenuListFromChild.length === 0 ) {
-                    const checkedListArr = this.list.children.map((item) => item.menuId);
-                    checkedListArr.push(this.list.menuId);
-                    this.backListData = {
-                        checkedMenuListFromChild: [],
-                        originList: checkedListArr,
-                    };
-                }
-                this.$emit('checkedRAMIChild', this.backListData);
-            },
-            handleCheckAllChange(val) {
-                const checkedListArr = this.list.children.map((item) => item.menuId);
-                checkedListArr.push(this.list.menuId);
-                this.checkedList = val ? checkedListArr : [];
-                this.isIndeterminate = false;
-                this.backListData = {
-                    checkedMenuListFromChild: this.checkedList,
-                    originList: checkedListArr,
-                };
-                this.$emit('checkedRAMIChild', this.backListData);
-            },
-        },
-        created() {
-            this.checkForm();
-        }
-    }
-</script>
-
-<!--<style lang="scss" scoped>
-    .mta-formFieldset {
-        display: block;
-
-        fieldset {
-            padding: 10px;
-        }
-
-        .qx_box {
-            width: 60px;
-            float: left;
-            margin-right: 10px;
-        }
-
-        .bt_legend {
-            /*font-family: PingFangSC-Regular;*/
-            font-size: 16px;
-            /*color: #333333;*/
-        }
-
-        .group_box {
-            margin-left: 70px;
-        }
-
-        .el-checkbox {
-            margin-bottom: 8px;
-        }
-
-        .bt_legend i {
-            width: 4px;
-            height: 11px;
-            //background: #2196f5;
-            display: block;
-            margin-right: 10px;
-            float: left;
-            margin-top: 4px;
-        }
-
-        .re_fieldset {
-            border: 0;
-        }
-
-    }
-</style>-->

+ 0 - 272
src/components/management/Layout/InfiniteScrollInput/InfiniteScrollInput3.vue

@@ -1,272 +0,0 @@
-<template>
-    <div class="Mta-InfiniteScrollInput3" :ref="currentRef">
-        <el-input
-                :placeholder="placeholder"
-                :requestData="requestData"
-                :clickInputName="clickInputName"
-                v-model="inputValue"
-                v-on:input="watchNum"
-                @focus="handleOnFocus"
-        ></el-input>
-        <div class="Infinite-wrap-box">
-            <div class="infinite-list" v-if="showUl">
-                <ul  v-infinite-scroll="load"
-                     infinite-scroll-disabled="busy"
-                     :infinite-scroll-immediate="false"
-                >
-                    <li v-for="(item,index) in dataArr" :key="index" class="infinite-list-item" @click="chooseData(item)">
-                        <span>{{item[structure[0]]}}</span>
-                        <span class="mta-li-span2" v-if="structure[1] !== undefined">{{item[structure[1]]}}</span>
-                    </li>
-                </ul>
-                <p v-if="noMore">没有更多了</p>
-                <p v-if="noData">无符合标准记录</p>
-            </div>
-        </div>
-
-    </div>
-</template>
-
-<script>
-    //   describe: 模糊搜索公共方法 author: Wgy date:2019-07-25
-    // :requestData 接口需要额外入参 使用   {默认入参为 page name size}
-    // :dataSelect   选择数据
-    // @loadData2="loadUserLists2"  下拉加载 配合requestData使用 增加额外入参
-    import {fuzzySearch} from '@/api/exam'
-    export default {
-        name: "scrollInput",
-        props: {
-            placeholder: {
-                type: String,
-                default: '请选择用户'
-            },
-            requestData:{
-                type: Object,
-            },
-            clickInputName:{
-                type: String,
-                default:'user'
-            },
-            currentRef: {
-                require: true,
-                type: String,
-            },
-            structure: {
-                type: Array,
-                default: () => ['userName', 'realName']
-            },
-        },
-        watch: {
-            inputValue(curVal, oldVal) {
-                if(curVal===''){
-                    this.showUl=false;
-                    this.noMore = false;
-                    this.busy = true;
-                    this.pageNumber = 1;
-                    this.chooseData(curVal)
-                    return
-                }
-                if(curVal!==oldVal&&this.chooseFlag){
-                    // 实现input连续输入,只发一次请求
-                    this.noMore=false;
-                    this.pageNumber=1;
-                    clearTimeout(this.timeout);
-                    //this.handleSearch(curVal);
-                    this.timeout = setTimeout(() => {
-                        if(curVal!==''){
-                            this.handleSearch(curVal);
-                        }
-                    }, 100);
-                }
-            }
-        },
-        data() {
-            return {
-                inputValue: '',
-                showUl: false,
-                dataArr: [],
-                noMore: false,// 下拉阀值显示
-                noData: false,// 是否有值 flag
-                chooseFlag: true,//  选择数据flag
-                busy: true,//  下拉加载flag  true 为禁止
-                pageNumber: 1,
-                timeout: null,// 长轮循
-                blurFlag: false,// 焦点flag
-            }
-        },
-        computed: {
-
-        },
-        methods: {
-            watchNum(val){
-            },
-
-            handleOnFocus(){
-                this.chooseFlag = true;
-                const data = {
-                    user:'/admin/user/search',
-                    kaoshi:'/admin/kaoshi/search',
-                    kaoshiAll:'/admin/kaoshi/search/all',
-                    supportUser:'/admin/user/search',
-                    supportTenant:'/admin/tenant/search',
-                    searchCourse:'/admin/kecheng/search',
-                    searchCourseAll:'/admin/kecheng/search/all',
-                    searchKaoshiCourse:'/admin/kecheng/kaoshi/search',
-                };
-                window.localStorage.setItem(`getFuzzySearchUrl_key`, JSON.stringify(data[this.clickInputName]));
-
-            },
-
-            handleSearch(inputval){
-                let value = {name:this.inputValue,page:1,size:10};
-                let req = Object.assign(value,this.requestData);
-                if(req.name!==''){
-                    fuzzySearch(req).then(res =>{
-                        if(this.inputValue === inputval){
-                            this.dataArr = [];
-                            if(res.data.data.length===0){
-                                this.noData = true;
-                                this.noMore = false;
-                                this.busy = true;
-                            }else {
-                                this.busy = false;
-                                this.noData = false;
-                                this.dataArr = res.data.data;
-                            }
-                            this.showUl = true;
-                            this.blurFlag = false;
-
-                        }
-                    })
-                }
-
-            },
-            //失去焦点
-            handleOnBlur(e) {
-                if (this.blurFlag === false) {
-                    this.showUl = false;
-                    this.noMore = false;
-                    // this.chooseFlag = true;
-                    this.noData = false;
-                    this.pageNumber = 1;
-                    this.inputValue = ''
-                }else {
-                    this.showUl = false;
-                    this.noMore = false;
-                    // this.chooseFlag = true;
-                    this.noData = false;
-                    this.pageNumber = 1;
-                }
-            },
-
-            chooseData(data) {
-                console.log(data);
-                if(data===''){
-                    this.$emit('dataSelect'+this.clickInputName, data)
-                }else {
-                    this.inputValue = data[this.structure[0]];
-                    this.showUl = false;
-                    this.chooseFlag = false;
-                    this.blurFlag = true;
-                    this.$emit('dataSelect'+this.clickInputName, data)
-                }
-
-            },
-
-            load() {
-                // if (this.inputValue === '') {
-                //     return;
-                // }
-                this.$emit('loadData2')
-                this.pageNumber = this.pageNumber+1;
-                let value = {name:this.inputValue,page:this.pageNumber,size:10};
-                let req = Object.assign(value,this.requestData);
-                fuzzySearch(req).then(res =>{
-                    if (req.page > Math.ceil(Number(res.data.total)/ 10)) {
-                        this.noMore = true;
-                        this.busy = true;
-                        this.noData = false;
-                        return
-                    }
-                    res.data.data.forEach(item => {
-                        this.dataArr.push(item);
-                    });
-
-                })
-            }
-        },
-        beforeMount() {
-            document.addEventListener('click', this.handleOnBlur);
-        },
-        beforeDestroy() {
-            document.removeEventListener('click', this.handleOnBlur);
-        },
-    }
-</script>
-
-<style lang="scss" scoped>
-    .Mta-InfiniteScrollInput3 {
-        /*width: 100%;
-        margin: 0 20px 0 0px;*/
-        position: relative;
-        .show-Ul {
-            height: 200px;
-
-        }
-
-        .Infinite-wrap-box {
-            position: absolute;
-            z-index: 99;
-            width: 100%;
-        }
-
-        div.infinite-list {
-            box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
-            border-radius: 4px;
-            border: 1px solid #E4E7ED;
-            box-sizing: border-box;
-            background-color: #FFF;
-            margin: 5px 0;
-            display: flex;
-            flex-direction: column;
-            font-size: 14px;
-
-            > ul {
-                height: 180px;
-                overflow: auto;
-                margin: 0;
-            }
-
-            li {
-                padding: 5px;
-                display: flex;
-                flex-direction: row;
-                justify-content: space-between;
-
-                .mta-li-span2 {
-                    font-size: 10px;
-                    color: #ccc;
-                }
-            }
-
-            li:hover {
-                background-color: #ccc;
-            }
-        }
-
-        p {
-            text-align: center;
-            font-size: 10px;
-            color: #ccc;
-            margin: 8px 0;
-        }
-        @media screen and (max-width: 1440px) {
-            div.infinite-list {
-                font-size: 13px;
-            }
-            p {
-                margin: 5px 0;
-            }
-        }
-    }
-</style>

+ 0 - 185
src/components/management/Layout/PaperPreview/PaperPreview.vue

@@ -1,185 +0,0 @@
-<template>
-    <div class="mta-paper-preview">
-        <div class="title-h3">{{previewData.name}}</div>
-
-        <div v-for="(opt, index) in previewData.duanluoList" :key="index">
-            <mta-shiti-structure
-                    :title="opt.name"
-            >
-                <!-- 单选题 -->
-                <div v-if="opt.danxuan && opt.danxuan.length > 0">
-                    <mta-single-choice
-                            v-for="(item,index) in opt.danxuan" :key="index"
-                            :questionData.sync="item"
-                            :shitiIndex="item.onlyNum"
-                            :typeCase="typeCase"
-                            @reply="reply"
-                    ></mta-single-choice>
-
-
-                </div>
-                <!-- 多选题 -->
-                <div v-if="opt.duoxuan && opt.duoxuan.length > 0">
-                    <mta-multiple-choice
-                            v-for="(item,index)  in opt.duoxuan" :key="index"
-                            :questionData="item"
-                            :typeCase="typeCase"
-                            :shitiIndex="item.onlyNum"
-                            @reply="reply2"
-                    ></mta-multiple-choice>
-                </div>
-                <!-- 判断题 -->
-                <div v-if="opt.panduan && opt.panduan.length > 0">
-                    <mta-true-or-false
-                            v-for="(item,index)  in opt.panduan" :key="index"
-                            :questionData="item"
-                            :typeCase="typeCase"
-                            :shitiIndex="item.onlyNum"
-                            @reply="reply3"
-                    ></mta-true-or-false>
-                </div>
-                <!-- 填空题 -->
-                <div v-if="opt.tiankong && opt.tiankong.length > 0">
-                    <mta-gap-filling
-                            v-for="(item,index)  in opt.tiankong" :key="index"
-                            :questionData="item"
-                            :typeCase="typeCase"
-                            :shitiIndex="item.onlyNum"
-                            @reply="reply4"
-                    ></mta-gap-filling>
-                </div>
-                <!-- 简答题 -->
-                <div v-if="opt.jianda && opt.jianda.length > 0">
-                    <mta-short-answer-question
-                            v-for="(item,index)  in opt.jianda" :key="index"
-                            :questionData="item"
-                            :typeCase="typeCase"
-                            @reply="reply5"
-                            :shitiIndex="item.onlyNum"
-
-                    ></mta-short-answer-question>
-
-
-                </div>
-                <!-- 阅读 -->
-                <div v-if="opt.jianda && opt.yuedu.length > 0">
-                    <mta-read-the-topic
-                            v-for="(item,index)  in opt.yuedu" :key="index"
-                            :questionData="item"
-                            :typeCase="typeCase"
-                            :shitiIndex="item.onlyNum"
-                    ></mta-read-the-topic>
-
-                </div>
-            </mta-shiti-structure>
-        </div>
-    </div>
-
-</template>
-
-<script>
-    import MtaShitiStructure from './shitiStructure.vue'
-    import MtaSingleChoice from '@/components/client/QuestionsForCuoti/SingleChoice.vue';
-    import MtaTrueOrFalse from '@/components/client/QuestionsForCuoti/TrueOrFalse.vue';
-    import MtaMultipleChoice from '@/components/client/QuestionsForCuoti/MultipleChoice.vue';
-    import MtaGapFilling from '@/components/client/QuestionsForCuoti/GapFilling.vue';
-    import MtaShortAnswerQuestion from '@/components/client/QuestionsForCuoti/ShortAnswerQuestion.vue';
-    import MtaReadTheTopic from '@/components/client/QuestionsForCuoti/ReadTheTopic.vue';
-
-    export default {
-        name: "PaperPreview",
-        components: {
-            MtaSingleChoice,
-            MtaMultipleChoice,
-            MtaTrueOrFalse,
-            MtaGapFilling,
-            MtaShortAnswerQuestion,
-            MtaReadTheTopic,
-            MtaShitiStructure,
-        },
-        props: {
-            DuanLuoData: {
-                require: true,
-                type: Object,
-            },
-            // 组件接环状态, kaoshi,geren,yulan,cuoti2
-            typeCase: {
-                type: String,
-                default: 'kaoshi'
-            }
-        },
-        data() {
-            return {
-                num: 1,
-                previewData: {},
-            }
-        },
-        watch: {
-            DuanLuoData: {
-                handler(newVal, oldVal) {
-
-                    if (newVal.duanluoList) {
-                        let indexNum = 1;
-                        newVal.duanluoList.forEach(item => {
-                            if (item.danxuan && item.danxuan.length > 0) {
-                                item.danxuan.forEach(a => {
-                                    a.onlyNum = indexNum++;
-                                    return a;
-                                })
-                            }
-                            if (item.duoxuan && item.duoxuan.length > 0) {
-                                item.duoxuan.forEach(b => {
-                                    b.onlyNum = indexNum++;
-                                    return b;
-                                })
-                            }
-                            if (item.panduan && item.panduan.length > 0) {
-                                item.panduan.forEach(c => {
-                                    c.onlyNum = indexNum++;
-                                    return c;
-                                })
-                            }
-                            if (item.tiankong && item.tiankong.length > 0) {
-                                item.tiankong.forEach(c => {
-                                    c.onlyNum = indexNum++;
-                                    return c;
-                                })
-                            }
-                            if (item.jianda && item.jianda.length > 0) {
-                                item.jianda.forEach(d => {
-                                    d.onlyNum = indexNum++;
-                                    return d;
-                                })
-                            }
-                            if (item.yuedu && item.yuedu.length > 0) {
-                                item.yuedu.forEach(e => {
-                                    e.onlyNum = indexNum++;
-                                    return e;
-                                })
-                            }
-                            return item;
-                        })
-                    }
-
-                    this.previewData = newVal;
-                },
-                immediate: true
-            }
-        },
-
-        methods: {
-            reply(data) {
-            },
-            reply2(data) {
-            },
-            reply3(data) {
-            },
-            reply4(data) {
-            },
-            reply5(data) {
-            }
-
-        }
-    }
-</script>
-

+ 0 - 45
src/components/management/Layout/PaperPreview/shitiStructure.vue

@@ -1,45 +0,0 @@
-<template>
-    <div class="mta-shiti-structure">
-        <div class="mta-ss-title">{{title}}</div>
-        <div class="mta-ss-content">
-            <slot></slot>
-        </div>
-
-    </div>
-</template>
-
-<script>
-    export default {
-        name: "shitiStructure",
-        props: {
-            title: {
-                require: true,
-                type: String
-            }
-        }
-    }
-</script>
-
-<style lang="scss" scoped>
-.mta-shiti-structure {
-    border: 1px solid #ccc;
-    margin: 10px 20px 32px 20px;
-
-    .mta-ss-content {
-        padding: 20px 30px;
-        word-break: break-word;
-    }
-
-    .mta-ss-title {
-        text-align: left;
-        padding-left: 30px;
-        height: 40px;
-        line-height: 40px;
-        font-weight: bolder;
-        font-size: 16px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-    }
-}
-</style>

+ 0 - 268
src/components/management/Layout/SelectInput/SelectInputTree.vue

@@ -1,268 +0,0 @@
-<template>
-    <div class="selectInput" :ref="currentRef">
-        <el-input
-                ref="inputRef"
-                :placeholder="placeholder"
-                v-model="inputValue"
-                @focus="handleOnFocus"
-                :readonly="false"
-                @keyup.native="killKeyFun"
-                @clear="handleOnClear"
-                clearable
-        >
-            <template slot="suffix">
-                <!--<i class="el-select__caret el-input__icon el-icon-arrow-up" :class="suffixStyle"
-                   @click.stop="inputSuffixClick"></i>-->
-                <i class="el-select__caret el-input__icon el-icon-arrow-up"
-                   :class="{'isReverse':suffixStyle, 'showIcon':!showIcon}"
-                   @click.stop="inputSuffixClick"></i>
-            </template>
-        </el-input>
-
-        <div class="tree-wrap-box show-Tree">
-
-            <!--<el-scrollbar class="selectInputRef-scroll" wrap-class="scrollbar-wrapper">-->
-            <perfect-scrollbar>
-                <collapse-transition>
-                    <el-tree
-                            class="filter-tree"
-                            :data="originalTreeData"
-                            :props="treeDefaultProps"
-                            default-expand-all
-                            v-if="showTree"
-                            @node-click="handleNodeClick"
-                            ref="tree">
-                    </el-tree>
-                </collapse-transition>
-            </perfect-scrollbar>
-            <!--</el-scrollbar>-->
-
-        </div>
-
-    </div>
-</template>
-
-<script>
-    /**
-     * 使用须知:
-     * input下拉树 需要指定currentRef
-     * stClassifyId --- currentRef 内含shiti
-     * stLevelId --- currentRef 内含Difficulty
-     * stKnowledgeId --- currentRef 内含Knowledge
-     */
-
-    import { PerfectScrollbar } from 'vue2-perfect-scrollbar';
-    import CollapseTransition   from 'element-ui/lib/transitions/collapse-transition';
-
-    export default {
-        name:       'SelectInputTree',
-        props:      {
-            placeholder:       {
-                type:    String,
-                default: '请选择',
-            },
-            selectDate:        { // 双向绑定的选中数据
-                type:    Object,
-                default: () => {
-                    return {};
-                },
-                require: true,
-            },
-            defaultSelectData: { // 默认选中的数据
-                type:    Object,
-                default: () => {
-                    return {};
-                },
-            },
-            originalTreeData:  { // 树的数据
-                type:    Array,
-                default: () => {
-                    return [];
-                },
-                require: true,
-            },
-            treeDefaultProps:  { // 树的结构数据例子
-                type:    Object,
-                default: () => {
-                    return {};
-                },
-                require: true,
-            },
-            currentRef:        { // 当前dom索引
-                type:    String,
-                require: true,
-            },
-        },
-        computed:   {
-            suffixStyle: function () {
-                /*return {
-                    isReverse: this.suffixIsReverse,
-                };*/
-                return this.suffixIsReverse;
-            },
-            showIcon() {
-                if (this.inputValue) {
-                    return false;
-                } else {
-                    return true;
-                }
-            },
-        },
-        data() {
-            return {
-                inputValue:      '',
-                showTree:        false,
-                // selectInputIcon: 'el-icon-arrow-up',
-                suffixIsReverse: true,
-            };
-        },
-        components: {
-            CollapseTransition,
-            PerfectScrollbar,
-        },
-        watch:      {
-            defaultSelectData:          {
-                handler(val) {
-                    // input框赋值
-                    this.inputValue = val.lable;
-                    // 同步外侧selectData
-                    this.$emit('update:selectDate', val);
-                },
-                immediate: true,
-            },
-            'selectDate.stClassifyId':  {
-                handler(newV, oldV) {
-                    this.handleId(newV, oldV);
-                },
-            },
-            'selectDate.stLevelId':     {
-                handler(newV, oldV) {
-                    this.handleId(newV, oldV);
-                },
-            },
-            'selectDate.id':     {
-                handler(newV, oldV) {
-                    this.handleId(newV, oldV);
-                },
-            },
-        },
-        methods:    {
-            handleId(newV, oldV) {
-                // console.log(this.currentRef);
-                if (this.currentRef.indexOf('shiti') > -1 && this.currentRef.indexOf('Type') > -1) {
-                    if (newV === undefined) {
-                        this.inputValue = '';
-                        return;
-                    }
-                    this.setTreeVal(newV);
-                } else if (this.currentRef.indexOf('Difficulty') > -1) {
-                    if (newV === undefined) {
-                        this.inputValue = '';
-                        return;
-                    }
-                    this.setTreeVal(newV);
-                }  else {
-                    // throw new Error('currentRef命名不符合规范');
-                    this.setTreeVal(newV);
-                }
-            },
-            handleOnClear() {
-                this.$emit('update:selectDate', {});
-            },
-            killKeyFun(event) {
-                this.inputValue = '';
-                return false;
-            },
-            // 清理缓存数据
-            clearInputData() {
-                this.inputValue = '';
-            },
-            // 获取焦点时触发事件
-            handleOnFocus() {
-                this.showTree = true;
-                this.suffixIsReverse = false;
-                // this.selectInputIcon = 'el-icon-arrow-down';
-            },
-            // 失去焦点时触发事件
-            handleOnBlur(e) {
-                if (this.$refs[this.currentRef].contains(e.target) === false) {
-                    this.showTree = false;
-                    this.suffixIsReverse = true;
-                    // this.selectInputIcon = 'el-icon-arrow-up';
-                }
-            },
-            /**
-             * Tree 节点点击后触发事件
-             * @param data
-             * @param node
-             * @param self
-             */
-            handleNodeClick(data, node, self) {
-
-                // 同步input显示
-                this.inputValue = data.lable;
-                // input图标改变
-                this.suffixIsReverse = true;
-                // this.selectInputIcon = 'el-icon-arrow-up';
-                // tree 组件隐藏
-                this.showTree = false;
-                // 同步外侧selectData && 业务查看返回数据 同步vuex
-                this.$emit('update:selectDate', data);
-                this.$emit('changeSelectData', data);
-                this.$nextTick(() => {
-                    this.$emit('callDepartmentValidate', data);
-                });
-            },
-
-            findNodeObj(children, idName, id) {
-                for (const node of children) {
-                    if (parseInt(node[idName]) === parseInt(id)) {
-                        return node;
-                    }
-                    if (node.children instanceof Array) {
-                        let _node = this.findNodeObj(node.children, idName, id);
-                        if (_node) {
-                            return _node;
-                        }
-                    }
-                }
-                return null;
-
-            },
-            setTreeVal(id) {
-                /**
-                 * {id: 7,
-                 * lable: "二级 3-1"}
-                 */
-                let idName = '';
-                if (this.currentRef.indexOf('shiti') > -1 && this.currentRef.indexOf('Type') > -1) {
-                    // idName = 'stClassifyId';
-                    idName = 'id';
-                } else if (this.currentRef.indexOf('Difficulty') > -1) {
-                    // idName = 'stLevelId';
-                    idName = 'id';
-                } else {
-                    idName = 'id';
-                    // throw new Error('currentRef命名不符合规范');
-                }
-                let node = this.findNodeObj(this.originalTreeData, idName, id);
-                if (node === null) {
-                    throw new Error('id不存在');
-                }
-                this.inputValue = node.lable;
-                this.$emit('update:selectDate', node);
-            },
-            inputSuffixClick() {
-                this.suffixIsReverse = !this.suffixIsReverse;
-                this.showTree = !this.showTree;
-            },
-        },
-
-        beforeMount() {
-            document.addEventListener('click', this.handleOnBlur);
-        },
-        beforeDestroy() {
-            document.removeEventListener('click', this.handleOnBlur);
-        },
-    };
-</script>

+ 0 - 275
src/components/management/Layout/SelectInput/StSelectInputTree.vue

@@ -1,275 +0,0 @@
-<template>
-    <StSelectInputTreeSlot>
-        <template slot="input">
-            <el-input
-                    :placeholder="placeholder"
-                    :readonly="false"
-                    :ref="currentRef"
-                    @clear="handleOnClear"
-                    @focus="handleOnFocus"
-                    @keyup.native="killKeyFun"
-                    clearable
-                    v-model="inputValue"
-            >
-                <template slot="suffix">
-                    <!--<i class="el-select__caret el-input__icon el-icon-arrow-up" :class="suffixStyle"
-                       @click.stop="inputSuffixClick"></i>-->
-                    <i :class="{'isReverse':suffixStyle, 'showIcon':!showIcon}"
-                       @click.stop="inputSuffixClick"
-                       class="el-select__caret el-input__icon el-icon-arrow-up"></i>
-                </template>
-            </el-input>
-        </template>
-        <template slot="tree">
-            <div class="st-picker-panel" v-if="showTree">
-                <el-tree
-                        :data="originalTreeData"
-                        :props="treeDefaultProps"
-                        @node-click="handleNodeClick"
-                        class="filter-tree"
-                        default-expand-all
-                        ref="tree">
-                </el-tree>
-            </div>
-        </template>
-    </StSelectInputTreeSlot>
-</template>
-
-<script>
-    /**
-     * 使用须知:
-     * input下拉树 需要指定currentRef
-     * stClassifyId --- currentRef 内含shiti
-     * stLevelId --- currentRef 内含Difficulty
-     * stKnowledgeId --- currentRef 内含Knowledge
-     */
-
-
-    import StSelectInputTreeSlot   from '@/components/management/Layout/SelectInput/StSelectInputTreeSlot.vue';
-
-    export default {
-        name:       'SelectInputTree',
-        props:      {
-            type:              {
-                type:    String,
-                require: true,
-            },
-            selectDate:        { // 双向绑定的选中数据
-                type:    Object,
-                default: () => {
-                    return {};
-                },
-                require: true,
-            },
-            defaultSelectData: { // 默认选中的数据
-                type:    Object,
-                default: () => {
-                    return {};
-                },
-            },
-            originalTreeData:  { // 树的数据
-                type:    Array,
-                default: () => {
-                    return [];
-                },
-                require: true,
-            },
-            mapping:  { // 映射
-                type:    Object,
-                default: () => {
-                    return {};
-                },
-                require: true,
-            },
-        },
-        computed:   {
-            suffixStyle: function () {
-                /*return {
-                    isReverse: this.suffixIsReverse,
-                };*/
-                return this.suffixIsReverse;
-            },
-            showIcon() {
-                if (this.inputValue) {
-                    return false;
-                } else {
-                    return true;
-                }
-            },
-        },
-        data() {
-            return {
-                placeholder:     '请选择',
-                inputValue:      '',
-                showTree:        false,
-                // selectInputIcon: 'el-icon-arrow-up',
-                suffixIsReverse: true,
-                currentRef: '',
-                treeDefaultProps: {},
-            };
-        },
-        components: {
-            StSelectInputTreeSlot,
-        },
-        watch:      {
-            selectDate:                {
-                handler(val) {
-                    // input框赋值
-                    this.inputValue = val[this.mapping['label'] ? this.mapping['label'] : 'label'];
-                    let id = '';
-                    if (val.id) {
-                        id = val.id;
-                    } else if (val.stClassifyId) {
-                        id = val.stClassifyId;
-                    } else if (val.stLevelId) {
-                        id = val.stLevelId;
-                    } else {
-                        // throw new Error('Id找不到 或者 不符合规范');
-                        // return;
-                    }
-
-                    this.handleId(id);
-                },
-                immediate: true,
-                deep:      true,
-            },
-        },
-        created() {
-            if (this.type === 'department') {
-                this.placeholder = '请选择部门';
-            } else if (this.type === 'curse') {
-                this.placeholder = '请选择课程分类';
-            } else if (this.type === 'exam') {
-                this.placeholder = '请选择考试分类';
-            } else if (this.type === 'kejian') {
-                this.placeholder = '请选择课件分类';
-            } else if (this.type === 'shitiType') {
-                this.placeholder = '请选择试题分类';
-            } else if (this.type === 'shitiDifficulty') {
-                this.placeholder = '请选择难度';
-            }
-            this.currentRef = 'selectInput' + Math.floor(Math.random() * 100000);
-            this.treeDefaultProps = {
-                label: this.mapping['label'] ? this.mapping['label'] : 'label',
-                data:  'children',
-            }
-        },
-        methods:    {
-            handleId(newV, oldV) {
-                if (newV === undefined) {
-                    this.inputValue = '';
-                    return;
-                }
-                this.setTreeVal(newV);
-            },
-            handleOnClear() {
-                this.$emit('update:selectDate', {});
-            },
-            killKeyFun(event) {
-                this.inputValue = '';
-                return false;
-            },
-            // 清理缓存数据
-            clearInputData() {
-                this.inputValue = '';
-            },
-            // 获取焦点时触发事件
-            handleOnFocus() {
-                this.showTree = true;
-                this.suffixIsReverse = false;
-                // this.selectInputIcon = 'el-icon-arrow-down';
-            },
-            // 失去焦点时触发事件
-            handleOnBlur(e) {
-                if (this.$refs[this.currentRef].$el.parentElement.contains(e.target) === false) {
-                    this.showTree = false;
-                    this.suffixIsReverse = true;
-                    // this.selectInputIcon = 'el-icon-arrow-up';
-                }
-            },
-            /**
-             * Tree 节点点击后触发事件
-             * @param data
-             * @param node
-             * @param self
-             */
-            handleNodeClick(data, node, self) {
-
-                // 同步input显示
-                this.inputValue = data[this.mapping['label'] ? this.mapping['label'] : 'label'];
-                // input图标改变
-                this.suffixIsReverse = true;
-                // this.selectInputIcon = 'el-icon-arrow-up';
-                // tree 组件隐藏
-                this.showTree = false;
-                // 同步外侧selectData && 业务查看返回数据 同步vuex
-                this.$emit('update:selectDate', data);
-                this.$emit('changeSelectData', data);
-                this.$nextTick(() => {
-                    this.$emit('callDepartmentValidate', data);
-                });
-            },
-
-            findNodeObj(children, idName, id) {
-                for (const node of children) {
-                    if (parseInt(node[idName]) === parseInt(id)) {
-                        return node;
-                    }
-                    if (node.children instanceof Array) {
-                        let _node = this.findNodeObj(node.children, idName, id);
-                        if (_node) {
-                            return _node;
-                        }
-                    }
-                }
-                return null;
-
-            },
-            setTreeVal(id) {
-                /**
-                 * {id: 7,
-                 * lable: "二级 3-1"}
-                 */
-                if (!id) {
-                    this.inputValue = '';
-                    // this.$emit('update:selectDate', {});
-                    return;
-                }
-                let node = this.findNodeObj(this.originalTreeData, 'id', id);
-                if (node === null) {
-                    console.log(this.originalTreeData, 'id', id);
-                    throw new Error('id不存在');
-                }
-                this.inputValue = node[this.mapping['label'] ? this.mapping['label'] : 'label'];
-                this.$emit('update:selectDate', node);
-            },
-            inputSuffixClick() {
-                this.suffixIsReverse = !this.suffixIsReverse;
-                this.showTree = !this.showTree;
-            },
-        },
-
-        beforeMount() {
-            document.addEventListener('click', this.handleOnBlur);
-        },
-        beforeDestroy() {
-            document.removeEventListener('click', this.handleOnBlur);
-        },
-    };
-</script>
-<style lang="scss" scoped>
-    .st-picker-panel {
-        color: #606266;
-        /*border: 1px solid #E4E7ED;*/
-        /*box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);*/
-        background: #FFF;
-        border-radius: 4px;
-        line-height: 30px;
-        /**
-         * @summary 修改 高度闪烁问题
-         * @author Wxy
-         * @date 2020/4/26
-         */
-        max-height: 250px;
-    }
-</style>

+ 0 - 23
src/components/management/Layout/SelectInput/StSelectInputTreeSlot.vue

@@ -1,23 +0,0 @@
-<template>
-    <div class="selectInput">
-        <slot name="input"></slot>
-        <div class="tree-wrap-box show-Tree">
-                <collapse-transition>
-                    <slot name="tree"></slot>
-                </collapse-transition>
-        </div>
-    </div>
-</template>
-<script>
-    import { PerfectScrollbar } from 'vue2-perfect-scrollbar';
-    import CollapseTransition   from 'element-ui/lib/transitions/collapse-transition';
-    export default {
-        components: {
-            CollapseTransition,
-            PerfectScrollbar,
-        },
-        mounted() {
-            // console.log(this.$slots.input);
-        }
-    }
-</script>

+ 0 - 206
src/components/management/Layout/SelectInput/clientSelectInputTree.vue

@@ -1,206 +0,0 @@
-<template>
-    <el-select :clearable="clearable" :placeholder="selectPlaceholder" :value="valueTitle" @clear="clearHandle" ref="selectblur">
-        <el-input
-                :placeholder="placeholder"
-                class="selectInput"
-                v-model="filterText">
-        </el-input>
-
-        <el-option :label="valueTitle" :value="valueTitle" class="options">
-            <el-tree :accordion="accordion"
-                     :data="options"
-                     :default-expanded-keys="defaultExpandedKey"
-                     :filter-node-method="filterNode"
-                     :node-key="props.value"
-                     :props="props"
-                     @node-click="handleNodeClick"
-                     class="c-select-input-tree"
-                     id="tree-option"
-                     ref="selectTree">
-            </el-tree>
-        </el-option>
-    </el-select>
-</template>
-
-
-<script>
-    export default {
-        //  describe: 下拉树组件 author: Wgy date:2020-04-02
-        /*
-        * 支持节点过滤   可清空  支持初始化默认参数
-        *
-        *   isClearable:true,      // 可清空(可选)
-            isAccordion:true,      // 可收起(可选)
-            自定义配置项
-        *
-        * */
-        name:    'clientSelectInputTree',
-        props:   {
-            // 配置项
-            props:       {
-                type:    Object,
-                default: () => {
-                    return {
-                        value:    'id',
-                        label:    'lable',
-                        children: 'children',
-                    };
-                },
-            },
-            // 选项列表数据(树形结构的对象数组)
-            options:     {
-                type:    Array,
-                default: () => {
-                    return [];
-                },
-            },
-            // 初始值
-            value:       {
-                type:    Number,
-                default: () => {
-                    return null;
-                },
-            },
-            // 可清空选项
-            clearable:   {
-                type:    Boolean,
-                default: () => {
-                    return true;
-                },
-            },
-            // 自动收起
-            accordion:   {
-                type:    Boolean,
-                default: () => {
-                    return true;
-                },
-            },
-            placeholder: {
-                type:    String,
-                default: () => {
-                    return '检索关键字';
-                },
-            },
-            selectPlaceholder: {
-                type:    String,
-                default: `请选择`,
-            }
-        },
-        data() {
-            return {
-                filterText:         '', //过滤值
-                valueId:            this.value,    // 初始值
-                valueTitle:         '', //selcet 值
-                defaultExpandedKey: [],  //默认展开的节点的 key 的数组
-            };
-        },
-        mounted() {
-            this.initHandle();
-        },
-        methods: {
-            // 初始化值
-            initHandle() {
-                if (this.valueId) {
-                    this.valueTitle = this.$refs.selectTree.getNode(this.valueId).data[this.props.label];     // 初始化显示
-                    this.$refs.selectTree.setCurrentKey(this.valueId);       // 设置默认选中
-                    this.defaultExpandedKey = [this.valueId];      // 设置默认展开
-                }
-                this.initScroll();
-            },
-            // 初始化滚动条
-            initScroll() {
-                this.$nextTick(() => {
-                    // let scrollWrap = document.querySelectorAll('.el-scrollbar .el-select-dropdown__wrap')[0];
-                    // @date 2020/06/23 @summary 修正下拉树样式
-                    let scrollWrap = document.querySelectorAll('.el-scrollbar .el-select-dropdown__wrap');
-                    let scrollBar = document.querySelectorAll('.el-scrollbar .el-scrollbar__bar');
-                    // scrollWrap.style.cssText = 'margin: 0px; max-height: none; overflow: hidden;';
-                    // @date 2020/06/23 @summary 修正下拉树样式
-                    scrollWrap.forEach(ele => ele.style.cssText = 'margin: 0px; max-height: none; overflow: hidden;')
-                    scrollBar.forEach(ele => ele.style.width = 0);
-                });
-            },
-            // 点击节点
-            handleNodeClick(node) {
-                // console.log(node);
-                this.valueTitle = node[this.props.label];
-                this.valueId = node[this.props.value];
-                this.$emit('getValue', node);
-                this.defaultExpandedKey = [];
-                this.$refs.selectblur.blur();
-                //this.filterText = ''
-            },
-            // 清除选中
-            clearHandle() {
-                this.valueTitle = '';
-                this.valueId = null;
-                this.defaultExpandedKey = [];
-                this.clearSelected();
-                this.$emit('getValue', {});
-            },
-            // 清空选中样式
-            clearSelected() {
-                let allNode = document.querySelectorAll('#tree-option .el-tree-node');
-                allNode.forEach((element) => element.classList.remove('is-current'));
-            },
-            //过滤节点
-            filterNode(value, data) {
-                if (!value) {
-                    return true;
-                }
-                return data.lable.indexOf(value) !== -1;
-            },
-        },
-        watch:   {
-            value(){
-                this.valueId = this.value
-                this.initHandle()
-            },
-            filterText(val) {
-                this.$refs.selectTree.filter(val);
-            },
-        },
-    };
-</script>
-
-<style scoped>
-    .el-scrollbar .el-scrollbar__view .el-select-dropdown__item {
-        height:     auto;
-        max-height: 274px;
-        padding:    0;
-        overflow:   hidden;
-        overflow-y: auto;
-    }
-
-    .el-select-dropdown__item.selected {
-        font-weight: normal;
-    }
-
-    ul li >>> .el-tree .el-tree-node__content {
-        height:  auto;
-        padding: 0 20px;
-    }
-
-    .el-tree-node__label {
-        font-weight: normal;
-    }
-
-    .el-tree >>> .el-tree-node__label {
-        font-size: 13px;
-    }
-
-    .el-tree >>> .is-current .el-tree-node__label {
-        font-weight: 700;
-    }
-
-    .el-tree >>> .is-current .el-tree-node__children .el-tree-node__label {
-        color:       #606266;
-        font-weight: normal;
-    }
-
-    .selectInput {
-        padding:    0 5px;
-        box-sizing: border-box;
-    }
-</style>
-

+ 0 - 60
src/components/management/Layout/Sidebar/SidebarItem.vue

@@ -1,60 +0,0 @@
-<template>
-    <!-- 传入如果有children 时 -->
-    <el-submenu v-if="sidebar.children && sidebar.children.length > 0" :key="sidebar.url" :index="stIndex.toString()">
-
-        <!-- 分组名 -->
-        <template slot="title">
-            <i v-if="sidebar.classUrl" :class="sidebar.classUrl"></i>
-            <!--<st-svg
-                    height="23px"
-                    width="23px"
-                    v-if="sidebar.classUrl"
-                    :class="sidebar.classUrl"
-                    :name="sidebar.classUrl"
-                    :color="$route.path === sidebar.url ? activeColor : defaultColor"
-            ></st-svg>-->
-            <span class="mta-menu-span" slot="title">{{sidebar.name}}</span>
-        </template>
-        <!-- 子项如果有children时 -->
-        <sidebar-item
-                :activeColor="activeColor"
-                :defaultColor="defaultColor"
-                v-for="child in sidebar.children"
-                :sidebar="child" :key="child.url"></sidebar-item>
-    </el-submenu>
-    <!-- children 不存在时 :route="{path: item.url}"-->
-    <el-menu-item v-else :index="sidebar.url" >
-        <i v-if="sidebar.classUrl" :class="sidebar.classUrl"></i>
-        <!--<st-svg
-                height="23px"
-                width="23px"
-                v-if="sidebar.classUrl"
-                :class="sidebar.classUrl"
-                :name="sidebar.classUrl"
-                :color="$route.path === sidebar.url ? activeColor : defaultColor"
-        ></st-svg>-->
-        <span class="mta-menu-span" slot="title">{{sidebar.name}}</span>
-    </el-menu-item>
-</template>
-
-<script>
-export default {
-    name: "SidebarItem",
-    props: {
-        sidebar: { // 菜单数据
-            type: Object,
-            default: () => {},
-        },
-        stIndex: {
-            type: Number,
-        },
-        defaultColor: {
-            require: true
-        },
-        activeColor: {
-            require: true
-        }
-    },
-}
-</script>
-

+ 0 - 113
src/components/management/Layout/SlidingBlock/SlidingBlock.js

@@ -1,113 +0,0 @@
-export const SlidingBlock = {
-    data() {
-        return {
-            sliderData: {},
-            appKey: 'FFFF0N00000000007EC0'
-        }
-    },
-    methods: {
-        /**
-         * 串联加载指定的脚本
-         * 串联加载[异步]逐个加载,每个加载完成后加载下一个
-         * 全部加载完成后执行回调
-         * @param array|string 指定的脚本们
-         * @param function 成功后回调的函数
-         * @return array 所有生成的脚本元素对象数组
-         * 异步加载js后运行回调函数callback / scripts 为数组或字符串
-         */
-        seriesLoadScripts(scripts, callback) {
-            if (typeof (scripts) != "object") var scripts = [scripts];
-            var HEAD = document.getElementsByTagName("head").item(0) || document.documentElement;
-            var s = new Array(), last = scripts.length - 1, recursiveLoad = function (i) { //递归
-                s[i] = document.createElement("script");
-                s[i].setAttribute("type", "text/javascript");
-                s[i].onload = s[i].onreadystatechange = function () { //Attach handlers for all browsers
-                    if (!/*@cc_on!@*/0 || this.readyState == "loaded" || this.readyState == "complete") {
-                        this.onload = this.onreadystatechange = null;
-                        this.parentNode.removeChild(this);
-                        if (i != last) recursiveLoad(i + 1); else if (typeof (callback) == "function") callback();
-                    }
-                };
-                s[i].setAttribute("src", scripts[i]);
-                HEAD.appendChild(s[i]);
-            };
-            recursiveLoad(0);
-        },
-        // 滑块
-        sliderFun() {
-            const nc_token = [this.appKey, (new Date()).getTime(), Math.random()].join(':');
-            const NC_Opt =  {
-                //声明滑动验证需要渲染的目标元素ID。
-                renderTo: "#your-dom-id",
-                //应用类型标识。它和使用场景标识(scene字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在人机验证控制台的配置管理页签找到对应的appkey字段值,请务必正确填写。
-                appkey: this.appKey,
-                //使用场景标识。它和应用类型标识(appkey字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在人机验证控制台的配置管理页签找到对应的scene值,请务必正确填写。
-                scene: "nc_message",
-                //滑动验证码的主键,请勿将该字段定义为固定值。确保每个用户每次打开页面时,其token值都是不同的。系统默认的格式为:”您的appkey”+”时间戳”+”随机数”。
-                token: nc_token,
-                //滑动条的宽度。
-                customWidth: 300,
-                //业务键字段,可为空。为便于线上问题的排查,建议您按照线上问题定位文档中推荐的方法配置该字段值。
-                trans:{"key1":"code0"},
-                //通过Dom的ID属性自动填写trans业务键,可为空。建议您按照线上问题定位文档中推荐的方法配置该字段值。
-                elementID: ["usernameID"],
-                //是否自定义配置底层采集组件。如无特殊场景,请使用默认值(0),即不自定义配置底层采集组件。
-                is_Opt: 0,
-                //语言。PC端Web页面场景默认支持18国语言,详细配置方法请参见自定义文案与多语言文档。
-                language: "cn",
-                //是否启用。一般情况,保持默认值(true)即可。
-                isEnabled: true,
-                //内部网络请求的超时时间。一般情况建议保持默认值(3000ms)。
-                timeout: 3000,
-                //允许服务器超时重复次数,默认5次。超过重复次数后将触发报错。
-                times:5,
-                //用于自定义滑动验证各项请求的接口地址。一般情况,请勿配置该参数。
-                apimap: {
-                    // 'analyze': '//a.com/nocaptcha/analyze.jsonp',
-                    // 'get_captcha': '//b.com/get_captcha/ver3',
-                    // 'get_captcha': '//pin3.aliyun.com/get_captcha/ver3'
-                    // 'get_img': '//c.com/get_img',
-                    // 'checkcode': '//d.com/captcha/checkcode.jsonp',
-                    // 'umid_Url': '//e.com/security/umscript/3.2.1/um.js',
-                    // 'uab_Url': '//aeu.alicdn.com/js/uac/909.js',
-                    // 'umid_serUrl': 'https://g.com/service/um.json'
-                },
-                //前端滑动验证通过时会触发该回调参数。您可以在该回调参数中将请求标识(token)、会话ID(sessionid)、签名串(sig)字段记录下来,随业务请求一同发送至您的服务端调用验签。
-                callback:     (data) => {
-                    this.sliderData = Object.assign({}, data, {
-                        appkey: NC_Opt.appkey,
-                        scene: NC_Opt.scene
-                    });
-                }
-            };
-
-            let date11 = () => {
-
-                let _date = new Date();
-                let year=_date.getFullYear().toString();
-                let month=_date.getMonth().toString();
-                let day=_date.getDate().toString();
-
-                return year+month+day;
-            };
-            let c = date11();
-
-            const scripts = [
-                `https://g.alicdn.com/sd/ncpc/nc.js?t=${c}`
-            ];
-            this.seriesLoadScripts(scripts, function () {
-                var nc = new noCaptcha(NC_Opt);
-                    nc.upLang('cn', {
-                    _startTEXT: "请按住滑块,拖动到最右边",
-                    _yesTEXT: "验证通过",
-                    _error300: "哎呀,出错了,点击<a href=\"javascript:__nc.reset()\">刷新</a>再来一次",
-                    _errorNetwork: "网络不给力,请<a href=\"javascript:__nc.reset()\">点击刷新</a>",
-                });
-            })
-
-        },
-    },
-    mounted() {
-        this.sliderFun();
-    }
-};

+ 0 - 243
src/components/management/Layout/SystemConfig/SystemThemeConfig.vue

@@ -1,243 +0,0 @@
-<template>
-    <el-dialog
-            title="系统配置"
-            :visible.sync="dialogStatus"
-            :close-on-click-modal="false"
-            :modal="false"
-            @close="configThemeClose"
-            class="response-tip-dialog"
-            center>
-        <div class="config-dialog-body">
-            <div>
-                <span>基准字号:</span>
-                <el-select v-model="fontValue" placeholder="请选择" @change="fontSizeChange">
-                    <el-option
-                            v-for="item in fontArr"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
-                    </el-option>
-                </el-select>
-            </div>
-            <div>
-                <span>基准颜色:</span>
-                <el-select v-model="colorValue" placeholder="请选择" @change="colorChange">
-                    <el-option
-                            v-for="item in colorArr"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
-                    </el-option>
-                </el-select>
-            </div>
-        </div>
-        <span slot="footer" class="dialog-footer">
-<!--        <el-button @click="dialogStatus = false">取 消</el-button>-->
-            <!--        <el-button type="primary" @click="saveConfigTheme">确 定</el-button>-->
-      </span>
-    </el-dialog>
-</template>
-
-<script>
-    /**
-     * @Time 20191029
-     * @Author Wxy
-     * @Description 修正主题设置说明:
-     * 1. 修改`主题数据配置`
-     * 2. 设定`默认主题`
-     * 3. data 中增加类似结构
-     * 4. initSystemThemeControl函数中更新调整主题风格
-     * 5. initdefaultThemeByProject 初始化是需要设置风格
-     */
-    import { handleLocalstorgeData, checkLocalKeyGetDataOrFalse } from '@/utils/theme';
-    import { mapActions }                                         from 'vuex';
-    import { initThemeColor }                                     from '@/utils/theme';
-
-    /**
-     * 主题数据配置
-     */
-    const AframeOpt = {
-        font:  [
-            {
-                value: 'nor-small',
-                label: '普通小号',
-            }, {
-                value: 'nor-middle',
-                label: '普通标准',
-            }, {
-                value: 'nor-big',
-                label: '普通大号',
-            },
-            {
-                value: 'ali-small',
-                label: '阿里小号',
-            }, {
-                value: 'ali-middle',
-                label: '阿里标准',
-            }, {
-                value: 'ali-big',
-                label: '阿里大号',
-            },
-        ],
-        color: [
-            {
-                value: 'blue',
-                label: '蓝色',
-            },
-            {
-                value: 'red',
-                label: '红色',
-            },
-            {
-                value: 'purple',
-                label: '紫色',
-            },
-            {
-                value: 'green',
-                label: '绿色',
-            },
-        ],
-    };
-    /**
-     * saas 主题默认
-     */
-    const defaultTheme = {
-        font:  'nor-middle',
-        color: 'blue',
-    };
-
-    export default {
-        name:    'SystemConfig',
-        props:   {
-            show: {
-                type:     Boolean,
-                required: true,
-            },
-        },
-        data() {
-            return {
-                dialogStatus: this.show,
-                fontArr:      AframeOpt.font,
-                colorArr:     AframeOpt.color,
-                fontValue:    null,
-                fontConfig:   {
-                    text:     'themeFont',
-                    attrText: 'data-fontsize',
-                },
-                colorValue:   null,
-                colorConfig:  {
-                    text:     'themeColor',
-                    attrText: 'data-theme',
-                },
-
-            };
-        },
-        watch:   {
-            show(newVal, oldVal) {
-                this.dialogStatus = newVal;
-            },
-        },
-        methods: {
-            /**
-             * 保存更改主题设置
-             */
-            /*saveConfigTheme() {
-
-            },*/
-            /**
-             * 关闭主题设置弹窗回调函数
-             */
-            configThemeClose() {
-                this.$emit('close', this.dialogStatus);
-            },
-            /**
-             * 字体大小切换触发回调
-             * @param value
-             */
-            fontSizeChange(value) {
-                handleLocalstorgeData(this.fontConfig.text, this.fontConfig.attrText, value);
-            },
-            /**
-             * 字体大小切换触发回调
-             * @param value
-             */
-            colorChange(value) {
-                handleLocalstorgeData(this.colorConfig.text, this.colorConfig.attrText, value);
-
-                this.setThemeColorObj = value;
-                initThemeColor();
-            },
-            /**
-             * 初始化需要本地化的系统配置
-             * @param data 指定数据结构对象 {text,attrText} text:localstorage 的key, attrText:html的自定义属性配合scss更改系统
-             * @param code 指定初始化系统内容 目前值为 `font` , `color`,
-             */
-            initSystemThemeControl(code) {
-                let data = {};
-
-                if (code === 'font') {
-                    data = this.fontConfig;
-                } else if (code === 'color') {
-                    data = this.colorConfig;
-                } else {
-                    throw new Error('未找到需要设置的主题内容');
-                }
-
-                if (checkLocalKeyGetDataOrFalse(data.text)) {
-                    const c = handleLocalstorgeData(data.text, data.attrText, checkLocalKeyGetDataOrFalse(data.text));
-                    // 设置字体大小
-                    switch (code) {
-                        case 'font':
-                            this.fontValue = c;
-                            break;
-                        case 'color':
-                            this.colorValue = c;
-                            break;
-                    }
-
-                } else {
-
-                    switch (code) {
-                        case 'font':
-                            /**
-                             * 字体默认情况
-                             */
-                            this.fontSizeChange(this.fontValue);
-                            break;
-                        case 'color':
-                            /**
-                             * 颜色默认情况
-                             */
-                            this.colorChange(this.colorValue);
-                            break;
-
-                    }
-
-                }
-            },
-            initdefaultThemeByProject() {
-                let data = {
-                    font:  null,
-                    color: null,
-                };
-                data = defaultTheme;
-                this.fontValue = data.font;
-                this.colorValue = data.color;
-            },
-            ...mapActions(['setThemeColorObj']),
-        },
-        created() {
-
-            // 设置默认值
-            this.initdefaultThemeByProject();
-
-            // 初始化系统主题控制
-            this.initSystemThemeControl('font');
-
-            this.initSystemThemeControl('color');
-
-
-        },
-    };
-</script>
-

+ 0 - 73
src/components/management/Layout/eChartTableExpand/eChartTableExpand.vue

@@ -1,73 +0,0 @@
-<template>
-    <!--    <div class="mta-eChart-table-expand">-->
-    <div id="nestedPiesChart" ref="echartDiv" :style="styleStr"></div>
-    <!--    </div>-->
-</template>
-
-<script>
-    import * as HttpTongji     from '@/api/statistics.js';
-    import { getStringByHtml } from '@/utils/common';
-
-    export default {
-        name:    'eChartTableExpand',
-        props:   {
-            MyId:     {
-                type:     Number,
-                required: true,
-            },
-            /*option: {
-                type: Object,
-                require: true
-            },*/
-            styleStr: {
-                type: String,
-                // default: `width: 100%; height: 100%`
-            },
-        },
-        data() {
-            return {
-                nestedPiesChart: '',
-                isFirstGetData:  true,
-                option: null,
-            };
-        },
-        methods: {
-            // ***************** eChart **************
-            drawEchart(option) {
-                const that = this;
-                this.option = option;
-                this.nestedPiesChart = that.$echarts.init(that.$refs.echartDiv);
-                this.nestedPiesChart.setOption(option);
-                this.nestedPiesChart.on('click', function (params) {
-                    that.$emit('eChartClick', params);
-                });
-                this.resizeEchart();
-            },
-            resizeEchart() {
-                this.nestedPiesChart.resize();
-            },
-            getEchartData() {
-                const opt = {
-                    ksId: this.MyId,
-                };
-                this.$emit('data', opt);
-            },
-        },
-        watch:   {
-            styleStr: function (newVal, oldVal) {
-                this.resizeEchart();
-            },
-        },
-        mounted() {
-            // this.drawEchart(this.option);
-            window.onresize = () => {
-                return (() => {
-                    this.$nextTick(() => {
-                        this.resizeEchart();
-                    });
-                })();
-            };
-        },
-    };
-</script>
-

+ 0 - 21
src/components/management/Layout/pageLayout/pageLayout.vue

@@ -1,21 +0,0 @@
-<template>
-    <div class="mta-PageLayout fsize-m4">
-        <el-breadcrumb separator-class="el-icon-arrow-right fsize-m4">
-            <el-breadcrumb-item class="fsize-m4">{{breadcrumb.name}}</el-breadcrumb-item>
-            <el-breadcrumb-item class="fsize-m4" v-for="item in breadcrumb.children" :key="item"><span class="breadcrumb-text fsize-m4">{{item}}</span></el-breadcrumb-item>
-        </el-breadcrumb>
-    </div>
-</template>
-
-<script>
-    export default {
-        name: "pageLayout",
-        props: {
-            breadcrumb: { // 面包屑数据{name,childName}
-                type: Object,
-                default: () => {},
-                require: true
-            },
-        }
-    }
-</script>

+ 0 - 136
src/components/management/Layout/popoverLogin/popoverLogin.vue

@@ -1,136 +0,0 @@
-<template>
-    <el-popover
-            class="popover-login"
-            placement="bottom"
-            width="200"
-            v-model="visible2"
-            trigger="click">
-        <div class="header-li-button">
-
-            <div style="display: flex;flex-direction: column;justify-content: flex-start"><span
-                    style="width: 100%;line-height: 40px;margin-right: 1px;">管理端登录地址:</span>
-                <el-input v-model="getAframe" placeholder="登录地址" :readonly="true"></el-input>
-            </div>
-            <p style="text-align: center">
-                <el-button type="primary" size="small" @click="btnClick(2)">点击登录</el-button>
-                <el-button type="success" size="small"
-                           v-clipboard:copy="getAframe"
-                           v-clipboard:success="copy"
-                           v-clipboard:error="onError"
-                           @click="visible2 = false"
-                >
-                    复制链接
-                </el-button>
-            </p>
-            <div style="display: flex;flex-direction: column;justify-content: flex-start">
-                <div style="width: 100%;line-height: 40px;margin-right: 1px;">学员端登录地址:</div>
-                <el-input v-model="getClient" placeholder="登录地址" :readonly="true"></el-input>
-            </div>
-            <p style="text-align: center">
-                <el-button type="primary" size="small" @click="btnClick(1)">点击登录</el-button>
-
-                <el-button type="success" size="small"
-                           v-clipboard:copy="getClient"
-                           v-clipboard:success="copy"
-                           v-clipboard:error="onError"
-                           @click="visible2 = false"
-                >
-                    复制链接
-                </el-button>
-
-            </p>
-
-            <!--H5-->
-            <div style="display: flex;flex-direction: column;justify-content: flex-start">
-                <div style="width: 100%;line-height: 40px;margin-right: 1px;">H5登录地址:</div>
-                <el-input :readonly="true" placeholder="登录地址" v-model="getH5"></el-input>
-            </div>
-            <p style="text-align: center">
-                <el-button @click="visible2 = false" size="small"
-                           type="success"
-                           v-clipboard:copy="getH5"
-                           v-clipboard:error="onError"
-                           v-clipboard:success="copy"
-                >
-                    复制链接
-                </el-button>
-
-            </p>
-        </div>
-
-        <el-button v-if="model === 'button'" slot="reference" class="popover-login" style="background: none;color: #FFF"
-                   icon="el-icon-user-solid">
-            登录地址管理
-        </el-button>
-        <el-button v-if="model === 'text'" class="popover-login2" slot="reference" type="text"
-                   style="background: none;color: #1E1E1E">
-            登录地址管理
-        </el-button>
-    </el-popover>
-</template>
-
-<script>
-    import { mapGetters } from 'vuex';
-
-    export default {
-        name:     'popoverLogin',
-        props:    {
-            model:   {
-                type:    String,
-                default: 'button',
-            },
-            getcode: {
-                require: true,
-            },
-        },
-        data() {
-            return {
-                visible2: false,
-            };
-        },
-        computed: {
-            getClient() {
-                if (this.getAuth === null) {
-                    return;
-                }
-                return `${document.location.host}${process.env.BASE_URL}c/login`;
-            },
-            getAframe() {
-                if (this.getAuth === null) {
-                    return;
-                }
-                return `${document.location.host}${process.env.BASE_URL}a/login`;
-            },
-            getH5(){
-                if (this.getAuth === null) {
-                    return;
-                }
-                return `${document.location.host}/`+ process.env.VUE_APP_DIST_NAME + `/#/login`;
-            },
-            ...mapGetters([
-                              'getAuth',
-                          ]),
-        },
-        methods:  {
-            btnClick(data) {
-                if (data === 1) {
-                    this.$router.push({
-                                          path: `/c/login`,
-                                      });
-                } else {
-                    this.$router.push({
-                                          path: `/a/login`,
-                                      });
-                }
-
-            },
-            copy(e) {
-                this.$message.success('复制成功');
-            },
-            onError(e) {
-                this.$message.warning('当前浏览器不支持复制功能');
-            },
-        },
-    };
-</script>
-

+ 0 - 39
src/components/management/Layout/popoverLogin/popoverWrap.vue

@@ -1,39 +0,0 @@
-<template>
-    <el-popover
-            class="popover-login"
-            placement="bottom"
-            width="200"
-            v-model="status"
-            trigger="click">
-        <slot></slot>
-        <span style="cursor: pointer" slot="reference" type="text" class="color-p">{{text}}</span>
-    </el-popover>
-</template>
-
-<script>
-    export default {
-        name: 'popoverWrap',
-        props: {
-            text: {
-                type: String,
-                required: true
-            },
-            visible: {
-                type: Boolean,
-                required: true,
-                default: false,
-            }
-        },
-        data() {
-            return {
-                status: false,
-            }
-        },
-        watch: {
-            visible(newVal, oldVal) {
-                this.status = newVal;
-            }
-        }
-    };
-</script>
-

+ 0 - 517
src/components/management/Layout/templateImport/AddUserImport.vue

@@ -1,517 +0,0 @@
-<template>
-    <div class="mta-role-import">
-        <el-dialog v-if="showDialogType===1"
-                   :title="dialogTitleText"
-                   :userRoleId="userRoleId"
-                   class="mta-dialog"
-                   :visible.sync="showDialog"
-                   :show-close="true"
-                   @close="dialogClose"
-                   :close-on-click-modal="false"
-                   center
-                   :width="dlWidth">
-            <div class="mta-role-import-wrap ">
-                <div :class="{'extendTree_width': isExtendTree, 'extendTree_position': isRemovePosition}"
-                     class="addUserInfo-body-left response-tree-div flex-column"
-                     style="border: 1px #CCC solid;padding-right:5px;">
-                        <span style="width: 98%; text-align: right;display: inline-block">
-                            <i @click="handleExtentTree" class="el-icon-arrow-left" v-if="isExtendTree"></i>
-                            <i @click="handleExtentTree" class="el-icon-arrow-right" v-else></i>
-                        </span>
-                    <perfect-scrollbar>
-                        <mta-editable-tree
-                                :allowDropStatue="true"
-                                :draggable="false"
-                                :newData="newUserData"
-                                @handleClick="getHandleClick"
-                                ref="orgTree"
-                        ></mta-editable-tree>
-                    </perfect-scrollbar>
-                </div>
-                <div class="mta-ur-table addUserInfo-body-right" :class="{extendTreeWrapdialogTable: isRemovePosition}">
-                    <el-row class="mta-UE-first-row" type="flex">
-                        <el-col>
-                            <!--用户名-->
-                            <div>
-                                <el-input
-                                        placeholder="请输入查询用户名"
-                                        class="response-dialog-input" v-model="searchUserName"></el-input>
-                                <el-input
-                                        placeholder="请输入查询姓名"
-                                        class="response-dialog-input" v-model="searchRealName"></el-input>
-                                <!--查询-->
-                            </div>
-                            <el-button @click="searchUsers" class="response-small-btn" size="small" type="primary"> 查询
-                            </el-button>
-                        </el-col>
-                    </el-row>
-                    <el-row class="response-dialog-row" type="flex">
-                        <el-col :span="24">
-                            <el-table
-                                    :data="UsersData"
-                                    border
-                                    height="100"
-                                    :stripe="true"
-                                    ref="usersTable"
-                                    header-row-class-name="headerBackgroundColor"
-                                    @selection-change="tableSelectChange"
-                                    class="response-simple-table"
-                                    style="width: 100%">
-                                <el-table-column
-                                        fixed
-                                        type="selection"
-                                        width="50">
-                                </el-table-column>
-                                <el-table-column
-                                        prop="userName"
-                                        label="用户名"
-                                        :show-overflow-tooltip="true"
-                                        min-width="125">
-                                </el-table-column>
-                                <el-table-column
-                                        prop="realName"
-                                        label="真实姓名"
-                                        :show-overflow-tooltip="true"
-                                        min-width="110">
-                                </el-table-column>
-                                <el-table-column
-                                        prop="orgName"
-                                        label="部门名称 "
-                                        :show-overflow-tooltip="true"
-                                        min-width="120">
-                                </el-table-column>
-                                <el-table-column
-                                        prop="positionName"
-                                        label="职位名称"
-                                        :show-overflow-tooltip="true"
-                                        min-width="110">
-                                </el-table-column>
-                                <!--<el-table-column
-                                        label="操作"
-                                        min-width="200">
-                                    <template slot-scope="scope">
-                                        <el-button @click="ToUserDelete(scope.row)" type="text">移除</el-button>
-                                    </template>
-                                </el-table-column>-->
-                            </el-table>
-                            <el-pagination
-                                    @size-change="handleSizeChange"
-                                    @current-change="handleCurrentChange"
-                                    :current-page="nowPage"
-                                    :page-sizes="[10, 50, 100]"
-                                    :page-size="pageSize"
-                                    layout="total, sizes, prev, pager, next, jumper"
-                                    class="response-el-pagination"
-                                    :total.sync="totalPageAdd">
-                            </el-pagination>
-                        </el-col>
-                    </el-row>
-                </div>
-            </div>
-            <span slot="footer" class="dialog-footer">
-                <el-button @click="handleCancel">取 消</el-button>
-                <el-button type="primary" @click="SaveAddUser">确 定</el-button>
-            </span>
-        </el-dialog>
-        <!--dialog2待使用-->
-        <el-dialog v-if="showDialogType===2"
-                   :title="dialogTitleText"
-                   :userRoleId="userRoleId"
-                   class="mta-dialog"
-                   :visible.sync="showDialog"
-                   :requestData="requestData"
-                   :show-close="true"
-                   @close="dialogClose"
-                   :close-on-click-modal="false"
-                   center
-                   :width="dlWidth">
-
-            <h2>待使用</h2>
-            <span slot="footer" class="dialog-footer">
-                <el-button @click="handleCancel">取 消</el-button>
-                <el-button type="primary" @click="SaveAddUser">确 定</el-button>
-            </span>
-        </el-dialog>
-        <!-- <el-dialog
-                 class="BatchFailureDL"
-                 title=""
-                 :close-on-click-modal="false"
-                 :visible.sync="BatchFailureDLShow"
-                 width="500px"
-                 center
-         >
-             <div class="be_careful"><i></i>你确定要将该人员移除么?</div>
-             <span slot="footer" class="dialog-footer">
-                 <el-button @click="BatchFailureDLShow = false">取 消</el-button>
-                 <el-button type="primary" @click="ToSaveUserDelete">确 定</el-button>
-             </span>
-         </el-dialog>-->
-    </div>
-</template>
-
-<script>
-    //组件说明
-    import MtaEditableTree
-                                from '../../../../components/management/Layout/EditableTreeOrg/EditableTree.vue';
-    import {
-        getOrganizationListTree,
-    }
-                                from '@/api/organizational';
-    import {
-        getUserAddList,
-        getUserRoleAdd,
-        getUserRoleDelete,
-    }                           from '@/api/userRoles';
-    import {
-        getAdminUserList,
-    }                           from '@/api/user.js';
-    import { mapGetters }       from 'vuex';
-    import { PerfectScrollbar } from 'vue2-perfect-scrollbar';
-
-
-    export default {
-        name:       'AddUserImport',
-        data() {
-            return {
-                screenWidth:      0, // 监听 页面尺寸
-                isExtendTree:     false, // 展开树容器
-                isRemovePosition: false, // 移除定位
-                timer1:           null,
-                searchUserName:   '',//查询用户名
-                searchRealName:   '',//查询真实姓名
-                //UsersData:   [],//表格
-                userSelectArr:    [],//表格选中
-                nowPage:          1,//分页
-                pageSize:         10,
-                //totalPage:          0,
-                newUserData:      [],//树数据
-                treeSelectData:   '',//树
-                //BatchFailureDLShow: false,//删除弹窗
-                //diaRoleId:   '',//删除-RoleId
-                //delUserId:   '',//删除-UserId
-                showDialog:       this.dialogVisible,
-                curOrgId:         0,//
-
-
-            };
-        },
-        props:      {
-            //弹窗显隐 flag
-            dialogVisible:   {
-                type:    Boolean,
-                require: true,
-            },
-            // 1为模版下载 2为 试题批量导入
-            showDialogType:  {
-                type:    Number,
-                default: 1,
-            },
-            //入参 默认fileUrl
-            requestData:     {
-                type:    Array,
-                default: () => [],
-            },
-            UsersData:       {
-                type:    Array,
-                default: () => [],
-            },
-            // 弹窗title  文字描述
-            dialogTitleText: {
-                type:    String,
-                default: '新增人员',
-            },
-            //弹窗宽度
-            dlWidth:         {
-                type:    String,
-                default: '70%',
-            },
-            // 1为模版下载 2为 试题批量导入
-            userRoleId:      {
-                type:    Number,
-                default: 0,
-            },
-            totalPageAdd:    {
-                type:    Number,
-                default: 0,
-            },
-        },
-        components: {
-            MtaEditableTree,
-            PerfectScrollbar
-        },
-        computed:   {
-            ...mapGetters([
-                              'getAuth',
-                          ]),
-        },
-        methods:    {
-            // 清理时间 timer1
-            clearTimer1Fun() {
-                if (this.timer1) {
-                    clearTimeout(this.timer1);
-                    this.timer1 = null;
-                }
-            },
-            // 初始化 tree 展开状态
-            initTreeExtandStatu() {
-                this.screenWidth = 0; // 监听 页面尺寸
-                this.isExtendTree = false; // 展开树容器
-                this.isRemovePosition = false; // 移除定位
-                // 清理时间
-                this.clearTimer1Fun();
-            },
-            handleExtentTree() {
-                this.isExtendTree = !this.isExtendTree;
-                // console.log(this.$refs.fullscreen);
-            },
-            addShijuanFenlei() {
-                this.lianxiTypeVisible = true;
-                this.setTreeExtends();
-                this.getkaoShiClassifyListFun();
-            },
-            //查询按钮
-            searchUsers() {
-                this.nowPage = 1;
-                const option = {
-                    page:     this.nowPage,
-                    size:     this.pageSize,
-                    realName: this.searchRealName,
-                    userName: this.searchUserName,
-                    roleId:   this.userRoleId,
-                    orgId:    this.curOrgId,
-                };
-                this.getUserAddListData(option);
-            },
-            //分页
-            handleSizeChange(val) {
-                this.pageSize = val;
-                // 参数获取
-                const option = {
-                    page:     this.nowPage,
-                    size:     this.pageSize,
-                    realName: this.searchRealName,
-                    userName: this.searchUserName,
-                    roleId:   this.userRoleId,
-                    orgId:    this.curOrgId,
-                };
-                this.getUserAddListData(option);
-            },
-            handleCurrentChange(val) {
-                this.nowPage = val;
-                const option = {
-                    page:     this.nowPage,
-                    size:     this.pageSize,
-                    realName: this.searchRealName,
-                    userName: this.searchUserName,
-                    roleId:   this.userRoleId,
-                    orgId:    this.curOrgId,
-                };
-                this.getUserAddListData(option);
-            },
-            // 树点击事件
-            getHandleClick(NewData) {
-                this.treeSelectData = NewData;
-                this.curOrgId = NewData.data.id;
-                this.searchUserName = '';
-                this.searchRealName = '';
-                const option = {
-                    page:     this.nowPage,
-                    size:     this.pageSize,
-                    realName: this.searchRealName,
-                    userName: this.searchUserName,
-                    roleId:   this.userRoleId,
-                    orgId:    this.curOrgId,
-                };
-
-                this.getUserAddListData(option);
-
-            },
-            //树
-            getOrganizationTreeData() {
-                const loading = this.loading();
-                getOrganizationListTree()
-                .then(res => {
-                    if (res.code === 0) {
-                        // const {otherTree: other, selfTree: self} = res.data;
-                        const opt = [];
-
-                        if (res.data.selfTree) {
-
-                            if (this.getAuth.orgId === 0) {
-                                opt.push(res.data.selfTree);
-                            } else {
-                                /**
-                                 * @Time 2019/10/17
-                                 * @Author wxy
-                                 * @Description 此处children已和后台YJ确定只具备一个元素即children.length = 1
-                                 */
-                                opt.push(res.data.selfTree.children[0]);
-                            }
-                        }
-                        this.newUserData = opt;
-                    }
-
-                });
-                loading.close();
-            },
-
-
-            //新增人员-关闭弹窗
-            dialogClose() {
-                if (this.showDialogType === 1) {
-                    this.$emit('update:dialogVisible', false);
-                    this.searchUserName = '';//查询用户名
-                    this.searchRealName = '';//查询真实姓名
-                } else {
-                    this.$emit('update:dialogVisible', false);
-                    this.searchUserName = '';//查询用户名
-                    this.searchRealName = '';//查询真实姓名
-                }
-                this.initTreeExtandStatu();
-            },
-            //新增人员-保存按钮
-            SaveAddUser() {
-                const opt = {
-                    roleId:  this.userRoleId,
-                    userIds: this.userSelectArr,
-                };
-                window.loading1 = this.$loading({
-                                                    background: 'rgba(0, 0, 0, 0.7)',
-                                                });
-                getUserRoleAdd(opt).then(res => {
-                    if (res.code === 0 && res.data) {
-                        const option = {
-                            page:     this.nowPage,
-                            size:     this.pageSize,
-                            realName: this.searchRealName,
-                            userName: this.searchUserName,
-                            roleId:   this.userRoleId,
-                            orgId:    this.curOrgId,
-                        };
-                        const opt = {
-                            page: this.nowPage,
-                            size: this.pageSize,
-                            name: '',
-                        };
-                        this.getUserAddListData(option);
-                        this.$parent.getRoleListData(opt);
-                        this.$emit('update:dialogVisible', false);
-                        this.$message.success('新增成功');
-                    } else {
-                        this.$emit('update:dialogVisible', false);
-                        this.$message.error('新增失败');
-                    }
-                    window.loading1.close();
-                });
-            },
-            //新增人员-取消按钮
-            handleCancel() {
-                this.$emit('update:dialogVisible', false);
-            },
-            //表格选中
-            tableSelectChange(selection) {
-                this.userSelectArr = [];
-                selection.forEach((item) => {
-                    this.userSelectArr.push(item.userId);
-                });
-            },
-
-            //删除
-            /* ToUserDelete(data){
-                 //this.diaRoleId = this.userRoleId;
-                 this.delUserId = data.userId;
-                 this.BatchFailureDLShow = true;
-             },*/
-
-            //确定用户删除
-            /* ToSaveUserDelete(){
-                 const opt = {
-                     roleId: this.userRoleId,
-                     userId: this.delUserId,
-                 };
-                 window.loading1 = this.$loading();
-                 getUserRoleDelete(opt).then(res => {
-                     if (res.code === 0 && res.data) {
-                         const option = {
-                             page:      this.nowPage,
-                             size:      this.pageSize,
-                             realName: this.searchRealName,
-                             userName: this.searchUserName,
-                             roleId: this.userRoleId,
-                         };
-                         this.getUserListData(option);
-                         this.BatchFailureDLShow = false;
-                         this.$message.success('删除成功');
-                     } else {
-                         this.BatchFailureDLShow = false;
-                         this.$message.error('删除失败');
-                     }
-                     window.loading1.close();
-                 });
-             },*/
-            //用户列表
-            getUserAddListData(opt) {
-                const loading = this.$loading({background:"rgba(0, 0, 0, 0.7)"});
-                getUserAddList(opt)
-                .then(res => {
-                    if (res.code === 0) {
-                        const { data, total } = res.data;
-                        // this.UsersData = data;
-                        //this.totalPageAdd = total;
-                        this.nowPage = 1;
-                        this.$emit('update:totalPageAdd', total);
-                        this.$emit('update:UsersData', data);
-                    }
-                    loading.close();
-                })
-                .catch(err => {
-                    loading.close();
-                });
-            },
-        },
-        created() {
-            if (this.showDialogType === 1) {
-                // 待添加
-            } else {
-            }
-            this.getOrganizationTreeData();
-        },
-        watch:      {
-            dialogVisible: {
-                handler() {
-                    this.showDialog = this.dialogVisible;
-                },
-            },
-            screenWidth() {
-                // 屏幕尺寸变更 刷新table
-                ++this.mainKey;
-            },
-            isExtendTree() {
-                // 恢复树容器宽度 时 延时1秒删除定位css
-                if (this.isExtendTree === true) {
-                    this.isRemovePosition = true;
-                } else {
-                    if (this.timer1) {
-                        clearTimeout(this.timer1);
-                    }
-                    this.timer1 = setTimeout(() => {
-                        this.isRemovePosition = false;
-                    }, 1000);
-                }
-            },
-        },
-        beforeDestroy() {
-            // 清理vuex状态
-            this.clearTimer1Fun();
-        },
-        mounted() {
-            // 监听 页面变更 刷新table
-            window.onresize = () => {
-                return (() => {
-                    this.screenWidth = document.body.clientWidth;
-                })();
-            };
-        },
-    };
-</script>
-

+ 0 - 620
src/components/management/Layout/templateImport/import.vue

@@ -1,620 +0,0 @@
-<template>
-    <div class="mta-import">
-        <el-dialog v-if="showDialogType===1"
-                   :title="dialogTitleText"
-                   center
-                   :visible.sync="showDialog"
-                   :requestData="requestData"
-                   :show-close="true"
-                   @close="dialogClose"
-                   :modal-append-to-body="modalAppendToBody"
-                   :close-on-click-modal="false"
-                   class="response-middle-dialog">
-            <div class="import-head">
-                <div class="downloadTem" @click="downloadFun" style="cursor: pointer">
-                    <div class="img-box">
-                        <img :src="importDownImg" alt="">
-                    </div>
-                    <span>下载模版</span>
-                </div>
-                <div class="import-jt">
-                    <span></span>
-                </div>
-                <div class="downloadTem">
-
-                    <el-upload
-                            class="upload-demo"
-                            action="https://jsonplaceholder.typicode.com/posts/"
-                            :show-file-list="false"
-                            :http-request="importFun"
-                    >
-                        <div class="img-box">
-                            <img :src="importImg" alt="">
-                        </div>
-                        <span>{{dataImportText}}</span>
-                    </el-upload>
-                </div>
-            </div>
-            <div class="drjg-box">
-                <span>导入结果</span>
-                <div>
-                    <div class="successSpan">导入成功数据:<span class="color-p">{{listSuccess}}条</span></div>
-                    <div  class="errorSpan">导入失败数据:<span style="color: #e51c23;">{{listError}}条</span></div>
-                    <!-- <div>详细错误信息:{{errorMsg}}</div>-->
-                </div>
-            </div>
-            <el-table
-                    :data="errTableData"
-                    border
-                    height="200"
-                    :stripe="true"
-                    header-row-class-name="headerBackgroundColor"
-                    header-align="center"
-                    class="response-table"
-                    style="width: 100%">
-
-                <el-table-column
-                        type="index"
-                        width="50">
-                </el-table-column>
-                <el-table-column
-                        label="错误信息"
-                        align="center"
-                        :show-overflow-tooltip="true">
-                    <template  slot-scope="scope">
-                        <div v-if="Number(scope.row.line)!==0">
-                            第{{scope.row.line}}行&nbsp;&nbsp;{{scope.row.msg}}
-                        </div>
-                        <div v-if="Number(scope.row.line)===0">
-                            {{scope.row.msg}}
-                        </div>
-                    </template>
-
-                </el-table-column>
-            </el-table>
-            <span slot="footer" class="dialog-footer">
-            <slot name="footer"></slot>
-            <span>
-                 <el-button size="mini" @click="handleCancel">关闭</el-button>
-            </span>
-            </span>
-        </el-dialog>
-        <el-dialog v-if="showDialogType===2"
-                   :title="dialogTitleText"
-                   center
-                   :requestData="requestData"
-                   :visible.sync="showDialog"
-                   :show-close="true"
-                   @close="dialogClose"
-                   :modal-append-to-body="modalAppendToBody"
-                   :close-on-click-modal="false"
-                   class="response-middle-dialog">
-
-            <el-form ref="ImportForm" :rules="ImportRules" status-icon :model="ImportConfigData"
-                     label-width="90px">
-                <div class="response-dialog-form-input">
-                    <el-form-item class="pc-item" label="是否排重:">
-                        <el-select v-model="repeat" placeholder="请选择">
-                            <el-option :label="item.label" :value="item.value" v-for="item in repeatData"
-                                       :key="item.value"></el-option>
-                        </el-select>
-                        <span class="item-note">(排重操作大数据导入会使系统导入时间过长,200条以上请谨慎操作!)</span>
-                    </el-form-item>
-                   <!-- <div>(排重操作大数据导入会使系统导入时间过长,200条以上请谨慎操作!)</div>-->
-                    <el-form-item label="试题分类:" prop="selectSTClassify">
-                        <mta-select-input-tree
-                                class="mta-select-input"
-                                placeholder="请选择考试分类"
-                                ref="ccc"
-                                :select-date.sync="ImportConfigData.selectSTClassify"
-                                :original-tree-data="STClassifyArr"
-                                :tree-default-props="treeStructure"
-                                current-ref="ksClassify"></mta-select-input-tree>
-                    </el-form-item>
-                    <!--<el-form-item label="试题难度:" prop="selectLevel">
-                        <mta-select-input-tree
-                                class="mta-select-input2"
-                                placeholder="请选择考试分类"
-                                :select-date.sync="ImportConfigData.selectLevel"
-                                :original-tree-data="STLevelArr"
-                                :tree-default-props="treeStructure"
-                                ref="ccc3"
-                                current-ref="ksClassify"></mta-select-input-tree>
-                    </el-form-item>-->
-                </div>
-            </el-form>
-            <div class="import-head">
-                <div class="downloadTem">
-                    <div>
-                        <span class="wordChenked" style="cursor: pointer" :class="wordChenked === 0 ? 'wordChenked' : 'wordUnChenked'"
-                              @click="downloadFun('word')"></span>
-                        <span style="cursor: pointer" :class="excelChenked === 0 ? 'excelUnChenked' : 'excelChenked'"
-                              @click="downloadFun('excel')"></span>
-                        <span style="display: block;cursor: pointer">下载</span>
-                    </div>
-                </div>
-                <div class="import-jt import-jt-narrow">
-                    <span></span>
-                </div>
-                <div class="downloadTem">
-<!--                    <span class="testChenked"></span>-->
-                    <el-upload
-                            class="upload-demo"
-                            action="https://jsonplaceholder.typicode.com/posts/"
-                            :show-file-list="false"
-                            :http-request="importFun"
-                    >
-                        <div style="display: flex;flex-direction: column;margin-top: -8px">
-                            <span class="testChenked"></span>
-                            <span>{{dataImportText}}</span>
-                        </div>
-                    </el-upload>
-                </div>
-            </div>
-            <div class="drjg-box">
-                <div style="text-align: center">导入结果</div>
-                <div>
-                    <div class="successSpan">导入成功数据:<span class="color-p">{{listSuccess}}条</span></div>
-                    <div  class="errorSpan">导入失败数据:<span style="color: #e51c23;" >{{listError}}条</span></div>
-                </div>
-            </div>
-            <el-table
-                    :data="errTableData"
-                    border
-                    height="200"
-                    :stripe="true"
-                    header-row-class-name="headerBackgroundColor"
-                    header-align="center"
-                    class="response-table"
-                    style="width: 100%">
-
-                <el-table-column
-                        type="index"
-                        width="50">
-                </el-table-column>
-                <el-table-column
-                        label="错误信息"
-                        min-width="200"
-                        :show-overflow-tooltip="true">
-                    <template  slot-scope="scope">
-                        <div v-if="Number(scope.row.line)!==0">
-                            第{{scope.row.line}}行&nbsp;&nbsp;{{scope.row.msg}}
-                        </div>
-                        <div v-if="Number(scope.row.line)===0">
-                            {{scope.row.msg}}
-                        </div>
-                    </template>
-
-                </el-table-column>
-                <el-table-column
-                        prop="topicDry"
-                        label="题干"
-                        :show-overflow-tooltip="true"
-                        min-width="200">
-                </el-table-column>
-            </el-table>
-            <span slot="footer" class="dialog-footer">
-            <slot name="footer"></slot>
-            <span>
-                 <el-button size="mini" @click="handleCancel">关闭</el-button>
-            </span>
-            </span>
-        </el-dialog>
-        <el-dialog v-if="showDialogType===3"
-                   :title="dialogTitleText"
-                   center
-                   :visible.sync="showDialog"
-                   :requestData="requestData"
-                   :show-close="true"
-                   @close="dialogClose"
-                   :modal-append-to-body="modalAppendToBody"
-                   :close-on-click-modal="false"
-                   class="response-middle-dialog">
-            <div class="import-head">
-                <div class="downloadTem" @click="downloadFun" style="cursor: pointer">
-                    <div class="img-box">
-                        <img :src="importDownImg" alt="">
-                    </div>
-                    <span >下载模版</span>
-                </div>
-                <div class="import-jt">
-                    <span></span>
-                </div>
-                <div class="downloadTem">
-
-                    <el-upload
-                            class="upload-demo"
-                            action="https://jsonplaceholder.typicode.com/posts/"
-                            :show-file-list="false"
-                            :http-request="importFun"
-                    >
-                        <div class="img-box">
-                            <img :src="importShijuanImg" alt="">
-                        </div>
-                        <span>{{dataImportText}}</span>
-                    </el-upload>
-                </div>
-            </div>
-            <div class="drjg-box">
-                <span>导入结果</span>
-                <div>
-                    <div class="successSpan">导入成功数据:<span class="color-p">{{listSuccess}}条</span></div>
-                    <div class="errorSpan">导入失败数据:<span style="color: #e51c23">{{listError}}条</span></div>
-                </div>
-            </div>
-            <el-table
-                    :data="errTableData"
-                    border
-                    height="200"
-                    :stripe="true"
-                    header-row-class-name="headerBackgroundColor"
-                    header-align="center"
-                    class="response-table"
-                    style="width: 100%">
-
-                <el-table-column
-                        type="index"
-                        width="50">
-                </el-table-column>
-                <el-table-column
-                        label="错误信息"
-                        align="center"
-                        :show-overflow-tooltip="true">
-                    <template  slot-scope="scope">
-                        <div v-if="Number(scope.row.line)!==0">
-                            第{{scope.row.line}}行&nbsp;&nbsp;{{scope.row.msg}}
-                        </div>
-                        <div v-if="Number(scope.row.line)===0">
-                            {{scope.row.msg}}
-                        </div>
-                    </template>
-
-                </el-table-column>
-            </el-table>
-            <span slot="footer" class="dialog-footer">
-            <slot name="footer"></slot>
-            <span>
-                 <el-button size="mini" @click="handleCancel">关闭</el-button>
-            </span>
-            </span>
-        </el-dialog>
-    </div>
-</template>
-
-<script>
-    import { getBaseUrlFromCommon ,getImg}                                                                from '@/utils/common.js';
-    import { getUploadImg }                                                                        from '@/api/AlCloud.js';
-    import axios                                                                                   from 'axios';
-    import MtaSelectInputTree
-                                                                                                   from '@/components/management/Layout/SelectInput/SelectInputTree';
-    import { getShitiClassifyList, getShitiLevelList, getShitiKnowledgeList,uploadTemplate } from '@/api/exam';
-    import { getAdminUserImport }                                                                  from '@/api/user';
-
-    //  describe: 组件说明 author: Wgy date:2019-10-31
-    //   <template-import :dialogVisible.sync="optenFlag" templateType="user" :requestData="requestData" :requestUrl="requestUrl"></template-import>
-    // 必传项 :templateType下载模版类型 (必传根据自己需要添加) 如 user  对应的下载地址为 如下: address.user
-    //必传项 :requestUrlType 导入模版获取成功失败条数类型  如下方 shitiImport  (写对应的接口地址格式按照例子写)
-    //必传项 :dialogVisible.sync    弹窗flag
-    // 弹窗title文字 dialogTitleText  导入模版文字 dataImportText  dlWidth弹窗宽度
-    // 非必传项  showDialogType (默认为1) 1为模版下载 2为 试题批量导入
-    /*   非必传项  requestData (接口需要额外入参 使用) 父页面 写在computed 中
-    *   computed:   {
-              requestData: function (val) {
-                  return {
-                      page:  1,
-                      page2:  2,
-                  };
-              },
-          },
-    *
-    * */
-    export default {
-        name:       'import',
-        components: {
-            MtaSelectInputTree,
-        },
-        data() {
-            const validate1 = (rule, value, callback) => {
-                const data = JSON.parse(JSON.stringify(value));
-                if (data && data.id !== undefined && data.id !== 0) {
-                    callback();
-                } else {
-                    callback(new Error('请选择知识点分类'));
-                }
-            };
-            const validate2 = (rule, value, callback) => {
-                const data = JSON.parse(JSON.stringify(value));
-                if (data && data.id !== undefined && data.id !== 0) {
-                    callback();
-                } else {
-                    callback(new Error('请选择试题分类'));
-                }
-            };
-            const validate3 = (rule, value, callback) => {
-                const data = JSON.parse(JSON.stringify(value));
-                if (data && data.id !== undefined && data.id !== 0) {
-                    callback();
-                } else {
-                    callback(new Error('请选择试题难度'));
-                }
-            };
-            return {
-                //模版下载地址汇总
-                address:          {
-                    user:    '/open/template/%E7%94%A8%E6%88%B7%E6%89%B9%E9%87%8F%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx',
-                    xianxia: '/open/template/%E7%BA%BF%E4%B8%8B%E6%88%90%E7%BB%A9%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx',
-                    word:    '/open/template/%E8%AF%95%E9%A2%98%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.docx',
-                    excel:   '/open/template/%E8%AF%95%E9%A2%98%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx',
-                    offlineResults: '/open/template/%E7%BA%BF%E4%B8%8B%E6%88%90%E7%BB%A9%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx',
-                    kaoshiAdduser:'/open/template/%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7%E6%A8%A1%E6%9D%BF.xlsx'
-                },
-                repeatData:[
-                    {
-                    value: false,
-                    label: '是'
-                     },
-                    {
-                        value: true,
-                        label: '否'
-                    },
-                ],
-                repeat:true,
-                //formLabelWidth:    '120px',
-                showDialog:       this.dialogVisible,
-                wordChenked:      0, //word flag
-                excelChenked:     1, //excel flag
-                listSuccess:      '',//成功数量
-                listError:        '',//失败数量
-                errTableData:     [],
-                errorMsg:         '',//错误信息
-                STClassifyArr:    [],
-                STLevelArr:       [],
-                ImportConfigData: {
-                    selectSTClassify: {},
-                    selectLevel:      {},
-                },
-                treeStructure:    {
-                    children: 'children',
-                    label:    'lable',
-                },
-                ImportRules:      {
-                    selectSTClassify: [
-                        { required: true, validator: validate2 },
-                    ],
-                    /*selectLevel:      [
-                        { required: true, validator: validate3 },
-                    ],*/
-                },
-                //青谷麦塔图片区分
-                importDownImg:getImg('default/import-down','png'),
-                importImg:getImg('default/import-import','png'),
-                importShijuanImg:getImg('default/import-shijuan','png'),
-            };
-        },
-        props:      {
-            //弹窗显隐 flag
-            dialogVisible:   {
-                type:    Boolean,
-                require: true,
-            },
-            modalAppendToBody:   {
-                type:    Boolean,
-                require: true,
-            },
-            // 下载模版类型 (必传根据自己需要添加)
-            templateType:    {
-                type:    String,
-                require: true,
-            },
-            // 1为模版下载 2为 试题批量导入
-            showDialogType:  {
-                type:    Number,
-                default: 1,
-            },
-            //入参 默认fileUrl
-            requestData:     {
-                type: Object,
-            },
-            // 导入试题后调用接口类型(如:提交)
-            requestUrl:  {
-                type:    String,
-                require: true,
-            },
-            // 导入模版文字描述
-            dataImportText:  {
-                type:    String,
-                default: '导入试卷分类',
-            },
-            // 弹窗title  文字描述
-            dialogTitleText: {
-                type:    String,
-                default: '批量导入试卷分类',
-            },
-            //弹窗宽度
-            dlWidth:         {
-                type:    String,
-                default: '50%',
-            },
-        },
-        methods:    {
-            //  describe: 切换图片 author: Wgy date:2019-10-31
-            changeImg(data) {
-                if (data === 0) {
-                    this.wordChenked = 0;
-                    this.excelChenked = 0;
-                } else {
-                    this.wordChenked = 1;
-                    this.excelChenked = 1;
-                }
-            },
-            //  describe: 下载模版 author: Wgy date:2019-10-30
-            downloadFun(opt) {
-                if (this.showDialogType === 1) {
-                    window.location.href = getBaseUrlFromCommon() + this.address[this.templateType];
-                } else if (this.showDialogType === 2) {
-                    if (opt && opt === 'word') {
-                        window.location.href = getBaseUrlFromCommon() + this.address.word;
-                    } else if (opt && opt === 'excel') {
-                        window.location.href = getBaseUrlFromCommon() + this.address.excel;
-                    }
-                }else if(this.showDialogType === 3){
-                    window.location.href = getBaseUrlFromCommon() + this.address[this.templateType];
-                }
-            },
-            importFun(params) {
-                if (!params) {
-                    return false;
-                }
-                const suffixList = params.file.name.split('.');
-                const options = {
-                    prefix: 'temp/',
-                    suffix: suffixList[1],
-                };
-                getUploadImg(options).then((res) => {
-                    if (res.code === 0) {
-                        // 二进制文件通过forData对象进行传递
-                        const FormDataForAl = new FormData();
-                        const multipartParams = Object.assign({}, res.data, {
-                            Filename:              `images/${params.filename}`,
-                            success_action_status: '200',
-                        });
-                        // 参数数据
-                        FormDataForAl.append('key', multipartParams.key);
-                        FormDataForAl.append('policy', multipartParams.policy);
-                        FormDataForAl.append('signature', multipartParams.signature);
-                        FormDataForAl.append('OSSAccessKeyId', multipartParams.accessid);
-                        FormDataForAl.append('success_action_status', multipartParams.success_action_status);
-                        // OSS要求, file放到最后
-                        FormDataForAl.append('file', params.file);
-                        window.loading1 = this.$loading();
-                        axios.post(multipartParams.uploadUrl, FormDataForAl).then(alRes => {
-                            if (alRes.status === 200) {
-                                const fileUrl = `${multipartParams.downloadUrl}/${multipartParams.key}`;
-                                let fromParam = {
-                                    stClassifyId:  this.ImportConfigData.selectSTClassify.id,
-                                    stLevelId:     this.ImportConfigData.selectLevel.id,
-                                    url:           fileUrl,
-                                    repeat:this.repeat
-                                };
-                                let req = {};
-                                let url = this.requestUrl;
-                                if (this.showDialogType === 1||this.showDialogType === 3) {
-                                    req = Object.assign(fromParam, this.requestData);
-                                    uploadTemplate(req,url)
-                                    .then((res) => {
-                                       this.getDataResults(res)
-                                    }).catch(err => {
-                                        window.loading1.close();
-                                    });
-                                } else if (this.showDialogType === 2) {
-                                    req = Object.assign(fromParam,this.requestData);
-                                    this.$refs['ImportForm'].validate((valid) => {
-                                        if (valid) {
-                                            uploadTemplate(req,url)
-                                            .then((res) => {
-                                                this.getDataResults(res)
-                                            }).catch(err => {
-                                                window.loading1.close();
-                                            });
-                                        } else {
-                                            window.loading1.close();
-                                            this.$message.error('校验失败');
-                                        }
-                                    });
-                                }else if(this.showDialogType === 3){
-                                    req = Object.assign(fromParam,this.requestData);
-                                    uploadTemplate(req,url)
-                                    .then((res) => {
-                                        this.getDataResults(res)
-                                    }).catch(err => {
-                                        window.loading1.close();
-                                    });
-                                }
-                            }
-                        });
-                    }
-
-                });
-            },
-
-            //获得成功或者失败信息
-            getDataResults(res) {
-                if (res.code === 0) {
-                    this.errTableData = [];
-                    if (res.data.fail) {
-                        res.data.failList.forEach((item) => {
-                            const opt = {
-                                msg: item.msg,
-                                line: item.line,
-                                topicDry: item.data.name,
-                            };
-                            this.errTableData.push(opt);
-                        });
-                    }
-                    this.listError = res.data.fail;
-                    this.listSuccess = res.data.success;
-                    if(res.data.userList){
-                        this.$emit('importSuccess',res.data.userList);
-                    }else {
-                        this.$emit('importSuccess');
-                    }
-                }
-                window.loading1.close();
-            },
-            // 下拉树请求
-            getShitiClassifyList() {
-                getShitiClassifyList().then(res => {
-                    if (res.code === 0) {
-                        this.STClassifyArr = res.data.children;
-                    }
-                });
-            },
-            // 下拉树请求
-            getShitiLevelList() {
-                getShitiLevelList().then(res => {
-                    if (res.code === 0) {
-                        this.STLevelArr = res.data.children;
-                    }
-                });
-            },
-            handleCancel() {
-                this.$emit('update:dialogVisible', false);
-            },
-            dialogClose() {
-                if (this.showDialogType === 1) {
-                    this.$emit('update:dialogVisible', false);
-                    this.listError = '';
-                    this.listSuccess = '';
-                    this.errTableData = [];
-                } else {
-                    this.$emit('update:dialogVisible', false);
-                    this.errTableData = [];
-                    this.listError = '';
-                    this.listSuccess = '';
-                    this.$refs.ccc.clearInputData();
-                    this.$refs.ccc3.clearInputData();
-                    this.$refs.ImportForm.resetFields();
-                }
-                // description: 弹窗关闭事件; author: Wxy; date: 2019/11/25
-                this.$emit('dialogClose', true);
-            },
-        },
-        created() {
-
-        },
-        watch:      {
-            dialogVisible: {
-                handler() {
-                    this.showDialog = this.dialogVisible;
-                    if (this.showDialogType === 1 ||this.showDialogType === 3) {
-                        // 待添加
-                    } else if(this.showDialog&&this.showDialogType === 2) {
-                        this.getShitiClassifyList();
-                        this.getShitiLevelList();
-                    }
-                },
-                immediate: true,
-            },
-        },
-    };
-</script>

+ 0 - 111
src/components/management/Layout/welcomeInfo/QuickEntry.vue

@@ -1,111 +0,0 @@
-<template>
-    <div class="Quick-Entry fsize-m2">
-        <div class="Quick-Entry-main">
-            <el-card class="box-card" @click.native="handleCard(item)" :key="index"
-                     v-for="(item, index) of pageData.cardControl"
-                     :class="{
-                first: index === 0,
-                two: index === 1,
-                three: index === 2,
-                four: index === 3
-            }" shadow="always">
-                <h3>{{item.name === null ? '自定义入口': item.name}}</h3>
-                <p>{{item.intro === null ? '管理员可根据自身实际需求自定义一个快捷入口按键': item.intro}}</p>
-                <span @click.stop="cardEditor(index)" class="icon-editor"><i class="el-icon-edit-outline"></i></span>
-            </el-card>
-        </div>
-
-        <el-dialog
-                title="自定义入口"
-                :visible.sync="showEditorDl"
-                width="60%"
-                center>
-            <div class="d-wrap">
-                <perfect-scrollbar>
-                    <div class="d-content">
-                        <el-card @click.native="changeControlCard(item)" class="d-box-card" shadow="hover" v-for="(item,index) in pageData.lists" :key="index">
-                            <div >
-                                <h3>{{item.name}}</h3>
-                                <p>{{item.intro === null ? '暂无描述': item.intro}}</p>
-                            </div>
-                        </el-card>
-                    </div>
-                </perfect-scrollbar>
-            </div>
-            <span slot="footer" class="dialog-footer">
-                </span>
-        </el-dialog>
-    </div>
-</template>
-
-<script>
-    import {PerfectScrollbar} from 'vue2-perfect-scrollbar';
-
-    export default {
-        name: "QuickEntry",
-        props: {
-            busData: {
-                type: Object,
-                require: true,
-            },
-        },
-        components: {
-            PerfectScrollbar
-        },
-        data() {
-            return {
-                pageData: {
-                    cardControl: [],
-                    lists: [],
-                },
-                cardIndex: null,
-                showEditorDl: false
-            }
-        },
-        watch: {
-            busData: {
-                handler(newVal, oldVal) {
-                    this.pageData.lists = newVal.allData;
-                    this.pageData.cardControl = newVal.defaultData === null ? [
-                        {
-                            name: '自定义入口',
-                            intro: '管理员可根据自身实际需求自定义一个快捷入口按键',
-                            url: '',
-                        },
-                        {
-                            name: '自定义入口',
-                            intro: '管理员可根据自身实际需求自定义一个快捷入口按键',
-                            url: '',
-                        },
-                        {
-                            name: '自定义入口',
-                            intro: '管理员可根据自身实际需求自定义一个快捷入口按键',
-                            url: '',
-                        },
-                        {
-                            name: '自定义入口',
-                            intro: '管理员可根据自身实际需求自定义一个快捷入口按键',
-                            url: '',
-                        }
-                    ] : newVal.defaultData;
-                },
-                deep: true
-            }
-        },
-        methods: {
-            cardEditor(index) {
-                this.showEditorDl = true;
-                this.cardIndex = index;
-            },
-            handleCard(data) {
-                this.$emit('change', data);
-            },
-            changeControlCard(data) {
-                this.pageData.cardControl[this.cardIndex] = data;
-                this.$emit('getData', this.pageData.cardControl);
-                this.showEditorDl = false;
-            }
-        }
-    }
-</script>
-

+ 0 - 139
src/components/management/Layout/welcomeInfo/RecentTest.vue

@@ -1,139 +0,0 @@
-<template>
-    <div class="recent-test fsize-m2">
-        <div v-if="lists.length>0" class="recent-test-boxs">
-            <el-card class="box-card" shadow="hover" v-for="(item,index) in lists" :key="index">
-                <div @click="cardClick(item)">
-                    <h3>{{item.name}}</h3>
-                    <p>{{item.startTime}}至{{item.endTime}}</p>
-                    <p>总分:{{item.ksScore}}分</p>
-                    <p>时长:{{item.totalTm}}分钟</p>
-                    <p class="ks-status color-p" :class="{signUp: item.status !== 1}">{{item.status === 1 ? '考试中...':
-                        '报名中...'}}</p>
-                    <p class="ks-note">
-                        <span>{{item.count}}</span>人正在考试
-                    </p>
-                </div>
-            </el-card>
-        </div>
-        <div v-else class="recent-test-boxs">
-            <el-card class="box-card only" shadow="hover">
-                <img src="../../../../assets/images/default/c-exam-img.png" class="examImage">
-<!--                <img src="https://saas-mta.oss-cn-beijing.aliyuncs.com/resource/exam-img.png" class="examImage">-->
-            </el-card>
-        </div>
-    </div>
-</template>
-
-<script>
-    export default {
-        name: "recentTest",
-        props: {
-            busdata: {
-                type: Object,
-                require: true
-            }
-        },
-        data() {
-            return {
-                lists: [],
-            }
-        },
-        watch: {
-            busdata: {
-                handler(newVal, oldVal) {
-                    if (newVal.option) {
-                        this.lists = newVal.option;
-                       /* setTimeout(() => {
-                            this.lists = [
-                                {
-                                    name: '应用工具考核',
-                                    startTime: '2018-10-17 18:20',
-                                    endTime: '2018-10-20 18:20',
-                                    ksScore: 100.0,
-                                    totalTime: '120分钟',
-                                    status: 1,
-                                    count: 10,
-                                },
-                                {
-                                    name: '应用工具考核',
-                                    startTime: '2018-10-17 18:20',
-                                    endTime: '2018-10-20 18:20',
-                                    ksScore: 100.0,
-                                    totalTime: '120分钟',
-                                    status: 1,
-                                    count: 10,
-                                },
-                                {
-                                    name: '应用工具考核',
-                                    startTime: '2018-10-17 18:20',
-                                    endTime: '2018-10-20 18:20',
-                                    ksScore: 100.0,
-                                    totalTime: '120分钟',
-                                    status: 2,
-                                    count: 10,
-                                },
-                                {
-                                    name: '应用工具考核',
-                                    startTime: '2018-10-17 18:20',
-                                    endTime: '2018-10-20 18:20',
-                                    ksScore: 100.0,
-                                    totalTime: '120分钟',
-                                    status: 2,
-                                    count: 10,
-                                },]
-                        }, 3000)*/
-                    }
-                },
-                deep: true
-            }
-        },
-        methods: {
-            cardClick() {
-                this.$router.push({path: `/a/kaoshi/jiankong`})
-            }
-
-
-        },
-        created() {
-            /*setTimeout(() => {
-                this.lists = [
-                    {
-                        ksName: '应用工具考核',
-                        startTime: '2018-10-17 18:20',
-                        endTime: '2018-10-20 18:20',
-                        score: 100.0,
-                        totalTime: '120分钟',
-                        status: 1
-                    },
-                    {
-                        ksName: '应用工具考核',
-                        startTime: '2018-10-17 18:20',
-                        endTime: '2018-10-20 18:20',
-                        score: 100.0,
-                        totalTime: '120分钟',
-                        status: 2
-                    },
-                    {
-                        ksName: '应用工具考核',
-                        startTime: '2018-10-17 18:20',
-                        endTime: '2018-10-20 18:20',
-                        score: 100.0,
-                        totalTime: '120分钟',
-                        status: 1
-                    },
-                    {
-                        ksName: '应用工具考核',
-                        startTime: '2018-10-17 18:20',
-                        endTime: '2018-10-20 18:20',
-                        score: 100.0,
-                        totalTime: '120分钟',
-                        status: 2
-                    },]
-            }, 3000000)*/
-        }
-    }
-</script>
-
-<style lang="scss" scoped>
-
-</style>

+ 0 - 175
src/components/management/Layout/welcomeInfo/StatisticalAnalysis.vue

@@ -1,175 +0,0 @@
-<template>
-    <div class="statistical-analysis fsize-m2" v-if="option.length>0">
-        <div class="box-left">
-            <div class="box-left-top">
-                <h3>{{pageData.ksData.name}}</h3>
-                <p><span>实际参加人数:</span><span>{{pageData.ksData.ksUserJoin}}人</span></p>
-                <p><span>及格人数:</span><span>{{pageData.ksData.ksUserPass}}人</span></p>
-                <p><span>不及格人数:</span><span>{{pageData.ksData.ksNowPass}}人</span></p>
-                <p><span>平均考试时间:</span><span>{{pageData.ksData.timeAvg}}分钟</span></p>
-                <p><span>最高分:</span><span>{{pageData.ksData.scoreTop}}分</span></p>
-                <p><span>平均分:</span><span>{{pageData.ksData.scoreAvg}}分</span></p>
-            </div>
-            <el-pagination
-                    layout="prev, pager, next"
-                    :page-size="1"
-                    @current-change="handleEchart"
-                    :total="option.length">
-            </el-pagination>
-        </div>
-        <div class="box-right">
-            <div class="fra-charts" id="welcomeCharts"></div>
-        </div>
-    </div>
-    <div class="statistical-analysis fsize-m2" v-else>
-        <el-card class="box-card only" shadow="hover">
-            <img src="../../../../assets/images/default/c-exam-jiankong.png" class="examImage">
-        </el-card>
-    </div>
-</template>
-
-<script>
-    import { getScoreShow } from '@/api/statistics.js';
-
-    export default {
-        name:    'StatisticalAnalysis',
-        data() {
-            return {
-                pageData:      {
-                    dlEchartData: {
-                        xAxis:   {
-                            type: 'category',
-                            data: [],
-                        },
-                        yAxis:   {
-                            type:      'value',
-                            axisLabel: {
-                                formatter: '{value} 人',
-                            },
-                        },
-                        series:  [
-                            {
-                                name:      '得分人数',
-                                data:      [],
-                                barWidth:  '50%',
-                                type:      'bar',
-                                itemStyle: {
-                                    color: '#2196F5',
-                                },
-                            },
-                        ],
-                        tooltip: {
-                            trigger:     'axis',
-                            axisPointer: {
-                                type: 'shadow',
-                            },
-                        },
-                    },
-                    curPage:      0,
-                    ksData:       {},
-                },
-                welcomeCharts: null,
-            };
-        },
-        props:   {
-            option: {
-                type:    Array,
-                default: () => [],
-            },
-        },
-        watch:   {
-            option: {
-                handler() {
-                    this.initPageData();
-                },
-                deep: true,
-            },
-        },
-        methods: {
-            initPageData() {
-                if (this.option && this.option.length) {
-                    const data = this.option[this.pageData.curPage];
-                    //    文本init
-                    this.pageData.ksData = {
-                        ksUserJoin: data.ksUserJoin,
-                        ksUserPass: data.ksUserPass,
-                        ksNowPass:  data.ksUserJoin - data.ksUserPass,
-                        name:       data.name,
-                        scoreAvg:   data.scoreAvg,
-                        scoreTop:   data.scoreTop,
-                        startTime:  data.startTime,
-                        timeAvg:    data.timeAvg,
-                    };
-                    //    图表数据获取
-                    this.getEchartsData({
-                                            ksId: data.ksId,
-                                        });
-                }
-            },
-            // 分页触发数据改变
-            handleEchart(data) {
-
-                this.pageData.curPage = data - 1;
-
-                const newData = this.option[this.pageData.curPage];
-                this.pageData.ksData = {
-                    ksUserJoin: newData.ksUserJoin,
-                    ksUserPass: newData.ksUserPass,
-                    ksNowPass:  newData.ksUserJoin - newData.ksUserPass,
-                    name:       newData.name,
-                    scoreAvg:   newData.scoreAvg,
-                    scoreTop:   newData.scoreTop,
-                    startTime:  newData.startTime,
-                    timeAvg:    newData.timeAvg,
-                };
-
-                this.getEchartsData({
-                                        ksId: this.option[this.pageData.curPage].ksId,
-                                    });
-
-            },
-            getEchartsData(data) {
-                getScoreShow(data).then(res => {
-                    if (res.code === 0) {
-                        const xArr = [];
-                        const yArr = [];
-                        if (res.code === 0 && res.data.length) {
-                            res.data.forEach(item => {
-                                yArr.push(item.userCount);
-                                xArr.push(item.score);
-                            });
-                        }
-                        this.pageData.dlEchartData.xAxis.data = xArr;
-                        this.pageData.dlEchartData.series[0].data = yArr;
-
-                        this.initEcharts();
-
-                        this.welcomeCharts.setOption(this.pageData.dlEchartData);
-                    }
-                });
-            },
-            // 初始化图表
-            initEcharts() {
-                if (this.option && this.option.length) {
-                    this.welcomeCharts = this.$echarts.init(document.getElementById('welcomeCharts'));
-                    this.welcomeCharts.setOption(this.pageData.dlEchartData);
-                    window.onresize = () => {
-                        return (() => {
-                            this.$nextTick(() => {
-                                this.resizeEchart();
-                            });
-                        })();
-                    };
-
-                }
-            },
-            resizeEchart() {
-                this.welcomeCharts.resize();
-            },
-        },
-        beforeDestroy() {
-            this.onresize = null;
-        },
-    };
-</script>
-