Commit 06f30adb by 萱草

Merge branch 'feature/福利中心-礼品管理' into dev

parents fa362c9a 1ea7e354
......@@ -48,5 +48,6 @@
<script src="//web-1251519181.file.myqcloud.com/components/delete.1.1.4.js"></script><!-- 删除轻弹窗 -->
<script src="//web-1251519181.file.myqcloud.com/components/input-number.1.0.10.js"></script><!-- 输入框 -->
<script src="//web-1251519181.file.myqcloud.com/components/acc-group-select.1.0.3.js"></script><!-- 账号分组组件 -->
<script src="//web-1251519181.file.myqcloud.com/components/editor.1.1.12.js"></script><!-- 富文本编辑器 -->
</body>
</html>
/**
* api
* 礼品管理
*/
import getFetch from './get-fetch.js';
import config, { welfarePrefix, commonPrefix } from '@/config';
// 礼品相关接口
let realGift = {
giftGet: '/gift/get', // 新建/编辑礼品时获取数据
giftSave: {
// 新增礼品
url: '/gift/save',
method: 'post'
},
giftUpdate: {
// 编辑礼品
url: '/gift/update',
method: 'post'
},
giftPage: {
// 礼品列表
url: '/gift/page',
method: 'post'
},
giftStockRecord: '/gift/stock-record', // 库存记录
giftStockLog: '/gift/stock-record-log', // 库存操作记录
giftActivity: '/gift/activity-statistics', // 活动统计
giftTemplateDownload: '/gift/template-download', // 下载模板
giftTemplateUpload: '/gift/template-upload', // 上传模板
giftBatchUpdate: {
// 礼品批量操作
url: '/gift/batch-update',
method: 'post'
},
giftStandardNew: '/gift/spec-save', // 规格新建
giftStandardList: '/gift/spec-list', // 规格查询
giftStandardValueNew: '/gift/spec-value-save', // 规格值新建
giftStandardValueList: '/gift/spec-value-list', // 规格值查询
virtualCardList: '/gift/vir-card-page', // 虚拟礼品卡券卡密列表
virtualUploadLog: {
url: '/gift/vir-card-log-page',
method: 'post'
}, // 库存上传记录
batchUpdate: {
url: '/gift/batch-update',
method: 'post'
}, // 批量操作
realCostUpdate: {
url: '/gift/real-cost-updat',
method: 'post'
}, // 实物礼品调整成本
realStockUpdate: {
url: '/gift/real-stock-update',
method: 'post'
}, // 实物礼品调整库存
getPickupList: '/pickup/get-pickup-list', // 获取自提点列表
getGiftShopList: '/gift/get-gift-shop-list', // 获取当前礼品的自提点
updateName: '/gift/update-name', // 修改礼品名称
virtualGiftUpload: {
url: '/gift/vir-gift-upload',
useFormData: true,
}, // 虚拟礼品卡密卡号上传
};
realGift = getFetch(realGift, welfarePrefix);
export default { ...realGift };
// export const downloadCouponCSV = config.api + marketPrefix + '/download-code-csv-template'; // 下载导入GIC券号csv示例文件 TODO:
// export const importCode = config.api + marketPrefix + '/import-gic-custom-code'; // 导入券码 TODO:
// export const importDestoryCode = marketPrefix + '/destroy-plugin/import-destroy-code'; // 上传销毁code列表 TODO:
// export const downloadDestroyCodeTemplate = config.api + marketPrefix + '/destroy-plugin/download-destroy-code-template'; // 下载销毁模板示例 TODO:
export const getGiftLoginUser = config.api + commonPrefix + '/user/get-login-user'; // 获取商户名称
......@@ -26,4 +26,5 @@ export const gicFourUrl = 'https://four.gicdev.com';
export const marketPrefix = '/api-marketing'; // 营销接口前缀
export const commonPrefix = '/gic-auth-web'; // 通用前缀
export const welfarePrefix = '/api-welfare'; // 福利中心前缀
\ No newline at end of file
export const welfarePrefix = '/api-welfare'; // 福利中心前缀
export const giftPrefix = '/gift'; // 礼品前缀
\ No newline at end of file
......@@ -31,8 +31,8 @@ export const monthList = Array(12)
});
export const wfTypes = [
{ title: '实物礼品', desc: '文案描述文案描述文案描述', target: '', code: 'w-real-gifts' },
{ title: '虚拟礼品', desc: '文案描述文案描述文案描述', target: '', code: 'w-virtual-gifts' },
{ title: '实物礼品', desc: '文案描述文案描述文案描述', target: '/gift-manage/real-gift', code: 'w-real-gifts' },
{ title: '虚拟礼品', desc: '文案描述文案描述文案描述', target: '/gift-manage/virtual-gift', code: 'w-virtual-gifts' },
{ title: 'GIC 卡券', desc: '文案描述文案描述文案描述', target: '/gic-card/list', code: 'w-gic-card' },
{ title: 'GIC 卡券包', desc: '文案描述文案描述文案描述', target: '/card-package/list', code: 'w-card-package' },
];
......
import Layout from '@/components/layout/layout';
export default [
{
path: '/gift-manage',
component: Layout,
redirect: '/gift-manage/real-gift',
children: [
{
path: 'real-gift',
component: () => import('@/views/gift-manage/real-gift.vue'),
},
{
path: 'real-gift-detail',
component: () => import('@/views/gift-manage/real-gift-detail.vue'),
}
],
},
];
\ No newline at end of file
import gicCard from './gic-card';
import cardPackage from './card-package';
import realGift from './real-gift';
import Layout from '@/components/layout/layout';
import virtualGift from './virtual-gift';
import stockRecord from './stock-record';
export const asyncRoutes = [
...gicCard,
...cardPackage,
...realGift,
...virtualGift,
...stockRecord,
];
......
import Layout from '@/components/layout/layout';
export default [
{
path: '/gift-manage',
component: Layout,
redirect: '/gift-manage/stock-record',
children: [
{
path: 'stock-record',
component: () => import('@/views/gift-manage/stock-record.vue'),
},
// {
// path: 'virtual-gift-detail',
// component: () => import('@/views/gift-manage/virtual-gift-detail.vue'),
// }
],
},
];
\ No newline at end of file
import Layout from '@/components/layout/layout';
export default [
{
path: '/gift-manage',
component: Layout,
redirect: '/gift-manage/virtual-gift',
children: [
{
path: 'virtual-gift',
component: () => import('@/views/gift-manage/virtual-gift.vue'),
},
{
path: 'virtual-gift-detail',
component: () => import('@/views/gift-manage/virtual-gift-detail.vue'),
}
],
},
];
\ No newline at end of file
......@@ -158,4 +158,22 @@ export const toLog = (appCode, id, name, ecuId) => {
} else {
window.open(url, '_blank', 'noopener');
}
};
\ No newline at end of file
};
// 处理时间
// export const formatDate = time => {
// if (!isNaN(time)) time = Number(time);
// let now = new Date(time);
// let year = now.getFullYear();
// let month = now.getMonth() + 1;
// month >= 10 ? (month = month) : (month = '0' + month); //判断小于10月份的情况
// let date = now.getDate();
// date >= 10 ? (date = date) : (date = '0' + date); //判断小于10日的情况
// let hour = now.getHours();
// hour >= 10 ? (hour = hour) : (hour = '0' + hour); //判断小于10的时的情况
// let minute = now.getMinutes();
// minute >= 10 ? (minute = minute) : (minute = '0' + minute); //判断小于10的分的情况
// let second = now.getSeconds();
// second >= 10 ? (second = second) : (second = '0' + second); //判断小于10的秒的情况
// return year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second;
// };
\ No newline at end of file
<template>
<el-dialog title="查看内容" :visible.sync="dialogVisible" width="500px" @close="cancelSubmit()">
<div v-loading="loading">
<div>
<el-input placeholder="请输入关键词搜索" prefix-icon="el-icon-search" v-model="search" class="mr10 w220" clearable @keyup.enter.native="getSearchList" @clear="getSearchList"></el-input>
</div>
<el-table :data="tableData">
<el-table-column label="卡号" prop="paramOne"></el-table-column>
<el-table-column label="卡密/券码" prop="paramTwo"></el-table-column>
<el-table-column label="当前状态" prop="statusFlag">
<template slot-scope="scope">{{ scope.row.statusFlag === 0 ? '未兑换' : '已兑换' }}</template>
</el-table-column>
<el-table-column label="用户/会员" prop="name"></el-table-column>
</el-table>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSubmit()">取消</el-button>
<el-button type="primary" @click="submitProNanme()">确认</el-button>
</div>
</el-dialog>
</template>
<script>
// import request from '../service/request.js';
// import api from '@/api/gift.js';
// const { virtualCardList } = api;
export default {
data() {
return {
dialogVisible: false,
loading: false,
tableData: [
{
paramOne: '123',
paramTwo: '123',
statusFlag: 0,
name: '测试'
},
{
paramOne: '4556',
paramTwo: '4556',
statusFlag: 1,
name: '测试lall'
}
]
};
},
mounted() {
this.dialogVisible = true;
this.getTableList();
},
methods: {
getTableList(){
console.log('查看内容');
// this.loading = true;
// let params = {
// id: '',
// key: ''
// };
// virtualCardList(params).then(res =>{
// console.log(res);
// }).finally(() => this.loading = false);
},
submitProNanme() {
this.dialogVisible = false;
// setInterval(() => {
this.$emit('closeUploadDetail');
// }, 10);
},
// 取消修改
cancelSubmit() {
this.dialogVisible = false;
// setInterval(() => {
this.$emit('closeUploadDetail');
// }, 10);
}
}
};
</script>
<style scoped></style>
<template>
<div>
<!-- 穿梭框 -->
<el-transfer
filterable
filter-placeholder="请输入自提点名称"
v-model="checked.shopCodeList"
:filter-method="(query, item) => (typeof item.name == 'string' && item.name.indexOf(query) >= 0)"
:props="{ key: 'storeCode', label: 'name' }"
:data="pickupList">
</el-transfer>
<!-- 导入 -->
<dm-upload-file
:action="`${origin}${api.giftShopListUpload}`"
accept=".xls,.xlsx"
with-credentials
:on-success="onUploadSucc">
</dm-upload-file>
</div>
</template>
<script>
/**
* 所有自提点
* 部分自提点
* 获取所有自提点
* 回显时根据礼品id获取当前礼品的所有自提点
* 批量导入
* 上传礼品自提点列表
* 部分自提点时的回显,只需要回显导入的数量
* 新增时需要回显导入的数量,和导入的文件名称
*/
// 组件的返回结果
/**
* 点击穿梭框下面的确定按钮或者文件上传完成后返回如下数据
* {
* type: 1,
* shopCodeList: [],
* uuid: 123
* }
*/
import { origin } from '@/config/index.js';
import api from '@/api/gift.js';
const { getPickupList, getGiftShopList } = api;
export default {
name: 'SelectPickupStore',
props: {
giftId: String, // 礼品id
type: String, // 门店自提类型
sum: Number, // 批量导入的数量
},
data() {
return {
api: {
// method: 'post',
// useFormData: true
giftShopListUpload: '/gift-shop-list-upload', // 上传礼品自提点列表EXCEL
giftShopListDownload: '/gift-shop-list-download', // 下载礼品自提点列表EXCEL
downloadGiftTemplate: '/gift/template-download', // 下载模板
},
pickupList: [], // 所有自提点
giftPickupList: [], // 礼品的自提点
// 选择自提点相关的数据
checked: {
shopCodeList: [],
uuid: ''
},
};
},
created() {
this.init();
},
methods: {
init() {
// 获取所有自提点
// TODO 考虑分页加载
this.pickupList = [];
getPickupList({ currentPage: 1, pageSize: 20 }).then(res => {
const { result } = res.result || {};
this.pickupList = this.pickupList.concat(result);
});
// 编辑而且是部分自提点时,获取礼品自提点
getGiftShopList().then(res => {
this.giftPickupList = res.result || [];
});
},
// 自提点上传
onUploadSucc(resp) {
const { uuid, errorList } = resp.result;
console.log(uuid, errorList);
},
// 自提点下载
downloadPickup() {
window.location.href = `${origin}${this.api.giftShopListDownload}?id=${this.giftId}`;
},
// 向外传递数据
onChange() {
this.$emit('change', this.checked);
}
}
};
</script>
<template>
<el-dialog title="调整成本费用" :visible.sync="dialogVisible" width="500px" @close="cancelSubmit()">
<div v-loading="loading">
<el-input-number v-model="updateCostData.costPrice" precision="2" :min="0" :max="999999.99" style="width:400px"></el-input-number>
<el-input type="textarea" :rows="3" placeholder="请填入调整备注" v-model="updateCostData.textarea" :maxlength="240" show-word-limit></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSubmit()">取消</el-button>
<el-button type="primary" @click="submitProNanme()">确认</el-button>
</div>
</el-dialog>
</template>
<script>
// import request from '../service/request.js';
import api from '@/api/gift.js';
const { realCostUpdate } = api;
export default {
props: {
updateCostData: {
type: Object,
default() {
return {};
}
}
},
data() {
return {
dialogVisible: false,
loading: false
};
},
mounted() {
this.dialogVisible = true;
},
methods: {
submitProNanme() {
if(this.loading) return;
if(!this.updateCostData.costPrice){
this.$message.error('请完善成本');
}
if(!this.updateCostData.textarea){
this.$message.error('请完善备注');
}
this.loading = true;
let params = {
giftId: this.updateCostData.id,
costPrice: this.updateCostData.costPrice,
remark: this.updateCostData.textarea
};
realCostUpdate(params).then(res => {
if(res.code === '000'){
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateCost');
}, 10);
this.$message.success('修改成功');
}else{
this.$message.error(res.message);
}
}).finally(() => this.loading = false);
},
// 取消修改
cancelSubmit() {
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateCost');
}, 10);
}
}
};
</script>
<style scoped></style>
<template>
<el-dialog title="调整库存" :visible.sync="dialogVisible" width="750px" @close="cancelSubmit()">
<div v-loading="loading">
<div>
<div class="fr mb20">
<el-select v-model="stockType" style="width:100px;margin-right:10px">
<el-option label="增加" :value="0"></el-option>
<el-option label="减少" :value="1"></el-option>
</el-select>
<el-input placeholder="输入库存" style="width:85px;margin-right:10px" v-model="banthStock" precision="0" :min="0" :max="999999"></el-input>
<el-button type="primary" @click="handleStock">批量填充</el-button>
</div>
<el-table :data="tableData" :span-method="objectSpanMethod" border>
<el-table-column label="颜色" prop="color" width="90px">
<template slot-scope="scope">{{ scope.row.color }}</template>
</el-table-column>
<el-table-column label="尺码" prop="size" width="90px">
<template slot-scope="scope">{{ scope.row.size }}</template>
</el-table-column>
<el-table-column label="当前可占用" prop="remainedStock" width="100px">
<template slot-scope="scope">{{ scope.row.remainedStock }}</template>
</el-table-column>
<el-table-column label="增加/减少" width="150px">
<template slot-scope="scope">
<el-select v-model="scope.row.stockType" style="width:100px">
<el-option label="增加" :value="0"></el-option>
<el-option label="减少" :value="1"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="库存">
<template slot-scope="scope">
<dm-input-amount width="200px" @change="changeSingleStock(scope.row.giftSkuId, scope.row.stock, scope.row.stockType)" v-model.trim="scope.row.stock" precision="0" :min="0" :max="999999"></dm-input-amount>
</template>
</el-table-column>
</el-table>
</div>
<div>
<el-select v-model="stockType" style="width:100px;display:inline-block;margin-right:10px">
<el-option label="增加" :value="0"></el-option>
<el-option label="减少" :value="1"></el-option>
</el-select>
<el-input-number v-model="stock" precision="0" :min="0" :max="999999" style="width:300px"></el-input-number>
</div>
<el-input type="textarea" class="mt20" :rows="3" placeholder="请填入调整备注" v-model="textarea" :maxlength="240" show-word-limit></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSubmit()">取消</el-button>
<el-button type="primary" @click="submitProNanme()">确认</el-button>
</div>
</el-dialog>
</template>
<script>
// import request from '../service/request.js';
import api from '@/api/gift.js';
const { realStockUpdate } = api;
export default {
props: {
stockData: {
type: Object,
default() {
return {};
}
}
},
data() {
return {
dialogVisible: false,
loading: false,
// tableData: [],
tableData: [
{
color: '红色',
size: 'L',
remainedStock: '10',
giftSkuId: '1111',
stock: '10',
stockType: 1
},
{
color: '红色',
size: 'XL',
remainedStock: '20',
giftSkuId: '2222',
stock: '20',
stockType: 1
},
{
color: '红色',
size: 'M',
remainedStock: '30',
giftSkuId: '3333',
stock: '12',
stockType: 1
},
{
color: '黑色',
size: 'L',
remainedStock: '10',
giftSkuId: '4444',
stock: '13',
stockType: 1
},
{
color: '黑色',
size: 'M',
remainedStock: '20',
giftSkuId: '55555',
stock: '14',
stockType: 1
}
],
spanArr: [], // 用于存放每一行记录的合并数
// costChangeObj: [], // 用于存放批量修改后的数据
banthStock: '',
stockType: 0,
updateList: [],
textarea: ''
};
},
mounted() {
this.dialogVisible = true;
this.getData();
this.getSpanArr(this.tableData);
},
methods: {
getData(){
console.log('获取成本数据');
},
submitProNanme() {
if(this.loading) return;
let params = {
giftId: this.stockData.id,
updateList: this.updateList,
remark: this.textarea
};
this.loading = true;
realStockUpdate(params).then(res =>{
if(res.code === '0000'){
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateStock');
}, 10);
this.$message.success('修改成功');
}else{
this.$message.error(res.message);
}
}).finally(() => this.loading = false);
},
// 取消修改
cancelSubmit() {
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateStock');
}, 10);
},
// 合并单元格,行合并
getSpanArr(data) {
// data就是我们从后台拿到的数据
for (let i = 0; i < data.length; i++) {
if (i === 0) {
this.spanArr.push(1);
this.pos = 0;
} else {
// 判断当前元素与上一个元素是否相同
if (data[i].color === data[i - 1].color) {
this.spanArr[this.pos] += 1;
this.spanArr.push(0);
} else {
this.spanArr.push(1);
this.pos = i;
}
}
// console.log(this.spanArr);
}
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
// if (columnIndex === 0 || columnIndex === 1) {
if (columnIndex === 0) {
const _row = this.spanArr[rowIndex];
const _col = _row > 0 ? 1 : 0;
// console.log(`rowspan:${_row} colspan:${_col}`);
return {
// [0,0] 表示这一行不显示, [2,1]表示行的合并数
rowspan: _row,
colspan: _col
};
}
},
// 批量修改成本
handleStock(){
// for (let item in this.costChangeObj) {
// this.costChangeObj[item].costPrice = this.banthCost;
// // this.costChangeObj[item].stockType = this.stockType;
// }
this.updateList = [];
// if(this.stockType === 1){
// this.tableData.forEach(item => {
// // item.stock = Number(item.stock) + Number(this.banthStock);
// item.stock = this.banthStock;
// item.stockType = this.stockType;
// this.updateList.push({ giftSkuId: item.giftSkuId, stock: item.stock, stockType: item.stockType });
// });
// }else{
// this.tableData.forEach(item => {
// // item.stock = Number(item.stock) - Number(this.banthStock);
// item.stock = this.banthStock;
// item.stockType = this.stockType;
// this.updateList.push({ giftSkuId: item.giftSkuId, stock: item.stock, stockType: item.stockType });
// });
// }
this.tableData.forEach(item => {
item.stock = this.banthStock;
item.stockType = this.stockType;
this.updateList.push({ giftSkuId: item.giftSkuId, stock: item.stock, stockType: item.stockType });
});
console.log(this.updateList);
},
changeSingleStock(id, stock, stockType){
if(!stock){
this.$message.error('请完善库存');
}
if(this.updateList.length > 0){
let iii;
let result = this.updateList.some((item, index) =>{
if(item.giftSkuId == id){
iii = index;
return true;
}
});
if(result){ // 如果存在
this.updateList[iii].stock = stock;
}else{
this.updateList.push({ giftSkuId: id, stock: stock, stockType: stockType });
}
}else{
this.updateList.push({ giftSkuId: id, stock: stock, stockType: stockType });
}
console.log(this.updateList);
}
}
};
</script>
<style scoped></style>
<template>
<el-dialog title="修改礼品名称" :visible.sync="dialogVisible" width="600px" @close="cancelSubmit('editInfoModal')">
<el-form :model="editInfoModal" ref="editInfoModal" :rules="modalRules" :label-position="labelPosition" v-loading="loading">
<el-form-item label="礼品名称" label-width="80px" prop="name" style="width:560px">
<dm-input type="text" v-model="editInfoModal.name" :byte-type="1" :maxlength="30"> </dm-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSubmit('editInfoModal')">取消</el-button>
<el-button type="primary" @click="submitProNanme('editInfoModal')">确认</el-button>
</div>
</el-dialog>
</template>
<script>
// import request from '../service/request.js';
// import api from '@/api/gift.js';
// const { updateName } = api;
export default {
props: {
updateNameForm: {
type: Object,
default() {
return {};
}
}
},
data() {
return {
dialogVisible: false,
editInfoModal: {
goodsName: '',
goodsId: ''
},
labelPosition: 'top',
modalRules: {
goodsName: [ { required: true, message: '名称不能为空', trigger: 'blur' } ]
},
title: '',
label: '',
loading: false
};
},
mounted() {
this.dialogVisible = true;
// this.editInfoModal.goodsName = this.updateNameForm.name;
this.editInfoModal.goodsId = this.updateNameForm.id;
},
methods: {
submitProNanme() {
if(this.loading) return;
let params = {
giftId: this.editInfoModal.goodsId,
name: this.editInfoModal.goodsName
};
this.loading = true;
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateName');
}, 10);
console.log(params);
// updateName(params).then(res => {
// if(res.code === '0000'){
// console.log(res.data);
// this.dialogVisible = false;
// setInterval(() => {
// this.$emit('closeUpdateName');
// }, 10);
// this.$message.success('修改成功');
// }else{
// this.$message.error(res.message);
// }
// }).finally(() => this.loading = false);
},
// 取消修改
cancelSubmit(formName) {
this.$refs[formName].resetFields();
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateName');
}, 10);
}
}
};
</script>
<style scoped></style>
<template>
<el-dialog title="调整库存" :visible.sync="dialogVisible" width="500px" @close="cancelSubmit()">
<div v-loading="loading">
<el-select v-model="stockType" style="width:100px;display:inline-block;margin-right:10px">
<el-option label="增加" :value="0"></el-option>
<el-option label="减少" :value="1"></el-option>
</el-select>
<el-input-number v-model="stock" precision="0" :min="0" :max="999999" style="width:300px"></el-input-number>
<el-input class="mt20" type="textarea" :rows="3" placeholder="请填入调整备注" v-model="textarea" :maxlength="240" show-word-limit></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSubmit()">取消</el-button>
<el-button type="primary" @click="submitProNanme()">确认</el-button>
</div>
</el-dialog>
</template>
<script>
// import request from '../service/request.js';
import api from '@/api/gift.js';
const { realStockUpdate } = api;
export default {
props: {
stockData: {
type: Object,
default() {
return {};
}
}
},
data() {
return {
dialogVisible: false,
loading: false,
stockType: 0,
stock: '',
textarea: ''
};
},
mounted() {
this.dialogVisible = true;
console.log(this.stockData);
},
methods: {
submitProNanme() {
if(this.loading) return;
let params = {
giftId: this.stockData.id,
updateList: [
{
giftSkuId: '',
stock: this.stock,
stockType: this.stockType
}
],
remark: this.textarea
};
this.loading = true;
realStockUpdate(params).then(res =>{
if(res.code === '0000'){
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateStock');
}, 10);
this.$message.success('修改成功');
}else{
this.$message.error(res.message);
}
}).finally(() => this.loading = false);
},
// 取消修改
cancelSubmit() {
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateStock');
}, 10);
}
}
};
</script>
<style scoped></style>
<template>
<el-dialog title="调整库存" :visible.sync="dialogVisible" width="750px" @close="cancelSubmit()">
<div v-loading="loading">
<el-input type="textarea" :rows="3" placeholder="请填入调整备注" v-model="textarea" :maxlength="240" show-word-limit></el-input>
<div class="upload-btn mt20">
<el-upload class="upload-ele" show-file-list :action="uploadAction" :on-success="uploadFile" with-credentials>
<el-button><i class="el-icon-upload2" style="margin-right:5px"></i>点击上传</el-button>
</el-upload>
</div>
<div class="uploadText">
<p class="mt10">1.发放内容内部模板导出,点击<el-button type="text">下载模板</el-button></p>
<p>2.填充空缺内容,导出所有项均为必填项;</p>
<p>3.请勿导入重复的内容,导入的内容在原来基础上增加库存;</p>
<p>4.上传完整仅支持.xlsx .xls文件的导入,填充数据不超过“10万”条;</p>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSubmit()">取消</el-button>
<el-button type="primary" @click="submitProNanme()">确认</el-button>
</div>
</el-dialog>
</template>
<script>
// import request from '../service/request.js';
import api from '@/api/gift.js';
const { realStockUpdate } = api;
export default {
props: {
stockData: {
type: Object,
default() {
return {};
}
}
},
data() {
return {
dialogVisible: false,
loading: false,
// tableData: [],
tableData: [
{
color: '红色',
size: 'L',
remainedStock: '10',
giftSkuId: '1111',
stock: '10',
stockType: 1
},
{
color: '红色',
size: 'XL',
remainedStock: '20',
giftSkuId: '2222',
stock: '20',
stockType: 1
},
{
color: '红色',
size: 'M',
remainedStock: '30',
giftSkuId: '3333',
stock: '12',
stockType: 1
},
{
color: '黑色',
size: 'L',
remainedStock: '10',
giftSkuId: '4444',
stock: '13',
stockType: 1
},
{
color: '黑色',
size: 'M',
remainedStock: '20',
giftSkuId: '55555',
stock: '14',
stockType: 1
}
],
spanArr: [], // 用于存放每一行记录的合并数
// costChangeObj: [], // 用于存放批量修改后的数据
banthStock: '',
stockType: 0,
updateList: [],
textarea: '',
// uploadAction: window.location.origin + '/api-marketing/upload/upload-image?requestProject=marketing',
uploadAction: 'https://four.gicdev.com/api-marketing/upload/upload-image?requestProject=marketing',
};
},
mounted() {
this.dialogVisible = true;
this.getData();
this.getSpanArr(this.tableData);
},
methods: {
getData(){
console.log('获取成本数据');
},
submitProNanme() {
if(this.loading) return;
let params = {
giftId: this.stockData.id,
updateList: this.updateList,
remark: this.textarea
};
this.loading = true;
realStockUpdate(params).then(res =>{
if(res.code === '0000'){
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateStock');
}, 10);
this.$message.success('修改成功');
}else{
this.$message.error(res.message);
}
}).finally(() => this.loading = false);
},
// 取消修改
cancelSubmit() {
this.dialogVisible = false;
setInterval(() => {
this.$emit('closeUpdateStock');
}, 10);
},
uploadFile(file){
console.log(file);
},
// 合并单元格,行合并
getSpanArr(data) {
// data就是我们从后台拿到的数据
for (let i = 0; i < data.length; i++) {
if (i === 0) {
this.spanArr.push(1);
this.pos = 0;
} else {
// 判断当前元素与上一个元素是否相同
if (data[i].color === data[i - 1].color) {
this.spanArr[this.pos] += 1;
this.spanArr.push(0);
} else {
this.spanArr.push(1);
this.pos = i;
}
}
// console.log(this.spanArr);
}
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
// if (columnIndex === 0 || columnIndex === 1) {
if (columnIndex === 0) {
const _row = this.spanArr[rowIndex];
const _col = _row > 0 ? 1 : 0;
// console.log(`rowspan:${_row} colspan:${_col}`);
return {
// [0,0] 表示这一行不显示, [2,1]表示行的合并数
rowspan: _row,
colspan: _col
};
}
},
// 批量修改成本
handleStock(){
// for (let item in this.costChangeObj) {
// this.costChangeObj[item].costPrice = this.banthCost;
// // this.costChangeObj[item].stockType = this.stockType;
// }
this.updateList = [];
// if(this.stockType === 1){
// this.tableData.forEach(item => {
// // item.stock = Number(item.stock) + Number(this.banthStock);
// item.stock = this.banthStock;
// item.stockType = this.stockType;
// this.updateList.push({ giftSkuId: item.giftSkuId, stock: item.stock, stockType: item.stockType });
// });
// }else{
// this.tableData.forEach(item => {
// // item.stock = Number(item.stock) - Number(this.banthStock);
// item.stock = this.banthStock;
// item.stockType = this.stockType;
// this.updateList.push({ giftSkuId: item.giftSkuId, stock: item.stock, stockType: item.stockType });
// });
// }
this.tableData.forEach(item => {
item.stock = this.banthStock;
item.stockType = this.stockType;
this.updateList.push({ giftSkuId: item.giftSkuId, stock: item.stock, stockType: item.stockType });
});
console.log(this.updateList);
},
changeSingleStock(id, stock, stockType){
if(!stock){
this.$message.error('请完善库存');
}
if(this.updateList.length > 0){
let iii;
let result = this.updateList.some((item, index) =>{
if(item.giftSkuId == id){
iii = index;
return true;
}
});
if(result){ // 如果存在
this.updateList[iii].stock = stock;
}else{
this.updateList.push({ giftSkuId: id, stock: stock, stockType: stockType });
}
}else{
this.updateList.push({ giftSkuId: id, stock: stock, stockType: stockType });
}
console.log(this.updateList);
}
}
};
</script>
<style scoped>
.upload-btn {
height: 40px;
border: 1px dashed rgba(192, 196, 204, 1);
display: inline-block;
font-size: 14px;
color: #c0c4cc;
cursor: pointer;
margin-right: 10px;
width: 250px;
border-radius: 4px;
}
.upload-btn .el-icon-upload2 {
font-size: 18px;
color: #c0c4cc;
}
.upload-btn:hover {
border-color: #1890ff;
}
.upload-ele .el-button {
border: none;
color: #c0c4cc;
margin-left: 60px;
}
.upload-ele .el-button--small {
padding: 0;
}
.uploadText p{
line-height: 26px;
}
</style>
<template>
<div>
<div class="tab-top">
<el-input :placeholder="placeholderText" v-model="search" class="mr10 w350" clearable @keyup.enter.native="getSearchList" @clear="getSearchList">
<el-select v-model="searchType" slot="prepend" placeholder="礼品名称" style="width:140px;" @change="handleChangeType">
<el-option label="礼品名称" :value="1"></el-option>
<el-option label="礼品编码" :value="2"></el-option>
<el-option label="福利id" :value="3"></el-option>
</el-select>
</el-input>
<el-input placeholder="请输入操作人姓名搜索" prefix-icon="el-icon-search" v-model="creatorName" class="mr10 w220" clearable @keyup.enter.native="getSearchList" @clear="getSearchList"></el-input>
<el-date-picker v-model="timeValue" type="daterange" @change="changeTime" align="right" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</div>
<div class="table-content" v-loading="loading">
<el-table :data="tableData" ref="multipleTable" style="width: 100%">
<el-table-column label="上传时间" prop="createTime" width="300px"></el-table-column>
<el-table-column prop="creatorName" label="操作人" min-width="150px"></el-table-column>
<el-table-column prop="fileName" label="文件名称" min-width="150px"></el-table-column>
<el-table-column prop="giftName" label="福利名称" min-width="120px"></el-table-column>
<el-table-column label="上传结果" min-width="150px">
<template slot-scope="scope">
<div v-if="scope.row.statusFlag === 0">处理中</div>
<div v-else>
成功<span class="blue">{{ scope.row.success }}</span>条,失败<span class="danger-color">{{ scope.row.fail }}</span>条,<el-button type="text" @click="checkDetail">查看详情</el-button>
</div>
</template>
</el-table-column>
</el-table>
<div class="pagination-conteiner" style="background:#fff;" v-show="total > 0">
<div class="pagination">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next" :total="total" v-if="total != 0"> </dm-pagination>
</div>
</div>
</div>
<el-dialog title="查看详情" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
<span>这是一段信息</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { page, formate } from '@/mixins/table.js';
import { formatDateTimeByType } from '@/utils/index.js';
import api from '@/api/gift.js';
const { virtualUploadLog } = api;
export default {
components: {
// klal
},
data() {
return {
bread: [
{
breadName: '礼品管理'
},
{
breadName: '库存上传记录'
}
],
formatDateTimeByType,
// activeName: '0',
mixins: [ page, formate ],
proType: '',
status: '',
batchOperate: '',
total: 0,
sortOrder: '',
sortColumn: '',
// tableData: [],
tableData: [
{
createTime: '1610693597000',
statusFlag: 0,
creatorName: '超级管理员',
fileName: '我是文件啦啦啦',
giftName: '年终福利',
success: '2',
fail: '1',
uploadLogId: '111111'
},
{
createTime: '1610693597000',
statusFlag: 1,
creatorName: '小熊饼干',
fileName: '我是文件小魔仙',
giftName: '过年啦',
success: '2',
fail: '1',
uploadLogId: '111111'
},
{
createTime: '1610693597000',
statusFlag: 2,
creatorName: '纯甄牛奶',
fileName: '我是文件小哪吒',
giftName: '放鞭炮',
success: '2',
fail: '1',
uploadLogId: '111111'
}
],
loading: false,
// 搜索条件
search: '',
giftId: '',
giftName: '',
giftNo: '',
creatorName: '',
startTime: '',
endTime: '',
currentPage: 1,
pageSize: 20,
searchType: 1,
placeholderText: '请输入关键词搜索',
isShow: false,
timeValue: [ new Date() - 7 * 24 * 60 * 60 * 1000, new Date().valueOf() ],
dialogVisible: false,
};
},
created() {
this.$emit('updateBread', this.bread);
this.$emit('showAside', true);
this.init();
},
methods: {
init() {
this.getTableList();
},
getSearchList() {
this.pageNum = 1;
this.getTableList();
},
changeTime(){
if(this.timeValue){
this.startTime = this.formatDateTimeByType(this.timeValue[0], 'yyyy-MM-dd');
this.endTime = this.formatDateTimeByType(this.timeValue[1], 'yyyy-MM-dd');
}else{
this.startTime = '';
this.endTime = '';
};
this.currentPage = 1;
this.pageSize = 20;
this.getTableList();
},
// 列表筛选条件更改
handleChangeType() {
if (this.searchType === 1) {
this.placeholderText = '请输入礼品名称';
this.giftName = this.search;
} else if (this.searchType === 2) {
this.placeholderText = '请输入礼品编码';
this.giftNo = this.search;
} else if (this.searchType === 3) {
this.placeholderText = '福利id';
this.giftId = this.search;
}
},
// 实物礼品列表
getTableList() {
console.log('获取列表详情');
let params = {
giftNo: this.giftNo,
giftName: this.giftName,
giftId: this.giftId,
creatorName: this.creatorName,
pageNum: this.currentPage,
pageSize: this.pageSize,
startTime: this.startTime,
endTime: this.endTime
};
virtualUploadLog(params).then(res =>{
console.log(res);
this.tableData = res.result;
console.log(this.tableData);
});
},
checkDetail(){
this.dialogVisible = true;
}
},
};
</script>
<style lang="scss" scoped>
.tab-top {
height: 32px;
margin: 20px 20px 0px 20px;
}
.table-content {
margin: 20px;
padding-bottom: 20px;
.img-text {
height: 60px;
img {
width: 60px;
height: 60px;
border: 1px solid #dcdfe6;
padding: 4px;
border-radius: 2px;
}
.text {
display: inline-block;
vertical-align: top;
width: 75%;
margin-left: 3px;
font-size: 13px;
line-height: 14px;
.goods-descript {
color: #606266;
line-height: 18px;
font-size: 14px;
margin-bottom: 10px;
}
.goods-code {
color: #909399;
font-size: 12px;
line-height: 16px;
}
}
& :hover .el-icon-edit-outline {
display: inline-block;
cursor: pointer;
}
.el-icon-edit-outline:hover {
color: #2f54ed;
}
}
.stock-box {
&:hover .el-icon-edit-outline {
display: inline-block;
cursor: pointer;
}
}
}
.el-icon-edit-outline:hover {
color: #2f54ed;
}
.undeline-dash{
border-bottom: 1px dashed #2F54EB;
font-weight:500;
}
.spanclass{
display: inline-block;
line-height: 32px;
}
</style>
<style>
.damolish .el-tooltip__popper{
width: 240px;
}
</style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment