|
|
@@ -1,284 +1,265 @@
|
|
|
<template>
|
|
|
- <ele-page flex-table>
|
|
|
- <!-- 搜索表单 -->
|
|
|
- <order-search @search="reload" />
|
|
|
- <ele-card :body-style="{ paddingTop: '8px' }" flex-table>
|
|
|
- <!-- 表格 -->
|
|
|
- <ele-pro-table
|
|
|
- ref="tableRef"
|
|
|
- row-key="postId"
|
|
|
- :columns="columns"
|
|
|
- :datasource="datasource"
|
|
|
- :show-overflow-tooltip="true"
|
|
|
- v-model:selections="selections"
|
|
|
- highlight-current-row
|
|
|
- :export-config="{ fileName: pageConfig.fileName }"
|
|
|
- :cache-key="pageConfig.cacheKey"
|
|
|
- >
|
|
|
- <template #toolbar>
|
|
|
- <slot name="toolbar"></slot>
|
|
|
- </template>
|
|
|
+ <ele-page flex-table>
|
|
|
+ <!-- 搜索表单 -->
|
|
|
+ <order-search @search="reload" />
|
|
|
+ <ele-card :body-style="{ paddingTop: '8px' }" flex-table>
|
|
|
+ <!-- 表格 -->
|
|
|
+ <ele-pro-table ref="tableRef" row-key="orderId" :columns="columns" :datasource="datasource"
|
|
|
+ :show-overflow-tooltip="true" v-model:selections="selections" highlight-current-row
|
|
|
+ :export-config="{ fileName: pageConfig.fileName }" :cache-key="pageConfig.cacheKey">
|
|
|
+ <template #toolbar>
|
|
|
+ <slot name="toolbar"></slot>
|
|
|
+ </template>
|
|
|
|
|
|
- <template #status="{ row }">
|
|
|
- <dict-data
|
|
|
- code="sys_normal_disable"
|
|
|
- type="tag"
|
|
|
- :model-value="row.status"
|
|
|
- />
|
|
|
- </template>
|
|
|
- <template #orderNumber="{ row }">
|
|
|
- <order-number :row="row"></order-number>
|
|
|
- </template>
|
|
|
- <template #customer="{ row }">
|
|
|
- <order-customer :row="row"></order-customer>
|
|
|
- </template>
|
|
|
- <template #amount="{ row }">
|
|
|
- <order-amount :row="row"></order-amount>
|
|
|
- </template>
|
|
|
- <template #time="{ row }">
|
|
|
- <order-time :row="row"></order-time>
|
|
|
- </template>
|
|
|
- <template #sender="{ row }">
|
|
|
- <div class="common-text">
|
|
|
- <el-text>推送人:</el-text>
|
|
|
- <el-text>周武泰</el-text>
|
|
|
- </div>
|
|
|
- <div class="common-text">
|
|
|
- <el-text>推送时间:</el-text>
|
|
|
- <el-text>2024-11-21 10:24:56 </el-text>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template #dealer="{ row }">
|
|
|
- <div class="common-text">
|
|
|
- <el-text>处理人:</el-text>
|
|
|
- <el-text>周武泰</el-text>
|
|
|
- </div>
|
|
|
- <div class="common-text">
|
|
|
- <el-text>处理时间:</el-text>
|
|
|
- <el-text>2024-11-21 10:24:56 </el-text>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template #remarks="{ row }">
|
|
|
- <el-popover trigger="hover" width="240px">
|
|
|
- <template #reference>
|
|
|
- <el-button
|
|
|
- :icon="Flag"
|
|
|
- link
|
|
|
- style="font-size: 20px"
|
|
|
- @click="handleRemarks(row)"
|
|
|
- >
|
|
|
- </el-button>
|
|
|
- </template>
|
|
|
- <orderTimeline
|
|
|
- :records="activities"
|
|
|
- title="备注历史记录"
|
|
|
- ></orderTimeline>
|
|
|
- </el-popover>
|
|
|
- </template>
|
|
|
+ <template #status="{ row }">
|
|
|
+ <dict-data code="order_status" type="tag" :model-value="row.status" />
|
|
|
+ </template>
|
|
|
+ <template #orderNumber="{ row }">
|
|
|
+ <order-number :row="row"></order-number>
|
|
|
+ </template>
|
|
|
+ <template #customer="{ row }">
|
|
|
+ <order-customer :row="row"></order-customer>
|
|
|
+ </template>
|
|
|
+ <template #amount="{ row }">
|
|
|
+ <order-amount :row="row"></order-amount>
|
|
|
+ </template>
|
|
|
+ <template #time="{ row }">
|
|
|
+ <order-time :row="row"></order-time>
|
|
|
+ </template>
|
|
|
+ <template #sender="{ row }">
|
|
|
+ <div class="common-text">
|
|
|
+ <el-text>推送人:</el-text>
|
|
|
+ <el-text>周武泰</el-text>
|
|
|
+ </div>
|
|
|
+ <div class="common-text">
|
|
|
+ <el-text>推送时间:</el-text>
|
|
|
+ <el-text>2024-11-21 10:24:56 </el-text>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #dealer="{ row }">
|
|
|
+ <div class="common-text">
|
|
|
+ <el-text>处理人:</el-text>
|
|
|
+ <el-text>周武泰</el-text>
|
|
|
+ </div>
|
|
|
+ <div class="common-text">
|
|
|
+ <el-text>处理时间:</el-text>
|
|
|
+ <el-text>2024-11-21 10:24:56 </el-text>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #remarks="{ row }">
|
|
|
+ <el-popover trigger="hover" width="240px">
|
|
|
+ <template #reference>
|
|
|
+ <el-button :icon="Flag" link style="font-size: 20px" @click="handleRemarks(row)">
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ <orderTimeline :records="activities" title="备注历史记录"></orderTimeline>
|
|
|
+ </el-popover>
|
|
|
+ </template>
|
|
|
|
|
|
- <template #action="{ row }">
|
|
|
- <slot name="action" :row="row"></slot>
|
|
|
- </template>
|
|
|
- </ele-pro-table>
|
|
|
- </ele-card>
|
|
|
+ <template #action="{ row }">
|
|
|
+ <slot name="action" :row="row"></slot>
|
|
|
+ </template>
|
|
|
+ </ele-pro-table>
|
|
|
+ </ele-card>
|
|
|
|
|
|
- <slot></slot>
|
|
|
- <orderRemarks ref="remarksRef" />
|
|
|
- </ele-page>
|
|
|
+ <slot></slot>
|
|
|
+ <orderRemarks ref="remarksRef" />
|
|
|
+ </ele-page>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
- import { ref, getCurrentInstance } from 'vue';
|
|
|
- import { ElMessageBox } from 'element-plus/es';
|
|
|
- import { EleMessage } from 'ele-admin-plus/es';
|
|
|
- import { DownloadOutlined } from '@/components/icons';
|
|
|
- import { Flag, ChatDotSquare } from '@element-plus/icons-vue';
|
|
|
- import OrderSearch from './order-search.vue';
|
|
|
- import OrderNumber from '@/views/recycleOrder/components/order-number.vue';
|
|
|
- import OrderCustomer from '@/views/recycleOrder/components/order-customer.vue';
|
|
|
- import OrderAmount from '@/views/recycleOrder/components/order-amount.vue';
|
|
|
- import OrderTime from '@/views/recycleOrder/components/order-time.vue';
|
|
|
- import { useDictData } from '@/utils/use-dict-data';
|
|
|
- import { download, toFormData, checkDownloadRes } from '@/utils/common';
|
|
|
- import orderRemarks from '@/views/recycleOrder/components/order-remarks.vue';
|
|
|
- import orderTimeline from '@/views/recycleOrder/components/order-timeline.vue';
|
|
|
+import { ref, getCurrentInstance } from 'vue';
|
|
|
+import { ElMessageBox } from 'element-plus/es';
|
|
|
+import { EleMessage } from 'ele-admin-plus/es';
|
|
|
+import { DownloadOutlined } from '@/components/icons';
|
|
|
+import { Flag, ChatDotSquare } from '@element-plus/icons-vue';
|
|
|
+import OrderSearch from './order-search.vue';
|
|
|
+import OrderNumber from '@/views/recycleOrder/components/order-number.vue';
|
|
|
+import OrderCustomer from '@/views/recycleOrder/components/order-customer.vue';
|
|
|
+import OrderAmount from '@/views/recycleOrder/components/order-amount.vue';
|
|
|
+import OrderTime from '@/views/recycleOrder/components/order-time.vue';
|
|
|
+import { useDictData } from '@/utils/use-dict-data';
|
|
|
+import { download, toFormData, checkDownloadRes } from '@/utils/common';
|
|
|
+import orderRemarks from '@/views/recycleOrder/components/order-remarks.vue';
|
|
|
+import orderTimeline from '@/views/recycleOrder/components/order-timeline.vue';
|
|
|
|
|
|
- let props = defineProps({
|
|
|
+let props = defineProps({
|
|
|
pageConfig: {
|
|
|
- type: Object,
|
|
|
- default: () => ({
|
|
|
- cacheKey: 'recycleOrderTable',
|
|
|
- fileName: '回收订单查询'
|
|
|
- })
|
|
|
+ type: Object,
|
|
|
+ default: () => ({
|
|
|
+ cacheKey: 'abnormalSignTable',
|
|
|
+ fileName: '异常订单查询'
|
|
|
+ })
|
|
|
},
|
|
|
- pageUrl: { type: String, default: '/system/post/list' },
|
|
|
- exportUrl: { type: String, default: '/system/post/export' }
|
|
|
- });
|
|
|
- let { proxy } = getCurrentInstance();
|
|
|
- /** 字典数据 */
|
|
|
- const [statusDicts] = useDictData(['sys_normal_disable']);
|
|
|
+ pageUrl: { type: String, default: '/order/orderInfo/exceptionOrderList' },
|
|
|
+ exportUrl: { type: String, default: '/order/orderInfo/exceptionOrderExport' }
|
|
|
+});
|
|
|
+let { proxy } = getCurrentInstance();
|
|
|
+/** 字典数据 */
|
|
|
+const [statusDicts] = useDictData(['sys_normal_disable']);
|
|
|
|
|
|
- /** 表格实例 */
|
|
|
- const tableRef = ref(null);
|
|
|
+/** 表格实例 */
|
|
|
+const tableRef = ref(null);
|
|
|
|
|
|
- /** 表格列配置 */
|
|
|
- const columns = ref([
|
|
|
+/** 表格列配置 */
|
|
|
+const columns = ref([
|
|
|
{
|
|
|
- type: 'selection',
|
|
|
- columnKey: 'selection',
|
|
|
- width: 50,
|
|
|
- align: 'center',
|
|
|
- fixed: 'left'
|
|
|
+ type: 'selection',
|
|
|
+ columnKey: 'selection',
|
|
|
+ width: 50,
|
|
|
+ align: 'center',
|
|
|
+ fixed: 'left'
|
|
|
},
|
|
|
- { label: '单号', prop: 'orderNumber', slot: 'orderNumber', minWidth: 180 },
|
|
|
+ { label: '单号', prop: 'orderNumber', slot: 'orderNumber', minWidth: 240 },
|
|
|
{ label: '客户', prop: 'customer', slot: 'customer', minWidth: 360 },
|
|
|
{ label: '信息', prop: 'amount', slot: 'amount', minWidth: 160 },
|
|
|
{
|
|
|
- label: '状态',
|
|
|
- prop: 'status',
|
|
|
- slot: 'status',
|
|
|
- formatter: (row) =>
|
|
|
- statusDicts.value.find((d) => d.dictValue == row.status)?.dictLabel
|
|
|
+ label: '状态',
|
|
|
+ prop: 'status',
|
|
|
+ slot: 'status',
|
|
|
+ minWidth: 140,
|
|
|
+ formatter: (row) =>
|
|
|
+ statusDicts.value.find((d) => d.dictValue == row.status)?.dictLabel
|
|
|
},
|
|
|
+ { label: '时间', prop: 'time', slot: 'time', minWidth: 220 },
|
|
|
{ label: '推送人', prop: 'sender', slot: 'sender', minWidth: 170 },
|
|
|
{ label: '处理人', prop: 'dealer', slot: 'dealer', minWidth: 170 },
|
|
|
{
|
|
|
- label: '处理结果',
|
|
|
- prop: 'status',
|
|
|
- slot: 'status',
|
|
|
- formatter: (row) =>
|
|
|
- statusDicts.value.find((d) => d.dictValue == row.status)?.dictLabel
|
|
|
+ label: '处理结果',
|
|
|
+ prop: 'status',
|
|
|
+ slot: 'status',
|
|
|
+ formatter: (row) =>
|
|
|
+ statusDicts.value.find((d) => d.dictValue == row.status)?.dictLabel
|
|
|
},
|
|
|
- { label: '时间', prop: 'time', slot: 'time', minWidth: 200 },
|
|
|
{ label: '处理备注', prop: 'remarks', slot: 'remarks' },
|
|
|
{
|
|
|
- columnKey: 'action',
|
|
|
- label: '操作',
|
|
|
- width: 180,
|
|
|
- align: 'center',
|
|
|
- slot: 'action',
|
|
|
- fixed: 'right',
|
|
|
+ columnKey: 'action',
|
|
|
+ label: '操作',
|
|
|
+ width: 180,
|
|
|
+ align: 'center',
|
|
|
+ slot: 'action',
|
|
|
+ fixed: 'right',
|
|
|
}
|
|
|
- ]);
|
|
|
+]);
|
|
|
|
|
|
- /** 表格选中数据 */
|
|
|
- const selections = ref([]);
|
|
|
+/** 表格选中数据 */
|
|
|
+const selections = ref([]);
|
|
|
|
|
|
- /** 当前编辑数据 */
|
|
|
- const current = ref(null);
|
|
|
+/** 当前编辑数据 */
|
|
|
+const current = ref(null);
|
|
|
|
|
|
- /** 是否显示编辑弹窗 */
|
|
|
- const showEdit = ref(false);
|
|
|
+/** 是否显示编辑弹窗 */
|
|
|
+const showEdit = ref(false);
|
|
|
|
|
|
- async function queryPage(params) {
|
|
|
+async function queryPage(params) {
|
|
|
const res = await proxy.$http.get(props.pageUrl, { params });
|
|
|
if (res.data.code === 200) {
|
|
|
- return res.data;
|
|
|
+ return res.data;
|
|
|
}
|
|
|
return Promise.reject(new Error(res.data.msg));
|
|
|
- }
|
|
|
+}
|
|
|
|
|
|
- /** 表格数据源 */
|
|
|
- const datasource = ({ pages, where, orders }) => {
|
|
|
+/** 表格数据源 */
|
|
|
+const datasource = ({ pages, where, orders }) => {
|
|
|
return queryPage({ ...where, ...orders, ...pages });
|
|
|
- };
|
|
|
+};
|
|
|
|
|
|
- /** 搜索 */
|
|
|
- const reload = (where) => {
|
|
|
+/** 搜索 */
|
|
|
+const reload = (where) => {
|
|
|
tableRef.value?.reload?.({ page: 1, where });
|
|
|
- };
|
|
|
+};
|
|
|
|
|
|
- /** 批量操作 */
|
|
|
- const operatBatch = ({ row, url, title }) => {
|
|
|
+/** 批量操作 */
|
|
|
+const operatBatch = ({ row, url, title }) => {
|
|
|
const rows = row == null ? selections.value : [row];
|
|
|
if (!rows.length) {
|
|
|
- EleMessage.error('请至少选择一条数据');
|
|
|
- return;
|
|
|
+ EleMessage.error('请至少选择一条数据');
|
|
|
+ return;
|
|
|
}
|
|
|
title = title || '是否确认当前操作?';
|
|
|
ElMessageBox.confirm(title, '提示', {
|
|
|
- type: 'warning',
|
|
|
- draggable: true
|
|
|
+ type: 'warning',
|
|
|
+ draggable: true
|
|
|
})
|
|
|
- .then(() => {
|
|
|
- const loading = EleMessage.loading({
|
|
|
- message: '请求中..',
|
|
|
- plain: true
|
|
|
- });
|
|
|
+ .then(() => {
|
|
|
+ const loading = EleMessage.loading({
|
|
|
+ message: '请求中..',
|
|
|
+ plain: true
|
|
|
+ });
|
|
|
|
|
|
- proxy.$http
|
|
|
- .delete(url)
|
|
|
- .then(() => {
|
|
|
- loading.close();
|
|
|
- EleMessage.success('操作成功');
|
|
|
- reload();
|
|
|
- })
|
|
|
- .catch((e) => {
|
|
|
- loading.close();
|
|
|
- EleMessage.error(e.message);
|
|
|
- });
|
|
|
- })
|
|
|
- .catch(() => {});
|
|
|
- };
|
|
|
+ proxy.$http
|
|
|
+ .delete(url)
|
|
|
+ .then(() => {
|
|
|
+ loading.close();
|
|
|
+ EleMessage.success('操作成功');
|
|
|
+ reload();
|
|
|
+ })
|
|
|
+ .catch((e) => {
|
|
|
+ loading.close();
|
|
|
+ EleMessage.error(e.message);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => { });
|
|
|
+};
|
|
|
|
|
|
- /// 导出数据
|
|
|
- async function exportPage(params, name) {
|
|
|
+/// 导出数据
|
|
|
+async function exportPage(params, name) {
|
|
|
const res = await proxy.$http({
|
|
|
- url: props.exportUrl,
|
|
|
- method: 'POST',
|
|
|
- data: toFormData(params),
|
|
|
- responseType: 'blob'
|
|
|
+ url: props.exportUrl,
|
|
|
+ method: 'POST',
|
|
|
+ data: toFormData(params),
|
|
|
+ responseType: 'blob'
|
|
|
});
|
|
|
await checkDownloadRes(res);
|
|
|
download(
|
|
|
- res.data,
|
|
|
- name ? `${name}_${Date.now()}.xlsx` : `post_${Date.now()}.xlsx`
|
|
|
+ res.data,
|
|
|
+ name ? `${name}_${Date.now()}.xlsx` : `post_${Date.now()}.xlsx`
|
|
|
);
|
|
|
- }
|
|
|
+}
|
|
|
|
|
|
- /** 导出数据 */
|
|
|
- const exportData = (name) => {
|
|
|
+/** 导出数据 */
|
|
|
+const exportData = (name) => {
|
|
|
const loading = EleMessage.loading({
|
|
|
- message: '请求中..',
|
|
|
- plain: true
|
|
|
+ message: '请求中..',
|
|
|
+ plain: true
|
|
|
});
|
|
|
tableRef.value?.fetch?.(({ where, orders }) => {
|
|
|
- exportPage({ ...where, ...orders }, name)
|
|
|
- .then(() => {
|
|
|
- loading.close();
|
|
|
- })
|
|
|
- .catch((e) => {
|
|
|
- loading.close();
|
|
|
- EleMessage.error(e.message);
|
|
|
- });
|
|
|
+ exportPage({ ...where, ...orders }, name)
|
|
|
+ .then(() => {
|
|
|
+ loading.close();
|
|
|
+ })
|
|
|
+ .catch((e) => {
|
|
|
+ loading.close();
|
|
|
+ EleMessage.error(e.message);
|
|
|
+ });
|
|
|
});
|
|
|
- };
|
|
|
+};
|
|
|
|
|
|
- //修改备注
|
|
|
- const remarksRef = ref(null);
|
|
|
- function handleRemarks(row) {
|
|
|
+//修改备注
|
|
|
+const remarksRef = ref(null);
|
|
|
+function handleRemarks(row) {
|
|
|
remarksRef.value?.handleOpen(row);
|
|
|
- }
|
|
|
- const activities = [
|
|
|
+}
|
|
|
+const activities = [
|
|
|
{
|
|
|
- content: 'Event start',
|
|
|
- timestamp: '2018-04-15',
|
|
|
- color: '#0bbd87',
|
|
|
- icon: ChatDotSquare
|
|
|
+ content: 'Event start',
|
|
|
+ timestamp: '2018-04-15',
|
|
|
+ color: '#0bbd87',
|
|
|
+ icon: ChatDotSquare
|
|
|
},
|
|
|
{
|
|
|
- content: 'Approved',
|
|
|
- timestamp: '2018-04-13',
|
|
|
- color: '#0bbd87',
|
|
|
- icon: ChatDotSquare
|
|
|
+ content: 'Approved',
|
|
|
+ timestamp: '2018-04-13',
|
|
|
+ color: '#0bbd87',
|
|
|
+ icon: ChatDotSquare
|
|
|
},
|
|
|
{
|
|
|
- content: 'Success',
|
|
|
- timestamp: '2018-04-11',
|
|
|
- color: '#0bbd87',
|
|
|
- icon: ChatDotSquare
|
|
|
+ content: 'Success',
|
|
|
+ timestamp: '2018-04-11',
|
|
|
+ color: '#0bbd87',
|
|
|
+ icon: ChatDotSquare
|
|
|
}
|
|
|
- ];
|
|
|
+];
|
|
|
|
|
|
- defineExpose({ reload, exportData, operatBatch });
|
|
|
+defineExpose({ reload, exportData, operatBatch });
|
|
|
</script>
|