From 734afe1ed97185893fd80c27d0a8273223b60699 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=90=91=E6=96=87=E5=8F=AF?= <1041367524@qq.com>
Date: Mon, 18 Apr 2022 16:48:12 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/ElArea.vue | 19 +++++++
src/store/modules/sales/order.js | 43 +++++++++------
src/views/sales/order/address.vue | 33 ++++++++----
src/views/sales/order/cancel.vue | 90 +++++++++++++++++++++++++++++++
src/views/sales/order/detail.vue | 56 ++++++++++++++-----
src/views/sales/order/index.vue | 1 +
vite.config.js | 6 +--
7 files changed, 205 insertions(+), 43 deletions(-)
create mode 100644 src/views/sales/order/cancel.vue
diff --git a/src/components/ElArea.vue b/src/components/ElArea.vue
index d32b2c4..994245b 100644
--- a/src/components/ElArea.vue
+++ b/src/components/ElArea.vue
@@ -13,9 +13,14 @@
};
},
},
+ info: {
+ type: Array,
+ default: () => [],
+ },
});
const attrs = useAttrs();
const slots = useSlots();
+ const emits = defineEmits(['update:info']);
const convert = (obj) =>
obj
? Object.entries(obj).map((entry) => {
@@ -23,6 +28,20 @@
})
: [];
const options = convert(data[86]);
+ const handleInfo = (code) => {
+ let province = data[86],
+ city = data[code[0]],
+ area = data[code[1]];
+ let res = [province?.[code[0]], city?.[code[1]], area?.[code[2]]];
+ return res;
+ };
+ watch(
+ () => attrs.modelValue,
+ (value) => {
+ emits('update:info', handleInfo(value));
+ },
+ { immediate: true, deep: true }
+ );
const render = () => ;
diff --git a/src/store/modules/sales/order.js b/src/store/modules/sales/order.js
index c4e1e6b..8cbc08d 100644
--- a/src/store/modules/sales/order.js
+++ b/src/store/modules/sales/order.js
@@ -8,8 +8,20 @@ const state = () => ({
summary: [],
opts: {
init: false,
- source: [],
- status: [],
+ source: [
+ { label: '未知来源', value: 1 },
+ { label: '安卓端APP', value: 2 },
+ { label: 'IOS端APP', value: 3 },
+ ],
+ status: [
+ { label: '全部', value: 0, count: 0 },
+ { label: '待支付', value: 1, count: 0 },
+ { label: '已关闭', value: 2, count: 0 },
+ { label: '已支付', value: 3, count: 0 },
+ { label: '已发货', value: 4, count: 0 },
+ { label: '已收货', value: 5, count: 0 },
+ { label: '已完成', value: 6, count: 0 },
+ ],
},
});
const getters = {};
@@ -53,23 +65,10 @@ const actions = {
}
return res;
},
- load: async ({ commit }) => {
+ load: async ({ commit, state }) => {
commit('setOpts', {
+ ...state.opts,
init: true,
- source: [
- { label: '未知来源', value: 1 },
- { label: '安卓端APP', value: 2 },
- { label: 'IOS端APP', value: 3 },
- ],
- status: [
- { label: '全部', value: 0, count: 0 },
- { label: '待支付', value: 1, count: 0 },
- { label: '已关闭', value: 2, count: 0 },
- { label: '待发货', value: 3, count: 0 },
- { label: '已发货', value: 4, count: 0 },
- { label: '已收货', value: 5, count: 0 },
- { label: '已完成', value: 6, count: 0 },
- ],
});
},
detail: async (context, id) => {
@@ -96,6 +95,16 @@ const actions = {
}
return res;
},
+ cancel: async ({ dispatch }, data) => {
+ let res = await api.cancel(data);
+ if (res) {
+ ElMessage.success('取消订单成功');
+ dispatch('search');
+ } else {
+ ElMessage.error('取消订单失败');
+ }
+ return res;
+ },
address: async (context, data) => {
let res = await api.updateAddress(data);
if (res) {
diff --git a/src/views/sales/order/address.vue b/src/views/sales/order/address.vue
index 46a6f39..753b74b 100644
--- a/src/views/sales/order/address.vue
+++ b/src/views/sales/order/address.vue
@@ -7,11 +7,11 @@
-
-
+
+
-
-
+
+
@@ -31,27 +31,29 @@
order: null,
form: {
orderId: null,
- area: [],
+ address: [],
+ addressInfo: [],
recipientName: null,
recipientPhone: null,
- recipientAddress: null,
+ detailAddress: null,
},
rules: {
orderId: [{ required: true, message: '订单ID不能为空' }],
- area: [{ required: true, message: '省市区不能为空' }],
+ address: [{ required: true, message: '省市区不能为空' }],
recipientName: [{ required: true, message: '收货人姓名不能为空' }],
recipientPhone: [{ required: true, message: '收货人手机不能为空' }],
- recipientAddress: [{ required: true, message: '详细地址不能为空' }],
+ detailAddress: [{ required: true, message: '详细地址不能为空' }],
},
});
const show = (order) => {
state.order = order;
state.form = {
orderId: order.orderId,
- area: [],
+ address: [order.logistics?.provinceCode, order.logistics?.cityCode, order.logistics?.areaCode],
+ addressInfo: [order.logistics?.province, order.logistics?.city, order.logistics?.area],
recipientName: order.logistics?.recipientName,
recipientPhone: order.logistics?.recipientPhone,
- recipientAddress: order.logistics?.recipientAddress,
+ detailAddress: order.logistics?.detailAddress,
};
state.visible = true;
};
@@ -66,7 +68,16 @@
state.submitting = true;
try {
await unref(refsForm).validate();
- let res = await store.dispatch('order/address', state.form);
+ let data = _.cloneDeep(state.form);
+ data.province = data.addressInfo[0];
+ data.city = data.addressInfo[1];
+ data.area = data.addressInfo[2];
+ delete data.addressInfo;
+ data.provinceCode = data.address[0];
+ data.cityCode = data.address[1];
+ data.areaCode = data.address[2];
+ delete data.address;
+ let res = await store.dispatch('order/address', data);
if (res) {
Object.assign(state.order, state.form);
state.visible = false;
diff --git a/src/views/sales/order/cancel.vue b/src/views/sales/order/cancel.vue
new file mode 100644
index 0000000..4012188
--- /dev/null
+++ b/src/views/sales/order/cancel.vue
@@ -0,0 +1,90 @@
+
+
+
+
+ {{ state.form.totalAmount }}
+
+
+ {{ state.form.shippingAmount }}
+
+
+ {{ state.form.payAmount }}
+
+
+
+ 会显示在客户的订单中
+
+
+
+
+
+
+ 取消
+ 确定
+
+
+
+
+
+
+
diff --git a/src/views/sales/order/detail.vue b/src/views/sales/order/detail.vue
index 4182c76..c142fc7 100644
--- a/src/views/sales/order/detail.vue
+++ b/src/views/sales/order/detail.vue
@@ -1,15 +1,27 @@
-
+
@@ -112,16 +124,20 @@
-
-
-
+
+
+
+
+