Authored by htoooth

fix

<template>
<div>
<div class="upload-image-item" v-if="uploadList[0]">
<template v-if="uploadList[0].status === 'finished'">
<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>
... ... @@ -43,13 +43,22 @@ const _ = require('lodash');
export default {
name: 'DragFileUpload',
props: ['id'],
props: {
'id': {
type: Object
},
'defaultFile': {
type: String
}
},
data() {
let _this = this;
return {
imgUrl: '',
visible: false,
uploadList: [],
defaultList: []
defaultList: _this.defaultFile ? [{url: _this.defaultFile}] : []
};
},
methods: {
... ... @@ -89,7 +98,7 @@ export default {
},
mounted() {
this.uploadList = this.$refs.upload.fileList;
}
},
};
</script>
<style>
... ...
... ... @@ -3,8 +3,9 @@ import home from './home';
import product from './product';
import shop from './shop';
import repository from './repository';
import statistics from './statistics';
let routers = [product, home, shop, repository];
let routers = [product, home, shop, repository, statistics];
let childrenRoutes = [].concat(...routers);
... ...
... ... @@ -205,7 +205,7 @@
<div class="upload-item">
<div class="upload-item-img">
<drag-file-upload
<drag-file-upload :default-file="good.goodsImage[1].imageUrl"
:id="{goodIndex, imageIndex: 1}"
@on-success="uploadImageSuccess"
@on-remove="uploadImageRemove">
... ...
... ... @@ -49,8 +49,7 @@
},
pager: {
total: 0,
current: 1,
size: 10
current: 1
}
}
},
... ...
... ... @@ -2,3 +2,13 @@
* 可调拨库存
* Created by TaoHuang on 2017/5/4.
*/
const page = r => require.ensure([], () => r(require('./jit')), 'repository.jit');
export default {
path: '/jit.html',
name: 'jit',
component: page,
meta: {
pageName: '在售商品'
}
};
\ No newline at end of file
... ...
<template>
<LayoutBody>
<LayoutFilter>
<FilterItem :label="filters.sknCode.label">
<Input v-model.trim="filters.sknCode.model"
:placeholder="filters.sknCode.holder"></Input>
</FilterItem>
<FilterItem :label="filters.prodCode.label">
<Input v-model.trim="filters.prodCode.model"
:placeholder="filters.prodCode.holder"></Input>
</FilterItem>
<FilterItem :label="filters.prodCode.label">
<Input v-model.trim="filters.prodCode.model"
:placeholder="filters.prodCode.holder"></Input>
</FilterItem>
<FilterItem :label="filters.prodName.label">
<Input v-model.trim="filters.prodName.model"
:placeholder="filters.prodName.holder"></Input>
</FilterItem>
<FilterItem :label="filters.prodBarCode.label">
<Input v-model.trim="filters.prodBarCode.model"
:placeholder="filters.prodBarCode.holder"></Input>
</FilterItem>
<FilterItem label="选择品牌">
<SelectBrand @on-change="brandChange"
:field-label="filters.brand.label"
:field-model="filters.brand.model"
:label-span="filters.brand.labelSpan"
:field-span="filters.brand.fieldSpan"
:option-list="filters.brand.options">
</SelectBrand>
</FilterItem>
<FilterItem :label="filters.verifyStatus.label">
<Select v-model.trim="filters.verifyStatus.model">
<Option v-for="option in filters.verifyStatus.options"
:value="option.value"
:key="option.value">{{option.label}}</Option>
</Select>
</FilterItem>
<FilterItem :label="filters.stockStatus.label">
<Select v-model.trim="filters.stockStatus.model">
<Option v-for="option in filters.stockStatus.options"
:value="option.value"
:key="option.value">{{option.label}}</Option>
</Select>
</FilterItem>
<FilterItem label="选择类目">
<SelectCategory :value="categoryValue" @select-change="sortChange"></SelectCategory>
</FilterItem>
<FilterItem>
<Button type="primary" @click="filterSearch">筛选</Button>
<Button @click="clearFilter">清空条件</Button>
</FilterItem>
</LayoutFilter>
<LayoutAction>
<Button type="error" @click="batchSetOffSale">下架</Button>
</LayoutAction>
<LayoutList>
<Table border :context="self" :columns="tableCols" :data="tableData" @on-selection-change="selectChange"></Table>
<Page :total="pageData.total" :current="pageData.current"
@on-change="pageChange" :page-size="20" show-total></Page>
</LayoutList>
<SizeEdit ref="showSizeEdit" :show="showSizeEdit"></SizeEdit>
</LayoutBody>
</template>
<script>
import Vue from 'vue';
import _ from 'lodash';
import service from 'product-service';
import {SizeEdit} from 'product/size-edit';
import {SelectBrand, SelectCategory} from 'product/filter-select';
import {CellImage, CellInfo, CellPrice} from 'product/table-cell';
import {filterFields, initialFields, tableCols, tableData, pageData} from './store';
export default {
data() {
return {
self: this,
showSizeEdit: false,
tableCols,
tableData,
pageData,
filters: '',
batchOffSale: [],
useFilterSign: false,
categoryValue: []
}
},
created() {
this.productList();
this.filters = JSON.parse(initialFields);
},
methods: {
editSize(skn) {
this.$refs.showSizeEdit.show(skn);
},
filterParams() {
const fts = this.filters;
const data = {
productSkn: fts.sknCode.model,
factoryCode: fts.prodCode.model,
productName: fts.prodName.model,
skuFactoryCode: fts.prodBarCode.model,
maxSortId: fts.sort.first.model,
middleSortId: fts.sort.second.model,
smallSortId: fts.sort.third.model,
brandId: fts.brand.model != -1 ? fts.brand.model : null,
auditStatus: fts.verifyStatus.model != -1 ? fts.verifyStatus.model : null,
stock: fts.stockStatus.model != -1 ? this.filters.stockStatus.model : null
};
return data;
},
filterSearch() {
const params = this.filterParams();
this.useFilterSign = true;
this.productList(params);
this.pageData.current = 1;
},
clearFilter() {
this.filters = JSON.parse(initialFields);
this.productList();
this.useFilterSign = false;
this.pageData.current = 1;
this.categoryValue = [];
},
productList(params) {
if(_.isObject(params) &&
params.productSkn !== undefined &&
!_.isFinite(+params.productSkn)) {
this.$Message.error('SKN编码只能是数字', 3);
return;
};
service.productList(
_.merge(params || {}, {
shelfStatus: 1,
size: 20
}))
.then(res => {
if(res.code === 200) {
this.updateStore(res.data);
}
});
},
reloadList() {
let params = {};
if(this.useFilterSign) {
params = this.filterParams();
}
_.merge(params, {
page: 1,
size: 20,
productStatusStr: 1
});
this.productList(params);
this.pageData.current = 1;
},
updateStore(data) {
_.each(data.list, (item) => {
item.changePrice = false;
item._disabled= item.auditStatus === 1;
});
this.tableData = data.list;
this.pageData.total = data.total;
},
sortChange(sort) {
this.filters.sort.first.model = sort.max;
this.filters.sort.second.model = sort.mid;
this.filters.sort.third.model = sort.min;
},
brandChange(val) {
_.set(this.filters, 'brand.model', val);
},
pageChange(page) {
this.pageData.current = page;
let params = {};
if(this.useFilterSign) {
params = this.filterParams();
}
_.merge(params, {
page,
size: 20,
productStatusStr: 1
});
this.productList(params);
},
setOffSale(skns) {
const params = {
targetStatus: 0
};
if(_.isArray(skns)) {
params['productSkns'] = `[${skns.join(',')}]`;
} else {
params['productSkns'] = `[${skns}]`
}
service.setOffSale(params)
.then(res => {
this.$Message.success(res.data.message);
this.reloadList();
});
},
batchSetOffSale() {
if(!this.batchOffSale.length) {
return this.$Message.error('请选择要下架的商品');
}
let skns = [];
_.each(this.batchOffSale, (item) => {
skns.push(item.productSkn);
});
this.setOffSale(skns);
},
editPrice(row) {
row.changePrice = true;
},
updatePrice(row, newSalesPrice) {
const index = row.lineIndex;
const salesPrice = newSalesPrice;
const productSkn = row.productSkn;
if(newSalesPrice === row.salesPrice) {
row.changePrice = false;
return;
}
const params = {
salesPrice,
productSkn
};
service.updateSalesPrice(params)
.then(res => {
this.tableData[index].salesPrice = salesPrice;
row.changePrice = false;
this.$Message.success(res.data.message);
});
},
editProduct(skn) {
this.$router.push({
name: 'product.edit',
params: {
id: skn
}
});
},
selectChange(selection) {
this.batchOffSale = selection;
}
},
components: {
SelectBrand,
SelectCategory,
SizeEdit,
CellImage,
CellInfo,
CellPrice
}
}
</script>
<style lang="scss">
.btn-row-space {
margin-top: 10px;
}
</style>
\ No newline at end of file
... ...
/**
* on sale page store
* @author: qi.li <qi.li@yoho.cn>
* @date: 2017/04/13
*/
const auditStatus = {
0: '无状态',
1: '下架待审核',
2: '下架驳回',
3: '已上架'
};
let filterFields = {
sknCode: {
label: 'SKN编码',
labelSpan: 6,
model: '',
holder: '',
fieldSpan: 18
},
prodCode: {
label: '商家编码',
labelSpan: 6,
model: '',
holder: '',
fieldSpan: 18
},
prodName: {
label: '商品名称',
labelSpan: 6,
model: '',
holder: '',
fieldSpan: 18
},
prodBarCode: {
label: '商品条码',
labelSpan: 6,
model: '',
holder: '',
fieldSpan: 18
},
sort: {
first: {
label: '选择类目',
holder: '选择一级类目',
labelSpan: 6,
fieldSpan: 18,
model: ''
},
second: {
label: '二级类目',
holder: '选择二级类目',
labelSpan: 6,
fieldSpan: 18,
model: ''
},
third: {
label: '三级类目',
holder: '选择三级类目',
labelSpan: 6,
fieldSpan: 18,
model: ''
}
},
brand: {
label: '选择品牌',
labelSpan: 6,
fieldSpan: 18,
model: -1
},
verifyStatus: {
label: '审核状态',
labelSpan: 6,
fieldSpan: 18,
model: -1,
options: [
{
value: -1,
label: '全部'
},
{
value: 1,
label: '下架待审核'
},
{
value: 2,
label: '下架驳回'
}
]
},
stockStatus: {
label: '库存情况',
labelSpan: 6,
fieldSpan: 18,
model: -1,
options: [
{
value: -1,
label: '全部'
},
{
value: 1,
label: '有库存'
},
{
value: 0,
label: '无库存'
}
]
}
};
let initialFields = JSON.stringify(filterFields);
let tableCols = [
{
type: 'selection',
width: 60,
align: 'center'
},
{
title: '商品图片',
key: 'image',
width: 120,
align: 'center',
render (row, column, index) {
return '<cell-image :image-src="row.picImgUrl" :product-url="row.productUrl"></cell-image>';
}
},
{
title: '商品信息',
key: 'info',
align: 'center',
render(row) {
return `<cell-info
:skn="row.productSkn"
:product-name="row.productName"
:brand-name="row.brandName"
:max-name="row.maxSortName"
:middle-name="row.middleSortName"
:small-name="row.smallSortName">
</cell-info>`;
}
},
{
title: '价格(元)',
key: 'price',
align: 'center',
render(row, column, index) {
row.lineIndex = index;
return `<cell-price
@click-change="editPrice(row)"
@click-save="updatePrice"
:can-change="true"
:current-row="row"
:show-change="row.changePrice"
:retail-price="row.retailPrice"
:sales-price="row.salesPrice">
</cell-price>`;
}
},
{
title: '可售库存',
key: 'stock',
width: 100,
align: 'center',
},
{
title: '上架时间',
key: 'shelveTime',
width: 150,
align: 'center'
},
{
title: '审核状态',
key: 'verify',
align: 'center',
render(row) {
return `${auditStatus[row.auditStatus]}`
}
},
{
title: '操作',
key: 'action',
width: 180,
align: 'center',
render: function(row) {
return `<div class="action-btn-row">
<i-button type="primary" size="small" @click="editSize(row.productSkn)">尺码维护</i-button>
<i-button type="primary" size="small" @click="editProduct(${row.productSkn})">内容编辑</i-button>
</div>
<div class="btn-row-space">
<i-button v-if="row._disabled" type="error" size="small"
@click="setOffSale(${row.productSkn})" disabled>下架</i-button>
<i-button v-else type="error" size="small" @click="setOffSale(${row.productSkn})" >下架</i-button>
</div>`;
}
}
];
let tableData = [];
let pageData = {
total: 0,
current: 1
};
export {
filterFields,
initialFields,
tableCols,
tableData,
pageData
}
\ No newline at end of file
... ...
/**
* Created by TaoHuang on 2017/5/4.
*/
import info from './info';
let routers = [info];
routers.forEach(router => {
router.path = `/statistics${router.path}`;
router.name = `statistics.${router.name}`;
});
export default routers;
... ...
/**
* Created by TaoHuang on 2017/5/4.
*/
const page = r => require.ensure([], () => r(require('./info')), 'statistics.info');
export default {
path: '/info.html',
name: 'info',
component: page,
meta: {
pageName: '经营总览'
}
};
\ No newline at end of file
... ...
/**
* Created by TaoHuang on 2017/5/4.
*/
<template>
<LayoutBody>
<IFrame src="http://shops.yohobuy.com/supplier/shop/decorationDetail/792/1/editor/1576/"></IFrame>
</LayoutBody>
</template>
<script>
export default {
created() {
},
data() {
return {
};
},
methods: {
}
};
</script>
<style lang="scss">
</style>
\ No newline at end of file
... ...
... ... @@ -42,8 +42,8 @@ export default [
},
{
menu_name: '可调拨库存',
menu_url: '/repository/git.html',
menu_id: 'repository.git',
menu_url: '/repository/jit.html',
menu_id: 'repository.jit',
status: 1,
id: 32
}
... ... @@ -73,5 +73,19 @@ export default [
menu_id: 'shop',
status: 1,
id: 2
}, {
sub: [
{
menu_name: '经营总览',
menu_url: '/statistics/info.html',
menu_id: 'statistics.info',
status: 1,
id: 41
},
],
menu_name: '数据报表',
menu_id: 'statistics',
status: 1,
id: 4
}
];
... ...