index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <script setup lang="tsx">
  2. import { onMounted } from 'vue';
  3. import { useRoute, useRouter } from 'vue-router';
  4. import { NTag } from 'naive-ui';
  5. import {
  6. // fetchAudit,
  7. fetchGetAfterSalesOrderList
  8. } from '@/service/api/order-manage/after-sales-order';
  9. // import { fetchGetLoginUserList } from '@/service/api/common';
  10. // import { useAuth } from '@/hooks/business/auth';
  11. // import { copyTextToClipboard } from '@/utils/zt';
  12. import { useTable } from '@/components/zt/Table/hooks/useTable';
  13. // import { type } from '../../../../packages/axios/src/index';
  14. import {
  15. DJKOrderStatus,
  16. businessType,
  17. getSearchForm,
  18. orderStatus,
  19. refundOrderStatus
  20. } from '../normal-order/normal-order';
  21. const route = useRoute();
  22. const router = useRouter();
  23. // const ShipmentModal = useTemplateRef('Shipment');
  24. const columns: NaiveUI.TableColumn<Api.delivery.deliveryOrder>[] = [
  25. {
  26. key: 'refundNumber',
  27. title: '售后单号',
  28. align: 'center',
  29. width: 220
  30. },
  31. {
  32. key: 'consigneeAddress',
  33. title: '业务类型',
  34. align: 'center',
  35. width: 120,
  36. render: row => {
  37. return <NTag>{businessType[row.businessType as keyof typeof businessType] || row.businessType}</NTag>;
  38. }
  39. },
  40. {
  41. key: 'orderNumber',
  42. title: '原订单编号',
  43. align: 'center',
  44. width: 220
  45. },
  46. {
  47. key: 'info',
  48. title: '客户信息',
  49. align: 'center',
  50. width: 220,
  51. render: row => {
  52. return (
  53. <div>
  54. <div>
  55. {row.consigneeName}
  56. {row.consigneeMobile}
  57. </div>
  58. {row.dvyType == 2 ? <div>自提</div> : <div>{row.consigneeAddress}</div>}
  59. </div>
  60. );
  61. }
  62. },
  63. {
  64. key: 'refundOrderStatus',
  65. title: '售后状态',
  66. align: 'center',
  67. width: 120,
  68. render: row => {
  69. const statusKey = row.refundOrderStatus as keyof typeof refundOrderStatus;
  70. const statusText = refundOrderStatus[statusKey] || '售后已完成';
  71. return <NTag>{statusText}</NTag>;
  72. }
  73. },
  74. {
  75. key: 'status',
  76. title: '订单状态',
  77. align: 'center',
  78. width: 120,
  79. render: row => {
  80. const statusKey = row.hbOrderStatus as keyof typeof orderStatus;
  81. let statusText;
  82. if (row.businessType == 'XNSP') {
  83. if (row.hbOrderStatus == 60 || row.hbOrderStatus == 50 || row.hbOrderStatus == 0) {
  84. statusText = '订单取消';
  85. } else {
  86. statusText = '订单完成';
  87. }
  88. } else if (row.businessType == 'DJK') {
  89. statusText = DJKOrderStatus[statusKey as keyof typeof DJKOrderStatus] || '未知状态';
  90. } else {
  91. statusText = orderStatus[statusKey] || '未知状态';
  92. }
  93. return <NTag>{statusText}</NTag>;
  94. }
  95. },
  96. {
  97. key: 'createTime',
  98. title: '申请时间',
  99. align: 'center',
  100. width: 180,
  101. render: row => {
  102. return <div>{row.createTime?.replace('T', ' ')}</div>;
  103. }
  104. },
  105. {
  106. key: 'refundMoney',
  107. title: '退款金额',
  108. align: 'center',
  109. width: 180,
  110. render: row => {
  111. return <div>¥{row.refundMoney}</div>;
  112. }
  113. }
  114. ];
  115. const [registerTable, { refresh, setFieldsValue }] = useTable({
  116. searchFormConfig: {
  117. schemas: [
  118. ...getSearchForm(),
  119. {
  120. label: '售后编号',
  121. component: 'NInput',
  122. field: 'refundNumber'
  123. }
  124. ]
  125. },
  126. tableConfig: {
  127. keyField: 'id',
  128. title: '',
  129. opWdith: 160,
  130. showAddButton: false,
  131. showTableHeaderAction: true,
  132. scrollX: 1800,
  133. fieldMapToTime: [['createTime', ['startTime', 'endTime']]]
  134. }
  135. });
  136. function handleOrderDetail(row: Api.delivery.deliveryOrder) {
  137. if (!row.orderNumber) {
  138. window.$message?.error('订单异常');
  139. }
  140. router.push({
  141. path: '/order-manage/normal-order',
  142. query: {
  143. orderNumber: row.orderNumber
  144. }
  145. });
  146. }
  147. function handleAfterSalesOrderDetail(row: Api.delivery.deliveryOrder) {
  148. if (!row.refundNumber) {
  149. window.$message?.error('订单异常');
  150. }
  151. router.push({
  152. path: '/order-manage/after-sales-order-detail',
  153. query: {
  154. refundNumber: row.refundNumber
  155. }
  156. });
  157. }
  158. onMounted(() => {
  159. setTimeout(async () => {
  160. await setFieldsValue({ orderNumber: route.query.orderNumber });
  161. refresh();
  162. }, 1000);
  163. });
  164. </script>
  165. <template>
  166. <LayoutTable>
  167. <ZTable :columns="columns" :api="fetchGetAfterSalesOrderList" @register="registerTable">
  168. <template #op="{ row }">
  169. <NButton size="small" type="primary" ghost @click="handleAfterSalesOrderDetail(row)">售后详情</NButton>
  170. <NButton size="small" type="primary" ghost @click="handleOrderDetail(row)">订单详情</NButton>
  171. </template>
  172. </ZTable>
  173. </LayoutTable>
  174. </template>
  175. <style scoped></style>