hwq hai 1 ano
pai
achega
aae6123dab
Modificáronse 40 ficheiros con 11477 adicións e 4422 borrados
  1. 138 91
      src/api/finance.js
  2. 548 0
      src/api/shopOrder.js
  3. 96 82
      src/layout/navBars/breadcrumb/index.vue
  4. 4 8
      src/layout/navBars/breadcrumb/user.vue
  5. 34 28
      src/layout/navBars/index.vue
  6. 494 0
      src/pages/finance/shopExtract/index.vue
  7. 48 48
      src/pages/order/orderList/components/tableExpand.vue
  8. 512 487
      src/pages/order/orderList/components/tableFrom.vue
  9. 664 722
      src/pages/order/orderList/components/tableList.vue
  10. 257 282
      src/pages/order/orderList/handle/orderDetails.vue
  11. 77 80
      src/pages/order/orderList/handle/orderRecord.vue
  12. 72 73
      src/pages/order/orderList/handle/orderRemark.vue
  13. 533 562
      src/pages/order/orderList/handle/orderSend.vue
  14. 196 194
      src/pages/order/orderList/index.vue
  15. 81 77
      src/pages/order/orderList/orderlistDetails.vue
  16. 793 820
      src/pages/order/orderList/splitList.vue
  17. 462 0
      src/pages/shop_finance/userExtract/index.vue
  18. 631 0
      src/pages/shop_order/invoice/index.vue
  19. 188 0
      src/pages/shop_order/invoice/orderDetall.vue
  20. 319 0
      src/pages/shop_order/offline/index.vue
  21. 54 0
      src/pages/shop_order/orderList/components/tableExpand.vue
  22. 523 0
      src/pages/shop_order/orderList/components/tableFrom.vue
  23. 717 0
      src/pages/shop_order/orderList/components/tableList.vue
  24. 299 0
      src/pages/shop_order/orderList/handle/orderDetails.vue
  25. 84 0
      src/pages/shop_order/orderList/handle/orderRecord.vue
  26. 78 0
      src/pages/shop_order/orderList/handle/orderRemark.vue
  27. 548 0
      src/pages/shop_order/orderList/handle/orderSend.vue
  28. 205 0
      src/pages/shop_order/orderList/index.vue
  29. 94 0
      src/pages/shop_order/orderList/orderlistDetails.vue
  30. 866 0
      src/pages/shop_order/orderList/splitList.vue
  31. 686 0
      src/pages/shop_order/refund/index.vue
  32. 119 97
      src/router/index.js
  33. 85 77
      src/router/modules/finance.js
  34. 631 632
      src/router/modules/setting.js
  35. 37 0
      src/router/modules/shop_finance.js
  36. 74 0
      src/router/modules/shop_order.js
  37. 5 3
      src/router/routers.js
  38. 60 57
      src/store/index.js
  39. 163 0
      src/store/module/shopOrder.js
  40. 2 2
      vue.config.js

+ 138 - 91
src/api/finance.js

@@ -14,10 +14,10 @@ import request from '@/libs/request';
  * @description 资金监控 -- 筛选类型
  */
 export function billTypeApi() {
-  return request({
-    url: 'finance/finance/bill_type',
-    method: 'get',
-  });
+	return request({
+		url: 'finance/finance/bill_type',
+		method: 'get',
+	});
 }
 
 /**
@@ -25,11 +25,11 @@ export function billTypeApi() {
  * @param {Object} param data {Object} 传值
  */
 export function billListApi(data) {
-  return request({
-    url: 'finance/finance/list',
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: 'finance/finance/list',
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -37,11 +37,11 @@ export function billListApi(data) {
  * @param {Object} param data {Object} 传值
  */
 export function commissionListApi(data) {
-  return request({
-    url: 'finance/finance/commission_list',
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: 'finance/finance/commission_list',
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -49,10 +49,10 @@ export function commissionListApi(data) {
  * @param {Number} param id {Number} 佣金记录ID
  */
 export function commissionDetailApi(id) {
-  return request({
-    url: `finance/finance/user_info/${id}`,
-    method: 'get',
-  });
+	return request({
+		url: `finance/finance/user_info/${id}`,
+		method: 'get',
+	});
 }
 
 /**
@@ -60,11 +60,11 @@ export function commissionDetailApi(id) {
  * @param {Number} param id {Number} 佣金记录 用户ID
  */
 export function extractlistApi(id, data) {
-  return request({
-    url: `finance/finance/extract_list/${id}`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `finance/finance/extract_list/${id}`,
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -72,11 +72,11 @@ export function extractlistApi(id, data) {
  * @param {Object} param data {Object} 提现申请传值
  */
 export function cashListApi(data) {
-  return request({
-    url: `finance/extract`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `finance/extract`,
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -84,10 +84,10 @@ export function cashListApi(data) {
  * @param {Number} param id {Number} 提现申请id
  */
 export function cashEditApi(id) {
-  return request({
-    url: `finance/extract/${id}/edit`,
-    method: 'get',
-  });
+	return request({
+		url: `finance/extract/${id}/edit`,
+		method: 'get',
+	});
 }
 
 /**
@@ -95,11 +95,11 @@ export function cashEditApi(id) {
  * @param {Number} param id {Number} 提现申请id
  */
 export function refuseApi(id, data) {
-  return request({
-    url: `finance/extract/refuse/${id}`,
-    method: 'put',
-    data,
-  });
+	return request({
+		url: `finance/extract/refuse/${id}`,
+		method: 'put',
+		data,
+	});
 }
 
 /**
@@ -107,11 +107,11 @@ export function refuseApi(id, data) {
  * @param {Number} param id {Number} 提现申请id
  */
 export function adoptApi(id, data) {
-  return request({
-    url: `finance/extract/adopt/${id}`,
-    method: 'put',
-    data,
-  });
+	return request({
+		url: `finance/extract/adopt/${id}`,
+		method: 'put',
+		data,
+	});
 }
 
 /**
@@ -119,11 +119,11 @@ export function adoptApi(id, data) {
  * @param {Object} param data {Object} 充值记录传值
  */
 export function rechargelistApi(data) {
-  return request({
-    url: `finance/recharge`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `finance/recharge`,
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -131,11 +131,11 @@ export function rechargelistApi(data) {
  * @param {Object} param data {Object} 用户充值数据传值
  */
 export function userRechargeApi(data) {
-  return request({
-    url: `finance/recharge/user_recharge`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `finance/recharge/user_recharge`,
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -143,10 +143,10 @@ export function userRechargeApi(data) {
  * @param {Number} param data {Number} 充值记录id
  */
 export function refundEditApi(id) {
-  return request({
-    url: `finance/recharge/${id}/refund_edit`,
-    method: 'get',
-  });
+	return request({
+		url: `finance/recharge/${id}/refund_edit`,
+		method: 'get',
+	});
 }
 
 /**
@@ -154,11 +154,11 @@ export function refundEditApi(id) {
  * @param {Number} param data {Number} 请求参数data
  */
 export function userFinanceApi(data) {
-  return request({
-    url: `export/userFinance`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `export/userFinance`,
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -166,11 +166,11 @@ export function userFinanceApi(data) {
  * @param {Number} param data {Number} 请求参数data
  */
 export function userCommissionApi(data) {
-  return request({
-    url: `export/userCommission`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `export/userCommission`,
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -178,11 +178,11 @@ export function userCommissionApi(data) {
  * @param {Number} param data {Number} 请求参数data
  */
 export function exportUserRechargeApi(data) {
-  return request({
-    url: `export/userRecharge`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `export/userRecharge`,
+		method: 'get',
+		params: data,
+	});
 }
 
 /**
@@ -190,42 +190,89 @@ export function exportUserRechargeApi(data) {
  * @param {Number} param data {Number} 请求参数data
  */
 export function getFlowList(data) {
-  return request({
-    url: `statistic/flow/get_list`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `statistic/flow/get_list`,
+		method: 'get',
+		params: data,
+	});
 }
 /**
  * @description 资金流水 -- 备注
  * @param {Number} param id {Number} 提现申请id
  */
 export function setMarks(id, data) {
-  return request({
-    url: `statistic/flow/set_mark/${id}`,
-    method: 'post',
-    data,
-  });
+	return request({
+		url: `statistic/flow/set_mark/${id}`,
+		method: 'post',
+		data,
+	});
 }
 /**
  * @description 财务管理 -- 余额列表
  * @param {Number} param data {Number} 请求参数data
  */
 export function getBalanceList(data) {
-  return request({
-    url: `finance/balance/list`,
-    method: 'get',
-    params: data,
-  });
+	return request({
+		url: `finance/balance/list`,
+		method: 'get',
+		params: data,
+	});
 }
 /**
  * @description 余额列表-- 备注
  * @param {Number} balanceMark id {Number} 提现申请id
  */
 export function setBalanceMark(id, data) {
-  return request({
-    url: `finance/balance/set_mark/${id}`,
-    method: 'post',
-    data,
-  });
+	return request({
+		url: `finance/balance/set_mark/${id}`,
+		method: 'post',
+		data,
+	});
 }
+
+/**
+ * @description 商家提现申请 -- 列表
+ * @param {Object} param data {Object} 提现申请传值
+ */
+export function shopCashListApi(data) {
+	return request({
+		url: `merchant/extract/lst`,
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 商家提现申请 -- 编辑表单
+ * @param {Number} param id {Number} 提现申请id
+ */
+export function shopCashEditApi(id) {
+	return request({
+		url: `merchant/extract/${id}/edit`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 商家提现申请 -- 拒绝申请
+ * @param {Number} param id {Number} 提现申请id
+ */
+export function shopRefuseApi(id, data) {
+	return request({
+		url: `merchant/extract/refuse/${id}`,
+		method: 'post',
+		data,
+	});
+}
+
+/**
+ * @description 商家提现申请 -- 通过申请
+ * @param {Number} param id {Number} 提现申请id
+ */
+export function shopAdoptApi(id, data) {
+	return request({
+		url: `merchant/extract/adopt/${id}`,
+		method: 'get',
+		data,
+	});
+}

+ 548 - 0
src/api/shopOrder.js

@@ -0,0 +1,548 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/libs/request';
+
+/**
+ * @description 订单管理--列表
+ * @param {Object} param data {Object} 传值参数
+ */
+export function orderList(data) {
+	return request({
+		url: 'mer/order/list',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 发票头部统计
+ * @param {Object} param data {Object} 传值参数
+ */
+export function orderInvoiceChart(data) {
+	return request({
+		url: 'mer/order/invoice/chart',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 发票头部统计
+ * @param {Object} param data {Object} 传值参数
+ */
+export function orderInvoiceList(data) {
+	return request({
+		url: 'mer/order/invoice/list',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 发票提交订单
+ * @param {Object} param data {Object} 传值参数
+ */
+export function orderInvoiceSet(id, data) {
+	return request({
+		url: `mer/order/invoice/set/${id}`,
+		method: 'post',
+		data,
+	});
+}
+
+/**
+ * @description 发票订单详情;
+ * @param {Object} param data {Object} 传值参数
+ */
+export function orderInvoiceInfo(id) {
+	return request({
+		url: `mer/order/invoice_order_info/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 订单数据--列表
+ * @param {Object} param data {Object} 传值参数
+ */
+export function getOrdes(data) {
+	return request({
+		url: 'mer/order/chart',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 订单表单编辑数据
+ * @param {Number} param id {Number} 订单id
+ */
+export function getOrdeDatas(id) {
+	return request({
+		url: `mer/order/edit/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 订单表单详情数据
+ * @param {Number} param id {Number} 订单id
+ */
+export function getDataInfo(id) {
+	return request({
+		url: `mer/order/info/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 订单表单详情数据-新
+ * @param {Number} param id {Number} 订单id
+ */
+export function getDataInfoNew(id) {
+	return request({
+		url: `mer/refund/info/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 修改备注信息
+ * @param {Number} param data.id {Number} 订单id
+ * @param {String} param data.remark {String} 备注信息
+ */
+export function putRemarkData(data) {
+	return request({
+		url: `mer/order/remark/${data.id}`,
+		method: 'put',
+		data: data.remark,
+	});
+}
+
+/**
+ * @description 获取订单记录
+ * @param {Number} param data.id {Number} 订单id
+ * @param {String} param data.datas {String} 分页参数
+ */
+export function getOrderRecord(data) {
+	return request({
+		url: `mer/order/status/${data.id}`,
+		method: 'get',
+		params: data.datas,
+	});
+}
+
+/**
+ * @description 获取退款表单数据
+ * @param {Number} param id {Number} 订单id
+ */
+export function getRefundFrom(id) {
+	return request({
+		url: `mer/order/refund/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 新版-获取退款表单数据
+ * @param {Number} param id {Number} 订单id
+ */
+export function getNewRefundFrom(id) {
+	return request({
+		url: `mer/refund/refund/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 获取快递公司
+ */
+export function getExpressData(status) {
+	return request({
+		url: `mer/order/express_list?status=` + status,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 获取不退款表单数据
+ * @param {Number} param id {Number} 订单id
+ */
+export function getnoRefund(id) {
+	return request({
+		url: `mer/order/no_refund/${id}`,
+		method: 'get',
+	});
+}
+/**
+ * @description 新版-获取不退款表单数据
+ * @param {Number} param id {Number} 订单id
+ */
+export function getNewnoRefundFrom(id) {
+	return request({
+		url: `mer/refund/no_refund/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 发送货提交表单
+ * @param {Number} param data.id {Number} 订单id
+ * @param {Object} param data.datas {Object} 表单信息
+ */
+export function putDelivery(data) {
+	return request({
+		url: `mer/order/delivery/${data.id}`,
+		method: 'put',
+		data: data.datas,
+	});
+}
+
+export function orderSheetInfo() {
+	return request({
+		url: 'mer/order/sheet_info',
+		method: 'get',
+	});
+}
+
+/**
+ * 所有配送员列表
+ */
+export function deliveryList() {
+	return request({
+		url: 'mer/order/delivery/index',
+		method: 'get',
+	});
+}
+
+/**
+ * 订单时获取所有配送员列表
+ */
+export function orderDeliveryList() {
+	return request({
+		url: 'mer/order/delivery/list',
+		method: 'get',
+	});
+}
+
+/**
+ * 列表修改账号状态
+ * @param {*} data data
+ */
+export function orderDeliveryStatus(data) {
+	return request({
+		url: `mer/order/delivery/set_status/${data.id}/${data.status}`,
+		method: 'get',
+	});
+}
+
+/**
+ * 编辑配送员表单
+ * @param {*} id id
+ */
+export function orderDeliveryEdit(id) {
+	return request({
+		url: `mer/order/delivery/${id}/edit`,
+		method: 'get',
+	});
+}
+
+/**
+ * 新增配送员表单
+ */
+export function orderDeliveryAdd() {
+	return request({
+		url: 'mer/order/delivery/add',
+		method: 'get',
+	});
+}
+
+/**
+ * 电子面单模板
+ * @param {com} data 快递公司编号
+ */
+export function orderExpressTemp(data) {
+	return request({
+		url: 'mer/order/express/temp',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 子订单列表---拆单
+ * @param {Object} param data {Object} 传值参数
+ */
+export function splitOrderList(id) {
+	return request({
+		url: `mer/order/split_order/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 获取订单可拆分商品列表
+ * @param {Object} param data {Object} 传值参数
+ */
+export function splitCartInfo(id) {
+	return request({
+		url: `mer/order/split_cart_info/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 拆单发送货
+ * @param {Number} param data.id {Number} 订单id
+ * @param {Object} param data.datas {Object} 表单信息
+ */
+export function splitDelivery(data) {
+	return request({
+		url: `mer/order/split_delivery/${data.id}`,
+		method: 'put',
+		data: data.datas,
+	});
+}
+
+/**
+ * @description 获取退积分表单
+ * @param {Number} param id {Number} 订单id
+ */
+export function refundIntegral(id) {
+	return request({
+		url: `mer/order/refund_integral/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 立即支付
+ * @param {String} param path {String} 请求地址
+ * @param {String} param method {String} 请求方式
+ */
+export function payOffline(path, method) {
+	return request({
+		url: path,
+		method: method,
+	});
+}
+
+/**
+ * @description 配送信息表单
+ * @param {Number} param id {Number} 订单id
+ */
+export function getDistribution(id) {
+	return request({
+		url: `mer/order/distribution/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 订单物流信息
+ * @param {Number} param id {Number} 订单id
+ */
+export function getExpress(id) {
+	return request({
+		url: `mer/order/express/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description  订单核销
+ * @param {String} param data {String} 核销内容
+ */
+export function putWrite(data) {
+	return request({
+		url: 'mer/order/write',
+		method: 'post',
+		data: data,
+	});
+}
+
+/**
+ * @description 订单管理 -- 导出
+ */
+export function storeOrderApi(data) {
+	return request({
+		url: `mer/export/storeOrder`,
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 核销单个订单
+ */
+export function writeUpdate(order_id) {
+	return request({
+		url: `mer/order/write_update/${order_id}`,
+		method: 'put',
+	});
+}
+
+/**
+ * 收银订单
+ */
+export function orderScanList(data) {
+	return request({
+		url: 'mer/order/scan_list',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * 线下收款码
+ */
+export function orderOfflineScan(id) {
+	return request({
+		url: 'mer/order/offline_scan',
+		method: 'get',
+		params: id,
+	});
+}
+
+/**
+ * @description 售后订单
+ * @param {Object} param data {Object} 传值参数
+ */
+export function orderRefundList(data) {
+	return request({
+		url: 'mer/refund/list',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 批量发货记录
+ * @param {Object} param data {Object} 传值参数
+ */
+export function queueIndex(data) {
+	return request({
+		url: 'mer/queue/index',
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 批量发货-手动
+ * @param {Object} param data {Object} 传值参数
+ */
+export function handBatchDelivery(data) {
+	return request({
+		url: 'mer/order/hand/batch_delivery',
+		method: 'get',
+		params: data,
+	});
+}
+/**
+ * @description 下载
+ * @param {Object} param data {Object} 传值参数
+ */
+export function batchOrderDelivery(id, type, catchType) {
+	return request({
+		url: `mer/export/batchOrderDelivery/${id}/${type}/${catchType}`,
+		method: 'get',
+	});
+}
+/**
+ * @description 积分商城订单 -- 导出
+ */
+export function storeIntegralOrder(data) {
+	return request({
+		url: `mer/export/storeIntegralOrder`,
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 任务列表-查看
+ * @param {Object} param data {Object} 传值参数
+ */
+export function deliveryLog(id, type, data) {
+	return request({
+		url: `mer/queue/delivery/log/${id}/${type}`,
+		method: 'get',
+		params: data,
+	});
+}
+
+/**
+ * @description 下载物流公司对照表
+ * @param {Object} param data {Object} 传值参数
+ */
+export function exportExpressList(id) {
+	return request({
+		url: 'mer/export/expressList',
+		method: 'get',
+	});
+}
+
+/**
+ * @description 批量发货-自动
+ * @param {Object} param data {Object} 传值参数
+ */
+export function otherBatchDelivery(data) {
+	return request({
+		url: 'mer/order/other/batch_delivery',
+		method: 'post',
+		data,
+	});
+}
+/**
+ * @description 重新执行
+ * @param {Object} param data {Object} 传值参数
+ */
+export function queueAgain(id, type) {
+	return request({
+		url: `mer/queue/again/do_queue/${id}/${type}`,
+		method: 'get',
+	});
+}
+/**
+ * @description 清除异常任务
+ * @param {Object} param data {Object} 传值参数
+ */
+export function queueDel(id, type) {
+	return request({
+		url: `mer/queue/del/wrong_queue/${id}/${type}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 停止任务
+ * @param {Object} param data {Object} 传值参数
+ */
+export function stopWrongQueue(id) {
+	return request({
+		url: `mer/queue/stop/wrong_queue/${id}`,
+		method: 'get',
+	});
+}
+
+/**
+ * @description 修改退款订单备注信息
+ * @param {Number} param data.id {Number} 订单id
+ * @param {String} param data.remark {String} 备注信息
+ */
+export function putRefundRemarkData(data) {
+	return request({
+		url: `mer/refund/remark/${data.id}`,
+		method: 'put',
+		data: data.remark,
+	});
+}

+ 96 - 82
src/layout/navBars/breadcrumb/index.vue

@@ -1,89 +1,103 @@
 <template>
-  <div class="layout-navbars-breadcrumb-index">
-    <Logo v-if="setIsShowLogo" />
-    <Breadcrumb />
-    <Horizontal :menuList="menuList" v-if="isLayoutTransverse" />
-    <transverseAside v-if="isLayoutClassic" />
-    <User />
-  </div>
+	<div class="layout-navbars-breadcrumb-index">
+		<Logo v-if="setIsShowLogo" />
+		<Breadcrumb />
+		<Horizontal :menuList="menuList" v-if="isLayoutTransverse" />
+		<transverseAside v-if="isLayoutClassic" />
+		<User />
+	</div>
 </template>
 
 <script>
-import Breadcrumb from '@/layout/navBars/breadcrumb/breadcrumb.vue';
-import User from '@/layout/navBars/breadcrumb/user.vue';
-import Logo from '@/layout/logo/index.vue';
-import Horizontal from '@/layout/navMenu/horizontal.vue';
-import transverseAside from '@/layout/component/transverseAside.vue';
-export default {
-  name: 'layoutNavBars',
-  components: { Breadcrumb, User, Logo, Horizontal, transverseAside },
-  data() {
-    return {
-      menuList: [],
-    };
-  },
-  computed: {
-    // 设置 logo 是否显示
-    setIsShowLogo() {
-      let { isShowLogo, layout } = this.$store.state.themeConfig.themeConfig;
-      return (isShowLogo && layout === 'classic') || (isShowLogo && layout === 'transverse');
-    },
-    // 设置是否显示横向菜单
-    isLayoutTransverse() {
-      let { layout, isClassicSplitMenu } = this.$store.state.themeConfig.themeConfig;
-      return layout === 'transverse' || (isClassicSplitMenu && layout === 'classic');
-    },
-    isLayoutClassic() {
-      let { layout } = this.$store.state.themeConfig.themeConfig;
-      return layout === 'classic';
-    },
-  },
-  mounted() {
-    this.setFilterRoutes();
-    this.bus.$on('routesListChange', () => {
-      this.setFilterRoutes();
-    });
-  },
-  beforeDestroy() {
-    this.bus.$off('routesListChange');
-  },
-  methods: {
-    // 设置路由的过滤
-    setFilterRoutes() {
-      this.menuList = this.filterRoutesFun(this.$store.state.routesList.routesList);
-    },
-    // 设置路由的过滤递归函数
-    filterRoutesFun(arr) {
-      return arr
-        .filter((item) => item.path)
-        .map((item) => {
-          item = Object.assign({}, item);
-          if (item.children) item.children = this.filterRoutesFun(item.children);
-          return item;
-        });
-    },
-  },
-  watch: {
-    // 监听 vuex 数据变化
-    '$store.state': {
-      handler(val) {
-        if (val.routesList.routesList.length === this.menuList.length) return false;
-        this.setFilterRoutes();
-      },
-      deep: true,
-    },
-  },
-};
+	import Breadcrumb from '@/layout/navBars/breadcrumb/breadcrumb.vue';
+	import User from '@/layout/navBars/breadcrumb/user.vue';
+	import Logo from '@/layout/logo/index.vue';
+	import Horizontal from '@/layout/navMenu/horizontal.vue';
+	import transverseAside from '@/layout/component/transverseAside.vue';
+	export default {
+		name: 'layoutNavBars',
+		components: {
+			Breadcrumb,
+			User,
+			Logo,
+			Horizontal,
+			transverseAside
+		},
+		data() {
+			return {
+				menuList: [],
+			};
+		},
+		computed: {
+			// 设置 logo 是否显示
+			setIsShowLogo() {
+				let {
+					isShowLogo,
+					layout
+				} = this.$store.state.themeConfig.themeConfig;
+				return (isShowLogo && layout === 'classic') || (isShowLogo && layout === 'transverse');
+			},
+			// 设置是否显示横向菜单
+			isLayoutTransverse() {
+				let {
+					layout,
+					isClassicSplitMenu
+				} = this.$store.state.themeConfig.themeConfig;
+				return layout === 'transverse' || (isClassicSplitMenu && layout === 'classic');
+			},
+			isLayoutClassic() {
+				let {
+					layout
+				} = this.$store.state.themeConfig.themeConfig;
+				return layout === 'classic';
+			},
+		},
+		mounted() {
+			this.setFilterRoutes();
+			this.bus.$on('routesListChange', () => {
+				this.setFilterRoutes();
+			});
+		},
+		beforeDestroy() {
+			this.bus.$off('routesListChange');
+		},
+		methods: {
+			// 设置路由的过滤
+			setFilterRoutes() {
+				this.menuList = this.filterRoutesFun(this.$store.state.routesList.routesList);
+			},
+			// 设置路由的过滤递归函数
+			filterRoutesFun(arr) {
+				return arr
+					.filter((item) => item.path)
+					.map((item) => {
+						item = Object.assign({}, item);
+						if (item.children) item.children = this.filterRoutesFun(item.children);
+						return item;
+					});
+			},
+		},
+		watch: {
+			// 监听 vuex 数据变化
+			'$store.state': {
+				handler(val) {
+					if (val.routesList.routesList.length === this.menuList.length) return false;
+					this.setFilterRoutes();
+				},
+				deep: true,
+			},
+		},
+	};
 </script>
 
 <style scoped lang="scss">
-.layout-navbars-breadcrumb-index {
-  height: 50px;
-  display: flex;
-  align-items: center;
-  // padding-right: 15px;
-  overflow: hidden;
-  background: var(--prev-bg-topBar);
-  border-bottom: 1px solid var(--prev-border-color-lighter);
-}
-</style>
+	.layout-navbars-breadcrumb-index {
+		height: 50px;
+		display: flex;
+		align-items: center;
+		// padding-right: 15px;
+		overflow: hidden;
+		background: var(--prev-bg-topBar);
+		border-bottom: 1px solid var(--prev-border-color-lighter);
+	}
+</style>

+ 4 - 8
src/layout/navBars/breadcrumb/user.vue

@@ -225,7 +225,7 @@
 													instance.confirmButtonLoading = false;
 												}, 1500);
 											});
-										} else {
+										} else if (type == 'shanghu') {
 											ShopLogout().then((res) => {
 												// done();
 												this.$Message.success('您已成功退出');
@@ -235,14 +235,10 @@
 												removeCookies('token');
 												removeCookies('expires_time');
 												removeCookies('uuid');
-												console.log(
-													`${settings.routePre}/shop/login`,
-													'khd'
-												);
 												setTimeout(() => {
-													this.$router.replace(
-														`${settings.routePre}/shop/login`
-													);
+													this.$router.replace({
+														name: 'shoplogin'
+													});
 													instance.confirmButtonLoading = false;
 													done();
 												}, 1500);

+ 34 - 28
src/layout/navBars/index.vue

@@ -1,35 +1,41 @@
 <template>
-  <div class="layout-navbars-container">
-    <BreadcrumbIndex />
-    <TagsView v-if="setShowTagsView" />
-  </div>
+	<div class="layout-navbars-container">
+		<BreadcrumbIndex />
+		<TagsView v-if="setShowTagsView" />
+	</div>
 </template>
 
 <script>
-import BreadcrumbIndex from '@/layout/navBars/breadcrumb/index.vue';
-import TagsView from '@/layout/navBars/tagsView/tagsView.vue';
-export default {
-  name: 'layoutNavBars',
-  components: { BreadcrumbIndex, TagsView },
-  data() {
-    return {};
-  },
-  computed: {
-    // 设置是否显示 tagsView
-    setShowTagsView() {
-      let { layout, isTagsview } = this.$store.state.themeConfig.themeConfig;
-      return layout !== 'classic' && isTagsview;
-    },
-  },
-};
+	import BreadcrumbIndex from '@/layout/navBars/breadcrumb/index.vue';
+	import TagsView from '@/layout/navBars/tagsView/tagsView.vue';
+	export default {
+		name: 'layoutNavBars',
+		components: {
+			BreadcrumbIndex,
+			TagsView
+		},
+		data() {
+			return {};
+		},
+		computed: {
+			// 设置是否显示 tagsView
+			setShowTagsView() {
+				let {
+					layout,
+					isTagsview
+				} = this.$store.state.themeConfig.themeConfig;
+				return layout !== 'classic' && isTagsview;
+			},
+		},
+	};
 </script>
 
 <style scoped lang="scss">
-.layout-navbars-container {
-  display: flex;
-  flex-direction: column;
-  width: 100%;
-  height: 100%;
-  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
-}
-</style>
+	.layout-navbars-container {
+		display: flex;
+		flex-direction: column;
+		width: 100%;
+		height: 100%;
+		box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+	}
+</style>

+ 494 - 0
src/pages/finance/shopExtract/index.vue

@@ -0,0 +1,494 @@
+<template>
+	<div>
+		<Card :bordered="false" dis-hover class="ivu-mb-16">
+			<Form ref="formValidate" :model="formValidate" :label-width="labelWidth" :label-position="labelPosition"
+				class="tabform" @submit.native.prevent>
+				<Row :gutter="24" type="flex">
+					<Col span="24">
+					<FormItem label="时间选择:">
+						<RadioGroup v-model="formValidate.data" type="button"
+							@on-change="selectChange(formValidate.data)" class="mr">
+							<Radio :label="item.val" v-for="(item, i) in fromList.fromTxt" :key="i">{{ item.text }}
+							</Radio>
+						</RadioGroup>
+						<DatePicker :editable="false" @on-change="onchangeTime" :value="timeVal" format="yyyy/MM/dd"
+							type="daterange" placement="bottom-end" placeholder="请选择时间" style="width: 200px">
+						</DatePicker>
+					</FormItem>
+					</Col>
+					<Col span="24">
+					<FormItem label="提现状态:">
+						<RadioGroup type="button" v-model="formValidate.status" class="mr15" @on-change="selChange">
+							<Radio :label="itemn.value" v-for="(itemn, indexn) in treeData.withdrawal" :key="indexn">{{
+                  itemn.title
+                }}</Radio>
+						</RadioGroup>
+					</FormItem>
+					</Col>
+					<Col span="24">
+					<FormItem label="提现方式:">
+						<RadioGroup type="button" v-model="formValidate.extract_type" class="mr15"
+							@on-change="selChange">
+							<Radio :label="itemn.value" v-for="(itemn, indexn) in treeData.payment" :key="indexn">{{
+                  itemn.title
+                }}</Radio>
+						</RadioGroup>
+					</FormItem>
+					</Col>
+					<Col span="24">
+					<FormItem label="搜索:">
+						<div class="acea-row row-middle">
+							<Input search enter-button @on-search="selChange" placeholder="微信昵称/姓名/支付宝账号/银行卡号"
+								element-id="name" v-model="formValidate.nireid" style="width: 30%" />
+							<router-link :to="$routeProStr + '/finance/finance/commission'"
+								class="ml20">佣金记录</router-link>
+						</div>
+					</FormItem>
+					</Col>
+				</Row>
+			</Form>
+		</Card>
+		<cards-data :cardLists="cardLists" v-if="extractStatistics"></cards-data>
+		<Card :bordered="false" dis-hover>
+			<Table ref="table" :columns="columns" :data="tabList" class="ivu-mt" :loading="loading" no-data-text="暂无数据"
+				no-filtered-data-text="暂无筛选结果">
+				<template slot-scope="{ row }" slot="nickname">
+					<div>
+						用户昵称: {{ row.nickname }} <br />
+						用户id:{{ row.uid }}
+					</div>
+				</template>
+				<template slot-scope="{ row }" slot="extract_price">
+					<div>{{ row.extract_price }}</div>
+				</template>
+				<template slot-scope="{ row, index }" slot="add_time">
+					<span> {{ row.add_time | formatDate }}</span>
+				</template>
+				<template slot-scope="{ row }" slot="extract_type">
+					<div class="type" v-if="row.extract_type === 'bank'">
+						<div class="item">姓名:{{ row.real_name }}</div>
+						<div class="item">银行卡号:{{ row.bank_code }}</div>
+						<div class="item">银行开户地址:{{ row.bank_address }}</div>
+					</div>
+					<div class="type" v-if="row.extract_type === 'weixin'">
+						<div class="item">昵称:{{ row.nickname }}</div>
+						<div class="item">微信号:{{ row.wechat }}</div>
+					</div>
+					<div class="type" v-if="row.extract_type === 'alipay'">
+						<div class="item">姓名:{{ row.real_name }}</div>
+						<div class="item">支付宝号:{{ row.alipay_code }}</div>
+					</div>
+					<div class="type" v-if="row.extract_type === 'balance'">
+						<div class="item">姓名:{{ row.real_name }}</div>
+						<div class="item">提现方式:佣金转入余额</div>
+					</div>
+				</template>
+				<template slot-scope="{ row, index }" slot="qrcode_url">
+					<div class="tabBox_img" v-viewer
+						v-if="row.extract_type === 'weixin' || row.extract_type === 'alipay'">
+						<img v-lazy="row.qrcode_url" />
+					</div>
+				</template>
+				<template slot-scope="{ row, index }" slot="status">
+					<div class="status" v-if="row.status === 0">
+						<div class="statusVal">申请中</div>
+						<div>
+							<Button type="error" icon="md-close" size="small" class="item"
+								@click="invalid(row)">驳回</Button>
+							<Button type="info" icon="md-checkmark" size="small" class="item"
+								@click="adopt(row, '审核通过', index)">通过</Button>
+						</div>
+					</div>
+					<div class="statusVal" v-if="row.status === 1">提现通过</div>
+					<div class="statusVal" v-if="row.status === -1">提现未通过<br />未通过原因:{{ row.fail_msg }}</div>
+				</template>
+				<template slot-scope="{ row }" slot="createModalFrame">
+					<a href="javascript:void(0);" @click="edit(row)">编辑</a>
+				</template>
+			</Table>
+			<div class="acea-row row-right page">
+				<Page :total="total" :current="formValidate.page" show-elevator show-total @on-change="pageChange"
+					:page-size="formValidate.limit" />
+			</div>
+		</Card>
+
+		<!-- 编辑表单-->
+		<edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
+		<!-- 拒绝通过-->
+		<Modal v-model="modals" scrollable closable title="未通过原因" :mask-closable="false">
+			<Input v-model="fail_msg.fail_msg" type="textarea" :rows="4" placeholder="请输入未通过原因" />
+			<div slot="footer">
+				<Button type="primary" size="large" long :loading="modal_loading" @click="oks">确定</Button>
+			</div>
+		</Modal>
+	</div>
+</template>
+<script>
+	import cardsData from '@/components/cards/cards';
+	import searchFrom from '@/components/publicSearchFrom';
+	import {
+		mapState
+	} from 'vuex';
+	import {
+		shopCashListApi,
+		shopCashEditApi,
+		shopRefuseApi
+	} from '@/api/finance';
+	import {
+		formatDate
+	} from '@/utils/validate';
+	import editFrom from '@/components/from/from';
+	export default {
+		name: 'cashApply',
+		components: {
+			cardsData,
+			searchFrom,
+			editFrom
+		},
+		filters: {
+			formatDate(time) {
+				if (time !== 0) {
+					let date = new Date(time * 1000);
+					return formatDate(date, 'yyyy-MM-dd hh:mm');
+				}
+			},
+		},
+		data() {
+			return {
+				images: ['1.jpg', '2.jpg'],
+				modal_loading: false,
+				fail_msg: {
+					fail_msg: '输入信息不完整或有误!',
+				},
+				modals: false,
+				total: 0,
+				cardLists: [],
+				loading: false,
+				columns: [{
+						title: 'ID',
+						key: 'id',
+						width: 80,
+					},
+					{
+						title: '用户信息',
+						slot: 'nickname',
+						minWidth: 180,
+					},
+					{
+						title: '提现金额',
+						slot: 'extract_price',
+						minWidth: 90,
+					},
+					{
+						title: '提现方式',
+						slot: 'extract_type',
+						minWidth: 150,
+					},
+					{
+						title: '收款码',
+						slot: 'qrcode_url',
+						minWidth: 150,
+					},
+					{
+						title: '添加时间',
+						slot: 'add_time',
+						minWidth: 100,
+					},
+					{
+						title: '备注',
+						key: 'mark',
+						minWidth: 100,
+					},
+					{
+						title: '审核状态',
+						slot: 'status',
+						minWidth: 180,
+					},
+					{
+						title: '操作',
+						slot: 'createModalFrame',
+						fixed: 'right',
+						width: 100,
+					},
+				],
+				tabList: [],
+				fromList: {
+					title: '选择时间',
+					custom: true,
+					fromTxt: [{
+							text: '全部',
+							val: ''
+						},
+						{
+							text: '今天',
+							val: 'today'
+						},
+						{
+							text: '昨天',
+							val: 'yesterday'
+						},
+						{
+							text: '本周',
+							val: 'week'
+						},
+						{
+							text: '本月',
+							val: 'month'
+						},
+						{
+							text: '本季度',
+							val: 'quarter'
+						},
+						{
+							text: '本年',
+							val: 'year'
+						},
+					],
+				},
+				treeData: {
+					withdrawal: [{
+							title: '全部',
+							value: '',
+						},
+						{
+							title: '未通过',
+							value: -1,
+						},
+						{
+							title: '申请中',
+							value: 0,
+						},
+						{
+							title: '已通过',
+							value: 1,
+						},
+					],
+					payment: [{
+							title: '全部',
+							value: '',
+						},
+						{
+							title: '微信',
+							value: 'wx',
+						},
+						{
+							title: '支付宝',
+							value: 'alipay',
+						},
+						{
+							title: '银行卡',
+							value: 'bank',
+						},
+					],
+				},
+				formValidate: {
+					status: '',
+					extract_type: '',
+					nireid: '',
+					data: '',
+					page: 1,
+					limit: 20,
+				},
+				extractStatistics: {},
+				timeVal: [],
+				FromData: null,
+				extractId: 0,
+			};
+		},
+		watch: {
+			$route() {
+				if (this.$route.fullPath === this.$routeProStr + '/finance/shop_extract/index?status=0') {
+					this.getPath();
+				}
+			},
+		},
+		computed: {
+			...mapState('media', ['isMobile']),
+			labelWidth() {
+				return this.isMobile ? undefined : 80;
+			},
+			labelPosition() {
+				return this.isMobile ? 'top' : 'left';
+			},
+		},
+		mounted() {
+			if (this.$route.fullPath === this.$routeProStr + '/finance/shop_extract/index?status=0') {
+				this.getPath();
+			} else {
+				this.getList();
+			}
+		},
+		methods: {
+			getPath() {
+				this.formValidate.page = 1;
+				this.formValidate.status = parseInt(this.$route.query.status);
+				this.getList();
+			},
+			// 无效
+			invalid(row) {
+				this.extractId = row.id;
+				this.modals = true;
+			},
+			// 确定
+			oks() {
+				this.modal_loading = true;
+				shopRefuseApi(this.extractId, this.fail_msg)
+					.then(async (res) => {
+						this.$Message.success(res.msg);
+						this.modal_loading = false;
+						this.modals = false;
+						this.getList();
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 通过
+			adopt(row, tit, num) {
+				let delfromData = {
+					title: tit,
+					num: num,
+					url: `merchant/extract/adopt/${row.id}`,
+					method: 'get',
+					ids: '',
+				};
+				this.$modalSure(delfromData)
+					.then((res) => {
+						this.$Message.success(res.msg);
+						this.getList();
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 具体日期
+			onchangeTime(e) {
+				this.timeVal = e;
+				this.formValidate.data = this.timeVal.join('-');
+				this.formValidate.page = 1;
+				this.getList();
+			},
+			// 选择时间
+			selectChange(tab) {
+				this.formValidate.page = 1;
+				this.formValidate.data = tab;
+				this.timeVal = [];
+				this.getList();
+			},
+			// 选择
+			selChange() {
+				this.formValidate.page = 1;
+				this.getList();
+			},
+			// 列表
+			getList() {
+				this.loading = true;
+				shopCashListApi(this.formValidate)
+					.then(async (res) => {
+						let data = res.data;
+						this.tabList = data.merchantIntention;
+						this.total = data.count;
+						this.extractStatistics = data.extract_statistics;
+						this.cardLists = [{
+								col: 6,
+								count: this.extractStatistics.price,
+								name: '待提现金额',
+								className: 'md-basket'
+							},
+							{
+								col: 6,
+								count: this.extractStatistics.brokerage_count,
+								name: '佣金总金额',
+								className: 'md-pricetags'
+							},
+							{
+								col: 6,
+								count: this.extractStatistics.priced,
+								name: '已提现金额',
+								className: 'md-cash'
+							},
+							{
+								col: 6,
+								count: this.extractStatistics.brokerage_not,
+								name: '未提现金额',
+								className: 'ios-cash'
+							},
+						];
+						this.loading = false;
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			pageChange(index) {
+				this.formValidate.page = index;
+				this.getList();
+			},
+			// 编辑
+			edit(row) {
+				shopCashEditApi(row.id)
+					.then(async (res) => {
+						if (res.data.status === false) {
+							return this.$authLapse(res.data);
+						}
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 编辑提交成功
+			submitFail() {
+				this.getList();
+			},
+		},
+	};
+</script>
+<style scoped lang="stylus">
+	.ivu-mt .type .item {
+		margin: 3px 0;
+	}
+
+	.tabform {
+		margin-bottom: 10px
+	}
+
+	.Refresh {
+		font-size: 12px;
+		color: #1890FF;
+		cursor: pointer;
+	}
+
+	.ivu-form-item {
+		margin-bottom: 10px
+	}
+
+	.status>>>.item~.item {
+		margin-left: 6px
+	}
+
+	.status>>>.statusVal {
+		margin-bottom: 7px;
+	}
+
+	/*.ivu-mt >>> .ivu-table-header*/
+	/*    border-top:1px dashed #ddd!important*/
+	.type {
+		padding: 3px 0;
+		box-sizing: border-box;
+	}
+
+	.tabBox_img {
+		width: 36px;
+		height: 36px;
+		border-radius: 4px;
+		cursor: pointer;
+	}
+
+	img {
+		width: 100%;
+		height: 100%;
+	}
+</style>

+ 48 - 48
src/pages/order/orderList/components/tableExpand.vue

@@ -1,54 +1,54 @@
 <template>
-  <div class="expand">
-    <Row class="expand-row">
-      <Col span="6">
-        <span class="expand-key">商品总价:</span>
-        <span class="expand-value" v-text="row.total_price"></span>
-      </Col>
-      <Col span="6">
-        <span class="expand-key">下单时间:</span>
-        <span class="expand-value" v-text="row.add_time"></span>
-      </Col>
-      <Col span="6">
-        <span class="expand-key">推广人:</span>
-        <span class="expand-value" v-text="row.spread_nickname ? row.spread_nickname : '无'"></span>
-      </Col>
-      <Col span="6">
-        <span class="expand-key">事业部:</span>
-        <span class="expand-value" v-text="row.division_name ? row.division_name : '无'"></span>
-      </Col>
-    </Row>
-    <Row>
-      <Col span="6">
-        <span class="expand-key">用户备注:</span>
-        <span class="expand-value" v-text="row.mark ? row.mark : '无'"></span>
-      </Col>
-      <Col span="6">
-        <span class="expand-key">商家备注:</span>
-        <span class="expand-value" v-text="row.remark ? row.remark : '无'"></span>
-      </Col>
-      <Col span="6">
-        <span class="expand-key">核销码:</span>
-        <span class="expand-value" v-text="row.verify_code ? row.verify_code : '无'"></span>
-      </Col>
-    </Row>
-  </div>
+	<div class="expand">
+		<Row class="expand-row">
+			<Col span="6">
+			<span class="expand-key">商品总价:</span>
+			<span class="expand-value" v-text="row.total_price"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">下单时间:</span>
+			<span class="expand-value" v-text="row.add_time"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">推广人:</span>
+			<span class="expand-value" v-text="row.spread_nickname ? row.spread_nickname : '无'"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">事业部:</span>
+			<span class="expand-value" v-text="row.division_name ? row.division_name : '无'"></span>
+			</Col>
+		</Row>
+		<Row>
+			<Col span="6">
+			<span class="expand-key">用户备注:</span>
+			<span class="expand-value" v-text="row.mark ? row.mark : '无'"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">商家备注:</span>
+			<span class="expand-value" v-text="row.remark ? row.remark : '无'"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">核销码:</span>
+			<span class="expand-value" v-text="row.verify_code ? row.verify_code : '无'"></span>
+			</Col>
+		</Row>
+	</div>
 </template>
-
 <script>
-export default {
-  name: 'table-expand',
-  props: {
-    row: Object,
-  },
-};
+	export default {
+		name: 'table-expand',
+		props: {
+			row: Object,
+		},
+	};
 </script>
 
 <style scoped>
-.expand {
-  padding-left: 50px;
-}
-.expand-row {
-  margin-bottom: 16px;
-}
-</style>
+	.expand {
+		padding-left: 50px;
+	}
+
+	.expand-row {
+		margin-bottom: 16px;
+	}
+</style>

+ 512 - 487
src/pages/order/orderList/components/tableFrom.vue

@@ -1,498 +1,523 @@
 <template>
-  <div class="table_box">
-    <Form
-      ref="orderData"
-      :model="orderData"
-      :label-width="80"
-      label-position="right"
-      class="tabform"
-      @submit.native.prevent
-    >
-      <Row :gutter="24" type="flex" justify="end">
-        <Col span="24" class="ivu-text-left">
-          <FormItem label="订单状态:">
-            <RadioGroup v-model="orderData.status" type="button" @on-change="selectChange2(orderData.status)">
-              <Radio label="">全部</Radio>
-              <Radio label="0">未支付</Radio>
-              <Radio label="1">未发货</Radio>
-              <Radio label="2">待收货</Radio>
-              <Radio label="3">待评价</Radio>
-              <Radio label="4">交易完成</Radio>
-              <Radio label="5">待核销</Radio>
-              <Radio label="6">已核销</Radio>
-              <!--                                <Radio label="-1">退款中 {{  '(' +orderChartType.refunding?orderChartType.refunding:0+ ')' }}</Radio>-->
-              <!--                                <Radio label="-2">已退款 {{  '(' +orderChartType.refund?orderChartType.refund:0+ ')' }}</Radio>-->
-              <Radio label="-2">已退款</Radio>
-              <Radio label="-4">已删除</Radio>
-            </RadioGroup>
-          </FormItem>
-        </Col>
-        <Col span="24" class="ivu-text-left">
-          <FormItem label="支付方式:">
-            <RadioGroup v-model="orderData.pay_type" type="button" @on-change="userSearchs">
-              <Radio v-for="item in payList" :label="item.val" :key="item.id">{{ item.label }}</Radio>
-            </RadioGroup>
-          </FormItem>
-        </Col>
-        <Col span="8" class="ivu-text-left">
-          <FormItem label="创建时间:">
-            <DatePicker
-              :editable="false"
-              @on-change="onchangeTime"
-              :value="timeVal"
-              format="yyyy/MM/dd HH:mm:ss"
-              type="datetimerange"
-              placement="bottom-start"
-              placeholder="请选择创建时间"
-              style="width: 300px"
-              class="mr20"
-              :options="options"
-            ></DatePicker>
-          </FormItem>
-        </Col>
-        <Col span="16">
-          <Col span="12" class="mr">
-            <FormItem label="搜索:" prop="real_name" label-for="real_name">
-              <Input
-                v-model="orderData.real_name"
-                search
-                enter-button
-                placeholder="请输入"
-                element-id="name"
-                @on-search="orderSearch(orderData.real_name)"
-              >
-                <Select v-model="orderData.field_key" slot="prepend" style="width: 80px">
-                  <Option value="all">全部</Option>
-                  <Option value="order_id">订单号</Option>
-                  <Option value="uid">UID</Option>
-                  <Option value="real_name">用户姓名</Option>
-                  <Option value="user_phone">用户电话</Option>
-                  <Option value="title">商品名称(模糊)</Option>
-                </Select>
-              </Input>
-            </FormItem>
-          </Col>
-          <!--<Col v-bind="grid">-->
-          <!--<Button class="mr">导出</Button>-->
-          <!--<span class="Refresh" @click="Refresh">刷新</span><Icon type="ios-refresh" />-->
-          <!--</Col>-->
-        </Col>
-        <Col span="24">
-          <div class="ml20">
-            <Button v-auth="['order-dels']" class="mr10" type="primary" @click="delAll">批量删除订单</Button>
-            <Button v-auth="['order-write']" type="success" class="mr10 greens" size="default" @click="writeOff">
-              <Icon type="md-list"></Icon>
-              订单核销
-            </Button>
-            <Button v-auth="['export-storeOrder']" class="export" icon="ios-share-outline" @click="exportList"
-              >导出</Button
-            >
-          </div>
-        </Col>
-      </Row>
-    </Form>
-    <!--订单核销模态框-->
-    <Modal
-      v-model="modals2"
-      title="订单核销"
-      class="paymentFooter"
-      :closable="false"
-      width="400"
-      @on-visible-change="changeModal"
-    >
-      <Form
-        ref="writeOffFrom"
-        :model="writeOffFrom"
-        :rules="writeOffRules"
-        label-position="right"
-        class="tabform"
-        @submit.native.prevent
-      >
-        <FormItem prop="code" label-for="code">
-          <Input style="width: 100%" type="text" placeholder="请输入12位核销码" v-model.number="writeOffFrom.code" />
-        </FormItem>
-      </Form>
-      <div slot="footer">
-        <Button type="primary" @click="ok('writeOffFrom')">立即核销</Button>
-        <Button @click="del('writeOffFrom')">取消</Button>
-      </div>
-    </Modal>
-  </div>
+	<div class="table_box">
+		<Form ref="orderData" :model="orderData" :label-width="80" label-position="right" class="tabform"
+			@submit.native.prevent>
+			<Row :gutter="24" type="flex" justify="end">
+				<Col span="24" class="ivu-text-left">
+				<FormItem label="订单状态:">
+					<RadioGroup v-model="orderData.status" type="button" @on-change="selectChange2(orderData.status)">
+						<Radio label="">全部</Radio>
+						<Radio label="0">未支付</Radio>
+						<Radio label="1">未发货</Radio>
+						<Radio label="2">待收货</Radio>
+						<Radio label="3">待评价</Radio>
+						<Radio label="4">交易完成</Radio>
+						<Radio label="5">待核销</Radio>
+						<Radio label="6">已核销</Radio>
+						<!--                                <Radio label="-1">退款中 {{  '(' +orderChartType.refunding?orderChartType.refunding:0+ ')' }}</Radio>-->
+						<!--                                <Radio label="-2">已退款 {{  '(' +orderChartType.refund?orderChartType.refund:0+ ')' }}</Radio>-->
+						<Radio label="-2">已退款</Radio>
+						<Radio label="-4">已删除</Radio>
+					</RadioGroup>
+				</FormItem>
+				</Col>
+				<Col span="24" class="ivu-text-left">
+				<FormItem label="支付方式:">
+					<RadioGroup v-model="orderData.pay_type" type="button" @on-change="userSearchs">
+						<Radio v-for="item in payList" :label="item.val" :key="item.id">{{ item.label }}</Radio>
+					</RadioGroup>
+				</FormItem>
+				</Col>
+				<Col span="8" class="ivu-text-left">
+				<FormItem label="创建时间:">
+					<DatePicker :editable="false" @on-change="onchangeTime" :value="timeVal"
+						format="yyyy/MM/dd HH:mm:ss" type="datetimerange" placement="bottom-start" placeholder="请选择创建时间"
+						style="width: 300px" class="mr20" :options="options"></DatePicker>
+				</FormItem>
+				</Col>
+				<Col span="16">
+				<Col span="12" class="mr">
+				<FormItem label="搜索:" prop="real_name" label-for="real_name">
+					<Input v-model="orderData.real_name" search enter-button placeholder="请输入" element-id="name"
+						@on-search="orderSearch(orderData.real_name)">
+					<Select v-model="orderData.field_key" slot="prepend" style="width: 80px">
+						<Option value="all">全部</Option>
+						<Option value="order_id">订单号</Option>
+						<Option value="uid">UID</Option>
+						<Option value="real_name">用户姓名</Option>
+						<Option value="user_phone">用户电话</Option>
+						<Option value="title">商品名称(模糊)</Option>
+					</Select>
+					</Input>
+				</FormItem>
+				</Col>
+				<!--<Col v-bind="grid">-->
+				<!--<Button class="mr">导出</Button>-->
+				<!--<span class="Refresh" @click="Refresh">刷新</span><Icon type="ios-refresh" />-->
+				<!--</Col>-->
+				</Col>
+				<Col span="24">
+				<div class="ml20">
+					<Button v-auth="['order-dels']" class="mr10" type="primary" @click="delAll">批量删除订单</Button>
+					<Button v-auth="['order-write']" type="success" class="mr10 greens" size="default"
+						@click="writeOff">
+						<Icon type="md-list"></Icon>
+						订单核销
+					</Button>
+					<Button v-auth="['export-storeOrder']" class="export" icon="ios-share-outline"
+						@click="exportList">导出</Button>
+				</div>
+				</Col>
+			</Row>
+		</Form>
+		<!--订单核销模态框-->
+		<Modal v-model="modals2" title="订单核销" class="paymentFooter" :closable="false" width="400"
+			@on-visible-change="changeModal">
+			<Form ref="writeOffFrom" :model="writeOffFrom" :rules="writeOffRules" label-position="right" class="tabform"
+				@submit.native.prevent>
+				<FormItem prop="code" label-for="code">
+					<Input style="width: 100%" type="text" placeholder="请输入12位核销码" v-model.number="writeOffFrom.code" />
+				</FormItem>
+			</Form>
+			<div slot="footer">
+				<Button type="primary" @click="ok('writeOffFrom')">立即核销</Button>
+				<Button @click="del('writeOffFrom')">取消</Button>
+			</div>
+		</Modal>
+	</div>
 </template>
-
 <script>
-import { mapState, mapMutations } from 'vuex';
-import { putWrite, storeOrderApi } from '@/api/order';
-import { exportOrderList } from '@/api/export';
-export default {
-  name: 'table_from',
-  data() {
-    const codeNum = (rule, value, callback) => {
-      if (!value) {
-        return callback(new Error('请填写核销码'));
-      }
-      // 模拟异步验证效果
-      if (!Number.isInteger(value)) {
-        callback(new Error('请填写12位数字'));
-      } else {
-        const reg = /\b\d{12}\b/;
-        if (!reg.test(value)) {
-          callback(new Error('请填写12位数字'));
-        } else {
-          callback();
-        }
-      }
-    };
-    return {
-      fromList: {
-        title: '选择时间',
-        custom: true,
-        fromTxt: [
-          { text: '全部', val: '' },
-          { text: '今天', val: 'today' },
-          { text: '昨天', val: 'yesterday' },
-          { text: '最近7天', val: 'lately7' },
-          { text: '最近30天', val: 'lately30' },
-          { text: '本月', val: 'month' },
-          { text: '本年', val: 'year' },
-        ],
-      },
-      currentTab: '',
-      grid: {
-        xl: 8,
-        lg: 8,
-        md: 8,
-        sm: 24,
-        xs: 24,
-      },
-      // 搜索条件
-      orderData: {
-        status: '',
-        data: '',
-        real_name: '',
-        field_key: 'all',
-        pay_type: '',
-        type: '',
-      },
-      modalTitleSs: '',
-      statusType: '',
-      time: '',
-      value2: [],
-      writeOffRules: {
-        code: [{ validator: codeNum, trigger: 'blur', required: true }],
-      },
-      writeOffFrom: {
-        code: '',
-        confirm: 0,
-      },
-      modals2: false,
-      timeVal: [],
-      options: {
-        shortcuts: [
-          {
-            text: '今天',
-            value() {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()));
-              return [start, end];
-            },
-          },
-          {
-            text: '昨天',
-            value() {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(
-                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1)),
-              );
-              end.setTime(
-                end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()) - 1),
-              );
-              return [start, end];
-            },
-          },
-          {
-            text: '最近7天',
-            value() {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(
-                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 6)),
-              );
-              return [start, end];
-            },
-          },
-          {
-            text: '最近30天',
-            value() {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(
-                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 29)),
-              );
-              return [start, end];
-            },
-          },
-          {
-            text: '本月',
-            value() {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), 1)));
-              return [start, end];
-            },
-          },
-          {
-            text: '本年',
-            value() {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)));
-              return [start, end];
-            },
-          },
-        ],
-      },
-      payList: [
-        { label: '全部', val: '' },
-        { label: '微信支付', val: '1' },
-        { label: '支付宝支付', val: '4' },
-        { label: '余额支付', val: '2' },
-        { label: '线下支付', val: '3' },
-      ],
-    };
-  },
-  computed: {
-    ...mapState('order', ['orderChartType', 'isDels', 'delIdList', 'orderType']),
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		putWrite,
+		storeOrderApi
+	} from '@/api/order';
+	import {
+		exportOrderList
+	} from '@/api/export';
+	export default {
+		name: 'table_from',
+		data() {
+			const codeNum = (rule, value, callback) => {
+				if (!value) {
+					return callback(new Error('请填写核销码'));
+				}
+				// 模拟异步验证效果
+				if (!Number.isInteger(value)) {
+					callback(new Error('请填写12位数字'));
+				} else {
+					const reg = /\b\d{12}\b/;
+					if (!reg.test(value)) {
+						callback(new Error('请填写12位数字'));
+					} else {
+						callback();
+					}
+				}
+			};
+			return {
+				fromList: {
+					title: '选择时间',
+					custom: true,
+					fromTxt: [{
+							text: '全部',
+							val: ''
+						},
+						{
+							text: '今天',
+							val: 'today'
+						},
+						{
+							text: '昨天',
+							val: 'yesterday'
+						},
+						{
+							text: '最近7天',
+							val: 'lately7'
+						},
+						{
+							text: '最近30天',
+							val: 'lately30'
+						},
+						{
+							text: '本月',
+							val: 'month'
+						},
+						{
+							text: '本年',
+							val: 'year'
+						},
+					],
+				},
+				currentTab: '',
+				grid: {
+					xl: 8,
+					lg: 8,
+					md: 8,
+					sm: 24,
+					xs: 24,
+				},
+				// 搜索条件
+				orderData: {
+					status: '',
+					data: '',
+					real_name: '',
+					field_key: 'all',
+					pay_type: '',
+					type: '',
+				},
+				modalTitleSs: '',
+				statusType: '',
+				time: '',
+				value2: [],
+				writeOffRules: {
+					code: [{
+						validator: codeNum,
+						trigger: 'blur',
+						required: true
+					}],
+				},
+				writeOffFrom: {
+					code: '',
+					confirm: 0,
+				},
+				modals2: false,
+				timeVal: [],
+				options: {
+					shortcuts: [{
+							text: '今天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date()
+									.getDate()));
+								return [start, end];
+							},
+						},
+						{
+							text: '昨天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 1)),
+								);
+								end.setTime(
+									end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+									new Date().getDate()) - 1),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '最近7天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 6)),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '最近30天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 29)),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '本月',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+									1)));
+								return [start, end];
+							},
+						},
+						{
+							text: '本年',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)));
+								return [start, end];
+							},
+						},
+					],
+				},
+				payList: [{
+						label: '全部',
+						val: ''
+					},
+					{
+						label: '微信支付',
+						val: '1'
+					},
+					{
+						label: '支付宝支付',
+						val: '4'
+					},
+					{
+						label: '余额支付',
+						val: '2'
+					},
+					{
+						label: '线下支付',
+						val: '3'
+					},
+				],
+			};
+		},
+		computed: {
+			...mapState('order', ['orderChartType', 'isDels', 'delIdList', 'orderType']),
 
-    today() {
-      const end = new Date();
-      const start = new Date();
-      var datetimeStart = start.getFullYear() + '/' + (start.getMonth() + 1) + '/' + start.getDate();
-      var datetimeEnd = end.getFullYear() + '/' + (end.getMonth() + 1) + '/' + end.getDate();
-      return [datetimeStart, datetimeEnd];
-    },
-  },
-  watch: {
-    $route() {
-      if (this.$route.fullPath === this.$routeProStr + '/order/list?status=1') {
-        this.getPath();
-      }
-    },
-  },
-  created() {
-    // this.timeVal = this.today;
-    // this.orderData.data = this.timeVal.join('-');
-    if (this.$route.fullPath === this.$routeProStr + '/order/list?status=1') {
-      this.getPath();
-    }
-  },
-  methods: {
-    ...mapMutations('order', ['getOrderStatus', 'getOrderType', 'getOrderTime', 'getOrderNum', 'getfieldKey']),
-    getPath() {
-      this.orderData.status = this.$route.query.status.toString();
-      this.getOrderStatus(this.orderData.status);
-      this.$emit('getList', 1);
-    },
-    changeModal(status) {
-      if (!status) this.writeOffFrom.code = '';
-    },
-    // 导出
-    async exportList() {
-      this.orderData.type = this.orderType === 0 ? '' : this.orderType;
-      let [th, filekey, data, fileName] = [[], [], [], ''];
-      let excelData = JSON.parse(JSON.stringify(this.orderData));
-      excelData.page = 1;
-      excelData.limit = 200;
-      excelData.ids = this.delIdList;
-      for (let i = 0; i < excelData.page + 1; i++) {
-        let lebData = await this.getExcelData(excelData);
-        if (!fileName) fileName = lebData.filename;
-        if (!filekey.length) {
-          filekey = lebData.fileKey;
-        }
-        if (!th.length) th = lebData.header;
-        if (lebData.export.length) {
-          data = data.concat(lebData.export);
-          excelData.page++;
-        } else {
-          this.$exportExcel(th, filekey, fileName, data);
-          return;
-        }
-      }
-    },
-    getExcelData(excelData) {
-      return new Promise((resolve, reject) => {
-        exportOrderList(excelData).then((res) => {
-          resolve(res.data);
-        });
-      });
-    },
-    // 具体日期
-    onchangeTime(e) {
-      this.timeVal = e;
-      this.orderData.data = this.timeVal[0] ? this.timeVal.join('-') : '';
-      this.$store.dispatch('order/getOrderTabs', { data: this.orderData.data });
-      this.getOrderTime(this.orderData.data);
-      this.$emit('getList', 1);
-    },
-    // 选择时间
-    selectChange(tab) {
-      this.$store.dispatch('order/getOrderTabs', { data: tab });
-      this.orderData.data = tab;
-      this.getOrderTime(this.orderData.data);
-      this.timeVal = [];
-      this.$emit('getList');
-    },
-    // 订单选择状态
-    selectChange2(tab) {
-      this.getOrderStatus(tab);
-      this.$emit('getList', 1);
-    },
-    userSearchs(type) {
-      this.getOrderType(type);
-      this.$emit('getList', 1);
-    },
-    // 时间状态
-    timeChange(time) {
-      this.getOrderTime(time);
-      this.$emit('getList');
-    },
-    // 订单号搜索
-    orderSearch(num) {
-      this.getOrderNum(num);
-      this.getfieldKey(this.orderData.field_key);
-      this.$emit('getList', 1);
-    },
-    // 点击订单类型
-    onClickTab() {
-      this.$emit('onChangeType', this.currentTab);
-    },
-    // 批量删除
-    delAll() {
-      if (this.delIdList.length === 0) {
-        this.$Message.error('请先选择删除的订单!');
-      } else {
-        if (this.isDels) {
-          let idss = {
-            ids: this.delIdList,
-          };
-          let delfromData = {
-            title: '删除订单',
-            url: `/order/dels`,
-            method: 'post',
-            ids: idss,
-          };
-          this.$modalSure(delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.$emit('getList');
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-        } else {
-          const title = '错误!';
-          const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
-          this.$Modal.error({
-            title: title,
-            content: content,
-          });
-        }
-      }
-    },
-    // 订单核销
-    writeOff() {
-      this.modals2 = true;
-    },
-    // 验证
-    search(name) {
-      this.$refs[name].validate((valid) => {
-        if (valid) {
-          this.writeOffFrom.confirm = 0;
-          putWrite(this.writeOffFrom)
-            .then(async (res) => {
-              if (res.status === 200) {
-                this.$Message.success(res.msg);
-                // this.modals2 = false
-                // this.$refs[name].resetFields()
-                // this.$emit('getList')
-              } else {
-                this.$Message.error(res.msg);
-              }
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-        } else {
-          this.$Message.error('请填写正确的核销码');
-        }
-      });
-    },
-    // 订单核销
-    ok(name) {
-      if (!this.writeOffFrom.code) {
-        this.$Message.warning('请先验证订单!');
-      } else {
-        this.writeOffFrom.confirm = 1;
-        putWrite(this.writeOffFrom)
-          .then(async (res) => {
-            if (res.status === 200) {
-              this.$Message.success(res.msg);
-              this.modals2 = false;
-              this.$refs[name].resetFields();
-              this.$emit('getList', 1);
-            } else {
-              this.$Message.error(res.msg);
-            }
-          })
-          .catch((res) => {
-            this.$Message.error(res.msg);
-          });
-      }
-    },
-    del(name) {
-      this.modals2 = false;
-      this.writeOffFrom.code = '';
-      this.$refs[name].resetFields();
-    },
-    handleSubmit() {
-      this.$emit('on-submit', this.data);
-    },
-    // 刷新
-    Refresh() {
-      this.$emit('getList');
-    },
-    //
-    handleReset() {
-      this.$refs.form.resetFields();
-      this.$emit('on-reset');
-    },
-  },
-};
+			today() {
+				const end = new Date();
+				const start = new Date();
+				var datetimeStart = start.getFullYear() + '/' + (start.getMonth() + 1) + '/' + start.getDate();
+				var datetimeEnd = end.getFullYear() + '/' + (end.getMonth() + 1) + '/' + end.getDate();
+				return [datetimeStart, datetimeEnd];
+			},
+		},
+		watch: {
+			$route() {
+				if (this.$route.fullPath === this.$routeProStr + '/order/list?status=1') {
+					this.getPath();
+				}
+			},
+		},
+		created() {
+			// this.timeVal = this.today;
+			// this.orderData.data = this.timeVal.join('-');
+			if (this.$route.fullPath === this.$routeProStr + '/order/list?status=1') {
+				this.getPath();
+			}
+		},
+		methods: {
+			...mapMutations('order', ['getOrderStatus', 'getOrderType', 'getOrderTime', 'getOrderNum', 'getfieldKey']),
+			getPath() {
+				this.orderData.status = this.$route.query.status.toString();
+				this.getOrderStatus(this.orderData.status);
+				this.$emit('getList', 1);
+			},
+			changeModal(status) {
+				if (!status) this.writeOffFrom.code = '';
+			},
+			// 导出
+			async exportList() {
+				this.orderData.type = this.orderType === 0 ? '' : this.orderType;
+				let [th, filekey, data, fileName] = [
+					[],
+					[],
+					[], ''
+				];
+				let excelData = JSON.parse(JSON.stringify(this.orderData));
+				excelData.page = 1;
+				excelData.limit = 200;
+				excelData.ids = this.delIdList;
+				for (let i = 0; i < excelData.page + 1; i++) {
+					let lebData = await this.getExcelData(excelData);
+					if (!fileName) fileName = lebData.filename;
+					if (!filekey.length) {
+						filekey = lebData.fileKey;
+					}
+					if (!th.length) th = lebData.header;
+					if (lebData.export.length) {
+						data = data.concat(lebData.export);
+						excelData.page++;
+					} else {
+						this.$exportExcel(th, filekey, fileName, data);
+						return;
+					}
+				}
+			},
+			getExcelData(excelData) {
+				return new Promise((resolve, reject) => {
+					exportOrderList(excelData).then((res) => {
+						resolve(res.data);
+					});
+				});
+			},
+			// 具体日期
+			onchangeTime(e) {
+				this.timeVal = e;
+				this.orderData.data = this.timeVal[0] ? this.timeVal.join('-') : '';
+				this.$store.dispatch('order/getOrderTabs', {
+					data: this.orderData.data
+				});
+				this.getOrderTime(this.orderData.data);
+				this.$emit('getList', 1);
+			},
+			// 选择时间
+			selectChange(tab) {
+				this.$store.dispatch('order/getOrderTabs', {
+					data: tab
+				});
+				this.orderData.data = tab;
+				this.getOrderTime(this.orderData.data);
+				this.timeVal = [];
+				this.$emit('getList');
+			},
+			// 订单选择状态
+			selectChange2(tab) {
+				this.getOrderStatus(tab);
+				this.$emit('getList', 1);
+			},
+			userSearchs(type) {
+				this.getOrderType(type);
+				this.$emit('getList', 1);
+			},
+			// 时间状态
+			timeChange(time) {
+				this.getOrderTime(time);
+				this.$emit('getList');
+			},
+			// 订单号搜索
+			orderSearch(num) {
+				this.getOrderNum(num);
+				this.getfieldKey(this.orderData.field_key);
+				this.$emit('getList', 1);
+			},
+			// 点击订单类型
+			onClickTab() {
+				this.$emit('onChangeType', this.currentTab);
+			},
+			// 批量删除
+			delAll() {
+				if (this.delIdList.length === 0) {
+					this.$Message.error('请先选择删除的订单!');
+				} else {
+					if (this.isDels) {
+						let idss = {
+							ids: this.delIdList,
+						};
+						let delfromData = {
+							title: '删除订单',
+							url: `/order/dels`,
+							method: 'post',
+							ids: idss,
+						};
+						this.$modalSure(delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('getList');
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+					} else {
+						const title = '错误!';
+						const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
+						this.$Modal.error({
+							title: title,
+							content: content,
+						});
+					}
+				}
+			},
+			// 订单核销
+			writeOff() {
+				this.modals2 = true;
+			},
+			// 验证
+			search(name) {
+				this.$refs[name].validate((valid) => {
+					if (valid) {
+						this.writeOffFrom.confirm = 0;
+						putWrite(this.writeOffFrom)
+							.then(async (res) => {
+								if (res.status === 200) {
+									this.$Message.success(res.msg);
+									// this.modals2 = false
+									// this.$refs[name].resetFields()
+									// this.$emit('getList')
+								} else {
+									this.$Message.error(res.msg);
+								}
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+					} else {
+						this.$Message.error('请填写正确的核销码');
+					}
+				});
+			},
+			// 订单核销
+			ok(name) {
+				if (!this.writeOffFrom.code) {
+					this.$Message.warning('请先验证订单!');
+				} else {
+					this.writeOffFrom.confirm = 1;
+					putWrite(this.writeOffFrom)
+						.then(async (res) => {
+							if (res.status === 200) {
+								this.$Message.success(res.msg);
+								this.modals2 = false;
+								this.$refs[name].resetFields();
+								this.$emit('getList', 1);
+							} else {
+								this.$Message.error(res.msg);
+							}
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				}
+			},
+			del(name) {
+				this.modals2 = false;
+				this.writeOffFrom.code = '';
+				this.$refs[name].resetFields();
+			},
+			handleSubmit() {
+				this.$emit('on-submit', this.data);
+			},
+			// 刷新
+			Refresh() {
+				this.$emit('getList');
+			},
+			//
+			handleReset() {
+				this.$refs.form.resetFields();
+				this.$emit('on-reset');
+			},
+		},
+	};
 </script>
 
 <style scoped lang="stylus">
-.tab_data >>> .ivu-form-item-content {
-  margin-left: 0 !important;
-}
+	.tab_data>>>.ivu-form-item-content {
+		margin-left: 0 !important;
+	}
 
-.table_box >>> .ivu-divider-horizontal {
-  margin-top: 0px !important;
-}
+	.table_box>>>.ivu-divider-horizontal {
+		margin-top: 0px !important;
+	}
 
-.table_box >>> .ivu-form-item {
-  margin-bottom: 15px !important;
-}
+	.table_box>>>.ivu-form-item {
+		margin-bottom: 15px !important;
+	}
 
-.tabform {
-  margin-bottom: 10px;
-}
+	.tabform {
+		margin-bottom: 10px;
+	}
 
-.Refresh {
-  font-size: 12px;
-  color: #1890FF;
-  cursor: pointer;
-}
-</style>
+	.Refresh {
+		font-size: 12px;
+		color: #1890FF;
+		cursor: pointer;
+	}
+</style>

+ 664 - 722
src/pages/order/orderList/components/tableList.vue

@@ -1,103 +1,68 @@
 <template>
-  <div>
-    <Table
-      :columns="columns"
-      :data="orderList"
-      ref="table"
-      :loading="loading"
-      highlight-row
-      no-data-text="暂无数据"
-      no-filtered-data-text="暂无筛选结果"
-      @on-select="handleSelectRow"
-      @on-select-cancel="handleCancelRow"
-      @on-select-all="handleSelectAll"
-      @on-select-all-cancel="handleSelectAll"
-      class="orderData mt25"
-    >
-      <template slot-scope="{ row, index }" slot="order_id">
-        <div>{{ row.order_id }}</div>
-        <div class="pink_name">{{ row.pink_name }}</div>
-        <span v-show="row.is_del === 1" style="color: #ed4014; display: block">用户已删除</span>
-      </template>
-      <template slot-scope="{ row, index }" slot="nickname">
-        <span class="nickname">{{ row.nickname }}</span> |
-        <span class="uid">{{ row.uid }}</span>
-      </template>
-      <template slot-scope="{ row, index }" slot="pay_price">
-        <span>{{ row.paid ? row.pay_price : '未支付' }}</span>
-      </template>
-      <template slot-scope="{ row, index }" slot="info">
-        <div class="tabBox" v-for="(val, i) in row._info" :key="i">
-          <div class="tabBox_img" v-viewer>
-            <img
-              v-lazy="
+	<div>
+		<Table :columns="columns" :data="orderList" ref="table" :loading="loading" highlight-row no-data-text="暂无数据"
+			no-filtered-data-text="暂无筛选结果" @on-select="handleSelectRow" @on-select-cancel="handleCancelRow"
+			@on-select-all="handleSelectAll" @on-select-all-cancel="handleSelectAll" class="orderData mt25">
+			<template slot-scope="{ row, index }" slot="order_id">
+				<div>{{ row.order_id }}</div>
+				<div class="pink_name">{{ row.pink_name }}</div>
+				<span v-show="row.is_del === 1" style="color: #ed4014; display: block">用户已删除</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="nickname">
+				<span class="nickname">{{ row.nickname }}</span> |
+				<span class="uid">{{ row.uid }}</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="pay_price">
+				<span>{{ row.paid ? row.pay_price : '未支付' }}</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="info">
+				<div class="tabBox" v-for="(val, i) in row._info" :key="i">
+					<div class="tabBox_img" v-viewer>
+						<img v-lazy="
                 val.cart_info.productInfo.attrInfo
                   ? val.cart_info.productInfo.attrInfo.image
                   : val.cart_info.productInfo.image
-              "
-            />
-          </div>
-          <span class="tabBox_tit"
-            >{{ val.cart_info.productInfo.store_name + ' | '
-            }}{{ val.cart_info.productInfo.attrInfo ? val.cart_info.productInfo.attrInfo.suk : '' }}</span
-          >
-          <span class="tabBox_pice">{{ '¥' + val.cart_info.truePrice + ' x ' + val.cart_info.cart_num }}</span>
-        </div>
-      </template>
-      <template slot-scope="{ row, index }" slot="statusName">
-        <div v-html="row.status_name.status_name" class="pt5"></div>
-        <div v-if="!row.is_all_refund && row.refund.length" class="trip">部分退款中</div>
-        <div
-          v-if="row.refund_status == 0 && row.is_all_refund && row.refund.length && row.refund_type != 6"
-          class="trip"
-        >
-          退款中
-        </div>
-        <div class="img">
-          <div
-            v-viewer
-            v-if="row.status_name.pics"
-            class="pictrue"
-            v-for="(item, index) in row.status_name.pics || []"
-            :key="index"
-          >
-            <img v-lazy="item" :src="item" />
-          </div>
-        </div>
-      </template>
-      <template slot-scope="{ row, index }" slot="action">
-        <a @click="edit(row)" v-if="row._status === 1 && row.is_del !== 1">编辑</a>
-        <a
-          @click="sendOrder(row)"
-          v-if="
+              " />
+					</div>
+					<span class="tabBox_tit">{{ val.cart_info.productInfo.store_name + ' | '
+            }}{{ val.cart_info.productInfo.attrInfo ? val.cart_info.productInfo.attrInfo.suk : '' }}</span>
+					<span
+						class="tabBox_pice">{{ '¥' + val.cart_info.truePrice + ' x ' + val.cart_info.cart_num }}</span>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="statusName">
+				<div v-html="row.status_name.status_name" class="pt5"></div>
+				<div v-if="!row.is_all_refund && row.refund.length" class="trip">部分退款中</div>
+				<div v-if="row.refund_status == 0 && row.is_all_refund && row.refund.length && row.refund_type != 6"
+					class="trip">
+					退款中
+				</div>
+				<div class="img">
+					<div v-viewer v-if="row.status_name.pics" class="pictrue"
+						v-for="(item, index) in row.status_name.pics || []" :key="index">
+						<img v-lazy="item" :src="item" />
+					</div>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="action">
+				<a @click="edit(row)" v-if="row._status === 1 && row.is_del !== 1">编辑</a>
+				<a @click="sendOrder(row)" v-if="
             (row.status === 4 || row._status === 2 || row._status === 8) &&
             row.shipping_type === 1 &&
             (row.pinkStatus === null || row.pinkStatus === 2) &&
             row.is_del !== 1
-          "
-          >发送货</a
-        >
-        <a @click="delivery(row)" v-if="row._status === 4 && !row.split.length">配送信息</a>
-        <a
-          @click="bindWrite(row)"
-          v-if="row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0"
-          >立即核销</a
-        >
-        <Divider
-          type="vertical"
-          v-if="(row._status === 8 || row.status === 0 || row.status === 4) && row.split.length && row.is_del !== 1"
-        />
-        <a @click="splitOrderDetail(row)" v-if="row.split.length && row.is_del !== 1">查看子订单</a>
-        <Divider
-          type="vertical"
-          v-if="
+          ">发送货</a>
+				<a @click="delivery(row)" v-if="row._status === 4 && !row.split.length">配送信息</a>
+				<a @click="bindWrite(row)"
+					v-if="row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0">立即核销</a>
+				<Divider type="vertical"
+					v-if="(row._status === 8 || row.status === 0 || row.status === 4) && row.split.length && row.is_del !== 1" />
+				<a @click="splitOrderDetail(row)" v-if="row.split.length && row.is_del !== 1">查看子订单</a>
+				<Divider type="vertical" v-if="
             (row._status === 2 && row.shipping_type === 1 && row.pinkStatus === 2) ||
             (row.split.length && row.is_del !== 1)
-          "
-        />
-        <Divider
-          type="vertical"
-          v-if="
+          " />
+				<Divider type="vertical" v-if="
             row.refund_type !== 4 &&
             row.refund_type !== 5 &&
             (row._status === 1 ||
@@ -106,34 +71,25 @@
               row._status === 4 ||
               (row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0)) &&
             row.is_del !== 1
-          "
-        />
-        <template>
-          <Dropdown @on-click="changeMenu(row, $event)" :transfer="true">
-            <a href="javascript:void(0)"
-              >更多
-              <Icon type="ios-arrow-down"></Icon>
-            </a>
-            <DropdownMenu slot="list">
-              <DropdownItem
-                name="1"
-                ref="ones"
-                v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline' && row.is_del !== 1"
-                >确认付款</DropdownItem
-              >
-              <DropdownItem name="2">订单详情</DropdownItem>
-              <DropdownItem name="3">订单记录</DropdownItem>
-              <DropdownItem name="11" v-show="row._status >= 3 && row.express_dump">电子面单打印</DropdownItem>
-              <DropdownItem name="10" v-show="row._status >= 2">小票打印</DropdownItem>
-              <DropdownItem
-                name="4"
-                v-show="
+          " />
+				<template>
+					<Dropdown @on-click="changeMenu(row, $event)" :transfer="true">
+						<a href="javascript:void(0)">更多
+							<Icon type="ios-arrow-down"></Icon>
+						</a>
+						<DropdownMenu slot="list">
+							<DropdownItem name="1" ref="ones"
+								v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline' && row.is_del !== 1">
+								确认付款</DropdownItem>
+							<DropdownItem name="2">订单详情</DropdownItem>
+							<DropdownItem name="3">订单记录</DropdownItem>
+							<DropdownItem name="11" v-show="row._status >= 3 && row.express_dump">电子面单打印</DropdownItem>
+							<DropdownItem name="10" v-show="row._status >= 2">小票打印</DropdownItem>
+							<DropdownItem name="4" v-show="
                   row._status !== 1 ||
                   (row._status === 3 && row.use_integral > 0 && row.use_integral >= row.back_integral)
-                "
-                >订单备注</DropdownItem
-              >
-              <!-- <DropdownItem
+                ">订单备注</DropdownItem>
+							<!-- <DropdownItem
                 name="5"
                 v-show="
                   row._status !== 1 &&
@@ -143,632 +99,618 @@
                 "
                 >立即退款</DropdownItem
               > -->
-              <!--                            <DropdownItem name="6"  v-show='row._status !==1 && (row.use_integral > 0 && row.use_integral >= row.back_integral) '>退积分</DropdownItem>-->
-              <!--                            <DropdownItem name="7"  v-show='row._status === 3'>不退款</DropdownItem>-->
-              <DropdownItem name="8" v-show="row._status === 4">已收货</DropdownItem>
-              <DropdownItem name="9">删除订单</DropdownItem>
-              <DropdownItem name="12" v-show="row.kuaidi_label">快递面单打印</DropdownItem>
-            </DropdownMenu>
-          </Dropdown>
-        </template>
-      </template>
-    </Table>
-    <div class="acea-row row-right page">
-      <Page
-        :total="page.total"
-        :current="page.pageNum"
-        show-elevator
-        show-total
-        @on-change="pageChange"
-        :page-size="page.pageSize"
-        @on-page-size-change="limitChange"
-      />
-    </div>
-    <!-- 编辑 退款 退积分 不退款-->
-    <edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
-    <!-- 详情 -->
-    <details-from ref="details" :orderDatalist="orderDatalist" :orderId="orderId"></details-from>
-    <!-- 备注 -->
-    <order-remark ref="remarks" :orderId="orderId" @submitFail="submitFail"></order-remark>
-    <!-- 记录 -->
-    <order-record ref="record"></order-record>
-    <!-- 发送货 -->
-    <order-send
-      ref="send"
-      :orderId="orderId"
-      :status="status"
-      :pay_type="pay_type"
-      :virtual_type="virtual_type"
-      @submitFail="submitFail"
-      @clearId="
+							<!--                            <DropdownItem name="6"  v-show='row._status !==1 && (row.use_integral > 0 && row.use_integral >= row.back_integral) '>退积分</DropdownItem>-->
+							<!--                            <DropdownItem name="7"  v-show='row._status === 3'>不退款</DropdownItem>-->
+							<DropdownItem name="8" v-show="row._status === 4">已收货</DropdownItem>
+							<DropdownItem name="9">删除订单</DropdownItem>
+							<DropdownItem name="12" v-show="row.kuaidi_label">快递面单打印</DropdownItem>
+						</DropdownMenu>
+					</Dropdown>
+				</template>
+			</template>
+		</Table>
+		<div class="acea-row row-right page">
+			<Page :total="page.total" :current="page.pageNum" show-elevator show-total @on-change="pageChange"
+				:page-size="page.pageSize" @on-page-size-change="limitChange" />
+		</div>
+		<!-- 编辑 退款 退积分 不退款-->
+		<edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
+		<!-- 详情 -->
+		<details-from ref="details" :orderDatalist="orderDatalist" :orderId="orderId"></details-from>
+		<!-- 备注 -->
+		<order-remark ref="remarks" :orderId="orderId" @submitFail="submitFail"></order-remark>
+		<!-- 记录 -->
+		<order-record ref="record"></order-record>
+		<!-- 发送货 -->
+		<order-send ref="send" :orderId="orderId" :status="status" :pay_type="pay_type" :virtual_type="virtual_type"
+			@submitFail="submitFail" @clearId="
         () => {
           orderId = 0;
         }
-      "
-    ></order-send>
-  </div>
+      "></order-send>
+	</div>
 </template>
-
 <script>
-import expandRow from './tableExpand.vue';
-import printJS from 'print-js';
-import {
-  orderList,
-  getOrdeDatas,
-  getDataInfo,
-  getRefundFrom,
-  getnoRefund,
-  refundIntegral,
-  getDistribution,
-  writeUpdate,
-} from '@/api/order';
-import { mapState, mapMutations } from 'vuex';
-import editFrom from '../../../../components/from/from';
-import detailsFrom from '../handle/orderDetails';
-import orderRemark from '../handle/orderRemark';
-import orderRecord from '../handle/orderRecord';
-import orderSend from '../handle/orderSend';
+	import expandRow from './tableExpand.vue';
+	import printJS from 'print-js';
+	import {
+		orderList,
+		getOrdeDatas,
+		getDataInfo,
+		getRefundFrom,
+		getnoRefund,
+		refundIntegral,
+		getDistribution,
+		writeUpdate,
+	} from '@/api/order';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import editFrom from '../../../../components/from/from';
+	import detailsFrom from '../handle/orderDetails';
+	import orderRemark from '../handle/orderRemark';
+	import orderRecord from '../handle/orderRecord';
+	import orderSend from '../handle/orderSend';
 
-export default {
-  name: 'table_list',
-  components: {
-    expandRow,
-    editFrom,
-    detailsFrom,
-    orderRemark,
-    orderRecord,
-    orderSend,
-  },
-  data() {
-    return {
-      delfromData: {},
-      modal: false,
-      orderList: [],
-      orderCards: [],
-      loading: false,
-      orderId: 0,
-      total_num: 0,
-      virtual_type: 0,
-      status: 0,
-      pay_type: '',
-      columns: [
-        {
-          type: 'expand',
-          width: 30,
-          render: (h, params) => {
-            return h(expandRow, {
-              props: {
-                row: params.row,
-              },
-            });
-          },
-        },
-        {
-          type: 'selection',
-          width: 40,
-          align: 'center',
-        },
-        {
-          title: '订单号 | 类型',
-          align: 'center',
-          slot: 'order_id',
-          width: 200,
-        },
-        {
-          title: '用户昵称 | ID',
-          slot: 'nickname',
-          align: 'center',
-          width: 150,
-        },
-        {
-          title: '商品信息',
-          slot: 'info',
-          minWidth: 330,
-        },
-        {
-          title: '实际支付',
-          slot: 'pay_price',
-          align: 'center',
-          width: 100,
-        },
-        {
-          title: '支付方式',
-          key: 'pay_type_name',
-          width: 80,
-        },
-        {
-          title: '支付时间',
-          key: '_pay_time',
-          align: 'center',
-          minWidth: 75,
-          maxWidth: 160,
-        },
-        {
-          title: '订单状态',
-          key: 'statusName',
-          slot: 'statusName',
-          align: 'center',
-          width: 100,
-        },
-        {
-          title: '操作',
-          slot: 'action',
-          fixed: 'right',
-          width: 170,
-          align: 'center',
-        },
-      ],
-      page: {
-        total: 0, // 总条数
-        pageNum: 1, // 当前页
-        pageSize: 10, // 每页显示条数
-      },
-      data: [],
-      FromData: null,
-      orderDatalist: null,
-      // modalTitleSs: '',
-      selectedIds: new Set(), //选中合并项的id
-    };
-  },
-  computed: {
-    ...mapState('order', ['orderPayType', 'orderStatus', 'orderTime', 'orderNum', 'fieldKey', 'orderType']),
-  },
-  mounted() {},
-  created() {
-    this.getList();
-  },
-  watch: {
-    orderType: function () {
-      this.page.pageNum = 1;
-      this.getList();
-    },
-  },
-  methods: {
-    ...mapMutations('order', ['getIsDel', 'getisDelIdListl']),
-    // 操作
-    changeMenu(row, name) {
-      this.orderId = row.id;
-      switch (name) {
-        case '1':
-          this.delfromData = {
-            title: '修改立即支付',
-            url: `/order/pay_offline/${row.id}`,
-            method: 'post',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.$emit('changeGetTabs');
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          // this.modalTitleSs = '修改立即支付';
-          break;
-        case '2':
-          this.getData(row.id);
-          break;
-        case '3':
-          this.$refs.record.modals = true;
-          this.$refs.record.getList(row.id);
-          break;
-        case '4':
-          this.$refs.remarks.modals = true;
-          this.$refs.remarks.formValidate.remark = row.remark;
-          break;
-        case '5':
-          this.getRefundData(row.id);
-          break;
-        case '6':
-          this.getRefundIntegral(row.id);
-          break;
-        case '7':
-          this.getNoRefundData(row.id);
-          break;
-        case '8':
-          this.delfromData = {
-            title: '修改确认收货',
-            url: `/order/take/${row.id}`,
-            method: 'put',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          // this.modalTitleSs = '修改确认收货';
-          break;
-        case '10':
-          this.delfromData = {
-            title: '立即打印订单',
-            info: '您确认打印此订单吗?',
-            url: `/order/print/${row.id}`,
-            method: 'get',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.$emit('changeGetTabs');
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          break;
-        case '11':
-          this.delfromData = {
-            title: '立即打印电子面单',
-            info: '您确认打印此电子面单吗?',
-            url: `/order/order_dump/${row.id}`,
-            method: 'get',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          break;
-        case '12':
-          this.printImg(row.kuaidi_label);
-          break;
-        default:
-          this.delfromData = {
-            title: '删除订单',
-            url: `/order/del/${row.id}`,
-            method: 'DELETE',
-            ids: '',
-          };
-          // this.modalTitleSs = '删除订单';
-          this.delOrder(row, this.delfromData);
-      }
-    },
-    printImg(url) {
-      printJS({
-        printable: url,
-        type: 'image',
-        documentTitle: '快递信息',
-        style: `img{
+	export default {
+		name: 'table_list',
+		components: {
+			expandRow,
+			editFrom,
+			detailsFrom,
+			orderRemark,
+			orderRecord,
+			orderSend,
+		},
+		data() {
+			return {
+				delfromData: {},
+				modal: false,
+				orderList: [],
+				orderCards: [],
+				loading: false,
+				orderId: 0,
+				total_num: 0,
+				virtual_type: 0,
+				status: 0,
+				pay_type: '',
+				columns: [{
+						type: 'expand',
+						width: 30,
+						render: (h, params) => {
+							return h(expandRow, {
+								props: {
+									row: params.row,
+								},
+							});
+						},
+					},
+					{
+						type: 'selection',
+						width: 40,
+						align: 'center',
+					},
+					{
+						title: '订单号 | 类型',
+						align: 'center',
+						slot: 'order_id',
+						width: 200,
+					},
+					{
+						title: '用户昵称 | ID',
+						slot: 'nickname',
+						align: 'center',
+						width: 150,
+					},
+					{
+						title: '商品信息',
+						slot: 'info',
+						minWidth: 330,
+					},
+					{
+						title: '实际支付',
+						slot: 'pay_price',
+						align: 'center',
+						width: 100,
+					},
+					{
+						title: '支付方式',
+						key: 'pay_type_name',
+						width: 80,
+					},
+					{
+						title: '支付时间',
+						key: '_pay_time',
+						align: 'center',
+						minWidth: 75,
+						maxWidth: 160,
+					},
+					{
+						title: '订单状态',
+						key: 'statusName',
+						slot: 'statusName',
+						align: 'center',
+						width: 100,
+					},
+					{
+						title: '操作',
+						slot: 'action',
+						fixed: 'right',
+						width: 170,
+						align: 'center',
+					},
+				],
+				page: {
+					total: 0, // 总条数
+					pageNum: 1, // 当前页
+					pageSize: 10, // 每页显示条数
+				},
+				data: [],
+				FromData: null,
+				orderDatalist: null,
+				// modalTitleSs: '',
+				selectedIds: new Set(), //选中合并项的id
+			};
+		},
+		computed: {
+			...mapState('order', ['orderPayType', 'orderStatus', 'orderTime', 'orderNum', 'fieldKey', 'orderType']),
+		},
+		mounted() {},
+		created() {
+			this.getList();
+		},
+		watch: {
+			orderType: function() {
+				this.page.pageNum = 1;
+				this.getList();
+			},
+		},
+		methods: {
+			...mapMutations('order', ['getIsDel', 'getisDelIdListl']),
+			// 操作
+			changeMenu(row, name) {
+				this.orderId = row.id;
+				switch (name) {
+					case '1':
+						this.delfromData = {
+							title: '修改立即支付',
+							url: `/order/pay_offline/${row.id}`,
+							method: 'post',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改立即支付';
+						break;
+					case '2':
+						this.getData(row.id);
+						break;
+					case '3':
+						this.$refs.record.modals = true;
+						this.$refs.record.getList(row.id);
+						break;
+					case '4':
+						this.$refs.remarks.modals = true;
+						this.$refs.remarks.formValidate.remark = row.remark;
+						break;
+					case '5':
+						this.getRefundData(row.id);
+						break;
+					case '6':
+						this.getRefundIntegral(row.id);
+						break;
+					case '7':
+						this.getNoRefundData(row.id);
+						break;
+					case '8':
+						this.delfromData = {
+							title: '修改确认收货',
+							url: `/order/take/${row.id}`,
+							method: 'put',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改确认收货';
+						break;
+					case '10':
+						this.delfromData = {
+							title: '立即打印订单',
+							info: '您确认打印此订单吗?',
+							url: `/order/print/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					case '11':
+						this.delfromData = {
+							title: '立即打印电子面单',
+							info: '您确认打印此电子面单吗?',
+							url: `/order/order_dump/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					case '12':
+						this.printImg(row.kuaidi_label);
+						break;
+					default:
+						this.delfromData = {
+							title: '删除订单',
+							url: `/order/del/${row.id}`,
+							method: 'DELETE',
+							ids: '',
+						};
+						// this.modalTitleSs = '删除订单';
+						this.delOrder(row, this.delfromData);
+				}
+			},
+			printImg(url) {
+				printJS({
+					printable: url,
+					type: 'image',
+					documentTitle: '快递信息',
+					style: `img{
           width: 100%;
           height: 476px;
         }`,
-      });
-    },
-    // 立即支付 /确认收货//删除单条订单
-    submitModel() {
-      this.getList();
-    },
-    pageChange(index) {
-      this.page.pageNum = index;
-      this.getList();
-    },
-    limitChange(limit) {
-      this.page.pageSize = limit;
-      this.getList();
-    },
-    // 订单列表
-    getList(res) {
-      this.page.pageNum = res === 1 ? 1 : this.page.pageNum;
-      this.loading = true;
-      orderList({
-        page: this.page.pageNum,
-        limit: this.page.pageSize,
-        status: this.orderStatus,
-        pay_type: this.orderPayType,
-        data: this.orderTime,
-        real_name: this.orderNum,
-        field_key: this.fieldKey,
-        type: this.orderType === 0 ? '' : this.orderType,
-      })
-        .then(async (res) => {
-          let data = res.data;
-          this.orderList = data.data;
-          this.orderCards = data.stat;
-          this.page.total = data.count;
-          this.$nextTick(() => {
-            //确保dom加载完毕
-            this.setChecked();
-          });
-          this.$emit('on-changeCards', data.stat);
-          this.loading = false;
-        })
-        .catch((res) => {
-          this.loading = false;
-          this.$Message.error(res.msg);
-        });
-    },
-    // 全选
-    // onSelectTab (selection) {
-    //     let isDel = selection.some(item => {
-    //         return item.is_del === 1
-    //     });
-    //     this.getIsDel(isDel);
-    //     this.getisDelIdListl(selection);
-    // },
-    //全选和取消全选时触发
-    handleSelectAll(selection) {
-      if (selection.length === 0) {
-        //获取table的数据;
-        let data = this.$refs.table.data;
-        data.forEach((item) => {
-          if (this.selectedIds.has(item.id)) {
-            this.selectedIds.delete(item.id);
-          }
-        });
-      } else {
-        selection.forEach((item) => {
-          this.selectedIds.add(item.id);
-        });
-      }
-      this.isDel(selection);
-      this.$nextTick(() => {
-        //确保dom加载完毕
-        this.setChecked();
-      });
-    },
-    //  选中某一行
-    handleSelectRow(selection, row) {
-      this.isDel(selection);
-      this.selectedIds.add(row.id);
-      this.$nextTick(() => {
-        //确保dom加载完毕
-        this.setChecked();
-      });
-    },
-    //  取消某一行
-    handleCancelRow(selection, row) {
-      this.isDel(selection);
-      this.selectedIds.delete(row.id);
-      this.$nextTick(() => {
-        //确保dom加载完毕
-        this.setChecked();
-      });
-    },
-    setChecked() {
-      //将new Set()转化为数组
-      let ids = [...this.selectedIds];
-      this.getisDelIdListl(ids);
-      // 找到绑定的table的ref对应的dom,找到table的objData对象,objData保存的是当前页的数据
-      let objData = this.$refs.table.objData;
-      for (let index in objData) {
-        if (this.selectedIds.has(objData[index].id)) {
-          objData[index]._isChecked = true;
-        }
-      }
-    },
-    isDel(selection) {
-      if (selection.findIndex((target) => target.is_del === 0) == -1) {
-        this.getIsDel(1);
-      } else {
-        this.getIsDel(0);
-      }
-    },
-    // 编辑
-    edit(row) {
-      this.getOrderData(row.id);
-    },
-    // 删除单条订单
-    delOrder(row, data) {
-      if (row.is_del === 1) {
-        this.$modalSure(data)
-          .then((res) => {
-            this.$Message.success(res.msg);
-            this.getList();
-          })
-          .catch((res) => {
-            this.$Message.error(res.msg);
-          });
-      } else {
-        const title = '错误!';
-        const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
-        this.$Modal.error({
-          title: title,
-          content: content,
-        });
-      }
-    },
-    splitOrderDetail(row) {
-      this.$router.push({
-        path: 'split_list',
-        query: {
-          id: row.id,
-        },
-      });
-    },
-    // 获取编辑表单数据
-    getOrderData(id) {
-      getOrdeDatas(id)
-        .then(async (res) => {
-          if (res.data.status === false) {
-            return this.$authLapse(res.data);
-          }
-          this.$authLapse(res.data);
-          this.FromData = res.data;
-          this.$refs.edits.modals = true;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    // 获取详情表单数据
-    getData(id) {
-      getDataInfo(id)
-        .then(async (res) => {
-          this.$refs.details.modals = true;
-          this.orderDatalist = res.data;
-          if (this.orderDatalist.orderInfo.refund_reason_wap_img) {
-            try {
-              this.orderDatalist.orderInfo.refund_reason_wap_img = JSON.parse(
-                this.orderDatalist.orderInfo.refund_reason_wap_img,
-              );
-            } catch (e) {
-              this.orderDatalist.orderInfo.refund_reason_wap_img = [];
-            }
-          }
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    // 修改成功
-    submitFail() {
-      this.getList();
-      this.$emit('changeGetTabs');
-    },
-    // 获取退款表单数据
-    getRefundData(id) {
-      this.$modalForm(getRefundFrom(id)).then(() => {
-        this.getList();
-        this.$emit('changeGetTabs');
-      });
-    },
-    // 获取退积分表单数据
-    getRefundIntegral(id) {
-      refundIntegral(id)
-        .then(async (res) => {
-          this.FromData = res.data;
-          this.$refs.edits.modals = true;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    // 不退款表单数据
-    getNoRefundData(id) {
-      this.$modalForm(getnoRefund(id)).then(() => {
-        this.getList();
-        this.$emit('changeGetTabs');
-      });
-    },
-    // 发送货
-    sendOrder(row) {
-      this.$refs.send.total_num = row.total_num;
-      this.$refs.send.modals = true;
-      this.orderId = row.id;
-      this.status = row._status;
-      this.pay_type = row.pay_type;
-      this.virtual_type = row.virtual_type;
-      this.$refs.send.getList();
-      this.$refs.send.getDeliveryList();
-      this.$nextTick((e) => {
-        this.$refs.send.getCartInfo(row._status, row.id);
-      });
-    },
-    // 配送信息表单数据
-    delivery(row) {
-      getDistribution(row.id)
-        .then(async (res) => {
-          this.FromData = res.data;
-          this.$refs.edits.modals = true;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    change(status) {},
-    // 数据导出;
-    exportData: function () {
-      this.$refs.table.exportCsv({
-        filename: '商品列表',
-      });
-    },
-    // 核销订单
-    bindWrite(row) {
-      let self = this;
-      this.$Modal.confirm({
-        title: '提示',
-        content: '确定要核销该订单吗?',
-        cancelText: '取消',
-        closable: true,
-        maskClosable: true,
-        onOk: function () {
-          writeUpdate(row.order_id)
-            .then((res) => {
-              self.$Message.success(res.msg);
-              self.getList();
-            })
-            .catch((res) => {
-              self.$Message.error(res.msg);
-            });
-        },
-      });
-    },
-  },
-};
+				});
+			},
+			// 立即支付 /确认收货//删除单条订单
+			submitModel() {
+				this.getList();
+			},
+			pageChange(index) {
+				this.page.pageNum = index;
+				this.getList();
+			},
+			limitChange(limit) {
+				this.page.pageSize = limit;
+				this.getList();
+			},
+			// 订单列表
+			getList(res) {
+				this.page.pageNum = res === 1 ? 1 : this.page.pageNum;
+				this.loading = true;
+				orderList({
+						page: this.page.pageNum,
+						limit: this.page.pageSize,
+						status: this.orderStatus,
+						pay_type: this.orderPayType,
+						data: this.orderTime,
+						real_name: this.orderNum,
+						field_key: this.fieldKey,
+						type: this.orderType === 0 ? '' : this.orderType,
+					})
+					.then(async (res) => {
+						let data = res.data;
+						this.orderList = data.data;
+						this.orderCards = data.stat;
+						this.page.total = data.count;
+						this.$nextTick(() => {
+							//确保dom加载完毕
+							this.setChecked();
+						});
+						this.$emit('on-changeCards', data.stat);
+						this.loading = false;
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			// 全选
+			// onSelectTab (selection) {
+			//     let isDel = selection.some(item => {
+			//         return item.is_del === 1
+			//     });
+			//     this.getIsDel(isDel);
+			//     this.getisDelIdListl(selection);
+			// },
+			//全选和取消全选时触发
+			handleSelectAll(selection) {
+				if (selection.length === 0) {
+					//获取table的数据;
+					let data = this.$refs.table.data;
+					data.forEach((item) => {
+						if (this.selectedIds.has(item.id)) {
+							this.selectedIds.delete(item.id);
+						}
+					});
+				} else {
+					selection.forEach((item) => {
+						this.selectedIds.add(item.id);
+					});
+				}
+				this.isDel(selection);
+				this.$nextTick(() => {
+					//确保dom加载完毕
+					this.setChecked();
+				});
+			},
+			//  选中某一行
+			handleSelectRow(selection, row) {
+				this.isDel(selection);
+				this.selectedIds.add(row.id);
+				this.$nextTick(() => {
+					//确保dom加载完毕
+					this.setChecked();
+				});
+			},
+			//  取消某一行
+			handleCancelRow(selection, row) {
+				this.isDel(selection);
+				this.selectedIds.delete(row.id);
+				this.$nextTick(() => {
+					//确保dom加载完毕
+					this.setChecked();
+				});
+			},
+			setChecked() {
+				//将new Set()转化为数组
+				let ids = [...this.selectedIds];
+				this.getisDelIdListl(ids);
+				// 找到绑定的table的ref对应的dom,找到table的objData对象,objData保存的是当前页的数据
+				let objData = this.$refs.table.objData;
+				for (let index in objData) {
+					if (this.selectedIds.has(objData[index].id)) {
+						objData[index]._isChecked = true;
+					}
+				}
+			},
+			isDel(selection) {
+				if (selection.findIndex((target) => target.is_del === 0) == -1) {
+					this.getIsDel(1);
+				} else {
+					this.getIsDel(0);
+				}
+			},
+			// 编辑
+			edit(row) {
+				this.getOrderData(row.id);
+			},
+			// 删除单条订单
+			delOrder(row, data) {
+				if (row.is_del === 1) {
+					this.$modalSure(data)
+						.then((res) => {
+							this.$Message.success(res.msg);
+							this.getList();
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					const title = '错误!';
+					const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
+					this.$Modal.error({
+						title: title,
+						content: content,
+					});
+				}
+			},
+			splitOrderDetail(row) {
+				this.$router.push({
+					path: 'split_list',
+					query: {
+						id: row.id,
+					},
+				});
+			},
+			// 获取编辑表单数据
+			getOrderData(id) {
+				getOrdeDatas(id)
+					.then(async (res) => {
+						if (res.data.status === false) {
+							return this.$authLapse(res.data);
+						}
+						this.$authLapse(res.data);
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 获取详情表单数据
+			getData(id) {
+				getDataInfo(id)
+					.then(async (res) => {
+						this.$refs.details.modals = true;
+						this.orderDatalist = res.data;
+						if (this.orderDatalist.orderInfo.refund_reason_wap_img) {
+							try {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = JSON.parse(
+									this.orderDatalist.orderInfo.refund_reason_wap_img,
+								);
+							} catch (e) {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = [];
+							}
+						}
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 修改成功
+			submitFail() {
+				this.getList();
+				this.$emit('changeGetTabs');
+			},
+			// 获取退款表单数据
+			getRefundData(id) {
+				this.$modalForm(getRefundFrom(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 获取退积分表单数据
+			getRefundIntegral(id) {
+				refundIntegral(id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 不退款表单数据
+			getNoRefundData(id) {
+				this.$modalForm(getnoRefund(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 发送货
+			sendOrder(row) {
+				this.$refs.send.total_num = row.total_num;
+				this.$refs.send.modals = true;
+				this.orderId = row.id;
+				this.status = row._status;
+				this.pay_type = row.pay_type;
+				this.virtual_type = row.virtual_type;
+				this.$refs.send.getList();
+				this.$refs.send.getDeliveryList();
+				this.$nextTick((e) => {
+					this.$refs.send.getCartInfo(row._status, row.id);
+				});
+			},
+			// 配送信息表单数据
+			delivery(row) {
+				getDistribution(row.id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			change(status) {},
+			// 数据导出;
+			exportData: function() {
+				this.$refs.table.exportCsv({
+					filename: '商品列表',
+				});
+			},
+			// 核销订单
+			bindWrite(row) {
+				let self = this;
+				this.$Modal.confirm({
+					title: '提示',
+					content: '确定要核销该订单吗?',
+					cancelText: '取消',
+					closable: true,
+					maskClosable: true,
+					onOk: function() {
+						writeUpdate(row.order_id)
+							.then((res) => {
+								self.$Message.success(res.msg);
+								self.getList();
+							})
+							.catch((res) => {
+								self.$Message.error(res.msg);
+							});
+					},
+				});
+			},
+		},
+	};
 </script>
 
 <style scoped lang="stylus">
-img {
-  height: 36px;
-  display: block;
-}
+	img {
+		height: 36px;
+		display: block;
+	}
 
-.tabBox {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  align-items: center;
-  margin-bottom: 2px;
+	.tabBox {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		margin-bottom: 2px;
 
-  .tabBox_img {
-    width: 36px;
-    height: 36px;
+		.tabBox_img {
+			width: 36px;
+			height: 36px;
 
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
 
-  .tabBox_tit {
-    width: 60%;
-    font-size: 12px !important;
-    margin: 0 10px 0 10px;
-    letter-spacing: 1px;
-    padding: 5px 0;
-    box-sizing: border-box;
-  }
-}
+		.tabBox_tit {
+			width: 60%;
+			font-size: 12px !important;
+			margin: 0 10px 0 10px;
+			letter-spacing: 1px;
+			padding: 5px 0;
+			box-sizing: border-box;
+		}
+	}
 
-.orderData >>>.ivu-table-cell {
-  padding-left: 0 !important;
-}
+	.orderData>>>.ivu-table-cell {
+		padding-left: 0 !important;
+	}
 
-.vertical-center-modal {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
+	.vertical-center-modal {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
 
-.nickname {
-}
+	.nickname {}
 
-.uid {
-  color: #2d8cf0;
-}
+	.uid {
+		color: #2d8cf0;
+	}
 
-.pink_name {
-  color: #666;
-}
+	.pink_name {
+		color: #666;
+	}
 
-.img {
-  display: flex;
-  flex-wrap: wrap;
+	.img {
+		display: flex;
+		flex-wrap: wrap;
 
-  img {
-    width: 30px;
-    height: 30px;
-    margin-right: 3px;
-  }
-}
-</style>
+		img {
+			width: 30px;
+			height: 30px;
+			margin-right: 3px;
+		}
+	}
+</style>

+ 257 - 282
src/pages/order/orderList/handle/orderDetails.vue

@@ -1,23 +1,22 @@
 <template>
-  <div v-if="orderDatalist">
-    <Drawer title="订单详情" :closable="false" width="700" v-model="modals" scrollable>
-      <Card :bordered="false" dis-hover class="i-table-no-border">
-        <div class="ivu-description-list-title">收货信息</div>
-        <Row class="mb10">
-          <Col span="12">用户昵称:{{ orderDatalist.userInfo.nickname }}</Col>
-          <Col span="12">收货人:{{ orderDatalist.orderInfo.real_name }}</Col>
-        </Row>
-        <Row class="mb10">
-          <Col span="12">联系电话:{{ orderDatalist.orderInfo.user_phone || '' }}</Col>
-          <Col span="12">收货地址:{{ orderDatalist.orderInfo.user_address || '' }}</Col>
-        </Row>
-        <Divider style="margin: 20px 0 !important" />
-        <div class="ivu-description-list-title">订单信息</div>
-        <Row class="mb10">
-          <Col span="12">订单ID:{{ orderDatalist.orderInfo.order_id }}</Col>
-          <Col span="12" class="fontColor1"
-            >订单状态:{{ orderDatalist.orderInfo._status._title }}
-            {{
+	<div v-if="orderDatalist">
+		<Drawer title="订单详情" :closable="false" width="700" v-model="modals" scrollable>
+			<Card :bordered="false" dis-hover class="i-table-no-border">
+				<div class="ivu-description-list-title">收货信息</div>
+				<Row class="mb10">
+					<Col span="12">用户昵称:{{ orderDatalist.userInfo.nickname }}</Col>
+					<Col span="12">收货人:{{ orderDatalist.orderInfo.real_name }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">联系电话:{{ orderDatalist.orderInfo.user_phone || '' }}</Col>
+					<Col span="12">收货地址:{{ orderDatalist.orderInfo.user_address || '' }}</Col>
+				</Row>
+				<Divider style="margin: 20px 0 !important" />
+				<div class="ivu-description-list-title">订单信息</div>
+				<Row class="mb10">
+					<Col span="12">订单ID:{{ orderDatalist.orderInfo.order_id }}</Col>
+					<Col span="12" class="fontColor1">订单状态:{{ orderDatalist.orderInfo._status._title }}
+					{{
               orderDatalist.orderInfo.refund &&
               orderDatalist.orderInfo.refund.length &&
               orderDatalist.orderInfo.refund_status < 2
@@ -26,298 +25,274 @@
                   : '部分退款中'
                 : ''
             }}
-          </Col>
-        </Row>
-        <Row class="mb10">
-          <Col span="12">商品总数:{{ orderDatalist.orderInfo.total_num }}</Col>
-          <Col span="12">商品总价:{{ orderDatalist.orderInfo.total_price }}</Col>
-        </Row>
-        <Row class="mb10">
-          <Col span="12">交付邮费:{{ orderDatalist.orderInfo.pay_postage }}</Col>
-          <Col span="12">优惠券金额:{{ orderDatalist.orderInfo.coupon_price }}</Col>
-        </Row>
-        <Row class="mb10">
-          <Col span="12">用户等级优惠:{{ orderDatalist.orderInfo.levelPrice || 0.0 }}</Col>
-          <Col span="12">付费会员优惠:{{ orderDatalist.orderInfo.memberPrice || 0.0 }}</Col>
-        </Row>
-        <Row class="mb10">
-          <Col span="12">积分抵扣:{{ orderDatalist.orderInfo.deduction_price || 0.0 }}</Col>
-          <Col span="12">实际支付:{{ orderDatalist.orderInfo.pay_price }}</Col>
-        </Row>
-        <Row class="mb10">
-          <Col
-            span="12"
-            class="fontColor3 mb10"
-            v-if="parseFloat(orderDatalist.orderInfo.refund_price) && orderDatalist.orderInfo.refund_type != 3"
-            >退款金额:{{ parseFloat(orderDatalist.orderInfo.refund_price) }}</Col
-          >
-          <Col span="12" class="fontColor3 mb10" v-if="parseFloat(orderDatalist.orderInfo.use_integral)"
-            >使用积分:{{ parseFloat(orderDatalist.orderInfo.use_integral) }}</Col
-          >
-          <Col span="12" class="fontColor3 mb10" v-if="parseFloat(orderDatalist.orderInfo.back_integral)"
-            >退回积分:{{ parseFloat(orderDatalist.orderInfo.back_integral) }}</Col
-          >
-          <Col span="12" class="fontColor3 mb10" v-if="parseFloat(orderDatalist.orderInfo.gain_integral) && orderDatalist.orderInfo.paid == 1"
-            >赠送积分:{{ parseFloat(orderDatalist.orderInfo.gain_integral) }}</Col
-          >
-          <Col span="12" class="mb10">创建时间:{{ orderDatalist.orderInfo._add_time }}</Col>
-          <Col span="12" class="mb10">支付时间:{{ orderDatalist.orderInfo._pay_time }}</Col>
-          <Col span="12" class="mb10">支付方式:{{ orderDatalist.orderInfo._status._payType }}</Col>
-          <Col span="12" class="mb10" v-if="is_refund != 1"
-            >推广人:{{ orderDatalist.orderInfo.spread_name + '/' + orderDatalist.orderInfo.spread_uid }}</Col
-          >
-          <Col
-            span="12"
-            class="mb10"
-            v-if="
+					</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">商品总数:{{ orderDatalist.orderInfo.total_num }}</Col>
+					<Col span="12">商品总价:{{ orderDatalist.orderInfo.total_price }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">交付邮费:{{ orderDatalist.orderInfo.pay_postage }}</Col>
+					<Col span="12">优惠券金额:{{ orderDatalist.orderInfo.coupon_price }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">用户等级优惠:{{ orderDatalist.orderInfo.levelPrice || 0.0 }}</Col>
+					<Col span="12">付费会员优惠:{{ orderDatalist.orderInfo.memberPrice || 0.0 }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">积分抵扣:{{ orderDatalist.orderInfo.deduction_price || 0.0 }}</Col>
+					<Col span="12">实际支付:{{ orderDatalist.orderInfo.pay_price }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12" class="fontColor3 mb10"
+						v-if="parseFloat(orderDatalist.orderInfo.refund_price) && orderDatalist.orderInfo.refund_type != 3">
+					退款金额:{{ parseFloat(orderDatalist.orderInfo.refund_price) }}</Col>
+					<Col span="12" class="fontColor3 mb10" v-if="parseFloat(orderDatalist.orderInfo.use_integral)">
+					使用积分:{{ parseFloat(orderDatalist.orderInfo.use_integral) }}</Col>
+					<Col span="12" class="fontColor3 mb10" v-if="parseFloat(orderDatalist.orderInfo.back_integral)">
+					退回积分:{{ parseFloat(orderDatalist.orderInfo.back_integral) }}</Col>
+					<Col span="12" class="fontColor3 mb10"
+						v-if="parseFloat(orderDatalist.orderInfo.gain_integral) && orderDatalist.orderInfo.paid == 1">
+					赠送积分:{{ parseFloat(orderDatalist.orderInfo.gain_integral) }}</Col>
+					<Col span="12" class="mb10">创建时间:{{ orderDatalist.orderInfo._add_time }}</Col>
+					<Col span="12" class="mb10">支付时间:{{ orderDatalist.orderInfo._pay_time }}</Col>
+					<Col span="12" class="mb10">支付方式:{{ orderDatalist.orderInfo._status._payType }}</Col>
+					<Col span="12" class="mb10" v-if="is_refund != 1">
+					推广人:{{ orderDatalist.orderInfo.spread_name + '/' + orderDatalist.orderInfo.spread_uid }}</Col>
+					<Col span="12" class="mb10" v-if="
               orderDatalist.orderInfo.shipping_type === 2 &&
               orderDatalist.orderInfo.refund_status === 0 &&
               orderDatalist.orderInfo.paid === 1
-            "
-            >门店名称:{{ orderDatalist.orderInfo._store_name }}</Col
-          >
-          <Col
-            span="12"
-            class="mb10"
-            v-if="
+            ">门店名称:{{ orderDatalist.orderInfo._store_name }}</Col>
+					<Col span="12" class="mb10" v-if="
               orderDatalist.orderInfo.shipping_type === 2 &&
               orderDatalist.orderInfo.refund_status === 0 &&
               orderDatalist.orderInfo.paid === 1
-            "
-            >核销码:{{ orderDatalist.orderInfo.verify_code }}</Col
-          >
-          <Col span="24" class="mb10" v-if="orderDatalist.orderInfo.remark"
-            >商家备注:{{ orderDatalist.orderInfo.remark }}</Col
-          >
-          <Col span="24" class="mb10" v-if="orderDatalist.orderInfo.fictitious_content"
-            >虚拟发货备注:{{ orderDatalist.orderInfo.fictitious_content }}</Col
-          >
-        </Row>
-        <Divider style="margin: 20px 0 !important" v-if="orderDatalist.orderInfo.custom_form.length" />
-        <div class="ivu-description-list-title" v-if="orderDatalist.orderInfo.custom_form.length">表单信息</div>
-        <Row class="mb10" v-if="orderDatalist.orderInfo.custom_form.length">
-          <Col
-            class="mb10"
-            :span="item.label !== 'text' ? 12 : 24"
-            v-if="item.label !== 'img'"
-            v-for="(item, index) in orderDatalist.orderInfo.custom_form"
-            :key="index"
-            >{{ item.title }}:{{ item.value }}</Col
-          >
-          <Col span="24" v-else>
-            <div>{{ item.title }}:</div>
-            <div class="pic">
-              <div v-for="(img, i) in item.value" :key="i" class="img">
-                <img v-viewer :src="img" alt="" />
-              </div>
-            </div>
-          </Col>
-        </Row>
-        <div v-if="orderDatalist.orderInfo.delivery_type === 'express'">
-          <Divider style="margin: 20px 0 !important" />
-          <div class="ivu-description-list-title">物流信息</div>
-          <Row class="mb10">
-            <Col span="12">快递公司:{{ orderDatalist.orderInfo.delivery_name }}</Col>
-            <Col span="12"
-              >快递单号:{{ orderDatalist.orderInfo.delivery_id }}
-              <Button type="info" size="small" @click="openLogistics">物流查询</Button></Col
-            >
-          </Row>
-        </div>
-        <div v-if="orderDatalist.orderInfo.delivery_type === 'send'">
-          <Divider style="margin: 20px 0 !important" />
-          <div class="ivu-description-list-title">配送信息</div>
-          <Row class="mb10">
-            <Col span="12">送货人姓名:{{ orderDatalist.orderInfo.delivery_name }}</Col>
-            <Col span="12">送货人电话:{{ orderDatalist.orderInfo.delivery_id }}</Col>
-          </Row>
-        </div>
-        <div v-if="orderDatalist.orderInfo.mark">
-          <Divider style="margin: 20px 0 !important" v-if="orderDatalist.orderInfo.mark" />
-          <div class="ivu-description-list-title" v-if="orderDatalist.orderInfo.mark">备注信息</div>
-          <Row class="mb10">
-            <Col span="12" class="fontColor2">{{ orderDatalist.orderInfo.mark }}</Col>
-          </Row>
-        </div>
-      </Card>
-    </Drawer>
-    <Modal v-model="modal2" scrollable title="物流查询" width="350" class="order_box2">
-      <div class="logistics acea-row row-top">
-        <div class="logistics_img">
-          <img src="../../../../assets/images/expressi.jpg" />
-        </div>
-        <div class="logistics_cent">
-          <span>物流公司:{{ orderDatalist.orderInfo.delivery_name }}</span>
-          <span>物流单号:{{ orderDatalist.orderInfo.delivery_id }}</span>
-        </div>
-      </div>
-      <div class="acea-row row-column-around trees-coadd">
-        <div class="scollhide">
-          <Timeline>
-            <TimelineItem v-for="(item, i) in result" :key="i">
-              <p class="time" v-text="item.time"></p>
-              <p class="content" v-text="item.status"></p>
-            </TimelineItem>
-          </Timeline>
-        </div>
-      </div>
-    </Modal>
-  </div>
+            ">核销码:{{ orderDatalist.orderInfo.verify_code }}</Col>
+					<Col span="24" class="mb10" v-if="orderDatalist.orderInfo.remark">
+					商家备注:{{ orderDatalist.orderInfo.remark }}</Col>
+					<Col span="24" class="mb10" v-if="orderDatalist.orderInfo.fictitious_content">
+					虚拟发货备注:{{ orderDatalist.orderInfo.fictitious_content }}</Col>
+				</Row>
+				<Divider style="margin: 20px 0 !important" v-if="orderDatalist.orderInfo.custom_form.length" />
+				<div class="ivu-description-list-title" v-if="orderDatalist.orderInfo.custom_form.length">表单信息</div>
+				<Row class="mb10" v-if="orderDatalist.orderInfo.custom_form.length">
+					<Col class="mb10" :span="item.label !== 'text' ? 12 : 24" v-if="item.label !== 'img'"
+						v-for="(item, index) in orderDatalist.orderInfo.custom_form" :key="index">
+					{{ item.title }}:{{ item.value }}</Col>
+					<Col span="24" v-else>
+					<div>{{ item.title }}:</div>
+					<div class="pic">
+						<div v-for="(img, i) in item.value" :key="i" class="img">
+							<img v-viewer :src="img" alt="" />
+						</div>
+					</div>
+					</Col>
+				</Row>
+				<div v-if="orderDatalist.orderInfo.delivery_type === 'express'">
+					<Divider style="margin: 20px 0 !important" />
+					<div class="ivu-description-list-title">物流信息</div>
+					<Row class="mb10">
+						<Col span="12">快递公司:{{ orderDatalist.orderInfo.delivery_name }}</Col>
+						<Col span="12">快递单号:{{ orderDatalist.orderInfo.delivery_id }}
+						<Button type="info" size="small" @click="openLogistics">物流查询</Button></Col>
+					</Row>
+				</div>
+				<div v-if="orderDatalist.orderInfo.delivery_type === 'send'">
+					<Divider style="margin: 20px 0 !important" />
+					<div class="ivu-description-list-title">配送信息</div>
+					<Row class="mb10">
+						<Col span="12">送货人姓名:{{ orderDatalist.orderInfo.delivery_name }}</Col>
+						<Col span="12">送货人电话:{{ orderDatalist.orderInfo.delivery_id }}</Col>
+					</Row>
+				</div>
+				<div v-if="orderDatalist.orderInfo.mark">
+					<Divider style="margin: 20px 0 !important" v-if="orderDatalist.orderInfo.mark" />
+					<div class="ivu-description-list-title" v-if="orderDatalist.orderInfo.mark">备注信息</div>
+					<Row class="mb10">
+						<Col span="12" class="fontColor2">{{ orderDatalist.orderInfo.mark }}</Col>
+					</Row>
+				</div>
+			</Card>
+		</Drawer>
+		<Modal v-model="modal2" scrollable title="物流查询" width="350" class="order_box2">
+			<div class="logistics acea-row row-top">
+				<div class="logistics_img">
+					<img src="../../../../assets/images/expressi.jpg" />
+				</div>
+				<div class="logistics_cent">
+					<span>物流公司:{{ orderDatalist.orderInfo.delivery_name }}</span>
+					<span>物流单号:{{ orderDatalist.orderInfo.delivery_id }}</span>
+				</div>
+			</div>
+			<div class="acea-row row-column-around trees-coadd">
+				<div class="scollhide">
+					<Timeline>
+						<TimelineItem v-for="(item, i) in result" :key="i">
+							<p class="time" v-text="item.time"></p>
+							<p class="content" v-text="item.status"></p>
+						</TimelineItem>
+					</Timeline>
+				</div>
+			</div>
+		</Modal>
+	</div>
 </template>
 
 <script>
-import { getExpress } from '@/api/order';
-export default {
-  name: 'orderDetails',
-  data() {
-    return {
-      modal2: false,
-      modals: false,
-      grid: {
-        xl: 8,
-        lg: 8,
-        md: 12,
-        sm: 24,
-        xs: 24,
-      },
-      result: [],
-    };
-  },
-  props: {
-    orderDatalist: Object,
-    orderId: Number,
-    is_refund: Number,
-  },
-  methods: {
-    openLogistics() {
-      this.getOrderData();
-      this.modal2 = true;
-    },
-    // 获取订单物流信息
-    getOrderData() {
-      getExpress(this.orderId)
-        .then(async (res) => {
-          this.result = res.data.result;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-  },
-  computed: {},
-};
+	import {
+		getExpress
+	} from '@/api/order';
+	export default {
+		name: 'orderDetails',
+		data() {
+			return {
+				modal2: false,
+				modals: false,
+				grid: {
+					xl: 8,
+					lg: 8,
+					md: 12,
+					sm: 24,
+					xs: 24,
+				},
+				result: [],
+			};
+		},
+		props: {
+			orderDatalist: Object,
+			orderId: Number,
+			is_refund: Number,
+		},
+		methods: {
+			openLogistics() {
+				this.getOrderData();
+				this.modal2 = true;
+			},
+			// 获取订单物流信息
+			getOrderData() {
+				getExpress(this.orderId)
+					.then(async (res) => {
+						this.result = res.data.result;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+		},
+		computed: {},
+	};
 </script>
-
 <style scoped lang="stylus">
-.ivu-description-list-title {
-  margin-bottom: 16px;
-  color: #17233d;
-  font-weight: 500;
-  font-size: 14px;
-}
+	.ivu-description-list-title {
+		margin-bottom: 16px;
+		color: #17233d;
+		font-weight: 500;
+		font-size: 14px;
+	}
 
-.logistics {
-  align-items: center;
-  padding: 10px 0px;
+	.logistics {
+		align-items: center;
+		padding: 10px 0px;
 
-  .logistics_img {
-    width: 45px;
-    height: 45px;
-    margin-right: 12px;
+		.logistics_img {
+			width: 45px;
+			height: 45px;
+			margin-right: 12px;
 
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
 
-  .logistics_cent {
-    span {
-      display: block;
-      font-size: 12px;
-    }
-  }
-}
+		.logistics_cent {
+			span {
+				display: block;
+				font-size: 12px;
+			}
+		}
+	}
 
-.trees-coadd {
-  width: 100%;
-  height: 400px;
-  border-radius: 4px;
-  overflow: hidden;
+	.trees-coadd {
+		width: 100%;
+		height: 400px;
+		border-radius: 4px;
+		overflow: hidden;
 
-  .scollhide {
-    width: 100%;
-    height: 100%;
-    overflow: auto;
-    margin-left: 18px;
-    padding: 10px 0 10px 0;
-    box-sizing: border-box;
+		.scollhide {
+			width: 100%;
+			height: 100%;
+			overflow: auto;
+			margin-left: 18px;
+			padding: 10px 0 10px 0;
+			box-sizing: border-box;
 
-    .content {
-      font-size: 12px;
-    }
+			.content {
+				font-size: 12px;
+			}
 
-    .time {
-      font-size: 12px;
-      color: #2d8cf0;
-    }
-  }
-}
+			.time {
+				font-size: 12px;
+				color: #2d8cf0;
+			}
+		}
+	}
 
-.order_box2 {
-  position: absolute;
-  z-index: 999999999;
-}
+	.order_box2 {
+		position: absolute;
+		z-index: 999999999;
+	}
 
-.order_box >>> .ivu-modal-header {
-  padding: 30x 16px !important;
-}
+	.order_box>>>.ivu-modal-header {
+		padding: 30x 16px !important;
+	}
 
-.order_box >>> .ivu-card {
-  font-size: 12px !important;
-}
+	.order_box>>>.ivu-card {
+		font-size: 12px !important;
+	}
 
-.fontColor1 {
-  color: red !important;
-}
+	.fontColor1 {
+		color: red !important;
+	}
 
-.fontColor2 {
-  color: #733AF9 !important;
-}
+	.fontColor2 {
+		color: #733AF9 !important;
+	}
 
-.order_box >>> .ivu-description-term {
-  padding-bottom: 10px !important;
-}
+	.order_box>>>.ivu-description-term {
+		padding-bottom: 10px !important;
+	}
 
-.order_box >>> .ivu-description-detail {
-  padding-bottom: 10px !important;
-}
+	.order_box>>>.ivu-description-detail {
+		padding-bottom: 10px !important;
+	}
 
-.order_box >>> .ivu-modal-body {
-  padding: 0 16px !important;
-}
+	.order_box>>>.ivu-modal-body {
+		padding: 0 16px !important;
+	}
 
-.fontColor3 {
-  color: #f1a417 !important;
-}
+	.fontColor3 {
+		color: #f1a417 !important;
+	}
 
-.fontColor3 {
-  color: #f1a417 !important;
-}
+	.fontColor3 {
+		color: #f1a417 !important;
+	}
 
-.pic {
-  display: flex;
-  flex-wrap: wrap;
-}
+	.pic {
+		display: flex;
+		flex-wrap: wrap;
+	}
 
-.img {
-  width: 100px;
-  height: 100px;
-  margin: 10px 10px;
+	.img {
+		width: 100px;
+		height: 100px;
+		margin: 10px 10px;
 
-  img {
-    width: 100%;
-    height: 100%;
-  }
-}
-</style>
+		img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+</style>

+ 77 - 80
src/pages/order/orderList/handle/orderRecord.vue

@@ -1,86 +1,83 @@
 <template>
-  <Drawer title="订单记录" :closable="false" width="700" scrollable v-model="modals">
-    <Card :bordered="false" dis-hover>
-      <Table
-        :columns="columns"
-        border
-        :data="recordData"
-        :loading="loading"
-        no-data-text="暂无数据"
-        highlight-row
-        no-filtered-data-text="暂无筛选结果"
-      ></Table>
-      <!--            <div class="acea-row row-right page">-->
-      <!--                <Page :total="recordData.length" show-elevator show-total @on-change="pageChange"-->
-      <!--                      :page-size="page.limit"/>-->
-      <!--            </div>-->
-    </Card>
-  </Drawer>
+	<Drawer title="订单记录" :closable="false" width="700" scrollable v-model="modals">
+		<Card :bordered="false" dis-hover>
+			<Table :columns="columns" border :data="recordData" :loading="loading" no-data-text="暂无数据" highlight-row
+				no-filtered-data-text="暂无筛选结果"></Table>
+			<!--            <div class="acea-row row-right page">-->
+			<!--                <Page :total="recordData.length" show-elevator show-total @on-change="pageChange"-->
+			<!--                      :page-size="page.limit"/>-->
+			<!--            </div>-->
+		</Card>
+	</Drawer>
 </template>
-
 <script>
-import { getOrderRecord } from '@/api/order';
-export default {
-  name: 'orderRecord',
-  data() {
-    return {
-      modals: false,
-      loading: false,
-      recordData: [],
-      page: {
-        page: 1, // 当前页
-        limit: 10, // 每页显示条数
-      },
-      columns: [
-        {
-          title: '订单ID',
-          key: 'oid',
-          align: 'center',
-          minWidth: 40,
-        },
-        {
-          title: '操作记录',
-          key: 'change_message',
-          align: 'center',
-          minWidth: 280,
-        },
-        {
-          title: '操作时间',
-          key: 'change_time',
-          align: 'center',
-          minWidth: 100,
-        },
-      ],
-    };
-  },
-  methods: {
-    pageChange(index) {
-      this.page.pageNum = index;
-      this.getList();
-    },
-    getList(id) {
-      let data = {
-        id: id,
-        datas: this.page,
-      };
-      this.loading = true;
-      getOrderRecord(data)
-        .then(async (res) => {
-          this.recordData = res.data;
-          this.loading = false;
-        })
-        .catch((res) => {
-          this.loading = false;
-          this.$Message.error(res.msg);
-        });
-    },
-  },
-};
+	import {
+		getOrderRecord
+	} from '@/api/order';
+	export default {
+		name: 'orderRecord',
+		data() {
+			return {
+				modals: false,
+				loading: false,
+				recordData: [],
+				page: {
+					page: 1, // 当前页
+					limit: 10, // 每页显示条数
+				},
+				columns: [{
+						title: '订单ID',
+						key: 'oid',
+						align: 'center',
+						minWidth: 40,
+					},
+					{
+						title: '操作记录',
+						key: 'change_message',
+						align: 'center',
+						minWidth: 280,
+					},
+					{
+						title: '操作时间',
+						key: 'change_time',
+						align: 'center',
+						minWidth: 100,
+					},
+				],
+			};
+		},
+		methods: {
+			pageChange(index) {
+				this.page.pageNum = index;
+				this.getList();
+			},
+			getList(id) {
+				let data = {
+					id: id,
+					datas: this.page,
+				};
+				this.loading = true;
+				getOrderRecord(data)
+					.then(async (res) => {
+						this.recordData = res.data;
+						this.loading = false;
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+		},
+	};
 </script>
 
 <style scoped lang="stylus">
-.ivu-table-wrapper
-  border-left: 1px solid #dcdee2;
-  border-top: 1px solid #dcdee2;
-.order_box >>> .ivu-table th{background: #f8f8f9 !important;}
-</style>
+	.ivu-table-wrapper {
+		border-left: 1px solid #dcdee2;
+		border-top: 1px solid #dcdee2;
+	}
+
+	.order_box>>>.ivu-table th {
+		background: #f8f8f9 !important;
+	}
+</style>

+ 72 - 73
src/pages/order/orderList/handle/orderRemark.vue

@@ -1,78 +1,77 @@
 <template>
-  <Modal v-model="modals" scrollable title="请修改内容" class="order_box" :closable="false">
-    <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80" @submit.native.prevent>
-      <FormItem label="备注:" prop="remark">
-        <Input
-          v-model="formValidate.remark"
-          :maxlength="200"
-          show-word-limit
-          type="textarea"
-          placeholder="订单备注"
-          style="width: 100%"
-        />
-      </FormItem>
-    </Form>
-    <div slot="footer">
-      <Button type="primary" @click="putRemark('formValidate')">提交</Button>
-      <Button @click="cancel('formValidate')">取消</Button>
-    </div>
-  </Modal>
+	<Modal v-model="modals" scrollable title="请修改内容" class="order_box" :closable="false">
+		<Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80" @submit.native.prevent>
+			<FormItem label="备注:" prop="remark">
+				<Input v-model="formValidate.remark" :maxlength="200" show-word-limit type="textarea" placeholder="订单备注"
+					style="width: 100%" />
+			</FormItem>
+		</Form>
+		<div slot="footer">
+			<Button type="primary" @click="putRemark('formValidate')">提交</Button>
+			<Button @click="cancel('formValidate')">取消</Button>
+		</div>
+	</Modal>
 </template>
-
 <script>
-import { putRemarkData, putRefundRemarkData } from '@/api/order';
-export default {
-  name: 'orderMark',
-  data() {
-    return {
-      formValidate: {
-        remark: '',
-      },
-      modals: false,
-      ruleValidate: {
-        remark: [
-          { required: true, message: '请输入备注信息', trigger: 'blur' },
-          // { type: 'string', min: 20, message: 'Introduce no less than 20 words', trigger: 'blur' }
-        ],
-      },
-    };
-  },
-  props: {
-    orderId: Number,
-    remarkType: {
-      default: '',
-      type: String,
-    },
-  },
-  methods: {
-    cancel(name) {
-      this.modals = false;
-      this.$refs[name].resetFields();
-    },
-    putRemark(name) {
-      let data = {
-        id: this.orderId,
-        remark: this.formValidate,
-      };
-      this.$refs[name].validate((valid) => {
-        if (valid) {
-          (this.remarkType ? putRefundRemarkData : putRemarkData)(data)
-            .then(async (res) => {
-              this.$Message.success(res.msg);
-              this.modals = false;
-              this.$refs[name].resetFields();
-              this.$emit('submitFail');
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-        } else {
-          this.$Message.warning('请填写备注信息');
-        }
-      });
-    },
-  },
-};
+	import {
+		putRemarkData,
+		putRefundRemarkData
+	} from '@/api/order';
+	export default {
+		name: 'orderMark',
+		data() {
+			return {
+				formValidate: {
+					remark: '',
+				},
+				modals: false,
+				ruleValidate: {
+					remark: [{
+							required: true,
+							message: '请输入备注信息',
+							trigger: 'blur'
+						},
+						// { type: 'string', min: 20, message: 'Introduce no less than 20 words', trigger: 'blur' }
+					],
+				},
+			};
+		},
+		props: {
+			orderId: Number,
+			remarkType: {
+				default: '',
+				type: String,
+			},
+		},
+		methods: {
+			cancel(name) {
+				this.modals = false;
+				this.$refs[name].resetFields();
+			},
+			putRemark(name) {
+				let data = {
+					id: this.orderId,
+					remark: this.formValidate,
+				};
+				this.$refs[name].validate((valid) => {
+					if (valid) {
+						(this.remarkType ? putRefundRemarkData : putRemarkData)(data)
+						.then(async (res) => {
+								this.$Message.success(res.msg);
+								this.modals = false;
+								this.$refs[name].resetFields();
+								this.$emit('submitFail');
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+					} else {
+						this.$Message.warning('请填写备注信息');
+					}
+				});
+			},
+		},
+	};
 </script>
 
-<style scoped></style>
+<style scoped></style>

+ 533 - 562
src/pages/order/orderList/handle/orderSend.vue

@@ -1,576 +1,547 @@
 <template>
-  <Modal
-    v-model="modals"
-    scrollable
-    title="订单发送货"
-    class="order_box"
-    :closable="false"
-    width="1000"
-    @on-visible-change="changeModal"
-  >
-    <Form v-if="modals" ref="formItem" :model="formItem" :label-width="100" @submit.native.prevent>
-      <FormItem label="选择类型:">
-        <RadioGroup v-model="formItem.type" @on-change="changeRadio">
-          <Radio label="1" v-if="virtual_type !== 3">发货</Radio>
-          <Radio label="2" v-if="virtual_type !== 3">送货</Radio>
-          <Radio label="3">无需配送</Radio>
-        </RadioGroup>
-      </FormItem>
-      <FormItem v-if="formItem.type == 1" v-show="export_open" label="发货类型:">
-        <RadioGroup v-model="formItem.express_record_type" @on-change="changeExpress">
-          <Radio label="1">手动填写</Radio>
-          <Radio label="2">电子面单打印</Radio>
-        </RadioGroup>
-      </FormItem>
-      <div>
-        <FormItem label="快递公司:" v-if="formItem.type == 1">
-          <Select
-            v-model="formItem.delivery_name"
-            filterable
-            placeholder="请选择快递公司"
-            style="width: 80%"
-            @on-change="expressChange"
-          >
-            <Option v-for="(item, i) in express" :value="item.value" :key="item.value">{{ item.value }}</Option>
-          </Select>
-        </FormItem>
-        <FormItem v-if="formItem.express_record_type === '1' && formItem.type == 1" label="快递单号:">
-          <Input v-model="formItem.delivery_id" placeholder="请输入快递单号" style="width: 80%"></Input>
-          <div class="trips" v-if="formItem.delivery_name == '顺丰速运'">
-            <p>顺丰请输入单号 :收件人或寄件人手机号后四位,</p>
-            <p>例如:SF000000000000:3941</p>
-          </div>
-        </FormItem>
-        <template v-if="formItem.express_record_type === '2' && formItem.type == 1">
-          <FormItem label="电子面单:" class="express_temp_id">
-            <Select
-              v-model="formItem.express_temp_id"
-              placeholder="请选择电子面单"
-              style="width: 80%"
-              @on-change="expressTempChange"
-            >
-              <Option v-for="(item, i) in expressTemp" :value="item.temp_id" :key="i">{{ item.title }}</Option>
-            </Select>
-            <Button v-if="formItem.express_temp_id" type="text" @click="preview">预览</Button>
-          </FormItem>
-          <FormItem label="寄件人姓名:">
-            <Input v-model="formItem.to_name" placeholder="请输入寄件人姓名" style="width: 80%"></Input>
-          </FormItem>
-          <FormItem label="寄件人电话:">
-            <Input v-model="formItem.to_tel" placeholder="请输入寄件人电话" style="width: 80%"></Input>
-          </FormItem>
-          <FormItem label="寄件人地址:">
-            <Input v-model="formItem.to_addr" placeholder="请输入寄件人地址" style="width: 80%"></Input>
-          </FormItem>
-        </template>
-      </div>
-      <div v-show="formItem.type === '2'">
-        <FormItem label="送货人:">
-          <Select
-            v-model="formItem.sh_delivery"
-            placeholder="请选择送货人"
-            style="width: 80%"
-            @on-change="shDeliveryChange"
-          >
-            <Option v-for="(item, i) in deliveryList" :value="item.id" :key="i"
-              >{{ item.wx_name }}({{ item.phone }})</Option
-            >
-          </Select>
-        </FormItem>
-      </div>
-      <div v-show="formItem.type === '3'">
-        <FormItem label="备注:">
-          <Input
-            v-model="formItem.fictitious_content"
-            type="textarea"
-            :autosize="{ minRows: 2, maxRows: 5 }"
-            placeholder="备注"
-            style="width: 80%"
-          ></Input>
-        </FormItem>
-      </div>
-      <div v-if="total_num > 1">
-        <FormItem label="分单发货:">
-          <i-switch
-            size="large"
-            v-model="splitSwitch"
-            :disabled="orderStatus === 8 || orderStatus === 11"
-            @on-change="changeSplitStatus"
-          >
-            <span slot="open">开启</span>
-            <span slot="close">关闭</span>
-          </i-switch>
-          <div class="trips">
-            <p>可选择表格中的商品单独发货,发货后会生成新的订单且不能撤回,请谨慎操作!</p>
-          </div>
-          <i-table
-            v-if="splitSwitch && manyFormValidate.length"
-            :data="manyFormValidate"
-            @on-selection-change="selectOne"
-            :columns="header"
-          >
-            <template slot-scope="{ row, index }" slot="image">
-              <div class="product-data">
-                <img class="image" :src="row.cart_info.productInfo.image" />
-                <div class="line2">
-                  {{ row.cart_info.productInfo.store_name }}
-                </div>
-              </div>
-            </template>
-            <template slot-scope="{ row, index }" slot="value">
-              <div class="product-data">
-                <div>{{ row.cart_info.productInfo.attrInfo.suk }}</div>
-              </div>
-            </template>
-            <template slot-scope="{ row, index }" slot="price">
-              <div class="product-data">
-                <div>{{ row.cart_info.truePrice }}</div>
-              </div>
-            </template>
-          </i-table>
-        </FormItem>
-      </div>
-    </Form>
-    <div slot="footer">
-      <Button @click="cancel">取消</Button>
-      <Button type="primary" @click="putSend">提交</Button>
-    </div>
-    <!-- <viewer @inited="inited">
+	<Modal v-model="modals" scrollable title="订单发送货" class="order_box" :closable="false" width="1000"
+		@on-visible-change="changeModal">
+		<Form v-if="modals" ref="formItem" :model="formItem" :label-width="100" @submit.native.prevent>
+			<FormItem label="选择类型:">
+				<RadioGroup v-model="formItem.type" @on-change="changeRadio">
+					<Radio label="1" v-if="virtual_type !== 3">发货</Radio>
+					<Radio label="2" v-if="virtual_type !== 3">送货</Radio>
+					<Radio label="3">无需配送</Radio>
+				</RadioGroup>
+			</FormItem>
+			<FormItem v-if="formItem.type == 1" v-show="export_open" label="发货类型:">
+				<RadioGroup v-model="formItem.express_record_type" @on-change="changeExpress">
+					<Radio label="1">手动填写</Radio>
+					<Radio label="2">电子面单打印</Radio>
+				</RadioGroup>
+			</FormItem>
+			<div>
+				<FormItem label="快递公司:" v-if="formItem.type == 1">
+					<Select v-model="formItem.delivery_name" filterable placeholder="请选择快递公司" style="width: 80%"
+						@on-change="expressChange">
+						<Option v-for="(item, i) in express" :value="item.value" :key="item.value">{{ item.value }}
+						</Option>
+					</Select>
+				</FormItem>
+				<FormItem v-if="formItem.express_record_type === '1' && formItem.type == 1" label="快递单号:">
+					<Input v-model="formItem.delivery_id" placeholder="请输入快递单号" style="width: 80%"></Input>
+					<div class="trips" v-if="formItem.delivery_name == '顺丰速运'">
+						<p>顺丰请输入单号 :收件人或寄件人手机号后四位,</p>
+						<p>例如:SF000000000000:3941</p>
+					</div>
+				</FormItem>
+				<template v-if="formItem.express_record_type === '2' && formItem.type == 1">
+					<FormItem label="电子面单:" class="express_temp_id">
+						<Select v-model="formItem.express_temp_id" placeholder="请选择电子面单" style="width: 80%"
+							@on-change="expressTempChange">
+							<Option v-for="(item, i) in expressTemp" :value="item.temp_id" :key="i">{{ item.title }}
+							</Option>
+						</Select>
+						<Button v-if="formItem.express_temp_id" type="text" @click="preview">预览</Button>
+					</FormItem>
+					<FormItem label="寄件人姓名:">
+						<Input v-model="formItem.to_name" placeholder="请输入寄件人姓名" style="width: 80%"></Input>
+					</FormItem>
+					<FormItem label="寄件人电话:">
+						<Input v-model="formItem.to_tel" placeholder="请输入寄件人电话" style="width: 80%"></Input>
+					</FormItem>
+					<FormItem label="寄件人地址:">
+						<Input v-model="formItem.to_addr" placeholder="请输入寄件人地址" style="width: 80%"></Input>
+					</FormItem>
+				</template>
+			</div>
+			<div v-show="formItem.type === '2'">
+				<FormItem label="送货人:">
+					<Select v-model="formItem.sh_delivery" placeholder="请选择送货人" style="width: 80%"
+						@on-change="shDeliveryChange">
+						<Option v-for="(item, i) in deliveryList" :value="item.id" :key="i">
+							{{ item.wx_name }}({{ item.phone }})</Option>
+					</Select>
+				</FormItem>
+			</div>
+			<div v-show="formItem.type === '3'">
+				<FormItem label="备注:">
+					<Input v-model="formItem.fictitious_content" type="textarea" :autosize="{ minRows: 2, maxRows: 5 }"
+						placeholder="备注" style="width: 80%"></Input>
+				</FormItem>
+			</div>
+			<div v-if="total_num > 1">
+				<FormItem label="分单发货:">
+					<i-switch size="large" v-model="splitSwitch" :disabled="orderStatus === 8 || orderStatus === 11"
+						@on-change="changeSplitStatus">
+						<span slot="open">开启</span>
+						<span slot="close">关闭</span>
+					</i-switch>
+					<div class="trips">
+						<p>可选择表格中的商品单独发货,发货后会生成新的订单且不能撤回,请谨慎操作!</p>
+					</div>
+					<i-table v-if="splitSwitch && manyFormValidate.length" :data="manyFormValidate"
+						@on-selection-change="selectOne" :columns="header">
+						<template slot-scope="{ row, index }" slot="image">
+							<div class="product-data">
+								<img class="image" :src="row.cart_info.productInfo.image" />
+								<div class="line2">
+									{{ row.cart_info.productInfo.store_name }}
+								</div>
+							</div>
+						</template>
+						<template slot-scope="{ row, index }" slot="value">
+							<div class="product-data">
+								<div>{{ row.cart_info.productInfo.attrInfo.suk }}</div>
+							</div>
+						</template>
+						<template slot-scope="{ row, index }" slot="price">
+							<div class="product-data">
+								<div>{{ row.cart_info.truePrice }}</div>
+							</div>
+						</template>
+					</i-table>
+				</FormItem>
+			</div>
+		</Form>
+		<div slot="footer">
+			<Button @click="cancel">取消</Button>
+			<Button type="primary" @click="putSend">提交</Button>
+		</div>
+		<!-- <viewer @inited="inited">
             <img :src="temp.pic" style="display:none" />
         </viewer> -->
-    <div ref="viewer" v-viewer v-show="temp">
-      <img :src="temp.pic" style="display: none" />
-    </div>
-  </Modal>
+		<div ref="viewer" v-viewer v-show="temp">
+			<img :src="temp.pic" style="display: none" />
+		</div>
+	</Modal>
 </template>
-
 <script>
-import {
-  getExpressData,
-  putDelivery,
-  splitDelivery,
-  orderExpressTemp,
-  orderDeliveryList,
-  orderSheetInfo,
-  splitCartInfo,
-} from '@/api/order';
-import printJS from 'print-js';
-export default {
-  name: 'orderSend',
-  props: {
-    orderId: Number,
-    status: Number,
-    // total_num: Number,
-    pay_type: String,
-    virtual_type: Number,
-  },
-  watch: {
-    orderId(val) {
-      if (this.virtual_type == 3) this.formItem.type = '3';
-    },
-  },
-  data() {
-    return {
-      orderStatus: 0,
-      total_num: 0,
-      splitSwitch: true,
-      formItem: {
-        type: '1',
-        express_record_type: '1',
-        delivery_name: '',
-        delivery_id: '',
-        express_temp_id: '',
-        to_name: '',
-        to_tel: '',
-        to_addr: '',
-        sh_delivery: '',
-        fictitious_content: '',
-      },
-      modals: false,
-      express: [],
-      expressTemp: [],
-      deliveryList: [],
-      temp: {},
-      export_open: false,
-      manyFormValidate: [],
-      header: [
-        {
-          type: 'selection',
-          width: 60,
-          align: 'center',
-        },
-        {
-          title: '商品信息',
-          slot: 'image',
-          width: 200,
-          align: 'center',
-        },
-        {
-          title: '规格',
-          slot: 'value',
-          align: 'center',
-          minWidth: 120,
-        },
-        {
-          title: '价格',
-          slot: 'price',
-          align: 'center',
-          minWidth: 120,
-        },
-        {
-          title: '总数',
-          key: 'cart_num',
-          align: 'center',
-          minWidth: 120,
-        },
-        {
-          title: '待发数量',
-          key: 'surplus_num',
-          align: 'center',
-          width: 180,
-          render: (h, params) => {
-            return h('div', [
-              h('InputNumber', {
-                props: {
-                  min: 1,
-                  max: params.row.surplus_num,
-                  value: params.row.num || params.row.surplus_num,
-                },
-                on: {
-                  'on-change': (e) => {
-                    // params.row.surplus_num = e || 1;
-                    params.row.num = e || 1;
-                    this.manyFormValidate[params.index] = params.row;
-                    this.selectData.forEach((v, index) => {
-                      if (v.cart_id === params.row.cart_id) {
-                        this.selectData.splice(index, 1, params.row);
-                      }
-                    });
-                  },
-                },
-              }),
-            ]);
-          },
-        },
-      ],
-      selectData: [],
-    };
-  },
-  methods: {
-    selectOne(data) {
-      this.selectData = data;
-    },
-    changeModal(status) {
-      if (!status) {
-        this.cancel();
-      }
-    },
-    changeSplitStatus(status) {
-      // this.splitSwitch = status;
-      if (status) {
-        splitCartInfo(this.orderId).then((res) => {
-          this.manyFormValidate = [];
-          Object.keys(res.data).forEach((key) => {
-            this.manyFormValidate.push(res.data[key]);
-          });
-        });
-      }
-    },
-    changeRadio(o) {
-      this.$refs.formItem.resetFields();
-      switch (o) {
-        case '1':
-          this.formItem.delivery_name = '';
-          this.formItem.delivery_id = '';
-          this.formItem.express_temp_id = '';
-          this.formItem.express_record_type = '1';
-          this.expressTemp = [];
-          this.getList(1);
-          break;
-        case '2':
-          this.formItem.sh_delivery = '';
-          break;
-        case '3':
-          this.formItem.fictitious_content = '';
-          break;
-        default:
-          // this.formItem = {
-          //     type: '3',
-          //     express_record_type: '1',
-          //     delivery_name: '',
-          //     delivery_id: '',
-          //     express_temp_id: '',
-          //     to_name: '',
-          //     to_tel: '',
-          //     to_addr: '',
-          //     sh_delivery: ''
-          // };
-          break;
-      }
-    },
-    changeExpress(j) {
-      switch (j) {
-        case '2':
-          this.formItem.delivery_name = '';
-          this.formItem.express_temp_id = '';
-          this.expressTemp = [];
-          this.getList(2);
-          break;
-        case '1':
-          this.formItem.delivery_name = '';
-          this.formItem.delivery_id = '';
-          this.getList(1);
-          break;
-        default:
-          break;
-      }
-    },
-    reset() {
-      this.formItem = {
-        type: '1',
-        express_record_type: '1',
-        delivery_name: '',
-        delivery_id: '',
-        express_temp_id: '',
-        expressTemp: [],
-        to_name: '',
-        to_tel: '',
-        to_addr: '',
-        sh_delivery: '',
-        fictitious_content: '',
-      };
-    },
-    // 物流公司列表
-    getList(type) {
-      let status = type === 2 ? 1 : '';
-      getExpressData(status)
-        .then(async (res) => {
-          this.express = res.data;
-          this.getSheetInfo();
-        })
-        .catch((res) => {
-          this.loading = false;
-          this.$Message.error(res.msg);
-        });
-    },
-    printImg(url) {
-      printJS({
-        printable: url,
-        type: 'image',
-        documentTitle: '快递信息',
-        style: `img{
+	import {
+		getExpressData,
+		putDelivery,
+		splitDelivery,
+		orderExpressTemp,
+		orderDeliveryList,
+		orderSheetInfo,
+		splitCartInfo,
+	} from '@/api/order';
+	import printJS from 'print-js';
+	export default {
+		name: 'orderSend',
+		props: {
+			orderId: Number,
+			status: Number,
+			// total_num: Number,
+			pay_type: String,
+			virtual_type: Number,
+		},
+		watch: {
+			orderId(val) {
+				if (this.virtual_type == 3) this.formItem.type = '3';
+			},
+		},
+		data() {
+			return {
+				orderStatus: 0,
+				total_num: 0,
+				splitSwitch: true,
+				formItem: {
+					type: '1',
+					express_record_type: '1',
+					delivery_name: '',
+					delivery_id: '',
+					express_temp_id: '',
+					to_name: '',
+					to_tel: '',
+					to_addr: '',
+					sh_delivery: '',
+					fictitious_content: '',
+				},
+				modals: false,
+				express: [],
+				expressTemp: [],
+				deliveryList: [],
+				temp: {},
+				export_open: false,
+				manyFormValidate: [],
+				header: [{
+						type: 'selection',
+						width: 60,
+						align: 'center',
+					},
+					{
+						title: '商品信息',
+						slot: 'image',
+						width: 200,
+						align: 'center',
+					},
+					{
+						title: '规格',
+						slot: 'value',
+						align: 'center',
+						minWidth: 120,
+					},
+					{
+						title: '价格',
+						slot: 'price',
+						align: 'center',
+						minWidth: 120,
+					},
+					{
+						title: '总数',
+						key: 'cart_num',
+						align: 'center',
+						minWidth: 120,
+					},
+					{
+						title: '待发数量',
+						key: 'surplus_num',
+						align: 'center',
+						width: 180,
+						render: (h, params) => {
+							return h('div', [
+								h('InputNumber', {
+									props: {
+										min: 1,
+										max: params.row.surplus_num,
+										value: params.row.num || params.row.surplus_num,
+									},
+									on: {
+										'on-change': (e) => {
+											// params.row.surplus_num = e || 1;
+											params.row.num = e || 1;
+											this.manyFormValidate[params.index] = params.row;
+											this.selectData.forEach((v, index) => {
+												if (v.cart_id === params.row.cart_id) {
+													this.selectData.splice(index, 1, params
+														.row);
+												}
+											});
+										},
+									},
+								}),
+							]);
+						},
+					},
+				],
+				selectData: [],
+			};
+		},
+		methods: {
+			selectOne(data) {
+				this.selectData = data;
+			},
+			changeModal(status) {
+				if (!status) {
+					this.cancel();
+				}
+			},
+			changeSplitStatus(status) {
+				// this.splitSwitch = status;
+				if (status) {
+					splitCartInfo(this.orderId).then((res) => {
+						this.manyFormValidate = [];
+						Object.keys(res.data).forEach((key) => {
+							this.manyFormValidate.push(res.data[key]);
+						});
+					});
+				}
+			},
+			changeRadio(o) {
+				this.$refs.formItem.resetFields();
+				switch (o) {
+					case '1':
+						this.formItem.delivery_name = '';
+						this.formItem.delivery_id = '';
+						this.formItem.express_temp_id = '';
+						this.formItem.express_record_type = '1';
+						this.expressTemp = [];
+						this.getList(1);
+						break;
+					case '2':
+						this.formItem.sh_delivery = '';
+						break;
+					case '3':
+						this.formItem.fictitious_content = '';
+						break;
+					default:
+						// this.formItem = {
+						//     type: '3',
+						//     express_record_type: '1',
+						//     delivery_name: '',
+						//     delivery_id: '',
+						//     express_temp_id: '',
+						//     to_name: '',
+						//     to_tel: '',
+						//     to_addr: '',
+						//     sh_delivery: ''
+						// };
+						break;
+				}
+			},
+			changeExpress(j) {
+				switch (j) {
+					case '2':
+						this.formItem.delivery_name = '';
+						this.formItem.express_temp_id = '';
+						this.expressTemp = [];
+						this.getList(2);
+						break;
+					case '1':
+						this.formItem.delivery_name = '';
+						this.formItem.delivery_id = '';
+						this.getList(1);
+						break;
+					default:
+						break;
+				}
+			},
+			reset() {
+				this.formItem = {
+					type: '1',
+					express_record_type: '1',
+					delivery_name: '',
+					delivery_id: '',
+					express_temp_id: '',
+					expressTemp: [],
+					to_name: '',
+					to_tel: '',
+					to_addr: '',
+					sh_delivery: '',
+					fictitious_content: '',
+				};
+			},
+			// 物流公司列表
+			getList(type) {
+				let status = type === 2 ? 1 : '';
+				getExpressData(status)
+					.then(async (res) => {
+						this.express = res.data;
+						this.getSheetInfo();
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			printImg(url) {
+				printJS({
+					printable: url,
+					type: 'image',
+					documentTitle: '快递信息',
+					style: `img{
           width: 100%;
           height: 476px;
         }`,
-      });
-    },
+				});
+			},
 
-    // 提交
-    putSend(name) {
-      let data = {
-        id: this.orderId,
-        datas: this.formItem,
-      };
-      if (this.formItem.type === '1' && this.formItem.express_record_type === '2') {
-        if (this.formItem.delivery_name === '') {
-          return this.$Message.error('快递公司不能为空');
-        } else if (this.formItem.express_temp_id === '') {
-          return this.$Message.error('电子面单不能为空');
-        } else if (this.formItem.to_name === '') {
-          return this.$Message.error('寄件人姓名不能为空');
-        } else if (this.formItem.to_tel === '') {
-          return this.$Message.error('寄件人电话不能为空');
-        } else if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.formItem.to_tel)) {
-          return this.$Message.error('请输入正确的手机号码');
-        } else if (this.formItem.to_addr === '') {
-          return this.$Message.error('寄件人地址不能为空');
-        }
-      }
-      if (this.formItem.type === '1' && this.formItem.express_record_type === '1') {
-        if (this.formItem.delivery_name === '') {
-          return this.$Message.error('快递公司不能为空');
-        } else if (this.formItem.delivery_id === '') {
-          return this.$Message.error('快递单号不能为空');
-        }
-      }
-      if (this.formItem.type === '2') {
-        if (this.formItem.sh_delivery === '') {
-          return this.$Message.error('送货人不能为空');
-        }
-      }
-      if (this.splitSwitch) {
-        data.datas.cart_ids = [];
-        this.selectData.forEach((v) => {
-          data.datas.cart_ids.push({
-            cart_id: v.cart_id,
-            cart_num: v.num || v.surplus_num,
-          });
-        });
-        splitDelivery(data)
-          .then((res) => {
-            this.modals = false;
-            this.$Message.success(res.msg);
-            this.$emit('submitFail');
-            this.reset();
-            this.splitSwitch = false;
-            if (res.data.label) this.printImg(res.data.label);
-          })
-          .catch((res) => {
-            this.$Message.error(res.msg);
-          });
-      } else {
-        putDelivery(data)
-          .then(async (res) => {
-            this.modals = false;
-            this.$Message.success(res.msg);
-            this.splitSwitch = false;
-            this.$emit('submitFail');
-            this.reset();
-            if (res.data.label) this.printImg(res.data.label);
-          })
-          .catch((res) => {
-            this.$Message.error(res.msg);
-          });
-      }
-    },
-    cancel(name) {
-      this.modals = false;
-      this.orderStatus = 0;
-      this.splitSwitch = false;
-      this.selectData = [];
-      this.formItem.type = '1';
-      this.$emit('clearId');
-      this.reset();
-      // this.$refs[name].resetFields();
-      // this.formItem.type = '1';
-    },
-    // 电子面单列表
-    expressChange(value) {
-      let expressItem = this.express.find((item) => {
-        return item.value === value;
-      });
-      if (expressItem === undefined) {
-        return;
-      }
-      this.formItem.delivery_code = expressItem.code;
-      if (this.formItem.express_record_type === '2') {
-        this.expressTemp = [];
-        this.formItem.express_temp_id = '';
-        orderExpressTemp({
-          com: this.formItem.delivery_code,
-        })
-          .then((res) => {
-            this.expressTemp = res.data;
-            if (!res.data.length) {
-              this.$Message.error('请配置你所选快递公司的电子面单');
-            }
-          })
-          .catch((err) => {
-            this.$Message.error(err.msg);
-          });
-      }
-    },
-    getCartInfo(data, orderid) {
-      this.$set(this, 'orderStatus', data);
-      this.$set(this, 'splitSwitch', data === 8 || data === 11 ? true : false);
-      splitCartInfo(this.orderId).then((res) => {
-        this.manyFormValidate = [];
-        Object.keys(res.data).forEach((key) => {
-          this.manyFormValidate.push(res.data[key]);
-        });
-      });
-    },
-    getDeliveryList() {
-      orderDeliveryList()
-        .then((res) => {
-          this.deliveryList = res.data.list;
-        })
-        .catch((err) => {
-          this.$Message.error(err.msg);
-        });
-    },
-    getSheetInfo() {
-      orderSheetInfo()
-        .then((res) => {
-          const data = res.data;
-          for (const key in data) {
-            if (data.hasOwnProperty(key)) {
-              this.formItem[key] = data[key];
-            }
-          }
-          this.export_open = data.export_open === undefined ? true : data.export_open;
-          if (!this.export_open) {
-            this.formItem.express_record_type = '1';
-          }
-          this.formItem.to_addr = data.to_add;
-        })
-        .catch((err) => {
-          this.$Message.error(err.msg);
-        });
-    },
-    shDeliveryChange(value) {
-      if (!value) return;
-      let deliveryItem = this.deliveryList.find((item) => {
-        return item.id === value;
-      });
-      this.formItem.sh_delivery_name = deliveryItem.wx_name;
-      this.formItem.sh_delivery_id = deliveryItem.phone;
-      this.formItem.sh_delivery_uid = deliveryItem.uid;
-    },
-    expressTempChange(tempId) {
-      this.temp = this.expressTemp.find((item) => {
-        return tempId === item.temp_id;
-      });
-      if (this.temp === undefined) {
-        this.temp = {};
-      }
-    },
-    // inited (viewer) {
-    //     this.$viewer = viewer;
-    // },
-    preview() {
-      this.$refs.viewer.$viewer.show();
-      // this.$viewer.show();
-    },
-  },
-};
+			// 提交
+			putSend(name) {
+				let data = {
+					id: this.orderId,
+					datas: this.formItem,
+				};
+				if (this.formItem.type === '1' && this.formItem.express_record_type === '2') {
+					if (this.formItem.delivery_name === '') {
+						return this.$Message.error('快递公司不能为空');
+					} else if (this.formItem.express_temp_id === '') {
+						return this.$Message.error('电子面单不能为空');
+					} else if (this.formItem.to_name === '') {
+						return this.$Message.error('寄件人姓名不能为空');
+					} else if (this.formItem.to_tel === '') {
+						return this.$Message.error('寄件人电话不能为空');
+					} else if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.formItem.to_tel)) {
+						return this.$Message.error('请输入正确的手机号码');
+					} else if (this.formItem.to_addr === '') {
+						return this.$Message.error('寄件人地址不能为空');
+					}
+				}
+				if (this.formItem.type === '1' && this.formItem.express_record_type === '1') {
+					if (this.formItem.delivery_name === '') {
+						return this.$Message.error('快递公司不能为空');
+					} else if (this.formItem.delivery_id === '') {
+						return this.$Message.error('快递单号不能为空');
+					}
+				}
+				if (this.formItem.type === '2') {
+					if (this.formItem.sh_delivery === '') {
+						return this.$Message.error('送货人不能为空');
+					}
+				}
+				if (this.splitSwitch) {
+					data.datas.cart_ids = [];
+					this.selectData.forEach((v) => {
+						data.datas.cart_ids.push({
+							cart_id: v.cart_id,
+							cart_num: v.num || v.surplus_num,
+						});
+					});
+					splitDelivery(data)
+						.then((res) => {
+							this.modals = false;
+							this.$Message.success(res.msg);
+							this.$emit('submitFail');
+							this.reset();
+							this.splitSwitch = false;
+							if (res.data.label) this.printImg(res.data.label);
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					putDelivery(data)
+						.then(async (res) => {
+							this.modals = false;
+							this.$Message.success(res.msg);
+							this.splitSwitch = false;
+							this.$emit('submitFail');
+							this.reset();
+							if (res.data.label) this.printImg(res.data.label);
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				}
+			},
+			cancel(name) {
+				this.modals = false;
+				this.orderStatus = 0;
+				this.splitSwitch = false;
+				this.selectData = [];
+				this.formItem.type = '1';
+				this.$emit('clearId');
+				this.reset();
+				// this.$refs[name].resetFields();
+				// this.formItem.type = '1';
+			},
+			// 电子面单列表
+			expressChange(value) {
+				let expressItem = this.express.find((item) => {
+					return item.value === value;
+				});
+				if (expressItem === undefined) {
+					return;
+				}
+				this.formItem.delivery_code = expressItem.code;
+				if (this.formItem.express_record_type === '2') {
+					this.expressTemp = [];
+					this.formItem.express_temp_id = '';
+					orderExpressTemp({
+							com: this.formItem.delivery_code,
+						})
+						.then((res) => {
+							this.expressTemp = res.data;
+							if (!res.data.length) {
+								this.$Message.error('请配置你所选快递公司的电子面单');
+							}
+						})
+						.catch((err) => {
+							this.$Message.error(err.msg);
+						});
+				}
+			},
+			getCartInfo(data, orderid) {
+				this.$set(this, 'orderStatus', data);
+				this.$set(this, 'splitSwitch', data === 8 || data === 11 ? true : false);
+				splitCartInfo(this.orderId).then((res) => {
+					this.manyFormValidate = [];
+					Object.keys(res.data).forEach((key) => {
+						this.manyFormValidate.push(res.data[key]);
+					});
+				});
+			},
+			getDeliveryList() {
+				orderDeliveryList()
+					.then((res) => {
+						this.deliveryList = res.data.list;
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			getSheetInfo() {
+				orderSheetInfo()
+					.then((res) => {
+						const data = res.data;
+						for (const key in data) {
+							if (data.hasOwnProperty(key)) {
+								this.formItem[key] = data[key];
+							}
+						}
+						this.export_open = data.export_open === undefined ? true : data.export_open;
+						if (!this.export_open) {
+							this.formItem.express_record_type = '1';
+						}
+						this.formItem.to_addr = data.to_add;
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			shDeliveryChange(value) {
+				if (!value) return;
+				let deliveryItem = this.deliveryList.find((item) => {
+					return item.id === value;
+				});
+				this.formItem.sh_delivery_name = deliveryItem.wx_name;
+				this.formItem.sh_delivery_id = deliveryItem.phone;
+				this.formItem.sh_delivery_uid = deliveryItem.uid;
+			},
+			expressTempChange(tempId) {
+				this.temp = this.expressTemp.find((item) => {
+					return tempId === item.temp_id;
+				});
+				if (this.temp === undefined) {
+					this.temp = {};
+				}
+			},
+			// inited (viewer) {
+			//     this.$viewer = viewer;
+			// },
+			preview() {
+				this.$refs.viewer.$viewer.show();
+				// this.$viewer.show();
+			},
+		},
+	};
 </script>
 
 <style scoped>
-.express_temp_id {
-  position: relative;
-}
+	.express_temp_id {
+		position: relative;
+	}
+
+	.express_temp_id button {
+		position: absolute;
+		top: 50%;
+		right: 110px;
+		padding: 0;
+		border: none;
+		background: none;
+		transform: translateY(-50%);
+		color: #57a3f3;
+	}
+
+	.ivu-btn-text:focus {
+		box-shadow: none;
+	}
+
+	.trips {
+		color: #ccc;
+	}
+
+	.product-data {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
 
-.express_temp_id button {
-  position: absolute;
-  top: 50%;
-  right: 110px;
-  padding: 0;
-  border: none;
-  background: none;
-  transform: translateY(-50%);
-  color: #57a3f3;
-}
+	.product-data .image {
+		width: 50px !important;
+		height: 50px !important;
+	}
 
-.ivu-btn-text:focus {
-  box-shadow: none;
-}
-.trips {
-  color: #ccc;
-}
-.product-data {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-.product-data .image {
-  width: 50px !important;
-  height: 50px !important;
-}
-.line2 {
-  display: -webkit-box;
-  -webkit-line-clamp: 2;
-  -webkit-box-orient: vertical;
-  overflow: hidden;
-}
-</style>
+	.line2 {
+		display: -webkit-box;
+		-webkit-line-clamp: 2;
+		-webkit-box-orient: vertical;
+		overflow: hidden;
+	}
+</style>

+ 196 - 194
src/pages/order/orderList/index.vue

@@ -1,204 +1,206 @@
 <template>
-  <div>
-    <Card :bordered="false" dis-hover>
-      <Tabs class="mb20" v-model="currentTab" @on-click="onClickTab" v-if="tablists">
-        <TabPane v-for="(item, index) in tabs" :label="item.label" :name="item.type" :key="index" />
-      </Tabs>
-      <productlist-details
-        v-if="currentTab === 'article' || 'project' || 'app'"
-        ref="productlist"
-      ></productlist-details>
-      <Spin size="large" fix v-if="spinShow"></Spin>
-    </Card>
-  </div>
+	<div>
+		<Card :bordered="false" dis-hover>
+			<Tabs class="mb20" v-model="currentTab" @on-click="onClickTab" v-if="tablists">
+				<TabPane v-for="(item, index) in tabs" :label="item.label" :name="item.type" :key="index" />
+			</Tabs>
+			<productlist-details v-if="currentTab === 'article' || 'project' || 'app'"
+				ref="productlist"></productlist-details>
+
+			<Spin size="large" fix v-if="spinShow"></Spin>
+		</Card>
+	</div>
 </template>
 
 <script>
-import productlistDetails from './orderlistDetails';
-import { mapMutations } from 'vuex';
-export default {
-  name: 'list',
-  components: {
-    productlistDetails,
-  },
-  data() {
-    return {
-      tabs: [
-        {
-          type: '',
-          label: (h) => {
-            return h('div', [
-              h('span', '全部订单'),
-              h('Badge', {
-                props: {
-                  count: Number(this.tablists.all),
-                  'overflow-count': 999999,
-                },
-              }),
-            ]);
-          },
-        },
-        {
-          type: '1',
-          label: (h) => {
-            return h('div', [
-              h('span', '普通订单'),
-              h('Badge', {
-                props: {
-                  count: Number(this.tablists.general),
-                  'overflow-count': 999999,
-                },
-              }),
-            ]);
-          },
-        },
-        {
-          type: '2',
-          label: (h) => {
-            return h('div', [
-              h('span', '拼团订单'),
-              h('Badge', {
-                props: {
-                  count: Number(this.tablists.pink),
-                  'overflow-count': 999999,
-                },
-              }),
-            ]);
-          },
-        },
-        {
-          type: '3',
-          label: (h) => {
-            return h('div', [
-              h('span', '秒杀订单'),
-              h('Badge', {
-                props: {
-                  count: Number(this.tablists.seckill),
-                  'overflow-count': 999999,
-                },
-              }),
-            ]);
-          },
-        },
-        {
-          type: '4',
-          label: (h) => {
-            return h('div', [
-              h('span', '砍价订单'),
-              h('Badge', {
-                props: {
-                  count: Number(this.tablists.bargain),
-                  'overflow-count': 999999,
-                },
-              }),
-            ]);
-          },
-        },
-        {
-          type: '5',
-          label: (h) => {
-            return h('div', [
-              h('span', '预售订单'),
-              h('Badge', {
-                props: {
-                  count: Number(this.tablists.advance),
-                  'overflow-count': 999999,
-                },
-              }),
-            ]);
-          },
-        },
-      ],
-      spinShow: false,
-      currentTab: '',
-      data: [],
-      tablists: null,
-    };
-  },
-  created() {
-    this.getOrderType('');
-    this.getOrderStatus('');
-    this.getOrderTime('');
-    this.getOrderNum('');
-    this.getfieldKey('');
-    this.onChangeTabs('');
-    this.getisDelIdListl('');
-    this.getIsDel(1);
-  },
-  beforeDestroy() {
-    this.getOrderType('');
-    this.getOrderStatus('');
-    this.getOrderTime('');
-    this.getOrderNum('');
-    this.getfieldKey('');
-    this.onChangeTabs('');
-    this.getisDelIdListl('');
-    this.getIsDel(1);
-  },
-  mounted() {
-    this.getTabs();
-  },
-  methods: {
-    ...mapMutations('order', [
-      'onChangeTabs',
-      'getOrderStatus',
-      'getOrderTime',
-      'getOrderNum',
-      'getfieldKey',
-      'getOrderType',
-      'getisDelIdListl',
-      'getIsDel',
-      // 'onChangeChart'
-    ]),
-    // 订单类型  @on-changeTabs="getChangeTabs"
-    getTabs() {
-      this.spinShow = true;
-      this.$store
-        .dispatch('order/getOrderTabs', {
-          data: '',
-        })
-        .then((res) => {
-          this.tablists = res.data;
-          // this.onChangeChart(this.tablists)
-          this.spinShow = false;
-        })
-        .catch((res) => {
-          this.spinShow = false;
-          this.$Message.error(res.msg);
-        });
-    },
-    onClickTab() {
-      this.onChangeTabs(Number(this.currentTab));
-      // this.$store.dispatch("order/getOrderTabs", {
-      //   data: "",
-      //   type: Number(this.currentTab),
-      // });
-      // this.$refs.productlist.getChangeTabs();
-      this.$store.dispatch('order/getOrderTabs', { type: this.currentTab });
-    },
-  },
-};
+	import productlistDetails from './orderlistDetails';
+	import {
+		mapMutations
+	} from 'vuex';
+	export default {
+		name: 'list',
+		components: {
+			productlistDetails,
+		},
+		data() {
+			return {
+				tabs: [{
+						type: '',
+						label: (h) => {
+							return h('div', [
+								h('span', '全部订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.all),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '1',
+						label: (h) => {
+							return h('div', [
+								h('span', '普通订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.general),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '2',
+						label: (h) => {
+							return h('div', [
+								h('span', '拼团订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.pink),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '3',
+						label: (h) => {
+							return h('div', [
+								h('span', '秒杀订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.seckill),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '4',
+						label: (h) => {
+							return h('div', [
+								h('span', '砍价订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.bargain),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '5',
+						label: (h) => {
+							return h('div', [
+								h('span', '预售订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.advance),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+				],
+				spinShow: false,
+				currentTab: '',
+				data: [],
+				tablists: null,
+			};
+		},
+		created() {
+			this.getOrderType('');
+			this.getOrderStatus('');
+			this.getOrderTime('');
+			this.getOrderNum('');
+			this.getfieldKey('');
+			this.onChangeTabs('');
+			this.getisDelIdListl('');
+			this.getIsDel(1);
+		},
+		beforeDestroy() {
+			this.getOrderType('');
+			this.getOrderStatus('');
+			this.getOrderTime('');
+			this.getOrderNum('');
+			this.getfieldKey('');
+			this.onChangeTabs('');
+			this.getisDelIdListl('');
+			this.getIsDel(1);
+		},
+		mounted() {
+			this.getTabs();
+		},
+		methods: {
+			...mapMutations('order', [
+				'onChangeTabs',
+				'getOrderStatus',
+				'getOrderTime',
+				'getOrderNum',
+				'getfieldKey',
+				'getOrderType',
+				'getisDelIdListl',
+				'getIsDel',
+				// 'onChangeChart'
+			]),
+			// 订单类型  @on-changeTabs="getChangeTabs"
+			getTabs() {
+				this.spinShow = true;
+				this.$store
+					.dispatch('order/getOrderTabs', {
+						data: '',
+					})
+					.then((res) => {
+						this.tablists = res.data;
+						// this.onChangeChart(this.tablists)
+						this.spinShow = false;
+					})
+					.catch((res) => {
+						this.spinShow = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			onClickTab() {
+				this.onChangeTabs(Number(this.currentTab));
+				// this.$store.dispatch("order/getOrderTabs", {
+				//   data: "",
+				//   type: Number(this.currentTab),
+				// });
+				// this.$refs.productlist.getChangeTabs();
+				this.$store.dispatch('order/getOrderTabs', {
+					type: this.currentTab
+				});
+			},
+		},
+	};
 </script>
 <style scoped lang="stylus">
-.product_tabs >>> .ivu-tabs-bar {
-  margin-bottom: 0px !important;
-}
+	.product_tabs>>>.ivu-tabs-bar {
+		margin-bottom: 0px !important;
+	}
 
-.product_tabs >>> .ivu-page-header-content {
-  margin-bottom: 0px !important;
-}
+	.product_tabs>>>.ivu-page-header-content {
+		margin-bottom: 0px !important;
+	}
 
-.product_tabs >>> .ivu-page-header-breadcrumb {
-  margin-bottom: 0px !important;
-}
+	.product_tabs>>>.ivu-page-header-breadcrumb {
+		margin-bottom: 0px !important;
+	}
 
-/deep/ .ivu-badge-count-alone {
-  top: -7px;
-  right: 2px;
-}
+	/deep/ .ivu-badge-count-alone {
+		top: -7px;
+		right: 2px;
+	}
 
-.i-layout-page-header /deep/ .ivu-badge-count {
-  line-height: 14px;
-  height: 15px;
-}
-</style>
+	.i-layout-page-header /deep/ .ivu-badge-count {
+		line-height: 14px;
+		height: 15px;
+	}
+</style>

+ 81 - 77
src/pages/order/orderList/orderlistDetails.vue

@@ -1,92 +1,96 @@
 <template>
-  <div>
-    <!-- <cards-data
+	<div>
+		<!-- <cards-data
       :cardLists="cardLists"
       v-if="cardLists.length >= 0"
     ></cards-data> -->
-    <table-form @getList="getData" />
-    <table-list ref="table" @on-changeCards="getCards" @changeGetTabs="changeGetTabs" />
-  </div>
+		<table-form @getList="getData" />
+		<table-list ref="table" @on-changeCards="getCards" @changeGetTabs="changeGetTabs" />
+	</div>
 </template>
 
 <script>
-import cardsData from '../../../components/cards/cards';
-import tableForm from './components/tableFrom';
-import tableList from './components/tableList';
-export default {
-  name: 'orderlistDetails',
-  components: {
-    tableForm,
-    tableList,
-    cardsData,
-  },
-  data() {
-    return {
-      currentTab: '',
-      cardLists: [],
-    };
-  },
-  methods: {
-    changeGetTabs() {
-      this.$parent.getTabs();
-    },
-    // 列表数据
-    getData(res) {
-      this.$refs.table.getList(res);
-    },
-    // 模块数据
-    getCards(list) {
-      this.cardLists = list;
-    },
-    handleResize() {
-      this.$refs.ellipsis.forEach((item) => item.init());
-    },
-  },
-  mounted() {},
-};
+	import cardsData from '../../../components/cards/cards';
+	import tableForm from './components/tableFrom';
+	import tableList from './components/tableList';
+	export default {
+		name: 'orderlistDetails',
+		components: {
+			tableForm,
+			tableList,
+			cardsData,
+		},
+		data() {
+			return {
+				currentTab: '',
+				cardLists: [],
+			};
+		},
+		methods: {
+			changeGetTabs() {
+				console.log('调用114')
+				this.$parent.getTabs();
+			},
+			// 列表数据
+			getData(res) {
+				console.log(res, '调用111')
+				this.$refs.table.getList(res);
+			},
+			// 模块数据
+			getCards(list) {
+				console.log('调用112')
+				this.cardLists = list;
+			},
+			handleResize() {
+				console.log('调用113')
+				this.$refs.ellipsis.forEach((item) => item.init());
+			},
+		},
+		mounted() {},
+	};
 </script>
 
 <style scoped lang="stylus">
-.card_cent >>> .ivu-card-body {
-  width: 100%;
-  height: 100%;
-}
+	.card_cent>>>.ivu-card-body {
+		width: 100%;
+		height: 100%;
+	}
 
-.card_box {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  padding: 25px;
-  box-sizing: border-box;
-  border-radius: 4px;
+	.card_box {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding: 25px;
+		box-sizing: border-box;
+		border-radius: 4px;
 
-  .card_box_img {
-    width: 48px;
-    height: 48px;
-    border-radius: 50%;
-    overflow: hidden;
-    margin-right: 20px;
+		.card_box_img {
+			width: 48px;
+			height: 48px;
+			border-radius: 50%;
+			overflow: hidden;
+			margin-right: 20px;
 
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
 
-  .card_box_txt {
-    .sp1 {
-      display: block;
-      color: #252631;
-      font-size: 24px;
-    }
+		.card_box_txt {
+			.sp1 {
+				display: block;
+				color: #252631;
+				font-size: 24px;
+			}
 
-    .sp2 {
-      display: block;
-      color: #98A9BC;
-      font-size: 12px;
-    }
-  }
-}
-</style>
+			.sp2 {
+				display: block;
+				color: #98A9BC;
+				font-size: 12px;
+			}
+		}
+	}
+</style>

+ 793 - 820
src/pages/order/orderList/splitList.vue

@@ -1,114 +1,86 @@
 <template>
-  <div>
-    <div class="i-layout-page-header">
-      <div class="i-layout-page-header">
-        <span class="ivu-page-header-title">子订单列表</span>
-        <span class="return" @click="$router.go(-1)">返回</span>
-      </div>
-    </div>
-    <Table
-      :columns="columns"
-      :data="orderList"
-      ref="table"
-      :loading="loading"
-      highlight-row
-      no-data-text="暂无数据"
-      no-filtered-data-text="暂无筛选结果"
-      @on-selection-change="onSelectTab"
-      @on-select-all="selectAll"
-      @on-select-all-cancel="selectAll"
-      @on-select-cancel="onSelectCancel"
-      class="orderData mt25"
-    >
-      <template slot-scope="{ row, index }" slot="order_id">
-        <span v-text="row.order_id" style="display: block"></span>
-        <span v-show="row.is_del === 1" style="color: #ed4014; display: block">用户已删除</span>
-      </template>
-      <template slot-scope="{ row, index }" slot="nickname">
-        <a @click="showUserInfo(row)">{{ row.nickname }}</a>
-      </template>
-      <template slot-scope="{ row, index }" slot="info">
-        <div class="tabBox" v-for="(val, i) in row._info" :key="i">
-          <div class="tabBox_img" v-viewer>
-            <img
-              v-lazy="
+	<div>
+		<div class="i-layout-page-header">
+			<div class="i-layout-page-header">
+				<span class="ivu-page-header-title">子订单列表</span>
+				<span class="return" @click="$router.go(-1)">返回</span>
+			</div>
+		</div>
+		<Table :columns="columns" :data="orderList" ref="table" :loading="loading" highlight-row no-data-text="暂无数据"
+			no-filtered-data-text="暂无筛选结果" @on-selection-change="onSelectTab" @on-select-all="selectAll"
+			@on-select-all-cancel="selectAll" @on-select-cancel="onSelectCancel" class="orderData mt25">
+			<template slot-scope="{ row, index }" slot="order_id">
+				<span v-text="row.order_id" style="display: block"></span>
+				<span v-show="row.is_del === 1" style="color: #ed4014; display: block">用户已删除</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="nickname">
+				<a @click="showUserInfo(row)">{{ row.nickname }}</a>
+			</template>
+			<template slot-scope="{ row, index }" slot="info">
+				<div class="tabBox" v-for="(val, i) in row._info" :key="i">
+					<div class="tabBox_img" v-viewer>
+						<img v-lazy="
                 val.cart_info.productInfo.attrInfo
                   ? val.cart_info.productInfo.attrInfo.image
                   : val.cart_info.productInfo.image
-              "
-            />
-          </div>
-          <span class="tabBox_tit">
-            {{ val.cart_info.productInfo.store_name + ' | '
+              " />
+					</div>
+					<span class="tabBox_tit">
+						{{ val.cart_info.productInfo.store_name + ' | '
             }}{{ val.cart_info.productInfo.attrInfo ? val.cart_info.productInfo.attrInfo.suk : '' }}
-          </span>
-          <span class="tabBox_pice">{{ '¥' + val.cart_info.truePrice + ' x ' + val.cart_info.cart_num }}</span>
-        </div>
-      </template>
-      <template slot-scope="{ row, index }" slot="statusName">
-        <div v-html="row.status_name.status_name" class="pt5"></div>
-        <div class="pictrue-box">
-          <div v-viewer v-if="row.status_name.pics" v-for="(item, index) in row.status_name.pics || []" :key="index">
-            <img class="pictrue mr10" v-lazy="item" :src="item" />
-          </div>
-        </div>
-      </template>
-      <template slot-scope="{ row, index }" slot="action">
-        <a @click="edit(row)" v-if="row._status === 1">编辑</a>
-        <a
-          @click="sendOrder(row)"
-          v-if="
+					</span>
+					<span
+						class="tabBox_pice">{{ '¥' + val.cart_info.truePrice + ' x ' + val.cart_info.cart_num }}</span>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="statusName">
+				<div v-html="row.status_name.status_name" class="pt5"></div>
+				<div class="pictrue-box">
+					<div v-viewer v-if="row.status_name.pics" v-for="(item, index) in row.status_name.pics || []"
+						:key="index">
+						<img class="pictrue mr10" v-lazy="item" :src="item" />
+					</div>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="action">
+				<a @click="edit(row)" v-if="row._status === 1">编辑</a>
+				<a @click="sendOrder(row)" v-if="
             (row._status === 2 || row._status === 8) &&
             row.shipping_type === 1 &&
             (row.pinkStatus === null || row.pinkStatus === 2)
-          "
-          >发送货</a
-        >
-        <a @click="delivery(row)" v-if="row._status === 4">配送信息</a>
-        <a
-          @click="bindWrite(row)"
-          v-if="row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0"
-          >立即核销</a
-        >
-        <Divider type="vertical" v-if="row._status === 2 || row._status === 8" />
-        <a @click="splitOrderDetail(row)" v-if="row._status === 8">查看子订单</a>
+          ">发送货</a>
+				<a @click="delivery(row)" v-if="row._status === 4">配送信息</a>
+				<a @click="bindWrite(row)"
+					v-if="row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0">立即核销</a>
+				<Divider type="vertical" v-if="row._status === 2 || row._status === 8" />
+				<a @click="splitOrderDetail(row)" v-if="row._status === 8">查看子订单</a>
 
-        <Divider
-          type="vertical"
-          v-if="
+				<Divider type="vertical" v-if="
             row._status === 1 ||
             ((row._status === 2 || row._status === 8) && (row.pinkStatus === null || row.pinkStatus === 2)) ||
             row._status === 4 ||
             (row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0)
-          "
-        />
-        <template>
-          <Dropdown @on-click="changeMenu(row, $event)">
-            <a href="javascript:void(0)">
-              更多
-              <Icon type="ios-arrow-down"></Icon>
-            </a>
-            <DropdownMenu slot="list">
-              <DropdownItem
-                name="1"
-                ref="ones"
-                v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline'"
-                >立即支付</DropdownItem
-              >
-              <DropdownItem name="2">订单详情</DropdownItem>
-              <DropdownItem name="3">订单记录</DropdownItem>
-              <DropdownItem name="11" v-show="row._status >= 3 && row.express_dump">电子面单打印</DropdownItem>
-              <DropdownItem name="10" v-show="row._status >= 2">小票打印</DropdownItem>
-              <!-- <DropdownItem name="10" v-show="row._status >= 2">订单打印</DropdownItem> -->
-              <DropdownItem
-                name="4"
-                v-show="
+          " />
+				<template>
+					<Dropdown @on-click="changeMenu(row, $event)">
+						<a href="javascript:void(0)">
+							更多
+							<Icon type="ios-arrow-down"></Icon>
+						</a>
+						<DropdownMenu slot="list">
+							<DropdownItem name="1" ref="ones"
+								v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline'">立即支付
+							</DropdownItem>
+							<DropdownItem name="2">订单详情</DropdownItem>
+							<DropdownItem name="3">订单记录</DropdownItem>
+							<DropdownItem name="11" v-show="row._status >= 3 && row.express_dump">电子面单打印</DropdownItem>
+							<DropdownItem name="10" v-show="row._status >= 2">小票打印</DropdownItem>
+							<!-- <DropdownItem name="10" v-show="row._status >= 2">订单打印</DropdownItem> -->
+							<DropdownItem name="4" v-show="
                   row._status !== 1 ||
                   (row._status === 3 && row.use_integral > 0 && row.use_integral >= row.back_integral)
-                "
-                >订单备注</DropdownItem
-              >
-              <!-- <DropdownItem
+                ">订单备注</DropdownItem>
+							<!-- <DropdownItem
                 name="5"
                 v-show="
                   row._status === 3 &&
@@ -130,15 +102,15 @@
               <DropdownItem name="7" v-show="row._status === 3"
                 >不退款</DropdownItem
               > -->
-              <DropdownItem name="8" v-show="row._status === 4">已收货</DropdownItem>
-              <DropdownItem name="9" v-if="row.is_del == 1">删除订单</DropdownItem>
-            </DropdownMenu>
-          </Dropdown>
-        </template>
-      </template>
-    </Table>
-    <div class="acea-row row-right page">
-      <!-- <Page
+							<DropdownItem name="8" v-show="row._status === 4">已收货</DropdownItem>
+							<DropdownItem name="9" v-if="row.is_del == 1">删除订单</DropdownItem>
+						</DropdownMenu>
+					</Dropdown>
+				</template>
+			</template>
+		</Table>
+		<div class="acea-row row-right page">
+			<!-- <Page
         :total="page.total"
         :current="page.pageNum"
         show-elevator
@@ -148,743 +120,744 @@
         @on-page-size-change="limitChange"
         show-sizer
       /> -->
-    </div>
-    <!-- 编辑 退款 退积分 不退款-->
-    <edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
-    <!-- 会员详情-->
-    <user-details ref="userDetails"></user-details>
-    <!-- 详情 -->
-    <details-from ref="detailss" :orderDatalist="orderDatalist" :orderId="orderId"></details-from>
-    <!-- 备注 -->
-    <order-remark ref="remarks" :orderId="orderId" @submitFail="submitFail"></order-remark>
-    <!-- 记录 -->
-    <order-record ref="record"></order-record>
-    <!-- 发送货 -->
-    <order-send ref="send" :orderId="orderId" :status="status" @submitFail="submitFail"></order-send>
-  </div>
+		</div>
+		<!-- 编辑 退款 退积分 不退款-->
+		<edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
+		<!-- 会员详情-->
+		<user-details ref="userDetails"></user-details>
+		<!-- 详情 -->
+		<details-from ref="detailss" :orderDatalist="orderDatalist" :orderId="orderId"></details-from>
+		<!-- 备注 -->
+		<order-remark ref="remarks" :orderId="orderId" @submitFail="submitFail"></order-remark>
+		<!-- 记录 -->
+		<order-record ref="record"></order-record>
+		<!-- 发送货 -->
+		<order-send ref="send" :orderId="orderId" :status="status" @submitFail="submitFail"></order-send>
+	</div>
 </template>
 
 <script>
-import expandRow from './components/tableExpand.vue';
-import {
-  orderList,
-  getOrdeDatas,
-  getDataInfo,
-  getRefundFrom,
-  getnoRefund,
-  refundIntegral,
-  getDistribution,
-  writeUpdate,
-  splitOrderList,
-} from '@/api/order';
-import { mapState, mapMutations } from 'vuex';
-import editFrom from '../../../components/from/from';
-import detailsFrom from './handle/orderDetails';
-import orderRemark from './handle/orderRemark';
-import orderRecord from './handle/orderRecord';
-import orderSend from './handle/orderSend';
-import userDetails from '@/pages/user/list/handle/userDetails';
+	import expandRow from './components/tableExpand.vue';
+	import {
+		orderList,
+		getOrdeDatas,
+		getDataInfo,
+		getRefundFrom,
+		getnoRefund,
+		refundIntegral,
+		getDistribution,
+		writeUpdate,
+		splitOrderList,
+	} from '@/api/order';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import editFrom from '../../../components/from/from';
+	import detailsFrom from './handle/orderDetails';
+	import orderRemark from './handle/orderRemark';
+	import orderRecord from './handle/orderRecord';
+	import orderSend from './handle/orderSend';
+	import userDetails from '@/pages/user/list/handle/userDetails';
 
-export default {
-  name: 'table_list',
-  components: {
-    expandRow,
-    editFrom,
-    detailsFrom,
-    orderRemark,
-    orderRecord,
-    orderSend,
-    userDetails,
-  },
-  props: ['where', 'isAll'],
-  data() {
-    return {
-      delfromData: {},
-      modal: false,
-      orderList: [],
-      orderCards: [],
-      loading: false,
-      orderId: 0,
-      columns: [
-        {
-          type: 'expand',
-          width: 30,
-          render: (h, params) => {
-            return h(expandRow, {
-              props: {
-                row: params.row,
-              },
-            });
-          },
-        },
-        {
-          width: 50,
-          align: 'center',
-          renderHeader: (h, params) => {
-            return h(
-              'div',
-              {
-                class: {
-                  'select-panel': true,
-                },
-                on: {
-                  mouseenter: (e) => {
-                    this.display = 'block';
-                  },
-                  mouseleave: (e) => {
-                    this.display = 'none';
-                  },
-                },
-              },
-              [
-                h('Checkbox', {
-                  props: {
-                    value: this.checkBox,
-                  },
-                  on: {
-                    'on-change': (e) => {
-                      this.checkBox = e;
-                      this.$refs.table.selectAll(this.checkBox);
-                      this.$emit('on-all', e ? 0 : -1);
-                    },
-                  },
-                }),
-                h(
-                  'div',
-                  {
-                    style: {
-                      position: 'absolute',
-                      top: 0,
-                      zIndex: 2,
-                      display: this.display,
-                      width: '80px',
-                      height: '100%',
-                      padding: '0px 0',
-                      borderRadius: '4px',
-                      backgroundColor: '#fff',
-                      boxShadow: '0 0px 5px rgba(0, 0, 0, 0.2)',
-                      transform: 'translateX(25%)',
-                    },
-                  },
-                  [
-                    h(
-                      'div',
-                      {
-                        class: {
-                          'select-item': true,
-                          on: this.isAll == 0,
-                        },
-                        style: {
-                          padding: '1px 6px',
-                          cursor: 'pointer',
-                          height: '50%',
-                        },
-                        on: {
-                          click: (e) => {
-                            if (this.isAll === 0) {
-                              this.$emit('on-all', -1);
-                              this.checkBox = false;
-                              this.$refs.table.selectAll(this.checkBox);
-                            } else {
-                              this.$emit('on-all', 0);
-                              if (!this.formSelection.length) {
-                                this.checkBox = true;
-                                this.$refs.table.selectAll(this.checkBox);
-                              }
-                            }
-                            this.display = 'none';
-                          },
-                        },
-                      },
-                      '选择当页',
-                    ),
-                    h(
-                      'div',
-                      {
-                        class: {
-                          'select-item': true,
-                          on: this.isAll == 1,
-                        },
-                        style: {
-                          padding: '1px 6px',
-                          cursor: 'pointer',
-                          height: '50%',
-                        },
-                        on: {
-                          click: (e) => {
-                            if (this.isAll === 1) {
-                              this.isAll = -1;
-                              this.$emit('on-all', -1);
-                              this.checkBox = false;
-                            } else {
-                              this.isAll = 1;
-                              this.$emit('on-all', 1);
-                              this.checkBox = true;
-                            }
-                            this.$refs.table.selectAll(this.checkBox);
-                            this.display = 'none';
-                          },
-                        },
-                      },
-                      '选择全部',
-                    ),
-                  ],
-                ),
-              ],
-            );
-          },
-          render: (h, params) => {
-            return h('Checkbox', {
-              props: {
-                value: params.row.checkBox,
-              },
-              on: {
-                'on-change': (e) => {
-                  if (e) {
-                    this.formSelection.push(params.row);
-                  } else {
-                    this.checkBox = false;
-                    this.formSelection.forEach((item, index) => {
-                      if (item.id === params.row.id) {
-                        this.formSelection.splice(index, 1);
-                      }
-                    });
-                  }
-                  this.$emit('on-all', this.formSelection.length ? 0 : -1);
-                  // this.responseData为查询出的结果数据
-                  // params.row.checkBox = e;
-                  params.row.checkBox = e;
-                  this.orderList[params.index].checkBox = e;
-                },
-              },
-              ref: 'checkbox',
-              refInFor: true,
-            });
-          },
-        },
-        {
-          title: '订单号',
-          align: 'center',
-          slot: 'order_id',
-          minWidth: 150,
-        },
-        {
-          title: '订单类型',
-          key: 'pink_name',
-          minWidth: 120,
-        },
-        {
-          title: '用户信息',
-          slot: 'nickname',
-          minWidth: 100,
-        },
-        {
-          title: '商品信息',
-          slot: 'info',
-          minWidth: 330,
-        },
-        {
-          title: '实际支付',
-          key: 'pay_price',
-          minWidth: 70,
-        },
-        {
-          title: '支付时间',
-          key: '_pay_time',
-          minWidth: 100,
-        },
-        {
-          title: '支付状态',
-          key: 'pay_type_name',
-          minWidth: 80,
-        },
-        {
-          title: '订单状态',
-          key: 'statusName',
-          slot: 'statusName',
-          minWidth: 120,
-        },
-        {
-          title: '操作',
-          slot: 'action',
-          fixed: 'right',
-          minWidth: 150,
-          align: 'center',
-        },
-      ],
-      page: {
-        total: 0, // 总条数
-        pageNum: 1, // 当前页
-        pageSize: 10, // 每页显示条数
-      },
-      data: [],
-      FromData: null,
-      orderDatalist: null,
-      modalTitleSs: '',
-      isDelIdList: [],
-      checkBox: false,
-      formSelection: [],
-      selectionCopy: [],
-      display: 'none',
-      autoDisabled: false,
-      status: 0, //发货状态判断
-      // isAll: -1,
-    };
-  },
-  computed: {
-    ...mapState('admin/order', ['orderPayType', 'orderStatus', 'orderTime', 'orderNum', 'fieldKey', 'orderType']),
-  },
-  mounted() {},
-  created() {
-    this.getList();
-  },
-  watch: {
-    orderType: function () {
-      this.page.pageNum = 1;
-      this.getList();
-    },
-    formSelection(value) {
-      this.$emit('order-select', value);
-      if (value.length) {
-        this.$emit('auto-disabled', 0);
-      } else {
-        this.$emit('auto-disabled', 1);
-      }
-      let isDel = value.some((item) => {
-        return item.is_del === 1;
-      });
-      this.getIsDel(isDel);
-      this.getisDelIdListl(value);
-    },
-    orderList: {
-      deep: true,
-      handler(value) {
-        value.forEach((item) => {
-          this.formSelection.forEach((itm) => {
-            if (itm.id === item.id) {
-              item.checkBox = true;
-            }
-          });
-        });
-        const arr = this.orderList.filter((item) => item.checkBox);
-        if (this.orderList.length) {
-          this.checkBox = this.orderList.length === arr.length;
-        } else {
-          this.checkBox = false;
-        }
-      },
-    },
-  },
-  methods: {
-    ...mapMutations('admin/order', ['getIsDel', 'getisDelIdListl']),
-    selectAll(row) {
-      if (row.length) {
-        this.formSelection = row;
-        this.selectionCopy = row;
-      }
-      this.selectionCopy.forEach((item, index) => {
-        item.checkBox = this.checkBox;
-        this.$set(this.orderList, index, item);
-      });
-    },
-    showUserInfo(row) {
-      this.$refs.userDetails.modals = true;
-      this.$refs.userDetails.getDetails(row.uid);
-    },
-    // 操作
-    changeMenu(row, name) {
-      this.orderId = row.id;
-      switch (name) {
-        case '1':
-          this.delfromData = {
-            title: '修改立即支付',
-            url: `/order/pay_offline/${row.id}`,
-            method: 'post',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.$emit('changeGetTabs');
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          // this.modalTitleSs = '修改立即支付';
-          break;
-        case '2':
-          this.getData(row.id);
-          break;
-        case '3':
-          this.$refs.record.modals = true;
-          this.$refs.record.getList(row.id);
-          break;
-        case '4':
-          this.$refs.remarks.modals = true;
-          break;
-        case '5':
-          this.getRefundData(row.id);
-          break;
-        case '6':
-          this.getRefundIntegral(row.id);
-          break;
-        case '7':
-          this.getNoRefundData(row.id);
-          break;
-        case '8':
-          this.delfromData = {
-            title: '修改确认收货',
-            url: `/order/take/${row.id}`,
-            method: 'put',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          // this.modalTitleSs = '修改确认收货';
-          break;
-        case '10':
-          this.delfromData = {
-            title: '立即打印订单',
-            info: '您确认打印此订单吗?',
-            url: `/order/print/${row.id}`,
-            method: 'get',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.$emit('changeGetTabs');
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          break;
-        case '11':
-          this.delfromData = {
-            title: '立即打印电子面单',
-            info: '您确认打印此电子面单吗?',
-            url: `/order/order_dump/${row.id}`,
-            method: 'get',
-            ids: '',
-          };
-          this.$modalSure(this.delfromData)
-            .then((res) => {
-              this.$Message.success(res.msg);
-              this.getList();
-            })
-            .catch((res) => {
-              this.$Message.error(res.msg);
-            });
-          break;
-        default:
-          this.delfromData = {
-            title: '删除订单',
-            url: `/order/del/${row.id}`,
-            method: 'DELETE',
-            ids: '',
-          };
-          // this.modalTitleSs = '删除订单';
-          this.delOrder(row, this.delfromData);
-      }
-    },
-    // 立即支付 /确认收货//删除单条订单
-    submitModel() {
-      this.getList();
-    },
-    pageChange(index) {
-      this.page.pageNum = index;
-      this.getList();
-    },
-    limitChange(limit) {
-      this.page.pageSize = limit;
-      this.getList();
-    },
-    getOrderList(id) {
-      splitOrderList(id).then((res) => {});
-    },
-    // 订单列表
-    getList(res) {
-      this.page.pageNum = res === 1 ? 1 : this.page.pageNum;
-      this.loading = true;
+	export default {
+		name: 'table_list',
+		components: {
+			expandRow,
+			editFrom,
+			detailsFrom,
+			orderRemark,
+			orderRecord,
+			orderSend,
+			userDetails,
+		},
+		props: ['where', 'isAll'],
+		data() {
+			return {
+				delfromData: {},
+				modal: false,
+				orderList: [],
+				orderCards: [],
+				loading: false,
+				orderId: 0,
+				columns: [{
+						type: 'expand',
+						width: 30,
+						render: (h, params) => {
+							return h(expandRow, {
+								props: {
+									row: params.row,
+								},
+							});
+						},
+					},
+					{
+						width: 50,
+						align: 'center',
+						renderHeader: (h, params) => {
+							return h(
+								'div', {
+									class: {
+										'select-panel': true,
+									},
+									on: {
+										mouseenter: (e) => {
+											this.display = 'block';
+										},
+										mouseleave: (e) => {
+											this.display = 'none';
+										},
+									},
+								},
+								[
+									h('Checkbox', {
+										props: {
+											value: this.checkBox,
+										},
+										on: {
+											'on-change': (e) => {
+												this.checkBox = e;
+												this.$refs.table.selectAll(this.checkBox);
+												this.$emit('on-all', e ? 0 : -1);
+											},
+										},
+									}),
+									h(
+										'div', {
+											style: {
+												position: 'absolute',
+												top: 0,
+												zIndex: 2,
+												display: this.display,
+												width: '80px',
+												height: '100%',
+												padding: '0px 0',
+												borderRadius: '4px',
+												backgroundColor: '#fff',
+												boxShadow: '0 0px 5px rgba(0, 0, 0, 0.2)',
+												transform: 'translateX(25%)',
+											},
+										},
+										[
+											h(
+												'div', {
+													class: {
+														'select-item': true,
+														on: this.isAll == 0,
+													},
+													style: {
+														padding: '1px 6px',
+														cursor: 'pointer',
+														height: '50%',
+													},
+													on: {
+														click: (e) => {
+															if (this.isAll === 0) {
+																this.$emit('on-all', -1);
+																this.checkBox = false;
+																this.$refs.table.selectAll(this.checkBox);
+															} else {
+																this.$emit('on-all', 0);
+																if (!this.formSelection.length) {
+																	this.checkBox = true;
+																	this.$refs.table.selectAll(this
+																		.checkBox);
+																}
+															}
+															this.display = 'none';
+														},
+													},
+												},
+												'选择当页',
+											),
+											h(
+												'div', {
+													class: {
+														'select-item': true,
+														on: this.isAll == 1,
+													},
+													style: {
+														padding: '1px 6px',
+														cursor: 'pointer',
+														height: '50%',
+													},
+													on: {
+														click: (e) => {
+															if (this.isAll === 1) {
+																this.isAll = -1;
+																this.$emit('on-all', -1);
+																this.checkBox = false;
+															} else {
+																this.isAll = 1;
+																this.$emit('on-all', 1);
+																this.checkBox = true;
+															}
+															this.$refs.table.selectAll(this.checkBox);
+															this.display = 'none';
+														},
+													},
+												},
+												'选择全部',
+											),
+										],
+									),
+								],
+							);
+						},
+						render: (h, params) => {
+							return h('Checkbox', {
+								props: {
+									value: params.row.checkBox,
+								},
+								on: {
+									'on-change': (e) => {
+										if (e) {
+											this.formSelection.push(params.row);
+										} else {
+											this.checkBox = false;
+											this.formSelection.forEach((item, index) => {
+												if (item.id === params.row.id) {
+													this.formSelection.splice(index, 1);
+												}
+											});
+										}
+										this.$emit('on-all', this.formSelection.length ? 0 : -1);
+										// this.responseData为查询出的结果数据
+										// params.row.checkBox = e;
+										params.row.checkBox = e;
+										this.orderList[params.index].checkBox = e;
+									},
+								},
+								ref: 'checkbox',
+								refInFor: true,
+							});
+						},
+					},
+					{
+						title: '订单号',
+						align: 'center',
+						slot: 'order_id',
+						minWidth: 150,
+					},
+					{
+						title: '订单类型',
+						key: 'pink_name',
+						minWidth: 120,
+					},
+					{
+						title: '用户信息',
+						slot: 'nickname',
+						minWidth: 100,
+					},
+					{
+						title: '商品信息',
+						slot: 'info',
+						minWidth: 330,
+					},
+					{
+						title: '实际支付',
+						key: 'pay_price',
+						minWidth: 70,
+					},
+					{
+						title: '支付时间',
+						key: '_pay_time',
+						minWidth: 100,
+					},
+					{
+						title: '支付状态',
+						key: 'pay_type_name',
+						minWidth: 80,
+					},
+					{
+						title: '订单状态',
+						key: 'statusName',
+						slot: 'statusName',
+						minWidth: 120,
+					},
+					{
+						title: '操作',
+						slot: 'action',
+						fixed: 'right',
+						minWidth: 150,
+						align: 'center',
+					},
+				],
+				page: {
+					total: 0, // 总条数
+					pageNum: 1, // 当前页
+					pageSize: 10, // 每页显示条数
+				},
+				data: [],
+				FromData: null,
+				orderDatalist: null,
+				modalTitleSs: '',
+				isDelIdList: [],
+				checkBox: false,
+				formSelection: [],
+				selectionCopy: [],
+				display: 'none',
+				autoDisabled: false,
+				status: 0, //发货状态判断
+				// isAll: -1,
+			};
+		},
+		computed: {
+			...mapState('admin/order', ['orderPayType', 'orderStatus', 'orderTime', 'orderNum', 'fieldKey', 'orderType']),
+		},
+		mounted() {},
+		created() {
+			console.log(this.$store, 'store')
+			console.log('可以', 'store')
+			this.getList();
+		},
+		watch: {
+			orderType: function() {
+				this.page.pageNum = 1;
+				this.getList();
+			},
+			formSelection(value) {
+				this.$emit('order-select', value);
+				if (value.length) {
+					this.$emit('auto-disabled', 0);
+				} else {
+					this.$emit('auto-disabled', 1);
+				}
+				let isDel = value.some((item) => {
+					return item.is_del === 1;
+				});
+				this.getIsDel(isDel);
+				this.getisDelIdListl(value);
+			},
+			orderList: {
+				deep: true,
+				handler(value) {
+					value.forEach((item) => {
+						this.formSelection.forEach((itm) => {
+							if (itm.id === item.id) {
+								item.checkBox = true;
+							}
+						});
+					});
+					const arr = this.orderList.filter((item) => item.checkBox);
+					if (this.orderList.length) {
+						this.checkBox = this.orderList.length === arr.length;
+					} else {
+						this.checkBox = false;
+					}
+				},
+			},
+		},
+		methods: {
+			...mapMutations('admin/order', ['getIsDel', 'getisDelIdListl']),
+			selectAll(row) {
+				if (row.length) {
+					this.formSelection = row;
+					this.selectionCopy = row;
+				}
+				this.selectionCopy.forEach((item, index) => {
+					item.checkBox = this.checkBox;
+					this.$set(this.orderList, index, item);
+				});
+			},
+			showUserInfo(row) {
+				this.$refs.userDetails.modals = true;
+				this.$refs.userDetails.getDetails(row.uid);
+			},
+			// 操作
+			changeMenu(row, name) {
+				this.orderId = row.id;
+				switch (name) {
+					case '1':
+						this.delfromData = {
+							title: '修改立即支付',
+							url: `/order/pay_offline/${row.id}`,
+							method: 'post',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改立即支付';
+						break;
+					case '2':
+						this.getData(row.id);
+						break;
+					case '3':
+						this.$refs.record.modals = true;
+						this.$refs.record.getList(row.id);
+						break;
+					case '4':
+						this.$refs.remarks.modals = true;
+						break;
+					case '5':
+						this.getRefundData(row.id);
+						break;
+					case '6':
+						this.getRefundIntegral(row.id);
+						break;
+					case '7':
+						this.getNoRefundData(row.id);
+						break;
+					case '8':
+						this.delfromData = {
+							title: '修改确认收货',
+							url: `/order/take/${row.id}`,
+							method: 'put',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改确认收货';
+						break;
+					case '10':
+						this.delfromData = {
+							title: '立即打印订单',
+							info: '您确认打印此订单吗?',
+							url: `/order/print/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					case '11':
+						this.delfromData = {
+							title: '立即打印电子面单',
+							info: '您确认打印此电子面单吗?',
+							url: `/order/order_dump/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					default:
+						this.delfromData = {
+							title: '删除订单',
+							url: `/order/del/${row.id}`,
+							method: 'DELETE',
+							ids: '',
+						};
+						// this.modalTitleSs = '删除订单';
+						this.delOrder(row, this.delfromData);
+				}
+			},
+			// 立即支付 /确认收货//删除单条订单
+			submitModel() {
+				this.getList();
+			},
+			pageChange(index) {
+				this.page.pageNum = index;
+				this.getList();
+			},
+			limitChange(limit) {
+				this.page.pageSize = limit;
+				this.getList();
+			},
+			getOrderList(id) {
+				splitOrderList(id).then((res) => {});
+			},
+			// 订单列表
+			getList(res) {
+				this.page.pageNum = res === 1 ? 1 : this.page.pageNum;
+				this.loading = true;
 
-      splitOrderList(this.$route.query.id)
-        .then(async (res) => {
-          let data = res.data;
-          // this.orderList = data.data;
-          this.orderList = data.map((item) => {
-            // item.checkBox = false;
-            if (this.isAll === 1) {
-              item.checkBox = true;
-            } else {
-              item.checkBox = false;
-            }
-            return item;
-          });
-          this.orderCards = data.stat;
-          this.page.total = data.count;
-          this.$emit('on-changeCards', data.stat);
-          this.loading = false;
-        })
-        .catch((res) => {
-          this.loading = false;
-          this.$Message.error(res.msg);
-        });
-    },
-    // 全选
-    onSelectTab(selection) {
-      this.formSelection = selection;
-      let isDel = selection.some((item) => {
-        return item.is_del === 1;
-      });
-      this.getIsDel(isDel);
-      this.getisDelIdListl(selection);
-    },
-    // 编辑
-    edit(row) {
-      this.getOrderData(row.id);
-    },
-    splitOrderDetail(row) {
-      this.$router.push({
-        path: 'split_order',
-        query: {
-          id: row.id,
-        },
-      });
-    },
-    // 删除单条订单
-    delOrder(row, data) {
-      if (row.is_del === 1) {
-        this.$modalSure(data)
-          .then((res) => {
-            this.$Message.success(res.msg);
-            this.getList();
-          })
-          .catch((res) => {
-            this.$Message.error(res.msg);
-          });
-      } else {
-        const title = '错误!';
-        const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
-        this.$Modal.error({
-          title: title,
-          content: content,
-        });
-      }
-    },
-    // 获取编辑表单数据
-    getOrderData(id) {
-      getOrdeDatas(id)
-        .then(async (res) => {
-          if (res.data.status === false) {
-            return this.$authLapse(res.data);
-          }
-          this.$authLapse(res.data);
-          this.FromData = res.data;
-          this.$refs.edits.modals = true;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    // 获取详情表单数据
-    getData(id) {
-      getDataInfo(id)
-        .then(async (res) => {
-          this.$refs.detailss.modals = true;
-          this.orderDatalist = res.data;
-          if (this.orderDatalist.orderInfo.refund_reason_wap_img) {
-            try {
-              this.orderDatalist.orderInfo.refund_reason_wap_img = JSON.parse(
-                this.orderDatalist.orderInfo.refund_reason_wap_img,
-              );
-            } catch (e) {
-              this.orderDatalist.orderInfo.refund_reason_wap_img = [];
-            }
-          }
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    // 修改成功
-    submitFail() {
-      this.status = 0;
-      this.getList();
-    },
-    // 获取退款表单数据
-    getRefundData(id) {
-      this.$modalForm(getRefundFrom(id)).then(() => {
-        this.getList();
-        this.$emit('changeGetTabs');
-      });
-    },
-    // 获取退积分表单数据
-    getRefundIntegral(id) {
-      refundIntegral(id)
-        .then(async (res) => {
-          this.FromData = res.data;
-          this.$refs.edits.modals = true;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    // 不退款表单数据
-    getNoRefundData(id) {
-      this.$modalForm(getnoRefund(id)).then(() => {
-        this.getList();
-        this.$emit('changeGetTabs');
-      });
-    },
-    // 发送货
-    sendOrder(row) {
-      this.$refs.send.modals = true;
-      this.orderId = row.id;
-      this.status = row._status;
-      this.$refs.send.getList();
-      this.$refs.send.getDeliveryList();
-      this.$nextTick((e) => {
-        this.$refs.send.getCartInfo(row._status, row.id);
-      });
-    },
-    // 配送信息表单数据
-    delivery(row) {
-      getDistribution(row.id)
-        .then(async (res) => {
-          this.FromData = res.data;
-          this.$refs.edits.modals = true;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
-    },
-    change(status) {},
-    // 数据导出;
-    exportData: function () {
-      this.$refs.table.exportCsv({
-        filename: '商品列表',
-      });
-    },
-    // 核销订单
-    bindWrite(row) {
-      let self = this;
-      this.$Modal.confirm({
-        title: '提示',
-        content: '确定要核销该订单吗?',
-        cancelText: '取消',
-        closable: true,
-        maskClosable: true,
-        onOk: function () {
-          writeUpdate(row.order_id).then((res) => {
-            self.$Message.success(res.msg);
-            self.getList();
-          });
-        },
-        onCancel: () => {},
-      });
-    },
-    onSelectCancel(selection, row) {},
-  },
-};
+				splitOrderList(this.$route.query.id)
+					.then(async (res) => {
+						let data = res.data;
+						// this.orderList = data.data;
+						this.orderList = data.map((item) => {
+							// item.checkBox = false;
+							if (this.isAll === 1) {
+								item.checkBox = true;
+							} else {
+								item.checkBox = false;
+							}
+							return item;
+						});
+						this.orderCards = data.stat;
+						this.page.total = data.count;
+						this.$emit('on-changeCards', data.stat);
+						this.loading = false;
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			// 全选
+			onSelectTab(selection) {
+				this.formSelection = selection;
+				let isDel = selection.some((item) => {
+					return item.is_del === 1;
+				});
+				this.getIsDel(isDel);
+				this.getisDelIdListl(selection);
+			},
+			// 编辑
+			edit(row) {
+				this.getOrderData(row.id);
+			},
+			splitOrderDetail(row) {
+				this.$router.push({
+					path: 'split_order',
+					query: {
+						id: row.id,
+					},
+				});
+			},
+			// 删除单条订单
+			delOrder(row, data) {
+				if (row.is_del === 1) {
+					this.$modalSure(data)
+						.then((res) => {
+							this.$Message.success(res.msg);
+							this.getList();
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					const title = '错误!';
+					const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
+					this.$Modal.error({
+						title: title,
+						content: content,
+					});
+				}
+			},
+			// 获取编辑表单数据
+			getOrderData(id) {
+				getOrdeDatas(id)
+					.then(async (res) => {
+						if (res.data.status === false) {
+							return this.$authLapse(res.data);
+						}
+						this.$authLapse(res.data);
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 获取详情表单数据
+			getData(id) {
+				getDataInfo(id)
+					.then(async (res) => {
+						this.$refs.detailss.modals = true;
+						this.orderDatalist = res.data;
+						if (this.orderDatalist.orderInfo.refund_reason_wap_img) {
+							try {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = JSON.parse(
+									this.orderDatalist.orderInfo.refund_reason_wap_img,
+								);
+							} catch (e) {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = [];
+							}
+						}
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 修改成功
+			submitFail() {
+				this.status = 0;
+				this.getList();
+			},
+			// 获取退款表单数据
+			getRefundData(id) {
+				this.$modalForm(getRefundFrom(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 获取退积分表单数据
+			getRefundIntegral(id) {
+				refundIntegral(id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 不退款表单数据
+			getNoRefundData(id) {
+				this.$modalForm(getnoRefund(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 发送货
+			sendOrder(row) {
+				this.$refs.send.modals = true;
+				this.orderId = row.id;
+				this.status = row._status;
+				this.$refs.send.getList();
+				this.$refs.send.getDeliveryList();
+				this.$nextTick((e) => {
+					this.$refs.send.getCartInfo(row._status, row.id);
+				});
+			},
+			// 配送信息表单数据
+			delivery(row) {
+				getDistribution(row.id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			change(status) {},
+			// 数据导出;
+			exportData: function() {
+				this.$refs.table.exportCsv({
+					filename: '商品列表',
+				});
+			},
+			// 核销订单
+			bindWrite(row) {
+				let self = this;
+				this.$Modal.confirm({
+					title: '提示',
+					content: '确定要核销该订单吗?',
+					cancelText: '取消',
+					closable: true,
+					maskClosable: true,
+					onOk: function() {
+						writeUpdate(row.order_id).then((res) => {
+							self.$Message.success(res.msg);
+							self.getList();
+						});
+					},
+					onCancel: () => {},
+				});
+			},
+			onSelectCancel(selection, row) {},
+		},
+	};
 </script>
 
 <style scoped lang="stylus">
-img {
-  height: 36px;
-  display: block;
-}
+	img {
+		height: 36px;
+		display: block;
+	}
 
-.tabBox {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  align-items: center;
+	.tabBox {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
 
-  .tabBox_img {
-    width: 36px;
-    height: 36px;
+		.tabBox_img {
+			width: 36px;
+			height: 36px;
 
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
 
-  .tabBox_tit {
-    width: 60%;
-    font-size: 12px !important;
-    margin: 0 2px 0 10px;
-    letter-spacing: 1px;
-    padding: 5px 0;
-    box-sizing: border-box;
-  }
-}
+		.tabBox_tit {
+			width: 60%;
+			font-size: 12px !important;
+			margin: 0 2px 0 10px;
+			letter-spacing: 1px;
+			padding: 5px 0;
+			box-sizing: border-box;
+		}
+	}
 
-.orderData >>>.ivu-table-cell {
-  padding-left: 0 !important;
-}
+	.orderData>>>.ivu-table-cell {
+		padding-left: 0 !important;
+	}
 
-.vertical-center-modal {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
+	.vertical-center-modal {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
 
-.orderData .ivu-table {
-  overflow: visible !important;
-}
+	.orderData .ivu-table {
+		overflow: visible !important;
+	}
 
-.orderData .ivu-table th {
-  overflow: visible !important;
-}
+	.orderData .ivu-table th {
+		overflow: visible !important;
+	}
 
-.orderData .ivu-table-header {
-  overflow: visible !important;
-}
+	.orderData .ivu-table-header {
+		overflow: visible !important;
+	}
 
-/deep/.ivu-table-header {
-  // overflow: visible;
-}
+	/deep/.ivu-table-header {
+		// overflow: visible;
+	}
 
-/deep/.ivu-table th {
-  overflow: visible;
-}
+	/deep/.ivu-table th {
+		overflow: visible;
+	}
 
-/deep/.select-item:hover {
-  background-color: #f3f3f3;
-}
+	/deep/.select-item:hover {
+		background-color: #f3f3f3;
+	}
 
-/deep/.select-on {
-  display: block;
-}
+	/deep/.select-on {
+		display: block;
+	}
 
-/deep/.select-item.on {
-  background: #f3f3f3;
-}
+	/deep/.select-item.on {
+		background: #f3f3f3;
+	}
 
-.pictrue-box {
-  display: flex;
-  align-item: center;
-}
+	.pictrue-box {
+		display: flex;
+		align-item: center;
+	}
 
-.pictrue {
-  width: 25px;
-  height: 25px;
-}
+	.pictrue {
+		width: 25px;
+		height: 25px;
+	}
 
-.return {
-  border: 1px solid #ccc;
-  padding: 3px 5px;
-  margin-left: 15px;
-  border-radius: 3px;
-  cursor: pointer;
-}
-</style>
+	.return {
+		border: 1px solid #ccc;
+		padding: 3px 5px;
+		margin-left: 15px;
+		border-radius: 3px;
+		cursor: pointer;
+	}
+</style>

+ 462 - 0
src/pages/shop_finance/userExtract/index.vue

@@ -0,0 +1,462 @@
+<template>
+  <div>
+    <Card :bordered="false" dis-hover class="ivu-mb-16">
+      <Form
+        ref="formValidate"
+        :model="formValidate"
+        :label-width="labelWidth"
+        :label-position="labelPosition"
+        class="tabform"
+        @submit.native.prevent
+      >
+        <Row :gutter="24" type="flex">
+          <Col span="24">
+            <FormItem label="时间选择:">
+              <RadioGroup
+                v-model="formValidate.data"
+                type="button"
+                @on-change="selectChange(formValidate.data)"
+                class="mr"
+              >
+                <Radio :label="item.val" v-for="(item, i) in fromList.fromTxt" :key="i">{{ item.text }}</Radio>
+              </RadioGroup>
+              <DatePicker
+                :editable="false"
+                @on-change="onchangeTime"
+                :value="timeVal"
+                format="yyyy/MM/dd"
+                type="daterange"
+                placement="bottom-end"
+                placeholder="请选择时间"
+                style="width: 200px"
+              ></DatePicker>
+            </FormItem>
+          </Col>
+          <Col span="24">
+            <FormItem label="提现状态:">
+              <RadioGroup type="button" v-model="formValidate.status" class="mr15" @on-change="selChange">
+                <Radio :label="itemn.value" v-for="(itemn, indexn) in treeData.withdrawal" :key="indexn">{{
+                  itemn.title
+                }}</Radio>
+              </RadioGroup>
+            </FormItem>
+          </Col>
+          <Col span="24">
+            <FormItem label="提现方式:">
+              <RadioGroup type="button" v-model="formValidate.extract_type" class="mr15" @on-change="selChange">
+                <Radio :label="itemn.value" v-for="(itemn, indexn) in treeData.payment" :key="indexn">{{
+                  itemn.title
+                }}</Radio>
+              </RadioGroup>
+            </FormItem>
+          </Col>
+          <Col span="24">
+            <FormItem label="搜索:">
+              <div class="acea-row row-middle">
+                <Input
+                  search
+                  enter-button
+                  @on-search="selChange"
+                  placeholder="微信昵称/姓名/支付宝账号/银行卡号"
+                  element-id="name"
+                  v-model="formValidate.nireid"
+                  style="width: 30%"
+                />
+                <router-link :to="$routeProStr + '/finance/finance/commission'" class="ml20">佣金记录</router-link>
+              </div>
+            </FormItem>
+          </Col>
+        </Row>
+      </Form>
+    </Card>
+    <cards-data :cardLists="cardLists" v-if="extractStatistics"></cards-data>
+    <Card :bordered="false" dis-hover>
+      <Table
+        ref="table"
+        :columns="columns"
+        :data="tabList"
+        class="ivu-mt"
+        :loading="loading"
+        no-data-text="暂无数据"
+        no-filtered-data-text="暂无筛选结果"
+      >
+        <template slot-scope="{ row }" slot="nickname">
+          <div>
+            用户昵称: {{ row.nickname }} <br />
+            用户id:{{ row.uid }}
+          </div>
+        </template>
+        <template slot-scope="{ row }" slot="extract_price">
+          <div>{{ row.extract_price }}</div>
+        </template>
+        <template slot-scope="{ row, index }" slot="add_time">
+          <span> {{ row.add_time | formatDate }}</span>
+        </template>
+        <template slot-scope="{ row }" slot="extract_type">
+          <div class="type" v-if="row.extract_type === 'bank'">
+            <div class="item">姓名:{{ row.real_name }}</div>
+            <div class="item">银行卡号:{{ row.bank_code }}</div>
+            <div class="item">银行开户地址:{{ row.bank_address }}</div>
+          </div>
+          <div class="type" v-if="row.extract_type === 'weixin'">
+            <div class="item">昵称:{{ row.nickname }}</div>
+            <div class="item">微信号:{{ row.wechat }}</div>
+          </div>
+          <div class="type" v-if="row.extract_type === 'alipay'">
+            <div class="item">姓名:{{ row.real_name }}</div>
+            <div class="item">支付宝号:{{ row.alipay_code }}</div>
+          </div>
+          <div class="type" v-if="row.extract_type === 'balance'">
+            <div class="item">姓名:{{ row.real_name }}</div>
+            <div class="item">提现方式:佣金转入余额</div>
+          </div>
+        </template>
+        <template slot-scope="{ row, index }" slot="qrcode_url">
+          <div class="tabBox_img" v-viewer v-if="row.extract_type === 'weixin' || row.extract_type === 'alipay'">
+            <img v-lazy="row.qrcode_url" />
+          </div>
+        </template>
+        <template slot-scope="{ row, index }" slot="status">
+          <div class="status" v-if="row.status === 0">
+            <div class="statusVal">申请中</div>
+            <div>
+              <Button type="error" icon="md-close" size="small" class="item" @click="invalid(row)">驳回</Button>
+              <Button type="info" icon="md-checkmark" size="small" class="item" @click="adopt(row, '审核通过', index)"
+                >通过</Button
+              >
+            </div>
+          </div>
+          <div class="statusVal" v-if="row.status === 1">提现通过</div>
+          <div class="statusVal" v-if="row.status === -1">提现未通过<br />未通过原因:{{ row.fail_msg }}</div>
+        </template>
+        <template slot-scope="{ row }" slot="createModalFrame">
+          <a href="javascript:void(0);" @click="edit(row)">编辑</a>
+        </template>
+      </Table>
+      <div class="acea-row row-right page">
+        <Page
+          :total="total"
+          :current="formValidate.page"
+          show-elevator
+          show-total
+          @on-change="pageChange"
+          :page-size="formValidate.limit"
+        />
+      </div>
+    </Card>
+
+    <!-- 编辑表单-->
+    <edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
+    <!-- 拒绝通过-->
+    <Modal v-model="modals" scrollable closable title="未通过原因" :mask-closable="false">
+      <Input v-model="fail_msg.message" type="textarea" :rows="4" placeholder="请输入未通过原因" />
+      <div slot="footer">
+        <Button type="primary" size="large" long :loading="modal_loading" @click="oks">确定</Button>
+      </div>
+    </Modal>
+  </div>
+</template>
+<script>
+import cardsData from '@/components/cards/cards';
+import searchFrom from '@/components/publicSearchFrom';
+import { mapState } from 'vuex';
+import { cashListApi, cashEditApi, refuseApi } from '@/api/finance';
+import { formatDate } from '@/utils/validate';
+import editFrom from '@/components/from/from';
+export default {
+  name: 'cashApply',
+  components: { cardsData, searchFrom, editFrom },
+  filters: {
+    formatDate(time) {
+      if (time !== 0) {
+        let date = new Date(time * 1000);
+        return formatDate(date, 'yyyy-MM-dd hh:mm');
+      }
+    },
+  },
+  data() {
+    return {
+      images: ['1.jpg', '2.jpg'],
+      modal_loading: false,
+      fail_msg: {
+        message: '输入信息不完整或有误!',
+      },
+      modals: false,
+      total: 0,
+      cardLists: [],
+      loading: false,
+      columns: [
+        {
+          title: 'ID',
+          key: 'id',
+          width: 80,
+        },
+        {
+          title: '用户信息',
+          slot: 'nickname',
+          minWidth: 180,
+        },
+        {
+          title: '提现金额',
+          slot: 'extract_price',
+          minWidth: 90,
+        },
+        {
+          title: '提现方式',
+          slot: 'extract_type',
+          minWidth: 150,
+        },
+        {
+          title: '收款码',
+          slot: 'qrcode_url',
+          minWidth: 150,
+        },
+        {
+          title: '添加时间',
+          slot: 'add_time',
+          minWidth: 100,
+        },
+        {
+          title: '备注',
+          key: 'mark',
+          minWidth: 100,
+        },
+        {
+          title: '审核状态',
+          slot: 'status',
+          minWidth: 180,
+        },
+        {
+          title: '操作',
+          slot: 'createModalFrame',
+          fixed: 'right',
+          width: 100,
+        },
+      ],
+      tabList: [],
+      fromList: {
+        title: '选择时间',
+        custom: true,
+        fromTxt: [
+          { text: '全部', val: '' },
+          { text: '今天', val: 'today' },
+          { text: '昨天', val: 'yesterday' },
+          { text: '本周', val: 'week' },
+          { text: '本月', val: 'month' },
+          { text: '本季度', val: 'quarter' },
+          { text: '本年', val: 'year' },
+        ],
+      },
+      treeData: {
+        withdrawal: [
+          {
+            title: '全部',
+            value: '',
+          },
+          {
+            title: '未通过',
+            value: -1,
+          },
+          {
+            title: '申请中',
+            value: 0,
+          },
+          {
+            title: '已通过',
+            value: 1,
+          },
+        ],
+        payment: [
+          {
+            title: '全部',
+            value: '',
+          },
+          {
+            title: '微信',
+            value: 'wx',
+          },
+          {
+            title: '支付宝',
+            value: 'alipay',
+          },
+          {
+            title: '银行卡',
+            value: 'bank',
+          },
+        ],
+      },
+      formValidate: {
+        status: '',
+        extract_type: '',
+        nireid: '',
+        data: '',
+        page: 1,
+        limit: 20,
+      },
+      extractStatistics: {},
+      timeVal: [],
+      FromData: null,
+      extractId: 0,
+    };
+  },
+  watch: {
+    $route() {
+      if (this.$route.fullPath === this.$routeProStr + '/finance/user_extract/index?status=0') {
+        this.getPath();
+      }
+    },
+  },
+  computed: {
+    ...mapState('media', ['isMobile']),
+    labelWidth() {
+      return this.isMobile ? undefined : 80;
+    },
+    labelPosition() {
+      return this.isMobile ? 'top' : 'left';
+    },
+  },
+  mounted() {
+    if (this.$route.fullPath === this.$routeProStr + '/finance/user_extract/index?status=0') {
+      this.getPath();
+    } else {
+      this.getList();
+    }
+  },
+  methods: {
+    getPath() {
+      this.formValidate.page = 1;
+      this.formValidate.status = parseInt(this.$route.query.status);
+      this.getList();
+    },
+    // 无效
+    invalid(row) {
+      this.extractId = row.id;
+      this.modals = true;
+    },
+    // 确定
+    oks() {
+      this.modal_loading = true;
+      refuseApi(this.extractId, this.fail_msg)
+        .then(async (res) => {
+          this.$Message.success(res.msg);
+          this.modal_loading = false;
+          this.modals = false;
+          this.getList();
+        })
+        .catch((res) => {
+          this.$Message.error(res.msg);
+        });
+    },
+    // 通过
+    adopt(row, tit, num) {
+      let delfromData = {
+        title: tit,
+        num: num,
+        url: `finance/extract/adopt/${row.id}`,
+        method: 'put',
+        ids: '',
+      };
+      this.$modalSure(delfromData)
+        .then((res) => {
+          this.$Message.success(res.msg);
+          this.getList();
+        })
+        .catch((res) => {
+          this.$Message.error(res.msg);
+        });
+    },
+    // 具体日期
+    onchangeTime(e) {
+      this.timeVal = e;
+      this.formValidate.data = this.timeVal.join('-');
+      this.formValidate.page = 1;
+      this.getList();
+    },
+    // 选择时间
+    selectChange(tab) {
+      this.formValidate.page = 1;
+      this.formValidate.data = tab;
+      this.timeVal = [];
+      this.getList();
+    },
+    // 选择
+    selChange() {
+      this.formValidate.page = 1;
+      this.getList();
+    },
+    // 列表
+    getList() {
+      this.loading = true;
+      cashListApi(this.formValidate)
+        .then(async (res) => {
+          let data = res.data;
+          this.tabList = data.list.list;
+          this.total = data.list.count;
+          this.extractStatistics = data.extract_statistics;
+          this.cardLists = [
+            { col: 6, count: this.extractStatistics.price, name: '待提现金额', className: 'md-basket' },
+            { col: 6, count: this.extractStatistics.brokerage_count, name: '佣金总金额', className: 'md-pricetags' },
+            { col: 6, count: this.extractStatistics.priced, name: '已提现金额', className: 'md-cash' },
+            { col: 6, count: this.extractStatistics.brokerage_not, name: '未提现金额', className: 'ios-cash' },
+          ];
+          this.loading = false;
+        })
+        .catch((res) => {
+          this.loading = false;
+          this.$Message.error(res.msg);
+        });
+    },
+    pageChange(index) {
+      this.formValidate.page = index;
+      this.getList();
+    },
+    // 编辑
+    edit(row) {
+      cashEditApi(row.id)
+        .then(async (res) => {
+          if (res.data.status === false) {
+            return this.$authLapse(res.data);
+          }
+          this.FromData = res.data;
+          this.$refs.edits.modals = true;
+        })
+        .catch((res) => {
+          this.$Message.error(res.msg);
+        });
+    },
+    // 编辑提交成功
+    submitFail() {
+      this.getList();
+    },
+  },
+};
+</script>
+<style scoped lang="stylus">
+.ivu-mt .type .item
+    margin:3px 0;
+.tabform
+    margin-bottom 10px
+.Refresh
+    font-size 12px
+    color #1890FF
+    cursor pointer
+.ivu-form-item
+    margin-bottom 10px
+.status >>> .item~.item
+    margin-left 6px
+.status >>> .statusVal
+    margin-bottom 7px
+/*.ivu-mt >>> .ivu-table-header*/
+/*    border-top:1px dashed #ddd!important*/
+.type
+   padding 3px 0
+   box-sizing border-box
+.tabBox_img
+    width 36px
+    height 36px
+    border-radius:4px
+    cursor pointer
+    img
+        width 100%
+        height 100%
+</style>

+ 631 - 0
src/pages/shop_order/invoice/index.vue

@@ -0,0 +1,631 @@
+<template>
+  <div>
+    <Card :bordered="false" dis-hover class="ivu-mb-16">
+      <div class="table_box">
+        <Form
+          ref="orderData"
+          :model="orderData"
+          :label-width="80"
+          label-position="right"
+          class="tabform"
+          @submit.native.prevent
+        >
+          <Row :gutter="24" type="flex" justify="end">
+            <!--                        <Col span="24" class="ivu-text-left">-->
+            <!--                            <FormItem label="订单状态:">-->
+            <!--                                <RadioGroup v-model="orderData.status" type="button"  @on-change="selectChange()">-->
+            <!--                                    <Radio label="">全部 {{  '(' +tablists.statusAll?tablists.statusAll:0 + ')' }}</Radio>-->
+            <!--                                    <Radio label="0">未支付 {{  '(' +tablists.unpaid?tablists.unpaid:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="1">未发货 {{  '(' +tablists.unshipped?tablists.unshipped:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="2">待收货 {{  '(' +tablists.untake?tablists.untake:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="3">待评价 {{  '(' +tablists.unevaluate?tablists.unevaluate:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="4">交易完成 {{  '(' +tablists.complete?tablists.complete:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="5">待核销 {{  '(' +tablists.write_off?tablists.write_off:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="-1">退款中 {{  '(' +tablists.refunding?tablists.refunding:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="-2">已退款 {{  '(' +tablists.refund?tablists.refund:0+ ')' }}</Radio>-->
+            <!--                                    <Radio label="-4">已删除 {{  '(' +tablists.del?tablists.del:0+ ')' }}</Radio>-->
+            <!--                                </RadioGroup>-->
+            <!--                            </FormItem>-->
+            <!--                        </Col>-->
+            <Col span="24" class="ivu-text-left">
+              <FormItem label="创建时间:">
+                <DatePicker
+                  :editable="false"
+                  @on-change="onchangeTime"
+                  :value="timeVal"
+                  format="yyyy/MM/dd"
+                  type="datetimerange"
+                  placement="bottom-start"
+                  placeholder="请选择时间"
+                  style="width: 300px"
+                  class="mr20"
+                  :options="options"
+                ></DatePicker>
+              </FormItem>
+            </Col>
+            <Col span="24">
+              <Col v-bind="grid" class="mr">
+                <FormItem label="搜索:" prop="real_name" label-for="real_name">
+                  <Input
+                    v-model="orderData.real_name"
+                    search
+                    enter-button
+                    placeholder="请输入"
+                    element-id="name"
+                    @on-search="orderSearch()"
+                  >
+                    <Select v-model="orderData.field_key" slot="prepend" style="width: 80px">
+                      <Option value="all">全部</Option>
+                      <Option value="order_id">订单号</Option>
+                      <Option value="uid">UID</Option>
+                      <Option value="real_name">用户姓名</Option>
+                      <Option value="user_phone">用户电话</Option>
+                    </Select>
+                  </Input>
+                </FormItem>
+              </Col>
+            </Col>
+          </Row>
+        </Form>
+      </div>
+    </Card>
+    <Card :bordered="false" dis-hover>
+      <Tabs v-model="currentTab" @on-click="onClickTab" v-if="tablists" class="mb20">
+        <TabPane :label="'全部发票(' + tablists.all + ')'" name=" " />
+        <TabPane :label="'待开发票(' + tablists.noOpened + ')'" name="1" />
+        <TabPane :label="'已开发票(' + tablists.opened + ')'" name="2" />
+        <TabPane :label="'退款发票(' + tablists.refund + ')'" name="3" />
+      </Tabs>
+      <Table
+        :columns="columns"
+        :data="orderList"
+        ref="table"
+        :loading="loading"
+        highlight-row
+        no-userFrom-text="暂无数据"
+        no-filtered-userFrom-text="暂无筛选结果"
+      >
+        <template slot-scope="{ row, index }" slot="pay_price">
+          <div>¥ {{ row.pay_price }}</div>
+        </template>
+        <template slot-scope="{ row, index }" slot="type">
+          <div v-if="row.type === 1">电子普通发票</div>
+          <div v-else>纸质专用发票</div>
+        </template>
+        <template slot-scope="{ row, index }" slot="is_invoice">
+          <div v-if="row.is_invoice === 1">已开票</div>
+          <div v-else>未开票</div>
+        </template>
+        <template slot-scope="{ row, index }" slot="status">
+          <div v-if="row.status === 0">未发货</div>
+          <div v-else-if="row.status === 1">待收货</div>
+          <div v-else-if="row.status === 2">待评价</div>
+          <div v-else-if="row.status === 3">已完成</div>
+          <div v-else-if="row.status === -2">已退款</div>
+        </template>
+        <template slot-scope="{ row, index }" slot="header_type">
+          <div v-if="row.header_type === 1">个人</div>
+          <div v-else>企业</div>
+        </template>
+        <template slot-scope="{ row, index }" slot="action">
+          <a v-if="row.status != -2" @click="edit(row)">编辑</a>
+          <Divider v-if="row.status != -2" type="vertical" />
+          <a @click="orderInfo(row.id)">订单信息</a>
+        </template>
+      </Table>
+      <div class="acea-row row-right page">
+        <Page
+          :total="total"
+          :current="orderData.page"
+          show-elevator
+          show-total
+          @on-change="pageChange"
+          :page-size="orderData.limit"
+        />
+      </div>
+    </Card>
+    <Modal
+      v-model="invoiceShow"
+      scrollable
+      title="发票详情"
+      class="order_box"
+      width="700"
+      @on-cancel="cancel"
+      footer-hide
+    >
+      <Form ref="formInline" :model="formInline" :label-width="100" @submit.native.prevent>
+        <div v-if="invoiceDetails.header_type === 1 && invoiceDetails.type === 1">
+          <div class="list">
+            <div class="title">发票信息</div>
+            <Row class="row">
+              <Col span="12"
+                >发票抬头: <span class="info">{{ invoiceDetails.name }}</span></Col
+              >
+              <Col span="12">发票类型: <span class="info">电子普通发票</span></Col>
+            </Row>
+            <Row class="row">
+              <Col span="12">发票抬头类型: 个人</Col>
+              <Col span="12">订单金额: {{ invoiceDetails.pay_price }}</Col>
+            </Row>
+          </div>
+          <div class="list">
+            <div class="title row">联系信息</div>
+            <Row class="row">
+              <Col span="12">真实姓名: {{ invoiceDetails.name }}</Col>
+              <Col span="12">联系电话: {{ invoiceDetails.drawer_phone }}</Col>
+            </Row>
+            <Row class="row">
+              <Col span="12">联系邮箱: {{ invoiceDetails.email }}</Col>
+            </Row>
+          </div>
+        </div>
+        <div v-if="invoiceDetails.header_type === 2 && invoiceDetails.type === 1">
+          <div class="list">
+            <div class="title">发票信息</div>
+            <Row class="row">
+              <Col span="12"
+                >发票抬头: <span class="info">{{ invoiceDetails.name }}</span></Col
+              >
+              <Col span="12"
+                >企业税号: <span class="info">{{ invoiceDetails.duty_number }}</span></Col
+              >
+            </Row>
+            <Row class="row">
+              <Col span="12">发票类型: 电子普通发票</Col>
+              <Col span="12">发票抬头类型: 企业</Col>
+            </Row>
+          </div>
+          <div class="list">
+            <div class="title row">联系信息</div>
+            <Row class="row">
+              <Col span="12">真实姓名: {{ invoiceDetails.name }}</Col>
+              <Col span="12">联系电话: {{ invoiceDetails.user_phone }}</Col>
+            </Row>
+            <Row class="row">
+              <Col span="12">联系邮箱: {{ invoiceDetails.email }}</Col>
+            </Row>
+          </div>
+        </div>
+        <div v-if="invoiceDetails.header_type === 2 && invoiceDetails.type === 2">
+          <div class="list">
+            <div class="title">发票信息</div>
+            <Row class="row">
+              <Col span="12"
+                >发票抬头: <span class="info">{{ invoiceDetails.name }}</span></Col
+              >
+              <Col span="12"
+                >企业税号: <span class="info">{{ invoiceDetails.duty_number }}</span></Col
+              >
+            </Row>
+            <Row class="row">
+              <Col span="12">发票类型: 纸质专用发票</Col>
+              <Col span="12">发票抬头类型: 企业</Col>
+            </Row>
+            <Row class="row">
+              <Col span="12"
+                >开户银行: <span class="info">{{ invoiceDetails.bank }}</span></Col
+              >
+              <Col span="12"
+                >银行账号: <span class="info">{{ invoiceDetails.card_number }}</span></Col
+              >
+            </Row>
+            <Row class="row">
+              <Col span="12">企业地址: {{ invoiceDetails.address }}</Col>
+              <Col span="12">企业电话: {{ invoiceDetails.drawer_phone }}</Col>
+            </Row>
+          </div>
+          <div class="list">
+            <div class="title row">联系信息</div>
+            <Row class="row">
+              <Col span="12">真实姓名: {{ invoiceDetails.real_name }}</Col>
+              <Col span="12">联系电话: {{ invoiceDetails.user_phone }}</Col>
+            </Row>
+            <Row class="row">
+              <Col span="12">联系邮箱: {{ invoiceDetails.email }}</Col>
+            </Row>
+          </div>
+        </div>
+        <FormItem label="开票状态:" style="margin-top: 14px">
+          <RadioGroup v-model="formInline.is_invoice" @on-change="kaiInvoice(formInline.is_invoice)">
+            <Radio :label="1">已开票</Radio>
+            <Radio :label="0">未开票</Radio>
+          </RadioGroup>
+        </FormItem>
+        <FormItem label="发票编号:" v-if="formInline.is_invoice === 1">
+          <Input v-model="formInline.invoice_number" placeholder="请输入发票编号"></Input>
+        </FormItem>
+        <FormItem label="发票备注:" v-if="formInline.is_invoice === 1">
+          <Input
+            v-model="formInline.remark"
+            value="备注"
+            type="textarea"
+            :autosize="{ minRows: 2, maxRows: 5 }"
+            placeholder="请输入发票备注"
+          ></Input>
+        </FormItem>
+        <Button type="primary" @click="handleSubmit()" style="width: 100%; margin: 0 10px">确定</Button>
+      </Form>
+    </Modal>
+    <Modal v-model="orderShow" scrollable title="订单详情" footer-hide class="order_box" width="700">
+      <orderDetall :orderId="orderId" @detall="detall" v-if="orderShow"></orderDetall>
+    </Modal>
+  </div>
+</template>
+<script>
+import orderDetall from './orderDetall';
+import { orderInvoiceChart, orderInvoiceList, orderInvoiceSet } from '@/api/order';
+import { mapState } from 'vuex';
+export default {
+  name: 'invoice',
+  components: {
+    orderDetall,
+  },
+  computed: {
+    ...mapState('media', ['isMobile']),
+    labelWidth() {
+      return this.isMobile ? undefined : 75;
+    },
+    labelPosition() {
+      return this.isMobile ? 'top' : 'right';
+    },
+  },
+  data() {
+    return {
+      orderShow: false,
+      invoiceShow: false,
+      invoiceDetails: {},
+      formInline: {
+        is_invoice: 0,
+        invoice_number: '',
+        remark: '',
+      },
+      loading: false,
+      currentTab: '',
+      tablists: null,
+      timeVal: [],
+      options: {
+        shortcuts: [
+          {
+            text: '今天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()));
+              return [start, end];
+            },
+          },
+          {
+            text: '昨天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(
+                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1)),
+              );
+              end.setTime(
+                end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1)),
+              );
+              return [start, end];
+            },
+          },
+          {
+            text: '最近7天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(
+                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 6)),
+              );
+              return [start, end];
+            },
+          },
+          {
+            text: '最近30天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(
+                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 29)),
+              );
+              return [start, end];
+            },
+          },
+          {
+            text: '本月',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), 1)));
+              return [start, end];
+            },
+          },
+          {
+            text: '本年',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)));
+              return [start, end];
+            },
+          },
+        ],
+      },
+      grid: {
+        xl: 12,
+        lg: 16,
+        md: 24,
+        sm: 24,
+        xs: 24,
+      },
+      columns: [
+        {
+          title: '订单号',
+          key: 'order_id',
+          minWidth: 170,
+        },
+        // {
+        //     title: '订单类型',
+        //     key: 'pink_name',
+        //     minWidth: 150
+        // },
+        {
+          title: '订单金额',
+          slot: 'pay_price',
+          minWidth: 100,
+        },
+        {
+          title: '发票类型',
+          slot: 'type',
+          minWidth: 120,
+          filters: [
+            {
+              label: '电子普通发票',
+              value: 1,
+            },
+            {
+              label: '纸质专用发票',
+              value: 2,
+            },
+          ],
+          filterMultiple: false,
+          filterMethod(value, row) {
+            if (value === 1) {
+              return row.type === 1;
+            } else if (value === 2) {
+              return row.type === 2;
+            }
+          },
+        },
+        {
+          title: '发票抬头类型',
+          slot: 'header_type',
+          minWidth: 110,
+          filters: [
+            {
+              label: '个人',
+              value: 1,
+            },
+            {
+              label: '企业',
+              value: 2,
+            },
+          ],
+          filterMultiple: false,
+          filterMethod(value, row) {
+            if (value === 1) {
+              return row.header_type === 1;
+            } else if (value === 2) {
+              return row.header_type === 2;
+            }
+          },
+        },
+        // {
+        //     title: '支付状态',
+        //     key: 'pay_type_name',
+        //     minWidth: 90
+        // },
+        {
+          title: '下单时间',
+          key: 'add_time',
+          minWidth: 150,
+          sortable: true,
+        },
+        {
+          title: '开票状态',
+          slot: 'is_invoice',
+          minWidth: 80,
+        },
+        {
+          title: '订单状态',
+          slot: 'status',
+          minWidth: 80,
+        },
+        {
+          title: '操作',
+          slot: 'action',
+          fixed: 'right',
+          minWidth: 150,
+          align: 'center',
+        },
+      ],
+      orderList: [],
+      total: 0, // 总条数
+      orderData: {
+        page: 1, // 当前页
+        limit: 10, // 每页显示条数
+        status: '',
+        data: '',
+        real_name: '',
+        field_key: '',
+        type: '',
+      },
+      orderId: 0,
+    };
+  },
+  created() {
+    this.getTabs();
+    this.getList();
+  },
+  mounted() {},
+  methods: {
+    detall(e) {
+      this.orderShow = e;
+    },
+    orderInfo(id) {
+      this.orderId = id;
+      this.orderShow = true;
+    },
+    empty() {
+      this.formInline = {
+        is_invoice: 1,
+        invoice_number: '',
+        remark: '',
+      };
+    },
+    cancel() {
+      this.invoiceShow = false;
+      this.empty();
+    },
+    kaiInvoice(invoice) {
+      if (invoice !== 1) {
+        this.formInline.invoice_number = '';
+        this.formInline.remark = '';
+      }
+    },
+    handleSubmit() {
+      if (this.formInline.is_invoice === 1) {
+        if (this.formInline.invoice_number.trim() === '') return this.$Message.error('请填写发票编号');
+      }
+      orderInvoiceSet(this.invoiceDetails.invoice_id, this.formInline)
+        .then((res) => {
+          this.$Message.success(res.msg);
+          this.invoiceShow = false;
+          this.getList();
+          this.empty();
+          this.getTabs();
+        })
+        .catch((err) => {
+          this.$Message.error(err.msg);
+        });
+    },
+    edit(row) {
+      this.invoiceShow = true;
+      this.invoiceDetails = row;
+      this.formInline.invoice_number = row.invoice_number;
+      this.formInline.remark = row.invoice_reamrk;
+      this.formInline.is_invoice = row.is_invoice;
+    },
+    // 订单列表
+    getList() {
+      this.loading = true;
+      orderInvoiceList(this.orderData)
+        .then(async (res) => {
+          this.loading = false;
+          let data = res.data;
+          this.orderList = data.list;
+          this.total = data.count;
+        })
+        .catch((res) => {
+          this.loading = false;
+          this.$Message.error(res.msg);
+        });
+    },
+    pageChange(index) {
+      this.orderData.page = index;
+      this.getList();
+    },
+    getTabs() {
+      orderInvoiceChart(this.orderData)
+        .then((res) => {
+          this.tablists = res.data;
+        })
+        .catch((err) => {
+          this.$Message.error(err.msg);
+        });
+    },
+    // 精确搜索()
+    orderSearch() {
+      this.orderData.page = 1;
+      this.getTabs();
+      this.getList();
+    },
+    // 具体日期搜索();
+    onchangeTime(e) {
+      this.orderData.page = 1;
+      this.timeVal = e;
+      this.orderData.data = this.timeVal[0] ? this.timeVal.join('-') : '';
+      this.getList();
+      this.getTabs();
+    },
+    //订单状态搜索()
+    selectChange() {
+      this.orderData.page = 1;
+      this.getList();
+    },
+    //订单搜索()
+    onClickTab() {
+      this.orderData.page = 1;
+      this.orderData.type = this.currentTab;
+      this.getList();
+    },
+  },
+};
+</script>
+<style scoped lang="stylus">
+.order_box .list {
+  font-size: 12px;
+  color: #17233D;
+  border-bottom: 1px solid #E7EAEC;
+  margin: 0 10px;
+  padding-bottom: 22px;
+}
+
+.ivu-form-item {
+  margin-left: 10px;
+  margin-right: 10px;
+}
+
+/deep/.ivu-form-item-label {
+  text-align: left;
+  width: 83px !important;
+}
+
+/deep/.ivu-form-item-content {
+  margin-left: 83px !important;
+}
+
+.order_box .list .title {
+  color: #000000;
+  font-weight: bold;
+}
+
+.order_box .list .row {
+  margin-top: 13px;
+}
+
+.order_box .list .info {
+  color: #515A6E;
+}
+
+.tab_data >>> .ivu-form-item-content {
+  margin-left: 0 !important;
+}
+
+.table_box >>> .ivu-divider-horizontal {
+  margin-top: 0px !important;
+}
+
+.table_box >>> .ivu-form-item {
+  margin-bottom: 15px !important;
+}
+
+.tabform {
+  margin-bottom: 10px;
+}
+
+.Refresh {
+  font-size: 12px;
+  color: #1890FF;
+  cursor: pointer;
+}
+</style>

+ 188 - 0
src/pages/shop_order/invoice/orderDetall.vue

@@ -0,0 +1,188 @@
+<template>
+  <div class="order_detail" v-if="orderDetail.userInfo">
+    <div class="msg-box">
+      <div class="box-title">收货信息</div>
+      <div class="msg-wrapper">
+        <div class="msg-item">
+          <div class="item"><span>用户昵称:</span>{{ orderDetail.userInfo.nickname }}</div>
+          <div class="item"><span>收货人:</span>{{ orderDetail.orderInfo.real_name }}</div>
+        </div>
+        <div class="msg-item">
+          <div class="item"><span>联系电话:</span>{{ orderDetail.orderInfo.user_phone }}</div>
+          <div class="item"><span>收货地址:</span>{{ orderDetail.orderInfo.user_address }}</div>
+        </div>
+      </div>
+    </div>
+    <div class="msg-box" style="border: none">
+      <div class="box-title">订单信息</div>
+      <div class="msg-wrapper">
+        <div class="msg-item">
+          <div class="item"><span>订单ID:</span>{{ orderDetail.orderInfo.order_id }}</div>
+          <div class="item" style="color: red">
+            <span style="color: red">订单状态:</span>{{ orderDetail.orderInfo._status._title }}
+          </div>
+        </div>
+        <div class="msg-item">
+          <div class="item"><span>商品总数:</span>{{ orderDetail.orderInfo.total_num }}</div>
+          <div class="item">
+            <span>商品总价:</span
+            >{{ parseFloat(orderDetail.orderInfo.total_price) + parseFloat(orderDetail.orderInfo.vip_true_price || 0) }}
+          </div>
+        </div>
+        <div class="msg-item">
+          <div class="item"><span>交付邮费:</span>{{ orderDetail.orderInfo.pay_postage }}</div>
+          <div class="item"><span>优惠券金额:</span>{{ orderDetail.orderInfo.coupon_price }}</div>
+        </div>
+        <div class="msg-item">
+          <div class="item"><span>会员商品优惠:</span>{{ orderDetail.orderInfo.vip_true_price || 0.0 }}</div>
+          <div class="item"><span>积分抵扣:</span>{{ orderDetail.orderInfo.deduction_price || 0.0 }}</div>
+        </div>
+        <div class="msg-item">
+          <div class="item"><span>实际支付:</span>{{ orderDetail.orderInfo.pay_price }}</div>
+          <div class="item"><span>创建时间:</span>{{ orderDetail.orderInfo.add_time }}</div>
+        </div>
+        <div class="msg-item">
+          <div class="item"><span>支付方式:</span>{{ orderDetail.orderInfo._status._payType }}</div>
+          <div class="item"><span>推广人:</span>{{ orderDetail.userInfo.spread_name }}</div>
+        </div>
+        <div class="msg-item">
+          <div class="item"><span>商家备注:</span>{{ orderDetail.orderInfo.mark }}</div>
+        </div>
+      </div>
+    </div>
+    <div class="goods-box">
+      <Table :columns="columns1" :data="orderList">
+        <template slot-scope="{ row, index }" slot="id">
+          {{ row.productInfo.id }}
+        </template>
+        <template slot-scope="{ row, index }" slot="name">
+          <div class="product_info">
+            <img :src="row.productInfo.image" alt="" />
+            <p>{{ row.productInfo.store_name }}</p>
+          </div>
+        </template>
+        <template slot-scope="{ row, index }" slot="className">
+          {{ row.class_name }}
+        </template>
+        <template slot-scope="{ row, index }" slot="price">
+          {{ row.productInfo.price }}
+        </template>
+        <template slot-scope="{ row, index }" slot="total_num">
+          {{ row.cart_num }}
+        </template>
+      </Table>
+    </div>
+    <Spin fix v-if="spinShow"></Spin>
+  </div>
+</template>
+
+<script>
+import { orderInvoiceInfo } from '@/api/order';
+export default {
+  name: 'order_detail',
+  props: {
+    orderId: {
+      type: String | Number,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      orderDetail: {},
+      orderList: [],
+      columns1: [
+        {
+          title: '商品ID',
+          slot: 'id',
+          maxWidth: 80,
+        },
+        {
+          title: '商品名称',
+          slot: 'name',
+          minWidth: 160,
+        },
+        {
+          title: '商品分类',
+          slot: 'className',
+        },
+        {
+          title: '商品售价',
+          slot: 'price',
+        },
+        {
+          title: '商品数量',
+          slot: 'total_num',
+        },
+      ],
+      spinShow: false,
+    };
+  },
+  mounted() {
+    this.getOrderInfo();
+  },
+  methods: {
+    getOrderInfo() {
+      this.spinShow = true;
+      orderInvoiceInfo(this.orderId)
+        .then((res) => {
+          this.spinShow = false;
+          this.orderDetail = res.data;
+          this.orderList = res.data.orderInfo.cartInfo;
+        })
+        .catch((err) => {
+          this.spinShow = false;
+          this.$Message.error(err.msg);
+          this.$emit('detall', false);
+        });
+    },
+  },
+};
+</script>
+
+<style lang="stylus" scoped>
+.order_detail {
+  .msg-box {
+    border-bottom: 1px solid #E8EAED;
+
+    .box-title {
+      padding-top: 20px;
+      font-size: 16px;
+      color: #333;
+    }
+
+    .msg-wrapper {
+      margin-top: 15px;
+      padding-bottom: 10px;
+
+      .msg-item {
+        display: flex;
+
+        .item {
+          flex: 1;
+          margin-bottom: 15px;
+
+          span {
+            color: #333;
+          }
+        }
+      }
+    }
+
+    &:first-child .box-title {
+      padding-top: 0;
+    }
+  }
+
+  .product_info {
+    display: flex;
+    align-items: center;
+
+    img {
+      width: 36px;
+      height: 36px;
+      border-radius: 4px;
+      margin-right: 10px;
+    }
+  }
+}
+</style>

+ 319 - 0
src/pages/shop_order/offline/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div>
+    <Card :bordered="false" dis-hover class="ivu-mt">
+      <Form
+        ref="pagination"
+        :model="pagination"
+        :label-width="labelWidth"
+        :label-position="labelPosition"
+        @submit.native.prevent
+      >
+        <Row type="flex" :gutter="24">
+          <Col v-bind="grid" class="ivu-text-left">
+            <FormItem label="创建时间:">
+              <DatePicker
+                :editable="false"
+                @on-change="onchangeTime"
+                :value="timeVal"
+                format="yyyy/MM/dd"
+                type="datetimerange"
+                placement="bottom-start"
+                placeholder="请选择时间"
+                style="width: 300px"
+                class="mr20"
+                :options="options"
+              ></DatePicker>
+            </FormItem>
+          </Col>
+          <Col v-bind="grid">
+            <FormItem label="订单号:" label-for="title">
+              <Input
+                search
+                enter-button
+                v-model="pagination.order_id"
+                placeholder="请输入订单号"
+                @on-search="orderSearch"
+              />
+            </FormItem>
+          </Col>
+          <Col v-bind="grid">
+            <FormItem label="用户名:" label-for="title">
+              <Input search enter-button v-model="pagination.name" placeholder="请输入用户名" @on-search="nameSearch" />
+            </FormItem>
+          </Col>
+        </Row>
+        <Row type="flex">
+          <Col v-bind="grid">
+            <Button type="primary" @click="qrcodeShow">查看收款二维码</Button>
+          </Col>
+        </Row>
+      </Form>
+      <Table
+        :columns="thead"
+        :data="tbody"
+        ref="table"
+        class="mt25"
+        :loading="loading"
+        highlight-row
+        no-userFrom-text="暂无数据"
+        no-filtered-userFrom-text="暂无筛选结果"
+      >
+      </Table>
+      <div class="acea-row row-right page">
+        <Page
+          :total="total"
+          :current="pagination.page"
+          show-elevator
+          show-total
+          @on-change="pageChange"
+          :page-size="pagination.limit"
+        />
+      </div>
+    </Card>
+    <Modal v-model="modal" title="收款码" footer-hide>
+      <div>
+        <!--<div class="acea-row row-around mb10">-->
+        <!--<RadioGroup v-model="animal" @on-change="onchangeCode(animal)" style="width: 180px;">-->
+        <!--<Radio :label="0">二维码</Radio>-->
+        <!--<Radio :label="1">收款码</Radio>-->
+        <!--</RadioGroup>-->
+        <!--<div style="width: 180px;"></div>-->
+        <!--</div>-->
+        <div v-viewer class="acea-row row-around code">
+          <Spin fix v-if="spin"></Spin>
+          <div class="acea-row row-column-around row-between-wrapper">
+            <div class="QRpic">
+              <img v-lazy="qrcode && qrcode.wechat" />
+            </div>
+            <span class="mt10">{{ animal ? '公众号收款码' : '公众号二维码' }}</span>
+          </div>
+          <div class="acea-row row-column-around row-between-wrapper">
+            <div class="QRpic">
+              <img v-lazy="qrcode && qrcode.routine" />
+            </div>
+            <span class="mt10">{{ animal ? '小程序收款码' : '小程序二维码' }}</span>
+          </div>
+        </div>
+      </div>
+    </Modal>
+  </div>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import { orderScanList, orderOfflineScan } from '@/api/order';
+
+export default {
+  data() {
+    return {
+      grid: {
+        xl: 7,
+        lg: 7,
+        md: 12,
+        sm: 24,
+        xs: 24,
+      },
+      thead: [
+        {
+          title: '订单号',
+          key: 'order_id',
+        },
+        // {
+        //     title: "订单类型",
+        //     render: (h, params) => {
+        //         return h("span", "线下支付");
+        //     }
+        // },
+        {
+          title: '用户信息',
+          key: 'nickname',
+        },
+        {
+          title: '实际支付',
+          key: 'pay_price',
+        },
+        {
+          title: '优惠价格',
+          key: 'true_price',
+        },
+        // {
+        //     title: "订单状态",
+        //     render: (h, params) => {
+        //         return h("span", "已支付");
+        //     }
+        // },
+        {
+          title: '支付时间',
+          key: 'pay_time',
+        },
+      ],
+      tbody: [],
+      loading: false,
+      total: 0,
+      animal: 0, // 隐藏装饰边框
+      pagination: {
+        page: 1,
+        limit: 30,
+        order_id: '',
+        add_time: '',
+      },
+      options: {
+        shortcuts: [
+          {
+            text: '今天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()));
+              return [start, end];
+            },
+          },
+          {
+            text: '昨天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(
+                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1)),
+              );
+              end.setTime(
+                end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1)),
+              );
+              return [start, end];
+            },
+          },
+          {
+            text: '最近7天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(
+                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 6)),
+              );
+              return [start, end];
+            },
+          },
+          {
+            text: '最近30天',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(
+                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 29)),
+              );
+              return [start, end];
+            },
+          },
+          {
+            text: '本月',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), 1)));
+              return [start, end];
+            },
+          },
+          {
+            text: '本年',
+            value() {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)));
+              return [start, end];
+            },
+          },
+        ],
+      },
+      timeVal: [],
+      modal: false,
+      qrcode: null,
+      name: '',
+      spin: false,
+    };
+  },
+  computed: {
+    ...mapState('media', ['isMobile']),
+    labelWidth() {
+      return this.isMobile ? undefined : 75;
+    },
+    labelPosition() {
+      return this.isMobile ? 'top' : 'right';
+    },
+  },
+  created() {
+    this.getOrderList();
+  },
+  methods: {
+    onchangeCode(e) {
+      this.animal = e;
+      this.qrcodeShow();
+    },
+    // 具体日期搜索();
+    onchangeTime(e) {
+      this.pagination.page = 1;
+      this.timeVal = e;
+      this.pagination.add_time = this.timeVal[0] ? this.timeVal.join('-') : '';
+      this.getOrderList();
+    },
+    // 订单列表
+    getOrderList() {
+      this.loading = true;
+      orderScanList(this.pagination)
+        .then((res) => {
+          this.loading = false;
+          const { count, list } = res.data;
+          this.total = count;
+          this.tbody = list;
+        })
+        .catch((err) => {
+          this.loading = false;
+          this.$Message.error(err.msg);
+        });
+    },
+    // 分页
+    pageChange(index) {
+      this.pagination.page = index;
+      this.getOrderList();
+    },
+    nameSearch() {
+      this.pagination.page = 1;
+      this.getOrderList();
+    },
+    // 订单搜索
+    orderSearch() {
+      this.pagination.page = 1;
+      this.getOrderList();
+    },
+    // 查看二维码
+    qrcodeShow() {
+      this.modal = true;
+
+      this.spin = true;
+      orderOfflineScan({ type: this.animal })
+        .then((res) => {
+          this.spin = false;
+          this.qrcode = res.data;
+        })
+        .catch((err) => {
+          this.spin = false;
+          this.$Message.error(err.msg);
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.code {
+  position: relative;
+}
+.QRpic {
+  width: 180px;
+  // height: 259px;
+
+  img {
+    width: 100%;
+    height: 100%;
+  }
+}
+</style>

+ 54 - 0
src/pages/shop_order/orderList/components/tableExpand.vue

@@ -0,0 +1,54 @@
+<template>
+	<div class="expand">
+		<Row class="expand-row">
+			<Col span="6">
+			<span class="expand-key">商品总价:</span>
+			<span class="expand-value" v-text="row.total_price"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">下单时间:</span>
+			<span class="expand-value" v-text="row.add_time"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">推广人:</span>
+			<span class="expand-value" v-text="row.spread_nickname ? row.spread_nickname : '无'"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">事业部:</span>
+			<span class="expand-value" v-text="row.division_name ? row.division_name : '无'"></span>
+			</Col>
+		</Row>
+		<Row>
+			<Col span="6">
+			<span class="expand-key">用户备注:</span>
+			<span class="expand-value" v-text="row.mark ? row.mark : '无'"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">商家备注:</span>
+			<span class="expand-value" v-text="row.remark ? row.remark : '无'"></span>
+			</Col>
+			<Col span="6">
+			<span class="expand-key">核销码:</span>
+			<span class="expand-value" v-text="row.verify_code ? row.verify_code : '无'"></span>
+			</Col>
+		</Row>
+	</div>
+</template>
+<script>
+	export default {
+		name: 'table-expand',
+		props: {
+			row: Object,
+		},
+	};
+</script>
+
+<style scoped>
+	.expand {
+		padding-left: 50px;
+	}
+
+	.expand-row {
+		margin-bottom: 16px;
+	}
+</style>

+ 523 - 0
src/pages/shop_order/orderList/components/tableFrom.vue

@@ -0,0 +1,523 @@
+<template>
+	<div class="table_box">
+		<Form ref="orderData" :model="orderData" :label-width="80" label-position="right" class="tabform"
+			@submit.native.prevent>
+			<Row :gutter="24" type="flex" justify="end">
+				<Col span="24" class="ivu-text-left">
+				<FormItem label="订单状态:">
+					<RadioGroup v-model="orderData.status" type="button" @on-change="selectChange2(orderData.status)">
+						<Radio label="">全部</Radio>
+						<Radio label="0">未支付</Radio>
+						<Radio label="1">未发货</Radio>
+						<Radio label="2">待收货</Radio>
+						<Radio label="3">待评价</Radio>
+						<Radio label="4">交易完成</Radio>
+						<Radio label="5">待核销</Radio>
+						<Radio label="6">已核销</Radio>
+						<!--                                <Radio label="-1">退款中 {{  '(' +orderChartType.refunding?orderChartType.refunding:0+ ')' }}</Radio>-->
+						<!--                                <Radio label="-2">已退款 {{  '(' +orderChartType.refund?orderChartType.refund:0+ ')' }}</Radio>-->
+						<Radio label="-2">已退款</Radio>
+						<Radio label="-4">已删除</Radio>
+					</RadioGroup>
+				</FormItem>
+				</Col>
+				<Col span="24" class="ivu-text-left">
+				<FormItem label="支付方式:">
+					<RadioGroup v-model="orderData.pay_type" type="button" @on-change="userSearchs">
+						<Radio v-for="item in payList" :label="item.val" :key="item.id">{{ item.label }}</Radio>
+					</RadioGroup>
+				</FormItem>
+				</Col>
+				<Col span="8" class="ivu-text-left">
+				<FormItem label="创建时间:">
+					<DatePicker :editable="false" @on-change="onchangeTime" :value="timeVal"
+						format="yyyy/MM/dd HH:mm:ss" type="datetimerange" placement="bottom-start" placeholder="请选择创建时间"
+						style="width: 300px" class="mr20" :options="options"></DatePicker>
+				</FormItem>
+				</Col>
+				<Col span="16">
+				<Col span="12" class="mr">
+				<FormItem label="搜索:" prop="real_name" label-for="real_name">
+					<Input v-model="orderData.real_name" search enter-button placeholder="请输入" element-id="name"
+						@on-search="orderSearch(orderData.real_name)">
+					<Select v-model="orderData.field_key" slot="prepend" style="width: 80px">
+						<Option value="all">全部</Option>
+						<Option value="order_id">订单号</Option>
+						<Option value="uid">UID</Option>
+						<Option value="real_name">用户姓名</Option>
+						<Option value="user_phone">用户电话</Option>
+						<Option value="title">商品名称(模糊)</Option>
+					</Select>
+					</Input>
+				</FormItem>
+				</Col>
+				<!--<Col v-bind="grid">-->
+				<!--<Button class="mr">导出</Button>-->
+				<!--<span class="Refresh" @click="Refresh">刷新</span><Icon type="ios-refresh" />-->
+				<!--</Col>-->
+				</Col>
+				<Col span="24">
+				<div class="ml20">
+					<Button v-auth="['order-dels']" class="mr10" type="primary" @click="delAll">批量删除订单</Button>
+					<Button v-auth="['order-write']" type="success" class="mr10 greens" size="default"
+						@click="writeOff">
+						<Icon type="md-list"></Icon>
+						订单核销
+					</Button>
+					<Button v-auth="['export-storeOrder']" class="export" icon="ios-share-outline"
+						@click="exportList">导出</Button>
+				</div>
+				</Col>
+			</Row>
+		</Form>
+		<!--订单核销模态框-->
+		<Modal v-model="modals2" title="订单核销" class="paymentFooter" :closable="false" width="400"
+			@on-visible-change="changeModal">
+			<Form ref="writeOffFrom" :model="writeOffFrom" :rules="writeOffRules" label-position="right" class="tabform"
+				@submit.native.prevent>
+				<FormItem prop="code" label-for="code">
+					<Input style="width: 100%" type="text" placeholder="请输入12位核销码" v-model.number="writeOffFrom.code" />
+				</FormItem>
+			</Form>
+			<div slot="footer">
+				<Button type="primary" @click="ok('writeOffFrom')">立即核销</Button>
+				<Button @click="del('writeOffFrom')">取消</Button>
+			</div>
+		</Modal>
+	</div>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		putWrite,
+		storeOrderApi
+	} from '@/api/shopOrder';
+	import {
+		exportOrderList
+	} from '@/api/export';
+	export default {
+		name: 'table_from',
+		data() {
+			const codeNum = (rule, value, callback) => {
+				if (!value) {
+					return callback(new Error('请填写核销码'));
+				}
+				// 模拟异步验证效果
+				if (!Number.isInteger(value)) {
+					callback(new Error('请填写12位数字'));
+				} else {
+					const reg = /\b\d{12}\b/;
+					if (!reg.test(value)) {
+						callback(new Error('请填写12位数字'));
+					} else {
+						callback();
+					}
+				}
+			};
+			return {
+				fromList: {
+					title: '选择时间',
+					custom: true,
+					fromTxt: [{
+							text: '全部',
+							val: ''
+						},
+						{
+							text: '今天',
+							val: 'today'
+						},
+						{
+							text: '昨天',
+							val: 'yesterday'
+						},
+						{
+							text: '最近7天',
+							val: 'lately7'
+						},
+						{
+							text: '最近30天',
+							val: 'lately30'
+						},
+						{
+							text: '本月',
+							val: 'month'
+						},
+						{
+							text: '本年',
+							val: 'year'
+						},
+					],
+				},
+				currentTab: '',
+				grid: {
+					xl: 8,
+					lg: 8,
+					md: 8,
+					sm: 24,
+					xs: 24,
+				},
+				// 搜索条件
+				orderData: {
+					status: '',
+					data: '',
+					real_name: '',
+					field_key: 'all',
+					pay_type: '',
+					type: '',
+				},
+				modalTitleSs: '',
+				statusType: '',
+				time: '',
+				value2: [],
+				writeOffRules: {
+					code: [{
+						validator: codeNum,
+						trigger: 'blur',
+						required: true
+					}],
+				},
+				writeOffFrom: {
+					code: '',
+					confirm: 0,
+				},
+				modals2: false,
+				timeVal: [],
+				options: {
+					shortcuts: [{
+							text: '今天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date()
+									.getDate()));
+								return [start, end];
+							},
+						},
+						{
+							text: '昨天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 1)),
+								);
+								end.setTime(
+									end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate()) - 1),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '最近7天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 6)),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '最近30天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 29)),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '本月',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+									1)));
+								return [start, end];
+							},
+						},
+						{
+							text: '本年',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)));
+								return [start, end];
+							},
+						},
+					],
+				},
+				payList: [{
+						label: '全部',
+						val: ''
+					},
+					{
+						label: '微信支付',
+						val: '1'
+					},
+					{
+						label: '支付宝支付',
+						val: '4'
+					},
+					{
+						label: '余额支付',
+						val: '2'
+					},
+					{
+						label: '线下支付',
+						val: '3'
+					},
+				],
+			};
+		},
+		computed: {
+			...mapState('shopOrder', ['orderChartType', 'isDels', 'delIdList', 'orderType']),
+			today() {
+				const end = new Date();
+				const start = new Date();
+				var datetimeStart = start.getFullYear() + '/' + (start.getMonth() + 1) + '/' + start.getDate();
+				var datetimeEnd = end.getFullYear() + '/' + (end.getMonth() + 1) + '/' + end.getDate();
+				return [datetimeStart, datetimeEnd];
+			},
+		},
+		watch: {
+			$route() {
+				if (this.$route.fullPath === this.$routeProStr + '/order/list?status=1') {
+					this.getPath();
+				}
+			},
+		},
+		created() {
+			// this.timeVal = this.today;
+			// this.orderData.data = this.timeVal.join('-');
+			if (this.$route.fullPath === this.$routeProStr + '/order/list?status=1') {
+				this.getPath();
+			}
+		},
+		methods: {
+			...mapMutations('shopOrder', ['getOrderStatus', 'getOrderType', 'getOrderTime', 'getOrderNum', 'getfieldKey']),
+			getPath() {
+				this.orderData.status = this.$route.query.status.toString();
+				this.getOrderStatus(this.orderData.status);
+				this.$emit('getList', 1);
+			},
+			changeModal(status) {
+				if (!status) this.writeOffFrom.code = '';
+			},
+			// 导出
+			async exportList() {
+				this.orderData.type = this.orderType === 0 ? '' : this.orderType;
+				let [th, filekey, data, fileName] = [
+					[],
+					[],
+					[], ''
+				];
+				let excelData = JSON.parse(JSON.stringify(this.orderData));
+				excelData.page = 1;
+				excelData.limit = 200;
+				excelData.ids = this.delIdList;
+				for (let i = 0; i < excelData.page + 1; i++) {
+					let lebData = await this.getExcelData(excelData);
+					if (!fileName) fileName = lebData.filename;
+					if (!filekey.length) {
+						filekey = lebData.fileKey;
+					}
+					if (!th.length) th = lebData.header;
+					if (lebData.export.length) {
+						data = data.concat(lebData.export);
+						excelData.page++;
+					} else {
+						this.$exportExcel(th, filekey, fileName, data);
+						return;
+					}
+				}
+			},
+			getExcelData(excelData) {
+				return new Promise((resolve, reject) => {
+					exportOrderList(excelData).then((res) => {
+						resolve(res.data);
+					});
+				});
+			},
+			// 具体日期
+			onchangeTime(e) {
+				this.timeVal = e;
+				this.orderData.data = this.timeVal[0] ? this.timeVal.join('-') : '';
+				this.$store.dispatch('shopOrder/getOrderTabs', {
+					data: this.orderData.data
+				});
+				this.getOrderTime(this.orderData.data);
+				this.$emit('getList', 1);
+			},
+			// 选择时间
+			selectChange(tab) {
+				this.$store.dispatch('shopOrder/getOrderTabs', {
+					data: tab
+				});
+				this.orderData.data = tab;
+				this.getOrderTime(this.orderData.data);
+				this.timeVal = [];
+				this.$emit('getList');
+			},
+			// 订单选择状态
+			selectChange2(tab) {
+				this.getOrderStatus(tab);
+				this.$emit('getList', 1);
+			},
+			userSearchs(type) {
+				this.getOrderType(type);
+				this.$emit('getList', 1);
+			},
+			// 时间状态
+			timeChange(time) {
+				this.getOrderTime(time);
+				this.$emit('getList');
+			},
+			// 订单号搜索
+			orderSearch(num) {
+				this.getOrderNum(num);
+				this.getfieldKey(this.orderData.field_key);
+				this.$emit('getList', 1);
+			},
+			// 点击订单类型
+			onClickTab() {
+				this.$emit('onChangeType', this.currentTab);
+			},
+			// 批量删除
+			delAll() {
+				if (this.delIdList.length === 0) {
+					this.$Message.error('请先选择删除的订单!');
+				} else {
+					if (this.isDels) {
+						let idss = {
+							ids: this.delIdList,
+						};
+						let delfromData = {
+							title: '删除订单',
+							url: `mer/order/dels`,
+							method: 'post',
+							ids: idss,
+						};
+						this.$modalSure(delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('getList');
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+					} else {
+						const title = '错误!';
+						const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
+						this.$Modal.error({
+							title: title,
+							content: content,
+						});
+					}
+				}
+			},
+			// 订单核销
+			writeOff() {
+				this.modals2 = true;
+			},
+			// 验证
+			search(name) {
+				this.$refs[name].validate((valid) => {
+					if (valid) {
+						this.writeOffFrom.confirm = 0;
+						putWrite(this.writeOffFrom)
+							.then(async (res) => {
+								if (res.status === 200) {
+									this.$Message.success(res.msg);
+									// this.modals2 = false
+									// this.$refs[name].resetFields()
+									// this.$emit('getList')
+								} else {
+									this.$Message.error(res.msg);
+								}
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+					} else {
+						this.$Message.error('请填写正确的核销码');
+					}
+				});
+			},
+			// 订单核销
+			ok(name) {
+				if (!this.writeOffFrom.code) {
+					this.$Message.warning('请先验证订单!');
+				} else {
+					this.writeOffFrom.confirm = 1;
+					putWrite(this.writeOffFrom)
+						.then(async (res) => {
+							if (res.status === 200) {
+								this.$Message.success(res.msg);
+								this.modals2 = false;
+								this.$refs[name].resetFields();
+								this.$emit('getList', 1);
+							} else {
+								this.$Message.error(res.msg);
+							}
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				}
+			},
+			del(name) {
+				this.modals2 = false;
+				this.writeOffFrom.code = '';
+				this.$refs[name].resetFields();
+			},
+			handleSubmit() {
+				this.$emit('on-submit', this.data);
+			},
+			// 刷新
+			Refresh() {
+				this.$emit('getList');
+			},
+			//
+			handleReset() {
+				this.$refs.form.resetFields();
+				this.$emit('on-reset');
+			},
+		},
+	};
+</script>
+
+<style scoped lang="stylus">
+	.tab_data>>>.ivu-form-item-content {
+		margin-left: 0 !important;
+	}
+
+	.table_box>>>.ivu-divider-horizontal {
+		margin-top: 0px !important;
+	}
+
+	.table_box>>>.ivu-form-item {
+		margin-bottom: 15px !important;
+	}
+
+	.tabform {
+		margin-bottom: 10px;
+	}
+
+	.Refresh {
+		font-size: 12px;
+		color: #1890FF;
+		cursor: pointer;
+	}
+</style>

+ 717 - 0
src/pages/shop_order/orderList/components/tableList.vue

@@ -0,0 +1,717 @@
+<template>
+	<div>
+		<Table :columns="columns" :data="orderList" ref="table" :loading="loading" highlight-row no-data-text="暂无数据"
+			no-filtered-data-text="暂无筛选结果" @on-select="handleSelectRow" @on-select-cancel="handleCancelRow"
+			@on-select-all="handleSelectAll" @on-select-all-cancel="handleSelectAll" class="orderData mt25">
+			<template slot-scope="{ row, index }" slot="order_id">
+				<div>{{ row.order_id }}</div>
+				<div class="pink_name">{{ row.pink_name }}</div>
+				<span v-show="row.is_del === 1" style="color: #ed4014; display: block">用户已删除</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="nickname">
+				<span class="nickname">{{ row.nickname }}</span> |
+				<span class="uid">{{ row.uid }}</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="pay_price">
+				<span>{{ row.paid ? row.pay_price : '未支付' }}</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="info">
+				<div class="tabBox" v-for="(val, i) in row._info" :key="i">
+					<div class="tabBox_img" v-viewer>
+						<img v-lazy="
+                val.cart_info.productInfo.attrInfo
+                  ? val.cart_info.productInfo.attrInfo.image
+                  : val.cart_info.productInfo.image
+              " />
+					</div>
+					<span class="tabBox_tit">{{ val.cart_info.productInfo.store_name + ' | '
+            }}{{ val.cart_info.productInfo.attrInfo ? val.cart_info.productInfo.attrInfo.suk : '' }}</span>
+					<span
+						class="tabBox_pice">{{ '¥' + val.cart_info.truePrice + ' x ' + val.cart_info.cart_num }}</span>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="statusName">
+				<div v-html="row.status_name.status_name" class="pt5"></div>
+				<div v-if="!row.is_all_refund && row.refund.length" class="trip">部分退款中</div>
+				<div v-if="row.refund_status == 0 && row.is_all_refund && row.refund.length && row.refund_type != 6"
+					class="trip">
+					退款中
+				</div>
+				<div class="img">
+					<div v-viewer v-if="row.status_name.pics" class="pictrue"
+						v-for="(item, index) in row.status_name.pics || []" :key="index">
+						<img v-lazy="item" :src="item" />
+					</div>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="action">
+				<a @click="edit(row)" v-if="row._status === 1 && row.is_del !== 1">编辑</a>
+				<a @click="sendOrder(row)" v-if="
+            (row.status === 4 || row._status === 2 || row._status === 8) &&
+            row.shipping_type === 1 &&
+            (row.pinkStatus === null || row.pinkStatus === 2) &&
+            row.is_del !== 1
+          ">发送货</a>
+				<a @click="delivery(row)" v-if="row._status === 4 && !row.split.length">配送信息</a>
+				<a @click="bindWrite(row)"
+					v-if="row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0">立即核销</a>
+				<Divider type="vertical"
+					v-if="(row._status === 8 || row.status === 0 || row.status === 4) && row.split.length && row.is_del !== 1" />
+				<a @click="splitOrderDetail(row)" v-if="row.split.length && row.is_del !== 1">查看子订单</a>
+				<Divider type="vertical" v-if="
+            (row._status === 2 && row.shipping_type === 1 && row.pinkStatus === 2) ||
+            (row.split.length && row.is_del !== 1)
+          " />
+				<Divider type="vertical" v-if="
+            row.refund_type !== 4 &&
+            row.refund_type !== 5 &&
+            (row._status === 1 ||
+              row._status === 3 ||
+              (row._status === 2 && !row.pinkStatus) ||
+              row._status === 4 ||
+              (row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0)) &&
+            row.is_del !== 1
+          " />
+				<template>
+					<Dropdown @on-click="changeMenu(row, $event)" :transfer="true">
+						<a href="javascript:void(0)">更多
+							<Icon type="ios-arrow-down"></Icon>
+						</a>
+						<DropdownMenu slot="list">
+							<DropdownItem name="1" ref="ones"
+								v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline' && row.is_del !== 1">
+								确认付款</DropdownItem>
+							<DropdownItem name="2">订单详情</DropdownItem>
+							<DropdownItem name="3">订单记录</DropdownItem>
+							<DropdownItem name="11" v-show="row._status >= 3 && row.express_dump">电子面单打印</DropdownItem>
+							<DropdownItem name="10" v-show="row._status >= 2">小票打印</DropdownItem>
+							<DropdownItem name="4" v-show="
+                  row._status !== 1 ||
+                  (row._status === 3 && row.use_integral > 0 && row.use_integral >= row.back_integral)
+                ">订单备注</DropdownItem>
+							<!-- <DropdownItem
+                name="5"
+                v-show="
+                  row._status !== 1 &&
+                  (parseFloat(row.pay_price) > parseFloat(row.refund_price) ||
+                    (row.pay_price == 0 &&
+                      [0, 1].indexOf(row.refund_status) !== -1))
+                "
+                >立即退款</DropdownItem
+              > -->
+							<!--                            <DropdownItem name="6"  v-show='row._status !==1 && (row.use_integral > 0 && row.use_integral >= row.back_integral) '>退积分</DropdownItem>-->
+							<!--                            <DropdownItem name="7"  v-show='row._status === 3'>不退款</DropdownItem>-->
+							<DropdownItem name="8" v-show="row._status === 4">已收货</DropdownItem>
+							<DropdownItem name="9">删除订单</DropdownItem>
+							<DropdownItem name="12" v-show="row.kuaidi_label">快递面单打印</DropdownItem>
+						</DropdownMenu>
+					</Dropdown>
+				</template>
+			</template>
+		</Table>
+		<div class="acea-row row-right page">
+			<Page :total="page.total" :current="page.pageNum" show-elevator show-total @on-change="pageChange"
+				:page-size="page.pageSize" @on-page-size-change="limitChange" />
+		</div>
+		<!-- 编辑 退款 退积分 不退款-->
+		<edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
+		<!-- 详情 -->
+		<details-from ref="details" :orderDatalist="orderDatalist" :orderId="orderId"></details-from>
+		<!-- 备注 -->
+		<order-remark ref="remarks" :orderId="orderId" @submitFail="submitFail"></order-remark>
+		<!-- 记录 -->
+		<order-record ref="record"></order-record>
+		<!-- 发送货 -->
+		<order-send ref="send" :orderId="orderId" :status="status" :pay_type="pay_type" :virtual_type="virtual_type"
+			@submitFail="submitFail" @clearId="
+        () => {
+          orderId = 0;
+        }
+      "></order-send>
+	</div>
+</template>
+
+<script>
+	import expandRow from './tableExpand.vue';
+	import printJS from 'print-js';
+	import {
+		orderList,
+		getOrdeDatas,
+		getDataInfo,
+		getRefundFrom,
+		getnoRefund,
+		refundIntegral,
+		getDistribution,
+		writeUpdate,
+	} from '@/api/shopOrder';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import editFrom from '../../../../components/from/from';
+	import detailsFrom from '../handle/orderDetails';
+	import orderRemark from '../handle/orderRemark';
+	import orderRecord from '../handle/orderRecord';
+	import orderSend from '../handle/orderSend';
+
+	export default {
+		name: 'table_list',
+		components: {
+			expandRow,
+			editFrom,
+			detailsFrom,
+			orderRemark,
+			orderRecord,
+			orderSend,
+		},
+		data() {
+			return {
+				delfromData: {},
+				modal: false,
+				orderList: [],
+				orderCards: [],
+				loading: false,
+				orderId: 0,
+				total_num: 0,
+				virtual_type: 0,
+				status: 0,
+				pay_type: '',
+				columns: [{
+						type: 'expand',
+						width: 30,
+						render: (h, params) => {
+							return h(expandRow, {
+								props: {
+									row: params.row,
+								},
+							});
+						},
+					},
+					{
+						type: 'selection',
+						width: 40,
+						align: 'center',
+					},
+					{
+						title: '订单号 | 类型',
+						align: 'center',
+						slot: 'order_id',
+						width: 200,
+					},
+					{
+						title: '用户昵称 | ID',
+						slot: 'nickname',
+						align: 'center',
+						width: 150,
+					},
+					{
+						title: '商品信息',
+						slot: 'info',
+						minWidth: 330,
+					},
+					{
+						title: '实际支付',
+						slot: 'pay_price',
+						align: 'center',
+						width: 100,
+					},
+					{
+						title: '支付方式',
+						key: 'pay_type_name',
+						width: 80,
+					},
+					{
+						title: '支付时间',
+						key: '_pay_time',
+						align: 'center',
+						minWidth: 75,
+						maxWidth: 160,
+					},
+					{
+						title: '订单状态',
+						key: 'statusName',
+						slot: 'statusName',
+						align: 'center',
+						width: 100,
+					},
+					{
+						title: '操作',
+						slot: 'action',
+						fixed: 'right',
+						width: 170,
+						align: 'center',
+					},
+				],
+				page: {
+					total: 0, // 总条数
+					pageNum: 1, // 当前页
+					pageSize: 10, // 每页显示条数
+				},
+				data: [],
+				FromData: null,
+				orderDatalist: null,
+				// modalTitleSs: '',
+				selectedIds: new Set(), //选中合并项的id
+			};
+		},
+		computed: {
+			...mapState('shopOrder', ['orderPayType', 'orderStatus', 'orderTime', 'orderNum', 'fieldKey', 'orderType']),
+		},
+		mounted() {},
+		created() {
+			this.getList();
+		},
+		watch: {
+			orderType: function() {
+				this.page.pageNum = 1;
+				this.getList();
+			},
+		},
+		methods: {
+			...mapMutations('shopOrder', ['getIsDel', 'getisDelIdListl']),
+			// 操作
+			changeMenu(row, name) {
+				this.orderId = row.id;
+				switch (name) {
+					case '1':
+						this.delfromData = {
+							title: '修改立即支付',
+							url: `mer/order/pay_offline/${row.id}`,
+							method: 'post',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改立即支付';
+						break;
+					case '2':
+						this.getData(row.id);
+						break;
+					case '3':
+						this.$refs.record.modals = true;
+						this.$refs.record.getList(row.id);
+						break;
+					case '4':
+						this.$refs.remarks.modals = true;
+						this.$refs.remarks.formValidate.remark = row.remark;
+						break;
+					case '5':
+						this.getRefundData(row.id);
+						break;
+					case '6':
+						this.getRefundIntegral(row.id);
+						break;
+					case '7':
+						this.getNoRefundData(row.id);
+						break;
+					case '8':
+						this.delfromData = {
+							title: '修改确认收货',
+							url: `mer/order/take/${row.id}`,
+							method: 'put',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改确认收货';
+						break;
+					case '10':
+						this.delfromData = {
+							title: '立即打印订单',
+							info: '您确认打印此订单吗?',
+							url: `mer/order/print/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					case '11':
+						this.delfromData = {
+							title: '立即打印电子面单',
+							info: '您确认打印此电子面单吗?',
+							url: `mer/order/order_dump/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					case '12':
+						this.printImg(row.kuaidi_label);
+						break;
+					default:
+						this.delfromData = {
+							title: '删除订单',
+							url: `mer/order/del/${row.id}`,
+							method: 'DELETE',
+							ids: '',
+						};
+						// this.modalTitleSs = '删除订单';
+						this.delOrder(row, this.delfromData);
+				}
+			},
+			printImg(url) {
+				printJS({
+					printable: url,
+					type: 'image',
+					documentTitle: '快递信息',
+					style: `img{
+          width: 100%;
+          height: 476px;
+        }`,
+				});
+			},
+			// 立即支付 /确认收货//删除单条订单
+			submitModel() {
+				this.getList();
+			},
+			pageChange(index) {
+				this.page.pageNum = index;
+				this.getList();
+			},
+			limitChange(limit) {
+				this.page.pageSize = limit;
+				this.getList();
+			},
+			// 订单列表
+			getList(res) {
+				this.page.pageNum = res === 1 ? 1 : this.page.pageNum;
+				this.loading = true;
+				orderList({
+						page: this.page.pageNum,
+						limit: this.page.pageSize,
+						status: this.orderStatus,
+						pay_type: this.orderPayType,
+						data: this.orderTime,
+						real_name: this.orderNum,
+						field_key: this.fieldKey,
+						type: this.orderType === 0 ? '' : this.orderType,
+					})
+					.then(async (res) => {
+						let data = res.data;
+						this.orderList = data.data;
+						this.orderCards = data.stat;
+						this.page.total = data.count;
+						this.$nextTick(() => {
+							//确保dom加载完毕
+							this.setChecked();
+						});
+						this.$emit('on-changeCards', data.stat);
+						this.loading = false;
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			// 全选
+			// onSelectTab (selection) {
+			//     let isDel = selection.some(item => {
+			//         return item.is_del === 1
+			//     });
+			//     this.getIsDel(isDel);
+			//     this.getisDelIdListl(selection);
+			// },
+			//全选和取消全选时触发
+			handleSelectAll(selection) {
+				if (selection.length === 0) {
+					//获取table的数据;
+					let data = this.$refs.table.data;
+					data.forEach((item) => {
+						if (this.selectedIds.has(item.id)) {
+							this.selectedIds.delete(item.id);
+						}
+					});
+				} else {
+					selection.forEach((item) => {
+						this.selectedIds.add(item.id);
+					});
+				}
+				this.isDel(selection);
+				this.$nextTick(() => {
+					//确保dom加载完毕
+					this.setChecked();
+				});
+			},
+			//  选中某一行
+			handleSelectRow(selection, row) {
+				this.isDel(selection);
+				this.selectedIds.add(row.id);
+				this.$nextTick(() => {
+					//确保dom加载完毕
+					this.setChecked();
+				});
+			},
+			//  取消某一行
+			handleCancelRow(selection, row) {
+				this.isDel(selection);
+				this.selectedIds.delete(row.id);
+				this.$nextTick(() => {
+					//确保dom加载完毕
+					this.setChecked();
+				});
+			},
+			setChecked() {
+				//将new Set()转化为数组
+				let ids = [...this.selectedIds];
+				this.getisDelIdListl(ids);
+				// 找到绑定的table的ref对应的dom,找到table的objData对象,objData保存的是当前页的数据
+				let objData = this.$refs.table.objData;
+				for (let index in objData) {
+					if (this.selectedIds.has(objData[index].id)) {
+						objData[index]._isChecked = true;
+					}
+				}
+			},
+			isDel(selection) {
+				if (selection.findIndex((target) => target.is_del === 0) == -1) {
+					this.getIsDel(1);
+				} else {
+					this.getIsDel(0);
+				}
+			},
+			// 编辑
+			edit(row) {
+				this.getOrderData(row.id);
+			},
+			// 删除单条订单
+			delOrder(row, data) {
+				if (row.is_del === 1) {
+					this.$modalSure(data)
+						.then((res) => {
+							this.$Message.success(res.msg);
+							this.getList();
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					const title = '错误!';
+					const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
+					this.$Modal.error({
+						title: title,
+						content: content,
+					});
+				}
+			},
+			splitOrderDetail(row) {
+				this.$router.push({
+					path: 'split_list',
+					query: {
+						id: row.id,
+					},
+				});
+			},
+			// 获取编辑表单数据
+			getOrderData(id) {
+				getOrdeDatas(id)
+					.then(async (res) => {
+						if (res.data.status === false) {
+							return this.$authLapse(res.data);
+						}
+						this.$authLapse(res.data);
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 获取详情表单数据
+			getData(id) {
+				getDataInfo(id)
+					.then(async (res) => {
+						this.$refs.details.modals = true;
+						this.orderDatalist = res.data;
+						if (this.orderDatalist.orderInfo.refund_reason_wap_img) {
+							try {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = JSON.parse(
+									this.orderDatalist.orderInfo.refund_reason_wap_img,
+								);
+							} catch (e) {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = [];
+							}
+						}
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 修改成功
+			submitFail() {
+				this.getList();
+				this.$emit('changeGetTabs');
+			},
+			// 获取退款表单数据
+			getRefundData(id) {
+				this.$modalForm(getRefundFrom(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 获取退积分表单数据
+			getRefundIntegral(id) {
+				refundIntegral(id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 不退款表单数据
+			getNoRefundData(id) {
+				this.$modalForm(getnoRefund(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 发送货
+			sendOrder(row) {
+				this.$refs.send.total_num = row.total_num;
+				this.$refs.send.modals = true;
+				this.orderId = row.id;
+				this.status = row._status;
+				this.pay_type = row.pay_type;
+				this.virtual_type = row.virtual_type;
+				this.$refs.send.getList();
+				this.$refs.send.getDeliveryList();
+				this.$nextTick((e) => {
+					this.$refs.send.getCartInfo(row._status, row.id);
+				});
+			},
+			// 配送信息表单数据
+			delivery(row) {
+				getDistribution(row.id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			change(status) {},
+			// 数据导出;
+			exportData: function() {
+				this.$refs.table.exportCsv({
+					filename: '商品列表',
+				});
+			},
+			// 核销订单
+			bindWrite(row) {
+				let self = this;
+				this.$Modal.confirm({
+					title: '提示',
+					content: '确定要核销该订单吗?',
+					cancelText: '取消',
+					closable: true,
+					maskClosable: true,
+					onOk: function() {
+						writeUpdate(row.order_id)
+							.then((res) => {
+								self.$Message.success(res.msg);
+								self.getList();
+							})
+							.catch((res) => {
+								self.$Message.error(res.msg);
+							});
+					},
+				});
+			},
+		},
+	};
+</script>
+
+<style scoped lang="stylus">
+	img {
+		height: 36px;
+		display: block;
+	}
+
+	.tabBox {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		margin-bottom: 2px;
+
+		.tabBox_img {
+			width: 36px;
+			height: 36px;
+
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.tabBox_tit {
+			width: 60%;
+			font-size: 12px !important;
+			margin: 0 10px 0 10px;
+			letter-spacing: 1px;
+			padding: 5px 0;
+			box-sizing: border-box;
+		}
+	}
+
+	.orderData>>>.ivu-table-cell {
+		padding-left: 0 !important;
+	}
+
+	.vertical-center-modal {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.nickname {}
+
+	.uid {
+		color: #2d8cf0;
+	}
+
+	.pink_name {
+		color: #666;
+	}
+
+	.img {
+		display: flex;
+		flex-wrap: wrap;
+
+		img {
+			width: 30px;
+			height: 30px;
+			margin-right: 3px;
+		}
+	}
+</style>

+ 299 - 0
src/pages/shop_order/orderList/handle/orderDetails.vue

@@ -0,0 +1,299 @@
+<template>
+	<div v-if="orderDatalist">
+		<Drawer title="订单详情" :closable="false" width="700" v-model="modals" scrollable>
+			<Card :bordered="false" dis-hover class="i-table-no-border">
+				<div class="ivu-description-list-title">收货信息</div>
+				<Row class="mb10">
+					<Col span="12">用户昵称:{{ orderDatalist.userInfo.nickname }}</Col>
+					<Col span="12">收货人:{{ orderDatalist.orderInfo.real_name }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">联系电话:{{ orderDatalist.orderInfo.user_phone || '' }}</Col>
+					<Col span="12">收货地址:{{ orderDatalist.orderInfo.user_address || '' }}</Col>
+				</Row>
+				<Divider style="margin: 20px 0 !important" />
+				<div class="ivu-description-list-title">订单信息</div>
+				<Row class="mb10">
+					<Col span="12">订单ID:{{ orderDatalist.orderInfo.order_id }}</Col>
+					<Col span="12" class="fontColor1">订单状态:{{ orderDatalist.orderInfo._status._title }}
+					{{
+              orderDatalist.orderInfo.refund &&
+              orderDatalist.orderInfo.refund.length &&
+              orderDatalist.orderInfo.refund_status < 2
+                ? orderDatalist.orderInfo.is_all_refund
+                  ? '退款中'
+                  : '部分退款中'
+                : ''
+            }}
+					</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">商品总数:{{ orderDatalist.orderInfo.total_num }}</Col>
+					<Col span="12">商品总价:{{ orderDatalist.orderInfo.total_price }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">交付邮费:{{ orderDatalist.orderInfo.pay_postage }}</Col>
+					<Col span="12">优惠券金额:{{ orderDatalist.orderInfo.coupon_price }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">用户等级优惠:{{ orderDatalist.orderInfo.levelPrice || 0.0 }}</Col>
+					<Col span="12">付费会员优惠:{{ orderDatalist.orderInfo.memberPrice || 0.0 }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12">积分抵扣:{{ orderDatalist.orderInfo.deduction_price || 0.0 }}</Col>
+					<Col span="12">实际支付:{{ orderDatalist.orderInfo.pay_price }}</Col>
+				</Row>
+				<Row class="mb10">
+					<Col span="12" class="fontColor3 mb10"
+						v-if="parseFloat(orderDatalist.orderInfo.refund_price) && orderDatalist.orderInfo.refund_type != 3">
+					退款金额:{{ parseFloat(orderDatalist.orderInfo.refund_price) }}</Col>
+					<Col span="12" class="fontColor3 mb10" v-if="parseFloat(orderDatalist.orderInfo.use_integral)">
+					使用积分:{{ parseFloat(orderDatalist.orderInfo.use_integral) }}</Col>
+					<Col span="12" class="fontColor3 mb10" v-if="parseFloat(orderDatalist.orderInfo.back_integral)">
+					退回积分:{{ parseFloat(orderDatalist.orderInfo.back_integral) }}</Col>
+					<Col span="12" class="fontColor3 mb10"
+						v-if="parseFloat(orderDatalist.orderInfo.gain_integral) && orderDatalist.orderInfo.paid == 1">
+					赠送积分:{{ parseFloat(orderDatalist.orderInfo.gain_integral) }}</Col>
+					<Col span="12" class="mb10">创建时间:{{ orderDatalist.orderInfo._add_time }}</Col>
+					<Col span="12" class="mb10">支付时间:{{ orderDatalist.orderInfo._pay_time }}</Col>
+					<Col span="12" class="mb10">支付方式:{{ orderDatalist.orderInfo._status._payType }}</Col>
+					<Col span="12" class="mb10" v-if="is_refund != 1">
+					推广人:{{ orderDatalist.orderInfo.spread_name + '/' + orderDatalist.orderInfo.spread_uid }}</Col>
+					<Col span="12" class="mb10" v-if="
+              orderDatalist.orderInfo.shipping_type === 2 &&
+              orderDatalist.orderInfo.refund_status === 0 &&
+              orderDatalist.orderInfo.paid === 1
+            ">门店名称:{{ orderDatalist.orderInfo._store_name }}</Col>
+					<Col span="12" class="mb10" v-if="
+              orderDatalist.orderInfo.shipping_type === 2 &&
+              orderDatalist.orderInfo.refund_status === 0 &&
+              orderDatalist.orderInfo.paid === 1
+            ">核销码:{{ orderDatalist.orderInfo.verify_code }}</Col>
+					<Col span="24" class="mb10" v-if="orderDatalist.orderInfo.remark">
+					商家备注:{{ orderDatalist.orderInfo.remark }}</Col>
+					<Col span="24" class="mb10" v-if="orderDatalist.orderInfo.fictitious_content">
+					虚拟发货备注:{{ orderDatalist.orderInfo.fictitious_content }}</Col>
+				</Row>
+				<Divider style="margin: 20px 0 !important" v-if="orderDatalist.orderInfo.custom_form.length" />
+				<div class="ivu-description-list-title" v-if="orderDatalist.orderInfo.custom_form.length">表单信息</div>
+				<Row class="mb10" v-if="orderDatalist.orderInfo.custom_form.length">
+					<Col class="mb10" :span="item.label !== 'text' ? 12 : 24" v-if="item.label !== 'img'"
+						v-for="(item, index) in orderDatalist.orderInfo.custom_form" :key="index">
+					{{ item.title }}:{{ item.value }}</Col>
+					<Col span="24" v-else>
+					<div>{{ item.title }}:</div>
+					<div class="pic">
+						<div v-for="(img, i) in item.value" :key="i" class="img">
+							<img v-viewer :src="img" alt="" />
+						</div>
+					</div>
+					</Col>
+				</Row>
+				<div v-if="orderDatalist.orderInfo.delivery_type === 'express'">
+					<Divider style="margin: 20px 0 !important" />
+					<div class="ivu-description-list-title">物流信息</div>
+					<Row class="mb10">
+						<Col span="12">快递公司:{{ orderDatalist.orderInfo.delivery_name }}</Col>
+						<Col span="12">快递单号:{{ orderDatalist.orderInfo.delivery_id }}
+						<Button type="info" size="small" @click="openLogistics">物流查询</Button></Col>
+					</Row>
+				</div>
+				<div v-if="orderDatalist.orderInfo.delivery_type === 'send'">
+					<Divider style="margin: 20px 0 !important" />
+					<div class="ivu-description-list-title">配送信息</div>
+					<Row class="mb10">
+						<Col span="12">送货人姓名:{{ orderDatalist.orderInfo.delivery_name }}</Col>
+						<Col span="12">送货人电话:{{ orderDatalist.orderInfo.delivery_id }}</Col>
+					</Row>
+				</div>
+				<div v-if="orderDatalist.orderInfo.mark">
+					<Divider style="margin: 20px 0 !important" v-if="orderDatalist.orderInfo.mark" />
+					<div class="ivu-description-list-title" v-if="orderDatalist.orderInfo.mark">备注信息</div>
+					<Row class="mb10">
+						<Col span="12" class="fontColor2">{{ orderDatalist.orderInfo.mark }}</Col>
+					</Row>
+				</div>
+			</Card>
+		</Drawer>
+		<Modal v-model="modal2" scrollable title="物流查询" width="350" class="order_box2">
+			<div class="logistics acea-row row-top">
+				<div class="logistics_img">
+					<img src="../../../../assets/images/expressi.jpg" />
+				</div>
+				<div class="logistics_cent">
+					<span>物流公司:{{ orderDatalist.orderInfo.delivery_name }}</span>
+					<span>物流单号:{{ orderDatalist.orderInfo.delivery_id }}</span>
+				</div>
+			</div>
+			<div class="acea-row row-column-around trees-coadd">
+				<div class="scollhide">
+					<Timeline>
+						<TimelineItem v-for="(item, i) in result" :key="i">
+							<p class="time" v-text="item.time"></p>
+							<p class="content" v-text="item.status"></p>
+						</TimelineItem>
+					</Timeline>
+				</div>
+			</div>
+		</Modal>
+	</div>
+</template>
+
+<script>
+	import {
+		getExpress
+	} from '@/api/shopOrder';
+	export default {
+		name: 'orderDetails',
+		data() {
+			return {
+				modal2: false,
+				modals: false,
+				grid: {
+					xl: 8,
+					lg: 8,
+					md: 12,
+					sm: 24,
+					xs: 24,
+				},
+				result: [],
+			};
+		},
+		props: {
+			orderDatalist: Object,
+			orderId: Number,
+			is_refund: Number,
+		},
+		methods: {
+			openLogistics() {
+				this.getOrderData();
+				this.modal2 = true;
+			},
+			// 获取订单物流信息
+			getOrderData() {
+				getExpress(this.orderId)
+					.then(async (res) => {
+						this.result = res.data.result;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+		},
+		computed: {},
+	};
+</script>
+
+<style scoped lang="stylus">
+	.ivu-description-list-title {
+		margin-bottom: 16px;
+		color: #17233d;
+		font-weight: 500;
+		font-size: 14px;
+	}
+
+	.logistics {
+		align-items: center;
+		padding: 10px 0px;
+
+		.logistics_img {
+			width: 45px;
+			height: 45px;
+			margin-right: 12px;
+
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.logistics_cent {
+			span {
+				display: block;
+				font-size: 12px;
+			}
+		}
+	}
+
+	.trees-coadd {
+		width: 100%;
+		height: 400px;
+		border-radius: 4px;
+		overflow: hidden;
+
+		.scollhide {
+			width: 100%;
+			height: 100%;
+			overflow: auto;
+			margin-left: 18px;
+			padding: 10px 0 10px 0;
+			box-sizing: border-box;
+
+			.content {
+				font-size: 12px;
+			}
+
+			.time {
+				font-size: 12px;
+				color: #2d8cf0;
+			}
+		}
+	}
+
+	.order_box2 {
+		position: absolute;
+		z-index: 999999999;
+	}
+
+	.order_box>>>.ivu-modal-header {
+		padding: 30x 16px !important;
+	}
+
+	.order_box>>>.ivu-card {
+		font-size: 12px !important;
+	}
+
+	.fontColor1 {
+		color: red !important;
+	}
+
+	.fontColor2 {
+		color: #733AF9 !important;
+	}
+
+	.order_box>>>.ivu-description-term {
+		padding-bottom: 10px !important;
+	}
+
+	.order_box>>>.ivu-description-detail {
+		padding-bottom: 10px !important;
+	}
+
+	.order_box>>>.ivu-modal-body {
+		padding: 0 16px !important;
+	}
+
+	.fontColor3 {
+		color: #f1a417 !important;
+	}
+
+	.fontColor3 {
+		color: #f1a417 !important;
+	}
+
+	.pic {
+		display: flex;
+		flex-wrap: wrap;
+	}
+
+	.img {
+		width: 100px;
+		height: 100px;
+		margin: 10px 10px;
+
+		img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+</style>

+ 84 - 0
src/pages/shop_order/orderList/handle/orderRecord.vue

@@ -0,0 +1,84 @@
+<template>
+	<Drawer title="订单记录" :closable="false" width="700" scrollable v-model="modals">
+		<Card :bordered="false" dis-hover>
+			<Table :columns="columns" border :data="recordData" :loading="loading" no-data-text="暂无数据" highlight-row
+				no-filtered-data-text="暂无筛选结果"></Table>
+			<!--            <div class="acea-row row-right page">-->
+			<!--                <Page :total="recordData.length" show-elevator show-total @on-change="pageChange"-->
+			<!--                      :page-size="page.limit"/>-->
+			<!--            </div>-->
+		</Card>
+	</Drawer>
+</template>
+
+<script>
+	import {
+		getOrderRecord
+	} from '@/api/shopOrder';
+	export default {
+		name: 'orderRecord',
+		data() {
+			return {
+				modals: false,
+				loading: false,
+				recordData: [],
+				page: {
+					page: 1, // 当前页
+					limit: 10, // 每页显示条数
+				},
+				columns: [{
+						title: '订单ID',
+						key: 'oid',
+						align: 'center',
+						minWidth: 40,
+					},
+					{
+						title: '操作记录',
+						key: 'change_message',
+						align: 'center',
+						minWidth: 280,
+					},
+					{
+						title: '操作时间',
+						key: 'change_time',
+						align: 'center',
+						minWidth: 100,
+					},
+				],
+			};
+		},
+		methods: {
+			pageChange(index) {
+				this.page.pageNum = index;
+				this.getList();
+			},
+			getList(id) {
+				let data = {
+					id: id,
+					datas: this.page,
+				};
+				this.loading = true;
+				getOrderRecord(data)
+					.then(async (res) => {
+						this.recordData = res.data;
+						this.loading = false;
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+		},
+	};
+</script>
+
+<style scoped lang="stylus">
+	.ivu-table-wrapper {
+		border-left: 1px solid #dcdee2;
+		border-top: 1px solid #dcdee2;
+	}
+
+	.order_box>>>.ivu-table th {
+		background: #f8f8f9 !important;
+	}
+</style>

+ 78 - 0
src/pages/shop_order/orderList/handle/orderRemark.vue

@@ -0,0 +1,78 @@
+<template>
+	<Modal v-model="modals" scrollable title="请修改内容" class="order_box" :closable="false">
+		<Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80" @submit.native.prevent>
+			<FormItem label="备注:" prop="remark">
+				<Input v-model="formValidate.remark" :maxlength="200" show-word-limit type="textarea" placeholder="订单备注"
+					style="width: 100%" />
+			</FormItem>
+		</Form>
+		<div slot="footer">
+			<Button type="primary" @click="putRemark('formValidate')">提交</Button>
+			<Button @click="cancel('formValidate')">取消</Button>
+		</div>
+	</Modal>
+</template>
+
+<script>
+	import {
+		putRemarkData,
+		putRefundRemarkData
+	} from '@/api/shopOrder';
+	export default {
+		name: 'orderMark',
+		data() {
+			return {
+				formValidate: {
+					remark: '',
+				},
+				modals: false,
+				ruleValidate: {
+					remark: [{
+							required: true,
+							message: '请输入备注信息',
+							trigger: 'blur'
+						},
+						// { type: 'string', min: 20, message: 'Introduce no less than 20 words', trigger: 'blur' }
+					],
+				},
+			};
+		},
+		props: {
+			orderId: Number,
+			remarkType: {
+				default: '',
+				type: String,
+			},
+		},
+		methods: {
+			cancel(name) {
+				this.modals = false;
+				this.$refs[name].resetFields();
+			},
+			putRemark(name) {
+				let data = {
+					id: this.orderId,
+					remark: this.formValidate,
+				};
+				this.$refs[name].validate((valid) => {
+					if (valid) {
+						(this.remarkType ? putRefundRemarkData : putRemarkData)(data)
+						.then(async (res) => {
+								this.$Message.success(res.msg);
+								this.modals = false;
+								this.$refs[name].resetFields();
+								this.$emit('submitFail');
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+					} else {
+						this.$Message.warning('请填写备注信息');
+					}
+				});
+			},
+		},
+	};
+</script>
+
+<style scoped></style>

+ 548 - 0
src/pages/shop_order/orderList/handle/orderSend.vue

@@ -0,0 +1,548 @@
+<template>
+	<Modal v-model="modals" scrollable title="订单发送货" class="order_box" :closable="false" width="1000"
+		@on-visible-change="changeModal">
+		<Form v-if="modals" ref="formItem" :model="formItem" :label-width="100" @submit.native.prevent>
+			<FormItem label="选择类型:">
+				<RadioGroup v-model="formItem.type" @on-change="changeRadio">
+					<Radio label="1" v-if="virtual_type !== 3">发货</Radio>
+					<Radio label="2" v-if="virtual_type !== 3">送货</Radio>
+					<Radio label="3">无需配送</Radio>
+				</RadioGroup>
+			</FormItem>
+			<FormItem v-if="formItem.type == 1" v-show="export_open" label="发货类型:">
+				<RadioGroup v-model="formItem.express_record_type" @on-change="changeExpress">
+					<Radio label="1">手动填写</Radio>
+					<Radio label="2">电子面单打印</Radio>
+				</RadioGroup>
+			</FormItem>
+			<div>
+				<FormItem label="快递公司:" v-if="formItem.type == 1">
+					<Select v-model="formItem.delivery_name" filterable placeholder="请选择快递公司" style="width: 80%"
+						@on-change="expressChange">
+						<Option v-for="(item, i) in express" :value="item.value" :key="item.value">{{ item.value }}
+						</Option>
+					</Select>
+				</FormItem>
+				<FormItem v-if="formItem.express_record_type === '1' && formItem.type == 1" label="快递单号:">
+					<Input v-model="formItem.delivery_id" placeholder="请输入快递单号" style="width: 80%"></Input>
+					<div class="trips" v-if="formItem.delivery_name == '顺丰速运'">
+						<p>顺丰请输入单号 :收件人或寄件人手机号后四位,</p>
+						<p>例如:SF000000000000:3941</p>
+					</div>
+				</FormItem>
+				<template v-if="formItem.express_record_type === '2' && formItem.type == 1">
+					<FormItem label="电子面单:" class="express_temp_id">
+						<Select v-model="formItem.express_temp_id" placeholder="请选择电子面单" style="width: 80%"
+							@on-change="expressTempChange">
+							<Option v-for="(item, i) in expressTemp" :value="item.temp_id" :key="i">{{ item.title }}
+							</Option>
+						</Select>
+						<Button v-if="formItem.express_temp_id" type="text" @click="preview">预览</Button>
+					</FormItem>
+					<FormItem label="寄件人姓名:">
+						<Input v-model="formItem.to_name" placeholder="请输入寄件人姓名" style="width: 80%"></Input>
+					</FormItem>
+					<FormItem label="寄件人电话:">
+						<Input v-model="formItem.to_tel" placeholder="请输入寄件人电话" style="width: 80%"></Input>
+					</FormItem>
+					<FormItem label="寄件人地址:">
+						<Input v-model="formItem.to_addr" placeholder="请输入寄件人地址" style="width: 80%"></Input>
+					</FormItem>
+				</template>
+			</div>
+			<div v-show="formItem.type === '2'">
+				<FormItem label="送货人:">
+					<Select v-model="formItem.sh_delivery" placeholder="请选择送货人" style="width: 80%"
+						@on-change="shDeliveryChange">
+						<Option v-for="(item, i) in deliveryList" :value="item.id" :key="i">
+							{{ item.wx_name }}({{ item.phone }})</Option>
+					</Select>
+				</FormItem>
+			</div>
+			<div v-show="formItem.type === '3'">
+				<FormItem label="备注:">
+					<Input v-model="formItem.fictitious_content" type="textarea" :autosize="{ minRows: 2, maxRows: 5 }"
+						placeholder="备注" style="width: 80%"></Input>
+				</FormItem>
+			</div>
+			<div v-if="total_num > 1">
+				<FormItem label="分单发货:">
+					<i-switch size="large" v-model="splitSwitch" :disabled="orderStatus === 8 || orderStatus === 11"
+						@on-change="changeSplitStatus">
+						<span slot="open">开启</span>
+						<span slot="close">关闭</span>
+					</i-switch>
+					<div class="trips">
+						<p>可选择表格中的商品单独发货,发货后会生成新的订单且不能撤回,请谨慎操作!</p>
+					</div>
+					<i-table v-if="splitSwitch && manyFormValidate.length" :data="manyFormValidate"
+						@on-selection-change="selectOne" :columns="header">
+						<template slot-scope="{ row, index }" slot="image">
+							<div class="product-data">
+								<img class="image" :src="row.cart_info.productInfo.image" />
+								<div class="line2">
+									{{ row.cart_info.productInfo.store_name }}
+								</div>
+							</div>
+						</template>
+						<template slot-scope="{ row, index }" slot="value">
+							<div class="product-data">
+								<div>{{ row.cart_info.productInfo.attrInfo.suk }}</div>
+							</div>
+						</template>
+						<template slot-scope="{ row, index }" slot="price">
+							<div class="product-data">
+								<div>{{ row.cart_info.truePrice }}</div>
+							</div>
+						</template>
+					</i-table>
+				</FormItem>
+			</div>
+		</Form>
+		<div slot="footer">
+			<Button @click="cancel">取消</Button>
+			<Button type="primary" @click="putSend">提交</Button>
+		</div>
+		<!-- <viewer @inited="inited">
+            <img :src="temp.pic" style="display:none" />
+        </viewer> -->
+		<div ref="viewer" v-viewer v-show="temp">
+			<img :src="temp.pic" style="display: none" />
+		</div>
+	</Modal>
+</template>
+
+<script>
+	import {
+		getExpressData,
+		putDelivery,
+		splitDelivery,
+		orderExpressTemp,
+		orderDeliveryList,
+		orderSheetInfo,
+		splitCartInfo,
+	} from '@/api/shopOrder';
+	import printJS from 'print-js';
+	export default {
+		name: 'orderSend',
+		props: {
+			orderId: Number,
+			status: Number,
+			// total_num: Number,
+			pay_type: String,
+			virtual_type: Number,
+		},
+		watch: {
+			orderId(val) {
+				if (this.virtual_type == 3) this.formItem.type = '3';
+			},
+		},
+		data() {
+			return {
+				orderStatus: 0,
+				total_num: 0,
+				splitSwitch: true,
+				formItem: {
+					type: '1',
+					express_record_type: '1',
+					delivery_name: '',
+					delivery_id: '',
+					express_temp_id: '',
+					to_name: '',
+					to_tel: '',
+					to_addr: '',
+					sh_delivery: '',
+					fictitious_content: '',
+				},
+				modals: false,
+				express: [],
+				expressTemp: [],
+				deliveryList: [],
+				temp: {},
+				export_open: false,
+				manyFormValidate: [],
+				header: [{
+						type: 'selection',
+						width: 60,
+						align: 'center',
+					},
+					{
+						title: '商品信息',
+						slot: 'image',
+						width: 200,
+						align: 'center',
+					},
+					{
+						title: '规格',
+						slot: 'value',
+						align: 'center',
+						minWidth: 120,
+					},
+					{
+						title: '价格',
+						slot: 'price',
+						align: 'center',
+						minWidth: 120,
+					},
+					{
+						title: '总数',
+						key: 'cart_num',
+						align: 'center',
+						minWidth: 120,
+					},
+					{
+						title: '待发数量',
+						key: 'surplus_num',
+						align: 'center',
+						width: 180,
+						render: (h, params) => {
+							return h('div', [
+								h('InputNumber', {
+									props: {
+										min: 1,
+										max: params.row.surplus_num,
+										value: params.row.num || params.row.surplus_num,
+									},
+									on: {
+										'on-change': (e) => {
+											// params.row.surplus_num = e || 1;
+											params.row.num = e || 1;
+											this.manyFormValidate[params.index] = params.row;
+											this.selectData.forEach((v, index) => {
+												if (v.cart_id === params.row.cart_id) {
+													this.selectData.splice(index, 1, params
+														.row);
+												}
+											});
+										},
+									},
+								}),
+							]);
+						},
+					},
+				],
+				selectData: [],
+			};
+		},
+		methods: {
+			selectOne(data) {
+				this.selectData = data;
+			},
+			changeModal(status) {
+				if (!status) {
+					this.cancel();
+				}
+			},
+			changeSplitStatus(status) {
+				// this.splitSwitch = status;
+				if (status) {
+					splitCartInfo(this.orderId).then((res) => {
+						this.manyFormValidate = [];
+						Object.keys(res.data).forEach((key) => {
+							this.manyFormValidate.push(res.data[key]);
+						});
+					});
+				}
+			},
+			changeRadio(o) {
+				this.$refs.formItem.resetFields();
+				switch (o) {
+					case '1':
+						this.formItem.delivery_name = '';
+						this.formItem.delivery_id = '';
+						this.formItem.express_temp_id = '';
+						this.formItem.express_record_type = '1';
+						this.expressTemp = [];
+						this.getList(1);
+						break;
+					case '2':
+						this.formItem.sh_delivery = '';
+						break;
+					case '3':
+						this.formItem.fictitious_content = '';
+						break;
+					default:
+						// this.formItem = {
+						//     type: '3',
+						//     express_record_type: '1',
+						//     delivery_name: '',
+						//     delivery_id: '',
+						//     express_temp_id: '',
+						//     to_name: '',
+						//     to_tel: '',
+						//     to_addr: '',
+						//     sh_delivery: ''
+						// };
+						break;
+				}
+			},
+			changeExpress(j) {
+				switch (j) {
+					case '2':
+						this.formItem.delivery_name = '';
+						this.formItem.express_temp_id = '';
+						this.expressTemp = [];
+						this.getList(2);
+						break;
+					case '1':
+						this.formItem.delivery_name = '';
+						this.formItem.delivery_id = '';
+						this.getList(1);
+						break;
+					default:
+						break;
+				}
+			},
+			reset() {
+				this.formItem = {
+					type: '1',
+					express_record_type: '1',
+					delivery_name: '',
+					delivery_id: '',
+					express_temp_id: '',
+					expressTemp: [],
+					to_name: '',
+					to_tel: '',
+					to_addr: '',
+					sh_delivery: '',
+					fictitious_content: '',
+				};
+			},
+			// 物流公司列表
+			getList(type) {
+				let status = type === 2 ? 1 : '';
+				getExpressData(status)
+					.then(async (res) => {
+						this.express = res.data;
+						this.getSheetInfo();
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			printImg(url) {
+				printJS({
+					printable: url,
+					type: 'image',
+					documentTitle: '快递信息',
+					style: `img{
+          width: 100%;
+          height: 476px;
+        }`,
+				});
+			},
+
+			// 提交
+			putSend(name) {
+				let data = {
+					id: this.orderId,
+					datas: this.formItem,
+				};
+				if (this.formItem.type === '1' && this.formItem.express_record_type === '2') {
+					if (this.formItem.delivery_name === '') {
+						return this.$Message.error('快递公司不能为空');
+					} else if (this.formItem.express_temp_id === '') {
+						return this.$Message.error('电子面单不能为空');
+					} else if (this.formItem.to_name === '') {
+						return this.$Message.error('寄件人姓名不能为空');
+					} else if (this.formItem.to_tel === '') {
+						return this.$Message.error('寄件人电话不能为空');
+					} else if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.formItem.to_tel)) {
+						return this.$Message.error('请输入正确的手机号码');
+					} else if (this.formItem.to_addr === '') {
+						return this.$Message.error('寄件人地址不能为空');
+					}
+				}
+				if (this.formItem.type === '1' && this.formItem.express_record_type === '1') {
+					if (this.formItem.delivery_name === '') {
+						return this.$Message.error('快递公司不能为空');
+					} else if (this.formItem.delivery_id === '') {
+						return this.$Message.error('快递单号不能为空');
+					}
+				}
+				if (this.formItem.type === '2') {
+					if (this.formItem.sh_delivery === '') {
+						return this.$Message.error('送货人不能为空');
+					}
+				}
+				if (this.splitSwitch) {
+					data.datas.cart_ids = [];
+					this.selectData.forEach((v) => {
+						data.datas.cart_ids.push({
+							cart_id: v.cart_id,
+							cart_num: v.num || v.surplus_num,
+						});
+					});
+					splitDelivery(data)
+						.then((res) => {
+							this.modals = false;
+							this.$Message.success(res.msg);
+							this.$emit('submitFail');
+							this.reset();
+							this.splitSwitch = false;
+							if (res.data.label) this.printImg(res.data.label);
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					putDelivery(data)
+						.then(async (res) => {
+							this.modals = false;
+							this.$Message.success(res.msg);
+							this.splitSwitch = false;
+							this.$emit('submitFail');
+							this.reset();
+							if (res.data.label) this.printImg(res.data.label);
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				}
+			},
+			cancel(name) {
+				this.modals = false;
+				this.orderStatus = 0;
+				this.splitSwitch = false;
+				this.selectData = [];
+				this.formItem.type = '1';
+				this.$emit('clearId');
+				this.reset();
+				// this.$refs[name].resetFields();
+				// this.formItem.type = '1';
+			},
+			// 电子面单列表
+			expressChange(value) {
+				let expressItem = this.express.find((item) => {
+					return item.value === value;
+				});
+				if (expressItem === undefined) {
+					return;
+				}
+				this.formItem.delivery_code = expressItem.code;
+				if (this.formItem.express_record_type === '2') {
+					this.expressTemp = [];
+					this.formItem.express_temp_id = '';
+					orderExpressTemp({
+							com: this.formItem.delivery_code,
+						})
+						.then((res) => {
+							this.expressTemp = res.data;
+							if (!res.data.length) {
+								this.$Message.error('请配置你所选快递公司的电子面单');
+							}
+						})
+						.catch((err) => {
+							this.$Message.error(err.msg);
+						});
+				}
+			},
+			getCartInfo(data, orderid) {
+				this.$set(this, 'orderStatus', data);
+				this.$set(this, 'splitSwitch', data === 8 || data === 11 ? true : false);
+				splitCartInfo(this.orderId).then((res) => {
+					this.manyFormValidate = [];
+					Object.keys(res.data).forEach((key) => {
+						this.manyFormValidate.push(res.data[key]);
+					});
+				});
+			},
+			getDeliveryList() {
+				orderDeliveryList()
+					.then((res) => {
+						this.deliveryList = res.data.list;
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			getSheetInfo() {
+				orderSheetInfo()
+					.then((res) => {
+						const data = res.data;
+						for (const key in data) {
+							if (data.hasOwnProperty(key)) {
+								this.formItem[key] = data[key];
+							}
+						}
+						this.export_open = data.export_open === undefined ? true : data.export_open;
+						if (!this.export_open) {
+							this.formItem.express_record_type = '1';
+						}
+						this.formItem.to_addr = data.to_add;
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			shDeliveryChange(value) {
+				if (!value) return;
+				let deliveryItem = this.deliveryList.find((item) => {
+					return item.id === value;
+				});
+				this.formItem.sh_delivery_name = deliveryItem.wx_name;
+				this.formItem.sh_delivery_id = deliveryItem.phone;
+				this.formItem.sh_delivery_uid = deliveryItem.uid;
+			},
+			expressTempChange(tempId) {
+				this.temp = this.expressTemp.find((item) => {
+					return tempId === item.temp_id;
+				});
+				if (this.temp === undefined) {
+					this.temp = {};
+				}
+			},
+			// inited (viewer) {
+			//     this.$viewer = viewer;
+			// },
+			preview() {
+				this.$refs.viewer.$viewer.show();
+				// this.$viewer.show();
+			},
+		},
+	};
+</script>
+
+<style scoped>
+	.express_temp_id {
+		position: relative;
+	}
+
+	.express_temp_id button {
+		position: absolute;
+		top: 50%;
+		right: 110px;
+		padding: 0;
+		border: none;
+		background: none;
+		transform: translateY(-50%);
+		color: #57a3f3;
+	}
+
+	.ivu-btn-text:focus {
+		box-shadow: none;
+	}
+
+	.trips {
+		color: #ccc;
+	}
+
+	.product-data {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.product-data .image {
+		width: 50px !important;
+		height: 50px !important;
+	}
+
+	.line2 {
+		display: -webkit-box;
+		-webkit-line-clamp: 2;
+		-webkit-box-orient: vertical;
+		overflow: hidden;
+	}
+</style>

+ 205 - 0
src/pages/shop_order/orderList/index.vue

@@ -0,0 +1,205 @@
+<template>
+	<div>
+		<Card :bordered="false" dis-hover>
+			<Tabs class="mb20" v-model="currentTab" @on-click="onClickTab" v-if="tablists">
+				<TabPane v-for="(item, index) in tabs" :label="item.label" :name="item.type" :key="index" />
+			</Tabs>
+			<productlist-details v-if="currentTab === 'article' || 'project' || 'app'"
+				ref="productlist"></productlist-details>
+			<Spin size="large" fix v-if="spinShow"></Spin>
+		</Card>
+	</div>
+</template>
+
+<script>
+	import productlistDetails from './orderlistDetails';
+	import {
+		mapMutations
+	} from 'vuex';
+	export default {
+		name: 'list',
+		components: {
+			productlistDetails,
+		},
+		data() {
+			return {
+				tabs: [{
+						type: '',
+						label: (h) => {
+							return h('div', [
+								h('span', '全部订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.all),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '1',
+						label: (h) => {
+							return h('div', [
+								h('span', '普通订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.general),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '2',
+						label: (h) => {
+							return h('div', [
+								h('span', '拼团订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.pink),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '3',
+						label: (h) => {
+							return h('div', [
+								h('span', '秒杀订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.seckill),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '4',
+						label: (h) => {
+							return h('div', [
+								h('span', '砍价订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.bargain),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+					{
+						type: '5',
+						label: (h) => {
+							return h('div', [
+								h('span', '预售订单'),
+								h('Badge', {
+									props: {
+										count: Number(this.tablists.advance),
+										'overflow-count': 999999,
+									},
+								}),
+							]);
+						},
+					},
+				],
+				spinShow: false,
+				currentTab: '',
+				data: [],
+				tablists: null,
+			};
+		},
+		created() {
+			this.getOrderType('');
+			this.getOrderStatus('');
+			this.getOrderTime('');
+			this.getOrderNum('');
+			this.getfieldKey('');
+			this.onChangeTabs('');
+			this.getisDelIdListl('');
+			this.getIsDel(1);
+		},
+		beforeDestroy() {
+			this.getOrderType('');
+			this.getOrderStatus('');
+			this.getOrderTime('');
+			this.getOrderNum('');
+			this.getfieldKey('');
+			this.onChangeTabs('');
+			this.getisDelIdListl('');
+			this.getIsDel(1);
+		},
+		mounted() {
+			this.getTabs();
+		},
+		methods: {
+			...mapMutations('shopOrder', [
+				'onChangeTabs',
+				'getOrderStatus',
+				'getOrderTime',
+				'getOrderNum',
+				'getfieldKey',
+				'getOrderType',
+				'getisDelIdListl',
+				'getIsDel',
+				// 'onChangeChart'
+			]),
+			// 订单类型  @on-changeTabs="getChangeTabs"
+			getTabs() {
+				this.spinShow = true;
+				this.$store
+					.dispatch('shopOrder/getOrderTabs', {
+						data: '',
+					})
+					.then((res) => {
+						this.tablists = res.data;
+						// this.onChangeChart(this.tablists)
+						this.spinShow = false;
+					})
+					.catch((res) => {
+						this.spinShow = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			onClickTab() {
+				this.onChangeTabs(Number(this.currentTab));
+				// this.$store.dispatch("order/getOrderTabs", {
+				//   data: "",
+				//   type: Number(this.currentTab),
+				// });
+				// this.$refs.productlist.getChangeTabs();
+				this.$store.dispatch('shopOrder/getOrderTabs', {
+					type: this.currentTab
+				});
+			},
+		},
+	};
+</script>
+<style scoped lang="stylus">
+	.product_tabs>>>.ivu-tabs-bar {
+		margin-bottom: 0px !important;
+	}
+
+	.product_tabs>>>.ivu-page-header-content {
+		margin-bottom: 0px !important;
+	}
+
+	.product_tabs>>>.ivu-page-header-breadcrumb {
+		margin-bottom: 0px !important;
+	}
+
+	/deep/ .ivu-badge-count-alone {
+		top: -7px;
+		right: 2px;
+	}
+
+	.i-layout-page-header /deep/ .ivu-badge-count {
+		line-height: 14px;
+		height: 15px;
+	}
+</style>

+ 94 - 0
src/pages/shop_order/orderList/orderlistDetails.vue

@@ -0,0 +1,94 @@
+<template>
+	<div>
+		<!-- <cards-data
+      :cardLists="cardLists"
+      v-if="cardLists.length >= 0"
+    ></cards-data> -->
+		<table-form @getList="getData" />
+		<table-list ref="table" @on-changeCards="getCards" @changeGetTabs="changeGetTabs" />
+	</div>
+</template>
+
+<script>
+	import cardsData from '../../../components/cards/cards';
+	import tableForm from './components/tableFrom';
+	import tableList from './components/tableList';
+	export default {
+		name: 'orderlistDetails',
+		components: {
+			tableForm,
+			tableList,
+			cardsData,
+		},
+		data() {
+			return {
+				currentTab: '',
+				cardLists: [],
+			};
+		},
+		methods: {
+			changeGetTabs() {
+
+				this.$parent.getTabs();
+			},
+			// 列表数据
+			getData(res) {
+				this.$refs.table.getList(res);
+			},
+			// 模块数据
+			getCards(list) {
+				console.log('调用233')
+				this.cardLists = list;
+			},
+			handleResize() {
+				this.$refs.ellipsis.forEach((item) => item.init());
+			},
+		},
+		mounted() {},
+	};
+</script>
+
+<style scoped lang="stylus">
+	.card_cent>>>.ivu-card-body {
+		width: 100%;
+		height: 100%;
+	}
+
+	.card_box {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding: 25px;
+		box-sizing: border-box;
+		border-radius: 4px;
+
+		.card_box_img {
+			width: 48px;
+			height: 48px;
+			border-radius: 50%;
+			overflow: hidden;
+			margin-right: 20px;
+
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.card_box_txt {
+			.sp1 {
+				display: block;
+				color: #252631;
+				font-size: 24px;
+			}
+
+			.sp2 {
+				display: block;
+				color: #98A9BC;
+				font-size: 12px;
+			}
+		}
+	}
+</style>

+ 866 - 0
src/pages/shop_order/orderList/splitList.vue

@@ -0,0 +1,866 @@
+<template>
+	<div>
+		<div class="i-layout-page-header">
+			<div class="i-layout-page-header">
+				<span class="ivu-page-header-title">子订单列表</span>
+				<span class="return" @click="$router.go(-1)">返回</span>
+			</div>
+		</div>
+		<Table :columns="columns" :data="orderList" ref="table" :loading="loading" highlight-row no-data-text="暂无数据"
+			no-filtered-data-text="暂无筛选结果" @on-selection-change="onSelectTab" @on-select-all="selectAll"
+			@on-select-all-cancel="selectAll" @on-select-cancel="onSelectCancel" class="orderData mt25">
+			<template slot-scope="{ row, index }" slot="order_id">
+				<span v-text="row.order_id" style="display: block"></span>
+				<span v-show="row.is_del === 1" style="color: #ed4014; display: block">用户已删除</span>
+			</template>
+			<template slot-scope="{ row, index }" slot="nickname">
+				<a @click="showUserInfo(row)">{{ row.nickname }}</a>
+			</template>
+			<template slot-scope="{ row, index }" slot="info">
+				<div class="tabBox" v-for="(val, i) in row._info" :key="i">
+					<div class="tabBox_img" v-viewer>
+						<img v-lazy="
+                val.cart_info.productInfo.attrInfo
+                  ? val.cart_info.productInfo.attrInfo.image
+                  : val.cart_info.productInfo.image
+              " />
+					</div>
+					<span class="tabBox_tit">
+						{{ val.cart_info.productInfo.store_name + ' | '
+            }}{{ val.cart_info.productInfo.attrInfo ? val.cart_info.productInfo.attrInfo.suk : '' }}
+					</span>
+					<span
+						class="tabBox_pice">{{ '¥' + val.cart_info.truePrice + ' x ' + val.cart_info.cart_num }}</span>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="statusName">
+				<div v-html="row.status_name.status_name" class="pt5"></div>
+				<div class="pictrue-box">
+					<div v-viewer v-if="row.status_name.pics" v-for="(item, index) in row.status_name.pics || []"
+						:key="index">
+						<img class="pictrue mr10" v-lazy="item" :src="item" />
+					</div>
+				</div>
+			</template>
+			<template slot-scope="{ row, index }" slot="action">
+				<a @click="edit(row)" v-if="row._status === 1">编辑</a>
+				<a @click="sendOrder(row)" v-if="
+            (row._status === 2 || row._status === 8) &&
+            row.shipping_type === 1 &&
+            (row.pinkStatus === null || row.pinkStatus === 2)
+          ">发送货</a>
+				<a @click="delivery(row)" v-if="row._status === 4">配送信息</a>
+				<a @click="bindWrite(row)"
+					v-if="row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0">立即核销</a>
+				<Divider type="vertical" v-if="row._status === 2 || row._status === 8" />
+				<a @click="splitOrderDetail(row)" v-if="row._status === 8">查看子订单</a>
+
+				<Divider type="vertical" v-if="
+            row._status === 1 ||
+            ((row._status === 2 || row._status === 8) && (row.pinkStatus === null || row.pinkStatus === 2)) ||
+            row._status === 4 ||
+            (row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0)
+          " />
+				<template>
+					<Dropdown @on-click="changeMenu(row, $event)">
+						<a href="javascript:void(0)">
+							更多
+							<Icon type="ios-arrow-down"></Icon>
+						</a>
+						<DropdownMenu slot="list">
+							<DropdownItem name="1" ref="ones"
+								v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline'">立即支付
+							</DropdownItem>
+							<DropdownItem name="2">订单详情</DropdownItem>
+							<DropdownItem name="3">订单记录</DropdownItem>
+							<DropdownItem name="11" v-show="row._status >= 3 && row.express_dump">电子面单打印</DropdownItem>
+							<DropdownItem name="10" v-show="row._status >= 2">小票打印</DropdownItem>
+							<!-- <DropdownItem name="10" v-show="row._status >= 2">订单打印</DropdownItem> -->
+							<DropdownItem name="4" v-show="
+                  row._status !== 1 ||
+                  (row._status === 3 && row.use_integral > 0 && row.use_integral >= row.back_integral)
+                ">订单备注</DropdownItem>
+							<!-- <DropdownItem
+                name="5"
+                v-show="
+                  row._status === 3 &&
+                  (parseFloat(row.pay_price) > parseFloat(row.refund_price) ||
+                    (row.pay_price == 0 &&
+                      [0, 1].indexOf(row.refund_status) !== -1))
+                "
+                >立即退款</DropdownItem
+              >
+              <DropdownItem
+                name="6"
+                v-show="
+                  row._status !== 1 &&
+                  row.use_integral > 0 &&
+                  row.use_integral >= row.back_integral
+                "
+                >退积分</DropdownItem
+              >
+              <DropdownItem name="7" v-show="row._status === 3"
+                >不退款</DropdownItem
+              > -->
+							<DropdownItem name="8" v-show="row._status === 4">已收货</DropdownItem>
+							<DropdownItem name="9" v-if="row.is_del == 1">删除订单</DropdownItem>
+						</DropdownMenu>
+					</Dropdown>
+				</template>
+			</template>
+		</Table>
+		<div class="acea-row row-right page">
+			<!-- <Page
+        :total="page.total"
+        :current="page.pageNum"
+        show-elevator
+        show-total
+        @on-change="pageChange"
+        :page-size="page.pageSize"
+        @on-page-size-change="limitChange"
+        show-sizer
+      /> -->
+		</div>
+		<!-- 编辑 退款 退积分 不退款-->
+		<edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
+		<!-- 会员详情-->
+		<user-details ref="userDetails"></user-details>
+		<!-- 详情 -->
+		<details-from ref="detailss" :orderDatalist="orderDatalist" :orderId="orderId"></details-from>
+		<!-- 备注 -->
+		<order-remark ref="remarks" :orderId="orderId" @submitFail="submitFail"></order-remark>
+		<!-- 记录 -->
+		<order-record ref="record"></order-record>
+		<!-- 发送货 -->
+		<order-send ref="send" :orderId="orderId" :status="status" @submitFail="submitFail"></order-send>
+	</div>
+</template>
+
+<script>
+	import expandRow from './components/tableExpand.vue';
+	import {
+		orderList,
+		getOrdeDatas,
+		getDataInfo,
+		getRefundFrom,
+		getnoRefund,
+		refundIntegral,
+		getDistribution,
+		writeUpdate,
+		splitOrderList,
+	} from '@/api/shopOrder';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import editFrom from '../../../components/from/from';
+	import detailsFrom from './handle/orderDetails';
+	import orderRemark from './handle/orderRemark';
+	import orderRecord from './handle/orderRecord';
+	import orderSend from './handle/orderSend';
+	import userDetails from '@/pages/user/list/handle/userDetails';
+
+	export default {
+		name: 'table_list',
+		components: {
+			expandRow,
+			editFrom,
+			detailsFrom,
+			orderRemark,
+			orderRecord,
+			orderSend,
+			userDetails,
+		},
+		props: ['where', 'isAll'],
+		data() {
+			return {
+				delfromData: {},
+				modal: false,
+				orderList: [],
+				orderCards: [],
+				loading: false,
+				orderId: 0,
+				columns: [{
+						type: 'expand',
+						width: 30,
+						render: (h, params) => {
+							return h(expandRow, {
+								props: {
+									row: params.row,
+								},
+							});
+						},
+					},
+					{
+						width: 50,
+						align: 'center',
+						renderHeader: (h, params) => {
+							return h(
+								'div', {
+									class: {
+										'select-panel': true,
+									},
+									on: {
+										mouseenter: (e) => {
+											this.display = 'block';
+										},
+										mouseleave: (e) => {
+											this.display = 'none';
+										},
+									},
+								},
+								[
+									h('Checkbox', {
+										props: {
+											value: this.checkBox,
+										},
+										on: {
+											'on-change': (e) => {
+												this.checkBox = e;
+												this.$refs.table.selectAll(this.checkBox);
+												this.$emit('on-all', e ? 0 : -1);
+											},
+										},
+									}),
+									h(
+										'div', {
+											style: {
+												position: 'absolute',
+												top: 0,
+												zIndex: 2,
+												display: this.display,
+												width: '80px',
+												height: '100%',
+												padding: '0px 0',
+												borderRadius: '4px',
+												backgroundColor: '#fff',
+												boxShadow: '0 0px 5px rgba(0, 0, 0, 0.2)',
+												transform: 'translateX(25%)',
+											},
+										},
+										[
+											h(
+												'div', {
+													class: {
+														'select-item': true,
+														on: this.isAll == 0,
+													},
+													style: {
+														padding: '1px 6px',
+														cursor: 'pointer',
+														height: '50%',
+													},
+													on: {
+														click: (e) => {
+															if (this.isAll === 0) {
+																this.$emit('on-all', -1);
+																this.checkBox = false;
+																this.$refs.table.selectAll(this.checkBox);
+															} else {
+																this.$emit('on-all', 0);
+																if (!this.formSelection.length) {
+																	this.checkBox = true;
+																	this.$refs.table.selectAll(this
+																		.checkBox);
+																}
+															}
+															this.display = 'none';
+														},
+													},
+												},
+												'选择当页',
+											),
+											h(
+												'div', {
+													class: {
+														'select-item': true,
+														on: this.isAll == 1,
+													},
+													style: {
+														padding: '1px 6px',
+														cursor: 'pointer',
+														height: '50%',
+													},
+													on: {
+														click: (e) => {
+															if (this.isAll === 1) {
+																this.isAll = -1;
+																this.$emit('on-all', -1);
+																this.checkBox = false;
+															} else {
+																this.isAll = 1;
+																this.$emit('on-all', 1);
+																this.checkBox = true;
+															}
+															this.$refs.table.selectAll(this.checkBox);
+															this.display = 'none';
+														},
+													},
+												},
+												'选择全部',
+											),
+										],
+									),
+								],
+							);
+						},
+						render: (h, params) => {
+							return h('Checkbox', {
+								props: {
+									value: params.row.checkBox,
+								},
+								on: {
+									'on-change': (e) => {
+										if (e) {
+											this.formSelection.push(params.row);
+										} else {
+											this.checkBox = false;
+											this.formSelection.forEach((item, index) => {
+												if (item.id === params.row.id) {
+													this.formSelection.splice(index, 1);
+												}
+											});
+										}
+										this.$emit('on-all', this.formSelection.length ? 0 : -1);
+										// this.responseData为查询出的结果数据
+										// params.row.checkBox = e;
+										params.row.checkBox = e;
+										this.orderList[params.index].checkBox = e;
+									},
+								},
+								ref: 'checkbox',
+								refInFor: true,
+							});
+						},
+					},
+					{
+						title: '订单号',
+						align: 'center',
+						slot: 'order_id',
+						minWidth: 150,
+					},
+					{
+						title: '订单类型',
+						key: 'pink_name',
+						minWidth: 120,
+					},
+					{
+						title: '用户信息',
+						slot: 'nickname',
+						minWidth: 100,
+					},
+					{
+						title: '商品信息',
+						slot: 'info',
+						minWidth: 330,
+					},
+					{
+						title: '实际支付',
+						key: 'pay_price',
+						minWidth: 70,
+					},
+					{
+						title: '支付时间',
+						key: '_pay_time',
+						minWidth: 100,
+					},
+					{
+						title: '支付状态',
+						key: 'pay_type_name',
+						minWidth: 80,
+					},
+					{
+						title: '订单状态',
+						key: 'statusName',
+						slot: 'statusName',
+						minWidth: 120,
+					},
+					{
+						title: '操作',
+						slot: 'action',
+						fixed: 'right',
+						minWidth: 150,
+						align: 'center',
+					},
+				],
+				page: {
+					total: 0, // 总条数
+					pageNum: 1, // 当前页
+					pageSize: 10, // 每页显示条数
+				},
+				data: [],
+				FromData: null,
+				orderDatalist: null,
+				modalTitleSs: '',
+				isDelIdList: [],
+				checkBox: false,
+				formSelection: [],
+				selectionCopy: [],
+				display: 'none',
+				autoDisabled: false,
+				status: 0, //发货状态判断
+				// isAll: -1,
+			};
+		},
+		computed: {
+			...mapState('admin/shopOrder', ['orderPayType', 'orderStatus', 'orderTime', 'orderNum', 'fieldKey',
+				'orderType'
+			]),
+		},
+		mounted() {},
+		created() {
+			console.log(this.$store, 'store')
+			console.log('可以store')
+			this.getList();
+		},
+		watch: {
+			orderType: function() {
+				console.log('修改')
+				this.page.pageNum = 1;
+				this.getList();
+			},
+			formSelection(value) {
+				this.$emit('order-select', value);
+				if (value.length) {
+					this.$emit('auto-disabled', 0);
+				} else {
+					this.$emit('auto-disabled', 1);
+				}
+				let isDel = value.some((item) => {
+					return item.is_del === 1;
+				});
+				this.getIsDel(isDel);
+				this.getisDelIdListl(value);
+			},
+			orderList: {
+				deep: true,
+				handler(value) {
+					value.forEach((item) => {
+						this.formSelection.forEach((itm) => {
+							if (itm.id === item.id) {
+								item.checkBox = true;
+							}
+						});
+					});
+					const arr = this.orderList.filter((item) => item.checkBox);
+					if (this.orderList.length) {
+						this.checkBox = this.orderList.length === arr.length;
+					} else {
+						this.checkBox = false;
+					}
+				},
+			},
+		},
+		methods: {
+			...mapMutations('admin/shopOrder', ['getIsDel', 'getisDelIdListl']),
+			selectAll(row) {
+				if (row.length) {
+					this.formSelection = row;
+					this.selectionCopy = row;
+				}
+				this.selectionCopy.forEach((item, index) => {
+					item.checkBox = this.checkBox;
+					this.$set(this.orderList, index, item);
+				});
+			},
+			showUserInfo(row) {
+				this.$refs.userDetails.modals = true;
+				this.$refs.userDetails.getDetails(row.uid);
+			},
+			// 操作
+			changeMenu(row, name) {
+				this.orderId = row.id;
+				switch (name) {
+					case '1':
+						this.delfromData = {
+							title: '修改立即支付',
+							url: `mer/order/pay_offline/${row.id}`,
+							method: 'post',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改立即支付';
+						break;
+					case '2':
+						this.getData(row.id);
+						break;
+					case '3':
+						this.$refs.record.modals = true;
+						this.$refs.record.getList(row.id);
+						break;
+					case '4':
+						this.$refs.remarks.modals = true;
+						break;
+					case '5':
+						this.getRefundData(row.id);
+						break;
+					case '6':
+						this.getRefundIntegral(row.id);
+						break;
+					case '7':
+						this.getNoRefundData(row.id);
+						break;
+					case '8':
+						this.delfromData = {
+							title: '修改确认收货',
+							url: `mer/order/take/${row.id}`,
+							method: 'put',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改确认收货';
+						break;
+					case '10':
+						this.delfromData = {
+							title: '立即打印订单',
+							info: '您确认打印此订单吗?',
+							url: `mer/order/print/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					case '11':
+						this.delfromData = {
+							title: '立即打印电子面单',
+							info: '您确认打印此电子面单吗?',
+							url: `mer/order/order_dump/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					default:
+						this.delfromData = {
+							title: '删除订单',
+							url: `mer/order/del/${row.id}`,
+							method: 'DELETE',
+							ids: '',
+						};
+						// this.modalTitleSs = '删除订单';
+						this.delOrder(row, this.delfromData);
+				}
+			},
+			// 立即支付 /确认收货//删除单条订单
+			submitModel() {
+				this.getList();
+			},
+			pageChange(index) {
+				this.page.pageNum = index;
+				this.getList();
+			},
+			limitChange(limit) {
+				this.page.pageSize = limit;
+				this.getList();
+			},
+			getOrderList(id) {
+				splitOrderList(id).then((res) => {});
+			},
+			// 订单列表
+			getList(res) {
+				this.page.pageNum = res === 1 ? 1 : this.page.pageNum;
+				this.loading = true;
+
+				splitOrderList(this.$route.query.id)
+					.then(async (res) => {
+						let data = res.data;
+						// this.orderList = data.data;
+						this.orderList = data.map((item) => {
+							// item.checkBox = false;
+							if (this.isAll === 1) {
+								item.checkBox = true;
+							} else {
+								item.checkBox = false;
+							}
+							return item;
+						});
+						this.orderCards = data.stat;
+						this.page.total = data.count;
+						this.$emit('on-changeCards', data.stat);
+						this.loading = false;
+					})
+					.catch((res) => {
+						this.loading = false;
+						this.$Message.error(res.msg);
+					});
+			},
+			// 全选
+			onSelectTab(selection) {
+				this.formSelection = selection;
+				let isDel = selection.some((item) => {
+					return item.is_del === 1;
+				});
+				this.getIsDel(isDel);
+				this.getisDelIdListl(selection);
+			},
+			// 编辑
+			edit(row) {
+				this.getOrderData(row.id);
+			},
+			splitOrderDetail(row) {
+				this.$router.push({
+					path: 'split_order',
+					query: {
+						id: row.id,
+					},
+				});
+			},
+			// 删除单条订单
+			delOrder(row, data) {
+				if (row.is_del === 1) {
+					this.$modalSure(data)
+						.then((res) => {
+							this.$Message.success(res.msg);
+							this.getList();
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					const title = '错误!';
+					const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
+					this.$Modal.error({
+						title: title,
+						content: content,
+					});
+				}
+			},
+			// 获取编辑表单数据
+			getOrderData(id) {
+				getOrdeDatas(id)
+					.then(async (res) => {
+						if (res.data.status === false) {
+							return this.$authLapse(res.data);
+						}
+						this.$authLapse(res.data);
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 获取详情表单数据
+			getData(id) {
+				getDataInfo(id)
+					.then(async (res) => {
+						this.$refs.detailss.modals = true;
+						this.orderDatalist = res.data;
+						if (this.orderDatalist.orderInfo.refund_reason_wap_img) {
+							try {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = JSON.parse(
+									this.orderDatalist.orderInfo.refund_reason_wap_img,
+								);
+							} catch (e) {
+								this.orderDatalist.orderInfo.refund_reason_wap_img = [];
+							}
+						}
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 修改成功
+			submitFail() {
+				this.status = 0;
+				this.getList();
+			},
+			// 获取退款表单数据
+			getRefundData(id) {
+				this.$modalForm(getRefundFrom(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 获取退积分表单数据
+			getRefundIntegral(id) {
+				refundIntegral(id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 不退款表单数据
+			getNoRefundData(id) {
+				this.$modalForm(getnoRefund(id)).then(() => {
+					this.getList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 发送货
+			sendOrder(row) {
+				this.$refs.send.modals = true;
+				this.orderId = row.id;
+				this.status = row._status;
+				this.$refs.send.getList();
+				this.$refs.send.getDeliveryList();
+				this.$nextTick((e) => {
+					this.$refs.send.getCartInfo(row._status, row.id);
+				});
+			},
+			// 配送信息表单数据
+			delivery(row) {
+				getDistribution(row.id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			change(status) {},
+			// 数据导出;
+			exportData: function() {
+				this.$refs.table.exportCsv({
+					filename: '商品列表',
+				});
+			},
+			// 核销订单
+			bindWrite(row) {
+				let self = this;
+				this.$Modal.confirm({
+					title: '提示',
+					content: '确定要核销该订单吗?',
+					cancelText: '取消',
+					closable: true,
+					maskClosable: true,
+					onOk: function() {
+						writeUpdate(row.order_id).then((res) => {
+							self.$Message.success(res.msg);
+							self.getList();
+						});
+					},
+					onCancel: () => {},
+				});
+			},
+			onSelectCancel(selection, row) {},
+		},
+	};
+</script>
+
+<style scoped lang="stylus">
+	img {
+		height: 36px;
+		display: block;
+	}
+
+	.tabBox {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+
+		.tabBox_img {
+			width: 36px;
+			height: 36px;
+
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.tabBox_tit {
+			width: 60%;
+			font-size: 12px !important;
+			margin: 0 2px 0 10px;
+			letter-spacing: 1px;
+			padding: 5px 0;
+			box-sizing: border-box;
+		}
+	}
+
+	.orderData>>>.ivu-table-cell {
+		padding-left: 0 !important;
+	}
+
+	.vertical-center-modal {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.orderData .ivu-table {
+		overflow: visible !important;
+	}
+
+	.orderData .ivu-table th {
+		overflow: visible !important;
+	}
+
+	.orderData .ivu-table-header {
+		overflow: visible !important;
+	}
+
+	/deep/.ivu-table-header {
+		// overflow: visible;
+	}
+
+	/deep/.ivu-table th {
+		overflow: visible;
+	}
+
+	/deep/.select-item:hover {
+		background-color: #f3f3f3;
+	}
+
+	/deep/.select-on {
+		display: block;
+	}
+
+	/deep/.select-item.on {
+		background: #f3f3f3;
+	}
+
+	.pictrue-box {
+		display: flex;
+		align-item: center;
+	}
+
+	.pictrue {
+		width: 25px;
+		height: 25px;
+	}
+
+	.return {
+		border: 1px solid #ccc;
+		padding: 3px 5px;
+		margin-left: 15px;
+		border-radius: 3px;
+		cursor: pointer;
+	}
+</style>

+ 686 - 0
src/pages/shop_order/refund/index.vue

@@ -0,0 +1,686 @@
+<template>
+	<div>
+		<Card :bordered="false" dis-hover class="ivu-mt">
+			<Form ref="pagination" :model="pagination" :label-width="labelWidth" :label-position="labelPosition"
+				@submit.native.prevent>
+				<Col span="24" class="ivu-text-left">
+				<FormItem label="订单状态:">
+					<RadioGroup v-model="pagination.refund_type" type="button"
+						@on-change="selectChange2(pagination.refund_type)">
+						<Radio v-for="(item, index) in num" :key="index" :label="index">{{ item.name }}</Radio>
+					</RadioGroup>
+				</FormItem>
+				</Col>
+				<Row type="flex" :gutter="24">
+					<Col v-bind="grid" class="ivu-text-left">
+					<FormItem label="退款时间:">
+						<DatePicker :editable="false" @on-change="onchangeTime" :value="timeVal" format="yyyy/MM/dd"
+							type="daterange" placement="bottom-start" placeholder="请选择时间" style="width: 200px"
+							class="mr20" :options="options"></DatePicker>
+					</FormItem>
+					</Col>
+					<Col v-bind="grid">
+					<FormItem label="订单号:" label-for="title">
+						<Input search enter-button v-model="pagination.order_id" placeholder="请输入订单号"
+							@on-search="orderSearch" />
+					</FormItem>
+					</Col>
+				</Row>
+			</Form>
+			<Table :columns="thead" :data="tbody" ref="table" :loading="loading" highlight-row no-userFrom-text="暂无数据"
+				no-filtered-userFrom-text="暂无筛选结果">
+				<template slot-scope="{ row, index }" slot="order_id">
+					<span v-text="row.order_id" style="display: block"></span>
+					<span v-show="row.is_del === 1" style="color: #ed4014; display: block">用户已删除</span>
+				</template>
+				<template slot-scope="{ row, index }" slot="user">
+					<div>用户名:{{ row.nickname }}</div>
+					<div>用户ID:{{ row.uid }}</div>
+				</template>
+				<template slot-scope="{ row, index }" slot="refund_type">
+					<div v-if="row.refund_type == 1">仅退款</div>
+					<div v-else-if="row.refund_type == 2">退货退款</div>
+					<div v-else-if="row.refund_type == 3">
+						<div>拒绝退款</div>
+						<div>原因:{{ row.refuse_reason }}</div>
+					</div>
+					<div v-else-if="row.refund_type == 4">商品待退货</div>
+					<div v-else-if="row.refund_type == 5">
+						<div>退货待收货</div>
+						<div>单号:{{ row.refund_express }}</div>
+					</div>
+					<div v-else-if="row.refund_type == 6">已退款</div>
+				</template>
+				<template slot-scope="{ row, index }" slot="info">
+					<div class="tabBox" v-for="(val, i) in row._info" :key="i">
+						<div class="tabBox_img" v-viewer>
+							<img v-lazy="
+                  val.cart_info.productInfo.attrInfo
+                    ? val.cart_info.productInfo.attrInfo.image
+                    : val.cart_info.productInfo.image
+                " />
+						</div>
+						<span class="tabBox_tit">{{ val.cart_info.productInfo.store_name + ' | '
+              }}{{ val.cart_info.productInfo.attrInfo ? val.cart_info.productInfo.attrInfo.suk : '' }}</span>
+						<span
+							class="tabBox_pice">{{ '¥' + val.cart_info.truePrice + ' x ' + val.cart_info.cart_num }}</span>
+					</div>
+				</template>
+				<template slot-scope="{ row, index }" slot="order_info">
+					<div>订单金额:{{ row.pay_price }}</div>
+					<div>付款方式:{{ row.pay_type_name }}</div>
+					<div>订单状态:<span v-html="row.status_name.status_name"></span></div>
+				</template>
+				<template slot-scope="{ row, index }" slot="statusName">
+					<div v-html="row.refund_reason" class="pt5"></div>
+					<div class="pictrue-box" v-if="row.refund_img.length">
+						<div v-viewer v-for="(item, index) in row.refund_img || []" :key="index">
+							<img class="pictrue mr10" v-lazy="item" :src="item" />
+						</div>
+					</div>
+				</template>
+				<template slot-scope="{ row, index }" slot="action">
+					<!--          <a @click="edit(row)" v-if="row._status === 1">编辑</a>-->
+					<!--          <a-->
+					<!--            @click="sendOrder(row)"-->
+					<!--            v-if="-->
+					<!--              row._status === 2 && row.shipping_type === 1 && !row.pinkStatus-->
+					<!--            "-->
+					<!--            >发送货</a-->
+					<!--          >-->
+					<!--          <a-->
+					<!--            @click="sendOrder(row)"-->
+					<!--            v-if="-->
+					<!--              row._status === 2 &&-->
+					<!--              row.shipping_type === 1 &&-->
+					<!--              row.pinkStatus === 2-->
+					<!--            "-->
+					<!--            >发送货</a-->
+					<!--          >-->
+					<!--          <a @click="delivery(row)" v-if="row._status === 4">配送信息</a>-->
+					<!--          <a-->
+					<!--            @click="bindWrite(row)"-->
+					<!--            v-if="-->
+					<!--              row.shipping_type == 2 &&-->
+					<!--              row.status == 0 &&-->
+					<!--              row.paid == 1 &&-->
+					<!--              row.refund_status === 0-->
+					<!--            "-->
+					<!--            >立即核销</a-->
+					<!--          >-->
+					<!--          <Divider-->
+					<!--            type="vertical"-->
+					<!--            v-if="-->
+					<!--              row._status === 2 &&-->
+					<!--              row.shipping_type === 1 &&-->
+					<!--              row.pinkStatus === 2-->
+					<!--            "-->
+					<!--          />-->
+					<!--          <Divider-->
+					<!--            type="vertical"-->
+					<!--            v-if="-->
+					<!--              row._status === 1 ||-->
+					<!--              (row._status === 2 && !row.pinkStatus) ||-->
+					<!--              row._status === 4 ||-->
+					<!--              (row.shipping_type == 2 &&-->
+					<!--                row.status == 0 &&-->
+					<!--                row.paid == 1 &&-->
+					<!--                row.refund_status === 0)-->
+					<!--            "-->
+					<!--          />-->
+					<template>
+						<Dropdown @on-click="changeMenu(row, $event)" :transfer="true">
+							<a href="javascript:void(0)">更多
+								<Icon type="ios-arrow-down"></Icon>
+							</a>
+							<DropdownMenu slot="list">
+								<DropdownItem name="1" ref="ones"
+									v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline'">立即支付
+								</DropdownItem>
+								<DropdownItem name="2">订单详情</DropdownItem>
+								<!-- <DropdownItem name="3">订单记录</DropdownItem> -->
+								<!--                <DropdownItem-->
+								<!--                  name="11"-->
+								<!--                  v-show="row._status >= 3 && row.express_dump"-->
+								<!--                  >电子面单打印</DropdownItem-->
+								<!--                >-->
+								<!--                <DropdownItem name="10" v-show="row._status >= 2"-->
+								<!--                  >小票打印</DropdownItem-->
+								<!--                >-->
+								<DropdownItem name="4" v-show="
+                    row._status !== 1 ||
+                    (row._status === 3 && row.use_integral > 0 && row.use_integral >= row.back_integral)
+                  ">售后备注</DropdownItem>
+								<DropdownItem name="5" v-show="
+                    [1, 2, 5].includes(row.refund_type) &&
+                    (parseFloat(row.pay_price) > parseFloat(row.refunded_price) || row.pay_price == 0)
+                  ">{{ row.refund_type == 2 ? '同意退货' : '立即退款' }}</DropdownItem>
+								<!--                <DropdownItem-->
+								<!--                  name="6"-->
+								<!--                  v-show="-->
+								<!--                    row._status !== 1 &&-->
+								<!--                    row.use_integral > 0 &&-->
+								<!--                    row.use_integral >= row.back_integral-->
+								<!--                  "-->
+								<!--                  >退积分</DropdownItem-->
+								<!--                >-->
+								<DropdownItem name="7"
+									v-show="[1, 2].includes(row.refund_type) && row.is_pink_cancel === 0">不退款
+								</DropdownItem>
+								<DropdownItem name="8" v-show="row.is_del == 1">删除订单</DropdownItem>
+							</DropdownMenu>
+						</Dropdown>
+					</template>
+				</template>
+			</Table>
+			<div class="acea-row row-right page">
+				<Page :total="total" :current="pagination.page" show-elevator show-total @on-change="pageChange"
+					:page-size="pagination.limit" />
+			</div>
+		</Card>
+		<!-- 编辑 退款 退积分 不退款-->
+		<edit-from ref="edits" :FromData="FromData" @submitFail="submitFail"></edit-from>
+		<!-- 详情 -->
+		<details-from ref="detailss" :orderDatalist="orderDatalist" :orderId="orderId" :is_refund="1"></details-from>
+		<!-- 备注 -->
+		<order-remark ref="remarks" remarkType="refund" :orderId="orderId" @submitFail="submitFail"></order-remark>
+		<!-- 记录 -->
+		<order-record ref="record"></order-record>
+	</div>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex';
+	import {
+		orderRefundList,
+		orderList,
+		getOrdeDatas,
+		getDataInfoNew,
+		getRefundFrom,
+		getNewRefundFrom,
+		getnoRefund,
+		getNewnoRefundFrom,
+		refundIntegral,
+		getDistribution,
+		writeUpdate,
+	} from '@/api/shopOrder';
+	import editFrom from '@/components/from/from';
+	import detailsFrom from '../orderList/handle/orderDetails';
+	import orderRemark from '../orderList/handle/orderRemark';
+	import orderRecord from '../orderList/handle/orderRecord';
+	export default {
+		components: {
+			editFrom,
+			detailsFrom,
+			orderRemark,
+			orderRecord
+		},
+		data() {
+			return {
+				grid: {
+					xl: 7,
+					lg: 7,
+					md: 12,
+					sm: 24,
+					xs: 24,
+				},
+				thead: [{
+						title: '订单号',
+						align: 'center',
+						slot: 'order_id',
+						minWidth: 150,
+					},
+					{
+						title: '用户信息',
+						key: 'nickname',
+						minWidth: 100,
+					},
+					{
+						title: '商品信息',
+						slot: 'info',
+						minWidth: 330,
+					},
+					{
+						title: '实际支付',
+						key: 'pay_price',
+						minWidth: 70,
+					},
+					{
+						title: '发起退款时间',
+						key: 'add_time',
+						minWidth: 100,
+					},
+					{
+						title: '退款状态',
+						slot: 'refund_type',
+						minWidth: 100,
+					},
+					{
+						title: '退款信息',
+						slot: 'statusName',
+						minWidth: 120,
+					},
+					{
+						title: '售后备注',
+						key: 'remark',
+						minWidth: 100,
+					},
+					{
+						title: '操作',
+						slot: 'action',
+						fixed: 'right',
+						minWidth: 150,
+						align: 'center',
+					},
+				],
+				tbody: [],
+				num: [],
+				orderDatalist: null,
+				loading: false,
+				FromData: null,
+				total: 0,
+				orderId: 0,
+				animal: 1,
+				pagination: {
+					page: 1,
+					limit: 15,
+					order_id: '',
+					time: '',
+					refund_type: 0,
+				},
+				options: {
+					shortcuts: [{
+							text: '今天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date()
+									.getDate()));
+								return [start, end];
+							},
+						},
+						{
+							text: '昨天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 1)),
+								);
+								end.setTime(
+									end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 1)),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '最近7天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 6)),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '最近30天',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(
+									start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+										new Date().getDate() - 29)),
+								);
+								return [start, end];
+							},
+						},
+						{
+							text: '本月',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(),
+									1)));
+								return [start, end];
+							},
+						},
+						{
+							text: '本年',
+							value() {
+								const end = new Date();
+								const start = new Date();
+								start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)));
+								return [start, end];
+							},
+						},
+					],
+				},
+				timeVal: [],
+				modal: false,
+				qrcode: null,
+				name: '',
+				spin: false,
+			};
+		},
+		computed: {
+			...mapState('shopOrder', ['orderChartType']),
+			// ...mapState("admin/layout", ["isMobile"]),
+			labelWidth() {
+				return this.isMobile ? undefined : 75;
+			},
+			labelPosition() {
+				return this.isMobile ? 'top' : 'right';
+			},
+		},
+		created() {
+			this.getOrderList();
+		},
+		methods: {
+			onchangeCode(e) {
+				this.animal = e;
+				this.qrcodeShow();
+			},
+			// 具体日期搜索();
+			onchangeTime(e) {
+				this.pagination.page = 1;
+				this.timeVal = e;
+				this.pagination.time = this.timeVal[0] ? this.timeVal.join('-') : '';
+				this.getOrderList();
+			},
+			// 操作
+			changeMenu(row, name) {
+				this.orderId = row.id;
+				switch (name) {
+					case '1':
+						this.delfromData = {
+							title: '修改立即支付',
+							url: `mer/order/pay_offline/${row.id}`,
+							method: 'post',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getOrderList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						// this.modalTitleSs = '修改立即支付';
+						break;
+					case '2':
+						this.getData(row.order_id);
+						break;
+					case '3':
+						this.$refs.record.modals = true;
+						this.$refs.record.getList(row.id);
+						break;
+					case '4':
+						this.$refs.remarks.modals = true;
+						this.$refs.remarks.formValidate.remark = row.remark;
+						break;
+					case '5':
+						this.getRefundData(row.id, row.refund_type);
+						break;
+					case '6':
+						this.getRefundIntegral(row.id);
+						break;
+					case '7':
+						this.getNoRefundData(row.id);
+						break;
+					case '8':
+						this.delfromData = {
+							title: '删除订单',
+							url: `mer/order/del/${row.store_order_id}`,
+							method: 'DELETE',
+							ids: '',
+						};
+						this.delOrder(row, this.delfromData);
+						break;
+					case '10':
+						this.delfromData = {
+							title: '立即打印订单',
+							info: '您确认打印此订单吗?',
+							url: `mer/order/print/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.$emit('changeGetTabs');
+								this.getOrderList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					case '11':
+						this.delfromData = {
+							title: '立即打印电子面单',
+							info: '您确认打印此电子面单吗?',
+							url: `mer/order/order_dump/${row.id}`,
+							method: 'get',
+							ids: '',
+						};
+						this.$modalSure(this.delfromData)
+							.then((res) => {
+								this.$Message.success(res.msg);
+								this.getOrderList();
+							})
+							.catch((res) => {
+								this.$Message.error(res.msg);
+							});
+						break;
+					default:
+						this.delfromData = {
+							title: '删除订单',
+							url: `mer/order/del/${row.id}`,
+							method: 'DELETE',
+							ids: '',
+						};
+						// this.modalTitleSs = '删除订单';
+						this.delOrder(row, this.delfromData);
+				}
+			},
+			// 获取退款表单数据
+			getRefundData(id, refund_type) {
+				if (refund_type == 2) {
+					this.delfromData = {
+						title: '同意退货退款',
+						url: `mer/refund/agree/${id}`,
+						method: 'get',
+					};
+					this.$modalSure(this.delfromData)
+						.then((res) => {
+							this.$Message.success(res.msg);
+							this.getOrderList();
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					this.$modalForm(getNewRefundFrom(id)).then(() => {
+						this.getOrderList();
+						this.$emit('changeGetTabs');
+					});
+				}
+			},
+			// 获取退积分表单数据
+			getRefundIntegral(id) {
+				refundIntegral(id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 获取详情表单数据
+			getData(id) {
+				getDataInfoNew(id)
+					.then(async (res) => {
+						this.orderDatalist = res.data;
+						if (this.orderDatalist.orderInfo.refund_img.length) {
+							try {
+								this.orderDatalist.orderInfo.refund_img = JSON.parse(this.orderDatalist.orderInfo
+									.refund_img);
+							} catch (e) {
+								this.orderDatalist.orderInfo.refund_img = [];
+							}
+						}
+						this.$nextTick((e) => {
+							this.$refs.detailss.modals = true;
+						});
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+			// 删除单条订单
+			delOrder(row, data) {
+				if (row.is_del === 1) {
+					this.$modalSure(data)
+						.then((res) => {
+							this.$Message.success(res.msg);
+							this.getOrderList();
+						})
+						.catch((res) => {
+							this.$Message.error(res.msg);
+						});
+				} else {
+					const title = '错误!';
+					const content = '<p>您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单!</p>';
+					this.$Modal.error({
+						title: title,
+						content: content,
+					});
+				}
+			},
+			// 修改成功
+			submitFail() {
+				this.getOrderList();
+			},
+			// 订单选择状态
+			selectChange2(tab) {
+				this.pagination.page = 1;
+				this.pagination.refund_type = tab;
+				this.getOrderList(tab);
+			},
+			// 不退款表单数据
+			getNoRefundData(id) {
+				this.$modalForm(getNewnoRefundFrom(id)).then(() => {
+					this.getOrderList();
+					this.$emit('changeGetTabs');
+				});
+			},
+			// 订单列表
+			getOrderList() {
+				this.loading = true;
+				orderRefundList(this.pagination)
+					.then((res) => {
+						this.loading = false;
+						const {
+							count,
+							list,
+							num
+						} = res.data;
+						this.total = count;
+						this.tbody = list;
+						this.num = num;
+					})
+					.catch((err) => {
+						this.loading = false;
+						this.$Message.error(err.msg);
+					});
+			},
+			// 分页
+			pageChange(index) {
+				this.pagination.page = index;
+				this.getOrderList();
+			},
+			nameSearch() {
+				this.pagination.page = 1;
+				this.getOrderList();
+			},
+			// 订单搜索
+			orderSearch() {
+				this.pagination.page = 1;
+				this.getOrderList();
+			},
+			// 配送信息表单数据
+			delivery(row) {
+				getDistribution(row.id)
+					.then(async (res) => {
+						this.FromData = res.data;
+						this.$refs.edits.modals = true;
+					})
+					.catch((res) => {
+						this.$Message.error(res.msg);
+					});
+			},
+		},
+	};
+</script>
+
+<style lang="stylus" scoped>
+	.code {
+		position: relative;
+	}
+
+	.ivu-form-item {}
+
+	.QRpic {
+		width: 180px;
+		height: 259px;
+
+		img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.tabBox {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+
+		.tabBox_img {
+			width: 36px;
+			height: 36px;
+
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.tabBox_tit {
+			width: 60%;
+			font-size: 12px !important;
+			margin: 0 2px 0 10px;
+			letter-spacing: 1px;
+			padding: 5px 0;
+			box-sizing: border-box;
+		}
+	}
+
+	.pictrue-box {
+		display: flex;
+		align-item: center;
+	}
+
+	.pictrue {
+		width: 25px;
+		height: 25px;
+	}
+</style>

+ 119 - 97
src/router/index.js

@@ -21,70 +21,83 @@ import routes from './routers';
 import Setting from '@/setting';
 import store from '@/store';
 import iView from 'iview';
-import { removeCookies, getCookies, setTitle } from '@/libs/util';
-import { includeArray } from '@/libs/auth';
-import { PrevLoading } from '@/utils/loading.js';
+import {
+	removeCookies,
+	getCookies,
+	setTitle
+} from '@/libs/util';
+import {
+	includeArray
+} from '@/libs/auth';
+import {
+	PrevLoading
+} from '@/utils/loading.js';
 
 Vue.use(Router);
 // 解决 `element ui` 导航栏重复点菜单报错问题
 const originalPush = Router.prototype.push;
 Router.prototype.push = function push(location) {
-  return originalPush.call(this, location).catch((err) => err);
+	return originalPush.call(this, location).catch((err) => err);
 };
 
 const router = new Router({
-  routes,
-  mode: Setting.routerMode,
+	routes,
+	mode: Setting.routerMode,
 });
 
 // 判断路由 meta.roles 中是否包含当前登录用户权限字段
 export function hasAuth(roles, route) {
-  if (route.meta && route.meta.auth) return roles.some((role) => route.meta.auth.includes(role));
-  else return true;
+	if (route.meta && route.meta.auth) return roles.some((role) => route.meta.auth.includes(role));
+	else return true;
 }
 
 // 递归过滤有权限的路由
 export function setFilterMenuFun(routes, role) {
-  const menu = [];
-  routes.forEach((route) => {
-    const item = { ...route };
-    if (hasAuth(role, item)) {
-      if (item.children) item.children = setFilterMenuFun(item.children, role);
-      menu.push(item);
-    }
-  });
-  return menu;
+	const menu = [];
+	routes.forEach((route) => {
+		const item = {
+			...route
+		};
+		if (hasAuth(role, item)) {
+			if (item.children) item.children = setFilterMenuFun(item.children, role);
+			menu.push(item);
+		}
+	});
+	return menu;
 }
 
 // 递归处理多余的 layout : <router-view>,让需要访问的组件保持在第一层 layout 层。
 // 因为 `keep-alive` 只能缓存二级路由
 // 默认初始化时就执行
 export function keepAliveSplice(to) {
-  if (to.matched && to.matched.length > 2) {
-    to.matched.map((v, k) => {
-      if (v.components.default instanceof Function) {
-        v.components.default().then((components) => {
-          if (components.default.name === 'parent') {
-            to.matched.splice(k, 1);
-            router.push({ path: to.path, query: to.query });
-            keepAliveSplice(to);
-          }
-        });
-      } else {
-        if (v.components.default.name === 'parent') {
-          to.matched.splice(k, 1);
-          keepAliveSplice(to);
-        }
-      }
-    });
-  }
+	if (to.matched && to.matched.length > 2) {
+		to.matched.map((v, k) => {
+			if (v.components.default instanceof Function) {
+				v.components.default().then((components) => {
+					if (components.default.name === 'parent') {
+						to.matched.splice(k, 1);
+						router.push({
+							path: to.path,
+							query: to.query
+						});
+						keepAliveSplice(to);
+					}
+				});
+			} else {
+				if (v.components.default.name === 'parent') {
+					to.matched.splice(k, 1);
+					keepAliveSplice(to);
+				}
+			}
+		});
+	}
 }
 
 // 延迟关闭进度条
 export function delayNProgressDone(time = 300) {
-  setTimeout(() => {
-    NProgress.done();
-  }, time);
+	setTimeout(() => {
+		NProgress.done();
+	}, time);
 }
 
 /**
@@ -93,66 +106,75 @@ export function delayNProgressDone(time = 300) {
  */
 
 router.beforeEach(async (to, from, next) => {
-  // PrevLoading.start();
-  keepAliveSplice(to);
+	// PrevLoading.start();
+	keepAliveSplice(to);
 
-  if (to.fullPath.indexOf('kefu') != -1) {
-    return next();
-  }
-  // if (Setting.showProgressBar) iView.LoadingBar.start()
-  // 判断是否需要登录才可以进入
-  if (to.matched.some((_) => _.meta.auth)) {
-    // 这里依据 token 判断是否登录,可视情况修改
-    const token = getCookies('token');
-    if (token && token !== 'undefined') {
-      const access = store.state.userInfo.uniqueAuth;
-      const isPermission = includeArray(to.meta.auth, access); //  判断是否有权限  TODO
-      if (access.length) {
-        next();
-      } else {
-        if (access.length == 0) {
-          next({
-            name: 'login',
-            query: {
-              redirect: to.fullPath,
-            },
-          });
-          localStorage.clear();
-          removeCookies('token');
-          removeCookies('expires_time');
-          removeCookies('uuid');
-        } else {
-          next({
-            name: '403',
-          });
-        }
-      }
-      // next();
-    } else {
-      // 没有登录的时候跳转到登录界面
-      // 携带上登陆成功之后需要跳转的页面完整路径
-      next({
-        name: 'login',
-        query: {
-          redirect: to.fullPath,
-        },
-      });
-      localStorage.clear();
-      removeCookies('token');
-      removeCookies('expires_time');
-      removeCookies('uuid');
-    }
-  } else {
-    // 不需要身份校验 直接通过
-    next();
-  }
+	if (to.fullPath.indexOf('kefu') != -1) {
+		return next();
+	}
+	// if (Setting.showProgressBar) iView.LoadingBar.start()
+	// 判断是否需要登录才可以进入
+	if (to.matched.some((_) => _.meta.auth)) {
+		// 这里依据 token 判断是否登录,可视情况修改
+		const token = getCookies('token');
+		if (token && token !== 'undefined') {
+			const access = store.state.userInfo.uniqueAuth;
+			const isPermission = includeArray(to.meta.auth, access); //  判断是否有权限  TODO
+			if (access.length) {
+				next();
+			} else {
+				if (access.length == 0) {
+					if (store.state.userInfo.type == 'admin') {
+						next({
+							name: 'login',
+							query: {
+								redirect: to.fullPath,
+							},
+						});
+					} else if (store.state.userInfo.type == 'shanghu') {
+						next({
+							name: 'shoplogin',
+							query: {
+								redirect: to.fullPath,
+							},
+						});
+					}
+					localStorage.clear();
+					removeCookies('token');
+					removeCookies('expires_time');
+					removeCookies('uuid');
+				} else {
+					next({
+						name: '403',
+					});
+				}
+			}
+			// next();
+		} else {
+			// 没有登录的时候跳转到登录界面
+			// 携带上登陆成功之后需要跳转的页面完整路径
+			next({
+				name: 'login',
+				query: {
+					redirect: to.fullPath,
+				},
+			});
+			localStorage.clear();
+			removeCookies('token');
+			removeCookies('expires_time');
+			removeCookies('uuid');
+		}
+	} else {
+		// 不需要身份校验 直接通过
+		next();
+	}
 });
 router.afterEach((to) => {
-  // if (Setting.showProgressBar) iView.LoadingBar.finish()
-  // 更改标题
-  setTitle(to, router.app);
-  // 返回页面顶端
-  window.scrollTo(0, 0);
-  PrevLoading.done();
+	// if (Setting.showProgressBar) iView.LoadingBar.finish()
+	// 更改标题
+	setTitle(to, router.app);
+	// 返回页面顶端
+	window.scrollTo(0, 0);
+	PrevLoading.done();
 });
-export default router;
+export default router;

+ 85 - 77
src/router/modules/finance.js

@@ -14,80 +14,88 @@ let routePre = setting.routePre;
 
 const pre = 'finance_';
 export default {
-  path: routePre + '/finance',
-  name: 'finance',
-  header: 'finance',
-  meta: {
-    // 授权标识
-    auth: ['admin-finance'],
-  },
-  redirect: {
-    name: `${pre}cashApply`,
-  },
-  component: LayoutMain,
-  children: [
-    {
-      path: 'billing_records/index',
-      name: `${pre}billingRecords`,
-      meta: {
-        auth: ['finance-billing_records-index'],
-        title: '账单记录',
-      },
-      component: () => import('@/pages/finance/billingRecords/index'),
-    },
-    {
-      path: 'capital_flow/index',
-      name: `${pre}capitalFlow`,
-      meta: {
-        auth: ['finance-capital_flow-index'],
-        title: '资金流水',
-      },
-      component: () => import('@/pages/finance/capitalFlow/index'),
-    },
-    {
-      path: 'user_extract/index',
-      name: `${pre}cashApply`,
-      meta: {
-        auth: ['finance-user_extract'],
-        title: '提现申请',
-      },
-      component: () => import('@/pages/finance/userExtract/index'),
-    },
-    {
-      path: 'user_recharge/index',
-      name: `${pre}recharge`,
-      meta: {
-        auth: ['finance-user-recharge'],
-        title: '充值记录',
-      },
-      component: () => import('@/pages/finance/financialRecords/recharge'),
-    },
-    {
-      path: 'finance/bill',
-      name: `${pre}bill`,
-      meta: {
-        auth: ['finance-finance-bill'],
-        title: '资金记录',
-      },
-      component: () => import('@/pages/finance/financialRecords/bill'),
-    },
-    {
-      path: 'finance/commission',
-      name: `${pre}commissionRecord`,
-      meta: {
-        auth: ['finance-finance-commission'],
-        title: '佣金记录',
-      },
-      component: () => import('@/pages/finance/commission/index'),
-    },
-    {
-      path: 'balance/balance',
-      name: `${pre}balance`,
-      meta: {
-        auth: ['finance-user-balance'],
-        title: '余额记录',
-      },
-      component: () => import('@/pages/finance/balance/index'),
-    },
-  ],
-};
+	path: routePre + '/finance',
+	name: 'finance',
+	header: 'finance',
+	meta: {
+		// 授权标识
+		auth: ['admin-finance'],
+	},
+	redirect: {
+		name: `${pre}cashApply`,
+	},
+	component: LayoutMain,
+	children: [{
+			path: 'billing_records/index',
+			name: `${pre}billingRecords`,
+			meta: {
+				auth: ['finance-billing_records-index'],
+				title: '账单记录',
+			},
+			component: () => import('@/pages/finance/billingRecords/index'),
+		},
+		{
+			path: 'capital_flow/index',
+			name: `${pre}capitalFlow`,
+			meta: {
+				auth: ['finance-capital_flow-index'],
+				title: '资金流水',
+			},
+			component: () => import('@/pages/finance/capitalFlow/index'),
+		},
+		{
+			path: 'user_extract/index',
+			name: `${pre}cashApply`,
+			meta: {
+				auth: ['finance-user_extract'],
+				title: '提现申请',
+			},
+			component: () => import('@/pages/finance/userExtract/index'),
+		},
+		{
+			path: 'shop_extract/index',
+			name: `${pre}shopApply`,
+			meta: {
+				auth: ['finance-shop_extract'],
+				title: '商家提现',
+			},
+			component: () => import('@/pages/finance/shopExtract/index'),
+		},
+		{
+			path: 'user_recharge/index',
+			name: `${pre}recharge`,
+			meta: {
+				auth: ['finance-user-recharge'],
+				title: '充值记录',
+			},
+			component: () => import('@/pages/finance/financialRecords/recharge'),
+		},
+		{
+			path: 'finance/bill',
+			name: `${pre}bill`,
+			meta: {
+				auth: ['finance-finance-bill'],
+				title: '资金记录',
+			},
+			component: () => import('@/pages/finance/financialRecords/bill'),
+		},
+		{
+			path: 'finance/commission',
+			name: `${pre}commissionRecord`,
+			meta: {
+				auth: ['finance-finance-commission'],
+				title: '佣金记录',
+			},
+			component: () => import('@/pages/finance/commission/index'),
+		},
+		{
+			path: 'balance/balance',
+			name: `${pre}balance`,
+			meta: {
+				auth: ['finance-user-balance'],
+				title: '余额记录',
+			},
+			component: () => import('@/pages/finance/balance/index'),
+		},
+	],
+};

+ 631 - 632
src/router/modules/setting.js

@@ -13,640 +13,639 @@ import setting from '@/setting';
 let routePre = setting.routePre;
 
 const meta = {
-  auth: true,
+	auth: true,
 };
 
 const pre = 'setting_';
 
 export default {
-  path: routePre + '/setting',
-  name: 'setting',
-  header: 'setting',
-  redirect: {
-    name: `${pre}setSystem`,
-  },
-  component: LayoutMain,
-  children: [
-    {
-      path: 'system_role/index',
-      name: `${pre}systemRole`,
-      meta: {
-        auth: ['setting-system-role'],
-        title: '身份管理',
-      },
-      component: () => import('@/pages/setting/systemRole/index'),
-    },
-    {
-      path: 'system_admin/index',
-      name: `${pre}systemAdmin`,
-      meta: {
-        auth: ['setting-system-list'],
-        title: '管理员列表',
-      },
-      component: () => import('@/pages/setting/systemAdmin/index'),
-    },
-    {
-      path: 'system_menus/index',
-      name: `${pre}systemMenus`,
-      meta: {
-        auth: ['setting-system-menus'],
-        title: '权限规则',
-      },
-      component: () => import('@/pages/setting/systemMenus/index'),
-    },
-    {
-      path: 'system_config',
-      name: `${pre}setSystem`,
-      meta: {
-        auth: ['setting-system-config'],
-        title: '系统设置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'system_config/:type?/:tab_id?',
-      name: `${pre}setApp`,
-      meta: {
-        title: '应用设置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'system_config_retail/:type?/:tab_id?',
-      name: `${pre}distributionSet`,
-      meta: {
-        ...meta,
-        title: '分销配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'membership_level/index',
-      name: `${pre}membershipLevel`,
-      meta: {
-        ...meta,
-        title: '分销等级',
-      },
-      component: () => import('@/pages/setting/membershipLevel/index'),
-    },
-    {
-      path: 'system_config_message/:type?/:tab_id?',
-      name: `${pre}message`,
-      meta: {
-        auth: ['setting-system-config-message'],
-        title: '短信开关',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'notification/index',
-      name: `${pre}notification`,
-      meta: {
-        auth: ['setting-notification'],
-        title: '消息管理',
-      },
-      component: () => import('@/pages/setting/notification/index'),
-    },
-    {
-      path: 'notification/notificationEdit',
-      name: `${pre}notificationEdit`,
-      meta: {
-        auth: ['setting-notification'],
-        title: '消息编辑',
-      },
-      component: () => import('@/pages/setting/notification/notificationEdit'),
-    },
-    {
-      path: 'system_config_logistics/:type?/:tab_id?',
-      name: `${pre}logistics`,
-      meta: {
-        auth: ['setting-system-config-logistics'],
-        title: '物流配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'sms/sms_config/index',
-      name: `${pre}config`,
-      meta: {
-        auth: ['setting-sms-sms-config'],
-        title: '一号通账户',
-      },
-      component: () => import('@/pages/notify/smsConfig/index'),
-    },
-    {
-      path: 'sms/sms_template_apply/index',
-      name: `${pre}smsTemplateApply`,
-      meta: {
-        auth: ['setting-sms-config-template'],
-        title: '短信模板',
-      },
-      component: () => import('@/pages/notify/smsTemplateApply/index'),
-    },
-    {
-      path: 'sms/sms_pay/index',
-      name: `${pre}smsPay`,
-      meta: {
-        auth: ['setting-sms-sms-template'],
-        title: '短信购买',
-      },
-      component: () => import('@/pages/notify/smsPay/index'),
-    },
-    {
-      path: 'sms/sms_template_apply/commons',
-      name: `${pre}commons`,
-      meta: {
-        ...meta,
-        title: '公共短信模板',
-      },
-      component: () => import('@/pages/notify/smsTemplateApply/index'),
-    },
-    {
-      path: 'system_group_data/index/:id',
-      name: `${pre}groupDataIndex`,
-      meta: {
-        auth: ['setting-system-group_data-index'],
-        title: '首页导航按钮',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/slide/:id',
-      name: `${pre}groupDataSlide`,
-      meta: {
-        auth: ['setting-system-group_data-slide'],
-        title: '首页幻灯片',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/sign/:id',
-      name: `${pre}groupDataSign`,
-      meta: {
-        auth: ['setting-system-group_data-sign'],
-        title: '签到天数配置',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    // {
-    //   path: 'system_group_data/order/:id',
-    //   name: `${pre}groupDataOrder`,
-    //   meta: {
-    //     auth: ['setting-system-group_data-order'],
-    //     title: '订单详情动态图'
-    //   },
-    //   component: () => import('@/pages/system/group/list')
-    // },
-    // {
-    //   path: 'system_group_data/user/:id',
-    //   name: `${pre}groupDataUser`,
-    //   meta: {
-    //     auth: ['setting-system-group_data-user'],
-    //     title: '个人中心菜单'
-    //   },
-    //   component: () => import('@/pages/system/group/list')
-    // },
-    {
-      path: 'system_group_data/new/:id',
-      name: `${pre}groupDataNew`,
-      meta: {
-        auth: ['setting-system-group_data-new'],
-        title: '首页滚动新闻',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/search/:id',
-      name: `${pre}groupDataNew`,
-      meta: {
-        auth: ['setting-system-group_data-search'],
-        title: '热门搜索',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/hot/:id',
-      name: `${pre}groupDataHot`,
-      meta: {
-        auth: ['setting-system-group_data-hot'],
-        title: '热门榜单推荐',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/new_product/:id',
-      name: `${pre}groupDataNewProduct`,
-      meta: {
-        auth: ['setting-system-group_data-new_product'],
-        title: '首发新品推荐',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/promotion/:id',
-      name: `${pre}groupDataPromotion`,
-      meta: {
-        auth: ['setting-system-group_data-promotion'],
-        title: '促销单品推荐',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/poster/:id',
-      name: `${pre}groupDataPoster`,
-      meta: {
-        auth: ['setting-system-group_data-poster'],
-        title: '个人中心分销海报',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/best/:id',
-      name: `${pre}groupDataBest`,
-      meta: {
-        auth: ['setting-system-group_data-best'],
-        title: '精品推荐',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/activity/:id',
-      name: `${pre}groupDataActivity`,
-      meta: {
-        auth: ['setting-system-group_data-activity'],
-        title: '首页活动区域图片',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/system/:id',
-      name: `${pre}groupDataSystem`,
-      meta: {
-        auth: ['setting-system-group_data-system'],
-        title: '首页配置',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_group_data/hot_money/:id',
-      name: `${pre}groupDataHotMoney`,
-      meta: {
-        auth: ['admin-setting-system_group_data-hot_money'],
-        title: '首页超值爆款',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'merchant/system_store/index',
-      name: `${pre}systemStore`,
-      meta: {
-        auth: ['setting-system-config-merchant'],
-        title: '门店设置',
-      },
-      component: () => import('@/pages/setting/systemStore/index'),
-    },
-    {
-      path: 'freight/express/index',
-      name: `${pre}freight`,
-      meta: {
-        auth: ['setting-freight-express'],
-        title: '物流公司',
-      },
-      component: () => import('@/pages/setting/freight/index'),
-    },
-    {
-      path: 'store_service/index',
-      name: `${pre}service`,
-      meta: {
-        auth: ['setting-store-service'],
-        title: '客服管理',
-      },
-      component: () => import('@/pages/setting/storeService/index'),
-    },
-    {
-      path: 'freight/city/list',
-      name: `${pre}dada`,
-      meta: {
-        auth: ['setting-system-city'],
-        title: '城市数据',
-      },
-      component: () => import('@/pages/setting/cityDada/index'),
-    },
-    {
-      path: 'freight/shipping_templates/list',
-      name: `${pre}templates`,
-      meta: {
-        auth: ['setting-shipping-templates'],
-        title: '运费模板',
-      },
-      component: () => import('@/pages/setting/shippingTemplates/index'),
-    },
-    {
-      path: 'merchant/system_store/list',
-      name: `${pre}store`,
-      meta: {
-        auth: ['setting-merchant-system-store'],
-        title: '提货点',
-      },
-      component: () => import('@/pages/setting/storeList/index'),
-    },
-    {
-      path: 'merchant/system_store_staff/index',
-      name: `${pre}staff`,
-      meta: {
-        auth: ['setting-merchant-system-store-staff'],
-        title: '核销员',
-      },
-      component: () => import('@/pages/setting/clerkList/index'),
-    },
-    {
-      path: 'merchant/system_verify_order/index',
-      name: `${pre}order`,
-      meta: {
-        auth: ['setting-merchant-system-verify-order'],
-        title: '核销订单',
-      },
-      component: () => import('@/pages/setting/verifyOrder/index'),
-    },
-    {
-      path: 'theme_style',
-      name: `${pre}themeStyle`,
-      meta: {
-        auth: ['admin-setting-theme_style'],
-        title: '主题风格',
-      },
-      component: () => import('@/pages/setting/themeStyle/index'),
-    },
-    {
-      path: 'pages',
-      name: `${pre}page`,
-      header: 'setting',
-      redirect: {
-        name: `${pre}devise`,
-      },
-    },
-    {
-      path: 'pages/devise',
-      name: `${pre}devise`,
-      meta: {
-        auth: ['admin-setting-pages-devise'],
-        title: '店铺装修',
-      },
-      component: () => import('@/pages/setting/devise/list'),
-    },
-    {
-      path: 'pages/diy',
-      name: `${pre}diy`,
-      meta: {
-        auth: ['admin-setting-pages-diy'],
-        title: '页面设计',
-        activeMenu: routePre + '/setting/pages/devise',
-      },
-      component: () => import('@/pages/setting/devisePage/index'),
-    },
-    {
-      path: 'pages/diy_index',
-      name: `${pre}index_diy`,
-      meta: {
-        auth: ['admin-setting-pages-diy'],
-        title: '首页设计',
-        fullScreen: true, //是否全屏显示main区域
-      },
-      component: () => import('@/pages/setting/devise/diyIndex'),
-    },
-    {
-      path: 'pages/links',
-      name: `${pre}links`,
-      meta: {
-        auth: ['admin-setting-pages-links'],
-        title: '页面链接',
-      },
-      component: () => import('@/pages/setting/devise/links'),
-    },
-    {
-      path: 'store_service/speechcraft',
-      name: `${pre}speechcraft`,
-      meta: {
-        auth: ['admin-setting-store_service-speechcraft'],
-        title: '客服话术',
-      },
-      component: () => import('@/pages/setting/storeService/speechcraft'),
-    },
-    {
-      path: 'store_service/feedback',
-      name: `${pre}feedback`,
-      meta: {
-        auth: ['admin-setting-store_service-feedback'],
-        title: '用户留言',
-      },
-      component: () => import('@/pages/setting/storeService/feedback'),
-    },
-    {
-      path: 'system_group_data/pc/:id',
-      name: `${pre}groupDataPc`,
-      meta: {
-        auth: ['setting-system-group_data-pc'],
-        title: 'PC主页轮播',
-      },
-      component: () => import('@/pages/system/group/list'),
-    },
-    {
-      path: 'system_config_member_right/:type?/:tab_id?',
-      name: `${pre}right`,
-      meta: {
-        auth: ['setting-system-config-member-right'],
-        title: '会员权益',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'delivery_service/index',
-      name: `${pre}deliveryService`,
-      meta: {
-        auth: ['setting-delivery-service'],
-        title: '配送员列表',
-      },
-      component: () => import('@/pages/setting/deliveryService/index'),
-    },
-    {
-      path: 'pc_group_data',
-      name: `${pre}systemGroupData`,
-      meta: {
-        auth: ['setting-system-pc_data'],
-        title: 'PC商城',
-      },
-      component: () => import('@/pages/system/group/pc'),
-    },
-    {
-      path: 'system_visualization_data',
-      name: `${pre}systemGroupData`,
-      meta: {
-        auth: ['admin-setting-system_visualization_data'],
-        title: '数据配置',
-      },
-      component: () => import('@/pages/system/group/visualization'),
-    },
-    {
-      path: 'storage',
-      name: `${pre}storage`,
-      meta: {
-        auth: ['setting-storage'],
-        title: '储存配置',
-      },
-      component: () => import('@/pages/setting/storage'),
-    },
-    {
-      path: 'wechat_config/:type?/:tab_id?',
-      name: `${pre}wechat_config`,
-      meta: {
-        ...meta,
-        title: '公众号配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'routine_config/:type?/:tab_id?',
-      name: `${pre}routine_config`,
-      meta: {
-        ...meta,
-        title: '小程序配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'app_config/:type?/:tab_id?',
-      name: `${pre}app_config`,
-      meta: {
-        ...meta,
-        title: 'app配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'pc_config/:type?/:tab_id?',
-      name: `${pre}pc_config`,
-      meta: {
-        ...meta,
-        title: 'PC配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'other_config/print/:type?/:tab_id?',
-      name: `${pre}other_print`,
-      meta: {
-        auth: ['setting-other-print'],
-        title: '小票打印配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'other_config/copy/:type?/:tab_id?',
-      name: `${pre}other_copy`,
-      meta: {
-        auth: ['setting-other-copy'],
-        title: '商品采集配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'other_config/logistics/:type?/:tab_id?',
-      name: `${pre}other_logistics`,
-      meta: {
-        auth: ['setting-other-logistics'],
-        title: '物流查询配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'other_config/electronic/:type?/:tab_id?',
-      name: `${pre}other_electronic`,
-      meta: {
-        auth: ['setting-other-electronic'],
-        title: '电子面单配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'other_config/sms/:type?/:tab_id?',
-      name: `${pre}other_sms`,
-      meta: {
-        auth: ['setting-other-sms'],
-        title: '短信功能配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'other_config/pay/:type?/:tab_id?',
-      name: `${pre}other_pay`,
-      meta: {
-        auth: ['setting-other-sms'],
-        title: '商城支付配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'agreement',
-      name: `${pre}notification`,
-      meta: {
-        auth: ['setting-agreement'],
-        title: '协议设置',
-      },
-      component: () => import('@/pages/setting/agreement/index'),
-    },
-    {
-      path: 'other_config/out/:type?/:tab_id?',
-      name: `${pre}other_print`,
-      meta: {
-        auth: ['setting-other-out'],
-        title: '对外接口配置',
-      },
-      component: () => import('@/pages/setting/setSystem/index'),
-    },
-    {
-      path: 'system_out_account/index',
-      name: `${pre}systemOutAccount`,
-      meta: {
-        auth: ['setting-system-out-account-index'],
-        title: '账号列表',
-      },
-      component: () => import('@/pages/setting/systemOutAccount/index'),
-    },
-    {
-      path: 'system_out_interface/index',
-      name: `${pre}systemOutAccount`,
-      meta: {
-        auth: ['setting-system-out-interface-index'],
-        title: '接口文档',
-      },
-      component: () => import('@/pages/setting/systemOutInterface/index'),
-    },
-    {
-      path: 'lang/list',
-      name: `${pre}langList`,
-      meta: {
-        auth: ['admin-lang-list'],
-        title: '语言列表',
-      },
-      component: () => import('@/pages/setting/multiLanguage/list'),
-    },
-    {
-      path: 'lang/info',
-      name: `${pre}langInfo`,
-      meta: {
-        auth: ['admin-lang-info'],
-        title: '语言详情',
-      },
-      component: () => import('@/pages/setting/multiLanguage/langList'),
-    },
-    {
-      path: 'lang/country',
-      name: `${pre}langCountry`,
-      meta: {
-        auth: ['admin-lang-country'],
-        title: '地区关联语言',
-      },
-      component: () => import('@/pages/setting/multiLanguage/country'),
-    },
-  ],
-};
+	path: routePre + '/setting',
+	name: 'setting',
+	header: 'setting',
+	redirect: {
+		name: `${pre}setSystem`,
+	},
+	component: LayoutMain,
+	children: [{
+			path: 'system_role/index',
+			name: `${pre}systemRole`,
+			meta: {
+				auth: ['setting-system-role'],
+				title: '身份管理',
+			},
+			component: () => import('@/pages/setting/systemRole/index'),
+		},
+		{
+			path: 'system_admin/index',
+			name: `${pre}systemAdmin`,
+			meta: {
+				auth: ['setting-system-list'],
+				title: '管理员列表',
+			},
+			component: () => import('@/pages/setting/systemAdmin/index'),
+		},
+		{
+			path: 'system_menus/index',
+			name: `${pre}systemMenus`,
+			meta: {
+				auth: ['setting-system-menus'],
+				title: '权限规则',
+			},
+			component: () => import('@/pages/setting/systemMenus/index'),
+		},
+		{
+			path: 'system_config',
+			name: `${pre}setSystem`,
+			meta: {
+				auth: ['setting-system-config'],
+				title: '系统设置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'system_config/:type?/:tab_id?',
+			name: `${pre}setApp`,
+			meta: {
+				title: '应用设置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'system_config_retail/:type?/:tab_id?',
+			name: `${pre}distributionSet`,
+			meta: {
+				...meta,
+				title: '分销配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'membership_level/index',
+			name: `${pre}membershipLevel`,
+			meta: {
+				...meta,
+				title: '分销等级',
+			},
+			component: () => import('@/pages/setting/membershipLevel/index'),
+		},
+		{
+			path: 'system_config_message/:type?/:tab_id?',
+			name: `${pre}message`,
+			meta: {
+				auth: ['setting-system-config-message'],
+				title: '短信开关',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'notification/index',
+			name: `${pre}notification`,
+			meta: {
+				auth: ['setting-notification'],
+				title: '消息管理',
+			},
+			component: () => import('@/pages/setting/notification/index'),
+		},
+		{
+			path: 'notification/notificationEdit',
+			name: `${pre}notificationEdit`,
+			meta: {
+				auth: ['setting-notification'],
+				title: '消息编辑',
+			},
+			component: () => import('@/pages/setting/notification/notificationEdit'),
+		},
+		{
+			path: 'system_config_logistics/:type?/:tab_id?',
+			name: `${pre}logistics`,
+			meta: {
+				auth: ['setting-system-config-logistics'],
+				title: '物流配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'sms/sms_config/index',
+			name: `${pre}config`,
+			meta: {
+				auth: ['setting-sms-sms-config'],
+				title: '一号通账户',
+			},
+			component: () => import('@/pages/notify/smsConfig/index'),
+		},
+		{
+			path: 'sms/sms_template_apply/index',
+			name: `${pre}smsTemplateApply`,
+			meta: {
+				auth: ['setting-sms-config-template'],
+				title: '短信模板',
+			},
+			component: () => import('@/pages/notify/smsTemplateApply/index'),
+		},
+		{
+			path: 'sms/sms_pay/index',
+			name: `${pre}smsPay`,
+			meta: {
+				auth: ['setting-sms-sms-template'],
+				title: '短信购买',
+			},
+			component: () => import('@/pages/notify/smsPay/index'),
+		},
+		{
+			path: 'sms/sms_template_apply/commons',
+			name: `${pre}commons`,
+			meta: {
+				...meta,
+				title: '公共短信模板',
+			},
+			component: () => import('@/pages/notify/smsTemplateApply/index'),
+		},
+		{
+			path: 'system_group_data/index/:id',
+			name: `${pre}groupDataIndex`,
+			meta: {
+				auth: ['setting-system-group_data-index'],
+				title: '首页导航按钮',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/slide/:id',
+			name: `${pre}groupDataSlide`,
+			meta: {
+				auth: ['setting-system-group_data-slide'],
+				title: '首页幻灯片',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/sign/:id',
+			name: `${pre}groupDataSign`,
+			meta: {
+				auth: ['setting-system-group_data-sign'],
+				title: '签到天数配置',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		// {
+		//   path: 'system_group_data/order/:id',
+		//   name: `${pre}groupDataOrder`,
+		//   meta: {
+		//     auth: ['setting-system-group_data-order'],
+		//     title: '订单详情动态图'
+		//   },
+		//   component: () => import('@/pages/system/group/list')
+		// },
+		// {
+		//   path: 'system_group_data/user/:id',
+		//   name: `${pre}groupDataUser`,
+		//   meta: {
+		//     auth: ['setting-system-group_data-user'],
+		//     title: '个人中心菜单'
+		//   },
+		//   component: () => import('@/pages/system/group/list')
+		// },
+		{
+			path: 'system_group_data/new/:id',
+			name: `${pre}groupDataNew`,
+			meta: {
+				auth: ['setting-system-group_data-new'],
+				title: '首页滚动新闻',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/search/:id',
+			name: `${pre}groupDataNew`,
+			meta: {
+				auth: ['setting-system-group_data-search'],
+				title: '热门搜索',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/hot/:id',
+			name: `${pre}groupDataHot`,
+			meta: {
+				auth: ['setting-system-group_data-hot'],
+				title: '热门榜单推荐',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/new_product/:id',
+			name: `${pre}groupDataNewProduct`,
+			meta: {
+				auth: ['setting-system-group_data-new_product'],
+				title: '首发新品推荐',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/promotion/:id',
+			name: `${pre}groupDataPromotion`,
+			meta: {
+				auth: ['setting-system-group_data-promotion'],
+				title: '促销单品推荐',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/poster/:id',
+			name: `${pre}groupDataPoster`,
+			meta: {
+				auth: ['setting-system-group_data-poster'],
+				title: '个人中心分销海报',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/best/:id',
+			name: `${pre}groupDataBest`,
+			meta: {
+				auth: ['setting-system-group_data-best'],
+				title: '精品推荐',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/activity/:id',
+			name: `${pre}groupDataActivity`,
+			meta: {
+				auth: ['setting-system-group_data-activity'],
+				title: '首页活动区域图片',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/system/:id',
+			name: `${pre}groupDataSystem`,
+			meta: {
+				auth: ['setting-system-group_data-system'],
+				title: '首页配置',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_group_data/hot_money/:id',
+			name: `${pre}groupDataHotMoney`,
+			meta: {
+				auth: ['admin-setting-system_group_data-hot_money'],
+				title: '首页超值爆款',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'merchant/system_store/index',
+			name: `${pre}systemStore`,
+			meta: {
+				auth: ['setting-system-config-merchant'],
+				title: '门店设置',
+			},
+			component: () => import('@/pages/setting/systemStore/index'),
+		},
+		{
+			path: 'freight/express/index',
+			name: `${pre}freight`,
+			meta: {
+				auth: ['setting-freight-express'],
+				title: '物流公司',
+			},
+			component: () => import('@/pages/setting/freight/index'),
+		},
+		{
+			path: 'store_service/index',
+			name: `${pre}service`,
+			meta: {
+				auth: ['setting-store-service'],
+				title: '客服管理',
+			},
+			component: () => import('@/pages/setting/storeService/index'),
+		},
+		{
+			path: 'freight/city/list',
+			name: `${pre}dada`,
+			meta: {
+				auth: ['setting-system-city'],
+				title: '城市数据',
+			},
+			component: () => import('@/pages/setting/cityDada/index'),
+		},
+		{
+			path: 'freight/shipping_templates/list',
+			name: `${pre}templates`,
+			meta: {
+				auth: ['setting-shipping-templates'],
+				title: '运费模板',
+			},
+			component: () => import('@/pages/setting/shippingTemplates/index'),
+		},
+		{
+			path: 'merchant/system_store/list',
+			name: `${pre}store`,
+			meta: {
+				auth: ['setting-merchant-system-store'],
+				title: '提货点',
+			},
+			component: () => import('@/pages/setting/storeList/index'),
+		},
+		{
+			path: 'merchant/system_store_staff/index',
+			name: `${pre}staff`,
+			meta: {
+				auth: ['setting-merchant-system-store-staff'],
+				title: '核销员',
+			},
+			component: () => import('@/pages/setting/clerkList/index'),
+		},
+		{
+			path: 'merchant/system_verify_order/index',
+			name: `${pre}order`,
+			meta: {
+				auth: ['setting-merchant-system-verify-order'],
+				title: '核销订单',
+			},
+			component: () => import('@/pages/setting/verifyOrder/index'),
+		},
+		{
+			path: 'theme_style',
+			name: `${pre}themeStyle`,
+			meta: {
+				auth: ['admin-setting-theme_style'],
+				title: '主题风格',
+			},
+			component: () => import('@/pages/setting/themeStyle/index'),
+		},
+		{
+			path: 'pages',
+			name: `${pre}page`,
+			header: 'setting',
+			redirect: {
+				name: `${pre}devise`,
+			},
+		},
+		{
+			path: 'pages/devise',
+			name: `${pre}devise`,
+			meta: {
+				auth: ['admin-setting-pages-devise'],
+				title: '店铺装修',
+			},
+			component: () => import('@/pages/setting/devise/list'),
+		},
+		{
+			path: 'pages/diy',
+			name: `${pre}diy`,
+			meta: {
+				auth: ['admin-setting-pages-diy'],
+				title: '页面设计',
+				activeMenu: routePre + '/setting/pages/devise',
+			},
+			component: () => import('@/pages/setting/devisePage/index'),
+		},
+		{
+			path: 'pages/diy_index',
+			name: `${pre}index_diy`,
+			meta: {
+				auth: ['admin-setting-pages-diy'],
+				title: '首页设计',
+				fullScreen: true, //是否全屏显示main区域
+			},
+			component: () => import('@/pages/setting/devise/diyIndex'),
+		},
+		{
+			path: 'pages/links',
+			name: `${pre}links`,
+			meta: {
+				auth: ['admin-setting-pages-links'],
+				title: '页面链接',
+			},
+			component: () => import('@/pages/setting/devise/links'),
+		},
+		{
+			path: 'store_service/speechcraft',
+			name: `${pre}speechcraft`,
+			meta: {
+				auth: ['admin-setting-store_service-speechcraft'],
+				title: '客服话术',
+			},
+			component: () => import('@/pages/setting/storeService/speechcraft'),
+		},
+		{
+			path: 'store_service/feedback',
+			name: `${pre}feedback`,
+			meta: {
+				auth: ['admin-setting-store_service-feedback'],
+				title: '用户留言',
+			},
+			component: () => import('@/pages/setting/storeService/feedback'),
+		},
+		{
+			path: 'system_group_data/pc/:id',
+			name: `${pre}groupDataPc`,
+			meta: {
+				auth: ['setting-system-group_data-pc'],
+				title: 'PC主页轮播',
+			},
+			component: () => import('@/pages/system/group/list'),
+		},
+		{
+			path: 'system_config_member_right/:type?/:tab_id?',
+			name: `${pre}right`,
+			meta: {
+				auth: ['setting-system-config-member-right'],
+				title: '会员权益',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'delivery_service/index',
+			name: `${pre}deliveryService`,
+			meta: {
+				auth: ['setting-delivery-service'],
+				title: '配送员列表',
+			},
+			component: () => import('@/pages/setting/deliveryService/index'),
+		},
+		{
+			path: 'pc_group_data',
+			name: `${pre}systemGroupData`,
+			meta: {
+				auth: ['setting-system-pc_data'],
+				title: 'PC商城',
+			},
+			component: () => import('@/pages/system/group/pc'),
+		},
+		{
+			path: 'system_visualization_data',
+			name: `${pre}systemGroupData`,
+			meta: {
+				auth: ['admin-setting-system_visualization_data'],
+				title: '数据配置',
+			},
+			component: () => import('@/pages/system/group/visualization'),
+		},
+		{
+			path: 'storage',
+			name: `${pre}storage`,
+			meta: {
+				auth: ['setting-storage'],
+				title: '储存配置',
+			},
+			component: () => import('@/pages/setting/storage'),
+		},
+		{
+			path: 'wechat_config/:type?/:tab_id?',
+			name: `${pre}wechat_config`,
+			meta: {
+				...meta,
+				title: '公众号配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'routine_config/:type?/:tab_id?',
+			name: `${pre}routine_config`,
+			meta: {
+				...meta,
+				title: '小程序配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'app_config/:type?/:tab_id?',
+			name: `${pre}app_config`,
+			meta: {
+				...meta,
+				title: 'app配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'pc_config/:type?/:tab_id?',
+			name: `${pre}pc_config`,
+			meta: {
+				...meta,
+				title: 'PC配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'other_config/print/:type?/:tab_id?',
+			name: `${pre}other_print`,
+			meta: {
+				auth: ['setting-other-print'],
+				title: '小票打印配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'other_config/copy/:type?/:tab_id?',
+			name: `${pre}other_copy`,
+			meta: {
+				auth: ['setting-other-copy'],
+				title: '商品采集配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'other_config/logistics/:type?/:tab_id?',
+			name: `${pre}other_logistics`,
+			meta: {
+				auth: ['setting-other-logistics'],
+				title: '物流查询配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'other_config/electronic/:type?/:tab_id?',
+			name: `${pre}other_electronic`,
+			meta: {
+				auth: ['setting-other-electronic'],
+				title: '电子面单配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'other_config/sms/:type?/:tab_id?',
+			name: `${pre}other_sms`,
+			meta: {
+				auth: ['setting-other-sms'],
+				title: '短信功能配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'other_config/pay/:type?/:tab_id?',
+			name: `${pre}other_pay`,
+			meta: {
+				auth: ['setting-other-sms'],
+				title: '商城支付配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'agreement',
+			name: `${pre}notification`,
+			meta: {
+				auth: ['setting-agreement'],
+				title: '协议设置',
+			},
+			component: () => import('@/pages/setting/agreement/index'),
+		},
+		{
+			path: 'other_config/out/:type?/:tab_id?',
+			name: `${pre}other_print`,
+			meta: {
+				auth: ['setting-other-out'],
+				title: '对外接口配置',
+			},
+			component: () => import('@/pages/setting/setSystem/index'),
+		},
+		{
+			path: 'system_out_account/index',
+			name: `${pre}systemOutAccount`,
+			meta: {
+				auth: ['setting-system-out-account-index'],
+				title: '账号列表',
+			},
+			component: () => import('@/pages/setting/systemOutAccount/index'),
+		},
+		{
+			path: 'system_out_interface/index',
+			name: `${pre}systemOutAccount`,
+			meta: {
+				auth: ['setting-system-out-interface-index'],
+				title: '接口文档',
+			},
+			component: () => import('@/pages/setting/systemOutInterface/index'),
+		},
+		{
+			path: 'lang/list',
+			name: `${pre}langList`,
+			meta: {
+				auth: ['admin-lang-list'],
+				title: '语言列表',
+			},
+			component: () => import('@/pages/setting/multiLanguage/list'),
+		},
+		{
+			path: 'lang/info',
+			name: `${pre}langInfo`,
+			meta: {
+				auth: ['admin-lang-info'],
+				title: '语言详情',
+			},
+			component: () => import('@/pages/setting/multiLanguage/langList'),
+		},
+		{
+			path: 'lang/country',
+			name: `${pre}langCountry`,
+			meta: {
+				auth: ['admin-lang-country'],
+				title: '地区关联语言',
+			},
+			component: () => import('@/pages/setting/multiLanguage/country'),
+		},
+	],
+};

+ 37 - 0
src/router/modules/shop_finance.js

@@ -0,0 +1,37 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+import LayoutMain from '@/layout';
+import setting from '@/setting';
+let routePre = setting.shoproutePre;
+
+const pre = 'finance_';
+export default {
+	path: routePre + '/finance',
+	name: 'finance',
+	header: 'finance',
+	meta: {
+		// 授权标识
+		auth: ['admin-finance'],
+	},
+	redirect: {
+		name: `${pre}cashApply`,
+	},
+	component: LayoutMain,
+	children: [{
+		path: 'user_extract/index',
+		name: `${pre}cashApply`,
+		meta: {
+			auth: ['finance-user_extract'],
+			title: '提现申请',
+		},
+		component: () => import('@/pages/finance/userExtract/index'),
+	}, ],
+};

+ 74 - 0
src/router/modules/shop_order.js

@@ -0,0 +1,74 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+import LayoutMain from '@/layout';
+import setting from '@/setting';
+let routePre = setting.shoproutePre;
+
+const pre = 'order_';
+
+export default {
+	path: routePre + '/order',
+	name: 'shop_order',
+	header: 'shop_order',
+	meta: {
+		title: '订单'
+	},
+	redirect: {
+		name: `${pre}orderList`,
+	},
+	component: LayoutMain,
+	children: [{
+			path: 'list',
+			name: `${pre}list`,
+			meta: {
+				auth: ['admin-order-storeOrder-index'],
+				title: '订单管理',
+			},
+			component: () => import('@/pages/shop_order/orderList/index'),
+		},
+		{
+			path: 'split_list',
+			name: `${pre}split_list`,
+			meta: {
+				auth: ['admin-order-storeOrder-index'],
+				title: '子订单列表',
+			},
+			component: () => import('@/pages/shop_order/orderList/splitList.vue'),
+		},
+		{
+			path: 'offline',
+			name: `${pre}offline`,
+			meta: {
+				auth: ['admin-order-offline'],
+				title: '收银订单',
+			},
+			component: () => import('@/pages/shop_order/offline/index'),
+		},
+		{
+			path: 'refund',
+			name: `${pre}refund`,
+			meta: {
+				auth: ['admin-order-refund'],
+				title: '售后订单',
+			},
+			component: () => import('@/pages/shop_order/refund/index'),
+		},
+		{
+			path: 'invoice/list',
+			name: `${pre}invoice`,
+			meta: {
+				auth: ['admin-order-startOrderInvoice-index'],
+				title: '发票管理',
+			},
+			component: () => import('@/pages/shop_order/invoice/index'),
+		},
+	],
+};

+ 5 - 3
src/router/routers.js

@@ -29,6 +29,7 @@ import division from './modules/division';
 import settings from '@/setting';
 import crud from './modules/crud';
 import shop from './modules/shop';
+import shopOrder from './modules/shop_order';
 
 const modulesFiles = require.context('./modules/crud', true, /\.js$/);
 
@@ -47,7 +48,7 @@ let routePre = settings.routePre;
 const frameIn = [{
 		path: '/',
 		meta: {
-			title: 'CRMEB',
+			title: '派商国际',
 		},
 		redirect: {
 			name: 'home_index',
@@ -110,7 +111,7 @@ const frameIn = [{
 	{
 		path: routePre,
 		meta: {
-			title: 'CRMEB',
+			title: '派商国际',
 		},
 		redirect: {
 			name: 'home_index',
@@ -177,8 +178,9 @@ const frameIn = [{
 	division,
 	...routers,
 	crud,
+	shopOrder
 ];
-
+console.log(frameIn);
 /**
  * 在主框架之外显示
  */

+ 60 - 57
src/store/index.js

@@ -34,6 +34,7 @@ import routesList from './module/routesList';
 import tagsViewRoutes from './module/tagsViewRoutes';
 import userInfos from './module/userInfos';
 import keepAliveNames from './module/keepAliveNames';
+import shopOrder from './module/shopOrder';
 
 Vue.use(Vuex);
 // 持久化储存
@@ -43,60 +44,62 @@ Vue.use(Vuex);
 // })
 
 export default new Vuex.Store({
-  state: {
-    //
-  },
-  mutations: {
-    //
-  },
-  actions: {
-    //
-  },
-  plugins: [
-    new VuexPersistence({
-      reducer: (state) => ({
-        user: state.user, //这个就是存入localStorage的值
-        app: state.app,
-        menus: state.menus,
-        menu: state.menu,
-        userInfo: state.userInfo,
-        userLevel: state.userLevel,
-        order: state.order,
-        media: state.media,
-        kefu: state.kefu,
-        integralOrder: state.integralOrder,
-        mobildConfig: state.mobildConfig,
-        upgrade: state.upgrade,
-        layout: state.layout,
-        themeConfig: state.themeConfig,
-        routesList: state.routesList,
-        keepAliveNames: state.keepAliveNames,
-      }),
-      storage: window.localStorage,
-    }).plugin,
-  ],
-  modules: {
-    user,
-    app,
-    menus,
-    menu,
-    userInfo,
-    userLevel,
-    order,
-    media,
-    goodSelect,
-    moren,
-    shopping,
-    fresh,
-    kefu,
-    mobildConfig,
-    integralOrder,
-    upgrade,
-    layout,
-    themeConfig,
-    routesList,
-    tagsViewRoutes,
-    userInfos,
-    keepAliveNames,
-  },
-});
+	state: {
+		//
+	},
+	mutations: {
+		//
+	},
+	actions: {
+		//
+	},
+	plugins: [
+		new VuexPersistence({
+			reducer: (state) => ({
+				user: state.user, //这个就是存入localStorage的值
+				app: state.app,
+				menus: state.menus,
+				menu: state.menu,
+				userInfo: state.userInfo,
+				userLevel: state.userLevel,
+				order: state.order,
+				media: state.media,
+				kefu: state.kefu,
+				integralOrder: state.integralOrder,
+				mobildConfig: state.mobildConfig,
+				upgrade: state.upgrade,
+				layout: state.layout,
+				themeConfig: state.themeConfig,
+				routesList: state.routesList,
+				keepAliveNames: state.keepAliveNames,
+				shopOrder: state.shopOrder,
+			}),
+			storage: window.localStorage,
+		}).plugin,
+	],
+	modules: {
+		user,
+		app,
+		menus,
+		menu,
+		userInfo,
+		userLevel,
+		order,
+		media,
+		goodSelect,
+		moren,
+		shopping,
+		fresh,
+		kefu,
+		mobildConfig,
+		integralOrder,
+		upgrade,
+		layout,
+		themeConfig,
+		routesList,
+		tagsViewRoutes,
+		userInfos,
+		keepAliveNames,
+		shopOrder
+	},
+});

+ 163 - 0
src/store/module/shopOrder.js

@@ -0,0 +1,163 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * 布局配置
+ * */
+import screenfull from 'screenfull';
+import {
+	getOrdes
+} from '@/api/shopOrder';
+// function today () {
+//     const end = new Date();
+//     const start = new Date();
+//     var datetimeStart = start.getFullYear() + '/' + (start.getMonth() + 1) + '/' + start.getDate();
+//     var datetimeEnd = end.getFullYear() + '/' + (end.getMonth() + 1) + '/' + end.getDate();
+//     return [datetimeStart, datetimeEnd];
+// }
+export default {
+	namespaced: true,
+	state: {
+		orderStatus: '', // 订单状态
+		// orderTime: today().join('-'), // 订单时间
+		orderTime: '',
+		orderNum: '',
+		orderType: 0, // 订单状态
+		fieldKey: '',
+		orderChartType: {},
+		isDels: false,
+		delIdList: [],
+		iconsaaaa: '',
+		orderPayType: '',
+		// modelLists: function
+	},
+	mutations: {
+		/**
+		 * @description 设置设备类型
+		 * @param {Object} state vuex state
+		 * @param {String} type 设备类型,可选值为 Mobile、Tablet、Desktop
+		 */
+
+		/**
+		 * @description 订单状态搜索
+		 */
+		getOrderStatus(state, orderStatus) {
+			state.orderStatus = orderStatus;
+		},
+
+		/**
+		 * @description 订单状态搜索
+		 */
+		getOrderType(state, orderPayType) {
+			state.orderPayType = orderPayType;
+		},
+
+		/**
+		 * @description 时间状态
+		 */
+		getOrderTime(state, orderTime) {
+			state.orderTime = orderTime;
+		},
+
+		/**
+		 * @description 订单号选择状态
+		 */
+		getOrderNum(state, orderNum) {
+			state.orderNum = orderNum;
+		},
+
+		getfieldKey(state, fieldKey) {
+			state.fieldKey = fieldKey;
+		},
+
+		/**
+		 * @description tab切换,选择订单状态
+		 */
+		onChangeTabs(state, orderType) {
+			state.orderType = orderType;
+		},
+
+		/**
+		 * @description  订单状态 全部对象
+		 */
+		onChangeChart(state, orderChartType) {
+			state.orderChartType = orderChartType;
+		},
+
+		/**
+		 * @description  是否可以批量删除订单
+		 */
+		getIsDel(state, isDels) {
+			state.isDels = isDels;
+		},
+
+		/**
+		 * @description  批量删除订单的id集合
+		 */
+		getisDelIdListl(state, delIdList) {
+			state.delIdList = delIdList;
+		},
+	},
+	actions: {
+		/**
+		 * @description 订单状态
+		 */
+		getOrderTabs({
+			commit
+		}, data) {
+			return new Promise((resolve, reject) => {
+				getOrdes(data)
+					.then(async (res) => {
+						resolve(res);
+						commit('onChangeChart', res.data);
+					})
+					.catch((res) => {
+						reject(res);
+					});
+			});
+		},
+		/**
+		 * @description 初始化监听全屏状态
+		 */
+		listenFullscreen({
+			commit
+		}) {
+			return new Promise((resolve) => {
+				if (screenfull.enabled) {
+					screenfull.on('change', () => {
+						if (!screenfull.isFullscreen) {
+							commit('setFullscreen', false);
+						}
+					});
+				}
+				// end
+				resolve();
+			});
+		},
+		/**
+		 * @description 切换全屏
+		 */
+		toggleFullscreen({
+			commit
+		}) {
+			return new Promise((resolve) => {
+				if (screenfull.isFullscreen) {
+					screenfull.exit();
+					commit('setFullscreen', false);
+				} else {
+					screenfull.request();
+					commit('setFullscreen', true);
+				}
+				// end
+				resolve();
+			});
+		},
+	},
+};

+ 2 - 2
vue.config.js

@@ -105,12 +105,12 @@ module.exports = {
   productionSourceMap: false,
   // 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串
   devServer: {
-    port: 1617, //端口号
+    // port: 1617, //端口号
     proxy: {
       // "/adminapi": {
       '/adminapi': {
         // "target" : "https://www.psgjsc.com" ,//目标接口域名
-        target: 'http://paishang.frp.liuniu946.com', //目标接口域名
+        target: 'http://paishang.ns.liuniu946.com', //目标接口域名
         ws: true,
         changeOrigin: true,
         // "changeOrigin" : true, //是否跨域