Commit ee1aaf18 authored by pengyunqian's avatar pengyunqian

feature:分销管理

parent 5a16ebec
...@@ -2487,6 +2487,17 @@ ...@@ -2487,6 +2487,17 @@
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
} }
}, },
"chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"cliui": { "cliui": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz", "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz",
...@@ -2522,6 +2533,25 @@ ...@@ -2522,6 +2533,25 @@
"ms": "2.1.2" "ms": "2.1.2"
} }
}, },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"ms": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
...@@ -2537,6 +2567,28 @@ ...@@ -2537,6 +2567,28 @@
"minipass": "^3.1.1" "minipass": "^3.1.1"
} }
}, },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.2.0",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz",
"integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
},
"wrap-ansi": { "wrap-ansi": {
"version": "6.2.0", "version": "6.2.0",
"resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
...@@ -16434,87 +16486,6 @@ ...@@ -16434,87 +16486,6 @@
} }
} }
}, },
"vue-loader-v16": {
"version": "npm:vue-loader@16.2.0",
"resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-16.2.0.tgz?cache=0&sync_timestamp=1620717743226&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-loader%2Fdownload%2Fvue-loader-16.2.0.tgz",
"integrity": "sha1-BGpTMI3Ufljv4g3ewe3sAnzjtG4=",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
"integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.1",
"resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995354302&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz",
"integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
"integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
"integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
"integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz",
"integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1622293630895&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
"integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-router": { "vue-router": {
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.nlark.com/vue-router/download/vue-router-4.0.8.tgz", "resolved": "https://registry.nlark.com/vue-router/download/vue-router-4.0.8.tgz",
......
...@@ -24,3 +24,64 @@ exports.getCategoryList = async ctx => { ...@@ -24,3 +24,64 @@ exports.getCategoryList = async ctx => {
}; };
ctx.body = await req(ctx, opts); ctx.body = await req(ctx, opts);
}; };
// 营销活动列表
exports.getMarketingList = async ctx => {
const url = `${GOODS_URI}/marketing/background/marketing_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
const res = await req(ctx, opts);
console.log(res);
ctx.body = res;
};
// 获取查询活动列表
exports.getFindGoodsList = async ctx =>{
const url = `${GOODS_URI}/marketing/background/goods_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
const res = await req(ctx, opts);
ctx.body = res;
};
// 添加活动列表
exports.getAddMarketingList = async ctx => {
const url = `${GOODS_URI}/marketing/background/add_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
const res = await req(ctx, opts);
ctx.body = res;
};
// 查看列表详情
exports.getMarketingInfo = async ctx => {
const url = `${GOODS_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
const res = await req(ctx, opts);
ctx.body = res;
};
// 开启关闭状态
exports.updateMarketingList = async ctx => {
const url = `${GOODS_URI}/marketing/background/update_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
const res = await req(ctx, opts);
ctx.body = res;
};
...@@ -39,7 +39,12 @@ router.post(`${API_VERSION}/op_business_update`, enterprise.opBusinessUpdate); ...@@ -39,7 +39,12 @@ router.post(`${API_VERSION}/op_business_update`, enterprise.opBusinessUpdate);
/* 商品管理 */ /* 商品管理 */
router.get(`${API_VERSION}/get_goods_category_list`, goods.getCategoryList) router.get(`${API_VERSION}/get_goods_category_list`, goods.getCategoryList)
// 营销活动
router.post(`${API_VERSION}/get_marketing_list`,goods.getMarketingList)
router.post(`${API_VERSION}/get_addmarketing_list`,goods.getAddMarketingList)
router.post(`${API_VERSION}/get_find_goods_list`,goods.getFindGoodsList)
router.post(`${API_VERSION}/get_marketing_info`,goods.getMarketingInfo)
router.post(`${API_VERSION}/update_marketing_list`,goods.updateMarketingList)
//生活号 //生活号
router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info) router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info)
router.get(`${API_VERSION}/merchant/lifeinner/life_list`, life.get_life_list) router.get(`${API_VERSION}/merchant/lifeinner/life_list`, life.get_life_list)
......
<template> <template>
<el-card class="container"> <el-card class="container" style="width: 100%; height: 100%">
<div class="retail"> <div class="retail">
<el-form inline> <el-form inline :model="retailActivitie" ref="retailActivitie">
<el-form-item label="分销活动id"> <!-- 查询 -->
<el-input size="mini"></el-input> <el-row>
<el-form-item label="分销活动id" prop="marketing_id">
<!-- :rules="[{ type: 'number', message: '活动id必须为数字值' }]" -->
<el-input
onkeyup="value=value.replace(/[^\d]/g,'')"
v-model.number="retailActivitie.marketing_id"
></el-input>
</el-form-item>
<el-form-item label="分销活动名称">
<el-input v-model="retailActivitie.marketing_name"></el-input>
</el-form-item> </el-form-item>
<el-form-item class="search_input" label="分销活动名称"> <el-form-item label="商品id">
<el-input size="mini"></el-input> <el-input v-model="retailActivitie.goods_sku_id"></el-input>
</el-form-item> </el-form-item>
<el-form style="margin-left: 30px">
<el-form-item label="状态"> <el-form-item label="状态">
<el-button class="but but_one" type="info" plain size="mini" <el-select
>全部</el-button v-model="retailActivitie.online_status"
> multiple
<el-button class="but" type="info" plain size="mini" collapse-tags
>到期</el-button
>
<el-button class="but" type="info" plain size="mini"
>启用</el-button
>
<el-button class="but" type="info" plain size="mini"
>关闭</el-button
> >
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-form> <!-- 按钮操作 -->
<el-button <el-form-item class="search_button">
type="primary" <el-button type="primary" @click="toSearch">搜索</el-button>
style="margin-bottom: 10px" <el-button @click="reset('retailActivitie')">重置</el-button>
@click="dialogFormVisible = true" </el-form-item>
</el-row>
<el-button type="primary" style="margin-bottom: 10px" @click="createDtb"
>创建分销活动</el-button >创建分销活动</el-button
> >
<el-table <!-- Tab -->
:data="tableData" <el-table :data="tableData" type="index" align="center" border>
align="center"
:header-cell-style="{ background: '#eee', color: '#606266' }"
style="width: 100%"
size="mini"
>
<el-table-column <el-table-column
align="center" align="center"
prop="date" prop="marketing_id"
fixed fixed
label="分销活动id" label="分销活动id"
width="100"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="name" prop="marketing_name"
label="分销活动名称" label="分销活动名称"
width="100"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="province" prop="commission_mode"
label="关联商品数" label="关联商品数"
width="100"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="first" prop="first_commission_value"
label="一级分销金额" label="一级分销金额"
width="120"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="second" prop="second_commission_value"
label="二级分销金额" label="二级分销金额"
width="120"
> >
</el-table-column> </el-table-column>
<el-table-column align="center" prop="state" label="状态" width="100"> <el-table-column align="center" prop="online_status" label="状态">
</el-table-column> <template #default="scope">
<el-table-column align="center" prop="founder" label="创建人" width="100"> <span
</el-table-column> :style="{ color: scope.row.online_status == 3 ? 'red' : '' }"
<el-table-column
align="center"
prop="creation-time"
label="创建时间"
width="100"
> >
{{
scope.row.online_status == 2
? "关闭"
: scope.row.online_status == 1
? "启用"
: "到期"
}}
</span>
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="update_time" prop="create_user_email"
label="更新时间" label="创建人"
width="100"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" prop="create_time" label="创建时间">
align="center"
prop="due_time"
label="分销到期时间"
width="150"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" prop="update_time" label="更新时间">
align="center" </el-table-column>
:header-cell-style="{ background: 'none' }" <el-table-column align="center" prop="end_time" label="分销到期时间">
label="操作" </el-table-column>
> <el-table-column fixed="right" align="center" label="操作">
<template #default="scope"> <template #default="scope">
<el-button @click="handleClick(scope.row)" type="text" size="mini" <el-button @click="handleClick(scope.row)" type="text" size="mini"
>查看</el-button >查看</el-button
> >
<el-button type="text" size="mini" >关闭</el-button> <el-button
<el-button type="text" size="mini" >启用</el-button> type="text"
size="mini"
@click.stop="handelEnable(scope.row, 2)"
v-if="
scope.row.online_status === 1 && scope.row.online_status !== 3
"
>
关闭
</el-button>
<el-button
type="text"
size="mini"
v-if="
scope.row.online_status === 2 && scope.row.online_status !== 3
"
@click.stop="handelEnable(scope.row, 1)"
>启用</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form> </el-form>
</div> </div>
<!-- 页码区 -->
<el-pagination
class="pagination"
@current-change="handleCurrentChange"
v-model.current-page="retailActivitie.page"
:page-size="retailActivitie.page_size"
layout="prev, pager, next, jumper, ->,page , total"
:total="retailActivitie.count"
>
</el-pagination>
</el-card> </el-card>
<!-- 创建分销活动 --> <!-- 创建分销活动 -->
<el-dialog fullscreen title="创建分销活动" v-model="dialogFormVisible" width="100%"> <el-dialog
v-show="shopStart == 0"
fullscreen
title="创建分销活动"
v-model="dialogFormVisible"
width="100%"
:show-close="false"
dialogClass="no-close"
>
<div class="bor"> <div class="bor">
<el-row :gutter="50"> <el-row :gutter="50">
<el-col :span="12"> <el-col :span="12">
<el-form :model="form" size="small" label-width="150px"> <el-form
<el-form-item label="分销活动名称:"> :model="ruleForm"
<el-input autocomplete="off"></el-input> :rules="rules"
</el-form-item> ref="ruleForm"
<el-form-item label="一级佣金:" :label-width="formLabelWidth"> size="small"
<el-input></el-input> label-width="150px"
>
<el-form-item
prop="marketing_name"
label="分销活动名称:"
class="marketing"
>
<el-input
v-model="ruleForm.marketing_name"
autocomplete="off"
:disabled="shopStart !== 0"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="二级佣金:" :label-width="formLabelWidth"> <el-form-item label="一级佣金:" prop="first_commission_value">
<el-input></el-input> <el-input
v-model="ruleForm.first_commission_value"
:disabled="shopStart !== 0"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="活动生效时间:" :label-width="formLabelWidth"> <el-form-item label="二级佣金: ">
<el-input <el-input
placeholder="2016-09-21 08:50:08~2016-09-21 08:50:08" v-model="ruleForm.second_commission_value"
:disabled="shopStart !== 0"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="活动生效时间:">
<el-date-picker
v-model="timeSelect"
:disabled="shopStart !== 0"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="YYYY-MM-DD HH:mm:ss"
@change="selectTime"
>
</el-date-picker>
</el-form-item>
</el-form> </el-form>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form inline ref="form" :model="form" size="mini"> <el-form
inline
:model="ruleIdForm"
:rules="rules"
ref="ruleIdForm"
size="mini"
>
<div class="queryBox" v-show="shopStart == 0">
<el-form-item label="关联商品:"> </el-form-item> <el-form-item label="关联商品:"> </el-form-item>
<el-form-item label="商品id:"> <el-form-item label="商品id:">
<el-input></el-input> <el-input
v-model="ruleIdForm.goods_sku_id"
:disabled="shopStart !== 0"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="生活号id:"> <el-form-item label="生活号id:">
<el-input></el-input> <el-input
v-model="ruleIdForm.life_account_id"
:disabled="shopStart !== 0"
></el-input>
</el-form-item> </el-form-item>
<div class="tab"> <el-button
<el-table class="exporttable" size="mini" align="center" :data="tableData" border style="width: 100%;border-color:#606266" :header-cell-style="{borderColor:'#606266'}" :cell-style="{borderColor:'#606266'}"> type="primary"
<el-table-column align="center" type="selection" > size="mini"
style="margin-bottom: 30px"
@click="findProducts"
>查询</el-button
>
</div>
<div :class="shopStart == 0 ? 'newTab' : 'readTab'">
<el-table
class="exporttable"
size="mini"
align="center"
:data="goods_list"
max-height="200"
border
style="width: 100%"
@selection-change="selectGoodsChange"
>
<el-table-column align="center" type="selection">
</el-table-column> </el-table-column>
<el-table-column align="center" prop="date" label="商品id"> <el-table-column
align="center"
prop="goods_sku_id"
label="商品id"
>
</el-table-column> </el-table-column>
<el-table-column align="center" prop="name" label="商品名称"> <el-table-column
align="center"
prop="goods_name"
label="商品名称"
>
</el-table-column>
<el-table-column
align="center"
prop="life_account_id"
label="生活号id"
>
</el-table-column>
<el-table-column
align="center"
prop="life_account_name"
label="生活号名称"
>
</el-table-column> </el-table-column>
<el-table-column align="center" prop="address" label="生活号id"> </el-table-column>
<el-table-column align="center" prop="address" label="生活号名称"> </el-table-column>
</el-table> </el-table>
</div> </div>
</el-form> </el-form>
...@@ -164,88 +273,404 @@ ...@@ -164,88 +273,404 @@
</div> </div>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button type="primary" @click="dialogFormVisible = false" style="width:150px">取 消</el-button> <el-button type="primary" @click="cancel" style="width: 150px">{{
<el-button type="primary" @click="dialogFormVisible = false" style="width:150px">确 定</el-button> shopStart == 0 ? "取消" : "返回"
}}</el-button>
<el-button
type="primary"
@click="addList"
style="width: 150px"
v-if="shopStart == 0"
>确 定</el-button
>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import {
getMarketingList,
getFindGoodsList,
getAddMarketingList,
getMarketingInfo,
updateMarketingList,
} from "@/service/Goods/goods";
import { ElMessage } from "element-plus";
import debounce from "lodash/debounce";
// import { mapState } from 'vuex';
export default { export default {
name: "GoodsRetail", name: "GoodsRetail",
data() { data() {
return { return {
tableData: [ tableData: [{ create_user_email: "v-pengyuqian@yidian-inc.com" }],
{ // 详情页
date: "2016-05-02", detailInfo: {
name: "xxx", marketing_name: "",
province: "上海", first_commission_value: "",
city: "普陀区", second_commission_value: "",
address: "上海市普陀区金沙江路 1518 弄", start_time: "",
zip: "启用", end_time: "",
time: 200333, },
}, goods_list: [],
{ options: [
date: "2016-05-02", { value: 0, label: "全部" },
name: "xxx", { value: 1, label: "启用" },
province: "上海", { value: 2, label: "关闭" },
city: "普陀区", { value: 3, label: "到期" },
address: "上海市普陀区金沙江路 1518 弄", ],
zip: 200333, // 搜索条件
retailActivitie: {
marketing_id: "",
marketing_name: "",
goods_sku_id: "",
online_status: [],
page: 1,
page_size: 5,
count: 0,
}, },
ruleForm: {
marketing_name: "",
first_commission_value: "",
second_commission_value: "",
start_time: "",
end_time: "",
goods_sku_id: [],
},
timeSelect: [],
ruleIdForm: {
life_account_id: "",
goods_sku_id: "",
start_time: "",
end_time: "",
},
rules: {
marketing_name: [
{ required: true, message: "请输入活动名称", trigger: "blur" },
{ min: 1, max: 50, message: "长度在 50个字符内", trigger: "blur" },
],
first_commission_value: [
{ required: true, message: "请填写一级佣金", trigger: "blur" },
], ],
// goods_sku_id: [
// { type: "number", message: "商品id必须为数字值", trigger: "change" },
// ],
},
allList: [],
dialogFormVisible: false, dialogFormVisible: false,
shopStart: 0, //商品id生活号id的显示隐藏状态
startTime: "",
endTime: "",
marketing_id: "",
marketing_info: {},
disabled: false,
}; };
}, },
methods: { methods: {
handleClick(row) { // 查看详情列表
console.log(row); async handleClick(row) {
this.dialogFormVisible = true;
this.shopStart = 1;
this.disabled = true;
try {
const res = await getMarketingInfo({ marketing_id: row.marketing_id });
this.startTime = res.result.marketing_info.start_time;
this.endTime = res.result.marketing_info.end_time;
this.timeSelect = [new Date(this.startTime), new Date(this.endTime)];
this.ruleForm = res.result.marketing_info;
this.goods_list = res.result.goods_list;
} catch (error) {
ElMessage.error("请求查看详情列表失败");
}
},
// 页码变化
handleCurrentChange(e) {
this.retailActivitie.page = e;
this.getMarketingList();
},
// 营销活动列表
async getMarketingList() {
try {
const res = await getMarketingList(this.retailActivitie);
this.tableData = res.result;
this.retailActivitie.count = res.count; //总条数
this.resetDate();
} catch (error) {
ElMessage.error("请求获取营销活动失败");
}
},
// 关闭状态
// async handelClose(row) {
// try {
// await updateMarketingList({
// marketing_id: row.marketing_id,
// online_status: 2,
// });
// this.getMarketingList();
// ElMessage.success("状态已关闭");
// } catch (error) {
// ElMessage.error("请求关闭失败" + error.message);
// }
// },
//启用状态
// async handelEnable(row) {
// try {
// // const res = await updateMarketingList({
// await updateMarketingList({
// marketing_id: row.marketing_id,
// online_status: 1,
// });
// this.getMarketingList();
// ElMessage("状态已启用");
// } catch (error) {
// ElMessage("请求开启状态失败");
// }
// },
handelEnable: debounce(async function (row, type) {
try {
await updateMarketingList({
marketing_id: row.marketing_id,
online_status: type,
});
this.getMarketingList();
ElMessage.success(type === 1 ? "状态已启用" : "状态已关闭");
} catch (error) {
ElMessage.error("请求开启状态失败");
}
}, 300),
// 创建分销活动
createDtb() {
this.dialogFormVisible = true;
this.shopStart = 0;
}, },
// 重置
reset(retailActivitie) {
(this.retailActivitie = {
marketing_id: "",
marketing_name: "",
goods_sku_id: "",
online_status: [],
page: 1,
page_size: 5,
}),
this.$refs[retailActivitie].resetFields();
this.getMarketingList({});
},
// 搜索
toSearch() {
this.getMarketingList();
console.log(this.retailActivitie);
},
selectTime(e) {
let date = new Date();
if (e && e[1] < date) {
ElMessage(`'活动结束时间不能早于当前时间'`);
this.timeSelect = [];
}
},
// 获取时间格式
formatTime(date) {
// 封装函数判断是否要在目标前边加 ’0‘
function getStr(target) {
return ("" + target).length === 1 ? "0" + target : target;
}
// 获取月
const month = date.getMonth() + 1;
// 获取号
const day = date.getDate();
// 获取时
const h = date.getHours();
// 获取分
const m = date.getMinutes();
// 获取秒
const s = date.getSeconds();
// 拼串
const timeStr = `${date.getFullYear()}-${getStr(month)}-${getStr(
day
)} ${getStr(h)}:${getStr(m)}:${getStr(s)}`;
// 将结果返回
return timeStr;
},
// 查询商品列表
async findProducts() {
// 获取参数
const { goods_sku_id, life_account_id } = this.ruleIdForm;
let [start_time, end_time] = this.timeSelect;
if (start_time && end_time) {
start_time = this.formatTime(start_time);
end_time = this.formatTime(end_time);
} else {
ElMessage("查询商品前请先配置活动生效时间");
return;
}
// console.log(start_time, end_time);
// 整理参数
const ruleIdForm = {
goods_sku_id,
life_account_id,
start_time,
end_time,
};
try {
// 发请求
const res = await getFindGoodsList(ruleIdForm);
// 成功逻辑:展示列表数据
this.goods_list = res.result;
} catch (error) {
// 失败逻辑
ElMessage.error("请求查询商品列表失败");
}
},
selectGoodsChange(e) {
this.ruleForm.goods_sku_id = e.map((item) => item.goods_sku_id);
},
async getAllList() {
let all = await getMarketingList({
page: 1,
page_size: this.retailActivitie.count,
});
this.allList = all.result;
},
// 添加活动列表
async addList() {
console.log(this.ruleForm.goods_sku_id);
if (this.ruleForm.goods_sku_id.length <= 0) {
ElMessage("请选择商品");
return;
} else {
var goods_sku_id =
this.ruleForm.goods_sku_id && this.ruleForm.goods_sku_id.join(",");
}
// console.log(goods_sku_id);
let { marketing_name, first_commission_value, second_commission_value } =
this.ruleForm;
let [start_time, end_time] = this.timeSelect;
if (
!marketing_name ||
!first_commission_value ||
!start_time ||
!end_time
) {
ElMessage("请填写完整");
return;
}
let addParams = {
goods_sku_id,
marketing_name,
first_commission_value,
second_commission_value,
start_time: this.formatTime(start_time),
end_time: this.formatTime(end_time),
};
// let resList = [];
// // 遍历选择的商品
// this.allList.forEach((item) => {
// // 判断该活动是否是开启状态且时间与选择时间冲突
// if (item.online_status == 1 && new Date(item.end_time) > start_time) {
// // 如果开启且重复,根据活动id请求获取这个活动的详情,判断这个活动的关联商品是否与选择商品重复
// resList.push(getMarketingInfo({ marketing_id: item.marketing_id }));
// }
// });
// let skuList = await Promise.all(resList);
// skuList = skuList.map((item) => item.result.goods_list);
// skuList = skuList.flat();
// console.log(skuList);
// const ok = this.ruleForm.goods_sku_id.every((skuId) => {
// // 遍历所有的活动,判断选择的商品是否符合条件
// return !skuList.find((item) => {
// console.log(item.goods_sku_id, skuId);
// return item.goods_sku_id == skuId;
// });
// });
// if (ok) {
try {
const res = await getAddMarketingList(addParams);
if (res.status == "success") {
this.getMarketingList();
this.dialogFormVisible = false;
} else {
ElMessage(res.reason);
}
// this.ruleIdForm = res.result;
} catch (error) {
ElMessage.error("请求创建活动失败");
}
// } else {
// ElMessage("已有该关联商品,请重新选择");
// }
},
// 清空
resetDate() {
(this.ruleForm = {
marketing_name: "",
first_commission_value: "",
second_commission_value: "",
start_time: "",
end_time: "",
goods_sku_id: [],
}),
(this.timeSelect = []),
(this.goods_list = []),
(this.ruleIdForm = {
life_account_id: "",
goods_sku_id: "",
start_time: "",
end_time: "",
});
},
// 取消
cancel() {
this.dialogFormVisible = false;
this.resetDate();
this.getMarketingList();
},
},
created() {
this.getMarketingList();
this.getAllList();
}, },
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.container { .container {
// display: flex; display: flex;
width: 100%;
height: 100%;
.retail { .retail {
margin-top: 30px;
}
.search_input{
margin-left: 100px;
} }
.but_one { .but_one {
margin-left: 10px; margin-left: 10px;
} }
.but {
margin-right: 10px;
border-radius: 0;
color: #606266;
}
} }
.el-dialog{ .el-form-item {
padding: 20px 0 10px;
border-bottom: 1px solid #606266;
text-indent: 5%;
}
.el-form-item{
margin-top: 30px; margin-top: 30px;
} }
::v-deep .el-input input{ .bor {
border-radius: 0; margin-left: -30px;
border: 1px solid #606266;
} }
.exporttable{ .newTab {
border: 1px solid #606266; margin-top: 0;
} }
.tab{ .readTab {
border: 1px solid #606266; margin-top: 30px;
padding: 20px 10px;
} }
.dialog-footer{ .dialog-footer {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
</style> </style>
<style scoped>
.container >>> .el-card__body {
width: 100%;
}
/* .bor >>> .el-row {
width: 100%;
} */
.queryBox >>> .el-form-item--mini,
.marketing {
margin-top: 0;
}
</style>
\ No newline at end of file
import axios from "@/utils/request"; import axios from "@/utils/request";
// 获取商品分类列表 // 获取商品分类列表
export async function getGoodsList () { export async function getGoodsList() {
const res = await axios.get("/api/v1/get_goods_category_list"); const res = await axios.get("/api/v1/get_goods_category_list");
return res; return res;
} }
// 获取营销活动列表
export async function getMarketingList(params) {
const res = await axios.post("/api/v1/get_marketing_list", params);
return res;
}
// 获取查询商品列表
export async function getFindGoodsList(params) {
const res = await axios.post("/api/v1/get_find_goods_list", params);
return res;
}
// 获取添加活动列表
export async function getAddMarketingList(params) {
const res = await axios.post("/api/v1/get_addmarketing_list", params);
return res;
}
// 获取查看列表
export async function getMarketingInfo(marketing_id) {
const res = await axios.post("/api/v1/get_marketing_info", marketing_id);
return res;
}
// 获取开启关闭
export async function updateMarketingList(params) {
const res = await axios.post("/api/v1/update_marketing_list", params);
return res;
}
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