|
@@ -1,17 +1,293 @@
|
|
|
<template>
|
|
|
- <div>1111
|
|
|
+ <div class="app-container goods-add">
|
|
|
+ <el-divider content-position="left">基础信息</el-divider>
|
|
|
+ <el-form ref="addItem" :rules="rules" :model="addData" label-width="120px">
|
|
|
+ <el-row :gutter="40" style="width: 600px">
|
|
|
+ <el-col :span="23">
|
|
|
+ <el-form-item label="活动名称:" prop="title">
|
|
|
+ <el-input v-model="addData.title" placeholder="输入活动名称" :readonly="readonly"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="23">
|
|
|
+ <!-- <el-form-item label="活动封面:" prop="picUrl">-->
|
|
|
+ <!-- <Upload v-model="addData.picUrl" :limit="1" />-->
|
|
|
+ <!-- </el-form-item>-->
|
|
|
+ <el-form-item label="活动封面:" prop="picUrl">
|
|
|
+ <image-upload
|
|
|
+ v-model="marketingPicUrl"
|
|
|
+ :limit="1"
|
|
|
+ :file-size="0.2"
|
|
|
+ @change="$refs.addItem.validateField(['picUrl'])"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col>
|
|
|
+ <el-form-item label="活动日期:" prop="dateValue">
|
|
|
+ <el-date-picker value-format="timestamp" v-model="addData.dateValue" type="datetimerange"
|
|
|
+ range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16">
|
|
|
+ <el-form-item label="初始用户数:">
|
|
|
+ <el-input v-model="addData.fakeNum" :readonly="readonly"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="23">
|
|
|
+ <el-form-item label="抽奖码获取方式:" prop="type">
|
|
|
+ <el-col>邀请用户助力</el-col>
|
|
|
+ <el-col>用户助力条件:
|
|
|
+ <el-radio-group v-model="labelRadio" :disabled="readonly">
|
|
|
+ <el-radio :label="1">每个账号终身仅助力一次</el-radio>
|
|
|
+ <el-radio :label="2" disabled>无</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-col>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-divider content-position="left">奖品设置</el-divider>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="22">
|
|
|
+ <el-form-item label="" prop="awardsList">
|
|
|
+ <!-- 奖级列表 -->
|
|
|
+ <awards-list ref="awards" v-model="awardsList" @handleCommand="handleCommand" @close="close"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-divider content-position="left">活动详情</el-divider>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="22">
|
|
|
+ <el-form-item label="" prop="description">
|
|
|
+ <wang-editor ref="editor" v-model="addData.description"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
|
|
|
- 222
|
|
|
- </div>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24" style="text-align: center">
|
|
|
+ <el-button type="info" @click="$router.replace('/marketing/marketing')">取消</el-button>
|
|
|
+ <el-button type="primary" @click="update()">保存</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
|
|
|
+ <!-- 添加商品 -->
|
|
|
+ <goods-add :dialog-visible="goodsTableVisible" @close="close" @confirmGoods="confirmGoods"
|
|
|
+ v-if="goodsTableVisible"/>
|
|
|
+ <!-- 添加券 -->
|
|
|
+ <coupon-add :dialog-visible="couponTableVisible" @close="close" @confirmCoupon="confirmCoupon"
|
|
|
+ v-if="couponTableVisible"/>
|
|
|
+ <!-- 添加券包 -->
|
|
|
+ <coupon-pkg-add :dialog-visible="couponPkgTableVisible" @close="close" @confirmCouponPkg="confirmCouponPkg"
|
|
|
+ v-if="couponPkgTableVisible"/>
|
|
|
+ <!-- 添加盲豆 -->
|
|
|
+ <coin-add :dialog-visible="coinTableVisible" @close="close" @confirmCoin="confirmCoin" v-if="coinTableVisible"/>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import {getGoodsDetail, addMarketing} from '@/api/business/marketing'
|
|
|
+import Upload from '@/components/DragImageUpload'
|
|
|
+import WangEditor from '@/components/WangEditor'
|
|
|
+import AwardsList from "./components/AwardsList"
|
|
|
+import GoodsAdd from "./components/GoodsAdd"
|
|
|
+import CouponAdd from "./components/CouponAdd"
|
|
|
+import CouponPkgAdd from "./components/CouponPkgAdd"
|
|
|
+import CoinAdd from "./components/CoinAdd"
|
|
|
+
|
|
|
export default {
|
|
|
- name: "add"
|
|
|
+ name: "add",
|
|
|
+ components: {
|
|
|
+ Upload,
|
|
|
+ WangEditor,
|
|
|
+ AwardsList,
|
|
|
+ GoodsAdd,
|
|
|
+ CouponAdd,
|
|
|
+ CouponPkgAdd,
|
|
|
+ CoinAdd,
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ marketingPicUrl: {
|
|
|
+ get() {
|
|
|
+ return this.addData.picUrl ? this.addData.picUrl.split(',').map(item => {
|
|
|
+ return {
|
|
|
+ fileName: item
|
|
|
+ }
|
|
|
+ }) : []
|
|
|
+ },
|
|
|
+ set(val) {
|
|
|
+ this.$set(this.addData, 'picUrl', val.map(item => {
|
|
|
+ return item.fileName
|
|
|
+ }).toString())
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ addData: {
|
|
|
+ picUrl: '',//活动主图
|
|
|
+ startTime: '',//开始时间
|
|
|
+ endTime: '',//结束时间
|
|
|
+ fakeNum: 0,//初始用户数
|
|
|
+ description: '',//活动详情
|
|
|
+ awardsList: [],//奖级列表
|
|
|
+ },
|
|
|
+ labelRadio: 1,//单选框
|
|
|
+ rules: {
|
|
|
+ title: [{required: true, message: '请输入活动名称', trigger: 'blur'}],
|
|
|
+ picUrl: [{required: true, message: '请上传活动封面', trigger: 'change'}],
|
|
|
+ dateValue: [{required: true, message: '请设置活动日期', trigger: 'change'}]
|
|
|
+ },
|
|
|
+ readonly: this.$route.name === 'MarketingQuery',
|
|
|
+ // 奖级列表
|
|
|
+ awardsList: [],
|
|
|
+ goodsTableVisible: false, // 添加商品弹框
|
|
|
+ couponTitle: "", // 券名称
|
|
|
+ couponTableVisible: false, // 添加卡券弹框
|
|
|
+ couponPkgTableVisible: false, // 添加券包弹框
|
|
|
+ coinTableVisible: false, // 添加盲豆弹框
|
|
|
+ pageParams: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ },
|
|
|
+ dateValue: [],//开始与结束日期
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 保存
|
|
|
+ update() {
|
|
|
+ this.$refs.addItem.validate((valid, items) => {
|
|
|
+ if (valid) {
|
|
|
+ if(this.awardsList.length < 2) {
|
|
|
+ this.msgError('请至少设置两个奖级的的奖品!')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ console.log(this.awardsList)
|
|
|
+ // 判断没有设置奖品的奖级
|
|
|
+ let prizeIndex = this.awardsList.findIndex((item) => {
|
|
|
+ return !item.prizeList.length;
|
|
|
+ });
|
|
|
+
|
|
|
+ if (prizeIndex != -1) {
|
|
|
+ this.$message.error(
|
|
|
+ `请至少设置两个奖级的的奖品!`
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 判断内定名额大于奖品名额
|
|
|
+ let quantityIndex = this.awardsList.findIndex((item) => {
|
|
|
+ console.log(item)
|
|
|
+ return item.insideNum > item.quantity;
|
|
|
+ });
|
|
|
+ if (quantityIndex != -1) {
|
|
|
+ this.$message.error(
|
|
|
+ `${this.awardsList[quantityIndex].name}的内定名额大于奖品名额,请重新设置!`
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.awardsList.forEach((item) => {
|
|
|
+ item.prizeList = item.prizeList.map((ele) => {
|
|
|
+ return {
|
|
|
+ ...ele,
|
|
|
+ refId: ele.goodsId || ele.couponId || ele.id,
|
|
|
+ prizeType: ele.prizeType,
|
|
|
+ quantity: ele.quantity,
|
|
|
+ value: Number(ele.coinValue),
|
|
|
+ };
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ const { fakeNum, description, title, picUrl } = this.addData
|
|
|
+ addMarketing({
|
|
|
+ title,
|
|
|
+ description: encodeURI(description),
|
|
|
+ fakeNum,
|
|
|
+ startTime: this.addData.dateValue[1],
|
|
|
+ endTime: this.addData.dateValue[0],
|
|
|
+ awardsList: this.awardsList,
|
|
|
+ picUrl,
|
|
|
+ }).then(res => {
|
|
|
+ if (res.code === 0) {
|
|
|
+ this.$message({
|
|
|
+ message: this.addData.id ? '修改成功!' : '添加成功!',
|
|
|
+ type: 'success'
|
|
|
+ })
|
|
|
+ this.$store.dispatch('marketing/marketing', this.$route)
|
|
|
+ this.$router.go(-1)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ if (items && Object.keys(items).length > 0) {
|
|
|
+ this.$message({
|
|
|
+ message: items[Object.keys(items)[0]][0].message,
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 添加奖品种类
|
|
|
+ handleCommand(e) {
|
|
|
+ if (e == "goods") {
|
|
|
+ this.goodsTableVisible = true;
|
|
|
+ } else if (e == "coupon") {
|
|
|
+ this.couponTableVisible = true;
|
|
|
+ } else if (e == "coupon_pkg") {
|
|
|
+ this.couponPkgTableVisible = true;
|
|
|
+ } else if (e == "coin") {
|
|
|
+ this.coinTableVisible = true;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 关闭弹框
|
|
|
+ close() {
|
|
|
+ this.goodsTableVisible = false;
|
|
|
+ this.couponTableVisible = false;
|
|
|
+ this.couponPkgTableVisible = false;
|
|
|
+ this.coinTableVisible = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 确认选中商品
|
|
|
+ confirmGoods(arr) {
|
|
|
+ this.$refs.awards.add(1, arr)
|
|
|
+ },
|
|
|
+
|
|
|
+ // 确认选中卡券
|
|
|
+ confirmCoupon(arr) {
|
|
|
+ ;
|
|
|
+ this.$refs.awards.add(1, arr)
|
|
|
+ },
|
|
|
+
|
|
|
+ // 确认选中券包
|
|
|
+ confirmCouponPkg(arr) {
|
|
|
+ ;
|
|
|
+ this.$refs.awards.add(1, arr)
|
|
|
+ },
|
|
|
+
|
|
|
+ // 确认输入盲豆
|
|
|
+ confirmCoin(obj) {
|
|
|
+ this.$refs.awards.add(2, obj)
|
|
|
+ },
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
-<style scoped>
|
|
|
+<style scoped lang="scss">
|
|
|
+.goods-add {
|
|
|
+ .tip {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #999;
|
|
|
+ }
|
|
|
|
|
|
+ .el-divider {
|
|
|
+ .is-left {
|
|
|
+ color: #409EFF;
|
|
|
+ font-size: 20px;
|
|
|
+ font-weight: bolder;
|
|
|
+ left: 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|