DownloadSetDialog.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <el-dialog
  3. class="download-set-dialog"
  4. :visible.sync="modalIsShow"
  5. title="批量下载"
  6. top="10vh"
  7. width="650px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @open="visibleChange"
  12. >
  13. <el-form
  14. ref="modalFormComp"
  15. :model="modalForm"
  16. :rules="rules"
  17. :key="modalForm.id"
  18. label-width="120px"
  19. >
  20. <el-form-item prop="paperFileDownloadContentType" label="下载文件:">
  21. <el-select
  22. v-model="modalForm.paperFileDownloadContentType"
  23. placeholder="下载文件"
  24. clearable
  25. @change="paperFileDownloadContentTypeChange"
  26. >
  27. <el-option
  28. v-for="(val, key) in FILE_TYPE"
  29. :key="key"
  30. :value="key"
  31. :label="val"
  32. ></el-option>
  33. </el-select>
  34. </el-form-item>
  35. <el-form-item
  36. v-if="modalForm.paperFileDownloadContentType !== 'ONLY_CARD'"
  37. prop="paperFileDownloadExposureStatus"
  38. label="试卷状态:"
  39. >
  40. <el-select
  41. v-model="modalForm.paperFileDownloadExposureStatus"
  42. placeholder="试卷状态"
  43. clearable
  44. >
  45. <el-option
  46. v-for="(val, key) in PAPER_STATUS"
  47. :key="key"
  48. :value="key"
  49. :label="val"
  50. ></el-option>
  51. </el-select>
  52. </el-form-item>
  53. <el-form-item prop="nameRule" label="文件命名规则:">
  54. <el-checkbox-group v-model="nameRule" @change="nameRuleChange">
  55. <el-checkbox
  56. v-for="rule in NAME_RULE"
  57. :key="rule.code"
  58. :label="rule.code"
  59. :disabled="rule.disabled"
  60. >{{ rule.name }}</el-checkbox
  61. >
  62. </el-checkbox-group>
  63. </el-form-item>
  64. <el-form-item label="命名示例:">
  65. <span>{{ nameRuleContent }}</span>
  66. </el-form-item>
  67. </el-form>
  68. <div slot="footer">
  69. <el-button type="primary" :disabled="isSubmit" @click="submit"
  70. >确认</el-button
  71. >
  72. <el-button @click="cancel">取消</el-button>
  73. </div>
  74. </el-dialog>
  75. </template>
  76. <script>
  77. import { dataBatchDownload } from "../api";
  78. const initModalForm = {
  79. paperFileDownloadContentType: "",
  80. paperFileDownloadExposureStatus: null,
  81. namedByCourseInfo: false,
  82. namedByPaperNumber: false,
  83. namedByOriginalFile: false,
  84. };
  85. export default {
  86. name: "download-set-dialog",
  87. props: {
  88. downloadSet: {
  89. type: Object,
  90. default() {
  91. return {};
  92. },
  93. },
  94. },
  95. data() {
  96. return {
  97. modalIsShow: false,
  98. isSubmit: false,
  99. nameRule: [],
  100. modalForm: { ...initModalForm },
  101. rules: {
  102. paperFileDownloadContentType: [
  103. {
  104. required: true,
  105. message: "请选择下载文件",
  106. trigger: "change",
  107. },
  108. ],
  109. paperFileDownloadExposureStatus: [
  110. {
  111. required: true,
  112. message: "请选择试卷状态",
  113. trigger: "change",
  114. },
  115. ],
  116. nameRule: [
  117. {
  118. required: true,
  119. validator: (rule, value, callback) => {
  120. if (!this.nameRule || !this.nameRule.length) {
  121. return callback(new Error("请设置文件命名规则"));
  122. }
  123. callback();
  124. },
  125. trigger: "change",
  126. },
  127. ],
  128. },
  129. PAPER_STATUS: {
  130. EXPOSED_PAPER: "已曝光的试卷",
  131. UNEXPOSED_PAPER: "未曝光的试卷",
  132. ALL_PAPER: "全部试卷",
  133. },
  134. FILE_TYPE: {
  135. ONLY_PAPER: "试卷",
  136. ONLY_CARD: "题卡",
  137. PAPER_AND_CARD: "试卷和题卡",
  138. },
  139. NAME_RULE: [
  140. {
  141. code: "namedByCourseInfo",
  142. name: "课程名称-课程代码",
  143. disabled: false,
  144. },
  145. {
  146. code: "namedByPaperNumber",
  147. name: "试卷编号",
  148. disabled: false,
  149. },
  150. {
  151. code: "namedByOriginalFile",
  152. name: "原文件名",
  153. disabled: false,
  154. },
  155. ],
  156. };
  157. },
  158. computed: {
  159. nameRuleContent() {
  160. const names = this.NAME_RULE.filter((item) =>
  161. this.nameRule.includes(item.code)
  162. )
  163. .map((item) => item.name)
  164. .join("-");
  165. return names ? `${names}.pdf` : "";
  166. },
  167. },
  168. methods: {
  169. visibleChange() {
  170. this.modalForm = { ...initModalForm };
  171. this.nameRule = [];
  172. },
  173. cancel() {
  174. this.modalIsShow = false;
  175. },
  176. open() {
  177. this.modalIsShow = true;
  178. },
  179. nameRuleChange() {
  180. this.NAME_RULE.forEach((item) => {
  181. this.modalForm[item.code] = this.nameRule.includes(item.code);
  182. });
  183. },
  184. paperFileDownloadContentTypeChange(val) {
  185. if (val === "ONLY_CARD") {
  186. const originalItem = this.NAME_RULE.find(
  187. (item) => item.code === "namedByOriginalFile"
  188. );
  189. originalItem.disabled = true;
  190. this.nameRule = this.nameRule.filter(
  191. (item) => item !== "namedByOriginalFile"
  192. );
  193. this.modalForm.paperFileDownloadExposureStatus = null;
  194. } else {
  195. this.NAME_RULE.forEach((item) => (item.disabled = false));
  196. }
  197. },
  198. async submit() {
  199. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  200. if (!valid) return;
  201. if (this.isSubmit) return;
  202. this.isSubmit = true;
  203. let datas = { ...this.modalForm, ...this.downloadSet };
  204. const data = await dataBatchDownload(datas).catch(() => {
  205. this.isSubmit = false;
  206. this.$message.error("下载任务提交失败,请重新尝试!");
  207. });
  208. if (!data) return;
  209. this.isSubmit = false;
  210. this.$message.success("下载任务已提交!");
  211. this.cancel();
  212. },
  213. },
  214. };
  215. </script>