迁移位置,并清除多余的报错
This commit is contained in:
		
							
								
								
									
										273
									
								
								project/activeAnalysis/AppMarketingActivity/components/Add.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										273
									
								
								project/activeAnalysis/AppMarketingActivity/components/Add.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,273 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <ai-detail class="content-add">
 | 
			
		||||
    <template slot="title">
 | 
			
		||||
      <ai-title :title="params.id ? '编辑活动' : '添加活动'" isShowBack isShowBottomBorder @onBackClick="cancel(false)">
 | 
			
		||||
      </ai-title>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template slot="content">
 | 
			
		||||
      <ai-card title="基本信息">
 | 
			
		||||
        <template #content>
 | 
			
		||||
          <el-form class="ai-form" :model="form" label-width="180px!important" ref="form">
 | 
			
		||||
            <el-form-item prop="title" style="width: 100%;" label="标题" :rules="[{required: true, message: '请输入活动标题', trigger: 'change'}]">
 | 
			
		||||
              <el-input size="small" placeholder="请输入活动标题" v-model="form.title"></el-input>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="beginTime" label="开始时间" :rules="[{required: true, message: '请选择开始时间', trigger: 'change'}]">
 | 
			
		||||
              <el-date-picker
 | 
			
		||||
                v-model="form.beginTime"
 | 
			
		||||
                type="datetime"
 | 
			
		||||
                style="width: 100%"
 | 
			
		||||
                size="small"
 | 
			
		||||
                value-format="yyyy-MM-dd HH:mm:ss"
 | 
			
		||||
                placeholder="请选择开始时间">
 | 
			
		||||
              </el-date-picker>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="endTime" label="结束时间" :rules="[{required: true, message: '请选择结束时间', trigger: 'change'}]">
 | 
			
		||||
              <el-date-picker
 | 
			
		||||
                v-model="form.endTime"
 | 
			
		||||
                type="datetime"
 | 
			
		||||
                style="width: 100%"
 | 
			
		||||
                size="small"
 | 
			
		||||
                value-format="yyyy-MM-dd HH:mm:ss"
 | 
			
		||||
                placeholder="请选择结束时间">
 | 
			
		||||
              </el-date-picker>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="round1ActiveLimit" label="第一轮抽奖限制日活天数">
 | 
			
		||||
              <el-input-number size="small" v-model="form.round1ActiveLimit" :min="0"></el-input-number>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="round2ActiveLimit" label="第二轮抽奖限制日活天数" :rules="[{required: true, message: '请输入', trigger: 'change'}]">
 | 
			
		||||
              <el-input-number size="small" v-model="form.round2ActiveLimit" :min="1"></el-input-number>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="round3ActiveLimit" label="第三轮抽奖限制日活天数" :rules="[{required: true, message: '请输入', trigger: 'change'}]">
 | 
			
		||||
              <el-input-number size="small" v-model="form.round3ActiveLimit" :min="1"></el-input-number>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="round4ActiveLimit" label="第四轮抽奖限制日活天数" :rules="[{required: true, message: '请输入', trigger: 'change'}]">
 | 
			
		||||
              <el-input-number size="small" v-model="form.round4ActiveLimit" :min="1"></el-input-number>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="beginTime5" label="第五轮抽奖开始时间" :rules="[{required: true, message: '第五轮抽奖开始时间', trigger: 'change'}]">
 | 
			
		||||
              <el-date-picker
 | 
			
		||||
                v-model="form.beginTime5"
 | 
			
		||||
                type="datetime"
 | 
			
		||||
                style="width: 100%"
 | 
			
		||||
                size="small"
 | 
			
		||||
                value-format="yyyy-MM-dd HH:mm:ss"
 | 
			
		||||
                placeholder="第五轮抽奖开始时间">
 | 
			
		||||
              </el-date-picker>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item prop="round5ActiveLimit" label="第五轮抽奖限制日活天数" :rules="[{required: true, message: '请输入', trigger: 'change'}]">
 | 
			
		||||
              <el-input-number size="small" v-model="form.round5ActiveLimit" :min="1"></el-input-number>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item style="width: 100%;" prop="wxQrcode" label="微信插件二维码" :rules="[{required: true, message: '请上传', trigger: 'change'}]">
 | 
			
		||||
              <ai-uploader
 | 
			
		||||
                :instance="instance"
 | 
			
		||||
                v-model="form.wxQrcode"
 | 
			
		||||
                :limit="1">
 | 
			
		||||
              </ai-uploader>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <div>
 | 
			
		||||
              <el-form-item :label="'奖品' + (index + 1)" style="width: 100%;" v-for="(item, index) in form.prizes" :key="'prizes' + (index + 1)">
 | 
			
		||||
                <div>
 | 
			
		||||
                  <div class="form-flex">
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <span>奖品名称:</span>
 | 
			
		||||
                      <el-input size="small" style="width: 265px;" placeholder="请输入奖品名称" v-model="item.name"></el-input>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <span>中奖规则:</span>
 | 
			
		||||
                      <el-input size="small" style="width: 265px;" placeholder="指定第x个抽奖的人中奖,多个逗号隔开" v-model="item.rule"></el-input>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <span>奖品总数:</span>
 | 
			
		||||
                      <el-input-number size="small" v-model="item.total" :min="1"></el-input-number>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <span>奖品排序:</span>
 | 
			
		||||
                      <el-input-number size="small" v-model="item.showIndex" :min="1"></el-input-number>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <span>开放轮次:</span>
 | 
			
		||||
                      <el-radio-group v-model="item.belongRound">
 | 
			
		||||
                        <el-radio :label="1">第一轮</el-radio>
 | 
			
		||||
                        <el-radio :label="2">第二轮</el-radio>
 | 
			
		||||
                        <el-radio :label="3">第三轮</el-radio>
 | 
			
		||||
                        <el-radio :label="4">第四轮</el-radio>
 | 
			
		||||
                        <el-radio :label="5">第五轮</el-radio>
 | 
			
		||||
                      </el-radio-group>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <span>是否默认:</span>
 | 
			
		||||
                      <el-switch
 | 
			
		||||
                        v-model="item.defaultPrize"
 | 
			
		||||
                        active-value="1"
 | 
			
		||||
                        inactive-value="0">
 | 
			
		||||
                      </el-switch>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <span>奖品图片:</span>
 | 
			
		||||
                      <ai-uploader
 | 
			
		||||
                        :instance="instance"
 | 
			
		||||
                        v-model="item.picture"
 | 
			
		||||
                        :limit="1">
 | 
			
		||||
                      </ai-uploader>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="prize-item">
 | 
			
		||||
                      <el-button type="danger" @click="remove(index)">删除</el-button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                  </div>
 | 
			
		||||
                </div>
 | 
			
		||||
              </el-form-item>
 | 
			
		||||
            </div>
 | 
			
		||||
            <el-form-item style="width: 100%;">
 | 
			
		||||
              <el-button type="primary" @click="add">添加奖品</el-button>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-form>
 | 
			
		||||
        </template>
 | 
			
		||||
      </ai-card>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <el-button @click="cancel">取消</el-button>
 | 
			
		||||
      <el-button type="primary" @click="confirm">提交</el-button>
 | 
			
		||||
    </template>
 | 
			
		||||
  </ai-detail>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  import { mapState } from 'vuex'
 | 
			
		||||
  export default {
 | 
			
		||||
    name: 'Add',
 | 
			
		||||
 | 
			
		||||
    props: {
 | 
			
		||||
      instance: Function,
 | 
			
		||||
      dict: Object,
 | 
			
		||||
      params: Object
 | 
			
		||||
    },
 | 
			
		||||
    data () {
 | 
			
		||||
      return {
 | 
			
		||||
        info: {},
 | 
			
		||||
        form: {
 | 
			
		||||
          title: '',
 | 
			
		||||
          beginTime: '',
 | 
			
		||||
          beginTime1: '',
 | 
			
		||||
          beginTime2: '',
 | 
			
		||||
          beginTime3: '',
 | 
			
		||||
          beginTime4: '',
 | 
			
		||||
          beginTime5: '',
 | 
			
		||||
          endTime: '',
 | 
			
		||||
          round1ActiveLimit: '',
 | 
			
		||||
          round2ActiveLimit: '',
 | 
			
		||||
          round3ActiveLimit: '',
 | 
			
		||||
          round4ActiveLimit: '',
 | 
			
		||||
          round5ActiveLimit: '',
 | 
			
		||||
          wxQrcode: [],
 | 
			
		||||
          prizes: []
 | 
			
		||||
        },
 | 
			
		||||
        id: ''
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    computed: {
 | 
			
		||||
      ...mapState(['user'])
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    created () {
 | 
			
		||||
      if (this.params && this.params.id) {
 | 
			
		||||
        this.id = this.params.id
 | 
			
		||||
        this.getInfo(this.params.id)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    methods: {
 | 
			
		||||
      getInfo (id) {
 | 
			
		||||
        this.instance.post(`/app/appmarketingactivityinfo/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
          if (res.code === 0) {
 | 
			
		||||
            this.form = res.data
 | 
			
		||||
 | 
			
		||||
            this.form.wxQrcode = [{
 | 
			
		||||
              url: res.data.wxQrcode
 | 
			
		||||
            }]
 | 
			
		||||
            if (res.data.prizes.length) {
 | 
			
		||||
              this.form.prizes = res.data.prizes.map(v => {
 | 
			
		||||
                return {
 | 
			
		||||
                  ...v,
 | 
			
		||||
                  picture: [{
 | 
			
		||||
                    url: v.picture
 | 
			
		||||
                  }]
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      add () {
 | 
			
		||||
        this.form.prizes.push({
 | 
			
		||||
          name: '',
 | 
			
		||||
          picture: [],
 | 
			
		||||
          rule: '',
 | 
			
		||||
          showIndex: '',
 | 
			
		||||
          total: '',
 | 
			
		||||
          defaultPrize: '',
 | 
			
		||||
          belongRound: ''
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      remove (index) {
 | 
			
		||||
        this.form.prizes.splice(index, 1)
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      confirm () {
 | 
			
		||||
        this.$refs.form.validate((valid) => {
 | 
			
		||||
          if (valid) {
 | 
			
		||||
            this.instance.post(`/app/appmarketingactivityinfo/addOrUpdate`, {
 | 
			
		||||
              ...this.form,
 | 
			
		||||
              id: this.params.id || '',
 | 
			
		||||
              wxQrcode: this.form.wxQrcode[0].url,
 | 
			
		||||
              prizes: this.form.prizes.map(v => {
 | 
			
		||||
                return {
 | 
			
		||||
                  ...v,
 | 
			
		||||
                  picture: v.picture[0].url
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }).then(res => {
 | 
			
		||||
              if (res.code == 0) {
 | 
			
		||||
                this.$message.success('提交成功')
 | 
			
		||||
                setTimeout(() => {
 | 
			
		||||
                  this.cancel(true)
 | 
			
		||||
                }, 600)
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      cancel (isRefresh) {
 | 
			
		||||
        this.$emit('change', {
 | 
			
		||||
          type: 'List',
 | 
			
		||||
          isRefresh: !!isRefresh
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
  .form-flex {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .prize-item {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    margin-bottom: 14px;
 | 
			
		||||
    width: 50%;
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #666;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:last-child {
 | 
			
		||||
      margin-bottom: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
@@ -0,0 +1,339 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <ai-detail isHasSidebar class="AppMarketingActivity-detail">
 | 
			
		||||
    <template slot="title">
 | 
			
		||||
      <ai-title title="活动详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)">
 | 
			
		||||
      </ai-title>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template slot="content">
 | 
			
		||||
      <AiSidebar :tabTitle="tabList" v-model="currIndex"></AiSidebar>
 | 
			
		||||
      <div v-show="currIndex === 0">
 | 
			
		||||
        <ai-card title="基本信息">
 | 
			
		||||
          <template #content>
 | 
			
		||||
            <ai-wrapper
 | 
			
		||||
              label-width="180px">
 | 
			
		||||
              <ai-info-item label="活动标题" isLine :value="info.title"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="开始时间" :value="info.beginTime"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="结束时间" :value="info.endTime"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="第一轮抽奖限制日活天数" :value="info.round1ActiveLimit"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="第二轮抽奖限制日活天数" :value="info.round2ActiveLimit"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="第三轮抽奖限制日活天数" :value="info.round3ActiveLimit"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="第四轮抽奖限制日活天数" :value="info.round4ActiveLimit"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="第五轮抽奖开始时间" :value="info.beginTime5"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="第五轮抽奖限制日活天数" :value="info.round5ActiveLimit"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="微信插件二维码">
 | 
			
		||||
                <ai-uploader
 | 
			
		||||
                  :instance="instance"
 | 
			
		||||
                  disabled
 | 
			
		||||
                  :value="[{
 | 
			
		||||
                    url: info.wxQrcode
 | 
			
		||||
                  }]"
 | 
			
		||||
                  :limit="1">
 | 
			
		||||
                </ai-uploader>
 | 
			
		||||
              </ai-info-item>
 | 
			
		||||
            </ai-wrapper>
 | 
			
		||||
          </template>
 | 
			
		||||
        </ai-card>
 | 
			
		||||
        <ai-card title="奖品">
 | 
			
		||||
          <template #content>
 | 
			
		||||
            <ai-wrapper
 | 
			
		||||
              class="prize-item"
 | 
			
		||||
              v-for="(item, key) in info.prizes"
 | 
			
		||||
              :key="key"
 | 
			
		||||
              label-width="180px">
 | 
			
		||||
              <ai-info-item label="奖品名称" isLine :value="item.name"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="中奖规则" :value="item.rule"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="奖品总数" :value="item.total"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="奖品排序" :value="item.showIndex"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="开放轮次" :value="item.belongRound"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="是否默认" :value="item.defaultPrize === '0' ? '否' : '是'"></ai-info-item>
 | 
			
		||||
              <ai-info-item label="奖品图片" isLine>
 | 
			
		||||
                <ai-uploader
 | 
			
		||||
                  :instance="instance"
 | 
			
		||||
                  disabled
 | 
			
		||||
                  :value="[{
 | 
			
		||||
                    url: item.picture
 | 
			
		||||
                  }]"
 | 
			
		||||
                  :limit="1">
 | 
			
		||||
                </ai-uploader>
 | 
			
		||||
              </ai-info-item>
 | 
			
		||||
            </ai-wrapper>
 | 
			
		||||
          </template>
 | 
			
		||||
        </ai-card>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div v-show="currIndex === 1">
 | 
			
		||||
        <ai-card title="报名记录">
 | 
			
		||||
          <template #content>
 | 
			
		||||
            <ai-search-bar class="search-bar">
 | 
			
		||||
              <template #left>
 | 
			
		||||
                <ai-select
 | 
			
		||||
                  v-model="search.activeStatus"
 | 
			
		||||
                  clearable
 | 
			
		||||
                  placeholder="请选择活跃情况"
 | 
			
		||||
                  :selectList="statusList"
 | 
			
		||||
                  @change="search.current = 1, getList()">
 | 
			
		||||
                </ai-select>
 | 
			
		||||
                <ai-download
 | 
			
		||||
                  :instance="instance"
 | 
			
		||||
                  url="/app/appmarketingactivityinfo/exportSignUpList"
 | 
			
		||||
                  :params="{
 | 
			
		||||
                    ...search,
 | 
			
		||||
                    activityId: params.id
 | 
			
		||||
                  }"
 | 
			
		||||
                  fileName="报名记录"
 | 
			
		||||
                  :disabled="!tableData.length">
 | 
			
		||||
                </ai-download>
 | 
			
		||||
              </template>
 | 
			
		||||
              <template #right>
 | 
			
		||||
                <el-input
 | 
			
		||||
                  v-model="search.name"
 | 
			
		||||
                  class="search-input"
 | 
			
		||||
                  size="small"
 | 
			
		||||
                  v-throttle="() => {search.current = 1, getList()}"
 | 
			
		||||
                  placeholder="请输入姓名"
 | 
			
		||||
                  clearable
 | 
			
		||||
                  @clear="search.current = 1, getList()"
 | 
			
		||||
                  suffix-icon="iconfont iconSearch">
 | 
			
		||||
                </el-input>
 | 
			
		||||
              </template>
 | 
			
		||||
            </ai-search-bar>
 | 
			
		||||
            <ai-table
 | 
			
		||||
              :tableData="tableData"
 | 
			
		||||
              :col-configs="colConfigs"
 | 
			
		||||
              :total="total"
 | 
			
		||||
              style="margin-top: 6px;"
 | 
			
		||||
              :current.sync="search.current"
 | 
			
		||||
              :size.sync="search.size"
 | 
			
		||||
              @getList="getList">
 | 
			
		||||
              <el-table-column slot="options" width="110px" fixed="right" label="操作" align="center">
 | 
			
		||||
                <template slot-scope="{ row }">
 | 
			
		||||
                  <div class="table-options">
 | 
			
		||||
                    <el-button type="text" @click="changePhone(row.id, row.phone)">更换手机号</el-button>
 | 
			
		||||
                  </div>
 | 
			
		||||
                </template>
 | 
			
		||||
              </el-table-column>
 | 
			
		||||
            </ai-table>
 | 
			
		||||
          </template>
 | 
			
		||||
        </ai-card>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div v-show="currIndex === 2">
 | 
			
		||||
        <ai-card title="抽奖记录">
 | 
			
		||||
          <template #content>
 | 
			
		||||
            <ai-search-bar class="search-bar">
 | 
			
		||||
              <template #left>
 | 
			
		||||
                <ai-select
 | 
			
		||||
                  v-model="prizeSearch.prizeId"
 | 
			
		||||
                  clearable
 | 
			
		||||
                  placeholder="请选择奖品"
 | 
			
		||||
                  :selectList="prizes"
 | 
			
		||||
                  @change="prizeSearch.current = 1, getPrizeList()">
 | 
			
		||||
                </ai-select>
 | 
			
		||||
                <ai-download
 | 
			
		||||
                  :instance="instance"
 | 
			
		||||
                  url="/app/appmarketingactivityinfo/exportTaffleList"
 | 
			
		||||
                  :params="{
 | 
			
		||||
                    ...prizeSearch,
 | 
			
		||||
                    activityId: params.id
 | 
			
		||||
                  }"
 | 
			
		||||
                  fileName="抽奖记录"
 | 
			
		||||
                  :disabled="!tableData.length">
 | 
			
		||||
                </ai-download>
 | 
			
		||||
              </template>
 | 
			
		||||
              <template #right>
 | 
			
		||||
                <el-input
 | 
			
		||||
                  v-model="prizeSearch.name"
 | 
			
		||||
                  class="search-input"
 | 
			
		||||
                  size="small"
 | 
			
		||||
                  v-throttle="() => {prizeSearch.current = 1, getPrizeList()}"
 | 
			
		||||
                  placeholder="请输入奖品名称"
 | 
			
		||||
                  clearable
 | 
			
		||||
                  @clear="prizeSearch.current = 1, getPrizeList()"
 | 
			
		||||
                  suffix-icon="iconfont iconSearch">
 | 
			
		||||
                </el-input>
 | 
			
		||||
              </template>
 | 
			
		||||
            </ai-search-bar>
 | 
			
		||||
            <ai-table
 | 
			
		||||
              :tableData="prizeList"
 | 
			
		||||
              :col-configs="prizeColConfigs"
 | 
			
		||||
              :total="prizeSearch.total"
 | 
			
		||||
              style="margin-top: 6px;"
 | 
			
		||||
              :current.sync="prizeSearch.current"
 | 
			
		||||
              :size.sync="prizeSearch.size"
 | 
			
		||||
              @getList="getPrizeList">
 | 
			
		||||
            </ai-table>
 | 
			
		||||
          </template>
 | 
			
		||||
        </ai-card>
 | 
			
		||||
      </div>
 | 
			
		||||
      <ai-dialog
 | 
			
		||||
        :visible.sync="isShowPhone"
 | 
			
		||||
        width="790px"
 | 
			
		||||
        @onConfirm="onConfirm"
 | 
			
		||||
        title="更换手机号">
 | 
			
		||||
        <el-form class="ai-form" :model="form" label-width="180px!important" ref="form">
 | 
			
		||||
          <el-form-item prop="phone" style="width: 100%;" label="标题" :rules="[{required: true, message: '请输入手机号', trigger: 'change'}]">
 | 
			
		||||
            <el-input size="small" placeholder="请输入手机号" v-model="form.phone"></el-input>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-form>
 | 
			
		||||
      </ai-dialog>
 | 
			
		||||
    </template>
 | 
			
		||||
  </ai-detail>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  export default {
 | 
			
		||||
    name: 'Detail',
 | 
			
		||||
 | 
			
		||||
    props: {
 | 
			
		||||
      instance: Function,
 | 
			
		||||
      dict: Object,
 | 
			
		||||
      params: Object
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    data () {
 | 
			
		||||
      return {
 | 
			
		||||
        currIndex: 0,
 | 
			
		||||
        form: {
 | 
			
		||||
          phone: ''
 | 
			
		||||
        },
 | 
			
		||||
        id: '',
 | 
			
		||||
        tabList: ['基本信息', '报名记录', '抽奖记录'],
 | 
			
		||||
        colConfigs: [
 | 
			
		||||
          { prop: 'name',  label: '姓名', align: 'left', width: '200px' },
 | 
			
		||||
          { prop: 'phone', label: '手机号', align: 'center' },
 | 
			
		||||
          { prop: 'departmentName', label: '所属部门', align: 'center' },
 | 
			
		||||
          { prop: 'activeCount', label: '活跃天数', align: 'center' },
 | 
			
		||||
          { prop: 'createTime', label: '报名时间', align: 'center' }
 | 
			
		||||
        ],
 | 
			
		||||
        prizeColConfigs: [
 | 
			
		||||
          { prop: 'name',  label: '姓名', align: 'left', width: '200px' },
 | 
			
		||||
          { prop: 'phone', label: '手机号', align: 'center' },
 | 
			
		||||
          { prop: 'prizeName', label: '奖品名称', align: 'center' },
 | 
			
		||||
          { prop: 'createTime', label: '抽奖时间', align: 'center' }
 | 
			
		||||
        ],
 | 
			
		||||
        prizeList: [],
 | 
			
		||||
        prizeSearch: {
 | 
			
		||||
          size: 10,
 | 
			
		||||
          current: 1,
 | 
			
		||||
          name: '',
 | 
			
		||||
          prizeId: ''
 | 
			
		||||
        },
 | 
			
		||||
        search: {
 | 
			
		||||
          size: 10,
 | 
			
		||||
          name: '',
 | 
			
		||||
          activeStatus: '',
 | 
			
		||||
          current: 1
 | 
			
		||||
        },
 | 
			
		||||
        prizes: [],
 | 
			
		||||
        tableData: [],
 | 
			
		||||
        total: 0,
 | 
			
		||||
        info: {},
 | 
			
		||||
        isShowPhone: false,
 | 
			
		||||
        statusList: [
 | 
			
		||||
          {
 | 
			
		||||
            dictName: '无活跃',
 | 
			
		||||
            dictValue: '0'
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            dictName: '有活跃',
 | 
			
		||||
            dictValue: '1'
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    created () {
 | 
			
		||||
      this.getInfo()
 | 
			
		||||
      this.getList()
 | 
			
		||||
      this.getPrizeList()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    methods: {
 | 
			
		||||
      getList() {
 | 
			
		||||
        this.instance.post(`/app/appmarketingactivityinfo/signUpList?activityId=${this.params.id}`, null, {
 | 
			
		||||
          params: {
 | 
			
		||||
            ...this.search
 | 
			
		||||
          }
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.tableData = res.data.records
 | 
			
		||||
            this.total = res.data.total
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      changePhone (id, phone) {
 | 
			
		||||
        this.id = id
 | 
			
		||||
        this.form.phone = phone
 | 
			
		||||
 | 
			
		||||
        this.isShowPhone = true
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      onConfirm () {
 | 
			
		||||
        this.$refs.form.validate((valid) => {
 | 
			
		||||
          if (valid) {
 | 
			
		||||
            this.instance.post(`/app/appmarketingactivityinfo/updateBindPhone`, null, {
 | 
			
		||||
              params: {
 | 
			
		||||
                ...this.form,
 | 
			
		||||
                signupId: this.id
 | 
			
		||||
              }
 | 
			
		||||
            }).then(res => {
 | 
			
		||||
              if (res.code == 0) {
 | 
			
		||||
                this.$message.success('更换成功')
 | 
			
		||||
                this.isShowPhone = false
 | 
			
		||||
                this.getList()
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      getPrizeList() {
 | 
			
		||||
        this.instance.post(`/app/appmarketingactivityinfo/raffleList?activityId=${this.params.id}`, null, {
 | 
			
		||||
          params: {
 | 
			
		||||
            ...this.prizeSearch
 | 
			
		||||
          }
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.prizeList = res.data.records
 | 
			
		||||
            this.prizeSearch.total = res.data.total
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      getInfo () {
 | 
			
		||||
        this.instance.post(`/app/appmarketingactivityinfo/queryDetailById?id=${this.params.id}`).then(res => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            if (res.data) {
 | 
			
		||||
              this.info = res.data
 | 
			
		||||
              this.prizes = res.data.prizes.map(v => {
 | 
			
		||||
                return {
 | 
			
		||||
                  dictValue: v.id,
 | 
			
		||||
                  dictName: v.name
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      cancel () {
 | 
			
		||||
        this.$emit('change', {
 | 
			
		||||
          type: 'List',
 | 
			
		||||
          isRefresh: true
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
  .AppMarketingActivity-detail {
 | 
			
		||||
    .prize-item {
 | 
			
		||||
      padding: 20px 0 0;
 | 
			
		||||
      border-bottom: 1px solid #eee;
 | 
			
		||||
 | 
			
		||||
      &:first-child {
 | 
			
		||||
        padding-top: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										148
									
								
								project/activeAnalysis/AppMarketingActivity/components/List.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								project/activeAnalysis/AppMarketingActivity/components/List.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <ai-list class="notice">
 | 
			
		||||
    <template slot="title">
 | 
			
		||||
      <ai-title title="营销活动" isShowBottomBorder>
 | 
			
		||||
      </ai-title>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template slot="content">
 | 
			
		||||
      <ai-search-bar class="search-bar">
 | 
			
		||||
        <template #left>
 | 
			
		||||
          <ai-select
 | 
			
		||||
            v-model="search.status"
 | 
			
		||||
            clearable
 | 
			
		||||
            placeholder="请选择活动状态"
 | 
			
		||||
            :selectList="statusList"
 | 
			
		||||
            @change="search.current = 1, getList()">
 | 
			
		||||
          </ai-select>
 | 
			
		||||
          <el-button size="small" type="primary" icon="iconfont iconAdd" @click="toAdd('')">添加</el-button>
 | 
			
		||||
        </template>
 | 
			
		||||
        <template #right>
 | 
			
		||||
          <el-input
 | 
			
		||||
            v-model="search.title"
 | 
			
		||||
            class="search-input"
 | 
			
		||||
            size="small"
 | 
			
		||||
            v-throttle="() => {search.current = 1, getList()}"
 | 
			
		||||
            placeholder="请输入活动标题"
 | 
			
		||||
            clearable
 | 
			
		||||
            @clear="search.current = 1, getList()"
 | 
			
		||||
            suffix-icon="iconfont iconSearch">
 | 
			
		||||
          </el-input>
 | 
			
		||||
        </template>
 | 
			
		||||
      </ai-search-bar>
 | 
			
		||||
      <ai-table
 | 
			
		||||
        :tableData="tableData"
 | 
			
		||||
        :col-configs="colConfigs"
 | 
			
		||||
        :total="total"
 | 
			
		||||
        style="margin-top: 6px;"
 | 
			
		||||
        :current.sync="search.current"
 | 
			
		||||
        :size.sync="search.size"
 | 
			
		||||
        @getList="getList">
 | 
			
		||||
        <el-table-column slot="options" width="120px" fixed="right" label="操作" align="center">
 | 
			
		||||
          <template slot-scope="{ row }">
 | 
			
		||||
            <div class="table-options">
 | 
			
		||||
              <el-button type="text" @click="toAdd(row.id)">编辑</el-button>
 | 
			
		||||
              <el-button type="text" @click="toDetail(row.id)">详情</el-button>
 | 
			
		||||
              <!-- <el-button type="text" @click="remove(row.id)">删除</el-button> -->
 | 
			
		||||
            </div>
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
      </ai-table>
 | 
			
		||||
    </template>
 | 
			
		||||
  </ai-list>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  export default {
 | 
			
		||||
    name: 'List',
 | 
			
		||||
 | 
			
		||||
    props: {
 | 
			
		||||
      instance: Function,
 | 
			
		||||
      dict: Object
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    data () {
 | 
			
		||||
      return {
 | 
			
		||||
        search: {
 | 
			
		||||
          current: 1,
 | 
			
		||||
          size: 10,
 | 
			
		||||
          title: '',
 | 
			
		||||
          status: ''
 | 
			
		||||
        },
 | 
			
		||||
        total: 10,
 | 
			
		||||
        colConfigs: [
 | 
			
		||||
          { prop: 'title',  label: '活动标题', align: 'left' },
 | 
			
		||||
          { prop: 'createUserName',  label: '创建人', align: 'center' },
 | 
			
		||||
          { prop: 'beginTime',  label: '开始时间', align: 'center' },
 | 
			
		||||
          { prop: 'endTime', label: '结束时间', align: 'center' },
 | 
			
		||||
          { prop: 'createTime', label: '创建时间', align: 'center' }
 | 
			
		||||
        ],
 | 
			
		||||
        tableData: [],
 | 
			
		||||
        statusList: [
 | 
			
		||||
          {
 | 
			
		||||
            dictValue: '0',
 | 
			
		||||
            dictName: '未开始'
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            dictValue: '1',
 | 
			
		||||
            dictName: '进行中'
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            dictValue: '2',
 | 
			
		||||
            dictName: '已结束'
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    created() {
 | 
			
		||||
      this.getList()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    methods: {
 | 
			
		||||
      getList() {
 | 
			
		||||
        this.instance.post(`/app/appmarketingactivityinfo/list`, null, {
 | 
			
		||||
          params: {
 | 
			
		||||
            ...this.search
 | 
			
		||||
          }
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.tableData = res.data.records
 | 
			
		||||
            this.total = res.data.total
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      remove (id) {
 | 
			
		||||
        this.$confirm('确定删除该活动?').then(() => {
 | 
			
		||||
          this.instance.post(`/app/appmarketingactivityinfo/delete?id=${id}`).then(res => {
 | 
			
		||||
            if (res.code == 0) {
 | 
			
		||||
              this.$message.success('删除成功!')
 | 
			
		||||
              this.getList()
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      toDetail (id) {
 | 
			
		||||
        this.$emit('change', {
 | 
			
		||||
          type: 'Detail',
 | 
			
		||||
          params: {
 | 
			
		||||
            id: id || ''
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      toAdd(id) {
 | 
			
		||||
        this.$emit('change', {
 | 
			
		||||
          type: 'Add',
 | 
			
		||||
          params: {
 | 
			
		||||
            id: id || ''
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
</style>
 | 
			
		||||
		Reference in New Issue
	
	Block a user