Forráskód Böngészése

修改分类,及文档模板板块

yangg 10 hónapja
szülő
commit
c271ae0bcb
27 módosított fájl, 1112 hozzáadás és 290 törlés
  1. 1 1
      .env.development
  2. 6 0
      src/router/index.js
  3. 1 1
      src/utils/request.js
  4. 16 7
      src/views/dashboard/admin/components/TransactionTable.vue
  5. 1 0
      src/views/dashboard/editor/components/TransactionTable.vue
  6. 4 4
      src/views/dataCenter/category/components/dataList.vue
  7. 2 2
      src/views/dataCenter/components/dataInfo.vue
  8. 7 7
      src/views/dataCenter/components/dataList.vue
  9. 5 0
      src/views/document/com/components/Attribute/Directory/index.scss
  10. 55 42
      src/views/document/com/components/Attribute/Directory/index.vue
  11. 2 1
      src/views/document/com/components/Attribute/index.vue
  12. 6 4
      src/views/document/com/components/TextArea/index.vue
  13. 216 0
      src/views/document/com/components/sourceEs/index.vue
  14. 1 1
      src/views/document/com/menus.scss
  15. 11 4
      src/views/document/com/menus.vue
  16. 42 4
      src/views/document/create.scss
  17. 120 41
      src/views/document/create.vue
  18. 55 0
      src/views/document/temList/components/dataList.scss
  19. 188 0
      src/views/document/temList/components/dataList.vue
  20. 3 0
      src/views/document/temList/components/dataSearch.scss
  21. 103 0
      src/views/document/temList/components/dataSearch.vue
  22. 3 0
      src/views/document/temList/components/index.js
  23. 60 0
      src/views/document/temList/temList.vue
  24. 193 167
      src/views/template/category/components/dataList.vue
  25. 1 1
      src/views/template/category/components/dataSearch.vue
  26. 1 1
      src/views/template/category/search.vue
  27. 9 2
      src/views/template/components/dataSearch.vue

+ 1 - 1
.env.development

@@ -2,4 +2,4 @@
 ENV = 'development'
 port = 8080
 # base api
-VUE_APP_BASE_API = 'http://192.168.1.199:8000'
+VUE_APP_BASE_API = 'http://192.168.1.178:8000'

+ 6 - 0
src/router/index.js

@@ -238,6 +238,12 @@ export const asyncRoutes = [
         name:"createNewDocument",
         meta: { title: '创建文档',  noCache: true }
       },
