Commit cb5bc6bd authored by lihui's avatar lihui

feat: 自提点

parent 2e10f914
...@@ -53,7 +53,7 @@ exports.editGoods = async ctx => { ...@@ -53,7 +53,7 @@ exports.editGoods = async ctx => {
body: ctx.request.body body: ctx.request.body
}; };
ctx.body = await req(ctx, opts); ctx.body = await req(ctx, opts);
}; };
// 获取活动过列表 // 获取活动过列表
exports.getActivityList = async ctx => { exports.getActivityList = async ctx => {
...@@ -138,7 +138,7 @@ exports.getPlaceList = async ctx => { ...@@ -138,7 +138,7 @@ exports.getPlaceList = async ctx => {
// 添加自提点 // 添加自提点
exports.addPlace = async ctx => { exports.addPlace = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/add_take_place"`; const url = `${ACTIVITY_URI}/marketing/background/add_take_place`;
const opts = { const opts = {
url, url,
method: "POST", method: "POST",
......
...@@ -6,6 +6,32 @@ ...@@ -6,6 +6,32 @@
element-loading-spinner="el-icon-loading" element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)" 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>
<div class="activityDetail"> <div class="activityDetail">
<div class="my-header"> <div class="my-header">
<h3>{{ marketingInfo.marketing_name }}</h3> <h3>{{ marketingInfo.marketing_name }}</h3>
......
...@@ -79,41 +79,6 @@ ...@@ -79,41 +79,6 @@
width="width" width="width"
> >
</el-table-column> </el-table-column>
<el-table-column
align="center"
prop="soldGoods"
label="已售商品数量"
width="width"
>
</el-table-column>
<el-table-column
align="center"
prop="pay"
label="支付金额"
width="width"
>
</el-table-column>
<el-table-column
align="center"
prop="discounts"
label="优惠金额"
width="width"
>
</el-table-column>
<el-table-column
align="center"
prop="refund"
label="已退款金额"
width="width"
>
</el-table-column>
<el-table-column
align="center"
prop="realized"
label="实际收入"
width="width"
>
</el-table-column>
<el-table-column align="center" prop="scope" label="操作" width="250"> <el-table-column align="center" prop="scope" label="操作" width="250">
<template #default="scope"> <template #default="scope">
<div class="button-one"> <div class="button-one">
......
...@@ -47,18 +47,24 @@ ...@@ -47,18 +47,24 @@
<script> <script>
import { GOODS_URI } from "../../../../../server/config"; import { GOODS_URI } from "../../../../../server/config";
export default { export default {
props: ["editInfo"], //props: ["editInfo"],
props: {
infoEditArr: {
type: Object,
required: () => {}
}
},
data() { data() {
return { return {
infoEditForm: { infoEditForm: {
title: "", // 标题 title: "", // 标题
desc: "", // 介绍 desc: "", // 介绍
picUploadList: [], // 上传详情图片列表 picUploadList: [] // 上传详情图片列表
}, },
isShowPopver: false, // 是否展示图片框 isShowPopver: false, // 是否展示图片框
picUrlList: [], // 图片回显列表 picUrlList: [], // 图片回显列表
uploadUrl: `${GOODS_URI}/ksy/ks3apiunencrypt/ks3api_upload`, // 金山云上传地址 uploadUrl: `${GOODS_URI}/ksy/ks3apiunencrypt/ks3api_upload` // 金山云上传地址
}; };
}, },
methods: { methods: {
...@@ -81,17 +87,17 @@ export default { ...@@ -81,17 +87,17 @@ export default {
this.infoEditForm.picUploadList.splice(i, 1); this.infoEditForm.picUploadList.splice(i, 1);
} }
} }
}
}, },
}, created() {
created(){
console.log(this.editInfo); console.log(this.editInfo);
} }
}; };
</script> </script>
<style scoped> <style scoped>
.infoEditing{ .infoEditing {
width: 64%; width: 64%;
margin: 0 auto; margin: 0 auto;
} }
</style> </style>
...@@ -2,11 +2,7 @@ ...@@ -2,11 +2,7 @@
<div id="map" class="mapContainer"> <div id="map" class="mapContainer">
<!-- map --> <!-- map -->
<div class="mapWrapper"> <div class="mapWrapper">
<div class="search" v-if="placeSearch"> <div id="js-container" class="myMap">
<input type="text" placeholder="请输入关键字" v-model="searchKey" />
<button type="button" @click="handleSearch">搜索</button>
</div>
<div id="js-container" @drag="dragMap" class="myMap">
正在加载数据 ... 正在加载数据 ...
</div> </div>
</div> </div>
...@@ -18,9 +14,6 @@ ...@@ -18,9 +14,6 @@
<li><span>经度:</span>{{ dragData.lng }}</li> <li><span>经度:</span>{{ dragData.lng }}</li>
<li><span>纬度:</span>{{ dragData.lat }}</li> <li><span>纬度:</span>{{ dragData.lat }}</li>
<li><span>地址:</span>{{ dragData.address }}</li> <li><span>地址:</span>{{ dragData.address }}</li>
<li><span>最近的路口:</span>{{ dragData.nearestJunction }}</li>
<li><span>最近的路:</span>{{ dragData.nearestRoad }}</li>
<li><span>最近的POI:</span>{{ dragData.nearestPOI }}</li>
</ul> </ul>
</div> </div>
</div> </div>
...@@ -49,14 +42,15 @@ export default { ...@@ -49,14 +42,15 @@ export default {
lng: data.position.lng, lng: data.position.lng,
lat: data.position.lat, lat: data.position.lat,
address: data.address, address: data.address,
nearestJunction: data.nearestJunction, province: data.regeocode.addressComponent.province,
nearestRoad: data.nearestRoad, city: data.regeocode.addressComponent.city,
nearestPOI: data.nearestPOI area: data.regeocode.addressComponent.district
}; };
}, },
// 初始化地图 // 初始化地图
initMap() { initMap() {
let that = this;
// 加载PositionPicker,loadUI的路径参数为模块名中 'ui/' 之后的部分 // 加载PositionPicker,loadUI的路径参数为模块名中 'ui/' 之后的部分
let AMapUI = (this.AMapUI = window.AMapUI); let AMapUI = (this.AMapUI = window.AMapUI);
let AMap = (this.AMap = window.AMap); let AMap = (this.AMap = window.AMap);
...@@ -69,6 +63,7 @@ export default { ...@@ -69,6 +63,7 @@ export default {
mapConfig.center = [this.lng, this.lat]; mapConfig.center = [this.lng, this.lat];
} }
let map = new AMap.Map("js-container", mapConfig); let map = new AMap.Map("js-container", mapConfig);
// 加载地图搜索插件 // 加载地图搜索插件
AMap.service("AMap.PlaceSearch", () => { AMap.service("AMap.PlaceSearch", () => {
this.placeSearch = new AMap.PlaceSearch({ this.placeSearch = new AMap.PlaceSearch({
...@@ -80,6 +75,7 @@ export default { ...@@ -80,6 +75,7 @@ export default {
panel: "js-result" panel: "js-result"
}); });
}); });
// 启用工具条 // 启用工具条
AMap.plugin(["AMap.ToolBar"], function() { AMap.plugin(["AMap.ToolBar"], function() {
map.addControl( map.addControl(
...@@ -88,19 +84,21 @@ export default { ...@@ -88,19 +84,21 @@ export default {
}) })
); );
}); });
// 创建地图拖拽 // 创建地图拖拽
let positionPicker = new PositionPicker({ let positionPicker = new PositionPicker({
mode: "dragMap", // 设定为拖拽地图模式,可选'dragMap'、'dragMarker',默认为'dragMap' mode: "dragMap", // 设定为拖拽地图模式,可选'dragMap'、'dragMarker',默认为'dragMap'
map: map // 依赖地图对象 map: map // 依赖地图对象
}); });
// 拖拽完成发送自定义 drag 事件 // 拖拽完成发送自定义 drag 事件
positionPicker.on("success", positionResult => { positionPicker.on("success", positionResult => {
// 过滤掉初始化地图后的第一次默认拖放 // 过滤掉初始化地图后的第一次默认拖放
if (!this.dragStatus) { if (!this.dragStatus) {
this.dragStatus = true; this.dragStatus = true;
} else { } else {
console.log(positionResult); this.dragMap(positionResult);
this.$emit("drag", positionResult); that.$emit("getMapInfo", this.dragData);
} }
}); });
// 启动拖放 // 启动拖放
...@@ -109,7 +107,6 @@ export default { ...@@ -109,7 +107,6 @@ export default {
} }
}, },
async created() { async created() {
console.log("niohao");
// 已载入高德地图API,则直接初始化地图 // 已载入高德地图API,则直接初始化地图
if (window.AMap && window.AMapUI) { if (window.AMap && window.AMapUI) {
this.initMap(); this.initMap();
...@@ -133,7 +130,7 @@ export default { ...@@ -133,7 +130,7 @@ export default {
flex-direction: row; flex-direction: row;
.mapWrapper { .mapWrapper {
width: 80%; width: 80%;
height: 500px; height: 100%;
.myMap { .myMap {
height: 100%; height: 100%;
height: 500px; height: 500px;
...@@ -141,6 +138,14 @@ export default { ...@@ -141,6 +138,14 @@ export default {
} }
.mapInfo { .mapInfo {
width: 20%; width: 20%;
padding-left: 20px;
display: flex;
flex-direction: column;
justify-content: start;
align-items: flex-start;
.info {
text-align: left;
}
} }
} }
......
...@@ -3,25 +3,30 @@ ...@@ -3,25 +3,30 @@
<!-- 时间选择器 --> <!-- 时间选择器 -->
<div class="spellOrderSet"> <div class="spellOrderSet">
<!-- 时间选择器 --> <!-- 时间选择器 -->
<div class="datepickerWrapper">
<span class="demonstration">拼单起止时间: </span> <span class="demonstration">拼单起止时间: </span>
<el-date-picker <el-date-picker
class="startTimePicker"
v-model="startDate" v-model="startDate"
type="datetime" type="datetime"
minTime="startMinTime" :disabledDate="pickerOptions.disabledDateStart"
maxTime="startMaxTime" :default-value="new Date()"
placeholder="选择日期时间" placeholder="选择开始时间"
@change="changeStartTime" @change="changeStartTime"
> >
</el-date-picker> </el-date-picker>
<el-date-picker <el-date-picker
class="endTimePicker"
v-model="endDate" v-model="endDate"
type="datetime" type="datetime"
minTime="endMinTime" :default-value="new Date()"
maxTime="MaxTime" placeholder="选择结束时间"
placeholder="选择日期时间" :disabledDate="pickerOptions.disabledDateEnd"
@change="changeEndTime" @change="changeEndTime"
> >
</el-date-picker> </el-date-picker>
</div>
<!-- 自提点列表 --> <!-- 自提点列表 -->
<div <div
class="card-wrapper" class="card-wrapper"
...@@ -38,8 +43,8 @@ ...@@ -38,8 +43,8 @@
class="set" class="set"
v-model="selfLiftingPoint" v-model="selfLiftingPoint"
placeholder="自提点名称/自提点联系人" placeholder="自提点名称/自提点联系人"
suffix-icon="el-icon-search"
></el-input> ></el-input>
<el-button type="primary" @click="getPlaceList">搜索</el-button>
<el-button type="primary" @click="dialogFormVisible = true" <el-button type="primary" @click="dialogFormVisible = true"
>添加自提点</el-button >添加自提点</el-button
> >
...@@ -79,7 +84,7 @@ ...@@ -79,7 +84,7 @@
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="contacts" prop="contactor"
align="center" align="center"
label="自提点联系人" label="自提点联系人"
width="width" width="width"
...@@ -92,12 +97,6 @@ ...@@ -92,12 +97,6 @@
width="width" width="width"
> >
<template #default="scope"> <template #default="scope">
<el-button
type="primary"
size="small"
@click="handleModify(scope.row)"
>修改</el-button
>
<el-popconfirm <el-popconfirm
title="确定要删除此自提点吗?" title="确定要删除此自提点吗?"
@confirm="deleteTakePlace" @confirm="deleteTakePlace"
...@@ -160,12 +159,16 @@ ...@@ -160,12 +159,16 @@
class="dialog-input" class="dialog-input"
v-model="form.location" v-model="form.location"
placeholder="" placeholder=""
:disabled="true"
></el-input> ></el-input>
<a href="javascript:;" style="margin-left: 30px" <a
href="javascript:;"
style="margin-left: 30px"
@click="mapDialogVisible = true"
>从高德获取坐标</a >从高德获取坐标</a
> >
</el-form-item> </el-form-item>
<p class="location">北京市朝阳区酒仙桥9号恒通国际创新园</p> <p class="location">{{ form.location }}</p>
<el-form-item <el-form-item
prop="address" prop="address"
label="详细地址" label="详细地址"
...@@ -178,12 +181,12 @@ ...@@ -178,12 +181,12 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="自提点联系人" label="自提点联系人"
prop="contacts" prop="contactor"
:label-width="formLabelWidth" :label-width="formLabelWidth"
> >
<el-input <el-input
class="dialog-input" class="dialog-input"
v-model="form.contacts" v-model="form.contactor"
maxlength="30" maxlength="30"
show-word-limit show-word-limit
></el-input> ></el-input>
...@@ -211,21 +214,19 @@ ...@@ -211,21 +214,19 @@
<!-- 地图 dialog --> <!-- 地图 dialog -->
<el-dialog <el-dialog
custom-class="mapDialog" custom-class="mapDialog"
title="提示"
v-model="mapDialogVisible" v-model="mapDialogVisible"
width="100%" width="100%"
:before-close="handleClose" :before-close="handleClose"
> >
<my-map class="my-map" /> <my-map class="my-map" @getMapInfo="getMapInfo" />
<template #footer> <div class="confirmButton">
<span class="dialog-footer"> <el-button @click="mapDialogVisible = false">取 消</el-button>
<el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="mapDialogVisible = false"
<el-button type="primary" @click="dialogVisible = false"
>确 定</el-button >确 定</el-button
> >
</span> </div>
</template>
</el-dialog> </el-dialog>
{{ infoEditArr }}
</div> </div>
</div> </div>
</div> </div>
...@@ -236,10 +237,36 @@ import ActivityService from "@/service/Activity/index"; ...@@ -236,10 +237,36 @@ import ActivityService from "@/service/Activity/index";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import myMap from "../components/myMap.vue"; import myMap from "../components/myMap.vue";
export default { export default {
props: {
infoEditArr: {
type: Object,
required: () => {}
}
},
data() { data() {
return { return {
startDate: "", //开始时间 startDate: "", //开始时间
endDate: "", // 结束时间 endDate: "", // 结束时间
pickerOptions: {
disabledDateStart(time) {
let _now = Date.now();
// let three = 3 * 24 * 60 * 60 * 1000;
let threeDays = _now + 3 * 24 * 60 * 60 * 1000;
return time.getTime() < _now || time.getTime() > threeDays; //大于当前的禁止,小于3天前的禁止
},
disabledDateEnd(time) {
let _now = null;
if (this.startDate) {
_now = this.startDate;
} else {
_now = Date.now();
}
let ninety = 90 * 24 * 60 * 60 * 1000;
let ninetyDays = _now + ninety;
return time.getTime() < _now || time.getTime() > ninetyDays; //大于当前的禁止,小于90天前的禁止
}
},
defaultTime1: [new Date(2000, 1, 1, 12, 0, 0)],
startMinTime: "", // 开始时间的最小选择时间 startMinTime: "", // 开始时间的最小选择时间
startMaxTime: "", // 开始时间的最大选择时间 startMaxTime: "", // 开始时间的最大选择时间
mapDialogVisible: false, mapDialogVisible: false,
...@@ -258,7 +285,7 @@ export default { ...@@ -258,7 +285,7 @@ export default {
address: [ address: [
{ required: true, message: "请输入详细地址", trigger: "blur" } { required: true, message: "请输入详细地址", trigger: "blur" }
], ],
contacts: [ contactor: [
{ required: true, message: "请输入联系人", trigger: "blur" }, { required: true, message: "请输入联系人", trigger: "blur" },
{ min: 0, max: 30, message: "长度在 0 到 30 个字符", trigger: "blur" } { min: 0, max: 30, message: "长度在 0 到 30 个字符", trigger: "blur" }
], ],
...@@ -284,8 +311,11 @@ export default { ...@@ -284,8 +311,11 @@ export default {
name: "", name: "",
location: "", location: "",
address: "", address: "",
contacts: "", contactor: "",
phone: "" phone: "",
province: "",
city: "",
area: ""
} // 添加自提点 详细信息 } // 添加自提点 详细信息
}; };
}, },
...@@ -306,8 +336,8 @@ export default { ...@@ -306,8 +336,8 @@ export default {
this.pageLoading = true; this.pageLoading = true;
let data = await ActivityService.getPlaceList(params); let data = await ActivityService.getPlaceList(params);
this.pageLoading = false; this.pageLoading = false;
this.setTableListData(data.data.list); this.setTableListData(data.result.list);
this.pageCount = data.data.total; this.pageCount = data.result.total;
} catch { } catch {
this.pageLoading = false; this.pageLoading = false;
ElMessage.error("加载失败"); ElMessage.error("加载失败");
...@@ -335,6 +365,7 @@ export default { ...@@ -335,6 +365,7 @@ export default {
let params = Object.assign(this.form, { let params = Object.assign(this.form, {
take_place_id: this.id //搜索关键词 take_place_id: this.id //搜索关键词
}); });
console.log(this.form);
try { try {
this.pageLoading = true; this.pageLoading = true;
await ActivityService.addPlace(params); await ActivityService.addPlace(params);
...@@ -352,7 +383,7 @@ export default { ...@@ -352,7 +383,7 @@ export default {
name: item.take_place_name, name: item.take_place_name,
location: item.province + item.city + item.area, // p + c + a location: item.province + item.city + item.area, // p + c + a
address: item.address, address: item.address,
contacts: item.contact_name, contactor: item.contact_name,
id: item.take_place_id id: item.take_place_id
}; };
}); });
...@@ -369,8 +400,10 @@ export default { ...@@ -369,8 +400,10 @@ export default {
if (valid) { if (valid) {
await this.addPlace(); await this.addPlace();
this.dialogFormVisible = false; this.dialogFormVisible = false;
this.$refs.ruleForm.resetFields();
} else { } else {
console.log("error submit!!"); this.dialogFormVisible = false;
console.log("添加失败");
return false; return false;
} }
}); });
...@@ -399,11 +432,20 @@ export default { ...@@ -399,11 +432,20 @@ export default {
// 改变结束时间 // 改变结束时间
changeEndTime() { changeEndTime() {
this.$emit("getEndTime", this.endDate); this.$emit("getEndTime", this.endDate);
},
// 获取地图信息
getMapInfo(mapInfo) {
this.form.location = mapInfo.address;
this.form.province = mapInfo.province;
this.form.city = mapInfo.city;
this.form.area = mapInfo.area;
this.form.longitude = mapInfo.lat; // longitude latitude contactor
this.form.latitude = mapInfo.lng;
} }
}, },
async created() { async created() {
// 初始化时间 // 初始化时间
this.startMinTime = ""; // 开始时间的最小选择时间 this.startMinTime = new Date(); // 开始时间的最小选择时间
this.startMaxTime = ""; // 开始时间的最大选择时间 this.startMaxTime = ""; // 开始时间的最大选择时间
this.getPlaceList(); this.getPlaceList();
} }
...@@ -427,6 +469,12 @@ export default { ...@@ -427,6 +469,12 @@ export default {
.spellOrderSet { .spellOrderSet {
text-align: center; text-align: center;
margin: 50px 0; margin: 50px 0;
.datepickerWrapper {
margin: 1px 0 30px;
}
.startTimePicker {
margin-right: 50px;
}
} }
.set { .set {
width: 50%; width: 50%;
...@@ -455,7 +503,12 @@ export default { ...@@ -455,7 +503,12 @@ export default {
height: 80%; height: 80%;
margin-top: 10vh !important; margin-top: 10vh !important;
.my-map { .my-map {
height: 100%; height: 10%;
}
.confirmButton {
position: absolute;
bottom: 100px;
right: 100px;
} }
} }
</style> </style>
...@@ -13,17 +13,17 @@ ...@@ -13,17 +13,17 @@
<el-step title="拼单设置"></el-step> <el-step title="拼单设置"></el-step>
</el-steps> </el-steps>
<div class="content"> <div class="content">
<<<<<<< Updated upstream <infoEditing
<infoEditing ref="infoEdit" v-if="active === 1" /> ref="infoEdit"
======= v-if="active === 1"
<infoEditing ref="infoEdit" v-if="active === 1" :editInfo="infoEditArr"/> :infoEditArr="infoEditArr"
>>>>>>> Stashed changes />
<addProduc <addProduc
ref="addProduc" ref="addProduc"
v-else-if="active === 2" v-else-if="active === 2"
:editInfo="infoEditArr" :editInfo="infoEditArr"
/> />
<spellOrderSet v-else /> <spellOrderSet :infoEditArr="infoEditArr" v-else />
</div> </div>
<div class="stepsBtn"> <div class="stepsBtn">
<el-button @click="prev" v-show="active >= 2" style="margin-right: 20px" <el-button @click="prev" v-show="active >= 2" style="margin-right: 20px"
...@@ -91,7 +91,7 @@ export default { ...@@ -91,7 +91,7 @@ export default {
} }
let params = { let params = {
marketing_id: marketingId, marketing_id: marketingId,
marketing_type: "4", marketing_type: "4"
}; };
const res = await marketingInfo(params); const res = await marketingInfo(params);
this.infoEditArr = res.result.marketing_info; this.infoEditArr = res.result.marketing_info;
...@@ -112,19 +112,15 @@ export default { ...@@ -112,19 +112,15 @@ export default {
start_time: "", start_time: "",
end_time: "", end_time: "",
pindan_pic: "", pindan_pic: "",
pindan_desc: "", pindan_desc: ""
}); });
console.log(res); console.log(res);
this.$router.push({ path: "/op/activity/manage" }); this.$router.push({ path: "/op/activity/manage" });
} }
}, },
<<<<<<< Updated upstream
created() {}
=======
created() { created() {
this.marketingInfoMet(); this.marketingInfoMet();
}, }
>>>>>>> Stashed changes
}; };
</script> </script>
......
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