├── static
├── .gitkeep
└── reset.css
├── src
├── store
│ ├── getters.js
│ ├── state.js
│ ├── actions.js
│ ├── mutations.js
│ ├── mutations-types.js
│ ├── index.js
│ └── modules
│ │ ├── prompt.js
│ │ └── liveRoom.js
├── pages
│ ├── goods
│ │ ├── goodsDetails
│ │ │ ├── private
│ │ │ │ ├── README.md
│ │ │ │ ├── shop.vue
│ │ │ │ └── goodsSpec.vue
│ │ │ └── goodsDetails.vue
│ │ └── goodsList
│ │ │ └── goodsList.vue
│ ├── home
│ │ ├── private
│ │ │ ├── README.md
│ │ │ ├── goodsClass.vue
│ │ │ └── recommend.vue
│ │ └── home.vue
│ ├── notfind
│ │ └── notfind.vue
│ ├── liveRoom
│ │ ├── private
│ │ │ ├── myVideo.vue
│ │ │ ├── roomBottom.vue
│ │ │ ├── inputModel.vue
│ │ │ ├── liveTop.vue
│ │ │ ├── liveGoods.vue
│ │ │ └── gift.vue
│ │ └── liveRoom.vue
│ ├── live
│ │ ├── private
│ │ │ └── liveClass.vue
│ │ └── live.vue
│ ├── shoppingCar
│ │ ├── private
│ │ │ ├── invalid.vue
│ │ │ └── recommend.vue
│ │ └── shoppingCar.vue
│ ├── order
│ │ ├── orderDetails
│ │ │ ├── private
│ │ │ │ └── orderState.vue
│ │ │ └── orderDetails.vue
│ │ ├── confirmOrder
│ │ │ ├── private
│ │ │ │ └── confirm_address.vue
│ │ │ └── confirmOrder.vue
│ │ ├── orderOperate
│ │ │ └── orderOperate.vue
│ │ └── orderList
│ │ │ └── orderList.vue
│ ├── author
│ │ └── author.vue
│ ├── me
│ │ ├── me.vue
│ │ └── private
│ │ │ ├── meItem.vue
│ │ │ └── orderTab.vue
│ ├── shop
│ │ └── shopDetails
│ │ │ └── shopDetails.vue
│ ├── myAddress
│ │ └── myAddress.vue
│ └── userDetails
│ │ └── userDetails.vue
├── assets
│ ├── icon
│ │ ├── error.png
│ │ ├── man@2x.png
│ │ ├── loading.png
│ │ ├── loginImg.jpg
│ │ ├── wode1@2x.png
│ │ ├── wode@2x.png
│ │ ├── zhibo@2x.png
│ │ ├── daohang@2x.png
│ │ ├── fenlei@2x.png
│ │ ├── fenxiang@2x.png
│ │ ├── gouwuche@2x.png
│ │ ├── jiangefu@2x.png
│ │ ├── paizhao@2x.png
│ │ ├── tongyi@2x.png
│ │ ├── zhibo1@2x.png
│ │ ├── zuanshi@2x.png
│ │ ├── fanhui-bai@2x.png
│ │ ├── fanhui-hei@2x.png
│ │ ├── gouwuche1@2x.png
│ │ ├── icon_woman@2x.png
│ │ ├── shangcheng@2x.png
│ │ ├── tongyi-hui@2x.png
│ │ ├── wode_dizhi@2x.png
│ │ ├── wode_xian@2x.png
│ │ ├── Shopping-Cart@2x.png
│ │ ├── arrow_yellow@2x.png
│ │ ├── dianpu_shouqi@2x.png
│ │ ├── dianpu_sousuo@2x.png
│ │ ├── fasongxiaoxi@2x.png
│ │ ├── gouwuche_kong@2x.png
│ │ ├── shangcheng1@2x.png
│ │ ├── wode_bangzhu@2x.png
│ │ ├── wode_daifahuo@2x.png
│ │ ├── wode_guanzhu@2x.png
│ │ ├── wode_shezhi@2x.png
│ │ ├── wode_shoucang@2x.png
│ │ ├── wode_xiaoxi@2x.png
│ │ ├── wode_zhanghao@2x.png
│ │ ├── xiangzuo-hui@2x.png
│ │ ├── zengsongliwu@2x.png
│ │ ├── dianpu_gendui_1@2x.png
│ │ ├── dianpu_zhankai@2x.png
│ │ ├── kanzhibo_guanbi@2x.png
│ │ ├── shangpinxq-gou@2x.png
│ │ ├── shouhou-guanbi@2x.png
│ │ ├── wode_daifukuan@2x.png
│ │ ├── wode_daipingjia@2x.png
│ │ ├── wode_daishouhuo@2x.png
│ │ ├── wode_youhuiquan@2x.png
│ │ ├── xiangqing_kefu@2x.png
│ │ ├── wode_dizhi_bianji@2x.png
│ │ ├── wode_dizhi_shanchu@2x.png
│ │ ├── wode_guanyuwomen@2x.png
│ │ ├── wode_tuikuanshou@2x.png
│ │ ├── xiangqing_dianpu@2x.png
│ │ ├── xinzendizhi-guanbi@2x.png
│ │ ├── dianpu_gengduo_kefu@2x.png
│ │ ├── dinapu_zhibo_zaixin@2x.png
│ │ ├── fabupingjia_xing_hui@2x.png
│ │ ├── kanzhibo_shangpingku@2x.png
│ │ ├── querendingdan-dizhi@2x.png
│ │ ├── wode_chengweimaijia@2x.png
│ │ ├── Sales-volume_unselected@2x.png
│ │ ├── To-examine_Success_red@2x.png
│ │ ├── dianpu_gengduo_jianjie@2x.png
│ │ ├── dianpu_gengduo_shouye@2x.png
│ │ ├── dianpu_gengduo_xiaoxi@2x.png
│ │ ├── dinapu_zhibo_zhuangtai@2x.png
│ │ ├── fabupingjia_xing_cheng@2x.png
│ │ ├── wode_dizhi_shezhimoren@2x.png
│ │ ├── xiangqing_qrdd_caidai@2x.png
│ │ ├── xiangqing_shoucang_hong@2x.png
│ │ ├── xiangqing_shoucang_hui@2x.png
│ │ ├── Sales-volume_High-to-low@2x.png
│ │ ├── Sales-volume_Low-to-high@2x.png
│ │ ├── dinapu_zhibo_zhuangtai_hui@2x.png
│ │ ├── querendingdan-wudizhi-tianjia@2x.png
│ │ └── direct-seeding_play_Button@2x@2x@2x.png
│ ├── images
│ │ └── wode_beijin@2x.png
│ └── css
│ │ └── main.css
├── tmp.vue
├── components
│ ├── README.md
│ ├── banner
│ │ └── banner.vue
│ ├── header
│ │ └── header.vue
│ ├── count
│ │ └── count.vue
│ ├── promptModel
│ │ └── promptModel.vue
│ ├── countDown
│ │ └── countDown.vue
│ ├── loading
│ │ └── loading.vue
│ ├── footer
│ │ └── footer.vue
│ ├── goodsItem
│ │ └── goodsItem.vue
│ ├── addAddress
│ │ └── addAddress.vue
│ └── loadMord
│ │ └── loadMord.vue
├── App.vue
├── common
│ ├── storage.js
│ └── util.js
├── api
│ ├── config.js
│ ├── live.js
│ └── api.js
├── main.js
└── router
│ └── index.js
├── config
├── prod.env.js
├── dev.env.js
└── index.js
├── mall
├── app
│ ├── img
│ │ ├── loginImg.5374531.jpg
│ │ ├── gouwuche_kong@2x.baf12ca.png
│ │ ├── wode_beijin@2x.c09ba58.png
│ │ ├── Sales-volume_High-to-low@2x.1422501.png
│ │ └── Sales-volume_Low-to-high@2x.abeaa0f.png
│ ├── js
│ │ └── manifest.3a0ae9bbcbc6ebd80ec9.js
│ └── reset.css
└── index.html
├── .editorconfig
├── .gitignore
├── .babelrc
├── .postcssrc.js
├── README.md
├── index.html
└── package.json
/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/store/getters.js:
--------------------------------------------------------------------------------
1 | export const loadingState = state => state.loadingState
--------------------------------------------------------------------------------
/src/pages/goods/goodsDetails/private/README.md:
--------------------------------------------------------------------------------
1 | shop.vue (店铺信息组件)
2 |
3 | goodsSpec.vue (规格组件)
--------------------------------------------------------------------------------
/src/pages/home/private/README.md:
--------------------------------------------------------------------------------
1 | goodsClass.vue (商城首页分类组件)
2 |
3 | recommend.vue (商城首页推荐信息组件)
--------------------------------------------------------------------------------
/src/store/state.js:
--------------------------------------------------------------------------------
1 | const state = {
2 | loadingState: false
3 | }
4 | export default state
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/src/assets/icon/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/error.png
--------------------------------------------------------------------------------
/src/assets/icon/man@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/man@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/loading.png
--------------------------------------------------------------------------------
/src/assets/icon/loginImg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/loginImg.jpg
--------------------------------------------------------------------------------
/src/assets/icon/wode1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode1@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/zhibo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/zhibo@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/daohang@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/daohang@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/fenlei@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/fenlei@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/fenxiang@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/fenxiang@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/gouwuche@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/gouwuche@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/jiangefu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/jiangefu@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/paizhao@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/paizhao@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/tongyi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/tongyi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/zhibo1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/zhibo1@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/zuanshi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/zuanshi@2x.png
--------------------------------------------------------------------------------
/mall/app/img/loginImg.5374531.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/mall/app/img/loginImg.5374531.jpg
--------------------------------------------------------------------------------
/src/assets/icon/fanhui-bai@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/fanhui-bai@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/fanhui-hei@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/fanhui-hei@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/gouwuche1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/gouwuche1@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/icon_woman@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/icon_woman@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/shangcheng@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/shangcheng@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/tongyi-hui@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/tongyi-hui@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_dizhi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_dizhi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_xian@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_xian@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/Shopping-Cart@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/Shopping-Cart@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/arrow_yellow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/arrow_yellow@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_shouqi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_shouqi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_sousuo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_sousuo@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/fasongxiaoxi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/fasongxiaoxi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/gouwuche_kong@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/gouwuche_kong@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/shangcheng1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/shangcheng1@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_bangzhu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_bangzhu@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_daifahuo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_daifahuo@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_guanzhu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_guanzhu@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_shezhi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_shezhi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_shoucang@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_shoucang@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_xiaoxi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_xiaoxi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_zhanghao@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_zhanghao@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/xiangzuo-hui@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/xiangzuo-hui@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/zengsongliwu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/zengsongliwu@2x.png
--------------------------------------------------------------------------------
/src/assets/images/wode_beijin@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/images/wode_beijin@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_gendui_1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_gendui_1@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_zhankai@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_zhankai@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/kanzhibo_guanbi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/kanzhibo_guanbi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/shangpinxq-gou@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/shangpinxq-gou@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/shouhou-guanbi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/shouhou-guanbi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_daifukuan@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_daifukuan@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_daipingjia@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_daipingjia@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_daishouhuo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_daishouhuo@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_youhuiquan@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_youhuiquan@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/xiangqing_kefu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/xiangqing_kefu@2x.png
--------------------------------------------------------------------------------
/mall/app/img/gouwuche_kong@2x.baf12ca.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/mall/app/img/gouwuche_kong@2x.baf12ca.png
--------------------------------------------------------------------------------
/mall/app/img/wode_beijin@2x.c09ba58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/mall/app/img/wode_beijin@2x.c09ba58.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_dizhi_bianji@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_dizhi_bianji@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_dizhi_shanchu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_dizhi_shanchu@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_guanyuwomen@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_guanyuwomen@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_tuikuanshou@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_tuikuanshou@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/xiangqing_dianpu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/xiangqing_dianpu@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/xinzendizhi-guanbi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/xinzendizhi-guanbi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_gengduo_kefu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_gengduo_kefu@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dinapu_zhibo_zaixin@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dinapu_zhibo_zaixin@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/fabupingjia_xing_hui@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/fabupingjia_xing_hui@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/kanzhibo_shangpingku@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/kanzhibo_shangpingku@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/querendingdan-dizhi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/querendingdan-dizhi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_chengweimaijia@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_chengweimaijia@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/Sales-volume_unselected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/Sales-volume_unselected@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/To-examine_Success_red@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/To-examine_Success_red@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_gengduo_jianjie@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_gengduo_jianjie@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_gengduo_shouye@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_gengduo_shouye@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dianpu_gengduo_xiaoxi@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dianpu_gengduo_xiaoxi@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dinapu_zhibo_zhuangtai@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dinapu_zhibo_zhuangtai@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/fabupingjia_xing_cheng@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/fabupingjia_xing_cheng@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/wode_dizhi_shezhimoren@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/wode_dizhi_shezhimoren@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/xiangqing_qrdd_caidai@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/xiangqing_qrdd_caidai@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/xiangqing_shoucang_hong@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/xiangqing_shoucang_hong@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/xiangqing_shoucang_hui@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/xiangqing_shoucang_hui@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/Sales-volume_High-to-low@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/Sales-volume_High-to-low@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/Sales-volume_Low-to-high@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/Sales-volume_Low-to-high@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/dinapu_zhibo_zhuangtai_hui@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/dinapu_zhibo_zhuangtai_hui@2x.png
--------------------------------------------------------------------------------
/mall/app/img/Sales-volume_High-to-low@2x.1422501.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/mall/app/img/Sales-volume_High-to-low@2x.1422501.png
--------------------------------------------------------------------------------
/mall/app/img/Sales-volume_Low-to-high@2x.abeaa0f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/mall/app/img/Sales-volume_Low-to-high@2x.abeaa0f.png
--------------------------------------------------------------------------------
/src/assets/icon/querendingdan-wudizhi-tianjia@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/querendingdan-wudizhi-tianjia@2x.png
--------------------------------------------------------------------------------
/src/assets/icon/direct-seeding_play_Button@2x@2x@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/songgl/vue-mall-live/HEAD/src/assets/icon/direct-seeding_play_Button@2x@2x@2x.png
--------------------------------------------------------------------------------
/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/src/store/actions.js:
--------------------------------------------------------------------------------
1 | import * as types from './mutations-types'
2 |
3 | // 设置loadingState
4 | export const setLoading = function ({commit,state}, loadingState) {
5 | commit(types.SET_LOADINGSTATE,loadingState)
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/src/tmp.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
14 |
15 |
18 |
--------------------------------------------------------------------------------
/src/store/mutations.js:
--------------------------------------------------------------------------------
1 | import * as types from './mutations-types'
2 |
3 | const mutations = {
4 | [types.SET_LOADINGSTATE](state,loadingState) {
5 | state.loadingState = loadingState
6 | }
7 | }
8 |
9 | export default mutations
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | /dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Editor directories and files
9 | .idea
10 | .vscode
11 | *.suo
12 | *.ntvs*
13 | *.njsproj
14 | *.sln
15 |
--------------------------------------------------------------------------------
/src/components/README.md:
--------------------------------------------------------------------------------
1 | banner (轮播图组件)
2 |
3 | count (数量加减组件)
4 |
5 | footer (底部导航栏组件)
6 |
7 | goodsItem (商品列表组件)
8 |
9 | header (头部组件)
10 |
11 | loadMord (上拉加载,下拉刷新组件)
12 |
13 | promptModel (提示model)
14 |
15 | addAddress (新增地址)
--------------------------------------------------------------------------------
/src/pages/notfind/notfind.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 404
4 |
5 |
6 |
7 |
14 |
15 |
18 |
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", {
4 | "modules": false
5 | }],
6 | "stage-2"
7 | ],
8 | "plugins": ["transform-runtime"],
9 | "env": {
10 | "test": {
11 | "presets": ["env", "stage-2"] }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | // to edit target browsers: use "browserslist" field in package.json
6 | "postcss-import": {},
7 | "autoprefixer": {}
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-mall
2 |
3 | > A Vue.js project
4 |
5 | ## Build Setup
6 |
7 | ``` bash
8 | # install dependencies
9 | npm install
10 |
11 | # serve with hot reload at localhost:8080
12 | npm run dev
13 |
14 | # build for production with minification
15 | npm run build
16 |
17 | # build for production and view the bundle analyzer report
18 | npm run build --report
19 | ```
20 |
21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
22 |
--------------------------------------------------------------------------------
/src/store/mutations-types.js:
--------------------------------------------------------------------------------
1 | // loading
2 | export const SET_LOADINGSTATE = 'SET_LOADINGSTATE'
3 |
4 | /*
5 | * promptInfo
6 | */
7 | export const SET_PROMPTDATA = 'SET_PROMPTDATA'
8 |
9 | export const SET_PROMPTSTATE = 'SET_PROMPTSTATE'
10 |
11 | /*
12 | * liveRoom
13 | */
14 | export const SET_LIVEINFO = 'SET_LIVEINFO'
15 |
16 | export const SET_LIVEUSERINFO = 'SET_LIVEUSERINFO'
17 |
18 | export const SET_TOPGOODS = 'SET_TOPGOODS'
19 |
20 | export const SET_GIFTNUM = 'SET_GIFTNUM'
21 |
22 | export const SET_PEOPLENUM = 'SET_PEOPLENUM'
23 |
24 | export const SET_ISFOLLOW = 'SET_ISFOLLOW'
--------------------------------------------------------------------------------
/src/pages/liveRoom/private/myVideo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
25 |
26 |
29 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import state from './state'
4 | import * as actions from './actions'
5 | import * as getters from './getters'
6 | import mutations from './mutations'
7 | import prompt from './modules/prompt'
8 | import liveRoom from './modules/liveRoom'
9 | import createLogger from 'vuex/dist/logger'
10 |
11 | Vue.use(Vuex)
12 |
13 | const debug = process.env.NODE_ENV !== 'production'
14 |
15 | export default new Vuex.Store({
16 | state,
17 | getters,
18 | mutations,
19 | actions,
20 | modules: {
21 | prompt,
22 | liveRoom
23 | },
24 | strict: debug,
25 | plugins: debug ? [createLogger()] : []
26 | })
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
23 |
24 |
27 |
--------------------------------------------------------------------------------
/src/store/modules/prompt.js:
--------------------------------------------------------------------------------
1 | import * as types from '../mutations-types'
2 |
3 | const state = {
4 | promptData:{},
5 | promptState:false // 状态
6 | }
7 |
8 | const getters = {
9 | promptData : state => state.promptData,
10 | promptState : state => state.promptState,
11 | }
12 |
13 | const actions = {
14 | // 设置提示文本
15 | setPromptTxt ({commit}, obj) {
16 | commit(types.SET_PROMPTDATA,obj)
17 | },
18 | // 设置提示model状态
19 | setPromptState ({commit}, state){
20 | commit(types.SET_PROMPTSTATE, state)
21 | }
22 | }
23 |
24 | const mutations = {
25 | [types.SET_PROMPTDATA](state,promptData){
26 | state.promptData = promptData
27 | },
28 |
29 | [types.SET_PROMPTSTATE](state,promptState){
30 | state.promptState = promptState
31 | }
32 | }
33 |
34 | export default {
35 | state,
36 | getters,
37 | actions,
38 | mutations
39 | }
--------------------------------------------------------------------------------
/src/components/banner/banner.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
35 |
36 |
39 |
--------------------------------------------------------------------------------
/src/components/header/header.vue:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
20 |
21 |
54 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | vue-mall
7 |
8 |
9 |
10 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/components/count/count.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
-
4 |
5 |
6 |
7 |
+
8 |
9 |
10 |
11 |
44 |
45 |
62 |
--------------------------------------------------------------------------------
/src/pages/live/private/liveClass.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
7 |
8 |
9 |
10 |
11 |
40 |
41 |
64 |
--------------------------------------------------------------------------------
/src/components/promptModel/promptModel.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
29 |
30 |
58 |
--------------------------------------------------------------------------------
/src/pages/home/home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
57 |
--------------------------------------------------------------------------------
/src/pages/home/private/goodsClass.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
38 |
39 |
60 |
--------------------------------------------------------------------------------
/mall/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | vue-mall
7 |
8 |
9 |
10 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/common/storage.js:
--------------------------------------------------------------------------------
1 | /****************
2 | * 封装sessionStorage
3 | * 封装localStorage
4 | ****************/
5 |
6 | const ss = window.sessionStorage
7 | const ls = window.localStorage
8 |
9 | export default {
10 | /*------------- sessionStorage 操作 start -------------*/
11 | // 获取
12 | s_getItem(key) {
13 | try {
14 | return JSON.parse(ss.getItem(key))
15 | } catch (err) {
16 | return null
17 | }
18 | },
19 |
20 | // 设置
21 | s_setItem(key, val) {
22 | ss.setItem(key, JSON.stringify(val))
23 | },
24 |
25 | // 清空所有
26 | s_clear() {
27 | ss.clear()
28 | },
29 |
30 | s_keys() {
31 | return ss.keys()
32 | },
33 |
34 | // 删除
35 | s_removeItem(key) {
36 | ss.removeItem(key)
37 | },
38 | /*------------- sessionStorage 操作 start -------------*/
39 |
40 | /*------------- localStorage 操作 start -------------*/
41 | // 获取
42 | l_getItem(key) {
43 | try {
44 | return JSON.parse(ls.getItem(key))
45 | } catch (err) {
46 | return null
47 | }
48 | },
49 |
50 | // 设置
51 | l_setItem(key, val) {
52 | ls.setItem(key, JSON.stringify(val))
53 | },
54 |
55 | // 清空所有
56 | l_clear() {
57 | ls.clear()
58 | },
59 |
60 | l_keys() {
61 | return ls.keys()
62 | },
63 |
64 | // 删除
65 | l_removeItem(key) {
66 | ls.removeItem(key)
67 | }
68 | /*------------- localStorage 操作 end -------------*/
69 | }
--------------------------------------------------------------------------------
/mall/app/js/manifest.3a0ae9bbcbc6ebd80ec9.js:
--------------------------------------------------------------------------------
1 | !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,a,c){for(var u,i,f,p=0,s=[];p
2 |
12 |
13 |
14 |
23 |
24 |
56 |
--------------------------------------------------------------------------------
/src/pages/shoppingCar/private/invalid.vue:
--------------------------------------------------------------------------------
1 |
2 |
24 |
25 |
26 |
59 |
60 |
63 |
--------------------------------------------------------------------------------
/src/store/modules/liveRoom.js:
--------------------------------------------------------------------------------
1 | import * as types from '../mutations-types'
2 |
3 | const state = {
4 | liveInfo: {}, // 直播间信息
5 | liveUserInfo: [], // 直播间用户信息
6 | topGoods: {}, // 直播间商品列表
7 | giftNum: null, // 直播间礼物数量
8 | peopleNum: null, // 直播间人数
9 | isFollow: null // 关注状态
10 | }
11 |
12 | const getters = {
13 | liveInfo : state => state.liveInfo,
14 | liveUserInfo : state => state.liveUserInfo,
15 | topGoods : state => state.topGoods,
16 | giftNum : state => state.giftNum,
17 | peopleNum : state => state.peopleNum,
18 | isFollow : state => state.isFollow
19 | }
20 |
21 | const actions = {
22 | // 设置直播间信息
23 | setLiveInfo ({commit}, obj) {
24 | commit(types.SET_LIVEINFO,obj)
25 | },
26 | // 设置直播间用户信息
27 | setLiveUserInfo ({commit}, arr) {
28 | commit(types.SET_LIVEUSERINFO, arr)
29 | },
30 | // 设置直播间商品列表
31 | setTopGoods ({commit}, obj) {
32 | commit(types.SET_TOPGOODS, obj)
33 | },
34 | // 设置礼物数量
35 | setGiftNum ({commit}, num){
36 | commit(types.SET_GIFTNUM, num)
37 | },
38 | // 设置直播间人数
39 | setPeopleNum ({commit}, num){
40 | commit(types.SET_PEOPLENUM, num)
41 | },
42 | // 设置关注状态
43 | setIsFollow ({commit}, type){
44 | commit(types.SET_ISFOLLOW, type)
45 | }
46 | }
47 |
48 | const mutations = {
49 | [types.SET_LIVEINFO](state,liveInfo){
50 | state.liveInfo = liveInfo
51 | },
52 |
53 | [types.SET_LIVEUSERINFO](state,liveUserInfo){
54 | state.liveUserInfo = liveUserInfo
55 | },
56 |
57 | [types.SET_TOPGOODS](state,topGoods){
58 | state.topGoods = topGoods
59 | },
60 |
61 | [types.SET_GIFTNUM](state,giftNum){
62 | state.giftNum = giftNum
63 | },
64 |
65 | [types.SET_PEOPLENUM](state,peopleNum){
66 | state.peopleNum = peopleNum
67 | },
68 |
69 | [types.SET_ISFOLLOW](state, type){
70 | state.isFollow = type
71 | }
72 | }
73 |
74 | export default {
75 | state,
76 | getters,
77 | actions,
78 | mutations
79 | }
--------------------------------------------------------------------------------
/src/components/countDown/countDown.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/pages/goods/goodsDetails/private/shop.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
![]()
7 |
8 |
13 |
14 |
关注
15 |
16 |
17 |
23 |
24 |
30 |
31 |
37 |
38 |
39 |
40 | 进入店铺
41 |
42 |
45 |
46 |
47 |
48 |
49 |
54 |
--------------------------------------------------------------------------------
/src/pages/liveRoom/private/inputModel.vue:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
16 |
54 |
55 |
93 |
--------------------------------------------------------------------------------
/src/components/loading/loading.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
23 |
24 |
84 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-mall",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "",
6 | "private": true,
7 | "scripts": {
8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 | "start": "npm run dev",
10 | "build": "node build/build.js"
11 | },
12 | "dependencies": {
13 | "axios": "^0.17.1",
14 | "vue": "^2.5.2",
15 | "vue-awesome-swiper": "^2.6.7",
16 | "vue-lazyload": "^1.1.4",
17 | "vue-router": "^3.0.1",
18 | "vuex": "^3.0.1",
19 | "vux": "^2.7.4"
20 | },
21 | "devDependencies": {
22 | "autoprefixer": "^7.1.2",
23 | "babel-core": "^6.22.1",
24 | "babel-loader": "^7.1.1",
25 | "babel-plugin-transform-runtime": "^6.22.0",
26 | "babel-preset-env": "^1.3.2",
27 | "babel-preset-stage-2": "^6.22.0",
28 | "babel-register": "^6.22.0",
29 | "chalk": "^2.0.1",
30 | "copy-webpack-plugin": "^4.0.1",
31 | "css-loader": "^0.28.0",
32 | "eventsource-polyfill": "^0.9.6",
33 | "extract-text-webpack-plugin": "^3.0.0",
34 | "file-loader": "^1.1.4",
35 | "friendly-errors-webpack-plugin": "^1.6.1",
36 | "html-webpack-plugin": "^2.30.1",
37 | "less": "^2.7.3",
38 | "less-loader": "^4.0.5",
39 | "node-notifier": "^5.1.2",
40 | "optimize-css-assets-webpack-plugin": "^3.2.0",
41 | "ora": "^1.2.0",
42 | "portfinder": "^1.0.13",
43 | "postcss-import": "^11.0.0",
44 | "postcss-loader": "^2.0.8",
45 | "rimraf": "^2.6.0",
46 | "semver": "^5.3.0",
47 | "shelljs": "^0.7.6",
48 | "url-loader": "^0.5.8",
49 | "vue-loader": "^13.3.0",
50 | "vue-style-loader": "^3.0.1",
51 | "vue-template-compiler": "^2.5.2",
52 | "vux-loader": "^1.1.27",
53 | "webpack": "^3.6.0",
54 | "webpack-bundle-analyzer": "^2.9.0",
55 | "webpack-dev-server": "^2.9.1",
56 | "webpack-merge": "^4.1.0"
57 | },
58 | "engines": {
59 | "node": ">= 4.0.0",
60 | "npm": ">= 3.0.0"
61 | },
62 | "browserslist": [
63 | "> 1%",
64 | "last 2 versions",
65 | "not ie <= 8"
66 | ]
67 | }
68 |
--------------------------------------------------------------------------------
/src/pages/order/orderDetails/private/orderState.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
等待小主付款
6 |
7 |
8 | 后未支付,订单将自动关闭
9 |
10 |
11 |
12 |
13 |
等待商家发货
14 |
商家正在积极备货中,请耐心等待
15 |
16 |
17 |
21 |
22 |
23 |
交易成功
24 |
买家已确认收货
25 |
26 |
27 |
31 |
32 |
36 |
37 |
41 |
42 |
43 |
44 |
73 |
74 |
77 |
--------------------------------------------------------------------------------
/src/pages/shoppingCar/private/recommend.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
- 推荐商品 -
10 |
11 |
12 |
13 |
14 |
15 |
![]()
16 |
17 |
18 |
19 |
20 | 现价:¥
21 | ¥
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
68 |
69 |
72 |
--------------------------------------------------------------------------------
/src/pages/home/private/recommend.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
7 |
8 |
9 |
10 |
11 |
![]()
12 |
13 |
14 |
![]()
15 |
16 |
17 |
18 |
![]()
19 |
20 |
21 |
22 |
23 |
24 |
![]()
25 |
26 |
27 |
28 |
29 |
30 |
![]()
31 |
32 |
33 |
34 |
35 |
36 |
![]()
37 |
38 |
39 |
40 |
41 |
42 |
43 |
75 |
--------------------------------------------------------------------------------
/src/components/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
22 |
23 |
24 |
25 |
61 |
--------------------------------------------------------------------------------
/src/common/util.js:
--------------------------------------------------------------------------------
1 | /****************
2 | * 封装vue全局操作方法
3 | ****************/
4 | import store from '../store'
5 |
6 | export default{
7 | install(Vue,options){
8 | /*------------- cookie 操作 start -------------*/
9 | //获取cookie
10 | Vue.prototype.getCookie = function (name) {
11 | let arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
12 | if (arr = document.cookie.match(reg))
13 | return (arr[2]);
14 | else
15 | return null;
16 | }
17 |
18 | //设置cookie
19 | Vue.prototype.setCookie = function (c_name, value, expiredays) {
20 | let exdate = new Date();
21 | exdate.setDate(exdate.getDate() + expiredays);
22 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
23 | }
24 |
25 | //删除cookie
26 | Vue.prototype.removeCookie = function (name) {
27 | let exp = new Date();
28 | exp.setTime(exp.getTime() - 1);
29 | let cval = getCookie(name);
30 | if (cval != null)
31 | document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
32 | }
33 | /*------------- cookie 操作 end -------------*/
34 |
35 | /*------------- 提示操作 start -------------*/
36 | Vue.prompt = function(obj){
37 | store.dispatch('setPromptState', true)
38 | store.dispatch('setPromptTxt', obj)
39 | setTimeout(() => {
40 | store.dispatch('setPromptState', false)
41 | },1500);
42 | }
43 | Vue.prototype.promptFun = function(obj) { // obj(提示文本,类型等)
44 | store.dispatch('setPromptState', true)
45 | store.dispatch('setPromptTxt', obj)
46 | setTimeout(() => {
47 | store.dispatch('setPromptState', false)
48 | },1500);
49 | }
50 | // 提示后返回上一页
51 | Vue.prototype.promptBackFun = function(obj) {
52 | store.dispatch('setPromptState', true)
53 | store.dispatch('setPromptTxt', obj)
54 | setTimeout(() => {
55 | store.dispatch('setPromptState', false)
56 | history.back()
57 | },1500);
58 | }
59 | /*------------- 提示操作 end -------------*/
60 |
61 | // loading 操作
62 | Vue.prototype.setLoading = function (state) {
63 | if(state){
64 | store.dispatch('setLoading', state)
65 | }else{
66 | setTimeout(function() {
67 | store.dispatch('setLoading', state)
68 | }, 800);
69 | }
70 |
71 | }
72 |
73 | //返回上一页
74 | Vue.prototype.backFun = function () {
75 | history.back()
76 | }
77 |
78 | //返回上上一页
79 | Vue.prototype.backTwoFun = function () {
80 | history.go(-2)
81 | }
82 | }
83 | }
--------------------------------------------------------------------------------
/src/pages/author/author.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |

4 |
正在登录,请稍后...
5 |
6 |
7 |
8 |
64 |
65 |
86 |
--------------------------------------------------------------------------------
/src/components/goodsItem/goodsItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
![]()
5 |
6 |
7 |
10 |
11 |
12 | 现价:¥
13 | x
14 |
15 |
原价:¥
16 |
17 | 立即购买
18 |
19 |
20 |
21 |
35 |
36 |
102 |
--------------------------------------------------------------------------------
/src/api/config.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import axios from 'axios'
3 | import qs from 'qs'
4 |
5 | let url = location.href.split(".com")[0] + '.com/'
6 | // axios 配置
7 | axios.defaults.baseURL = 'http://dspx.tstmobile.com/'
8 | axios.defaults.withCredentials = false
9 | axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
10 |
11 | // 请求时的拦截
12 | axios.interceptors.request.use(function (config) {
13 | return config;
14 | }, function (error) { // 当请求异常时做一些处理
15 | Vue.prompt({
16 | content: '错误的传参',
17 | type: 'error'
18 | })
19 | return Promise.reject(error);
20 | });
21 |
22 | // 响应时拦截
23 | axios.interceptors.response.use((res) => {
24 | if(res.data.status === 'pending') {
25 | Vue.loginInvalid() // 调用登录失效的方法
26 | }
27 | return res;
28 | },(err) => { // 当响应异常时做一些处理
29 | if (err && err.response) {
30 | switch (err.response.status) {
31 | case 400:
32 | err.message = '请求错误'
33 | break
34 |
35 | case 401:
36 | err.message = '未授权,请登录'
37 | break
38 |
39 | case 403:
40 | err.message = '拒绝访问'
41 | break
42 |
43 | case 404:
44 | err.message = `请求地址出错: ${err.response.config.url}`
45 | break
46 |
47 | case 408:
48 | err.message = '请求超时'
49 | break
50 |
51 | case 500:
52 | err.message = '服务器内部错误'
53 | break
54 |
55 | case 501:
56 | err.message = '服务未实现'
57 | break
58 |
59 | case 502:
60 | err.message = '网关错误'
61 | break
62 |
63 | case 503:
64 | err.message = '服务不可用'
65 | break
66 |
67 | case 504:
68 | err.message = '网关超时'
69 | break
70 |
71 | case 505:
72 | err.message = 'HTTP版本不受支持'
73 | break
74 |
75 | default:
76 | }
77 | }
78 | Vue.prompt({
79 | content: err.message,
80 | type: 'error'
81 | })
82 | return Promise.reject(err);
83 | });
84 |
85 | // 封装post
86 | export function post(url, params) {
87 | return new Promise((resolve, reject) => {
88 | axios.post(url, qs.stringify(params)) // 将参数序列化
89 | .then(res => {
90 | resolve(res.data);
91 | }, err => {
92 | reject(err);
93 | })
94 | .catch((error) => {
95 | reject(error)
96 | })
97 | })
98 | }
99 |
100 | // 封装get方法
101 | export function get(url){
102 | return new Promise((resolve,reject) => {
103 | axios.get(url)
104 | .then(response => {
105 | resolve(response.data);
106 | })
107 | .catch(err => {
108 | reject(err)
109 | })
110 | })
111 | }
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue'
4 | import App from './App'
5 | import router from './router'
6 | import store from './store'
7 | import VueLazyload from 'vue-lazyload'
8 | import util from './common/util'
9 | import storage from './common/storage'
10 |
11 | import errorImg from './assets/icon/error.png'
12 | import loadingImg from './assets/icon/loading.png'
13 |
14 | Vue.config.productionTip = false
15 |
16 | // 公用操作方法插件
17 | Vue.use(util);
18 |
19 | // 图片懒加载
20 | Vue.use(VueLazyload, {
21 | error: errorImg, // 图片路径错误时加载图片
22 | loading: loadingImg // 预加载图片
23 | })
24 |
25 | // 实现登录后跳转方法
26 | Vue.prototype.goBeforeLoginUrl = () => {
27 | let url = storage.s_getItem('beforeLoginUrl')
28 | if(!url || url.indexOf('/author') != -1){
29 | router.push('/home')
30 | }else{
31 | if(url == '/'){
32 | url = '/home'
33 | }
34 | router.push(url)
35 | storage.s_setItem('beforeLoginUrl', '')
36 | }
37 | }
38 |
39 | // 登录失效方法
40 | Vue.loginInvalid = () => {
41 | storage.s_clear() // 清空所有sessionStorage
42 | storage.s_setItem('beforeLoginUrl',router.history.current.path) // 保存用户进入的url
43 | router.push('/author')
44 | return false
45 | }
46 |
47 | /*
48 | * 路由钩子函数
49 | * url进入网站都会先触发router.beforeEach钩子
50 | */
51 | router.beforeEach((to, from, next) => {
52 | if(to.path == '/author' && storage.s_getItem('uid') && storage.s_getItem('token')){
53 | // 用户使用后退返回到授权页,则默认回到首页
54 | next('/home')
55 | return false
56 | }
57 | /*
58 | * 判断sessionStorage里有没有用户信息
59 | * 并且是否是微信授权页
60 | */
61 | if(!storage.s_getItem('uid') && !storage.s_getItem('token') && to.path !='/author'){
62 | storage.s_setItem('beforeLoginUrl', to.fullPath) // 保存用户进入的url
63 | next('/author') // 进入到微信授权页
64 | return false
65 | }else {
66 | next()
67 | }
68 | })
69 |
70 | // 判断数组中有没有某个属性
71 | Array.prototype.contains = function(obj) {
72 | console.log(this);
73 | for (var i = 0; i < this.length + 1; i++) {
74 | if (this[i] == obj) {
75 | return true;
76 | }
77 | }
78 | return false;
79 | }
80 |
81 | /**
82 | * 删除数组指定下标或指定对象
83 | **/
84 | Array.prototype.remove=function(obj){
85 | for(var i =0;i ',
106 | components: { App }
107 | })
108 |
--------------------------------------------------------------------------------
/src/pages/order/confirmOrder/private/confirm_address.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 | 收货地址:
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
82 |
83 |
99 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 |
4 | import notFind from '@/pages/notfind/notfind'
5 | import Author from '@/pages/author/author'
6 |
7 | import Home from '@/pages/home/home'
8 | import Live from '@/pages/live/live'
9 | import ShoppingCar from '@/pages/shoppingCar/shoppingCar'
10 | import Me from '@/pages/me/me'
11 |
12 | import LiveRoom from '@/pages/liveRoom/liveRoom'
13 |
14 | import GoodsList from '@/pages/goods/goodsList/goodsList'
15 | import GoodsDetails from '@/pages/goods/goodsDetails/goodsDetails'
16 | import ShopDetails from '@/pages/shop/shopDetails/shopDetails'
17 |
18 | import ConfirmOrder from '@/pages/order/confirmOrder/confirmOrder'
19 | import OrderList from '@/pages/order/orderList/orderList'
20 | import OrderDetails from '@/pages/order/orderDetails/orderDetails'
21 |
22 | import UserDetails from '@/pages/userDetails/userDetails'
23 | import MyAddress from '@/pages/myAddress/myAddress'
24 |
25 | Vue.use(Router)
26 |
27 | export default new Router({
28 | // mode: 'history',
29 | routes: [
30 | {
31 | path: '*',
32 | meta: {
33 | title: '404',
34 | },
35 | component: notFind
36 | },{
37 | path: '/author', // 微信授权登录页
38 | name: 'author',
39 | component: Author
40 | },{
41 | path: '/',
42 | redirect: "/home", // 重定向
43 | name: '/',
44 | component: Home
45 | },{
46 | path: '/home',
47 | name: 'home',
48 | component: Home
49 | },{
50 | path: '/live', // 直播首页
51 | name: 'live',
52 | component: Live
53 | },{
54 | path: '/shoppingCar', // 购物车
55 | name: 'shoppingCar',
56 | component: ShoppingCar
57 | },{
58 | path: '/me', // 个人中心
59 | name: 'me',
60 | component: Me
61 | },{
62 | path: '/liveRoom', // 直播间
63 | name: 'liveRoom',
64 | component: LiveRoom
65 | },{
66 | path: '/goodsList', // 商品列表
67 | name: 'goodsList',
68 | component: GoodsList
69 | },{
70 | path: '/goodsDetails', // 商品详情
71 | name: 'goodsDetails',
72 | component: GoodsDetails
73 | },{
74 | path: '/shopDetails', // 店铺详情
75 | name: 'shopDetails',
76 | component: ShopDetails
77 | },{
78 | path: '/confirmOrder', // 确认订单
79 | name: 'confirmOrder',
80 | component: ConfirmOrder
81 | },{
82 | path: '/orderList', // 订单列表
83 | name: 'orderList',
84 | component: OrderList
85 | },{
86 | path: '/orderDetails', // 订单详情
87 | name: 'orderDetails',
88 | component: OrderDetails
89 | },{
90 | path: '/userDetails', // 个人信息
91 | name: 'userDetails',
92 | component: UserDetails
93 | },{
94 | path: '/myAddress', // 我的地址列表
95 | name: 'myAddress',
96 | component: MyAddress
97 | }
98 | ]
99 | })
100 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | // Template version: 1.2.3
3 | // see http://vuejs-templates.github.io/webpack for documentation.
4 |
5 | const path = require('path')
6 |
7 | module.exports = {
8 | dev: {
9 |
10 | // Paths
11 | assetsSubDirectory: 'static',
12 | assetsPublicPath: '/',
13 | proxyTable: {
14 | // '/api': {
15 | // target: 'http://dspx.tstmobile.com',
16 | // changeOrigin: true,
17 | // }
18 | },
19 |
20 | // Various Dev Server settings
21 | host: 'localhost', // can be overwritten by process.env.HOST
22 | port: 8080, // can be overwritten by process.env.HOST, if port is in use, a free one will be determined
23 | autoOpenBrowser: false,
24 | errorOverlay: true,
25 | notifyOnErrors: true,
26 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
27 |
28 | // Use Eslint Loader?
29 | // If true, your code will be linted during bundling and
30 | // linting errors and warnings will be shown in the console.
31 | useEslint: true,
32 | // If true, eslint errors and warnings will also be shown in the error overlay
33 | // in the browser.
34 | showEslintErrorsInOverlay: false,
35 |
36 | /**
37 | * Source Maps
38 | */
39 |
40 | // https://webpack.js.org/configuration/devtool/#development
41 | devtool: 'eval-source-map',
42 |
43 | // If you have problems debugging vue-files in devtools,
44 | // set this to false - it *may* help
45 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
46 | cacheBusting: true,
47 |
48 | // CSS Sourcemaps off by default because relative paths are "buggy"
49 | // with this option, according to the CSS-Loader README
50 | // (https://github.com/webpack/css-loader#sourcemaps)
51 | // In our experience, they generally work as expected,
52 | // just be aware of this issue when enabling this option.
53 | cssSourceMap: false,
54 | },
55 |
56 | build: {
57 | // Template for index.html
58 | index: path.resolve(__dirname, '../mall/index.html'),
59 |
60 | // Paths
61 | assetsRoot: path.resolve(__dirname, '../mall'),
62 | assetsSubDirectory: 'app',
63 | assetsPublicPath: './',
64 |
65 | /**
66 | * Source Maps
67 | */
68 |
69 | productionSourceMap: true,
70 | // https://webpack.js.org/configuration/devtool/#production
71 | devtool: '#source-map',
72 |
73 | // Gzip off by default as many popular static hosts such as
74 | // Surge or Netlify already gzip all static assets for you.
75 | // Before setting to `true`, make sure to:
76 | // npm install --save-dev compression-webpack-plugin
77 | productionGzip: false,
78 | productionGzipExtensions: ['js', 'css'],
79 |
80 | // Run the build command with an extra argument to
81 | // View the bundle analyzer report after build finishes:
82 | // `npm run build --report`
83 | // Set to `true` or `false` to always turn it on or off
84 | bundleAnalyzerReport: process.env.npm_config_report
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/src/pages/liveRoom/private/liveTop.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
![]()
8 |
9 |
13 |
14 |
15 |
16 |
17 |
![]()
18 |
19 |
20 |
21 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
69 |
70 |
123 |
--------------------------------------------------------------------------------
/src/api/live.js:
--------------------------------------------------------------------------------
1 | import { post, get } from './config'
2 | import storage from '../common/storage'
3 |
4 | export default {
5 | // 获取直播分类
6 | getLiveClass () {
7 | return get('api/live/live_class')
8 | },
9 |
10 | // 获取直播列表
11 | getLiveList (type,p) {
12 | return post(
13 | 'api/live/anchor_list',
14 | {
15 | uid : storage.s_getItem("uid"),
16 | token : storage.s_getItem("token"),
17 | p,
18 | type
19 | }
20 | )
21 | },
22 | // 进入/退出直播间
23 | intoLiveRoom (live_id) {
24 | return post(
25 | 'api/live/into_live',
26 | {
27 | uid : storage.s_getItem("uid"),
28 | token : storage.s_getItem("token"),
29 | live_id
30 | }
31 | )
32 | },
33 | // 退出直播间
34 | outLiveRoom (live_id) {
35 | return post(
36 | 'api/live/into_live',
37 | {
38 | uid : storage.s_getItem("uid"),
39 | token : storage.s_getItem("token"),
40 | live_id
41 | }
42 | )
43 | },
44 | // 获取直播信息
45 | getLiveInfo (live_id) {
46 | return post(
47 | 'api/live/live_info',
48 | {
49 | live_id
50 | }
51 | )
52 | },
53 | // 获取主播信息
54 | getAnchorInfo (live_id,user_id){
55 | return post(
56 | 'api/live/get_live_info',
57 | {
58 | uid : storage.s_getItem("uid"),
59 | token : storage.s_getItem("token"),
60 | live_id,
61 | user_id
62 | }
63 | )
64 | },
65 | // 直播间用户列表
66 | getRoomUser (live_id) {
67 | return post(
68 | 'api/live/show_viewer',
69 | {
70 | uid : storage.s_getItem("uid"),
71 | token : storage.s_getItem("token"),
72 | page: 1,
73 | pagesize: 5,
74 | live_id
75 | }
76 | )
77 | },
78 | // 关注与取消关注
79 | isFollow (user_id2,type) {
80 | return post(
81 | 'api/live/follow',
82 | {
83 | uid : storage.s_getItem("uid"),
84 | token : storage.s_getItem("token"),
85 | user_id2,
86 | type
87 | }
88 | )
89 | },
90 | // 获取直播商品列表
91 | getLiveGoods (live_id) {
92 | return post(
93 | 'api/merchant/live_goods',
94 | {
95 | uid : storage.s_getItem("uid"),
96 | token : storage.s_getItem("token"),
97 | live_id
98 | }
99 | )
100 | },
101 | // 用户的余额
102 | getUserMoney () {
103 | return post(
104 | 'api/live/get_money',
105 | {
106 | uid : storage.s_getItem("uid"),
107 | token : storage.s_getItem("token")
108 | }
109 | )
110 | },
111 | // 获取礼物列表
112 | getGift () {
113 | return post(
114 | 'api/live/gift_list',
115 | {
116 | uid : storage.s_getItem("uid"),
117 | token : storage.s_getItem("token")
118 | }
119 | )
120 | },
121 | // 主播收到的礼物数量
122 | getGiftCount (user_id) {
123 | return post(
124 | 'api/live/get_get_money',
125 | {
126 | uid : storage.s_getItem("uid"),
127 | token : storage.s_getItem("token"),
128 | user_id
129 | }
130 | )
131 | },
132 | // 送礼
133 | sendGift (data) {
134 | return post(
135 | 'api/live/give_gift',
136 | {
137 | uid : storage.s_getItem("uid"),
138 | token : storage.s_getItem("token"),
139 | ...data
140 | }
141 | )
142 | }
143 | }
--------------------------------------------------------------------------------
/src/pages/me/me.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
19 |
20 |
21 |
![]()
22 |
23 |
31 |
32 |
33 |
34 |

35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
108 |
--------------------------------------------------------------------------------
/mall/app/reset.css:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | /*****************************************
3 | * @Author: Song
4 | * @Date: 2017-04-11
5 | * @Last Modified by: Song
6 | * @Last Modified time: 2017-04-11
7 | ********************************************/
8 | *{
9 | -webkit-box-sizing: border-box;
10 | -moz-box-sizing: border-box;
11 | -ms-box-sizing: border-box;
12 | box-sizing: border-box;
13 | }
14 |
15 | html{
16 | font-family: sans-serif;
17 | -webkit-text-size-adjust:100%;
18 | -ms-text-size-adjust:100%
19 | }
20 |
21 | html,body{
22 | position: relative;
23 | width: 100%;
24 | height: 100%;
25 | }
26 | body{background:#eef3f5;}
27 | html,body,h1,h2,h3,h4,h5,h6,hr,p,iframe,
28 | dl,dt,dd,ul,ol,li,pre,form,button,input,
29 | textarea,th,td,fieldset{margin:0;padding:0}
30 | ul,ol,dl{list-style-type:none}
31 |
32 | address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:400}
33 | input,button,textarea,select,optgroup,
34 | option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit}
35 | input,button{overflow: visible;vertical-align:middle;outline:none}
36 | button,input{border:none;}
37 | body,th,td,button,input,select,
38 | textarea{color: #333;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing:grayscale}
39 | body{margin: auto;}
40 | th,td,button,input,
41 | select,textarea{font-family:"Microsoft Yahei","Hiragino Sans GB","Helvetica Neue",Helvetica,tahoma,arial,Verdana,sans-serif,"WenQuanYi Micro Hei","\5B8B\4F53";}
42 | div,p{word-wrap:break-word}
43 | a,area{outline:none;blr:expression(this.onFocus=this.blur())}
44 | a{text-decoration:none;cursor: pointer;color: #333}
45 | a:hover{text-decoration:underline;outline:none;}
46 | a:focus{outline:none}
47 | a:hover,a:active{outline:none;text-decoration: none;}:focus{outline:none}
48 | sub,sup{vertical-align:baseline}
49 | /*button,input[type="button"], input[type="submit"] {line-height:normal!important;}*/
50 | input:focus{border: none;}
51 | img{border:0;width: 100%;height: 100%;}
52 | a img,img{-ms-interpolation-mode:bicubic}
53 | *html{overflow:-moz-scrollbars-vertical;zoom:expression(function(ele){ele.style.zoom = "1";document.execCommand("BackgroundImageCache",false,true)}(this))}
54 | /*HTML5 reset*/
55 | header,footer,section,aside,details,
56 | menu,article,section,nav,address,
57 | hgroup,figure,figcaption,legend{display:block;margin:0;padding:0}
58 | time{display:inline}
59 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1}
60 | audio:not([controls]){display:none}
61 | legend{width:100%;margin-bottom:20px;font-size:21px;line-height:40px;border:0;border-bottom:1px solid #e5e5e5}
62 | legend small{font-size:15px;color:#999}
63 | svg:not(:root){overflow: hidden}
64 | fieldset {border-width:0;padding: 0.35em 0.625em 0.75em;margin: 0 2px;border: 1px solid #c0c0c0}
65 | input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button {height: auto}
66 | input[type="search"] {-webkit-appearance: textfield; /* 1 */-moz-box-sizing: content-box;-webkit-box-sizing: content-box; /* 2 */box-sizing: content-box}
67 | input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration {-webkit-appearance: none}
68 | input::-ms-clear{display: none;}
69 | textarea{resize: none;}
70 | /*去掉苹果对textarea的默认样式*/
71 | textarea ,input{/*-webkit-appearance: none;*/border-radius:0px;font-family:Microsoft YaHei}
72 | /*清除a,button,input手机端的点击效果*/
73 | a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0);}
74 | /*将设备自动添加的播放按钮隐藏*/
75 | video::-webkit-media-controls {
76 | display:none !important;
77 | }
78 | video{width: 100%;height: 100%;background:#000;}
79 |
80 |
--------------------------------------------------------------------------------
/static/reset.css:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | /*****************************************
3 | * @Author: Song
4 | * @Date: 2017-04-11
5 | * @Last Modified by: Song
6 | * @Last Modified time: 2017-04-11
7 | ********************************************/
8 | *{
9 | -webkit-box-sizing: border-box;
10 | -moz-box-sizing: border-box;
11 | -ms-box-sizing: border-box;
12 | box-sizing: border-box;
13 | }
14 |
15 | html{
16 | font-family: sans-serif;
17 | -webkit-text-size-adjust:100%;
18 | -ms-text-size-adjust:100%
19 | }
20 |
21 | html,body{
22 | position: relative;
23 | width: 100%;
24 | height: 100%;
25 | }
26 | body{background:#eef3f5;}
27 | html,body,h1,h2,h3,h4,h5,h6,hr,p,iframe,
28 | dl,dt,dd,ul,ol,li,pre,form,button,input,
29 | textarea,th,td,fieldset{margin:0;padding:0}
30 | ul,ol,dl{list-style-type:none}
31 |
32 | address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:400}
33 | input,button,textarea,select,optgroup,
34 | option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit}
35 | input,button{overflow: visible;vertical-align:middle;outline:none}
36 | button,input{border:none;}
37 | body,th,td,button,input,select,
38 | textarea{color: #333;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing:grayscale}
39 | body{margin: auto;}
40 | th,td,button,input,
41 | select,textarea{font-family:"Microsoft Yahei","Hiragino Sans GB","Helvetica Neue",Helvetica,tahoma,arial,Verdana,sans-serif,"WenQuanYi Micro Hei","\5B8B\4F53";}
42 | div,p{word-wrap:break-word}
43 | a,area{outline:none;blr:expression(this.onFocus=this.blur())}
44 | a{text-decoration:none;cursor: pointer;color: #333}
45 | a:hover{text-decoration:underline;outline:none;}
46 | a:focus{outline:none}
47 | a:hover,a:active{outline:none;text-decoration: none;}:focus{outline:none}
48 | sub,sup{vertical-align:baseline}
49 | /*button,input[type="button"], input[type="submit"] {line-height:normal!important;}*/
50 | input:focus{border: none;}
51 | img{border:0;width: 100%;height: 100%;}
52 | a img,img{-ms-interpolation-mode:bicubic}
53 | *html{overflow:-moz-scrollbars-vertical;zoom:expression(function(ele){ele.style.zoom = "1";document.execCommand("BackgroundImageCache",false,true)}(this))}
54 | /*HTML5 reset*/
55 | header,footer,section,aside,details,
56 | menu,article,section,nav,address,
57 | hgroup,figure,figcaption,legend{display:block;margin:0;padding:0}
58 | time{display:inline}
59 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1}
60 | audio:not([controls]){display:none}
61 | legend{width:100%;margin-bottom:20px;font-size:21px;line-height:40px;border:0;border-bottom:1px solid #e5e5e5}
62 | legend small{font-size:15px;color:#999}
63 | svg:not(:root){overflow: hidden}
64 | fieldset {border-width:0;padding: 0.35em 0.625em 0.75em;margin: 0 2px;border: 1px solid #c0c0c0}
65 | input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button {height: auto}
66 | input[type="search"] {-webkit-appearance: textfield; /* 1 */-moz-box-sizing: content-box;-webkit-box-sizing: content-box; /* 2 */box-sizing: content-box}
67 | input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration {-webkit-appearance: none}
68 | input::-ms-clear{display: none;}
69 | textarea{resize: none;}
70 | /*去掉苹果对textarea的默认样式*/
71 | textarea ,input{/*-webkit-appearance: none;*/border-radius:0px;font-family:Microsoft YaHei}
72 | /*清除a,button,input手机端的点击效果*/
73 | a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0);}
74 | /*将设备自动添加的播放按钮隐藏*/
75 | video::-webkit-media-controls {
76 | display:none !important;
77 | }
78 | video{width: 100%;height: 100%;background:#000;}
79 |
80 |
--------------------------------------------------------------------------------
/src/pages/shop/shopDetails/shopDetails.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
15 |
16 |
17 |
![]()
18 |
19 |
23 |
24 |
25 |
26 |
27 |

28 |
29 |
30 |
31 |
32 | 全部商品
33 |
34 |
35 | 直播&回放
36 |
37 |
38 | 导购视频
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
91 |
92 |
106 |
--------------------------------------------------------------------------------
/src/pages/liveRoom/private/liveGoods.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 |
12 |
![]()
13 |
14 |
15 |
18 |
现价:¥
19 |
原价:¥
20 |
21 | 立即购买
22 |
23 |
24 |
25 |
26 |
27 |
28 |
69 |
70 |
144 |
--------------------------------------------------------------------------------
/src/pages/me/private/meItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
14 |
15 |
16 |
20 |
21 |
22 |
26 |
27 |
28 |
32 |
33 |
34 |
38 |
39 |
40 |
44 |
45 |
46 |
50 |
51 |
52 |
56 |
57 |
58 |
59 |
60 |
103 |
--------------------------------------------------------------------------------
/src/assets/css/main.css:
--------------------------------------------------------------------------------
1 |
2 | @charset "utf-8";
3 | /*****************************************
4 | * @Author: StoryPeanut
5 | * @Date: 2017-11-08
6 | * @Last Modified by: StoryPeanut
7 | * @Last Modified time: 2017-11-08
8 | ********************************************/
9 | body{font-size: 0.2rem;background:#eef3f5;}
10 |
11 | .pageBox {
12 | width: 100%;
13 | height: 100%;
14 | overflow: hidden;
15 | display: flex;
16 | flex-direction: column;
17 | position: relative;
18 | }
19 | .box_touch{
20 | -webkit-overflow-scrolling: touch;
21 | z-index: 1;
22 | overflow: auto;
23 | overflow-x: hidden;
24 | flex: 1;
25 | position: relative;
26 | }
27 |
28 | .nav_act { border-bottom: 0.04rem solid red }
29 |
30 | /* 公用icon */
31 | .left_white_icon { background: url(../icon/fanhui-bai@2x.png) no-repeat center; background-size: cover; }
32 | .left_icon { background: url(../icon/fanhui-hei@2x.png) no-repeat center; background-size: cover; }
33 | .right_icon { background: url(../icon/xiangzuo-hui@2x.png) no-repeat center;background-size: cover; }
34 | .msg_white_icon { background: url(../icon/wode_xiaoxi@2x.png) no-repeat center;background-size: cover; }
35 | .man_icon { background: url(../icon/man@2x.png) no-repeat center;background-size: cover; }
36 | .woman_icon { background: url(../icon/icon_woman@2x.png) no-repeat center;background-size: cover; }
37 | .check_icon{background:url(../icon/tongyi-hui@2x.png) no-repeat center;background-size: cover;}
38 | .check_act_icon{background:url(../icon/tongyi@2x.png) no-repeat center;background-size: cover;}
39 | .cart_white_icon { background: url(../icon/Shopping-Cart@2x.png) no-repeat center;background-size: cover; }
40 | .address_icon { background: url(../icon/querendingdan-dizhi@2x.png) no-repeat center;background-size: cover; }
41 | .colour_line_icon { background: url(../icon/xiangqing_qrdd_caidai@2x.png) no-repeat center;background-size: cover; }
42 | .search_white_icon {background: url(../icon/dianpu_sousuo@2x.png) no-repeat center;background-size: cover;}
43 | .play_icon { background: url(../icon/direct-seeding_play_Button@2x@2x@2x.png) no-repeat center;background-size: cover; }
44 | .diamonds_icon { background: url(../icon/zuanshi@2x.png) no-repeat center; background-size: cover; }
45 |
46 | /*商品详情*/
47 | .ensure_icon { background: url(../icon/To-examine_Success_red@2x.png) no-repeat center;background-size: cover; }
48 | .close_red_icon { background: url(../icon/shouhou-guanbi@2x.png) no-repeat center; background-size: cover; }
49 | .close_gray_icon { background: url(../icon/xinzendizhi-guanbi@2x.png) no-repeat center;background-size: cover; }
50 | .specItem_act { color: #fff;background:red; }
51 | .kf_icon { background: url(../icon/xiangqing_kefu@2x.png) no-repeat center;background-size: cover; }
52 | .shop_icon { background: url(../icon/xiangqing_dianpu@2x.png) no-repeat center;background-size: cover; }
53 | .collection_icon { background: url(../icon/xiangqing_shoucang_hui@2x.png) no-repeat center;background-size: cover; }
54 | .collection_act_icon { background: url(../icon/xiangqing_shoucang_hong@2x.png) no-repeat center;background-size: cover; }
55 |
56 | /*物流*/
57 | .logisticsLi{top:0;left: -0.46rem;}
58 |
59 | /* flex */
60 | .box{
61 | display: flex;
62 | }
63 | .box_start{
64 | display: flex;
65 | justify-content: flex-start;
66 | align-items: center;
67 | }
68 | .box_center{
69 | display: flex;
70 | justify-content: center;
71 | align-items: center;
72 | }
73 | .box_between{
74 | display: flex;
75 | justify-content: space-between;
76 | align-items: center;
77 | }
78 | .box_arou{
79 | display: flex;
80 | justify-content: space-around;
81 | align-items: center;
82 | }
83 | .box_end{
84 | display: flex;
85 | justify-content: flex-end;
86 | align-items: center;
87 | }
88 | /*纵向布局*/
89 | .box_direction{
90 | display: flex;
91 | flex-direction: column;
92 | }
93 | .media{
94 | display: flex;
95 | align-items: flex-start;
96 | }
97 | /*项目排不下会换行*/
98 | .flex_wrap{
99 | flex-wrap: wrap;
100 | }
101 | .grid_cell {
102 | flex: 1;
103 | }
104 | .grid_cell2{
105 | flex: 2;
106 | }
107 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/src/pages/order/orderOperate/orderOperate.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
联系商家
4 |
查看物流
5 |
删除订单
6 |
取消订单
7 |
退款
8 |
9 |
确认收货
10 |
继续支付
11 |
催单
12 |
评价
13 |
14 |
15 |
16 |
112 |
113 |
143 |
--------------------------------------------------------------------------------
/src/pages/goods/goodsList/goodsList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
108 |
109 |
142 |
--------------------------------------------------------------------------------
/src/pages/liveRoom/private/gift.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 数量:
26 |
27 |
28 |
发送
29 |
30 |
31 |
32 |
33 |
34 |
35 |
116 |
117 |
185 |
--------------------------------------------------------------------------------
/src/pages/myAddress/myAddress.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 | 寄送地址:
14 |
15 |
16 |
17 |
18 |
19 |
20 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
112 |
113 |
163 |
--------------------------------------------------------------------------------
/src/pages/order/orderDetails/orderDetails.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 | 收货地址:
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
![]()
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
![]()
38 |
39 |
47 |
48 |
49 | 申请售后
50 |
51 |
退款中
52 |
53 |
54 |
55 |
62 |
63 | 实际支付:¥
64 |
65 |
66 |
订单编号:
67 |
创建时间:
68 |
支付时间:
69 |
发货时间:
70 |
收货时间:
71 |
72 |
73 |
74 |
75 |
76 |
77 |
117 |
118 |
121 |
--------------------------------------------------------------------------------
/src/pages/me/private/orderTab.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
18 |
25 |
32 |
40 |
41 |
42 |
43 |
44 | 退款售后
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
77 |
78 |
171 |
--------------------------------------------------------------------------------
/src/components/addAddress/addAddress.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
收货人
13 |
14 |
15 |
16 |
17 |
18 |
联系电话
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
详细地址
28 |
29 |
30 |
31 |
32 |
33 |
邮政编码
34 |
35 |
36 |
37 |
38 |
39 |
确定
40 |
41 |
42 |
43 |
44 |
137 |
138 |
175 |
--------------------------------------------------------------------------------
/src/pages/order/orderList/orderList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
全部
8 |
待付款
9 |
待发货
10 |
待收货
11 |
待评价
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
![]()
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
![]()
35 |
36 |
37 |
40 |
41 |
¥
42 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
137 |
--------------------------------------------------------------------------------
/src/pages/userDetails/userDetails.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
15 |
19 |
20 |
昵称
21 |
22 |
23 |
24 |
25 |
26 |
性别
27 |
28 |
29 |
33 |
34 |
35 |
36 |
37 |
38 | 签名
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
131 |
132 |
209 |
--------------------------------------------------------------------------------
/src/pages/goods/goodsDetails/private/goodsSpec.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
13 |
14 |
![]()
15 |
16 |
17 |
18 |
19 |
27 |
31 |
32 |
确定
33 |
{{data.specification_stock==0 ? '库存不足' : !data.specification_names ? '请选择规格' : '确定'}}
34 |
35 |
36 |
37 |
38 |
155 |
--------------------------------------------------------------------------------
/src/pages/liveRoom/liveRoom.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
![]()
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
168 |
169 |
224 |
--------------------------------------------------------------------------------
/src/pages/order/confirmOrder/confirmOrder.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
![]()
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
25 |
26 |
买家留言:
27 |
28 |
29 |
30 |
31 |
32 | 共
33 | 件商品 小计:
34 | ¥
35 |
36 |
37 |
38 |
39 |
40 |
41 |
总计:¥
42 |
提交订单
43 |
正在提交...
44 |
45 |
46 |
47 |
48 |
186 |
187 |
190 |
--------------------------------------------------------------------------------
/src/pages/goods/goodsDetails/goodsDetails.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 现价:¥
14 | 原价:¥
15 |
16 |
17 |
库存:
18 |
已售:
19 |
20 |
21 |
22 |
23 |
37 |
38 |
39 |
40 |
41 |
42 |
- 商品详情 -
43 |
44 |
45 |
46 |
47 |
48 |
54 |
55 |
56 |
57 |
58 | 店铺
59 |
60 |
61 |
62 |
68 |
69 |
70 |
加入购物车
71 |
立即购买
72 |
73 |
74 |
75 |
76 |
87 |
88 |
89 |
90 |
91 |
92 |
181 |
--------------------------------------------------------------------------------
/src/pages/live/live.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
20 |
21 |
22 |
23 |
24 |
29 |
37 |
38 |
![]()
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
144 |
145 |
223 |
--------------------------------------------------------------------------------
/src/components/loadMord/loadMord.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 下拉更新
7 | 松开刷新数据
8 | 加载中……
9 |
10 |
11 |
12 |
13 |
14 |
21 |
22 |
23 |
24 |
25 |
182 |
--------------------------------------------------------------------------------
/src/api/api.js:
--------------------------------------------------------------------------------
1 | import { post, get } from './config'
2 | import storage from '../common/storage'
3 |
4 | export default {
5 | // 获取用户信息
6 | getUserInfo (params) {
7 | return post('api/user/user_info', {
8 | uid: storage.s_getItem('uid'),
9 | token: storage.s_getItem('token')
10 | })
11 | },
12 |
13 | /*
14 | * 上传图片
15 | * 单张
16 | */
17 | upImg (e) {
18 | var self = this
19 | let file = e.target.files[0]
20 | let param = new FormData() // 创建form对象
21 | param.append('file', file, file.name) // 通过append向form对象添加数据
22 | param.append('chunk', '0') // 添加form表单中其他数据
23 | // console.log(param.get('file')) // FormData私有类对象,访问不到,可以通过get判断值是否传进去
24 | return axios.post(
25 | 'api/login/upload',
26 | param,
27 | {headers: {'Content-Type': 'multipart/form-data'}}
28 | ).then((res) => {
29 | return Promise.resolve(res.data)
30 | })
31 | },
32 |
33 | // 获取banner图
34 | getBannerFun (type) {
35 | return post(
36 | 'api/index/banner_list',
37 | {
38 | type
39 | }
40 | )
41 | },
42 | /*--------------- home start --------------*/
43 | // 获取商品分类
44 | getGoodsClassFun () {
45 | return get('api/Home/home_class')
46 | },
47 |
48 | // 获取首页推荐信息
49 | getRecommendFun () {
50 | return get('api/Home/dress')
51 | },
52 | /*--------------- home end --------------*/
53 |
54 |
55 | /*--------------- goods start --------------*/
56 | // 获取商品列表
57 | getGoodsListFun (data) {
58 | return post(
59 | 'api/Mall/searchGoods',
60 | data
61 | )
62 | },
63 |
64 | // 获取商品详情
65 | getGoodsDetailsFun (goods_id) {
66 | return post(
67 | 'api/Mall/goods_info',
68 | {
69 | uid: storage.s_getItem("uid"),
70 | token: storage.s_getItem("token"),
71 | goods_id
72 | }
73 | )
74 | },
75 |
76 | // 收藏or取消收藏
77 | collectionFun (goods_id) {
78 | return post(
79 | 'api/Mall/goods_collect',
80 | {
81 | uid: storage.s_getItem("uid"),
82 | token: storage.s_getItem("token"),
83 | goods_id
84 | }
85 | )
86 | },
87 |
88 | // 计算规格价格
89 | calculatedPrice (goods_id,specification_ids){
90 | return post(
91 | 'api/Mall/get_specification',
92 | {
93 | goods_id,
94 | specification_ids: specification_ids.join(",") // 商品member_id
95 | }
96 | )
97 | },
98 |
99 | // 加入购物车
100 | addShoppingCarFun (data){
101 | return post(
102 | 'api/Mall/insertShopCar',
103 | {
104 | uid: storage.s_getItem("uid"),
105 | token: storage.s_getItem("token"),
106 | ...data
107 | }
108 | )
109 | },
110 | /*--------------- goods end --------------*/
111 |
112 | /*--------------- shop start --------------*/
113 | // 获取店铺信息
114 | getShopDetailsFun (merchants_id) {
115 | return post(
116 | 'api/Mall/merchants_info',
117 | {
118 | uid: storage.s_getItem("uid"),
119 | token: storage.s_getItem("token"),
120 | merchants_id //商品member_id
121 | }
122 | )
123 | },
124 | /*--------------- shop end --------------*/
125 |
126 | /*--------------- order start --------------*/
127 | // 获取下单商品信息
128 | getGoodsInfo (obj,type){ // type=0(单件), type=1(购物车)
129 | let confirmApi = null,
130 | paramObj = {
131 | uid: storage.s_getItem("uid"),
132 | token: storage.s_getItem("token"),
133 | }
134 | if(type == 0){
135 | confirmApi = 'api/Order/confirmGoodsInfo'
136 | paramObj.goods_id = obj.goods_id,
137 | paramObj.goods_num = obj.num,
138 | paramObj.specification_id = obj.specification_id
139 | }else {
140 | confirmApi = 'api/Order/confirmOrderInfo'
141 | paramObj.car_ids = obj
142 | }
143 | return post(
144 | confirmApi,
145 | paramObj
146 | )
147 | },
148 | // 下单
149 | preOrderFun (json,car_ids){
150 | return post(
151 | 'api/Order/insertMallOrder',
152 | {
153 | uid: storage.s_getItem("uid"),
154 | token: storage.s_getItem("token"),
155 | json: JSON.stringify(json),
156 | car_ids: car_ids || ''
157 | }
158 | )
159 | },
160 |
161 | // 支付订单
162 | payOrderFun (order_no,type){ // type = 1 (下单支付) type = 2 (未支付订单支付)
163 | let api = ''
164 | type == 1 ? api = 'api/Pingxx/ping1' : api = 'api/Pingxx/ping2'
165 | return post(
166 | api,
167 | {
168 | uid: storage.s_getItem("uid"),
169 | token: storage.s_getItem("token"),
170 | order_no, //订单号
171 | type: 'wx_pub', //微信公众号支付
172 | openid: storage.l_getItem("openid") // 微信openid
173 | }
174 | )
175 | },
176 |
177 | // 获取订单列表
178 | getOrderListFun (order_state,p){
179 | return post(
180 | 'api/Order/queryOrderByState',
181 | {
182 | uid: storage.s_getItem("uid"),
183 | token: storage.s_getItem("token"),
184 | p,
185 | order_state
186 | }
187 | )
188 | },
189 | // 获取订单详情
190 | getOrderDetailsFun (order_merchants_id){
191 | return post(
192 | 'api/Order/queryOrderView',
193 | {
194 | uid: storage.s_getItem("uid"),
195 | token: storage.s_getItem("token"),
196 | order_merchants_id
197 | }
198 | )
199 | },
200 | // 取消订单/退款/催单/确认收货/删除订单
201 | orderOperate (order_merchants_id,type){
202 | let api = null
203 | switch (type){
204 | case 1: // 取消订单
205 | api = 'api/Order/cancelOrder'
206 | break;
207 | case 2: // 退款
208 | api = 'api/Order/return_order'
209 | break;
210 | case 3: // 催单
211 | api = 'api/Order/hurry_order'
212 | break;
213 | case 4: // 确认收货
214 | api = 'api/Order/receiveOrder'
215 | break;
216 | case 5: // 删除订单
217 | api = 'api/Order/delOrder'
218 | }
219 | return post(
220 | api,
221 | {
222 | uid: storage.s_getItem("uid"),
223 | token: storage.s_getItem("token"),
224 | order_merchants_id
225 | }
226 | )
227 | },
228 | /*--------------- order end --------------*/
229 |
230 | /*--------------- shoppingCar satrt --------------*/
231 | // 获取购物车商品列表
232 | getCarGoodsListFun () {
233 | return post(
234 | 'api/Mall/getShopCars',
235 | {
236 | uid: storage.s_getItem("uid"),
237 | token: storage.s_getItem("token")
238 | }
239 | )
240 | },
241 | // 获取推荐商品列表
242 | getMaybeEnjoyFun () {
243 | return post(
244 | 'api/Mall/maybeEnjoy',
245 | {
246 | uid: storage.s_getItem("uid"),
247 | token: storage.s_getItem("token"),
248 | pagesize: 6
249 | }
250 | )
251 | },
252 | // 清除无效商品
253 | delInvalidShopCar () {
254 | return post(
255 | 'api/Mall/delInvalidShopCar',
256 | {
257 | uid: storage.s_getItem("uid"),
258 | token: storage.s_getItem("token")
259 | }
260 | )
261 | },
262 | // 购物车加减
263 | carNumToggle (type,car_id) {
264 | let api = ''
265 | type == 1 ? (api = 'api/Mall/plusShopCar') : (api = 'api/Mall/minusShopCar')
266 | return post(
267 | api,
268 | {
269 | uid: storage.s_getItem("uid"),
270 | token: storage.s_getItem("token"),
271 | car_id
272 | }
273 | )
274 | },
275 | // 删除商品
276 | delCarGoodsFun (car_ids){
277 | return post(
278 | 'api/Mall/delShopCar',
279 | {
280 | uid: storage.s_getItem("uid"),
281 | token: storage.s_getItem("token"),
282 | car_ids: car_ids.join(",")
283 | }
284 | )
285 | },
286 | /*--------------- shoppingCar end --------------*/
287 | /*--------------- me start --------------*/
288 | // 是否有未读消息
289 | hasMsgFun (){
290 | return post(
291 | 'api/User/has_message',
292 | {
293 | uid: storage.s_getItem("uid"),
294 | token: storage.s_getItem("token")
295 | }
296 | )
297 | },
298 | // 修改个人信息
299 | editUserInfo (data) {
300 | return post(
301 | 'api/user/edit_user',
302 | {
303 | uid: storage.s_getItem("uid"),
304 | token: storage.s_getItem("token"),
305 | ...data
306 | }
307 | )
308 | },
309 | /*--------------- me end --------------*/
310 |
311 | /*--------------- address start --------------*/
312 | // 获取默认地址
313 | getDefaultAddressFun (){
314 | return post(
315 | 'api/Address/queryDefaultAddress',
316 | {
317 | uid: storage.s_getItem("uid"),
318 | token: storage.s_getItem("token")
319 | }
320 | )
321 | },
322 |
323 | // 新增/编辑地址
324 | add_edit_addressFun (data){
325 | let api = ''
326 | data.address_id ? api = 'api/Address/saveAddress' : api = 'api/Address/insertAddress'
327 | return post(
328 | api,
329 | {
330 | uid: storage.s_getItem("uid"),
331 | token: storage.s_getItem("token"),
332 | ...data
333 | }
334 | )
335 | },
336 |
337 | // 获取我的地址列表
338 | getMyAddress (){
339 | return post(
340 | 'api/Address/queryAddressList',
341 | {
342 | uid: storage.s_getItem("uid"),
343 | token: storage.s_getItem("token")
344 | }
345 | )
346 | },
347 | // 设置默认/删除地址
348 | setAddress (address_id,type){
349 | let api = ''
350 | type == 1 ? api = 'api/Address/saveDefaultAddress' : api = 'api/Address/delAddress'
351 | return post(
352 | api,
353 | {
354 | uid: storage.s_getItem("uid"),
355 | token: storage.s_getItem("token"),
356 | address_id
357 | }
358 | )
359 | },
360 | /*--------------- address end --------------*/
361 | }
362 |
363 |
364 |
365 |
--------------------------------------------------------------------------------
/src/pages/shoppingCar/shoppingCar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
![]()
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
36 |
规格:
37 |
¥
38 |
39 |
40 |
-
41 |
42 |
43 |
44 |
+
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
59 |
60 |
总计:¥
61 |
(不含运费)
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
328 |
--------------------------------------------------------------------------------