DESKTOP-NE65RNK\Citrus_limon 1 年之前
父节点
当前提交
7874fd37f5

+ 1 - 1
.env.development

@@ -1 +1 @@
-VITE_API_BASE_URL = "http://192.168.31.150:81"
+VITE_API_BASE_URL = "http://192.168.1.10:81"

+ 10 - 4
src/api/index.ts

@@ -93,6 +93,12 @@ export const get_exchange_list = (params: any, callback: any) => {
     if (data) callback && callback(data);
   });
 };
+// 交易所管理-交易所列表下拉
+export const get_exchange_list_all = (params: any, callback: any) => {
+  return http.request("/exchange/getList", "get", params).then((data) => {
+    if (data) callback && callback(data);
+  });
+};
 // 交易所管理-添加交易所
 export const add_exchange = (params: any, callback: any) => {
   return http.request("/exchange/save", "post", params).then((data) => {
@@ -120,25 +126,25 @@ export const delete_exchange = (params: any, callback: any) => {
 
 // ApiKey管理-Apikey列表
 export const get_apikey_list = (params: any, callback: any) => {
-  return http.request("/user-exchange-proof/getPage", "get", params).then((data) => {
+  return http.request("/userProof/getPage", "get", params).then((data) => {
     if (data) callback && callback(data);
   });
 };
 // ApiKey管理-添加Apikey
 export const add_apikey = (params: any, callback: any) => {
-  return http.request("/user-exchange-proof/save", "post", params).then((data) => {
+  return http.request("/userProof/save", "post", params).then((data) => {
     if (data) callback && callback(data);
   });
 };
 // ApiKey管理-修改Apikey
 export const update_apikey = (params: any, callback: any) => {
-  return http.request("/user-exchange-proof/update", "post", params).then((data) => {
+  return http.request("/userProof/update", "post", params).then((data) => {
     if (data) callback && callback(data);
   });
 };
 // ApiKey管理-删除Apikey
 export const delete_apikey = (params: any, callback: any) => {
-  return http.request("/user-exchange-proof/delete", "post", params).then((data) => {
+  return http.request("/userProof/delete", "post", params).then((data) => {
     if (data) callback && callback(data);
   });
 };

+ 2 - 0
src/assets/css/index.scss

@@ -5,6 +5,8 @@
   --button-warm-color: #ffb800;
   --button-danger-color: #ff5722;
   --button-checked-color: #16b777;
+  --primary-color: rgb(28, 175, 131);
+  --danger-color: #ff5722;
 }
 
 * {

+ 79 - 28
src/components/DragUpload.vue

@@ -1,44 +1,95 @@
 <template>
-  <lay-upload :url="uploadUrl" :drag="true" :headers="headers" :beforeUpload="handleUpload" @done="handleUploadDone" />
+  <div>
+    <lay-upload :url="uploadUrl" :drag="true" :status="status" :headers="headers" :beforeUpload="handleBeforeUpload" @done="handleUploadDone" @error="handleUploadError" />
+    <div>
+      <div class="status_wp">
+        <lay-space>
+          <span>{{ fileName }}</span>
+          <lay-icon v-if="status == 1" class="layui-anim layui-anim-rotate layui-anim-loop" type="layui-icon-loading" />
+          <lay-icon v-if="status == 2" class="success" type="layui-icon-success" />
+          <lay-icon v-if="status == 3" class="error" type="layui-icon-error" />
+        </lay-space>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script lang="ts" setup>
-import { ref } from "vue";
-const uploadUrl = `${import.meta.env.VITE_API_BASE_URL}/client/upload`;
+import { ref, watch, getCurrentInstance } from "vue";
+
+const { proxy }: any = getCurrentInstance();
+
+const emit = defineEmits();
+
+const props = defineProps({
+  modelValue: String,
+  status: Number,
+  url: {
+    type: String,
+    default: `${import.meta.env.VITE_API_BASE_URL}/client/upload`,
+  },
+  beforeUpload: Function,
+  uploadDone: Function,
+});
+
+watch(
+  () => props.status,
+  (value) => {
+    updataStatus(value || 0);
+  }
+);
+
+const status = ref(0);
+const fileName = ref();
+const uploadUrl = props.url;
 const headers = {
   auth: "4L",
   Token: window.sessionStorage.getItem("_4L_TOKEN") || "",
 };
 const uploadValue = ref();
 
-const props = defineProps({
-  modelValue: String,
-});
 uploadValue.value = props.modelValue;
 
-let pemContent = ref()
-
-const handleUpload = (file: File) => {
-  const reader = new FileReader();
-  console.log("file",file); // 当文件读取操作完成后触发的事件
-  reader.onload = (event) => {
-    if (event.target?.result) {
-      pemContent.value = event.target.result as string;
-      console.log(pemContent.value)
-    }
-  };
-
-  // 当文件读取发生错误时触发的事件
-  reader.onerror = (event) => {
-    console.error("Error reading file:", reader.error);
-  };
-
-  // 读取文件内容作为文本
-  reader.readAsText(file);
+// 上传前处理方法
+const handleBeforeUpload = (file: File) => {
+  updataStatus(1);
+  let isUpload = true;
+  fileName.value = file.name;
+  if (typeof props.beforeUpload === "function")
+    isUpload = props.beforeUpload(file, (value: number) => {
+      updataStatus(value);
+    });
+  return isUpload;
 };
+
+// 上传结束回调
 const handleUploadDone = (e: any) => {
-  // console.log(JSON.parse(e.data).data);
-  uploadValue.value = JSON.parse(e.data).data;
-  // defineEmits({"change",JSON.parse(e.data).data;});
+  let result = JSON.parse(e.data);
+  if (JSON.parse(e.data).code != 200) {
+    proxy.$message(`${result.msg}`, 2);
+    return updataStatus(3);
+  }
+  emit("update:modelValue", JSON.parse(e.data).data);
+  updataStatus(2);
+};
+
+// 上传失败回调
+const handleUploadError = () => {
+  uploadValue.value = undefined;
+  updataStatus(3);
+};
+const updataStatus = (value: number) => {
+  status.value = value;
 };
 </script>
+
+<style lang="scss" scoped>
+.status_wp {
+  .success {
+    color: var(--primary-color);
+  }
+  .error {
+    color: var(--danger-color);
+  }
+}
+</style>

+ 52 - 4
src/views/exchange/apikey/components/Batch.vue

@@ -9,10 +9,27 @@
       <div class="tips_wp">
         <div class="tips">一行一个,空格分割,格式:交易所 名称 Api Key Pass</div>
         <div class="tips">推荐用XLS表格弄好直接复制进去~</div>
-        <div class="tips danger">交易所请注意大小写!!支持列表:Binance,OKEx,CoinEx,Gate,KucoinFutures,KucoinSpot,Bitget,Bybit,MXC,Huobi</div>
+        <div class="tips danger">
+          交易所请注意大小写!!支持列表:
+          <lay-space>
+            <span v-for="item in exchangeList">"{{ item.code }}"</span>
+          </lay-space>
+        </div>
       </div>
       <div class="run_wp">
-        <lay-button type="primary">运 行</lay-button>
+        <lay-button type="primary" @click="handleRun()">运 行</lay-button>
+      </div>
+      <div>
+        <div v-for="item in addResultList">
+          <lay-space>
+            <span>{{ exchangeList.find((exchagne: any) => exchagne.exchangeId == item.exchangeId)?.name }}</span>
+            <span>{{ item.name }}</span>
+            <span>{{ item.api }}</span>
+            <span>{{ item.key }}</span>
+            <span>{{ item.pass }}</span>
+            <span :class="item.status == 1 ? 'primary_color' : 'danger_color'">{{ item.status == 1 ? "添加成功" : "添加失败" }}</span>
+          </lay-space>
+        </div>
       </div>
     </div>
   </lay-layer>
@@ -20,7 +37,7 @@
 
 <script lang="ts" setup>
 import { ref, reactive, getCurrentInstance } from "vue";
-import { add_exchange } from "@/api";
+import { add_apikey, get_exchange_list_all } from "@/api";
 
 const { proxy }: any = getCurrentInstance();
 
@@ -39,7 +56,11 @@ let modelConfig: ModelConfig = reactive({ title: "", visible: false, isUpdate: f
 
 let handleResult = reactive<{ resolve?: any; reject?: any }>({});
 
+let exchangeList = ref();
+let addResultList = ref();
+
 const show = () => {
+  getExchagneList();
   modelConfig.visible = true;
   modelConfig.title = "批量添加ApiKey";
   return new Promise(async (resolve, reject) => {
@@ -48,12 +69,23 @@ const show = () => {
   });
 };
 
+// 获取交易所下拉
+const getExchagneList = () => {
+  get_exchange_list_all({}, (data: any) => {
+    if (data.code == 200) {
+      exchangeList.value = data.data;
+    }
+  });
+};
+
 const handleInfo = (value: string) => {
   const list = value.split(/\n+/);
   let result = list.map((item: any) => {
     const data = item.split(/\s+/);
+    const exchangeInfo = exchangeList.value.find((items: any) => data[0] == items.code);
+    if (!exchangeInfo) return proxy.$message("请确认交易所是否正确!");
     return {
-      exchange: data[0],
+      exchangeId: exchangeInfo.exchangeId,
       name: data[1],
       api: data[2],
       key: data[3],
@@ -62,6 +94,16 @@ const handleInfo = (value: string) => {
   });
   return result;
 };
+const handleRun = () => {
+  const params = handleInfo(modelParams.value.info || "");
+  modelConfig.loading = true;
+  add_apikey(params, (data: any) => {
+    modelConfig.loading = false;
+    if (data.code == 200) {
+      addResultList.value.push(data.data);
+    }
+  });
+};
 defineExpose({ show });
 </script>
 <style lang="scss" scoped>
@@ -76,4 +118,10 @@ defineExpose({ show });
 .run_wp {
   padding: 10px 0;
 }
+.primary_color {
+  color: var(--primary-color);
+}
+.danger_color {
+  color: var(--danger-color);
+}
 </style>

+ 33 - 17
src/views/exchange/apikey/components/Update.vue

@@ -3,19 +3,21 @@
     <div style="padding: 20px">
       <lay-form :model="modelParams" ref="modelFormRef" required>
         <lay-form-item label="交易所名称" prop="exchangeId">
-          <lay-input v-model="modelParams.exchangeId" />
+          <lay-select v-model="modelParams.exchangeId">
+            <lay-select-option v-for="item in exchangeList" :value="item.exchangeId" :label="item.name" />
+          </lay-select>
         </lay-form-item>
-        <lay-form-item label="ApiKey名称" prop="code">
-          <lay-input v-model="modelParams.code" />
+        <lay-form-item label="ApiKey名称" prop="name">
+          <lay-input v-model="modelParams.name" />
         </lay-form-item>
-        <lay-form-item label="Api" prop="code">
-          <lay-input v-model="modelParams.code" />
+        <lay-form-item label="Api" prop="api">
+          <lay-input v-model="modelParams.api" />
         </lay-form-item>
-        <lay-form-item label="Key" prop="code">
-          <lay-input v-model="modelParams.code" />
+        <lay-form-item label="Key" prop="key">
+          <lay-input v-model="modelParams.key" />
         </lay-form-item>
-        <lay-form-item label="Pass" prop="code">
-          <lay-input v-model="modelParams.code" />
+        <lay-form-item label="Pass" prop="pass">
+          <lay-input v-model="modelParams.pass" />
         </lay-form-item>
         <lay-form-item label="备注" prop="remark">
           <lay-textarea placeholder="请输入备注" v-model="modelParams.remark" />
@@ -27,7 +29,7 @@
 
 <script lang="ts" setup>
 import { ref, reactive, getCurrentInstance } from "vue";
-import { add_exchange, update_exchange} from "@/api";
+import { add_apikey, update_apikey, get_exchange_list_all } from "@/api";
 
 const { proxy }: any = getCurrentInstance();
 
@@ -40,7 +42,9 @@ interface ModelConfig {
 interface ModelParams {
   exchangeId?: string;
   name?: string;
-  code?: string;
+  api?: string;
+  key?: string;
+  pass?: string;
   remark?: string;
 }
 
@@ -49,25 +53,37 @@ let modelConfig: ModelConfig = reactive({ title: "", visible: false, isUpdate: f
 
 let handleResult = reactive<{ resolve?: any; reject?: any }>({});
 
+let exchangeList = ref();
+
 const show = (params?: any) => {
+  getExchagneList();
   modelConfig.visible = true;
   modelConfig.isUpdate = !!params;
-  modelConfig.title = modelConfig.isUpdate ? "编辑交易所" : "添加交易所";
-  modelParams.value = modelConfig.isUpdate ? { ...params } : { status: 1 };
+  modelConfig.title = modelConfig.isUpdate ? "编辑ApiKey" : "添加ApiKey";
+  modelParams.value = modelConfig.isUpdate ? { ...params } : {};
   return new Promise(async (resolve, reject) => {
     handleResult.resolve = resolve;
     handleResult.reject = reject;
   });
 };
 
+// 获取交易所下拉
+const getExchagneList = () => {
+  get_exchange_list_all({}, (data: any) => {
+    if (data.code == 200) {
+      exchangeList.value = data.data;
+    }
+  });
+};
+
 const operator = reactive([
   {
     text: "确认",
     callback: () => {
       modelConfig.loading = true;
       if (modelConfig.isUpdate) {
-        const params = { ...modelParams.value };
-        update_exchange(params, (data: any) => {
+        const params = [{ ...modelParams.value }];
+        update_apikey(params, (data: any) => {
           modelConfig.loading = false;
           if (data.code == 200) {
             proxy.$message("编辑成功!");
@@ -76,8 +92,8 @@ const operator = reactive([
           }
         });
       } else {
-        const params = { ...modelParams.value };
-        add_exchange(params, (data: any) => {
+        const params = [{ ...modelParams.value }];
+        add_apikey(params, (data: any) => {
           modelConfig.loading = false;
           if (data.code == 200) {
             proxy.$message("添加成功!");

+ 8 - 8
src/views/exchange/apikey/index.vue

@@ -70,14 +70,14 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "名称", width: "80px", key: "name", sort: "desc" },
-  { title: "ApiKey", width: "80px", key: "account", sort: "desc" },
-  { title: "API", width: "80px", key: "account", sort: "desc" },
-  { title: "KEY", width: "80px", key: "account", sort: "desc" },
-  { title: "PASS", width: "80px", key: "account", sort: "desc" },
+  { title: "名称", width: "80px", key: "name" },
+  { title: "ApiKey", width: "80px", key: "name" },
+  { title: "API", width: "80px", key: "api" },
+  { title: "KEY", width: "80px", key: "key" },
+  { title: "PASS", width: "80px", key: "pass" },
   { title: "备注", width: "80px", key: "remark", ellipsisTooltip: true },
-  { title: "更新时间", width: "80px", key: "account", sort: "desc" },
-  { title: "创建时间", width: "80px", key: "account", sort: "desc" },
+  { title: "更新时间", width: "80px", key: "updateTime" },
+  { title: "创建时间", width: "80px", key: "creationTime" },
   {
     title: "操作",
     width: "150px",
@@ -116,7 +116,7 @@ const handleBatch = async () => {
 const handleDelete = async (value: any) => {
   let result = await proxy.$waitingConfirm("是否确认删除该ApiKey?");
   if (!result) return;
-  let params = [value.userId];
+  let params = [value.userProofId];
   pageConfig.loading = true;
   delete_apikey(params, (data: any) => {
     pageConfig.loading = false;

+ 10 - 3
src/views/exchange/manage/components/Update.vue

@@ -15,7 +15,7 @@
 
 <script lang="ts" setup>
 import { ref, reactive, getCurrentInstance } from "vue";
-import { add_exchange, update_exchange} from "@/api";
+import { add_exchange, update_exchange } from "@/api";
 
 const { proxy }: any = getCurrentInstance();
 
@@ -53,7 +53,11 @@ const operator = reactive([
     callback: () => {
       modelConfig.loading = true;
       if (modelConfig.isUpdate) {
-        const params = { ...modelParams.value };
+        const params = {
+          exchangeId: modelParams.value.exchangeId,
+          name: modelParams.value.name?.trim(),
+          code: modelParams.value.code?.trim(),
+        };
         update_exchange(params, (data: any) => {
           modelConfig.loading = false;
           if (data.code == 200) {
@@ -63,7 +67,10 @@ const operator = reactive([
           }
         });
       } else {
-        const params = { ...modelParams.value };
+        const params = {
+          name: modelParams.value.name?.trim(),
+          code: modelParams.value.code?.trim(),
+        };
         add_exchange(params, (data: any) => {
           modelConfig.loading = false;
           if (data.code == 200) {

+ 2 - 2
src/views/exchange/manage/index.vue

@@ -73,8 +73,8 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "名称", width: "80px", key: "name", sort: "desc" },
-  { title: "编码", width: "80px", key: "code", sort: "desc" },
+  { title: "名称", width: "80px", key: "name" },
+  { title: "编码", width: "80px", key: "code" },
   { title: "状态", width: "80px", key: "status", customSlot: "status" },
   {
     title: "操作",

+ 4 - 4
src/views/quant/manage/components/Version.vue

@@ -60,9 +60,9 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "版本名称", key: "name", sort: "desc" },
-  { title: "存储路径", key: "path", sort: "desc" },
-  { title: "状态", key: "status", customSlot: "status", sort: "desc" },
+  { title: "版本名称", key: "name" },
+  { title: "存储路径", key: "path" },
+  { title: "状态", key: "status", customSlot: "status" },
   { title: "备注", key: "remark" },
   {
     title: "操作",
@@ -141,4 +141,4 @@ const handleCurrentChange = (val: any) => {
   getPageInfo();
 };
 defineExpose({ show });
-</script>
+</script>

+ 1 - 1
src/views/quant/manage/index.vue

@@ -74,7 +74,7 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "策略名称", width: "80px", key: "name", sort: "desc" },
+  { title: "策略名称", width: "80px", key: "name" },
   { title: "备注", width: "80px", key: "remark", ellipsisTooltip: true },
   {
     title: "操作",

+ 4 - 4
src/views/server/command/index.vue

@@ -66,11 +66,11 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "名称", width: "80px", key: "title", sort: "desc" },
-  { title: "CODE", width: "80px", key: "code", sort: "desc" },
-  { title: "系统类型", width: "80px", key: "typeName", sort: "desc" },
+  { title: "名称", width: "80px", key: "title" },
+  { title: "CODE", width: "80px", key: "code" },
+  { title: "系统类型", width: "80px", key: "typeName" },
   { title: "描述", width: "80px", key: "remark", ellipsisTooltip: true },
-  { title: "更新时间", width: "80px", key: "updateTime", sort: "desc" },
+  { title: "更新时间", width: "80px", key: "updateTime" },
   {
     title: "操作",
     width: "150px",

+ 6 - 6
src/views/server/command_record/index.vue

@@ -61,13 +61,13 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "名称", width: "80px", key: "name", sort: "desc" },
-  { title: "服务器", width: "80px", key: "account", sort: "desc" },
+  { title: "名称", width: "80px", key: "name" },
+  { title: "服务器", width: "80px", key: "account" },
   { title: "状态", width: "80px", key: "status", customSlot: "status" },
-  { title: "执行CODE", width: "80px", key: "account", sort: "desc" },
-  { title: "系统类型", width: "80px", key: "account", sort: "desc" },
-  { title: "执行时间", width: "80px", key: "account", sort: "desc" },
-  { title: "执行人", width: "80px", key: "account", sort: "desc" },
+  { title: "执行CODE", width: "80px", key: "account" },
+  { title: "系统类型", width: "80px", key: "account" },
+  { title: "执行时间", width: "80px", key: "account" },
+  { title: "执行人", width: "80px", key: "account" },
   {
     title: "操作",
     width: "150px",

+ 3 - 3
src/views/server/manage/components/Pem.vue

@@ -59,9 +59,9 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "版本名称", key: "name", sort: "desc" },
-  { title: "存储路径", key: "path", sort: "desc" },
-  { title: "状态", key: "status", customSlot: "status", sort: "desc" },
+  { title: "版本名称", key: "name" },
+  { title: "存储路径", key: "path" },
+  { title: "状态", key: "status", customSlot: "status" },
   { title: "备注", key: "remark" },
   {
     title: "操作",

+ 24 - 1
src/views/server/manage/components/UpdatePem.vue

@@ -6,7 +6,7 @@
           <lay-input v-model="modelParams.title" />
         </lay-form-item>
         <lay-form-item label="PEM" prop="path">
-          <DragUpload v-model="modelParams.path" />
+          <DragUpload v-model="modelParams.path" :status="uploadStatus" :beforeUpload="handleUpload" />
         </lay-form-item>
         <lay-form-item label="备注" prop="textarea">
           <lay-textarea v-model="modelParams.remake" />
@@ -36,6 +36,7 @@ interface ModelParams {
   remake?: string;
 }
 
+let uploadStatus = ref(0);
 let modelParams = ref<ModelParams>({});
 let modelConfig: ModelConfig = reactive({ title: "", visible: false, isUpdate: false, loading: false });
 
@@ -52,6 +53,28 @@ const show = (params?: any) => {
   });
 };
 
+let pemContent = ref();
+const handleUpload = (file: File, updateStatus: Function) => {
+  const reader = new FileReader();
+  console.log("file", file); // 当文件读取操作完成后触发的事件
+  reader.onload = (event) => {
+    if (event.target?.result) {
+      pemContent.value = event.target.result as string;
+      console.log(pemContent.value);
+    }
+  };
+
+  // 当文件读取发生错误时触发的事件
+  reader.onerror = () => {
+    console.error("Error reading file:", reader.error);
+  };
+
+  // 读取文件内容作为文本
+  reader.readAsText(file);
+  updateStatus(2);
+  return false;
+};
+
 const operator = reactive([
   {
     text: "确认",

+ 4 - 4
src/views/server/manage/index.vue

@@ -79,12 +79,12 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "名称", width: "80px", key: "name", sort: "desc" },
-  { title: "IP", width: "80px", key: "account", sort: "desc" },
-  { title: "端口号", width: "80px", key: "account", sort: "desc" },
+  { title: "名称", width: "80px", key: "name" },
+  { title: "IP", width: "80px", key: "account" },
+  { title: "端口号", width: "80px", key: "account" },
   { title: "状态", width: "80px", key: "status", customSlot: "status" },
   { title: "备注", width: "80px", key: "remark", ellipsisTooltip: true },
-  { title: "更新时间", width: "80px", key: "account", sort: "desc" },
+  { title: "更新时间", width: "80px", key: "account" },
   {
     title: "操作",
     width: "150px",

+ 3 - 3
src/views/system/organization/index.vue

@@ -72,9 +72,9 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "组织名称", width: "80px", key: "groupName", sort: "desc" },
-  { title: "组织编码", width: "80px", key: "code", sort: "desc" },
-  { title: "状态", width: "80px", key: "status", customSlot: "status", sort: "desc" },
+  { title: "组织名称", width: "80px", key: "groupName"  },
+  { title: "组织编码", width: "80px", key: "code"  },
+  { title: "状态", width: "80px", key: "status", customSlot: "status"  },
   { title: "说明", width: "80px", key: "describe", ellipsisTooltip: true },
   {
     title: "操作",

+ 4 - 4
src/views/system/user/index.vue

@@ -65,7 +65,7 @@ interface FormItem {
   pageSize?: Number;
   name?: String;
 }
-const pageParams: FormItem = reactive({ pageNum: 1, pageSize: 10});
+const pageParams: FormItem = reactive({ pageNum: 1, pageSize: 10 });
 
 interface TablePage {
   current: number;
@@ -74,9 +74,9 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "昵称", width: "80px", key: "name", sort: "desc" },
-  { title: "账号", width: "80px", key: "account", sort: "desc" },
-  { title: "组织", width: "80px", key: "groupNames", customSlot: "groupNames", sort: "desc", ellipsisTooltip: true },
+  { title: "昵称", width: "80px", key: "name" },
+  { title: "账号", width: "80px", key: "account" },
+  { title: "组织", width: "80px", key: "groupNames", customSlot: "groupNames", ellipsisTooltip: true },
   { title: "状态", width: "80px", key: "status", customSlot: "status" },
   { title: "备注", width: "80px", key: "remark", ellipsisTooltip: true },
   {

+ 2 - 2
src/views/system/webpage/components/Operator.vue

@@ -59,8 +59,8 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "操作", key: "name", sort: "desc" },
-  { title: "类型", key: "menuType", customSlot: "menuType", sort: "desc" },
+  { title: "操作", key: "name" },
+  { title: "类型", key: "menuType", customSlot: "menuType" },
   {
     title: "操作",
     width: "300px",

+ 2 - 2
src/views/system/webpage/index.vue

@@ -62,8 +62,8 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "页面名称", key: "name", sort: "desc" },
-  { title: "类型", key: "menuType", customSlot: "menuType", sort: "desc" },
+  { title: "页面名称", key: "name" },
+  { title: "类型", key: "menuType", customSlot: "menuType" },
   {
     title: "操作",
     width: "300px",