IfnoWrite.vue 5.0 KB

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