Commit d69677f3 authored by lihui's avatar lihui

feat: API

parent 0ec3923c
......@@ -10,3 +10,37 @@ exports.getActivityList = async ctx => {
};
ctx.body = await req(ctx, opts);
};
// 修改商品
exports.editGoodsDetail = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/edit_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 关闭/开启 活动
exports.updateActivity = 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);
console.log(ctx.body);
};
// 查看活动订单
exports.checkActivityDetail = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
......@@ -64,5 +64,8 @@ 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.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)
module.exports = router;
<template>
<div class="wrapper">
<div
class="wrapper"
v-loading="pageLoading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<div class="activityDetail">
<header class="header">
<div class="my-header">
<h3>
本周六四月三日 洞鞋子 周日就可以常抓这是给 请仔细阅读下面的文字
关注中澳提示
</h3>
<p class="endTime">距结束 22:77:88</p>
</header>
</div>
<section class="content">
<el-card class="activityGoods box-card">
<p class="title">拼单商品</p>
<div>
<el-image class="activityImage"
<el-image
class="activityImage"
style="width: 100px; height: 100px"
:src="url"
:fit="fit"
fit="fit"
></el-image>
<el-image class="activityImage"
<el-image
class="activityImage"
style="width: 100px; height: 100px"
:src="url"
:fit="fit"
fit="fit"
></el-image>
</div>
</el-card>
......@@ -31,18 +39,24 @@
布拉布拉这是一大片介绍信息 布拉布拉这是一大片介绍信息
布拉布拉这是一大片介绍信息 布拉布拉这是一大片介绍信息 布拉布拉
</p>
<el-image class="activityImage"
<el-image
class="activityImage"
style="width: 500px; height: 400px"
:src="url"
:fit="fit"
fit="fit"
></el-image>
</el-card>
<el-card class="activities box-card">
<div v-for="(item,index) in activityDetailList" :key="index" class="activityItem">
<el-image class="activityImage"
<div
v-for="(item, index) in activityDetailList"
:key="index"
class="activityItem"
>
<el-image
class="activityImage"
style="width: 100px; height: 100px"
:src="url"
:fit="fit"
fit="fit"
></el-image>
<div class="itemIntroduce">
<p>f发布写干洗 戏内除菌 消毒 数遍洗干净</p>
......@@ -63,21 +77,43 @@
</template>
<script>
import ActivityService from "@/service/Activity/index";
import { ElMessage } from "element-plus";
export default {
components: {},
props: {},
data() {
return {
fits: ["fill", "contain", "cover", "none", "scale-down"], // 图片属性
url: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
activityDetailList:[1,2,3]
pageLoading: false,
activityDetailInfo: {},
url:
"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
activityDetailList: [1, 2, 3]
};
},
watch: {},
computed: {},
methods: {},
created() {},
mounted() {},
methods: {
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
});
console.log(data.result);
this.pageLoading = false;
} catch {
this.pageLoading = false;
ElMessage.error("加载失败");
}
}
},
created() {
this.checkActivityDetail();
},
mounted() {}
};
</script>
<style lang="less" scoped>
......@@ -87,41 +123,40 @@ export default {
padding: 45px 10px 0;
.activityDetail {
width: 500px;
.header {
.my-header {
.endTime {
margin: 5px 0;
font-size: 15px;
color: red;
}
}
.content{
.box-card{
.content {
.box-card {
margin: 10px 0;
}
.activityGoods{
.title{
.activityGoods {
.title {
}
.activityImage{
.activityImage {
margin: 10px 10px 0 0;
}
}
.activityIntroduce{
.activityIntroduce {
padding: 5px 0;
.introduceText{
.introduceText {
margin-bottom: 20px;
}
}
.activities{
.activityItem{
.activities {
.activityItem {
display: flex;
margin:15px 0;
.itemIntroduce{
margin: 15px 0;
.itemIntroduce {
display: flex;
flex-direction: column;
justify-content: space-around;
margin-left: 10px;
>p{
> p {
width: 200px;
}
}
......
......@@ -52,9 +52,18 @@
align="center"
prop="activiteHead"
label="活动标题"
@header-click="handleHeadline"
width="width"
>
<template #default="scope">
<div @click="handleHeadline(scope.row)" class="activityTitle">
<div>
{{ scope.row.activiteHead }}
</div>
<div class="activityPrice">
{{ ` ¥ ${scope.row.minPrice}~¥${scope.row.maxPrice} ` }}
</div>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
......@@ -107,13 +116,17 @@
</el-table-column>
<el-table-column align="center" prop="scope" label="操作" width="250">
<template #default="scope">
<div class="button-one">
<el-button
type="primary"
size="small"
@click="handleModify(scope.row)"
>修改</el-button
>
<el-popconfirm title="确定要结束本次拼单吗?">
<el-popconfirm
title="确定要结束本次拼单吗?"
@confirm="updateActivity"
>
<template #reference>
<el-button
v-show="scope.row.status === 1"
......@@ -124,7 +137,10 @@
>
</template>
</el-popconfirm>
<el-popconfirm title="确定要开启本次拼单吗?">
<el-popconfirm
title="确定要开启本次拼单吗?"
@confirm="updateActivity"
>
<template #reference>
<el-button
v-show="scope.row.status === 2 || scope.row.status === 3"
......@@ -135,6 +151,8 @@
>
</template>
</el-popconfirm>
</div>
<el-button
class="checkButton"
type="primary"
......@@ -162,6 +180,7 @@
</div>
</template>
<script>
import { ElMessage } from "element-plus";
import ActivityService from "@/service/Activity/index";
import dayJs from "dayjs";
export default {
......@@ -175,21 +194,9 @@ export default {
pageCount: 0, // 总条数
currentPage: 1, //当前页码
pageSize: 10, // 每页条数
storeQuery: {}, // 存储开始 结束 参数
tableActivityList: [],
tableLoading: false,
manageList: [
{
activiteId: "413315",
activiteHead: "生活圈7月29午饭",
activiteStatus: "进行中",
orderNumber: "345",
soldGoods: "",
pay: "",
discounts: "",
refund: "",
realized: "4000"
}
],
options: [
{ value: "", label: "全部" },
{ value: "1", label: "未开始" },
......@@ -204,7 +211,8 @@ export default {
async getActivityList() {
let params = {
marketing_name: this.activity.activityName,
online_status: this.activity.online_status,
activity_status: this.activity.online_status, //1 未开始,2进行中,3已结束 空值 全部
marketing_type: 4, //1分销 2团购 3秒杀 4团餐 默认传4
// marketing_id: "",
page: this.currentPage,
page_size: this.pageSize
......@@ -217,15 +225,38 @@ export default {
this.tableLoading = false;
} catch {
this.tableLoading = false;
ElMessage.error("加载失败");
}
},
// API数据转table展示数据
/* API */
// 结束 开始
async updateActivity() {
try {
this.tableLoading = true;
let data = await ActivityService.updateActivity(this.storeQuery);
if (data.code === 0) {
await this.getActivityList();
} else {
this.tableLoading = false;
ElMessage.error(data.reason);
}
} catch {
this.tableLoading = false;
}
},
/* API */
// 修改
/* API */
// 查看订单
// 数据转换成tableData格式
filterTableActiveList(tableData) {
this.tableActivityList = tableData.map(item => {
let activityStatusText = "";
let dateNow = dayJs();
if (dateNow.diff(dayJs(item.start_time))) {
if (dateNow.diff(dayJs(item.start_time)) < 0) {
// 开始时间大于当前时间 return 未开始
activityStatusText = "未开始";
} else if (dayJs(item.end_time).diff(dayJs(item.start_time)) > 0) {
......@@ -240,6 +271,9 @@ export default {
activiteHead: item.marketing_name,
activiteStatus: activityStatusText,
status: item.online_status,
minPrice: item.min_price,
maxPrice: item.max_price,
marketing_type: 4,
orderNumber: 33,
soldGoods: "",
pay: "",
......@@ -257,17 +291,44 @@ export default {
},
// 点击活动标题
handleHeadline() {},
async handleHeadline(val) {
console.log(val);
this.$router.push({
name: "ActivityDetail",
query: {
marketing_id: val.activiteId,
marketing_type: val.marketing_type
}
});
},
// 发布拼单
goReleaseProduc() {
this.$router.push("/op/activity/releaseProduc");
},
// 修改
handleModify() {},
handleModify(val) {
this.$router.push({
path: "/op/activity/releaseProduc",
query: {
marketing_id: val.activiteId,
marketing_type: val.marketing_type
}
});
},
// 结束
handleEnd() {},
handleEnd(val) {
this.storeQuery = {
marketing_id: val.activiteId,
online_status: 2 // 1 启用 2 关闭
};
},
// 开始
handleStart() {},
handleStart(val) {
this.storeQuery = {
marketing_id: val.activiteId,
online_status: 1 // 1 启用 2 关闭
};
},
// 查看详情
handleLook() {}
},
......@@ -313,4 +374,10 @@ export default {
.checkButton {
margin-top: 5px;
}
.activityTitle {
cursor: pointer;
}
.activityPrice {
color: red;
}
</style>
/**
* 活动管理
*/
const activityRouters = [
const activityRouters = [
{
path: "/op/activity",
redirect: "/op/activity/manage"
......@@ -9,24 +9,28 @@
{
path: "/op/activity/manage",
name: "ManageList",
component: () => import(/* webpackChunkName: "activity" */ "@/pages/Activity/Manage")
component: () =>
import(/* webpackChunkName: "activity" */ "@/pages/Activity/Manage")
},
// 发布拼单
{
path: "/op/activity/releaseProduc",
name: "releaseProduc",
component: () => import(/* webpackChunkName: "activity" */ "@/pages/Activity/releaseProduc")
component: () =>
import(
/* webpackChunkName: "activity" */ "@/pages/Activity/releaseProduc"
)
},
// 标题详情
{
path:"/op/activity/activityDetail",
name:"ActivityDetail",
component: () => import(/* webpackChunkName: "activity" */ "@/pages/Activity/ActivityDetail")
path: "/op/activity/activityDetail",
name: "ActivityDetail",
component: () =>
import(
/* webpackChunkName: "activity" */ "@/pages/Activity/ActivityDetail"
)
}
];
];
export default activityRouters;
\ No newline at end of file
export default activityRouters;
......@@ -8,14 +8,35 @@ class ActivityService {
});
return res;
}
// 获取活动名称列表
// 获取活动状态列表
static async postMethod(query) {
const res = await axios.post("/api/v1/goods/background/online", {
goods_spu_id: query
// 修改商品
static async editGoodsDetail(query) {
const res = await axios.post("/api/v1/goods/background/edit_goods", {
...query
});
return res;
}
// 关闭/开启 活动
static async updateActivity(query) {
const res = await axios.post(
"/api/v1/marketing/background/update_marketing",
{
...query
}
);
return res;
}
// 查看活动订单
static async checkActivityDetail(query) {
const res = await axios.post(
"/api/v1/marketing/background/marketing_info",
{
...query
}
);
return res;
}
}
export default ActivityService;
import axios from "axios";
import store from "@/store"
import { v1 as uuidv1 } from 'uuid';
import store from "@/store";
import { v1 as uuidv1 } from "uuid";
// import jsonBig from 'json-bigint'
// import { ElMessage } from "element-plus";
......@@ -32,17 +32,16 @@ export const defaultConfig = {
*/
const getDefaultParams = () => {
return {
'op_cur_user': store.state.userInfo && store.state.userInfo.email,
'reqid': uuidv1().replace(/-/g, '')
}
op_cur_user: store.state.userInfo && store.state.userInfo.email,
reqid: uuidv1().replace(/-/g, "")
};
};
const getDefaultHeaders = (config) => {
const getDefaultHeaders = config => {
const { method } = config;
if (method.toLowerCase() === 'post') {
if (method.toLowerCase() === "post") {
return {
"Content-Type": "application/json"
}
};
}
};
......@@ -56,7 +55,7 @@ const instance = axios.create(defaultConfig);
* axios instance interceptors
*/
instance.interceptors.request.use(
function (config) {
function(config) {
// network error
if (navigator.onLine !== undefined && navigator.onLine === false) {
return Promise.reject({ message: "网络未链接", code: -1 });
......@@ -65,7 +64,7 @@ instance.interceptors.request.use(
/**
* merge headers
*/
config.headers = { ...getDefaultHeaders(config), ...config.headers }
config.headers = { ...getDefaultHeaders(config), ...config.headers };
/**
* merge params
......@@ -74,7 +73,7 @@ instance.interceptors.request.use(
return config;
},
function (error) {
function(error) {
// handle error
return Promise.reject(error);
}
......@@ -84,7 +83,7 @@ instance.interceptors.request.use(
* axios response instance
*/
instance.interceptors.response.use(
function (response) {
function(response) {
const { data = {} } = response;
// const code = data.code ?? -1;
// if (code !== 0) {
......@@ -106,8 +105,7 @@ instance.interceptors.response.use(
// return data;
// }
return data;
},
}
// function (error) {
// if (!(error.code && error.code === -1)) error.message = "接口请求错误";
// showErrorMessage(error.message);
......
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