{"version":3,"sources":["webpack:///./src/utils/upload.ts","webpack:///./src/api/exam/room.ts","webpack:///./src/components/select/ExamSelect.vue?5a96","webpack:///./src/components/select/ExamSelect.vue","webpack:///./src/components/select/ExamSelect.vue?a75a","webpack:///./src/components/select/ExamSelect.vue?6e08","webpack:///./src/api/exam/examinees.ts","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./src/api/exam/index.ts","webpack:///./src/api/exam/invigilator.ts","webpack:///./src/service/exam/index.ts","webpack:///./src/api/exam/upload.ts"],"names":["createProcessHandler","option","e","onProgress","percent","Math","round","loaded","total","get","examId","params","data","post","id","file","onUploadProgress","render","_vm","this","_h","$createElement","_c","_self","attrs","exam","loading","on","handleSelectChange","_l","item","key","randKey","name","staticRenderFns","exams","re","$emit","find","a","type","String","component","curryGet","patch","$","$find","addToUnscopables","FIND","SKIPS_HOLES","Array","target","proto","forced","callbackfn","arguments","length","undefined","handle","bak","examid","postDoc","QUERY_EXAM_ID","Intl","DateTimeFormat","year","month","day","hour","minute","second","hour12","validForm","el","validate","createExam","time","subjects","extraParam","map","router","push","path","query","bakExam","upload","count","uploadRoom","uploadExaminee","uploadInvigilator","uploadInvigilatorDoc","fetchExamList","current","pageSize","order","sort","rows","formated","Date","toDateString","validExamByRoute","currentRoute","includes","validExamAsync","result","validExam","Error","validNotifyExam","start","url","form","FormData","append","headers"],"mappings":"kKAEaA,EAAuB,SAACC,GAAD,OAAgC,SAClEC,GAEAD,EAAOE,WAAP,iCACKD,GADL,IAEEE,QAASC,KAAKC,MAAkB,IAAXJ,EAAEK,OAAgBL,EAAEM,a,wKCDtC,SAAeC,EAAtB,oC,8DAAO,WAAmBC,EAAgBC,GAAnC,yGACkB,OAAMF,IAAN,eAAkBC,EAAlB,SAAiC,CACtDC,OAAQ,eAAeA,KAFpB,uBACGC,EADH,EACGA,KADH,kBAIEA,GAJF,2C,wBAOA,SAAeC,EAAtB,sC,8DAAO,WACLC,EACAC,EACAC,GAHK,iGAKQ,eAAO,QAAD,OAASF,EAAT,aAAwBC,EAAMC,GAL5C,mF,8DCbP,IAAIC,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,YAAY,CAACE,MAAM,CAAC,MAAQN,EAAIO,KAAK,QAAUP,EAAIQ,QAAQ,YAAc,UAAU,WAAa,GAAG,UAAY,IAAIC,GAAG,CAAC,OAAST,EAAIU,qBAAqBV,EAAIW,GAAIX,EAAS,OAAE,SAASY,GAAM,OAAOR,EAAG,YAAY,CAACS,IAAID,EAAKhB,GAAKI,EAAIc,QAAQR,MAAM,CAAC,MAAQM,EAAKG,KAAK,MAAQH,EAAKhB,SAAQ,IACzXoB,EAAkB,G,kICwBD,EAArB,wDADA,iD,0BAGE,EAAAC,MAAQ,GACR,EAAAH,QAAU,iBACV,EAAAN,SAAU,EALZ,EACA,uGAME,oHACqB,iBADrB,cACEP,KAAKgB,MADP,gBAEmB,eAAiBhB,KAAKgB,OAFzC,OAEQC,EAFR,OAGMA,GAAIjB,KAAKS,mBAAmBQ,GAChCjB,KAAKO,SAAU,EAJjB,gDANF,yFAaE,SAAmBZ,GACjBK,KAAKkB,MAAM,cAAevB,GAE1B,IAAMW,EAAON,KAAKgB,MAAMG,MAAK,SAAAC,GAAC,OAAIA,EAAEzB,KAAOA,KACvCW,GAAMN,KAAKkB,MAAM,SAAUZ,OAjBnC,GAAwC,QACd,QAAvB,eAAK,CAAEe,KAAMC,U,2BADK,EAAU,QAD9B,QACoB,WCzBkY,I,YCOnZC,EAAY,eACd,EACAzB,EACAiB,GACA,EACA,KACA,KACA,MAIa,OAAAQ,E,qPCZR,SAAe7B,EAAtB,sC,8DAAO,WACLC,EACAC,EACAC,GAHK,iGAKQ,eAAO,SAAD,OAAUF,EAAV,kBAA8BC,EAAMC,GALlD,mF,wBAQA,IAAM2B,EAAW,SAACjC,GAAD,gEAAoB,WAAOC,GAAP,yGACnB,OAAMF,IAAN,gBAAmBC,EAAnB,cAAuC,CAC5DC,OAAQ,eAAeA,KAFiB,uBAClCC,EADkC,EAClCA,KADkC,kBAInCA,GAJmC,2CAApB,uDAOXH,EAAG,yDAAG,WAAOC,EAAgBC,GAAvB,0GACjBgC,EAASjC,EAATiC,CAAiBhC,IADA,2CAAH,wDAGHiC,EAAK,yDAAG,WAAOlC,GAAP,uGACI,OAAMkC,MAAN,eAAoBlC,EAApB,eADJ,kBACXE,KADW,2CAAH,uD,oCCvBlB,IAAIiC,EAAI,EAAQ,QACZC,EAAQ,EAAQ,QAAgCR,KAChDS,EAAmB,EAAQ,QAE3BC,EAAO,OACPC,GAAc,EAGdD,IAAQ,IAAIE,MAAM,GAAGF,IAAM,WAAcC,GAAc,KAI3DJ,EAAE,CAAEM,OAAQ,QAASC,OAAO,EAAMC,OAAQJ,GAAe,CACvDX,KAAM,SAAcgB,GAClB,OAAOR,EAAM3B,KAAMmC,EAAYC,UAAUC,OAAS,EAAID,UAAU,QAAKE,MAKzEV,EAAiBC,I,8iBCHV,SAAevC,EAAtB,kC,8DAAO,WAAmBE,GAAnB,kGACC+C,EACc,kBAAX/C,EACH,OAAMF,IAAN,eAAkBE,IAClB,OAAMF,IAAN,OAAkB,CAAEE,OAAQ,eAAeA,KAJ5C,SAKkB+C,EALlB,uBAKG9C,EALH,EAKGA,KALH,kBAMEA,GANF,2C,wBASA,SAAeC,EAAtB,kC,8DAAO,WAAoBY,GAApB,yGACkB,OAAMZ,KAAN,OAAmBY,GADrC,uBACGb,EADH,EACGA,KADH,kBAEEA,GAFF,2C,wBAKA,SAAe+C,EAAtB,kC,8DAAO,WAAmBC,GAAnB,iGACC,OAAM/C,KAAN,mBAAuB+C,IADxB,2C,gEC7BA,SAAe,EAAtB,sC,8DAAO,WACL9C,EACAC,EACAC,GAHK,iGAKQ,eAAO,SAAD,OAAUF,EAAV,oBAAgCC,EAAMC,GALpD,mF,wBAQA,SAAe6C,EAAtB,sC,8DAAO,WACL/C,EACAC,EACAC,GAHK,iGAKQ,eAAU,SAAD,OAAUF,EAAV,oBAAgCC,EAAMC,GALvD,mF,4ECYD8C,EAAgB,UAEL,IAAIC,KAAKC,eAAe,QAAS,CAChDC,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,UACRC,QAAQ,IAGH,SAAeC,EAAtB,kC,8DAAO,WAAyBC,GAAzB,0GAEGA,EAAGC,WAFN,iCAGI,GAHJ,6DAKI,GALJ,wD,wBASA,SAAeC,EAAtB,kC,8DAAO,kHAA4B1C,EAA5B,EAA4BA,KAAM2C,EAAlC,EAAkCA,KAAMC,EAAxC,EAAwCA,SAAxC,kBAEgBhE,EAAK,CACtBiE,WAAY,GACZ7C,OACA2C,KAAM,eAAaA,GACnBC,SAAUA,EAASE,KAAI,SAAAxC,GAAC,MAAK,CAC3BzB,GAAI,GACJmB,KAAMM,EAAEN,KACR2C,KAAM,eAAarC,EAAEqC,YATtB,cAEGnD,EAFH,OAYH,eAAO,UACPuD,EAAA,KAAOC,KAAK,CAAEC,KAAM,eAAgBC,MAAO,kBAAGrB,EAAgBrC,EAAKX,MAbhE,mBAcI,GAdJ,+DAgBI,GAhBJ,0D,wBAoBA,SAAesE,EAAtB,kC,8DAAO,WAAuBxB,GAAvB,0GAEGD,EAAIC,GAFP,cAGH,eAAO,UAHJ,mBAII,GAJJ,6DAMI,GANJ,yD,wBAUP,IAAM,EAAc,SAACyB,GAAD,OAAwB,SAACvE,GAAD,gEAAgB,WAC1Db,GAD0D,kHAIhCoF,EACtBvE,EACAb,EAAOc,KACP,eAAqBd,IAPiC,uBAIhDqF,EAJgD,EAIhDA,MAKR,eAAO,UAAD,OAAWA,EAAX,QATkD,mBAUjD,GAViD,0CAYxD,eAAO,OAAD,MAZkD,mBAajD,GAbiD,yDAAhB,wDAqB/BC,EAAa,EAAY,QAMzBC,EAAiB,EAAY,QAM7BC,EAAoB,EAAY,GAMhCC,EAAuB,EAAY,GAEzC,SAAeC,IAAtB,+B,8DAAO,iIAEgBlF,EAAI,CACrBmF,QAAS,EACTC,SAAU,MACVC,MAAO,OACPC,KAAM,SANL,cAEGnF,EAFH,OAQGoF,EAAQpF,GAAQA,EAAKoF,MAAS,GAC9BC,EAAWD,EAAKjB,KAAI,SAAAxC,GAAC,wCACtBA,GADsB,IAEzBqC,KAAM,IAAIsB,KAAK3D,EAAEqC,MAAMuB,oBAXtB,kBAaIF,GAbJ,0CAeH,eAAO,WAAD,MAfH,kBAgBI,IAhBJ,yD,wBAwBA,SAAeG,EAAtB,kC,8DAAO,WAAgCjE,GAAhC,4FACCV,EAAOuD,EAAA,KAAOqB,aAAalB,MAAMrB,GACnB,kBAATrC,EAFN,yCAEgC,MAFhC,WAIUU,EAJV,qBAKDA,EAAM4C,KAAI,SAAAxC,GAAC,OAAIA,EAAEzB,MAAIwF,SAAS7E,GAL7B,uCAMK8E,EAAe9E,GANpB,kCAIC+E,EAJD,uBAOEA,EAAS/E,EAAO,MAPlB,4C,iCAUQ8E,E,gGAAf,WAA8B7F,GAA9B,0GAEUD,EAAIC,GAFd,iCAGW,GAHX,6DAKW,GALX,wD,wBASM,SAAU+F,EAAU/F,GAExB,OADKA,GAAQ,eAAM,SAAU,IAAIgG,SACxBhG,EAGJ,SAAeiG,EAAtB,kC,8DAAO,WAA+BjG,GAA/B,0FACAA,EADA,uBAEH,eAAM,SAAU,IAAIgG,OAFjB,mBAGI,GAHJ,uBAKYjG,EAAIC,GALhB,UAKDe,EALC,OAMAA,EAAKqD,WANL,uBAOH,eAAM,cAAe,IAAI4B,OAPtB,mBAQI,GARJ,iCAUE,GAVF,4C,wBAaA,SAAeE,EAAtB,kC,8DAAO,WAAqBlG,GAArB,oFACA+F,EAAU/F,GADV,0EAIG,eAAMA,GAJT,cAKHsE,EAAA,KAAOC,KAAK,CACVC,KAAM,uBACNC,MAAO,kBAAGrB,EAAgBpD,KAE5B,eAAO,QATJ,mBAUI,GAVJ,4CAYH,eAAO,yBAAD,MAZH,mBAaI,GAbJ,0D,kLC5KA,SAAeG,EAAtB,sC,8DAAO,WACLgG,EACA9F,EACAC,GAHK,kGAKC8F,EAAO,IAAIC,SACjBD,EAAKE,OAAO,QAASjG,EAAMA,EAAKkB,MAChC6E,EAAKE,OAAO,OAAQjG,EAAKkB,MAPpB,SASkB,OAAMpB,KAAKgG,EAAKC,EAAM,CAC3CG,QAAS,CAAE,eAAgB,uBAC3BjG,qBAXG,uBASGJ,EATH,EASGA,KATH,kBAaEA,GAbF,2C,wBAgBA,SAAeiD,EAAtB,sC,8DAAO,WACLgD,EACA9F,EACAC,GAHK,kGAKC8F,EAAO,IAAIC,SACjBD,EAAKE,OAAO,OAAQjG,EAAMA,EAAKkB,MAC/B6E,EAAKE,OAAO,OAAQjG,EAAKkB,MAPpB,SASkB,OAAMpB,KAAKgG,EAAKC,EAAM,CAC3CG,QAAS,CAAE,eAAgB,uBAC3BjG,qBAXG,uBASGJ,EATH,EASGA,KATH,kBAaEA,GAbF,2C","file":"js/chunk-22327f67.b69bd41c.js","sourcesContent":["import { HttpRequestOptions } from 'element-ui/types/upload'\r\n\r\nexport const createProcessHandler = (option: HttpRequestOptions) => (\r\n e: any\r\n) => {\r\n option.onProgress({\r\n ...e,\r\n percent: Math.round((e.loaded * 100) / e.total)\r\n })\r\n}\r\n","import { axios } from '@/utils/http'\r\nimport { TableResponse, Params } from '@/components/table'\r\nimport { ExamRoom } from '@/models/exam/room'\r\nimport { post as upload } from './upload'\r\nimport { paramsApdapter } from '@/utils/apdapter'\r\n\r\nexport async function get(examId: string, params?: Params) {\r\n const { data } = await axios.get(`exam/${examId}/room`, {\r\n params: paramsApdapter(params)\r\n })\r\n return data as TableResponse\r\n}\r\n\r\nexport async function post(\r\n id: string,\r\n file: File,\r\n onUploadProgress?: (progressEvent: any) => void\r\n) {\r\n return await upload(`exam/${id}/room/xls`, file, onUploadProgress)\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-select',{attrs:{\"value\":_vm.exam,\"loading\":_vm.loading,\"placeholder\":\"请选择考试信息\",\"filterable\":\"\",\"clearable\":\"\"},on:{\"change\":_vm.handleSelectChange}},_vm._l((_vm.exams),function(item){return _c('el-option',{key:item.id + _vm.randKey,attrs:{\"label\":item.name,\"value\":item.id}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator'\r\nimport { fetchExamList, validExamByRoute } from '@/service/exam'\r\nimport { randKey } from '@/utils/random'\r\nimport { Exam } from '@/models/exam'\r\n\r\n@Component\r\nexport default class ExamSelect extends Vue {\r\n @Prop({ type: String }) exam!: number\r\n exams = [] as Exam[]\r\n randKey = randKey()\r\n loading = true\r\n\r\n async created() {\r\n this.exams = await fetchExamList()\r\n const re = await validExamByRoute(this.exams)\r\n if (re) this.handleSelectChange(re)\r\n this.loading = false\r\n }\r\n\r\n handleSelectChange(id: string) {\r\n this.$emit('update:exam', id)\r\n\r\n const exam = this.exams.find(a => a.id === id)\r\n if (exam) this.$emit('change', exam)\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExamSelect.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExamSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ExamSelect.vue?vue&type=template&id=a62702f2&\"\nimport script from \"./ExamSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./ExamSelect.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { axios } from '@/utils/http'\r\nimport { TableResponse, Params } from '@/components/table'\r\nimport { Examinees } from '@/models/exam/examinees'\r\nimport { post as upload } from './upload'\r\nimport { paramsApdapter } from '@/utils/apdapter'\r\n\r\nexport async function post(\r\n id: string,\r\n file: File,\r\n onUploadProgress?: (progressEvent: any) => void\r\n) {\r\n return await upload(`/exam/${id}/examinees/xls`, file, onUploadProgress)\r\n}\r\n\r\nexport const curryGet = (examId: string) => async (params?: Params) => {\r\n const { data } = await axios.get(`/exam/${examId}/examinees`, {\r\n params: paramsApdapter(params)\r\n })\r\n return data as TableResponse\r\n}\r\n\r\nexport const get = async (examId: string, params?: Params) =>\r\n curryGet(examId)(params)\r\n\r\nexport const patch = async (examId: string) => {\r\n const { data } = await axios.patch(`exam/${examId}/examinees`)\r\n}\r\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","/*\r\n * @Author: Thorn Youzijia555@outlook.com\r\n * @Date: 2023-05-04 13:51:00\r\n * @LastEditors: Thorn Youzijia555@outlook.com\r\n * @LastEditTime: 2024-08-11 11:32:11\r\n * @FilePath: \\shnu.admission-office.management\\src\\api\\exam\\index.ts\r\n * @Description:\r\n *\r\n * Copyright (c) 2024 by Thorn.Y, All Rights Reserved.\r\n */\r\nimport { axios } from '@/utils/http'\r\nimport { Exam, BaseExam } from '@/models/exam'\r\nimport { TableResponse, Params } from '@/components/table'\r\nimport { paramsApdapter } from '@/utils/apdapter'\r\n\r\nexport async function get(id: string): Promise\r\nexport async function get(params?: Params): Promise>\r\nexport async function get(params?: string | Params) {\r\n const handle =\r\n typeof params === 'string'\r\n ? axios.get(`exam/${params}`)\r\n : axios.get(`exam`, { params: paramsApdapter(params) })\r\n const { data } = await handle\r\n return data\r\n}\r\n\r\nexport async function post(exam: BaseExam) {\r\n const { data } = await axios.post(`exam`, exam)\r\n return data as Exam\r\n}\r\n\r\nexport async function bak(examid: string) {\r\n await axios.post(`exam/bak/${examid}`)\r\n}\r\n","import { post as upload } from './upload'\r\nimport { postDoc as uploadDoc } from './upload'\r\nexport async function post(\r\n id: string,\r\n file: File,\r\n onUploadProgress?: (progressEvent: any) => void\r\n) {\r\n return await upload(`/exam/${id}/invigilator/xls`, file, onUploadProgress)\r\n}\r\n\r\nexport async function postDoc(\r\n id: string,\r\n file: File,\r\n onUploadProgress?: (progressEvent: any) => void\r\n) {\r\n return await uploadDoc(`/exam/${id}/invigilator/doc`, file, onUploadProgress)\r\n}\r\n","import { ElForm } from 'element-ui/types/form'\r\nimport { HttpRequestOptions } from 'element-ui/types/upload'\r\nimport { post, get, bak } from '@/api/exam'\r\nimport { post as postRoom } from '@/api/exam/room'\r\nimport { post as postExaminees, patch } from '@/api/exam/examinees'\r\nimport { post as postInvigilator } from '@/api/exam/invigilator'\r\nimport { postDoc as postInvigilatorDoc } from '@/api/exam/invigilator'\r\nimport { alert, notify } from '@/utils/notification'\r\nimport { createProcessHandler } from '@/utils/upload'\r\nimport { Exam, UploadFunc } from '@/models/exam'\r\nimport { Nilable } from '@/models/helpers/common'\r\nimport { router } from '@/router'\r\nimport { toDateString } from '@/utils/formatter/date'\r\n\r\nexport type Subject = { name: string; time: Date }\r\n\r\nexport type Payload = {\r\n name: string\r\n time: Date\r\n subjects: Subject[]\r\n}\r\n\r\nconst QUERY_EXAM_ID = 'exam_id'\r\n\r\nconst formater = new Intl.DateTimeFormat('zh-CN', {\r\n year: 'numeric',\r\n month: 'numeric',\r\n day: 'numeric',\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n second: 'numeric',\r\n hour12: false\r\n})\r\n\r\nexport async function validForm(el: ElForm) {\r\n try {\r\n await el.validate()\r\n return true\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nexport async function createExam({ name, time, subjects }: Payload) {\r\n try {\r\n const exam = await post({\r\n extraParam: '',\r\n name,\r\n time: toDateString(time),\r\n subjects: subjects.map(a => ({\r\n id: '',\r\n name: a.name,\r\n time: toDateString(a.time)\r\n }))\r\n })\r\n notify(`创建考试成功`)\r\n router.push({ path: '/exam/upload', query: { [QUERY_EXAM_ID]: exam.id } })\r\n return true\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nexport async function bakExam(examid: string) {\r\n try {\r\n await bak(examid)\r\n notify(`备份考试完成`)\r\n return true\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nconst curryUpload = (upload: UploadFunc) => (id: string) => async (\r\n option: HttpRequestOptions\r\n) => {\r\n try {\r\n const { count } = await upload(\r\n id,\r\n option.file,\r\n createProcessHandler(option)\r\n )\r\n notify(`上传成功, 共${count}条数据`)\r\n return true\r\n } catch (e) {\r\n notify('上传失败', e)\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * 上传考场信息\r\n * @param id 考试ID\r\n */\r\nexport const uploadRoom = curryUpload(postRoom)\r\n\r\n/**\r\n * 上传考生信息\r\n * @param id 考试ID\r\n */\r\nexport const uploadExaminee = curryUpload(postExaminees)\r\n\r\n/**\r\n * 上传监考信息\r\n * @param id 考试ID\r\n */\r\nexport const uploadInvigilator = curryUpload(postInvigilator)\r\n\r\n/**\r\n * 上传监考通知模板\r\n * @param id 考试ID\r\n */\r\nexport const uploadInvigilatorDoc = curryUpload(postInvigilatorDoc)\r\n\r\nexport async function fetchExamList() {\r\n try {\r\n const data = await get({\r\n current: 1,\r\n pageSize: 99999,\r\n order: 'desc',\r\n sort: 'Time'\r\n })\r\n const rows = (data && data.rows) || []\r\n const formated = rows.map(a => ({\r\n ...a,\r\n time: new Date(a.time).toDateString()\r\n }))\r\n return formated\r\n } catch (e) {\r\n notify(`获取考试列表失败`, e)\r\n return []\r\n }\r\n}\r\n\r\n/** 异步校验 URL QUERY 中是否存在有效 ExamId */\r\nexport async function validExamByRoute(): Promise\r\n/** 异步校验 URL QUERY 中 ExamId 是否位于数组中 */\r\nexport async function validExamByRoute(exams?: Exam[]): Promise\r\nexport async function validExamByRoute(exams?: Exam[]) {\r\n const exam = router.currentRoute.query[QUERY_EXAM_ID]\r\n if (typeof exam !== 'string') return null\r\n\r\n const result = exams\r\n ? exams.map(a => a.id).includes(exam)\r\n : await validExamAsync(exam)\r\n return result ? exam : null\r\n}\r\n\r\nasync function validExamAsync(examId: string) {\r\n try {\r\n await get(examId)\r\n return true\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nexport function validExam(examId?: Nilable): examId is string {\r\n if (!examId) alert(`请先选择考试`, new Error())\r\n return !!examId\r\n}\r\n\r\nexport async function validNotifyExam(examId: string) {\r\n if (!examId) {\r\n alert(`请先选择考试`, new Error())\r\n return false\r\n }\r\n var exam = await get(examId as string)\r\n if (!exam.extraParam) {\r\n alert(`所选考试未上传通知模板`, new Error())\r\n return false\r\n }\r\n return true\r\n}\r\n\r\nexport async function start(examId?: Nilable) {\r\n if (!validExam(examId)) return\r\n\r\n try {\r\n await patch(examId)\r\n router.push({\r\n path: '/print/exam-download',\r\n query: { [QUERY_EXAM_ID]: examId }\r\n })\r\n notify('排考完成')\r\n return true\r\n } catch (e) {\r\n notify(`排考可能失败, 如果多次失败, 请联系管理员`, e)\r\n return false\r\n }\r\n}\r\n","import { axios } from '@/utils/http'\r\nimport { UploadResult } from '@/models/exam'\r\n\r\nexport async function post(\r\n url: string,\r\n file: File,\r\n onUploadProgress?: (progressEvent: any) => void\r\n) {\r\n const form = new FormData()\r\n form.append('sheet', file, file.name)\r\n form.append('name', file.name)\r\n\r\n const { data } = await axios.post(url, form, {\r\n headers: { 'Content-Type': 'multipart/form-data' },\r\n onUploadProgress\r\n })\r\n return data as UploadResult\r\n}\r\n\r\nexport async function postDoc(\r\n url: string,\r\n file: File,\r\n onUploadProgress?: (progressEvent: any) => void\r\n) {\r\n const form = new FormData()\r\n form.append('file', file, file.name)\r\n form.append('name', file.name)\r\n\r\n const { data } = await axios.post(url, form, {\r\n headers: { 'Content-Type': 'multipart/form-data' },\r\n onUploadProgress\r\n })\r\n return data as UploadResult\r\n}\r\n"],"sourceRoot":""}