InfoWrite.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <template>
  2. <div>
  3. <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
  4. <el-row>
  5. <el-col :span="24">
  6. <el-form-item prop="title" label="标题">
  7. <el-input v-model="form.title" placeholder="请输入标题" />
  8. </el-form-item>
  9. </el-col>
  10. <el-col :span="12">
  11. <el-form-item prop="author" label="作者">
  12. <el-input v-model="form.author" placeholder="请输入作者" />
  13. </el-form-item>
  14. </el-col>
  15. <el-col :span="12">
  16. <el-form-item prop="display_time" label="创建时间">
  17. <el-date-picker
  18. v-model="form.display_time"
  19. type="datetime"
  20. placeholder="请选择创建时间"
  21. style="width: 100%"
  22. />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="12">
  26. <el-form-item prop="importance" label="重要性">
  27. <el-select v-model="form.importance" placeholder="请选择重要性" style="width: 100%">
  28. <el-option label="重要" value="3" />
  29. <el-option label="良好" value="2" />
  30. <el-option label="一般" value="1" />
  31. </el-select>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="12">
  35. <el-form-item prop="pageviews" label="阅读数">
  36. <el-input-number
  37. v-model="form.pageviews"
  38. :min="0"
  39. :max="99999999"
  40. style="width: 100%"
  41. />
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="24">
  45. <el-form-item prop="content" label="内容">
  46. <editor ref="editorRef" :value="form.content" />
  47. </el-form-item>
  48. </el-col>
  49. </el-row>
  50. </el-form>
  51. <div class="dialong__button--wrap">
  52. <el-button @click="close">取消</el-button>
  53. <el-button :loading="subLoading" type="primary" @click="setListData">保存</el-button>
  54. </div>
  55. </div>
  56. </template>
  57. <script setup lang="ts" name="IfnoWrite">
  58. import { PropType, reactive, ref } from 'vue'
  59. import { setExampApi, getExampDetApi } from '../api'
  60. import Editor from '_c/Editor/index.vue'
  61. import { Message } from '_c/Message'
  62. const requiredRule: {
  63. required: boolean
  64. message: string
  65. } = {
  66. required: true,
  67. message: '该项为必填项'
  68. }
  69. const props = defineProps({
  70. info: {
  71. type: Object as PropType<Nullable<IObj>>,
  72. default: () => null
  73. }
  74. })
  75. const emit = defineEmits(['success', 'close'])
  76. const editorRef = ref<Nullable<HTMLElement>>(null)
  77. const formRef = ref<Nullable<HTMLElement>>(null)
  78. const subLoading = ref<boolean>(false)
  79. const form = reactive<IObj>({
  80. id: '', // id
  81. author: '', // 作者
  82. title: '', // 标题
  83. content: '', // 内容
  84. importance: '', // 重要性
  85. display_time: '', // 创建时间
  86. pageviews: 0 // 阅读数
  87. })
  88. const rules = reactive<IObj>({
  89. title: [requiredRule],
  90. author: [requiredRule],
  91. content: [requiredRule],
  92. importance: [requiredRule],
  93. display_time: [requiredRule],
  94. pageviews: [requiredRule]
  95. })
  96. async function getDet() {
  97. if (props.info) {
  98. const id = props.info.id
  99. try {
  100. const res: any = await getExampDetApi({
  101. params: {
  102. id: id
  103. }
  104. })
  105. if (res) {
  106. for (const key in form) {
  107. if (key === 'importance') {
  108. form[key] = (res.data[key] as number).toString()
  109. } else {
  110. form[key] = res.data[key]
  111. }
  112. }
  113. }
  114. } catch (e) {
  115. console.log(e)
  116. }
  117. }
  118. }
  119. // 新增或者编辑
  120. function setListData() {
  121. try {
  122. subLoading.value = true
  123. form.content = (editorRef.value as any).getHtml()
  124. ;(formRef.value as any).validate(async (valid) => {
  125. if (valid) {
  126. const res = await setExampApi({
  127. data: form
  128. })
  129. if (res) {
  130. Message.success(form.id ? '编辑成功' : '新增成功')
  131. emit('success', form.id ? 'edit' : 'add')
  132. }
  133. } else {
  134. console.log('error submit!!')
  135. return false
  136. }
  137. })
  138. } catch (err) {
  139. console.log(err)
  140. } finally {
  141. subLoading.value = false
  142. }
  143. }
  144. function close() {
  145. emit('close')
  146. }
  147. getDet()
  148. </script>