diff --git a/src/subpackage/mall/components/goods_item.vue b/src/subpackage/mall/components/goods_item.vue index a0b95ce..c1c74ae 100644 --- a/src/subpackage/mall/components/goods_item.vue +++ b/src/subpackage/mall/components/goods_item.vue @@ -1,28 +1,58 @@ @@ -40,6 +60,10 @@ export default { &+.il-item{ margin-left: 80upx; } + &.il-active{ + color: $mColor; + font-weight: 500; + } } } } diff --git a/src/subpackage/mall/components/index_search_bar.vue b/src/subpackage/mall/components/index_search_bar.vue index 5d18243..ecf7947 100644 --- a/src/subpackage/mall/components/index_search_bar.vue +++ b/src/subpackage/mall/components/index_search_bar.vue @@ -5,7 +5,7 @@ 搜索 - + 88 @@ -14,7 +14,12 @@ diff --git a/src/subpackage/mall/components/number_operate.vue b/src/subpackage/mall/components/number_operate.vue index ad78fb7..cc2035c 100644 --- a/src/subpackage/mall/components/number_operate.vue +++ b/src/subpackage/mall/components/number_operate.vue @@ -1,19 +1,30 @@ diff --git a/src/subpackage/mall/components/specification_modal.vue b/src/subpackage/mall/components/specification_modal.vue index d99e6cf..b3cce2e 100644 --- a/src/subpackage/mall/components/specification_modal.vue +++ b/src/subpackage/mall/components/specification_modal.vue @@ -2,13 +2,13 @@ - + - 克洛斯威羽毛球拍2支装C8正品碳素成人进攻型羽毛球克洛斯威羽毛球拍2支装C8正品碳素成人进攻型羽毛球 + {{ initData.name || '-' }} - ¥59.9 - /2支 + ¥{{ initData.price || '0' }} + 库存:6 @@ -16,17 +16,25 @@ - - 规格 + + {{ e.name || '-' }} - 比赛专用 + + {{ k || '-' }} + 购买数量 - + 加入购物车 @@ -37,24 +45,83 @@ import modalBox from "./modal_box.vue"; import lineButton from "./line_button.vue"; import numberOperate from "./number_operate.vue"; +import { routeTo, debounce, showLoad, hideLoad, showModal, showNone, tsRoute, jsonStr } from "@/utils/util.js"; +import { MALL_API } from "../js/api"; +import server from "../js/server"; export default { components: { modalBox, lineButton, numberOperate }, + computed: { + goodsSpecArr(){ + let { initData } = this; + return initData?.specArr ?? [] + } + }, data() { return { isShow: false, + goodsNum: 0, + initData: { + /** + * @param {Number} poster 海报 + * @param {Number} id 商品id + * @param {String} name 商品名称 + * @param {Number} price 商品价格 + * + */ + }, + specArr: [], + specSelectedArr: [], } }, methods: { - alert(){ + specItemClick(e, k){ + this.specSelectedArr.push({ pid: e?.id, val: k }); + }, + getActiveBol(val){ + let { specSelectedArr } = this; + return specSelectedArr.some(item => { + let [ id, spec] = val.split('_'); + return item.pid === id && item.val === spec; + }); + }, + alert(data){ this.isShow = true; + this.initData = data ?? {}; }, hide(){ this.isShow = false; - } + }, + goodsCartAdd({ brand_id, id = '', nums = 1, spec_arr = [] }){ + showLoad(); + return server.post({ + url: MALL_API.goodsCartAdd, + data: { brand_id, id, nums, spec_arr }, + isDefaultGet: false, + }) + .then(res => { + hideLoad(); + let _data = res?.data || {}; + if(_data.code === 0){ + console.log('subpackage mall components specification goodsCartAdd res --->', _data); + showNone('加入购物车成功~'); + return _data?.data; + }else{ + return Promise.reject(_data); + } + }) + .catch(err => { + hideLoad(); + showModal({ + title: '提示', + content: err.message || '操作失败!' + }) + console.warn('subpackage mall components specification goodsCartAdd err --->', err); + }) + }, } } @@ -72,7 +139,6 @@ export default { margin-right: 20upx; width: 172upx; height: 172upx; - background: skyblue; } .sg-right{ flex-grow: 1; @@ -133,6 +199,11 @@ export default { border-radius: 10upx; background: #F2F2F7; @include flcw(24upx, 34upx, #333333); + &.si-active{ + color: $mColor !important; + background: rgba($color: $mColor, $alpha: .14); + border: rgba($color: $mColor, $alpha: .2); + } } } } diff --git a/src/subpackage/mall/js/api.js b/src/subpackage/mall/js/api.js new file mode 100644 index 0000000..457697a --- /dev/null +++ b/src/subpackage/mall/js/api.js @@ -0,0 +1,8 @@ +import { ORIGIN } from '@/js/api'; + +export const MALL_API = { + homeShow:`${ORIGIN}/shop2/homeShow`, // 首页设置信息 + goodsCartAdd:`${ORIGIN}/shop2/goodsCartAdd`, //购物车 - 添加商品 +} + +export default { ORIGIN, MALL_API }; \ No newline at end of file diff --git a/src/subpackage/mall/js/server.js b/src/subpackage/mall/js/server.js new file mode 100644 index 0000000..bb26f41 --- /dev/null +++ b/src/subpackage/mall/js/server.js @@ -0,0 +1,10 @@ +import { Server } from '@/js/server'; + +class Servers extends Server { + constructor(props){ + super(props) + } +} + + +export default new Servers(); \ No newline at end of file diff --git a/src/subpackage/mall/pages/index.vue b/src/subpackage/mall/pages/index.vue index d62c01c..5d01319 100644 --- a/src/subpackage/mall/pages/index.vue +++ b/src/subpackage/mall/pages/index.vue @@ -1,42 +1,70 @@