index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <ContentWrap>
  3. <el-tabs v-model="tab" @tab-click="tabClick">
  4. <el-tab-pane v-for="(k, i) in tabList" :key="i" :label="k.label" :name="k.value"/>
  5. </el-tabs>
  6. <div style="display: flex; justify-content: space-between;">
  7. <div style="display: flex; color: orange; align-items: center;">
  8. <Icon :size="20" icon="ep:warning" class="mr-3px" />
  9. 图片规格:
  10. <span class="m-l-10px">{{ tabList[tab].size }}</span>
  11. </div>
  12. <div>
  13. <el-button @click="getList"><Icon icon="ep:refresh" class="mr-5px" /> 刷 新</el-button>
  14. <el-button type="primary" @click="handleAdd"><Icon icon="ep:plus" class="mr-5px" />新 增</el-button>
  15. </div>
  16. </div>
  17. <el-table v-loading="loading" :data="info[tabList[tab].key]" :stripe="true">
  18. <!-- <el-table-column label="排序" align="center" prop="sort" /> -->
  19. <el-table-column label="标题" align="center" prop="title" />
  20. <el-table-column label="图片" align="center" prop="img">
  21. <template #default="scope">
  22. <el-image v-if="scope.row.img" class="h-150px w-200px" :initial-index="info[tabList[tab].key].findIndex(e => e.mark === scope.row.mark)" :src="scope.row.img" lazy preview-teleported :preview-src-list="info[tabList[tab].key].map(e => e.img)" fit="scale-down" />
  23. </template>
  24. </el-table-column>
  25. <el-table-column label="点击跳转链接" align="center" prop="link">
  26. <template #default="scope">
  27. <el-link v-if="scope.row.link" :href="scope.row.link" type="primary" target="_blank">点击查看</el-link>
  28. </template>
  29. </el-table-column>
  30. <el-table-column label="状态" align="center" prop="status">
  31. <template #default="scope">
  32. <span :style="{'color': scope.row.status === '0' ? '#67c23a': '#f56c6c'}">{{ scope.row.status === '0' ? '启用中' : '停用' }}</span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="操作" align="center" fixed="right" min-width="220">
  36. <template #default="scope">
  37. <el-button link type="primary" @click="handleEdit(scope.row.mark)">编辑</el-button>
  38. <el-button link type="danger" @click="handleDelete(scope.row.mark)">删除</el-button>
  39. </template>
  40. </el-table-column>
  41. </el-table>
  42. </ContentWrap>
  43. <!-- 表单弹窗:添加/修改 -->
  44. <WebContentForm ref="formRef" @success="getList" />
  45. </template>
  46. <script setup lang="ts">
  47. import { WebContentApi } from '@/api/menduner/system/web'
  48. import WebContentForm from './WebContentForm.vue'
  49. /** 页面内容 列表 */
  50. defineOptions({ name: 'WebContent' })
  51. const message = useMessage() // 消息弹窗
  52. const { t } = useI18n() // 国际化
  53. const loading = ref(false)
  54. const tab = ref(2)
  55. let info = reactive({})
  56. const tabList = [
  57. { label: 'PC首页左侧广告图', value: 0, key: 'pcLeft', size: '宽869px*高1512px' },
  58. { label: 'PC首页弹窗广告图', value: 1, key: 'pcAdvertisement', size: '宽900px*高530px' },
  59. { label: 'PC首页轮播图', value: 2, key: 'pcHomeCarousel', size: '宽792px*高392px' },
  60. { label: 'PC登录页轮播图', value: 3, key: 'pcLoginCarousel', size: '宽792px*高392px' },
  61. { label: '小程序首页轮播图', value: 4, key: 'appHomeCarousel', size: '宽750px*高350px' },
  62. { label: '小程序首页弹窗广告图', value: 5, key: 'appAdvertisement', size: '宽331px*高442px' },
  63. ]
  64. /** 查询列表 */
  65. const getList = async () => {
  66. loading.value = true
  67. try {
  68. const data = await WebContentApi.getWebContent(1)
  69. info = data
  70. } finally {
  71. loading.value = false
  72. }
  73. }
  74. const tabClick = (val) => {
  75. tab.value = val.paneName
  76. getList()
  77. }
  78. const handleAdd = () => {
  79. formRef.value.open('add', tabList[tab.value].key, tabList[tab.value].label)
  80. }
  81. const formRef = ref()
  82. const handleEdit = (mark: string) => {
  83. formRef.value.open('edit', tabList[tab.value].key, tabList[tab.value].label, mark)
  84. }
  85. /** 删除按钮操作 */
  86. const handleDelete = async (mark: string) => {
  87. const index = info[tabList[tab.value].key].findIndex((item) => item.mark === mark)
  88. if (index === -1) return message.warning('图片不存在')
  89. try {
  90. // 删除的二次确认
  91. await message.delConfirm()
  92. // 发起删除
  93. info[tabList[tab.value].key].splice(index, 1)
  94. await WebContentApi.updateWebContent(info)
  95. message.success(t('common.delSuccess'))
  96. // 刷新列表
  97. await getList()
  98. } catch {}
  99. }
  100. /** 初始化 **/
  101. onMounted(() => {
  102. getList()
  103. })
  104. </script>