Ver Fonte

Merge branch 'main' of https://git.bzvs.cn/pay/pay-ui

samir há 4 meses atrás
pai
commit
12ec97d306
43 ficheiros alterados com 992 adições e 302 exclusões
  1. 16 7
      admin-ui/src/api/order/index.ts
  2. 1 1
      admin-ui/src/components/ReIcon/src/Select.vue
  3. 1 1
      admin-ui/src/layout/components/notice/noticeItem.vue
  4. 1 1
      admin-ui/src/layout/components/setting/index.vue
  5. 3 3
      admin-ui/src/views/agent/modules/edit.vue
  6. 2 2
      admin-ui/src/views/agent/modules/list.vue
  7. 1 1
      admin-ui/src/views/business/template/hook/template-edit.vue
  8. 2 2
      admin-ui/src/views/business/template/hook/template-list.vue
  9. 2 2
      admin-ui/src/views/merchant/modules/edit.vue
  10. 2 2
      admin-ui/src/views/merchant/modules/list.vue
  11. 2 2
      admin-ui/src/views/order/edit.vue
  12. 7 2
      admin-ui/src/views/order/index.vue
  13. 303 0
      admin-ui/src/views/ordertotal/index.vue
  14. 2 2
      admin-ui/src/views/paytest/modules/edit.vue
  15. 3 3
      admin-ui/src/views/platform/index.vue
  16. 4 5
      admin-ui/src/views/platform/modules/edit.vue
  17. 2 2
      admin-ui/src/views/platform/modules/list.vue
  18. 66 22
      admin-ui/src/views/welcome/index.vue
  19. 12 0
      agent-ui/src/api/auth/routes.ts
  20. 4 25
      agent-ui/src/api/order/index.ts
  21. 1 1
      agent-ui/src/components/ReIcon/src/Select.vue
  22. 1 1
      agent-ui/src/layout/components/notice/noticeItem.vue
  23. 1 1
      agent-ui/src/layout/components/setting/index.vue
  24. 1 1
      agent-ui/src/views/business/template/hook/template-edit.vue
  25. 2 2
      agent-ui/src/views/business/template/hook/template-list.vue
  26. 9 19
      agent-ui/src/views/channel/modules/edit.vue
  27. 13 22
      agent-ui/src/views/channel/modules/list.vue
  28. 3 3
      agent-ui/src/views/merchant/modules/edit.vue
  29. 2 2
      agent-ui/src/views/merchant/modules/list.vue
  30. 2 2
      agent-ui/src/views/order/edit.vue
  31. 70 65
      agent-ui/src/views/order/index.vue
  32. 304 0
      agent-ui/src/views/ordertotal/index.vue
  33. 11 0
      merchant-ui/src/api/channel/index.ts
  34. 1 1
      merchant-ui/src/components/ReIcon/src/Select.vue
  35. 1 1
      merchant-ui/src/layout/components/notice/noticeItem.vue
  36. 1 1
      merchant-ui/src/layout/components/setting/index.vue
  37. 1 1
      merchant-ui/src/views/business/template/hook/template-edit.vue
  38. 2 2
      merchant-ui/src/views/business/template/hook/template-list.vue
  39. 3 3
      merchant-ui/src/views/order/edit.vue
  40. 71 68
      merchant-ui/src/views/order/index.vue
  41. 48 13
      merchant-ui/src/views/paytest/index.vue
  42. 7 7
      merchant-ui/src/views/paytest/modules/edit.vue
  43. 1 1
      merchant-ui/src/views/welcome/index.vue

+ 16 - 7
admin-ui/src/api/order/index.ts

@@ -37,13 +37,14 @@ export function update<T>(id: string, data: any): Promise<Result<T>> {
   return put(`/sys/pay/order/update/${id}`, {}, data);
 }
 
+
 /**
- * 删除用户
- * @param userIds .
- * @returns  .
+ * 订单统计
+ * @param query .
+ * @returns .
  */
