585 lines
15 KiB
JavaScript
585 lines
15 KiB
JavaScript
export default {
|
|
data() {
|
|
return {
|
|
title: '收银台',
|
|
type: 'goods',
|
|
goodsData: {
|
|
|
|
},
|
|
orderData: {
|
|
goods_num: 0,
|
|
pay_money: 0,
|
|
goods_list: [],
|
|
remark: '',
|
|
create_time: 0
|
|
},
|
|
remark: '',
|
|
outTradeNo: '',
|
|
orderId: 0,
|
|
searchType: 'mobile',
|
|
searchText: '',
|
|
searchTypeList: [{
|
|
'label': '手机号',
|
|
'value': 'mobile',
|
|
'disabled': false
|
|
},
|
|
{
|
|
label: '卡号',
|
|
value: 'member_code',
|
|
disabled: false
|
|
},
|
|
{
|
|
'label': '昵称',
|
|
'value': 'nickname',
|
|
'disabled': false
|
|
}
|
|
],
|
|
date: '',
|
|
goodsIds: [],
|
|
ordertime: '',
|
|
scanCode: {
|
|
code: '',
|
|
lastTime: 0
|
|
}
|
|
}
|
|
},
|
|
onShow() {
|
|
this.orderData.create_time = this.$util.timeFormat(parseInt(new Date().getTime() / 1000));
|
|
|
|
// #ifdef APP-PLUS
|
|
plus.key.addEventListener('keyup', this.listenerScancode, true);
|
|
// #endif
|
|
// #ifdef H5
|
|
window.addEventListener('keypress', this.listenerScancode, true);
|
|
// #endif
|
|
},
|
|
onHide() {
|
|
// #ifdef APP-PLUS
|
|
plus.key.removeEventListener('keyup', this.listenerScancode, true);
|
|
// #endif
|
|
// #ifdef H5
|
|
window.removeEventListener('keypress', this.listenerScancode, true);
|
|
// #endif
|
|
},
|
|
onLoad() {},
|
|
methods: {
|
|
switchStoreAfter() {
|
|
this.wholeOrderCancel(true);
|
|
},
|
|
showMember() {
|
|
if (!this.memberInfo) {
|
|
if (this.$refs.selectMember) this.$refs.selectMember.open();
|
|
} else {
|
|
this.type = 'member';
|
|
}
|
|
},
|
|
showMemberCard() {
|
|
if (!this.memberInfo) {
|
|
if (this.$refs.selectMember) this.$refs.selectMember.open();
|
|
} else {
|
|
this.type = 'card';
|
|
}
|
|
},
|
|
searchMember() {
|
|
if (!this.searchText) {
|
|
this.$util.showToast({
|
|
title: '请输入会员信息',
|
|
icon: 'error'
|
|
});
|
|
return false;
|
|
}
|
|
this.$refs.member.searchMemberByType(this.searchText, this.searchType);
|
|
},
|
|
switchType(index, item) {
|
|
this.searchType = item.value;
|
|
},
|
|
addmember() {
|
|
this.type = 'member';
|
|
this.$refs.member.type = 'addmember';
|
|
},
|
|
/**
|
|
* 切换会员
|
|
*/
|
|
replaceMember() {
|
|
if (this.$refs.member) this.$refs.member.memberId = 0;
|
|
if (this.$refs.selectMember) this.$refs.selectMember.memberId = 0;
|
|
this.$store.commit('setMemberInfo', null);
|
|
let obj = {
|
|
goods_num: 0,
|
|
pay_money: 0,
|
|
goods_list: [],
|
|
remark: '',
|
|
create_time: 0
|
|
};
|
|
Object.assign(this.orderData, obj);
|
|
uni.setStorageSync('orderData', obj);
|
|
this.type = !this.memberInfo ? 'goods' : 'member';
|
|
},
|
|
selectGoods(data) {
|
|
let key = 'sku_' + data.sku_id;
|
|
if (this.goodsData[key]) {
|
|
this.goodsData[key].num += 1;
|
|
} else {
|
|
this.goodsData[key] = data;
|
|
this.goodsData[key].num = 1;
|
|
}
|
|
this.calculation();
|
|
},
|
|
selectMemberGoods(arr) {
|
|
arr.forEach((data) => {
|
|
let key = 'sku_' + data.sku_id + 'item_' + data.item_id;
|
|
if (this.goodsData[key]) {
|
|
this.goodsData[key].num += data.num;
|
|
} else {
|
|
this.goodsData[key] = data;
|
|
this.goodsData[key].num = data.num;
|
|
}
|
|
})
|
|
this.calculation();
|
|
},
|
|
deleteGoods(data) {
|
|
if (data.card_item_id) {
|
|
let _data = this.goodsData['sku_' + data.sku_id + 'item_' + data.card_item_id];
|
|
|
|
this.$refs.member.memberCardData.list[_data.card_index].total_use_num -= _data.num;
|
|
this.$refs.member.memberCardData.list[_data.card_index].item_list[_data.index].use_num -= _data.num;
|
|
if (this.$refs.member.memberCardData.index == _data.card_index) {
|
|
if (_data.card_type != 'timecard') this.$refs.member.memberCardData.currData.item_list[_data.index]
|
|
.use_num -= _data.num;
|
|
this.$refs.member.memberCardData.currData.total_use_num -= _data.num;
|
|
}
|
|
|
|
delete this.goodsData['sku_' + data.sku_id + 'item_' + data.card_item_id];
|
|
} else {
|
|
delete this.goodsData['sku_' + data.sku_id];
|
|
}
|
|
this.calculation();
|
|
|
|
if (!Object.keys(this.goodsData).length) {
|
|
this.orderData.goods_list = [];
|
|
this.orderData.goods_num = 0;
|
|
this.orderData.pay_money = 0;
|
|
}
|
|
},
|
|
// 清空
|
|
clearGoods() {
|
|
this.goodsData = [];
|
|
this.orderData.goods_list = [];
|
|
this.orderData.goods_num = 0;
|
|
this.orderData.pay_money = 0;
|
|
this.goodsIds = [];
|
|
uni.setStorageSync('orderData', "");
|
|
},
|
|
|
|
/**
|
|
* 商品数量增加
|
|
* @param {Object} data
|
|
*/
|
|
inc(data) {
|
|
|
|
if (data.card_item_id) {
|
|
let _data = this.goodsData['sku_' + data.sku_id + 'item_' + data.card_item_id],
|
|
memberCardData = this.$refs.member.memberCardData;
|
|
|
|
if (data.goods_type == '' && _data.num >= data.stock) {
|
|
this.$util.showToast({
|
|
title: '商品库存不足'
|
|
});
|
|
return;
|
|
}
|
|
|
|
// 如果会员卡项中正在变更的和该商品所使用的卡项一致
|
|
if (memberCardData.index == _data.card_index && Object.keys(memberCardData.selected).length) return;
|
|
|
|
if (_data.card_type == 'commoncard') {
|
|
if (memberCardData.list[_data.card_index].total_num == memberCardData.list[_data.card_index]
|
|
.total_use_num) return;
|
|
} else if (_data.card_type != 'timecard') {
|
|
if (memberCardData.list[_data.card_index].item_list[_data.index].num == memberCardData.list[_data
|
|
.card_index].item_list[_data.index].use_num) return;
|
|
}
|
|
|
|
memberCardData.list[_data.card_index].total_use_num += 1;
|
|
memberCardData.list[_data.card_index].item_list[_data.index].use_num += 1;
|
|
|
|
if (memberCardData.index == _data.card_index) {
|
|
memberCardData.currData.total_use_num += 1;
|
|
if (_data.card_type != 'timecard') {
|
|
memberCardData.currData.item_list[_data.index].use_num += 1;
|
|
}
|
|
}
|
|
|
|
this.goodsData['sku_' + data.sku_id + 'item_' + data.card_item_id].num += 1;
|
|
} else {
|
|
let _data = this.goodsData['sku_' + data.sku_id];
|
|
if (data.goods_type == '' && _data.num >= data.stock) {
|
|
this.$util.showToast({
|
|
title: '商品库存不足'
|
|
});
|
|
return;
|
|
}
|
|
this.goodsData['sku_' + data.sku_id].num += 1;
|
|
}
|
|
this.calculation();
|
|
},
|
|
/**
|
|
* 商品数量减少
|
|
* @param {Object} data
|
|
*/
|
|
dec(data) {
|
|
if (data.card_item_id) {
|
|
let _data = this.goodsData['sku_' + data.sku_id + 'item_' + data.card_item_id];
|
|
if (_data.num == 1) return;
|
|
|
|
this.$refs.member.memberCardData.list[_data.card_index].total_use_num -= 1;
|
|
this.$refs.member.memberCardData.list[_data.card_index].item_list[_data.index].use_num -= 1;
|
|
if (this.$refs.member.memberCardData.index == _data.card_index) {
|
|
this.$refs.member.memberCardData.currData.item_list[_data.index].use_num -= 1;
|
|
this.$refs.member.memberCardData.currData.total_use_num -= 1;
|
|
}
|
|
this.goodsData['sku_' + data.sku_id + 'item_' + data.card_item_id].num -= 1;
|
|
this.calculation();
|
|
} else {
|
|
if (this.goodsData['sku_' + data.sku_id].num == 1) return;
|
|
|
|
this.goodsData['sku_' + data.sku_id].num -= 1;
|
|
this.calculation();
|
|
}
|
|
},
|
|
/**
|
|
* 计算
|
|
*/
|
|
calculation() {
|
|
this.goodsIds = [];
|
|
if (!Object.keys(this.goodsData).length) {
|
|
this.orderData.goods_num = 0;
|
|
return;
|
|
}
|
|
|
|
let sku_array = [],
|
|
goodsIds = [];
|
|
|
|
Object.keys(this.goodsData).forEach(key => {
|
|
let item = this.goodsData[key];
|
|
sku_array.push({
|
|
sku_id: item.sku_id,
|
|
num: item.num,
|
|
card_item_id: item.item_id ? item.item_id : 0,
|
|
money: item.money ? item.money : 0
|
|
})
|
|
if (!item.item_id) goodsIds.push(item.goods_id);
|
|
})
|
|
this.goodsIds = goodsIds;
|
|
let data = {
|
|
sku_array: JSON.stringify(sku_array),
|
|
create_time: this.orderData.create_time
|
|
};
|
|
if (this.memberInfo) data.member_id = this.memberInfo.member_id;
|
|
|
|
this.$api.sendRequest({
|
|
url: '/cashier/storeapi/cashierordercreate/calculate',
|
|
data: data,
|
|
success: res => {
|
|
if (res.code == 0) {
|
|
Object.assign(this.orderData, res.data);
|
|
uni.setStorageSync('orderData', this.orderData);
|
|
this.$forceUpdate();
|
|
} else {
|
|
this.$util.showToast({
|
|
title: res.message
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
/**
|
|
* 挂单
|
|
*/
|
|
hangingOrder() {
|
|
if (Object.keys(this.goodsData).length) {
|
|
let data = {
|
|
goods: [],
|
|
order_id: this.orderData.order_id,
|
|
remark: this.orderData.remark
|
|
};
|
|
if (this.memberInfo) data.member_id = this.memberInfo.member_id;
|
|
Object.keys(this.goodsData).forEach(key => {
|
|
let item = this.goodsData[key];
|
|
data.goods.push({
|
|
goods_id: item.goods_id,
|
|
sku_id: item.sku_id,
|
|
num: item.num,
|
|
money: item.money ? item.money : 0
|
|
})
|
|
})
|
|
data.goods = JSON.stringify(data.goods);
|
|
|
|
this.$api.sendRequest({
|
|
url: this.orderData.order_id ? '/cashier/storeapi/pendorder/edit' :
|
|
'/cashier/storeapi/pendorder/add',
|
|
data: data,
|
|
success: res => {
|
|
if (res.code == 0) {
|
|
this.orderData.order_id = 0;
|
|
this.wholeOrderCancel();
|
|
this.$refs.order.orderData.page = 0;
|
|
this.$refs.order.getOrder();
|
|
} else {
|
|
this.$util.showToast({
|
|
title: res.message
|
|
})
|
|
}
|
|
}
|
|
})
|
|
} else if (this.orderNum) {
|
|
this.type = 'order';
|
|
} else {
|
|
this.$util.showToast({
|
|
title: '当前没有挂单'
|
|
})
|
|
}
|
|
},
|
|
/**
|
|
* 取单
|
|
* @param {Object} data
|
|
*/
|
|
takeorder(data) {
|
|
this.$refs.member.memberId = data.member_id;
|
|
if (data.member_id) {
|
|
this.$refs.member.getMemberInfo();
|
|
} else {
|
|
this.$store.commit('setMemberInfo', null);
|
|
}
|
|
|
|
let goodsData = {};
|
|
data.order_goods.forEach(item => {
|
|
if (item.goods_class == 'money') item.money = item.price;
|
|
goodsData['sku_' + item.sku_id] = item;
|
|
})
|
|
this.goodsData = goodsData;
|
|
this.orderData.order_id = data.order_id;
|
|
this.orderData.goods_list = [];
|
|
this.orderData.remark = data.remark;
|
|
this.calculation();
|
|
},
|
|
/**
|
|
* 整单取消
|
|
*/
|
|
wholeOrderCancel(isInit = false) {
|
|
if (Object.keys(this.goodsData).length) {
|
|
// 清除当前会员
|
|
this.$refs.member.memberId = 0;
|
|
this.$refs.member.memberCardData.page = 0;
|
|
this.$store.commit('setMemberInfo', null);
|
|
// 清除商品数据
|
|
this.goodsData = {};
|
|
this.calculation();
|
|
if (this.orderData.order_id) {
|
|
this.$refs.order.deleteOrder(this.orderData);
|
|
this.orderData.order_id = 0;
|
|
}
|
|
// 清除订单数据
|
|
this.orderData = {
|
|
goods_num: 0,
|
|
pay_money: 0,
|
|
goods_list: [],
|
|
remark: '',
|
|
create_time: this.$util.timeFormat(parseInt(new Date().getTime() / 1000))
|
|
}
|
|
this.outTradeNo = '';
|
|
this.orderId = 0;
|
|
} else {
|
|
if (!isInit) this.$util.showToast({
|
|
title: '当前没有订单'
|
|
})
|
|
}
|
|
},
|
|
remarkConfirm() {
|
|
this.orderData.remark = this.remark;
|
|
this.$refs.remarkPopup.close();
|
|
},
|
|
/**
|
|
* 支付
|
|
*/
|
|
pay(type = '') {
|
|
if (!Object.keys(this.goodsData).length || this.isRepeat) return;
|
|
this.isRepeat = true;
|
|
|
|
if (this.outTradeNo) {
|
|
this.type = 'pay';
|
|
if (type) this.$refs.payment.type = type;
|
|
return;
|
|
}
|
|
|
|
let sku_array = [];
|
|
Object.keys(this.goodsData).forEach(key => {
|
|
let item = this.goodsData[key];
|
|
sku_array.push({
|
|
sku_id: item.sku_id,
|
|
num: item.num,
|
|
card_item_id: item.item_id ? item.item_id : 0,
|
|
money: item.money ? item.money : 0
|
|
})
|
|
})
|
|
let data = {
|
|
sku_array: JSON.stringify(sku_array),
|
|
remark: this.orderData.remark,
|
|
create_time: this.orderData.create_time
|
|
};
|
|
if (this.memberInfo) data.member_id = this.memberInfo.member_id;
|
|
|
|
this.$api.sendRequest({
|
|
url: '/cashier/storeapi/cashierordercreate/create',
|
|
data: data,
|
|
success: res => {
|
|
this.isRepeat = false;
|
|
if (res.code == 0) {
|
|
this.outTradeNo = res.data.out_trade_no;
|
|
this.orderId = res.data.order_id;
|
|
this.type = 'pay';
|
|
if (type) this.$refs.payment.type = type;
|
|
} else {
|
|
this.$util.showToast({
|
|
title: res.message,
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
cancelPayment() {
|
|
this.$api.sendRequest({
|
|
url: '/cashier/storeapi/cashierorder/deleteorder',
|
|
data: {
|
|
order_id: this.orderId
|
|
},
|
|
success: res => {
|
|
if (res.code == 0) {
|
|
this.outTradeNo = '';
|
|
this.orderId = 0;
|
|
this.type = 'goods';
|
|
} else {
|
|
this.$util.showToast({
|
|
title: res.message,
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
paySuccess() {
|
|
this.type = 'goods';
|
|
this.wholeOrderCancel();
|
|
this.searchText = '';
|
|
this.$refs.goods.getGoods();
|
|
},
|
|
/**
|
|
* 监听扫码事件
|
|
* @param {Object} e
|
|
*/
|
|
listenerScancode(e) {
|
|
const clearBarCode = () => {
|
|
this.scanCode = {
|
|
lastTime: 0,
|
|
code: ''
|
|
}
|
|
}
|
|
|
|
// #ifdef H5
|
|
var currCode = e.keyCode || e.which || e.charCode;
|
|
// #endif
|
|
|
|
// #ifdef APP-PLUS
|
|
const keycode = ['keycode_7': 0, 'keycode_8': 1, 'keycode_9': 2, 'keycode_10': 3, 'keycode_11': 4,
|
|
'keycode_12':
|
|
5, 'keycode_13': 6, 'keycode_14': 7, 'keycode_15': 8, 'keycode_16': 9
|
|
];
|
|
var currCode = keyArr['keycode_' + e.keyCode] || '';
|
|
// #endif
|
|
|
|
var currTime = new Date().getTime();
|
|
if (this.scanCode.lastTime > 0) {
|
|
if (currTime - this.scanCode.lastTime <= 100) {
|
|
this.scanCode.code += String.fromCharCode(currCode);
|
|
} else if (currTime - this.scanCode.lastTime > 500) {
|
|
// 输入间隔500毫秒清空
|
|
clearBarCode();
|
|
}
|
|
} else {
|
|
this.scanCode.code = String.fromCharCode(currCode);
|
|
}
|
|
this.scanCode.lastTime = currTime;
|
|
|
|
// #ifdef H5
|
|
if (currCode == 13) {
|
|
// #endif
|
|
// #ifdef APP-PLUS
|
|
if (e.keyCode == 66) {
|
|
// #endif
|
|
if (this.scanCode.code && this.scanCode.code.length >= 8) this.getSkuBycode(this.scanCode.code)
|
|
// 回车输入后清空
|
|
clearBarCode();
|
|
}
|
|
},
|
|
/**
|
|
* 获取商品信息通过条形码
|
|
*/
|
|
getSkuBycode(code) {
|
|
this.$api.sendRequest({
|
|
url: '/cashier/storeapi/goods/skuinfo',
|
|
data: {
|
|
sku_no: code.trim()
|
|
},
|
|
success: res => {
|
|
if (res.code == 0) {
|
|
if (res.data) {
|
|
if (res.data.stock == 0) {
|
|
this.$util.showToast({
|
|
title: '该商品库存不足!'
|
|
})
|
|
return;
|
|
}
|
|
this.selectGoods(res.data)
|
|
} else {
|
|
this.$util.showToast({
|
|
title: '未找到该商品!'
|
|
})
|
|
}
|
|
} else {
|
|
this.$util.showToast({
|
|
title: res.message,
|
|
})
|
|
}
|
|
}
|
|
})
|
|
}
|
|
},
|
|
computed: {
|
|
orderNum() {
|
|
return this.$store.state.pendOrderNum;
|
|
}
|
|
},
|
|
watch: {
|
|
$route(to, from) {
|
|
if ((to.path == '/pages/billing/index' || to.path == '/') && this.$refs.member && this.memberInfo) {
|
|
this.$refs.member.memberCardData.page = 0;
|
|
this.$refs.member.memberCardData.list = [];
|
|
this.$refs.member.memberCardData.total = 1;
|
|
this.$refs.member.getMemberCard();
|
|
}
|
|
},
|
|
type: function(nVal) {
|
|
if (nVal != 'member') {
|
|
this.$refs.member.search = false;
|
|
}
|
|
},
|
|
orderNum: function(nVal) {
|
|
if (nVal == 0) this.type = 'goods';
|
|
},
|
|
memberInfo: function(nVal, oVal) {
|
|
if ((nVal && oVal && nVal.member_id != oVal.member_id) || !nVal) {
|
|
this.goodsData = {};
|
|
}
|
|
this.calculation();
|
|
}
|
|
}
|
|
}
|