| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- <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="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>{{row.exceptOrderCheckInfo?.createName}}</el-text>
- </div>
- <div class="common-text">
- <el-text>推送时间:</el-text>
- <el-text>{{row.exceptOrderCheckInfo?.createTime||'-'}}</el-text>
- </div>
- </template>
- <template #dealer="{ row }">
- <div class="common-text">
- <el-text>处理人:</el-text>
- <el-text>{{row.exceptOrderCheckInfo?.checkName||'-'}}</el-text>
- </div>
- <div class="common-text">
- <el-text>处理时间:</el-text>
- <el-text>{{row.exceptOrderCheckInfo?.checkTime||'-'}}</el-text>
- </div>
- </template>
- <template #checkStatus="{ row }">
- <dict-data code="abnormal_check_status" type="tag" :model-value="row.exceptOrderCheckInfo?.checkStatus" />
- </template>
- <template #remarks="{ row }">
- <el-popover trigger="hover" width="240px" @show="handleShowPopover(row)" @hide="showOrderId = ''">
- <template #reference>
- <el-button :icon="Flag" link style="font-size: 20px" @click="handleRemarks(row)">
- </el-button>
- </template>
- <orderTimeline :orderId="showOrderId" title="备注历史记录"></orderTimeline>
- </el-popover>
- </template>
- <template #action="{ row }">
- <slot name="action" :row="row"></slot>
- </template>
- </ele-pro-table>
- </ele-card>
- <slot></slot>
- <orderRemarks ref="remarksRef" />
- </ele-page>
- </template>
- <script setup>
- import { ref, getCurrentInstance, computed } from 'vue';
- import { ElMessageBox } from 'element-plus/es';
- import { EleMessage } from 'ele-admin-plus/es';
- 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({
- pageConfig: {
- type: Object,
- default: () => ({
- cacheKey: 'abnormalSignTable',
- fileName: '异常订单查询'
- })
- },
- 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 baseColumns = [
- {
- type: 'selection',
- columnKey: 'selection',
- width: 50,
- align: 'center',
- fixed: 'left'
- },
- { 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',
- minWidth: 140,
- formatter: (row) =>
- statusDicts.value.find((d) => d.dictValue == row.status)?.dictLabel
- },
- { label: '时间', prop: 'time', slot: 'time', minWidth: 220 },
- { label: '推送人', prop: 'createName', slot: 'sender', minWidth: 170 },
- { label: '处理备注', prop: 'remarks', slot: 'remarks' },
- {
- columnKey: 'action',
- label: '操作',
- width: 180,
- align: 'center',
- slot: 'action',
- fixed: 'right',
- }
- ];
- const historyColumns = [
- { label: '处理人', prop: 'checkName', slot: 'dealer', minWidth: 170 },
- {
- label: '处理结果',
- prop: 'checkStatus',
- slot: 'checkStatus',
- minWidth: 120
- }
- ];
- const columns = computed(() => {
- // Insert history columns before the action column if not in pending status
- if (props.pageConfig.pageUrl.includes('exceptionHistoryList')) {
- return [
- ...baseColumns.slice(0, -2),
- ...historyColumns,
- ...baseColumns.slice(-2)
- ];
- }
- return baseColumns;
- });
- /** 表格选中数据 */
- const selections = ref([]);
- /** 当前编辑数据 */
- const current = ref(null);
- /** 是否显示编辑弹窗 */
- const showEdit = ref(false);
- //备注弹窗显示
- const showOrderId = ref();
- function handleShowPopover(row) {
- showOrderId.value = row.orderId;
- }
- async function queryPage(params) {
- const res = await proxy.$http.get(props.pageConfig.pageUrl, { params });
- if (res.data.code === 200) {
- return res.data;
- }
- return Promise.reject(new Error(res.data.msg));
- }
- /** 表格数据源 */
- const datasource = ({ pages, where, orders }) => {
- return queryPage({ ...where, ...orders, ...pages });
- };
- /** 搜索 */
- const reload = (where) => {
- tableRef.value?.reload?.({ page: 1, where });
- };
- /** 批量操作 */
- const operatBatch = ({ row, url, title }) => {
- const rows = row == null ? selections.value : [row];
- if (!rows.length) {
- EleMessage.error('请至少选择一条数据');
- return;
- }
- title = title || '是否确认当前操作?';
- ElMessageBox.confirm(title, '提示', {
- type: 'warning',
- draggable: 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(() => { });
- };
- /// 导出数据
- async function exportPage(params, name) {
- const res = await proxy.$http({
- 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`
- );
- }
- /** 导出数据 */
- const exportData = (name) => {
- const loading = EleMessage.loading({
- message: '请求中..',
- plain: true
- });
- tableRef.value?.fetch?.(({ where, orders }) => {
- exportPage({ ...where, ...orders }, name)
- .then(() => {
- loading.close();
- })
- .catch((e) => {
- loading.close();
- EleMessage.error(e.message);
- });
- });
- };
- //修改备注
- const remarksRef = ref(null);
- function handleRemarks(row) {
- remarksRef.value?.handleOpen(row);
- }
- defineExpose({ reload, exportData, operatBatch });
- </script>
|