addNews.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <template>
  2. <div v-loading="loading">
  3. <el-form
  4. ref="form"
  5. :rules="formRules"
  6. :model="formData"
  7. class="form"
  8. label-width="100px"
  9. >
  10. <el-row :gutter="10">
  11. <el-col :span="12">
  12. <el-form-item label="标题" prop="title">
  13. <el-input
  14. v-model="formData.title"
  15. placeholder="请输入标题"
  16. clearable
  17. ></el-input>
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="12">
  21. <el-form-item label="作者" prop="author">
  22. <el-input
  23. v-model="formData.author"
  24. placeholder="请输入作者"
  25. clearable
  26. ></el-input>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="12">
  30. <el-form-item label="跳转地址" prop="url">
  31. <el-input
  32. v-model="formData.url"
  33. placeholder="请输入跳转地址"
  34. clearable
  35. ></el-input>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="12">
  39. <el-form-item label="发布时间" prop="publishTime">
  40. <!-- value-format="yyyy-MM-dd HH:mm:ss" -->
  41. <el-date-picker
  42. style="width: 100%"
  43. v-model="formData.publishTime"
  44. type="datetime"
  45. placeholder="请选择发布时间"
  46. >
  47. </el-date-picker>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="类别" prop="publishType">
  52. <el-select
  53. style="width: 100%"
  54. v-model="formData.publishType"
  55. placeholder="请选择类别"
  56. clearable
  57. >
  58. <el-option
  59. v-for="dict in dict.type.publish_type"
  60. :key="dict.value"
  61. :label="dict.label"
  62. :value="dict.value"
  63. />
  64. </el-select>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="12">
  68. <el-form-item label="状态" prop="status">
  69. <el-select
  70. style="width: 100%"
  71. v-model="formData.status"
  72. placeholder="请选择状态"
  73. clearable
  74. >
  75. <el-option
  76. v-for="dict in statusOptions"
  77. :key="dict.value"
  78. :label="dict.label"
  79. :value="dict.value"
  80. />
  81. </el-select>
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="24">
  85. <el-form-item label="摘要" prop="digest">
  86. <el-input
  87. v-model="formData.digest"
  88. type="textarea"
  89. :rows="4"
  90. placeholder="请输入摘要"
  91. ></el-input>
  92. </el-form-item>
  93. </el-col>
  94. <el-col :span="12">
  95. <el-form-item label="封面" prop="thumbUrl">
  96. <image-upload :limit="1" v-model="formData.thumbUrl" />
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="12">
  100. <el-form-item label="是否显示封面" prop="showCoverPic">
  101. <!-- @change="handleShow" -->
  102. <el-switch
  103. v-model="formData.showCoverPic"
  104. active-color="#13ce66"
  105. inactive-color="#ff4949"
  106. active-value="1"
  107. inactive-value="0"
  108. >
  109. </el-switch>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="24" style="text-align: right">
  113. <el-button type="primary" @click="handleConfirm">确 定</el-button>
  114. <el-button @click="handleCancel">取 消</el-button>
  115. </el-col>
  116. </el-row>
  117. </el-form>
  118. </div>
  119. </template>
  120. <script>
  121. export default {
  122. dicts: ["publish_type"],
  123. props: {
  124. infoData: {
  125. type: Object,
  126. default: () => {},
  127. },
  128. loading: {
  129. type: Boolean,
  130. default: false,
  131. },
  132. },
  133. data() {
  134. return {
  135. formData: {
  136. title: "",
  137. author: "",
  138. thumbUrl: "",
  139. showCoverPic: "1",
  140. url: "",
  141. publishTime: "",
  142. digest: "",
  143. status: "",
  144. publishType: "",
  145. },
  146. statusOptions: [
  147. { value: "0", label: "有效" },
  148. { value: "1", label: "无效" },
  149. ],
  150. formRules: {
  151. title: [{ required: true, message: "请输入标题", trigger: "blur" }],
  152. author: [{ required: true, message: "请输入作者", trigger: "blur" }],
  153. url: [
  154. { required: true, message: "请输入文章跳转地址", trigger: "blur" },
  155. ],
  156. publishTime: [
  157. { required: true, message: "请选择发布时间", trigger: "change" },
  158. ],
  159. type: [{ required: true, message: "请选择类别", trigger: "change" }],
  160. publishType: [
  161. { required: true, message: "请选择类别", trigger: "change" },
  162. ],
  163. status: [{ required: true, message: "请选择状态", trigger: "change" }],
  164. digest: [{ required: true, message: "请输入摘要", trigger: "blur" }],
  165. },
  166. };
  167. },
  168. watch: {
  169. infoData: {
  170. handler(newVal) {
  171. if (newVal) {
  172. this.formData = {
  173. officialAccountId: newVal.officialAccountId || "",
  174. title: newVal.title || "",
  175. author: newVal.author || "",
  176. thumbUrl: newVal.thumbUrl || "",
  177. showCoverPic: newVal.showCoverPic || "1",
  178. url: newVal.url || "",
  179. publishTime: newVal.publishTime || "",
  180. digest: newVal.digest || "",
  181. status: newVal.status || "",
  182. publishType: newVal.publishType || "",
  183. };
  184. this.$nextTick(() => {
  185. this.$refs.form && this.$refs.form.clearValidate();
  186. });
  187. }
  188. },
  189. immediate: true,
  190. },
  191. },
  192. created() {},
  193. methods: {
  194. // 是否展示封面
  195. // handleShow(val) {
  196. // this.formData.showCoverPic = val;
  197. // },
  198. handleConfirm() {
  199. this.$refs["form"].validate((valid) => {
  200. if (valid) {
  201. this.$emit("save", this.formData);
  202. } else {
  203. this.$message.warning("表单校验不通过,请检查");
  204. }
  205. });
  206. },
  207. handleCancel() {
  208. this.formData = {
  209. title: "",
  210. author: "",
  211. thumbUrl: "",
  212. showCoverPic: "1",
  213. url: "",
  214. publishTime: "",
  215. digest: "",
  216. status: "",
  217. publishType: "",
  218. };
  219. this.$refs.form.clearValidate();
  220. this.$emit("cancel");
  221. },
  222. },
  223. };
  224. </script>