-export function del<T>(userIds: string[]): Promise<Result<T>> {
-  return deleteRequest(`/sys/pay/order/remove`, {}, userIds);
+export function orderTotal<T>(query?: any): Promise<Result<T>> {
+  return get("/sys/pay/order/orderTotal", query);
 }
 
 
@@ -57,8 +58,6 @@ export function queryPayStatus<T>(id: string): Promise<Result<T>> {
 }
 
 
-
-
 /**
  * 订单回调
  * @param id .
@@ -67,3 +66,13 @@ export function queryPayStatus<T>(id: string): Promise<Result<T>> {
 export function orderCallback<T>(id: string): Promise<Result<T>> {
   return get(`/sys/pay/order/callback/${id}`,{});
 }
+
+
+/**
+ * 首页统计
+ * @param id .
+ * @returns  .
+ */
+export function total<T>(): Promise<Result<T>> {
+  return get(`/sys/pay/order/total`);
+}

+ 1 - 1
admin-ui/src/components/ReIcon/src/Select.vue

@@ -202,7 +202,7 @@ watch(
             <el-button
               class="justify-end mr-2 ml-2"
               type="danger"
-              size="small"
+              size="default"
               text
               bg
               @click="onClear"

+ 1 - 1
admin-ui/src/layout/components/notice/noticeItem.vue

@@ -78,7 +78,7 @@ function hoverDescription(event, description) {
         <el-tag
           v-if="props.noticeItem?.extra"
           :type="props.noticeItem?.status"
-          size="small"
+          size="default"
           class="notice-title-extra"
         >
           {{ props.noticeItem?.extra }}

+ 1 - 1
admin-ui/src/layout/components/setting/index.vue

@@ -378,7 +378,7 @@ onBeforeMount(() => {
 
       <li>
         <span class="dark:text-white">标签风格</span>
-        <el-radio-group v-model="markValue" size="small" @change="onChange">
+        <el-radio-group v-model="markValue" size="default" @change="onChange">
           <el-radio label="card">卡片</el-radio>
           <el-radio label="smart">灵动</el-radio>
         </el-radio-group>

+ 3 - 3
admin-ui/src/views/agent/modules/edit.vue

@@ -134,7 +134,7 @@ defineExpose({open});
               v-model="pageData.formData.userName"
               clearable
               placeholder="请输入名称"
-              size="small"
+              size="default"
               :readonly="pageData.formData.id != null"
           />
         </el-form-item>
@@ -144,7 +144,7 @@ defineExpose({open});
               type="password"
               clearable
               placeholder="请输入密码"
-              size="small"
+              size="default"
               :readonly="isDetail"
           />
         </el-form-item>
@@ -153,7 +153,7 @@ defineExpose({open});
             v-model="pageData.formData.rate"
             clearable
             placeholder="请输入费率"
-            size="small"
+            size="default"
           />‰
         </el-form-item>
         <el-form-item label="状态" prop="password">

+ 2 - 2
admin-ui/src/views/agent/modules/list.vue

@@ -314,7 +314,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -335,7 +335,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 1 - 1
admin-ui/src/views/business/template/hook/template-edit.vue

@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.username"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 2 - 2
admin-ui/src/views/business/template/hook/template-list.vue

@@ -290,7 +290,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -311,7 +311,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 2 - 2
admin-ui/src/views/merchant/modules/edit.vue

@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.userName"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>
@@ -139,7 +139,7 @@ defineExpose({ open });
             type="password"
             clearable
             placeholder="请输入密码"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 2 - 2
admin-ui/src/views/merchant/modules/list.vue

@@ -306,7 +306,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -327,7 +327,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 2 - 2
admin-ui/src/views/order/edit.vue

@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.userName"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>
@@ -139,7 +139,7 @@ defineExpose({ open });
             type="password"
             clearable
             placeholder="请输入密码"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 7 - 2
admin-ui/src/views/order/index.vue

@@ -121,6 +121,11 @@ const pageData: any = reactive({
         prop: "platformOrderNo",
         slot: "platformOrderNo"
       },
+      {
+        label: "商户名称",
+        prop: "channelName",
+        slot: "channelName"
+      },
       {
         label: "金额",
         prop: "amount",
@@ -333,7 +338,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -354,7 +359,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 303 - 0
admin-ui/src/views/ordertotal/index.vue

@@ -0,0 +1,303 @@
+<script setup lang="ts">
+import FormSearch, { type FormField } from "@/components/opts/form-search.vue";
+import TableButtons from "@/components/opts/btns2.vue";
+import Edit from "./edit.vue";
+import { PureTable } from "@pureadmin/table";
+import { computed, onBeforeMount, onMounted, reactive, ref, watch } from "vue";
+import * as $api from "@/api/order/index";
+import * as $agentApi from "@/api/agent/index";
+
+const editRef = ref();
+
+defineOptions({
+  name: "orderList"
+});
+
+const props: any = defineProps({
+  mode: {
+    required: false,
+    type: String,
+    default: "table"
+  }
+});
+
+const searchFormFields = computed((): FormField[] => {
+  const fields: FormField[] = [
+    {
+      type: "select",
+      label: "代理商",
+      prop: "agentId",
+      placeholder: "请选择",
+      dataSourceKey: "merchantOptions",
+      options: {
+        keys: {
+          label: "userName",
+          value: "id",
+          prop: "id"
+        },
+        filterable: true
+      }
+    }
+  ];
+  if (props.mode === "table") {
+    return fields;
+  } else {
+    return fields;
+  }
+});
+
+const pageData: any = reactive({
+  mode: "table",
+  permission: {
+    // query: ["user:query"],
+    // save: ["user:save"],
+    // update: ["user:update"],
+    // del: ["user:del"]
+  },
+  searchParam: {
+    searchState: true,
+    searchForm: {}
+  },
+  dataSource: {
+    merchantOptions: []
+  },
+  /*按钮 */
+  btnOpts: {
+    leftBtns: [],
+    rightBtns: [
+      {
+        key: "search",
+        label: "查询",
+        icon: "ep:search",
+        state: true,
+        options: {
+          circle: true
+        }
+      },
+      {
+        key: "refresh",
+        label: "刷新",
+        icon: "ep:refresh",
+        state: true,
+        options: {
+          circle: true
+        }
+      }
+    ]
+  },
+  tableParam: {
+    list: [],
+    columns: [
+      {
+        label: "代理商",
+        prop: "merchantName",
+        slot: "merchantName",
+        width: 220
+      },
+      {
+        label: "今日总金额",
+        prop: "today.amount.total",
+        slot: "today.amount.total"
+      },
+      {
+        label: "今日支付金额",
+        prop: "today.amount.valid",
+        slot: "today.amount.valid"
+      },
+      {
+        label: "昨日总金额",
+        prop: "yesterday.amount.total",
+        slot: "yesterday.amount.total"
+      },
+      {
+        label: "昨日支付金额",
+        prop: "yesterday.amount.valid",
+        slot: "yesterday.amount.valid"
+      },
+      {
+        label: "本周总金额",
+        prop: "lastWeek.amount.total",
+        slot: "lastWeek.amount.total"
+      },
+      {
+        label: "本周支付金额",
+        prop: "lastWeek.amount.valid",
+        slot: "lastWeek.amount.valid"
+      },
+      {
+        label: "本月总金额",
+        prop: "lastMonth.amount.total",
+        slot: "lastMonth.amount.total"
+      },
+      {
+        label: "本月支付金额",
+        prop: "lastMonth.amount.valid",
+        slot: "lastMonth.amount.valid"
+      }
+    ],
+    loading: false,
+    pagination: {
+      pageSize: 10,
+      defaultPageSize: 10,
+      currentPage: 1,
+      background: true,
+      total: 0
+    }
+  }
+});
+
+const btnClickHandle = (val: string) => {
+  switch (val) {
+    case "add":
+      editRef.value!.open({ enable: 1 }, pageData.dataSource, "add");
+      break;
+    case "update":
+      break;
+    case "search":
+      _updateSearchState();
+      break;
+    case "refresh":
+      _loadData();
+      break;
+    case "switch":
+      break;
+    default:
+      break;
+  }
+};
+
+/**
+ *  更新搜索表单
+ * @param data .
+ */
+const _updateSearchFormData = (data: any) => {
+  pageData.searchParam.searchForm = data;
+};
+/**
+ * 点击搜索按钮
+ */
+const _searchForm = (data: any) => {
+  pageData.searchParam.searchForm = data;
+  _loadData();
+};
+/**
+ * 重置
+ */
+const _resetSearchForm = (data?: any) => {
+  pageData.searchParam.searchForm = data;
+};
+/**
+ * 更新搜索表达的状态
+ */
+const _updateSearchState = () => {
+  pageData.searchParam.searchState = !pageData.searchParam.searchState;
+};
+/**
+ * 分页 - 改变每页条数
+ * @param val .
+ */
+const handleChangePageSize = (val: any) => {
+  pageData.tableParam.pagination.pageSize = val;
+  _loadData();
+};
+/**
+ * 分页 - 改变页码
+ * @param val .
+ */
+const handleChangeCurrentPage = (val: any) => {
+  pageData.tableParam.pagination.currentPage = val;
+  _loadData();
+};
+/**
+ * 获取查询参数
+ */
+const getQueryParams = () => {
+  const sqp = {};
+  const param = Object.assign(sqp, pageData.searchParam.searchForm);
+  param.current = pageData.tableParam.pagination.currentPage;
+  param.size = pageData.tableParam.pagination.pageSize;
+  return param;
+};
+/**
+ * 获取列表数据
+ * @param page .
+ */
+const _loadData = (page?: number) => {
+  const query = getQueryParams();
+  if (page) {
+    query.current = page;
+  }
+  pageData.tableParam.loading = true;
+  $api
+    .orderTotal(query)
+    .then((res: any) => {
+      if (res.success) {
+        pageData.tableParam.list = res.result;
+        // pageData.tableParam.pagination.total = Number(res.result.total);
+      }
+    })
+    .finally(() => {
+      pageData.tableParam.loading = false;
+    });
+};
+onBeforeMount(() => {});
+onMounted(() => {
+  $agentApi.queryList()
+    .then((res: any) => {
+      if (res.success) {
+        pageData.dataSource.merchantOptions = res.result;
+      }
+    });
+  _loadData(1);
+});
+</script>
+
+<template>
+  <el-card :shadow="'never'">
+    <template #default>
+      <div>
+        <form-search
+          :show="pageData.searchParam.searchState"
+          :form-field="searchFormFields"
+          :data-source="pageData.dataSource"
+          :query-permission="pageData.permission.query"
+          @search-form="_updateSearchFormData"
+          @search="_searchForm"
+          @reset="_resetSearchForm"
+        />
+        <!--operate-->
+        <table-buttons
+          :size="pageData.btnOpts.size"
+          :left-btns="pageData.btnOpts.leftBtns"
+          :right-btns="pageData.btnOpts.rightBtns"
+          @click="btnClickHandle"
+        />
+        <!--table-->
+        <pure-table
+          :data="pageData.tableParam.list"
+          :columns="pageData.tableParam.columns"
+          row-key="id"
+          border
+          stripe
+          :header-row-class-name="'table-header'"
+          :loading="pageData.tableParam.loading"
+          :pagination="pageData.tableParam.pagination"
+          @page-current-change="handleChangeCurrentPage"
+          @page-size-change="handleChangePageSize"
+        >
+          <template #ellipsis="{ row, column }">
+            <el-tooltip placement="top-start" :content="row[column.property]"
+              >{{ row[column.property] }}
+            </el-tooltip>
+          </template>
+          <template #enableOptions="scope">
+            <el-tag v-if="scope.row.status == -1">支付失败</el-tag>
+            <el-tag v-if="scope.row.status == 0">待支付</el-tag>
+            <el-tag v-if="scope.row.status == 1">支付成功</el-tag>
+            <el-tag v-if="scope.row.status == 2">退款</el-tag>
+          </template>
+        </pure-table>
+      </div>
+    </template>
+  </el-card>
+</template>

+ 2 - 2
admin-ui/src/views/paytest/modules/edit.vue

@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.userName"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>
@@ -139,7 +139,7 @@ defineExpose({ open });
             type="password"
             clearable
             placeholder="请输入密码"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 3 - 3
admin-ui/src/views/platform/index.vue

@@ -110,7 +110,7 @@ onMounted(() => {
           v-model="pageData.formData.appId"
           clearable
           placeholder="请输入应用appId"
-          size="small"
+          size="default"
           :readonly="isDetail"
         />
       </el-form-item>
@@ -121,7 +121,7 @@ onMounted(() => {
           v-model="pageData.formData.privateKey"
           clearable
           placeholder="请输入应用密钥"
-          size="small"
+          size="default"
           :readonly="isDetail"
         />
       </el-form-item>
@@ -132,7 +132,7 @@ onMounted(() => {
           v-model="pageData.formData.publicKey"
           clearable
           placeholder="请输入服务商公钥"
-          size="small"
+          size="default"
           :readonly="isDetail"
         />
       </el-form-item>

+ 4 - 5
admin-ui/src/views/platform/modules/edit.vue

@@ -131,25 +131,24 @@ defineExpose({ open });
             v-model="pageData.formData.serviceId"
             clearable
             placeholder="请输入名称"
-            size="small"
+
             :readonly="isDetail"
           />
         </el-form-item>
         <el-form-item label="密钥" prop="password">
           <el-input
             v-model="pageData.formData.privateKey"
-            clearable
+            clearable type="textarea"
             placeholder="请输入密钥"
-            size="small"
             :readonly="isDetail"
           />
         </el-form-item>
         <el-form-item label="公钥" prop="password">
-          <el-input
+          <el-input type="textarea"
             v-model="pageData.formData.publicKey"
             clearable
             placeholder="请输入公钥"
-            size="small"
+
             :readonly="isDetail"
           />
         </el-form-item>

+ 2 - 2
admin-ui/src/views/platform/modules/list.vue

@@ -297,7 +297,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -318,7 +318,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 66 - 22
admin-ui/src/views/welcome/index.vue

@@ -1,10 +1,10 @@
 <script setup lang="ts">
-import {reactive} from "vue";
+import {onMounted, reactive} from "vue";
+import * as $api from "@/api/order/index";
 
 defineOptions({
   name: "Welcome"
 });
-
 const data = reactive({
   today: {
     // 数量
@@ -76,6 +76,21 @@ const data = reactive({
   }
 });
 
+onMounted(() => {
+  total();
+  setInterval(function(){
+    total();
+  }, 30000);
+
+});
+const total = () => {
+  $api.total().then((res: any) => {
+    data.today = res.result.today;
+    data.yesterday = res.result.yesterday;
+    data.lastWeek = res.result.lastWeek;
+    data.lastMonth = res.result.lastMonth;
+  });
+};
 </script>
 
 <template>
@@ -90,7 +105,10 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{ data.today.quantity.valid }}</span>
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
+                  data.today.quantity.valid
+                }}</span>
                 / {{ data.today.quantity.total }}
               </div>
             </div>
@@ -106,7 +124,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{ data.today.amount.valid }}</span> /
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
+                  data.today.amount.valid
+                }}</span>
+                /
                 {{ data.today.amount.total }}
               </div>
             </div>
@@ -122,7 +144,10 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{ data.today.earnings.valid }}</span>
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
+                  data.today.earnings.valid
+                }}</span>
               </div>
             </div>
           </div>
@@ -139,9 +164,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.yesterday.quantity.valid
-                }}</span> / {{ data.yesterday.quantity.total }}
+                }}</span>
+                / {{ data.yesterday.quantity.total }}
               </div>
             </div>
           </div>
@@ -156,9 +183,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.yesterday.amount.valid
-                }}</span> / {{ data.yesterday.amount.total }}
+                }}</span>
+                / {{ data.yesterday.amount.total }}
               </div>
             </div>
           </div>
