{"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/views/exam/components/Upload.vue?8518","webpack:///./src/views/exam/components/Upload.vue?9445","webpack:///./node_modules/ramda/es/F.js","webpack:///./src/views/exam/components/Upload.vue","webpack:///./src/views/exam/components/Upload.vue?0389","webpack:///./src/views/exam/components/Upload.vue?b01e","webpack:///./src/api/exam/examinees.ts","webpack:///./src/api/exam/index.ts","webpack:///./src/api/exam/invigilator.ts","webpack:///./src/service/exam/index.ts","webpack:///./src/views/exam/components/Upload.vue?8768","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","_obj","downLoadUrl","_v","getKey","ref","class","$style","uploadDisabled","disabled","handleUpload","scopedSlots","_u","fn","staticClass","proxy","handleClick","F","uploader","upload","wrapper","Error","required","components","ExamSelect","injectStyles","context","locals","curryGet","patch","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","count","uploadRoom","uploadExaminee","uploadInvigilator","uploadInvigilatorDoc","fetchExamList","current","pageSize","rows","formated","Date","toDateString","validExamByRoute","currentRoute","includes","validExamAsync","result","validExam","validNotifyExam","start","module","exports","url","form","FormData","append","headers"],"mappings":"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","file":"js/chunk-b23b6cf0.6c0d9abc.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","export { default } from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-0-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-0-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-0-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-0-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Upload.vue?vue&type=style&index=0&lang=scss&module=true&\"; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-0-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-0-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-0-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-0-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Upload.vue?vue&type=style&index=0&lang=scss&module=true&\"","var render = function () {\nvar _obj;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{attrs:{\"href\":_vm.downLoadUrl,\"target\":\"_blank\"}},[_vm._v(\"下载模板\")]),_c('el-upload',{key:_vm.getKey(),ref:\"upload\",class:( _obj = {}, _obj[_vm.$style.uploadDisabled] = _vm.disabled, _obj ),attrs:{\"accept\":\".xls,.xlsx,.docx,.doc\",\"action\":\"\",\"drag\":\"\",\"multiple\":false,\"disabled\":_vm.disabled,\"http-request\":_vm.handleUpload},scopedSlots:_vm._u([{key:\"tip\",fn:function(){return [_c('div',{staticClass:\"el-upload__tip\"},[_vm._v(\" 只能上传 xlxs, xls,docx,doc 文件 \")])]},proxy:true}])},[_c('div',{on:{\"click\":_vm.handleClick}},[_c('i',{staticClass:\"el-icon-upload\"}),_c('div',{staticClass:\"el-upload__text\"},[_vm._v(\" 将文件拖到此处,或 \"),_c('em',[_vm._v(\"点击上传\")])])])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n/**\n * A function that always returns `false`. Any passed in parameters are ignored.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Function\n * @sig * -> Boolean\n * @param {*}\n * @return {Boolean}\n * @see R.T\n * @example\n *\n * R.F(); //=> false\n */\nvar F = function () {\n return false;\n};\nexport default F;","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { HttpRequestOptions } from 'element-ui/types/upload'\r\nimport { identity, F } from 'ramda'\r\nimport { Vue, Component, Prop, Watch } from 'vue-property-decorator'\r\nimport ExamSelect from '@/components/select/ExamSelect.vue'\r\nimport { randKey } from '@/utils/random'\r\nimport { alert } from '@/utils/notification'\r\nimport { Exam, UploadFuncInTime, UploadFuncBindId } from '@/models/exam'\r\nimport { Nilable } from '@/models/helpers/common'\r\n\r\n@Component({\r\n components: { ExamSelect }\r\n})\r\nexport default class Upload extends Vue {\r\n @Prop({ required: true }) upload!: UploadFuncBindId\r\n @Prop({ required: true }) downLoadUrl!: string\r\n @Prop() exam?: string\r\n getKey = randKey\r\n\r\n get disabled() {\r\n return !this.exam\r\n }\r\n\r\n get handleUpload() {\r\n const uploader = this.exam ? this.upload(this.exam!) : F\r\n const wrapper = async (...args: any[]) => {\r\n const re = await uploader(...args)\r\n if (re) this.$emit('success')\r\n return re\r\n }\r\n return wrapper\r\n }\r\n\r\n handleClick() {\r\n if (this.disabled) alert('请先选择考试信息', new Error())\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!./Upload.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!./Upload.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Upload.vue?vue&type=template&id=2e20b247&\"\nimport script from \"./Upload.vue?vue&type=script&lang=ts&\"\nexport * from \"./Upload.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Upload.vue?vue&type=style&index=0&lang=scss&module=true&\"\n\n\n\n\nfunction injectStyles (context) {\n \n this[\"$style\"] = (style0.locals || style0)\n\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 injectStyles,\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","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","// extracted by mini-css-extract-plugin\nmodule.exports = {\"uploadDisabled\":\"Upload_uploadDisabled_2O6nt\"};","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":""}