liu_lake 4 månader sedan
förälder
incheckning
70cd66cf0c

+ 9 - 0
admin-ui/src/api/order/index.ts

@@ -38,6 +38,15 @@ export function update<T>(id: string, data: any): Promise<Result<T>> {
 }
 
 
+/**
+ * 订单统计
+ * @param query .
+ * @returns .
+ */
+export function orderTotal<T>(query?: any): Promise<Result<T>> {
+  return get("/sys/pay/order/orderTotal", query);
+}
+
 
 /**
  * 查询支付状态

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

@@ -0,0 +1,306 @@
+<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 { hasAuth } from "@/router/utils";
+import message from "@/utils/message";
+import {enableOptions, payStatusOptions, SelectOption} from "@/constants/constants";
+import { cloneDeep } from "@pureadmin/utils";
+
+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: "enableOptions",
+      options: {
+        keys: {
+          label: "label",
+          value: "value",
+          prop: "value"
+        },
+        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: {
+    enableOptions: []
+  },
+  /*按钮 */
+  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(() => {
+  _loadData(1);
+});
+const merchantOptions = ref([
+  { label: "支付失败", value: -1 },
+  { label: "待支付", value: 0 },
+  { label: "支付成功", value: 1 },
+  { label: "退款", value: 2 }
+]);
+</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>

+ 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 .

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

@@ -0,0 +1,306 @@
+<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 { hasAuth } from "@/router/utils";
+import message from "@/utils/message";
+import {enableOptions, payStatusOptions, SelectOption} from "@/constants/constants";
+import { cloneDeep } from "@pureadmin/utils";
+
+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: "enableOptions",
+      options: {
+        keys: {
+          label: "label",
+          value: "value",
+          prop: "value"
+        },
+        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: {
+    enableOptions: []
+  },
+  /*按钮 */
+  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(() => {
+  _loadData(1);
+});
+const merchantOptions = ref([
+  { label: "支付失败", value: -1 },
+  { label: "待支付", value: 0 },
+  { label: "支付成功", value: 1 },
+  { label: "退款", value: 2 }
+]);
+</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>