@@ -173,9 +202,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.yesterday.earnings.valid
-                }}</span></div>
+                }}</span>
+              </div>
             </div>
           </div>
         </div>
@@ -191,9 +222,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.lastWeek.quantity.valid
-                }}</span> / {{ data.lastWeek.quantity.total }}
+                }}</span>
+                / {{ data.lastWeek.quantity.total }}
               </div>
             </div>
           </div>
@@ -208,7 +241,10 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{ data.lastWeek.amount.valid }}</span>
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
+                  data.lastWeek.amount.valid
+                }}</span>
                 / {{ data.lastWeek.amount.total }}
               </div>
             </div>
@@ -224,9 +260,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.lastWeek.earnings.valid
-                }}</span></div>
+                }}</span>
+              </div>
             </div>
           </div>
         </div>
@@ -242,9 +280,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.lastMonth.quantity.valid
-                }}</span> / {{ data.lastMonth.quantity.total }}
+                }}</span>
+                / {{ data.lastMonth.quantity.total }}
               </div>
             </div>
           </div>
@@ -259,9 +299,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.lastMonth.amount.valid
-                }}</span> / {{ data.lastMonth.amount.total }}
+                }}</span>
+                / {{ data.lastMonth.amount.total }}
               </div>
             </div>
           </div>
@@ -276,9 +318,11 @@ const data = reactive({
         <div class="ep-bg-purple">
           <div class="text">
             <div class="text-center h-[40px]">
-              <div class="text-xl font-bold"><span class="text-red-700 text-2xl">{{
+              <div class="text-xl font-bold">
+                <span class="text-red-700 text-2xl">{{
                   data.lastMonth.earnings.valid
-                }}</span></div>
+                }}</span>
+              </div>
             </div>
           </div>
         </div>

+ 12 - 0
agent-ui/src/api/auth/routes.ts

@@ -41,6 +41,18 @@ export function menuList(): Promise<any> {
       },
       name: "merchant",
       path: "/merchant"
+    },
+    {
+      component: "ordertotal/index",
+      meta: {
+        icon: "ep:avatar",
+        keepAlive: false,
+        showLink: true,
+        showParent: true,
+        title: "订单统计"
+      },
+      name: "ordertotal",
+      path: "/ordertotal"
     }
   ]
 }

