3
0
刘洋 1 rok pred
rodič
commit
00dc32c434

+ 48 - 14
src/components/ModelSelect.vue

@@ -1,5 +1,6 @@
 <template>
   <el-cascader
+    :key="key"
     v-model="selected"
     :options="options"
     :props="attrs"
@@ -8,7 +9,11 @@
 </template>
 
 <script>
-import { modelSupplierListQuery } from "@/modules/admin/api.js";
+import {
+  modelSupplierListQuery,
+  modelListQuery,
+  cueWordListQuery,
+} from "@/modules/admin/api.js";
 export default {
   name: "ModelSelect",
   props: {
@@ -17,27 +22,49 @@ export default {
       default: 1,
     },
     value: {
-      type: [Number, String],
+      type: Array,
+    },
+    appType: {
+      type: String,
+      default: "",
     },
   },
   computed: {
     attrs() {
       const l = this.level;
+      let appType = this.appType;
       return l > 1
         ? {
             lazy: true,
             lazyLoad(node, resolve) {
               console.log("node", node);
-              return [];
-              // setTimeout(() => {
-              //   const nodes = Array.from({ length: level + 1 }).map((item) => ({
-              //     value: ++id,
-              //     label: `选项${id}`,
-              //     leaf: level >= l,
-              //   }));
-              //   // 通过调用resolve将子节点数据返回,通知组件数据加载完成
-              //   resolve(nodes);
-              // }, 1000);
+              const { level, data } = node;
+              if (level == 1) {
+                modelListQuery({ supplierId: data.value }).then((res) => {
+                  res = (res || []).map((item) => ({
+                    value: item.id,
+                    label: item.name,
+                    leaf: level == l - 1,
+                  }));
+                  resolve(res);
+                });
+              } else if (level == 2) {
+                if (appType) {
+                  cueWordListQuery({
+                    modelId: data.value,
+                    appType: appType,
+                  }).then((res) => {
+                    res = (res || []).map((item) => ({
+                      value: item.id,
+                      label: item.remark,
+                      leaf: level == l - 1,
+                    }));
+                    resolve(res);
+                  });
+                } else {
+                  resolve([]);
+                }
+              }
             },
           }
         : null;
@@ -47,10 +74,11 @@ export default {
     return {
       selected: "",
       options: [],
+      key: Math.random() + "",
     };
   },
   created() {
-    this.selected = this.value || "";
+    this.selected = this.value || [];
     modelSupplierListQuery().then((res) => {
       this.options = (res || []).map((item) => ({
         value: item.id,
@@ -64,11 +92,17 @@ export default {
         "input",
         this.selected?.length ? this.selected[this.selected.length - 1] : ""
       );
+      this.$emit("change", this.selected);
     },
   },
   watch: {
     value(val) {
-      this.selected = String(val);
+      this.selected = val;
+    },
+    appType() {
+      this.selected = [];
+      this.handleChange();
+      this.key = Math.random() + "";
     },
   },
 };

+ 18 - 13
src/components/AppTypeSelect.vue → src/components/NormalSelect.vue

@@ -1,7 +1,7 @@
 <template>
   <el-select
     v-model="selected"
-    class="app-type-select"
+    class="normal-select"
     :placeholder="placeholder"
     filterable
     :clearable="clearable"
@@ -10,25 +10,30 @@
   >
     <el-option
       v-for="item in optionList"
-      :key="item.code"
-      :value="item.code"
-      :label="item.name"
+      :key="item[valueStr]"
+      :value="item[valueStr]"
+      :label="item[labelStr]"
     >
     </el-option>
   </el-select>
 </template>
 
 <script>
-import { appTypeList } from "../modules/admin/api";
-
 export default {
-  name: "app-type-select",
+  name: "normal-select",
   props: {
     disabled: { type: Boolean, default: false },
-    placeholder: { type: String, default: "请选择应用类型" },
+    placeholder: { type: String, default: "请选择" },
     value: { type: [Number, String], default: "" },
     clearable: { type: Boolean, default: false },
     init: { type: Boolean, default: false },
+    func: {
+      type: Function,
+      default: () => {},
+    },
+    page: { type: Boolean, default: false },
+    valueStr: { type: String, default: "id" },
+    labelStr: { type: String, default: "name" },
   },
   data() {
     return {
@@ -50,12 +55,12 @@ export default {
   methods: {
     async search() {
       this.optionList = [];
-
-      const res = await appTypeList();
-      this.optionList = res || [];
+      let params = this.page ? { pageNumber: 1, pageSize: 10000 } : undefined;
+      const res = await this.func(params);
+      this.optionList = this.page ? res?.records || [] : res || [];
       this.$emit("getOptions", this.optionList);
-      if (this.init && res?.length) {
-        this.selected = res[0].code;
+      if (this.init && this.optionList?.length) {
+        this.selected = this.optionList[0][this.valueStr];
         this.select();
       }
     },

+ 17 - 0
src/modules/admin/api.js

@@ -328,3 +328,20 @@ export const cueWrdInsertOrUpdate = (datas) => {
     paramsSerializer: qsRepeatParams,
   });
 };
+
+export const orgSetListQuery = (params) => {
+  return $postParam("/api/admin/llm/org_config/query", params);
+};
+
+export const orgSetInsertOrUpdate = (datas, isEdit) => {
+  const url = isEdit
+    ? "/api/admin/llm/org_config/update/model_prompt"
+    : "/api/admin/llm/org_config/insert";
+  return $postParam(url, datas, {
+    paramsSerializer: qsRepeatParams,
+  });
+};
+
+export const orgSetAddCount = (datas) => {
+  return $postParam("/api/admin/llm/org_config/update/permit_count", datas);
+};

+ 28 - 9
src/modules/admin/big-model/ModelManage/CueWordTpl/ModifyTpl.vue

@@ -4,7 +4,7 @@
     :visible.sync="modalIsShow"
     :title="title"
     top="10vh"
-    width="600px"
+    width="1000px"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body
@@ -14,7 +14,7 @@
       ref="modalFormComp"
       :model="modalForm"
       :rules="rules"
-      label-width="180px"
+      label-width="280px"
     >
       <el-form-item prop="appType" label="应用类型:">
         <AppTypeSelect
@@ -22,17 +22,33 @@
           :disabled="isEdit"
         ></AppTypeSelect>
       </el-form-item>
-      <el-form-item prop="system" label="system角色提示词模版:">
+
+      <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-input
-          v-model.trim="modalForm.system"
-          placeholder="请输入system角色提示词模版"
+          v-model.trim="modalForm.user"
+          placeholder="请输入user角色提示词模版"
           clearable
         ></el-input>
       </el-form-item>
-      <el-form-item prop="user" label="user角色提示词模版:">
+
+      <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-input
-          v-model.trim="modalForm.user"
-          placeholder="请输入user角色提示词模版"
+          v-model.trim="modalForm.system"
+          placeholder="请输入system角色提示词模版"
           clearable
         ></el-input>
       </el-form-item>
@@ -55,7 +71,7 @@
 
 <script>
 import { cueWrdInsertOrUpdate } from "../../../api";
-import AppTypeSelect from "@/components/AppTypeSelect.vue";
+import AppTypeSelect from "@/components/NormalSelect.vue";
 
 const initModalForm = {
   id: "",
@@ -90,6 +106,7 @@ export default {
   },
   data() {
     return {
+      radioType: "user",
       modalIsShow: false,
       isSubmit: false,
       modalForm: {},
@@ -149,6 +166,8 @@ export default {
       this.isSubmit = true;
 
       const datas = { ...this.modalForm, modelId: this.modelId };
+      datas.system = datas.system || " ";
+      datas.user = datas.user || " ";
       if (this.isEdit) {
         delete datas.appType;
       }

+ 9 - 5
src/modules/admin/big-model/ModelManage/CueWordTpl/index.vue

@@ -13,11 +13,13 @@
       <div class="part-box part-box-filter part-box-flex">
         <el-form ref="FilterForm" label-position="left" inline>
           <el-form-item label="应用类型:">
-            <AppTypeSelect
+            <NormalSelect
               v-model="appType"
               :init="true"
               @getOptions="getAppTypeOptions"
-            ></AppTypeSelect>
+              :func="appTypeList"
+              valueStr="code"
+            ></NormalSelect>
           </el-form-item>
           <el-form-item label-width="0px">
             <el-button type="primary" @click="getList">查询</el-button>
@@ -69,12 +71,13 @@
 </template>
 
 <script>
-import { cueWordListQuery } from "../../../api";
-import AppTypeSelect from "@/components/AppTypeSelect.vue";
+import { cueWordListQuery, appTypeList } from "../../../api";
+import NormalSelect from "@/components/NormalSelect.vue";
+
 import ModifyTpl from "./ModifyTpl.vue";
 export default {
   name: "CueWordTpl",
-  components: { AppTypeSelect, ModifyTpl },
+  components: { NormalSelect, ModifyTpl },
   props: {
     curRow: {
       type: Object,
@@ -85,6 +88,7 @@ export default {
   },
   data() {
     return {
+      appTypeList,
       modalIsShow: false,
       loading: false,
       dataList: [],

+ 17 - 4
src/modules/admin/big-model/ModelSupplierManage.vue

@@ -11,9 +11,17 @@
         >新增</el-button
       >
       <span v-else></span>
-      <el-tooltip effect="dark" content="刷新" placement="bottom">
-        <el-button icon="el-icon-refresh-right" @click="getList"></el-button>
-      </el-tooltip>
+      <div>
+        <el-button
+          v-if="checkPrivilege('LLM_ORG_CONFIG_VIEW')"
+          type="primary"
+          @click="orgSet"
+          >机构设置</el-button
+        >
+        <el-tooltip effect="dark" content="刷新" placement="bottom">
+          <el-button icon="el-icon-refresh-right" @click="getList"></el-button>
+        </el-tooltip>
+      </div>
     </div>
     <div class="part-box part-box-pad">
       <el-table ref="TableList" :data="dataList" v-loading="loading">
@@ -64,6 +72,7 @@
       @modified="getList"
     ></modify-supplier>
     <ModelManage ref="ModelManage" :curRow="curRow"></ModelManage>
+    <OrgSet ref="OrgSet"></OrgSet>
   </div>
 </template>
 
@@ -71,10 +80,11 @@
 import { modelSupplierListQuery } from "../api";
 import ModifySupplier from "./ModifySupplier.vue";
 import ModelManage from "./ModelManage/index.vue";
+import OrgSet from "./OrgSet/index.vue";
 
 export default {
   name: "model-supplier",
-  components: { ModifySupplier, ModelManage },
+  components: { ModifySupplier, ModelManage, OrgSet },
   data() {
     return {
       dataList: [],
@@ -107,6 +117,9 @@ export default {
       this.curRow = row;
       this.$refs.ModelManage.open();
     },
+    orgSet() {
+      this.$refs.OrgSet.open();
+    },
   },
 };
 </script>

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

@@ -0,0 +1,149 @@
+<template>
+  <el-dialog
+    class="modify-org-set"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="500px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="110px"
+    >
+      <el-form-item prop="orgId" label="机构:">
+        <NormalSelect
+          v-model="modalForm.orgId"
+          placeholder="请选择机构"
+          :func="orgQuery"
+          page
+        ></NormalSelect>
+      </el-form-item>
+      <el-form-item prop="appType" label="应用类型:">
+        <NormalSelect
+          v-model="modalForm.appType"
+          :func="appTypeList"
+          valueStr="code"
+        ></NormalSelect>
+      </el-form-item>
+      <el-form-item prop="leftCount" label="增加次数:">
+        <el-input-number v-model="modalForm.count" :controls="false" />
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="danger" @click="cancel" plain>取消</el-button>
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { orgQuery, appTypeList, orgSetAddCount } from "../../api";
+import NormalSelect from "@/components/NormalSelect.vue";
+
+const initModalForm = {
+  orgId: "",
+  appType: "",
+  count: undefined,
+};
+
+export default {
+  name: "AddPermitCount",
+  components: { NormalSelect },
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  computed: {
+    title() {
+      return "增加许可次数";
+    },
+  },
+  data() {
+    return {
+      appTypeList,
+      orgQuery,
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: {
+        orgId: "",
+        appType: "",
+        count: undefined,
+      },
+      rules: {
+        orgId: [
+          {
+            required: true,
+            message: "请选择机构",
+          },
+        ],
+        appType: [
+          {
+            required: true,
+            message: "请选择应用类型",
+          },
+        ],
+        count: [
+          {
+            required: true,
+            message: "请输入",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    initData(val) {
+      if (val.org) {
+        this.modalForm = {
+          orgId: val.org.id,
+          appType: val.appType,
+          count: undefined,
+        };
+      } else {
+        this.arrValue = [];
+        this.modalForm = { ...initModalForm };
+      }
+      this.$nextTick(() => {
+        this.$refs.modalFormComp.clearValidate();
+      });
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+
+      const datas = { ...this.modalForm };
+      const data = await orgSetAddCount(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success("操作成功");
+      this.cancel();
+      this.$emit("modified");
+    },
+  },
+};
+</script>

+ 210 - 0
src/modules/admin/big-model/OrgSet/ModifyOrgSet.vue

@@ -0,0 +1,210 @@
+<template>
+  <el-dialog
+    class="modify-org-set"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="500px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="110px"
+    >
+      <el-form-item prop="orgId" label="机构:">
+        <NormalSelect
+          v-model="modalForm.orgId"
+          placeholder="请选择机构"
+          :func="orgQuery"
+          page
+        ></NormalSelect>
+      </el-form-item>
+      <el-form-item prop="appType" label="应用类型:">
+        <NormalSelect
+          v-model="modalForm.appType"
+          :func="appTypeList"
+          valueStr="code"
+        ></NormalSelect>
+      </el-form-item>
+      <el-form-item
+        prop="promptId"
+        label="提示词模板:"
+        v-if="modalForm.appType"
+      >
+        <ModelSelect
+          :level="3"
+          @change="promptChange"
+          :appType="modalForm.appType"
+        ></ModelSelect>
+      </el-form-item>
+      <el-form-item prop="permitCount" label="累计许可数量:">
+        <el-input-number
+          v-model="modalForm.permitCount"
+          :controls="false"
+          :disabled="isEdit"
+        />
+      </el-form-item>
+      <el-form-item prop="leftCount" label="剩余许可数量:">
+        <el-input-number
+          v-model="modalForm.leftCount"
+          :controls="false"
+          :disabled="isEdit"
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="danger" @click="cancel" plain>取消</el-button>
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { orgQuery, orgSetInsertOrUpdate, appTypeList } from "../../api";
+import NormalSelect from "@/components/NormalSelect.vue";
+import ModelSelect from "@/components/ModelSelect.vue";
+
+const initModalForm = {
+  orgId: "",
+  appType: "",
+  modelId: "",
+  promptId: "",
+  permitCount: undefined,
+  leftCount: undefined,
+};
+
+export default {
+  name: "modifyOrgSet",
+  components: { NormalSelect, ModelSelect },
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  computed: {
+    isEdit() {
+      return !!this.instance.org;
+    },
+    title() {
+      return "大模型机构设置" + (this.isEdit ? "修改模型与提示词" : "新增");
+    },
+  },
+  data() {
+    return {
+      appTypeList,
+      orgQuery,
+      arrValue: [],
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: {
+        orgId: "",
+        appType: "",
+        modelId: "",
+        promptId: "",
+        permitCount: undefined,
+        leftCount: undefined,
+      },
+      rules: {
+        orgId: [
+          {
+            required: true,
+            message: "请选择机构",
+          },
+        ],
+        appType: [
+          {
+            required: true,
+            message: "请选择应用类型",
+          },
+        ],
+        // modelId: [
+        //   {
+        //     required: true,
+        //     message: "请选择模型",
+        //   },
+        // ],
+        promptId: [
+          {
+            required: true,
+            message: "请选择提示词模板",
+          },
+        ],
+        permitCount: [
+          {
+            required: true,
+            message: "请输入累计许可数量",
+          },
+        ],
+        leftCount: [
+          {
+            required: true,
+            message: "请输入剩余许可数量",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    promptChange(arr) {
+      this.modalForm.modelId = arr[1];
+      this.modalForm.promptId = arr[2];
+    },
+    initData(val) {
+      if (val.org) {
+        this.modalForm = {
+          orgId: val.org.id,
+          appType: val.appType,
+          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(() => {
+        this.$refs.modalFormComp.clearValidate();
+      });
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+
+      const datas = { ...this.modalForm };
+      const data = await orgSetInsertOrUpdate(datas, this.isEdit).catch(
+        () => {}
+      );
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success((this.isEdit ? "修改" : "新增") + "成功!");
+      this.cancel();
+      this.$emit("modified");
+    },
+  },
+};
+</script>

+ 212 - 0
src/modules/admin/big-model/OrgSet/index.vue

@@ -0,0 +1,212 @@
+<template>
+  <div class="org-set">
+    <el-dialog
+      title="机构设置"
+      class="page-dialog"
+      :visible.sync="modalIsShow"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+      fullscreen
+      @opened="visibleChange"
+    >
+      <div class="part-box part-box-filter part-box-flex">
+        <el-form ref="FilterForm" label-position="left" inline>
+          <el-form-item label="机构:">
+            <NormalSelect
+              v-model="filter.orgId"
+              valueStr="code"
+              :func="orgQuery"
+              filterable
+              page
+              placeholder="请选择机构"
+            ></NormalSelect>
+          </el-form-item>
+          <el-form-item label="机构名称前缀:">
+            <el-input
+              style="width: 180px"
+              v-model.trim="filter.orgNameStartWith"
+              placeholder="机构名称前缀"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="应用类型:">
+            <NormalSelect
+              v-model="filter.appType"
+              :init="true"
+              @getOptions="getAppTypeOptions"
+              :func="appTypeList"
+              valueStr="code"
+              placeholder="请选择应用类型"
+            ></NormalSelect>
+          </el-form-item>
+          <el-form-item label-width="0px">
+            <el-button type="primary" @click="toPage(1)">查询</el-button>
+          </el-form-item>
+          <el-form-item label-width="0px">
+            <el-button
+              v-if="checkPrivilege('LLM_ORG_CONFIG_INSERT')"
+              type="success"
+              @click="toAdd"
+              >新增</el-button
+            >
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="part-box part-box-pad">
+        <el-table ref="TableList" :data="dataList" v-loading="loading">
+          <el-table-column prop="org" label="机构">
+            <template slot-scope="scope">
+              {{ scope.row.org.name }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="model" label="模型">
+            <template slot-scope="scope">
+              {{ scope.row.model.name }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="supplier" label="模型供应商">
+            <template slot-scope="scope">
+              {{ scope.row.supplier.name }}
+            </template>
+          </el-table-column>
+          <el-table-column 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
+            class-name="action-column"
+            label="操作"
+            width="200"
+            fixed="right"
+          >
+            <template slot-scope="scope">
+              <el-button
+                v-if="checkPrivilege('LLM_ORG_CONFIG_EDIT')"
+                class="btn-primary"
+                type="text"
+                @click="toEdit(scope.row)"
+                >编辑</el-button
+              >
+              <el-button
+                class="btn-primary"
+                type="text"
+                @click="addCount(scope.row)"
+                >增加许可次数</el-button
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="part-page">
+          <el-pagination
+            background
+            layout="total,prev, pager, next"
+            :current-page="current"
+            :total="total"
+            :page-size="size"
+            @current-change="toPage"
+          >
+          </el-pagination>
+        </div>
+      </div>
+    </el-dialog>
+    <ModifyOrgSet
+      :instance="curOrgSet"
+      ref="ModifyOrgSet"
+      @modified="toPage(1)"
+    ></ModifyOrgSet>
+    <AddCount
+      :instance="curOrgSet"
+      ref="AddCount"
+      @modified="toPage(1)"
+    ></AddCount>
+  </div>
+</template>
+
+<script>
+import { orgSetListQuery, orgQuery, appTypeList } from "../../api";
+import NormalSelect from "@/components/NormalSelect.vue";
+import ModifyOrgSet from "./ModifyOrgSet.vue";
+import AddCount from "./AddCount.vue";
+export default {
+  name: "OrgSet",
+  components: { NormalSelect, ModifyOrgSet, AddCount },
+  props: {},
+  data() {
+    return {
+      appTypeList,
+      orgQuery,
+      modalIsShow: false,
+      loading: false,
+      dataList: [],
+      curOrgSet: {},
+      filter: {
+        orgCode: "",
+        orgNameStartWith: "",
+        appType: "",
+        modelId: "",
+      },
+      appTypeOptions: [],
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+    };
+  },
+  methods: {
+    getAppTypeOptions(arr) {
+      this.appTypeOptions = arr;
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    getList() {
+      this.loading = true;
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      orgSetListQuery(datas).then((res) => {
+        this.dataList = res?.records || [];
+        this.total = res.total;
+        this.loading = false;
+      });
+    },
+    async visibleChange() {
+      if (this.filter.appType) {
+        this.getList();
+      }
+    },
+    toAdd() {
+      this.curOrgSet = {};
+      this.$refs.ModifyOrgSet.open();
+    },
+    toEdit(row) {
+      this.curOrgSet = row;
+      this.$refs.ModifyOrgSet.open();
+    },
+    addCount(row) {
+      this.curOrgSet = row;
+      this.$refs.AddCount.open();
+    },
+  },
+  watch: {
+    "filter.appType"(val) {
+      if (val) {
+        this.toPage(1);
+      }
+    },
+  },
+};
+</script>
+
+<style></style>