Commit 98ee2c46 authored by liwenhong's avatar liwenhong

Merge branch 'feature/activity' of...

Merge branch 'feature/activity' of https://git.yidian-inc.com:8021/bp/op-web-service into feature/activity
parents cb103968 e3a878da
......@@ -91,17 +91,16 @@ exports.addMarketing = async ctx => {
// 编辑营销活动
exports.updateMarketing = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/update_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
const url = `${ACTIVITY_URI}/marketing/background/update_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 营销活动详情
exports.marketingInfo = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
......@@ -124,7 +123,6 @@ exports.updateActivity = async ctx => {
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
console.log(ctx.body);
};
// 查看活动订单
......@@ -139,6 +137,18 @@ exports.checkActivityDetail = async ctx => {
ctx.body = await req(ctx, opts);
};
// 查看活动订单
exports.checkActivityDetailInfo = async ctx => {
const url = `${ACTIVITY_URI}/order/background/pindan_marketing_info_data_statistics`;
const opts = {
url,
method: "GET",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 获取自提点列表
exports.getPlaceList = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/take_place_list`;
......
......@@ -64,9 +64,10 @@ router.get(`${API_VERSION}/merchant/lifeinner/life_list`, life.get_life_list)
router.post(`${API_VERSION}/merchant/authority/get_user_info`, user.getUser_detail)
// 后台运营管理
router.get(`${API_VERSION}/marketing/background/marketing_list`, activity.getActivityList)
router.get(`${API_VERSION}/order/background/pindan_marketing_info_data_statistics`, activity.checkActivityDetailInfo)
router.post(`${API_VERSION}/goods/background/edit_goods`, activity.editGoodsDetail)
router.post(`${API_VERSION}/marketing/background/update_marketing`, activity.updateActivity)
router.post(`${API_VERSION}/marketing/background/marketing_info`, activity.checkActivityDetail)
router.post(`${API_VERSION}/marketing/background/marketing_info`, activity.checkActivityDetail)
//
router.get(`${API_VERSION}/marketing/background/take_place_list`, activity.getPlaceList)
router.post(`${API_VERSION}/marketing/background/add_take_place`, activity.addPlace)
......
const request = require("request");
exports.httpReq = (ctx, opts) => {
opts.timeout = opts.timeout || 1000;
// opts.timeout = opts.timeout || 10000;
opts.timeout = 10000;
return new Promise((resolve, reject) => {
var time_start = +new Date();
......@@ -18,7 +19,8 @@ exports.httpReq = (ctx, opts) => {
request(opts, (err, res, body) => {
console.info(
`[Api] httpReq (${opts.url}, user:[${opts.qs.op_cur_user
`[Api] httpReq (${opts.url}, user:[${
opts.qs.op_cur_user
}]) spent: ${+new Date() - time_start}ms`
);
......@@ -31,5 +33,3 @@ exports.httpReq = (ctx, opts) => {
});
});
};
......@@ -6,39 +6,41 @@
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<div class="activityInfo">
<div>
<p></p>
<p>订单数量</p>
</div>
<div>
<p></p>
<p>已售商品数量</p>
</div>
<div>
<p></p>
<p>支付金额</p>
</div>
<div>
<p></p>
<p>优惠金额</p>
</div>
<div>
<p></p>
<p>退款</p>
</div>
<div>
<p></p>
<p>实际收入</p>
</div>
<div class="activityInfo-wrapper">
<el-card class="activityInfo">
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.order_count }}</p>
<p>订单数量</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.sold_goods_count }}</p>
<p>已售商品数量</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.pay_amount_count }}</p>
<p>支付金额</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.discount_amount_count }}</p>
<p>优惠金额</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.refund_count }}</p>
<p>退款</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.real_income_count }}</p>
<p>实际收入</p>
</div>
</el-card>
</div>
<div class="activityDetail">
<div class="my-header">
<h3>{{ marketingInfo.marketing_name }}</h3>
<p class="endTime">{{ showTimer }}</p>
</div>
<section class="content">
<el-card class="activityGoods box-card">
<div class="my-header">
<h3>{{ marketingInfo.marketing_name }}</h3>
<p class="endTime">{{ showTimer }}</p>
</div>
<p class="title">拼单商品</p>
<div class="images-wrapper">
<div
......@@ -66,7 +68,7 @@
class="activityImage"
style="width: 100%; height: 400px"
:src="picItem"
fit="fit"
fit="contain"
></el-image>
</el-card>
<el-card class="activities box-card">
......@@ -111,7 +113,8 @@ export default {
goodsList: [],
marketingInfo: {},
endTime: "",
showTimer: ""
showTimer: "",
detailInfo: {}
};
},
watch: {},
......@@ -120,14 +123,25 @@ export default {
async checkActivityDetail() {
try {
this.pageLoading = true;
let data = await ActivityService.checkActivityDetail({
marketing_id: this.$route.query.marketing_id,
marketing_type: this.$route.query.marketing_type
});
let dataArr = await Promise.all([
ActivityService.checkActivityDetail({
marketing_id: this.$route.query.marketing_id,
marketing_type: this.$route.query.marketing_type
}),
ActivityService.checkActivityDetailInfo({
marketing_id: this.$route.query.marketing_id
})
]);
// let data = await ActivityService.checkActivityDetail({
// marketing_id: this.$route.query.marketing_id,
// marketing_type: this.$route.query.marketing_type
// });
this.pageLoading = false;
this.goodsList = data.result.goods_list;
this.marketingInfo = data.result.marketing_info;
this.endTime = data.result.marketing_info.end_time;
this.goodsList = dataArr[0].result.goods_list;
this.marketingInfo = dataArr[0].result.marketing_info;
this.endTime = dataArr[0].result.marketing_info.end_time;
this.detailInfo = dataArr[1].result;
} catch {
this.pageLoading = false;
ElMessage.error("加载失败");
......@@ -182,18 +196,39 @@ export default {
.wrapper {
height: 100%;
display: flex;
justify-content: center;
flex-direction: column;
justify-content: flex-start;
align-items: center;
padding: 45px 10px 0;
.activityDetail {
.activityInfo {
width: 500px;
.my-header {
.endTime {
margin: 5px 0;
font-size: 15px;
color: red;
/deep/ .el-card__body {
width: 100%;
display: flex;
flex-wrap: wrap;
}
.infoItem {
width: 33%;
text-align: center;
margin-bottom: 20px;
.infoItemText {
font-weight: bolder;
}
// display: flex;
// align-items: center;
// justify-content: center;
}
}
.activityDetail {
width: 500px;
.content {
.my-header {
.endTime {
margin: 5px 0;
font-size: 15px;
color: red;
}
}
.box-card {
margin: 10px 0;
}
......
......@@ -60,7 +60,11 @@
{{ scope.row.activiteHead }}
</div>
<div class="activityPrice">
{{ ` ¥ ${scope.row.minPrice}~¥${scope.row.maxPrice} ` }}
{{
scope.row.minPrice === scope.row.maxPrice
? ` ¥ ${scope.row.minPrice}`
: ` ¥ ${scope.row.minPrice}~¥${scope.row.maxPrice} `
}}
</div>
</div>
</template>
......@@ -238,13 +242,7 @@ export default {
status: item.online_status,
minPrice: item.min_price,
maxPrice: item.max_price,
marketing_type: 4,
orderNumber: 33,
soldGoods: "",
pay: "",
discounts: "",
refund: "",
realized: "4000"
marketing_type: 4
};
});
},
......@@ -295,7 +293,15 @@ export default {
};
},
// 查看详情
handleLook() {}
handleLook(row) {
this.$router.push({
path: "/op/groupmeal/orderManagement",
query: {
marketing_id: row.activiteId,
marketing_type: row.marketing_type
}
});
}
},
created() {
this.getActivityList();
......
......@@ -263,7 +263,6 @@ export default {
addCommodityPopup: false, // 添加商品弹窗状态
addCommodityTitle: "", // 标题
commodityForm: {
picUrlList: [],
goods_name: "",
price: "",
original_price: "",
......@@ -272,6 +271,7 @@ export default {
business1: "",
},
picUrlList: [],
picUploadList: [], // 上传详情图片列表
isShowPopver: false, // 是否展示图片框
uploadUrl: `${GOODS_URI}/ksy/ks3apiunencrypt/ks3api_upload`, // 金山云上传地址
......@@ -357,12 +357,13 @@ export default {
// 查看商品详情
async markGoodsInfoMet(goodSkuID) {
this.picUrlList = [];
let params = { goods_sku_id: goodSkuID, marketing_type: "4" };
const res = await markGoodsInfo(params);
this.commodityForm = res.result.goods_info;
this.commodityForm.business1 = res.result.goods_info.ota_id;
for (var i in res.result.goods_info.desc_pic_url_list) {
this.commodityForm.picUrlList.push({
this.picUrlList.push({
url: res.result.goods_info.desc_pic_url_list[i],
});
}
......@@ -407,6 +408,7 @@ export default {
this.addCommodityPopup = true;
this.commodityForm = {};
if (type == "add") {
console.log(this.editInfo);
this.commodityForm.total_amount_order = 0;
this.addCommodityTitle = "商品添加";
} else {
......@@ -494,19 +496,19 @@ export default {
}
}
},
// 获取营销活动详情
marketingInfoMet() {
},
watch: {
addProduc: function (newVal) {
let marketingId = this.$route.query.marketing_id;
if (marketingId == undefined) {
return;
}
this.comTableData = this.addProduc;
this.comTableData = newVal;
},
},
created() {
this.getBusinessListMet();
this.marketingInfoMet();
},
};
</script>
......
<template>
<div class="infoEditing">
<el-form
ref="infoEditForm"
:model="infoEditForm"
:rules="rules"
label-width="80px"
>
<el-form ref="infoEditForm" :model="infoEditForm" label-width="80px">
<el-form-item label="标题:">
<el-input v-model="infoEditForm.title" maxlength="30"></el-input>
</el-form-item>
......@@ -50,8 +45,8 @@ export default {
props: {
editInfo: {
type: Object,
required: () => {},
},
required: () => {}
}
},
data() {
return {
......@@ -59,13 +54,13 @@ export default {
title: "", // 标题
desc: "", // 介绍
picUploadList: [], // 上传详情图片列表
picUrlList: [], // 图片回显列表
picUrlList: [] // 图片回显列表
},
propData: {},
isShowPopver: false, // 是否展示图片框
uploadUrl: `${GOODS_URI}/ksy/ks3apiunencrypt/ks3api_upload`, // 金山云上传地址
uploadUrl: `${GOODS_URI}/ksy/ks3apiunencrypt/ks3api_upload` // 金山云上传地址
};
},
methods: {
......@@ -91,31 +86,23 @@ export default {
// 获取营销活动详情
marketingInfoMet() {
console.log();
this.propData = JSON.parse(localStorage.getItem('propData'));
let marketingId = this.$route.query.marketing_id;
if (marketingId == undefined) {
return;
}
this.propData = JSON.parse(localStorage.getItem("propData"));
this.infoEditForm.title = this.propData.marketing_name;
this.infoEditForm.desc = this.propData.pindan_desc;
for (var i in this.propData.pindan_pic_url) {
this.infoEditForm.picUrlList.push({
url: this.propData.pindan_pic_url[i],
url: this.propData.pindan_pic_url[i]
});
}
},
}
},
watch: {
editInfo: function (newVal) {
let marketingId = this.$route.query.marketing_id;
if (marketingId == undefined) {
return;
}
localStorage.setItem('propData',JSON.stringify(newVal));
},
},
created() {
this.marketingInfoMet();
},
}
};
</script>
......
......@@ -2,6 +2,19 @@
<div id="map" class="mapContainer">
<!-- map -->
<div class="mapWrapper">
<div class="search">
<el-form-item label-position="left">
<el-button @click="handleSearch">搜索</el-button>
<el-input
class="dialog-input"
v-model="searchKey"
placeholder="请输入关键字"
autocomplete="off"
></el-input>
</el-form-item>
<div id="js-result" v-show="searchKey" class="result"></div>
</div>
<div id="js-container" class="myMap">
正在加载数据 ...
</div>
......@@ -9,6 +22,11 @@
<!-- info -->
<div class="mapInfo">
<!-- <div class="search" v-if="placeSearch">
<input type="text" placeholder="请输入关键字" v-model="searchKey" />
<button type="button" @click="handleSearch">搜索</button>
<div id="js-result" v-show="searchKey" class="result"></div>
</div> -->
<h3 class="title">拖拽选址</h3>
<ul class="info">
<li><span>经度:</span>{{ dragData.lng }}</li>
......@@ -26,6 +44,7 @@ export default {
data() {
return {
MapCityName: "北京",
searchKey: "",
dragData: {
lng: null,
lat: null,
......@@ -37,6 +56,12 @@ export default {
};
},
methods: {
// 搜索
handleSearch() {
if (this.searchKey) {
this.placeSearch.search(this.searchKey);
}
},
dragMap(data) {
this.dragData = {
lng: data.position.lng,
......@@ -54,10 +79,11 @@ export default {
// 加载PositionPicker,loadUI的路径参数为模块名中 'ui/' 之后的部分
let AMapUI = (this.AMapUI = window.AMapUI);
let AMap = (this.AMap = window.AMap);
AMapUI.loadUI(["misc/PositionPicker"], PositionPicker => {
let mapConfig = {
zoom: 16,
cityName: this.MapCityName
zoom: 16
// cityName: this.MapCityName
};
if (this.lat && this.lng) {
mapConfig.center = [this.lng, this.lat];
......@@ -70,7 +96,7 @@ export default {
pageSize: 5,
pageIndex: 1,
citylimit: true,
city: this.MapCityName,
// city: this.MapCityName,
map: map,
panel: "js-result"
});
......@@ -85,6 +111,36 @@ export default {
);
});
// 地图地图定位
AMap.plugin("AMap.Geolocation", function() {
var geolocation = new AMap.Geolocation({
// 是否使用高精度定位,默认:true
enableHighAccuracy: true,
// 设置定位超时时间,默认:无穷大
timeout: 10000,
// 定位按钮的停靠位置的偏移量,默认:Pixel(10, 20)
buttonOffset: new AMap.Pixel(10, 20),
// 定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
zoomToAccuracy: true,
// 定位按钮的排放位置, RB表示右下
buttonPosition: "RB"
});
map.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, "complete", onComplete);
AMap.event.addListener(geolocation, "error", onError);
function onComplete(data) {
console.log(data);
// data是具体的定位信息
}
function onError(data) {
console.log(data);
// 定位出错
}
});
// 创建地图拖拽
let positionPicker = new PositionPicker({
mode: "dragMap", // 设定为拖拽地图模式,可选'dragMap'、'dragMarker',默认为'dragMap'
......@@ -113,7 +169,7 @@ export default {
// 未载入高德地图API,则先载入API再初始化
} else {
await remoteLoad(
`http://webapi.amap.com/maps?v=1.3&key=16fe8e3f4c4a6f4981626ef2cf7c759d`
`http://webapi.amap.com/maps?v=1.3&key=bb057625545d8cf77df1379e7aaae0b5`
);
await remoteLoad("http://webapi.amap.com/ui/1.0/main.js");
this.initMap();
......@@ -129,8 +185,18 @@ export default {
display: flex;
flex-direction: row;
.mapWrapper {
position: relative;
width: 80%;
height: 100%;
.search {
position: absolute;
top: 10px;
left: 20px;
z-index: 100000;
.dialog-input {
width: 250px;
}
}
.myMap {
height: 100%;
height: 500px;
......@@ -148,66 +214,80 @@ export default {
}
}
}
.g-wraper {
width: 1000px;
margin: 0 auto;
color: #666;
font-size: 16px;
line-height: 30px;
}
.m-part {
margin-bottom: 30px;
}
.m-part::after {
content: "";
display: block;
clear: both;
}
.m-part .title {
font-size: 30px;
line-height: 60px;
margin-bottom: 10px;
color: #333;
}
.m-part .mapbox {
width: 600px;
height: 400px;
margin-bottom: 20px;
float: left;
.m-map .search {
position: absolute;
top: 10px;
left: 10px;
width: 285px;
z-index: 1;
}
.m-part .info {
margin: 0;
padding: 0;
list-style: none;
line-height: 30px;
margin-left: 620px;
}
.m-part .info span {
display: block;
color: #999;
}
.m-part ol {
line-height: 40px;
margin-left: 0;
padding-left: 0;
}
.m-part pre {
padding: 10px 20px;
line-height: 30px;
border-radius: 3px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);
}
.m-footer {
background: #eee;
line-height: 60px;
text-align: center;
color: #999;
font-size: 12px;
}
.m-footer a {
margin: 0 5px;
color: #999;
text-decoration: none;
.m-map .search input {
width: 180px;
border: 1px solid #ccc;
line-height: 20px;
padding: 5px;
outline: none;
}
// .g-wraper {
// width: 1000px;
// margin: 0 auto;
// color: #666;
// font-size: 16px;
// line-height: 30px;
// }
// .m-part {
// margin-bottom: 30px;
// }
// .m-part::after {
// content: "";
// display: block;
// clear: both;
// }
// .m-part .title {
// font-size: 30px;
// line-height: 60px;
// margin-bottom: 10px;
// color: #333;
// }
// .m-part .mapbox {
// width: 600px;
// height: 400px;
// margin-bottom: 20px;
// float: left;
// }
// .m-part .info {
// margin: 0;
// padding: 0;
// list-style: none;
// line-height: 30px;
// margin-left: 620px;
// }
// .m-part .info span {
// display: block;
// color: #999;
// }
// .m-part ol {
// line-height: 40px;
// margin-left: 0;
// padding-left: 0;
// }
// .m-part pre {
// padding: 10px 20px;
// line-height: 30px;
// border-radius: 3px;
// box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);
// }
// .m-footer {
// background: #eee;
// line-height: 60px;
// text-align: center;
// color: #999;
// font-size: 12px;
// }
// .m-footer a {
// margin: 0 5px;
// color: #999;
// text-decoration: none;
// }
</style>
......@@ -6,7 +6,7 @@
:active="active"
finish-status="success"
space="30%"
align-center="true"
:align-center="true"
>
<el-step title="信息编辑"></el-step>
<el-step title="添加商品"></el-step>
......@@ -27,7 +27,10 @@
<spellOrderSet
ref="spellOrderSet"
v-show="active === 3"
:spellOrderSet="spellOrderSetArr"
:spellOrderSetArr="spellOrderSetArr"
:startTime1="startTime"
:endTime1="endTime"
@getTakeTakePlaceListFromChild="getTakeTakePlaceListFromChild"
/>
</div>
<div class="stepsBtn">
......@@ -54,13 +57,13 @@ import spellOrderSet from "./components/spellOrderSet.vue";
import {
addMarketing,
marketingInfo,
updateMarketing,
updateMarketing
} from "../../../service/Activity/index";
export default {
components: {
infoEditing,
addProduc,
spellOrderSet,
spellOrderSet
},
data() {
return {
......@@ -71,6 +74,7 @@ export default {
spellOrderSetArr: [],
startDate: "", // 开始时间
endDate: "", // 结束时间
takePlaceIDArr: []
};
},
......@@ -87,12 +91,7 @@ export default {
ElMessage.error("请填写商品标题");
return;
}
this.infoEditArr = {
title: this.$refs.infoEdit.infoEditForm.title,
desc: this.$refs.infoEdit.infoEditForm.desc,
picUploadList:
this.$refs.infoEdit.infoEditForm.picUploadList.join(","),
};
this.infoEditArr.title = this.$refs.infoEdit.infoEditForm.title;
this.active = 2;
} else if (this.active === 2) {
if (this.$refs.addProduc.comTableData.length == 0) {
......@@ -115,18 +114,22 @@ export default {
}
let params = {
marketing_id: marketingId,
marketing_type: "4",
marketing_type: "4"
};
const res = await marketingInfo(params);
this.infoEditArr = res.result.marketing_info;
this.addProducArr = res.result.goods_list;
this.spellOrderSetArr = res.result.marketing_info;
this.spellOrderSetArr = res.result.take_place;
this.startTime = res.result.marketing_info.start_time;
this.endTime = res.result.marketing_info.end_time;
localStorage.setItem("propData", JSON.stringify(this.infoEditArr));
},
// 取消
cancel() {
this.$router.go(-1);
},
// 确认发布
async confirmRelease() {
for (var i in this.addProducArr) {
......@@ -140,20 +143,21 @@ export default {
? ""
: this.$route.query.marketing_id,
goods_sku_id: this.goodsSkuIDArr.join(","),
marketing_name: this.infoEditArr.title,
marketing_name: this.$refs.infoEdit.infoEditForm.title,
marketing_type: "4",
op_cur_user: store.state.userInfo.email,
start_time: this.startDate,
end_time: this.endDate,
pindan_pic: this.infoEditArr.picUploadList,
pindan_desc: this.infoEditArr.desc,
pindan_pic: this.$refs.infoEdit.infoEditForm.picUploadList.join(","),
pindan_desc: this.$refs.infoEdit.infoEditForm.desc,
take_place_ids: this.takePlaceIDArr
};
if (this.$route.query.marketing_id == undefined) {
const res = await addMarketing(params);
if (res.code === 0) {
ElMessage.success({
message: "添加成功",
type: "success",
type: "success"
});
this.$router.push({ path: "/op/activity/manage" });
} else {
......@@ -164,7 +168,7 @@ export default {
if (res.code === 0) {
ElMessage.success({
message: "修改成功",
type: "success",
type: "success"
});
this.$router.push({ path: "/op/activity/manage" });
} else {
......@@ -172,10 +176,13 @@ export default {
}
}
},
getTakeTakePlaceListFromChild(val) {
this.takePlaceIDArr = val;
}
},
created() {
this.marketingInfoMet();
},
}
};
</script>
......
......@@ -24,34 +24,43 @@ export async function pindanGoods(params) {
// 查看商品详情
export async function markGoodsInfo(params) {
const res = await axios.get("/api/v1/goods/background/marketing_goods_info", {
params
});
return res;
const res = await axios.get("/api/v1/goods/background/marketing_goods_info", {
params
});
return res;
}
// 编辑商品详情
export async function editGoods(params) {
const res = await axios.post("/api/v1/goods/background/edit_goods",params);
return res;
const res = await axios.post("/api/v1/goods/background/edit_goods", params);
return res;
}
// 添加营销活动
export async function addMarketing(params) {
const res = await axios.post("/api/v1/marketing/background/add_marketing",params);
return res;
const res = await axios.post(
"/api/v1/marketing/background/add_marketing",
params
);
return res;
}
// 编辑营销活动
export async function updateMarketing(params) {
const res = await axios.post("/api/v1/marketing/background/update_marketing",params);
return res;
const res = await axios.post(
"/api/v1/marketing/background/update_marketing",
params
);
return res;
}
// 营销活动详情
export async function marketingInfo(params) {
const res = await axios.post("/api/v1/marketing/background/marketing_info",params);
return res;
const res = await axios.post(
"/api/v1/marketing/background/marketing_info",
params
);
return res;
}
class ActivityService {
......@@ -92,6 +101,17 @@ class ActivityService {
return res;
}
// 查看活动订单-- 具体信息(新添加)
static async checkActivityDetailInfo(params) {
const res = await axios.get(
"/api/v1/order/background/pindan_marketing_info_data_statistics",
{
params
}
);
return res;
}
// 获取自提点列表
static async getPlaceList(params) {
const res = await axios.get(
......
const path = require('path');
const path = require("path");
const isDev = process.env.NODE_ENV === 'development';
const isDev = process.env.NODE_ENV === "development";
module.exports = {
outputDir: isDev
? './dist'
: path.resolve('./public/dist/'),
publicPath: isDev ? '/' : '/dist',
outputDir: isDev ? "./dist" : path.resolve("./public/dist/"),
publicPath: isDev ? "/" : "/dist",
configureWebpack: {
devServer: {
proxy: 'http://localhost:8055',
proxy: "http://127.0.0.1:8055", //http://localhost:8055
hot: true,
disableHostCheck: true,
},
disableHostCheck: true
}
},
chainWebpack: config => {
// 默认不开启 prefetch
config.plugins.delete('prefetch');
// 默认不开启 c
config.plugins.delete("prefetch");
// 默认不开启 preload
config.plugins.delete('preload');
config.plugins.delete("preload");
// 修改页面 title
config.plugin('html').tap(args => {
args[0].title = '运营管理系统';
config.plugin("html").tap(args => {
args[0].title = "运营管理系统";
return args;
});
},
}
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment