Authored by OF1706

feedback

... ... @@ -2,7 +2,7 @@
<div class="cell-info">
<p v-for="item in items">
<span v-if="item.type === 'string' || !item.type">{{item.label}}:{{item.value}}</span>
<a v-if="item.type == 'link'" :href="item.value" >{{item.label}}</a>
<a v-if="item.type == 'link'" :href="item.value" target = '_blank' >{{item.label}}</a>
</p>
</div>
</template>
... ...
<template>
<layout-body>
<layout-filter>
<filter-item :label="filters.sknCode.label">
<Input v-model.trim="filters.sknCode.model"
:placeholder="filters.sknCode.holder" :maxlength="9"></Input>
<filter-item :label="filters.productSKN.label">
<Input v-model.trim="filters.productSKN.model"
:placeholder="filters.productSKN.holder" :maxlength="9"></Input>
</filter-item>
<filter-item :label="filters.prodName.label">
<Input v-model.trim="filters.prodName.model"
:placeholder="filters.prodName.holder"></Input>
</filter-item>
<filter-item label="品牌">
<select-brand v-model="filters.brand.model"></select-brand>
<select-brand v-model="filters.brandId.model"></select-brand>
</filter-item>
<filter-item label="品类">
<select-category :value="categoryValue" @select-change="sortChange"></select-category>
... ... @@ -42,14 +42,15 @@
</filter-item>
<filter-item>
<Button type="primary" @click="filterSearch">筛选</Button>
<Button @click="clearFilter">清空条件</Button>
<Button type="primary" @click="list">筛选</Button>
<Button @click="clearFilters">清空条件</Button>
</filter-item>
</layout-filter>
<layout-list>
<Table border :columns="tableCols" :data="tableData" @on-selection-change="selectChange"></Table>
<Page :total="pageData.total" :current="pageData.current"
<Page :total="pageData.total"
:current="pageData.current"
@on-change="pageChange" show-total></Page>
</layout-list>
... ... @@ -66,10 +67,12 @@
export default {
data() {
return feedbackStore.apply(this);
return feedbackStore.call(this);
},
created() {
this.feedbackService = new FeedbackService();
},
mounted() {
this.list();
},
methods: {
... ... @@ -79,49 +82,113 @@
answerEdit() {
this.list();
},
filterParams() {
const values = {
page: 1
};
const fts = this.filters;
const data = {
productSKN: fts.sknCode.model,
productName: fts.prodName.model,
answerUserName: fts.answerUserName.model,
isReply: fts.isReply.model,
maxSortId: fts.sort.first.model,
middleSortId: fts.sort.second.model,
smallSortId: fts.sort.third.model,
brandId: fts.brand.model === '' || fts.brand.model === null ?
null : fts.brand.model,
askStartTime: fts.askStartTime.model,
askEndTime: fts.askEndTime.model,
answerStartTime: fts.answerStartTime.model,
answerEndTime: fts.answerEndTime.model
};
return _.merge(data, values);
},
filterSearch() {
const params = this.filterParams();
this.useFilterSign = true;
this.list(params);
clearFilters() {
this.filters.productSKN.model = null;
this.filters.prodName.model = null;
this.filters.answerUserName.model = null;
this.filters.isReply.model = null;
this.filters.brandId.model = null;
this.filters.askStartTime.model = null;
this.filters.askEndTime.model = null;
this.filters.answerStartTime.model = null;
this.filters.answerEndTime.model = null;
this.pageData.current = 1;
this.list();
},
clearFilter() {
this.reset();
pageChange(page) {
this.pageData.current = page;
this.list();
},
reset() {
_.each(this.filters, item => {
if (_.has(item, 'model')) {
item.model = '';
filtersParams() {
let params = {};
let fts = this.filters;
let productSKN = fts.productSKN.model,
productName = fts.prodName.model,
answerUserName = fts.answerUserName.model,
isReply = fts.isReply.model,
maxSortId = fts.sort.first.model,
middleSortId = fts.sort.second.model,
smallSortId = fts.sort.third.model,
brandId = fts.brandId.model === '' || fts.brandId.model === null ?
null : fts.brandId.model,
askStartTime = fts.askStartTime.model,
askEndTime = fts.askEndTime.model,
answerStartTime = fts.answerStartTime.model,
answerEndTime = fts.answerEndTime.model;
let page = this.pageData.current;
let pageSize = this.pageData.pageSize;
if (this.filters.productSKN.model) {
if (this.isNumber(this.filters.productSKN.model)) {
params.productSKN = this.filters.productSKN.model;
} else {
return Promise.reject('skn必须是数字');
}
}
params.pageSize = this.pageData.pageSize;
params.page = this.pageData.current;
return Promise.resolve({
params,
productSKN,
productName,
answerUserName,
isReply,
maxSortId,
middleSortId,
smallSortId,
brandId,
askStartTime,
askEndTime,
answerStartTime,
answerEndTime,
page,
pageSize
});
this.useFilterSign = false;
this.pageData.current = 1;
this.categoryValue = [];
},
list() {
this.$Loading.start();
return this.filtersParams().then((params) => {
function getLocalTime(ns) {
let date = new Date(ns * 1000);
let Y = date.getFullYear() + '-';
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + h + m + s;
}
if (params) {
params.askStartTime = params.askStartTime ? getLocalTime(params.askStartTime) : null;
params.askEndTime = params.askEndTime ? getLocalTime(params.askEndTime) : null;
params.answerStartTime = params.answerStartTime ? getLocalTime(params.answerStartTime) : null;
params.answerEndTime = params.answerEndTime ? getLocalTime(params.answerEndTime) : null;
}
return this.feedbackService.list(params);
}).then((result) => {
if (result.code === 200) {
this.pageData.total = result.data.total;
this.pageData.current = result.data.page;
this.tableData = result.data.list;
}
this.$Loading.finish();
}).catch((err) => {
this.$Loading.finish();
this.$Message.error(err);
});
},
isNumber(numStr) {
const isNumber = /^[0-9]+$/;
return isNumber.test(numStr);
},
askTimeChange(time) {
// 兼容: https://github.com/iview/iview/issues/973
... ... @@ -143,83 +210,14 @@
this.filters.answerEndTime.model = +moment(time[1]).format('X');
}
},
list(params) {
this.$Loading.start();
function getLocalTime(ns) {
let date = new Date(ns * 1000);
let Y = date.getFullYear() + '-';
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + h + m + s;
}
if (params) {
params.askStartTime = params.askStartTime ? getLocalTime(params.askStartTime) : null;
params.askEndTime = params.askEndTime ? getLocalTime(params.askEndTime) : null;
params.answerStartTime = params.answerStartTime ? getLocalTime(params.answerStartTime) : null;
params.answerEndTime = params.answerEndTime ? getLocalTime(params.answerEndTime) : null;
}
this.feedbackService.list(
params || {})
.then(res => {
this.$Loading.finish();
if (res.code === 200) {
this.updateStore(res.data);
}
});
},
reloadList() {
let params = {};
if (this.useFilterSign) {
params = this.filterParams();
}
_.merge(params, {
page: 1,
});
this.list(params);
this.pageData.current = 1;
},
updateStore(data) {
_.each(data.list, item => {
item.shelveTime = item.shelveTime || '.';
});
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;
},
pageChange(page) {
this.pageData.current = page;
let params = {};
if (this.useFilterSign) {
params = this.filterParams();
}
_.merge(params, {
page,
});
this.list(params);
},
}
},
components: {
ModalAnswerEdit
}
};
</script>
... ...
... ... @@ -7,20 +7,15 @@ import CellInfo from 'components/cell/cell-info';
export default function() {
return {
batchOffSale: [],
useFilterSign: false,
categoryValue: [],
tableCols: [
{
title: 'SKN',
key: 'productSKN',
width: 100,
align: 'center',
},
{
title: '商品信息',
align: 'center',
width: 200,
render: (h, params) => {
const row = params.row;
const infoItems = [
... ... @@ -48,7 +43,7 @@ export default function() {
{
title: '商品图片',
key: 'image',
width: 150,
width: 120,
align: 'center',
render: (h, params) => {
return (
... ... @@ -59,25 +54,21 @@ export default function() {
{
title: '咨询内容',
key: 'ask',
width: 200,
align: 'center'
},
{
title: '回复内容',
key: 'answer',
width: 200,
align: 'center'
},
{
title: '回复人',
key: 'answerUserName',
width: 100,
align: 'center',
},
{
title: '咨询及回复时间',
key: 'image',
width: 160,
align: 'center',
render: (h, params) => {
const row = params.row;
... ... @@ -101,7 +92,6 @@ export default function() {
{
title: '操作',
key: 'action',
width: 180,
align: 'center',
render: (h, params) => {
const row = params.row;
... ... @@ -145,7 +135,7 @@ export default function() {
pageSize: 20
},
filters: {
sknCode: {
productSKN: {
label: 'SKN',
model: '',
holder: ''
... ... @@ -155,7 +145,7 @@ export default function() {
model: '',
holder: ''
},
brand: {
brandId: {
label: '选择品牌',
model: ''
},
... ...
... ... @@ -72,18 +72,10 @@
hasImage: fts.hasImage.model,
brand_id: fts.brand.model === '' || fts.brand.model === null ?
null : fts.brand.model,
beginTime: fts.beginTime.model,
endTime: fts.endTime.model,
};
const keysMap = {
beginTime: 'beginTime',
endTime: 'endTime',
};
if (this.useFilterSign) {
_.each(keysMap, (val, key) => {
values[key] = fts[val].model;
});
}
return _.merge(data, values);
},
... ... @@ -119,10 +111,26 @@
},
list(params) {
this.$Loading.start();
function getLocalTime(ns) {
let date = new Date(ns * 1000),
Y = date.getFullYear() + '-',
M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-',
D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ',
h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':',
m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':',
s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + h + m + s;
}
if (params) {
params.beginTime = params.beginTime ? getLocalTime(params.beginTime) : null;
params.endTime = params.endTime ? getLocalTime(params.endTime) : null;
}
this.shareService.list(
_.merge(params || {}, {
shelfStatus: 1,
}))
params || {})
.then(res => {
this.$Loading.finish();
if (res.code === 200) {
... ... @@ -172,7 +180,9 @@
}
};
</script>
<style lang="scss">
.cell-img {
width: 80px;
background-size: 100%;
}
</style>
... ...
... ... @@ -155,7 +155,7 @@ export default function() {
]
},
createTime: {
label: '咨询时间',
label: '评价时间',
model: ''
},
beginTime: {
... ... @@ -167,3 +167,4 @@ export default function() {
}
};
}
... ...
... ... @@ -105,7 +105,7 @@ let domainApis = {
// 域名列表
const domains = {
erp: 'http://192.168.103.82:9098',
platform: 'http://192.168.102.202:8088/platform',
platform: 'http://192.168.102.210:8088/platform',
shop: 'http://192.168.102.211:30016'
};
... ...