Authored by lea guo

订单列表

@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <Button 3 <Button
4 v-for="action in actionList" 4 v-for="action in actionList"
5 :key="action.code" 5 :key="action.code"
6 - @click="() => onAction(action)" 6 + @click="() => onActionHandler(action)"
7 > 7 >
8 {{ action.text }} 8 {{ action.text }}
9 </Button> 9 </Button>
@@ -20,6 +20,12 @@ import CancelConfirmInfo from "./order-list/cancel-confirm-info"; @@ -20,6 +20,12 @@ import CancelConfirmInfo from "./order-list/cancel-confirm-info";
20 20
21 const { mapActions, mapState } = createNamespacedHelpers("order/orderList"); 21 const { mapActions, mapState } = createNamespacedHelpers("order/orderList");
22 22
  23 +const { mapMutations: orderMapMutations } = createNamespacedHelpers("order");
  24 +
  25 +const { mapMutations: inSaleOrderMapMutations } = createNamespacedHelpers(
  26 + "order/inSaleOrderList"
  27 +);
  28 +
23 export default { 29 export default {
24 props: { 30 props: {
25 order: { 31 order: {
@@ -40,7 +46,7 @@ export default { @@ -40,7 +46,7 @@ export default {
40 "cancelTrade", 46 "cancelTrade",
41 "confirmReceipt" 47 "confirmReceipt"
42 ]), 48 ]),
43 - async onAction(action) { 49 + onActionHandler(action) {
44 const { owner = ownType.SELL } = this.$route.params; 50 const { owner = ownType.SELL } = this.$route.params;
45 const { 51 const {
46 orderCode, 52 orderCode,
@@ -52,21 +58,6 @@ export default { @@ -52,21 +58,6 @@ export default {
52 const { productId, storageId, skup } = this.order.goodsInfo; 58 const { productId, storageId, skup } = this.order.goodsInfo;
53 59
54 switch (action.name) { 60 switch (action.name) {
55 - // 删除订单  
56 - case orderActionsMap.DEL_ORDER.name:  
57 - this.$createDialog({  
58 - type: "confirm",  
59 - content: "确认删除订单?",  
60 - onConfirm: async () => {  
61 - const isOk = await this.deleteOrder({  
62 - orderCode,  
63 - owner  
64 - });  
65 - const txt = isOk ? "删除成功" : "删除失败";  
66 - this.$createToast({ txt, type: "txt" }).show();  
67 - }  
68 - }).show();  
69 - break;  
70 // 再次购买 61 // 再次购买
71 case orderActionsMap.BUY_AGAIN.name: 62 case orderActionsMap.BUY_AGAIN.name:
72 this.$router.push({ 63 this.$router.push({
@@ -74,6 +65,7 @@ export default { @@ -74,6 +65,7 @@ export default {
74 params: { productId } 65 params: { productId }
75 }); 66 });
76 break; 67 break;
  68 +
77 // 查看详情 69 // 查看详情
78 case orderActionsMap.SHOW_DETAIL.name: 70 case orderActionsMap.SHOW_DETAIL.name:
79 const name = 71 const name =
@@ -83,6 +75,7 @@ export default { @@ -83,6 +75,7 @@ export default {
83 params: { owner, orderCode } 75 params: { owner, orderCode }
84 }); 76 });
85 break; 77 break;
  78 +
86 // 再次出售 79 // 再次出售
87 case orderActionsMap.SOLD_AGAIN.name: 80 case orderActionsMap.SOLD_AGAIN.name:
88 this.$router.push({ 81 this.$router.push({
@@ -90,6 +83,7 @@ export default { @@ -90,6 +83,7 @@ export default {
90 query: { productId, storageId } 83 query: { productId, storageId }
91 }); 84 });
92 break; 85 break;
  86 +
93 // 查看物流 87 // 查看物流
94 case orderActionsMap.SHOW_EXPRESS.name: 88 case orderActionsMap.SHOW_EXPRESS.name:
95 this.$router.push({ 89 this.$router.push({
@@ -121,47 +115,20 @@ export default { @@ -121,47 +115,20 @@ export default {
121 params: { skup, code: orderCode } 115 params: { skup, code: orderCode }
122 }); 116 });
123 break; 117 break;
  118 + // 确认收货
  119 + case orderActionsMap.CONFIRM_DELIVERY.name:
  120 + this.$createDialog({
  121 + type: "confirm",
  122 + onConfirm: async () => {
  123 + const isOk = await this.confirmReceipt({
  124 + orderCode,
  125 + owner
  126 + });
124 127
125 - // 取消订单 | 不卖了  
126 - case orderActionsMap.NOT_SOLD.name:  
127 - case orderActionsMap.CANCEL_ORDER.name:  
128 - const confirmInfo = await this.cancelTradeConfirmInfo({  
129 - orderCode,  
130 - owner  
131 - });  
132 - let dialogConfig = {  
133 - confirmBtn: { text: "取消订单" },  
134 - cancelBtn: { text: "保留订单" }  
135 - };  
136 - if (owner === "sell") {  
137 - dialogConfig = {  
138 - confirmBtn: { text: "不卖了" },  
139 - cancelBtn: { text: "继续出售" }  
140 - };  
141 - }  
142 - this.$createDialog(  
143 - {  
144 - ...dialogConfig,  
145 - type: "confirm",  
146 - onConfirm: async () => {  
147 - const isOk = await this.cancelTrade({  
148 - orderCode,  
149 - owner  
150 - });  
151 -  
152 - const txt = isOk ? "取消成功" : "取消失败";  
153 - this.$createToast({ txt, type: "txt" }).show();  
154 - }  
155 - },  
156 - createElement => {  
157 - return [  
158 - createElement(CancelConfirmInfo, {  
159 - slot: "content",  
160 - props: { confirmInfo }  
161 - })  
162 - ]; 128 + // const txt = isOk ? "收货成功" : "收货失败";
  129 + // this.$createToast({ txt, type: "txt" }).show();
163 } 130 }
164 - ).show(); 131 + });
165 break; 132 break;
166 133
167 case orderActionsMap.PAY_EARNESTMONEY.name: 134 case orderActionsMap.PAY_EARNESTMONEY.name:
@@ -180,23 +147,8 @@ export default { @@ -180,23 +147,8 @@ export default {
180 }).show(); 147 }).show();
181 break; 148 break;
182 149
183 - case orderActionsMap.CONFIRM_DELIVERY.name:  
184 - this.$createDialog({  
185 - type: "confirm",  
186 - onConfirm: async () => {  
187 - const isOk = await this.confirmReceipt({  
188 - orderCode,  
189 - owner  
190 - });  
191 -  
192 - // const txt = isOk ? "收货成功" : "收货失败";  
193 - // this.$createToast({ txt, type: "txt" }).show();  
194 - }  
195 - });  
196 - break;  
197 -  
198 default: 150 default:
199 - return; 151 + this.$emit("on-action", action);
200 } 152 }
201 } 153 }
202 } 154 }
@@ -56,7 +56,7 @@ @@ -56,7 +56,7 @@
56 </div> 56 </div>
57 </div> 57 </div>
58 <!-- 操作 --> 58 <!-- 操作 -->
59 - <detail-footer> 59 + <!-- <detail-footer>
60 <template #tip="{orderDetail, statusDetail}"> 60 <template #tip="{orderDetail, statusDetail}">
61 <div v-if="statusDetail.status === 0"> 61 <div v-if="statusDetail.status === 0">
62 <p class="real-pay-price"> 62 <p class="real-pay-price">
@@ -65,7 +65,21 @@ @@ -65,7 +65,21 @@
65 <p>实付金额</p> 65 <p>实付金额</p>
66 </div> 66 </div>
67 </template> 67 </template>
68 - </detail-footer> 68 + </detail-footer> -->
  69 +
  70 + <div v-if="actionList.length > 0" class="footer-wrapper">
  71 + <div v-if="statusDetail.status === 0">
  72 + <p class="real-pay-price">
  73 + ¥{{ orderDetail.priceInfo.realPayPrice }}
  74 + </p>
  75 + <p>实付金额</p>
  76 + </div>
  77 + <order-actions
  78 + class="detail-actions"
  79 + :order="orderDetail"
  80 + @on-action="action => onAction({ action, order: orderDetail })"
  81 + />
  82 + </div>
69 </div> 83 </div>
70 </layout-app> 84 </layout-app>
71 </template> 85 </template>
@@ -74,16 +88,26 @@ @@ -74,16 +88,26 @@
74 import { createNamespacedHelpers } from "vuex"; 88 import { createNamespacedHelpers } from "vuex";
75 import { Button } from "cube-ui"; 89 import { Button } from "cube-ui";
76 90
77 -import OrderActions from "../components/order-actions";  
78 -  
79 import AddressInfo from "./components/address-info"; 91 import AddressInfo from "./components/address-info";
80 import OrderItemInfo from "./components/order-detail-item"; 92 import OrderItemInfo from "./components/order-detail-item";
81 import DetailHeader from "./components/header"; 93 import DetailHeader from "./components/header";
82 import DetailFooter from "./components//detail-footer"; 94 import DetailFooter from "./components//detail-footer";
83 95
  96 +import OrderActions from "../components/order-actions";
  97 +import CancelConfirmInfo from "../components/order-list/cancel-confirm-info";
  98 +
  99 +import {
  100 + orderActionsMap,
  101 + ownType
  102 +} from "../../../../constants/order-constants";
  103 +
84 const { mapActions, mapState, mapGetters } = createNamespacedHelpers( 104 const { mapActions, mapState, mapGetters } = createNamespacedHelpers(
85 "order/orderDetail" 105 "order/orderDetail"
86 ); 106 );
  107 +
  108 +const { mapActions: orderListMapActions } = createNamespacedHelpers(
  109 + "order/orderList"
  110 +);
87 export default { 111 export default {
88 components: { 112 components: {
89 AddressInfo, 113 AddressInfo,
@@ -102,10 +126,87 @@ export default { @@ -102,10 +126,87 @@ export default {
102 mounted() {}, 126 mounted() {},
103 computed: { 127 computed: {
104 ...mapState(["orderDetail"]), 128 ...mapState(["orderDetail"]),
105 - ...mapGetters(["lastExpressInfo", "priceInfo", "actionList"]) 129 + ...mapGetters([
  130 + "lastExpressInfo",
  131 + "priceInfo",
  132 + "actionList",
  133 + "statusDetail"
  134 + ])
106 }, 135 },
107 methods: { 136 methods: {
108 - ...mapActions(["fetchOrderDetail"]) 137 + ...mapActions(["fetchOrderDetail"]),
  138 + ...orderListMapActions([
  139 + "deleteOrder",
  140 + "cancelTradeConfirmInfo",
  141 + "cancelTrade"
  142 + ]),
  143 + async onAction({ action, order }) {
  144 + console.log("----------action---------", action);
  145 + const { owner = ownType.SELL } = this.$route.params;
  146 + const {
  147 + orderCode,
  148 + earnestMoney = 0,
  149 + realPrice = "",
  150 + priceInfo = {}
  151 + } = order;
  152 +
  153 + const { productId, storageId, skup } = order.goodsInfo;
  154 +
  155 + switch (action.name) {
  156 + // 删除订单
  157 + case orderActionsMap.DEL_ORDER.name:
  158 + this.$createDialog({
  159 + type: "confirm",
  160 + content: "确认删除订单?",
  161 + onConfirm: async () => {
  162 + const isOk = await this.deleteOrder({
  163 + orderCode,
  164 + owner
  165 + });
  166 + if (isOk) {
  167 + this.$router.back();
  168 + }
  169 + // const txt = isOk ? "删除成功" : "删除失败";
  170 + // this.$createToast({ txt, type: "txt" }).show();
  171 + }
  172 + }).show();
  173 + break;
  174 + case orderActionsMap.CANCEL_ORDER.name:
  175 + const confirmInfo = await this.cancelTradeConfirmInfo({
  176 + orderCode,
  177 + owner
  178 + });
  179 + this.$createDialog(
  180 + {
  181 + type: "confirm",
  182 + confirmBtn: { text: "取消订单" },
  183 + cancelBtn: { text: "保留订单" },
  184 + onConfirm: async () => {
  185 + const isOk = await this.cancelTrade({
  186 + orderCode,
  187 + owner
  188 + });
  189 + if (isOk) {
  190 + this.fetchOrderDetail(this.$route.params);
  191 + }
  192 + const txt = isOk ? "取消成功" : "取消失败";
  193 + this.$createToast({ txt, type: "txt" }).show();
  194 + }
  195 + },
  196 + createElement => {
  197 + return [
  198 + createElement(CancelConfirmInfo, {
  199 + slot: "content",
  200 + props: { confirmInfo }
  201 + })
  202 + ];
  203 + }
  204 + ).show();
  205 + break;
  206 + default:
  207 + return;
  208 + }
  209 + }
109 } 210 }
110 }; 211 };
111 </script> 212 </script>
@@ -120,6 +221,26 @@ export default { @@ -120,6 +221,26 @@ export default {
120 overflow-y: auto; 221 overflow-y: auto;
121 font-size: 24px; 222 font-size: 24px;
122 223
  224 + .footer-wrapper {
  225 + display: flex;
  226 + justify-content: space-between;
  227 + align-items: center;
  228 + position: absolute;
  229 + bottom: 0;
  230 + left: 0;
  231 + right: 0;
  232 + height: 120px;
  233 + background: #fff;
  234 + box-shadow: inset 0 1px 0 0 #eee;
  235 + padding: 20px;
  236 + z-index: 10;
  237 +
  238 + .detail-actions {
  239 + margin-top: 0;
  240 + flex: 1;
  241 + }
  242 + }
  243 +
123 .item-wrapper { 244 .item-wrapper {
124 border-top: 1px solid #eee; 245 border-top: 1px solid #eee;
125 padding: 40px 0; 246 padding: 40px 0;
@@ -67,14 +67,26 @@ @@ -67,14 +67,26 @@
67 </div> 67 </div>
68 </div> 68 </div>
69 <!-- 操作 --> 69 <!-- 操作 -->
70 - <detail-footer> 70 + <!-- <detail-footer>
71 <template #tip="{orderDetail, statusDetail}"> 71 <template #tip="{orderDetail, statusDetail}">
72 <div v-if="statusDetail.status === 0"> 72 <div v-if="statusDetail.status === 0">
73 <p class="earnest-price">{{ orderDetail.earnestMoneyStr }}</p> 73 <p class="earnest-price">{{ orderDetail.earnestMoneyStr }}</p>
74 <p>{{ statusDetail.statuStr }}</p> 74 <p>{{ statusDetail.statuStr }}</p>
75 </div> 75 </div>
76 </template> 76 </template>
77 - </detail-footer> 77 + </detail-footer> -->
  78 +
  79 + <div v-if="actionList.length > 0" class="footer-wrapper">
  80 + <div v-if="statusDetail.status === 0">
  81 + <p class="earnest-price">{{ orderDetail.earnestMoneyStr }}</p>
  82 + <p>{{ statusDetail.statuStr }}</p>
  83 + </div>
  84 + <order-actions
  85 + class="detail-actions"
  86 + :order="orderDetail"
  87 + @on-action="action => onAction({ action, order: orderDetail })"
  88 + />
  89 + </div>
78 </div> 90 </div>
79 </layout-app> 91 </layout-app>
80 </template> 92 </template>
@@ -88,16 +100,29 @@ import OrderItemInfo from "./components/order-detail-item"; @@ -88,16 +100,29 @@ import OrderItemInfo from "./components/order-detail-item";
88 import DetailHeader from "./components/header"; 100 import DetailHeader from "./components/header";
89 import DetailFooter from "./components//detail-footer"; 101 import DetailFooter from "./components//detail-footer";
90 102
  103 +import OrderActions from "../components/order-actions";
  104 +import CancelConfirmInfo from "../components/order-list/cancel-confirm-info";
  105 +
  106 +import {
  107 + orderActionsMap,
  108 + ownType
  109 +} from "../../../../constants/order-constants";
  110 +
91 const { mapActions, mapState, mapGetters } = createNamespacedHelpers( 111 const { mapActions, mapState, mapGetters } = createNamespacedHelpers(
92 "order/orderDetail" 112 "order/orderDetail"
93 ); 113 );
  114 +
  115 +const { mapActions: orderListMapActions } = createNamespacedHelpers(
  116 + "order/orderList"
  117 +);
94 export default { 118 export default {
95 components: { 119 components: {
96 AddressInfo, 120 AddressInfo,
97 OrderItemInfo, 121 OrderItemInfo,
98 Button, 122 Button,
99 DetailHeader, 123 DetailHeader,
100 - DetailFooter 124 + DetailFooter,
  125 + OrderActions
101 }, 126 },
102 asyncData({ store, router }) { 127 asyncData({ store, router }) {
103 // store.dispatch("order/orderDetail/fetchOrderDetail", router.params); 128 // store.dispatch("order/orderDetail/fetchOrderDetail", router.params);
@@ -112,11 +137,84 @@ export default { @@ -112,11 +137,84 @@ export default {
112 "lastExpressInfo", 137 "lastExpressInfo",
113 "priceInfo", 138 "priceInfo",
114 "statusDetail", 139 "statusDetail",
115 - "platformFee" 140 + "platformFee",
  141 + "actionList"
116 ]) 142 ])
117 }, 143 },
118 methods: { 144 methods: {
119 - ...mapActions(["fetchOrderDetail"]) 145 + ...mapActions(["fetchOrderDetail"]),
  146 + ...orderListMapActions([
  147 + "cancelTradeConfirmInfo",
  148 + "cancelTrade",
  149 + "deleteOrder"
  150 + ]),
  151 + async onAction({ action, order }) {
  152 + console.log("----------action---------", action);
  153 + const { owner = ownType.SELL } = this.$route.params;
  154 + const {
  155 + orderCode,
  156 + earnestMoney = 0,
  157 + realPrice = "",
  158 + priceInfo = {}
  159 + } = order;
  160 +
  161 + const { productId, storageId, skup } = order.goodsInfo;
  162 +
  163 + switch (action.name) {
  164 + // 删除订单
  165 + case orderActionsMap.DEL_ORDER.name:
  166 + this.$createDialog({
  167 + type: "confirm",
  168 + content: "确认删除订单?",
  169 + onConfirm: async () => {
  170 + const isOk = await this.deleteOrder({
  171 + orderCode,
  172 + owner
  173 + });
  174 + if (isOk) {
  175 + this.$router.back();
  176 + }
  177 + // const txt = isOk ? "删除成功" : "删除失败";
  178 + // this.$createToast({ txt, type: "txt" }).show();
  179 + }
  180 + }).show();
  181 + break;
  182 + case orderActionsMap.NOT_SOLD.name:
  183 + const confirmInfo = await this.cancelTradeConfirmInfo({
  184 + orderCode,
  185 + owner
  186 + });
  187 + this.$createDialog(
  188 + {
  189 + type: "confirm",
  190 + confirmBtn: { text: "不卖了" },
  191 + cancelBtn: { text: "继续出售" },
  192 + onConfirm: async () => {
  193 + const isOk = await this.cancelTrade({
  194 + orderCode,
  195 + owner
  196 + });
  197 + if (isOk) {
  198 + this.fetchOrderDetail(this.$route.params);
  199 + }
  200 + // const txt = isOk ? "取消成功" : "取消失败";
  201 + // this.$createToast({ txt, type: "txt" }).show();
  202 + }
  203 + },
  204 + createElement => {
  205 + return [
  206 + createElement(CancelConfirmInfo, {
  207 + slot: "content",
  208 + props: { confirmInfo }
  209 + })
  210 + ];
  211 + }
  212 + ).show();
  213 + break;
  214 + default:
  215 + return;
  216 + }
  217 + }
120 } 218 }
121 }; 219 };
122 </script> 220 </script>
@@ -131,6 +229,26 @@ export default { @@ -131,6 +229,26 @@ export default {
131 overflow-y: auto; 229 overflow-y: auto;
132 font-size: 24px; 230 font-size: 24px;
133 231
  232 + .footer-wrapper {
  233 + display: flex;
  234 + justify-content: space-between;
  235 + align-items: center;
  236 + position: absolute;
  237 + bottom: 0;
  238 + left: 0;
  239 + right: 0;
  240 + height: 120px;
  241 + background: #fff;
  242 + box-shadow: inset 0 1px 0 0 #eee;
  243 + padding: 20px;
  244 + z-index: 10;
  245 +
  246 + .detail-actions {
  247 + margin-top: 0;
  248 + flex: 1;
  249 + }
  250 + }
  251 +
134 .item-wrapper { 252 .item-wrapper {
135 border-top: 1px solid #eee; 253 border-top: 1px solid #eee;
136 padding: 40px 0; 254 padding: 40px 0;
1 <template> 1 <template>
2 <div class="footer-wrapper"> 2 <div class="footer-wrapper">
3 <count-down :leftTime="order.leftTime" /> 3 <count-down :leftTime="order.leftTime" />
4 - <order-actions class="actions" :order="order" /> 4 + <order-actions class="actions" :order="order" @on-action="onAction" />
5 </div> 5 </div>
6 </template> 6 </template>
7 7
@@ -13,7 +13,15 @@ @@ -13,7 +13,15 @@
13 <order-info :order="order" /> 13 <order-info :order="order" />
14 <order-list-item :order="order" /> 14 <order-list-item :order="order" />
15 <!-- 订单操作 --> 15 <!-- 订单操作 -->
16 - <order-item-footer :order="order" /> 16 + <!-- <order-item-footer :order="order" @on-action="() => {}" /> -->
  17 + <div class="footer-wrapper">
  18 + <count-down :leftTime="order.leftTime" />
  19 + <order-actions
  20 + class="actions"
  21 + :order="order"
  22 + @on-action="action => onAction({ action, order })"
  23 + />
  24 + </div>
17 </li> 25 </li>
18 </ul> 26 </ul>
19 </scroll> 27 </scroll>
@@ -31,10 +39,25 @@ import OrderInfo from "./components/order-info.vue"; @@ -31,10 +39,25 @@ import OrderInfo from "./components/order-info.vue";
31 import EmptyList from "./components/empty"; 39 import EmptyList from "./components/empty";
32 import OrderItemFooter from "./components/order-footer"; 40 import OrderItemFooter from "./components/order-footer";
33 import { routeNames } from "../order-detail"; 41 import { routeNames } from "../order-detail";
34 -import { ownType } from "../../../../constants/order-constants";  
35 42
36 -const { mapActions, mapState, mapGetters } = createNamespacedHelpers(  
37 - "order/inSaleOrderList" 43 +import OrderActions from "../components/order-actions";
  44 +import CountDown from "../components/count-down";
  45 +import CancelConfirmInfo from "../components/order-list/cancel-confirm-info";
  46 +
  47 +import {
  48 + orderActionsMap,
  49 + ownType
  50 +} from "../../../../constants/order-constants";
  51 +
  52 +const {
  53 + mapActions,
  54 + mapState,
  55 + mapGetters,
  56 + mapMutations
  57 +} = createNamespacedHelpers("order/inSaleOrderList");
  58 +
  59 +const { mapActions: orderListMapActions } = createNamespacedHelpers(
  60 + "order/orderList"
38 ); 61 );
39 62
40 export default { 63 export default {
@@ -43,7 +66,9 @@ export default { @@ -43,7 +66,9 @@ export default {
43 OrderListItem, 66 OrderListItem,
44 OrderInfo, 67 OrderInfo,
45 EmptyList, 68 EmptyList,
46 - OrderItemFooter 69 + OrderItemFooter,
  70 + OrderActions,
  71 + CountDown
47 }, 72 },
48 computed: { 73 computed: {
49 ...mapState(["entryOrder", "notEntryOrder", "isShowEmpty"]), 74 ...mapState(["entryOrder", "notEntryOrder", "isShowEmpty"]),
@@ -63,33 +88,68 @@ export default { @@ -63,33 +88,68 @@ export default {
63 // const { owner, status } = router.params; 88 // const { owner, status } = router.params;
64 // store.dispatch("order/orderList/fetchOrderList", { owner, status }); 89 // store.dispatch("order/orderList/fetchOrderList", { owner, status });
65 }, 90 },
66 - mounted() {  
67 - this.fetchData();  
68 - const { code } = this.$route.params;  
69 - // 调价跳转  
70 - if (!!code) {  
71 - this.$nextTick(() => {  
72 - this.$router.push({  
73 - name: routeNames.SELL_ORDER_DETAIL,  
74 - params: {  
75 - owner: ownType.SELL,  
76 - code  
77 - }  
78 - });  
79 - });  
80 - }  
81 - },  
82 activated() { 91 activated() {
83 this.fetchData(); 92 this.fetchData();
84 }, 93 },
85 methods: { 94 methods: {
86 ...mapActions(["fetchEntryOrderList", "fetchNotEntryOrderList"]), 95 ...mapActions(["fetchEntryOrderList", "fetchNotEntryOrderList"]),
  96 + ...orderListMapActions(["cancelTradeConfirmInfo", "cancelTrade"]),
  97 + ...mapMutations(["filterOrderList"]),
87 fetchData() { 98 fetchData() {
88 if (this.isFetchEntryOrder) { 99 if (this.isFetchEntryOrder) {
89 this.fetchEntryOrderList(); 100 this.fetchEntryOrderList();
90 } else { 101 } else {
91 this.fetchNotEntryOrderList(); 102 this.fetchNotEntryOrderList();
92 } 103 }
  104 + },
  105 + async onAction({ action, order }) {
  106 + console.log("----------action---------", action);
  107 + const { owner = ownType.SELL } = this.$route.params;
  108 + const {
  109 + orderCode,
  110 + earnestMoney = 0,
  111 + realPrice = "",
  112 + priceInfo = {}
  113 + } = order;
  114 +
  115 + const { productId, storageId, skup } = order.goodsInfo;
  116 +
  117 + switch (action.name) {
  118 + case orderActionsMap.NOT_SOLD.name:
  119 + const confirmInfo = await this.cancelTradeConfirmInfo({
  120 + orderCode,
  121 + owner
  122 + });
  123 + this.$createDialog(
  124 + {
  125 + type: "confirm",
  126 + confirmBtn: { text: "不卖了" },
  127 + cancelBtn: { text: "继续出售" },
  128 + onConfirm: async () => {
  129 + const isOk = await this.cancelTrade({
  130 + orderCode,
  131 + owner
  132 + });
  133 + if (isOk) {
  134 + this.filterOrderList(orderCode);
  135 + }
  136 + // const txt = isOk ? "取消成功" : "取消失败";
  137 + // this.$createToast({ txt, type: "txt" }).show();
  138 + }
  139 + },
  140 + createElement => {
  141 + return [
  142 + createElement(CancelConfirmInfo, {
  143 + slot: "content",
  144 + props: { confirmInfo }
  145 + })
  146 + ];
  147 + }
  148 + ).show();
  149 + break;
  150 + default:
  151 + return;
  152 + }
93 } 153 }
94 }, 154 },
95 watch: { 155 watch: {
@@ -108,6 +168,15 @@ export default { @@ -108,6 +168,15 @@ export default {
108 overflow-y: auto; 168 overflow-y: auto;
109 -webkit-box-orient: vertical; 169 -webkit-box-orient: vertical;
110 170
  171 + .footer-wrapper {
  172 + display: flex;
  173 + margin-top: 40px;
  174 +
  175 + .actions {
  176 + flex: 1;
  177 + }
  178 + }
  179 +
111 .order-list-scroll-wrap { 180 .order-list-scroll-wrap {
112 .list-wrapper { 181 .list-wrapper {
113 li { 182 li {
@@ -14,7 +14,16 @@ @@ -14,7 +14,16 @@
14 <order-info :order="order" /> 14 <order-info :order="order" />
15 <order-list-item :order="order" /> 15 <order-list-item :order="order" />
16 <!-- 订单操作 --> 16 <!-- 订单操作 -->
17 - <order-item-footer :order="order" /> 17 + <!-- <order-item-footer :order="order" /> -->
  18 +
  19 + <div class="footer-wrapper">
  20 + <count-down :leftTime="order.leftTime" />
  21 + <order-actions
  22 + class="actions"
  23 + :order="order"
  24 + @on-action="action => onAction({ action, order })"
  25 + />
  26 + </div>
18 </li> 27 </li>
19 </ul> 28 </ul>
20 </scroll> 29 </scroll>
@@ -28,16 +37,27 @@ @@ -28,16 +37,27 @@
28 import { Scroll } from "cube-ui"; 37 import { Scroll } from "cube-ui";
29 import { createNamespacedHelpers } from "vuex"; 38 import { createNamespacedHelpers } from "vuex";
30 39
  40 +import {
  41 + orderActionsMap,
  42 + ownType
  43 +} from "../../../../constants/order-constants";
  44 +
31 import OrderListItem from "./components/order-item"; 45 import OrderListItem from "./components/order-item";
32 import StatusNav from "./components/status-nav"; 46 import StatusNav from "./components/status-nav";
33 import OrderInfo from "./components/order-info.vue"; 47 import OrderInfo from "./components/order-info.vue";
34 import EmptyList from "./components/empty"; 48 import EmptyList from "./components/empty";
35 import OrderItemFooter from "./components/order-footer"; 49 import OrderItemFooter from "./components/order-footer";
36 50
  51 +import OrderActions from "../components/order-actions";
  52 +import CountDown from "../components/count-down";
  53 +import CancelConfirmInfo from "../components/order-list/cancel-confirm-info";
  54 +
37 const { mapActions, mapState, mapMutations } = createNamespacedHelpers( 55 const { mapActions, mapState, mapMutations } = createNamespacedHelpers(
38 "order/orderList" 56 "order/orderList"
39 ); 57 );
40 58
  59 +const { mapMutations: orderMapMutations } = createNamespacedHelpers("order");
  60 +
41 export default { 61 export default {
42 components: { 62 components: {
43 Scroll, 63 Scroll,
@@ -45,7 +65,9 @@ export default { @@ -45,7 +65,9 @@ export default {
45 StatusNav, 65 StatusNav,
46 OrderInfo, 66 OrderInfo,
47 EmptyList, 67 EmptyList,
48 - OrderItemFooter 68 + OrderItemFooter,
  69 + OrderActions,
  70 + CountDown
49 }, 71 },
50 computed: { 72 computed: {
51 ...mapState(["orderList", "pullUpLoad", "isShowEmpty"]), 73 ...mapState(["orderList", "pullUpLoad", "isShowEmpty"]),
@@ -61,15 +83,14 @@ export default { @@ -61,15 +83,14 @@ export default {
61 // const { owner, status } = router.params; 83 // const { owner, status } = router.params;
62 // store.dispatch("order/orderList/fetchOrderList", { owner, status }); 84 // store.dispatch("order/orderList/fetchOrderList", { owner, status });
63 }, 85 },
64 - mounted() {  
65 - this.fetchData();  
66 - },  
67 activated() { 86 activated() {
  87 + this.reset("orderList");
68 this.fetchData(); 88 this.fetchData();
69 }, 89 },
70 methods: { 90 methods: {
71 - ...mapActions(["fetchOrderList"]), 91 + ...mapActions(["fetchOrderList", "cancelTradeConfirmInfo", "cancelTrade"]),
72 ...mapMutations(["setOrderStatus"]), 92 ...mapMutations(["setOrderStatus"]),
  93 + ...orderMapMutations(["reset"]),
73 fetchMore() { 94 fetchMore() {
74 this.fetchOrderList(this.$route.params); 95 this.fetchOrderList(this.$route.params);
75 }, 96 },
@@ -80,23 +101,93 @@ export default { @@ -80,23 +101,93 @@ export default {
80 this.setOrderStatus(status); 101 this.setOrderStatus(status);
81 } 102 }
82 this.fetchOrderList(params); 103 this.fetchOrderList(params);
  104 + },
  105 + async onAction({ action, order }) {
  106 + console.log("----------action---------", action);
  107 + const { owner = ownType.SELL } = this.$route.params;
  108 + const {
  109 + orderCode,
  110 + earnestMoney = 0,
  111 + realPrice = "",
  112 + priceInfo = {}
  113 + } = order;
  114 +
  115 + const { productId, storageId, skup } = order.goodsInfo;
  116 +
  117 + switch (action.name) {
  118 + // 删除订单
  119 + case orderActionsMap.DEL_ORDER.name:
  120 + this.$createDialog({
  121 + type: "confirm",
  122 + content: "确认删除订单?",
  123 + onConfirm: async () => {
  124 + const isOk = await this.deleteOrder({
  125 + orderCode,
  126 + owner
  127 + });
  128 + const txt = isOk ? "删除成功" : "删除失败";
  129 + this.$createToast({ txt, type: "txt" }).show();
  130 + }
  131 + }).show();
  132 + break;
  133 +
  134 + case orderActionsMap.CANCEL_ORDER.name:
  135 + const confirmInfo = await this.cancelTradeConfirmInfo({
  136 + orderCode,
  137 + owner
  138 + });
  139 + this.$createDialog(
  140 + {
  141 + type: "confirm",
  142 + confirmBtn: { text: "取消订单" },
  143 + cancelBtn: { text: "保留订单" },
  144 + onConfirm: async () => {
  145 + const isOk = await this.cancelTrade({
  146 + orderCode,
  147 + owner
  148 + });
  149 + if (isOk) {
  150 + this.reset("orderList");
  151 + this.fetchData(this.$route.params);
  152 + }
  153 + const txt = isOk ? "取消成功" : "取消失败";
  154 + this.$createToast({ txt, type: "txt" }).show();
  155 + }
  156 + },
  157 + createElement => {
  158 + return [
  159 + createElement(CancelConfirmInfo, {
  160 + slot: "content",
  161 + props: { confirmInfo }
  162 + })
  163 + ];
  164 + }
  165 + ).show();
  166 + break;
  167 + }
83 } 168 }
84 }, 169 },
85 watch: { 170 watch: {
86 - $route() {  
87 - // console.log("---------route change----------");  
88 - // this.fetchOrderList(this.$route.params);  
89 - } 171 + $route() {}
90 } 172 }
91 }; 173 };
92 </script> 174 </script>
93 <style lang="scss" scoped> 175 <style lang="scss" scoped>
94 .content-wrapper { 176 .content-wrapper {
95 - height: calc(100vh - 300px); 177 + height: calc(100vh - 200px);
96 overflow-x: hidden; 178 overflow-x: hidden;
97 overflow-y: auto; 179 overflow-y: auto;
98 -webkit-box-orient: vertical; 180 -webkit-box-orient: vertical;
99 181
  182 + .footer-wrapper {
  183 + display: flex;
  184 + margin-top: 40px;
  185 +
  186 + .actions {
  187 + flex: 1;
  188 + }
  189 + }
  190 +
100 .order-list-scroll-wrap { 191 .order-list-scroll-wrap {
101 .list-wrapper { 192 .list-wrapper {
102 li { 193 li {
@@ -46,6 +46,18 @@ export default function() { @@ -46,6 +46,18 @@ export default function() {
46 state.notEntryOrder.pullUpload = false; 46 state.notEntryOrder.pullUpload = false;
47 } 47 }
48 }, 48 },
  49 + filterOrderList(state, orderCode) {
  50 + state.entryOrder.list = state.entryOrder.list.filter(
  51 + order => order.orderCode !== orderCode,
  52 + );
  53 + state.notEntryOrder.list = state.notEntryOrder.list.filter(
  54 + order => order.orderCode !== orderCode,
  55 + );
  56 +
  57 + state.isShowEmpty =
  58 + state.entryOrder.list.length === 0 &&
  59 + state.notEntryOrder.list.length === 0;
  60 + },
49 }, 61 },
50 getters: { 62 getters: {
51 // scroll 组件参数,是否触发上拉事件 63 // scroll 组件参数,是否触发上拉事件
@@ -6,6 +6,16 @@ import orderLogistics from './order-logistics'; @@ -6,6 +6,16 @@ import orderLogistics from './order-logistics';
6 import orderDeliver from './order-deliver'; 6 import orderDeliver from './order-deliver';
7 import inSaleOrderList from './in-sale-order-list'; 7 import inSaleOrderList from './in-sale-order-list';
8 8
  9 +const initialState = {
  10 + priceChange: priceChange().state,
  11 + orderList: orderList().state,
  12 + orderConfirm: orderConfirm().state,
  13 + orderDetail: orderDetail().state,
  14 + logisticsInfo: orderLogistics().state,
  15 + orderDeliver: orderDeliver().state,
  16 + inSaleOrderList: inSaleOrderList().state,
  17 +};
  18 +
9 export default function() { 19 export default function() {
10 return { 20 return {
11 namespaced: true, 21 namespaced: true,
@@ -18,5 +28,27 @@ export default function() { @@ -18,5 +28,27 @@ export default function() {
18 orderDeliver: orderDeliver(), 28 orderDeliver: orderDeliver(),
19 inSaleOrderList: inSaleOrderList(), 29 inSaleOrderList: inSaleOrderList(),
20 }, 30 },
  31 + state: {
  32 + resetFlag: false,
  33 + },
  34 + mutations: {
  35 + /**
  36 + * reset module state
  37 + * @param {*} state
  38 + * @param { Array | String} moduleNames 模块名
  39 + */
  40 + reset(state, moduleNames = []) {
  41 + if (typeof moduleNames === 'string') {
  42 + moduleNames = [moduleNames];
  43 + }
  44 + console.log('------reset module name------------', moduleNames);
  45 +
  46 + // 修改flag,监听后reload
  47 + state.resetFlag = !state.resetFlag;
  48 + for (const name of moduleNames) {
  49 + Object.assign(state[name], initialState[name]);
  50 + }
  51 + },
  52 + },
21 }; 53 };
22 } 54 }
1 export default function() { 1 export default function() {
2 return { 2 return {
3 namespaced: true, 3 namespaced: true,
  4 + modules: {},
4 state: { 5 state: {
5 page: 1, 6 page: 1,
6 pageSize: 10, 7 pageSize: 10,
@@ -33,6 +34,7 @@ export default function() { @@ -33,6 +34,7 @@ export default function() {
33 state.orderList = state.orderList.filter( 34 state.orderList = state.orderList.filter(
34 order => order.orderCode !== orderCode, 35 order => order.orderCode !== orderCode,
35 ); 36 );
  37 + state.isShowEmpty = state.orderList.length === 0;
36 }, 38 },
37 setOrderStatus(state, currentStatus) { 39 setOrderStatus(state, currentStatus) {
38 state.currentStatus = +currentStatus; 40 state.currentStatus = +currentStatus;