news2.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <div class="index">
  3. <el-row>
  4. <el-col :span="24" class="main animate__animated animate__backInRight" v-loading="loading">
  5. <custom-form v-model="form" :fields="formFields" :rules="rules" @save="toSave" @draftSave="toDraftSave">
  6. <template #logo>
  7. <custom-upload model="logo" :list="form.logo" :limit="1" url="/files/web/cxyy_news/upload" @change="onUpload" listType="picture-card"></custom-upload>
  8. </template>
  9. <template #is_use>
  10. <el-radio v-for="i in isUseList" :key="i.id" :label="i.value">{{ i.label }}</el-radio>
  11. </template>
  12. <template #tags>
  13. <el-select v-model="form.tags" multiple filterable allow-create default-first-option :reserve-keyword="false" placeholder="请选择标签" style="width: 100%">
  14. <el-option v-for="item in tagsList" :key="item.id" :label="item.title" :value="item.title" />
  15. </el-select>
  16. </template>
  17. <template #content>
  18. <WangEditor v-model="form.content" />
  19. </template>
  20. </custom-form>
  21. </el-col>
  22. </el-row>
  23. </div>
  24. </template>
  25. <script setup>
  26. import moment from 'moment'
  27. import { cloneDeep, get } from 'lodash-es'
  28. const $checkRes = inject('$checkRes')
  29. import { UserStore } from '@/store/user'
  30. const userStore = UserStore()
  31. const user = computed(() => userStore.user)
  32. // 接口
  33. import { NewsStore } from '@/store/api/platform/news'
  34. import { DictDataStore } from '@/store/api/system/dictData'
  35. import { TagsStore } from '@/store/api/system/tags'
  36. const store = NewsStore()
  37. const dictDataStore = DictDataStore()
  38. const tagsStore = TagsStore()
  39. // 加载中
  40. const loading = ref(false)
  41. // 字典表
  42. const isUseList = ref([])
  43. const statusList = ref([])
  44. const tagsList = ref([])
  45. const form = ref({ logo: [], type: '2' })
  46. const formFields = ref([
  47. { label: '封面', model: 'logo', custom: true },
  48. { label: '标题', model: 'title' },
  49. { label: '标签', model: 'tags', custom: true },
  50. { label: '发布人', model: 'person', options: { disabled: true } },
  51. { label: '发布时间', model: 'time', type: 'date', options: { disabled: true } },
  52. { label: '浏览量', model: 'number', options: { disabled: true } },
  53. { label: '是否公开', model: 'is_use', type: 'radio' },
  54. { label: '内容', model: 'content', custom: true }
  55. ])
  56. const rules = reactive({ name: [{ required: true, message: '请输入标题', trigger: 'blur' }] })
  57. // 请求
  58. onMounted(async () => {
  59. loading.value = true
  60. await searchOther()
  61. loading.value = false
  62. })
  63. const searchOther = async () => {
  64. let result
  65. // 是否使用
  66. result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
  67. if ($checkRes(result)) isUseList.value = result.data
  68. // 状态
  69. result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
  70. if ($checkRes(result)) statusList.value = result.data
  71. // 标签
  72. result = await tagsStore.query({ is_use: '0' })
  73. if ($checkRes(result)) tagsList.value = result.data
  74. }
  75. const toSave = async () => {
  76. const data = cloneDeep(form.value)
  77. const other = { status: '0', type: '2', user: user.value.id, time: moment().format('YYYY-MM-DD'), person: user.value.nick_name }
  78. let res
  79. if (get(data, 'id')) res = await store.update({ ...data, ...other })
  80. else res = await store.create({ ...data, ...other })
  81. if (res.errcode == 0) {
  82. ElMessage({ message: `发布成功可以上历史发布查看`, type: 'success' })
  83. form.value = {}
  84. }
  85. }
  86. const toDraftSave = async () => {
  87. const data = cloneDeep(form.value)
  88. const other = { status: '-2', type: '2', user: user.value.id, time: moment().format('YYYY-MM-DD'), person: user.value.nick_name }
  89. let res
  90. if (get(data, 'id')) res = await store.update({ ...data, ...other })
  91. else res = await store.create({ ...data, ...other })
  92. if (res.errcode == 0) {
  93. ElMessage({ message: `发布成功可以上历史发布查看`, type: 'success' })
  94. form.value = {}
  95. }
  96. }
  97. // 上传图片
  98. const onUpload = (e) => {
  99. const { model, value } = e
  100. form.value[model] = value
  101. }
  102. </script>
  103. <style scoped lang="scss"></style>