Authored by yyq

Merge branch 'develop' of git.yoho.cn:fe/xianyu-ufo-app-web into develop

... ... @@ -4,11 +4,11 @@ export default {
props: {
tag: {
type: String,
default: 'dev'
default: 'div'
}
},
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)]);
},
... ...
... ... @@ -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
}
}
};
... ...
... ... @@ -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);
}
}
}
};
... ...
<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)"
... ... @@ -78,7 +78,13 @@ export default {
...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
});
... ... @@ -112,7 +118,10 @@ export default {
}
this.$router.push({
name: 'addressEdit'
name: 'addressEdit',
query: {
fromPage: this.pageName
}
});
}
},
... ...
... ... @@ -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 = {};
}
... ...
... ... @@ -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);
}
}
};
... ...
... ... @@ -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,
... ...
... ... @@ -38,7 +38,6 @@ export default {
...mapState(['newsList','newsDeatilList']),
},
activated() {
console.log('111');
let params = {
type: this.type,
isPage: true
... ...
... ... @@ -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;
}
... ...
... ... @@ -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>
... ... @@ -59,22 +60,26 @@ 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 !== 'addressManager') {
if (to.name !== 'address') {
this[Types.CLEAR_BUY_STATUS]();
}
next();
... ... @@ -84,6 +89,11 @@ export default {
...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', '')
};
}
... ... @@ -95,6 +105,14 @@ 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, Types.CLEAR_BUY_STATUS]),
... ... @@ -161,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', '')
});
... ...
... ... @@ -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],
... ...
... ... @@ -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
}
});
}
}
}
};
... ...
... ... @@ -6,24 +6,46 @@
</p>
<p class="price-item">
<span>当前最高求购价:</span>
<span>¥{{ goodsInfo.goodPrice }}</span>
<span>¥{{ goodsInfo.bidHighestPrice }}</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
... ...
... ... @@ -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;
}
... ...
<template>
<layout-app>
<layout-app :title="'\u200E'">
<div class="order-detail-wrapper">
<div class="content">
<!-- 状态信息 -->
... ... @@ -36,7 +36,10 @@
<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 +47,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>
... ... @@ -105,7 +117,11 @@
</div>
<div ref="videoWrapper">
<VideoPlayer ref="videoPlayer" class="play-video" :source="orderDetail.appraiseVideoUrl"></VideoPlayer>
<VideoPlayer
ref="videoPlayer"
class="play-video"
:source="orderDetail.appraiseVideoUrl"
></VideoPlayer>
</div>
</div>
</layout-app>
... ...
/* 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,
... ...
<template>
<layout-app>
<layout-app :title="'\u200E'">
<div class="order-detail-wrapper">
<div class="content">
<!-- 状态信息 -->
... ...
... ... @@ -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',
'confirmChangePrice',
]),
...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',
}),
];
... ...
... ... @@ -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>
... ...
... ... @@ -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">
¥
... ...
<template>
<LayoutApp :show-back="true" title="确认出售">
<LayoutApp :show-back="true" title="出售">
<div class="body">
<ProductInfo :data="productDetail" class="product-info"></ProductInfo>
<InputPrice @input="changePrice" class="input-price"
... ... @@ -69,7 +69,7 @@ export default {
});
},
beforeRouteLeave(to, from, next) {
if (to.name !== 'addressManager') {
if (to.name !== 'address') {
this[Types.CLEAR_SELL_STATUS]();
}
next();
... ... @@ -80,6 +80,7 @@ export default {
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', ''),
... ... @@ -87,6 +88,14 @@ export default {
}
})
},
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]),
... ... @@ -116,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) {
... ... @@ -129,7 +154,7 @@ export default {
}
const orderResult = await this.submitOrder({
address_id: this.address.address_id,
address_id: this.address?.address_id,
num: this.num,
price: this.price,
storage_id: this.storageId,
... ...
... ... @@ -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'
);
},
... ...
... ... @@ -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;
}
}
... ...
... ... @@ -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});
}
}
... ...
... ... @@ -31,7 +31,7 @@ export default function() {
return {
namespaced: true,
state: {
address: {},
address: null,
fee: {
income: '',
bankTransferFee: '',
... ... @@ -172,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);
}
}
},
... ...
... ... @@ -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 changePrice(_, { orderCode, price }) {
async confirmChangePrice({ 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;
},
},
... ...
{
"name": "xianyu-ufo-app-web",
"version": "0.0.2-beta-20",
"version": "0.0.2-beta-21",
"private": true,
"description": "Xianyu Project With Express",
"repository": {
... ...
... ... @@ -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"
... ...