lsc преди 8 месеца
родител
ревизия
2a1983e48f

+ 370 - 28
src/components/pages/aiAddCourse/addCourse.vue

@@ -658,6 +658,11 @@
                       @contextmenu.prevent="openAiDialog(1, 'aiOutline')"
                       @click="openAiDialog(2, 'aiOutline')">生成大纲</button>
                    </el-tooltip>
+                   <el-tooltip effect="light" content="右键单击可配置提示词" placement="bottom" v-if="panOutline() > 0">
+                    <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;"
+                      @contextmenu.prevent="openAiDialog2(1, 'aiOutline')"
+                      @click="openAiDialog2(2, 'aiOutline')">重新生成大纲</button>
+                   </el-tooltip>
                   <!-- <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;">AI优化</button> -->
                 </div>
                 <div class="task_outline">
@@ -796,6 +801,11 @@
                       @contextmenu.prevent="openAiDialog(1, 'aiTeacher2')"
                       @click="openAiDialog(2, 'aiTeacher2')" v-if="istemplate == 1 && dArray.length">生成教案</button>
                    </el-tooltip>
+                   <el-tooltip effect="light" content="右键单击可配置提示词" placement="bottom" v-if="panTeacher() > 0">
+                    <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;"
+                      @contextmenu.prevent="openAiDialog2(1, 'aiTeacher2')"
+                      @click="openAiDialog2(2, 'aiTeacher2')">重新生成大纲</button>
+                   </el-tooltip>
                   <!-- <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;">AI优化</button> -->
                 </div>
                 <div class="task_outline">
@@ -1441,6 +1451,11 @@
                               </div>
                               <div class="chapter_upload_ic">
                                 <div class="chapter_upload_noSee" v-if="item1.type == 12"></div>
+                                <div class="chapter_upload_ic_check" v-if="item1.type == 3" @click.stop="
+                                  checkChpater( $event, unitIndex, 0, index1 )
+                                  ">
+                                  <div></div>
+                                </div>
                                 <div class="chapter_upload_ud" style="z-index: 99">
                                   <div class="chapter_upload_up" @click="
                                     upCd(
@@ -1942,6 +1957,11 @@
                                       class="chapter_upload_noSee"
                                       v-if="item1.type == 12"
                                     ></div>
+                                    <div class="chapter_upload_ic_check" v-if="item1.type == 3" @click.stop="
+                                    checkChpater( $event, unitIndex, itemTaskIndex, index1 )
+                                    ">
+                                    <div></div>
+                                  </div>
                                     <div
                                       class="chapter_upload_ud"
                                       style="z-index: 99"
@@ -4655,7 +4675,7 @@
       closePan(45);
     }
       " class="dialog_diy fullStyle">
-      <div style="height: 100%">
+      <div style="height: 100%" v-loading="choiceLoading"  element-loading-text="小可正在努力生成中,请稍等...">
         <!-- <div class="a_add_title" style="
             display: flex;
             flex-direction: row;
@@ -4671,8 +4691,13 @@
               color: #c7c7c7;
               display: flex;
               align-items: center;
+              justify-content: flex-end;
             ">
             <!-- 请输入题目内容 -->
+            <button class="c_pub_button_add pub_btn_paste_img" @click="aiChoice(45)" style="margin-left: 10px">
+              智能生成
+            </button>
+            <!-- 请输入题目内容 -->
             <button class="c_pub_button_add pub_btn_paste_img" @click="pasteOption" style="margin-left: 10px"
               v-if="isPasteChoice">
               智能粘贴
