addAndEdit.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <div v-loading="loading">
  3. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  4. <el-form-item label="标题" prop="title">
  5. <el-input
  6. v-model="form.title"
  7. placeholder="请输入标题"
  8. :disabled="[3, 4].includes(dlgType)"
  9. />
  10. </el-form-item>
  11. <el-form-item label="分类" prop="categoryId">
  12. <SelectRemote
  13. :disabled="[3, 4].includes(dlgType)"
  14. url="/info/category/list"
  15. field="name"
  16. v-model="form.categoryId"
  17. :selectObj="selectObj"
  18. :searchParams="searchParams"
  19. />
  20. </el-form-item>
  21. <el-form-item label="来源" prop="source" v-if="dlgType === 3">
  22. <el-select
  23. disabled
  24. v-model="form.source"
  25. placeholder="请选择来源"
  26. style="width: 100%"
  27. >
  28. <el-option
  29. v-for="dict in sourceOption"
  30. :key="dict.value"
  31. :label="dict.label"
  32. :value="dict.value"
  33. ></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="封面图" prop="banner">
  37. <image-upload
  38. :limit="1"
  39. v-model="form.banner"
  40. :disabled="[3, 4].includes(dlgType)"
  41. />
  42. </el-form-item>
  43. <el-form-item label="正文内容" prop="content">
  44. <el-input
  45. type="textarea"
  46. :rows="4"
  47. v-model="form.content"
  48. placeholder="请输入正文内容"
  49. :disabled="[3, 4].includes(dlgType)"
  50. />
  51. </el-form-item>
  52. <template v-if="dlgType === 3">
  53. <el-form-item label="状态" prop="checkStatus">
  54. <el-select
  55. v-model="form.checkStatus"
  56. placeholder="请选择状态"
  57. style="width: 100%"
  58. disabled
  59. >
  60. <el-option
  61. v-for="dict in dict.type.check_status"
  62. :key="dict.value"
  63. :label="dict.label"
  64. :value="dict.value"
  65. ></el-option>
  66. </el-select>
  67. </el-form-item>
  68. </template>
  69. <template v-if="[3, 4].includes(dlgType)">
  70. <el-form-item label="审核结果" prop="checkResult">
  71. <el-select
  72. v-model="form.checkResult"
  73. placeholder="请选择审核结果"
  74. style="width: 100%"
  75. :disabled="dlgType === 3"
  76. >
  77. <el-option
  78. v-for="dict in dict.type.check_result"
  79. :key="dict.value"
  80. :label="dict.label"
  81. :value="dict.value"
  82. ></el-option>
  83. </el-select>
  84. </el-form-item>
  85. <el-form-item label="备注" prop="remark">
  86. <el-input
  87. type="textarea"
  88. :rows="4"
  89. v-model="form.remark"
  90. placeholder="审核不通过时必填"
  91. :disabled="dlgType === 3"
  92. />
  93. </el-form-item>
  94. </template>
  95. </el-form>
  96. <div style="text-align: right" v-if="dlgType !== 3">
  97. <el-button type="primary" @click="handleConfirm">确 定</el-button>
  98. <el-button @click="handleCancel">取 消</el-button>
  99. </div>
  100. <div style="text-align: right" v-else>
  101. <el-button @click="handleCancel">关 闭</el-button>
  102. </div>
  103. </div>
  104. </template>
  105. <script>
  106. import SelectRemote from "@/components/SelectRemote";
  107. export default {
  108. components: { SelectRemote },
  109. dicts: ["check_result", "check_status"],
  110. props: {
  111. data: {
  112. type: Object,
  113. default: () => {},
  114. },
  115. loading: {
  116. type: Boolean,
  117. default: false,
  118. },
  119. dlgType: {
  120. // 弹窗类型 1 - 新增 2 - 修改 3 - 查看 4 - 审核
  121. type: Number,
  122. default: 1,
  123. },
  124. },
  125. data() {
  126. return {
  127. // 选中的资讯标题
  128. selectObj: {},
  129. // 远程搜索框的查询条件
  130. searchParams: {
  131. status: "0",
  132. },
  133. // 状态组
  134. sourceOption: [
  135. { value: "0", label: "智能生成" },
  136. { value: "1", label: "手工录入" },
  137. ],
  138. form: {
  139. title: "",
  140. categoryId: "",
  141. source: "1", // 默认手工录入
  142. banner: "",
  143. content: "",
  144. checkStatus: "1", // 审核状态,默认草稿
  145. checkResult: "",
  146. remark: "",
  147. },
  148. rules: {
  149. title: [{ required: true, trigger: "blur", message: "请输入标题" }],
  150. categoryId: [
  151. { required: true, trigger: "change", message: "请选择分类" },
  152. ],
  153. banner: [{ required: true, trigger: "blur", message: "请上传封面图" }],
  154. content: [
  155. { required: true, trigger: "blur", message: "请输入正文内容" },
  156. ],
  157. },
  158. };
  159. },
  160. watch: {
  161. data: {
  162. handler(newVal) {
  163. if (newVal) {
  164. this.form = {
  165. id: newVal.id || "",
  166. title: newVal.title || "",
  167. categoryId: newVal.categoryId || "",
  168. source: newVal.source || "1",
  169. banner: newVal.banner || "",
  170. content: newVal.content || "",
  171. checkStatus: newVal.checkStatus || "1",
  172. checkResult: newVal.checkResult || "",
  173. remark: newVal.remark || "",
  174. };
  175. this.selectObj = {
  176. id: newVal.categoryId || "",
  177. selectLabel: newVal.categoryName || "",
  178. };
  179. this.$nextTick(() => {
  180. this.$refs.form && this.$refs.form.clearValidate();
  181. });
  182. }
  183. },
  184. },
  185. },
  186. methods: {
  187. // 确定
  188. handleConfirm() {
  189. this.$refs.form.validate((valid) => {
  190. if (valid) {
  191. if (this.form.checkResult == "1" && !this.form.remark)
  192. return this.$modal.msgError("请填写审核不通过的原因");
  193. if (this.dlgType === 4) this.form.checkStatus = "3";
  194. this.$emit("confirm", this.form);
  195. }
  196. });
  197. },
  198. // 取消
  199. handleCancel() {
  200. this.form = {
  201. title: "",
  202. categoryId: "",
  203. source: "1", // 默认手工录入
  204. banner: "",
  205. content: "",
  206. checkStatus: "1", // 审核状态,默认草稿
  207. checkResult: "",
  208. remark: "",
  209. };
  210. this.$nextTick(() => {
  211. this.$refs.form && this.$refs.form.clearValidate();
  212. });
  213. this.$emit("cancel");
  214. },
  215. },
  216. };
  217. </script>
  218. <style lang="scss" scoped></style>