Toggle navigation
Toggle navigation
This project
Loading...
Sign in
fe
/
xianyu-ufo-app-web
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Plain Diff
Browse Files
Authored by
huangyCode
5 years ago
Commit
ed8ca91ddd8955f9984c3cde7e8dfa36640807ca
2 parents
4a1520f6
e74a2d47
master
...
deploy_1019_2108
develop
develop_service
discuss
feature/2019/1230-community-article
feature/2filter
feature/confirm-money
feature/coupon
feature/detail-images-contents
feature/order-address
feature/pay-success-resource
feature/product-detail-tip-show
feature/product_multiImage
feature/safeArea
feature/saler_coupon
feature/scroll
feature/search-word
feature/ufo-activitys
feature/ufo-icon
feature/video
hotfix/11
hotfix/detail-imageview-close
hotfix/image
hotfix/income-order-confirm
hotfix/report
hotfix/udid
promotion/order-list
2019111405
tag_1025_1000
tag_1021_1437
Merge branch 'develop' of
http://git.yoho.cn/fe/xianyu-ufo-app-web
into develop
Hide whitespace changes
Inline
Side-by-side
Showing
48 changed files
with
1214 additions
and
374 deletions
apps/components/auto-auth.js
apps/components/layout/layout-app.vue
apps/components/layout/layout-header.vue
apps/pages/address/address/address.vue
apps/pages/address/address/addressEdit.vue
apps/pages/home/news/components/tab.vue
apps/pages/home/news/news.vue
apps/pages/home/news/newsDetail.vue
apps/pages/order/buyer-ask-order.vue
apps/pages/order/buyer-confirm.vue
apps/pages/order/components/askorder/day-choose.vue
apps/pages/order/components/confirm/address.vue
apps/pages/order/components/confirm/input-price.vue
apps/pages/order/components/confirm/order-margin.vue
apps/pages/order/components/confirm/product.vue
apps/pages/order/components/dialog-change-bid-price.vue
apps/pages/order/components/order-actions.vue
apps/pages/order/deliver.vue
apps/pages/order/order-detail/buyer-order-detail.vue
apps/pages/order/order-detail/components/sell-order-address-info.vue
apps/pages/order/order-detail/mixins/order-action.js
apps/pages/order/order-detail/seller-order-detail.vue
apps/pages/order/order-list/components/video-player.vue
apps/pages/order/order-list/in-sell-order-list.vue
apps/pages/order/order-list/mixins/order-action.js
apps/pages/order/order-list/order-list.vue
apps/pages/order/order-logistics-info.vue
apps/pages/order/price-change/components/modal-unstock.vue
apps/pages/order/seller-ask-order.vue
apps/pages/order/seller-confirm.vue
apps/pages/product/components/buy-sheet.vue
apps/pages/product/components/size-list.vue
apps/pages/product/components/size-request-sheet.vue
apps/pages/product/components/size-select-sheet.vue
apps/pages/product/product-detail.vue
apps/store/home/channel.js
apps/store/home/news.js
apps/store/order/in-sale-order-list.js
apps/store/order/order-confirm.js
apps/store/order/order-list.js
apps/store/order/seller-ask-order.js
apps/store/product/actions.js
config/common.js
config/home-api-map.js
config/product-api-map.js
doraemon/middleware/ssr.js
package.json
yarn.lock
apps/components/auto-auth.js
View file @
ed8ca91
...
...
@@ -4,11 +4,11 @@ export default {
props
:
{
tag
:
{
type
:
String
,
default
:
'd
e
v'
default
:
'd
i
v'
}
},
render
(
h
,
{
scopedSlots
,
props
,
data
,
parent
})
{
return
h
(
props
.
props
,
{
render
(
h
,
{
scopedSlots
,
props
,
data
})
{
return
h
(
props
.
tag
,
{
'!click'
:
this
.
onClick
},
[
h
(
scopedSlots
.
defaults
(),
data
)]);
},
...
...
apps/components/layout/layout-app.vue
View file @
ed8ca91
...
...
@@ -2,10 +2,11 @@
<div class="layout">
<slot name="header">
<LayoutHeader v-if="!hideHeader"
class="layout-header"
:title="title"
:opacity="opacity"
:show-back="showBack"
class="layout-header"
:title="title"
:opacity="opacity"
:show-back="showBack"
:back-action="backAction"
></LayoutHeader>
</slot>
...
...
@@ -35,6 +36,10 @@ export default {
hideHeader: {
type: Boolean,
default: false
},
backAction: {
type: Function,
default: null
}
}
};
...
...
apps/components/layout/layout-header.vue
View file @
ed8ca91
...
...
@@ -15,7 +15,7 @@
</template>
<script>
import {
mapState
} from 'vuex';
import {
mapState
} from 'vuex';
export default {
name: 'LayoutHeader',
...
...
@@ -28,6 +28,10 @@ export default {
showBack: {
type: Boolean,
default: true
},
backAction: {
type: Function,
default: null
}
},
title(setTitle) {
...
...
@@ -36,7 +40,7 @@ export default {
}
if (this.title) {
setTitle(this.title);
this.$xianyu.setXianyuTitle({
title: this.title
});
this.$xianyu.setXianyuTitle({
title: this.title
});
}
this.setTitle = setTitle;
},
...
...
@@ -45,7 +49,11 @@ export default {
},
methods: {
onBack() {
this.$router.go(-1);
if (this.backAction) {
this.backAction();
} else {
this.$router.go(-1);
}
}
}
};
...
...
apps/pages/address/address/address.vue
View file @
ed8ca91
<template>
<LayoutApp title="选择地址" :show-back="true
">
<LayoutApp title="选择地址" :show-back="true" :back-action="goBack
">
<CubeScroll class="main-container" ref="scroll" :options="scrollOpts">
<div class="user-list">
<div
...
...
@@ -21,7 +21,7 @@
<p class="name">{{ item.consignee }}</p>
<p class="mobile">{{ item.mobile }}</p>
<div v-if="item.is_default === 'Y'" class="tag-btn">默认</div>
<div v-if="item.tag_code" class="tag-btn">{{ item.tag }}</div>
<div v-if="item.tag_code
&& item.tag
" class="tag-btn">{{ item.tag }}</div>
<div
class="option-btn"
:data-item="JSON.stringify(item)"
...
...
@@ -42,23 +42,22 @@
</template>
<script>
import Layout from "../../../components/layout/layout-app";
import { get } from "lodash";
import { Scroll, Loading } from "cube-ui";
import { get } from 'lodash';
import { Scroll, Loading } from 'cube-ui';
import {
SET_USER_ADDRESS_INFO,
STORE_UPDATE_ADDRESS_INFO
} from "store/address/address/types";
} from 'store/address/address/types';
import { createNamespacedHelpers } from 'vuex';
import { createNamespacedHelpers } from "vuex";
const { mapState, mapMutations, mapActions } = createNamespacedHelpers(
"address/address"
'address/address'
);
export default {
name:
"addressManager"
,
name:
'addressManager'
,
components: {
LayoutApp: Layout,
CubeScroll: Scroll
},
data() {
...
...
@@ -66,20 +65,26 @@ export default {
scrollOpts: {
bounce: false
},
pageName: "",
selectedAddressId: "",
pageName: '',
selectedAddressId: '',
query: {}
};
},
computed: {
...mapState([
"addressList"
])
...mapState([
'addressList'
])
},
methods: {
...mapMutations(["SET_USER_ADDRESS_INFO", "STORE_UPDATE_ADDRESS_INFO"]),
...mapActions(["fetchUserAddressList"]),
...mapMutations(['SET_USER_ADDRESS_INFO', 'STORE_UPDATE_ADDRESS_INFO']),
...mapActions(['fetchUserAddressList']),
toOrderPage(item) {
this.SET_USER_ADDRESS_INFO(item);
this.$router.push({
this.$router.replace({
name: this.pageName,
query: this.query
});
},
goBack() {
this.$router.replace({
name: this.pageName,
query: this.query
});
...
...
@@ -93,8 +98,8 @@ export default {
if (isAdd) {
if (this.addressList.length >= 5) {
this.toast = this.$createToast({
type: "error",
txt: "地址不能超过5个",
type: 'error',
txt: '地址不能超过5个',
mask: true
}).show();
...
...
@@ -104,8 +109,8 @@ export default {
//编辑地址时保存item
if (!isAdd) {
let addressInfo = JSON.parse(item || "{}");
Object.assign(addressInfo, { isUpdate: !isAdd, orderCode: "" });
let addressInfo = JSON.parse(item || '{}');
Object.assign(addressInfo, { isUpdate: !isAdd, orderCode: '' });
this.STORE_UPDATE_ADDRESS_INFO(addressInfo);
} else {
...
...
@@ -113,7 +118,10 @@ export default {
}
this.$router.push({
name: "addressEdit"
name: 'addressEdit',
query: {
fromPage: this.pageName
}
});
}
},
...
...
@@ -124,7 +132,7 @@ export default {
beforeRouteEnter(to, from, next) {
next(vm => {
// 通过 `vm` 访问组件实例
if (from.name !==
"addressEdit"
) {
if (from.name !==
'addressEdit'
) {
vm.query = from.query;
vm.pageName = from.name;
}
...
...
@@ -171,6 +179,7 @@ export default {
background: url(~statics/image/address/selected.png) no-repeat;
background-size: cover;
}
.uncheck-item {
margin-left: 28px;
width: 40px;
...
...
apps/pages/address/address/addressEdit.vue
View file @
ed8ca91
...
...
@@ -84,21 +84,22 @@
</template>
<script>
import Layout from "../../../components/layout/layout-app";
import Input from "./components/input";
import FormItem from "./components/form-item";
import Radio from "./components/radio";
import AddressAct from "./components/address-act";
import RadioGroup from "./components/radio-group";
import { Scroll } from "cube-ui";
import { createNamespacedHelpers } from "vuex";
import Layout from '../../../components/layout/layout-app';
import Input from './components/input';
import FormItem from './components/form-item';
import Radio from './components/radio';
import AddressAct from './components/address-act';
import RadioGroup from './components/radio-group';
import { Scroll } from 'cube-ui';
import { createNamespacedHelpers } from 'vuex';
const { mapState, mapMutations, mapActions } = createNamespacedHelpers(
"address/address"
'address/address'
);
export default {
name:
"addressEdit"
,
name:
'addressEdit'
,
components: {
LayoutApp: Layout,
CInput: Input,
...
...
@@ -115,24 +116,24 @@ export default {
},
isShowProvince: false,
isUpdate: false,
updateMobileNum:
""
,
updateMobileNum:
''
,
isMobileNumEdit: false,
title: "",
orderCode: "",
title: '',
orderCode: '',
model: {
consignee: "",
address_id: "",
mobile: "",
area_code: "",
area: "",
address: "",
tag_code: "",
consignee: '',
address_id: '',
mobile: '',
area_code: '',
area: '',
address: '',
tag_code: '',
is_default: false
}
};
},
watch: {
"model.mobile"
: function(val) {
'model.mobile'
: function(val) {
if (val === this.updateMobileNum) {
this.isMobileNumEdit = false;
} else {
...
...
@@ -141,10 +142,10 @@ export default {
}
},
computed: {
...mapState([
"addressTags", "updateAddressInfo"
]),
...mapState([
'addressTags', 'updateAddressInfo'
]),
submitClass() {
return [
"sure-btn"
,
'sure-btn'
,
{
active: this.inNotEmpty
}
...
...
@@ -162,11 +163,11 @@ export default {
methods: {
...mapMutations({}),
...mapActions([
"fetchAddressTags",
"addUserAddress",
"updateUserAddress",
"deleteUserAddress",
"updateReceiptAddressInOrder"
'fetchAddressTags',
'addUserAddress',
'updateUserAddress',
'deleteUserAddress',
'updateReceiptAddressInOrder'
]),
async onSubmit() {
...
...
@@ -196,15 +197,15 @@ export default {
if (result && result.code === 200) {
this.$createToast({
type: "txt",
txt: result.message.split(".").join("")
type: 'txt',
txt: result.message.split('.').join('')
}).show();
await this.sleep(1000);
this.$router.go(-1);
} else {
this.$createToast({
type:
"error"
,
type:
'error'
,
txt: result.message,
mask: true
}).show();
...
...
@@ -212,16 +213,16 @@ export default {
},
validator() {
let info = this.model;
let username = info.consignee.replace(/(^\s+)|(\s+$)/g,
""
);
let username = info.consignee.replace(/(^\s+)|(\s+$)/g,
''
);
// 简单的表单校验
if (!username) {
this.showToast(
"收件人不能为空"
);
this.showToast(
'收件人不能为空'
);
return false;
}
if (!/^[\u4E00-\u9FA5A-Za-z0-9*]+$/gi.test(username)) {
this.showToast(
"收货人姓名不支持特殊符号"
);
this.showToast(
'收货人姓名不支持特殊符号'
);
return false;
}
...
...
@@ -233,32 +234,32 @@ export default {
}
if (!info.mobile) {
this.showToast(
"手机号不能为空"
);
this.showToast(
'手机号不能为空'
);
return false;
} else {
if (!reg.test(info.mobile)) {
this.showToast(
"请输入正确11位手机号码"
);
this.showToast(
'请输入正确11位手机号码'
);
return;
}
}
if (!info.area_code || !info.area) {
this.showToast(
"省市区不能为空"
);
this.showToast(
'省市区不能为空'
);
return false;
}
if (!info.address) {
this.showToast(
"地址不能为空"
);
this.showToast(
'地址不能为空'
);
return false;
}
return {
id: info.address_id ||
""
,
id: info.address_id ||
''
,
consignee: username,
mobile: info.mobile,
area_code: info.area_code,
area: info.area,
address: info.address,
is_default: info.is_default ?
"Y" : "N"
,
is_default: info.is_default ?
'Y' : 'N'
,
tag_code: info.tag_code
};
},
...
...
@@ -266,15 +267,15 @@ export default {
const result = await this.deleteUserAddress(this.model.address_id);
if (result && result.code === 200) {
this.$createToast({
type: "txt",
txt: result.message.split(".").join("")
type: 'txt',
txt: result.message.split('.').join('')
}).show();
await this.sleep(1000);
this.$router.go(-1);
} else {
this.$createToast({
type:
"error"
,
type:
'error'
,
txt: result.message,
mask: true
}).show();
...
...
@@ -300,7 +301,7 @@ export default {
},
showToast(tip) {
this.$createToast({
type:
"txt"
,
type:
'txt'
,
txt: tip
}).show();
},
...
...
@@ -316,9 +317,10 @@ export default {
activated() {
let addressInfo = this.updateAddressInfo;
this.isUpdate = addressInfo.isUpdate;
this.isUpdate =
addressInfo.isUpdate && this.$route.query.fromPage !== 'OrderSellConfirm';
this.orderCode = addressInfo.orderCode;
this.title = addressInfo.isUpdate ?
"编辑地址" : "添加地址"
;
this.title = addressInfo.isUpdate ?
'编辑地址' : '添加地址'
;
// 订单编辑 不查标签
if (!this.orderCode) {
...
...
@@ -334,7 +336,7 @@ export default {
this.model.area = addressInfo.area;
this.model.address = addressInfo.address;
this.model.tag_code = addressInfo.tag_code;
this.model.is_default = addressInfo.is_default ===
"Y"
? true : false;
this.model.is_default = addressInfo.is_default ===
'Y'
? true : false;
} else {
this.model = {};
}
...
...
apps/pages/home/news/components/tab.vue
View file @
ed8ca91
...
...
@@ -29,7 +29,6 @@ export default {
console.log(item);
let { type, description } = item;
this.$router.push({name:'newsDetail',query: {type,description}})
this.$emit('clearStore',1);
}
}
};
...
...
apps/pages/home/news/news.vue
View file @
ed8ca91
...
...
@@ -8,8 +8,7 @@
:data="newsList.list">
<div class="news-content">
<Tab
v-if="newsList.tabList.length > 0" :list="newsList.tabList"
@clearStore="clearStoreData"></Tab>
v-if="newsList.tabList.length > 0" :list="newsList.tabList"></Tab>
<List v-if="newsList.list.length > 0" :list="newsList && newsList.list || []"></List>
<UfoNoItem v-else :tip="`暂无数据`" style="margin-6op: 50px"></UfoNoItem>
</div>
...
...
@@ -65,13 +64,6 @@ export default {
await this.fetchNewsList(params);
this.$refs.scroll.forceUpdate();
},
clearStoreData(index) {
console.log(index);
}
},
watch:{
// '$route':["fetchNewsList","fetchNewsTabList"]
},
components: {
Style,
...
...
apps/pages/home/news/newsDetail.vue
View file @
ed8ca91
...
...
@@ -38,7 +38,6 @@ export default {
...mapState(['newsList','newsDeatilList']),
},
activated() {
console.log('111');
let params = {
type: this.type,
isPage: true
...
...
apps/pages/order/buyer-ask-order.vue
View file @
ed8ca91
...
...
@@ -15,11 +15,11 @@
<span class="size">{{sizeInfo}}</span>
<div class="pricedetail">
<div>
<span class="priceTitle">
最低售价:
</span>
<span class="priceTitle">
现货最低售价:
</span>
<span class="price">¥{{originProductData.least_price || '-'}}</span>
</div>
<div>
<span class="priceTitle">
最高求购价:
</span>
<span class="priceTitle">
现货最高求购价:
</span>
<span class="price">¥{{originProductData.bid_moster_price || '-'}}</span>
</div>
</div>
...
...
@@ -60,7 +60,15 @@
<div class="line"></div>
<div class="space"></div>
<day-choose :value="chooseDay" :options="dayOptions" :choose="BUYER_ASK_SET_CHOOSEDAY"></day-choose>
<!--<day-choose :chooseDay="chooseDay" :options="dayOptions" :choose="BUYER_ASK_SET_CHOOSEDAY"></day-choose>-->
<div class="dayChoose" @click="showPicker">
<span class="leftText" >求购期限:</span>
<div class="rightWrapper">
<span class="rightText">{{chooseDay || '7天'}}</span>
<i class="cubeic-arrow" ></i>
</div>
</div>
<div class="space"></div>
<div class="line"></div>
...
...
@@ -90,10 +98,7 @@ const {mapState, mapActions, mapMutations, mapGetters} = createNamespacedHelpers
export default {
name: 'BuyerAskOrder',
components: {Button, Input, DayChoose, OrderAddress, OrderAgree},
props: {
lazy: Boolean,
storageId: Number,
},
props: ['lazy', 'storageId'],
component: {
Input,
OrderAddress,
...
...
@@ -138,8 +143,11 @@ export default {
next(vm => {
// 通过 `vm` 访问组件实例
vm.inputPrice = '';
vm.BUYER_ASK_RESET_DATA();
if (from.name !== 'address') {
vm.inputPrice = '';
vm.BUYER_ASK_RESET_DATA();
}
});
},
...
...
@@ -331,13 +339,39 @@ export default {
// vm.onClose(orderResult.data.orderCode);
}
}).show();
}
},
showPicker() {
console.log(this.options);
this.$createPicker({
title: '选择求购时限',
data: [this.dayOptions],
onSelect: (value) => {
this.BUYER_ASK_SET_CHOOSEDAY(value[0]);
},
selectedIndex: [2],
onCancel: () => {
}
}).show();
},
}
};
</script>
<style lang="scss" scoped>
.dayChoose {
height: 60px;
font-family: PingFang-SC-Regular;
font-size: 14*2px;
color: #000000;
display: flex;
justify-content: space-between;
flex-direction: row;
}
.body {
height: 100%;
/*position: relative;*/
...
...
@@ -399,7 +433,7 @@ export default {
.productPrice {
width: calc(100% - 120*2px
- 40*2px
- 10*2px);
width: calc(100% - 120*2px - 10*2px);
height: 120*2px;
margin-left: 10*2px;
}
...
...
apps/pages/order/buyer-confirm.vue
View file @
ed8ca91
...
...
@@ -2,15 +2,16 @@
<LayoutApp :show-back="true" title="确认订单">
<div class="body">
<AddressInfo :data="address" class="order-item" :show-tip="false"></AddressInfo>
<ProductInfo :data="
orderDetail.good
" class="product-info order-item"></ProductInfo>
<ProductInfo :data="
productDetail
" class="product-info order-item"></ProductInfo>
<Coupon class="order-item" v-if="couponList.length > 0" :data="orderDetail.recommendedCouponInfo"
@click="onCouponClick"></Coupon>
<Promotion class="order-item" v-if="promotionList.length > 0" :data="orderDetail.promotionTips"
@click="onPromotionClick"></Promotion>
<BuyerFeeInfo :data="orderDetail.promotionFormulaList" class="order-item"></BuyerFeeInfo>
<div class="tip2 order-item">{{orderDetail.specialTips}}</div>
<div class="tip order-item" v-html="replaceBr(orderDetail.damagesDesc)"></div>
<OrderInfo class="order-item" :pay-way="orderDetail.paymentWay"
<BuyerFeeInfo :data="orderDetail.promotionFormulaList" v-if="orderDetail.promotionFormulaList"
class="order-item"></BuyerFeeInfo>
<div class="tip2 order-item" v-if="orderDetail.specialTips">{{orderDetail.specialTips}}</div>
<div class="tip order-item" v-if="orderDetail.damagesDesc" v-html="replaceBr(orderDetail.damagesDesc)"></div>
<OrderInfo class="order-item" v-if="orderDetail.paymentWay" :pay-way="orderDetail.paymentWay"
:delivery-way="orderDetail.deliveryWay"></OrderInfo>
</div>
...
...
@@ -52,7 +53,6 @@ export default {
Promotion
},
async mounted() {
this.fetchUserStatus();
this.fetchOrderAddress({ tabType: UserType.buy });
await this.$store.dispatch('product/getSelectedTradeProduct', {
...
...
@@ -60,25 +60,40 @@ export default {
storageId: this.storageId
});
const payInfo = await this.fetchPayment({ skup: this.productDetail.skup }
);
let user = await this.$sdk.getUser(
);
if (payInfo?.code !== 200) {
this.$createToast({
time: 2000,
txt: payInfo.message,
type: 'txt'
}).show();
}
if (user && user.uid) {
const payInfo = await this.fetchPayment({ skup: this.productDetail.skup });
if (this.address.address_id) {
await this.compute();
if (payInfo?.code !== 200) {
this.$createToast({
time: 2000,
txt: payInfo.message,
type: 'txt'
}).show();
}
if (this.address?.address_id) {
await this.compute();
}
}
},
beforeRouteLeave(to, from, next) {
if (to.name !== 'address') {
this[Types.CLEAR_BUY_STATUS]();
}
next();
},
computed: {
...mapOrderState(['address', 'orderDetail']),
...mapState({
productDetail: state => {
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', ''),
skup: get(state.product.selectedProductInfo, 'size.skup', '')
};
}
...
...
@@ -90,9 +105,17 @@ export default {
return get(this.orderDetail, 'promotionList', []);
},
},
watch: {
address: {
handler() {
this.compute();
},
deep: true
}
},
methods: {
...mapOrderAction(['fetchOrderAddress', 'fetchUserStatus', 'fetchPayList', 'fetchPayment', 'computeOrder', 'buyPayAction']),
...mapOrderMutations([Types.CHANGE_SELECT_COUPON_LIST, Types.CHANGE_SELECT_PROMOTION]),
...mapOrderMutations([Types.CHANGE_SELECT_COUPON_LIST, Types.CHANGE_SELECT_PROMOTION
, Types.CLEAR_BUY_STATUS
]),
replaceBr(str) {
return str ? str.replace(/\n/g, '<br />') : '';
},
...
...
@@ -156,14 +179,37 @@ export default {
}
});
},
checkAddress() {
if (!this.address) {
this.$createToast({
time: 1500,
txt: '请选择地址',
type: 'txt'
}).show();
return false;
}
return true;
},
async onPayAction() {
const user = await this.$yoho.auth();
if (!user) {
return;
}
const vm = this;
if (!this.checkAddress()) {
return;
}
await this.compute();
const result = await this.buyPayAction({
skup: this.productDetail.skup,
addressId: this.address.address_id,
addressId: this.address
?
.address_id,
couponCode: get(this.orderDetail, 'recommendedCouponInfo.coupon_code', ''),
promotionId: get(this.orderDetail, 'promotionTips.promotionIds', '')
});
...
...
apps/pages/order/components/askorder/day-choose.vue
View file @
ed8ca91
...
...
@@ -2,11 +2,11 @@
<template>
<div class="customSelectWrapper">
<div class="customSelectTextWrapper" @click="showPicker">
<div class="customSelectWrapper" @click="showPicker">
<div class="customSelectTextWrapper" >
<span class="leftText">求购期限:</span>
<div class="rightWrapper">
<span class="rightText">{{
value
}}</span>
<span class="rightText">{{
currentOption || '7天'
}}</span>
<i class="cubeic-arrow" ></i>
</div>
</div>
...
...
@@ -25,9 +25,9 @@ export default {
type: Array,
default: [],
},
value
: {
chooseDay
: {
type: String,
default: '',
default: '
7天
',
},
choose: {
type: Function,
...
...
@@ -37,33 +37,35 @@ export default {
components: {Select},
computed: {
chooseday: {
currentOption: {
get() {
return this.
value
;
return this.
current || this.chooseDay
;
},
set(val) {
set(val) {
this.current = val;
}
}
},
data() {
return {
// options: ['1天', '3天', '7天', '15天', '30天'],
// value: '7天',
title: '选择求购时限',
current: '',
};
},
methods: {
change(value, index, text) {
console.log('change', value, index, text);
//
console.log('change', value, index, text);
this.choose && this.choose(value[0]);
this.current = value[0];
},
showPicker() {
console.log(this.options)
console.log(this.options)
;
this.$createPicker({
title: '选择求购时限',
data: [this.options],
...
...
apps/pages/order/components/confirm/address.vue
View file @
ed8ca91
...
...
@@ -34,13 +34,17 @@ export default {
}
},
methods: {
onClick() {
this.$router.push({
name: 'address',
query: {
address_id: this.data?.address_id
}
});
async onClick() {
const user = await this.$yoho.auth();
if (user) {
this.$router.push({
name: 'address',
query: {
address_id: this.data?.address_id
}
});
}
}
}
};
...
...
apps/pages/order/components/confirm/input-price.vue
View file @
ed8ca91
<template>
<div class="input-wrapper">
<div class="price-symbol">¥</div>
<input ref="input" :value="value" class="tip" type="text" placeholder="定价需以9结尾,例如¥1299" @blur="onBlur"
@change="onChange"></input>
</div>
<div class="input-comp">
<div class="input-wrapper">
<div class="price-symbol">¥</div>
<input ref="input" :value="value" class="tip" type="text" placeholder="定价需以9结尾,例如¥1299" @blur="onBlur"
@change="onChange"></input>
</div>
<div class="num-wrapper" v-if="superSell">
<i class="iconfont iconplus-minus icon-class" @click="onMinus"></i>
<span class="icon-class count">{{count}}</span>
<i class="iconfont iconi-add icon-class" @click="onAdd"></i>
</div>
</div>
</template>
<script>
...
...
@@ -13,11 +20,20 @@ export default {
value: {
type: [Number, String],
default: ''
},
num: {
type: Number,
default: 1
},
superSell: {
type: Boolean,
default: false
}
},
data() {
return {
val: this.value
val: this.value,
count: this.num
};
},
methods: {
...
...
@@ -26,6 +42,16 @@ export default {
},
onChange() {
this.$emit('input', this.$refs.input.value);
},
onMinus() {
if (this.count > 1) {
this.count -= 1;
this.$emit('on-num-change', this.count);
}
},
onAdd() {
this.count += 1;
this.$emit('on-num-change', this.count);
}
},
watch: {
...
...
@@ -37,8 +63,14 @@ export default {
</script>
<style lang="scss" scoped>
.input-comp {
display: flex;
}
.input-wrapper {
display: flex;
flex: 1;
position: relative;
overflow: hidden;
height: 120px;
...
...
@@ -68,4 +100,25 @@ export default {
opacity: 1; /* Firefox */
}
.num-wrapper {
width: 240px;
height: 120px;
margin-left: 10px;
background: #f5f5f5;
display: flex;
justify-content: space-around;
align-items: center;
.icon-class {
font-size: 40px;
color: #999;
font-weight: bold;
}
.count {
color: black;
}
}
</style>
...
...
apps/pages/order/components/confirm/order-margin.vue
View file @
ed8ca91
<template>
<div>
<div class="tip">需支付保证金:<span class="red">{{data.earnestMoneyStr || '¥0'}}</span><i v-if="!hiddenIcon" class="iconfont iconquestion icon-class"
@click="onClick"></i></div>
<div class="tip" v-if="!superSell">需支付保证金:<span class="red">{{data.earnestMoneyStr || '¥0'}}</span><i v-if="!hiddenIcon"
class="iconfont iconquestion icon-class"
@click="onClick"></i></div>
<div class="tip2">所有商品必须为国内现货,且承诺36小时内发货,交易成功后将自动退还保证金</div>
</div>
</template>
...
...
@@ -21,6 +22,12 @@ export default {
default() {
return false;
}
},
superSell: {
type: Boolean,
default() {
return false;
}
}
},
methods: {
...
...
apps/pages/order/components/confirm/product.vue
View file @
ed8ca91
...
...
@@ -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">{{ priceType || '最低售价:'}} <span class="price2">¥{{data.goodPrice
|| '-'
}}</span></div>
</div>
</div>
</div>
...
...
apps/pages/order/components/dialog-change-bid-price.vue
View file @
ed8ca91
...
...
@@ -6,24 +6,46 @@
</p>
<p class="price-item">
<span>当前最高求购价:</span>
<span>¥{{ goodsInfo.
good
Price }}</span>
<span>¥{{ goodsInfo.
bidHighest
Price }}</span>
</p>
<p class="price-item">
<p
v-if="goodsInfo.leastPrice"
class="price-item">
<span>最低现货价:</span>
<span>¥{{ goodsInfo.leastPrice }}</span>
</p>
<p v-for="(priceInfo, i) in computePriceList" :key="i">
<InputUfo
type="number"
placeholder="定价需以9结尾 例如1999"
:maxlength="8"
:class="errorTip ? 'ipt-number show-error' : 'ipt-number'"
v-model="chgPrice"
>
<span class="prepend" slot="prepend">¥</span>
</InputUfo>
<p class="error-tip">{{ errorTip }}</p>
<p
:class="
i === computePriceList.length - 1
? 'promotion-list-item last'
: 'promotion-list-item'
"
v-for="(priceInfo, i) in computePriceList"
:key="i"
>
<span>{{ priceInfo.promotion }}:</span>
<span>{{ priceInfo.promotionAmount }}</span>
</p>
<p class="
a-
tip">Tip: 调整求购价成功后,当前的求购将被关闭</p>
<p class="tip">Tip: 调整求购价成功后,当前的求购将被关闭</p>
</div>
</template>
<script>
import { createNamespacedHelpers } from "vuex";
const { mapActions } = createNamespacedHelpers("order/orderList");
import InputUfo from "../price-change/components/input-ufo";
import { debounce } from "lodash";
const { mapActions, mapMutations } = createNamespacedHelpers("order/orderList");
export default {
components: { InputUfo },
props: {
computePriceInfo: {
type: Object,
...
...
@@ -32,17 +54,75 @@ export default {
goodsInfo: {
type: Object,
default: () => ({})
},
orderCode: {
type: Number,
default: 0
}
},
data() {
return {
chgPrice: "",
errorTip: "",
computePrice: null
};
},
computed: {
computePriceList() {
return this.computePriceInfo.promotionFormulaList.filter(
const priceInfo = this.computePrice || this.computePriceInfo;
return priceInfo.promotionFormulaList.filter(
({ promotion }) => promotion === "运费" || promotion === "实付金额"
);
}
},
mounted() {
// debounce防抖动,输入数字后延迟500毫秒提交
this.inputChange = debounce(this.onChange.bind(this), 500);
},
methods: {
...mapActions(["computeChangePrice", "changePrice"])
...mapActions(["computeChangePrice", "changePrice"]),
...mapMutations(["setChangePrice"]),
async onChange(price) {
if (this.checkPrice(price)) {
const res = await this.computeChangePrice({
price,
orderCode: this.orderCode
});
if (typeof res === "string") {
this.errorTip = res;
this.setChangePrice(0);
} else {
this.computePrice = res;
this.setChangePrice(price);
}
} else {
this.setChangePrice(0);
}
},
checkPrice(price) {
let valid = false;
if (!price) {
this.errorTip = "没有价格";
return false;
} else if (!/^\d+$/.test(price)) {
this.errorTip = "价格只能为正整数";
} else if (!/9$/.test(price)) {
this.errorTip = "出售价格必须以9结尾";
} else if (+price === +this.goodsInfo.goodPrice) {
this.errorTip = "前后价格没有变化";
} else {
this.errorTip = "";
valid = true;
}
return valid;
}
},
watch: {
chgPrice(newVal) {
this.inputChange(newVal);
}
}
};
</script>
...
...
@@ -54,8 +134,32 @@ export default {
padding: 0 38px;
letter-spacing: 0;
.ipt-number {
margin: 30px 0;
&.show-error {
margin-bottom: 0;
}
}
.error-tip {
color: #d0021b;
}
.promotion-list-item {
display: flex;
justify-content: space-between;
align-items: center;
color: #999;
&.last {
color: #000;
}
}
.tip {
color: #999;
margin-top: 40px;
}
}
</style>
\ No newline at end of file
...
...
apps/pages/order/components/order-actions.vue
View file @
ed8ca91
...
...
@@ -133,7 +133,10 @@ export default {
Object.assign(updateInfo, { isUpdate: true, orderCode: orderCode });
this.STORE_UPDATE_ADDRESS_INFO(updateInfo);
this.$router.push({
name: "addressEdit"
name: 'addressEdit',
query: {
fromPage: 'order-list'
}
});
break;
}
...
...
apps/pages/order/deliver.vue
View file @
ed8ca91
...
...
@@ -7,11 +7,11 @@
</div>
<div class="address-info">
<div class="consignee">
<span>{{
stateCenterAddress.address_name
}}</span>
<span>{{
stateCenterAddress.address_name
}}</span>
<span class="tag">有货鉴定中心</span>
</div>
<p class="location">{{stateCenterAddress.address}}</p>
<p>{{stateCenterAddress.mobile}}</p>
<p class="location">{{ stateCenterAddress.address }}</p>
<p>{{ stateCenterAddress.mobile }}</p>
</div>
</div>
<div class="deliver-express">
...
...
@@ -20,41 +20,65 @@
</div>
<div class="express-info">
<div class="express-name">顺丰快运</div>
<CubeInput class="express-input" v-model="expressCode" placeholder="请填写顺丰运单号"></CubeInput>
<span v-if="canScan" class="iconfont iconscan scan-btn" @click="scanCode"></span>
<CubeInput
class="express-input"
v-model="expressCode"
placeholder="请填写顺丰运单号"
></CubeInput>
<span
v-if="canScan"
class="iconfont iconscan scan-btn"
@click="scanCode"
></span>
</div>
</div>
<div v-if="stateCenterAddress.deliverDesc" class="deliver-tip">
<span class="iconfont iconwarn"></span>
<p>{{
stateCenterAddress.deliverDesc
}}</p>
<p>{{
stateCenterAddress.deliverDesc
}}</p>
</div>
<div class="submit-warp">
<div class="contract-check">
<i class="iconfont" :class="readContract ? 'iconcheck_full checked' : 'iconcheck_default'" @click="changeReadContract"></i>
<i
class="iconfont"
:class="
readContract ? 'iconcheck_full checked' : 'iconcheck_default'
"
@click="changeReadContract"
></i>
<span>我已阅读并同意</span>
<LayoutLink href="//activity.yoho.cn/feature/4049.html?share_id=6729&title=UFO卖家商品质检标准">《UFO卖家商品质检标准》</LayoutLink>
<LayoutLink
href="//activity.yoho.cn/feature/4049.html?share_id=6729&title=UFO卖家商品质检标准"
>《卖家商品质检标准》</LayoutLink
>
</div>
<p v-if="stateCenterAddress.warnTips" class="warn-tip">{{stateCenterAddress.warnTips}}</p>
<CubeButton class="deliver-btn" :disabled="deliverDisable" @click="submitDeliver">发货</CubeButton>
<p v-if="stateCenterAddress.warnTips" class="warn-tip">
{{ stateCenterAddress.warnTips }}
</p>
<CubeButton
class="deliver-btn"
:disabled="deliverDisable"
@click="submitDeliver"
>发货</CubeButton
>
</div>
</div>
</LayoutApp>
</template>
<script>
import { get } from 'lodash';
import { Button, Input } from 'cube-ui';
import { createNamespacedHelpers } from 'vuex';
import { get } from "lodash";
import { Button, Input } from "cube-ui";
import { createNamespacedHelpers } from "vuex";
const { mapState, mapActions } = createNamespacedHelpers(
'order/orderDeliver'
);
const { mapState, mapActions } = createNamespacedHelpers(
"order/orderDeliver"
);
export default {
name:
'OrderDeliver'
,
name:
"OrderDeliver"
,
data() {
return {
canScan: false,
centerAddress: {},
expressCode:
''
,
expressCode:
""
,
readContract: false
};
},
...
...
@@ -62,7 +86,7 @@ export default {
let { skup, code } = this.$route.params || {};
this.orderCode = code;
if (process.env.VUE_ENV !==
'server'
) {
if (process.env.VUE_ENV !==
"server"
) {
this.fetchAppraiseAddress({
skup,
orderCode: code
...
...
@@ -70,7 +94,7 @@ export default {
}
},
computed: {
...mapState([
'appraiseAddress'
]),
...mapState([
"appraiseAddress"
]),
stateCenterAddress() {
if (!this.centerAddress.address) {
this.centerAddress = get(this.appraiseAddress, this.orderCode) || {};
...
...
@@ -89,71 +113,99 @@ export default {
this.$yoho.auth();
this.fetchAppraiseAddressChangeNotice({orderCode: this.orderCode}).then(res => {
let isChanged = get(res, 'data.isChanged');
let isForceShow = get(res, 'data.isForceShow');
this.fetchAppraiseAddressChangeNotice({ orderCode: this.orderCode }).then(
res => {
let isChanged = get(res, "data.isChanged");
let isForceShow = get(res, "data.isForceShow");
if (!isChanged && !isForceShow) {
return;
}
let { title = '', tips, alert_address_name, alert_address, alert_mobile } = res.data || {};
let info = [
alert_address_name || '',
alert_address || '',
alert_mobile || ''
];
if (!isChanged && !isForceShow) {
return;
}
if (isChanged && tips) {
info.unshift(tips);
}
let {
title = "",
tips,
alert_address_name,
alert_address,
alert_mobile
} = res.data || {};
let info = [
alert_address_name || "",
alert_address || "",
alert_mobile || ""
];
this.$createDialog({
type: 'alert',
confirmBtn: {
text: '我知道了'
},
onConfirm() {
// Todo report()
console.log('Todo Report', res.data);
if (isChanged && tips) {
info.unshift(tips);
}
}, (createElement) => {
return [
createElement('div', {
class: {
'dg-notice-content': true
this.$createDialog(
{
type: "alert",
confirmBtn: {
text: "我知道了"
},
slot: 'content'
}, [
createElement('div', {
class: {
'dg-notice-content-title': true
}
}, isChanged ? 'UFO仓库调整公告' : title),
...info.map(val => {
return createElement('p', {
class: {
'dg-notice-content-info': true
onConfirm() {
// Todo report()
console.log("Todo Report", res.data);
}
},
createElement => {
return [
createElement(
"div",
{
class: {
"dg-notice-content": true
},
slot: "content"
},
}, val);
})
])
];
}).show();
});
[
createElement(
"div",
{
class: {
"dg-notice-content-title": true
}
},
isChanged ? "UFO仓库调整公告" : title
),
...info.map(val => {
return createElement(
"p",
{
class: {
"dg-notice-content-info": true
}
},
val
);
})
]
)
];
}
).show();
}
);
},
methods: {
...mapActions(['fetchAppraiseAddress', 'fetchAppraiseAddressChangeNotice', 'deliverOrderToDepot']),
...mapActions([
"fetchAppraiseAddress",
"fetchAppraiseAddressChangeNotice",
"deliverOrderToDepot"
]),
toast(msg, time = 1500) {
this.$createToast && this.$createToast({
txt: msg,
type: 'txt',
time
}).show();
this.$createToast &&
this.$createToast({
txt: msg,
type: "txt",
time
}).show();
},
scanCode() {
if (window && window.WindVane) {
window.WindVane.call(
'Scancode', 'scan'
, {}, e => {
window.WindVane.call(
"Scancode", "scan"
, {}, e => {
if (e && e.code) {
this.expressCode = e.code;
}
...
...
@@ -184,11 +236,11 @@ export default {
this.$router.go(-1);
// Todo report()
} else {
this.toast(res.message ||
'网络异常,请稍后重试'
);
this.toast(res.message ||
"网络异常,请稍后重试"
);
}
});
} else {
this.toast(
'请输入正确的快递单号'
);
this.toast(
"请输入正确的快递单号"
);
}
}
},
...
...
@@ -216,7 +268,6 @@ export default {
color: #000;
}
}
</style>
<style lang="scss" scoped>
...
...
@@ -260,7 +311,7 @@ export default {
font-weight: 300;
padding: 0 14px;
margin-left: 6px;
color: #002
B
47;
color: #002
b
47;
border: 1px solid #ccc;
border-radius: 10px;
box-sizing: border-box;
...
...
@@ -321,7 +372,6 @@ export default {
color: #444;
font-weight: 500;
margin-left: 10px;
}
}
...
...
apps/pages/order/order-detail/buyer-order-detail.vue
View file @
ed8ca91
<template>
<layout-app>
<layout-app
:title="'\u200E'"
>
<div class="order-detail-wrapper">
<div class="content">
<!-- 状态信息 -->
...
...
@@ -25,18 +25,24 @@
<!-- 商品信息 -->
<order-item-info class="item-wrapper" />
<!-- 鉴定视频 -->
<div
class="video-wrapper item-wrapper"
v-if="orderDetail.appraiseVideoUrl"
@click="() => onVideoHandler()"
></div>
<div class="video-img" v-if="orderDetail.appraiseVideoUrl" @click="() => onVideoHandler()"></div>
<div ref="videoWrapper" class="video-wrapper">
<VideoPlayer
ref="videoPlayer"
class="video-player"
:source="orderDetail.appraiseVideoUrl"
></VideoPlayer>
</div>
<!-- 价格信息 -->
<div class="price-info item-wrapper">
<p>
<span class="label">商品金额:</span>
<span>¥{{ priceInfo.goodPrice }}</span>
</p>
<p v-if="parseInt(priceInfo.activityCutPrice || '') > 0" class="delivery-fee">
<p
v-if="parseInt(priceInfo.activityCutPrice || '') > 0"
class="delivery-fee"
>
<span class="label">活动优惠:</span>
<span>-¥{{ priceInfo.activityCutPrice }}</span>
</p>
...
...
@@ -44,15 +50,24 @@
<span class="label">运费:</span>
<span>¥{{ priceInfo.feePrice }}</span>
</p>
<p v-if="parseInt(priceInfo.couponCutPrice || '') > 0" class="delivery-fee">
<p
v-if="parseInt(priceInfo.couponCutPrice || '') > 0"
class="delivery-fee"
>
<span class="label">优惠券:</span>
<span>-¥{{ priceInfo.couponCutPrice }}</span>
</p>
<p v-if="parseInt(priceInfo.shippingCouponCutPrice || '') > 0" class="delivery-fee">
<p
v-if="parseInt(priceInfo.shippingCouponCutPrice || '') > 0"
class="delivery-fee"
>
<span class="label">运费券:</span>
<span>-¥{{ priceInfo.shippingCouponCutPrice }}</span>
</p>
<p v-if="parseInt(priceInfo.cutPromotionPrice || '') > 0" class="delivery-fee">
<p
v-if="parseInt(priceInfo.cutPromotionPrice || '') > 0"
class="delivery-fee"
>
<span class="label">促销:</span>
<span>-¥{{ priceInfo.cutPromotionPrice }}</span>
</p>
...
...
@@ -103,10 +118,6 @@
"
/>
</div>
<div ref="videoWrapper">
<VideoPlayer ref="videoPlayer" class="play-video" :source="orderDetail.appraiseVideoUrl"></VideoPlayer>
</div>
</div>
</layout-app>
</template>
...
...
@@ -176,12 +187,6 @@ export default {
}
this.$refs.videoPlayer.parentHandleclick();
}
},
mounted() {
if (this.$yoho.isAndroid) {
this.$refs.videoWrapper.style.position = "absolute";
this.$refs.videoWrapper.style.top = "-1000px";
}
}
};
</script>
...
...
@@ -216,13 +221,25 @@ export default {
}
}
.video-wrapper {
width: 100%;
.video-img {
margin-top: 40px;
margin-left: -15px;
width: calc(100% + 20px);
height: 378px;
background: url("~statics/image/order/video-big@3x.png");
background-size: cover;
}
.video-wrapper {
overflow: hidden;
}
.video-player {
display: block;
height: 30px;
opacity: 0;
}
.item-wrapper {
border-top: 1px solid #eee;
padding: 40px 0;
...
...
@@ -310,11 +327,5 @@ export default {
font-size: 28px;
color: #d0021b;
}
.play-video {
display: inline-block;
height: 10px;
opacity: 0;
}
}
</style>
...
...
apps/pages/order/order-detail/components/sell-order-address-info.vue
View file @
ed8ca91
...
...
@@ -5,9 +5,13 @@
<div class="address-wrapper">
<i class="address-icon"></i>
<div>
<p class="consignee">{{ appraiseAddress.addressName }}</p>
<p class="consignee">
收货人地址: {{ appraiseAddress.addressName }}
</p>
<p class="area">{{ appraiseAddress.address }}</p>
<p class="mobile">{{ appraiseAddress.mobile }}</p>
<p class="mobile">
{{ appraiseAddress.mobile }}<i ref="copy" class="copy"></i>
</p>
</div>
</div>
<router-link
...
...
@@ -37,6 +41,7 @@
<script>
import { createNamespacedHelpers } from "vuex";
import Clipboard from "clipboard";
const { mapGetters } = createNamespacedHelpers("order/orderDetail");
export default {
...
...
@@ -48,6 +53,20 @@ export default {
},
computed: {
...mapGetters(["userAddress", "appraiseAddress"])
},
activated() {
this.copyBtn = new Clipboard(this.$refs.copy, {
text: () => {
const { addressName, address, mobile } = this.appraiseAddress;
return `${addressName} ${address} ${mobile}`;
}
});
this.copyBtn.on("success", () => {
this.$createToast({
txt: "复制成功",
type: "txt"
}).show();
});
}
};
</script>
...
...
@@ -96,6 +115,15 @@ export default {
font-weight: bold;
}
.copy {
width: 50px;
height: 25px;
display: inline-block;
background: url("~statics/image/order/copy@3x.png") no-repeat;
background-size: contain;
background-position: center;
}
.address-icon {
width: 48px;
height: 48px;
...
...
apps/pages/order/order-detail/mixins/order-action.js
View file @
ed8ca91
/* eslint-disable operator-linebreak */
/* eslint-disable space-before-function-paren */
import
{
createNamespacedHelpers
}
from
'vuex'
;
const
{
mapActions
}
=
createNamespacedHelpers
(
'order/orderList'
);
const
{
mapActions
,
mapState
}
=
createNamespacedHelpers
(
'order/orderList'
);
import
{
orderActionsMap
,
ownType
}
from
'constants/order-constants'
;
import
DialogConfirmInfo
from
'../../components/dialog-confirm-info'
;
import
DialogChangeBidPrice
from
'../../components/dialog-change-bid-price'
;
export
default
{
data
()
{
...
...
@@ -12,8 +13,17 @@ export default {
isMixin
:
true
,
};
},
computed
:
{
...
mapState
([
'changePrice'
]),
},
methods
:
{
...
mapActions
([
'cancelTradeConfirmInfo'
,
'cancelTrade'
,
'deleteOrder'
]),
...
mapActions
([
'cancelTradeConfirmInfo'
,
'cancelTrade'
,
'deleteOrder'
,
'computeChangePrice'
,
'confirmChangePrice'
,
]),
async
onSellerOrderAction
({
action
,
order
})
{
const
{
owner
=
ownType
.
SELL
}
=
this
.
$route
.
params
;
const
{
orderCode
,
earnestMoney
}
=
order
;
...
...
@@ -89,7 +99,12 @@ export default {
},
async
onBuyerOrderAction
({
action
,
order
})
{
const
{
owner
=
ownType
.
SELL
}
=
this
.
$route
.
params
;
const
{
orderCode
,
priceInfo
=
{},
bidDepositInfo
=
{}
}
=
order
;
const
{
orderCode
,
priceInfo
=
{},
bidDepositInfo
=
{},
goodsInfo
,
}
=
order
;
switch
(
action
.
name
)
{
case
orderActionsMap
.
DEL_ORDER
.
name
:
{
...
...
@@ -112,6 +127,57 @@ export default {
}).
show
();
break
;
}
case
orderActionsMap
.
CHANGE_BID_PRICE
.
name
:
{
const
{
goodPrice
}
=
goodsInfo
;
const
computePriceInfo
=
await
this
.
computeChangePrice
({
orderCode
,
price
:
goodPrice
,
});
if
(
typeof
computePriceInfo
===
'string'
)
{
this
.
$createToast
({
type
:
'alert'
,
txt
:
computePriceInfo
,
mask
:
true
,
}).
show
();
return
;
}
this
.
$createDialog
(
{
type
:
'prompt'
,
confirmBtn
:
{
text
:
'调整求购价'
},
cancelBtn
:
{
active
:
true
},
onConfirm
:
async
()
=>
{
if
(
!
this
.
changePrice
)
{
return
;
}
const
isOk
=
await
this
.
confirmChangePrice
({
price
:
this
.
changePrice
,
orderCode
,
});
if
(
isOk
)
{
this
.
fetchOrderDetail
(
this
.
$route
.
params
);
}
},
},
createElement
=>
{
return
[
createElement
(
DialogChangeBidPrice
,
{
props
:
{
computePriceInfo
,
goodsInfo
,
orderCode
,
},
slot
:
'content'
,
}),
];
},
).
show
();
break
;
}
case
orderActionsMap
.
CANCEL_ORDER
.
name
:
{
let
confirmInfo
=
await
this
.
cancelTradeConfirmInfo
({
orderCode
,
...
...
apps/pages/order/order-detail/seller-order-detail.vue
View file @
ed8ca91
<template>
<layout-app>
<layout-app
:title="'\u200E'"
>
<div class="order-detail-wrapper">
<div class="content">
<!-- 状态信息 -->
...
...
apps/pages/order/order-list/components/video-player.vue
View file @
ed8ca91
...
...
@@ -118,7 +118,7 @@ export default {
},
watch: {
source() {
this.showPlayer();
//
this.showPlayer();
}
},
mounted() {
...
...
@@ -131,6 +131,7 @@ export default {
},
methods: {
parentHandleclick() {
this.showVideo = true;
this.player.play();
const timeId = setTimeout(() => {
this.player.requestFullscreen();
...
...
@@ -142,7 +143,6 @@ export default {
return;
}
this.showVideo = true;
this.$nextTick(() => {
this.initPlayer();
});
...
...
apps/pages/order/order-list/in-sell-order-list.vue
View file @
ed8ca91
...
...
@@ -69,7 +69,8 @@ export default {
...mapGetters(["orderList", "pullUpLoad"]),
options: function() {
return {
pullUpLoad: this.pullUpLoad
pullUpLoad: this.pullUpLoad,
pullDownRefresh: true
};
},
isFetchEntryOrder() {
...
...
apps/pages/order/order-list/mixins/order-action.js
View file @
ed8ca91
...
...
@@ -5,19 +5,24 @@ import { createNamespacedHelpers } from 'vuex';
import
DialogConfirmInfo
from
'../../components/dialog-confirm-info'
;
import
DialogChangeBidPrice
from
'../../components/dialog-change-bid-price'
;
const
{
mapActions
,
mapMutations
}
=
createNamespacedHelpers
(
'order/orderList'
);
const
{
mapActions
,
mapMutations
,
mapState
}
=
createNamespacedHelpers
(
'order/orderList'
,
);
const
{
mapMutations
:
inSaleMapMutations
}
=
createNamespacedHelpers
(
'order/inSaleOrderList'
,
);
export
default
{
computed
:
{
...
mapState
([
'changePrice'
]),
},
methods
:
{
...
mapActions
([
'cancelTradeConfirmInfo'
,
'cancelTrade'
,
'deleteOrder'
,
'computeChangePrice'
,
'changePrice'
,
'c
onfirmC
hangePrice'
,
]),
...
mapMutations
([
'filterOrderList'
,
'resetData'
]),
...
inSaleMapMutations
([
'filterInSaleOrderList'
]),
...
...
@@ -158,16 +163,43 @@ export default {
price
:
goodPrice
,
});
if
(
typeof
computePriceInfo
===
'string'
)
{
this
.
$createToast
({
type
:
'alert'
,
txt
:
computePriceInfo
,
mask
:
true
,
}).
show
();
return
;
}
this
.
$createDialog
(
{
type
:
'prompt'
,
confirmBtn
:
{
text
:
'调整求购价'
},
cancelBtn
:
{
active
:
true
},
onConfirm
:
async
()
=>
{
if
(
!
this
.
changePrice
)
{
return
;
}
const
isOk
=
await
this
.
confirmChangePrice
({
price
:
this
.
changePrice
,
orderCode
,
});
if
(
isOk
)
{
this
.
resetData
();
this
.
fetchData
(
this
.
$route
.
params
);
}
},
},
createElement
=>
{
return
[
createElement
(
DialogChangeBidPrice
,
{
props
:
{
computePriceInfo
,
goodsInfo
},
props
:
{
computePriceInfo
,
goodsInfo
,
orderCode
,
},
slot
:
'content'
,
}),
];
...
...
apps/pages/order/order-list/order-list.vue
View file @
ed8ca91
...
...
@@ -24,10 +24,10 @@
@on-video="params => onVideoHandle(params)"
/>
</div>
<div ref="videoWrapper">
<div ref="videoWrapper"
class="video-wrapper"
>
<VideoPlayer
:ref="order.orderCode"
class="
play-video
"
class="
video-player
"
:source="order.appraiseVideoUrl"
></VideoPlayer>
</div>
...
...
@@ -35,7 +35,11 @@
</ul>
</scroll>
<empty-list class="empty-wrapper" tip="这里什么都没有..." v-show="isShowEmpty" />
<empty-list
class="empty-wrapper"
tip="这里什么都没有..."
v-show="isShowEmpty"
/>
</div>
</layout-app>
</template>
...
...
@@ -77,7 +81,8 @@ export default {
...mapState(["orderList", "pullUpLoad", "isShowEmpty"]),
options: function() {
return {
pullUpLoad: this.pullUpLoad
pullUpLoad: this.pullUpLoad,
pullDownRefresh: true
};
}
},
...
...
@@ -142,20 +147,23 @@ export default {
.order-list-scroll-wrap {
.list-wrapper {
li {
padding: 40px 40px;
padding: 40px 40px
0
;
border-bottom: 1px solid #eee;
}
.play-video {
display: inline-block;
height: 10px;
opacity: 0;
}
& :last-child {
border-bottom: 0;
}
}
}
.video-wrapper {
overflow: hidden;
}
.video-player {
display: block;
height: 40px;
opacity: 0;
}
}
</style>
...
...
apps/pages/order/order-logistics-info.vue
View file @
ed8ca91
...
...
@@ -35,10 +35,13 @@
>
<span class="title">{{ detailInfo.title }}</span>
<time-line :isGoingOn="i === 0" :deliveryList="detailInfo.detailList">
<template v-slot:content="{
detail: {miniFaultConfirm}
}">
<template v-slot:content="{
detail: { miniFaultConfirm }
}">
<div class="judge-content-wrapper" v-if="miniFaultConfirm">
<p class="tip">
<span :class="[miniFaultConfirm.showBtn ? '' : 'tipTextGray']">{{ miniFaultConfirm.text }}</span>
<span
:class="[miniFaultConfirm.showBtn ? '' : 'tipTextGray']"
>{{ miniFaultConfirm.text }}</span
>
<span v-if="miniFaultConfirm.showBtn">
,请在<count-down
:leftTime="miniFaultConfirm.leftTime"
...
...
@@ -49,32 +52,29 @@
</p>
<div class="img-container">
<ul class="img-wrapper">
<template v-if="miniFaultConfirm.imageUrls.length > 3">
<li v-for="(imgUrl, i) in miniFaultConfirm.imageUrls" :key="i" v-if="i < 3" @click="showBigImage(miniFaultConfirm, i)">
<ImageFormat
:data-secc="imgUrl"
:src="imgUrl"
alt=""
:width="70"
:height="70"
/>
</li>
<li>
<Button class="more" @click="showBigImage(miniFaultConfirm, 3)">查看更多</Button>
</li>
</template>
<template v-else>
<li v-for="(imgUrl, i) in miniFaultConfirm.imageUrls" :key="i" @click="showBigImage">
<ImageFormat
:data-secc="imgUrl"
:src="imgUrl"
alt=""
:width="70"
:height="70"
/>
</li>
</template>
<li
v-for="(imgUrl, i) in miniFaultConfirm.imageUrls.slice(
0,
3
)"
:key="i"
@click="showBigImage(miniFaultConfirm, i)"
>
<ImageFormat
:data-secc="imgUrl"
:src="imgUrl"
alt=""
:width="70"
:height="70"
/>
</li>
<li v-if="miniFaultConfirm.imageUrls.length > 3">
<Button
class="more"
@click="showBigImage(miniFaultConfirm, 3)"
>查看更多</Button
>
</li>
</ul>
</div>
<div class="actions-wrapper" v-if="miniFaultConfirm.showBtn">
...
...
@@ -189,11 +189,12 @@ export default {
onCancel: () => {}
}).show();
},
showBigImage(data, index) { // 点击小图展示大图
showBigImage(data, index) {
// 点击小图展示大图
if (data.imageUrls && data.imageUrls.length > 0) {
this.imageUrls = [];
data.imageUrls.forEach((val) => {
this.imageUrls.push(val.replace(/{width}x{height}/, '750x'));
data.imageUrls.forEach(val => {
this.imageUrls.push(val.replace(/{width}x{height}/, "750x"));
});
this.$createImagePreview({
...
...
@@ -201,7 +202,6 @@ export default {
initialIndex: index
}).show();
}
},
flawRejectDialog() {
...
...
apps/pages/order/price-change/components/modal-unstock.vue
View file @
ed8ca91
...
...
@@ -20,9 +20,6 @@
下架商品保证金会被释放
</p>
</div>
<div class="change-price-modal">
<p class="modal-title">您确定不卖此商品吗?</p>
</div>
</Modal>
</template>
...
...
apps/pages/order/seller-ask-order.vue
View file @
ed8ca91
...
...
@@ -3,7 +3,7 @@
<LayoutApp :show-back="true">
<div class="body">
<TitleComp txt="变现"></TitleComp>
<ProductInfo :data="originProductData" class="product-info" :priceType="'
最高求购价
'"></ProductInfo>
<ProductInfo :data="originProductData" class="product-info" :priceType="'
现货最高求购价:
'"></ProductInfo>
<div class="inputView">
<span class="inputViewIcon">
¥
...
...
@@ -62,6 +62,7 @@ export default {
hiddenIcon: true,
agreeDesc: '有货卖家协议',
url: `http://m.yohobuy.com/activity/student/detail/renzhen?openby:yohobuy={\"action\":\"go.h5\",\"params\":{\"url\":\"https://activity.yoho.cn/feature/3187.html?title=卖家协议\"}}`,
isEntry: false,
};
},
...
...
@@ -83,6 +84,14 @@ export default {
},
mounted() {
this.isEntry = false
this.fetchSellerEntryStatus({})
.then((res)=> {
console.log(res)
if (res) {
this.isEntry = get(res, 'entrySellerType', 0) !== 0
}
})
this.fetchSellerOrderCount({tabType: 'sell'});// 19268
this.sellerCompute({price: this.price, skup: this.skup});
...
...
@@ -105,13 +114,51 @@ export default {
'fetchSellerOrderCount',
'sellerCompute',
'sellerPublish',
'fetchSellerEntryStatus',
]),
submitClick() {
this.sellerPublish({price: this.price, skup: this.skup, address_id: this.addressInfo.address_id})
.then(() => {
this.payOrder();
});
if (this.isEntry) {
this.$createDialog({
type: 'confirm',
title: '',
content: `确定以${this.price}出售此商品`,
confirmBtn: {
text: '确定出售',
active: true,
disabled: false,
href: 'javascript:;',
},
cancelBtn: {
text: '我再想想',
active: false,
disabled: false,
href: 'javascript:;'
},
onConfirm: () => {
this.sellerPublish({price: this.price, skup: this.skup, address_id: this.addressInfo.address_id})
.then(() => {
this.$createToast({
time: 1000,
type: 'txt',
txt: '出售成功'
}).show();
this.$router.go(-1);
});
},
onCancel: () => {
this.computePrice();
}
}).show();
} else {
this.sellerPublish({price: this.price, skup: this.skup, address_id: this.addressInfo.address_id})
.then(() => {
this.payOrder();
});
}
},
payOrder() {
...
...
apps/pages/order/seller-confirm.vue
View file @
ed8ca91
<template>
<LayoutApp :show-back="true" title="
确认
出售">
<LayoutApp :show-back="true" title="出售">
<div class="body">
<ProductInfo :data="productDetail" class="product-info"></ProductInfo>
<InputPrice @input="changePrice" :value="price" class="input-price" @on-blur="compute"></InputPrice>
<OrderMargin class="order-item order-margin" :data="fee"></OrderMargin>
<InputPrice @input="changePrice" class="input-price"
:num="num" :value="price"
@on-blur="compute" :super-sell="superSell"
@on-num-change="onNumChange"
>
</InputPrice>
<OrderMargin class="order-item order-margin" :data="fee" :super-sell="superSell"></OrderMargin>
<OrderFee class="order-item" :data="fee"></OrderFee>
<AddressInfo :data="address" class="order-item"></AddressInfo>
</div>
...
...
@@ -48,25 +53,34 @@ export default {
return {
txt: '提交',
error: false,
num: 1,
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'
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
};
},
mounted() {
this.fetchUserStatus();
this.fetchUserStatus().then(result => {
this.superSell = get(result, 'data.entrySellerType', 0) !== 0;
});
this.fetchOrderAddress({ tabType: UserType.sell });
this.$store.dispatch('product/getSelectedTradeProduct', {
productId: this.productId,
storageId: this.storageId
});
},
beforeRouteLeave(to, from, next) {
if (to.name !== 'address') {
this[Types.CLEAR_SELL_STATUS]();
}
next();
},
computed: {
...mapOrderState(['address', 'fee', 'price', 'agree']),
...mapOrderState(['address', 'fee', 'price', 'agree'
, 'num'
]),
...mapState({
productDetail: state => {
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', ''),
...
...
@@ -74,9 +88,17 @@ export default {
}
})
},
watch: {
address: {
handler() {
this.compute();
},
deep: true
}
},
methods: {
...mapOrderAction(['fetchOrderAddress', 'fetchUserStatus', 'fetchOrderPrice', 'submitOrder', 'fetchPayList']),
...mapOrderMutations([Types.CHANGE_PRICE, Types.CHANGE_AGREE]),
...mapOrderMutations([Types.CHANGE_PRICE, Types.CHANGE_AGREE
, Types.CLEAR_SELL_STATUS, Types.CHANGE_SELL_NUM
]),
onClick() {
this.submit();
...
...
@@ -103,12 +125,28 @@ export default {
changePrice(val) {
this[Types.CHANGE_PRICE](val);
},
checkAddress() {
if (!this.address) {
this.$createToast({
time: 1500,
txt: '请选择地址',
type: 'txt'
}).show();
return false;
}
return true;
},
changeAgree(val) {
this[Types.CHANGE_AGREE](val);
},
async submit() {
const vm = this;
if (!this.checkAddress()) {
return;
}
await this.compute();
if (this.error) {
...
...
@@ -116,8 +154,8 @@ export default {
}
const orderResult = await this.submitOrder({
address_id: this.address.address_id,
num: 1,
address_id: this.address?.address_id,
num: this.num,
price: this.price,
storage_id: this.storageId,
});
...
...
@@ -138,6 +176,13 @@ export default {
txt: orderResult.message,
type: 'txt'
}).show();
this.$router.replace({
name: 'ProductDetail',
params: {
productId: this.productId
}
});
return;
}
...
...
@@ -174,6 +219,9 @@ export default {
}
});
},
onNumChange(count) {
this[Types.CHANGE_SELL_NUM](count);
}
}
};
</script>
...
...
apps/pages/product/components/buy-sheet.vue
View file @
ed8ca91
...
...
@@ -160,7 +160,7 @@ export default {
}
.size-list {
flex: 1
0 100%
;
flex: 1;
overflow: hidden;
}
...
...
apps/pages/product/components/size-list.vue
View file @
ed8ca91
...
...
@@ -34,8 +34,7 @@ export default {
name: 'size-list',
props: {
list: {
type: [Array, null],
required: true,
type: Array,
},
addSize: {
type: Boolean,
...
...
apps/pages/product/components/size-request-sheet.vue
View file @
ed8ca91
...
...
@@ -37,6 +37,11 @@ const { mapActions } = createNamespacedHelpers('product');
export default {
name: 'SizeRequest',
mixins: [stateShortCutsMixins],
props: {
productId: {
type: Number,
},
},
components: {
LayoutApp,
SizeList,
...
...
@@ -78,9 +83,10 @@ export default {
}
},
_requestSize() {
const sizeIds = this.selected.map(item => item.size_id).join(',');
const size_ids = this.selected.map(item => item.size_id).join(',');
const goods_id = this.productDetail.goods_list[0].goods_id;
this.requestSize({
sizeIds
}).then(() => {
this.requestSize({
product_id: this.productId, goods_id, size_ids
}).then(() => {
this.$createDialog({
type: 'alert',
content: '您的尺码添加申请已提交,我们会尽快审核并通知您,请耐心等待',
...
...
apps/pages/product/components/size-select-sheet.vue
View file @
ed8ca91
...
...
@@ -102,7 +102,7 @@ export default {
return null;
},
canAddSize() {
return get(this.product, 'goods_list[0].canAddSize', false);
return get(this.product, 'goods_list[0].canAddSize', false)
&& this.config.type === 'sell'
;
},
isAvailable() {
...
...
@@ -115,7 +115,7 @@ export default {
isTradable() {
return this.isAvailable && (
(this.config.type === 'buy' && this.selectedSize.storage_num > 0 && this.selectedSize.least_price !== '-') ||
this.
isMarketable
this.
config.type === 'sell'
);
},
...
...
@@ -189,8 +189,6 @@ export default {
this.$yoho.auth()
.then(() => {
console.log(this.selectedSize);
this.$store.commit('order/sellerAskOrder/SELLER_ASK_SET_PRODUCTINFO', {
goodImg: get(this.product, 'goods_list[0].image_list[0].image_url', ''),
colorName: get(this.product, 'goods_list[0].color_name', ''),
...
...
apps/pages/product/product-detail.vue
View file @
ed8ca91
...
...
@@ -80,7 +80,7 @@
@hidden="onSizeSelectSheetHidden"
@select="onSelectTradeProduct"
@add="onRequestSize"/>
<size-request-sheet v-if="showSizeRequestSheet" @hidden="onSizeRequestHidden"/>
<size-request-sheet v-if="showSizeRequestSheet" @hidden="onSizeRequestHidden"
:productId="productId"
/>
<buy-sheet v-if="showBuySheet" @hidden="onBuyHidden" :productId="productId"/>
</div>
</template>
...
...
@@ -381,9 +381,6 @@ export default {
qiugou() {
this.showBuySheet = true;
},
onBuyHidden() {
this.showBuySheet = false;
},
},
};
</script>
...
...
apps/store/home/channel.js
View file @
ed8ca91
...
...
@@ -53,8 +53,11 @@ export default function() {
const
result
=
await
this
.
$api
.
get
(
'/api/ufo/channel/channelList'
,
{
content_code
:
'f788335b57b67c1711f255648c744dab'
,
});
console
.
log
(
result
);
console
.
log
(
"resultresultresult"
);
if
(
result
.
code
===
200
)
{
commit
(
Types
.
FETCH_CHANNEL
,
{
list
:
result
.
data
});
return
result
.
data
;
}
}
...
...
apps/store/home/news.js
View file @
ed8ca91
...
...
@@ -31,25 +31,35 @@ export default function() {
},
[
Types
.
FETCH_NEWSDETAIL_LIST
](
state
,
{
list
})
{
console
.
log
(
list
.
page
);
console
.
log
(
"list.page"
);
state
.
newsDeatilList
.
list
=
list
.
page
>
1
?
state
.
newsDeatilList
.
list
.
concat
(
list
.
list
)
:
list
.
list
;
state
.
newsDeatilList
.
page
=
list
.
page
;
state
.
newsDeatilList
.
totalPage
=
list
.
totalPage
;
list
.
page
<
list
.
totalPage
?
state
.
newsDeatilList
.
isMoreData
=
true
:
state
.
newsDeatilList
.
isMoreData
=
false
;
},
resPages
(
state
,
{
page
,
isMoreData
})
{
state
.
newsDeatilList
.
page
=
page
;
state
.
newsDeatilList
.
isMoreData
=
isMoreData
;
},
[
Types
.
FETCH_NEWS_TAB_LIST
](
state
,
{
list
})
{
state
.
newsList
.
tabList
=
list
;
},
},
actions
:
{
async
fetchNewsList
({
commit
,
state
},
obj
)
{
let
page
=
state
.
newsList
.
page
+
1
;
let
limit
=
state
.
newsList
.
limit
;
console
.
log
(
obj
)
console
.
log
(
"objobj"
)
let
type
=
obj
&&
obj
.
type
;
let
page
=
type
?
state
.
newsDeatilList
.
page
+
1
:
state
.
newsList
.
page
+
1
;
let
limit
=
state
.
newsList
.
limit
;
let
isPage
=
obj
&&
obj
.
isPage
;
// 页面跳转重置page页码
isPage
?
page
=
1
:
state
.
newsList
.
page
+
1
;
if
(
isPage
)
{
page
=
1
;
}
const
result
=
await
this
.
$api
.
post
(
'/api/ufo/home/newsList'
,
{
page
,
type
:
type
||
''
,
limit
});
...
...
@@ -59,8 +69,10 @@ export default function() {
res
.
createTime
=
moment
(
new
Date
(
res
.
createTime
*
1000
)).
format
(
'YYYY.MM.DD HH:mm'
);
});
if
(
type
)
{
console
.
log
(
'1'
);
commit
(
Types
.
FETCH_NEWSDETAIL_LIST
,
{
list
:
result
.
data
});
}
else
{
console
.
log
(
'2'
);
commit
(
Types
.
FETCH_NEWS_LIST
,
{
list
:
result
.
data
});
}
}
...
...
apps/store/order/in-sale-order-list.js
View file @
ed8ca91
...
...
@@ -41,7 +41,7 @@ export default function() {
state
.
notEntryOrder
.
page
=
++
page
;
state
.
notEntryOrder
.
pagetotal
=
pagetotal
;
state
.
notEntryOrder
.
list
=
state
.
e
ntryOrder
.
list
.
concat
(
data
);
state
.
notEntryOrder
.
list
=
state
.
notE
ntryOrder
.
list
.
concat
(
data
);
// 分页结束
if
(
page
>
pagetotal
)
{
...
...
apps/store/order/order-confirm.js
View file @
ed8ca91
...
...
@@ -12,7 +12,10 @@ export const Types = {
CHANGE_SELECT_PROMOTION
:
'CHANGE_SELECT_PROMOTION'
,
COMPUTE_ORDER
:
'COMPUTE_ORDER'
,
UPDATE_ORDER
:
'UPDATE_ORDER'
,
CHANGE_BUY_AGREE
:
'CHANGE_BUY_AGREE'
CHANGE_BUY_AGREE
:
'CHANGE_BUY_AGREE'
,
CHANGE_SELL_NUM
:
'CHANGE_SELL_NUM'
,
CLEAR_SELL_STATUS
:
'CLEAR_SELL_STATUS'
,
CLEAR_BUY_STATUS
:
'CLEAR_BUY_STATUS'
};
export
const
UserType
=
{
...
...
@@ -28,7 +31,7 @@ export default function() {
return
{
namespaced
:
true
,
state
:
{
address
:
{}
,
address
:
null
,
fee
:
{
income
:
''
,
bankTransferFee
:
''
,
...
...
@@ -43,8 +46,11 @@ export default function() {
},
alipayStatus
:
false
,
userStatus
:
false
,
price
:
''
,
agree
:
false
,
num
:
1
,
buyAgree
:
false
,
orderDetail
:
{},
...
...
@@ -71,6 +77,17 @@ export default function() {
[
Types
.
FETCH_ORDER_BUY_ORDER
](
state
,
data
)
{
state
.
orderDetail
=
data
;
},
[
Types
.
CLEAR_SELL_STATUS
](
state
)
{
state
.
agree
=
false
;
state
.
price
=
''
;
state
.
num
=
1
;
},
[
Types
.
CHANGE_SELL_NUM
](
state
,
data
)
{
state
.
num
=
data
;
},
[
Types
.
CLEAR_BUY_STATUS
](
state
)
{
state
.
buyAgree
=
false
;
},
[
Types
.
UPDATE_ORDER
](
state
,
{
amount
,
couponInfo
,
couponList
,
promotionFormulaList
,
promotionList
,
promotionTips
})
{
state
.
orderDetail
.
amount
=
amount
;
state
.
orderDetail
.
promotionFormulaList
=
promotionFormulaList
;
...
...
@@ -155,7 +172,9 @@ export default function() {
const
address
=
find
(
get
(
addressInfo
,
'data'
,
[]),
{
is_default
:
'Y'
});
commit
(
Types
.
FETCH_ORDER_ADDRESS
,
address
);
if
(
address
)
{
commit
(
Types
.
FETCH_ORDER_ADDRESS
,
address
);
}
}
},
...
...
@@ -173,7 +192,7 @@ export default function() {
},
async
fetchUserStatus
()
{
const
userStatus
=
await
this
.
$api
.
get
(
'/api/order/user/status'
);
return
this
.
$api
.
get
(
'/api/order/user/status'
);
},
async
submitOrder
({
commit
},
payload
)
{
...
...
apps/store/order/order-list.js
View file @
ed8ca91
...
...
@@ -10,6 +10,9 @@ const initailData = () => ({
currentStatus
:
null
,
routeParamStatus
:
null
,
isShowEmpty
:
false
,
// 求购调价
changePrice
:
0
,
});
export
default
function
()
{
...
...
@@ -49,6 +52,9 @@ export default function() {
state
.
pagetotal
=
0
;
state
.
pullUpLoad
=
true
;
},
setChangePrice
(
state
,
price
)
{
state
.
changePrice
=
price
;
},
resetData
(
state
)
{
const
s
=
initailData
();
...
...
@@ -168,16 +174,19 @@ export default function() {
},
);
return
res
.
code
===
200
?
res
.
data
:
null
;
return
res
.
code
===
200
?
res
.
data
:
res
.
message
||
''
;
},
// 买家调价
async
c
hangePrice
(
_
,
{
orderCode
,
price
})
{
async
c
onfirmChangePrice
({
commit
}
,
{
orderCode
,
price
})
{
const
res
=
await
this
.
$api
.
post
(
'/api/order/buyerask/changeprice'
,
{
orderCode
:
`
$
{
orderCode
}
`
,
price
:
+
price
,
});
if
(
res
.
code
)
{
commit
(
'setChangePrice'
,
0
);
}
return
res
.
code
===
200
?
res
.
data
:
null
;
},
},
...
...
apps/store/order/seller-ask-order.js
View file @
ed8ca91
...
...
@@ -67,7 +67,7 @@ export default function() {
mutations
:
{
[
SELLER_ASK_SET_IS_SHOWTOAST
](
state
,
payload
)
{
state
.
isShowTip
=
payload
state
.
isShowTip
=
payload
;
},
[
SELLER_ASK_SET_PRODUCTINFO
](
state
,
payload
)
{
...
...
@@ -124,6 +124,20 @@ export default function() {
actions
:
{
fetchSellerEntryStatus
({
commit
},
{}
=
{})
{
return
this
.
$api
.
get
(
'/api/ufo/sellerOrder/entryStatus'
)
.
then
(
result
=>
{
if
(
result
.
code
===
200
)
{
return
result
.
data
;
}
else
{
return
null
;
}
},
error
=>
{
return
null
;
});
},
fetchSellerOrderCount
({
commit
,
dispatch
},
{
tabType
=
'sell'
,
uid
}
=
{})
{
this
.
$api
.
get
(
'/api/order/ordercount'
,
{
tabType
,
...
...
apps/store/product/actions.js
View file @
ed8ca91
...
...
@@ -103,13 +103,13 @@ export default {
resetSelectedSize
({
commit
})
{
commit
(
Types
.
RESET_SELECTED_PRODUCT_SIZE
);
},
async
requestSize
({
state
},
{
sizeI
ds
})
{
async
requestSize
({
state
},
{
product_id
,
goods_id
,
size_i
ds
})
{
const
selectedProduct
=
state
.
selectedProductInfo
;
await
this
.
$api
.
get
(
'/api/ufo/product/addsize'
,
{
product_id
:
selectedProduct
.
productId
,
goods_id
:
get
(
selectedProduct
.
product
,
'goods_list[0].goods_id'
),
size_ids
:
sizeIds
product_id
,
goods_id
,
size_ids
,
});
// 忽略错误
...
...
config/common.js
View file @
ed8ca91
...
...
@@ -238,7 +238,7 @@ if (isProduction) {
'http://java-yohoufo-fore.test3.ingress.dev.yohocorp.com/ufo-gateway/'
,
service
:
process
.
env
.
TEST_API
||
'http://api-test3.dev.yohocorp.com/'
,
},
useCache
:
fals
e
,
useCache
:
tru
e
,
monitorReport
:
{
host
:
'192.168.102.22'
,
port
:
8086
,
...
...
config/home-api-map.js
View file @
ed8ca91
...
...
@@ -72,6 +72,7 @@ module.exports = {
'/api/ufo/mine/resource'
:
{
ufo
:
true
,
api
:
'ufo.resource.get'
,
cache
:
true
,
params
:
{
content_code
:
{
type
:
String
}},
},
...
...
@@ -93,6 +94,7 @@ module.exports = {
content_code
:
{
type
:
String
},
},
auth
:
true
,
cache
:
true
},
'/api/ufo/home/newsList'
:
{
ufo
:
true
,
...
...
config/product-api-map.js
View file @
ed8ca91
...
...
@@ -68,6 +68,19 @@ module.exports = {
},
},
// 建议尺码
'/api/ufo/product/addsize'
:
{
ufo
:
true
,
auth
:
true
,
path
:
'/ufo-gateway/ufoLive'
,
api
:
'ufo.product.addSize'
,
params
:
{
product_id
:
{
type
:
Number
},
// 商品id
goods_id
:
{
type
:
Number
},
// 商品id
size_ids
:
{
type
:
String
},
// 建议尺码id
},
},
// 推荐
'/api/ufo/product/recommend'
:
{
ufo
:
true
,
...
...
doraemon/middleware/ssr.js
View file @
ed8ca91
...
...
@@ -93,12 +93,18 @@ const handlerError = (err = {}, req, res, next) => {
return
next
(
err
);
};
const
getCacheKey
=
(
urlPath
,
cackeKey
=
''
)
=>
{
const
urlObj
=
url
.
parse
(
urlPath
);
const
getCacheKey
=
(
req
,
route
)
=>
{
const
urlObj
=
url
.
parse
(
req
.
url
);
let
ck
=
urlObj
.
pathname
;
return
md5
(
cackeKey
.
replace
(
'$url'
,
urlObj
.
pathname
)
.
replace
(
'$params'
,
urlObj
.
query
));
if
(
route
.
query
)
{
const
qks
=
Object
.
keys
(
route
.
query
);
ck
+=
`
?
$
{
qks
.
map
(
qk
=>
`
$
{
qk
}
=
$
{
req
.
query
&&
req
.
query
[
qk
]
||
''
}
`
).
join
(
'&'
)}
`
;
}
ck
+=
`
|
$
{
pkg
.
version
}
`
;
return
md5
(
ck
);
};
const
render
=
(
route
)
=>
{
...
...
@@ -125,7 +131,7 @@ const render = (route) => {
if
(
isDegrade
)
{
return
res
.
send
(
degradeHtml
);
}
const
ck
=
route
.
cackeKey
?
getCacheKey
(
req
.
url
,
route
.
cackeKey
)
:
void
0
;
const
ck
=
getCacheKey
(
req
,
route
)
;
if
(
config
.
useCache
&&
route
.
cache
&&
ck
)
{
const
html
=
await
redis
.
getAsync
(
ck
);
...
...
@@ -183,7 +189,7 @@ const devRender = (route) => {
return
async
(
req
,
res
,
next
)
=>
{
try
{
res
.
setHeader
(
'X-YOHO-Version'
,
pkg
.
version
);
const
ck
=
route
.
cackeKey
?
getCacheKey
(
req
.
url
,
route
.
cackeKey
)
:
void
0
;
const
ck
=
getCacheKey
(
req
,
route
)
;
if
(
route
.
accessLog
)
{
logger
.
info
(
`
$
{
req
.
yoho
.
clientIp
}
|
$
{
req
.
url
}
|
uid
:
$
{
req
.
user
.
uid
}
|
$
{
new
Date
()}
`
);
...
...
@@ -196,7 +202,7 @@ const devRender = (route) => {
const
html
=
await
redis
.
getAsync
(
ck
);
if
(
html
)
{
logger
.
debug
(
`
cached
$
{
req
.
url
}
`
);
logger
.
info
(
`
cached
$
{
req
.
url
}
`
);
res
.
setHeader
(
'X-YOHO-Cached'
,
'HIT'
);
return
res
.
send
(
html
);
}
...
...
package.json
View file @
ed8ca91
{
"name"
:
"xianyu-ufo-app-web"
,
"version"
:
"0.0.2-beta-2
0
"
,
"version"
:
"0.0.2-beta-2
3
"
,
"private"
:
true
,
"description"
:
"Xianyu Project With Express"
,
"repository"
:
{
...
...
yarn.lock
View file @
ed8ca91
...
...
@@ -728,6 +728,13 @@
dependencies:
regenerator-runtime "^0.12.0"
"@babel/runtime@^7.4.5":
version "7.6.3"
resolved "http://npm.yohops.com/@babel%2fruntime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f"
integrity sha1-k1Eix0xz0iQMr9Mt21/Cps01zx8=
dependencies:
regenerator-runtime "^0.13.2"
"@babel/template@^7.1.0", "@babel/template@^7.1.2":
version "7.1.2"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644"
...
...
@@ -1067,6 +1074,19 @@
resolved "http://r.cnpmjs.org/@types/yargs/download/@types/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916"
integrity sha1-Rd0dBjjoyPFT6H0paQdlkpaHORY=
"@videojs/http-streaming@1.10.6":
version "1.10.6"
resolved "http://npm.yohops.com/@videojs%2fhttp-streaming/-/http-streaming-1.10.6.tgz#a9119b1828b354c5cc17b42ea051cc7bcce2dca0"
integrity sha1-qRGbGCizVMXMF7QuoFHMe8zi3KA=
dependencies:
aes-decrypter "3.0.0"
global "^4.3.0"
m3u8-parser "4.4.0"
mpd-parser "0.8.1"
mux.js "5.2.1"
url-toolkit "^2.1.3"
video.js "^6.8.0 || ^7.0.0"
"@vue/component-compiler-utils@^3.0.0":
version "3.0.0"
resolved "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.0.0.tgz#d16fa26b836c06df5baaeb45f3d80afc47e35634"
...
...
@@ -1299,6 +1319,15 @@ address@>=0.0.1:
resolved "http://npm.yohops.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
integrity sha1-tfUGMfjWzsi9IMljljr7VeBsvOk=
aes-decrypter@3.0.0:
version "3.0.0"
resolved "http://npm.yohops.com/aes-decrypter/-/aes-decrypter-3.0.0.tgz#7848a1c145b9fdbf57ae3e2b5b1bc7cf0644a8fb"
integrity sha1-eEihwUW5/b9Xrj4rWxvHzwZEqPs=
dependencies:
commander "^2.9.0"
global "^4.3.2"
pkcs7 "^1.0.2"
agentkeepalive@3.3.0:
version "3.3.0"
resolved "http://npm.yohops.com/agentkeepalive/-/agentkeepalive-3.3.0.tgz#6d5de5829afd3be2712201a39275fd11c651857c"
...
...
@@ -2639,6 +2668,11 @@ commander@^2.18.0, commander@^2.19.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
integrity sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=
commander@^2.9.0:
version "2.20.3"
resolved "http://npm.yohops.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=
commander@~2.14.1:
version "2.14.1"
resolved "http://npm.yohops.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
...
...
@@ -3354,6 +3388,11 @@ dom-serializer@0:
domelementtype "~1.1.1"
entities "~1.1.1"
dom-walk@^0.1.0:
version "0.1.1"
resolved "http://npm.yohops.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
dom7@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/dom7/-/dom7-2.1.2.tgz#a914070c0abe8465384997a9c4f34475f67f75bd"
...
...
@@ -3573,6 +3612,22 @@ es-abstract@^1.12.0:
string.prototype.trimleft "^2.0.0"
string.prototype.trimright "^2.0.0"
es-abstract@^1.13.0:
version "1.15.0"
resolved "http://npm.yohops.com/es-abstract/-/es-abstract-1.15.0.tgz#8884928ec7e40a79e3c9bc812d37d10c8b24cc57"
integrity sha1-iISSjsfkCnnjybyBLTfRDIskzFc=
dependencies:
es-to-primitive "^1.2.0"
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.0"
is-callable "^1.1.4"
is-regex "^1.0.4"
object-inspect "^1.6.0"
object-keys "^1.1.1"
string.prototype.trimleft "^2.1.0"
string.prototype.trimright "^2.1.0"
es-abstract@^1.5.1:
version "1.12.0"
resolved "http://npm.yohops.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
...
...
@@ -4196,6 +4251,13 @@ follow-redirects@^1.0.0, follow-redirects@^1.3.0:
dependencies:
debug "=3.1.0"
for-each@^0.3.3:
version "0.3.3"
resolved "http://npm.yohops.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
integrity sha1-abRH6IoKXTLD5whPPxcQA0shN24=
dependencies:
is-callable "^1.1.3"
for-in@^0.1.3:
version "0.1.8"
resolved "http://npm.yohops.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
...
...
@@ -4486,6 +4548,22 @@ global-prefix@^1.0.1:
is-windows "^1.0.1"
which "^1.2.14"
global@4.3.2, global@~4.3.0:
version "4.3.2"
resolved "http://npm.yohops.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
dependencies:
min-document "^2.19.0"
process "~0.5.1"
global@^4.3.0, global@^4.3.1, global@^4.3.2:
version "4.4.0"
resolved "http://npm.yohops.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
integrity sha1-PnsQUXkAajI+1xqvyj6cV6XMZAY=
dependencies:
min-document "^2.19.0"
process "^0.11.10"
globals@^10.0.0:
version "10.4.0"
resolved "http://r.cnpmjs.org/globals/download/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7"
...
...
@@ -5068,6 +5146,11 @@ indexof@0.0.1:
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
individual@^2.0.0:
version "2.0.0"
resolved "http://npm.yohops.com/individual/-/individual-2.0.0.tgz#833b097dad23294e76117a98fb38e0d9ad61bb97"
integrity sha1-gzsJfa0jKU52EXqY+zjg2a1hu5c=
inflight@^1.0.4:
version "1.0.6"
resolved "http://npm.yohops.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
...
...
@@ -5350,6 +5433,11 @@ is-fullwidth-code-point@^2.0.0:
resolved "http://npm.yohops.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
is-function@^1.0.1:
version "1.0.1"
resolved "http://npm.yohops.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
is-generator-fn@^2.0.0:
version "2.1.0"
resolved "http://r.cnpmjs.org/is-generator-fn/download/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
...
...
@@ -6119,6 +6207,11 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
keycode@^2.2.0:
version "2.2.0"
resolved "http://npm.yohops.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=
keygrip@~1.0.3:
version "1.0.3"
resolved "http://npm.yohops.com/keygrip/-/keygrip-1.0.3.tgz#399d709f0aed2bab0a059e0cdd3a5023a053e1dc"
...
...
@@ -6502,6 +6595,13 @@ lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3:
pseudomap "^1.0.2"
yallist "^2.1.2"
m3u8-parser@4.4.0:
version "4.4.0"
resolved "http://npm.yohops.com/m3u8-parser/-/m3u8-parser-4.4.0.tgz#adf606c0af6d97f6750095a42006c2ae03dde177"
integrity sha1-rfYGwK9tl/Z1AJWkIAbCrgPd4Xc=
dependencies:
global "^4.3.2"
make-dir@^1.0.0:
version "1.2.0"
resolved "http://npm.yohops.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b"
...
...
@@ -6770,6 +6870,13 @@ mimic-fn@^1.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=
min-document@^2.19.0:
version "2.19.0"
resolved "http://npm.yohops.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
dependencies:
dom-walk "^0.1.0"
mini-css-extract-plugin@^0.5.0:
version "0.5.0"
resolved "http://npm.yohops.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
...
...
@@ -6916,6 +7023,14 @@ move-concurrently@^1.0.1:
rimraf "^2.5.4"
run-queue "^1.0.3"
mpd-parser@0.8.1:
version "0.8.1"
resolved "http://npm.yohops.com/mpd-parser/-/mpd-parser-0.8.1.tgz#db299dbec337999fbbbace989d227c7b03dc8ea7"
integrity sha1-2ymdvsM3mZ+7us6YnSJ8ewPcjqc=
dependencies:
global "^4.3.2"
url-toolkit "^2.1.1"
ms@0.7.1:
version "0.7.1"
resolved "http://npm.yohops.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
...
...
@@ -6959,6 +7074,11 @@ mute-stream@0.0.7:
resolved "http://npm.yohops.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
mux.js@5.2.1:
version "5.2.1"
resolved "http://npm.yohops.com/mux.js/-/mux.js-5.2.1.tgz#6698761fc88da5acecea0758ac25f11d3a08bee8"
integrity sha1-Zph2H8iNpazs6gdYrCXxHToIvug=
mysql@^2.16.0:
version "2.16.0"
resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.16.0.tgz#b23b22ab5de44fc2d5d32bd4f5af6653fc45e2ba"
...
...
@@ -7658,6 +7778,14 @@ parse-filepath@^1.0.1:
map-cache "^0.2.0"
path-root "^0.1.1"
parse-headers@^2.0.0:
version "2.0.2"
resolved "http://npm.yohops.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34"
integrity sha1-lUXopMGuXq6n0kmSvKiQKB7SbjQ=
dependencies:
for-each "^0.3.3"
string.prototype.trim "^1.1.2"
parse-json@^2.2.0:
version "2.2.0"
resolved "http://npm.yohops.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
...
...
@@ -7893,6 +8021,11 @@ pirates@^4.0.1:
dependencies:
node-modules-regexp "^1.0.0"
pkcs7@^1.0.2:
version "1.0.2"
resolved "http://npm.yohops.com/pkcs7/-/pkcs7-1.0.2.tgz#b6dba527528c2942bfc122ce2dafcdb5e59074e7"
integrity sha1-ttulJ1KMKUK/wSLOLa/NteWQdOc=
pkg-dir@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
...
...
@@ -8197,6 +8330,11 @@ process@^0.11.10:
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
process@~0.5.1:
version "0.5.2"
resolved "http://npm.yohops.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
progress@^2.0.0:
version "2.0.3"
resolved "http://npm.yohops.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
...
...
@@ -8583,6 +8721,11 @@ regenerator-runtime@^0.12.0:
resolved "http://npm.yohops.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
integrity sha1-+hpxVEdkwDb4xJsToIsllMn4oN4=
regenerator-runtime@^0.13.2:
version "0.13.3"
resolved "http://npm.yohops.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
integrity sha1-fPanfY9cb2Drc8X8GVWyzrAea/U=
regenerator-transform@^0.13.3:
version "0.13.3"
resolved "http://npm.yohops.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb"
...
...
@@ -8987,6 +9130,13 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
rust-result@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/rust-result/-/rust-result-1.0.0.tgz#34c75b2e6dc39fe5875e5bdec85b5e0f91536f72"
integrity sha1-NMdbLm3Dn+WHXlveyFteD5FTb3I=
dependencies:
individual "^2.0.0"
rxjs@^6.1.0:
version "6.3.3"
resolved "http://npm.yohops.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55"
...
...
@@ -9004,6 +9154,13 @@ safe-buffer@5.1.2, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
safe-json-parse@4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz#7c0f578cfccd12d33a71c0e05413e2eca171eaac"
integrity sha1-fA9XjPzNEtM6ccDgVBPi7KFx6qw=
dependencies:
rust-result "^1.0.0"
safe-regex@^1.1.0:
version "1.1.0"
resolved "http://npm.yohops.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
...
...
@@ -9676,7 +9833,16 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
string.prototype.trimleft@^2.0.0:
string.prototype.trim@^1.1.2:
version "1.2.0"
resolved "http://npm.yohops.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d"
integrity sha1-dacpsQz8G+Q5VD2uRCEpRZzmHj0=
dependencies:
define-properties "^1.1.3"
es-abstract "^1.13.0"
function-bind "^1.1.1"
string.prototype.trimleft@^2.0.0, string.prototype.trimleft@^2.1.0:
version "2.1.0"
resolved "http://npm.yohops.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634"
integrity sha1-bMR/DX641isPNwFhFxWjlUWR1jQ=
...
...
@@ -9684,7 +9850,7 @@ string.prototype.trimleft@^2.0.0:
define-properties "^1.1.3"
function-bind "^1.1.1"
string.prototype.trimright@^2.0.0:
string.prototype.trimright@^2.0.0
, string.prototype.trimright@^2.1.0
:
version "2.1.0"
resolved "http://npm.yohops.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58"
integrity sha1-Zp0WS+nfm291WfqOiZRbFopabFg=
...
...
@@ -10530,6 +10696,11 @@ url-parse@^1.4.3:
querystringify "^2.0.0"
requires-port "^1.0.0"
url-toolkit@^2.1.1, url-toolkit@^2.1.3:
version "2.1.6"
resolved "http://npm.yohops.com/url-toolkit/-/url-toolkit-2.1.6.tgz#6d03246499e519aad224c44044a4ae20544154f2"
integrity sha1-bQMkZJnlGarSJMRARKSuIFRBVPI=
url@^0.11.0:
version "0.11.0"
resolved "http://npm.yohops.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
...
...
@@ -10684,6 +10855,32 @@ vfile@^2.0.0:
unist-util-stringify-position "^1.0.0"
vfile-message "^1.0.0"
"video.js@^6.8.0 || ^7.0.0", video.js@^7.5.5:
version "7.6.5"
resolved "http://npm.yohops.com/video.js/-/video.js-7.6.5.tgz#af66a71bc05fd79c581c1673ac5a78a6b31bc831"
integrity sha1-r2anG8Bf15xYHBZzrFp4prMbyDE=
dependencies:
"@babel/runtime" "^7.4.5"
"@videojs/http-streaming" "1.10.6"
global "4.3.2"
keycode "^2.2.0"
safe-json-parse "4.0.0"
videojs-font "3.2.0"
videojs-vtt.js "^0.14.1"
xhr "2.4.0"
videojs-font@3.2.0:
version "3.2.0"
resolved "http://npm.yohops.com/videojs-font/-/videojs-font-3.2.0.tgz#212c9d3f4e4ec3fa7345167d64316add35e92232"
integrity sha1-ISydP05Ow/pzRRZ9ZDFq3TXpIjI=
videojs-vtt.js@^0.14.1:
version "0.14.1"
resolved "http://npm.yohops.com/videojs-vtt.js/-/videojs-vtt.js-0.14.1.tgz#da583eb1fc9c81c826a9432b706040e8dea49911"
integrity sha1-2lg+sfycgcgmqUMrcGBA6N6kmRE=
dependencies:
global "^4.3.1"
vm-browserify@0.0.4:
version "0.0.4"
resolved "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
...
...
@@ -11215,6 +11412,16 @@ xdg-basedir@^3.0.0:
resolved "http://npm.yohops.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
xhr@2.4.0:
version "2.4.0"
resolved "http://npm.yohops.com/xhr/-/xhr-2.4.0.tgz#e16e66a45f869861eeefab416d5eff722dc40993"
integrity sha1-4W5mpF+GmGHu76tBbV7/ci3ECZM=
dependencies:
global "~4.3.0"
is-function "^1.0.1"
parse-headers "^2.0.0"
xtend "^4.0.0"
xml-name-validator@^3.0.0:
version "3.0.0"
resolved "http://r.cnpmjs.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
...
...
Please
register
or
login
to post a comment