| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978 |
- <!-- 引一个当前组件 -->
- <?php
- use common\helpers\ComponentHelper;
- use common\helpers\AddonHelper;
- if ($has_coupon) {
- ComponentHelper::loadComponentView('coupon-select', AddonHelper::getAddonRootPath('Coupon') . 'backend/views/components');
- }
- ComponentHelper::loadComponentView('com-dialog-select');
- ComponentHelper::loadComponentView('com-image');
- ?>
- <div id="app" v-cloak>
- <el-card shadow="never" style="border:0;min-width: 1200px;">
- <el-form ref="formData" :model="formData" label-width="200px" :rules="rules">
- <el-form-item label="活动名称" prop="title">
- <el-input v-model="formData.title" style="max-width: 200px;"></el-input>
- </el-form-item>
- <el-form-item label="活动时间" prop="dataTime">
- <el-date-picker
- v-model="formData.dataTime"
- type="datetimerange"
- unlink-panels
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- :picker-options="pickerOptions"
- :disabled="isDisabled"
- @change="updateTime">
- </el-date-picker>
- <el-checkbox v-model="is_forever" @change="changeForever">永久</el-checkbox>
- </el-form-item>
- <el-form-item label="参与类型">
- <el-radio-group v-model="formData.join_type" @change="radioGroupJoinType">
- <el-radio :label="0">平台用户</el-radio>
- <el-radio :label="1">推三返一用户</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="发起人权限">
- <el-radio-group v-model="formData.initiate_type">
- <template v-if="formData.join_type==0">
- <el-radio :label="0">全部用户</el-radio>
- <el-radio :label="1">新用户</el-radio>
- <el-radio :label="2">权重用户</el-radio>
- </template>
- <template v-else>
- <el-radio :label="0">全部用户</el-radio>
- <el-radio :label="1">新用户(注册七天内)</el-radio>
- <el-radio :label="2">权重用户</el-radio>
- </template>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="" v-if="formData.initiate_type == 2">
- <el-checkbox-group v-model="formData.initiate_level">
- <el-checkbox v-for="(item, key) in level_arr" :key="item.name" :label="item.level">{{ item.name }}</el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- <el-form-item label="参与人权限">
- <el-radio-group v-model="formData.consume_type">
- <template v-if="formData.join_type==0">
- <el-radio :label="0">全部用户</el-radio>
- <el-radio :label="1">新用户</el-radio>
- <el-radio :label="2">权重用户</el-radio>
- </template>
- <template v-else>
- <el-radio :label="0">全部用户</el-radio>
- <el-radio :label="1">新用户(注册七天内)</el-radio>
- <el-radio :label="2">权重用户</el-radio>
- </template>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="" v-if="formData.consume_type == 2">
- <el-checkbox-group v-model="formData.consume_level">
- <el-checkbox v-for="(item, key) in level_arr" :key="item.name" :label="item.level">{{ item.name }}</el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- <el-form-item label="优惠/抵扣不发奖励">
- <el-radio-group v-model="formData.is_grant">
- <el-radio :label="0">关闭</el-radio>
- <el-radio :label="1">开启</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="商品设置">
- <div class="button-group">
- <com-dialog-select v-if="formData.item_info.length < 1 && formData.cate_info.length < 1" :multiple="false" @selected="goodsSelect" title="商品选择">
- <el-button size="small">选择商品</el-button>
- </com-dialog-select>
- <div v-if="formData.item_info.length < 1 && formData.cate_info.length < 1"><el-button size="small" @click.sync='chooseCate'>选择分类</el-button></div>
- </div>
- <template v-if="formData.item_info.length > 0">
- <div style="color: #ff4544;">仅可添加一个商品</div>
- <div style="max-height: 300px;overflow-y: auto">
- <el-table :data="formData.item_info" border style="width: 60%">
- <el-table-column type="index" align="center" label="序号" width="50"></el-table-column>
- <el-table-column prop="id" align="center" label="商品id" width="100"></el-table-column>
- <el-table-column prop="name,cover_pic" label="商品名称" >
- <template slot-scope="scope">
- <div flex="box:first">
- <div style="padding-right: 10px;">
- <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
- </div>
- <div style="display:flex;flex-direction:column;align-items:flex-start;">
- <div>{{scope.row.name}}</div>
- <div>
- <span style="color: #ff4544;" v-if="scope.row.price">¥{{ scope.row.price }}</span>
- <span style="margin-left: 20px;" v-if="scope.row.stock">库存:{{ scope.row.stock }}</span>
- </div>
- </div>
- </div>
- </template>
- </el-table-column>
- <el-table-column label="操作" width="100">
- <template slot-scope="scope">
- <el-button @click="deleteGoods(scope.$index)" type="primary" size="mini">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- </template>
- <template v-if="formData.cate_info.length > 0">
- <div style="color: #ff4544;">仅可选择一个分类</div>
- <div style="max-height: 300px;overflow-y: auto">
- <el-table :data="formData.cate_info" border style="width: 60%">
- <el-table-column type="index" align="center" label="序号" width="50"></el-table-column>
- <el-table-column prop="id" align="center" label="分类ID" width="100"></el-table-column>
- <el-table-column prop="name,pic" label="分类名称" >
- <template slot-scope="scope">
- <div flex="box:first">
- <div style="padding-right: 10px;" v-if="scope.row.cover_pic">
- <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
- </div>
- <div style="display:flex;flex-direction:column;align-items:flex-start;">
- <div>{{scope.row.name}}</div>
- </div>
- </div>
- </template>
- </el-table-column>
- <el-table-column label="操作" width="100">
- <template slot-scope="scope">
- <el-button @click="deleteCate(scope.$index)" type="primary" size="mini">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- </template>
- </el-form-item>
- <el-form-item label="奖励类型">
- <el-radio-group v-model="formData.reward_type" @change="switchReward">
- <el-radio :label="1">条件奖励</el-radio>
- <el-radio :label="2">阶梯奖励</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="">
- <el-table :data="rewardInfo" stripe style="width: 100%">
- <el-table-column prop="num" label="奖励条件" width="300" class="accon">
- <template slot-scope="scope">
- {{ formData.reward_type == 1 ? '每' : '' }}推荐
- <el-input v-model="scope.row.num" type="number" style="max-width: 200px;padding-left: 10px;" @input="validatorInfo($event,scope.$index)">
- <template slot="append">人购买</template>
- </el-input>
- </template>
- </el-table-column>
- <el-table-column prop="data" label="奖励内容">
- <template slot-scope="scope">
- <div style="margin-bottom: 14px;" v-for="(type,index) in scope.row.data" :key="index">
- <div class="ratio_change" v-show="scope.row.data[index].key!=0">
- <el-radio v-model="scope.row.data[index].ratio" :label="0">固定值</el-radio>
- <el-radio v-model="scope.row.data[index].ratio" :label="1">百分比</el-radio>
- </div>
- <div style="margin-bottom: 10px;" flex>
- <el-select v-model="scope.row.data[index].key" placeholder="请选择" @change="updateType($event,scope.$index,index)">
- <el-option
- v-for="item in rechargeType"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- :disabled="scope.row.data.findIndex(v => v.key == item.value) != -1"
- >
- </el-option>
- </el-select>
- <el-button v-if="scope.row.data[index].key == 0" style="margin-left: 12px;" @click="openCouponPop(scope.$index)">选择优惠券</el-button>
- <div style="margin-left: 10px;" v-else>
- <el-input v-model="scope.row.data[index].data" type="number" @input="validatorInfo($event,scope.$index,2,scope.row.data[index].key)">
- <template slot="append">
- <span v-if="scope.row.data[index].ratio==1">%</span>
- <span v-else>{{scope.row.data[index].key == 2?'分':'元'}}</span>
- </template>
- </el-input>
- </div>
- <el-button @click="delAward(scope.row.data[index].key,scope.$index)" v-if="scope.row.data.length > 1" type="text" icon="el-icon-close" style="color: #ec1717;font-size: 20px;padding: 0;margin-left: 12px;"></el-button>
- </div>
- <span v-if="has_redpack == false && (scope.row.data[index].type == 'redpack' || scope.row.data[index].type == 'frozen_redpack')" style="color:red;">该奖励需安装红包拓客插件后生效</span>
- <el-table v-if="scope.row.data[index].key == 0" :data="scope.row.data[index].data" stripe style="width: 100%;">
- <el-table-column prop="name" label="优惠券名称" width="160"></el-table-column>
- <el-table-column prop="discount_method" label="优惠券内容"></el-table-column>
- <el-table-column label="库存(张)" width="160">
- <template slot-scope="couponScope">
- {{couponScope.row.total_count == -1?'不限量':couponScope.row.total_count}}
- </template>
- </el-table-column>
- <el-table-column prop="dcount" label="奖励张数" width="160">
- <template slot-scope="couponScope">
- <el-input v-model="couponScope.row.num" type="number" @input="validatorInfo($event,scope.$index,3,0,couponScope.$index)">
- <template slot="append">张</template>
- </el-input>
- </template>
- </el-table-column>
- <el-table-column label="操作" width="100" align="center">
- <template slot-scope="couponScope">
- <el-button type="text" size="small" @click="delCoupon(couponScope.$index,scope.$index)">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <div v-if="scope.row.data.length != rechargeType.length">
- <el-button @click="addAward(scope.$index)" size="small" plain>添加奖励内容</el-button>
- </div>
- </template>
- </el-table-column>
- <el-table-column label="操作" width="100" align="center">
- <template slot-scope="scope">
- <el-button @click="deleteReward(scope.$index)" type="text" size="small">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div>
- <el-button size="small" style="margin-top: 10px;" @click="addRewardInfo" v-if="(formData.reward_type == 1 && rewardInfo.length == 0) || formData.reward_type == 2">添加奖励条件</el-button>
- </div>
- </el-form-item>
- <template v-if="formData.reward_type == 2">
- <el-form-item label="阶梯重复奖励">
- <el-switch v-model="formData.is_repeat" :active-value="1" :inactive-value="0" active-color="#13ce66"></el-switch>
- <div class="tips-text" style="line-height: 24px;">
- 开启后阶梯奖励将会按照设置进行重复奖励,比如:<br/>
- 手动设置:推荐1人奖励30余额,推第3人奖励50余额;<br/>
- 自动奖励:推第4人奖励30余额,推第6人奖励50余额;<br/>
- 自动奖励:推第7人奖励30余额,推第9人奖励50余额;<br/>
- 自动奖励:以此类推……
- </div>
- </el-form-item>
- <template v-if="formData.is_repeat">
- <el-form-item label="阶梯重复奖励-循环奖励">
- <el-switch v-model="formData.is_reward_after_n" :active-value="1" :inactive-value="0" active-color="#13ce66"></el-switch>
- <div v-if="formData.is_reward_after_n">
- <el-select v-model="formData.reward_threshold" size="small">
- <el-option v-for="item in rewardInfo"
- v-if="item.num > 0"
- :key="item.num"
- :label="item.num + '人'"
- :value="item.num">
- </el-option>
- </el-select>
- <div class="tips-text" style="line-height: 24px;">
- 奖励规则如下:<br/>
- 推荐1人,奖励5元,<br/>
- 推荐3人,奖励7元,<br/>
- 推荐5人,奖励9元,<br/>
- 开启循环奖励,并设置第3人开始循环奖励:<br/>
- 推荐1人,奖励5元,<br/>
- 推荐3人,奖励7元,<br/>
- 推荐5人,奖励9元,<br/>
- 推荐6人,奖励7元,<br/>
- 推荐7人,奖励9元,<br/>
- 推荐8人,奖励7元,<br/>
- 推荐9人,奖励9元,<br/>
- 推荐10人,奖励7元,<br/>
- 以此类推······<br/>
- 注意:首轮循环奖励正常,第二轮开始进行重复奖励<br/>
- </div>
- </div>
- </el-form-item>
- </template>
- <el-form-item label="冻结第一项奖励">
- <el-switch v-model="formData.is_freeze_first_reward" :active-value="1" :inactive-value="0" active-color="#13ce66"></el-switch>
- <el-form-item>
- <template v-if="formData.is_freeze_first_reward == 1">
- <el-radio-group v-model="formData.freeze_first_reward_type">
- <el-radio :label="0">全部</el-radio>
- <el-radio :label="1">冻结百分比</el-radio>
- </el-radio-group>
- <div v-if="formData.freeze_first_reward_type == 1">
- <el-input v-model="formData.freeze_first_reward_percentage"
- style="width: 200px;"
- onInput="value=toNumber(value,2); value = value > 100 ? 100 : value"
- prop="freeze_first_reward_percentage"
- size="small">
- <template slot="append">%</template>
- </el-input>
- <div class="tips-text" style="line-height: 24px;">
- 冻结除优惠券以外的资产类,例:用户获得100,冻结30%,则冻结30,另外70无需冻结<br>
- </div>
- </div>
- </template>
- </el-form-item>
- <div class="tips-text" style="line-height: 24px;">
- 开启后,冻结第一项奖励,获取推荐奖励第二项时解冻第一项奖励
- </div>
- </el-form-item>
- <el-form-item label="触发奖励设置">
- <el-switch v-model="formData.repeat_setting" :active-value="1" :inactive-value="0" active-color="#13ce66"></el-switch>
- <div class="tips-text" style="line-height: 24px;">
- 开启后,结算方式应与渠道分红结算方式保持一致,比如:<br/>
- 结算方式为支付完成:渠道分红结算方式可设置为支付完成、订单完成;<br/>
- 结算方式为订单完成:渠道分红结算方式只可设置为订单完成;<br/>
- </div>
- </el-form-item>
- <el-form-item v-if="formData.repeat_setting == 1" prop="dcount" label="渠道分红设置" width="160">
- <span>第</span>
- <el-input v-model="formData.agent_limit_num" type="number" style="max-width: 200px;">
- <template slot="append">单</template>
- </el-input>
- <span>及其倍数的订单不触发分佣奖励</span>
- </el-form-item>
- </template>
- <el-form-item>
- <el-button type="primary" @click="submitForm" :loading="subLoading">保存</el-button>
- </el-form-item>
- </el-form>
- <!-- 优惠券弹窗 -->
- <coupon-select v-if="has_coupon" :coupon-loading="couponPop" :coupon_arr="selCoupon" @submit="determine" @close="showCoupon"></coupon-select>
- <el-dialog title="商品类型选择" :visible.sync="goodsCategoryDialogVisible" width="60%">
- <div class="search-box">
- <div class="input-item" style="padding-right: 10px">
- <el-input @keyup.enter.native="getUser" size="small" placeholder="请输分类ID" v-model="searchData.id"> </el-input>
- </div>
- <div class="input-item" style="padding-right: 10px">
- <el-input @keyup.enter.native="getUser" size="small" placeholder="请输分类名称" v-model="searchData.name"> </el-input>
- </div>
- <el-button type="primary" size="small" @click="getUserClick">搜索</el-button>
- <el-button type="warning" size="small" @click="clearSearch" v-if="searchData.id || searchData.name" style="padding: 9px 15px !important;">清除搜索条件</el-button>
- </div>
- <el-table :data="categoryList" stripe v-loading="listLoading" style="width: 100%" @current-change="clickChange">
- <el-table-column prop="date" width="50">
- <template slot-scope="scope">
- <el-radio v-model="cateInfo" :label="scope.row"><i></i></el-radio>
- </template>
- </el-table-column>
- <el-table-column prop="id" label="ID"> </el-table-column>
- <el-table-column prop="name" label="分类名称"></el-table-column>
- </el-table>
- <div style="text-align: right;margin: 20px 0;">
- <el-pagination @current-change="categoryPagination" background layout="prev, pager, next" :page-count="categoryCurrPage"></el-pagination>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button @click="goodsCategoryDialogVisible = false">取 消</el-button>
- <el-button type="primary" @click="selectCate">确 定</el-button>
- </span>
- </el-dialog>
- </el-card>
- </div>
- <script>
- const app = new Vue({
- el: '#app',
- data() {
- return {
- id: null,
- formData: {
- title: "",
- start_at: "",
- end_at: "",
- initiate_type: 0,
- initiate_level: [],
- consume_type: 0,
- is_grant: 0,
- consume_level: [],
- item_id: [],
- item_info: [],
- reward_type: 1,
- dataTime: [],
- reward_info: [],
- is_repeat: 0,
- join_type: 0,
- repeat_setting:0,
- agent_limit_num:0,
- is_reward_after_n:0,
- reward_threshold: undefined,
- is_freeze_first_reward: 0,
- freeze_first_reward_type: 0,
- freeze_first_reward_percentage: 0,
- cate_info:[],
- },
- has_coupon: <?php echo $has_coupon ? 'true' : 'false'; ?>,
- level_arr: [
- {level:0,name:'默认用户'},
- {level:1,name:'用户权重一'},
- {level:2,name:'用户权重二'},
- ],
- has_redpack: <?php echo $has_redpack ? 'true' : 'false'; ?>,
- user_level_arr:[],
- rebate_user_level_arr:[],
- rewardTemp1: [{
- num: 0,
- data: [{
- key: 0,
- name: "优惠券",
- type: 'coupon',
- data: [],
- ratio: 0,
- }],
- }],// 临时存储条件奖励类型值
- rewardTemp2: [{
- num: 0,
- data: [{
- key: 0,
- name: "优惠券",
- type: 'coupon',
- data: [],
- ratio: 0,
- }],
- }],// 临时存储阶梯奖励类型值
- rewardInfo: [{
- num: 0,
- data: [{
- key: 0,
- name: "优惠券",
- type: 'coupon',
- data: [],
- ratio: 0,
- }],
- }],//奖励内容
- rechargeType: [
- {
- value: 0,
- label: '优惠券'
- },
- {
- value: 1,
- label: '余额'
- },
- {
- value: 2,
- label: '积分'
- },
- {
- value: 3,
- label: '收入'
- },
- {
- value: 4,
- label: '激活红包'
- },
- {
- value: 5,
- label: '冻结红包'
- },
- ],
- typeArr: ['coupon','balance','score','commission', 'redpack', 'frozen_redpack'], //跟rechargeType对应
- couponPop: false,
- couponPopIndex: -1,
- rules: {
- title: [
- { required: true, message: '活动名称不能为空', trigger: 'blur' },
- { min: 1, max: 12, message: '长度在 1 到 12 个字符', trigger: 'blur' }
- ],
- dataTime: [{ required: true, message: '活动时间不能为空', trigger: 'blur' }],
- },
- subLoading: false,
- selCoupon: [],//打开优惠券弹窗传递已选中的优惠券
- pickerOptions: {
- shortcuts: [{
- text: '7天',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- end.setTime(end.getTime() + 3600 * 1000 * 24 * 7);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '15天',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- end.setTime(end.getTime() + 3600 * 1000 * 24 * 15);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '30天',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- end.setTime(end.getTime() + 3600 * 1000 * 24 * 30);
- picker.$emit('pick', [start, end]);
- }
- }]
- },
- is_forever:false,
- forever_time:3093527951999,
- isDisabled:false,
- goodsCategoryDialogVisible: false,
- searchData: {
- id: '',
- name: '',
- },
- listLoading: false,
- categoryList: [],
- categoryCurrPage: 1,
- cateInfo: {},
- }
- },
- created(){
- if (getQuery('id') && getQuery('id') != 0) {
- this.id = getQuery('id');
- }
- this.getDetail();
- },
- methods: {
- // 获取充值信息
- getDetail(){
- request({
- params: {
- r: 'rebate/index/edit',
- id: this.id,
- },
- method: 'get',
- }).then(res => {
- console.info(res);
- if(res.data.code == 0){
- if(res.data.data.detail) {
- this.formData = res.data.data.detail;
- console.log('====>', this.formData);
- this.rewardInfo = res.data.data.detail.reward_info;
- this.$set(this.formData, 'dataTime', [new Date(res.data.data.detail.start_at * 1000),new Date(res.data.data.detail.end_at * 1000)]);
- if(this.formData.end_at==this.forever_time){
- this.isDisabled=true;
- this.is_forever =true;
- }
- if (this.formData.reward_threshold == 0) {
- this.formData.reward_threshold = undefined
- }
- }
- if(this.formData.join_type==1){
- this.level_arr =res.data.data.rebate_user_level_arr;
- }else{
- this.level_arr = res.data.data.level_arr;
- }
- this.user_level_arr = res.data.data.level_arr;
- this.rebate_user_level_arr = res.data.data.rebate_user_level_arr;
- }
- })
- },
- // 选择商品
- goodsSelect(param) {
- let item = param;
- this.formData.item_id = item.id;
- this.formData.item_info.push({
- id: item.id,
- name: item.goods_name,
- price: item.price,
- cover_pic: item.cover_pic,
- stock: item.stock,
- });
- },
- // 删除商品
- deleteGoods(index) {
- this.formData.item_info.splice(index, 1);
- this.formData.item_id = 0;
- },
- // 添加奖励条件
- addAward(index){
- let key = 0;
- for(let i = 0;i<this.rechargeType.length;i++){
- let dataIndex = this.rewardInfo[index].data.findIndex(v => v.key == this.rechargeType[i].value);
- if(dataIndex == -1){
- key = i + key;
- break;
- }
- }
- let obj = {
- key,
- name: this.rechargeType[key].label,
- type: this.typeArr[key],
- data: key == 0?[]:"",
- ratio: 0,
- }
- if(key != 0){
- obj.data = 0;
- }
- this.rewardInfo[index].data.push(obj);
- },
- // 删除奖励条件
- delAward(key,index){
- let couponIndex = this.rewardInfo[index].data.findIndex(v => v.key == key);
- this.rewardInfo[index].data.splice(couponIndex,1);
- },
- // 打开优惠券弹窗
- openCouponPop(index){
- if (this.has_coupon == false) {
- this.$message.error("请安装优惠券插件");
- return;
- }
- this.couponPopIndex = index;
- let dataIndex = this.rewardInfo[index].data.findIndex(v => v.type == 'coupon');
- this.selCoupon = this.rewardInfo[index].data[dataIndex].data;
- this.couponPop = true;
- },
- showCoupon(){
- this.couponPopIndex = -1;
- this.couponPop = false;
- },
- //弹窗确定
- determine(arr) {
- let couponPopData = this.rewardInfo[this.couponPopIndex].data;
- let couponIndex = couponPopData.findIndex(v => v.key == 0);
- if(couponIndex != -1){
- this.rewardInfo[this.couponPopIndex].data[couponIndex].data = arr;
- }
- this.couponPop = false;
- },
- // 删除优惠券
- delCoupon(selCouponIndex,index){
- let couponPopData = this.rewardInfo[index].data;
- let couponIndex = couponPopData.findIndex(v => v.key == 0);
- if(couponIndex != -1){
- this.rewardInfo[index].data[couponIndex].data.splice(selCouponIndex,1);
- }
- },
- // 添加奖励条件
- addRewardInfo(){
- this.rewardInfo.push({
- num: 0,
- data: [{
- key: 0,
- name: "优惠券",
- type: 'coupon',
- data: [],
- ratio: 0
- }],
- });
- },
- // 删除奖励条件
- deleteReward(index){
- this.rewardInfo.splice(index,1);
- },
- // 切换奖励类型
- switchReward(event){
- let self = this;
- if(event == 1) {
- self.rewardTemp2 = self.rewardInfo;
- self.rewardInfo = self.rewardTemp1;
- } else {
- self.rewardTemp1 = self.rewardInfo;
- self.rewardInfo = self.rewardTemp2;
- }
- },
- updateTime(val){
- if(val){
- this.formData.start_at = parseInt(val[0].getTime() / 1000);
- this.formData.end_at = parseInt(val[1].getTime() / 1000);
- } else {
- this.formData.start_at = "";
- this.formData.end_at = "";
- }
- },
- // 表单数值验证
- validatorInfo(val,index,type = 1,key,couponIndex){
- console.info(val,index,type,key,couponIndex);
- if(val == ''){
- return;
- }
- let dataIndex = -1;
- if(type != 1){
- dataIndex = this.rewardInfo[index].data.findIndex(v => v.key == key);
- }
- if(val <= 0){
- if(type == 2){
- this.rewardInfo[index].data[dataIndex].data = 0;
- } else if(type == 3){
- this.rewardInfo[index].data[dataIndex].data[couponIndex].num = 0;
- } else {
- this.rewardInfo[index].num = 0;
- }
- return;
- }
- // 是否能最多保留两位小数
- let reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
- if(!reg.test(val) && type != 3){
- let i = val.indexOf(".") + 3;
- val = val.substr(0,i)
- if(type == 2){
- this.rewardInfo[index].data[dataIndex].data = val;
- } else {
- this.rewardInfo[index].num = val;
- }
- }
- if(type == 3){
- // total_count
- val = parseInt(val);
- let totalCount = this.rewardInfo[index].data[dataIndex].data[couponIndex].total_count;
- if(totalCount < val && totalCount != -1){
- this.rewardInfo[index].data[dataIndex].data[couponIndex].num = totalCount;
- } else {
- this.rewardInfo[index].data[dataIndex].data[couponIndex].num = val;
- }
- }
- },
- // 奖励奖励表单严重
- validatorForm(){
- /* this.rewardInfo.forEach(v => {
- if()
- }) */
- let arr = ['优惠券','余额','积分','收入', '红包'];
- for(let i = 0;i<this.rewardInfo.length;i++){
- if(this.rewardInfo[i].num <= 0){
- return "推荐人数不能小于等于0";
- }
- if (i > 0 && this.rewardInfo[i].num*1 < this.rewardInfo[i-1].num*1) {
- return "推荐人数不能小于前一项";
- }
- for(let j = 0;j<this.rewardInfo[i].data.length;j++){
- if(this.rewardInfo[i].data[j].key == 0){
- if(this.rewardInfo[i].data[j].data.length == 0) {
- return "请选择奖励内容的优惠券";
- }
- this.$delete(this.rewardInfo[i].data[j],'ratio');
- text = this.validatorCoupon(this.rewardInfo[i].data[j].data);
- if(text) return text;
- } else {
- if(!this.rewardInfo[i].data[j].data || this.rewardInfo[i].data[j].data <= 0){
- let value = '值';
- if (this.rewardInfo[i].data[j].ratio == 1) {
- value='百分比';
- }
- return "奖励内容的" + arr[this.rewardInfo[i].data[j].key] + value + "不能为空或小于等于0";
- }
- }
- }
- }
- for(let i = 0;i<this.rewardInfo.length;i++) {
- let num = this.rewardInfo[i].num;
- let arr = this.rewardInfo.filter(v => v.num == num);
- if(arr.length > 1){
- return "奖励条件不能重复"
- }
- }
- return "";
- },
- // 验证优惠券
- validatorCoupon(couponList){
- for(let i = 0;i<couponList.length;i++){
- if(couponList[i].num <= 0){
- return "优惠券奖励数量不能小于等于0";
- }
- }
- return "";
- },
- // 更改奖励内容类型
- updateType(key,index,dataIndex){
- this.rewardInfo[index].data[dataIndex].name = this.rechargeType[key].label;
- this.rewardInfo[index].data[dataIndex].type = this.typeArr[key];
- if(key == 0){
- this.rewardInfo[index].data[dataIndex].data = [];
- } else {
- if(Array.isArray(this.rewardInfo[index].data[dataIndex].data)){
- this.rewardInfo[index].data[dataIndex].data = 0;
- }
- }
- },
- // 保存
- submitForm(){
- this.formData.title = this.formData.title.toString();
- console.log(this.formData,"=>")
- this.$refs['formData'].validate((valid) => {
- if (valid) {
- let text = this.validatorForm();
- if(text){
- this.$message.error(text);
- return;
- }
- if(!this.formData.id){
- if(this.formData.start_at > this.formData.end_at){
- this.$message.error('开始时间只能结束时间之后');
- return;
- }
- }
- if (this.formData.item_info.length <= 0 && this.formData.cate_info.length <= 0) {
- this.$message.error('请选择商品或商品分类');
- return;
- }
- if(this.rewardInfo.length == 0) {
- this.$message.error('请选择添加奖励条件');
- return;
- }
- this.$set(this.formData,'reward_info',this.rewardInfo);
- this.subLoading = true;
- request({
- params: {
- r: 'rebate/index/edit',
- },
- method: 'post',
- data: this.formData
- }).then(res => {
- console.info(res);
- this.subLoading = false;
- if(res.data.code == 0){
- this.$message.success("保存成功");
- navigateTo({
- r: "rebate/index/index"
- })
- } else {
- this.$message.error(res.data.msg);
- }
- })
- }
- });
- },
- changeForever(value){
- this.isDisabled=value
- if(value==true){
- var start_at = new Date().getTime() ; // 1622427445085
- this.$set(this.formData, 'dataTime', [new Date(start_at),new Date(this.forever_time * 1000)]);
- this.formData.start_at=parseInt(start_at/1000)
- this.formData.end_at=this.forever_time
- }else{
- this.$set(this.formData, 'dataTime', ['','']);
- this.formData.start_at=0
- this.formData.end_at=0
- }
- console.log(value)
- },
- radioGroupJoinType(value){
- this.formData.initiate_type = 0;
- this.formData.consume_type = 0;
- if(value==1){
- this.level_arr = this.rebate_user_level_arr;
- }else{
- this.level_arr = this.user_level_arr;
- }
- },
- getCategory() {
- let self = this;
- self.listLoading = true;
- request({
- params: {
- r: 'rebate/index/cate-list',
- page: self.categoryCurrPage,
- ...self.searchData,
- },
- method: 'get',
- }).then(e => {
- self.listLoading = false;
- if (e.data.code == 0) {
- self.categoryList = e.data.data.list.list;
- self.categoryCurrPage = e.data.data.list.page_count;
- } else {
- self.$message.error(e.data.msg);
- return false;
- }
- }).catch(e => {
- console.log(e);
- self.$message.error('网络错误');
- return false;
- });
- },
- getUserClick() {
- this.categoryCurrPage = 1;
- this.getCategory();
- },
- // 选择分类
- chooseCate() {
- this.categoryCurrPage = 1;
- this.getCategory();
- this.goodsCategoryDialogVisible = true;
- },
- // 产品分类列表分页
- categoryPagination(categoryCurrPage) {
- this.categoryCurrPage = categoryCurrPage;
- this.getCategory();
- },
- // 选中分类确定回调
- selectCate() {
- console.log('selectCate === : ', this.cateInfo);
- this.formData.item_id = this.cateInfo.id;
- this.goodsCategoryDialogVisible = false;
- // this.formData.cateInfo = this.cateInfo;
- this.formData.cate_info.push({
- id: this.cateInfo.id,
- name: this.cateInfo.name,
- cover_pic: this.cateInfo.pic,
- });
- },
- clickChange(cateInfo) {
- this.cateInfo = cateInfo;
- },
- // 清楚搜索条件
- clearSearch() {
- this.searchData.id = '';
- this.searchData.name = '';
- this.categoryCurrPage = 1;
- this.getCategory();
- },
- //删除分类
- deleteCate(index) {
- this.formData.cate_info.splice(index, 1);
- this.formData.item_id = 0;
- },
- },
- })
- </script>
- <style>
- .el-table_1_column_1 .cell{
- display: flex;
- align-items: center;
- }
- .ratio_change {
- position: relative;
- margin-left: 230px;
- margin-bottom: 5px;
- }
- .button-group {
- display: flex;
- gap: 10px; /* 可选:设置按钮间距 */
- }
- .input-item {
- display: inline-block;
- width: 250px;
- margin: 0 0 20px;
- }
- .input-item .el-input__inner {
- border-right: 0;
- }
- .input-item .el-input__inner:hover {
- border: 1px solid #dcdfe6;
- border-right: 0;
- outline: 0;
- }
- .input-item .el-input__inner:focus {
- border: 1px solid #dcdfe6;
- border-right: 0;
- outline: 0;
- }
- .input-item .el-input-group__append {
- background-color: #fff;
- border-left: 0;
- width: 10%;
- padding: 0;
- }
- .input-item .el-input-group__append .el-button {
- padding: 0;
- }
- .input-item .el-input-group__append .el-button {
- margin: 0;
- }
- </style>
|