+      {
+        path: 'temList',
+        component: () => import('@/views/document/temList/temList'),
+        name: 'documentTemList',
+        meta: { title: '模板列表',  noCache: true }
+      },
       {
         path: 'category/search',
         component: () => import('@/views/document/category/search'),

+ 1 - 1
src/utils/request.js

@@ -65,7 +65,7 @@ service.interceptors.response.use(
     // if the custom code is not 20000, it is judged as an error.
     if (Number(res.status) !== 200) {
       Message({
-        message: res.errMsg || 'Error',
+        message: res.errMsg ||res.message,// 'Error'||
         type: 'error',
         duration: 5 * 1000
       })

+ 16 - 7
src/views/dashboard/admin/components/TransactionTable.vue

@@ -5,16 +5,18 @@
          文档001
       </template>
     </el-table-column>
-    <el-table-column label="时间" width="150">
+    <el-table-column label="时间" min-width="150">
       <template slot-scope="scope">
          2023-10-11
       </template>
     </el-table-column>
 
-    <el-table-column label="状态" width="100" align="center">
+    <el-table-column label="状态" min-width="100" align="center">
       <template slot-scope="{row}">
         <el-tag :type="row.status | statusFilter">
-          {{ row.status }}
+          <!-- {{ row.status }} -->
+          <div v-if="row.status==5">启用</div>
+          <div v-if="row.status==6">停用</div>
         </el-tag>
       </template>
     </el-table-column>
@@ -22,7 +24,7 @@
 </template>
 
 <script>
-
+  import{searchDocument,deleteDocument} from'@/api/document';
 export default {
   filters: {
     statusFilter(status) {
@@ -46,9 +48,16 @@ export default {
   },
   methods: {
     fetchData() {
-      // transactionList().then(response => {
-      //   this.list = response.data.items.slice(0, 8)
-      // })
+      searchDocument({
+           page:1,
+           pageSize:8,
+           title:'',
+           category_id:'',
+           status:'',
+          }).then(response => {
+            console.log(response);
+        this.list = response.data.dataList//.items.slice(0, 8)
+      })
     }
   }
 }

+ 1 - 0
src/views/dashboard/editor/components/TransactionTable.vue

@@ -49,6 +49,7 @@ export default {
     fetchData() {
       transactionList().then(response => {
         this.list = response.data.items.slice(0, 8)
+        console.log(this.list);
       })
     }
   }

+ 4 - 4
src/views/dataCenter/category/components/dataList.vue

@@ -4,9 +4,9 @@
 
       <el-table :data="dataList" style="width: 100%" header-row-class-name="headerBg" empty-text="没有分类信息">
         <el-table-column prop="id" label="ID" align="center" width="80"/>
-        <el-table-column prop="name" label="分类名称" align="left" min-width="180"/>
-        <el-table-column prop="createTime" label="创建时间" align="center" width="180"/>
-        <el-table-column prop="status" label="分类状态" align="center" width="180">
+        <el-table-column prop="name" label="分类名称" align="center" min-width="180"/>
+        <el-table-column prop="createTime" label="创建时间" align="center" min-width="180"/>
+        <el-table-column prop="status" label="分类状态" align="center" min-width="180">
           <template #default="scope">
               <div>
                 {{scope.row.status==5?"启用":""}}
@@ -14,7 +14,7 @@
               </div>
           </template>
         </el-table-column>
-        <el-table-column label="操作" fixed="right" width="150">
+        <el-table-column label="操作" fixed="right" align="center"  min-width="150">
           <template #default="scope">
             <div class="btns">
               <el-button type="primary" size="small" @click="btnEdit(scope.row)"><svg-icon icon-class="edit"/>编辑</el-button>

+ 2 - 2
src/views/dataCenter/components/dataInfo.vue

@@ -7,7 +7,7 @@
           <el-input v-model="dataForm.code"></el-input>
         </el-form-item>
         <el-form-item label="所属分类:">
-          <el-select v-model="dataForm.category_id"  placeholder="请选择所属分类" size="large"style="width:100%;">
+          <el-select v-model="dataForm.category_id" clearable placeholder="请选择所属分类" size="large"style="width:100%;">
               <el-option
                 v-for="item in categoryList"
                 :key="item.id"
@@ -128,7 +128,7 @@
         let _this=this;
         searchSourceDataCategory({page:1,pageSize:9999,status:5}).then(res=>{
           if(res.status!=200)return;
-          _this.categoryList=res.data.dataList.map(res=>{
+          _this.categoryList=res.data.sourcecategories.map(res=>{
             return{
               id:res.id,
               value:res.id,

+ 7 - 7
src/views/dataCenter/components/dataList.vue

@@ -2,20 +2,20 @@
   <div class="data-list">
 
 
-      <el-table :data="dataList" style="width: 100%" header-row-class-name="headerBg" empty-text="没有原始数据信息">
+      <el-table :data="dataList" style="width: 100%" header-row-class-name="headerBg" table-layout="auto" empty-text="没有原始数据信息">
         <el-table-column prop="id" label="ID" align="center" width="80"/>
-        <el-table-column prop="code" label="编码" align="left" width="120"/>
-        <el-table-column prop="name" label="名称" align="left" min-width="200"/>
+        <el-table-column prop="code" label="编码" align="center" min-width="120"/>
+        <el-table-column prop="name" label="名称" align="center" min-width="200"/>
 
-        <el-table-column prop="category.name" label="所属分类" align="center" width="150"/>
-        <el-table-column prop="createTime" label="创建时间" align="center" width="150"/>
-        <el-table-column prop="status" label="分类状态" align="center" width="180">
+        <el-table-column prop="category.name" label="所属分类" align="center" min-width="150"/>
+        <el-table-column prop="createTime" label="创建时间" align="center" min-width="150"/>
+        <el-table-column prop="status" label="分类状态" align="center" min-width="180">
           <template #default="scope">
               <div v-if="scope.row.status==5">启用</div>
               <div v-if="scope.row.status==6">停用</div>
           </template>
         </el-table-column>
-        <el-table-column label="操作" fixed="right" align="center" width="200">
+        <el-table-column label="操作" fixed="right" align="center" min-width="200">
           <template #default="scope">
             <div class="btns">
               <el-button type="primary" size="small"  @click="btnEdit(scope.row.id)"><svg-icon icon-class="edit"/>编辑</el-button><!-- v-if="scope.row.auth.edit" -->

+ 5 - 0
src/views/document/com/components/Attribute/Directory/index.scss

@@ -72,3 +72,8 @@
     }
   }
 }
+
+.dirceForm{
+  width: 100%;
+  margin: 0 10px 0;
+}

+ 55 - 42
src/views/document/com/components/Attribute/Directory/index.vue

@@ -1,56 +1,69 @@
 <template>
-  <div class="com-directory" v-if="coms!=null && coms.length>0 && size>0">
-      <div class="com-title">目录信息</div>
-      <div class="com-items">
-          <template v-for="(it,index) in coms">
-            <template v-for="(item,itemIndex) in it.attrs" v-if="item.type=='Directory'">
-              <div class="com-item">
-                  <div class="icon"><svg-icon icon-class='directory' /></div>
-                  <div class="name">{{item.content!=""?item.content:item.name}}</div>
-                  <!-- <div class="remove" @click="onRemove(index)"><svg-icon icon-class="delete" /></div> -->
-              </div>
-            </template>
-          </template>
-      </div>
-
-
+  <div class="com-directory" v-if="coms != null && coms.length > 0 && size > 0">
+    <el-form class="dirceForm">
+      <template v-for="(sub) in coms" >
+        <template v-for="(item) in sub.attrs">
+          <el-form-item v-if="item.type=='Directory'" :label="item.name + ' (引用名:[' + sub.id + '])'">
+            <el-input type="textarea" v-model="item.content"></el-input>
+          </el-form-item>
+        </template>
+        <!-- 文本开始-->
+      </template>
+    </el-form>
+    <div class="com-title">目录信息</div>
+    <div class="com-items">
+      <template v-for="(it, index) in coms">
+        <template
+          v-for="(item, itemIndex) in it.attrs"
+          v-if="item.type == 'Directory'"
+        >
+          <div class="com-item">
+            <div class="icon"><svg-icon icon-class="directory" /></div>
+            <div class="name">
+              {{ item.content != "" ? item.content : item.name }}
+            </div>
+            <!-- <div class="remove" @click="onRemove(index)"><svg-icon icon-class="delete" /></div> -->
+          </div>
+        </template>
+      </template>
+    </div>
   </div>
 </template>
 
 <script>
-  export default{
-    props:{
-      coms: {
-        type: Array,
-        default: null,
-      },
+export default {
+  props: {
+    coms: {
+      type: Array,
+      default: null,
     },
-    watch:{
-      'coms':{
-         handler(val){
-            if(val==null)return;
-            this.size=0;
-            for(var i=0;i<val.length;i++){
-               for(var j=0;j<val[i].attrs.length;j++){
-                 if(val[i].attrs[j].type=='Directory'){
-                   this.size++;
-                 }
-               }
+  },
+  watch: {
+    coms: {
+      handler(val) {
+        if (val == null) return;
+        this.size = 0;
+        for (var i = 0; i < val.length; i++) {
+          for (var j = 0; j < val[i].attrs.length; j++) {
+            if (val[i].attrs[j].type == "Directory") {
+              this.size++;
             }
-         },
-         immediate:true,
-         deep:true,
+          }
+        }
       },
+      immediate: true,
+      deep: true,
     },
-    data(){
-      return{
-         size:0,
-      }
-    },
-  }
+  },
+  data() {
+    return {
+      size: 0,
+    };
+  },
+};
 </script>
 
 
 <style lang="scss">
-@import './index.scss';
+@import "./index.scss";
 </style>

+ 2 - 1
src/views/document/com/components/Attribute/index.vue

@@ -68,7 +68,8 @@
               sub.type != 'constant' &&
               sub.type != 'attr' &&
               sub.type != 'formual' &&
-              sub.type != 'sourceData'
+              sub.type != 'sourceData'&&
+              sub.type !='Directory'
             "
           >
             <el-form-item :label="sub.name + ' (引用名:[' + sub.id + '])'">

+ 6 - 4
src/views/document/com/components/TextArea/index.vue

@@ -271,10 +271,12 @@ export default {
           //绑定产品属性事件
           let prodAttrId = item.id + "_" + i;
           let input = _this.$el.querySelector("#" + prodAttrId);
-          if (item.attrs.type == 1) {
-            input.addEventListener("blur", _this.handleInputProduct);
-          } else {
-            input.addEventListener("change", _this.handleChangeProduct);
+          if (input) {
+            if (item.attrs.type == 1) {
+              input.addEventListener("blur", _this.handleInputProduct);
+            } else {
+              input.addEventListener("change", _this.handleChangeProduct);
+            }
           }
         }
       }

+ 216 - 0
src/views/document/com/components/sourceEs/index.vue

@@ -0,0 +1,216 @@
+<template>
+    <div class="com-formual">
+      <el-form>
+        <el-form-item>
+          <el-select
+            v-model="tableCode"
+            placeholder="请选择模型"
+            @change="onChangeTab"
+            size="large"
+            style="width: 100%"
+          >
+            <el-option label="测试模型" :value="0"></el-option>
+            <!-- <el-option
+                          v-for="(item,index) in tableList"
+                          :key="item.id"
+                          :label="item.name"
+                          :value="index"
+                        /> -->
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-input v-model="dataIntro" v-if="showSearch" @keyup.enter="retrieval"
+            ><!-- v-model="dataForm.intro" -->
+            <el-button
+              slot="append"
+              icon="el-icon-search"
+              @click="retrieval"
+            ></el-button
+          ></el-input>
+        </el-form-item>
+        <el-form-item style="min-height: 200px" v-if="fileLoadStatus" v-loading="loading">
+          <div>当前回答内容:{{ textInfo }}</div>
+          <!-- <div class="dialog-footer" style="display: flex; justify-content: flex-end;">
+            <el-button  type="primary" @click="onConfirm"> 确认选择 </el-button>
+          </div> -->
+        </el-form-item>
+      </el-form>
+  
+      <!-- <el-dialog
+                  :visible.sync="showConfirm"
+                  title="数据确认"
+                  width="500"
+                  align-center
+                  :append-to-body="true"
+                >
+                  <div>当前工作表:{{position.sheet}} </div>
+                  <div>当前取值:{{position.value}}</div>
+                  <template #footer>
+                    <div class="dialog-footer">
+                      <el-button @click="showConfirm = false">关闭</el-button>
+                      <el-button type="primary" @click="onConfirm">
+                        确认选择
+                      </el-button>
+                    </div>
+                  </template>
+                </el-dialog> -->
+    </div>
+  </template>
+    
+    <script>
+  import { searchSourceData, deleteSourceData } from "@/api/sourceData";
+  /* import { search } from "core-js/fn/symbol"; */
+  import LuckyExcel from "luckyexcel"; //引入LuckyExcel
+  import axios from "axios";
+  export default {
+    name: "SourceEs",
+    emits: ["onPicked"],
+  
+    components: {},
+    data() {
+      return {
+        tableCode: "",
+        tableList: [],
+        showConfirm: false,
+        fileLoadStatus: false,
+        showSearch: false,
+        position: {
+          tb: "",
+          c: 0,
+          r: 0,
+          sheet: "",
+          value: "",
+        },
+        dataIntro: "",
+        textInfo: "",
+        loading: false, // 增加 loading 状态
+        searchResult:{}
+      };
+    },
+    mounted() {
+      this.initTableList();
+    },
+    methods: {
+      /* ai检索 */
+      async retrieval() {
+          this.fileLoadStatus = true;
+          this.loading = true; // 开始加载动画
+        try {
+          const response = await axios.post(
+            "http://58.246.234.210:7860/api/v1/run/3f84a841-cefd-44b3-9555-568cc3b6c2d2?stream=false",
+            {
+              input_value: this.dataIntro,
+              output_type: "chat",
+              input_type: "chat",
+              tweaks: {
+                "ChatInput-em6qC": {},
+                "ParseData-yO3YQ": {},
+                "Prompt-Wj75b": {},
+                "ChatOutput-zy9na": {},
+                "SplitText-O1knk": {},
+                "File-4j6Zd": {},
+                "OllamaEmbeddings-xbYXX": {},
+                "Chroma-OIejP": {},
+                "OllamaModel-04mEO": {},
+                "OllamaEmbeddings-UGvLP": {},
+                "Chroma-HzukO": {},
+              },
+            },
+            {
+              headers: {
+                "Content-Type": "application/json",
+              },
+            }
+          );
+  
+          if (response.status === 200) {
+            
+            // 假设返回的数据在 response.data.outputs[0].outputs[0].results.message.data.text 中
+            this.textInfo =
+              response.data.outputs[0].outputs[0].results.message.data.text;
+              // 将搜索词和生成的内容存储在 searchResult 对象中
+            /* this.searchResult = {
+              searchTerm: this.dataIntro,
+              result: this.textInfo,
+            }; */
+          }
+        } catch (error) {
+          console.error("Error during retrieval:", error);
+          this.$message.error("检索失败,请稍后重试");
+        } finally {
+          this.loading = false; // 结束加载动画
+        }
+      },
+  
+      onConfirm(e) {
+        /*       this.showConfirm = false; */
+        this.$emit("onPicked", this.searchResult);
+      },
+  
+      onChangeTab(e) {
+        let _this = this;
+        /*      let item = _this.tableList[e]; */
+        _this.showSearch = true;
+  
+        /*  item.sourceData = JSON.parse(item.source_data);
+  
+        _this.position.tb = item.code; */
+        /*      _this.$nextTick(() => {
+          luckysheet.destroy();
+          luckysheet.create({
+            container: "luckysheet", //dom id
+            data: item.sourceData.exportJson.sheets, //excel数据
+            lang: "zh",
+            showinfobar: false, // 是否显示顶部信息栏
+            showstatisticBar: false, // 是否显示底部计数栏
+            sheetBottomConfig: false, // sheet页下方的添加行按钮和回到顶部按钮配置
+            allowEdit: false, // 是否允许前台编辑
+            enableAddRow: false, // 是否允许增加行
+            enableAddCol: false, // 是否允许增加列
+            sheetFormulaBar: false, // 是否显示公式栏
+            enableAddBackTop: false, // 返回头部按钮
+            showsheetbar: true, // 是否显示底部sheet页按钮
+            enableAddRow: false, //允许添加行
+            // 自定义配置底部sheet页按钮
+            showsheetbarConfig: {
+              add: false,
+              menu: false,
+            },
+            hook: {
+              cellMousedown: function (cell, position, sheetFile, ctx) {
+                _this.position.sheet = sheetFile.name;
+  
+                _this.position.r = position.r;
+                _this.position.c = position.c;
+  
+                if (cell.v) {
+                  _this.position.value = cell.v;
+                } else {
+                  _this.position.value = "";
+                  cell.ct.s.map((res) => {
+                    _this.position.value += res.v;
+                  });
+                }
+                _this.showConfirm = true;
+              },
+              cellUpdated: function (r, c, oldValue, newValue, isRefresh) {
+              },
+            },
+          });
+        }); */
+      },
+      initTableList() {
+        let _this = this;
+        searchSourceData({ page: 1, pageSize: 999, status: 5 }).then((res) => {
+          if (res.status != 200) return;
+          _this.tableList = res.data.dataList;
+        });
+      },
+    },
+  };
+  </script>
+    
+    <style lang="scss">
+ 
+  </style>
+    

+ 1 - 1
src/views/document/com/menus.scss

@@ -64,7 +64,7 @@
     }
   }
   .group-item0{
-     width:450px;
+    /*  width:500px; */
      overflow: hidden;
   }
 }

+ 11 - 4
src/views/document/com/menus.vue

@@ -34,7 +34,10 @@
           <sourceAi  @onPicked="onPickedAi"></sourceAi>
       </el-dialog>
 
-
+       <!-- ai -->
+       <el-dialog  :visible.sync="showSourceEs" append-to-body v-el-drag-dialog  width="300" custom-class="prod-verify" title="AI随笔">
+          <sourceEs  @onPicked="onPickedAi"></sourceEs>
+      </el-dialog>
 
   </div>
 </template>
@@ -43,6 +46,7 @@
   import Formula from "./components/Formula";
   import sourceData from "./components/SourceData";
   import sourceAi from "./components/sourceAi/index.vue";
+  import sourceEs from "./components/sourceEs/index.vue";
   import Variable from "./components/Variable"
   import elDragDialog from '@/directive/el-drag-dialog'
 
@@ -50,7 +54,7 @@
     name:"menus",
     emits:["onEvents"],
     components:{
-      Formula,Variable,sourceData,sourceAi
+      Formula,Variable,sourceData,sourceAi,sourceEs
     },
     directives: { elDragDialog },
     data(){
@@ -59,6 +63,7 @@
         showVariable:false,
         showSourceData:false,
         showSourceAi:false,
+        showSourceEs:false,
         type:null,
         insertTitle:'插入变量',
         menus:[
@@ -117,10 +122,10 @@
                 name:"AI模块",
                 icon:"insertAuth",
               },
-              /* {
+             /*  {
                 key:"aiEs",
                 name:"AI随笔",
-                icon:"insertAuth",
+                icon:"form",
               }, */
             ]
           },
@@ -217,6 +222,8 @@
             this.showVariable=true;
           }else if(e.key=="ai"){
             this.showSourceAi=true
+          }else if(e.key=="aiEs"){
+            this.showSourceEs=true
           }else{
               this.$emit("onEvents",e);
           }

+ 42 - 4
src/views/document/create.scss

@@ -103,7 +103,7 @@
       }
     }
     .editor-main{
-      width:1000px;
+      width:1150px;
       margin:auto;
       overflow: hidden;
       overflow-y: auto;
@@ -119,6 +119,14 @@
       .editor-box{
         margin-top:80px;
       }
+      .editor{
+        width: 100%;
+        .template-textarea{
+          .rich-editor{
+               padding: 0 10px;     
+          }
+        } 
+      }
 
     }
 
@@ -133,9 +141,10 @@
       z-index: 1000 !important;
       background:#FFF;
       .editor-menu{
+        writing-mode: vertical-rl;
         position: fixed;
         width:60px;
-        right:300px;
+        right:255px;
         top:65px;
         font-size:12px;
         .item{
@@ -143,8 +152,8 @@
             -webkit-box-shadow: 0 2px 8px 0 rgba(0,0,0,.1);
             box-shadow: 0 2px 8px 0 rgba(0,0,0,.1);
             border-radius: 2px;
-            width: 94px;
-            height: 32px;
+        /*     width: 94px; */
+            height: 75px;
             display: inline-block;
             text-align: center;
             line-height: 32px;
@@ -169,3 +178,32 @@
   }
 
 }
+/* .neary-doc {
+  display: flex;
+}
+
+.left-content {
+  flex: 1;
+}
+ */
+ .right-sidebarew{
+  position: absolute;
+  left: 203px;
+  top: 10px;
+  display: flex;
+  writing-mode: vertical-rl;
+  flex-direction: row;
+  font-size: 12px;
+ }
+.sidebar-item {
+  background-color: #fff;
+  border: 1px solid #ddd;
+  padding: 10px;
+  margin-bottom: 10px;
+  cursor: pointer;
+  text-align: center;
+}
+.active-item{
+  background-color: #155bd4;
+  color: #fff;
+}

+ 120 - 41
src/views/document/create.vue

@@ -34,8 +34,12 @@
             <el-input placeholder="搜索文档标题"></el-input>
           </div>
           <div class="new-article">
-            <el-collapse v-model="activeNames" :accordion="true">
-              <el-collapse-item title="最新文档" name="-1">
+            <el-collapse
+              v-model="activeNames"
+              :accordion="true"
+              @change="handleItemClick"
+            >
+              <el-collapse-item title="最新文档" name="-1" v-if="showView == 0">
                 <div
                   v-for="(it, index) in articleList"
                   draggable
@@ -73,34 +77,80 @@
                   </el-collapse-item>
                 </template>
               </template> -->
-              <el-collapse-item
-                v-for="(item, itemIndex) in categoryList"
-                :title="item.name"
-                :name="item.id"
-              >
-                <draggable
-                  v-model="item.dataList"
-                  :options="{
-                    group: { name: 'itxst', pull: 'clone' },
-                    sort: true,
-                  }"
-                  animation="300"
+              <div v-if="showView == 1">
+                <el-collapse-item
+                  v-for="(item, itemIndex) in categoryList"
+                  :key="itemIndex"
+                  :title="item.name"
+                  :name="item.id"
                 >
-                  <transition-group>
-                    <div
-                      class="sub-menus"
-                      v-for="(it, index) in item.dataList"
-                      :key="index"
+                  <el-collapse v-model="nestedActiveNames">
+                    <el-collapse-item
+                      v-for="(child, childIndex) in childrenList"
+                      :key="childIndex"
+                      :title="child.name"
+                      :name="child.id"
                     >
-                      <div>{{ it.name }}</div>
-                    </div>
-                  </transition-group>
-                </draggable>
-              </el-collapse-item>
+                      <draggable
+                        v-model="child.dataList"
+                        :options="{
+                          group: { name: 'itxst', pull: 'clone' },
+                          sort: true,
+                        }"
+                        animation="300"
+                      >
+                        <transition-group>
+                          <div
+                            class="sub-menus"
+                            v-for="(its, index) in child.dataList"
+                            :key="index"
+                          >
+                            <div>{{ its.name }}</div>
+                          </div>
+                        </transition-group>
+                      </draggable>
+                    </el-collapse-item>
+                  </el-collapse>
+                  <draggable
+                    v-model="item.dataList"
+                    :options="{
+                      group: { name: 'itxst', pull: 'clone' },
+                      sort: true,
+                    }"
+                    animation="300"
+                  >
+                    <transition-group>
+                      <div
+                        class="sub-menus"
+                        v-for="(it, index) in item.dataList"
+                        :key="index"
+                      >
+                        <div>{{ it.name }}</div>
+                      </div>
+                    </transition-group>
+                  </draggable>
+                </el-collapse-item>
+              </div>
             </el-collapse>
           </div>
         </div>
       </div>
+      <div class="right-sidebarew">
+        <div
+          class="sidebar-item"
+          :class="showView == 0 ? 'active-item' : ''"
+          @click="viewDocument"
+        >
+          查看文档
+        </div>
+        <div
+          class="sidebar-item"
+          :class="showView == 1 ? 'active-item' : ''"
+          @click="viewModule"
+        >
+          查看模块
+        </div>
+      </div>
 
       <div class="editor-main">
         <div class="menus-box">
@@ -139,9 +189,20 @@
           >
             <span class="name">模块管理</span>
           </div>
-          <!--  <div class="item" @click="onSetActiveIndex(9997)" :class="comIndex==9997?'active-item':''">
-            <span class="name">目录</span>
-          </div> -->
+          <div
+            class="item"
+            @click="onSetActiveIndex(9997)"
+            :class="comIndex == 9997 ? 'active-item' : ''"
+          >
+            <span class="name">目录信息</span>
+          </div>
+          <div
+            class="item"
+            @click="onSetActiveIndex(9996)"
+            :class="comIndex == 9996 ? 'active-item' : ''"
+          >
+            <span class="name">属性变量</span>
+          </div>
         </div>
 
         <template v-if="comIndex == 9999">
@@ -155,9 +216,9 @@
             @onRebuild="onRebuild"
           ></comList>
         </template>
-        <!-- <template v-if="comIndex==9997">
+        <template v-if="comIndex == 9997">
           <Directory :coms="coms" />
-        </template> -->
+        </template>
 
         <template
           v-if="comIndex != 9999 && comIndex != 9998 && comIndex != 9997"
@@ -167,7 +228,7 @@
             @onRefresh="initCategoryList"
           ></Attribute>
         </template>
-        <Directory :coms="coms" />
+        <!-- <Directory :coms="coms" /> -->
       </div>
     </div>
 
@@ -246,6 +307,7 @@ export default {
   data() {
     return {
       activeNames: "-1",
+      nestedActiveNames: [],
       articleList: [],
       categoryList: [],
       //组件相关
@@ -276,6 +338,9 @@ export default {
       userInfo: null,
       articleId: 0,
       loading: false, // 增加 loading 状态
+      showView: 0, //查看 文档/模块
+      childrenList: [],
+      value: [],
     };
   },
   watch: {
@@ -311,17 +376,28 @@ export default {
   },
 
   methods: {
-    /* 更新检索内容 */
-    /* async uptadeSearch() {
-      this.coms.forEach((item) => {
-        item.attrs.forEach((el) => {
-          if (el.type === "ai") {
-            // 在这里执行下一步操作
-            await this.retrieval(el);
-          }
-        });
+    async handleItemClick(item) {
+      if (item == "-1") return;
+      await searchTemplateCategory({ parent_id: item }).then((res) => {
+        console.log(res.data.length==0);
+        if (res.status != 200 &&res.data.length==0) return;
+        this.childrenList = res.data;
+        for (var i = 0; i < this.childrenList.length; i++) {
+          this.childrenList[i].dataList = this.getTemplateList(
+            this.childrenList[i].id
+          );
+        }
       });
-    }, */
+      // Add your custom logic here
+    },
+    /* 切换标签 */
+    viewDocument() {
+      this.showView = 0;
+    },
+    viewModule() {
+      this.showView = 1;
+    },
+    /* 更新检索内容 */
     async uptadeSearch() {
       for (const item of this.coms) {
         for (const el of item.attrs) {
@@ -368,7 +444,6 @@ export default {
             response.data.outputs[0].outputs[0].results.message.data.text;
           // 将搜索词和生成的内容存储在 searchResult 对象中
           el.content = resultText; // 重新赋值给原数组的对应 content
-         
         }
       } catch (error) {
         console.error("Error during retrieval:", error);
@@ -395,6 +470,7 @@ export default {
     },
 
     onOpenView(e) {
+      console.log(e);
       this.showViewForm = true;
     },
     onClose() {
@@ -609,6 +685,7 @@ export default {
         _this.$alert("请选择插入图层");
         return false;
       }
+      console.log(e);
       let com = _this.coms[_this.comIndex];
       let data = {
         type: "Directory",
@@ -779,6 +856,7 @@ export default {
       } else {
         //仅对图表中插入有效
         if (_this.comIndex >= 0) {
+          debugger;
           _this.setTableData(data.id);
         }
       }
@@ -874,6 +952,7 @@ export default {
       let res = await searchTemplateCategory({
         page: 1,
         pageSize: 99,
+        parent_id: 0,
         status: 5,
       });
       if (res.status != 200) return;

+ 55 - 0
src/views/document/temList/components/dataList.scss

@@ -0,0 +1,55 @@
+
+.data-list{
+
+
+  .btns{
+    display:flex;
+    flex-direction: row;
+  }
+
+
+
+
+  .page-info{
+    display:flex;
+    flex-direction: row;
+    margin-top:10px;
+    .opt{
+      width:50%;
+      display:flex;
+      flex-direction:row;
+      justify-content: flex-start;
+      align-items: center;
+
+      .pick{
+        width:100px;
+
+      }
+      .section{
+        margin-left:10px;
+      }
+    }
+
+    .page-data{
+
+      display:flex;
+      flex-direction: row;
+      justify-content: space-between;
+      align-items: center;
+      width:100%;
+      .page-item{
+          width:100%;
+          // border:1px solid red;
+      }
+      .page-opt{
+        width:100%;
+        // border:1px solid red;
+        display: flex;
+        justify-content: flex-end;
+      }
+    }
+
+
+  }
+
+}

+ 188 - 0
src/views/document/temList/components/dataList.vue

@@ -0,0 +1,188 @@
+<template>
+  <div class="data-list">
+
+
+      <el-table :data="dataList" style="width: 100%" header-row-class-name="headerBg" empty-text="没有模板信息">
+        <el-table-column prop="id" label="ID" align="center" width="80"/>
+        <el-table-column prop="title" label="模板名称" align="left" min-width="180"/>
+        <el-table-column prop="category.name" label="所属分类" align="center" width="150"/>
+        <el-table-column prop="createTime" label="创建时间" align="center" width="150"/>
+        <el-table-column prop="status" label="模板状态" align="center" width="150">
+          <template #default="scope">
+              <div v-if="scope.row.status==5">启用</div>
+              <div v-if="scope.row.status==6">停用</div>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" :width="editWidth()">
+          <template #default="scope">
+            <div class="btns">
+              <el-button type="primary" size="small" v-if="allowEdit" @click="btnEdit(scope.row.id)"><svg-icon icon-class="edit"/>编辑</el-button>
+
+              <el-button type="danger" size="small" v-if="allowDelete" @click="btnDelete(scope.row.id)"><svg-icon icon-class="delete"/>删除</el-button>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <div class="page-info">
+      	<el-pagination
+      	v-model:currentPage="queryForm.page"
+      	:page-size="queryForm.pageSize"
+      	:total="recordCount"
+      	:page-count="pageTotal"
+      	 background
+      	 layout="prev, pager, next"
+      	 @current-change="ChangePage"
+      	 >
+      	 </el-pagination>
+      </div>
+
+
+  </div>
+
+
+</template>
+
+<script>
+  import{searchDocument,deleteDocument} from'@/api/document';
+  export default{
+
+    props:{
+      queryForm:{
+        type:Object,
+        default:()=>{
+          return {
+           page:1,
+           pageSize:10,
+           title:'',
+           category_id:'',
+           status:'',
+          }
+        }
+      },
+      allowEdit:{
+        type:Boolean,
+        default:false,
+      },
+      allowDelete:{
+        type:Boolean,
+        default:false,
+      }
+    },
+    watch:{
+
+        'queryForm': {
+          handler: function(val) {
+
+            this.search();
+          },
+          // immediate: true,//立即执行
+          deep: true
+
+        },
+    },
+    data(){
+      return{
+        dialogVisible:false,//控制产品审核
+        currentDataId:0,
+        recordCount:0,
+        pageTotal:1,
+        dataList:[],
+        currentData:{},
+      }
+    },
+    mounted() {
+      this.search();
+    },
+    methods:{
+
+      editWidth(){
+        if(this.allowDelete && this.allowEdit){
+          return 200;
+        }
+        if(this.allowDelete||this.allowEdit){
+          return 120;
+        }
+        return 100;
+      },
+
+
+      onFocusVal(e){
+        let _this=this;
+        _this.currentDataId=e.target.dataset.id;
+      },
+
+      onChangeVal(e){
+        let _this=this;
+        let par={
+          id:_this.currentDataId,
+          val:e,
+        };
+
+      },
+
+      btnDelete(e){
+        let _this=this;
+        let par={
+          id:e,
+        }
+        _this.$confirm("您是否确认删除该记录?","提示",{
+          confirmButtonText: '确认',
+          cancelButtonText: '取消',
+          type: 'warning',
+        }).then((res)=>{
+          // console.log("AAA")
+             deleteDocument(par).then(res=>{
+               _this.search();
+             })
+        }).catch(()=>{
+        })
+      },
+
+      searchData(){
+        let _this=this;
+        _this.dialogVisible=false;
+        _this.search();
+      },
+
+
+      //编辑
+      btnEdit(e){
+        let _this=this;
+        let a=document.createElement("a");
+        a.href="/document/create?articleId="+e;
+        a.target="_blank";
+        a.click();
+
+        // _this.$router.push({path:"/document/create",query:{articleId:e}})
+      },
+
+      handleClose(){
+        let _this=this;
+        _this.currentData={};
+        _this.dialogVisible=false;
+      },
+
+      //搜索
+      search(){
+        let _this=this;
+        searchDocument(_this.queryForm).then(res=>{
+          if(!res)return;
+          _this.dataList=res.data.dataList;
+          _this.recordCount=res.data.recordCount;
+          _this.pageTotal=res.data.pageTotal;
+        })
+      },
+      //修改分页
+      ChangePage(e){
+      	let _this=this;
+      	_this.queryForm.page=e;
+      	_this.search();
+      },
+    }
+  }
+</script>
+
+<style lang="scss">
+@import './dataList.scss';
+</style>

+ 3 - 0
src/views/document/temList/components/dataSearch.scss

@@ -0,0 +1,3 @@
+.data-search{ 
+  padding:20px 10px 0px 10px;
+}

+ 103 - 0
src/views/document/temList/components/dataSearch.vue

@@ -0,0 +1,103 @@
+<template>
+  <div class="data-search">
+    <el-form :inline="true" :model="queryForm" class="demo-form-inline">
+
+
+        <el-form-item label="文档标题:">
+          <el-input v-model="queryForm.title" placeholder="请填写文档标题"></el-input>
+        </el-form-item>
+
+        <el-form-item label="所属分类:">
+          <el-select v-model="queryForm.category_id" clearable class="m-2" placeholder="请选择分类" size="large">
+              <el-option
+                v-for="item in categoryList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              />
+            </el-select>
+        </el-form-item>
+        <el-form-item label="文档状态:">
+          <el-select v-model="queryForm.status" class="m-2" placeholder="请选择文档状态" size="large">
+              <el-option
+                v-for="item in statusOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit">  <svg-icon icon-class="search"/> 搜索</el-button>
+        </el-form-item>
+      </el-form>
+
+
+  </div>
+</template>
+
+<script>
+import {searchDocumentCategory} from "@/api/document";
+export default{
+  props:{
+    queryForm:{
+        type:Object,
+        default:()=>{
+          return {
+             page:1,
+             pageSize:10,
+             title:'',
+             category_id:'',
+             status:'',
+          }
+        }
+    },
+  },
+  data(){
+    return{
+        statusOptions:[
+          {
+            value:'',
+            label:"请选择状态"
+          },
+          {
+            value:5,
+            label:'启用'
+          },
+          {
+            value:6,
+            label:"停用"
+          },
+        ],
+        dialogVisible:false,
+        categoryList:[],
+    }
+  },
+  created() {
+    this.initCategoryList();
+  },
+  methods:{
+
+
+    initCategoryList(){
+      let _this=this;
+      searchDocumentCategory({page:1,pageSize:999,status:5}).then(res=>{
+        if(res.status!=200)return;
+        _this.categoryList=res.data.dataList;
+      })
+    },
+    onCreate(e){
+      this.dialogVisible=true;
+    },
+    //搜索
+    onSubmit(){
+      this.$emit("bindSetQuery",this.$props.queryForm);
+    }
+  }
+}
+</script>
+
+<style lang="scss">
+@import "./dataSearch.scss"
+</style>

+ 3 - 0
src/views/document/temList/components/index.js

@@ -0,0 +1,3 @@
+export { default as dataSearch } from './dataSearch'
+export { default as dataList } from './dataList'
+ 

+ 60 - 0
src/views/document/temList/temList.vue

@@ -0,0 +1,60 @@
+<template>
+  <div class="project-search">
+    <dataSearch @bindSetQuery="setQuery"></dataSearch>
+    <dataList
+      :queryForm="queryForm"
+      :allowEdit="checkAuth('/document/update')"
+      :allowDelete="checkAuth('/document/delete')"
+    ></dataList>
+  </div>
+</template>
+  
+  <script>
+import { mapGetters } from "vuex";
+import { dataSearch, dataList } from "./components";
+export default {
+  components: {
+    dataSearch,
+    dataList,
+  },
+  computed: {
+    ...mapGetters(["roleInfo", "authList"]),
+  },
+
+  data() {
+    return {
+      queryForm: {
+        page: 1,
+        pageSize: 10,
+        title: "",
+        category_id: "",
+        status: "",
+      },
+    };
+  },
+  methods: {
+    checkAuth(path) {
+      if (this.roleInfo.is_admin == 1) {
+        return true;
+      }
+      /* let auth=this.authList.filter(o=>o.type==999 && o.path==path);
+          if(auth.length>0){
+            return true;
+          } */
+      return true;
+    },
+
+    setQuery(e) {
+      this.queryForm = e;
+    },
+  },
+};
+</script>
+  
+  <style lang="scss">
+.project-search {
+  padding: 30px;
+  font-size: 12px;
+}
+</style>
+  

+ 193 - 167
src/views/template/category/components/dataList.vue

@@ -1,190 +1,216 @@
 <template>
   <div class="data-list">
-
-
-      <el-table
-        :data="dataList"
-        stripe
-        lazy
-         :load="loadData"
-        row-key="id"
-        :tree-props="{ children: 'children' }"
-        show-overflow-tooltip
-        style="width: 100%"
-        header-row-class-name="headerBg"
-        empty-text="没有分类信息"
+    <el-table
+      :data="dataList"
+      stripe
+      lazy
+      :load="loadData"
+      row-key="id"
+      :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+      show-overflow-tooltip
+      style="width: 100%"
+      header-row-class-name="headerBg"
+      empty-text="没有分类信息"
+    >
+      <el-table-column prop="id" label="ID" align="center" width="80" />
+      <el-table-column
+        prop="name"
+        label="分类名称"
+        align="left"
+        min-width="180"
+      />
+      <!--        <el-table-column prop="intro" label="分类介绍" align="left" min-width="180"/> -->
+      <el-table-column
+        prop="createTime"
+        label="创建时间"
+        align="center"
+        width="180"
+      />
+      <el-table-column
+        prop="status"
+        label="分类状态"
+        align="center"
+        width="180"
       >
-        <el-table-column prop="id" label="ID" align="center" width="80"/>
-        <el-table-column prop="name" label="分类名称" align="left" min-width="180"/>
-<!--        <el-table-column prop="intro" label="分类介绍" align="left" min-width="180"/> -->
-        <el-table-column prop="createTime" label="创建时间" align="center" width="180"/>
-        <el-table-column prop="status" label="分类状态" align="center" width="180">
-          <template #default="scope">
-              <div v-if="scope.row.status==5">启用</div>
-              <div v-if="scope.row.status==6">停用</div>
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" fixed="right" align="center" width="180">
-          <template #default="scope">
-            <div class="btns">
-              <el-button type="primary" size="small" @click="btnEdit(scope.row)"><svg-icon icon-class="edit"/>编辑</el-button>
-              <el-button type="danger" size="small" @click="btnDelete(scope.row.id)"><svg-icon icon-class="delete"/>删除</el-button>
-            </div>
-          </template>
-        </el-table-column>
-      </el-table>
-
-
-
-      <div class="page-info">
-      	<el-pagination
-      	v-model:currentPage="queryForm.page"
-      	:page-size="queryForm.pageSize"
-      	:total="recordCount"
-      	:page-count="pageTotal"
-      	 background
-      	 layout="prev, pager, next"
-      	 @current-change="ChangePage"
-      	 >
-      	 </el-pagination>
-      </div>
-
-     <el-dialog  :visible.sync="dialogVisible" append-to-body v-el-drag-dialog  width="50%" custom-class="prod-verify" title="创建模板分类">
-
-          <dataInfo :id="currentDataId" @onClose="onClose" ></dataInfo>
-      </el-dialog>
-
+        <template #default="scope">
+          <div v-if="scope.row.status == 5">启用</div>
+          <div v-if="scope.row.status == 6">停用</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" fixed="right" align="center" width="180">
+        <template #default="scope">
+          <div class="btns">
+            <el-button type="primary" size="small" @click="btnEdit(scope.row)"
+              ><svg-icon icon-class="edit" />编辑</el-button
+            >
+            <el-button
+              type="danger"
+              size="small"
+              @click="btnDelete(scope.row.id)"
+              ><svg-icon icon-class="delete" />删除</el-button
+            >
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <div class="page-info">
+      <el-pagination
+        v-model:currentPage="queryForm.page"
+        :page-size="queryForm.pageSize"
+        :total="recordCount"
+        :page-count="pageTotal"
+        background
+        layout="prev, pager, next"
+        @current-change="ChangePage"
+      >
+      </el-pagination>
+    </div>
+
+    <el-dialog
+      :visible.sync="dialogVisible"
+      append-to-body
+      v-el-drag-dialog
+      width="50%"
+      custom-class="prod-verify"
+      title="创建模板分类"
+    >
+      <dataInfo :id="currentDataId" @onClose="onClose"></dataInfo>
+    </el-dialog>
   </div>
-
-
 </template>
 
 <script>
-  import{searchTemplateCategory,deleteTemplateCategory} from'@/api/template';
-  import dataInfo from './dataInfo.vue';
-  import elDragDialog from '@/directive/el-drag-dialog'
-  export default{
-    components:{
-      dataInfo,
-    },
-    directives: { elDragDialog },
-    props:{
-      queryForm:{
-        type:Object,
-        default:()=>{
-          return {
-            page:1,
-            pageSize:10,
-            name:'',
-            parent_id:'',
-            sign:'',
-          }
-        }
-      }
-    },
-    watch:{
-
-        'queryForm': {
-          handler: function(val) {
-
-            this.search();
-          },
-          immediate: true,//立即执行
-          deep: true
-
-        },
+import { searchTemplateCategory, deleteTemplateCategory } from "@/api/template";
+import dataInfo from "./dataInfo.vue";
+import elDragDialog from "@/directive/el-drag-dialog";
+export default {
+  components: {
+    dataInfo,
+  },
+  directives: { elDragDialog },
+  props: {
+    queryForm: {
+      type: Object,
+      default: () => {
+        return {
+          page: 1,
+          pageSize: 10,
+          name: "",
+          parent_id: 0,
+          sign: "",
+        };
+      },
     },
-    data(){
-      return{
-        dialogVisible:false,//控制产品审核
-        currentDataId:0,
-        recordCount:0,
-        pageTotal:1,
-        dataList:[],
-        currentData:{},
-      }
+  },
+  watch: {
+    queryForm: {
+      handler: function (val) {
+        this.search();
+      },
+      immediate: true, //立即执行
+      deep: true,
     },
-    mounted() {
-      this.search();
+  },
+  data() {
+    return {
+      dialogVisible: false, //控制产品审核
+      currentDataId: 0,
+      recordCount: 0,
+      pageTotal: 1,
+      dataList: [],
+      currentData: {},
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    btnView(e) {
+      let _this = this;
+      _this.queryForm.parent_id = e;
+      _this.search();
+
+      // _this.$router.push({path:"/template/category/search",params:{parent_id:e}});
+      // location.href="?parent_id="+e;
     },
-    methods:{
-
-      btnView(e){
-        let _this=this;
-        _this.queryForm.parent_id=e;
-        _this.search();
-
-        // _this.$router.push({path:"/template/category/search",params:{parent_id:e}});
-        // location.href="?parent_id="+e;
-      },
 
-      loadData(row,node,resolve){
-        setTimeout(()=>{
-          resolve(row.children);
-        },100);
-      },
+    loadData(row, node, resolve) {
+      setTimeout(() => {
+        searchTemplateCategory({parent_id:row.id}).then(res=>{
+          if(res.data.length==0){
+            this.$message.warning('暂无数据!')
+          }
+          resolve(res.data)
+        })
+       
+     /*    resolve(row.children); */
+      }, 0);
+    },
 
-      btnDelete(e){
-        let _this=this;
-        let par={
-          id:e,
-        }
-        _this.$confirm("您是否确认删除该记录?","提示",{
-          confirmButtonText: '确认',
-          cancelButtonText: '取消',
-          type: 'warning',
-        }).then((res)=>{
+    btnDelete(e) {
+      let _this = this;
+      let par = {
+        id: e,
+      };
+      _this
+        .$confirm("您是否确认删除该记录?", "提示", {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+        .then((res) => {
           // console.log("AAA")
-             deleteTemplateCategory(par).then(res=>{
-               _this.search();
-             })
-        }).catch(()=>{
+          deleteTemplateCategory(par).then((res) => {
+            _this.search();
+          });
         })
-      },
-
-
-      searchData(){
-        let _this=this;
-        _this.dialogVisible=false;
-        _this.search();
-      },
-
+        .catch(() => {});
+    },
 
-      //编辑
-      btnEdit(e){
-        let _this=this;
-        _this.currentDataId=e.id;
-        _this.dialogVisible=true;
-      },
+    searchData() {
+      let _this = this;
+      _this.dialogVisible = false;
+      _this.search();
+    },
 
-      onClose(){
-        let _this=this;
-        _this.currentDataId=0;
-        _this.dialogVisible=false;
-        _this.search();
-      },
+    //编辑
+    btnEdit(e) {
+      let _this = this;
+      _this.currentDataId = e.id;
+      _this.dialogVisible = true;
+    },
 
-      //搜索
-      search(){
-        let _this=this;
+    onClose() {
+      let _this = this;
+      _this.currentDataId = 0;
+      _this.dialogVisible = false;
+      _this.search();
+    },
 
-        searchTemplateCategory(_this.queryForm).then(res=>{
-          if(!res)return;
-          _this.dataList=res.data.dataList;
-          _this.recordCount=res.data.totalRecord;
-          _this.pageTotal=res.data.totalPage;
+    //搜索
+    search() {
+      let _this = this;
+      searchTemplateCategory(_this.queryForm).then((res) => {
+        if (!res) return;
+        res.data.dataList.map(el=>{
+            el.hasChildren=true
         })
-      },
-      //修改分页
-      ChangePage(e){
-      	let _this=this;
-      	_this.queryForm.page=e;
-      	_this.search();
-      },
-    }
-  }
+        _this.dataList = res.data.dataList;
+        _this.recordCount = res.data.totalRecord;
+        _this.pageTotal = res.data.totalPage;
+      });
+    },
+    //修改分页
+    ChangePage(e) {
+      let _this = this;
+      _this.queryForm.page = e;
+      _this.search();
+    },
+  },
+};
 </script>
 
 <style lang="scss">
-@import './dataList.scss';
+@import "./dataList.scss";
 </style>

+ 1 - 1
src/views/template/category/components/dataSearch.vue

@@ -47,7 +47,7 @@ export default{
              page:1,
              pageSize:10,
              name:'',
-             parent_id:'',
+             parent_id:0,
              status:'',
           }
         }

+ 1 - 1
src/views/template/category/search.vue

@@ -18,7 +18,7 @@ export default{
       queryForm:{
         page:1,
         pageSize:10,
-        parent_id:'',
+        parent_id:0,
         name:'',
         status:'',
       },

+ 9 - 2
src/views/template/components/dataSearch.vue

@@ -29,7 +29,7 @@
 
         <el-form-item>
           <el-button type="primary" @click="onSubmit">  <svg-icon icon-class="search"/> 搜索</el-button>
-          <!-- <el-button type="success" @click="onCreate" >  <svg-icon icon-class="edit"/> 创建组件</el-button> -->
+          <el-button type="success" @click="onCreate" >  <svg-icon icon-class="edit"/> 创建模块</el-button>
         </el-form-item>
       </el-form>
 
@@ -97,7 +97,14 @@ export default{
       })
     },
     onCreate(e){
-      this.dialogVisible=true;
+      /* this.dialogVisible=true; */
+     /*  const url = this.$router.resolve({ path: 'new' }).href;
+      window.open(url, '_blank'); */
+      let _this=this;
+        var a = document.createElement('a');
+        a.href="/document/create"
+        a.target="_blank";
+        a.click();
     },
 
     //搜索