Przeglądaj źródła

Merge branch 'test'

DESKTOP-SVI9JE1\muzen 2 lat temu
rodzic
commit
f6ebb849a2

+ 35 - 0
src/api/push/dialog.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 列表
+export function list(data) {
+  return request({
+    url: `/admin/pop/page`,
+    method: 'post',
+    data
+  })
+}
+
+// 新增 编辑
+export function submit(data) {
+  return request({
+    url: `/admin/pop/addOrUpdate`,
+    method: 'post',
+    data
+  })
+}
+
+// 详情
+export function detail(id) {
+  return request({
+    url: `/admin/pop/queryById/${id}`,
+    method: 'get'
+  })
+}
+
+// 删除
+export function remove(id, status) {
+  return request({
+    url: `/admin/pop/hitOrSold/${id}/${status}`,
+    method: 'get'
+  })
+}

+ 4 - 4
src/mixin/index.js

@@ -319,7 +319,7 @@ const onOrOffMixin = {
   }
 }
 
-// 禁用状态
+// 上下架状态
 const disabledMixin = {
   data() {
     return {
@@ -492,13 +492,13 @@ const currentMixin = {
     return {
       currentOptions: [{
         value: 0,
-        label: '进行中'
+        label: '已生效'
       }, {
         value: 1,
-        label: '未开始'
+        label: '待生效'
       }, {
         value: 2,
-        label: '已过期'
+        label: '已失效'
       }]
     }
   }

+ 16 - 0
src/router/index.js

@@ -602,6 +602,22 @@ export const dynamicRoutes = [{
       activeMenu: '/push/update'
     }
   }]
+},
+// 推送弹窗
+{
+  path: '/push',
+  component: Layout,
+  hidden: true,
+  permissions: ['push:dialog:list'],
+  children: [{
+    path: 'pushDialog/detail',
+    component: () => import('@/views/push/dialog/detail'),
+    name: 'dialogDetail',
+    meta: {
+      title: '弹窗详情',
+      activeMenu: '/push/pushDialog'
+    }
+  }]
 }]
 
 export default new Router({

+ 4 - 4
src/views/device/music/index.vue

@@ -31,13 +31,13 @@
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button type="text" @click="getDialog('查看', scope.row.id)">查看</el-button>
-          <el-button type="text" v-if="scope.row.status === 0" @click="getChange('禁用', scope.row, 1)"
-            v-hasPermi="['device:music:down']">禁用</el-button>
+          <el-button type="text" v-if="scope.row.status === 0" @click="getChange('下架', scope.row, 1)"
+            v-hasPermi="['device:music:down']">下架</el-button>
           <span v-else>
             <el-button type="text" style="margin-left: 10px" @click="getDialog('编辑', scope.row.id)"
               v-hasPermi="['device:music:edit']">编辑</el-button>
-            <el-button type="text" @click="getChange('启用', scope.row, 0)"
-              v-hasPermi="['device:music:up']">启用</el-button>
+            <el-button type="text" @click="getChange('上架', scope.row, 0)"
+              v-hasPermi="['device:music:up']">上架</el-button>
             <el-button type="delete" @click="getChange('删除', scope.row, 2)"
               v-hasPermi="['device:music:delete']">删除</el-button>
           </span>

+ 4 - 4
src/views/operation/dialog/index.vue

@@ -32,13 +32,13 @@
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button type="text" @click="getDialog('查看', scope.row.id)">查看</el-button>
-          <el-button v-if="scope.row.status === 0" type="text" @click="getChange(scope.row, 1, '禁用')"
-            v-hasPermi="['operation:dialog:down']">禁用</el-button>
+          <el-button v-if="scope.row.status === 0" type="text" @click="getChange(scope.row, 1, '下架')"
+            v-hasPermi="['operation:dialog:down']">下架</el-button>
           <span v-else style="margin-left: 10px">
             <el-button type="text" @click="getDialog('编辑', scope.row.id)"
               v-hasPermi="['operation:dialog:edit']">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 0, '启用')"
-              v-hasPermi="['operation:dialog:up']">启用</el-button>
+            <el-button type="text" @click="getChange(scope.row, 0, '上架')"
+              v-hasPermi="['operation:dialog:up']">上架</el-button>
             <el-button type="delete" @click="getChange(scope.row, 2, '删除')"
               v-hasPermi="['operation:dialog:delete']">删除</el-button>
           </span>

+ 118 - 60
src/views/operation/recommend/detail.vue

@@ -1,48 +1,62 @@
 <template>
   <div class="app-container">
-    <el-button v-if="!isRead" type="primary" icon="el-icon-plus" size="mini" @click="getPush">新增</el-button>
+    <el-form size="mini" inline :disabled="isRead">
+      <el-form-item label="模块名称:">
+        <el-input v-model="form.title" placeholder="请输入模块名称" />
+      </el-form-item>
+      <el-form-item label="有效时间:">
+        <el-date-picker v-model="form.timeList" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
+          value-format="yyyy-MM-dd HH:mm:ss">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button v-if="!isRead" type="primary" icon="el-icon-plus" @click="getPush">新增</el-button>
+      </el-form-item>
+    </el-form>
     <!-- 模块 -->
     <div style="display: flex; flex-wrap: wrap;">
-      <el-form class="form" v-for="(item, index) in form" :key="item.id" label-width="auto" :disabled="isRead">
+      <el-form class="form" :model="item" :rules="rules" ref="list" v-for="(item, index) in form.list" :key="item.id"
+        label-width="auto" :disabled="isRead">
         <el-form-item class="sort" :label="(index + 1).toString()">
           <el-link v-if="!isRead" icon="el-icon-close" :underline="false" @click="getDelete(index)" />
         </el-form-item>
-        <el-form-item v-if="'title' in item" label="标题:">
+        <el-form-item v-if="'title' in item" label="标题:" prop="title">
           <el-input v-model="item.title" placeholder="请输入内容标题" />
         </el-form-item>
-        <el-form-item v-if="'description' in item" label="简介:">
+        <el-form-item v-if="'description' in item" label="简介:" prop="description">
           <el-input v-model="item.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10 }"
             placeholder="请输入简介" />
         </el-form-item>
-        <el-form-item v-if="'contentName' in item" label="内容:">
+        <el-form-item v-if="'contentName' in item" label="内容:" prop="contentName">
           <el-input v-model="item.contentName" prefix-icon="el-icon-search" placeholder="选择内容"
             @focus="getDialog(item, index, false)" />
         </el-form-item>
-        <el-form-item v-if="'forwardType' in item" label="跳转方式:">
-          <el-select v-model="item.forwardType" placeholder="请选择跳转方式" @change="forwardTypeChange(item)">
+        <el-form-item v-if="'forwardType' in item" label="跳转方式:" prop="forwardType">
+          <el-select v-model="item.forwardType" placeholder="请选择跳转方式" @change="forwardTypeChange(item, index)">
             <el-option v-for="item in forwardTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
-        <el-form-item v-if="'forwardUrl' in item" label="跳转地址:">
+        <el-form-item v-if="'forwardUrl' in item" label="跳转地址:" prop="forwardUrl">
           <el-input v-model="item.forwardUrl" placeholder="请输入跳转地址" />
         </el-form-item>
-        <el-form-item v-if="'contentId' in item" label="专区页面:">
+        <el-form-item v-if="'contentId' in item" label="专区页面:" prop="contentId">
           <el-select v-model="item.contentId" placeholder="请选择跳转专区" @change="contentIdChange(item)">
             <el-option v-for="item in sceneOptions" :key="item.value" :value="item.value" :label="item.label" />
           </el-select>
         </el-form-item>
-        <el-form-item v-if="'isCustom' in item" label="封面模式:">
+        <el-form-item v-if="'isCustom' in item" label="封面模式:" prop="isCustom">
           <el-select v-model="item.isCustom" placeholder="选择封面模式" @change="isCustomChange(item, index)">
             <el-option v-for="item in coverOptions" :key="item.value" :label="item.label" :value="Number(item.value)" />
           </el-select>
         </el-form-item>
-        <el-form-item v-if="'pic' in item" label="图片:">
-          <Upload listType="picture-card" :url="item.pic" @upload="upload($event, item)" :disabled="isRead || item.isCustom === 1" />
+        <el-form-item v-if="'pic' in item" label="图片:" prop="pic">
+          <Upload listType="picture-card" :url="item.pic" @upload="upload($event, item)"
+            :disabled="isRead || item.isCustom === 1" />
         </el-form-item>
-        <el-form-item v-if="'sort' in item" label="排序:">
+        <el-form-item v-if="'sort' in item" label="排序:" prop="sort">
           <el-input-number v-model="item.sort" />
         </el-form-item>
-        <el-form-item v-if="'childList' in item" label="列表:">
+        <el-form-item v-if="'childList' in item" label="列表:" prop="childList">
           <el-button type="primary" @click="getDialog(item, index, true)">添加内容</el-button>
           <el-table :data="item.childList">
             <el-table-column label="电台名称" prop="contentName" align="center" show-overflow-tooltip />
@@ -54,7 +68,7 @@
             </el-table-column>
           </el-table>
         </el-form-item>
-        <el-form-item label="当前状态:">
+        <el-form-item label="当前状态:" prop="status">
           <el-select v-model="item.status" placeholder="请选择当前状态">
             <el-option v-for="item in disabledOptions" :key="item.value" :value="item.value" :label="item.label" />
           </el-select>
@@ -143,12 +157,11 @@ export default {
     return {
       // 遮罩层
       loading: false,
-      // 二级id
-      secondId: this.$route.query.secondId,
-      // 三级id
-      threeId: this.$route.query.threeId,
       // 表单
-      form: [],
+      form: {
+        // 模板列表
+        list: []
+      },
       // 模板
       module: [],
       // 弹窗
@@ -207,7 +220,43 @@ export default {
       // 只读
       isRead: false,
       // 缓存内容图片
-      picList: {}
+      picList: {},
+      // 校验
+      rules: {
+        title: [{
+          required: true, message: '请输入标题', trigger: 'blur'
+        }],
+        description: [{
+          required: true, message: '请输入简介', trigger: 'blur'
+        }],
+        contentName: [{
+          required: true, message: '请选择内容', trigger: 'blur'
+        }],
+        forwardType: [{
+          required: true, message: '请选择跳转方式', trigger: 'change'
+        }],
+        forwardUrl: [{
+          required: true, message: '请输入跳转地址', trigger: 'blur'
+        }],
+        contentId: [{
+          required: true, message: '请选择跳转专区', trigger: 'change'
+        }],
+        isCustom: [{
+          required: true, message: '请选择封面模式', trigger: 'change'
+        }],
+        pic: [{
+          required: true, message: '请上传图片', trigger: 'change'
+        }],
+        sort: [{
+          required: true, message: '请选择排序', trigger: 'change'
+        }],
+        childList: [{
+          required: true, message: '请关联内容', trigger: 'change'
+        }],
+        status: [{
+          required: true, message: '请选择当前状态', trigger: 'change'
+        }]
+      }
     }
   },
   watch: {
@@ -257,6 +306,8 @@ export default {
     getDetail() {
       detail(this.$route.query.threeId).then(res => {
         if (res.code === 0 && res.data.list.length > 0) {
+          this.form = JSON.parse(JSON.stringify(res.data))
+          this.form.list = []
           // 将详情数据遍历
           res.data.list.map((i, index) => {
             let obj = {}
@@ -288,7 +339,7 @@ export default {
               }
               obj.status = i.status
             }
-            this.form.push(obj)
+            this.form.list.push(obj)
           })
         }
       })
@@ -301,7 +352,7 @@ export default {
         obj[i] = i === 'childList' ? [] : i === 'module' ? {} : ''
       })
       obj.status = 0
-      this.form.push(obj)
+      this.form.list.push(obj)
     },
 
     // 爱听专区
@@ -319,7 +370,8 @@ export default {
     },
 
     // 跳转方式
-    forwardTypeChange(item) {
+    forwardTypeChange(item, index) {
+      this.$refs.list[index].clearValidate()
       this.$set(item, 'module', {}),
         [0, 1, 2, 3, 4].includes(item.forwardType) ? [
           this.$set(item, 'contentName', ''),
@@ -377,8 +429,8 @@ export default {
           this.dialogTableData = res.data.records
           this.total = res.data.total
           this.$refs.dialogTableData.clearSelection()
-          if (this.form[this.index].childList && this.form[this.index].childList.length > 0) {
-            this.form[this.index].childList.map(i => {
+          if (this.form.list[this.index].childList && this.form.list[this.index].childList.length > 0) {
+            this.form.list[this.index].childList.map(i => {
               let row = res.data.records.find(j => j.audioId === i.module.contentId)
               // 有相同数据就回显勾选
               if (row) {
@@ -403,7 +455,7 @@ export default {
 
     // 选择
     getSelect(row) {
-      let e = this.form[this.index]
+      let e = this.form.list[this.index]
       e.module = {
         contentId: row.audioId,
         platformId: row.platformId,
@@ -420,14 +472,15 @@ export default {
       }
       this.$message.success('选择成功!')
       this.dialogVisible = false
+      this.$refs.list[this.index].clearValidate('contentName')
     },
 
     // 批量选择
     handleSelectionChange(row) {
       if (row.length > 0) {
         row.map(i => {
-          if (this.form[this.index].childList.findIndex(j => j.module.contentId === i.audioId) === -1) {
-            this.form[this.index].childList.push({
+          if (this.form.list[this.index].childList.findIndex(j => j.module.contentId === i.audioId) === -1) {
+            this.form.list[this.index].childList.push({
               module: {
                 contentId: i.audioId,
                 platformId: i.platformId,
@@ -462,30 +515,46 @@ export default {
       }
     },
 
+    // 删除模块
+    getDelete(index) {
+      this.form.list.splice(index, 1)
+    },
+
+    // 删除关联
+    getRemove(row, index) {
+      let e = this.form.list[index].childList.findIndex(i => i.module.contentId === row.module.contentId)
+      this.form.list[index].childList.splice(e, 1)
+    },
+
     // 提交
     getSubmit() {
-      // 区分2级新增 还是 3级编辑
-      let data = this.secondId ? {
-        secondId: this.secondId,
-        list: this.form
-      } : {
-        threeId: this.threeId,
-        list: this.form
-      }
-      // 删除仅作展示的缓存数据
-      for (const index in this.form) {
-        delete this.form[index].contentId
-        if ('description' in this.form[index]) {
-          this.form[index].module.description = this.form[index].description
-          delete this.form[index].description
+      let isValid = true
+      
+      this.$refs.list.map(i => i.validate((valid) => {
+        if (!valid) {
+          isValid = false
+          return false
         }
-      }
-      submitThree(data).then(res => {
-        if (res.code === 0) {
-          this.$message.success('提交成功!')
-          this.cancel()
+      }))
+
+      if (isValid) {
+        // 区分2级新增 还是 3级编辑
+        this.$route.query.secondId ? this.form.secondId = this.$route.query.secondId : this.form.threeId = this.$route.query.threeId
+        // 删除仅作展示的缓存数据
+        for (const index in this.form.list) {
+          delete this.form.list[index].contentId
+          if ('description' in this.form.list[index]) {
+            this.form.list[index].module.description = this.form.list[index].description
+            delete this.form.list[index].description
+          }
         }
-      })
+        submitThree(this.form).then(res => {
+          if (res.code === 0) {
+            this.$message.success('提交成功!')
+            this.cancel()
+          }
+        })
+      }
     },
 
     // 返回
@@ -493,17 +562,6 @@ export default {
       this.$tab.closeOpenPage("/operation/operationRecommend");
     },
 
-    // 删除模块
-    getDelete(index) {
-      this.form.splice(index, 1)
-    },
-
-    // 删除关联
-    getRemove(row, index) {
-      let e = this.form[index].childList.findIndex(i => i.module.contentId === row.module.contentId)
-      this.form[index].childList.splice(e, 1)
-    },
-
     // 字典翻译
     audioFormatter(row) {
       return this.selectDictLabel(this.audioOptions, row.audioType)

+ 48 - 59
src/views/operation/recommend/index.vue

@@ -1,7 +1,5 @@
 <template>
   <div class="app-container">
-    <el-button type="primary" icon="el-icon-plus" size="mini" @click="dialogVisible = true, title = '新增'"
-      v-hasPermi="['operation:recommend:add']">新增</el-button>
     <!-- 列表 -->
     <el-table :data="tableData" ref="tableData" row-key="id" :default-sort="{ prop: 'sort', order: 'ascending' }"
       :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
@@ -10,44 +8,49 @@
           <el-link v-if="scope.row.hidden" :underline="false" class="el-icon-arrow-right" @click="getList(scope.row)" />
         </template>
       </el-table-column>
-      <el-table-column label="排序" align="center">
+      <el-table-column label="导航名称" align="center" prop="name" show-overflow-tooltip>
         <template slot-scope="scope">
-          <span v-if="scope.row.lv === 2">{{ scope.row.sort }}</span>
+          <span v-if="scope.row.lv === 1">{{ scope.row.name }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="导航名称" align="center" prop="name" show-overflow-tooltip>
+      <el-table-column label="排序" align="center">
         <template slot-scope="scope">
-          <span v-if="scope.row.lv === 1">{{ scope.row.name }}</span>
-          <span v-else>{{ tabOptions.find(i => i.id == scope.row.categoryId).name }}</span>
+          <span v-if="scope.row.lv === 2">{{ scope.row.sort }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="模块名称" align="center" prop="moduleName" show-overflow-tooltip />
       <el-table-column label="模块类型" align="center" prop="moduleTypeId" show-overflow-tooltip :formatter="typeFormatter" />
+      <el-table-column label="模块名称" align="center" prop="moduleName" show-overflow-tooltip />
       <el-table-column label="模块数量" align="center" prop="moduleNum" />
       <el-table-column label="创建时间" align="center" prop="createTime" show-overflow-tooltip />
-      <el-table-column label="生效时间" align="center" show-overflow-tooltip width="380px">
+      <el-table-column label="有效时间" align="center" width="380px">
         <template slot-scope="scope">
           <span v-if="scope.row.lv === 3">
-            <el-date-picker v-if="checkPermi(['operation:recommend:time'])" v-model="scope.row.rsDates"
-              popper-class="popper-class" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
-              value-format="yyyy-MM-dd HH:mm:ss" @change="getChange(scope.row)" :clearable="false" />
-            <span v-else>{{ scope.row.rsDates[0] }} - {{ scope.row.rsDates[1] }}</span>
+            {{ scope.row.rsDates[0] }} - {{ scope.row.rsDates[1] }}
           </span>
         </template>
       </el-table-column>
       <el-table-column label="当前状态" align="center" prop="isProgressStatus" :formatter="statusFormatter" />
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button v-if="scope.row.lv === 2" type="text" @click="getDetail(scope.row)"
-            v-hasPermi="['operation:recommend:add']">新增</el-button>
-          <el-button v-if="scope.row.lv === 1" type="text" @click="getDialog(scope.row.id)">历史记录</el-button>
-          <span v-else style="margin-left: 10px">
-            <el-button type="text" @click="getOpen('查看', scope.row, true)">查看</el-button>
-            <el-button type="text" @click="getOpen('编辑', scope.row)"
+          <span v-if="scope.row.lv === 1">
+            <el-button type="text" @click="getDialog('新增', scope.row)"
+              v-hasPermi="['operation:recommend:add']">新增</el-button>
+            <el-button type="text" @click="getHistoryDialog(scope.row.id)">历史记录</el-button>
+          </span>
+          <span v-else-if="scope.row.lv === 2">
+            <el-button type="text" @click="getDetail(scope.row)" v-hasPermi="['operation:recommend:add']">新增</el-button>
+            <el-button type="text" @click="getDialog('查看', scope.row)">查看</el-button>
+            <el-button type="text" @click="getDialog('编辑', scope.row)"
               v-hasPermi="['operation:recommend:edit']">编辑</el-button>
             <el-button type="delete" @click="getDelete(scope.row)"
               v-hasPermi="['operation:recommend:delete']">删除</el-button>
           </span>
+          <span v-else>
+            <el-button type="text" @click="getDetail(scope.row, true)">查看</el-button>
+            <el-button type="text" @click="getDetail(scope.row)" v-hasPermi="['operation:recommend:edit']">编辑</el-button>
+            <el-button type="delete" @click="getDelete(scope.row)"
+              v-hasPermi="['operation:recommend:delete']">删除</el-button>
+          </span>
         </template>
       </el-table-column>
     </el-table>
@@ -55,14 +58,6 @@
     <!-- 弹窗 -->
     <el-dialog :visible.sync="dialogVisible" :title="title" width="500px" :before-close="cancel">
       <el-form :model="dialogForm" :rules="rules" ref="dialogForm" label-width="100px" :disabled="title === '查看'">
-        <el-form-item label="导航名称:" prop="categoryId">
-          <el-select v-model="dialogForm.categoryId" placeholder="请选择导航" :disabled="title === '编辑'">
-            <el-option v-for="item in tabOptions" :key="item.id" :value="item.id.toString()" :label="item.name" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="模块名称:" prop="moduleName">
-          <el-input v-model="dialogForm.moduleName" placeholder="请输入模块名称" />
-        </el-form-item>
         <el-form-item label="模块类型:" prop="moduleTypeId">
           <el-select v-model="dialogForm.moduleTypeId" placeholder="请选择模块类型" :disabled="title === '编辑'">
             <el-option v-for="item in typeOptions" :key="item.typeId" :value="item.typeId" :label="item.typeName" />
@@ -79,14 +74,14 @@
     </el-dialog>
 
     <!-- 历史记录 -->
-    <el-dialog :visible.sync="dialogVisible_list" title="历史记录" width="1000px">
+    <el-dialog :visible.sync="dialogVisible_list" title="历史记录" width="1200px">
       <el-form inline size="mini">
         <el-form-item label="创建时间:">
           <el-date-picker v-model="dialogForm_list.rsDates" type="datetimerange" start-placeholder="开始日期"
             end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" />
         </el-form-item>
         <el-form-item label="模块名称:">
-          <el-input v-model="dialogForm_list.moduleName" placeholder="请输入模块名称" />
+          <el-input v-model="dialogForm_list.moduleName" placeholder="请输入模块名称" clearable />
         </el-form-item>
         <el-form-item>
           <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
@@ -94,19 +89,19 @@
         </el-form-item>
       </el-form>
       <el-table :data="dialogTableData" v-loading="loading">
-        <el-table-column label="模块名称" prop="moduleName" align="center" />
+        <el-table-column label="模块名称" prop="moduleName" align="center" show-overflow-tooltip />
         <el-table-column label="模块类型" prop="moduleTypeId" align="center" :formatter="typeFormatter" />
         <el-table-column label="模块数量" prop="moduleNum" align="center" />
-        <el-table-column label="有效时间" align="center">
+        <el-table-column label="有效时间" align="center" width="380px">
           <template slot-scope="scope">
             <span>{{ scope.row.rsDates[0] }} - {{ scope.row.rsDates[1] }}</span>
           </template>
         </el-table-column>
         <el-table-column label="当前状态" prop="isProgressStatus" align="center" :formatter="statusFormatter" />
-        <el-table-column label="创建时间" prop="createTime" align="center" />
+        <el-table-column label="创建时间" prop="createTime" align="center" show-overflow-tooltip />
         <el-table-column label="操作" align="center">
           <template slot-scope="scope">
-            <el-button type="text" @click="getOpen('查看', scope.row, true)">查看</el-button>
+            <el-button type="text" @click="getDetail(scope.row, true)">查看</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -118,7 +113,6 @@
 
 <script>
 import { tabList, typeList, list, submit, listDetail, remove, history, timeChange } from '@/api/operation/recommend'
-import { checkPermi } from '@/utils/permission'
 export default {
   data() {
     return {
@@ -243,14 +237,27 @@ export default {
       this.dialogForm = {}
     },
 
-    // 新增模块
+    // 弹窗
+    getDialog(title, row) {
+      this.title = title
+      this.dialogVisible = true
+      this.dialogForm.categoryId = row.id
+      if (row.lv === 2) {
+        listDetail(row.id).then(res => {
+          if (res.code === 0) {
+            this.dialogForm = res.data
+          }
+        })
+      }
+    },
+
+    // 详情页
     getDetail(row, boolean) {
       this.$router.push({
         path: `/operation/recommend/detail`,
         query: row.lv === 2 ? {
           secondId: row.id,
-          moduleTypeId: row.moduleTypeId,
-          boolean: boolean
+          moduleTypeId: row.moduleTypeId
         } : {
           threeId: row.id,
           moduleTypeId: row.moduleTypeId,
@@ -259,24 +266,9 @@ export default {
       })
     },
 
-    // 查看 编辑
-    getOpen(title, row, boolean) {
-      this.title = title
-      if (row.lv === 2) {
-        this.dialogVisible = true
-        listDetail(row.id).then(res => {
-          if (res.code === 0) {
-            this.dialogForm = res.data
-          }
-        })
-      } else {
-        this.getDetail(row, boolean)
-      }
-    },
-
     // 删除
     getDelete(row) {
-      this.$confirm(`是否删除${row.moduleName}?`, '提醒', {
+      this.$confirm(`是否删除?`, '提醒', {
         type: 'warning'
       }).then(() => {
         remove(row.lv, row.id).then(res => {
@@ -289,7 +281,7 @@ export default {
     },
 
     // 历史记录
-    getDialog(id) {
+    getHistoryDialog(id) {
       this.dialogVisible_list = true
       this.loading = true
       this.dialogForm_list.categoryId = id
@@ -342,11 +334,8 @@ export default {
     },
 
     typeFormatter(row) {
-      return row.moduleTypeId ? this.typeOptions.find(i => i.typeId === row.moduleTypeId).typeName : ''
-    },
-
-    // 权限判断
-    checkPermi
+      return row.lv !== 1 ? this.typeOptions.find(i => i.typeId === row.moduleTypeId).typeName : ''
+    }
   }
 }
 </script>

+ 2 - 2
src/views/operation/scene/detail.vue

@@ -35,10 +35,10 @@
           <el-table-column label="操作" align="center">
             <template slot-scope="scope">
               <el-button type="text" @click="getDialog(scope.row.id, '查看')">查看</el-button>
-              <el-button v-if="scope.row.status === 0" type="text" @click="getChange(scope.row, 1, '禁用')">禁用</el-button>
+              <el-button v-if="scope.row.status === 0" type="text" @click="getChange(scope.row, 1, '下架')">下架</el-button>
               <span v-else style="margin-left: 10px">
                 <el-button type="text" @click="getDialog(scope.row.id, '编辑')">编辑</el-button>
-                <el-button type="text" @click="getChange(scope.row, 0, '启用')">启用</el-button>
+                <el-button type="text" @click="getChange(scope.row, 0, '上架')">上架</el-button>
                 <el-button type="delete" @click="getChange(scope.row, 2, '删除')">删除</el-button>
               </span>
             </template>

+ 4 - 4
src/views/operation/scene/index.vue

@@ -14,12 +14,12 @@
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <el-button v-if="scope.row.status === 0" type="text" @click="getChange(scope.row, 1, '禁用')"
-            v-hasPermi="['operation:scene:down']">禁用</el-button>
+          <el-button v-if="scope.row.status === 0" type="text" @click="getChange(scope.row, 1, '下架')"
+            v-hasPermi="['operation:scene:down']">下架</el-button>
           <span v-else style="margin-left: 10px">
             <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['operation:scene:edit']">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 0, '启用')"
-              v-hasPermi="['operation:scene:up']">启用</el-button>
+            <el-button type="text" @click="getChange(scope.row, 0, '上架')"
+              v-hasPermi="['operation:scene:up']">上架</el-button>
             <el-button type="delete" @click="getChange(scope.row, 2, '删除')"
               v-hasPermi="['operation:scene:delete']">删除</el-button>
           </span>

+ 2 - 2
src/views/operation/tag/index.vue

@@ -52,7 +52,7 @@
               编辑
             </el-button>
             <el-button type="text" @click="getChange(scope.row, 0)" v-hasPermi="['operation:tag:up']">
-              启用
+              上架
             </el-button>
             <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['operation:tag:delete']">
               删除
@@ -204,7 +204,7 @@ export default {
 
     // 上下架
     getChange(row, status) {
-      let title = status === 0 ? '启用' : '禁用'
+      let title = status === 0 ? '上架' : '下架'
       this.$confirm(`是否${title}${row.label}?`, '提示', {
         type: 'warning'
       }).then(() => {

+ 219 - 0
src/views/push/dialog/detail.vue

@@ -0,0 +1,219 @@
+<template>
+  <div class='app-container'>
+    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
+      <el-form-item label="弹窗名称:" prop="name">
+        <el-input v-model="form.name" placeholder="请输入弹窗名称" />
+      </el-form-item>
+      <el-form-item label="弹窗图片:" prop="pic">
+        <Upload listType="picture-card" :url="form.pic" @upload="upload($event, 'pic')" :disabled="disabled" />
+      </el-form-item>
+      <el-form-item label="跳转类型:" prop="forwardType">
+        <el-select v-model="form.forwardType" placeholder="请选择跳转类型">
+          <el-option v-for="item in forwardTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.forwardType" label="跳转地址:" prop="forwardUrl">
+        <el-input v-model="form.forwardUrl" placeholder="请输入跳转地址" />
+      </el-form-item>
+      <el-form-item label="弹窗类型:" prop="type">
+        <el-select v-model="form.type" placeholder="请选择弹窗类型" @change="handleChangeType">
+          <el-option v-for="item in dialogTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.type !== 2" label="推送类型:" prop="pushType">
+        <el-select v-model="form.pushType" placeholder="请选择推送类型" @change="handleChangePushType">
+          <el-option v-for="item in pushTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.pushType === 1" label="用户列表:" prop="user">
+        <el-input v-model="form.user" type="textarea" :autosize="{ minRows: 5, maxRows: 10 }"
+          placeholder="请输入用户Id, 一行一个" />
+      </el-form-item>
+      <el-form-item v-if="form.pushType === 2" label="用户列表:" prop="fileUrl">
+        <el-input v-model="form.fileUrl" readonly style="width: calc(100% - 120px); margin-right: 20px" />
+        <Upload class="upload" @upload="upload($event, 'fileUrl')" :disabled="disabled" />
+      </el-form-item>
+      <el-form-item prop="level">
+        <template slot="label">
+          <el-popover placement="top-start" width="200" trigger="hover" content="注:主要是针对同一时间设置多个弹窗的场景(1级-10级)">
+            <el-link :underline="false" icon="el-icon-question" slot="reference" placement="left" />
+          </el-popover>
+          <span>
+            优先级:
+          </span>
+        </template>
+        <el-input-number v-model="form.level" :min="1" :max="10" />
+      </el-form-item>
+      <el-form-item label="生效时间:" prop="listDate">
+        <el-date-picker v-model="form.listDate" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
+          value-format="yyyy-MM-dd HH:mm:ss" />
+      </el-form-item>
+    </el-form>
+    <div class="form-btn">
+      <el-button @click="cancel">取消</el-button>
+      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { submit, detail } from '@/api/push/dialog'
+export default {
+  data() {
+    return {
+      // 表单
+      form: {
+        fileUrl: ''
+      },
+      // 跳转类型
+      forwardTypeOptions: [{
+        value: 5,
+        label: 'H5内链'
+      }, {
+        value: 6,
+        label: 'H5外链'
+      }],
+      // 弹窗类型
+      dialogTypeOptions: [{
+        value: 0,
+        label: '当天弹窗'
+      }, {
+        value: 1,
+        label: '启动弹窗'
+      }, {
+        value: 2,
+        label: '新用户弹窗'
+      }],
+      // 推送类型
+      pushTypeOptions: [{
+        value: 0,
+        label: '全部用户'
+      }, {
+        value: 1,
+        label: '指定用户-输入'
+      }, {
+        value: 2,
+        label: '指定用户-上传'
+      }],
+      // 只读
+      disabled: false,
+      // 校验
+      rules: {
+        name: [{
+          required: true, message: '请输入弹窗名称', trigger: 'blur'
+        }],
+        pic: [{
+          required: true, message: '请上传弹窗图片', trigger: 'change'
+        }],
+        forwardType: [{
+          required: true, message: '请选择跳转类型', trigger: 'change'
+        }],
+        forwardUrl: [{
+          required: true, message: '请输入跳转地址', trigger: 'blur'
+        }],
+        pushType: [{
+          required: true, message: '请选择推送类型', trigger: 'change'
+        }],
+        user: [{
+          required: true, message: '请输入用户Id', trigger: 'blur'
+        }],
+        fileUrl: [{
+          required: true, message: '请上传用户Id文件', trigger: 'blur'
+        }],
+        type: [{
+          required: true, message: '请选择弹窗类型', trigger: 'change'
+        }],
+        level: [{
+          required: true, message: '请选择优先级', trigger: 'change'
+        }],
+        listDate: [{
+          required: true, message: '请选择生效时间', trigger: 'change'
+        }]
+      }
+    }
+  },
+  mounted() {
+    if (this.$route.query.id) {
+      this.getDetail()
+    }
+  },
+  methods: {
+    // 详情
+    getDetail() {
+      this.disabled = Boolean(this.$route.query.boolean)
+      detail(this.$route.query.id).then(res => {
+        if (res.code === 0) {
+          this.form = res.data
+        }
+      })
+    },
+
+    // 弹窗类型
+    handleChangeType(e) {
+      if (e === 2) {
+        delete this.form.pushType
+      }
+    },
+
+    // 推送类型
+    handleChangePushType() {
+      this.$refs.form.clearValidate(['user', 'fileUrl'])
+    },
+
+    // 上传
+    upload(e, key) {
+      this.form[key] = e.file
+    },
+
+    // 取消
+    cancel() {
+      this.$tab.closeOpenPage("/push/pushDialog");
+    },
+
+    // 提交
+    getSubmit() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          // 删掉不需要的传参
+          !this.form.pushType || this.form.pushType === 0 ? [delete this.form.user, delete this.form.fileUrl]
+            : this.form.pushType === 1 ? delete this.form.fileUrl : delete this.form.user
+          submit(this.form).then(res => {
+            if (res.code === 0) {
+              this.$message.success('提交成功!')
+              this.cancel()
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.el-form-item {
+  width: 500px;
+}
+
+::v-deep .el-input-number {
+  .el-input {
+    position: relative;
+
+    &::after {
+      content: '级';
+      position: absolute;
+      right: 46px;
+      line-height: 36px;
+      color: #999;
+    }
+  }
+}
+
+::v-deep .upload {
+  button {
+    margin: 0;
+  }
+}
+</style>

+ 159 - 0
src/views/push/dialog/index.vue

@@ -0,0 +1,159 @@
+<template>
+  <div class='app-container'>
+    <!-- 搜索 -->
+    <el-form inline size="mini">
+      <el-form-item label="弹窗名称:">
+        <el-input v-model="form.name" placeholder="请输入弹窗名称" clearable />
+      </el-form-item>
+      <el-form-item label="弹窗类型:">
+        <el-select v-model="form.type" placeholder="请选择弹窗类型" clearable>
+          <el-option v-for="item in dialogTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="当前状态:">
+        <el-select v-model="form.effectiveState" placeholder="请选择当前状态" clearable>
+          <el-option v-for="item in currentOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="创建时间:">
+        <el-date-picker v-model="form.listDate" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
+          value-format="yyyy-MM-dd HH:mm:ss">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
+        <el-button type="primary" icon="el-icon-plus" plain @click="getDetail()"
+          v-hasPermi="['push:dialog:add']">新增</el-button>
+      </el-form-item>
+    </el-form>
+    <!-- 列表 -->
+    <el-table :data="tableData" v-loading="loading">
+      <el-table-column label="序号" type="index" align="center" />
+      <el-table-column label="弹窗ID" prop="id" align="center" show-overflow-tooltip />
+      <el-table-column label="弹窗名称" prop="name" align="center" show-overflow-tooltip />
+      <el-table-column label="弹窗图片" align="center" width="100px">
+        <template slot-scope="scope">
+          <el-image :src="scope.row.pic" />
+        </template>
+      </el-table-column>
+      <el-table-column label="弹窗类型" prop="type" align="center" :formatter="typeFormatter" />
+      <el-table-column label="优先级" prop="level" align="center" />
+      <el-table-column label="创建时间" prop="createTime" align="center" show-overflow-tooltip />
+      <el-table-column label="生效时间" align="center" width="310px">
+        <template slot-scope="scope">
+          <span>{{ scope.row.startTime }} 至 {{ scope.row.endTime }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前状态" prop="effectiveState" align="center" :formatter="effectiveFormatter" />
+      <el-table-column label="操作" align="center">
+        <template slot-scope="scope">
+          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['push:dialog:edit']">编辑</el-button>
+          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['push:dialog:delete']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
+      @pagination="getList" />
+  </div>
+</template>
+
+<script>
+import { list, remove } from '@/api/push/dialog'
+import { currentMixin } from '@/mixin/index'
+export default {
+  mixins: [currentMixin],
+  data() {
+    return {
+      // 遮罩层
+      loading: false,
+      // 表单
+      form: {
+        pageNum: 1,
+        pageSize: 10
+      },
+      // 列表
+      tableData: [],
+      // 总数据
+      total: 0,
+      // 弹窗类型
+      dialogTypeOptions: [{
+        value: 0,
+        label: '当天弹窗'
+      }, {
+        value: 1,
+        label: '启动弹窗'
+      }, {
+        value: 2,
+        label: '新用户弹窗'
+      }]
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    // 列表
+    getList() {
+      this.loading = true
+      list(this.form).then(res => {
+        if (res.code === 0) {
+          this.tableData = res.data.records
+          this.total = res.data.total
+          this.loading = false
+        }
+      })
+    },
+
+    // 搜索
+    getSearch() {
+      this.form.pageNum = 1
+      this.getList()
+    },
+
+    // 重置
+    getRefresh() {
+      this.form = {
+        pageNum: 1,
+        pageSize: 10
+      }
+      this.getList()
+    },
+
+    // 详情
+    getDetail(id, boolean) {
+      this.$router.push({
+        path: `/push/pushDialog/detail`,
+        query: {
+          id: id,
+          boolean: boolean
+        }
+      })
+    },
+
+    // 删除
+    getDelete(row) {
+      this.$confirm(`是否删除${row.name}?`, '提示', {
+        type: 'warning'
+      }).then(() => {
+        remove(row.id, 2).then(res => {
+          if (res.code === 0) {
+            this.$message.success(`删除成功!`)
+            this.getList()
+          }
+        })
+      }).catch(() => { })
+    },
+
+    // 字典翻译
+    effectiveFormatter(row) {
+      return this.selectDictLabel(this.currentOptions, row.effectiveState)
+    },
+
+    typeFormatter(row) {
+      return this.selectDictLabel(this.dialogTypeOptions, row.type)
+    }
+  }
+}
+</script>

+ 10 - 12
src/views/registration/content/index.vue

@@ -4,14 +4,13 @@
     <el-form inline size="mini">
       <el-form-item label="资源平台:">
         <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="音频类型:">
         <el-select v-model="form.audioType" placeholder="请选择音频类型" clearable>
-          <el-option v-for="item in form.platformId === '' ? audioOptions : audioTypeOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+          <el-option v-for="item in form.platformId === '' ? audioOptions : audioTypeOptions" :key="item.value"
+            :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="内容标题:">
@@ -19,8 +18,7 @@
       </el-form-item>
       <el-form-item label="当前状态:">
         <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in disabledOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+          <el-option v-for="item in disabledOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -55,16 +53,16 @@
             <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['registration:content:edit']"
               style="margin-left: 10px">编辑</el-button>
             <el-button type="text" @click="getChange(scope.row, 0)" v-hasPermi="['registration:content:up']">
-              启用</el-button>
+              上架</el-button>
             <el-button type="delete" @click="getDelete(scope.row)"
               v-hasPermi="['registration:content:delete']">删除</el-button>
           </span>
           <el-button v-else type="delete" @click="getChange(scope.row, 1)"
-            v-hasPermi="['registration:content:down']">禁用</el-button>
+            v-hasPermi="['registration:content:down']">下架</el-button>
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
+    <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
       @pagination="getList" />
   </div>
 </template>
@@ -94,7 +92,7 @@ export default {
   watch: {
     'form.platformId': {
       handler(val) {
-        if(val && this.form.audioType == '') {
+        if (val && this.form.audioType == '') {
           this.form.audioType = ''
           this.getAudioType(val)
           this.getList()
@@ -104,7 +102,7 @@ export default {
     },
     'form.audioType': {
       handler(val) {
-        if(val && this.form.platformId == '') {
+        if (val && this.form.platformId == '') {
           this.form.platformId = ''
           this.getPlatform({
             audioType: val
@@ -162,7 +160,7 @@ export default {
 
     // 上下架
     getChange(row, status) {
-      let title = status === 0 ? '启用' : '禁用'
+      let title = status === 0 ? '上架' : '下架'
       this.$confirm(`是否${title}${row.audioName}?`, '提示', {
         type: 'warning'
       }).then(() => {

+ 3 - 3
src/views/registration/exchange/index.vue

@@ -43,12 +43,12 @@
             <el-button type="text" @click="getDetail(scope.row.id)"
               v-hasPermi="['registration:exchange:edit']" style="margin-left: 10px">编辑</el-button>
             <el-button type="text" @click="getChange(scope.row, 0)" v-hasPermi="['registration:exchange:up']">
-              启用</el-button>
+              上架</el-button>
             <el-button type="delete" @click="getDelete(scope.row)"
               v-hasPermi="['registration:exchange:delete']">删除</el-button>
           </span>
           <el-button v-else type="delete" @click="getChange(scope.row, 1)"
-            v-hasPermi="['registration:exchange:down']">禁用</el-button>
+            v-hasPermi="['registration:exchange:down']">下架</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -132,7 +132,7 @@ export default {
 
     // 上下架
     getChange(row, status) {
-      let title = status === 0 ? '启用' : '禁用'
+      let title = status === 0 ? '上架' : '下架'
       this.$confirm(`是否${title}${row.name}?`, '提示', {
         type: 'warning'
       }).then(() => {

+ 29 - 20
src/views/registration/lottery/detail.vue

@@ -10,17 +10,15 @@
         </el-date-picker>
       </el-form-item>
       <el-form-item label="抽奖积分:" prop="lotteryConsumePoint">
-        <el-input-number v-model="form.lotteryConsumePoint" :min="1" :max="999" :controls="false"
-          placeholder="请输入抽奖积分" />
+        <el-input-number v-model="form.lotteryConsumePoint" :min="1" :max="999" :controls="false" placeholder="请输入抽奖积分" />
         <span class="input-number">积分</span>
       </el-form-item>
       <el-form-item label="每日限抽次数:" prop="lotteryLimitCount">
-        <el-input-number v-model="form.lotteryLimitCount" :min="1" :max="999" :controls="false"
-          placeholder="请输入每日限抽次数" />
+        <el-input-number v-model="form.lotteryLimitCount" :min="1" :max="999" :controls="false" placeholder="请输入每日限抽次数" />
         <span class="input-number">次</span>
       </el-form-item>
       <el-form-item label="活动规则:" prop="rule">
-        <el-input v-model="form.rule" type="textarea" :autosize="{ minRows: 5, maxRows: 10}" :maxlength="150"
+        <el-input v-model="form.rule" type="textarea" :autosize="{ minRows: 5, maxRows: 10 }" :maxlength="150"
           show-word-limit placeholder="请输入活动规则" />
       </el-form-item>
       <el-form-item label="转盘数量:" prop="goodNum">
@@ -35,15 +33,13 @@
           <el-table-column label="奖品类型" align="center">
             <template slot-scope="scope">
               <el-select v-model="scope.row.type" :disabled="form.id ? true : false">
-                <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
-                  :label="item.label" />
+                <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value" :label="item.label" />
               </el-select>
             </template>
           </el-table-column>
           <el-table-column label="奖品" align="center">
             <template slot-scope="scope">
-              <el-input v-if="scope.row.type === 4" v-model="scope.row.rewardPoint"
-                :disabled="form.id ? true : false">
+              <el-input v-if="scope.row.type === 4" v-model="scope.row.rewardPoint" :disabled="form.id ? true : false">
                 <span slot="suffix" style="line-height: 36px">积分</span>
               </el-input>
               <el-input v-else v-model="scope.row.name" :disabled="form.id ? true : false" />
@@ -71,7 +67,7 @@
     </el-form>
     <div class="form-btn">
       <el-button @click="cancel">取消</el-button>
-      <el-button type="primary" @click="getSubmit">确定</el-button>
+      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
     </div>
   </div>
 </template>
@@ -134,26 +130,32 @@ export default {
   },
   watch: {
     date(val) {
-      this.form.startTime = val ? val[0] : ''
-      this.form.endTime = val ? val[1] : ''
+      if (val) {
+        this.form.startTime = val[0]
+        this.form.endTime = val[1]
+      }
     }
   },
   mounted() {
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
+    if (this.$route.query.id || this.$route.query.copyId) {
+      this.getList(this.$route.query.id || this.$route.query.copyId)
       this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
     }
   },
   methods: {
     // 详情
-    getList() {
+    getList(id) {
       detail({
-        id: this.form.id
+        id: id
       }).then(res => {
         if (res.code === 0) {
           this.form = res.data
           this.date = [res.data.startTime, res.data.endTime]
+          if (this.$route.query.copyId) {
+            delete this.form.id
+            this.form.lotteryConfigGoodList.map(i => delete i.useNum)
+            this.form.status = 1
+          }
         }
       })
     },
@@ -177,7 +179,9 @@ export default {
     getChange() {
       this.form.lotteryConfigGoodList = []
       for (let i = 0; i < this.form.goodNum; i++) {
-        this.form.lotteryConfigGoodList.push({})
+        this.form.lotteryConfigGoodList.push({
+          pic: ''
+        })
       }
     },
 
@@ -206,7 +210,7 @@ export default {
               edit(this.form).then(res => {
                 if (res.code === 0) {
                   this.$message.success('编辑成功!')
-                  this.getList()
+                  this.getList(this.$route.query.id)
                 }
               })
             } else {
@@ -236,12 +240,17 @@ export default {
   .el-upload {
     width: 100px;
     height: 100px;
-    line-height: 110px;
+    line-height: 100px;
   }
+
   .upload-image {
     width: 100px;
     height: 100px;
   }
+
+  .el-icon-plus {
+    line-height: 100px;
+  }
 }
 
 .form-btn {

+ 25 - 9
src/views/registration/lottery/index.vue

@@ -2,29 +2,35 @@
   <div class="app-container">
     <el-form size="mini">
       <el-form-item>
-        <el-button type="primary" icon="el-icon-plus" @click="getDetail()" v-hasPermi="['registration:lottery:add']">新增</el-button>
+        <el-button type="primary" icon="el-icon-plus" @click="getDetail()"
+          v-hasPermi="['registration:lottery:add']">新增</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
     <el-table :data="tableData">
       <el-table-column label="序号" type="index" align="center" />
       <el-table-column label="活动名称" prop="name" align="center" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
       <el-table-column label="活动时间" align="center">
         <template slot-scope="scope">
-          {{ scope.row.startTime }}  {{ scope.row.endTime }}
+          {{ scope.row.startTime }} - {{ scope.row.endTime }}
         </template>
       </el-table-column>
       <el-table-column label="活动状态" prop="currentStatus" align="center" :formatter="currentFormatter" />
+      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 1">
-            <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['registration:lottery:edit']" style="margin-left: 10px">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 0)" v-hasPermi="['registration:lottery:up']">启用</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['registration:lottery:delete']">删除</el-button>
+          <span v-if="scope.row.status === 1" style="margin: 0 10px;">
+            <el-button type="text" @click="getDetail(scope.row.id)"
+              v-hasPermi="['registration:lottery:edit']">编辑</el-button>
+            <el-button type="text" @click="getChange(scope.row, 0)"
+              v-hasPermi="['registration:lottery:up']">上架</el-button>
+            <el-button type="delete" @click="getDelete(scope.row)"
+              v-hasPermi="['registration:lottery:delete']">删除</el-button>
           </span>
-          <el-button v-else type="delete" @click="getChange(scope.row, 1)" v-hasPermi="['registration:lottery:down']">禁用</el-button>
+          <el-button v-else type="text" @click="getChange(scope.row, 1)"
+            v-hasPermi="['registration:lottery:down']">下架</el-button>
+          <el-button type="text" @click="getCopy(scope.row.id)">复制</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -80,7 +86,7 @@ export default {
 
     // 上下架
     getChange(row, status) {
-      let title = status === 0 ? '启用' : '禁用'
+      let title = status === 0 ? '上架' : '下架'
       this.$confirm(`是否${title}${row.name}?`, '提示', {
         type: 'warning'
       }).then(() => {
@@ -112,6 +118,16 @@ export default {
       }).catch(() => { })
     },
 
+    // 复制
+    getCopy(id) {
+      this.$router.push({
+        path: `/registration/lotteryConfig/detail`,
+        query: {
+          copyId: id
+        }
+      })
+    },
+
     // 字典翻译
     statusFormatter(row) {
       return this.selectDictLabel(this.disabledOptions, row.status)