addAndEdit.vue 5.7 KB

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