Parcourir la source

更改批量解析方法并打包

yangg il y a 8 mois
Parent
commit
9adcbc67e6

+ 1 - 1
.env.development

@@ -2,7 +2,7 @@
 ENV = 'development'
 port = 8080
 # base api
-VUE_APP_BASE_API = 'http://192.168.1.199:8084'
+VUE_APP_BASE_API = 'http://58.246.234.210:8084'
 #192.168.1.199
 
 #58.246.234.210

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/index.html


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/css/chunk-0767fa6e.3c589a01.css


+ 1 - 0
dist/static/css/chunk-151edd59.31fb25ea.css

@@ -0,0 +1 @@
+.midd-page[data-v-2eae1310]{padding:20px}.el-icon-edit[data-v-2eae1310]{font-size:14px;color:#409eff}[data-v-2eae1310] .model-gen-1{background-color:#e6f3ff!important}[data-v-2eae1310] .model-gen-1.el-table__cell{background-color:#e6f3ff!important;color:#333!important}[data-v-2eae1310] .model-gen-2{background-color:#f0e6ff!important}[data-v-2eae1310] .model-gen-2.el-table__cell{background-color:#f0e6ff!important;color:#333!important}.header[data-v-2eae1310]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 0}.h_left p[data-v-2eae1310]{margin-top:0}.search-container[data-v-2eae1310]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.search-box[data-v-2eae1310]{width:350px}.custom-search-input[data-v-2eae1310] :deep(.el-input__inner){height:40px;line-height:40px;border-right:none;border-radius:4px 0 0 4px}.custom-search-input[data-v-2eae1310] :deep(.el-input-group__append){padding:0;border:none;background-color:transparent}.custom-search-input[data-v-2eae1310] :deep(.el-input-group__append .el-button){height:40px;padding:0 20px;border-radius:0 4px 4px 0;margin:0}.custom-search-input[data-v-2eae1310] :deep(.el-input__inner:hover){border-color:#dcdfe6}.custom-search-input[data-v-2eae1310] :deep(.el-input__inner:focus){border-color:#409eff}

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/css/chunk-647b97bd.50fc024e.css


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/css/chunk-65d6e2a1.cbc435b1.css


+ 0 - 0
dist/static/css/chunk-c5d7799a.13a7e89e.css → dist/static/css/chunk-683feb49.13a7e89e.css


+ 0 - 1
dist/static/css/chunk-7d51ef16.e8dbdd23.css

@@ -1 +0,0 @@
-.midd-page[data-v-7a0ab417]{padding:20px}.el-icon-edit[data-v-7a0ab417]{font-size:14px;color:#409eff}[data-v-7a0ab417] .model-gen-1{background-color:#e6f3ff!important}[data-v-7a0ab417] .model-gen-1.el-table__cell{background-color:#e6f3ff!important;color:#333!important}[data-v-7a0ab417] .model-gen-2{background-color:#f0e6ff!important}[data-v-7a0ab417] .model-gen-2.el-table__cell{background-color:#f0e6ff!important;color:#333!important}.header[data-v-7a0ab417]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 0}.h_left p[data-v-7a0ab417]{margin-top:0}.search-container[data-v-7a0ab417]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.search-box[data-v-7a0ab417]{width:350px}.custom-search-input[data-v-7a0ab417] :deep(.el-input__inner){height:40px;line-height:40px;border-right:none;border-radius:4px 0 0 4px}.custom-search-input[data-v-7a0ab417] :deep(.el-input-group__append){padding:0;border:none;background-color:transparent}.custom-search-input[data-v-7a0ab417] :deep(.el-input-group__append .el-button){height:40px;padding:0 20px;border-radius:0 4px 4px 0;margin:0}.custom-search-input[data-v-7a0ab417] :deep(.el-input__inner:hover){border-color:#dcdfe6}.custom-search-input[data-v-7a0ab417] :deep(.el-input__inner:focus){border-color:#409eff}

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/app.b7bc691b.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-0767fa6e.b265770c.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-151edd59.c6f00f97.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-260f027d.0a2f86c0.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-386d37cb.febe57b9.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-5d225980.919681d9.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-647b97bd.2adf3224.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-65d6e2a1.d997d623.js


+ 1 - 1
dist/static/js/chunk-c5d7799a.24c180eb.js → dist/static/js/chunk-683feb49.75706928.js

@@ -1 +1 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-c5d7799a"],{"1db4":function(t,s,a){"use strict";a.r(s);var e=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._m(1),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),a("div",{staticClass:"bullshit__info"},[t._v("Please check that the URL you entered is correct, or click the button below to return to the homepage.")]),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("Back to home")])])])])},c=[function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("div",{staticClass:"pic-404"},[e("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b"),alt:"404"}}),e("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"bullshit__info"},[t._v("All rights reserved "),a("a",{staticStyle:{color:"#20a0ff"},attrs:{href:"https://wallstreetcn.com",target:"_blank"}},[t._v("wallstreetcn")])])}],i={name:"Page404",computed:{message:function(){return"The webmaster said that you can not enter this page..."}}},l=i,n=(a("207f"),a("2877")),r=Object(n["a"])(l,e,c,!1,null,"26fcd89f",null);s["default"]=r.exports},"207f":function(t,s,a){"use strict";a("ba6f")},"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},a36b:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"},ba6f:function(t,s,a){}}]);
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-683feb49"],{"1db4":function(t,s,a){"use strict";a.r(s);var e=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._m(1),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),a("div",{staticClass:"bullshit__info"},[t._v("Please check that the URL you entered is correct, or click the button below to return to the homepage.")]),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("Back to home")])])])])},c=[function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("div",{staticClass:"pic-404"},[e("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b"),alt:"404"}}),e("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"bullshit__info"},[t._v("All rights reserved "),a("a",{staticStyle:{color:"#20a0ff"},attrs:{href:"https://wallstreetcn.com",target:"_blank"}},[t._v("wallstreetcn")])])}],i={name:"Page404",computed:{message:function(){return"The webmaster said that you can not enter this page..."}}},l=i,n=(a("207f"),a("2877")),r=Object(n["a"])(l,e,c,!1,null,"26fcd89f",null);s["default"]=r.exports},"207f":function(t,s,a){"use strict";a("ba6f")},"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},a36b:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"},ba6f:function(t,s,a){}}]);

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-708604c0.9fe67799.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-7d51ef16.a57f3cae.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-ca61fc30.324a130a.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/chunk-cdbc4916.60c37bc2.js


