diff --git a/pages/admin/business/index.vue b/pages/admin/business/index.vue index dfb4455..90c0978 100644 --- a/pages/admin/business/index.vue +++ b/pages/admin/business/index.vue @@ -169,7 +169,7 @@ export default { return list; }, - ...mapGetters(['isLogin', 'uid', 'userInfo', 'viewColor', 'shopToken', 'shopIsLogin', 'shopMerId']) + ...mapGetters(['isLogin', 'uid', 'userInfo', 'viewColor', 'shopIsLogin', 'shopMerId']) }, onLoad: function(options) { this.is_sys = options.is_sys; @@ -177,22 +177,13 @@ export default { uni.setNavigationBarTitle({ title: this.is_sys == 1 ? '平台管理' : (this.is_sys == 2 ? '酒道馆管理' : '商家管理') }) - - - console.log("商户登录相关") - console.log({ - shopIsLogin: this.shopIsLogin, - shopToken: this.shopToken - - }) // 登录后操作 if(this.is_sys == 1 || this.shopIsLogin){ - this.getStoreList({is_sys: this.is_sys}); + this.getStoreList({is_sys: this.is_sys, appoint_mer_id: this.shopMerId || ''}); } }, methods: { getStoreList: function(data) { - data.appoint_mer_id = this.shopMerId || ''; this.$nextTick(() => { this.$refs.shopList.getStoreList(data) }); @@ -323,7 +314,7 @@ export default { 'time': data.exp, 'shop_mer_id': data.mer_id, }); - this.getStoreList({is_sys: this.is_sys}); + this.getStoreList({is_sys: this.is_sys, appoint_mer_id: data.mer_id || ''}); } }).catch(err => { this.$util.Tips({ title: err }); diff --git a/pages/supplier/stock/with_goods.vue b/pages/supplier/stock/with_goods.vue index 6e58b4b..89ef9d3 100644 --- a/pages/supplier/stock/with_goods.vue +++ b/pages/supplier/stock/with_goods.vue @@ -6,7 +6,7 @@ - 搜索 + 搜索 @@ -24,22 +24,32 @@ - + - + - - - + + + - 箱 共12瓶 + + {{ item.batch_unit }} 共{{ (buyList[item.product_id].total_num || 0) * (buyList[item.product_id].batch_num || 1) }}{{ item.unit_name }} + + {{ item.unit_name }} @@ -49,10 +59,10 @@ - 99+ + {{ totalNum > 99 ? '99+' : totalNum }} - 合计:¥54288.00 + 合计:¥{{ totalPrice }} 立即结算 @@ -60,6 +70,69 @@ + + + + + + + + + + {{ currentGoods.store_name }} + + ¥ + {{ currentGoods.selected.price || '' }} + + + 库存:{{ Math.floor((currentGoods.selected.stock || 0) / currentGoods.batch_num) }} + + 库存:{{ currentGoods.selected.stock || '' }} + + + + + + + {{ item.attr_name || '' }} + + + {{ specItem || '' }} + + + + + + + + + + + + + + + {{ currentGoods.batch_unit }} 共{{ (buyList[currentGoods.selected.product_id] ? (buyList[currentGoods.selected.product_id].specs ? (buyList[currentGoods.selected.product_id].specs[currentGoods.selected.unique].cart_num || 0) : 0) : 0) * (buyList[currentGoods.product_id].batch_num || 1) }}{{ currentGoods.unit_name }} + + {{ currentGoods.unit_name }} + + + + + + + + @@ -75,10 +148,13 @@ export default { authorize, }, computed: { - ...mapGetters(['isLogin', 'uid', 'userInfo', 'viewColor']) + ...mapGetters(['isLogin', 'uid', 'userInfo', 'viewColor','shopToken', 'shopIsLogin', 'shopMerId']) }, data() { return { + // 登录相关 + isAuto: false, //没有授权的不会自动授权 + isShowAuth: false,//是否隐藏授权 // 商品列表相关 list: [], search:{ @@ -86,20 +162,55 @@ export default { store_name: '', }, // 购买选中商品相关 - buy_list: {}, - - - + totalNum: 0, + totalPrice: 0.00, + buyList: {}, + batch_list: {}, + currentGoods: {}, } }, onLoad(options) { // 判断:是否登录 - if (!this.isLogin) this.isAuto = this.isShowAuth = true;// 未登录 授权登录 + if (!this.isLogin) { + this.isAuto = true; + this.isShowAuth = true;// 未登录 授权登录 + } else this.init();// 已登录 获取信息 }, - // 滚动到底部 - onReachBottom() { - this.getGoodsList(); + watch: { + // 多规格 选中规格改变 + 'currentGoods.selected_spec': { + handler() { + let good = Object.assign({}, this.currentGoods) + let defaultName = Object.values(good.selected_spec).join(','); + // 赋值 + this.currentGoods.selected = good.attrValue[defaultName] || {}; + }, + deep: true + }, + // 计算总数 + 'buyList': { + handler() { + let totalNum = 0; + let totalPrice = 0.00; + Object.values(this.buyList).forEach(item => { + totalNum += item.total_num; + Object.values(item.specs).forEach(value => { + let price = value.price * value.cart_num; + let currentBatchType = this.batch_list[value.product_id] || 0; + // 判断:如果是批量购买 当前价格需要乘以每批的数量 + if(currentBatchType == 1) price = price * item.batch_num; + + totalPrice += price; + }) + }) + + // 赋值 + this.totalNum = totalNum; + this.totalPrice = totalPrice; + }, + deep: true + }, }, methods: { // 授权回调 @@ -115,6 +226,28 @@ export default { }, // 授权成功 初始化 init () { + // 判断:商户是否登录 + if(!this.shopIsLogin){ + uni.showModal({ + title: '未登录', + content: '请先登录酒道馆账号!', + confirmText: '去登录', + cancelText: '返回首页', + success: (res) => { + if (res.confirm) { + uni.navigateTo({ + url:'/pages/admin/business/index?is_sys=2' + }) + }else{ + uni.switchTab({ + url: '/pages/index/index' + }); + } + } + }); + return false; + } + // 商户已经登录 进行后续操作 this.getGoodsList(); }, // 供应商商品列表 @@ -134,10 +267,141 @@ export default { this.$util.Tips({title: err}); }); }, + // 输入购买数量 + buyFlowInputBuyNum(event, spec){ + // 指定数量 + spec.input_num = Number(event.detail.value || event.target.value); + + this.buyFlowChangeNum('input', spec); + }, + // 购买流程 - 添加购买数量 + buyFlowAddBuyNum(type, item){ + let isMoreSpecs = Object.values(item.attrValue).length || 0; + let good = Object.assign({}, item); + if(Number(isMoreSpecs) > 1){ + // 多规格 初始化选中项 + let selected_spec = {}; + Object.values(good.attr).forEach((val,index) => { + selected_spec[val.attr_name] = (val.attr_values ? val.attr_values[0] : ''); + }) + // 赋值 + good.selected_spec = selected_spec; + this.currentGoods = Object.assign({}, good); + this.$refs.moreSpecsSelect.open('bottom'); + } + else if(['add', 'reduce', 'input'].includes(type)){ + // 单规格 + good.selected_spec = {}; + this.currentGoods = Object.assign({}, good); + let spec = item.attrValue[0]; + this.buyFlowChangeNum(type, spec) + } + }, + // 购买流程 - 数量改变(添加 || 减少) + buyFlowChangeNum(type, spec){ + let currentProduct = this.buyList[spec.product_id] || {}; + if(Object.values(currentProduct).length > 0){ + // 商品已经存在 + let currentSpec = currentProduct.specs[spec.unique] || {}; + if(Object.values(currentSpec).length <= 0) { + if(type === 'reduce') return false; + spec.cart_num = 0; + currentSpec = spec; + } + // 记录变更前数量 + let oldNum = currentSpec.cart_num || 0; + // 数量变更 + if(type === 'add') currentSpec.cart_num += 1; + else if(type === 'reduce') currentSpec.cart_num -= 1; + else if(type === 'input') currentSpec.cart_num = spec.input_num || 0; + // 计算变更数量 + let currentNum = currentSpec.cart_num || 0; + let changeNum = Number(oldNum) - Number(currentNum); + // 判断:购买数量是否已经为0 是则删除 + if(currentSpec.cart_num <= 0) delete currentProduct.specs[spec.unique]; + else currentProduct.specs[spec.unique] = currentSpec; + // 判断:当前商品不存在任何购买规格 + if(Object.values(currentProduct.specs).length <= 0){ + this.$set(this.buyList, spec.product_id, {}); + delete this.buyList[spec.product_id]; + }else{ + currentProduct.total_num -= changeNum; + this.$set(this.buyList, spec.product_id, currentProduct); + } + } + else{ + // 商品不存在 + if(type === 'add') spec.cart_num = 1; + else if(type === 'reduce') return false; + else if(type === 'input') spec.cart_num = spec.input_num || 0; + // 初始化 + this.$set(this.buyList, spec.product_id, { + // 购买单位类型 + is_batch: this.currentGoods.is_batch,// 是否支持按照批次购买 + batch_num: this.currentGoods.batch_num,// 一批等于多少件 + batch_unit: this.currentGoods.batch_unit,// 一批次的单位 + // 其他信息 + product_id: spec.product_id, + total_num: spec.cart_num, + store_name: this.currentGoods.store_name, + specs: { + [spec.unique]: spec, + }, + }); + } + + this.$forceUpdate(); + }, + // 购买流程 - 多规格弹框关闭 + closeMoreSpecsSelect(){ + this.$refs.moreSpecsSelect.close(); + }, + // 购买流程 - 多规格切换 + buyFlowChangeSpec(attrName, specItem){ + this.currentGoods.selected_spec[attrName] = specItem; + }, + // 购买流程 - 切换购买单位 + changeBatchType(productId){ + let currentBatchType = this.batch_list[productId] || 0; + this.batch_list[productId] = currentBatchType == 0 ? 1 : 0; + + this.$forceUpdate(); + }, + + + // 购物车 - 获取已存在列表 + cartGetList(){}, + // 购物车 - 购物车总数 + cartGetCount(){}, + // 购物车 - 提交购物车 + cartSubmitEdit(){}, - } + // cart_num: 10 + // is_new: 0 + // product_attr_unique: "598aa5ec4390" + // product_id: "247" + // product_type: 0 + // spread_id: "" + // + // + // + // + // + // cart_num: 8 + // is_new: 0 + // product_attr_unique: "53cd849c89f0" + // product_id: "248" + // product_type: 0 + // spread_id: "" + + + }, + // 滚动到底部 + onReachBottom() { + this.getGoodsList(); + }, } @@ -146,7 +410,7 @@ export default { width: 100vw; min-height: 100vh; background-color: #f6f6f6; - + // 主要内容 .main-content{ padding-bottom: 150rpx; // 搜索 @@ -378,5 +642,150 @@ export default { } } } + // 多规格选择弹框 + .more-spec-content{ + height: 80vh; + width: 100vw; + border-top-left-radius: 30rpx; + border-top-right-radius: 30rpx; + background: #f6f6f6; + padding: 20rpx; + + .goods-info{ + width: 100%; + padding-bottom: 20rpx; + display: inline-flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + position: relative; + .image{ + width: 120rpx; + height: 120rpx; + .goods-image{ + width: 100% !important; + height: 100% !important; + } + } + .info{ + width: calc(100% - (120rpx + 60rpx)); + padding-left: 15rpx; + .title{ + font-size: 32rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 50rpx; + line-height: 50rpx; + } + .price{ + .price-icon{ + font-size: 20rpx; + } + color: #d14e42; + font-size: 28rpx; + font-weight: bold; + height: 40rpx; + line-height: 50rpx; + } + .stock{ + color: #a8a8a8; + font-size: 22rpx; + } + } + .close-btn{ + width: 60rpx; + text-align: right; + position: absolute; + top: 0; + right: 0; + font-size: 50rpx; + } + } + + .goods-spec{ + max-height: calc(100% - 70rpx - 30rpx - 120rpx - 20rpx); + overflow: auto; + .spec-block{ + .spec-title{ + width: 100%; + height: 50rpx; + line-height: 50rpx; + color: #a8a8a8; + font-size: 30rpx; + font-weight: bold; + } + .spec-list{ + display: inline-flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + .spec-list-tag{ + border: 2rpx solid #a6a6a6; + height: 45rpx; + line-height: 45rpx; + padding: 0 15rpx; + font-size: 26rpx; + margin-right: 15rpx; + margin-bottom: 15rpx; + } + .spec-list-tag-active{ + background: #e93423; + color: #f3f3f3; + border-color: #e93423; + } + } + } + } + + .bottom-content{ + --border-color-: #000000; + + width: 100%; + display: inline-flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-end; + align-items: center; + margin-top: 30rpx; + .num-change{ + border: 2rpx solid var(--border-color-); + display: inline-flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + border-radius: 100rpx; + padding: 0 15rpx; + height: 70rpx; + float: right; + + .iconfont{ + text-align: center; + font-size: 30rpx; + width: 70rpx; + } + .icon-shangpinshuliang-jian{ + padding-right: 15rpx; + } + .icon-shangpinshuliang-jia{ + padding-left: 15rpx; + } + .num-input{ + border-left: 2rpx solid var(--border-color-); + border-right: 2rpx solid var(--border-color-); + width: 150rpx; + height: 70rpx; + text-align: center; + } + } + .unit{ + font-size: 26rpx; + margin-left: 10rpx; + } + } + } } diff --git a/store/getters.js b/store/getters.js index 0b4ec2e..4ff9e0a 100644 --- a/store/getters.js +++ b/store/getters.js @@ -14,7 +14,7 @@ export default { keyColor: state => state.app.keyColor, // 商户登录相关 shopToken: state => state.app.shopToken, - shopIsLogin: state => !!state.app.shopToken, + shopIsLogin: state => !!state.app.shopToken && state.app.shopToken !== 'null', shopMerId: state => state.app.shopMerId, }; // export default { diff --git a/store/modules/app.js b/store/modules/app.js index fbe81b5..b9eeb17 100644 --- a/store/modules/app.js +++ b/store/modules/app.js @@ -34,9 +34,9 @@ const mutations = { uni.removeStorageSync('auth_token'); }, SHOP_LOGIN(state, opt) { - state.shopToken = opt.token; Cache.set('SHOP_LOGIN_STATUS_TOKEN', opt.token, opt.time); Cache.set('SHOP_MER_ID', opt.shop_mer_id); + state.shopToken = opt.token; }, SETUID(state,val){ state.uid = val;