online-exam-form.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <template>
  2. <el-form
  3. v-loading="loading"
  4. ref="ruleForm"
  5. :model="ruleForm"
  6. status-icon
  7. :rules="rulesThis"
  8. :label-width="labelWidth || '100px'"
  9. class="demo-ruleForm"
  10. :size="size || 'medium'"
  11. >
  12. <el-row>
  13. <el-col :span="12"
  14. ><el-form-item label="审核状态" prop="state">
  15. <el-radio-group
  16. v-model="ruleForm.state"
  17. placeholder="请选择审核状态"
  18. style="width: 100%"
  19. :size="size || 'medium'"
  20. @change="stateChange"
  21. >
  22. <el-radio
  23. v-for="item in stateList"
  24. :key="item.value"
  25. :label="item.value"
  26. >{{ item.label }}</el-radio
  27. >
  28. </el-radio-group>
  29. </el-form-item>
  30. <el-form-item label="上线时间" prop="online_time">
  31. <el-date-picker
  32. v-model="ruleForm.online_time"
  33. type="datetime"
  34. value-format="yyyy-MM-dd hh:mm:ss"
  35. style="width: 100%"
  36. :picker-options="pickerOptions"
  37. placeholder="上线时间"
  38. >
  39. </el-date-picker>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="12">
  43. <el-form-item
  44. label="审核备注"
  45. v-if="ruleForm.state === '0'"
  46. prop="remark"
  47. >
  48. <el-input
  49. type="textarea"
  50. placeholder="请输入审核备注"
  51. v-model="ruleForm.remark"
  52. :disabled="disabled"
  53. maxlength="250"
  54. :autosize="{ minRows: 3, maxRows: 3 }"
  55. show-word-limit
  56. />
  57. </el-form-item>
  58. <el-form-item class="fr">
  59. <el-button
  60. v-if="!isDetail"
  61. :size="'mini'"
  62. type="primary"
  63. @click="submitForm"
  64. >保 存
  65. </el-button>
  66. </el-form-item>
  67. </el-col>
  68. </el-row>
  69. </el-form>
  70. </template>
  71. <script>
  72. export default {
  73. name: "exam-form",
  74. props: ["size", "statusList", "disabled", "isMust", "labelWidth"],
  75. /**
  76. * 属性集合
  77. * @param {String} size : 组件大小 非必填
  78. * @param {Array} statusList : 驳回至备选项 必填
  79. * @param {Boolean} disabled : 是否禁用 必填
  80. * @param {Boolean} isMust : 是否需要展示驳回节点 必填
  81. *
  82. *
  83. */
  84. /**
  85. * 事件集合
  86. * @searchChange : 选中值变化调用 抛出选中数据
  87. */
  88. data() {
  89. return {
  90. loading: false,
  91. stateList: [
  92. {
  93. value: "1",
  94. label: "通过",
  95. },
  96. {
  97. value: "0",
  98. label: "驳回",
  99. },
  100. ],
  101. showModelThis: this.showModel,
  102. pickerOptions: {
  103. disabledDate(time) {
  104. return time.getTime() < Date.now() - 60 * 60 * 24 * 1000;
  105. },
  106. },
  107. ruleForm: {
  108. state: "1", // 通过or驳回
  109. rebut: "", //驳回至
  110. online_time: "",
  111. remark: "",
  112. },
  113. rulesThis: this.rules,
  114. rules: {
  115. state: [
  116. {
  117. required: true,
  118. message: "请选择审核状态",
  119. trigger: "change",
  120. },
  121. ],
  122. online_time: [
  123. {
  124. required: true,
  125. message: "请选择上线时间",
  126. trigger: "change",
  127. },
  128. ],
  129. rebut: [
  130. {
  131. required: true,
  132. message: "请选择驳回节点",
  133. trigger: "change",
  134. },
  135. ],
  136. remark: [
  137. { required: true, message: "请输入审核备注", trigger: "blur" },
  138. {
  139. min: 1,
  140. max: 250,
  141. message: "长度在 1 到 250 个字符",
  142. trigger: "blur",
  143. },
  144. ],
  145. },
  146. };
  147. },
  148. watch: {
  149. isDetail: function (val, old) {
  150. if (this.isDetail !== val) {
  151. this.options = [];
  152. this.selectLoading = false;
  153. }
  154. },
  155. },
  156. mounted() {
  157. this.initForm();
  158. },
  159. methods: {
  160. async initForm() {
  161. this.loading = true;
  162. this.rulesThis = this.rules;
  163. await this.resetForm();
  164. this.stateChange();
  165. this.loading = false;
  166. },
  167. stateChange() {
  168. if (this.ruleForm.state === "1") {
  169. this.rulesThis.rebut[0].required = false;
  170. this.rulesThis.remark[0].required = false;
  171. } else {
  172. this.rulesThis.rebut[0].required = true;
  173. this.rulesThis.remark[0].required = true;
  174. }
  175. },
  176. async resetForm() {
  177. // 重置
  178. await this.$nextTick(() => {
  179. if (this.$refs.ruleForm) {
  180. this.$refs.ruleForm.resetFields();
  181. this.$refs.ruleForm.clearValidate();
  182. this.ruleForm = {
  183. state: "1", // 通过or驳回
  184. rebut: "", //驳回至
  185. online_time: "",
  186. remark: "",
  187. };
  188. }
  189. });
  190. },
  191. async submitForm() {
  192. await this.$refs.ruleForm.validate(async (valid) => {
  193. if (valid) {
  194. this.$emit("searchChange", this.ruleForm);
  195. } else {
  196. console.log("error submit!!");
  197. return false;
  198. }
  199. });
  200. },
  201. },
  202. };
  203. </script>
  204. <style>
  205. </style>