@@ -5710,6 +5735,8 @@
       @retrunCourse="retrunCourse" :templateid.sync="templateid" @addWork="addWork"></tipsDialog>
     <aiCreateDialog :dialogVisibleAiCreate.sync="dialogVisibleAiCreate" :courseName="courseName" @createAiPpt="createAiPpt" :infoData="infoData" :courseTypeId="courseTypeId" :CourseTypeJson="CourseTypeJson" :courseState="courseState" :lineCount="lineCount" :unitJson="unitJson"></aiCreateDialog>
     <aiCreateVideoDialog :dialogVisibleAiCreateVideo.sync="dialogVisibleAiCreateVideo" :courseName="courseName" @createAiVideo="createAiVideo" :courseState="courseState" :lineCount="lineCount" :unitJson="unitJson"></aiCreateVideoDialog>
+    <wpdf :dialogVisiblePdf.sync="dialogVisiblePdf" :url="wurl"></wpdf>
+    <wOffice :dialogVisibleOffice.sync="dialogVisibleOffice" :url="wurl" ></wOffice>
   </div>
 </template>
 
@@ -5738,6 +5765,8 @@ import { v4 as uuidv4 } from "uuid";
 import MarkdownIt from "markdown-it";
 import aiCreateDialog from './aiCreateDialog.vue'
 import aiCreateVideoDialog from './aiCreateVideoDialog.vue'
