Authored by 陈峰

Merge branch 'feature/upload' into 'master'

Feature/upload



See merge request !41
<template>
<div v-if="show">
<div class="upload-image-item" v-if="uploadList[0]">
<template v-if="uploadList[0].status === 'finished' || uploadList[0].url">
<img :src="uploadList[0].url">
<div class="upload-image-item-cover">
<Icon type="ios-eye-outline" size="30" @click.native="handleView(uploadList[0].url)"></Icon>
<Icon type="ios-trash-outline" size="30" @click.native="handleRemove(uploadList[0])"></Icon>
</div>
</template>
<template v-else>
<Progress v-if="uploadList[0].showProgress" :percent="uploadList[0].percentage" hide-info></Progress>
</template>
</div>
<image-purview
v-if="uploadList[0]"
:status="uploadList[0].status"
:url="uploadList[0].url"
:progress="uploadList[0].showProgress"
:percentage="uploadList[0].percentage"
:remove="true"
@remove-image="handleRemove"></image-purview>
<Upload v-show="!uploadList[0]"
ref="upload"
:show-upload-list="false"
:data="{bucket: bucket}"
:on-success="handleSuccess"
:on-error="handleError"
:default-file-list="defaultList"
:format="['jpg','jpeg','png']"
:max-size="2048"
:on-format-error="handleFormatError"
:on-exceeded-size="handleMaxSize"
type="drag"
action="/Api/upload/image"
style="display: inline-block;width:120px;">
<div style="width: 120px;height:120px;line-height: 140px;">
<Icon type="plus-round" size="50"></Icon>
</div>
</Upload>
<div class="upload-box" v-show="!uploadList[0]">
<Upload ref="upload"
:show-upload-list="false"
:data="{bucket: bucket}"
:on-success="handleSuccess"
:on-error="handleError"
:default-file-list="defaultList"
:format="['jpg','jpeg','png']"
:max-size="2048"
:on-format-error="handleFormatError"
:on-exceeded-size="handleMaxSize"
action="/Api/upload/image">
<Icon type="ios-cloud-upload-outline" title="上传图片"></Icon>
</Upload>
<Icon type="ios-cloud-outline" v-if="skn" title="调用图片服务" @click.native="browseOnline"></Icon>
</div>
<Modal title="查看图片" v-model="visible">
<img :src="imgUrl" v-if="visible" style="width: 100%">
</Modal>
<modal-skn-image v-model="sknImageModel" :skn="skn" @selected="selected"></modal-skn-image>
</div>
</template>
<script>
... ... @@ -49,6 +41,9 @@ export default {
defaultFile: {
type: String
},
skn: {
type: String,
},
bucket: {
type: String,
default() {
... ... @@ -63,6 +58,7 @@ export default {
imgUrl: '',
visible: false,
show: true,
sknImageModel: false,
uploadList: [],
defaultList: _this.defaultFile ? [{url: _this.defaultFile}] : []
};
... ... @@ -72,7 +68,8 @@ export default {
this.imgUrl = url;
this.visible = true;
},
handleRemove(file) {
handleRemove() {
let file = this.uploadList[0];
let files = this.$refs.upload.fileList;
this.$refs.upload.fileList.splice(files.indexOf(file), 1);
... ... @@ -102,7 +99,14 @@ export default {
title: '超出文件大小限制',
desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
});
}
},
browseOnline() {
this.sknImageModel = true;
},
selected(url) {
this.uploadList = this.defaultList = [{url}];
this.$emit('success', this.id, {url});
},
},
mounted() {
... ... @@ -117,45 +121,41 @@ export default {
}
};
</script>
<style>
.upload-image-item {
display: inline-block;
width: 120px;
height: 120px;
text-align: center;
line-height: 120px;
border: 2px solid transparent;
border-radius: 4px;
overflow: hidden;
<style lang="scss">
.upload-box {
width: 100px;
height: 100px;
background: #fff;
border: 1px dashed #dddee1;
border-radius: 4px;
text-align: center;
cursor: pointer;
position: relative;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
margin-right: 4px;
}
overflow: hidden;
transition: border-color 0.2s ease;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: center;
.upload-image-item img {
width: 120px;
height: 120px;
}
&:hover {
border-color: #2d8cf0;
}
.upload-image-item-cover {
display: none;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.6);
}
.ivu-upload {
height: 30px;
}
.upload-image-item:hover .upload-image-item-cover {
display: block;
}
.ivu-icon {
font-size: 30px;
margin: 0 2px;
color: #000;
transition: color 0.2s ease;
.upload-image-item-cover i {
color: #fff;
font-size: 20px;
cursor: pointer;
margin: 0 2px;
&:hover {
color: #2d8cf0;
}
}
}
</style>
... ...
<template>
<div class="good-images">
<Row v-for="(good, goodIndex) in productGoods"
:key="goodIndex">
<Col span="4">
<div class="color-item-title">
<span>{{good.goodsName}}({{good.factoryGoodsName}})</span>
<div class="image-goods-main">
<div class="skc-item"
v-for="(good, goodIndex) in productGoods"
:key="goodIndex">
<div class="color-item-title">
<span>{{good.goodsName}}({{good.factoryGoodsName}})</span>
</div>
<div class="upload-item" v-for="(image, imageIndex) in good.goodsImage" :key="imageIndex">
<div class="upload-item-img">
<img v-if="imageIndex === 0 && image.imageUrl" :src="image.imageUrl"
alt=""
width="120px"
height="122px">
<drag-file-upload v-if="imageIndex > 0"
:default-file="image.imageUrl"
:id="{goodIndex, imageIndex}"
:skn="good.productSkn"
@success="uploadImageSuccess"
@remove="uploadImageRemove">
</drag-file-upload>
</div>
</Col>
<Col span="4" v-for="(image, imageIndex) in good.goodsImage" :key="imageIndex">
<div class="upload-item">
<div class="upload-item-img">
<img v-if="imageIndex === 0 && image.imageUrl" :src="image.imageUrl"
alt=""
width="120px"
height="122px">
<drag-file-upload v-if="imageIndex > 0"
:default-file="image.imageUrl"
:id="{goodIndex, imageIndex}"
@success="uploadImageSuccess"
@remove="uploadImageRemove">
</drag-file-upload>
</div>
<div class="upload-item-title">
{{imagesTitles[imageIndex]}}
</div>
<div class="upload-item-title">
{{imagesTitles[imageIndex]}}
</div>
</Col>
</Row>
</div>
</div>
</div>
</template>
... ... @@ -69,34 +66,49 @@ export default {
};
</script>
<style>
<style lang="scss">
.image-goods-main {
.skc-item {
overflow: auto;
margin-top: 20px;
}
.upload-item {
display: inline-block;
height: 180px;
width: 130px;
text-align: center;
margin: 10px 0;
}
.color-item-title {
font-size: 14px;
font-weight: bold;
line-height: 30px;
}
.color-item-title {
text-align: center;
margin: 50px 0;
}
.upload-item {
width: 120px;
text-align: center;
float: left;
margin-right: 30px;
.upload-item {
display: inline-block;
height: 200px;
width: 130px;
text-align: center;
margin: 30px 0;
}
.upload-item-img {
border-radius: 4px;
overflow: hidden;
height: 120px;
width: 120px;
box-sizing: border-box;
img {
width: 100%;
height: 100%;
}
}
.upload-item-title {
font-size: 13px;
line-height: 30px;
}
.upload-item-img {
display: inline-block;
height: 126px;
width: 124px;
border: 2px solid #e8e8e8;
box-sizing: border-box;
.upload-box,
.image-purview {
height: 120px;
width: 120px;
}
}
}
</style>
... ...
<template>
<div class="image-purview">
<template v-if="status === 'finished' || url">
<img :src="url">
<div class="image-purview-cover">
<Icon type="ios-eye-outline" size="30" @click.native="purviewImage"></Icon>
<Icon type="ios-trash-outline" v-if="remove" size="30" @click.native="removeImage"></Icon>
</div>
</template>
<template v-else>
<Progress v-if="progress" :percent="percentage" hide-info></Progress>
</template>
<modal-purview v-model="showModal" :url="url"></modal-purview>
</div>
</template>
<script>
export default {
name: 'image-purview',
props: {
status: {
type: String,
default: 'finished'
},
url: {
type: String,
},
progress: {
type: Boolean,
default: false,
},
percentage: {
type: Number,
},
remove: {
type: Boolean,
default: false
}
},
data() {
return {
showModal: false
};
},
methods: {
purviewImage() {
this.showModal = true;
this.$emit('purview', this.url);
},
removeImage() {
this.$emit('remove-image', this.url);
}
},
};
</script>
<style>
.image-purview {
margin: 0 auto;
width: 100px;
height: 100px;
text-align: center;
border-radius: 4px;
overflow: hidden;
background: #fff;
position: relative;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
border: 1px solid #e8e8e8;
}
.image-purview img {
width: 100px;
height: 100px;
}
.image-purview-cover {
display: none;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.6);
align-items: center;
justify-content: center;
}
.image-purview:hover .image-purview-cover {
display: flex;
}
.image-purview-cover i {
color: #fff;
font-size: 20px;
cursor: pointer;
margin: 0 2px;
}
</style>
... ...
import ImageGoodsMain from './image-goods-main';
import ImagePurview from './image-purview';
export default {
ImageGoodsMain
ImageGoodsMain,
ImagePurview
};
... ...
... ... @@ -3,11 +3,15 @@ import ModalStockOut from './modal-stock-out';
import ModalDeliver from './modal-deliver';
import ModalExample from './modal-example';
import ModalImport from './modal-import';
import ModalSknImage from './modal-skn-image';
import ModalPurview from './modal-purview';
export default {
ModalSizeEdit,
ModalStockOut,
ModalDeliver,
ModalExample,
ModalImport
ModalImport,
ModalSknImage,
ModalPurview,
};
... ...
<template>
<Modal title="查看图片" :value="model" @input="input">
<img :src="url" v-if="model" style="width: 100%">
<div slot="footer"></div>
</Modal>
</template>
<script>
export default {
name: 'modal-purview',
props: ['value', 'url'],
data() {
return {
model: this.value
};
},
methods: {
input(val) {
this.model = val;
this.$emit('input', val);
}
},
watch: {
value(val) {
this.model = val;
}
}
};
</script>
... ...
<template>
<Modal
title="调用图片服务"
:width="600"
v-model="model"
@on-ok="modalOK"
@on-cancel="modalCancel"
ok-text="确定">
<div class="image-skn-image">
<div
class="image"
v-for="image in imageList"
:key="image.id"
:class="{'selected': image.selected}"
@click="selected(image)">
<img :src="image.fileName" alt="" />
</div>
<div class="no-data" v-if="!imageList.length">
未获取到图片
</div>
</div>
</Modal>
</template>
<script>
import _ from 'lodash';
import ProductService from 'services/product/product-service';
export default {
name: 'modal-skn-image',
props: ['value', 'skn'],
data() {
return {
model: this.value,
imageList: [],
};
},
created() {
this.productService = new ProductService();
},
methods: {
modalOK() {
let image = _.find(this.imageList, img => img.selected);
if (!image) {
this.$Message.error('请选择图片');
return;
}
this.$emit('selected', image.fileName);
this.$emit('input', this.model);
},
modalCancel() {
this.$emit('input', this.model);
},
selected(img) {
let current = img.selected;
_.each(this.imageList, image => {
image.selected = false;
});
img.selected = !current;
},
},
watch: {
value(val) {
this.model = this.value;
if (val && this.skn) {
this.productService.getProductPhotoList(this.skn).then(data => {
if (data.code === 200) {
let imgs = _.get(data, 'data.list', []);
_.each(imgs, img => {
img.selected = false;
});
this.imageList = imgs;
}
});
}
}
},
};
</script>
<style lang="scss">
.image-skn-image {
overflow: auto;
height: 200px;
.image {
float: left;
margin: 5px;
overflow: hidden;
width: 100px;
height: 100px;
border-radius: 4px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
border: 1px solid #e8e8e8;
background: #fff;
cursor: pointer;
&.selected {
border: 1px solid #2d8cf0;
box-shadow: 0 0 5px #2d8cf0;
}
img {
width: 100%;
height: 100%;
}
}
.no-data {
font-size: 14px;
height: 200px;
line-height: 200px;
text-align: center;
color: #bbbec4;
}
}
</style>
... ...
... ... @@ -30,6 +30,8 @@
<style lang="scss" scoped>
.example {
padding: 10px;
.title {
color: #c90;
width: 155px;
... ...
<template>
<Table ref="sellerGoods" class="table-good-size" :row-class-name="rowClassName" :show-header="false" :data="table.data" :columns="table.columns" stripe border></Table>
<Table ref="sellerGoods"
class="table-good-size"
:data="table.data"
:columns="table.columns"
stripe
border></Table>
</template>
<script>
import _ from 'lodash';
export default {
name: 'table-good-size',
props: {
... ... @@ -21,11 +24,7 @@ export default {
columns: [
{
title: '色系名称',
key: 'goodsName',
render: (h, params) => {
if (!params.index) {
return <span>色系名称</span>;
}
if (this.isExist(params.index)) {
return h('div', {}, [
h('p', {}, this.table.data[params.index].goodsName.name),
... ... @@ -42,15 +41,14 @@ export default {
]);
}
return null;
},
renderHeader(h) { //eslint-disable-line
return <span>色系名称</span>;
}
},
{
title: '颜色展示名称',
key: 'factoryGoodsName',
render: (h, params) => {
if (!params.index) {
return <span>颜色展示名称</span>;
}
if (this.isExist(params.index)) {
return h('Input', {
props: {
... ... @@ -69,44 +67,45 @@ export default {
});
}
return null;
},
renderHeader(h) { //eslint-disable-line
return <span>颜色展示名称</span>;
}
},
{
title: '商品封面图片',
key: 'goodsColorImage',
width: 200,
render: (h, params) => {
if (!params.index) {
return (
<div>
<span class="table-header-req">{params.column.title}<example-pop></example-pop></span>
</div>
);
}
let row = params.row;
return (
<div class={{'table-upload-item': true}}>
<drag-file-upload
id={{index: params.index}}
default-file={params.row.goodsColorImage.value}
default-file={row.goodsColorImage.value}
skn={row.productSkn}
onSuccess={this.uploadSuccess}
onError={this.uploadError}></drag-file-upload>
{(params.row.goodsColorImage.showValidate && params.row.goodsColorImage.validate) ? (
{(row.goodsColorImage.showValidate && row.goodsColorImage.validate) ? (
<div class={{'table-upload-item-tip': true}}>
必须上传图片
</div>
) : null}
</div>
);
},
renderHeader(h, params) { //eslint-disable-line
return (
<div>
<span class="table-header-req">{params.column.title}<example-pop></example-pop></span>
</div>
);
}
},
{
title: '款型编码',
key: 'factoryCode',
render: (h, params) => {
if (!params.index) {
return <span>款型编码</span>;
}
if (this.isExist(params.index)) {
return (
<i-input
... ... @@ -117,15 +116,15 @@ export default {
);
}
return null;
},
renderHeader(h) { //eslint-disable-line
return <span>款型编码</span>;
}
},
{
title: '尺码',
key: 'sizeId',
render: (h, params) => {
if (!params.index) {
return <span>尺码</span>;
}
return (
<div class={{'size-id': true}}>
{params.row.sizeId.map(size => {
... ... @@ -133,15 +132,15 @@ export default {
})}
</div>
);
},
renderHeader(h) { //eslint-disable-line
return <span>尺码</span>;
}
},
{
title: '商品条码',
key: 'sizeCode',
render: (h, params) => {
if (!params.index) {
return <span class="table-header-req">{params.column.title}</span>;
}
return (
<div class={{'size-code': true}}>
{params.row.sizeCode.map((size, i) => {
... ... @@ -168,15 +167,15 @@ export default {
})}
</div>
);
},
renderHeader(h, params) { //eslint-disable-line
return <span class="table-header-req">{params.column.title}</span>;
}
},
{
title: 'SKU',
key: 'productSku',
render: (h, params) => {
if (!params.index) {
return <span>SKU</span>;
}
return (
<div class={{'prod-sku': true}}>
{params.row.sizeId.map(size => {
... ... @@ -188,14 +187,14 @@ export default {
})}
</div>
);
},
renderHeader(h) { //eslint-disable-line
return <span>SKU</span>;
}
},
{
title: '库存',
render: (h, params) => {
if (!params.index) {
return <span>库存</span>;
}
return (
<div class={{'prod-sku': true}}>
{params.row.sizeId.map(size => {
... ... @@ -207,16 +206,15 @@ export default {
})}
</div>
);
},
renderHeader(h) { //eslint-disable-line
return <span>库存</span>;
}
},
{
title: '操作',
key: 'operator',
render: (h, params) => {
if (!params.index) {
return <span>操作</span>;
}
if (this.isExist(params.index) && this.table.data[params.index]) {
return (
<div class={{'size-operator': true}}>
... ... @@ -241,19 +239,17 @@ export default {
);
}
return null;
},
renderHeader(h) { //eslint-disable-line
return <span>操作</span>;
}
}
],
data: _.concat({}, this.value)
data: this.value
}
};
},
methods: {
rowClassName(row, index) {
if (index === 0) {
return 'table-header';
}
},
clickDefault(index) {
this.refreshTable();
let color = this.table.data[index];
... ... @@ -266,14 +262,14 @@ export default {
});
},
changeFactoryGoodsName(row, index) {
this.$emit('on-factory-name', index - 1, row.factoryGoodsName);
this.$emit('on-factory-name', index, row.factoryGoodsName);
},
uploadSuccess(attach, file) {
this.refreshTable();
this.table.data[attach.index].goodsColorImage.value = file.url;
this.onUploadGoodImage({
index: attach.index - 1
index: attach.index
}, file.url);
this.table.data[attach.index].goodsColorImage.validate = true;
... ... @@ -313,12 +309,12 @@ export default {
return false;
},
syncData() {
this.$emit('input', _.drop(this.$refs.sellerGoods.rebuildData, 1));
this.$emit('input', this.$refs.sellerGoods.rebuildData);
}
},
watch: {
value(newVal) {
this.table.data = _.concat({}, newVal);
this.table.data = newVal;
}
}
};
... ... @@ -399,14 +395,4 @@ export default {
padding: 10px;
}
.table-good-size {
td {
background-color: #f5f7f9;
}
.ivu-table-stripe .ivu-table-body tr:nth-child(2n) td,
.ivu-table-stripe .ivu-table-fixed-body tr:nth-child(2n) td {
background-color: #fff;
}
}
</style>
... ...
... ... @@ -19,95 +19,7 @@
</div>
</Col>
</Row>
<Row v-for="good,goodIndex in product.goods" :key="good">
<Col span="4">
<div class="color-item-title">
<span>{{good.goodsName}}({{good.factoryGoodsName}})</span>
</div>
</Col>
<Col span="4">
<div class="upload-item">
<div class="upload-item-img">
<img :src="good.goodsImage[0].imageUrl" alt="" width="120px" height="120px">
</div>
<div class="upload-item-title">
商品正面图*
</div>
</div>
</Col>
<Col span="4">
<div class="upload-item">
<div class="upload-item-img">
<drag-file-upload
:id="{goodIndex, imageIndex: 1}"
@success="uploadSuccess"
@remove="uploadRemove">
</drag-file-upload>
</div>
<div class="upload-item-title">
商品反面图
</div>
</div>
</Col>
<Col span="4">
<div class="upload-item">
<div class="upload-item-img">
<drag-file-upload
:id="{goodIndex, imageIndex: 2}"
@success="uploadSuccess"
@remove="uploadRemove">
</drag-file-upload>
</div>
<div class="upload-item-title">
模特图
</div>
</div>
</Col>
<Col span="4">
<div class="upload-item">
<div class="upload-item-img">
<drag-file-upload
:id="{goodIndex, imageIndex: 3}"
@success="uploadSuccess"
@remove="uploadRemove">
</drag-file-upload>
</div>
<div class="upload-item-title">
男生频道封面图
</div>
</div>
</Col>
<Col span="4">
<div class="upload-item">
<div class="upload-item-img">
<drag-file-upload
:id="{goodIndex, imageIndex: 4}"
@success="uploadSuccess"
@remove="uploadRemove">
</drag-file-upload>
</div>
<div class="upload-item-title">
女生频道封面图
</div>
</div>
</Col>
</Row>
<image-goods-main v-model="product.goods"></image-goods-main>
<Row>
<Col>
<div class="create-item-title">商品描述
... ... @@ -218,7 +130,6 @@
</template>
<script>
import ProductCreateService from 'services/product/product-create-service';
import {step3} from '../store';
... ... @@ -315,33 +226,3 @@ export default {
}
};
</script>
<style lang="scss" scoped>
.upload-item {
display: inline-block;
height: 220px;
width: 130px;
text-align: center;
margin: 10px 0;
}
.color-item-title {
text-align: center;
margin: 50px 0;
}
.upload-item-img {
display: inline-block;
height: 126px;
width: 124px;
border: 2px solid #e8e8e8;
box-sizing: border-box;
}
.upload-item-title {
display: inline-block;
margin-top: 15px;
}
</style>
... ...
... ... @@ -209,7 +209,8 @@ export default {
colorId: color.id,
sizeId: [],
sizeCode: [],
operator: []
operator: [],
productSkn: this.product.productSkn,
};
_.each(this.table.defaultSelectedSizes, size => this.addSizeItem(newGood, size));
... ... @@ -385,6 +386,8 @@ export default {
newGoods.sizeId = [];
newGoods.sizeCode = [];
newGoods.operator = [];
newGoods.productSkn = this.product.productSkn;
this.table.defaultSelectedSizes.forEach(size => {
newGoods.sizeId.push({
id: size.id,
... ...
... ... @@ -74,8 +74,10 @@ export default function() {
</div>
);
},
renderHeader() {
return '发货进度<br/> 已发数/需发总数 ';
renderHeader(h) { //eslint-disable-line
return (
<span>发货进度<br/> 已发数/需发总数</span>
);
}
},
{
... ... @@ -104,8 +106,10 @@ export default function() {
</div>
);
},
renderHeader() {
return '入库进度<br/> 已入库数/需发总数';
renderHeader(h) { //eslint-disable-line
return (
<span>入库进度<br/> 已入库数/需发总数</span>
);
}
},
... ...
... ... @@ -132,26 +132,14 @@
<style lang="scss">
.upload-item {
float: left;
}
.upload-img-tip {
float: left;
margin-top: 112px;
padding-left: 20px;
color: #c90;
line-height: 1;
font-size: 12px;
font-style: normal;
font-weight: 500;
display: block;
}
.upload-item-img {
display: inline-block;
height: 126px;
width: 124px;
border: 2px solid #e8e8e8;
box-sizing: border-box;
}
... ...
... ... @@ -18,7 +18,8 @@ const apiUrl = {
saveProdSizeInfo: '/platform/saveProdSizeInfo',
exportSellerProductList: '/platform/exportSellerProductList',
getSellerAllSortInfo: '/platform/getSellerAllSortInfo',
getProduct: '/platform/getProduct'
getProduct: '/platform/getProduct',
queryProductPhotoList: '/platform/queryProductPhotoList',
};
class ProductService extends Service {
... ... @@ -85,6 +86,12 @@ class ProductService extends Service {
}
});
}
getProductPhotoList(skn) {
return this.post(apiUrl.queryProductPhotoList, {
productSkn: skn
});
}
}
export default ProductService;
... ...
... ... @@ -56,7 +56,7 @@
"express": "^4.15.2",
"express-session": "^1.15.2",
"font-awesome": "^4.7.0",
"iview": "^2.0.0-rc.18",
"iview": "^2.0.0",
"lodash": "^4.17.4",
"moment": "^2.18.1",
"promise-polyfill": "^6.0.2",
... ...
... ... @@ -91,7 +91,8 @@ let domainApis = {
getRemoteImageUrlBySku: '/product/getRemoteImageUrlBySku',
importSeller: '/batch/importSeller',
downloadFile: '/exceltemplate/download/CreateProductForShops',
getSellType: '/SellerProductController/getSellType'
getSellType: '/SellerProductController/getSellType',
queryProductPhotoList: '/sellerProductPhoto/queryProductPhotoList',
},
shop: {
login: '/loginInter',
... ... @@ -102,7 +103,7 @@ let domainApis = {
// 域名列表
const domains = {
erp: 'http://192.168.103.82:9098',
platform: 'http://192.168.102.210:8088/platform',
platform: 'http://192.168.102.202:8088/platform',
shop: 'http://192.168.102.211:30016'
};
... ...
... ... @@ -1879,9 +1879,9 @@ deep-is@~0.1.3:
version "0.1.3"
resolved "http://npm.yoho.cn/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
deepmerge@^1.3.1:
version "1.4.4"
resolved "http://npm.yoho.cn/deepmerge/-/deepmerge-1.4.4.tgz#40ef393c91af09d16a887e755337844230ad14c9"
deepmerge@^1.5.0:
version "1.5.0"
resolved "http://npm.yoho.cn/deepmerge/-/deepmerge-1.5.0.tgz#00bc5b88fd23b8130f9f5049071c3420e07a5465"
defined@^1.0.0:
version "1.0.0"
... ... @@ -3544,13 +3544,13 @@ istanbul-lib-instrument@^1.4.2:
istanbul-lib-coverage "^1.1.1"
semver "^5.3.0"
iview@^2.0.0-rc.18:
version "2.0.0-rc.18"
resolved "https://registry.yarnpkg.com/iview/-/iview-2.0.0-rc.18.tgz#c00a11643622626feeb277e0de83b45077a8787c"
iview@^2.0.0:
version "2.0.0"
resolved "http://npm.yoho.cn/iview/-/iview-2.0.0.tgz#80191df3e1ff31e80f4c7aedb10b96d828db0906"
dependencies:
async-validator "^1.7.1"
core-js "^2.4.1"
deepmerge "^1.3.1"
deepmerge "^1.5.0"
popper.js "^0.6.4"
jackpot@>=0.0.6:
... ...