Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop-ui

master
paulGao 2021-12-21 18:59:57 +08:00
commit 0d5c60ed8c
24 changed files with 208 additions and 156 deletions

5
buyer/.npmrc Normal file
View File

@ -0,0 +1,5 @@
# 默认依赖包指定淘宝源
registry=https://registry.npm.taobao.org/
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
electron_mirror=https://npm.taobao.org/mirrors/electron/

5
buyer/.yarnrc Normal file
View File

@ -0,0 +1,5 @@
registry "https://registry.npmmirror.com"
sass_binary_site "https://npmmirror.com/mirrors/node-sass"
phantomjs_cdnurl "https://npmmirror.com/mirrors/phantomjs"
electron_mirror "https://npmmirror.com/mirrors/electron"

View File

@ -81,3 +81,14 @@ export function articleDetail (id) {
method: Method.GET method: Method.GET
}); });
} }
// 获取IM接口前缀
export function getIMDetail () {
return request({
url: `${commonUrl}/common/IM`,
method: Method.GET
});
}

View File

@ -224,7 +224,7 @@ export default {
count: 1, // count: 1, //
imgIndex: 0, // imgIndex: 0, //
currentSelceted: [], // sku currentSelceted: [], // sku
imgList: [{}], // imgList: [{url:''}], //
skuDetail: this.detail.data, // sku skuDetail: this.detail.data, // sku
goodsSpecList: this.detail.specs, // spec goodsSpecList: this.detail.specs, // spec
promotionMap: { promotionMap: {

View File

@ -1,30 +1,12 @@
module.exports = { module.exports = {
/** title: "lili-shop", //配置显示在浏览器标签的title、底部信息、部分信息展示的值
* @description 配置显示在浏览器标签的title底部信息部分信息展示的值 icpCard: "", // icp证
*/ company: {
title: "lili-shop", href: "https://pickmall.cn",
/** name: "北京宏业汇成科技有限公司",
* @description icp证 }, //公司信息
*/ icpMessage: "京ICP备20009696号-1", //icp备案
icpCard: "", aMapKey: "b440952723253aa9fe483e698057bf7d", //高德web端申请的api key
enableCDN: true, //生产环境 是否启用cdn加载 vue等js
company:{ port:10000, //端口
href:"https://pickmall.cn",
name:"北京宏业汇成科技有限公司"
},
/**
* @description icp备案号
*/
icpMessage: "京ICP备20009696号-1",
/**
* @description 是否使用国际化默认为false
* 如果不使用则需要在路由中给需要在菜单中展示的路由设置meta: {title: 'xxx'}
* 用来在菜单中显示文字
*/
useI18n: false,
/**
* @description 高德web端申请的api key
*/
aMapKey: "b440952723253aa9fe483e698057bf7d",
}; };

View File

@ -13,14 +13,24 @@
</BreadcrumbItem> </BreadcrumbItem>
</Breadcrumb> </Breadcrumb>
<div class="store-collect"> <div class="store-collect">
<span class="mr_10" v-if="goodsMsg.data"><router-link <span class="mr_10" v-if="goodsMsg.data">
:to="'Merchant?id=' + goodsMsg.data.storeId">{{ goodsMsg.data.storeName }}</router-link></span>
<span @click="collect"><Icon type="ios-heart" <router-link :to="'Merchant?id=' + goodsMsg.data.storeId">{{ goodsMsg.data.storeName }}</router-link>
:color="storeCollected ? '#ed3f14' : '#666'"/> </span>
{{storeCollected ? '已收藏店铺' : '收藏店铺'}} <span @click="collect">
</span> <Icon type="ios-heart" :color="storeCollected ? '#ed3f14' : '#666'" />
<span @click="connectCs(storeMsg.yzfSign)" class="ml_10"><Icon {{storeCollected ? '已收藏店铺' : '收藏店铺'}}
custom="icomoon icon-customer-service"/>联系客服</span> </span>
<!--
先看下udesk merchantEuid 是否有值
有的话 链接udesk
没有的话 显示云智服
-->
<span class="ml_10" v-if="storeMsg.merchantEuid" @click="IMService()"></span>
<span v-else @click="connectCs(storeMsg.yzfSign)" class="ml_10">
<Icon custom="icomoon icon-customer-service" />联系客服
</span>
</div> </div>
</div> </div>
</div> </div>
@ -35,128 +45,158 @@
</template> </template>
<script> <script>
import Search from '@/components/Search'; import Search from "@/components/Search";
import ShopHeader from '@/components/header/ShopHeader'; import ShopHeader from "@/components/header/ShopHeader";
import ShowGoods from '@/components/goodsDetail/ShowGoods'; import ShowGoods from "@/components/goodsDetail/ShowGoods";
import ShowGoodsDetail from '@/components/goodsDetail/ShowGoodsDetail'; import ShowGoodsDetail from "@/components/goodsDetail/ShowGoodsDetail";
import {goodsSkuDetail} from '@/api/goods'; import { goodsSkuDetail } from "@/api/goods";
import {cancelCollect, collectGoods, isCollection, getGoodsDistribution} from '@/api/member'; import {
import {getDetailById} from '@/api/shopentry' cancelCollect,
collectGoods,
isCollection,
getGoodsDistribution,
} from "@/api/member";
import { getDetailById } from "@/api/shopentry";
import { getIMDetail } from "@/api/common";
export default { export default {
name: 'GoodsDetail', name: "GoodsDetail",
beforeRouteEnter (to, from, next) { beforeRouteEnter(to, from, next) {
window.scrollTo(0, 0); window.scrollTo(0, 0);
next(); next();
}, },
created () { created() {
this.getGoodsDetail(); this.getGoodsDetail();
// this.getIMDetailMethods();
}, },
data () { data() {
return { return {
goodsMsg: {}, // goodsMsg: {}, //
isLoading: false, // isLoading: false, //
categoryBar: [], // categoryBar: [], //
storeCollected: false, // storeCollected: false, //
storeMsg: {} // storeMsg: {}, //
IMLink: "",
}; };
}, },
methods: { methods: {
// im
IMService() {
window.open(this.IM);
},
// im
async getIMDetailMethods() {
let res = await getIMDetail();
if (res.success) {
this.IMLink = res.result;
}
},
// //
getGoodsDetail () { getGoodsDetail() {
this.isLoading = true; this.isLoading = true;
const params = this.$route.query; const params = this.$route.query;
// id // id
let distributionId = (params && params.distributionId) ? params.distributionId : this.Cookies.getItem('distributionId'); let distributionId =
params && params.distributionId
? params.distributionId
: this.Cookies.getItem("distributionId");
// //
if (distributionId) { if (distributionId) {
console.log(distributionId) console.log(distributionId);
// //
this.Cookies.setItem('distributionId', params.distributionId) this.Cookies.setItem("distributionId", params.distributionId);
let _this = this; let _this = this;
// //
getGoodsDistribution(params.distributionId).then(res => { getGoodsDistribution(params.distributionId).then((res) => {
// //
if (res.success) { if (res.success) {
_this.Cookies.removeItem('distributionId'); _this.Cookies.removeItem("distributionId");
} }
}) });
} }
goodsSkuDetail(params).then((res) => { goodsSkuDetail(params)
this.isLoading = false; .then((res) => {
if (res.success) { this.isLoading = false;
const result = res.result; if (res.success) {
const cateName = res.result.categoryName; const result = res.result;
const cateId = result.data.categoryPath.split(','); const cateName = res.result.categoryName;
const cateArr = []; const cateId = result.data.categoryPath.split(",");
cateId.forEach((e, index) => { // idname const cateArr = [];
cateArr.push({ cateId.forEach((e, index) => {
id: e, // idname
name: cateName[index] cateArr.push({
id: e,
name: cateName[index],
});
}); });
}); this.categoryBar = cateArr;
this.categoryBar = cateArr; this.goodsMsg = res.result;
this.goodsMsg = res.result; //
// if (this.Cookies.getItem("userInfo")) {
if (this.Cookies.getItem('userInfo')) { isCollection("STORE", this.goodsMsg.data.storeId).then((res) => {
isCollection('STORE', this.goodsMsg.data.storeId).then(res => { if (res.success && res.result) {
if (res.success && res.result) { this.storeCollected = true;
this.storeCollected = true; }
} });
})
}
//
getDetailById(this.goodsMsg.data.storeId).then(res => {
if (res.success) {
this.storeMsg = res.result
} }
}) //
} else { getDetailById(this.goodsMsg.data.storeId).then((res) => {
this.$Message.error(res.message) if (res.success) {
this.$router.push('/') this.storeMsg = res.result;
} }
}).catch(() => { });
this.$router.push('/') } else {
}); this.$Message.error(res.message);
this.$router.push("/");
}
})
.catch(() => {
this.$router.push("/");
});
}, },
goGoodsList (currIndex) { // goGoodsList(currIndex) {
const arr = [] //
const arr = [];
this.categoryBar.forEach((e, index) => { this.categoryBar.forEach((e, index) => {
if (index <= currIndex) { if (index <= currIndex) {
arr.push(e.id) arr.push(e.id);
} }
}) });
return location.origin + '/goodsList?categoryId=' + arr.toString() return location.origin + "/goodsList?categoryId=" + arr.toString();
}, },
async collect () { // async collect() {
//
if (this.storeCollected) { if (this.storeCollected) {
let cancel = await cancelCollect('STORE', this.goodsMsg.data.storeId) let cancel = await cancelCollect("STORE", this.goodsMsg.data.storeId);
if (cancel.success) { if (cancel.success) {
this.$Message.success('已取消收藏') this.$Message.success("已取消收藏");
this.storeCollected = false; this.storeCollected = false;
} }
} else { } else {
let collect = await collectGoods('STORE', this.goodsMsg.data.storeId); let collect = await collectGoods("STORE", this.goodsMsg.data.storeId);
if (collect.code === 200) { if (collect.code === 200) {
this.storeCollected = true; this.storeCollected = true;
this.$Message.success('收藏店铺成功,可以前往个人中心我的收藏查看'); this.$Message.success("收藏店铺成功,可以前往个人中心我的收藏查看");
} }
} }
} },
}, },
watch: { watch: {
'$route.query.skuId': function (val) { "$route.query.skuId": function (val) {
location.reload(); location.reload();
} },
},
computed: {
IM() {
return this.IMLink + this.storeMsg.merchantEuid;
},
}, },
computed: {},
components: { components: {
Search, Search,
ShopHeader, ShopHeader,
ShowGoods, ShowGoods,
ShowGoodsDetail ShowGoodsDetail,
} },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

View File

@ -13,6 +13,7 @@ const configs = require('./src/config')
*/ */
const enableProduction = process.env.NODE_ENV === "production"; // 是否生产环境 const enableProduction = process.env.NODE_ENV === "production"; // 是否生产环境
let externals = { let externals = {
vue: "Vue", vue: "Vue",
axios: "axios", axios: "axios",
@ -53,8 +54,8 @@ let jsPlugin = [
}) })
]; ];
// 判断是否需要加载CDN // 判断是否需要加载CDN
cdn = enableProduction ? cdn : { css: [], js: [] }; cdn = enableProduction && configs.enableCDN ? cdn : { css: [], js: [] };
externals = enableProduction ? externals : {}; externals = enableProduction && configs.enableCDN ? externals : {};
jsPlugin = enableProduction ? jsPlugin : []; jsPlugin = enableProduction ? jsPlugin : [];
module.exports = { module.exports = {
@ -80,7 +81,7 @@ module.exports = {
} }
}, },
devServer: { devServer: {
port: 10000 port: configs.port
}, },
// 打包时不生成.map文件 避免看到源码 // 打包时不生成.map文件 避免看到源码