+import wpdf from "../test/file/wPdf2.vue";
+import wOffice from "../test/file/wOffice.vue";
 
 var OpenCC = require("opencc-js");
 let converter = OpenCC.Converter({
@@ -5765,6 +5794,8 @@ export default {
     tipsDialog,
     aiCreateDialog,
     aiCreateVideoDialog,
+    wpdf,
+    wOffice,
   },
   data() {
     return {
@@ -6126,6 +6157,10 @@ export default {
       courseJie:1,
       courseTime:45,
       allTextArray: [],
+      dialogVisiblePdf: false,
+      dialogVisibleOffice: false,
+      wurl: "",
+      choiceLoading: false,
     };
   },
   directives: {
@@ -6250,6 +6285,34 @@ export default {
           ? md.render(c) : "";
       };
     },
+    panOutline(){
+      return function () {
+        let count = 0;
+        for(var i = 0; i < this.unitJson.length; i++){
+          let _task = this.unitJson[i].chapterInfo[0].taskJson
+          for(var j = 0; j < _task.length; j++){
+            if(_task[j].taskDetail2){
+              count++
+            }
+          }
+        }
+        return count;
+      };
+    },
+    panTeacher(){
+      return function () {
+        let count = 0;
+        for(var i = 0; i < this.unitJson.length; i++){
+          let _task = this.unitJson[i].chapterInfo[0].taskJson
+          for(var j = 0; j < _task.length; j++){
+            if(_task[j].taskDetail3){
+              count++
+            }
+          }
+        }
+        return count;
+      };
+    },
   },
   watch: {
     unitIndex(newValue, oldValue) {
@@ -8962,12 +9025,56 @@ export default {
       //   ic
       // ].name = JSON.parse(JSON.stringify(e.target.value));
       this.line =
-        this.unitJson[i].chapterInfo[0].taskJson[0].chapterData[ic].name;
+        this.unitJson[i].chapterInfo[0].taskJson[j].chapterData[ic].name;
       this.taskCount = j;
       this.lineCount = ic;
       this.dialogVisibleupdataVideoT = true;
       this.$forceUpdate();
     },
+    checkChpater(e, i, j, ic){
+      let type = this.unitJson[i].chapterInfo[0].taskJson[j].chapterData[ic].type
+      if(type == 3){
+        var fileA = [
+          "DOC",
+          "DOCX",
+          "DOCM",
+          "DOTM",
+          "DOTX",
+          "PPTX",
+          "PPSX",
+          "PPT",
+          "PPS",
+          "PPTM",
+          "POTM",
+          "PPAM",
+          "POTX",
+          "PPSM",
+          "XLSX",
+          "XLS"
+        ];
+        let url = this.unitJson[i].chapterInfo[0].taskJson[j].chapterData[ic].url
+        if (
+          fileA.indexOf(
+            url.split(".")[
+						url.split(".").length - 1
+            ].toLocaleUpperCase()
+          ) != -1
+        ) {
+          this.dialogVisibleOffice = true
+          this.wurl = url
+        } else if (
+          "pdf".indexOf(
+            url.split(".")[
+						url.split(".").length - 1
+            ].toLocaleLowerCase()
+          ) != -1
+        ) {
+          this.dialogVisiblePdf = true
+          this.wurl = url
+        }
+      }
+      
+    },
     updataVideoC() {
       this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
         this.taskCount
@@ -13517,6 +13624,23 @@ export default {
       }
       this.$forceUpdate();
     },
+    openAiDialog2(clickType, type, callback, index, tindex){
+      this.$confirm("重新生成会影响已生成内容,确定重新生成吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          if (this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5" && type == "aiTeacher2") {
+            this.openAiDialog(clickType, 'aiTeacher')
+          }else {
+            this.openAiDialog(clickType, type, callback, index, tindex)
+          }
+        })
+        .catch(() => {
+        
+        });
+    },
     openAiDialog(clickType, type, callback, index, tindex) {
       // if(clickType == 1){
       //   return;
@@ -13905,6 +14029,7 @@ ${sub.length ? '学科:' + sub.join(",") : ''}
 ${mclass.length ? '面向年级:' + mclass.join(",") : ''}
 ${this.templatePan.includes(this.templateid) ? '课程节数:'+this.courseJie+'节' : ''}
 ${this.templatePan.includes(this.templateid) ? '课程时长:'+this.courseTime+'min' : ''}
+${this.courseText ? '参考内容:'+this.courseText : ''}
 
 ## 要求
 ${message} 以及##参考资料 以文本格式输出项目概况,驱动性问题,最终作品
@@ -13912,7 +14037,9 @@ ${message} 以及##参考资料 以文本格式输出项目概况,驱动性问
 ## Format example
 课程简要描述:课程内容的简单叙述。
 驱动性问题:1个驱动整个项目的问题。
-最终作品:对应解决驱动性问题的作品,可个人可团队。`
+最终作品:对应解决驱动性问题的作品,可个人可团队。
+
+${this.courseText ? '注意,你生成的内容不能与原有<参考内容>一致,重新生成不一样的<参考内容>' : ''}`
       this.aiGet(msg)
     },
     setUnitJson() {
@@ -14207,36 +14334,81 @@ ${message} 以及##参考资料 以文本格式输出项目概况,驱动性问
               }
             }
             _this.dArray = dArray
-            _this.unitJson[0].chapterInfo[0].taskJson = []
 
-            for (var i = 0; i < dArray.length; i++) {
-              let _task = dArray[i]
-              _this.unitJson[0].chapterInfo[0].taskJson.push({
-                task: _task.task,
-                taskDetail: "",
-                taskDetail2: _task.detail,
-                taskDetail3: "",
-                chapterData: [],
-                toolText: "",
-                toolChoose: [
-                  {
-                    tool: [],
-                    toolDetail: "",
-                    toolType: 0,
+            if(_this.panOutline() > 0){
+              for(var i = 0; i < _this.unitJson[0].chapterInfo[0].taskJson.length; i++){
+                _this.unitJson[0].chapterInfo[0].taskJson[i].task = ""
+                _this.unitJson[0].chapterInfo[0].taskJson[i].taskDetail2 = ""
+              }
+              for (var i = 0; i < dArray.length; i++) {
+                let _task = dArray[i]
+                if(_this.unitJson[0].chapterInfo[0].taskJson[i]){
+                  _this.unitJson[0].chapterInfo[0].taskJson[i].task = _task.task
+                  _this.unitJson[0].chapterInfo[0].taskJson[i].taskDetail2 = _task.detail
+                }else {
+                  _this.unitJson[0].chapterInfo[0].taskJson.push({
+                    task: _task.task,
+                    taskDetail: "",
+                    taskDetail2: _task.detail,
+                    taskDetail3: "",
+                    chapterData: [],
+                    toolText: "",
+                    toolChoose: [
+                      {
+                        tool: [],
+                        toolDetail: "",
+                        toolType: 0,
+                        askCount: 1,
+                        askTitle: "",
+                        askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
+                      },
+                    ],
+                    isShowTools: false,
                     askCount: 1,
+                    isFold: 2,
                     askTitle: "",
                     askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
-                  },
-                ],
-                isShowTools: false,
-                askCount: 1,
-                isFold: 2,
-                askTitle: "",
-                askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
-                checkJson: [{ checkCount: [], checkPerent: [] }],
-                homeworkList: [],
-              })
+                    checkJson: [{ checkCount: [], checkPerent: [] }],
+                    homeworkList: [],
+                  })
+                }
+
+              }
+            }else { 
+              _this.unitJson[0].chapterInfo[0].taskJson = []
+
+              for (var i = 0; i < dArray.length; i++) {
+                let _task = dArray[i]
+                _this.unitJson[0].chapterInfo[0].taskJson.push({
+                  task: _task.task,
+                  taskDetail: "",
+                  taskDetail2: _task.detail,
+                  taskDetail3: "",
+                  chapterData: [],
+                  toolText: "",
+                  toolChoose: [
+                    {
+                      tool: [],
+                      toolDetail: "",
+                      toolType: 0,
+                      askCount: 1,
+                      askTitle: "",
+                      askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
+                    },
+                  ],
+                  isShowTools: false,
+                  askCount: 1,
+                  isFold: 2,
+                  askTitle: "",
+                  askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
+                  checkJson: [{ checkCount: [], checkPerent: [] }],
+                  homeworkList: [],
+                })
+              }
             }
+
+
+
             _this.unitJson[0].chapterInfo[0].taskJson[0].chapterData = JSON.parse(JSON.stringify(_this.infoData))
             _this.unitJson2 = JSON.parse(JSON.stringify(_this.unitJson))
             _this.$forceUpdate();
@@ -14646,6 +14818,160 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[task].taskDetail3.replaceAll('#','')
           });
         });
     },
