diff --git a/apps/common/xianyu.js b/apps/common/xianyu.js index ef27555..6128ad8 100644 --- a/apps/common/xianyu.js +++ b/apps/common/xianyu.js @@ -59,6 +59,22 @@ const xianyu = { } }, + /** + * + * @param args payURL + * @param okAction + * @param errorAction + */ + setXianyuPay(args, okAction, errorAction) { + if (this.isAliApp && window.WindVane) { + window.WindVane.call('WVIdleFishApi', 'payAlipay', args, (data) => { + okAction && okAction(data); + }, (error) => { + errorAction && errorAction(error); + }); + } + }, + goXianyuNewPage(args) { if (!args.url) { return; @@ -130,7 +146,7 @@ const xianyu = { window.open(args.url, '_blank'); } } - }, + } }; export default xianyu; diff --git a/apps/components/order-pay-type/pay-type.vue b/apps/components/order-pay-type/pay-type.vue index 1dd8dcb..5c62c63 100644 --- a/apps/components/order-pay-type/pay-type.vue +++ b/apps/components/order-pay-type/pay-type.vue @@ -127,14 +127,30 @@ export default { this.hide(); this.$emit('paySuccess'); - this.$router.replace({ - name: 'OrderPay', - query: { - orderCode: this.orderCode, - payParams: result.data.payParams, - extra: this.extra - } - }); + if (this.$xianyu.isAliApp) { + const page = JSON.parse(this.extra || '{}'); + + this.$xianyu.setXianyuPay({ + payURL: result.data.payParams + }, () => { + if (page.forward) { + this.$router.replace(page.forward); + } + }, () => { + if (page.back) { + this.$router.replace(page.back); + } + }); + } else { + this.$router.replace({ + name: 'OrderPay', + query: { + orderCode: this.orderCode, + payParams: result.data.payParams, + extra: this.extra + } + }); + } } } }; diff --git a/apps/pages/home/news/news.vue b/apps/pages/home/news/news.vue index 14dfbd0..053685b 100644 --- a/apps/pages/home/news/news.vue +++ b/apps/pages/home/news/news.vue @@ -30,17 +30,17 @@ export default { data() { return { msg: '消息', - options: { - pullUpLoad: true, - // pullUpLoad: { - // threshold: 100, - // txt: { - // txt: '加载中...', - // noMore: '~ 已经到底啦 ~', - // visible: false, - // } - // } - }, + // options: { + // pullUpLoad: true, + // // pullUpLoad: { + // // threshold: 100, + // // txt: { + // // txt: '加载中...', + // // noMore: '~ 已经到底啦 ~', + // // visible: false, + // // } + // // } + // }, newsList: { list: [], tabList: [], @@ -63,6 +63,13 @@ export default { mounted() { }, + computed: { + options: function() { + return { + pullUpLoad: this.newsList.list.length > 0 ? true : false, + } + } + }, created() { }, diff --git a/apps/pages/home/news/newsDetail.vue b/apps/pages/home/news/newsDetail.vue index bb0a583..3131c9e 100644 --- a/apps/pages/home/news/newsDetail.vue +++ b/apps/pages/home/news/newsDetail.vue @@ -27,16 +27,6 @@ const { mapState, mapActions } = createNamespacedHelpers('home/news'); export default { data() { return { - options: { - pullUpLoad: true, - // pullUpLoad: { - // threshold: 100, - // txt: { - // more: '加载中...', - // noMore: '~ 已经到底啦 ~' - // } - // } - }, title: '', type: '', newsList: { @@ -55,7 +45,20 @@ export default { } }, computed: { - + options: function() { + return { + pullUpLoad: this.newsList.list.length > 0 ? true : false, + } + } + // options: { + // // pullUpLoad: { + // // threshold: 100, + // // txt: { + // // more: '加载中...', + // // noMore: '~ 已经到底啦 ~' + // // } + // // } + // }, }, activated() { this.fetchList(this.params); diff --git a/apps/pages/order/buyer-confirm.vue b/apps/pages/order/buyer-confirm.vue index 9b6f8f9..19578df 100644 --- a/apps/pages/order/buyer-confirm.vue +++ b/apps/pages/order/buyer-confirm.vue @@ -1,5 +1,5 @@ <template> - <LayoutApp :show-back="true" title="确认订单"> + <LayoutApp :show-back="true" title="确认订单" :back-action="backAction"> <div class="body"> <AddressInfo :data="address" class="order-item" :show-tip="false"></AddressInfo> <ProductInfo :data="productDetail" class="product-info order-item"></ProductInfo> @@ -40,7 +40,9 @@ export default { name: 'OrderConfirm', props: ['productId', 'storageId'], data() { - return {}; + return { + leave: false + }; }, components: { ProductInfo, @@ -80,6 +82,7 @@ export default { }, beforeRouteLeave(to, from, next) { if (to.name !== 'address') { + this.leave = true; this[Types.CLEAR_BUY_STATUS](); } next(); @@ -108,7 +111,9 @@ export default { watch: { address: { handler() { - this.compute(); + if (!this.leave) { + this.compute(); + } }, deep: true } @@ -256,6 +261,14 @@ export default { code: orderCode } }); + }, + backAction() { + this.$router.replace({ + name: 'ProductDetail', + params: { + productId: this.productId + } + }); } } }; diff --git a/apps/pages/order/components/confirm/product.vue b/apps/pages/order/components/confirm/product.vue index 57b9187..ebbffa5 100644 --- a/apps/pages/order/components/confirm/product.vue +++ b/apps/pages/order/components/confirm/product.vue @@ -5,7 +5,7 @@ <div class="product-price"> <div class="product-price-wrapper"> <div class="price">{{data.colorName}},{{data.sizeName}}</div> - <div class="tip">{{ priceType || '最低售价:'}} <span class="price2">¥{{data.goodPrice || '-'}}</span></div> + <div class="tip">{{ data.priceType || '最低售价:'}} <span class="price2">{{data.goodPrice || '-'}}</span></div> </div> </div> </div> diff --git a/apps/pages/order/components/dialog-change-bid-price.vue b/apps/pages/order/components/dialog-change-bid-price.vue index 0afaf42..099029b 100644 --- a/apps/pages/order/components/dialog-change-bid-price.vue +++ b/apps/pages/order/components/dialog-change-bid-price.vue @@ -132,7 +132,7 @@ export default { <style lang="scss" scoped> .change-bid-price-wrapper { - font-size: 12px; + font-size: 12*2px; color: #000; padding: 0 38px; letter-spacing: 0; @@ -165,4 +165,4 @@ export default { margin-top: 40px; } } -</style> \ No newline at end of file +</style> diff --git a/apps/pages/order/order-detail/seller-order-detail.vue b/apps/pages/order/order-detail/seller-order-detail.vue index 3c9ef26..48c387d 100644 --- a/apps/pages/order/order-detail/seller-order-detail.vue +++ b/apps/pages/order/order-detail/seller-order-detail.vue @@ -3,7 +3,7 @@ <div class="order-detail-wrapper"> <div class="content"> <!-- 状态信息 --> - <detail-header /> + <detail-header/> <!-- 物流信息 --> <router-link v-if="lastExpressInfo" @@ -21,21 +21,21 @@ </div> </router-link> <!-- 地址信息 --> - <address-info class="item-wrapper" /> + <address-info class="item-wrapper"/> <!-- 商品信息 --> - <order-item-info class="item-wrapper" /> + <order-item-info class="item-wrapper"/> <!-- 价格信息 --> <div class="price-info item-wrapper"> <p> <span class="label platform-fee" - >平台费用:<i @click="onPlatformFee" class="tip"></i + >平台费用:<i @click="onPlatformFee" class="tip"></i ></span> <span>{{ platformFee.amount }}</span> </p> <p class="delivery-fee"> <span class="label" - >银行转账费({{ - parseInt(platformFee.goodsPaymentRatePercent || 0) + >银行转账费({{ + parseInt(platformFee.payChannelPercentage || 0) }}%):</span > <span>{{ orderDetail.bankTransferFee }}</span> @@ -94,23 +94,23 @@ </template> <script> -import { createNamespacedHelpers } from "vuex"; -import { Button } from "cube-ui"; -import Clipboard from "clipboard"; +import { createNamespacedHelpers } from 'vuex'; +import { Button } from 'cube-ui'; +import Clipboard from 'clipboard'; -import AddressInfo from "./components/sell-order-address-info"; -import OrderItemInfo from "./components/order-detail-item"; -import DetailHeader from "./components/header"; -import DetailFooter from "./components//detail-footer"; +import AddressInfo from './components/sell-order-address-info'; +import OrderItemInfo from './components/order-detail-item'; +import DetailHeader from './components/header'; +import DetailFooter from './components//detail-footer'; -import OrderActions from "../components/order-actions"; +import OrderActions from '../components/order-actions'; -import orderActionMixin from "../mixin/order-action"; -import orderInSaleActionMixin from "../mixin/order-in-sale-action"; +import orderActionMixin from '../mixin/order-action'; +import orderInSaleActionMixin from '../mixin/order-in-sale-action'; -import PlatformFeeInfo from "../components/platform-fee-info"; +import PlatformFeeInfo from '../components/platform-fee-info'; -const STORE_PATH = "order/orderDetail"; +const STORE_PATH = 'order/orderDetail'; const { mapActions, mapState, mapGetters } = createNamespacedHelpers( STORE_PATH @@ -136,33 +136,33 @@ export default { return this.orderDetail.orderCode; } }); - this.copyBtn.on("success", () => { + this.copyBtn.on('success', () => { this.$createToast({ - txt: "复制成功", - type: "txt" + txt: '复制成功', + type: 'txt' }).show(); }); }); }, computed: { - ...mapState(["orderDetail"]), + ...mapState(['orderDetail']), ...mapGetters([ - "lastExpressInfo", - "priceInfo", - "statusDetail", - "platformFee", - "actionList" + 'lastExpressInfo', + 'priceInfo', + 'statusDetail', + 'platformFee', + 'actionList' ]) }, methods: { - ...mapActions(["fetchOrderDetail"]), + ...mapActions(['fetchOrderDetail']), onPlatformFee() { const { platformFee = {} } = this.orderDetail; this.$createDialog( { - type: "alert", - title: "平台费用", - confirmBtn: { text: "我知道了" } + type: 'alert', + title: '平台费用', + confirmBtn: { text: '我知道了' } }, createElement => { return [ @@ -170,15 +170,15 @@ export default { props: { platformFeeInfo: { packageFee: platformFee.packageFee, - packageFeeDesc: "商品包装费", - payChannelPercentage: platformFee.payChannelPercentage, + packageFeeDesc: '商品包装费', + payChannelPercentage: platformFee.goodsPaymentRatePercent, serviceFee: platformFee.serviceFee, - serviceFeeDesc: "平台服务费", + serviceFeeDesc: '平台服务费', appraiseFee: platformFee.appraiseFee, - appraiseFeeDesc: "商品鉴定费" + appraiseFeeDesc: '商品鉴定费' } }, - slot: "content" + slot: 'content' }) ]; } @@ -334,4 +334,4 @@ export default { margin-right: 12px; } } -</style> \ No newline at end of file +</style> diff --git a/apps/pages/order/pay.vue b/apps/pages/order/pay.vue index 6088b28..8f59133 100644 --- a/apps/pages/order/pay.vue +++ b/apps/pages/order/pay.vue @@ -71,7 +71,8 @@ export default { }, 1000); if (this.count % 5 === 0) { - this.check().catch(() => {}); + this.check().catch(() => { + }); } } else { this.goOk(); @@ -81,7 +82,7 @@ export default { return this.fetchOrderStatus({ orderCode: this.orderCode }).then((result) => { - if (result?.data?.statusDetail?.status === 1) { + if ([1, 7].includes(result?.data?.statusDetail?.status)) { this.$router.replace(this.page?.forward); } else { return Promise.reject(result); diff --git a/apps/pages/order/price-change/entry-detail.vue b/apps/pages/order/price-change/entry-detail.vue index 1a92366..6e236c4 100644 --- a/apps/pages/order/price-change/entry-detail.vue +++ b/apps/pages/order/price-change/entry-detail.vue @@ -130,7 +130,12 @@ export default { pageSize: this.pageSize, refresh: true }); - + + // 全部下架后回到出售中列表 + let data = get(result, 'data.data') + if(data.length === 0) { + this.$router.back() + } if (isNoSale && !get(result, 'data.productInfo')) { this.$yoho.finishPage({}); } diff --git a/apps/pages/order/seller-confirm.vue b/apps/pages/order/seller-confirm.vue index dd7a06f..eaf05b6 100644 --- a/apps/pages/order/seller-confirm.vue +++ b/apps/pages/order/seller-confirm.vue @@ -1,5 +1,5 @@ <template> - <LayoutApp :show-back="true" title="出售"> + <LayoutApp :show-back="true" title="出售" :back-action="backAction"> <div class="body"> <ProductInfo :data="productDetail" class="product-info"></ProductInfo> <InputPrice @input="changePrice" class="input-price" @@ -55,7 +55,7 @@ export default { error: false, agreeDesc: '有货卖家协议', url: 'https://activity.yoho.cn/feature/3187.html?share_id=5851&title=ufo-%E5%8D%96%E5%AE%B6%E5%8D%8F%E8%AE%AE', - superSell: false + superSell: false, }; }, mounted() { @@ -78,24 +78,39 @@ export default { ...mapOrderState(['address', 'fee', 'price', 'agree', 'num']), ...mapState({ productDetail: state => { + const leastPrice = get(state.product.selectedProductInfo, 'size.least_price', 0); + const storageNum = get(state.product.selectedProductInfo, 'size.storage_num', 0); + const suggestHighPrice = get(state.product.selectedProductInfo, 'size.suggest_high_price', 0); + const suggestLowPrice = get(state.product.selectedProductInfo, 'size.suggest_low_price', 0); + + let priceType = '最低售价'; + let goodPrice = ''; + + if (!storageNum) { + if (suggestHighPrice && suggestLowPrice) { + priceType = '建议价'; + goodPrice = `¥${suggestLowPrice}-¥${suggestHighPrice}`; + } else { + goodPrice = '¥-'; + } + } else { + goodPrice = `¥${leastPrice}`; + } + return { goodImg: get(state.product.selectedProductInfo, 'product.goods_list[0].image_list[0].image_url', ''), productName: get(state.product.selectedProductInfo, 'product.product_name', ''), colorName: get(state.product.selectedProductInfo, 'product.goods_list[0].color_name', ''), sizeName: get(state.product.selectedProductInfo, 'size.size_name', ''), - goodPrice: get(state.product.selectedProductInfo, 'size.least_price', ''), + goodPrice, + priceType, + isSuggest: suggestHighPrice && suggestLowPrice, + suggestHighPrice, + suggestLowPrice }; } }) }, - watch: { - address: { - handler() { - this.compute(); - }, - deep: true - } - }, methods: { ...mapOrderAction(['fetchOrderAddress', 'fetchUserStatus', 'fetchOrderPrice', 'submitOrder', 'fetchPayList']), ...mapOrderMutations([Types.CHANGE_PRICE, Types.CHANGE_AGREE, Types.CLEAR_SELL_STATUS, Types.CHANGE_SELL_NUM]), @@ -140,7 +155,35 @@ export default { changeAgree(val) { this[Types.CHANGE_AGREE](val); }, - async submit() { + submit() { + if (this.productDetail.isSuggest) { + if (Number(this.price) > this.productDetail.suggestHighPrice) { + this.$createDialog({ + type: 'confirm', + content: '超出建议售价将被限制展示,建议下调至合理价格区间', + confirmBtn: { + text: '修改价格', + active: true, + disabled: false, + }, + cancelBtn: { + text: '仍要上架', + active: false, + disabled: false + }, + onCancel: () => { + this.submitHandler(); + } + + }).show(); + } else { + this.submitHandler(); + } + } else { + this.submitHandler(); + } + }, + async submitHandler() { const vm = this; if (!this.checkAddress()) { @@ -174,6 +217,7 @@ export default { this.$createToast({ time: 1500, txt: orderResult.message, + mask: true, type: 'txt' }).show(); @@ -223,12 +267,21 @@ export default { }, onNumChange(count) { this[Types.CHANGE_SELL_NUM](count); + this.compute(); }, delay(ns) { return new Promise(resolve => { setTimeout(resolve, ns); }); }, + backAction() { + this.$router.replace({ + name: 'ProductDetail', + params: { + productId: this.productId + } + }); + } } }; </script> diff --git a/apps/pages/product/product-detail.vue b/apps/pages/product/product-detail.vue index 155a7c3..7dee8ce 100644 --- a/apps/pages/product/product-detail.vue +++ b/apps/pages/product/product-detail.vue @@ -286,13 +286,7 @@ export default { onSizeSelectSheetHidden() { this.showSizeSelectSheet = false; }, - async buy() { - const userInfo = await this.auth(); - - if (!userInfo) { - return; - } - + buy() { this.resetSelectedSize(); this.selectSizeConfig = { dest: 'OrderBuyConfirm', diff --git a/apps/store/order/order-confirm.js b/apps/store/order/order-confirm.js index 949b8af..e994868 100644 --- a/apps/store/order/order-confirm.js +++ b/apps/store/order/order-confirm.js @@ -81,12 +81,29 @@ export default function() { state.agree = false; state.price = ''; state.num = 1; + state.address = null; + state.fee = { + income: '', + bankTransferFee: '', + platformFee: { + amount: '', + appraiseFee: '', + goodsPaymentRatePercent: '', + packageFee: '', + payChannelPercentage: '', + serviceFee: '' + } + }; }, [Types.CHANGE_SELL_NUM](state, data) { state.num = data; }, [Types.CLEAR_BUY_STATUS](state) { state.buyAgree = false; + state.orderDetail = {}; + state.selectedCouponList = []; + state.selectedPromotion = null; + state.couponList = []; }, [Types.UPDATE_ORDER](state, { amount, couponInfo, couponList, promotionFormulaList, promotionList, promotionTips }) { state.orderDetail.amount = amount; diff --git a/apps/store/order/price-change/actions.js b/apps/store/order/price-change/actions.js index b34c36d..2725061 100644 --- a/apps/store/order/price-change/actions.js +++ b/apps/store/order/price-change/actions.js @@ -50,6 +50,7 @@ export default { } else { commit(Types.FETCH_ORDER_PRODUCT_FAILED); } + return result; }, /** diff --git a/package.json b/package.json index 4e0ecc9..6b0b4da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xianyu-ufo-app-web", - "version": "0.0.2-beta-26", + "version": "0.0.2-beta-27", "private": true, "description": "Xianyu Project With Express", "repository": {