+ 4 - 25
agent-ui/src/api/order/index.ts

@@ -17,36 +17,15 @@ export function queryPage<T>(query?: any): Promise<Result<T>> {
 export function queryList<T>(query?: any): Promise<Result<T>> {
   return get("/agent/pay/order/list", query);
 }
-
 /**
- * 新增
- * @param data .
+ * 订单统计
+ * @param query .
  * @returns .
  */
-export function save<T>(data: any): Promise<Result<T>> {
-  return post("/agent/pay/order/save", data);
-}
-
-/**
- * 更新
- * @param id .
- * @param data .
- * @returns  .
- */
-export function update<T>(id: string, data: any): Promise<Result<T>> {
-  return put(`/agent/pay/order/update/${id}`, {}, data);
+export function orderTotal<T>(query?: any): Promise<Result<T>> {
+  return get("/agent/pay/order/orderTotal", query);
 }
 
-/**
- * 删除用户
- * @param userIds .
- * @returns  .
- */
-export function del<T>(userIds: string[]): Promise<Result<T>> {
-  return deleteRequest(`/agent/pay/order/remove`, {}, userIds);
-}
-
-
 /**
  * 查询支付状态
  * @param id .

+ 1 - 1
agent-ui/src/components/ReIcon/src/Select.vue

@@ -202,7 +202,7 @@ watch(
             <el-button
               class="justify-end mr-2 ml-2"
               type="danger"
-              size="small"
+              size="default"
               text
               bg
               @click="onClear"

+ 1 - 1
agent-ui/src/layout/components/notice/noticeItem.vue

@@ -78,7 +78,7 @@ function hoverDescription(event, description) {
         <el-tag
           v-if="props.noticeItem?.extra"
           :type="props.noticeItem?.status"
-          size="small"
+          size="default"
           class="notice-title-extra"
         >
           {{ props.noticeItem?.extra }}

+ 1 - 1
agent-ui/src/layout/components/setting/index.vue

@@ -378,7 +378,7 @@ onBeforeMount(() => {
 
       <li>
         <span class="dark:text-white">标签风格</span>
-        <el-radio-group v-model="markValue" size="small" @change="onChange">
+        <el-radio-group v-model="markValue" size="default" @change="onChange">
           <el-radio label="card">卡片</el-radio>
           <el-radio label="smart">灵动</el-radio>
         </el-radio-group>

+ 1 - 1
agent-ui/src/views/business/template/hook/template-edit.vue

@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.username"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 2 - 2
agent-ui/src/views/business/template/hook/template-list.vue

@@ -290,7 +290,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -311,7 +311,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 9 - 19
agent-ui/src/views/channel/modules/edit.vue

@@ -6,7 +6,7 @@ import type {FormInstance} from "element-plus";
 import {cloneDeep} from "@pureadmin/utils";
 import {enableOptions, serviceTypeOptions} from "@/constants/constants";
 
-const title = "";
+const title = "通道管理";
 defineOptions({name: "templateEdit"});
 const isDetail = ref(false);
 const formRef = ref<FormInstance>();
@@ -21,7 +21,6 @@ const initData = {
 
 // 表单校验规则
 const formRules = {
-  sellerId: [{required: true, message: "商户ID不能为空", trigger: "blur"}],
   dayMaxPayAmount: [
     {required: true, message: "每日限额不能为空", trigger: "blur"}
   ],
@@ -160,7 +159,6 @@ defineExpose({open});
             v-model="pageData.formData.name"
             clearable
             placeholder="请输入名称"
-            size="small"
             :readonly="isDetail"
           />
         </el-form-item>
@@ -169,7 +167,6 @@ defineExpose({open});
             v-model="pageData.formData.code"
             clearable
             placeholder="请输入编码"
-            size="small"
             :readonly="isDetail"
           />
         </el-form-item>
@@ -192,63 +189,56 @@ defineExpose({open});
             v-model="pageData.formData.appId"
             clearable
             placeholder="请输入appId"
-            size="small"
             :readonly="isDetail"
           />
         </el-form-item>
         <el-form-item label="密钥" prop="password">
-          <el-input
+          <el-input type="textarea"
             v-model="pageData.formData.privateKey"
             clearable
             placeholder="请输入密钥"
-            size="small"
             :readonly="isDetail"
           />
         </el-form-item>
         <el-form-item label="公钥" prop="password">
-          <el-input
+          <el-input type="textarea"
             v-model="pageData.formData.publicKey"
             clearable
             placeholder="请输入公钥"
-            size="small"
             :readonly="isDetail"
           />
         </el-form-item>
-        <el-form-item label="商户号" prop="sellerId">
+        <el-form-item v-if="pageData.formData.type == 1" label="商户号" prop="sellerId">
           <el-input
             v-model="pageData.formData.sellerId"
             clearable
             placeholder="请输入商户号"
-            size="small"
             :readonly="isDetail"
           />
         </el-form-item>
         <el-form-item label="每日限额" prop="dayMaxPayAmount">
-          <el-input
+          <el-input-number
             v-model="pageData.formData.dayMaxPayAmount"
             clearable
             placeholder="请输入每日限额"
-            size="small"
             :readonly="isDetail"
-          />
+          />(元)
         </el-form-item>
         <el-form-item label="单笔限额" prop="onePayMaxAmount">
-          <el-input
+          <el-input-number
             v-model="pageData.formData.onePayMaxAmount"
             clearable
             placeholder="请输入单笔限额"
-            size="small"
             :readonly="isDetail"
-          />
+          />(元)
         </el-form-item>
         <el-form-item label="统一费率" prop="rate">
           <el-input-number
             v-model="pageData.formData.rate"
             clearable
             placeholder="请输入统一费率"
-            size="small"
             :readonly="isDetail"
-          />
+          />(%)
         </el-form-item>
         <el-form-item label="状态" prop="status">
           <el-select

+ 13 - 22
agent-ui/src/views/channel/modules/list.vue

@@ -63,7 +63,6 @@ const pageData: any = reactive({
   },
   /*按钮 */
   btnOpts: {
-    size: "small",
     leftBtns: [
       {
         key: "add",
@@ -120,30 +119,15 @@ const pageData: any = reactive({
         slot: "serviceId"
       },
       {
-        label: "密钥",
-        prop: "privateKey",
-        slot: "privateKey"
-      },
-      {
-        label: "公钥",
-        prop: "publicKey",
-        slot: "publicKey"
+        label: "商户号",
+        prop: "sellerId",
+        slot: "sellerId"
       },
       {
         label: "服务商模式",
         prop: "type",
         slot: "serviceTypeOptions"
       },
-      {
-        label: "状态",
-        prop: "status",
-        slot: "enableOptions"
-      },
-      {
-        label: "商户号",
-        prop: "sellerId",
-        slot: "sellerId"
-      },
       {
         label: "每日限额",
         prop: "dayMaxPayAmount",
@@ -154,6 +138,16 @@ const pageData: any = reactive({
         prop: "onePayMaxAmount",
         slot: "onePayMaxAmount"
       },
+      {
+        label: "当前支付金额",
+        prop: "dayPayAmount",
+        slot: "dayPayAmount"
+      },
+      {
+        label: "总支付金额",
+        prop: "totalPayAmount",
+        slot: "totalPayAmount"
+      },
       {
         label: "统一费率(‰)",
         prop: "rate",
@@ -177,7 +171,6 @@ const pageData: any = reactive({
     ],
     loading: false,
     pagination: {
-      small: true,
       pageSize: 10,
       defaultPageSize: 10,
       currentPage: 1,
@@ -344,7 +337,6 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -365,7 +357,6 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 3 - 3
agent-ui/src/views/merchant/modules/edit.vue

@@ -133,7 +133,7 @@ defineExpose({ open });
             v-model="pageData.formData.userName"
             clearable
             placeholder="请输入商户账号"
-            size="small"
+            size="default"
             :readonly="pageData.formData.id != null"
           />
         </el-form-item>
@@ -142,7 +142,7 @@ defineExpose({ open });
             v-model="pageData.formData.rate"
             clearable
             placeholder="请输入费率"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />‰
         </el-form-item>
@@ -152,7 +152,7 @@ defineExpose({ open });
             type="password"
             clearable
             placeholder="请输入密码"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 2 - 2
agent-ui/src/views/merchant/modules/list.vue

@@ -314,7 +314,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -335,7 +335,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 2 - 2
agent-ui/src/views/order/edit.vue

@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.userName"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>
@@ -139,7 +139,7 @@ defineExpose({ open });
             type="password"
             clearable
             placeholder="请输入密码"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 70 - 65
agent-ui/src/views/order/index.vue

@@ -77,7 +77,6 @@ const pageData: any = reactive({
   },
   /*按钮 */
   btnOpts: {
-    size: "small",
     leftBtns: [
 
     ],
@@ -121,6 +120,11 @@ const pageData: any = reactive({
         prop: "platformOrderNo",
         slot: "platformOrderNo"
       },
+      {
+        label: "商户名称",
+        prop: "channelName",
+        slot: "channelName"
+      },
       {
         label: "金额",
         prop: "amount",
@@ -154,7 +158,6 @@ const pageData: any = reactive({
     ],
     loading: false,
     pagination: {
-      small: true,
       pageSize: 10,
       defaultPageSize: 10,
       currentPage: 1,
@@ -332,68 +335,70 @@ onMounted(() => {
 </script>
 
 <template>
-  <div>
-    <form-search
-      size="small"
-      :show="pageData.searchParam.searchState"
-      :form-field="searchFormFields"
-      :data-source="pageData.dataSource"
-      :query-permission="pageData.permission.query"
-      @search-form="_updateSearchFormData"
-      @search="_searchForm"
-      @reset="_resetSearchForm"
-    />
-    <!--operate-->
-    <table-buttons
-      :size="pageData.btnOpts.size"
-      :left-btns="pageData.btnOpts.leftBtns"
-      :right-btns="pageData.btnOpts.rightBtns"
-      @click="btnClickHandle"
-    />
-    <!--table-->
-    <pure-table
-      :data="pageData.tableParam.list"
-      :columns="pageData.tableParam.columns"
-      row-key="id"
-      size="small"
-      border
-      stripe
-      :header-row-class-name="'table-header'"
-      :loading="pageData.tableParam.loading"
-      :pagination="pageData.tableParam.pagination"
-      @page-current-change="handleChangeCurrentPage"
-      @page-size-change="handleChangePageSize"
-    >
+  <el-card :shadow="'never'">
+    <template #default>
+      <div>
+        <form-search
+          :show="pageData.searchParam.searchState"
+          :form-field="searchFormFields"
+          :data-source="pageData.dataSource"
+          :query-permission="pageData.permission.query"
+          @search-form="_updateSearchFormData"
+          @search="_searchForm"
+          @reset="_resetSearchForm"
+        />
+        <!--operate-->
+        <table-buttons
+          :size="pageData.btnOpts.size"
+          :left-btns="pageData.btnOpts.leftBtns"
+          :right-btns="pageData.btnOpts.rightBtns"
+          @click="btnClickHandle"
+        />
+        <!--table-->
+        <pure-table
+          :data="pageData.tableParam.list"
+          :columns="pageData.tableParam.columns"
+          row-key="id"
+          border
+          stripe
+          :header-row-class-name="'table-header'"
+          :loading="pageData.tableParam.loading"
+          :pagination="pageData.tableParam.pagination"
+          @page-current-change="handleChangeCurrentPage"
+          @page-size-change="handleChangePageSize"
+        >
 
-      <template #ellipsis="{ row, column }">
-        <el-tooltip placement="top-start" :content="row[column.property]"
-        >{{ row[column.property] }}
-        </el-tooltip>
-      </template>
-      <template #enableOptions="scope">
-        <el-tag v-if="scope.row.status==-1">支付失败</el-tag>
-        <el-tag v-if="scope.row.status==0">待支付</el-tag>
-        <el-tag v-if="scope.row.status==1">支付成功</el-tag>
-        <el-tag v-if="scope.row.status==2">退款</el-tag>
-      </template>
-      <template #operation="{ row }">
-        <div class="flex justify-center items-center">
-          <el-link
-            type="primary"
-            @click="handlePayStatus(row)"
-          >查询支付状态
-          </el-link>
-          <el-divider
-            direction="vertical"
-          />
-          <el-link
-            type="primary"
-            @click="handleCallback(row)"
-          >回调
-          </el-link>
-        </div>
-      </template>
-    </pure-table>
-    <edit ref="editRef" @ok="_loadData" />
-  </div>
+          <template #ellipsis="{ row, column }">
+            <el-tooltip placement="top-start" :content="row[column.property]"
+            >{{ row[column.property] }}
+            </el-tooltip>
+          </template>
+          <template #enableOptions="scope">
+            <el-tag v-if="scope.row.status==-1">支付失败</el-tag>
+            <el-tag v-if="scope.row.status==0">待支付</el-tag>
+            <el-tag v-if="scope.row.status==1">支付成功</el-tag>
+            <el-tag v-if="scope.row.status==2">退款</el-tag>
+          </template>
+          <template #operation="{ row }">
+            <div class="flex justify-center items-center">
+              <el-link
+                type="primary"
+                @click="handlePayStatus(row)"
+              >查询支付状态
+              </el-link>
+              <el-divider
+                direction="vertical"
+              />
+              <el-link
+                type="primary"
+                @click="handleCallback(row)"
+              >回调
+              </el-link>
+            </div>
+          </template>
+        </pure-table>
+        <edit ref="editRef" @ok="_loadData" />
+      </div>
+    </template>
+  </el-card>
 </template>

+ 304 - 0
agent-ui/src/views/ordertotal/index.vue

@@ -0,0 +1,304 @@
+<script setup lang="ts">
+import FormSearch, { type FormField } from "@/components/opts/form-search.vue";
+import TableButtons from "@/components/opts/btns2.vue";
+import Edit from "./edit.vue";
+import { PureTable } from "@pureadmin/table";
+import { computed, onBeforeMount, onMounted, reactive, ref, watch } from "vue";
+import * as $api from "@/api/order/index";
+import * as $merchantApi from "@/api/merchant/index";
+
+
+const editRef = ref();
+
+defineOptions({
+  name: "orderList"
+});
+
+const props: any = defineProps({
+  mode: {
+    required: false,
+    type: String,
+    default: "table"
+  }
+});
+
+const searchFormFields = computed((): FormField[] => {
+  const fields: FormField[] = [
+    {
+      type: "select",
+      label: "商户名称",
+      prop: "merchantId",
+      placeholder: "请选择",
+      dataSourceKey: "merchantOptions",
+      options: {
+        keys: {
+          label: "userName",
+          value: "id",
+          prop: "id"
+        },
+        filterable: true
+      }
+    }
+  ];
+  if (props.mode === "table") {
+    return fields;
+  } else {
+    return fields;
+  }
+});
+
+const pageData: any = reactive({
+  mode: "table",
+  permission: {
+    // query: ["user:query"],
+    // save: ["user:save"],
+    // update: ["user:update"],
+    // del: ["user:del"]
+  },
+  searchParam: {
+    searchState: true,
+    searchForm: {}
+  },
+  dataSource: {
+    merchantOptions: []
+  },
+  /*按钮 */
+  btnOpts: {
+    leftBtns: [],
+    rightBtns: [
+      {
+        key: "search",
+        label: "查询",
+        icon: "ep:search",
+        state: true,
+        options: {
+          circle: true
+        }
+      },
+      {
+        key: "refresh",
+        label: "刷新",
+        icon: "ep:refresh",
+        state: true,
+        options: {
+          circle: true
+        }
+      }
+    ]
+  },
+  tableParam: {
+    list: [],
+    columns: [
+      {
+        label: "商户名称",
+        prop: "merchantName",
+        slot: "merchantName",
+        width: 220
+      },
+      {
+        label: "今日总金额",
+        prop: "today.amount.total",
+        slot: "today.amount.total"
+      },
+      {
+        label: "今日支付金额",
+        prop: "today.amount.valid",
+        slot: "today.amount.valid"
+      },
+      {
+        label: "昨日总金额",
+        prop: "yesterday.amount.total",
+        slot: "yesterday.amount.total"
+      },
+      {
+        label: "昨日支付金额",
+        prop: "yesterday.amount.valid",
+        slot: "yesterday.amount.valid"
+      },
+      {
+        label: "本周总金额",
+        prop: "lastWeek.amount.total",
+        slot: "lastWeek.amount.total"
+      },
+      {
+        label: "本周支付金额",
+        prop: "lastWeek.amount.valid",
+        slot: "lastWeek.amount.valid"
+      },
+      {
+        label: "本月总金额",
+        prop: "lastMonth.amount.total",
+        slot: "lastMonth.amount.total"
+      },
+      {
+        label: "本月支付金额",
+        prop: "lastMonth.amount.valid",
+        slot: "lastMonth.amount.valid"
+      }
+    ],
+    loading: false,
+    pagination: {
+      pageSize: 10,
+      defaultPageSize: 10,
+      currentPage: 1,
+      background: true,
+      total: 0
+    }
+  }
+});
+
+const btnClickHandle = (val: string) => {
+  switch (val) {
+    case "add":
+      editRef.value!.open({ enable: 1 }, pageData.dataSource, "add");
+      break;
+    case "update":
+      break;
+    case "search":
+      _updateSearchState();
+      break;
+    case "refresh":
+      _loadData();
+      break;
+    case "switch":
+      break;
+    default:
+      break;
+  }
+};
+
+/**
+ *  更新搜索表单
+ * @param data .
+ */
+const _updateSearchFormData = (data: any) => {
+  pageData.searchParam.searchForm = data;
+};
+/**
+ * 点击搜索按钮
+ */
+const _searchForm = (data: any) => {
+  pageData.searchParam.searchForm = data;
+  _loadData();
+};
+/**
+ * 重置
+ */
+const _resetSearchForm = (data?: any) => {
+  pageData.searchParam.searchForm = data;
+};
+/**
+ * 更新搜索表达的状态
+ */
+const _updateSearchState = () => {
+  pageData.searchParam.searchState = !pageData.searchParam.searchState;
+};
+/**
+ * 分页 - 改变每页条数
+ * @param val .
+ */
+const handleChangePageSize = (val: any) => {
+  pageData.tableParam.pagination.pageSize = val;
+  _loadData();
+};
+/**
+ * 分页 - 改变页码
+ * @param val .
+ */
+const handleChangeCurrentPage = (val: any) => {
+  pageData.tableParam.pagination.currentPage = val;
+  _loadData();
+};
+/**
+ * 获取查询参数
+ */
+const getQueryParams = () => {
+  const sqp = {};
+  const param = Object.assign(sqp, pageData.searchParam.searchForm);
+  param.current = pageData.tableParam.pagination.currentPage;
+  param.size = pageData.tableParam.pagination.pageSize;
+  return param;
+};
+/**
+ * 获取列表数据
+ * @param page .
+ */
+const _loadData = (page?: number) => {
+  const query = getQueryParams();
+  if (page) {
+    query.current = page;
+  }
+  pageData.tableParam.loading = true;
+  $api
+    .orderTotal(query)
+    .then((res: any) => {
+      if (res.success) {
+        pageData.tableParam.list = res.result;
+        // pageData.tableParam.pagination.total = Number(res.result.total);
+      }
+    })
+    .finally(() => {
+      pageData.tableParam.loading = false;
+    });
+};
+onBeforeMount(() => {});
+onMounted(() => {
+  $merchantApi.queryList()
+    .then((res: any) => {
+      if (res.success) {
+        pageData.dataSource.merchantOptions = res.result;
+      }
+    });
+  _loadData(1);
+});
+</script>
+
+<template>
+  <el-card :shadow="'never'">
+    <template #default>
+      <div>
+        <form-search
+          :show="pageData.searchParam.searchState"
+          :form-field="searchFormFields"
+          :data-source="pageData.dataSource"
+          :query-permission="pageData.permission.query"
+          @search-form="_updateSearchFormData"
+          @search="_searchForm"
+          @reset="_resetSearchForm"
+        />
+        <!--operate-->
+        <table-buttons
+          :size="pageData.btnOpts.size"
+          :left-btns="pageData.btnOpts.leftBtns"
+          :right-btns="pageData.btnOpts.rightBtns"
+          @click="btnClickHandle"
+        />
+        <!--table-->
+        <pure-table
+          :data="pageData.tableParam.list"
+          :columns="pageData.tableParam.columns"
+          row-key="id"
+          border
+          stripe
+          :header-row-class-name="'table-header'"
+          :loading="pageData.tableParam.loading"
+          :pagination="pageData.tableParam.pagination"
+          @page-current-change="handleChangeCurrentPage"
+          @page-size-change="handleChangePageSize"
+        >
+          <template #ellipsis="{ row, column }">
+            <el-tooltip placement="top-start" :content="row[column.property]"
+              >{{ row[column.property] }}
+            </el-tooltip>
+          </template>
+          <template #enableOptions="scope">
+            <el-tag v-if="scope.row.status == -1">支付失败</el-tag>
+            <el-tag v-if="scope.row.status == 0">待支付</el-tag>
+            <el-tag v-if="scope.row.status == 1">支付成功</el-tag>
+            <el-tag v-if="scope.row.status == 2">退款</el-tag>
+          </template>
+        </pure-table>
+      </div>
+    </template>
+  </el-card>
+</template>

+ 11 - 0
merchant-ui/src/api/channel/index.ts

@@ -0,0 +1,11 @@
+import {Result, deleteRequest, get, post, put} from "../base";
+
+
+/**
+ * 列表查询
+ * @param query .
+ * @returns .
+ */
+export function queryList<T>(query?: any): Promise<Result<T>> {
+  return get("/agent/pay/channel/list", query);
+}

+ 1 - 1
merchant-ui/src/components/ReIcon/src/Select.vue

@@ -202,7 +202,7 @@ watch(
             <el-button
               class="justify-end mr-2 ml-2"
               type="danger"
-              size="small"
+              size="default"
               text
               bg
               @click="onClear"

+ 1 - 1
merchant-ui/src/layout/components/notice/noticeItem.vue

@@ -78,7 +78,7 @@ function hoverDescription(event, description) {
         <el-tag
           v-if="props.noticeItem?.extra"
           :type="props.noticeItem?.status"
-          size="small"
+          size="default"
           class="notice-title-extra"
         >
           {{ props.noticeItem?.extra }}

+ 1 - 1
merchant-ui/src/layout/components/setting/index.vue

@@ -378,7 +378,7 @@ onBeforeMount(() => {
 
       <li>
         <span class="dark:text-white">标签风格</span>
-        <el-radio-group v-model="markValue" size="small" @change="onChange">
+        <el-radio-group v-model="markValue" size="default" @change="onChange">
           <el-radio label="card">卡片</el-radio>
           <el-radio label="smart">灵动</el-radio>
         </el-radio-group>

+ 1 - 1
merchant-ui/src/views/business/template/hook/template-edit.vue

@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.username"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 2 - 2
merchant-ui/src/views/business/template/hook/template-list.vue

@@ -290,7 +290,7 @@ onMounted(() => {
 <template>
   <div>
     <form-search
-      size="small"
+      size="default"
       :show="pageData.searchParam.searchState"
       :form-field="searchFormFields"
       :data-source="pageData.dataSource"
@@ -311,7 +311,7 @@ onMounted(() => {
       :data="pageData.tableParam.list"
       :columns="pageData.tableParam.columns"
       row-key="id"
-      size="small"
+      size="default"
       border
       stripe
       :header-row-class-name="'table-header'"

+ 3 - 3
merchant-ui/src/views/order/edit.vue

@@ -6,7 +6,7 @@ import type { FormInstance } from "element-plus";
 import { cloneDeep } from "@pureadmin/utils";
 
 const title = "";
-defineOptions({ name: "templateEdit" });
+defineOptions({ name: "orderEdit" });
 const isDetail = ref(false);
 const formRef = ref<FormInstance>();
 // 初始化数据
@@ -129,7 +129,7 @@ defineExpose({ open });
             v-model="pageData.formData.userName"
             clearable
             placeholder="请输入名称"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>
@@ -139,7 +139,7 @@ defineExpose({ open });
             type="password"
             clearable
             placeholder="请输入密码"
-            size="small"
+            size="default"
             :readonly="isDetail"
           />
         </el-form-item>

+ 71 - 68
merchant-ui/src/views/order/index.vue

@@ -5,9 +5,8 @@ import Edit from "./edit.vue";
 import { PureTable } from "@pureadmin/table";
 import { computed, onBeforeMount, onMounted, reactive, ref, watch } from "vue";
 import * as $api from "@/api/order/index";
-import { hasAuth } from "@/router/utils";
 import message from "@/utils/message";
-import {enableOptions, payStatusOptions} from "@/constants/constants";
+import { payStatusOptions } from "@/constants/constants";
 import { cloneDeep } from "@pureadmin/utils";
 
 const editRef = ref();
@@ -77,9 +76,7 @@ const pageData: any = reactive({
   },
   /*按钮 */
   btnOpts: {
-    size: "small",
     leftBtns: [
-
     ],
     rightBtns: [
       {
@@ -121,6 +118,11 @@ const pageData: any = reactive({
         prop: "platformOrderNo",
         slot: "platformOrderNo"
       },
+      {
+        label: "商户名称",
+        prop: "channelName",
+        slot: "channelName"
+      },
       {
         label: "金额",
         prop: "amount",
@@ -144,7 +146,7 @@ const pageData: any = reactive({
     ],
     loading: false,
     pagination: {
-      small: true,
+      small: false,
       pageSize: 10,
       defaultPageSize: 10,
       currentPage: 1,
@@ -322,68 +324,69 @@ onMounted(() => {
 </script>
 
 <template>
-  <div>
-    <form-search
-      size="small"
-      :show="pageData.searchParam.searchState"
-      :form-field="searchFormFields"
-      :data-source="pageData.dataSource"
-      :query-permission="pageData.permission.query"
-      @search-form="_updateSearchFormData"
-      @search="_searchForm"
-      @reset="_resetSearchForm"
-    />
-    <!--operate-->
-    <table-buttons
-      :size="pageData.btnOpts.size"
-      :left-btns="pageData.btnOpts.leftBtns"
-      :right-btns="pageData.btnOpts.rightBtns"
-      @click="btnClickHandle"
-    />
-    <!--table-->
-    <pure-table
-      :data="pageData.tableParam.list"
-      :columns="pageData.tableParam.columns"
-      row-key="id"
-      size="small"
-      border
-      stripe
-      :header-row-class-name="'table-header'"
-      :loading="pageData.tableParam.loading"
-      :pagination="pageData.tableParam.pagination"
-      @page-current-change="handleChangeCurrentPage"
-      @page-size-change="handleChangePageSize"
-    >
-
-      <template #ellipsis="{ row, column }">
-        <el-tooltip placement="top-start" :content="row[column.property]"
-        >{{ row[column.property] }}
-        </el-tooltip>
-      </template>
-      <template #enableOptions="scope">
-        <el-tag v-if="scope.row.status==-1">支付失败</el-tag>
-        <el-tag v-if="scope.row.status==0">待支付</el-tag>
-        <el-tag v-if="scope.row.status==1">支付成功</el-tag>
-        <el-tag v-if="scope.row.status==2">退款</el-tag>
-      </template>
-      <template #operation="{ row }">
-        <div class="flex justify-center items-center">
-          <el-link
-            type="primary"
-            @click="handlePayStatus(row)"
-          >查询支付状态
-          </el-link>
-          <el-divider
-            direction="vertical"
+  <el-card :shadow="'never'">
+    <template #default>
+      <div>
+          <form-search
+            :show="pageData.searchParam.searchState"
+            :form-field="searchFormFields"
+            :data-source="pageData.dataSource"
+            :query-permission="pageData.permission.query"
+            @search-form="_updateSearchFormData"
+            @search="_searchForm"
+            @reset="_resetSearchForm"
+          />
+          <!--operate-->
+          <table-buttons
+            :size="pageData.btnOpts.size"
+            :left-btns="pageData.btnOpts.leftBtns"
+            :right-btns="pageData.btnOpts.rightBtns"
+            @click="btnClickHandle"
           />
-          <el-link
-            type="primary"
-            @click="handleCallback(row)"
-          >回调
-          </el-link>
-        </div>
-      </template>
-    </pure-table>
-    <edit ref="editRef" @ok="_loadData" />
-  </div>
+          <!--table-->
+          <pure-table
+            :data="pageData.tableParam.list"
+            :columns="pageData.tableParam.columns"
+            row-key="id"
+            border
+            stripe
+            :header-row-class-name="'table-header'"
+            :loading="pageData.tableParam.loading"
+            :pagination="pageData.tableParam.pagination"
+            @page-current-change="handleChangeCurrentPage"
+            @page-size-change="handleChangePageSize"
+          >
+
+            <template #ellipsis="{ row, column }">
+              <el-tooltip placement="top-start" :content="row[column.property]"
+              >{{ row[column.property] }}
+              </el-tooltip>
+            </template>
+            <template #enableOptions="scope">
+              <el-tag type="danger" v-if="scope.row.status==-1">支付失败</el-tag>
+              <el-tag v-if="scope.row.status==0">待支付</el-tag>
+              <el-tag type="success" v-if="scope.row.status==1">支付成功</el-tag>
+              <el-tag type="warning" v-if="scope.row.status==2">退款</el-tag>
+            </template>
+            <template #operation="{ row }">
+              <div class="flex justify-center items-center">
+                <el-link
+                  type="primary"
+                  v-if="row.status!=1"
+                  @click="handlePayStatus(row)"
+                >查询支付状态
+                </el-link>
+                <el-link
+                  type="primary"
+                  v-if="row.status==1"
+                  @click="handleCallback(row)"
+                >回调
+                </el-link>
+              </div>
+            </template>
+          </pure-table>
+          <edit ref="editRef" @ok="_loadData" />
+      </div>
+    </template>
+  </el-card>
 </template>

+ 48 - 13
merchant-ui/src/views/paytest/index.vue

@@ -1,5 +1,6 @@
 <script setup lang="ts">
 import * as $merchantApi from "@/api/merchant";
+import * as $channelApi from "@/api/channel";
 import Edit from "@/views/paytest/modules/edit.vue";
 import {onMounted, reactive, ref} from "vue";
 import {message} from "@/utils/message";
@@ -9,7 +10,12 @@ const editRef = ref();
 const formRef = ref();
 const payTest = () => {
   $api.test(pageData.formData).then((res: any) => {
-    editRef.value!.open( res.result.result.imageBase64);
+      if(res.result.code==200){
+        editRef.value!.open( res.result.result);
+      }else{
+
+          message(res.result.message)
+      }
   })
   genbizOrderNoeNo();
 };
@@ -27,6 +33,7 @@ const payMoneyList = ref([
 const initData = {
   bizOrderNo: undefined,
   title: undefined,
+  channelId: undefined,
   totalMoney: undefined
 };
 // 页面数据
@@ -37,7 +44,8 @@ const pageData: any = reactive({
   mode: "add",
   isUpdate: false,
   // 表单数据
-  formData: initData
+  formData: initData,
+  channelList: null
 });
 const payMoneyValue = ref(0.01);
 const payMoneyShow = ref(false);
@@ -49,6 +57,15 @@ function genbizOrderNoeNo() {
   pageData.formData.bizOrderNo = 'P' + new Date().getTime();
 
 }
+/**
+ * 查询通道
+ */
+function queryChannel() {
+  $channelApi.queryList(pageData.formData).then((res: any) => {
+   console.log(res.result);
+   pageData.channelList = res.result;
+  });
+}
 
 /**
  * 支付金额变动
@@ -64,6 +81,7 @@ function payMoneyValueChange() {
 }
 
 onMounted(() => {
+  queryChannel();
   genbizOrderNoeNo();
   pageData.formData.title = "测试支付";
   pageData.formData.totalMoney=0.01;
@@ -73,7 +91,7 @@ onMounted(() => {
 </script>
 <template>
   <div>
-    <el-card style="width: 700px; border-radius: 8px" shadow="hover">
+    <el-card style="border-radius: 8px" shadow="hover">
       <template #header>
         <el-text class="mx-1" type="primary" size="large">支付信息</el-text>
       </template>
@@ -81,24 +99,42 @@ onMounted(() => {
         <el-form
             ref="formRef"
             :model="pageData.formData"
-            style="width: 90%; margin: 20px auto 0"
+            style="margin: 20px 0"
             label-width="auto"
         >
+          <el-form-item label="通道" prop="status">
+            <el-select
+              v-model="pageData.formData.channelId"
+              clearable
+              placeholder="请选择通道"
+            >
+              <el-option
+                v-for="item in pageData.channelList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              />
+            </el-select>
+          </el-form-item>
           <el-form-item label="业务单号">
-            <el-input style="width: 200px"
-                      v-model="pageData.formData.bizOrderNo"
-                      clearable
-                      placeholder="请输入业务单号"
-                      size="small"
-            />
-            <el-button type="primary" style="height: 25px" @click="genbizOrderNoeNo">生成</el-button>
+            <el-row :gutter="10">
+              <el-col :span="16">
+                <el-input
+                    v-model="pageData.formData.bizOrderNo"
+                    clearable
+                    placeholder="请输入业务单号"
+                />
+              </el-col>
+              <el-col :span="8">
+                <el-button type="primary" class="ml-3" style="height: 25px" @click="genbizOrderNoeNo">生成</el-button>
+              </el-col>
+            </el-row>
           </el-form-item>
           <el-form-item label="支付标题">
             <el-input
                 v-model="pageData.formData.title"
                 clearable
                 placeholder="请输入支付标题"
-                size="small"
             />
           </el-form-item>
           <el-form-item label="支付金额(元):">
@@ -109,7 +145,6 @@ onMounted(() => {
             </el-radio-group>
             <el-input-number v-if="payMoneyShow"
                              style="width: 120px !important"
-                             :max="100"
                              :min="0.01"
                              :precision="2"
                              v-model="pageData.formData.totalMoney"

+ 7 - 7
merchant-ui/src/views/paytest/modules/edit.vue

@@ -11,9 +11,8 @@ const isDetail = ref(false);
 const formRef = ref<FormInstance>();
 // 初始化数据
 const initData = {
-  userName: undefined,
-  password: undefined,
-  status: 1
+    imageBase64: undefined,
+    qrCode: undefined
 };
 
 // 表单校验规则
@@ -33,9 +32,10 @@ const pageData: any = reactive({
 // 暴露给父级调用
 const emits = defineEmits(["ok", "close"]);
 const src = ref();
+const qrCode = ref();
 // 打开弹窗
-const open = (data: any, dataSource: any, mode: string) => {
-    src.value = data;
+const open = (data: any, qrCode: any, mode: string) => {
+    pageData.formData =  data;
 
   pageData.dialogVisible = true;
 };
@@ -44,8 +44,8 @@ defineExpose({ open });
 
 <template>
   <el-dialog v-model="pageData.dialogVisible" title="扫码支付" destroy-on-close :width="500">
-
-    <img :src="src" />
+    <a :href="pageData.formData.qrCode" target="_blank">{{ pageData.formData.qrCode }}</a>
+    <img :src="pageData.formData.imageBase64" alt="pageData.formData.qrCode"/>
     <el-text>请使用支付宝"扫一扫"进行支付</el-text>
   </el-dialog>
 </template>

+ 1 - 1
merchant-ui/src/views/welcome/index.vue

@@ -34,7 +34,7 @@ const pageData: any = reactive({
 <template>
   <div>
     <div class="max-w-full">
-      <el-card style="width: 480px; border-radius: 8px" shadow="hover">
+      <el-card style="border-radius: 8px" shadow="hover">
         <template #default v-if="merchantKeyInfo">
           <el-form :model="pageData.formData">
             <el-form-item label="appId:">