叶静 3 долоо хоног өмнө
parent
commit
83bef4dcb1

+ 1 - 1
.env.development

@@ -21,7 +21,7 @@ SHEEP_USE_MOCK = false
 # 代理配置
 SHEEP_USE_PROXY = false
 SHEEP_PROXY_PREFIX = '/api'
-SHEEP_PROXY_TARGET = http://192.168.0.101:8401
+SHEEP_PROXY_TARGET = http://192.168.0.103:8401
 
 ##### API路由配置
 # API路由功能总开关

+ 40 - 2
src/app/shop/admin/finance/recharge/index.vue

@@ -51,7 +51,7 @@
           </el-table-column>
           <el-table-column :label="t('modules.recharge.channel')" min-width="100" align="center">
             <template #default="scope">
-              {{ scope.row.channelName || '-' }}
+              {{ scope.row.channel || '-' }}
             </template>
           </el-table-column>
           <el-table-column :label="t('modules.recharge.method')" min-width="100" align="center">
@@ -106,12 +106,20 @@ import { ElMessage } from 'element-plus';
 import { useI18n } from 'vue-i18n';
 import { useModal, usePagination } from '@/sheep/hooks';
 import { api, financeUtils } from '../finance.service';
+import adminApi from '../../../../admin/api';
 import UserDetail from '../../user/list/detail.vue';
 import RechargeDetail from './detail.vue';
 
 const { t } = useI18n();
 const { pageData } = usePagination();
 
