|
|
@@ -3,7 +3,7 @@
|
|
|
<div class="bg-fff flex1 ov-hd d-flex flex-cln">
|
|
|
<div class="pd-16 border-bottom">
|
|
|
<div class="f-s-20 c-333 f-w-7 mb-12">订单管理</div>
|
|
|
- <searchTabs v-model="queryParams.publicFlag" @change="handleQuery" :list="test_order_status" key-label="name" key-value="type" key-count="num"></searchTabs>
|
|
|
+ <searchTabs v-model="queryParams.status" @change="handleQuery" :list="tabs"></searchTabs>
|
|
|
</div>
|
|
|
<div class="flex1 ov-hd pd-16 d-flex flex-cln">
|
|
|
<el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="auto">
|
|
|
@@ -12,19 +12,19 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="下单时间段" prop="dateRange">
|
|
|
<div class="d-flex" style="width: 180px">
|
|
|
- <DateRange v-model="queryParams.dateRange" v-model:start-date="queryParams.startDate" v-model:end-date="queryParams.endDate"></DateRange>
|
|
|
+ <DateRange v-model="queryParams.dateRange" v-model:start-date="queryParams.startDate" v-model:end-date="queryParams.endDate" @change="handleQuery"></DateRange>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="套餐名称:" prop="keyword">
|
|
|
- <el-input v-model="queryParams.keyword" placeholder="请输入套餐名称关键字" clearable style="width: 160px" @keyup.enter="handleQuery" />
|
|
|
+ <el-form-item label="套餐名称:" prop="packageName">
|
|
|
+ <el-input v-model="queryParams.packageName" placeholder="请输入套餐名称关键字" clearable style="width: 160px" @keyup.enter="handleQuery" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="会员等级" prop="permitType">
|
|
|
- <el-select style="width: 160px" v-model="queryParams.permitType" clearable placeholder="请选择会员等级" @change="handleQuery">
|
|
|
+ <el-form-item label="会员等级" prop="vipLevel">
|
|
|
+ <el-select style="width: 160px" v-model="queryParams.vipLevel" clearable placeholder="请选择会员等级" @change="handleQuery">
|
|
|
<el-option v-for="item in vip_level" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="买家名称:" prop="createByName">
|
|
|
- <el-input v-model="queryParams.createByName" placeholder="搜买家名称及关键字" clearable style="width: 160px" @keyup.enter="handleQuery" />
|
|
|
+ <el-form-item label="买家名称:" prop="cpyName">
|
|
|
+ <el-input v-model="queryParams.cpyName" placeholder="搜买家名称及关键字" clearable style="width: 160px" @keyup.enter="handleQuery" />
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
|
@@ -34,15 +34,42 @@
|
|
|
<div class="flex1 ov-hd">
|
|
|
<vxe-table :loading="loading" border :data="list" min-height="0" max-height="100%">
|
|
|
<!-- 序号 -->
|
|
|
- <vxe-column type="seq" width="60" title="序号" align="center" />
|
|
|
- <vxe-column title="订单号" field="orderNo" min-width="100" :formatter="colNoData" />
|
|
|
- <vxe-column title="套餐名称" field="packageName" min-width="100" :formatter="colNoData" />
|
|
|
- <vxe-column title="买家" field="packageName" min-width="100" :formatter="colNoData" />
|
|
|
- <vxe-column title="会员等级" field="packageName" min-width="100" :formatter="colNoData" />
|
|
|
- <vxe-column title="检测项目" field="packageName" min-width="100" :formatter="colNoData" />
|
|
|
- <vxe-column title="检测周期" field="packageName" min-width="100" :formatter="colNoData" />
|
|
|
- <vxe-column title="订单周期" field="packageName" min-width="100" :formatter="colNoData" />
|
|
|
- <vxe-column title="实付款" field="packageName" min-width="100" :formatter="colNoData" />
|
|
|
+ <vxe-column type="seq" width="60" title="序号" fixed="left" align="center" />
|
|
|
+ <vxe-column title="订单号" field="orderNo" fixed="left" min-width="100" :formatter="colNoData" />
|
|
|
+ <vxe-column title="套餐名称" min-width="100">
|
|
|
+ <template #default="{ row }">{{ row?.testOrderDetailList[0]?.packageName }}</template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="买家" field="cpyName" min-width="100" :formatter="colNoData" />
|
|
|
+ <vxe-column title="会员等级" field="vipLevelName" min-width="100" :formatter="colNoData" />
|
|
|
+ <vxe-column title="检测项目" min-width="200">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div>
|
|
|
+ {{ row?.testOrderDetailList[0]?.itemNames }}等{{ row?.testOrderDetailList[0]?.itemCount }}项
|
|
|
+ <el-button @click="queryRowItems(row?.testOrderDetailList[0])" type="primary" text>点击查看详情{{ '>' }}</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="检测周期" width="90">
|
|
|
+ <template #default="{ row }">{{ row?.testOrderDetailList[0]?.period }}个工作日</template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="实付款" width="90">
|
|
|
+ <template #default="{ row }">{{ row?.totalAmount }}元</template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="下单人" field="createName" width="90" :formatter="colNoData" />
|
|
|
+ <vxe-column title="下单时间" field="createTime" width="130" :formatter="colNoData" />
|
|
|
+ <vxe-column title="订单状态" width="100" fixed="right">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div class="c-primary">{{ selectDictLabel(test_order_status_bg, row?.status) }}</div>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="订单备注" field="remark" min-width="100" fixed="right" :formatter="colNoData" />
|
|
|
+ <vxe-column title="操作" width="180" fixed="right">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-button text class="small-btn-font" type="primary" size="small">添加备注</el-button>
|
|
|
+ <span></span>
|
|
|
+ <el-button @click="router.push({ path: 'order-detail', query: { orderId: row?.id} })" text class="small-btn-font" type="primary" size="small">查看详情</el-button>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
</vxe-table>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -50,31 +77,38 @@
|
|
|
<div class="pd-5"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <rowItems v-if="showRowItems" v-model:show="showRowItems" :packageId="rowId"></rowItems>
|
|
|
</template>
|
|
|
<script setup name="orders" lang="ts">
|
|
|
-import { testOrderList } from '@/api/cdt/orders';
|
|
|
+import { testOrderList, testOrderListCount } from '@/api/cdt/orders';
|
|
|
import { colNoData } from '@/utils/noData';
|
|
|
import { DateRange, searchTabs } from '@/views/models';
|
|
|
import NP from 'number-precision';
|
|
|
+import { rowItems } from '../models';
|
|
|
+import { debounce } from 'lodash';
|
|
|
+import { selectDictLabel } from '@/utils/ruoyi';
|
|
|
+const router = useRouter();
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
-const { dm_package_type, dm_permit_type, vip_level, test_order_status } = toRefs<any>(proxy?.useDict('dm_package_type', 'dm_permit_type', 'vip_level', 'test_order_status'));
|
|
|
+const { dm_package_type, dm_permit_type, vip_level, test_order_status_bg } = toRefs<any>(proxy?.useDict('dm_package_type', 'dm_permit_type', 'vip_level', 'test_order_status_bg'));
|
|
|
const queryParams = ref<any>({
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
|
+ status: '2',
|
|
|
dateRange: []
|
|
|
});
|
|
|
const queryFormRef = ref<any>();
|
|
|
+const showRowItems = ref(false);
|
|
|
const loading = ref(false);
|
|
|
const total = ref(0);
|
|
|
const list = ref<any>([]);
|
|
|
-const getList = async () => {
|
|
|
+const getList = debounce(async () => {
|
|
|
loading.value = true;
|
|
|
const res = await testOrderList(queryParams.value);
|
|
|
if (!res || res.code !== 200) return;
|
|
|
list.value = res.rows;
|
|
|
total.value = res.total;
|
|
|
loading.value = false;
|
|
|
-};
|
|
|
+}, 500);
|
|
|
const handleQuery = () => {
|
|
|
queryParams.value.pageNum = 1;
|
|
|
getList();
|
|
|
@@ -83,7 +117,21 @@ const resetQuery = () => {
|
|
|
queryFormRef.value?.resetFields();
|
|
|
handleQuery();
|
|
|
};
|
|
|
+const rowId = ref('');
|
|
|
+const queryRowItems = (row: any) => {
|
|
|
+ rowId.value = row?.packageId;
|
|
|
+ showRowItems.value = true;
|
|
|
+};
|
|
|
+// 获取tabs统计数据
|
|
|
+const tabs = ref<any[]>([]);
|
|
|
+const getTabsCount = debounce(async () => {
|
|
|
+ const res = await testOrderListCount();
|
|
|
+ if (!res || res.code !== 200) return;
|
|
|
+ // this.tabsList = res.rows;
|
|
|
+ tabs.value = res.data.map(({ status, statusCount }: any) => ({ label: selectDictLabel(test_order_status_bg.value, status), value: status, count: statusCount }));
|
|
|
+}, 500);
|
|
|
onMounted(() => {
|
|
|
getList();
|
|
|
+ getTabsCount()
|
|
|
});
|
|
|
</script>
|