{"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:///./node_modules/ramda/es/subtract.js","webpack:///./src/api/exam/examinees.ts","webpack:///./src/service/exam/room.ts","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","subtract","b","Number","curryGet","patch","sort","parseInt","roomId","fetchExamRoomList","current","pageSize","rows","getRoomName","room","university","building","completion","handle","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","upload","count","uploadRoom","uploadExaminee","uploadInvigilator","uploadInvigilatorDoc","fetchExamList","formated","Date","toDateString","validExamByRoute","currentRoute","includes","validExamAsync","result","validExam","Error","validNotifyExam","start","url","form","FormData","append","headers"],"mappings":"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","file":"js/chunk-1d2e61ba.cf46d0e5.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 _curry2 from './internal/_curry2.js';\n\n/**\n * Subtracts its second argument from its first argument.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Math\n * @sig Number -> Number -> Number\n * @param {Number} a The first value.\n * @param {Number} b The second value.\n * @return {Number} The result of `a - b`.\n * @see R.add\n * @example\n *\n * R.subtract(10, 8); //=> 2\n *\n * const minus5 = R.subtract(R.__, 5);\n * minus5(17); //=> 12\n *\n * const complementaryAngle = R.subtract(90);\n * complementaryAngle(30); //=> 60\n * complementaryAngle(72); //=> 18\n */\nvar subtract = /*#__PURE__*/_curry2(function subtract(a, b) {\n return Number(a) - Number(b);\n});\nexport default subtract;","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","import { isNil } from 'ramda'\r\nimport { get } from '@/api/exam/room'\r\nimport { notify } from '@/utils/notification'\r\nimport { ExamRoom } from '@/models/exam/room'\r\n\r\nexport const sort = (a: ExamRoom, b: ExamRoom) =>\r\n Number.parseInt(a.roomId) - Number.parseInt(b.roomId)\r\n\r\nexport const fetchExamRoomList = async (id: string) => {\r\n if (isNil(id)) return []\r\n\r\n try {\r\n const data = await get(id, { current: 1, pageSize: 99999 })\r\n const rows = (data && data.rows) || []\r\n return rows.sort(sort)\r\n } catch (e) {\r\n notify(`获取考场列表失败`, e)\r\n return []\r\n }\r\n}\r\n\r\nexport const getRoomName = (room: ExamRoom) => {\r\n return room.university + room.building + room.room\r\n}\r\n\r\nexport const completion = (room: ExamRoom) => {\r\n return { ...room, name: getRoomName(room) }\r\n}\r\n","import { 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","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 } 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 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\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({ current: 1, pageSize: 99999 })\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":""}