| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852 |
- <template>
- <div class="app-container">
- <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="85px" @submit.native.prevent>
- <el-form-item label="活动名称" prop="activityName">
- <el-input v-model="queryParams.activityName"
- placeholder="请输入活动名称"
- clearable
- size="small"
- @keyup.enter.native="handleQuery" />
- </el-form-item>
- <el-form-item label="活动状态" prop="status">
- <el-select v-model="queryParams.status" placeholder="请选择活动状态" clearable size="small">
- <el-option label="未开始" :value="0" />
- <el-option label="进行中" :value="1" />
- <el-option label="已结束" :value="2" />
- <el-option label="已停用" :value="3" />
- </el-select>
- </el-form-item>
- <el-form-item label="奖品类型" prop="prizeType">
- <el-select v-model="queryParams.prizeType" placeholder="请选择奖品类型" clearable size="small">
- <el-option label="红包" :value="1" />
- <el-option label="积分商品免单券" :value="2" />
- <el-option label="大礼品" :value="3" />
- <el-option label="门店核销券" :value="4" />
- </el-select>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
- </el-form-item>
- </el-form>
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button type="primary"
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-has-permi="['course:checkinActivity:add']">活动配置</el-button>
- </el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
- </el-row>
- <el-table v-loading="loading" :data="list" border style="width: 100%">
- <el-table-column label="活动ID" align="center" prop="activityId" min-width="80" />
- <el-table-column label="活动名称" align="center" prop="activityName" min-width="150" show-overflow-tooltip />
- <el-table-column label="活动时间" align="center" min-width="200">
- <template slot-scope="scope">
- <span>{{ scope.row.startTime }} 至 {{ scope.row.endTime }}</span>
- </template>
- </el-table-column>
- <el-table-column label="需要打卡天数" align="center" prop="checkinDays" min-width="100" />
- <el-table-column label="参与公司" align="center" prop="companyNames" min-width="150" show-overflow-tooltip />
- <el-table-column label="参与项目" align="center" prop="projectNames" min-width="150" show-overflow-tooltip />
- <el-table-column label="奖品类型" align="center" prop="prizeType" min-width="120">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.prizeType === 1" type="warning">红包</el-tag>
- <el-tag v-else-if="scope.row.prizeType === 2" type="success">积分商品免单券</el-tag>
- <el-tag v-else-if="scope.row.prizeType === 3" type="primary">大礼品</el-tag>
- <el-tag v-else-if="scope.row.prizeType === 4" type="">门店核销券</el-tag>
- <span v-else>-</span>
- </template>
- </el-table-column>
- <el-table-column label="活动状态" align="center" prop="status" min-width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.status === 0" type="info">未开始</el-tag>
- <el-tag v-else-if="scope.row.status === 1" type="success">进行中</el-tag>
- <el-tag v-else-if="scope.row.status === 2" type="danger">已结束</el-tag>
- <el-tag v-else-if="scope.row.status === 3" type="warning">已停用</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="创建时间" align="center" prop="createTime" min-width="160" />
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="150">
- <template slot-scope="scope">
- <el-button size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-has-permi="['course:checkinActivity:edit']"
- :disabled="scope.row.status === 1">修改</el-button>
- <el-button size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-has-permi="['course:checkinActivity:remove']"
- :disabled="scope.row.status === 1">删除</el-button>
- <el-button size="mini"
- type="text"
- icon="el-icon-document-copy"
- @click="handleCopy(scope.row)"
- v-has-permi="['course:checkinActivity:add']"
- v-if="scope.row.status === 2">复制活动</el-button>
- <el-button size="mini"
- type="text"
- icon="el-icon-gift"
- @click="handlePrizeRecord(scope.row)"
- v-has-permi="['course:checkinReceive:query']">奖品记录</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="total>0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
- <!-- 添加或修改活动配置对话框 -->
- <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
- <el-form :model="form" ref="form" :rules="rules" label-width="120px">
- <el-form-item label="活动名称" prop="activityName">
- <el-input v-model="form.activityName" placeholder="请输入活动名称" clearable size="small" />
- </el-form-item>
- <el-form-item label="活动时间" prop="timeRange">
- <el-date-picker
- v-model="form.timeRange"
- type="daterange"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- value-format="yyyy-MM-dd"
- size="small"
- style="width: 100%">
- </el-date-picker>
- </el-form-item>
- <el-form-item label="打卡天数" prop="checkinDays">
- <el-input-number v-model="form.checkinDays" :min="1" :max="365" :precision="0" size="small" style="width: 200px" placeholder="请输入打卡天数" />
- <span style="margin-left: 10px; color: #999;">天</span>
- </el-form-item>
- <el-form-item label="参与公司" prop="companyIds">
- <el-select filterable multiple v-model="form.companyIds" placeholder="请选择参与公司" size="small" style="width: 100%">
- <el-option
- v-for="item in companys"
- :key="item.companyId"
- :label="item.companyName"
- :value="item.companyId"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="参与项目" prop="projectIds">
- <el-select filterable multiple v-model="form.projectIds" placeholder="请选择参与项目" size="small" style="width: 100%">
- <el-option
- v-for="item in projects"
- :key="item.dictValue"
- :label="item.dictLabel"
- :value="item.dictValue"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="通知模板" prop="notifyTemplate">
- <el-input
- v-model="form.notifyTemplate"
- type="textarea"
- :rows="3"
- placeholder="请输入通知模板"
- size="small" />
- </el-form-item>
- <el-form-item label="活动状态" prop="status">
- <el-select v-model="form.status" placeholder="请选择活动状态" size="small" style="width: 200px">
- <el-option label="未开始" :value="0" />
- <el-option label="进行中" :value="1" />
- <el-option label="已结束" :value="2" />
- <el-option label="已停用" :value="3" />
- </el-select>
- </el-form-item>
- <el-form-item label="奖品类型" prop="prizeType">
- <el-select v-model="form.prizeType" placeholder="请选择奖品类型" size="small" style="width: 200px">
- <el-option :label="'红包'" :value="1" />
- <el-option :label="'积分商品免单券'" :value="2" />
- <el-option label="大礼品" :value="3" />
- <el-option label="门店核销券" :value="4" />
- </el-select>
- </el-form-item>
- <el-form-item v-if="form.prizeType === 1" label="红包金额" prop="redpacketAmount"
- :rules="{ required: true, message: '红包金额不能为空', trigger: 'blur' }">
- <el-input-number v-model="form.redpacketAmount" :min="0.1" :precision="2" :step="0.1" size="small" style="width: 200px" />
- <span style="margin-left: 10px; color: #999;">元</span>
- </el-form-item>
- <el-form-item v-if="form.prizeType === 2" label="免单券" prop="freeCouponId"
- :rules="{ required: true, message: '免单券不能为空', trigger: 'change' }">
- <el-select
- ref="customSelectCoupon"
- v-model="form.freeCouponId"
- placeholder="请选择优惠券"
- @click.native.stop="openCouponDrawer"
- clearable
- style="width: 100%;">
- <el-option
- v-for="item in couponList"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item v-if="form.prizeType === 3" label="大礼品配置" prop="grandGiftId"
- :rules="{ required: true, message: '大礼品配置不能为空', trigger: 'change' }">
- <el-select
- ref="customSelectReward"
- v-model="form.grandGiftId"
- placeholder="请选择大礼品奖励"
- @click.native.stop="openRewardDrawer"
- clearable
- style="width: 100%;">
- <el-option
- v-for="item in rewardList"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item v-if="form.prizeType === 4" label="门店核销券" prop="freeCouponId"
- :rules="{ required: true, message: '门店核销券不能为空', trigger: 'change' }">
- <el-select
- ref="customSelectVerifyCoupon"
- v-model="form.freeCouponId"
- placeholder="请选择门店核销券"
- @click.native.stop="openVerifyCouponDrawer"
- clearable
- style="width: 100%;">
- <el-option
- v-for="item in verifyCouponList"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="备注" prop="remark">
- <el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请输入备注" size="small" />
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button @click="cancel">取 消</el-button>
- <el-button type="primary" @click="submitForm">确 定</el-button>
- </div>
- </el-dialog>
- <!-- 复制活动对话框 -->
- <el-dialog title="复制活动" :visible.sync="copyOpen" width="500px" append-to-body>
- <el-form :model="copyForm" ref="copyForm" :rules="copyRules" label-width="120px">
- <el-form-item label="新活动时间" prop="timeRange">
- <el-date-picker
- v-model="copyForm.timeRange"
- type="daterange"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- value-format="yyyy-MM-dd"
- size="small"
- style="width: 100%">
- </el-date-picker>
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button @click="copyOpen = false">取 消</el-button>
- <el-button type="primary" @click="submitCopy">确 定</el-button>
- </div>
- </el-dialog>
- <!-- 奖品领取记录对话框 -->
- <el-dialog :title="'奖品领取记录 - ' + prizeRecordTitle" :visible.sync="prizeRecordOpen" width="900px" append-to-body>
- <el-tabs v-model="prizeRecordType">
- <el-tab-pane label="红包记录" name="1" v-if="prizeRecordType === '1'">
- <el-table v-loading="prizeRecordLoading" :data="prizeRecordList" border style="width: 100%">
- <el-table-column label="ID" align="center" prop="receiveId" min-width="80" />
- <el-table-column label="用户昵称" align="center" prop="userNickName" min-width="120" show-overflow-tooltip />
- <el-table-column label="企业名" align="center" prop="companyName" min-width="150" show-overflow-tooltip />
- <el-table-column label="红包金额" align="center" prop="redpacketAmount" min-width="100">
- <template slot-scope="scope">
- <span>{{ scope.row.redpacketAmount }} 元</span>
- </template>
- </el-table-column>
- <el-table-column label="领取状态" align="center" prop="receiveStatus" min-width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.receiveStatus === 0" type="info">未领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 1" type="success">已领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 2" type="danger">领取失败</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="领取时间" align="center" prop="receiveTime" min-width="160" />
- </el-table>
- </el-tab-pane>
- <el-tab-pane label="积分商品免单券领取记录" name="2" v-if="prizeRecordType === '2'">
- <el-table v-loading="prizeRecordLoading" :data="prizeRecordList" border style="width: 100%">
- <el-table-column label="ID" align="center" prop="receiveId" min-width="80" />
- <el-table-column label="用户昵称" align="center" prop="userNickName" min-width="120" show-overflow-tooltip />
- <el-table-column label="企业名" align="center" prop="companyName" min-width="150" show-overflow-tooltip />
- <el-table-column label="积分商品名" align="center" prop="goodsName" min-width="150" show-overflow-tooltip />
- <el-table-column label="领取状态" align="center" prop="receiveStatus" min-width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.receiveStatus === 0" type="info">未领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 1" type="success">已领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 2" type="danger">领取失败</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="领取时间" align="center" prop="receiveTime" min-width="160" />
- </el-table>
- </el-tab-pane>
- <el-tab-pane label="大礼品转盘领取记录" name="3" v-if="prizeRecordType === '3'">
- <el-table v-loading="prizeRecordLoading" :data="prizeRecordList" border style="width: 100%">
- <el-table-column label="ID" align="center" prop="receiveId" min-width="80" />
- <el-table-column label="用户昵称" align="center" prop="userNickName" min-width="120" show-overflow-tooltip />
- <el-table-column label="企业名" align="center" prop="companyName" min-width="150" show-overflow-tooltip />
- <el-table-column label="奖励名称" align="center" prop="goodsName" min-width="150" show-overflow-tooltip />
- <el-table-column label="领取状态" align="center" prop="receiveStatus" min-width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.receiveStatus === 0" type="info">未领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 1" type="success">已领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 2" type="danger">领取失败</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="领取时间" align="center" prop="receiveTime" min-width="160" />
- </el-table>
- </el-tab-pane>
- <el-tab-pane label="门店核销券领取记录" name="4" v-if="prizeRecordType === '4'">
- <el-table v-loading="prizeRecordLoading" :data="prizeRecordList" border style="width: 100%">
- <el-table-column label="ID" align="center" prop="receiveId" min-width="80" />
- <el-table-column label="用户昵称" align="center" prop="userNickName" min-width="120" show-overflow-tooltip />
- <el-table-column label="企业名" align="center" prop="companyName" min-width="150" show-overflow-tooltip />
- <el-table-column label="优惠券名称" align="center" prop="prizeName" min-width="150" show-overflow-tooltip />
- <el-table-column label="领取状态" align="center" prop="receiveStatus" min-width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.receiveStatus === 0" type="info">未领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 1" type="success">已领取</el-tag>
- <el-tag v-else-if="scope.row.receiveStatus === 2" type="danger">领取失败</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="领取时间" align="center" prop="receiveTime" min-width="160" />
- </el-table>
- </el-tab-pane>
- </el-tabs>
- <pagination
- v-show="prizeRecordTotal>0"
- :total="prizeRecordTotal"
- :page.sync="prizeRecordQuery.pageNum"
- :limit.sync="prizeRecordQuery.pageSize"
- @pagination="getPrizeRecordList"
- />
- </el-dialog>
- <!-- 选择大礼品 -->
- <el-drawer :append-to-body="true" :with-header="false" size="75%" :visible.sync="rewardDrawerOpen">
- <reward-component :reward-type="6" @select-reward="selectReward"></reward-component>
- </el-drawer>
- <!-- 选择公域疗法券优惠券 -->
- <el-drawer :append-to-body="true" :with-header="false" size="75%" :visible.sync="couponDrawerOpen">
- <coupon-component :coupon-type="7" @select-coupon="selectCoupon"></coupon-component>
- </el-drawer>
- <!-- 选择门店核销券 -->
- <el-drawer :append-to-body="true" :with-header="false" size="75%" :visible.sync="verifyCouponDrawerOpen">
- <coupon-component :coupon-type="8" @select-coupon="selectVerifyCoupon"></coupon-component>
- </el-drawer>
- </div>
- </template>
- <script>
- import { getCompanyList } from "@/api/company/company";
- import { listByIds, listReward } from '@/api/course/reward'
- import { listIntegralGoods } from "@/api/his/integralGoods";
- import {
- listCheckinActivity,
- getCheckinActivity,
- addCheckinActivity,
- updateCheckinActivity,
- delCheckinActivity,
- copyCheckinActivity,
- getPrizeRecord
- } from "@/api/his/checkinActivity";
- import CouponComponent from '@/views/components/his/couponComponent.vue'
- import RewardComponent from '@/views/components/course/rewardComponent.vue'
- import { getByIds } from '@/api/his/coupon'
- export default {
- name: "CourseCheckIn",
- components: { CouponComponent, RewardComponent },
- data() {
- return {
- loading: true,
- showSearch: true,
- total: 0,
- list: [],
- companys: [],
- projects: [],
- integralGoodsList: [],
- grandGiftList: [],
- open: false,
- title: "",
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- activityName: null,
- status: null,
- prizeType: null
- },
- form: {
- activityId: null,
- activityName: null,
- timeRange: [],
- startTime: null,
- endTime: null,
- companyIds: [],
- projectIds: [],
- notifyTemplate: null,
- status: 0,
- prizeType: 1,
- redpacketAmount: null,
- prizeGoodsId: null,
- prizeGoodsName: null,
- prizeList: [],
- remark: null,
- checkinDays: null,
- grandGiftId: null,
- freeCouponId: null,
- },
- rules: {
- activityName: [
- { required: true, message: "活动名称不能为空", trigger: "blur" }
- ],
- timeRange: [
- { required: true, message: "活动时间不能为空", trigger: "change" }
- ],
- checkinDays: [
- { required: true, message: "打卡天数不能为空", trigger: "blur" },
- { type: "number", min: 1, message: "打卡天数必须大于0", trigger: "blur" },
- { validator: this.validateCheckinDays, trigger: "blur" }
- ],
- companyIds: [
- { required: true, message: "参与公司不能为空", trigger: "change" }
- ],
- projectIds: [
- { required: true, message: "参与项目不能为空", trigger: "change" }
- ],
- },
- copyOpen: false,
- copyForm: {
- activityId: null,
- timeRange: []
- },
- copyRules: {
- timeRange: [
- { required: true, message: "新活动时间不能为空", trigger: "change" }
- ]
- },
- // 奖品领取记录
- prizeRecordOpen: false,
- prizeRecordTitle: "",
- prizeRecordType: null,
- prizeRecordLoading: false,
- prizeRecordList: [],
- prizeRecordTotal: 0,
- prizeRecordQuery: {
- pageNum: 1,
- pageSize: 10,
- activityId: null,
- prizeType: 1
- },
- couponDrawerOpen: false,
- couponList: [],
- verifyCouponDrawerOpen: false,
- verifyCouponList: [],
- rewardDrawerOpen: false,
- rewardList: [],
- };
- },
- created() {
- this.getCompanyList();
- this.getProjectList();
- this.getIntegralGoodsList();
- this.getList();
- this.initGiftList()
- },
- methods: {
- getList() {
- this.loading = true;
- listCheckinActivity(this.queryParams).then(response => {
- this.list = response.rows || [];
- this.total = response.total || 0;
- this.loading = false;
- }).catch(() => {
- this.loading = false;
- });
- },
- getCompanyList() {
- getCompanyList().then(response => {
- this.companys = response.data || [];
- });
- },
- getProjectList() {
- this.getDicts("sys_course_project").then(response => {
- this.projects = response.data || [];
- });
- },
- getIntegralGoodsList() {
- listIntegralGoods({ pageNum: 1, pageSize: 1000 }).then(response => {
- this.integralGoodsList = response.rows || [];
- });
- },
- initGiftList() {
- listReward({"rewardType": 6}).then(response => {
- const {rows} = response
- this.grandGiftList = rows
- })
- },
- handleQuery() {
- this.queryParams.pageNum = 1;
- this.getList();
- },
- resetQuery() {
- this.resetForm("queryForm");
- this.queryParams = {
- pageNum: 1,
- pageSize: 10,
- activityName: null,
- status: null,
- prizeType: null
- };
- this.handleQuery();
- },
- reset() {
- this.form = {
- activityId: null,
- activityName: null,
- timeRange: [],
- startTime: null,
- endTime: null,
- companyIds: [],
- projectIds: [],
- notifyTemplate: null,
- status: 0,
- prizeType: 1,
- redpacketAmount: null,
- prizeGoodsId: null,
- prizeGoodsName: null,
- prizeList: [],
- remark: null,
- checkinDays: null,
- grandGiftId: null,
- freeCouponId: null,
- };
- },
- // 校验打卡天数不能超过活动时长
- validateCheckinDays(rule, value, callback) {
- if (!this.form.timeRange || this.form.timeRange.length < 2) {
- callback(new Error('请先选择活动时间'));
- return;
- }
- const startDate = new Date(this.form.timeRange[0]);
- const endDate = new Date(this.form.timeRange[1]);
- const diffTime = Math.abs(endDate - startDate);
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1; // 包含首尾天数
- if (value > diffDays) {
- callback(new Error('打卡天数不能超过活动时长(' + diffDays + '天)'));
- } else {
- callback();
- }
- },
- handlePrizeGoodsChange(goodsId) {
- if (goodsId) {
- const goods = this.integralGoodsList.find(item => item.goodsId === goodsId);
- this.form.prizeGoodsName = goods ? goods.goodsName : null;
- } else {
- this.form.prizeGoodsName = null;
- }
- },
- handleAdd() {
- this.reset();
- this.open = true;
- this.title = "添加打卡活动";
- // 等待对话框打开后再重置表单验证
- this.$nextTick(() => {
- this.resetForm("form");
- });
- },
- handleUpdate(row) {
- const activityId = row.activityId;
- getCheckinActivity(activityId).then(response => {
- // 先重置表单
- this.reset();
- // 使用 Object.assign 合并数据,保持响应式
- Object.assign(this.form, response.data);
- this.$set(this.form, 'timeRange', [this.form.startTime, this.form.endTime]);
- // 将逗号分隔的字符串转为数组
- if (this.form.companyIds) {
- this.$set(this.form, 'companyIds', this.form.companyIds.split(',').map(id => parseInt(id)));
- } else {
- this.$set(this.form, 'companyIds', []);
- }
- if (this.form.projectIds) {
- this.$set(this.form, 'projectIds', this.form.projectIds.split(','));
- } else {
- this.$set(this.form, 'projectIds', []);
- }
- // 处理奖品数据 - 从prizeList解析单个奖品
- if (this.form.prizeList && this.form.prizeList.length > 0) {
- const prize = this.form.prizeList[0];
- this.$set(this.form, 'prizeType', Number(prize.prizeType));
- if (this.form.prizeType === 1) {
- this.$set(this.form, 'redpacketAmount', prize.redpacketAmount);
- } else if (this.form.prizeType === 2) {
- this.$set(this.form, 'freeCouponId', prize.freeCouponId)
- this.initCouponList(prize.freeCouponId)
- } else if (this.form.prizeType === 3) {
- this.$set(this.form, 'grandGiftId', prize.grandGiftId);
- console.log(prize.grandGiftId);
- this.initRewardList(prize.grandGiftId)
- } else if (this.form.prizeType === 4) {
- this.$set(this.form, 'freeCouponId', prize.freeCouponId)
- this.initVerifyCouponList(prize.freeCouponId)
- }
- }
- this.open = true;
- this.title = "修改打卡活动";
- // 等待对话框打开后再清除验证状态
- this.$nextTick(() => {
- if (this.$refs.form) {
- this.$refs.form.clearValidate();
- }
- });
- });
- },
- initRewardList(id) {
- if (!id) {
- return;
- }
- listByIds(id).then(response => {
- const {data} = response
- data.forEach(d => {
- if (!this.rewardList.some(item => item.id === d.id)) {
- this.rewardList.push({"id": d.id, "name": d.name})
- }
- })
- })
- },
- initCouponList(ids) {
- if (!ids) {
- return
- }
- getByIds({ids}).then(response => {
- const {data} = response
- data.forEach(d => {
- if (!this.couponList.some(item => item.id === d.couponId)) {
- this.couponList.push({"id": d.couponId, "name": d.title})
- }
- })
- })
- },
- handleDelete(row) {
- const activityIds = row.activityId;
- this.$confirm('是否确认删除该打卡活动?', "警告", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- return delCheckinActivity(activityIds);
- }).then(() => {
- this.getList();
- this.msgSuccess("删除成功");
- }).catch(() => {});
- },
- handleCopy(row) {
- this.copyForm.activityId = row.activityId;
- this.copyForm.timeRange = [];
- this.copyOpen = true;
- this.$nextTick(() => {
- if (this.$refs.copyForm) {
- this.$refs.copyForm.clearValidate();
- }
- });
- },
- submitCopy() {
- this.$refs.copyForm.validate(valid => {
- if (valid) {
- const params = {
- activityId: this.copyForm.activityId,
- startTime: this.copyForm.timeRange[0],
- endTime: this.copyForm.timeRange[1]
- };
- copyCheckinActivity(params).then(() => {
- this.msgSuccess("复制成功");
- this.copyOpen = false;
- this.getList();
- });
- }
- });
- },
- handlePrizeRecord(row) {
- this.prizeRecordTitle = row.activityName;
- this.prizeRecordQuery.activityId = row.activityId;
- this.prizeRecordQuery.pageNum = 1;
- this.prizeRecordQuery.prizeType = row.prizeType;
- this.prizeRecordType = row.prizeType.toString()
- this.prizeRecordOpen = true;
- this.getPrizeRecordList();
- },
- getPrizeRecordList() {
- this.prizeRecordLoading = true;
- getPrizeRecord(this.prizeRecordQuery).then(response => {
- this.prizeRecordList = response.rows || [];
- this.prizeRecordTotal = response.total || 0;
- this.prizeRecordLoading = false;
- }).catch(() => {
- this.prizeRecordLoading = false;
- });
- },
- cancel() {
- this.open = false;
- this.reset();
- },
- submitForm() {
- this.$refs["form"].validate(valid => {
- if (valid) {
- const prizeList = [];
- if (this.form.prizeType === 1) {
- prizeList.push({
- prizeType: 1,
- redpacketAmount: this.form.redpacketAmount
- });
- } else if (this.form.prizeType === 2) {
- prizeList.push({
- prizeType: 2,
- freeCouponId: this.form.freeCouponId
- })
- } else if (this.form.prizeType === 3) {
- prizeList.push({
- prizeType: 3,
- grandGiftId: this.form.grandGiftId
- })
- } else if (this.form.prizeType === 4) {
- prizeList.push({
- prizeType: 4,
- freeCouponId: this.form.freeCouponId
- })
- }
- const submitData = {
- activityId: this.form.activityId,
- activityName: this.form.activityName,
- startTime: this.form.timeRange[0],
- endTime: this.form.timeRange[1],
- checkinDays: this.form.checkinDays,
- companyIds: this.form.companyIds.join(','),
- projectIds: this.form.projectIds.join(','),
- notifyTemplate: this.form.notifyTemplate,
- status: this.form.status,
- prizeList: prizeList,
- remark: this.form.remark,
- prizeType: this.form.prizeType
- };
- if (this.form.activityId != null) {
- updateCheckinActivity(submitData).then(() => {
- this.msgSuccess("修改成功");
- this.open = false;
- this.getList();
- });
- } else {
- addCheckinActivity(submitData).then(() => {
- this.msgSuccess("新增成功");
- this.open = false;
- this.getList();
- });
- }
- }
- });
- },
- openCouponDrawer() {
- this.$nextTick(() => {
- this.$refs.customSelectCoupon?.blur?.()
- });
- this.couponDrawerOpen = true
- },
- selectCoupon(coupon) {
- this.form.freeCouponId = coupon.id
- if (!this.couponList.some(item => item.id === coupon.id)) {
- this.couponList.push(coupon)
- }
- this.couponDrawerOpen = false
- },
- openRewardDrawer() {
- this.$nextTick(() => {
- this.$refs.customSelectReward?.blur?.()
- });
- this.rewardDrawerOpen = true
- },
- selectReward(reward) {
- this.form.grandGiftId = reward.id
- if (!this.rewardList.some(item => item.id === reward.id)) {
- this.rewardList.push(reward)
- }
- this.rewardDrawerOpen = false
- },
- openVerifyCouponDrawer() {
- this.$nextTick(() => {
- this.$refs.customSelectVerifyCoupon?.blur?.()
- });
- this.verifyCouponDrawerOpen = true
- },
- selectVerifyCoupon(coupon) {
- this.form.freeCouponId = coupon.id
- if (!this.verifyCouponList.some(item => item.id === coupon.id)) {
- this.verifyCouponList.push(coupon)
- }
- this.verifyCouponDrawerOpen = false
- },
- initVerifyCouponList(ids) {
- if (!ids) return
- getByIds({ids}).then(response => {
- const {data} = response
- data.forEach(d => {
- if (!this.verifyCouponList.some(item => item.id === d.couponId)) {
- this.verifyCouponList.push({"id": d.couponId, "name": d.title})
- }
- })
- })
- },
- }
- };
- </script>
- <style scoped>
- .prize-item {
- margin-bottom: 10px;
- }
- .clearfix:before,
- .clearfix:after {
- display: table;
- content: "";
- }
- .clearfix:after {
- clear: both;
- }
- </style>
|