+// 设置默认每页20条
+pageData.size = 20;
+
+// 支付通道列表
+const channelList = ref([]);
+const channelLoading = ref(false);
+
 // 搜索字段配置 - 使用计算属性以支持语言切换
 const searchFields = computed(() => ({
   userName: {
@@ -143,6 +151,16 @@ const searchFields = computed(() => ({
       { label: 'ROCKET', value: 'ROCKET' },
     ],
   },
+  channel: {
+    type: 'select',
+    label: t('modules.recharge.channel'),
+    placeholder: t('form.pleaseSelect') + t('modules.recharge.channel'),
+    width: 150,
+    options: channelList.value.map(channel => ({
+      label: channel.channel,
+      value: channel.channelName,
+    })),
+  },
   timeType: {
     type: 'select',
     label: t('modules.recharge.timeType'),
@@ -167,6 +185,7 @@ const defaultSearchValues = reactive({
   userPhone: '',
   orderNo: '',
   methodName: '',
+  channel: '',
   timeType: 1, // 默认下单时间
   date_range: [],
 });
@@ -212,6 +231,9 @@ async function getData(page, searchParams = {}) {
       params.endTime = searchParams.date_range[1];
       delete params.date_range;
     }
+    if (currentStatus.value !== 'all') {
+      params.status = parseInt(currentStatus.value);
+    }
 
     // 调用真实API
     const { code, data } = await api.recharge.list(params, false);
@@ -219,7 +241,7 @@ async function getData(page, searchParams = {}) {
     if (code == '200') {
       table.data = data.list || [];
       pageData.page = data.pageNum || 1;
-      pageData.size = data.pageSize || 10;
+      pageData.size = data.pageSize || 20;
       pageData.total = data.total || 0;
     }
   } catch (error) {
@@ -343,7 +365,23 @@ async function exportRecords() {
   }
 }
 
+// 获取支付通道列表
+async function getChannelList() {
+  channelLoading.value = true;
+  try {
+    const { code, data } = await adminApi.payment.channel.list({});
+    if (code === '200') {
+      channelList.value = data || [];
+    }
+  } catch (error) {
+    console.error('获取支付通道失败:', error);
+  } finally {
+    channelLoading.value = false;
+  }
+}
+
 onMounted(() => {
+  getChannelList();
   getData();
 });
 </script>

+ 48 - 1
src/app/shop/admin/finance/withdraw/index.vue

@@ -123,12 +123,16 @@ import { ElMessage } from 'element-plus';
 import { useI18n } from 'vue-i18n';
 import { useModal, usePagination } from '@/sheep/hooks';
 import { api, financeUtils } from '../finance.service';
+import adminApi from '../../../../admin/api';
 import UserDetail from '../../user/list/detail.vue';
 import WithdrawDetail from './detail.vue';
 
 const { t } = useI18n();
 const { pageData } = usePagination();
 
+// 设置默认每页20条
+pageData.size = 20;
+
 // 当前状态标签
 const currentStatus = ref('all');
 
@@ -138,6 +142,10 @@ const currentSearchParams = ref({});
 // 导出loading状态
 const exportLoading = ref(false);
 
+// 支付通道列表
+const channelList = ref([]);
+const channelLoading = ref(false);
+
 // 搜索字段配置 - 使用计算属性以支持语言切换
 const searchFields = computed(() => ({
   userName: {
@@ -168,6 +176,27 @@ const searchFields = computed(() => ({
       { label: t('modules.finance.accountEarnings'), value: 2 },
     ],
   },
+  methodName: {
+    type: 'select',
+    label: t('modules.withdraw.method'),
+    placeholder: t('form.pleaseSelect') + t('modules.withdraw.method'),
+    width: 120,
+    options: [
+      { label: 'ROCKET', value: 'ROCKET' },
+      { label: 'BKASH', value: 'BKASH' },
+      { label: 'NAGAD', value: 'NAGAD' },
+    ],
+  },
+  channel: {
+    type: 'select',
+    label: t('modules.withdraw.channel'),
+    placeholder: t('form.pleaseSelect') + t('modules.withdraw.channel'),
+    width: 150,
+    options: channelList.value.map(channel => ({
+      label: channel.channel,
+      value: channel.channelName,
+    })),
+  },
   timeType: {
     type: 'select',
     label: t('modules.withdraw.timeType'),
@@ -192,6 +221,8 @@ const defaultSearchValues = reactive({
   userPhone: '',
   orderNo: '',
   accountType: '',
+  methodName: '',
+  channel: '',
   timeType: 1, // 默认下单时间
   date_range: [],
 });
@@ -239,7 +270,7 @@ async function getData(page, searchParams = {}) {
     if (code == '200') {
       table.data = data.list || [];
       pageData.page = data.pageNum || 1;
-      pageData.size = data.pageSize || 10;
+      pageData.size = data.pageSize || 20;
       pageData.total = data.total || 0;
     }
   } catch (error) {
@@ -367,7 +398,23 @@ async function exportRecords() {
   }
 }
 
+// 获取支付通道列表
+async function getChannelList() {
+  channelLoading.value = true;
+  try {
+    const { code, data } = await adminApi.payment.channel.list({});
+    if (code === '200') {
+      channelList.value = data || [];
+    }
+  } catch (error) {
+    console.error('获取支付通道失败:', error);
+  } finally {
+    channelLoading.value = false;
+  }
+}
+
 onMounted(() => {
+  getChannelList();
   getData();
 });
 </script>

+ 126 - 8
src/app/shop/admin/order/order/index.vue

@@ -7,14 +7,6 @@
           <div class="search-container">
             <sa-search-simple :searchFields="searchFields" :defaultValues="defaultSearchValues"
               v-model="currentSearchParams" @search="handleSearch" @reset="handleReset">
-              <template #custom="{ data }">
-                <el-form-item :label="t('modules.order.orderTime')">
-                  <el-date-picker v-model="data.createTime" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss"
-                    format="YYYY-MM-DD HH:mm:ss" :range-separator="t('common.to')"
-                    :start-placeholder="t('common.startDate')" :end-placeholder="t('common.endDate')" :editable="false"
-                    style="width: 350px" />
-                </el-form-item>
-              </template>
             </sa-search-simple>
           </div>
           <el-tabs class="sa-tabs" v-model="currentStatus" @tab-change="handleTabChange">
@@ -179,6 +171,20 @@ import UserDetail from '../../user/list/detail.vue';
 
 const { t } = useI18n();
 
+// 设置默认每页20条
+// const { pageData } = usePagination(); // 已在下方声明
+
+// 快递公司列表配置
+const deliveryCompanies = [
+  { label: 'FedEx', value: 'FedEx' },
+  { label: 'UPS', value: 'UPS' },
+  { label: 'DHL', value: 'DHL' },
+  { label: 'Pathao Courier', value: 'Pathao Courier' },
+  { label: 'eDesh', value: 'eDesh' },
+  { label: 'Steadfast', value: 'Steadfast' },
+  { label: 'Redx', value: 'Redx' },
+];
+
 // 搜索字段配置 - 使用计算属性以支持语言切换
 const searchFields = computed(() => ({
   orderId: {
@@ -205,6 +211,31 @@ const searchFields = computed(() => ({
     placeholder: t('placeholders.inputTrackingNumber'),
     width: 200,
   },
+  deliveryName: {
+    type: 'select',
+    label: t('modules.order.deliveryCompany'),
+    placeholder: t('form.pleaseSelect') + t('modules.order.deliveryCompany'),
+    width: 180,
+    options: deliveryCompanies,
+  },
+  timeType: {
+    type: 'select',
+    label: t('modules.withdraw.timeType'),
+    placeholder: t('form.pleaseSelect') + t('modules.withdraw.timeType'),
+    width: 150,
+    options: [
+      { label: t('modules.order.orderTime'), value: 'create' },
+      { label: t('modules.order.payTime'), value: 'pay' },
+      { label: t('modules.order.deliveryTime'), value: 'delivery' },
+      { label: t('modules.order.finishTime'), value: 'finish' },
+    ],
+  },
+  date_range: {
+    type: 'daterange',
+    label: t('modules.withdraw.timeRange'),
+    placeholder: t('modules.withdraw.selectTimeRange'),
+    width: 400,
+  },
 }));
 
 // 默认搜索值
@@ -213,6 +244,9 @@ const defaultSearchValues = reactive({
   realName: '',
   userPhone: '',
   deliveryId: '',
+  deliveryName: '',
+  timeType: 'create', // 默认下单时间
+  date_range: [],
   createTime: [],
 });
 
@@ -309,6 +343,34 @@ async function getData(page, searchParams = null) {
       delete requestData.createTime;
     }
 
+    // 处理不同时间类型的搜索
+    if (requestData.date_range && requestData.date_range.length === 2) {
+      const timeType = requestData.timeType || 'create';
+
+      switch (timeType) {
+        case 'pay':
+          requestData.payStartTime = requestData.date_range[0];
+          requestData.payEndTime = requestData.date_range[1];
+          break;
+        case 'delivery':
+          requestData.deliveryStartTime = requestData.date_range[0];
+          requestData.deliveryEndTime = requestData.date_range[1];
+          break;
+        case 'finish':
+          requestData.finishStartTime = requestData.date_range[0];
+          requestData.finishEndTime = requestData.date_range[1];
+          break;
+        case 'create':
+        default:
+          requestData.startTime = requestData.date_range[0];
+          requestData.endTime = requestData.date_range[1];
+          break;
+      }
+
+      delete requestData.date_range;
+      delete requestData.timeType;
+    }
+
     const { code, data } = await api.order.list(requestData);
 
     if (code == '200') {
@@ -373,6 +435,34 @@ async function onExport() {
       delete exportParams.createTime;
     }
 
+    // 处理不同时间类型的搜索
+    if (exportParams.date_range && exportParams.date_range.length === 2) {
+      const timeType = exportParams.timeType || 'create';
+
+      switch (timeType) {
+        case 'pay':
+          exportParams.payStartTime = exportParams.date_range[0];
+          exportParams.payEndTime = exportParams.date_range[1];
+          break;
+        case 'delivery':
+          exportParams.deliveryStartTime = exportParams.date_range[0];
+          exportParams.deliveryEndTime = exportParams.date_range[1];
+          break;
+        case 'finish':
+          exportParams.finishStartTime = exportParams.date_range[0];
+          exportParams.finishEndTime = exportParams.date_range[1];
+          break;
+        case 'create':
+        default:
+          exportParams.startTime = exportParams.date_range[0];
+          exportParams.endTime = exportParams.date_range[1];
+          break;
+      }
+
+      delete exportParams.date_range;
+      delete exportParams.timeType;
+    }
+
     await api.order.export(exportParams, t('modules.order.orderRecords'));
   } catch (error) {
     console.error('导出订单失败:', error);
@@ -399,6 +489,34 @@ async function onExportDelivery() {
       delete exportParams.createTime;
     }
 
+    // 处理不同时间类型的搜索
+    if (exportParams.date_range && exportParams.date_range.length === 2) {
+      const timeType = exportParams.timeType || 'create';
+
+      switch (timeType) {
+        case 'pay':
+          exportParams.payStartTime = exportParams.date_range[0];
+          exportParams.payEndTime = exportParams.date_range[1];
+          break;
+        case 'delivery':
+          exportParams.deliveryStartTime = exportParams.date_range[0];
+          exportParams.deliveryEndTime = exportParams.date_range[1];
+          break;
+        case 'finish':
+          exportParams.finishStartTime = exportParams.date_range[0];
+          exportParams.finishEndTime = exportParams.date_range[1];
+          break;
+        case 'create':
+        default:
+          exportParams.startTime = exportParams.date_range[0];
+          exportParams.endTime = exportParams.date_range[1];
+          break;
+      }
+
+      delete exportParams.date_range;
+      delete exportParams.timeType;
+    }
+
     await api.order.exportDelivery(exportParams, t('modules.order.deliveryOrders'), 'exportDelivery');
   } finally {
     exportLoading.value = false;

+ 2 - 0
src/locales/en-US/index.json

@@ -1259,7 +1259,9 @@
       "specification": "Specification",
       "payAmount": "Payment Amount",
       "deliveryInfo": "Delivery Info",
+      "deliveryCompany": "Delivery Company",
       "expressCompany": "Express Company",
+      "finishTime": "Finish Time",
       "shipTest": "Ship Test",
       "noNickname": "No Nickname",
       "orderTrack": "Order Track",

+ 2 - 0
src/locales/zh-CN/index.json

@@ -1260,7 +1260,9 @@
       "specification": "规格",
       "payAmount": "付款金额",
       "deliveryInfo": "配送信息",
+      "deliveryCompany": "物流公司",
       "expressCompany": "快递公司",
+      "finishTime": "完成时间",
       "shipTest": "发货测试",
       "noNickname": "无昵称",
       "orderTrack": "订单轨迹",