5
manager/.npmrc Normal file
View File

@ -0,0 +1,5 @@
# 默认依赖包指定淘宝源
registry=https://registry.npm.taobao.org/
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
electron_mirror=https://npm.taobao.org/mirrors/electron/

5
manager/.yarnrc Normal file
View File

@ -0,0 +1,5 @@
registry "https://registry.npmmirror.com"
sass_binary_site "https://npmmirror.com/mirrors/node-sass"
phantomjs_cdnurl "https://npmmirror.com/mirrors/phantomjs"
electron_mirror "https://npmmirror.com/mirrors/electron"

View File

@ -1,14 +1,7 @@
export default { module.exports = {
/** title: "lilishop", //配置显示在浏览器标签的title
* @description 配置显示在浏览器标签的title aMapKey: "b440952723253aa9fe483e698057bf7d", //高德web端申请的api key
*/ website: "https://www.pickmall.cn", //官网地址
title: "lilishop", enableCDN: true, //生产环境 是否启用cdn加载 vue等js
/** port:10003, //端口
* @description 高德web端申请的api key
*/
aMapKey: "b440952723253aa9fe483e698057bf7d",
/**
* @description 官网地址
*/
website: "https://www.pickmall.cn",
}; };

View File

@ -1,7 +1,5 @@
import config from '@/config/index'
export default { export default {
lili: config.title,
usernameLogin: 'UsernameLogin', usernameLogin: 'UsernameLogin',
mobileLogin: 'MobileLogin', mobileLogin: 'MobileLogin',
autoLogin: 'Auto Login', autoLogin: 'Auto Login',

View File

@ -1,6 +1,5 @@
import config from '@/config/index'
export default { export default {
lili: config.title,
usernameLogin: '账户密码登录', usernameLogin: '账户密码登录',
mobileLogin: '手机号登录', mobileLogin: '手机号登录',
autoLogin: '自动登录', autoLogin: '自动登录',

View File

@ -1,5 +1,6 @@
import Main from "@/views/Main.vue"; import Main from "@/views/Main.vue";
import config from '@/config/index'
const config = require('@/config/index')
// 不作为Main组件的子页面展示的页面单独写如下 // 不作为Main组件的子页面展示的页面单独写如下
export const loginRouter = { export const loginRouter = {
path: "/login", path: "/login",

View File

@ -13,7 +13,8 @@
</template> </template>
<script> <script>
import config from '@/config/index'
const config = require('@/config/index')
export default { export default {
name: "footer", name: "footer",
data() { data() {

View File

@ -31,7 +31,8 @@
<script> <script>
import AMapLoader from "@amap/amap-jsapi-loader"; import AMapLoader from "@amap/amap-jsapi-loader";
import { getRegion } from "@/api/common.js"; import { getRegion } from "@/api/common.js";
import config from '@/config'
const config = require('@/config/index')
export default { export default {
data() { data() {
return { return {

View File

@ -255,8 +255,8 @@ import {
deleteFile, deleteFile,
} from "@/api/index"; } from "@/api/index";
import DPlayer from "dplayer"; import DPlayer from "dplayer";
import config from "@/config";
const config = require('@/config/index')
import { commonUrl } from "@/libs/axios"; import { commonUrl } from "@/libs/axios";
var dp; var dp;
export default { export default {

View File

@ -1,4 +1,5 @@
const path = require("path"); const path = require("path");
const configs = require('./src/config')
const CompressionPlugin = require("compression-webpack-plugin"); const CompressionPlugin = require("compression-webpack-plugin");
const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
const resolve = dir => { const resolve = dir => {
@ -12,6 +13,7 @@ const resolve = dir => {
*/ */
const enableProduction = process.env.NODE_ENV === "production"; // 是否生产环境 const enableProduction = process.env.NODE_ENV === "production"; // 是否生产环境
let externals = { let externals = {
vue: "Vue", vue: "Vue",
axios: "axios", axios: "axios",
@ -63,8 +65,9 @@ let jsPlugin = [
]; ];
// 判断是否需要加载CDN线上删除注释 // 判断是否需要加载CDN线上删除注释
cdn = enableProduction ? cdn : { css: [], js: [] };
externals = enableProduction ? externals : {}; cdn = enableProduction && configs.enableCDN ? cdn : { css: [], js: [] };
externals = enableProduction && configs.enableCDN ? externals : {};
jsPlugin = enableProduction ? jsPlugin : []; jsPlugin = enableProduction ? jsPlugin : [];
module.exports = { module.exports = {
css: { css: {
@ -78,7 +81,7 @@ module.exports = {
} }
}, },
devServer: { devServer: {
port: 10003 port: configs.port
}, },
// 打包时不生成.map文件 避免看到源码 // 打包时不生成.map文件 避免看到源码

View File

@ -0,0 +1,5 @@
registry "https://registry.npmmirror.com"
sass_binary_site "https://npmmirror.com/mirrors/node-sass"
phantomjs_cdnurl "https://npmmirror.com/mirrors/phantomjs"
electron_mirror "https://npmmirror.com/mirrors/electron"

View File

@ -1,16 +1,7 @@
export default { module.exports = {
/** title: "lilishop", //配置显示在浏览器标签的title
* @description 配置显示在浏览器标签的title aMapKey: "b440952723253aa9fe483e698057bf7d", //高德web端申请的api key
*/ website: "https://www.pickmall.cn", //官网地址
title: "lilishop", enableCDN: true, //生产环境 是否启用cdn加载 vue等js
port:10002, //端口
/**
* @description 高德web端申请的api key
*/
aMapKey: "b440952723253aa9fe483e698057bf7d",
/**
* @description 官网地址
*/
website: "https://www.pickmall.cn",
}; };

View File

@ -2,7 +2,8 @@ import lazyLoading from './lazyLoading.js';
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import { result } from './routerJson.js'; import { result } from './routerJson.js';
import config from '@/config/index' const config = require('@/config/index')
let util = { let util = {
}; };

View File

@ -1,5 +1,6 @@
import Main from "@/views/Main.vue"; import Main from "@/views/Main.vue";
import config from '@/config/index'
const config = require('@/config/index')
// 不作为Main组件的子页面展示的页面单独写如下 // 不作为Main组件的子页面展示的页面单独写如下
export const loginRouter = { export const loginRouter = {
path: "/login", path: "/login",

View File

@ -13,7 +13,8 @@
</template> </template>
<script> <script>
import config from '@/config/index'
const config = require('@/config/index')
export default { export default {
name: "footer", name: "footer",
data() { data() {

View File

@ -31,7 +31,8 @@
<script> <script>
import AMapLoader from "@amap/amap-jsapi-loader"; import AMapLoader from "@amap/amap-jsapi-loader";
import { getRegion } from "@/api/common.js"; import { getRegion } from "@/api/common.js";
import config from '@/config'
const config = require('@/config/index')
export default { export default {
name: "map", name: "map",
data() { data() {

View File

@ -1,4 +1,5 @@
const path = require("path"); const path = require("path");
const configs = require('./src/config')
const CompressionPlugin = require("compression-webpack-plugin"); const CompressionPlugin = require("compression-webpack-plugin");
const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
const resolve = dir => { const resolve = dir => {
@ -11,6 +12,7 @@ const resolve = dir => {
* 我们可以根据环境变量进行相应的处理只有在产品的时候才让插件去自动注入相应的资源文件到html页面 * 我们可以根据环境变量进行相应的处理只有在产品的时候才让插件去自动注入相应的资源文件到html页面
*/ */
const enableProduction = process.env.NODE_ENV === "production"; // 是否生产环境 const enableProduction = process.env.NODE_ENV === "production"; // 是否生产环境
// const enableProduction = false // 统一取消cdn加载 目前cdn链接的https请求挂了
let externals = { let externals = {
vue: "Vue", vue: "Vue",
@ -60,8 +62,8 @@ let jsPlugin = [
}) })
]; ];
// 判断是否需要加载CDN // 判断是否需要加载CDN
cdn = enableProduction ? cdn : { css: [], js: [] }; cdn = enableProduction && configs.enableCDN ? cdn : { css: [], js: [] };
externals = enableProduction ? externals : {}; externals = enableProduction && configs.enableCDN ? externals : {};
jsPlugin = enableProduction ? jsPlugin : []; jsPlugin = enableProduction ? jsPlugin : [];
module.exports = { module.exports = {
@ -83,7 +85,7 @@ module.exports = {
} }
}, },
devServer: { devServer: {
port: 10002 port: configs.port
}, },
// 打包时不生成.map文件 避免看到源码 // 打包时不生成.map文件 避免看到源码