刘洋 11 달 전
부모
커밋
01cee84d1e

+ 2 - 1
.eslintignore

@@ -1,3 +1,4 @@
-
+dist
 public
 vue.config.js
+dist.zip

+ 8 - 2
src/components/ModelSelect.vue

@@ -5,6 +5,7 @@
     :options="options"
     :props="attrs"
     @change="handleChange"
+    :disabled="disabled"
   ></el-cascader>
 </template>
 
@@ -22,12 +23,16 @@ export default {
       default: 1,
     },
     value: {
-      type: Array,
+      type: [Number, String],
     },
     appType: {
       type: String,
       default: "",
     },
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
   },
   computed: {
     attrs() {
@@ -97,7 +102,8 @@ export default {
   },
   watch: {
     value(val) {
-      this.selected = val;
+      this.selected = [val]; //只显示一层供应商的场景,level=1
+      this.key = Math.random() + "";
     },
     appType() {
       this.selected = [];

+ 8 - 2
src/components/NormalSelect.vue

@@ -34,6 +34,10 @@ export default {
     page: { type: Boolean, default: false },
     valueStr: { type: String, default: "id" },
     labelStr: { type: String, default: "name" },
+    params: {
+      type: Object,
+      default: () => {},
+    },
   },
   data() {
     return {
@@ -55,7 +59,9 @@ export default {
   methods: {
     async search() {
       this.optionList = [];
-      let params = this.page ? { pageNumber: 1, pageSize: 10000 } : undefined;
+      let params = this.page
+        ? { pageNumber: 1, pageSize: 10000, ...this.params }
+        : this.params;
       const res = await this.func(params);
       this.optionList = this.page ? res?.records || [] : res || [];
       this.$emit("getOptions", this.optionList);
@@ -68,7 +74,7 @@ export default {
       this.$emit("input", this.selected);
       this.$emit(
         "change",
-        this.optionList.find((item) => item.id === this.selected)
+        this.optionList.find((item) => item[this.valueStr] === this.selected)
       );
     },
   },

+ 2 - 2
src/constants/navs.js

@@ -36,14 +36,14 @@ export const navs = [
   {
     id: "6",
     parentId: "1",
-    name: "OCR管理",
+    name: "OCR供应商",
     url: "OcrManage",
     privilege: "OCR_SUPPLIER_VIEW",
   },
   {
     id: "7",
     parentId: "1",
-    name: "大模型管理",
+    name: "大模型供应商",
     url: "ModelSupplierManage",
     privilege: "LLM_SUPPLIER_VIEW",
   },

+ 49 - 38
src/modules/admin/big-model/ModelManage/CueWordTpl/ModifyTpl.vue

@@ -3,7 +3,7 @@
     class="modify-model"
     :visible.sync="modalIsShow"
     :title="title"
-    top="10vh"
+    top="3vh"
     width="1000px"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
@@ -14,51 +14,55 @@
       ref="modalFormComp"
       :model="modalForm"
       :rules="rules"
-      label-width="280px"
+      label-width="180px"
     >
       <el-form-item prop="appType" label="应用类型:">
         <NormalSelect
           v-model="modalForm.appType"
           :func="appTypeList"
           valueStr="code"
-          :disabled="isEdit"
+          :disabled="true"
         ></NormalSelect>
       </el-form-item>
+      <el-form-item prop="remark" label="备注:">
+        <el-input
+          v-model.trim="modalForm.remark"
+          placeholder="请输入备注"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="" style="margin-bottom: 5px">
+        <el-radio-group v-model="radioType" size="mini">
+          <el-radio-button label="user">user角色</el-radio-button>
+          <el-radio-button label="system">system角色</el-radio-button>
+        </el-radio-group>
+      </el-form-item>
 
-      <el-form-item prop="user" v-if="radioType == 'user'">
-        <div slot="label" style="display: inline-block">
-          <el-radio-group v-model="radioType" size="mini">
-            <el-radio-button label="user">user角色</el-radio-button>
-            <el-radio-button label="system">system角色</el-radio-button>
-          </el-radio-group>
-          提示词模板:
-        </div>
+      <el-form-item
+        prop="user"
+        v-if="radioType == 'user'"
+        :label="`${radioType}角色提示词模板:`"
+      >
         <el-input
+          type="textarea"
           v-model.trim="modalForm.user"
           placeholder="请输入user角色提示词模版"
           clearable
+          :rows="25"
         ></el-input>
       </el-form-item>
 
-      <el-form-item prop="system" v-if="radioType == 'system'">
-        <div slot="label" style="display: inline-block">
-          <el-radio-group v-model="radioType" size="mini">
-            <el-radio-button label="user">user角色</el-radio-button>
-            <el-radio-button label="system">system角色</el-radio-button>
-          </el-radio-group>
-          提示词模板:
-        </div>
+      <el-form-item
+        prop="system"
+        v-if="radioType == 'system'"
+        label="提示词模板:"
+      >
         <el-input
+          type="textarea"
           v-model.trim="modalForm.system"
           placeholder="请输入system角色提示词模版"
           clearable
-        ></el-input>
-      </el-form-item>
-      <el-form-item prop="remark" label="备注:">
-        <el-input
-          v-model.trim="modalForm.remark"
-          placeholder="请输入备注"
-          clearable
+          :rows="25"
         ></el-input>
       </el-form-item>
     </el-form>
@@ -97,6 +101,10 @@ export default {
       type: [Number, String],
       default: "",
     },
+    appType: {
+      type: String,
+      default: "",
+    },
   },
   computed: {
     isEdit() {
@@ -120,18 +128,18 @@ export default {
             message: "请选择应用类型",
           },
         ],
-        system: [
-          {
-            required: true,
-            message: "请输入system角色提示词模版",
-          },
-        ],
-        user: [
-          {
-            required: true,
-            message: "请输入user角色提示词模版",
-          },
-        ],
+        // system: [
+        //   {
+        //     required: true,
+        //     message: "请输入system角色提示词模版",
+        //   },
+        // ],
+        // user: [
+        //   {
+        //     required: true,
+        //     message: "请输入user角色提示词模版",
+        //   },
+        // ],
         remark: [
           {
             required: true,
@@ -154,6 +162,9 @@ export default {
     },
     visibleChange() {
       this.initData(this.instance);
+      if (!this.isEdit) {
+        this.modalForm.appType = this.appType;
+      }
     },
     cancel() {
       this.modalIsShow = false;

+ 10 - 6
src/modules/admin/big-model/ModelManage/CueWordTpl/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="model-manage">
     <el-dialog
-      title="提示词模板列表"
+      :title="`${supplierInfo.name} - ${curRow.name}`"
       class="page-dialog"
       :visible.sync="modalIsShow"
       :close-on-click-modal="false"
@@ -21,9 +21,6 @@
               valueStr="code"
             ></NormalSelect>
           </el-form-item>
-          <el-form-item label-width="0px">
-            <el-button type="primary" @click="getList">查询</el-button>
-          </el-form-item>
           <el-form-item label-width="0px">
             <el-button type="success" @click="toAdd">新增</el-button>
           </el-form-item>
@@ -37,10 +34,10 @@
               {{ getAppTypeStr(scope.row.appType) }}
             </span>
           </el-table-column>
-          <el-table-column prop="system" label="system角色提示词模版">
+          <!-- <el-table-column prop="system" label="system角色提示词模版">
           </el-table-column>
           <el-table-column prop="user" label="user角色提示词模版">
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column prop="remark" label="备注"> </el-table-column>
 
           <el-table-column
@@ -66,6 +63,7 @@
       ref="ModifyTpl"
       :modelId="curRow.id"
       @modified="getList"
+      :appType="appType"
     ></ModifyTpl>
   </div>
 </template>
@@ -85,6 +83,12 @@ export default {
         return {};
       },
     },
+    supplierInfo: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
   },
   data() {
     return {

+ 14 - 1
src/modules/admin/big-model/ModelManage/ModifyModel.vue

@@ -17,7 +17,11 @@
       label-width="110px"
     >
       <el-form-item prop="supplierId" label="供应商:">
-        <ModelSelect v-model="modalForm.supplierId" :level="1"></ModelSelect>
+        <ModelSelect
+          v-model="modalForm.supplierId"
+          :level="1"
+          disabled
+        ></ModelSelect>
       </el-form-item>
       <el-form-item prop="name" label="名称:">
         <el-input
@@ -72,6 +76,12 @@ export default {
         return {};
       },
     },
+    supplierInfo: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
   },
   computed: {
     isEdit() {
@@ -139,6 +149,9 @@ export default {
     },
     visibleChange() {
       this.initData(this.instance);
+      if (this.supplierInfo?.id) {
+        this.modalForm.supplierId = this.supplierInfo.id;
+      }
     },
     cancel() {
       this.modalIsShow = false;

+ 2 - 0
src/modules/admin/big-model/ModelManage/index.vue

@@ -70,11 +70,13 @@
       :instance="curModel"
       ref="ModifyModel"
       @modified="getList"
+      :supplierInfo="curRow"
     ></ModifyModel>
     <CueWordTpl
       :curRow="curModel"
       ref="CueWordTpl"
       @modified="getList"
+      :supplierInfo="curRow"
     ></CueWordTpl>
   </div>
 </template>

+ 10 - 7
src/modules/admin/big-model/ModelSupplierManage.vue

@@ -4,20 +4,22 @@
       class="part-box part-box-filter part-box-flex"
       style="padding-bottom: 20px"
     >
-      <el-button
-        v-if="checkPrivilege('LLM_SUPPLIER_INSERT')"
-        type="success"
-        @click="toAdd"
-        >新增</el-button
-      >
-      <span v-else></span>
       <div>
+        <el-button
+          v-if="checkPrivilege('LLM_SUPPLIER_INSERT')"
+          type="success"
+          @click="toAdd"
+          >新增</el-button
+        >
         <el-button
           v-if="checkPrivilege('LLM_ORG_CONFIG_VIEW')"
           type="primary"
           @click="orgSet"
           >机构设置</el-button
         >
+      </div>
+
+      <div>
         <el-tooltip effect="dark" content="刷新" placement="bottom">
           <el-button icon="el-icon-refresh-right" @click="getList"></el-button>
         </el-tooltip>
@@ -27,6 +29,7 @@
       <el-table ref="TableList" :data="dataList" v-loading="loading">
         <el-table-column prop="id" label="ID"></el-table-column>
         <el-table-column prop="name" label="名称"> </el-table-column>
+        <el-table-column prop="qps" label="QPS限流"> </el-table-column>
         <el-table-column prop="createTime" label="创建时间">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter

+ 1 - 0
src/modules/admin/big-model/ModifySupplier.vue

@@ -39,6 +39,7 @@
       </el-form-item>
       <el-form-item prop="clientClass" label="实现类名称:">
         <el-input
+          :disabled="isEdit"
           v-model.trim="modalForm.chatClientClass"
           placeholder="请输入实现类名称"
           clearable

+ 2 - 0
src/modules/admin/big-model/OrgSet/AddCount.vue

@@ -22,6 +22,7 @@
           placeholder="请选择机构"
           :func="orgQuery"
           page
+          disabled
         ></NormalSelect>
       </el-form-item>
       <el-form-item prop="appType" label="应用类型:">
@@ -29,6 +30,7 @@
           v-model="modalForm.appType"
           :func="appTypeList"
           valueStr="code"
+          disabled
         ></NormalSelect>
       </el-form-item>
       <el-form-item prop="leftCount" label="增加次数:">

+ 83 - 20
src/modules/admin/big-model/OrgSet/ModifyOrgSet.vue

@@ -22,6 +22,7 @@
           placeholder="请选择机构"
           :func="orgQuery"
           page
+          :disabled="isEdit"
         ></NormalSelect>
       </el-form-item>
       <el-form-item prop="appType" label="应用类型:">
@@ -29,9 +30,39 @@
           v-model="modalForm.appType"
           :func="appTypeList"
           valueStr="code"
+          :disabled="isEdit"
+        ></NormalSelect>
+      </el-form-item>
+      <el-form-item prop="supplierId" label="供应商:">
+        <NormalSelect
+          v-model="modalForm.supplierId"
+          :func="modelSupplierListQuery"
+          @change="supplierIdChange"
+        ></NormalSelect>
+      </el-form-item>
+      <el-form-item prop="modelId" label="模型:" v-if="modalForm.supplierId">
+        <NormalSelect
+          v-model="modalForm.modelId"
+          :func="modelListQuery"
+          :params="params1"
+          @change="modelIdChange"
+          ref="modelSelectRef"
         ></NormalSelect>
       </el-form-item>
       <el-form-item
+        prop="promptId"
+        label="提示词:"
+        v-if="modalForm.appType && modalForm.modelId"
+      >
+        <NormalSelect
+          v-model="modalForm.promptId"
+          :func="cueWordListQuery"
+          :params="params2"
+          ref="promptSelectRef"
+        ></NormalSelect>
+      </el-form-item>
+
+      <!-- <el-form-item
         prop="promptId"
         label="提示词模板:"
         v-if="modalForm.appType"
@@ -41,15 +72,15 @@
           @change="promptChange"
           :appType="modalForm.appType"
         ></ModelSelect>
-      </el-form-item>
-      <el-form-item prop="permitCount" label="累计许可数量:">
+      </el-form-item> -->
+      <el-form-item prop="permitCount" label="累计许可数量:" v-if="!isEdit">
         <el-input-number
           v-model="modalForm.permitCount"
           :controls="false"
           :disabled="isEdit"
         />
       </el-form-item>
-      <el-form-item prop="leftCount" label="剩余许可数量:">
+      <el-form-item prop="leftCount" label="剩余许可数量:" v-if="!isEdit">
         <el-input-number
           v-model="modalForm.leftCount"
           :controls="false"
@@ -67,13 +98,20 @@
 </template>
 
 <script>
-import { orgQuery, orgSetInsertOrUpdate, appTypeList } from "../../api";
+import {
+  orgQuery,
+  orgSetInsertOrUpdate,
+  appTypeList,
+  modelSupplierListQuery,
+  modelListQuery,
+  cueWordListQuery,
+} from "../../api";
 import NormalSelect from "@/components/NormalSelect.vue";
-import ModelSelect from "@/components/ModelSelect.vue";
 
 const initModalForm = {
   orgId: "",
   appType: "",
+  supplierId: "",
   modelId: "",
   promptId: "",
   permitCount: undefined,
@@ -82,7 +120,7 @@ const initModalForm = {
 
 export default {
   name: "modifyOrgSet",
-  components: { NormalSelect, ModelSelect },
+  components: { NormalSelect },
   props: {
     instance: {
       type: Object,
@@ -98,17 +136,31 @@ export default {
     title() {
       return "大模型机构设置" + (this.isEdit ? "修改模型与提示词" : "新增");
     },
+    params1() {
+      return {
+        supplierId: this.modalForm.supplierId,
+      };
+    },
+    params2() {
+      return {
+        modelId: this.modalForm.modelId,
+        appType: this.modalForm.appType,
+      };
+    },
   },
   data() {
     return {
+      cueWordListQuery,
+      modelListQuery,
+      modelSupplierListQuery,
       appTypeList,
       orgQuery,
-      arrValue: [],
       modalIsShow: false,
       isSubmit: false,
       modalForm: {
         orgId: "",
         appType: "",
+        supplierId: "",
         modelId: "",
         promptId: "",
         permitCount: undefined,
@@ -127,12 +179,18 @@ export default {
             message: "请选择应用类型",
           },
         ],
-        // modelId: [
-        //   {
-        //     required: true,
-        //     message: "请选择模型",
-        //   },
-        // ],
+        supplierId: [
+          {
+            required: true,
+            message: "请选择供应商",
+          },
+        ],
+        modelId: [
+          {
+            required: true,
+            message: "请选择模型",
+          },
+        ],
         promptId: [
           {
             required: true,
@@ -155,23 +213,28 @@ export default {
     };
   },
   methods: {
-    promptChange(arr) {
-      this.modalForm.modelId = arr[1];
-      this.modalForm.promptId = arr[2];
+    supplierIdChange() {
+      this.modalForm.modelId = "";
+      this.$nextTick(() => {
+        this.$refs.modelSelectRef.search();
+      });
+    },
+    modelIdChange() {
+      this.modalForm.promptId = "";
+      setTimeout(() => {
+        this.$refs.promptSelectRef.search();
+      });
     },
     initData(val) {
       if (val.org) {
         this.modalForm = {
           orgId: val.org.id,
           appType: val.appType,
+          supplierId: val.supplier.id,
           modelId: val.model.id,
           promptId: val.promptTemplate.id,
-          permitCount: val.permitCount,
-          leftCount: val.leftCount,
         };
-        this.arrValue = [val.supplier.id, val.model.id, val.promptTemplate.id];
       } else {
-        this.arrValue = [];
         this.modalForm = { ...initModalForm };
       }
       this.$nextTick(() => {

+ 28 - 5
src/modules/admin/big-model/OrgSet/index.vue

@@ -66,21 +66,41 @@
               {{ scope.row.model.name }}
             </template>
           </el-table-column>
-          <el-table-column prop="supplier" label="模型供应商">
+          <el-table-column :min-width="100" prop="supplier" label="模型供应商">
             <template slot-scope="scope">
               {{ scope.row.supplier.name }}
             </template>
           </el-table-column>
-          <el-table-column prop="promptTemplate" label="提示词模板">
+          <el-table-column
+            :min-width="100"
+            prop="promptTemplate"
+            label="提示词模板"
+          >
             <template slot-scope="scope">
               {{ scope.row.promptTemplate.remark }}
             </template>
           </el-table-column>
-          <el-table-column prop="appType" label="应用类型"> </el-table-column>
+          <el-table-column prop="appType" label="应用类型">
+            <span slot-scope="scope">
+              {{ getAppTypeStr(scope.row.appType) }}
+            </span>
+          </el-table-column>
+          <el-table-column
+            :min-width="108"
+            prop="permitCount"
+            label="累计许可数量"
+          >
+          </el-table-column>
+          <el-table-column
+            :min-width="108"
+            prop="leftCount"
+            label="剩余许可数量"
+          >
+          </el-table-column>
           <el-table-column
             class-name="action-column"
             label="操作"
-            width="200"
+            width="210"
             fixed="right"
           >
             <template slot-scope="scope">
@@ -89,7 +109,7 @@
                 class="btn-primary"
                 type="text"
                 @click="toEdit(scope.row)"
-                >编辑</el-button
+                >切换模型</el-button
               >
               <el-button
                 class="btn-primary"
@@ -159,6 +179,9 @@ export default {
     getAppTypeOptions(arr) {
       this.appTypeOptions = arr;
     },
+    getAppTypeStr(code) {
+      return this.appTypeOptions.find((item) => item.code == code)?.name;
+    },
     cancel() {
       this.modalIsShow = false;
     },