+ 76 - 24
src/api/knowledge.js

@@ -212,7 +212,7 @@ export function modelList(data) {
 
 export function configSave(data) {
   return request({
-    url: 'chatbot/configCreart/',
+    url: 'chatbot/configSave/',
     method: 'post',
     data
   })
@@ -266,8 +266,8 @@ export function configDelete(data) {
     })
   } 
 
-  /* 应用配置类型 */
-  export function application_types(data) {
+   /* 应用配置类型 */
+   export function application_types(data) {
     return request({
       url: '/chatbot/application-types/',
       method: 'post',
@@ -285,25 +285,16 @@ export function configDelete(data) {
     })
   } 
 
-  /* 获取默认id值 */
-  export function get_default(data) {
-    return request({
-      url: 'chatbot/configuration/get_default/',
-      method: 'get',
-      data
-    })
-  } 
-
-  /* 查看应用 /chatbot/configurationInfo/ */
-  export function configurationInfo(data) {
-    return request({
-      url: '/chatbot/configurationInfo/',
-      method: 'post',
-      data
-    })
-  } 
+    /* 获取默认id值 */
+    export function get_default(data) {
+      return request({
+        url: 'chatbot/configuration/get_default/',
+        method: 'get',
+        data
+      })
+    } 
 
-  /* 批量删除 */
+    /* 批量删除 */
 
   export function delDocumentList(data) {
     return request({
@@ -312,6 +303,7 @@ export function configDelete(data) {
       data
     })
   } 
+
   /* 获取GPU数据 /machines/gpu-info/*/
 
   export function gpu_info(data) {
@@ -322,9 +314,10 @@ export function configDelete(data) {
     })
   } 
 
-   /* 列表 literature-data/list/ */
 
-   export function GET_list(data) {
+  /* 列表 literature-data/list/ */
+
+  export function GET_list(data) {
     return request({
       url: 'literature-data/list/',
       method: 'post',
@@ -420,4 +413,63 @@ export function configDelete(data) {
       method: 'post',
       data
     })
-  } 
+  } 
+
+  /* 文献搜索 */
+
+  export function search(data) {
+    return request({
+      url: '/literature-data/search/',
+      method: 'post',
+      data
+    })
+  } 
+
+  /* 保存配置 */
+
+  export function saveConfig(data) {
+    return request({
+      url: '/project-prompt/save',
+      method: 'post',
+      data
+    })
+  } 
+
+  /* 获取配置列表 */
+  export function listProConfig(data) {
+    return request({
+      url: '/project-prompt/list',
+      method: 'get',
+      data
+    })
+  } 
+
+  /* 更新配置 project-prompt/update*/
+
+  export function updateConfig(data) {
+    return request({
+      url: 'project-prompt/update',
+      method: 'post',
+      data
+    })
+  } 
+
+  /* 删除配置 */
+
+  export function deleteConfig(data) {
+    return request({
+      url: 'project-prompt/delete',
+      method: 'post',
+      data
+    })
+  } 
+
+/*批量解析新   kbm/analysisPro*/
+
+export function analysisPro(data) {
+  return request({
+    url: '/kbm/analysisPro',
+    method: 'post',
+    data
+  })
+} 

+ 160 - 205
src/views/document/com/components/sourceEs/index.vue

@@ -1,216 +1,171 @@
 <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 class="com-formual">
+    <el-button @click="searchEx">检索</el-button>
+
+    <!-- 显示匹配到的结果 -->
+    <div v-if="matchResults.length" class="match-results">
+      <div
+        v-for="(item, index) in matchResults"
+        :key="index"
+        class="match-item"
+      >
+        <div class="match-content">
+          <span>原始值: {{ item }}</span>
+          <span>替换后: {{ item + "1" }}</span>
+        </div>
+        <div class="actions">
+          <el-button size="small" @click="replaceItem(item)">替换</el-button>
+        </div>
+      </div>
+      <el-button type="primary" @click="replaceAll">批量替换</el-button>
     </div>
-  </template>
+  </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:{}
-      };
+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"],
+  props: {
+    TemList: {
+      type: Array,
+      default: [],
     },
-    mounted() {
-      this.initTableList();
+  },
+  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: {},
+      matchResults: [], // 存储匹配到的结果
+    };
+  },
+  mounted() {
+    this.initTableList();
+  },
+  methods: {
+    searchEx() {
+      let allMatches = [];
+
+      this.TemList.forEach((el) => {
+        const matches = el.content.match(
+          /\[[A-Z0-9]+-[A-Z0-9]+-[0-9]+-[0-9]+\]/g
+        );
+        if (matches) {
+          allMatches = [...allMatches, ...matches];
+        }
+      });
+
+      // 去重
+      this.matchResults = [...new Set(allMatches)];
+      console.log("匹配到的结果:", this.matchResults);
     },
-    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; // 结束加载动画
+
+    // 单个替换
+    replaceItem(item) {
+      this.$confirm(`确认将 ${item} 替换为 ${item}1?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          // 这里添加替换逻辑
+          this.$message.success("替换成功");
+        })
+        .catch(() => {
+          // 取消操作
+        });
+    },
+
+    // 批量替换
+    replaceAll() {
+      this.$confirm(
+        `确认批量替换 ${this.matchResults.length} 项内容?`,
+        "提示",
+        {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
         }
-      },
-  
-      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;
+      )
+        .then(() => {
+          // 这里添加批量替换逻辑
+          this.$message.success("批量替换成功");
+        })
+        .catch(() => {
+          // 取消操作
         });
-      },
     },
-  };
-  </script>
+    /* 检索当前模版的所有内容 */
+    /*  searchEx() {
+      console.log("TemList", this.TemList);
+      this.TemList.map((el) => {
+         const matches = el.content.match(/\[[A-Z0-9]+-[A-Z0-9]+-[0-9]+-[0-9]+\]/g);
+        console.log("matches",matches);
+        return matches || []; // 如果没有匹配到返回空数组
+        el.content = el.content.replace(
+          /\[[A-Z0-9]+-[A-Z0-9]+-[0-9]+-[0-9]+\]/g,
+          (match) => {
+            // match 是匹配到的原始文本,例如 [FT7-RP-00-012]
+            // 这里可以根据需求对 match 进行处理
+            return `${match}1`; // 例如:替换后的[FT7-RP-00-012]
+            // 或者返回其他处理结果
+          }
+        );
+        return el;
+      });
+    }, */
+    /* ai检索 */
+    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" scoped>
+.match-results {
+  margin-top: 20px;
+  
+  .match-item {
+    padding: 10px;
+    border-bottom: 1px solid #eee;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    
+    .match-content {
+      flex: 1;
+      display: flex;
+      gap: 20px;
+    }
     
-    <style lang="scss">
- 
-  </style>
+    .actions {
+      margin-left: 10px;
+    }
+  }
+}
+</style>
     

+ 5 - 4
src/views/knowledgeMenu/category/knowledgeSet.vue

@@ -95,7 +95,7 @@
             prop="name"
             label="文件名称"
             sortable="custom"
-            width="600"
+            width="350"
           >
             <template #default="scope">
               <span>{{ scope.row.name }}</span>
@@ -409,7 +409,8 @@ import {
   batchMove,
   selectType0,
   delDocumentList,
-  getdocpro
+  getdocpro,
+  analysisPro
 } from "@/api/knowledge";
 export default {
   components: {
@@ -783,7 +784,7 @@ export default {
       })
         .then(() => {
           this.loading = true;
-          batchAnalysis({ ids: JSON.stringify(selectedIds) })
+          analysisPro({document_ids:JSON.stringify(selectedIds)})/* { ids: JSON.stringify(selectedIds) } */
             .then((res) => {
               if (res.status === 200) {
                 this.$message.success("批量解析任务已提交");
@@ -876,7 +877,7 @@ export default {
       // Set the status to "解析中" (1) immediately
       this.$set(row, "run", 1);
 
-      analysis({
+      analysisPro({
         document_id: row.id,
         start_page: row.start_page || 0,
         end_page: row.end_page || 1000,

+ 277 - 389
src/views/middPage/index.vue

@@ -1,7 +1,5 @@
 <template>
   <div class="midd-page">
-    <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="AED列表" name="first"> -->
     <div class="header">
       <div class="h_left">
         <p class="current-doc">
@@ -10,40 +8,20 @@
         </p>
         <div class="search-box">
           <p>
-            <strong>所属标签</strong>:<span style="color: #97a8be">{{
+            <strong>所属标签</strong>:
+            <el-tag
+              v-for="(item, index) in firstForm.tag"
+              :key="index"
+              type=""
+              :style="index !== 0 ? 'margin-left: 5px;' : ''"
+            >
+              {{ item }} </el-tag
+            ><!-- <span style="color: #97a8be">{{
               firstForm.tag || '暂无标签'
-            }}</span>
+            }}</span> -->
           </p>
-          <!-- <el-input
-            v-model="firstForm.searchQuery"
-            placeholder="请输入搜索内容"
-            class="custom-search-input"
-            clearable
-            @clear="handleSearchClear"
-            @keyup.enter.native="handleSearch"
-          >
-            <template #append>
-              <el-button
-                type="primary"
-                icon="el-icon-search"
-                @click="handleSearch"
-                >搜索</el-button
-              >
-            </template>
-          </el-input> -->
         </div>
       </div>
-      <!-- <div class="h_right">
-            <el-pagination
-              @size-change="handleSizeChange"
-              @current-change="handleCurrentChange"
-              :current-page="firstForm.currentPage"
-              :page-size="firstForm.pageSize"
-              layout="total, prev, pager, next"
-              :total="firstForm.total"
-              >
-            </el-pagination>
-          </div> -->
     </div>
     <el-table :data="firstTableData" style="width: 100%">
       <!-- <el-table-column
@@ -69,34 +47,39 @@
           </el-table-column> -->
       <el-table-column
         label="项目"
-        prop="name"
+        prop=""
         :filters="firstForm.projectFilters"
         :filter-method="firstFilterProject"
         filter-placement="bottom-end"
         width="140"
-      >
+        ><!-- name -->
         <template #default="scope">
-          <el-input v-model="scope.row.name" v-if="scope.row.isEdit"></el-input>
-          <span v-else>{{ scope.row.name }}</span>
+          <el-input
+            v-model="scope.row.project_name"
+            v-if="scope.row.isEdit"
+          ></el-input>
+          <span v-else>{{ scope.row.project_name }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="说明" prop="description">
+      <el-table-column label="说明" prop="project_description"
+        ><!-- description -->
         <template #default="scope">
           <el-input
-            v-model="scope.row.description"
+            v-model="scope.row.project_description"
             v-if="scope.row.isEdit"
           ></el-input>
-          <span v-else>{{ scope.row.description }}</span>
+          <span v-else>{{ scope.row.project_description }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="范例" prop="example">
+      <el-table-column label="范例" prop="project_example"
+        ><!-- example -->
         <template #default="scope">
           <el-input
-            v-model="scope.row.example"
+            v-model="scope.row.project_example"
             v-if="scope.row.isEdit"
           ></el-input>
           <span v-else>
-            {{ scope.row.example }}
+            {{ scope.row.project_example }}
             <i
               class="el-icon-edit"
               @click="openExampleDialog(scope.row)"
@@ -170,7 +153,12 @@
                 >
                   <i class="el-icon-check"></i> 保存
                 </el-dropdown-item>
-                <!--  <el-dropdown-item
+                <el-dropdown-item
+                  @click.native="firstHandleConfig(scope.$index, scope.row)"
+                >
+                  <i class="el-icon-refresh"></i> 配置模型
+                </el-dropdown-item>
+                <!-- <el-dropdown-item
                       @click.native="firstHandleUpload(scope.$index, scope.row)"
                     >
                       <i class="el-icon-refresh"></i> 更新内容
@@ -186,211 +174,6 @@
         </template>
       </el-table-column>
     </el-table>
-    <el-button type="primary" @click="firstHandleAdd" style="margin-top: 20px"
-      >新增行</el-button
-    >
-    <!--   </el-tab-pane> -->
-    <!--  <el-tab-pane label="SOTA详情" name="second">
-        <el-table :data="secondTableData" style="width: 100%">
-          <el-table-column
-            label="Identifier"
-            prop="workType"
-            :filters="secondForm.workTypeFilters"
-            :filter-method="secondFilterWorkType"
-            filter-placement="bottom-end"
-          >
-            <template #default="scope">
-              <el-select
-                v-model="scope.row.workType"
-                placeholder="请选择"
-                v-if="scope.row.isEdit"
-              >
-                <el-option label="类型1" value="type1"></el-option>
-                <el-option label="类型2" value="type2"></el-option>
-                <el-option label="类型3" value="type3"></el-option>
-              </el-select>
-              <span v-else>{{ scope.row.workType }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column
-            label="Device"
-            prop="project"
-            :filters="secondForm.projectFilters"
-            :filter-method="secondFilterProject"
-            filter-placement="bottom-end"
-          >
-            <template #default="scope">
-              <el-input
-                v-model="scope.row.project"
-                v-if="scope.row.isEdit"
-              ></el-input>
-              <span v-else>{{ scope.row.project }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="Outcomes" prop="description">
-            <template #default="scope">
-              <el-input
-                v-model="scope.row.description"
-                v-if="scope.row.isEdit"
-              ></el-input>
-              <span v-else>{{ scope.row.description }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="Unit for analysis" prop="example">
-            <template #default="scope">
-              <el-input
-                v-model="scope.row.example"
-                v-if="scope.row.isEdit"
-              ></el-input>
-              <span v-else>
-                {{ scope.row.example }}
-              </span>
-            </template>
-          </el-table-column>
-          <el-table-column label="Mean" prop="description">
-            <template #default="scope">
-              <el-input
-                v-model="scope.row.description"
-                v-if="scope.row.isEdit"
-              ></el-input>
-              <span v-else>{{ scope.row.description }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="100">
-            <template #default="scope">
-              <el-dropdown trigger="click">
-                <el-button
-                  type="text"
-                  size="small"
-                  circle
-                  class="operation-button"
-                  style="font-size: 15px; margin-left: 10px"
-                  icon="el-icon-more"
-                ></el-button>
-                <template #dropdown>
-                  <el-dropdown-menu>
-                    <el-dropdown-item
-                      @click.native="secondHandleEdit(scope.$index, scope.row)"
-                      v-if="!scope.row.isEdit"
-                    >
-                      <i class="el-icon-edit"></i> 编辑
-                    </el-dropdown-item>
-                    <el-dropdown-item
-                      @click.native="secondHandleSave(scope.$index, scope.row)"
-                      v-if="scope.row.isEdit"
-                    >
-                      <i class="el-icon-check"></i> 保存
-                    </el-dropdown-item>
-                    <el-dropdown-item
-                      @click.native="
-                        secondHandleDelete(scope.$index, scope.row)
-                      "
-                    >
-                      <i class="el-icon-delete"></i> 删除
-                    </el-dropdown-item>
-                  </el-dropdown-menu>
-                </template>
-              </el-dropdown>
-            </template>
-          </el-table-column>
-        </el-table>
-        <el-button
-          type="primary"
-          @click="secondHandleAdd"
-          style="margin-top: 20px"
-          >新增行</el-button
-        >
-      </el-tab-pane>
-      <el-tab-pane label="SOTA汇总表" name="third">
-        <el-table :data="thirdTableData" style="width: 100%">
-          <el-table-column
-            label="Summary"
-            prop="workType"
-            :filters="thirdForm.workTypeFilters"
-            :filter-method="thirdFilterWorkType"
-            filter-placement="bottom-end"
-          >
-            <template #default="scope">
-              <el-select
-                v-model="scope.row.workType"
-                placeholder="请选择"
-                v-if="scope.row.isEdit"
-              >
-                <el-option label="类型1" value="type1"></el-option>
-                <el-option label="类型2" value="type2"></el-option>
-                <el-option label="类型3" value="type3"></el-option>
-              </el-select>
-              <span v-else>{{ scope.row.workType }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column
-            label="EqMD"
-            prop="project"
-            :filters="thirdForm.projectFilters"
-            :filter-method="thirdFilterProject"
-            filter-placement="bottom-end"
-          >
-            <template #default="scope">
-              <el-input
-                v-model="scope.row.project"
-                v-if="scope.row.isEdit"
-              ></el-input>
-              <span v-else>{{ scope.row.project }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="Pain:VAS" prop="description">
-            <template #default="scope">
-              <el-input
-                v-model="scope.row.description"
-                v-if="scope.row.isEdit"
-              ></el-input>
-              <span v-else>{{ scope.row.description }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="100">
-            <template #default="scope">
-              <el-dropdown trigger="click">
-                <el-button
-                  type="text"
-                  size="small"
-                  circle
-                  class="operation-button"
-                  style="font-size: 15px; margin-left: 10px"
-                  icon="el-icon-more"
-                ></el-button>
-                <template #dropdown>
-                  <el-dropdown-menu>
-                    <el-dropdown-item
-                      @click.native="thirdHandleEdit(scope.$index, scope.row)"
-                      v-if="!scope.row.isEdit"
-                    >
-                      <i class="el-icon-edit"></i> 编辑
-                    </el-dropdown-item>
-                    <el-dropdown-item
-                      @click.native="thirdHandleSave(scope.$index, scope.row)"
-                      v-if="scope.row.isEdit"
-                    >
-                      <i class="el-icon-check"></i> 保存
-                    </el-dropdown-item>
-                    <el-dropdown-item
-                      @click.native="thirdHandleDelete(scope.$index, scope.row)"
-                    >
-                      <i class="el-icon-delete"></i> 删除
-                    </el-dropdown-item>
-                  </el-dropdown-menu>
-                </template>
-              </el-dropdown>
-            </template>
-          </el-table-column>
-        </el-table>
-        <el-button
-          type="primary"
-          @click="thirdHandleAdd"
-          style="margin-top: 20px"
-          >新增行</el-button
-        >
-      </el-tab-pane> -->
-    <!--  </el-tabs> -->
 
     <el-dialog :visible.sync="dialogVisible" title="编辑范例" width="30%">
       <el-input v-model="currentExample" type="textarea" :rows="4"></el-input>
@@ -414,8 +197,12 @@
             placeholder="请选择应用"
             disabled
           >
-            <el-option label="应用1" value="app1"></el-option>
-            <el-option label="应用2" value="app2"></el-option>
+            <el-option
+              v-for="(item, index) in configArr"
+              :key="index"
+              :label="item.chat_name"
+              :value="item.id"
+            ></el-option>
           </el-select>
         </el-form-item>
 
@@ -424,7 +211,7 @@
           <el-input-number
             v-model="firstForm.firstAiForm.wordCount"
             :min="1"
-            :max="1000"
+            :max="9999"
             placeholder="请输入字数限制"
           >
           </el-input-number>
@@ -466,17 +253,108 @@
 
       <template #footer>
         <span class="dialog-footer">
+          <el-button @click="saveConfig">保存配置</el-button>
           <el-button @click="generateContent">生成内容</el-button>
           <el-button @click="firstForm.dialogVisible = false">取消</el-button>
           <el-button type="primary" @click="firstSaveExample">确定</el-button>
         </span>
       </template>
     </el-dialog>
+    <!-- 配置生成 -->
+    <el-dialog
+      :visible.sync="firstForm.configVisible"
+      title="配置模型"
+      width="40%"
+    >
+      <el-form :model="firstForm.configForm" label-width="120px">
+        <el-form-item label="模型1">
+          <el-select
+            v-model="firstForm.configForm.model_a_config"
+            placeholder="请选择应用"
+          >
+            <el-option
+              v-for="(item, index) in configArr"
+              :key="index"
+              :label="item.chat_name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="模型2">
+          <el-select
+            v-model="firstForm.configForm.model_b_config"
+            placeholder="请选择应用"
+          >
+            <el-option
+              v-for="(item, index) in configArr"
+              :key="index"
+              :label="item.chat_name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- 字数限制 -->
+        <el-form-item label="MAX-token数">
+          <el-input-number
+            v-model="firstForm.configForm.max_tokens"
+            :min="1"
+            :max="2048"
+            placeholder="请输入字数限制"
+          >
+          </el-input-number>
+        </el-form-item>
+
+        <!-- 说明 -->
+        <el-form-item label="说明">
+          <el-input
+            v-model="firstForm.configForm.project_description"
+            type="textarea"
+            :rows="2"
+            placeholder="请输入说明"
+          >
+          </el-input>
+        </el-form-item>
+
+        <!-- 提示词 -->
+        <el-form-item label="提示词">
+          <el-input
+            v-model="firstForm.configForm.project_name"
+            type="textarea"
+            :rows="3"
+            placeholder="请输入提示词"
+          >
+          </el-input>
+        </el-form-item>
+        <!-- 生成方法 -->
+        <el-form-item label="生成方法">
+          <el-input
+            v-model="firstForm.configForm.generation_method"
+            type="textarea"
+            :rows="3"
+            placeholder="请输入生成方法"
+          >
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="firstForm.dialogVisible = false">取消</el-button>
+          <el-button @click="saveConfig" type="primary">保存配置</el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
   
   <script>
-import { getDetail } from "@/api/knowledge";
+import {
+  getDetail,
+  saveConfig,
+  configList,
+  listProConfig,
+  updateConfig,
+  deleteConfig,
+} from "@/api/knowledge";
 export default {
   name: "MiddPage",
   data() {
@@ -532,6 +410,7 @@ export default {
           project: [],
         },
         dialogVisible: false,
+        configVisible: false,
         firstAiForm: {
           application: "",
           wordCount: 100,
@@ -539,8 +418,19 @@ export default {
           prompt: "",
           modelValue: "",
         },
+        /* 配置应用表单 */
+        configForm: {
+          id: "",
+          project_name: "提取第一作者",
+          max_tokens: 1024,
+          project_description: "从文献中提取第一作者信息,并进行格式化处理",
+          generation_method: "extract_first_author",
+          model_a_config: 20,
+          model_b_config: 22,
+          project_example: "",
+        },
         currentDocument: "AED数据表", // 当前文档名称
-        tag:[],
+        tag: [],
         searchQuery: "", // 搜索关键词
         currentPage: 1, // 当前页码
         pageSize: 10, // 每页显示条数
@@ -610,7 +500,7 @@ export default {
           project: [],
         },
       }, */
-
+      configArr: [],
       dialogVisible: false,
       currentExample: "",
       currentRow: null,
@@ -627,123 +517,64 @@ export default {
         );
       });
     },
-    /* secondTableData() {
-      return this.secondForm.tableData.filter((data) => {
-        return (
-          (!this.secondForm.activeFilters.workType.length ||
-            this.secondForm.activeFilters.workType.includes(data.workType)) &&
-          (!this.secondForm.activeFilters.project.length ||
-            this.secondForm.activeFilters.project.includes(data.project))
-        );
-      });
-    },
-    thirdTableData() {
-      return this.thirdForm.tableData.filter((data) => {
-        return (
-          (!this.thirdForm.activeFilters.workType.length ||
-            this.thirdForm.activeFilters.workType.includes(data.workType)) &&
-          (!this.thirdForm.activeFilters.project.length ||
-            this.thirdForm.activeFilters.project.includes(data.project))
-        );
-      });
-    }, */
-  },
-  created() {
-    this.updateProjectFilters();
   },
   mounted() {
     this.firstForm.currentDocument = this.$route.query.name;
-    this.firstForm.tag= JSON.parse(this.$route.query.tag).join(",")
+    this.firstForm.tag = JSON.parse(this.$route.query.tag);
     this.firstInit();
+    this.updateProjectFilters();
   },
   methods: {
-    /* SOTA汇总表(第三) */
-    /*  thirdHandleEdit(index, row) {
-      row.isEdit = true;
-    },
-    thirdHandleSave(index, row) {
-      row.isEdit = false;
-      this.updateProjectFilters();
-      // 在这里可以添加保存到后端的逻辑
-    },
-    thirdHandleDelete(index, row) {
-      this.thirdForm.tableData.splice(index, 1);
-      this.updateProjectFilters();
-      // 在这里可以添加从后端删除的逻辑
-    },
-    thirdHandleAdd() {
-      this.thirdForm.tableData.push({
-        workType: "",
-        project: "",
-        description: "",
-        example: "",
-        isEdit: true,
-      });
-    },
-    thirdFilterWorkType(value, row) {
-      return row.workType === value;
-    },
-    thirdFilterProject(value, row) {
-      return row.project === value;
-    },
-    updateProjectFilters() {
-      const projects = [
-        ...new Set(this.thirdForm.tableData.map((item) => item.project)),
-      ];
-      this.projectFilters = projects.map((project) => ({
-        text: project,
-        value: project,
-      }));
-    }, */
-    /* SOTA数据表(第二) */
-    /*  secondHandleEdit(index, row) {
-      row.isEdit = true;
-    },
-    secondHandleSave(index, row) {
-      row.isEdit = false;
-      this.updateProjectFilters();
-      // 在这里可以添加保存到后端的逻辑
-    },
-    secondHandleDelete(index, row) {
-      this.secondForm.tableData.splice(index, 1);
-      this.updateProjectFilters();
-      // 在这里可以添加从后端删除的逻辑
-    },
-    secondHandleAdd() {
-      this.secondForm.tableData.push({
-        workType: "",
-        project: "",
-        description: "",
-        example: "",
-        isEdit: true,
-      });
-    },
-    secondFilterWorkType(value, row) {
-      return row.workType === value;
-    },
-    secondFilterProject(value, row) {
-      return row.project === value;
+    /* 配置模型 */
+    firstHandleConfig(index, row) {
+      this.firstForm.configForm = row;
+      this.firstForm.configForm.model_a_config = row.model_a_config.id;
+      this.firstForm.configForm.model_b_config = row.model_b_config.id;
+      /* this.firstForm.configForm.id=row.id
+      this.firstForm.configForm.project_description = row.description; */
+      this.firstForm.configVisible = true;
+    },
+    /* 保存配置JSON.stringify() */
+    saveConfig() {
+      if (!this.firstForm.configForm.id) {
+        saveConfig(this.firstForm.configForm).then((res) => {
+          if (res.status !== 200) return;
+          this.firstForm.configVisible = false;
+        });
+      } else {
+        updateConfig(this.firstForm.configForm).then((res) => {
+          if (res.status !== 200) return;
+          this.firstForm.configVisible = false;
+          this.$message.success("修改成功!");
+        });
+      }
     },
-    updateProjectFilters() {
-      const projects = [
-        ...new Set(this.secondForm.tableData.map((item) => item.project)),
-      ];
-      this.projectFilters = projects.map((project) => ({
-        text: project,
-        value: project,
-      }));
-    }, */
     /* AED数据表(第一) 操作事件*/
     openExampleDialog(row) {
       this.dialogVisible = true;
-      this.currentExample = row.example;
       this.currentRow = row;
+      this.currentExample = row.project_example; // 将当前行的范例赋值给弹窗输入框
     },
+
     saveExample() {
-      if (this.currentRow) {
-        this.currentRow.example = this.currentExample;
+      if (this.currentRow && this.currentExample) {
+        // 更新当前行的范例内容
+        this.currentRow.project_example = this.currentExample;
+
+        // 如果需要同步更新到后端,可以调用更新API
+        updateConfig({
+          ...this.currentRow,
+          project_example: this.currentExample,
+        }).then((res) => {
+          if (res.status === 200) {
+            this.$message.success("范例更新成功");
+            this.firstInit();
+          }
+        });
       }
       this.dialogVisible = false;
+      this.currentRow = null;
+      this.currentExample = "";
     },
     /* 生成内容 */
     // 更新内容处理方法
@@ -810,18 +641,39 @@ export default {
       this.firstForm.dialogVisible = true;
     },
     firstHandleEdit(index, row) {
-      console.log(index);
+      this.firstForm.configForm = row;
+      this.firstForm.configForm.model_a_config = row.model_a_config.id;
+      this.firstForm.configForm.model_b_config = row.model_b_config.id;
       row.isEdit = true;
     },
     firstHandleSave(index, row) {
       row.isEdit = false;
-      this.updateProjectFilters();
+      updateConfig(this.firstForm.configForm).then((res) => {
+        if (res.status !== 200) return;
+        this.$message.success("修改成功!");
+        this.firstInit();
+      });
       // 在这里可以添加保存到后端的逻辑
     },
-    firstHandleDelete(index, row) {
-      this.firstForm.tableData.splice(index, 1);
-      this.updateProjectFilters();
-      // 在这里可以添加从后端删除的逻辑
+    // 修改删除方法
+    async firstHandleDelete(index, row) {
+      try {
+        await this.$confirm("确认删除该记录?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        });
+
+        const res = await deleteConfig({ id: row.id });
+        if (res.status === 200) {
+          this.$message.success("删除成功");
+          this.firstInit(); // 重新加载数据
+        }
+      } catch (error) {
+        if (error !== "cancel") {
+          this.$message.error("删除失败");
+        }
+      }
     },
     firstHandleAdd() {
       this.firstForm.tableData.push({
@@ -878,7 +730,21 @@ export default {
     handleClick() {},
     /* 获取详细信息 */
     async firstInit() {
-      const res = await getDetail({ id: this.$route.query.id });
+      /* 获取配置信息 */
+      listProConfig().then((res) => {
+        if (res.status !== 200) return;
+        res.data.data.map((el) => {
+          el.isEdit = false;
+        });
+        this.firstForm.tableData = res.data.data;
+      });
+      /* 应用列表 */
+      configList().then((res) => {
+        if (res.status !== 200) return;
+        this.configArr = res.data;
+      });
+
+      /* const res = await getDetail({ id: this.$route.query.id });
 
       // 定义字段映射关系
       const fieldMappings = {
@@ -888,40 +754,52 @@ export default {
         },
         literature_type: {
           description:
-            "1-Meta-Analysis 2-Systematic Review(Systematic Review有非常严格的检索、选择、评价标准)3-Review4-Randomized Controlled Trials5-Cohort Study6-Case-Report7-Background Information/Expert Opinion8-Animal Research/Lab Studies可以从文献的:标题(1,2在标题出现的概率高),abstract,method中识别文献类型",
-          example: "第一作者",
+            "1-Meta-Analysis 2-Systematic Review(Systematic Review有非常严格的检索、选择、评价标准)3-Review 4-Randomized Controlled Trials 5-Cohort Study 6-Case-Report 7-Background Information/Expert Opinion 8-Animal Research/Lab Studies 可以从文献的:标题(1,2在标题出现的概率高),abstract,method中识别文献类型",
+          example: "4-Randomized Controlled Trials",
         },
         first_author: {
-          description: "overall_quality",
+          description: "第一作者",
           example: "",
         },
         study_design: {
-          description: "可以从文献的method部分提取实验设计/方法可以是Randomized controlled方式.文献搜索,数据库提取文献,干预分组……",
-          example: "searched Medline, Embase, the Web of Science, and the Cochrane Library for randomized trials and observational studies",
+          description:
+            "可以从文献的method部分提取实验设计/方法可以是Randomized controlled方式.文献搜索,数据库提取文献,干预分组……",
+          example:
+            "searched Medline, Embase, the Web of Science, and the Cochrane Library for randomized trials and observational studies",
         },
         population: {
-          description: "Population information; including: patient quantify(N, N of male/female); age(mean,range) Adult/children eg:60 adults with T1D (mean age 38years), 20 male",
-          example: "Type II Diabetes: n=10282 Age: ≥18 years; Naive to CGM; Between 2017 to 2019",
+          description:
+            "Population information; including: patient quantify(N, N of male/female); age(mean,range) Adult/children eg:60 adults with T1D (mean age 38years), 20 male",
+          example:
+            "Type II Diabetes: n=10282 Age: ≥18 years; Naive to CGM; Between 2017 to 2019",
         },
         region_country: {
-          description: "患者/试验者的人种,国家地区,以查阅是否存在数据上人种差异",
-          example: "white non-hispanic: n=247; african american:n=25; hispanic or latino: n=34",
+          description:
+            "患者/试验者的人种,国家地区,以查阅是否存在数据上人种差异",
+          example:
+            "white non-hispanic: n=247; african american:n=25; hispanic or latino: n=34",
         },
         indication: {
-          description: "器械在文献中使用的适应症,按照器械分析,也需要添加器械使用部位以区分",
+          description:
+            "器械在文献中使用的适应症,按照器械分析,也需要添加器械使用部位以区分",
           example: "t1d: n=191;t2d: n=152;",
         },
         intervention: {
-          description: "Group 1: xx; Group 2: xx 写清对照组和实验组分组的情况,如:有无干预,分适应症,分部位……",
-          example: "CGM(N=XX) vs. SMBG(N=XX); CGM (N=XX) vs. venous blood glucose test(N=XX); CGM+SMBG(N=XX) vs. SMBG(N=XX)",
+          description:
+            "Group 1: xx; Group 2: xx 写清对照组和实验组分组的情况,如:有无干预,分适应症,分部位……",
+          example:
+            "CGM(N=XX) vs. SMBG(N=XX); CGM (N=XX) vs. venous blood glucose test(N=XX); CGM+SMBG(N=XX) vs. SMBG(N=XX)",
         },
         subject_device: {
-          description: "Device name + model name 如无,可写疗法(以评价的器械所用疗法为主)",
+          description:
+            "Device name + model name 如无,可写疗法(以评价的器械所用疗法为主)",
           example: "Dexcom G6(此处为CGM器械名字)",
         },
         alternative_device: {
-          description: "Device name + model name 如无,可写疗法(以评价的器械的替代疗法)",
-          example: "Capillary blood by BMG; Venous blood by YSI (此处为CGM的替代疗法)",
+          description:
+            "Device name + model name 如无,可写疗法(以评价的器械的替代疗法)",
+          example:
+            "Capillary blood by BMG; Venous blood by YSI (此处为CGM的替代疗法)",
         },
         outcomes: {
           description: "Scope: tools (follow-up); such as 'Pain: VAS (day 3)'",
@@ -936,16 +814,20 @@ export default {
           example: "8 weeks",
         },
         clinical_benefit: {
-          description: "临床收益(文献中提到研究器械的好处,或者可以达到什么效果,可以摘抄过来可以从result,discussion中提取detailed can be refer to MEDDEV 2.7.1 rev4,b. Evaluation of the device’s benefits to the patient",
-          example: "the pediatric age span who used a CGM have improved glycemic control compared with patients who did patients who use insulin pumps along with CGM did achieve a lower HbA1c and better CGM metrics compared with the reference groups.",
+          description:
+            "临床收益(文献中提到研究器械的好处,或者可以达到什么效果,可以摘抄过来可以从result,discussion中提取detailed can be refer to MEDDEV 2.7.1 rev4,b. Evaluation of the device’s benefits to the patient",
+          example:
+            "the pediatric age span who used a CGM have improved glycemic control compared with patients who did patients who use insulin pumps along with CGM did achieve a lower HbA1c and better CGM metrics compared with the reference groups.",
         },
         disadvantage: {
-          description: "临床劣势(文献中提到研究器械的劣势,比如在什么情况下疗效不好)eg:导致出血,导致uncomfortable,导致预后不好……可以从result,discussion中提取",
+          description:
+            "临床劣势(文献中提到研究器械的劣势,比如在什么情况下疗效不好)eg:导致出血,导致uncomfortable,导致预后不好……可以从result,discussion中提取",
           example: "/",
         },
         conclusion: {
           description: "结论",
-          example: "CGM use was associated with a lower HbA1c in both MDI and pump users. Pump use was only associated with a lower HbA1c if used with CGM. HCL was associated with the lowest HbA1c. Spanish language and minority race/ethnicity were associated with lower rates of pump and CGM use, highlighting the need to reduce disparities.",
+          example:
+            "CGM use was associated with a lower HbA1c in both MDI and pump users. Pump use was only associated with a lower HbA1c if used with CGM. HCL was associated with the lowest HbA1c. Spanish language and minority race/ethnicity were associated with lower rates of pump and CGM use, highlighting the need to reduce disparities.",
         },
         clinical_guidelines: {
           description: "识别文献中提到的临床实践指南",
@@ -956,27 +838,33 @@ export default {
           example: "",
         },
         medical_field: {
-          description: "识别该器械是用于哪个医疗领域?例如骨科,外科,牙科,放射诊断等,包括已确定的医疗领域的历史方面的概述",
+          description:
+            "识别该器械是用于哪个医疗领域?例如骨科,外科,牙科,放射诊断等,包括已确定的医疗领域的历史方面的概述",
           example: "",
         },
         associated_conditions: {
-          description: "1 讨论该设备拟治疗的疾病的所有方面,包括但不限于流行病学、发病机制、临床表现和共病2 临床条件的描述,如:2.1 自然病程和结果。2.2 医疗条件是否有不同的临床方式、阶段和严重性。2.3 总体人群中的频率,通过年龄、性别、种族划分,熟悉的诱因、遗传方面等。",
+          description:
+            "1 讨论该设备拟治疗的疾病的所有方面,包括但不限于流行病学、发病机制、临床表现和共病2 临床条件的描述,如:2.1 自然病程和结果。2.2 医疗条件是否有不同的临床方式、阶段和严重性。2.3 总体人群中的频率,通过年龄、性别、种族划分,熟悉的诱因、遗传方面等。",
           example: "",
         },
         suitability_criteria: {
-          description: "D1 Actual device D2 Equivalent device D3 Other device A1 Same use A2 Minor deviation A3 Major deviation P1 Applicable P2 Limited P3 Different population R1 High quality R2 Minor deficiencies R3 Insufficient information",
+          description:
+            "D1 Actual device D2 Equivalent device D3 Other device A1 Same use A2 Minor deviation A3 Major deviation P1 Applicable P2 Limited P3 Different population R1 High quality R2 Minor deficiencies R3 Insufficient information",
           example: "D2,A1,P1,R1",
         },
         contribution_criteria: {
-          description: "1 Yes; 2 No T:Was the design of the study appropriate? O:Do the outcome measures reported reflect the intended purpose of the device? F:Is the duration of the follow-up long enough to access whether duration of treatment effects and identify complications? S:Has a statistical analysis of the data been provided and is it appropriate?  C:Was the magnitude of the treatment effect observed clinically significant?  ",
+          description:
+            "1 Yes; 2 No T:Was the design of the study appropriate? O:Do the outcome measures reported reflect the intended purpose of the device? F:Is the duration of the follow-up long enough to access whether duration of treatment effects and identify complications? S:Has a statistical analysis of the data been provided and is it appropriate?  C:Was the magnitude of the treatment effect observed clinically significant?  ",
           example: "T1,O1,F1,S1,C1",
         },
         oxford_evidence: {
-          description: "根据Literature type,对照Oxford Centre for Evidence-Based Medicine, Levels of Evidence (2011)填写基本level 1:Systematic review of randomized trials level 2:Randomized trial or observational study level 3:Non-randomized controlled cohort/follow-upstudy (PMS) level 4:Case report level 5:Mechanism-based reasoning",
+          description:
+            "根据Literature type,对照Oxford Centre for Evidence-Based Medicine, Levels of Evidence (2011)填写基本level 1:Systematic review of randomized trials level 2:Randomized trial or observational study level 3:Non-randomized controlled cohort/follow-upstudy (PMS) level 4:Case report level 5:Mechanism-based reasoning",
           example: "level 2",
         },
         overall_quality: {
-          description: "将前面数字加起来的总和 9-14 Accepted and Pivotal 15-23 Accepted but not Pivotal 24-27 Excluded",
+          description:
+            "将前面数字加起来的总和 9-14 Accepted and Pivotal 15-23 Accepted but not Pivotal 24-27 Excluded",
           example: "12",
         },
       };
@@ -993,7 +881,7 @@ export default {
           generation_2: "", // 为模型生成2预留空间
         }));
 
-      this.firstForm.tableData = processedData;
+      this.firstForm.tableData = processedData; */
     },
   },
   watch: {

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff