index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <template>
  2. <div class="p-2">
  3. <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
  4. <div v-show="showSearch" class="mb-[10px]">
  5. <el-card shadow="hover">
  6. <el-form ref="queryFormRef" :model="queryParams" :inline="true">
  7. <el-form-item label="订单编号" prop="orderNo">
  8. <el-input v-model="queryParams.orderNo" placeholder="请输入订单编号" clearable @keyup.enter="handleQuery" />
  9. </el-form-item>
  10. <el-form-item label="客户编号" prop="customerCode">
  11. <el-input v-model="queryParams.customerCode" placeholder="请输入客户编号" clearable @keyup.enter="handleQuery" />
  12. </el-form-item>
  13. <el-form-item label="客户名称" prop="customerName">
  14. <el-input v-model="queryParams.customerName" placeholder="请输入客户名称" clearable @keyup.enter="handleQuery" />
  15. </el-form-item>
  16. <el-form-item label="订单来源" prop="orderSource">
  17. <el-select v-model="queryParams.orderSource" placeholder="请选择订单来源" clearable>
  18. <el-option v-for="dict in order_source" :key="dict.value" :label="dict.label" :value="dict.value" />
  19. </el-select>
  20. </el-form-item>
  21. <!-- <el-form-item label="订单状态" prop="orderStatus">
  22. <el-select v-model="queryParams.orderStatus" placeholder="请选择订单状态" clearable>
  23. <el-option v-for="dict in order_status" :key="dict.value" :label="dict.label" :value="dict.value" />
  24. </el-select>
  25. </el-form-item> -->
  26. <el-form-item label="订单时间" prop="dateRange">
  27. <el-date-picker v-model="dateRange" type="daterange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button type="primary" icon="Search" @click="handleQuery()">搜索</el-button>
  31. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  32. </el-form-item>
  33. </el-form>
  34. </el-card>
  35. </div>
  36. </transition>
  37. <el-card shadow="never">
  38. <template #header>
  39. <el-row :gutter="10" class="mb8">
  40. <el-col :span="18"> 订单分配列表 </el-col>
  41. <!-- <el-col :span="1.5">
  42. <el-button type="primary" :disabled="!ids.length" plain @click="handleAssignment(null)">批量整单分配</el-button>
  43. </el-col>
  44. <el-col :span="1.5">
  45. <el-button type="primary" :disabled="!ids.length" plain>关闭订单</el-button>
  46. </el-col>
  47. <el-col :span="1.5">
  48. <el-button type="primary" :disabled="!ids.length" plain>删除订单</el-button>
  49. </el-col>
  50. <el-col :span="1.5">
  51. <el-button type="primary" :disabled="!ids.length" plain>导出订单</el-button>
  52. </el-col> -->
  53. </el-row>
  54. </template>
  55. <el-table v-loading="loading" border :data="orderMainList" @selection-change="handleSelectionChange">
  56. <el-table-column type="selection" width="55" align="center" :resizable="false" />
  57. <el-table-column label="订单时间" align="center" prop="orderTime" :resizable="false" />
  58. <el-table-column label="订单编号" align="center" prop="orderNo" :resizable="false" />
  59. <el-table-column label="客户编号" align="center" prop="customerCode" :resizable="false" />
  60. <el-table-column label="订单总金额" align="center" prop="totalAmount" :resizable="false" />
  61. <el-table-column label="支付方式" align="center" prop="payType" :resizable="false">
  62. <template #default="scope">
  63. <dict-tag :options="pay_method" :value="scope.row.payType" />
  64. </template>
  65. </el-table-column>
  66. <!-- <el-table-column label="业务员" align="center" prop="businessStaff" :resizable="false" />
  67. <el-table-column label="客服" align="center" prop="customerService" :resizable="false" /> -->
  68. <el-table-column label="归属部门" align="center" prop="businessDept" :resizable="false" />
  69. <el-table-column label="订单来源" align="center" prop="orderSource">
  70. <template #default="scope">
  71. <dict-tag :options="order_source" :value="scope.row.orderSource" />
  72. </template>
  73. </el-table-column>
  74. <el-table-column label="分配状态" align="center" prop="assignmentStatus" :resizable="false">
  75. <template #default="scope">
  76. <dict-tag :options="order_assignment_status" :value="scope.row.assignmentStatus" />
  77. </template>
  78. </el-table-column>
  79. <!-- <el-table-column label="当前平台" align="center" prop="platformCode">
  80. <template #default="scope">
  81. <dict-tag :options="sys_platform_code" :value="scope.row.platformCode" />
  82. </template>
  83. </el-table-column> -->
  84. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="180" :resizable="false">
  85. <template #default="scope">
  86. <el-button link type="primary" @click="handleReview(scope.row)">详情</el-button>
  87. <el-button link type="primary" v-if="scope.row.assignmentStatus != '1'" @click="handleAssignment(scope.row)">分配</el-button>
  88. <el-button link type="primary" v-if="scope.row.assignmentStatus == '1'" @click="handleAssignment(scope.row)">分配记录</el-button>
  89. </template>
  90. </el-table-column>
  91. </el-table>
  92. <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
  93. </el-card>
  94. <!-- 订单分配对话框 -->
  95. <assignment-dialog ref="assignmentDialogRef" @success="getList" />
  96. <!-- 拆单分配对话框 -->
  97. <split-assign-dialog ref="splitAssignDialogRef" @success="getList" />
  98. </div>
  99. </template>
  100. <script setup name="OrderAssignment" lang="ts">
  101. import { listOrderAssignment, getOrderMain, delOrderMain } from '@/api/order/orderMain';
  102. import { OrderMainVO, OrderMainQuery, OrderMainForm } from '@/api/order/orderMain/types';
  103. import AssignmentDialog from './assignmentDialog.vue';
  104. import SplitAssignDialog from './splitAssignDialog.vue';
  105. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  106. const { order_assignment_status, order_check_status, pay_method, order_source, sys_platform_code } = toRefs<any>(
  107. proxy?.useDict('order_assignment_status', 'order_check_status', 'pay_method', 'order_source', 'sys_platform_code')
  108. );
  109. const orderMainList = ref<OrderMainVO[]>([]);
  110. const buttonLoading = ref(false);
  111. const loading = ref(true);
  112. const showSearch = ref(true);
  113. const ids = ref<Array<string | number>>([]);
  114. const single = ref(true);
  115. const multiple = ref(true);
  116. const total = ref(0);
  117. const router = useRouter();
  118. const queryFormRef = ref<ElFormInstance>();
  119. const orderMainFormRef = ref<ElFormInstance>();
  120. const assignmentDialogRef = ref<InstanceType<typeof AssignmentDialog>>();
  121. const splitAssignDialogRef = ref<InstanceType<typeof SplitAssignDialog>>();
  122. const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
  123. const dialog = reactive<DialogOption>({
  124. visible: false,
  125. title: ''
  126. });
  127. const initFormData: OrderMainForm = {
  128. id: undefined,
  129. orderNo: undefined,
  130. shipmentNo: undefined,
  131. subOrderNo: undefined,
  132. companyId: undefined,
  133. customerId: undefined,
  134. customerCode: undefined,
  135. userId: undefined,
  136. shippingAddressId: undefined,
  137. purchaseReason: undefined,
  138. invoiceType: undefined,
  139. payType: undefined,
  140. warehouseId: undefined,
  141. creditLimit: undefined,
  142. expectedDeliveryTime: undefined,
  143. businessStaff: undefined,
  144. customerService: undefined,
  145. businessDept: undefined,
  146. userDept: undefined,
  147. productQuantity: undefined,
  148. shippingFee: undefined,
  149. totalAmount: undefined,
  150. payableAmount: undefined,
  151. paymentStatus: undefined,
  152. orderSource: undefined,
  153. orderStatus: undefined,
  154. orderTime: undefined,
  155. confirmTime: undefined,
  156. shippingTime: undefined,
  157. receivingTime: undefined,
  158. shippedQuantity: undefined,
  159. unshippedQuantity: undefined,
  160. packageCount: undefined,
  161. signedQuantity: undefined,
  162. afterSaleCompleted: undefined,
  163. afterSalePending: undefined,
  164. deliveryDesc: undefined,
  165. pushStatus: undefined,
  166. attachmentPath: undefined,
  167. deliveryType: undefined,
  168. orderCategory: undefined,
  169. productCode: undefined,
  170. cancelReason: undefined,
  171. expenseType: undefined,
  172. userNo: undefined,
  173. status: undefined,
  174. remark: undefined,
  175. isSplitChild: undefined,
  176. orderProductBos: [],
  177. customerSalesInfoVo: {}
  178. };
  179. const data = reactive<PageData<OrderMainForm, OrderMainQuery>>({
  180. form: { ...initFormData },
  181. queryParams: {
  182. pageNum: 1,
  183. pageSize: 10,
  184. orderNo: undefined,
  185. shipmentNo: undefined,
  186. subOrderNo: undefined,
  187. companyId: undefined,
  188. customerCode: undefined,
  189. customerId: undefined,
  190. userId: undefined,
  191. payType: undefined,
  192. warehouseId: undefined,
  193. expectedDeliveryTime: undefined,
  194. businessStaff: undefined,
  195. customerService: undefined,
  196. businessDept: undefined,
  197. productQuantity: undefined,
  198. totalAmount: undefined,
  199. payableAmount: undefined,
  200. paymentStatus: undefined,
  201. orderSource: undefined,
  202. orderStatus: undefined,
  203. orderTime: undefined,
  204. confirmTime: undefined,
  205. status: undefined,
  206. isSplitChild: '1',
  207. params: {}
  208. },
  209. rules: {}
  210. });
  211. const { queryParams, form, rules } = toRefs(data);
  212. /** 查询订单主信息列表 */
  213. const getList = async () => {
  214. loading.value = true;
  215. const res = await listOrderAssignment(proxy?.addDateRange(queryParams.value, dateRange.value));
  216. orderMainList.value = res.rows;
  217. total.value = res.total;
  218. loading.value = false;
  219. };
  220. /** 取消按钮 */
  221. const cancel = () => {
  222. reset();
  223. dialog.visible = false;
  224. };
  225. /** 表单重置 */
  226. const reset = () => {
  227. form.value = { ...initFormData };
  228. orderMainFormRef.value?.resetFields();
  229. };
  230. /** 搜索按钮操作 */
  231. const handleQuery = (orderStatus?: string) => {
  232. if (orderStatus) {
  233. queryParams.value.orderStatus = orderStatus;
  234. } else {
  235. queryParams.value.orderStatus = undefined;
  236. }
  237. queryParams.value.pageNum = 1;
  238. getList();
  239. };
  240. /** 重置按钮操作 */
  241. const resetQuery = () => {
  242. dateRange.value = ['', ''];
  243. queryFormRef.value?.resetFields();
  244. handleQuery();
  245. };
  246. /** 多选框选中数据 */
  247. const handleSelectionChange = (selection: OrderMainVO[]) => {
  248. ids.value = selection.map((item) => item.id);
  249. single.value = selection.length != 1;
  250. multiple.value = !selection.length;
  251. };
  252. const handleReview = (row?: OrderMainVO) => {
  253. router.push({
  254. path: '/order-manage/order-sendDetail',
  255. query: { id: row.id }
  256. });
  257. };
  258. /** 订单分配按钮操作 */
  259. const handleAssignment = async (row?: OrderMainVO | null) => {
  260. let orderIds: Array<string | number>;
  261. if (row) {
  262. // 单个订单分配 - 直接打开统一的分配抽屉
  263. splitAssignDialogRef.value?.open(row.id, row.assignmentStatus);
  264. } else {
  265. // 批量分配 - 只支持整单分配
  266. if (!ids.value || ids.value.length === 0) {
  267. proxy?.$modal.msgWarning('请选择要分配的订单');
  268. return;
  269. }
  270. orderIds = ids.value;
  271. assignmentDialogRef.value?.open(orderIds, undefined, undefined);
  272. }
  273. };
  274. /** 删除按钮操作 */
  275. const handleDelete = async (row?: OrderMainVO) => {
  276. const _ids = row?.id || ids.value;
  277. await proxy?.$modal.confirm('是否确认删除订单主信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
  278. await delOrderMain(_ids);
  279. proxy?.$modal.msgSuccess('删除成功');
  280. await getList();
  281. };
  282. /** 导出按钮操作 */
  283. const handleExport = () => {
  284. proxy?.download(
  285. 'order/orderMain/export',
  286. {
  287. ...queryParams.value
  288. },
  289. `orderMain_${new Date().getTime()}.xlsx`
  290. );
  291. };
  292. onMounted(() => {
  293. getList();
  294. });
  295. onActivated(() => {
  296. getList();
  297. });
  298. </script>