+    async aiChoice(type){
+      if(type == 45){
+        this.choiceLoading = true
+      }
+      let _this = this
+      let fileid = _this.isFileSearch ? [..._this.fileIds] : []
+      if (_this.infoData.length) {
+        for (var i = 0; i < _this.infoData.length; i++) {
+          if(_this.infoData[i].fileid){
+            fileid.push(_this.infoData[i].fileid)
+          }
+        }
+      }
+
+      let sub = []
+      let mclass = []
+      if (this.courseTypeId.length) {
+        for (var i = 0; i < this.courseTypeId.length; i++) {
+          let _sid = this.courseTypeId[i]
+          for (var j = 0; j < this.CourseTypeJson['34628934-d02f-11ec-8c78-005056b86db5'].length; j++) {
+            if (_sid == this.CourseTypeJson['34628934-d02f-11ec-8c78-005056b86db5'][j].id) {
+              mclass.push(this.CourseTypeJson['34628934-d02f-11ec-8c78-005056b86db5'][j].name)
+            }
+            if (_sid == this.CourseTypeJson['34629907-d02f-11ec-8c78-005056b86db5'][j].id) {
+              sub.push(this.CourseTypeJson['34629907-d02f-11ec-8c78-005056b86db5'][j].name)
+            }
+          }
+        }
+      }
+      let messages = ""
+      if(type == 15){
+        messages = `NOTICE
+Role: 你是创建课程的老师,可以利用file_search的方式完整的去分析文件内容(注:如果文件内容里面不包含需要检索的内容,就不引用文件内容),并生成需要的JSON数据。
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
+Instruction: Based on the context, follow "Format example", write content.
+
+# Context
+## 任务
+根据本任务的#教案,在考虑到面向学生年级(<面向年级>)以及相对应的学科(<课程学科>)的基础上生成1道问答题。题目的意义是测试学生对本教学任务知识点的掌握情况,你的题目应当是有意义的。然后根据Format example的要求返回要以json的格式
+
+## 限制
+- 生成题目应该充分考虑学生年级<面向年级>和面向学科<课程学科>,你的题目应有教学意义。
+- 你仅仅需要输出题目,其他什么内容都不需要输出。禁止输出题目以外的任何内容。
+
+## 课程简介
+课程名字:${_this.courseName}
+${_this.courseText ? '课程简要描述:' + _this.courseText : ''}
+${sub.length ? '学科:' + sub.join(",") : ''}
+${mclass.length ? '面向年级:' + mclass.join(",") : ''}
+
+## 教案
+${_this.unitJson[0].chapterInfo[0].taskJson[_this.taskCount].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
+
+# Format example
+{answerQ:"问题"}
+`
+      }else if(type == 45){
+        messages = `NOTICE
+Role: 你是创建课程的老师,可以利用file_search的方式完整的去分析文件内容(注:如果文件内容里面不包含需要检索的内容,就不引用文件内容),并生成需要的JSON数据。
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
+Instruction: Based on the context, follow "Format example", write content.
+
+# Context
+## 任务
+根据本任务的#教案,在考虑到面向学生年级(<面向年级>)以及相对应的学科(<课程学科>)的基础上生成5道单选题。题目的意义是测试学生对本教学任务知识点的掌握情况,你的题目应当是有意义的。
+
+## 限制
+- 生成题目禁止重复。
+- 生成题目应该充分考虑学生年级<面向年级>和面向学科<课程学科>,你的题目应有教学意义。
+- 请严格按照以下格式要求输出内容,题目必须是单选题。
+- 你仅仅需要输出题目,其他什么内容都不需要输出。禁止输出题目以外的任何内容。
+
+## 课程简介
+课程名字:${_this.courseName}
+${_this.courseText ? '课程简要描述:' + _this.courseText : ''}
+${sub.length ? '学科:' + sub.join(",") : ''}
+${mclass.length ? '面向年级:' + mclass.join(",") : ''}
+
+## 教案
+${_this.unitJson[0].chapterInfo[0].taskJson[_this.taskCount].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
+
+# Format example
+[{"teststitle":"题目内容","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"},{"teststitle":"题目内容","testItem":"选项数量(数字)","checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":"答案(数字)","type":"1"}]
+`
+      }
+
+      let parm = {
+        assistant_id: '6063369f-289a-11ef-8bf4-12e77c4cb76b',
+        message: [{"type":"text", "text":messages}],
+        session_name: uuidv4(),
+        userId: this.userid,
+        file_ids: fileid.length ? [...fileid] : '',
+      }
+      this.ajax
+        .post("https://gpt4.cocorobo.cn/ai_agent_park_chat", parm)
+        .then((response) => {
+          console.log(response);
+          let data = response.data.FunctionResponse
+          if (data.message) {
+            console.log(data.message);
+            try {
+              // let tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+              let tArray = {}
+              try {
+                tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+              } catch (error) {
+                  console.log("error_________________" + error);
+                try {
+                  let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
+                  let match = data.message.match(regex);
+                  tArray = JSON.parse(match[0]);
+
+                    // var message = data.message;
+                    // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
+                    // var jsonEnd = message.indexOf("```", jsonStart);
+                    // var jsonString = message.substring(jsonStart, jsonEnd).trim();
+                    // tArray = JSON.parse(jsonString);
+                } catch (error) {
+                  console.log("error_________________" + error);
+                }
+              }
+              if(type == 45){
+                this.testJson = {"testCount":tArray.length,"testTitle":"","testJson":tArray} 
+              }
+            } catch (error) {
+              if(type == 15){
+                {answerQ: "题目"}
+              }else if(type == 45){
+                let _test = [{"teststitle":"题目1","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"}]
+                this.testJson = {"testCount":_test.length,"testTitle":"","testJson":_test} 
+              }
+              _this.choiceLoading = false
+            }
+
+          }else if(type == 15){
+            {answerQ: "题目"}
+          }else if(type == 45){
+            let _test = [{"teststitle":"题目1","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"}]
+            this.testJson = {"testCount":_test.length,"testTitle":"","testJson":_test} 
+          }
+          _this.choiceLoading = false
+        }).catch((error) => {
+          if(type == 15){
+            {answerQ: "题目"}
+          }else if(type == 45){
+            let _test = [{"teststitle":"题目1","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"}]
+            this.testJson = {"testCount":_test.length,"testTitle":"","testJson":_test} 
+          }
+          console.log(error);
+          _this.choiceLoading = false
+        });
+    },
     async aiGet4(messages, callback, clickType) {
       let _this = this
 
@@ -17224,6 +17550,22 @@ ${this.aitype == 'aiCpote4' ? '## 目标层\n'+this.cpote['cpote3'] : ''}`
   background-size: 100% 100%;
 }
 
+.chapter_upload_ic_check {
+  height: 100%;
+  display: flex;
+  align-items: center;
+  cursor: pointer;
+  margin: 0 10px 0 0;
+}
+
+.chapter_upload_ic_check div {
+  width: 18px;
+  height: 18px;
+  background-image: url("../../../assets/icon/course/lookeye.svg");
+  background-size: 100% 100%;
+}
+
+
 .chapter_upload_ic_r {
   height: 100%;
   display: flex;

+ 7 - 6
src/components/pages/aiAddCourse/templateDialog.vue

@@ -37,7 +37,7 @@
 						">
                     {{ tagname }}
                 </div>
-                <div style="display: flex; flex-wrap: wrap" v-loading="loading">
+                <div style="display: flex; flex-wrap: wrap;height:100%" v-loading="loading">
                     <div class="a-d-b-item" v-for="(item, index) in searchDataList" :key="index">
                         <div class="a-d-b-i-top">
                             <img style="height: 22px; width: 22px" :src="require('../../../assets/icon/classroomObservation/digImg.svg')
@@ -190,11 +190,12 @@ export default {
                     this.loading = false
                     this.searchDataList = res.data[0]
                     if (!this.input2) {
-                        this.searchDataList.unshift({
-                            name: "项目式学习 (Project-Based Learning, PBL)",
-                            detail: "项目式学习是一种以学生为中心的教学方法,通过实际项目和问题解决,培养学生的深度学习和应用能力。",
-                            id:''
-                        });
+                        // this.searchDataList.unshift(
+                        //     {
+                        //     name: "项目式学习 (Project-Based Learning, PBL)",
+                        //     detail: "项目式学习是一种以学生为中心的教学方法,通过实际项目和问题解决,培养学生的深度学习和应用能力。",
+                        //     id:''
+                        // });
                     }
                 })
                 .catch((err) => {

+ 1 - 1
src/components/pages/test/file/wPdf.vue

@@ -6,7 +6,7 @@
                 :src="'https://cloud.cocorobo.cn/pdf.js/web/viewer.html?file=' + encodeURIComponent(url)"></iframe>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button @click="dialogVisiblePdf = false;">关 闭</el-button>
+            <el-button @click="close">关 闭</el-button>
         </span>
     </el-dialog>
 </template>

+ 1 - 1
src/components/pages/test/file/wPdf2.vue

@@ -6,7 +6,7 @@
                 :src="'https://cloud.cocorobo.cn/pdf.js/web/viewer.html?file=' + encodeURIComponent(url)"></iframe>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button @click="dialogVisiblePdf = false;">关 闭</el-button>
+            <el-button @click="close">关 闭</el-button>
         </span>
     </el-dialog>
 </template>