index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <template>
  2. <div class='app-container'>
  3. <!-- 搜索 -->
  4. <el-form inline size="mini">
  5. <el-form-item label="活动名称:">
  6. <el-input v-model="form.name" placeholder="请输入活动名称" clearable />
  7. </el-form-item>
  8. <el-form-item label="当前状态:">
  9. <el-select v-model="form.activityState" placeholder="请选择当前状态" clearable>
  10. <el-option v-for="item in currentOptions" :key="item.value" :value="item.value" :label="item.label" />
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item label="上下架状态:">
  14. <el-select v-model="form.status" placeholder="请选择上下架状态" clearable>
  15. <el-option v-for="item in disabledOptions" :key="item.value" :value="item.value" :label="item.label" />
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item>
  19. <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
  20. <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
  21. <el-button type="primary" icon="el-icon-plus" plain @click="getDetail">新增</el-button>
  22. </el-form-item>
  23. </el-form>
  24. <!-- 列表 -->
  25. <el-table :data="tableData" v-loading="loading">
  26. <el-table-column label="序号" align="center" type="index" />
  27. <el-table-column label="活动id" align="center" prop="id" show-overflow-tooltip />
  28. <el-table-column label="活动名称" align="center" prop="name" show-overflow-tooltip />
  29. <el-table-column label="活动图片" align="center" width="100px">
  30. <template slot-scope="scope">
  31. <el-image :src="scope.row.pic" />
  32. </template>
  33. </el-table-column>
  34. <el-table-column label="创建时间" align="center" prop="createTime" />
  35. <el-table-column label="有效时间" align="center" show-overflow-tooltip>
  36. <template slot-scope="scope">
  37. {{ scope.row.timeList.join(' - ') }}
  38. </template>
  39. </el-table-column>
  40. <el-table-column label="当前状态" align="center" :formatter="activityFormatter" width="150px" />
  41. <el-table-column label="上下架状态" align="center" :formatter="statusFormatter" width="150px" />
  42. <el-table-column label="操作" align="center">
  43. <template slot-scope="scope">
  44. <el-button type="text" @click="getDetail(scope.row, true)">查看</el-button>
  45. <el-button type="text" v-if="scope.row.status === 1" @click="getChange(scope.row.id, 0, '上架')">上架</el-button>
  46. <span v-else style="margin: 0 10px">
  47. <el-button type="text" @click="getDetail(scope.row)">编辑</el-button>
  48. <el-button type="text" @click="getChange(scope.row.id, 1, '下架')">下架</el-button>
  49. <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
  50. </span>
  51. <el-button type="text" v-clipboard:copy="scope.row.copyUrl" v-clipboard:success="getCopy">复制链接</el-button>
  52. </template>
  53. </el-table-column>
  54. </el-table>
  55. <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
  56. @pagination="getList" />
  57. </div>
  58. </template>
  59. <script>
  60. import { list, change } from '@/api/operation/activity'
  61. import { currentMixin, disabledMixin } from '@/mixin/index'
  62. export default {
  63. mixins: [currentMixin, disabledMixin],
  64. data() {
  65. return {
  66. // 遮罩层
  67. loading: false,
  68. // 表单
  69. form: {
  70. pageNum: 1,
  71. pageSize: 10
  72. },
  73. // 总数据
  74. total: 0,
  75. // 列表
  76. tableData: []
  77. }
  78. },
  79. mounted() {
  80. this.getList()
  81. },
  82. methods: {
  83. // 列表
  84. getList() {
  85. this.loading = true
  86. list(this.form).then(res => {
  87. if (res.code === 0) {
  88. this.tableData = res.data.records
  89. this.total = res.data.total
  90. this.loading = false
  91. }
  92. })
  93. },
  94. // 搜索
  95. getSearch() {
  96. this.form.pageNum = 1
  97. this.getList()
  98. },
  99. // 重置
  100. getRefresh() {
  101. this.form = {
  102. pageNum: 1,
  103. pageSize: 10
  104. }
  105. this.getList()
  106. },
  107. // 详情
  108. getDetail(row, boolean) {
  109. this.$router.push({
  110. path: `/operation/activity/detail`,
  111. query: {
  112. id: row.id,
  113. boolean: boolean,
  114. activityState: row.activityState
  115. }
  116. })
  117. },
  118. // 上下架
  119. getChange(id, status, title) {
  120. change(id, status).then(res => {
  121. if (res.code === 0) {
  122. this.$message.success(`${title}成功!`)
  123. this.getList()
  124. }
  125. })
  126. },
  127. // 删除
  128. getDelete(row) {
  129. this.$confirm(`是否删除${row.name}?`, '提示', {
  130. type: 'warning'
  131. }).then(() => {
  132. change(row.id, 2).then(res => {
  133. if (res.code === 0) {
  134. this.$message.success('删除成功!')
  135. this.getList()
  136. }
  137. })
  138. })
  139. },
  140. // 复制链接
  141. getCopy() {
  142. this.$message.success('复制成功!')
  143. },
  144. // 字典翻译
  145. activityFormatter(row) {
  146. return this.selectDictLabel(this.currentOptions, row.activityState)
  147. },
  148. statusFormatter(row) {
  149. return this.selectDictLabel(this.disabledOptions, row.status)
  150. }
  151. }
  152. }
  153. </script>