{"version":3,"file":"./js/course/bundle.js","mappings":"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","sources":["webpack://hib-course/webpack/runtime/chunk loaded","webpack://hib-course/./src/context/BasicContext.tsx","webpack://hib-course/./src/WebService/ServiceContext.ts","webpack://hib-course/./src/course/FileUploader.tsx","webpack://hib-course/./src/course/AnswerInput.tsx","webpack://hib-course/./src/course/AnswerBtns.tsx","webpack://hib-course/./src/course/Questionnaire.tsx","webpack://hib-course/./src/course/SVG.tsx","webpack://hib-course/./src/course/HibModal.tsx","webpack://hib-course/./src/course/ImgLoader.tsx","webpack://hib-course/./src/course/PosterLoader.tsx","webpack://hib-course/./src/course/CardDetail.tsx","webpack://hib-course/./src/js/LawChart.js","webpack://hib-course/./src/course/ChartA.tsx","webpack://hib-course/./src/course/ChartB.tsx","webpack://hib-course/./src/course/CardList.tsx","webpack://hib-course/./src/course/CardOtsList.tsx","webpack://hib-course/./src/course/Dashbaord.tsx","webpack://hib-course/./src/course/Menu.tsx","webpack://hib-course/./src/course/State.tsx","webpack://hib-course/./src/context/ExamContext.tsx","webpack://hib-course/./src/exam/ExamBasic.tsx","webpack://hib-course/./src/exam/TimerType2.tsx","webpack://hib-course/./src/exam/ExamCheck.tsx","webpack://hib-course/./src/exam/ExamBody.tsx","webpack://hib-course/./src/exam/ExamQuest.tsx","webpack://hib-course/./src/exam/ExamInfo.tsx","webpack://hib-course/./src/exam/ExamApp.tsx","webpack://hib-course/./src/exam/index.tsx","webpack://hib-course/./src/App.tsx","webpack://hib-course/./src/WebService/WebService.ts","webpack://hib-course/./src/WebService/ExamService.tsx","webpack://hib-course/./src/index.tsx","webpack://hib-course/webpack/bootstrap","webpack://hib-course/webpack/runtime/compat get default export","webpack://hib-course/webpack/runtime/define property getters","webpack://hib-course/webpack/runtime/hasOwnProperty shorthand","webpack://hib-course/webpack/runtime/jsonp chunk loading","webpack://hib-course/webpack/runtime/nonce","webpack://hib-course/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import React, { createContext, useEffect, useState } from \"react\";\r\n\r\nexport const BasicContext = createContext({\r\n PID: \"\",//控制頁面顯示\r\n BID: \"\",//控制按鈕顯示\r\n ActType: \"\",\r\n ActID: \"\",\r\n Class1: \"\",\r\n Class2: \"\",\r\n openCard: false,\r\n cardList:[] as CardProps[]| undefined, \r\n ansList:[] as ResAnswers[],\r\n ExamPaper:\"\",\r\n //LYearComplete:0,\r\n //RYearComplete:0,\r\n\r\n setPID: (pid: string) => { },\r\n setBID: (pid: string) => { },\r\n setActType: (actType: string) => { },\r\n setActID: (actType: string) => { },\r\n setClass1: (ID: string) => { }, \r\n setClass2: (ID: string) => { },\r\n setOpenCard: (open: boolean) => { },\r\n setCardList: (list: CardProps[]| undefined) => { },\r\n setAnsList: (list: ResAnswers[]) => { },\r\n setExamPaper: (examPaper: string) => { },\r\n //setLYearComplete:(year:number):void=>{},\r\n //setRYearComplete:(year:number):void=>{},\r\n \r\n});\r\n\r\nexport const BasicContextProvider = (props: any) => {\r\n const [PID, setMyPID] = useState(\"\");\r\n const [BID, setMyBID] = useState(\"\");\r\n const [ActType, setMyActType] = useState(\"\");\r\n const [ActID, setMyActID] = useState(\"\");\r\n const [Class1, setMyClass1] = useState(\"\");\r\n const [Class2, setMyClass2] = useState(\"\");\r\n const [openCard, setMyOpenCard] = useState(false);\r\n const [cardlist, setMyCardlist] = useState(undefined);\r\n const [ansList, setMyAnsList] = useState([]);//問券回答的內容\r\n const [examPaper, setMyExamPaper] = useState(\"\");\r\n //const [LYearComplete, setLYearComplete] = useState(0);\r\n //const [RYearComplete, setRYearComplete] = useState(0);\r\n\r\n useEffect(() => { \r\n const url: string = `\r\n ?${PID !=\"\"?\"pid=\"+PID:\"\"}${examPaper !=\"\" ?\"&examPaper=\"+examPaper:\"\"}${BID !=\"\" ?\"&bid=\"+BID:\"\"}${ActType != \"\" ? \"&type=\" + ActType : \"\"}${Class1 != \"\" ? (\"&Class1=\" + Class1) : \"\"}${Class2 != \"\" ? (\"&Class2=\" + Class2) : \"\"}${ActID!= \"\" ? (\"&actid=\" + ActID) : \"\"}\r\n `\r\n window.history.replaceState(\"\", \"\", url.trim());\r\n \r\n }, [PID, BID, ActType, Class1, Class2, ActID, examPaper])\r\n\r\n const setBasicPID = (pid: string) => {\r\n setMyPID(pid);\r\n };\r\n\r\n const setBasicBID = (pid: string) => {\r\n setMyBID(pid);\r\n };\r\n\r\n const setBasicActType = (actType: string) => {\r\n setMyActType(actType);\r\n };\r\n\r\n const setBasicActID = (actID: string) => {\r\n \r\n setMyActID(actID.toUpperCase());\r\n };\r\n\r\n const setBasicClass1 = (ID: string) => {\r\n setMyClass1(ID);\r\n };\r\n\r\n const setBasicClass2 = (ID: string) => {\r\n setMyClass2(ID);\r\n };\r\n\r\n const setBasicOpenCard = (open: boolean) => {\r\n setMyOpenCard(open);\r\n };\r\n\r\n const setBasicCardlist = (list: CardProps[]| undefined) => {\r\n setMyCardlist(list);\r\n };\r\n\r\n const setBasicAnsList = (list: ResAnswers[]) => {\r\n setMyAnsList(list);\r\n };\r\n\r\n const setBasicExamPaper = (examPaper:string) => {\r\n setMyExamPaper(examPaper);\r\n };\r\n/*\r\n const setBasicLYearComplete = (year:number) => {\r\n setLYearComplete(year);\r\n };\r\n\r\n const setBasicRYearComplete = (year:number) => {\r\n setRYearComplete(year);\r\n };\r\n*/\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n\r\n\r\n","import React, { createContext } from 'react';\r\nimport {IService} from './IService'\r\n\r\n//set an empty object as default state\r\nconst Context = createContext({} as IService);\r\nexport default Context","\r\nimport React, { ReactHTMLElement, useContext, useEffect, useState, useRef, FormEvent } from \"react\";\r\nimport { BasicContext } from '../context/BasicContext'\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport HibSnakeBox from './HibSnakeBox'\r\n\r\ntype FileUploaderProp = {\r\n cardData: CardProps\r\n complete: () => {} | void\r\n}\r\n\r\ntype UploadResult = {\r\n Result: string\r\n fileName: string\r\n}\r\n\r\nconst toBase64 = (file: Blob): Promise => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = error => reject(error);\r\n});\r\n\r\n/**\r\n * \r\n _toBase64(event.target.files[0]).then(file64 => {\r\n base64Data = file64;\r\n //開啟上傳按鈕\r\n uploadMyFileBtn.disabled = false;\r\n _modal.querySelector(\".custom-file-label\").innerHTML = event.target.files[0].name;\r\n });\r\n */\r\n\r\nexport default (props: FileUploaderProp) => {\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n const [queen, setQueen] = useState<\"ready\"|\"start\"|\"complete\">(\"ready\")\r\n const inputRef = useRef(null)\r\n const [file64, setFile64] = useState(null)\r\n const [fileType, setFileType] = useState<\"pdf\"|\"jpg\"|\"png\">(\"png\")\r\n const [resFileName, setResFileName] = useState(null)\r\n const snakeBoxRef = useRef(null)\r\n\r\n /*\r\n useEffect(() => {\r\n console.log(props)\r\n setResFileName(props.cardData.ResFileName)\r\n }, [props])\r\n */\r\n\r\n useEffect(() => {\r\n setResFileName(props.cardData.ResFileName)\r\n return\r\n }, [props.cardData.ResFileName])\r\n\r\n \r\n\r\n /*\r\n const closePanel = () => {\r\n setOpen(false)\r\n }\r\n \r\n const fileUploaderHandler = () => {\r\n setOpen(true)\r\n }\r\n */\r\n\r\n\r\n const uploadFile = () => {\r\n setQueen(\"start\")\r\n if (file64) {\r\n ws.WebService.RegFileUpload(props.cardData.ActID, file64).then((res) => {\r\n console.log(res)\r\n const _r = res as UploadResult\r\n if (_r.Result == \"OK\") {\r\n /*return ws.webservice.doApplyCourse(\r\n props.cardData.ActID,\r\n (\r\n (props.cardData.regState == 10 && props.cardData.StateDefault == \"N\") ? \"Y\" :\r\n props.cardData.StateDefault == \"N\" ? \"N\" :\r\n \"Y\"\r\n )\r\n )*/\r\n setResFileName(_r.fileName)\r\n setFile64(null)\r\n\r\n setTimeout(() => {\r\n setQueen(\"complete\")\r\n }, 1000);\r\n setTimeout(() => {\r\n setQueen(\"ready\")\r\n }, 3000);\r\n\r\n snakeBoxRef.current?.launch()\r\n\r\n \r\n return\r\n } else {\r\n alert(\"上傳失敗\")\r\n }\r\n }).then(() => {\r\n props.complete()\r\n })\r\n } else {\r\n alert(\"file64 not set\")\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if(file64){\r\n uploadFile()\r\n }\r\n }, [file64])\r\n\r\n return (\r\n <>\r\n
\r\n {/*\r\n

\r\n props.cardData.ResFileName ?\r\n \"重新上傳檔案並報名\" :\r\n \"上傳檔案並報名\"\r\n

\r\n */}\r\n {\r\n resFileName && queen == \"ready\" &&\r\n {\r\n props.cardData &&\r\n ws.WebService.RegFileDownload(resFileName).then(res => {\r\n console.log(res)\r\n if (props.cardData) {\r\n const ext = resFileName.split(\".\")[1]\r\n const a = document.createElement(\"a\"); //Create \r\n switch (ext.toLowerCase()) {\r\n case \"pdf\":\r\n a.href = \"Data:application/pdf;base64,\" + res; //Image Base64 Goes here\r\n break\r\n case \"jpg\":\r\n a.href = \"data:image/jpg;base64,\" + res; //Image Base64 Goes here\r\n break\r\n case \"png\":\r\n a.href = \"data:image/png;base64,\" + res; //Image Base64 Goes here\r\n break\r\n }\r\n a.download =resFileName; //File name Here\r\n a.click();\r\n }\r\n })\r\n }}>\r\n 下載前次上傳的資料\r\n \r\n }\r\n {\r\n queen == \"ready\" ?\r\n <>\r\n \r\n \r\n ) => {\r\n const _f: HTMLInputElement = event.target as HTMLInputElement\r\n if (_f.files) { \r\n const ext = _f.files[0].name.split(\".\")[_f.files[0].name.split(\".\").length-1] \r\n ext.toLowerCase() == \"pdf\" ? setFileType(\"pdf\"):\r\n ext.toLowerCase() == \"jpg\" ? setFileType(\"jpg\"):\r\n ext.toLowerCase() == \"png\" ? setFileType(\"png\"):null\r\n \r\n toBase64(_f.files[0]).then((file64: string) => {\r\n setFile64(file64)\r\n })\r\n \r\n /* \r\n toBase64(_f.files[0]).then((file64: string) => {\r\n uploadFile()\r\n })*/\r\n }\r\n\r\n }}\r\n />\r\n {\r\n props.cardData.ResFileName ?\r\n \"重新上傳檔案\" :\r\n \"上傳檔案\"\r\n }\r\n \r\n {/*\r\n \r\n {\r\n props.cardData.ResFileName ?\r\n \"重新上傳檔案\" :\r\n \"上傳檔案\"\r\n }\r\n */}\r\n :\r\n queen == \"start\" ?\r\n
\r\n \r\n

\r\n 檔案上傳中,請稍後\r\n

\r\n
:\r\n queen == \"complete\"? \r\n
\r\n \r\n

\r\n 檔案上傳完成\r\n

\r\n
:\r\n \"\"\r\n }\r\n
\r\n \r\n \r\n )\r\n}\r\n\r\n","\r\nimport React, { useContext, useEffect, useState, ChangeEvent } from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from '../context/BasicContext'\r\n\r\ntype AnswerInputProp = {\r\n serial: number\r\n qName: string\r\n QSNo: number\r\n //jsonString: string\r\n defAns?: string\r\n isAnswered:boolean\r\n checker: () => {} | void\r\n}\r\n\r\ntype AnswerItem = {\r\n ItemID: string,\r\n ItemTitle: string,\r\n ansID: string,\r\n}\r\n\r\n\r\nexport default (props: AnswerInputProp) => {\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n\r\n const [btns, setBtns] = useState([])\r\n const [current, setCurrent] = useState(\"\")\r\n\r\n useEffect(() => {\r\n if (props) {\r\n //const ans: AnswerItem[] = JSON.parse(quest.Answers) as AnswerItem[]\r\n //setBtns(JSON.parse(props.jsonString) as AnswerItem[])\r\n if (props.defAns) {\r\n setCurrent(props.defAns)\r\n // console.log(props.defAns)\r\n }\r\n }\r\n\r\n }, [props, bc.ansList])\r\n\r\n const txtChange = (event: ChangeEvent) => {\r\n //console.log(event.target.value)\r\n //setCurrent(a.ItemID)\r\n\r\n\r\n const ans: ResAnswers = {\r\n QSNo: props.QSNo.toString(),\r\n qtxt: props.qName,\r\n ItemTxt: event.target.value,\r\n }\r\n\r\n let temp: ResAnswers[] = bc.ansList;\r\n temp[props.serial] = ans\r\n bc.setAnsList(temp)\r\n props.checker()\r\n }\r\n\r\n if (props.isAnswered) {\r\n return (\r\n
\r\n 您的回答:{props.defAns}\r\n
\r\n )\r\n } else {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\n","\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from '../context/BasicContext'\r\n\r\ntype AnswerBtnsProp = {\r\n serial: number\r\n qName: string\r\n QSNo: number\r\n jsonString: string\r\n defAns?: string\r\n showAns?: boolean\r\n checker: () => {} | void\r\n}\r\n\r\ntype AnswerItem = {\r\n ItemID: string,\r\n ItemTitle: string,\r\n ansID: string,\r\n}\r\n\r\n\r\nexport default (props: AnswerBtnsProp) => {\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n\r\n const [btns, setBtns] = useState([])\r\n const [current, setCurrent] = useState(\"\")\r\n\r\n const writeAns = ()=>{\r\n \r\n }\r\n\r\n useEffect(() => {\r\n if (props) {\r\n setBtns(JSON.parse(props.jsonString) as AnswerItem[])\r\n if (props.defAns) {\r\n setCurrent(props.defAns)\r\n }\r\n // console.log(props.defAns)\r\n }\r\n }, [props])\r\n\r\n\r\n \r\n /*處理BasicContext 中 回答問題的列表 */\r\n /*\r\n useEffect(() => {\r\n if(bc.ansList.length > 0){\r\n bc.ansList.map((item:ResAnswers)=>{\r\n console.log(item as ResAnswers)\r\n })\r\n \r\n }\r\n },[bc.ansList])\r\n */\r\n //console.log(\"init\")\r\n\r\n /**\r\n * \r\n * \r\n * /*if (props.defAns) {\r\n if (a.ItemID == props.defAns) {\r\n return (\r\n
\r\n 您的回答:{a.ItemTitle}\r\n
\r\n )\r\n }\r\n if (props.showAns) {\r\n //console.log(bc.ansList)\r\n let myAns:string=\"\";\r\n bc.ansList.map((item: ResAnswers) => {\r\n if (a.ItemID == item.ItemID) {\r\n myAns = a.ItemTitle\r\n }\r\n })\r\n if( myAns!=\"\"){\r\n return (\r\n
\r\n 您的回答:{a.ItemTitle}\r\n
\r\n )\r\n }\r\n\r\n } else {\r\n */\r\n if (btns && btns.length > 0 && !props.showAns) {\r\n return (\r\n
\r\n {\r\n btns.length > 0 &&\r\n btns.map((a: AnswerItem, index: number) => {\r\n return (\r\n {\r\n setCurrent(a.ItemID)\r\n const ans: ResAnswers = {\r\n QSNo: props.QSNo.toString(),\r\n qtxt: props.qName,\r\n ItemID: a.ItemID,\r\n ansTxt: a.ItemTitle\r\n }\r\n\r\n let temp: ResAnswers[] = bc.ansList;\r\n temp[props.serial] = ans\r\n bc.setAnsList(temp)\r\n props.checker()\r\n }}\r\n >\r\n {a.ItemTitle}\r\n \r\n )\r\n\r\n })\r\n }\r\n
\r\n )\r\n } else if (props.showAns == true) {\r\n let myAns:string=\"\"\r\n bc.ansList.map((a:ResAnswers)=>{\r\n if(a.QSNo == props.QSNo.toString()){\r\n //console.log(a)\r\n myAns = a.ansTxt as string\r\n }\r\n })\r\n \r\n return (\r\n
\r\n 您的回答:\r\n \r\n {myAns!=\"\"? myAns:\"NAN\"}\r\n \r\n \r\n
\r\n )\r\n } else {\r\n return (...loading)\r\n }\r\n}\r\n\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { createElement } from 'react';\r\n\r\nimport AnswerInput from \"./AnswerInput\";\r\nimport AnswerBtns from './AnswerBtns'\r\n\r\ntype QuestRes = {\r\n Answers: string\r\n QName: string\r\n QSNo: number\r\n defAns?: string\r\n ItemID?: string\r\n ItemTxt?: string\r\n QType: number\r\n}\r\n\r\ntype QProps = {\r\n quests:QuestRes[]\r\n cardData:CardProps\r\n ansList:ResAnswers[]\r\n isComplete:(complete:boolean)=>void\r\n}\r\n\r\nconst detectURL = (str: string) => {\r\n const pattern = new RegExp('(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z1-9\\.]{2,100})([\\/\\w \\.-]*)*\\/?', 'i');\r\n const res: RegExpMatchArray = str.match(pattern) as RegExpMatchArray\r\n if (res) {\r\n //console.log(str.split(\",\"))\r\n\r\n return createElement(\r\n 'span',\r\n null,\r\n str.split(res[0])[0],\r\n createElement('a', {href:res[0], target:\"_blank\"}, res[0]),\r\n (str.split(res[0])[1]?str.split(res[0])[1]:null)\r\n );\r\n //return str.replace(res[0], `
${res[0]}`)\r\n } else {\r\n return str\r\n }\r\n\r\n\r\n //return !!pattern.test(str);\r\n}\r\n\r\n\r\n\r\nexport default (props:QProps) => {\r\n\r\n const [quests] = useState(props.quests)\r\n const [notDone, setNotDone] = useState(true)\r\n const [ansList, setAnsList] = useState(props.ansList)\r\n\r\n useEffect(()=>{\r\n return\r\n },[])\r\n \r\n useEffect(()=>{\r\n setAnsList(props.ansList)\r\n checkAnsTotal()\r\n \r\n },[props.ansList, quests])\r\n \r\n\r\n const checkAnsTotal = () => {\r\n //let count: number = 0\r\n let countAry: string[] = []\r\n props.ansList.map((item) => {\r\n if (item.ItemID) {\r\n countAry.push(item.ItemID)\r\n } else if (item.ItemTxt) {\r\n countAry.push(item.ItemTxt)\r\n }\r\n \r\n })\r\n\r\n\r\n if (quests.length == countAry.length) {\r\n setNotDone(false)\r\n props.isComplete(false);\r\n } else {\r\n setNotDone(true)\r\n props.isComplete(true);\r\n }\r\n }\r\n return (\r\n
\r\n
問卷調查
\r\n {\r\n quests.map((quest: QuestRes, index: number) => {\r\n\r\n return (\r\n
\r\n
\r\n \r\n {index + 1}.\r\n \r\n \r\n\r\n {detectURL(quest.QName)}\r\n \r\n
\r\n
\r\n {\r\n quest.QType == 3 ?\r\n -1 &&\r\n props.cardData?.editable == 0\r\n ) == true\r\n }\r\n defAns={ansList[index]?.ItemTxt}\r\n serial={index}\r\n QSNo={quest.QSNo}\r\n checker={checkAnsTotal}\r\n //jsonString={quest.Answers}\r\n /> :\r\n -1 &&\r\n props.cardData?.editable == 0\r\n ) == true\r\n }\r\n serial={index}\r\n QSNo={quest.QSNo}\r\n jsonString={quest.Answers}\r\n checker={checkAnsTotal}\r\n />\r\n }\r\n
\r\n
\r\n )\r\n\r\n })\r\n }\r\n {\r\n notDone &&\r\n

填寫或修改全部的問卷內容即可送出

\r\n }\r\n \r\n
\r\n )\r\n}\r\n\r\n","import React from \"react\";\r\n\r\n\r\nexport const SpinnerSvg = () => `data:image/svg+xml;charset=utf8,\r\n\r\n\r\n`\r\n\r\nexport const BookDot = () => `data:image/svg+xml;charset=utf8,\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n`\r\nexport const BookDotA = () => `data:image/svg+xml;charset=utf8,\r\n\r\n\r\n\r\n\r\n`\r\n\r\nconst CloseSvg = `\r\ndata:image/svg+xml;charset=utf8,\r\n\r\n\r\n`\r\n\r\nconst YesSvg = `\r\ndata:image/svg+xml;charset=utf8,\r\n\r\n`\r\n\r\nconst NoSvg = `\r\ndata:image/svg+xml;charset=utf8,\r\n\r\n`\r\n\r\nconst NotSvg = `\r\ndata:image/svg+xml;charset=utf8,\r\n\r\n`\r\n\r\nconst CloudCompleteSvg = `\r\ndata:image/svg+xml;charset=utf8,\r\n\r\n \r\n \r\n\r\n`\r\n\r\nconst searchSvg = (color: string|undefined) => {\r\n let _c = \"rgb(255, 255, 255)\" \r\n if(color){\r\n _c = color\r\n }\r\n return (\r\n `data:image/svg+xml;charset=utf8,\r\n \r\n \r\n `\r\n )\r\n}\r\n\r\nconst spinnerSvg = `data:image/svg+xml;charset=utf8,\r\n\r\n\r\n`\r\n\r\nexport const Spinner = () =>\r\n
\r\n \r\n
\r\n\r\n\r\nexport const Close = () => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const Yes = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport const No = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport const Not = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport const CloudComplete = () => {\r\n return (\r\n \r\n )\r\n}\r\n\r\ntype MyColorProps = {\r\n color?:string\r\n}\r\nexport const Search = (props:MyColorProps) => {\r\n return (\r\n \r\n )\r\n}\r\n","\r\n//30有誠的按鈕群\r\nimport React, { useState, useEffect, ReactEventHandler, Component } from \"react\";\r\nimport { Close } from './SVG'\r\ninterface HModalProps {\r\n title?: String \r\n children?: String | React.ReactNode\r\n //children?: JSX.Element|JSX.Element[];\r\n className?: string\r\n show?: boolean\r\n type?: string\r\n showCross: boolean | true\r\n cancel?: () => void\r\n confirm?: () => void\r\n confirmText?: string | null\r\n}\r\n\r\nexport class HibModal extends Component {\r\n render() {\r\n const { title, children, show, type, showCross, className, cancel, confirm, confirmText, ...props } = this.props as HModalProps;\r\n if (show) {\r\n return (\r\n { }/*(type==\"photo\" ? cancel:()=>{})*/}\r\n >\r\n
\r\n {\r\n showCross &&\r\n
\r\n \r\n \r\n {\r\n title &&\r\n

{title}

\r\n }\r\n
\r\n }\r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n {\r\n type == \"photo\" ?\r\n <> :\r\n type == \"confirm\" ?\r\n \r\n :\r\n <>\r\n \r\n \r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return null\r\n }\r\n }\r\n}\r\n","import React, { useContext, useState, useLayoutEffect} from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\n\r\ntype ImgLoaderProp = {\r\n ActID:string\r\n}\r\n\r\nconst ImgLoader = (prop:ImgLoaderProp) => {\r\n \r\n const ws = useContext(WebServiceContext)\r\n const [pic, setPic]=useState(undefined) \r\n \r\n useLayoutEffect(()=>{\r\n ws.WebService.asyncGetActCover(prop.ActID).then((res: any) => {\r\n //setPic(\"data:image/png;base64,\" + res)\r\n //console.log(res)\r\n\r\n if (process.env.NODE_ENV !== \"development\") { \r\n setPic(res)\r\n }else{\r\n }\r\n })\r\n return\r\n },[prop])\r\n\r\n\r\n if (process.env.NODE_ENV !== \"development\") {\r\n return (\r\n \r\n )\r\n }else{\r\n return (\r\n
TEST
\r\n )\r\n }\r\n \r\n}\r\n\r\nexport default ImgLoader\r\n","import React, { useContext, useState, useLayoutEffect} from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\n\r\n\r\nconst PosterLoader = (props:AttachmentPostersProps) => {\r\n \r\n const ws = useContext(WebServiceContext)\r\n const [pic, setPic]=useState(undefined) \r\n \r\n useLayoutEffect(()=>{\r\n ws.WebService.asyncGetCardPoster(props.FPath).then((res: any) => {\r\n if(res ==\"取得圖片失敗\"){\r\n setPic(false)\r\n }else{\r\n setPic(res)\r\n }\r\n \r\n })\r\n return\r\n },[props])\r\n /*\r\n const imgStyle:React.CSSProperties=\r\n props.type == \"photo\"?\r\n {width:\"100%\", height:\"100%\", maxHeight:800, objectFit:\"contain\"}:\r\n props.type == \"icon\" &&\r\n {}\r\n */\r\n return (\r\n <>\r\n {\r\n pic == false ?\r\n \"圖片取得失敗\":\r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nexport default PosterLoader\r\n","import React, { useContext, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\r\nimport ServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from '../context/BasicContext'\r\nimport AnswerBtns from './AnswerBtns'\r\nimport FileUploader from './FileUploader'\r\nimport Questionnaire from \"./Questionnaire\";\r\n\r\nimport { HibModal } from \"./HibModal\";\r\nimport ImgLoader from './ImgLoader'\r\nimport AnswerInput from \"./AnswerInput\";\r\nimport { createElement } from 'react';\r\n\r\nimport { Close, Spinner } from './SVG'\r\nimport { centroid } from \"zrender/lib/tool/morphPath\";\r\nimport PosterLoader from \"./PosterLoader\";\r\n\r\n// Import Swiper React components\r\n\r\n// Import Swiper styles\r\nimport 'swiper/css';\r\nimport 'swiper/css/pagination';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport { Pagination } from 'swiper/modules';\r\nimport { FreeMode, Navigation, Thumbs } from 'swiper/modules';\r\n\r\n\r\ntype CardDetailProp = {\r\n cardData: CardProps | undefined\r\n}\r\n\r\n\r\ntype PerformanceTickets = {\r\n 競賽業績: number,\r\n 金張數: number,\r\n 銀張數: number,\r\n 銅張數: number,\r\n}\r\n\r\nconst money = (value: number) => {\r\n var formatter = new Intl.NumberFormat('en-US', {\r\n minimumFractionDigits: 0,\r\n });\r\n return formatter.format(value)\r\n}\r\n\r\nconst detectURL = (str: string) => {\r\n const pattern = new RegExp('(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z1-9\\.]{2,6})([\\/\\w \\.-]*)*\\/?', 'i');\r\n const res: RegExpMatchArray = str.match(pattern) as RegExpMatchArray\r\n if (res) {\r\n //console.log(str.split(\",\"))\r\n return createElement(\r\n 'span',\r\n null,\r\n str.split(res[0])[0],\r\n createElement('a', { href: res[0], target: \"_blank\" }, res[0]),\r\n (str.split(res[0])[1] ? str.split(res[0])[1] : null)\r\n );\r\n //return str.replace(res[0], `${res[0]}`)\r\n } else {\r\n return str\r\n }\r\n\r\n\r\n //return !!pattern.test(str);\r\n}\r\n\r\nexport default (props: CardDetailProp) => {\r\n const ws = useContext(ServiceContext)\r\n const bc = useContext(BasicContext)\r\n const [EID, setEID] = useState()\r\n const [PT, setPT] = useState()\r\n const [quests, setQuests] = useState([])\r\n const [openQuest, setOpenQuest] = useState(false)\r\n const [hasFile, setHasFile] = useState(false)\r\n\r\n //const [confirmTxt, setConfirmTxt] = useState>()\r\n //const [confirmTxt, setConfirmTxt] = useState(\"\")\r\n\r\n const [openReviewConfirm, setOpenReviewConfirm] = useState(false)\r\n const [openConfirm, setOpenConfirm] = useState(false)\r\n const [openNotToAttend, setOpenNotToAttend] = useState(false)\r\n const [openConfirmWithQuest, setOpenConfirmWithQuest] = useState(false)\r\n const [notDone, setNotDone] = useState(true)\r\n const [typeTitle, setTypeTitle] = useState<(string)>(\"\")\r\n\r\n const [nowTime, setNowTime] = useState<(number)>(new Date().getTime())\r\n const [beginTime, setBeginTime] = useState<(number)>(0)\r\n const [endTime, setEndTime] = useState<(number)>(0)\r\n\r\n const [modalPhoto, setModalPhoto] = useState(false)\r\n const [swiperIndex, setSwiperIndex] = useState(0);\r\n\r\n const sectionRef = useRef(null);\r\n\r\n const [openBtn, setOpenBtn] = useState(false)\r\n\r\n const closePanel = () => {\r\n bc.setActID(\"\")\r\n bc.setOpenCard(false)\r\n setOpenQuest(false)\r\n setNotDone(true)\r\n bc.setAnsList([])\r\n setOpenConfirm(false)\r\n setOpenReviewConfirm(false)\r\n setOpenConfirmWithQuest(false)\r\n setOpenNotToAttend(false)\r\n setHasFile(false)\r\n setOpenBtn(false)\r\n setQuests([])\r\n setEID(null)\r\n }\r\n\r\n const loadData = () => {\r\n ws.WebService.asyncGetActMainOtsList(bc.Class1).then((res: any) => {\r\n //console.log(res)\r\n bc.setCardList(res.Data as CardProps[])\r\n })\r\n }\r\n\r\n const gotoOnlineCourse = () => {\r\n if (props) {\r\n window.open(`../Ashx/GoOtherSite.ashx?SiteName=eLearning&cid=${props.cardData?.ActID}&IP=0.0.0.0&isComplete=0`, \"_blank\");\r\n }\r\n }\r\n\r\n const LessonDateFormat = (timestamp: string) => {\r\n const match: string[] = timestamp.match(/Date\\((\\d+)\\)/i) as string[]\r\n if (match) {\r\n const _d = new Date(parseInt(match[1]))\r\n return `\r\n ${_d.getFullYear()}/${((_d.getMonth() + 1) < 10 ? '0' : '')}${(_d.getMonth() + 1)}/${_d.getDate() < 10 ? '0' : ''}${_d.getDate()} \r\n ${_d.getHours() < 10 ? '0' : ''}${_d.getHours()}:${_d.getMinutes() < 10 ? '0' : ''}${_d.getMinutes()}\r\n `\r\n } else {\r\n return \" ----/--/-- \"\r\n }\r\n }\r\n\r\n const AnswerMyQ = (): Promise => {\r\n let sn: number = 0;\r\n return new Promise((resolve, reject) => {\r\n const doAnswer = (): boolean => {\r\n if ((bc.ansList[sn]?.ItemID || bc.ansList[sn]?.ItemTxt) && bc.ansList[sn]?.QSNo && props.cardData?.ExamID) {\r\n ws.WebService.asyncAnswerQuestionnaire(\r\n props.cardData?.ExamID,\r\n props.cardData?.ActID,\r\n parseInt(bc.ansList[sn].QSNo),\r\n bc.ansList[sn].ItemID ? bc.ansList[sn].ItemID : undefined,\r\n bc.ansList[sn].ItemTxt ? bc.ansList[sn].ItemTxt : undefined,\r\n ).then(res => {\r\n sn++\r\n //console.log(bc.ansList.length, sn)\r\n if (bc.ansList.length != sn) {\r\n doAnswer()\r\n } else {\r\n sn = 0\r\n resolve(true)\r\n }\r\n })\r\n }\r\n return true\r\n }\r\n\r\n bc.ansList.length != quests.length ?\r\n resolve(false)\r\n :\r\n doAnswer()\r\n })\r\n }\r\n\r\n const checkAnsTotal = () => {\r\n //let count: number = 0\r\n let countAry: string[] = []\r\n bc.ansList.map((item) => {\r\n if (item.ItemID) {\r\n countAry.push(item.ItemID)\r\n } else if (item.ItemTxt) {\r\n countAry.push(item.ItemTxt)\r\n }\r\n\r\n //count++\r\n })\r\n if (quests.length == countAry.length) {\r\n setNotDone(false)\r\n } else {\r\n setNotDone(true)\r\n\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n //bc.setAnswerList([])\r\n if (props.cardData && bc.openCard) {\r\n setNowTime(new Date().getTime())\r\n if (props.cardData && props.cardData.BeginTime) {\r\n const bt: string[] = props.cardData?.BeginTime?.toString().match(/Date\\((\\d+)\\)/i) as string[]\r\n setBeginTime(parseInt(bt[1]))\r\n } else {\r\n setBeginTime(0)\r\n }\r\n\r\n if (props.cardData && props.cardData.EndTime) {\r\n const et: string[] = props.cardData?.EndTime?.toString().match(/Date\\((\\d+)\\)/i) as string[]\r\n setEndTime(parseInt(et[1]))\r\n } else {\r\n setEndTime(0)\r\n }\r\n\r\n //問卷\r\n\r\n if (props.cardData && props.cardData.ExamID) {\r\n setEID(props.cardData.ExamID)\r\n ws.WebService.asyncGetQuestionnaire(props.cardData.ExamID)\r\n .then(res => {\r\n //console.log(res)\r\n const QRes = res as QuestRes[]\r\n setQuests(QRes)\r\n //已經有答題狀態,將修改按鈕打開\r\n setNotDone(!(bc.ansList.length == QRes.length))\r\n\r\n setOpenBtn(true)\r\n })\r\n } else {\r\n setOpenBtn(true)\r\n }\r\n\r\n //摸彩券\r\n /*\r\n if (props.cardData && props.cardData.ActID && (\r\n props.cardData.ActID == 'S20230001'\r\n || props.cardData.ActID == 'ADATEST01'\r\n )\r\n ) {a\r\n ws.WebService.asyncGetPerformanceTickets(112).then(res => {\r\n if (res) {\r\n setPT(res as PerformanceTickets)\r\n }\r\n })\r\n } else {\r\n setPT(null)\r\n }\r\n */\r\n //console.log(props.cardData)\r\n\r\n setOpenQuest([1, 7].indexOf(Number(props.cardData?.regState)) > -1)\r\n\r\n //setNotDone([1, 7].indexOf(Number(props.cardData?.regState)) < -1)\r\n bc.setActID(props.cardData.ActID)\r\n }\r\n return\r\n }, [props.cardData, bc.openCard])\r\n\r\n useEffect(() => {\r\n if (bc.openCard && EID && props.cardData?.ActID) {\r\n ws.WebService.asyncGetAnswer(props.cardData.ActID, EID).then(res => {\r\n if (res) {\r\n bc.setAnsList(res as ResAnswers[])\r\n }\r\n })\r\n }\r\n return\r\n }, [EID, bc.openCard])\r\n\r\n useEffect(() => {\r\n setTypeTitle(bc.Class1 == \"A\" ? \"活動\" : bc.Class1 == \"B\" ? \"課程\" : \"\")\r\n }, [bc.ActType])\r\n\r\n useEffect(() => {\r\n if (openQuest) {\r\n const _s = sectionRef.current as HTMLElement\r\n _s.scrollTo({\r\n top: 400,\r\n behavior: \"smooth\",\r\n })\r\n }\r\n }, [openQuest])\r\n\r\n const timeFormateA = (time: number): string => {\r\n return `${Math.floor(time / 60)}分`\r\n }\r\n\r\n const timeFormateB = (time: number, limit: number | null = null): string => {\r\n if (limit && time > limit) {\r\n return `${Math.floor(limit * 60)}分`\r\n } else {\r\n return `${Math.floor(time * 60)}分`\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {\r\n props.cardData ?\r\n
\r\n
\r\n
\r\n
\r\n {\r\n [\"dashboard\", \"list\", \"state\"].indexOf(bc.PID) > -1 &&\r\n
\r\n {\r\n props.cardData &&\r\n \r\n }\r\n
\r\n }\r\n {\r\n PT &&\r\n
\r\n
\r\n 您的111年度業績為:\r\n {money(PT.競賽業績)}元,\r\n 金券{PT.金張數 ? PT.金張數 : 0}張,\r\n 銀券{PT.銀張數 ? PT.銀張數 : 0}張,\r\n 銅券{PT.銅張數 ? PT.銅張數 : 0}張。\r\n
\r\n
\r\n }\r\n {\r\n props.cardData?.hours &&\r\n props.cardData?.ExamPaper == null &&\r\n
\r\n
課程時數
\r\n

{timeFormateB(props.cardData.hours)}

\r\n
\r\n }\r\n {\r\n props.cardData?.Hours1 &&\r\n props.cardData?.ExamPaper == null &&\r\n
\r\n
課程時數
\r\n

{timeFormateB(props.cardData.Hours1)}

\r\n
\r\n }\r\n {\r\n props.cardData?.WatchHours &&\r\n props.cardData?.ExamPaper == null &&\r\n
\r\n
觀看時數
\r\n

{timeFormateB(props.cardData.WatchHours, props.cardData.Hours1)}

\r\n
\r\n }\r\n {\r\n props.cardData?.ExamPaper != null &&\r\n props.cardData?.ExamScore != null &&\r\n
\r\n
您的分數
\r\n

{props.cardData.ExamScore}分

\r\n
\r\n }\r\n {\r\n props.cardData?.RecordTime &&\r\n
\r\n
觀看時數
\r\n

{timeFormateA(props.cardData.RecordTime)}

\r\n
\r\n }\r\n {\r\n props.cardData?.ActDate &&\r\n
\r\n
{typeTitle}時間
\r\n

{props.cardData.ActDate}

\r\n
\r\n }\r\n {\r\n props.cardData?.PublishDate &&\r\n
\r\n
上架日期
\r\n

\r\n {LessonDateFormat(props.cardData.PublishDate)}\r\n

\r\n
\r\n }\r\n {\r\n props.cardData?.BeginTime && props.cardData.EndTime &&\r\n
\r\n
報名起訖日
\r\n

\r\n {LessonDateFormat(props.cardData.BeginTime)} 至\r\n {LessonDateFormat(props.cardData.EndTime)}\r\n

\r\n
\r\n }\r\n {\r\n props.cardData?.Location &&\r\n
\r\n
地點
\r\n

{props.cardData.Location}

\r\n
\r\n\r\n }\r\n {\r\n props.cardData?.Speaker &&\r\n
\r\n
講師
\r\n

{props.cardData.Speaker}

\r\n
\r\n }\r\n\r\n {\r\n props.cardData?.Remark &&\r\n
\r\n
{typeTitle}備註
\r\n
\r\n

\r\n

\r\n                                                                    {props.cardData.Remark}\r\n                                                                
\r\n

\r\n
\r\n
\r\n }\r\n\r\n {\r\n props.cardData?.Url &&\r\n
\r\n
網址連結
\r\n {props.cardData.Url}\r\n
\r\n }\r\n\r\n {\r\n //20240731 卡片內海報\r\n props.cardData?.AttachmentPosters &&\r\n
\r\n
\r\n {\r\n (JSON.parse(props.cardData.AttachmentPosters) as AttachmentPostersProps[]).map(\r\n (item: AttachmentPostersProps, index: number) =>\r\n {\r\n setModalPhoto(true)\r\n setSwiperIndex(index)\r\n }}>\r\n \r\n \r\n )}\r\n
\r\n
\r\n }\r\n\r\n {\r\n //正取備取判斷 先不要用\r\n /*\r\n props.cardData?.regState != 1 && \r\n props.cardData?.acceptNum != undefined && \r\n props.cardData?.acceptNum != 0 && \r\n props.cardData?.RegTotal - props.cardData?.acceptNum >= 0 &&\r\n
\r\n

目前報名人數已達正取人數的上限,此次將以備取人數報名參加。

\r\n

備取順位:{\r\n (props.cardData?.RegTotal - props.cardData?.acceptNum )+1\r\n }

\r\n
\r\n */\r\n }\r\n\r\n{\r\n props.cardData?.RecognizeYear &&\r\n props.cardData?.ExamPaper == null &&\r\n
\r\n
認列年度
\r\n

{ props.cardData.RecognizeYear}

\r\n
\r\n }\r\n\r\n {\r\n props.cardData?.ExamPaperList &&\r\n
\r\n
{typeTitle}試卷列表
\r\n
\r\n {\r\n JSON.parse(props.cardData.ExamPaperList).map((item: ExamPaperListProps) =>\r\n \r\n )\r\n }\r\n
\r\n
\r\n }\r\n\r\n\r\n {\r\n [\"dashboard\", \"list\"].indexOf(bc.PID) > -1 &&\r\n
\r\n {\r\n props.cardData?.NoFilm != true &&\r\n {\r\n \r\n if(props.cardData?.ActType==\"C\"){\r\n alert(\"認列\")\r\n }\r\n \r\n if (props.cardData?.isComplete == 4) {\r\n setOpenReviewConfirm(true)\r\n } else {\r\n gotoOnlineCourse()\r\n }\r\n }}\r\n >\r\n \r\n 線上課程\r\n \r\n }\r\n {/* 不參考ExamPaper 改使用ExamPaperlist讀取複數卷\r\n props.cardData?.ExamPaper &&\r\n {\r\n //alert(\"我要測驗啦!!JOJO!!!!\")\r\n if (props.cardData?.ExamPaper != null) {\r\n bc.setPID('exam')\r\n bc.setExamPaper(props.cardData.ExamPaper.toString())\r\n }\r\n }}\r\n\r\n >\r\n \r\n 測驗卷\r\n \r\n\r\n */}\r\n\r\n
\r\n }\r\n\r\n\r\n\r\n\r\n {//需要上傳檔案\r\n nowTime > beginTime &&\r\n nowTime < endTime &&\r\n [\"event\", \"lession\"].indexOf(bc.PID) > -1 &&\r\n props.cardData &&\r\n props.cardData.needFile == true &&\r\n [0, 1, 3, 10].indexOf(Number(props.cardData?.regState)) > -1 && //判斷 0:可以報名 1:已報名 3:不參加 10:已取消 的狀態可以填寫資料 \r\n
\r\n
\r\n {\r\n props.cardData.editable == 1 &&\r\n {\r\n setHasFile(true)\r\n loadData()\r\n //console.log(props.cardData)\r\n }}\r\n />\r\n }\r\n
\r\n
\r\n }\r\n\r\n\r\n {\r\n nowTime > beginTime &&\r\n nowTime < endTime &&\r\n [\"event\", \"lession\"].indexOf(bc.PID) > -1 &&\r\n //props.cardData?.needFile == false &&\r\n [0, 1, 3, 10].indexOf(Number(props.cardData?.regState)) > -1 && //判斷 0:可以報名 1:已報名 3:不參加 10:已取消 的狀態可以填寫資料 \r\n
\r\n
\r\n {\r\n openBtn ?\r\n <>\r\n {\r\n [0].indexOf(Number(props.cardData?.regState)) > -1 ||\r\n ([3, 10].indexOf(Number(props.cardData?.regState)) > -1 && props.cardData?.editable == 1) ?\r\n ) => {\r\n quests.length > 0 ?\r\n props.cardData &&\r\n setOpenQuest(true)\r\n :\r\n props.cardData &&\r\n setOpenConfirm(true)\r\n\r\n //20240505新增正取人數警語\r\n\r\n }}\r\n >{quests.length > 0 ? \"填寫問卷並報名\" : \"我要報名\"} : \"\"\r\n }\r\n {\r\n props.cardData?.notjoin == true &&\r\n [0].indexOf(Number(props.cardData?.regState)) > -1 &&\r\n {\r\n setOpenNotToAttend(true)\r\n }}\r\n >不參加\r\n }\r\n {\r\n props.cardData?.editable == 1 &&\r\n [1].indexOf(Number(props.cardData?.regState)) > -1 &&\r\n props.cardData?.editable == 1 &&\r\n {\r\n setOpenNotToAttend(true)\r\n }}\r\n >取消報名\r\n }\r\n \r\n :\r\n \r\n }\r\n
\r\n\r\n
\r\n }\r\n\r\n {\r\n quests && quests.length > 0 && openQuest && props.cardData &&\r\n
\r\n {\r\n setNotDone(complete)\r\n })}\r\n />\r\n\r\n {\r\n [0, 3, 10].indexOf(Number(props.cardData?.regState)) > -1 &&\r\n {\r\n setOpenConfirmWithQuest(true)\r\n }}\r\n >送出\r\n\r\n }\r\n {\r\n (Number(props.cardData?.regState) == 1 && props.cardData?.editable == 1) &&\r\n {\r\n setOpenConfirmWithQuest(true)\r\n }}\r\n >修改\r\n }\r\n
\r\n }\r\n {\r\n\r\n quests && quests.length > 0 && openQuest &&\r\n
\r\n
問卷調查
\r\n {/*\r\n quests.map((quest: QuestRes, index: number) => {\r\n\r\n return (\r\n
\r\n
{index + 1}. {detectURL(quest.QName)}
\r\n
\r\n {\r\n quest.QType == 3 ?\r\n -1 &&\r\n props.cardData?.editable == 0\r\n ) == true\r\n }\r\n defAns={bc.ansList[index]?.ItemTxt}\r\n //defAns={[1, 7].indexOf(Number(props.cardData?.regState)) > -1 ? quest.defAns : undefined}\r\n //showAns={[1, 7].indexOf(Number(props.cardData?.regState)) > -1 ? quest.defAns : undefined}\r\n serial={index}\r\n QSNo={quest.QSNo}\r\n checker={checkAnsTotal}\r\n //jsonString={quest.Answers}\r\n /> :\r\n -1 ? quest.defAns : undefined}\r\n defAns={bc.ansList[index]?.ItemID}\r\n showAns={\r\n (\r\n [1, 7].indexOf(Number(props.cardData?.regState)) > -1 &&\r\n props.cardData?.editable == 0\r\n ) == true\r\n }\r\n serial={index}\r\n QSNo={quest.QSNo}\r\n jsonString={quest.Answers}\r\n checker={checkAnsTotal}\r\n />\r\n }\r\n
\r\n
\r\n )\r\n\r\n })\r\n */}\r\n {/*\r\n notDone &&\r\n

填寫或修改全部的問卷內容即可送出

\r\n */}\r\n {/*\r\n [0, 3, 10].indexOf(Number(props.cardData?.regState)) > -1 &&\r\n {\r\n setOpenConfirmWithQuest(true)\r\n }}\r\n >送出\r\n\r\n */}\r\n {/*\r\n (Number(props.cardData?.regState) == 1 && props.cardData?.editable == 1) &&\r\n {\r\n setOpenConfirmWithQuest(true)\r\n }}\r\n >修改\r\n */}\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n :\r\n \r\n }\r\n
\r\n
\r\n
\r\n\r\n {\r\n gotoOnlineCourse()\r\n closePanel()\r\n }}\r\n cancel={() => {\r\n setOpenReviewConfirm(false)\r\n }}\r\n >您已經完成本次課程,請問是否重新觀看?此次觀看將不列入課程時數。\r\n \r\n\r\n {\r\n if (props.cardData) {\r\n ws.WebService.asyncDoApplyCourse(\r\n props.cardData.ActID,\r\n (\r\n (props.cardData.regState == 10 && props.cardData.StateDefault == \"N\") ? \"Y\" :\r\n props.cardData.StateDefault == \"N\" ? \"N\" :\r\n \"Y\"\r\n )\r\n ).then(res => {\r\n loadData()\r\n closePanel()\r\n })\r\n }\r\n }}\r\n cancel={() => {\r\n setOpenConfirm(false)\r\n }}\r\n >\r\n\r\n\r\n 確認是否報名?\r\n {\r\n props.cardData?.editable == 0 &&\r\n \"一但確認後,恕無法更改!\"\r\n }\r\n \r\n\r\n {\r\n if (props.cardData) {\r\n ws.WebService.asyncDoApplyCourse(\r\n props.cardData.ActID,\r\n Number(props.cardData?.regState) == 1 ?\r\n \"C\" :\r\n \"X\"\r\n ).then(res => {\r\n loadData()\r\n closePanel()\r\n })\r\n }\r\n }}\r\n cancel={() => {\r\n setOpenNotToAttend(false)\r\n }}\r\n >\r\n {\r\n Number(props.cardData?.regState) == 1 ?\r\n \"確認是否取消本次活動?\" :\r\n \"確認是否不參與本次活動?\"\r\n }\r\n \r\n\r\n {\r\n if (props.cardData) {\r\n ws.WebService.asyncDoApplyCourse(\r\n props.cardData.ActID,\r\n (\r\n (props.cardData.regState == 10 && props.cardData.StateDefault == \"N\") ? \"Y\" :\r\n props.cardData.StateDefault == \"N\" ? \"N\" :\r\n \"Y\"\r\n )\r\n ).then(res => {\r\n return AnswerMyQ()\r\n }).then(res => {\r\n if (res) {\r\n loadData()\r\n closePanel()\r\n }\r\n })\r\n }\r\n }}\r\n cancel={() => {\r\n setOpenConfirmWithQuest(false)\r\n }}\r\n >\r\n 確認是否報名?\r\n {\r\n props.cardData?.editable == 0 &&\r\n

\r\n 一但確認後,恕無法更改!\r\n

\r\n }\r\n {\r\n\r\n bc.ansList &&\r\n bc.ansList.length > 0 &&\r\n
\r\n 您的問卷內容\r\n {\r\n bc.ansList.map((item: ResAnswers, index: number) => {\r\n if (item.ItemID && item.ItemID != \"\") {\r\n return (\r\n
\r\n
\r\n Q{index + 1}. {item.qtxt}\r\n
\r\n
\r\n {item.ansTxt}\r\n
\r\n
\r\n )\r\n }\r\n else if (item.ItemTxt) {\r\n return (\r\n
\r\n
\r\n Q{index + 1}. {item.qtxt}\r\n
\r\n
\r\n {item.ItemTxt}\r\n
\r\n
\r\n )\r\n }\r\n })\r\n }\r\n
\r\n }\r\n \r\n\r\n {\r\n /**20240731 卡片內的海報點選彈跳視窗*/\r\n props.cardData && props.cardData.AttachmentPosters &&\r\n {\r\n setModalPhoto(false)\r\n }}\r\n >\r\n
\r\n\r\n console.log('slide change')}\r\n onSwiper={(swiper) => console.log(swiper)}\r\n >\r\n {\r\n\r\n (JSON.parse(props.cardData.AttachmentPosters) as AttachmentPostersProps[]).map(\r\n (item: AttachmentPostersProps) =>\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n
\r\n \r\n }\r\n \r\n )\r\n}\r\n\r\n","let myChart;\r\nexport default (ID, chartContainer, data) => {\r\n return new Promise((resolve, reject) => {\r\n console.log(\"init HibLawStateNew\");\r\n //法遵上課區間\r\n const d = new Date() //時間\r\n //var dom = document.getElementById(ID);\r\n\r\n //let dom = document.querySelector(ID + \" .chartContainer\")\r\n let dom = chartContainer\r\n dom.innerHTML =\"123\"\r\n //let tContainer = document.querySelector(ID + \" .tableContainer\")\r\n myChart = echarts.init(dom);\r\n var app = {};\r\n let xLabels = [];\r\n let lifeStart = 0;\r\n let lifeEnd = 1;\r\n let propStart = 0;\r\n let propEnd = 1;\r\n let bestStart = 0;\r\n let bestEnd = 1;\r\n\r\n const setRuler = (startData, endData) => {\r\n let xLabels = [];\r\n const sy = parseInt(startData.substr(0, 3))\r\n const sm = parseInt(startData.substr(3, 2))\r\n const ey = parseInt(endData.substr(0, 3))\r\n const em = parseInt(endData.substr(3, 2))\r\n\r\n let cy = sy;\r\n let cm = sm;\r\n let sw = true;\r\n let safe = 0; //避免無限迴圈使用\r\n let bk = false;\r\n\r\n while (sw) {\r\n xLabels.push(cy.toString()+\"年\" + (cm < 10 ? \"0\" + cm.toString() : cm.toString())+\"月\");\r\n if (cm >= 12) {\r\n cy++;\r\n cm = 1;\r\n } else {\r\n cm++\r\n }\r\n //console.log(cy, cm)\r\n if (cy == ey && cm == em + 3) {\r\n xLabels.push(cy.toString()+\"年\" + (cm < 10 ? \"0\" + cm.toString() : cm.toString())+\"月\");\r\n sw = false;\r\n };\r\n safe++;\r\n if (safe > 24) {\r\n console.log(\"setRuler 無限迴圈 請檢查正確數值\")\r\n sw = false;\r\n }\r\n }\r\n return xLabels;\r\n }\r\n\r\n const getRulerValue = date => {\r\n\r\n if (!date) {\r\n return 0\r\n }\r\n\r\n let _v = 1;\r\n for (const item of xLabels) {\r\n let _d = item.replace(\"年\",\"\")\r\n _d = _d.replace(\"月\",\"\")\r\n\r\n //if (date.substr(0, 5) == item) {\r\n if (date.substr(0, 5) == _d) {\r\n break\r\n }\r\n _v++;\r\n }\r\n return _v;\r\n }\r\n\r\n const initCtData = data => {\r\n return new Promise((resolve, reject) => {\r\n let LDate = data.LBetween ? data.LBetween.split(\" ~ \") : \"\"\r\n let RDate = data.RBetween ? data.RBetween.split(\" ~ \") : \"\";\r\n //let SDate = data.SuggestDate.split(\" ~ \")\r\n let SDate = data.SuggestDateHalfYear.split(\" ~ \")\r\n\r\n\r\n if (LDate !== \"\" && RDate !== \"\") {\r\n\r\n xLabels = setRuler(\r\n parseInt(LDate[0]) < parseInt(RDate[0]) ? LDate[0] : RDate[0],\r\n parseInt(LDate[1]) > parseInt(RDate[1]) ? LDate[1] : RDate[1]\r\n )\r\n } else if (LDate !== \"\" && RDate === \"\") {\r\n xLabels = setRuler(LDate[0], LDate[1])\r\n } else if (LDate === \"\" && RDate !== \"\") {\r\n xLabels = setRuler(RDate[0], RDate[1])\r\n } else {\r\n resolve(false)\r\n }\r\n\r\n lifeStart = getRulerValue(LDate[0])\r\n lifeEnd = getRulerValue(LDate[1])\r\n propStart = getRulerValue(RDate[0]);\r\n propEnd = getRulerValue(RDate[1]);\r\n bestStart = getRulerValue(SDate[0]);\r\n bestEnd = getRulerValue(SDate[1]);\r\n\r\n // myData.datasets[1].data[0].x = getRulerValue(SDate[0]);\r\n //myData.datasets[1].data[1].x = getRulerValue(SDate[1]);\r\n\r\n /* if (LDate == \"\" || RDate == \"\") {\r\n resolve(false)\r\n } else {\r\n resolve(true)\r\n }*/\r\n })\r\n }\r\n\r\n const init = async () => {\r\n //const timeline = await getTimeline();\r\n const timeline = data\r\n //console.log(timeline)\r\n if (timeline.LYear != null || timeline.RYear != null) {\r\n initCtData(timeline);\r\n myChart.setOption({\r\n title: {\r\n text: timeline.LYear ? timeline.LYear + '年度' : timeline.RYear + '年度',\r\n left: 'center'\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n axisPointer: {\r\n type: 'cross'\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n // prettier-ignore\r\n data: xLabels,\r\n axisLabel: {\r\n textStyle: {\r\n fontSize: 11,\r\n }\r\n }\r\n },\r\n yAxis: {\r\n splitNumber: 2,\r\n axisLabel: {\r\n interval: 1,\r\n fontSize: 14,\r\n formatter: (index) => {\r\n return ['', '壽險', '產險'][index]\r\n }\r\n }\r\n },\r\n series: [{\r\n name: '壽險',\r\n type: 'line',\r\n data: [{\r\n \"value\": [lifeStart, 2]\r\n },\r\n {\r\n \"value\": [lifeEnd, 2]\r\n },\r\n ]\r\n }, {\r\n name: '產險',\r\n type: 'line',\r\n data: [{\r\n \"value\": [propStart, 1]\r\n },\r\n {\r\n \"value\": [propEnd, 1]\r\n },\r\n ]\r\n }, {\r\n name: '現在所在區間',\r\n // prettier-ignore\r\n type: 'line',\r\n markPoint: {\r\n symbol: 'triangle',\r\n data: [{\r\n name: '現在區間',\r\n value: \"現在區間\",\r\n xAxis: getRulerValue((d.getYear() - 11).toString() + d.getMonth().toString()),\r\n yAxis: 0\r\n }],\r\n symbolSize: 10,\r\n symbolOffset: [0, 30],\r\n label: {\r\n color: \"#000\",\r\n fontSize: 24,\r\n position: 'bottom'\r\n }\r\n\r\n },\r\n\r\n data: [{\r\n \"value\": [getRulerValue((d.getYear() - 11).toString() + d.getMonth().toString()), 0],\r\n \"name\": \"wade\",\r\n\r\n },\r\n {\r\n \"value\": [getRulerValue((d.getYear() - 11).toString() + d.getMonth().toString()), 2],\r\n \"name\": \"wade\"\r\n },\r\n ],\r\n smooth: true,\r\n stack: 'a',\r\n symbol: 'circle',\r\n symbolSize: 5,\r\n sampling: 'average',\r\n itemStyle: {\r\n color: '#F2597F',\r\n },\r\n markArea: {\r\n label: {\r\n fontSize: 16,\r\n color: '#F30'\r\n },\r\n itemStyle: {\r\n color: 'rgba(255, 173, 177, 0.4)'\r\n },\r\n data: [\r\n [{\r\n name: '最佳上課區間',\r\n xAxis: bestStart\r\n }, {\r\n xAxis: bestEnd\r\n }]\r\n ]\r\n }\r\n }]\r\n });\r\n\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n if (myChart != null && myChart != undefined) {\r\n myChart.resize();\r\n }\r\n });\r\n\r\n init().then(res => {\r\n resolve(myChart)\r\n })\r\n })\r\n}\r\n\r\nexport const resizeChart =()=>{\r\n if(myChart){\r\n myChart.resize()\r\n }\r\n}","import React, { useEffect, useContext, useRef, useState } from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from \"../context/BasicContext\";\r\n\r\n\r\nimport LawChart, { resizeChart } from \"../js/LawChart\"\r\nimport { Close } from \"./SVG\";\r\n\r\n\r\ntype ChartAProps = {\r\n hasDetail?: boolean,\r\n setOpen?: boolean,\r\n setClose?: () => void,\r\n}\r\n\r\nexport default (props: ChartAProps) => {\r\n\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n\r\n const chart = useRef(null)\r\n const [open, setMyOpen] = useState()\r\n\r\n const [stateData, setStateData] = useState()\r\n\r\n\r\n useEffect(() => {\r\n setMyOpen(props.setOpen)\r\n setTimeout(() => {\r\n resizeChart()\r\n }, 100);\r\n\r\n }, [props.setOpen])\r\n\r\n const closePanel = () => {\r\n if (props.setClose) {\r\n props.setClose()\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n ws.WebService.asyncGetLowStateInfo().then(res => {\r\n //console.log(res as LowStateInfo[])\r\n setStateData(res as LowStateInfo[])\r\n })\r\n return\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (chart) {\r\n //HibLawStateNew(chart)\r\n ws.WebService.asyncGetLowStateDashboard().then((res) => {\r\n let d: ResDatas = res as ResDatas\r\n LawChart(\"\", chart.current, d)\r\n })\r\n }\r\n return\r\n }, [chart])\r\n\r\n\r\n if (props.hasDetail) {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
法令遵循課程狀態
\r\n
\r\n\r\n
\r\n
\r\n

\r\n 產壽險公會的法遵課程為分別認列,且需各自一年內完訓,課程完課時間落在產壽交叉區間,認證可同時認列。\r\n 請參考下圖粉紅色交叉區域(示意圖), 正確日期請參考建議上課區間
\r\n 業務員僅有壽險或產險證照,於一年內完訓即可。\r\n

\r\n
    \r\n
  • 註1: 未完訓者將依保險業務員管理規則第13條第1項辦理撤銷。
  • \r\n
  • 註2: 有法遵課程疑問請洽總公司。
  • \r\n
  • 註3: 完訓課程數以公會為準,本頁顯示課程數為收到公會回覆之現況。
  • \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n stateData?.map((item: LowStateInfo, index: number) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
課程名稱完訓時間適用壽險年期適用產險年期
{item.CosName}{item.CompleteDate}{item.LYear ? item.LYear : \"無\"}{item.RYear ? item.RYear : \"無\"}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n } else {\r\n return (\r\n
\r\n )\r\n\r\n }\r\n\r\n\r\n}\r\n","import React, { useEffect, useContext, useRef, useState } from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from \"../context/BasicContext\";\r\ntype ChartBProps = {\r\n /*\r\n hasDetail?: boolean,\r\n setOpen?: boolean,\r\n setClose?: () => void,\r\n */\r\n CurrentYear:number\r\n ActType:string\r\n \r\n}\r\n\r\ntype ResData = {\r\n actID:string\r\n Hours:number\r\n CompleteDate:string\r\n}\r\n\r\nexport default (props: ChartBProps) => {\r\n const bc = useContext(BasicContext)\r\n const ws = useContext(WebServiceContext)\r\n\r\n const [isCompleteTotal, setIsCompleteTotal] = useState(0)\r\n\r\n useEffect(()=>{\r\n ws.WebService.getLRStatus(props.ActType).then((res:any)=>{\r\n console.log(res)\r\n let ct:number = 0;\r\n (res.Data as ResData[]).map((item:ResData)=>{\r\n if(item.CompleteDate != null){\r\n ct+=item.Hours\r\n }\r\n })\r\n setIsCompleteTotal(ct)\r\n\r\n })\r\n return\r\n },[])\r\n \r\n \r\n return(\r\n
\r\n {\r\n isCompleteTotal==12?\r\n \r\n 恭喜!您已經完成\r\n \r\n {\r\n props.ActType==\"H\"?\"產\":\"壽\"\r\n }\r\n \r\n 險第{props.CurrentYear}年度的所有課程。\r\n :\r\n \r\n {\r\n props.ActType==\"H\"?\"產\":\"壽\"\r\n }\r\n 險第{props.CurrentYear}年度:目前已完成{isCompleteTotal}小時的課程,尚有{6-isCompleteTotal}小時的課程。\r\n \r\n }\r\n
\r\n )\r\n \r\n}\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from \"../context/BasicContext\";\r\nimport CardDetail from \"./CardDetail\";\r\nimport { SpinnerSvg, BookDot } from \"./SVG\"\r\nimport ImgLoader from \"./ImgLoader\";\r\nimport ChartA from \"./ChartA\";\r\nimport ChartB from \"./ChartB\";\r\n\r\n//過濾條件用的temp物件\r\ntype TO= {\r\n [key: string]: string\r\n}\r\n\r\ntype PDO= {\r\n [key: string]: string\r\n}\r\n\r\nconst CardList = (/*props:CardProps*/) => {\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n\r\n //const [Cards, setCards] = useState<(CardProps)[]>([])\r\n const [nowCard, setNowCards] = useState<(CardProps)>()\r\n \r\n //分類相關20230628\r\n const [properties, setProperties] = useState([])\r\n const [propertiesDictionary, setPropertiesDictionary] = useState({})\r\n\r\n const [pCurrentCode, setPCurrentCode] = useState(\"all\")//現在取得的正確分類\r\n \r\n const LessonDateFormat = (timestamp: string) => {\r\n const match: string[] = timestamp.match(/Date\\((\\d+)\\)/i) as string[]\r\n const _d = new Date(parseInt(match[1]))\r\n return _d.getFullYear() + \"/\" + (_d.getMonth() + 1) + \"/\" + _d.getDate()\r\n }\r\n \r\n const [LCurrentYear, setLCurrentYear] = useState(0)\r\n const [RCurrentYear, setRCurrentYear] = useState(0)\r\n\r\n const loadData = ()=>{\r\n bc.setCardList(undefined)\r\n \r\n /*\r\n ws.WebService.LRCurrentYearCheck().then((res:any)=>{\r\n if(res && res.Data[0].LCurrentYear) setLCurrentYear(res.Data[0].LCurrentYear)\r\n if(res && res.Data[0].RCurrentYear) setRCurrentYear(res.Data[0].RCurrentYear)\r\n \r\n if (bc.ActType == \"B\" || bc.Class2 == \"C\" || bc.Class2 == \"H\"){\r\n\r\n return ws.WebService.getActMainList(bc.ActType, bc.Class2)\r\n }else{\r\n return ws.WebService.getActMainList(bc.ActType, bc.Class2)\r\n }\r\n })\r\n */\r\n\r\n \r\n ws.WebService.getActMainList(bc.ActType, bc.Class2).then((res: any) => { \r\n console.log(res)\r\n const temp: (CardProps)[] = [] \r\n if (bc.ActType == \"A\" && bc.Class2 == \"\") {\r\n \r\n res.Data.map((item: any) => {\r\n const _c: CardProps = item as CardProps \r\n if (_c.ActType == \"A\") temp.push(_c)\r\n })\r\n }else if (bc.ActType == \"A\") { \r\n res.Data.map((item: any) => {\r\n const _c: CardProps = item as CardProps\r\n _c.isComplete = item.Complete != null ? 4:0 \r\n temp.push(_c)\r\n })\r\n }else {\r\n /*\r\n //2025新增 壽產認列的年度\r\n const total:number = res.Data.reduce((a:number,c:CardProps)=>{ \r\n return (c.RecognizeYear !=null && c.RecordCompleteDate !=null && c.Hours1? a+c.Hours1: a+0)\r\n },0)\r\n */\r\n //console.log(total)\r\n res.Data.map((item: any) => {\r\n const _c: CardProps = item as CardProps \r\n if(item.Complete){\r\n _c.isComplete = item.Complete != null ? 4:0\r\n }\r\n temp.push(_c)\r\n \r\n /*\r\n //如果認列的年度滿6小時 只顯示已經完成並認列的年度 \r\n if(total>=6){\r\n _c.RecognizeYear == LCurrentYear && temp.push(_c)\r\n }else{\r\n temp.push(_c)\r\n }*/\r\n })\r\n }\r\n \r\n //20230628設定過濾條件\r\n let to:TO={\"all\":\"顯示全部\"}\r\n let PD:PDO={}\r\n temp.map((item:CardProps)=>{\r\n item.propertyCodes=[];\r\n if(item.jPropertys){\r\n const _ps:Properties[] = JSON.parse(item.jPropertys) as Properties[]\r\n //將課程分類編號加入至propertyCodes\r\n _ps.map((p:Properties)=>{\r\n item.propertyCodes.push(p.PropertyCode) \r\n to ={...to,[p.PropertyCode]:p.PropertyName}\r\n PD[p.PropertyCode] = p.PropertyName\r\n })\r\n \r\n }\r\n })\r\n let to2:Properties[] = []\r\n for(const key in to){\r\n to2.push({\r\n PropertyCode:key,\r\n PropertyName:to[key],\r\n } as Properties)\r\n }\r\n setProperties(to2)\r\n setPropertiesDictionary(PD)\r\n //20230628設定過濾條件end\r\n\r\n //console.log(temp)\r\n bc.setCardList(temp) \r\n })\r\n }\r\n\r\n useEffect(() => {\r\n loadData()\r\n }, [bc.Class2])\r\n\r\n //判斷預設是不是要開啟課程卡片\r\n useEffect(() => {\r\n if(bc.cardList && bc.ActID){\r\n bc.cardList.map((card: CardProps, index: number) => {\r\n if(card.ActID == bc.ActID){\r\n bc.setOpenCard(true)\r\n setNowCards(card)\r\n }\r\n })\r\n }\r\n },[bc.ActID, bc.cardList])\r\n\r\n\r\n\r\n const timeFormateA = (time:number):string=>{\r\n return `${Math.floor(time/60)}分`\r\n }\r\n\r\n const timeFormateB = (time:number, limit:number|null=null):string=>{\r\n //console.log(time, limit)\r\n if(limit && time>limit ){\r\n return `${Math.floor(limit*60)}分`\r\n }else{\r\n return `${Math.floor(time*60)}分`\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n bc.ActType == \"A\" &&\r\n \r\n }\r\n\r\n {\r\n (bc.ActType == \"B\"|| bc.ActType == \"C\"|| bc.ActType == \"H\") &&\r\n \r\n }\r\n \r\n
\r\n \r\n \r\n
\r\n {\r\n //Cards.length == 0 &&\r\n bc.cardList == undefined ?\r\n
\r\n \r\n
:\r\n bc.cardList.length == 0 ?\r\n
\r\n
\r\n \r\n 此分類目前沒有課程。\r\n
\r\n
: \"\"\r\n }\r\n \r\n {\r\n //Cards.map((card: CardProps, index: number) => {\r\n bc.cardList &&\r\n bc.cardList.map((card: CardProps, index: number) => {\r\n //console.log(card)\r\n //過濾條件\r\n //pCurrentCode會去比對卡片中的propertyCodes代號是不是有符合選擇的類別\r\n let hit:boolean = false\r\n if(pCurrentCode == \"all\"){\r\n hit= true\r\n }else if(card.propertyCodes.indexOf(pCurrentCode) != -1){\r\n hit= true\r\n }\r\n if(hit){\r\n //console.log(card)\r\n \r\n return (\r\n {\r\n bc.setOpenCard(true)\r\n bc.setActID(card.ActID)\r\n setNowCards(card)\r\n }}\r\n >\r\n
\r\n \r\n {\r\n bc.Class2 == 'B' ?\"銷售資格\":\r\n bc.Class2 == 'C' ?\"專業課程\":\"法定課程\"\r\n }\r\n \r\n {\r\n /**\r\n \r\n */\r\n }\r\n
{card.ActTitle}
\r\n
\r\n
\r\n {\r\n card.propertyCodes.map((PID:string, index:number)=> \r\n \r\n )\r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {\r\n /*\r\n card.cover ?\r\n :\r\n */\r\n }\r\n\r\n \r\n \r\n {\r\n (card.isComplete == 4 || card.RecordCompleteDate) &&\r\n
已完成
\r\n }\r\n {\r\n card.isComplete == 1 &&\r\n
通報中
\r\n }\r\n {\r\n card.isComplete == 2 &&\r\n
未取得完訓碼
\r\n }\r\n \r\n {\r\n card.ExamScore != null &&\r\n
測驗通過
\r\n }\r\n\r\n {\r\n /**\r\n
已報名
\r\n */\r\n }\r\n\r\n
\r\n
\r\n {\r\n //測驗卷不須課程時數\r\n !card.ExamPaper &&\r\n
\r\n 課程時數\r\n {\r\n card.Hours1?\r\n timeFormateB(card.Hours1):\r\n card.hours?\r\n `${Math.round(card.hours*60)}分`:0\r\n }\r\n
\r\n }\r\n {\r\n card.ExamPaper && card.ExamScore ?\r\n
\r\n 您的分數\r\n \r\n {card.ExamScore}分\r\n \r\n
\r\n :\r\n
\r\n 完成時數\r\n \r\n {\r\n card.RecordTime ? \r\n timeFormateA(card.RecordTime):\r\n card.WatchHours?\r\n timeFormateB(card.WatchHours, card.Hours1):0\r\n }\r\n \r\n
\r\n }\r\n
\r\n 上架日期\r\n \r\n {\r\n //card.PublishDate\r\n LessonDateFormat(card.PublishDate)\r\n }\r\n \r\n
\r\n {\r\n bc.ActType && (bc.ActType == \"B\" || bc.ActType == \"C\" || bc.ActType == \"H\")&&\r\n
\r\n 認列年度\r\n \r\n {\r\n card.RecognizeYear ?\r\n (\r\n (bc.ActType==\"B\" || bc.ActType==\"C\")?\"壽險第\":\r\n bc.ActType==\"H\"?\"產險第\":\"\"\r\n )+card.RecognizeYear+\"年度\":\r\n \"尚未認列\"\r\n }\r\n \r\n
\r\n }\r\n {\r\n /** \r\n
\r\n 已報名人數\r\n 0人\r\n
\r\n
\r\n 上限/下限\r\n \r\n 0/\r\n 0人\r\n \r\n
\r\n
\r\n 報名日期\r\n \r\n
\r\n \r\n
\r\n 截止日期\r\n \r\n
\r\n */\r\n }\r\n\r\n
\r\n
\r\n
\r\n )\r\n }\r\n })\r\n }\r\n
\r\n \r\n \r\n\r\n\r\n\r\n \r\n )\r\n}\r\n\r\n\r\n\r\nexport default CardList","import React, { useContext, useEffect, useState } from \"react\";\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from \"../context/BasicContext\";\r\nimport CardDetail from \"./CardDetail\";\r\n\r\nimport { SpinnerSvg, BookDot } from \"./SVG\"\r\n\r\n\r\n\r\n//過濾條件用的temp物件\r\ntype TO = {\r\n [key: string]: string\r\n}\r\n\r\ntype PDO = {\r\n [key: string]: string\r\n}\r\n\r\n//法遵用\r\ntype JHoursProp = {\r\n CourseHours: number | 0\r\n}\r\n\r\nexport default (/*props:CardProps*/) => {\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n\r\n //const [Cards, setCards] = useState<(CardProps)[]>([])\r\n const [nowCard, setNowCards] = useState<(CardProps)>()\r\n const [typeTitle, setTypeTitle] = useState<(string)>(\"\")\r\n\r\n //分類相關20230628\r\n const [properties, setProperties] = useState([])\r\n const [propertiesDictionary, setPropertiesDictionary] = useState({})////以ID查詢分類的中文\r\n const [pCurrentCode, setPCurrentCode] = useState(\"all\")//現在取得的正確分類\r\n\r\n const getTimestamp = (timestamp: string) => {\r\n const match: string[] = timestamp.match(/Date\\((\\d+)\\)/i) as string[]\r\n return parseInt(match[1])\r\n }\r\n\r\n\r\n const LessonDateFormat = (timestamp: string) => {\r\n const match: string[] = timestamp.match(/Date\\((\\d+)\\)/i) as string[]\r\n\r\n if (match) {\r\n const _d = new Date(parseInt(match[1]))\r\n return `\r\n ${_d.getFullYear()}/${((_d.getMonth() + 1) < 10 ? '0' : '')}${(_d.getMonth() + 1)}/${_d.getDate() < 10 ? '0' : ''}${_d.getDate()} \r\n ${_d.getHours() < 10 ? '0' : ''}${_d.getHours()}:${_d.getMinutes() < 10 ? '0' : ''}${_d.getMinutes()}\r\n `\r\n }\r\n }\r\n const LessonDateFormat2 = (timeString: string) => {\r\n return `\r\n ${1911 + parseInt(timeString.slice(0, 3))}/${(timeString.slice(3, 5))}/${(timeString.slice(5, 7))}\r\n `\r\n }\r\n\r\n const loadData = () => {\r\n ws.WebService.asyncGetActMainOtsList(bc.Class1).then((res: any) => {\r\n ////setCards(res.Data as CardProps[])\r\n\r\n\r\n console.log(res)\r\n const temp: (CardProps)[] = res.Data as CardProps[]\r\n\r\n //20230628設定過濾條件\r\n let to: TO = { \"all\": \"顯示全部\" }\r\n let PD: PDO = {}\r\n temp.map((item: CardProps) => {\r\n item.propertyCodes = [];\r\n if (item.jPropertys) {\r\n const _ps: Properties[] = JSON.parse(item.jPropertys) as Properties[]\r\n //將課程分類編號加入至propertyCodes\r\n _ps.map((p: Properties) => {\r\n item.propertyCodes.push(p.PropertyCode)\r\n to = { ...to, [p.PropertyCode]: p.PropertyName }\r\n PD[p.PropertyCode] = p.PropertyName\r\n })\r\n }\r\n })\r\n let to2: Properties[] = []\r\n for (const key in to) {\r\n to2.push({\r\n PropertyCode: key,\r\n PropertyName: to[key],\r\n } as Properties)\r\n }\r\n setProperties(to2)\r\n setPropertiesDictionary(PD)\r\n //20230628設定過濾條件end\r\n\r\n bc.setCardList(temp)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n loadData();\r\n //法定必修\r\n //選修課程\r\n //console.log(bc.Class1)\r\n setTypeTitle(bc.Class1 == \"A\" ? \"活動\" : bc.Class1 == \"B\" ? \"課程\" : \"\")\r\n return\r\n }, [bc.Class1])\r\n\r\n useEffect(() => {\r\n //預設的Menu ID\r\n if (!bc.BID) {\r\n bc.setBID(bc.PID)\r\n }\r\n //console.log(bc.BID)\r\n }, [bc.PID])\r\n\r\n\r\n //判斷預設是不是要開啟課程卡片\r\n useEffect(() => {\r\n /*\r\n console.log(\"cardList\", bc.cardList )\r\n console.log(\"ActID\", bc.ActID)*/\r\n\r\n if (bc.cardList && bc.ActID) {\r\n bc.cardList.map((card: CardProps, index: number) => {\r\n if (card.ActID == bc.ActID) {\r\n bc.setOpenCard(true)\r\n setNowCards(card)\r\n }\r\n\r\n })\r\n }\r\n }, [bc.ActID, bc.cardList])\r\n /*\r\n const RegSerialFilter = (dataString:string):number=>{\r\n const data:{Serial:string; Account:string}[] = JSON.parse(dataString)\r\n data.map(item=>{\r\n })\r\n console.log(data)\r\n return 0\r\n }\r\n */\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n\r\n {\r\n //header\r\n\r\n bc.cardList &&\r\n bc.cardList.length > 0 &&\r\n
\r\n {/*\r\n
課號
\r\n */}\r\n
{typeTitle}ID/名稱
\r\n
{typeTitle}日期
\r\n
{typeTitle}時間
\r\n
{typeTitle}地點
\r\n
報名期間
\r\n
報名人數/上限人數
\r\n
正取人數
\r\n
狀態
\r\n
\r\n }\r\n {\r\n bc.cardList == undefined ?\r\n
\r\n \r\n
:\r\n bc.cardList.length == 0 ?\r\n
\r\n
\r\n \r\n 此分類目前沒有{typeTitle}。\r\n
\r\n
: \"\"\r\n }\r\n {\r\n bc.cardList &&\r\n bc.cardList.map((card: CardProps, index: number) => {\r\n //過濾條件\r\n //pCurrentCode會去比對卡片中的propertyCodes代號是不是有符合選擇的類別\r\n let hit: boolean = false\r\n if (pCurrentCode == \"all\") {\r\n hit = true\r\n } else if (card.propertyCodes.indexOf(pCurrentCode) != -1) {\r\n hit = true\r\n }\r\n if (hit) {\r\n return (\r\n {\r\n bc.setOpenCard(true)\r\n setNowCards(card)\r\n }}\r\n >\r\n {\r\n /*\r\n
\r\n
\r\n */\r\n }\r\n\r\n
\r\n {card.ActID}\r\n {card.ActTitle}\r\n
\r\n
\r\n {\r\n card.propertyCodes &&\r\n card.propertyCodes.map((PID: string, index: number) =>\r\n \r\n )\r\n\r\n }\r\n
\r\n
\r\n
\r\n\r\n
\r\n {typeTitle}日期\r\n {card.ActDate ? card.ActDate : \"無\"}\r\n
\r\n
\r\n {typeTitle}時間\r\n {card.ActTime ? card.ActTime : \"無\"}\r\n
\r\n
\r\n {typeTitle}地點\r\n {card.Location ? card.Location : \"無\"}\r\n
\r\n
\r\n {/*\r\n {typeTitle}期間\r\n */}\r\n 報名期間\r\n {\r\n card.BeginTime && card.EndTime ?\r\n
\r\n {LessonDateFormat(card.BeginTime)}\r\n {LessonDateFormat(card.EndTime)}\r\n
:\r\n \"無報名時間\"\r\n }\r\n
\r\n {/**\r\n * \r\n
\r\n {\r\n card.RegTotal\r\n }/{\r\n card.Maximum ?\r\n card.Maximum : \"無\"\r\n }\r\n
\r\n */}\r\n\r\n
\r\n\r\n 報名人數/上限人數\r\n {\r\n\r\n card.ActID != \"S20241052\" &&\r\n <>\r\n {\r\n card.regState == 6 ? \"--\" :\r\n card.RegTotal ? card.RegTotal : 0\r\n }/{\r\n card.regState == 6 ? \"--\" :\r\n card.Maximum ? card.Maximum : \"無\"\r\n }\r\n \r\n }\r\n
\r\n\r\n\r\n
\r\n 正取人數\r\n {\r\n card.regState == 6 ? \"--\" :\r\n card.acceptNum ? card.acceptNum : \"無\"\r\n }\r\n\r\n {\r\n\r\n\r\n }\r\n
\r\n\r\n
\r\n 狀態\r\n {\r\n\r\n card.regState == 7 ?\r\n \r\n 已截止/\r\n \r\n 已報名\r\n \r\n :\r\n card.regState == 8 ?\r\n \r\n 已截止 /\r\n 不參加\r\n :\r\n card.regState == 11 ?\r\n \r\n 已截止 /\r\n 不參加\r\n :\r\n card.regState == 6 ?\r\n 點選進入 :\r\n card.regState == 1 ?\r\n \r\n 已報名\r\n {/*\r\n card.acceptNum && card.acceptNum != 0 && (card.RegTotal - card.acceptNum >0 ) &&\r\n <>\r\n
\r\n 備取{RegSerialFilter(card.RegSerial)}\r\n \r\n */}\r\n
:\r\n card.regState == 2 ?\r\n 審核中 :\r\n card.regState == 9 ?\r\n 審核未通過 :\r\n card.regState == 10 ?\r\n 已取消 :\r\n card.regState == 3 ?\r\n 不參加 :\r\n card.regState == 4 ?\r\n 已截止 :\r\n card.regState == 5 ?\r\n 人數已滿 :\r\n card.regState == 0 ?\r\n 尚未報名 : \"\"\r\n }\r\n
\r\n\r\n
\r\n )\r\n }\r\n })\r\n }\r\n
\r\n \r\n \r\n \r\n )\r\n}","import React, { useContext, useState, useEffect } from \"react\";\r\nimport ServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from '../context/BasicContext'\r\nimport ChartA from './ChartA'\r\nimport { HibModal } from \"./HibModal\";\r\n/*\r\ntype DashboardPrpos = {\r\n type: string\r\n}*/\r\n\r\n\r\ntype Show1Type = {\r\n uid: string,\r\n year: number,\r\n ActType: string,\r\n ActTypeName: string,\r\n description: string,\r\n Qualification: number,\r\n TotalHours: number,\r\n FinishedHours: number,\r\n UnfinishedHours: number,\r\n TotalCos: number,\r\n FinishedCos: number,\r\n RecordCompleteDate: string,\r\n FinishedExam: number,\r\n ExamID: number,\r\n ExamCompleteDate: string,\r\n ISFinish: string,\r\n FinalCC: string//到期日\r\n}\r\n\r\ntype ActRow = {\r\n ActType: string,\r\n ActTypeName: string,\r\n year: number,\r\n description: string,\r\n state: boolean\r\n isHide: boolean\r\n FinalCC?: string//產壽登以外到期日\r\n LYearComplete?:number\r\n RYearComplete?:number\r\n}\r\n\r\nexport default (/*props: DashboardPrpos*/) => {\r\n const ws = useContext(ServiceContext)\r\n const bc = useContext(BasicContext)\r\n const [renderData, setRenderData] = useState([])\r\n const [openChart, setOpenChart] = useState(false)\r\n \r\n const [openNotice, setOpenNotice] = useState(true)\r\n\r\n\r\n useEffect(() => {\r\n let temp: ActRow[] = []\r\n ws.WebService.asyncGetLowStateDashboard().then(res => {\r\n let d: ResDatas = res as ResDatas\r\n \r\n //item.已完課時數 >= item.應完課時數\r\n //d.RComplete >= d.RTotal\r\n\r\n \r\n if (d != undefined && d.LYear != null) {\r\n const LD: ActRow = {\r\n ActType: \"A\",\r\n ActTypeName: \"法遵課程(壽)\",\r\n year: d.LYear,\r\n description: \"保險業務員每年接受6小時外部排定法令遵循課程\",\r\n state: (d.LComplete >= d.LTotal),\r\n isHide: false\r\n }\r\n temp.push(LD)\r\n }\r\n if (d != undefined && d.RYear != null) {\r\n const RD: ActRow = {\r\n ActType: \"A\",\r\n ActTypeName: \"法遵課程(產)\",\r\n year: d.RYear,\r\n description: \"保險業務員每年接受6小時外部排定法令遵循課程\",\r\n state: (d.RComplete >= d.RTotal),\r\n isHide: false\r\n }\r\n temp.push(RD)\r\n }\r\n\r\n if (temp.length == 2) {\r\n temp[0].isHide = true\r\n }\r\n\r\n return ws.WebService.asyncGetShowPage1()\r\n\r\n }).then(res => { \r\n let d: Show1Type[] = res as Show1Type[]\r\n d.map((row: Show1Type) => {\r\n const SD: ActRow = {\r\n ActType: row.ActType,\r\n ActTypeName: row.ActTypeName,\r\n year: row.year,\r\n description: row.description,\r\n state: (row.ISFinish == \"Y\"),\r\n FinalCC: row.FinalCC,\r\n isHide: false\r\n }\r\n temp.push(SD)\r\n })\r\n\r\n if (temp.length > 0) {\r\n return temp\r\n }\r\n }).then(() => {\r\n setRenderData([...renderData, ...temp])\r\n })\r\n return\r\n }, [])\r\n\r\n //預設的Menu ID\r\n useEffect(() => {\r\n if( !bc.PID ){\r\n bc.setPID('dahboard')\r\n }\r\n if( bc.PID =='dahboard' && !bc.BID ){\r\n bc.setBID('legal')\r\n }\r\n }, [bc.PID, bc.BID])\r\n\r\n return (\r\n
\r\n
\r\n
類別
\r\n
期間
\r\n
說明
\r\n
狀態
\r\n
其他
\r\n {\r\n renderData.map((row: ActRow, index: number) => {\r\n return (\r\n \r\n
{row.ActTypeName}
\r\n
\r\n {row.year}\r\n {row.ActType == \"A\" ? \"年期\" : \"年度\"}\r\n
\r\n
{row.description}
\r\n
{row.state ? \"已完成\" : \"未完成\"}
\r\n
\r\n { \r\n \r\n }\r\n {\r\n row.ActType == \"A\" &&\r\n \r\n }\r\n {\r\n row.FinalCC != \"\" && row.FinalCC == \"0\" ?\r\n
最後一天!
:\r\n Number(row.FinalCC) > 0 ?\r\n
{`剩下${row.FinalCC}天!`}
:\r\n \"\"\r\n }\r\n\r\n
\r\n
\r\n )\r\n })\r\n }\r\n \r\n {\r\n setOpenChart(false)\r\n }}\r\n />\r\n
\r\n \r\n {\r\n setOpenNotice(false)\r\n }}\r\n cancel={() => {\r\n setOpenNotice(false)\r\n }}\r\n >\r\n \r\n

法令遵循課程 提醒事項

\r\n

\r\n 保險業務員每年應完成其中12單元,重複接受同一單元者,僅記錄1次完訓紀錄。\r\n 法令遵循課程禁止冒名上課及測驗,違反者由所屬公司以保險業務員管理規則第13條第1項辦理撤銷登錄,代上課者若為所屬公司人員,應依內部規定懲處。\r\n

\r\n \r\n
\r\n )\r\n}","import React, { useContext, useEffect, useState } from \"react\";\r\nimport { BasicContext } from '../context/BasicContext'\r\n\r\nexport default () => {\r\n const bc = useContext(BasicContext)\r\n\r\n \r\n \r\n const menuOnline = [\r\n { menuMame: \"法定必修課程\", pid: \"dahboard\", bid:\"legal\", url: \"./Course.html\" },\r\n { menuMame: \"銷售資格課程\", pid: \"list\", bid:\"identity\", url: \"./Course.html?pid=list&Class2=B\", class2: \"B\" },\r\n { menuMame: \"專業課程\", pid: \"list\", bid:\"prof\", url: \"./Course.html?pid=list&Class2=C\", class2: \"C\" },\r\n { menuMame: \"我的紀錄\", pid: \"state1\", bid:\"state1\", url: \"./Course.html?pid=state\" }\r\n ]\r\n\r\n const menuOTS = [\r\n { menuMame: \"活動報名\", pid: \"event\", bid:\"event\", class1: \"A\", url: \"./Course.html?pid=event\" },\r\n { menuMame: \"課程報名\", pid: \"lession\", bid:\"lession\", class1: \"B\", url: \"./Course.html?pid=lession\"},\r\n { menuMame: \"我的紀錄\", pid: \"state2\", bid:\"state2\", class1: \"\", url: \"./Course.html?pid=state\"},\r\n ]\r\n\r\n const [ActBtn, setActBtn] = useState(bc.PID)\r\n\r\n /*\r\n const StateBtn = ()=> {\r\n setActBtn(\"state\")\r\n bc.setBID(\"state\")\r\n bc.setPID(\"state\")\r\n bc.setClass1(\"\")\r\n bc.setActType(\"\")\r\n }}\r\n >我的紀錄\r\n */\r\n\r\n useEffect(() => {\r\n setActBtn(bc.BID)\r\n }, [bc])\r\n\r\n return (\r\n
\r\n {\r\n [\"event\", \"lession\", \"state2\"].indexOf(bc.PID) > - 1?\r\n menuOTS.map((btn, index: number) => {\r\n return (\r\n {\r\n setActBtn(btn.bid)\r\n bc.setBID(btn.bid)\r\n bc.setPID(btn.pid)\r\n if (btn.class1) {\r\n bc.setClass1(btn.class1)\r\n } else {\r\n bc.setClass1(\"\")\r\n }\r\n bc.setActType(\"\")\r\n }}\r\n >{btn.menuMame}\r\n )\r\n }):\r\n [\"dahboard\", \"list\", \"state1\"].indexOf(bc.PID) > - 1?\r\n menuOnline.map((btn, index: number) => {\r\n return (\r\n {\r\n setActBtn(btn.bid)\r\n bc.setPID(btn.pid)\r\n bc.setBID(btn.bid)\r\n bc.setActType(\"\")\r\n if (btn.class2) {\r\n bc.setClass2(btn.class2)\r\n } else {\r\n bc.setClass2(\"\")\r\n\r\n }\r\n }}\r\n >{btn.menuMame}\r\n )\r\n }):\"\"\r\n }\r\n
\r\n )\r\n\r\n if ([\"event\", \"lession\", \"record\"].indexOf(bc.PID) > - 1) {\r\n return (\r\n
\r\n {\r\n menuOTS.map((btn, index: number) => {\r\n return (\r\n {\r\n setActBtn(btn.bid)\r\n bc.setBID(btn.bid)\r\n bc.setPID(btn.pid)\r\n if (btn.class1) {\r\n bc.setClass1(btn.class1)\r\n } else {\r\n bc.setClass1(\"\")\r\n }\r\n bc.setActType(\"\")\r\n }}\r\n >{btn.menuMame}\r\n )\r\n })\r\n }\r\n
\r\n )\r\n } else {\r\n return (\r\n
\r\n {\r\n menuOnline.map((btn, index: number) => {\r\n return (\r\n {\r\n setActBtn(btn.bid)\r\n bc.setPID(btn.pid)\r\n bc.setBID(btn.bid)\r\n bc.setActType(\"\")\r\n if (btn.class2) {\r\n bc.setClass2(btn.class2)\r\n } else {\r\n bc.setClass2(\"\")\r\n\r\n }\r\n }}\r\n >{btn.menuMame}\r\n )\r\n })\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\n","import React, { useEffect, useState, useContext, useRef } from \"react\";\r\n\r\nimport WebServiceContext from \"../WebService/ServiceContext\";\r\nimport { BasicContext } from '../context/BasicContext'\r\n\r\nimport { Search } from \"./SVG\";\r\n\r\ntype MyCourseState = {\r\n ActID: string,\r\n ActTitle: string,\r\n recLYear: number | null,\r\n recRYear: number | null,\r\n RealCompleteDate: string,\r\n Class1: string,\r\n Class1Name: string,\r\n Class2: string,\r\n Class2Name: string,\r\n RecordTime: number,\r\n isComplete: number,\r\n //ExamDataJson: string | null\r\n Exam: string | null\r\n Hours: number\r\n}\r\n\r\ntype ExamObject = {\r\n ExamID: string,\r\n Score: string,\r\n ExamName: string\r\n}\r\nlet orgData: MyCourseState[] = []\r\nexport default () => {\r\n //const count = useSelector((state: StoreType) => { state })\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n\r\n\r\n\r\n const [stateData, setStateData] = useState([])\r\n const [renderData, setRenderData] = useState([])\r\n const [menuData, setMenuData] = useState([])\r\n const [page, setPage] = useState(0)\r\n\r\n const keywordInput = useRef(null)\r\n\r\n\r\n useEffect(() => {\r\n //法定必修\r\n ws.WebService.asyncGetActCompleteList().then((res: any) => {\r\n /*\r\n */\r\n //const temp: (MyCourseState)[] = []\r\n orgData = res as MyCourseState[]\r\n setStateData(res as MyCourseState[])\r\n\r\n })\r\n\r\n //選修課程\r\n return\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (stateData.length > 0) {\r\n let temp: MyCourseState[] = []\r\n for (let i: number = 0; i < 10; i++) {\r\n if (stateData[i + (page * 10)]) {\r\n temp.push(stateData[i + (page * 10)])\r\n }\r\n }\r\n \r\n setRenderData(temp)\r\n\r\n let menu: number[] = []\r\n for (let i: number = 0; i < Math.ceil(stateData.length / 10); i++) {\r\n menu.push(i + 1)\r\n }\r\n setMenuData(menu)\r\n }\r\n\r\n }, [page, stateData])\r\n\r\n\r\n const searchByKeyWord = (keyword: string) => {\r\n if (keyword != \"\") {\r\n \r\n\r\n const sortData: MyCourseState[] = []\r\n //alert(keyword)\r\n orgData.map((item: MyCourseState) => {\r\n let flat: string = \"\"\r\n for (let key in item) {\r\n flat += item[key as keyof MyCourseState] + \",\"\r\n }\r\n\r\n if (flat.match(keyword) != null) {\r\n sortData.push(item)\r\n }\r\n })\r\n setStateData(sortData)\r\n console.log(sortData)\r\n } else {\r\n setStateData(orgData)\r\n\r\n }\r\n setPage(0)\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {\r\n if (keywordInput && keywordInput.current) {\r\n searchByKeyWord(keywordInput.current.value)\r\n }\r\n }} />\r\n {/**\r\n * \r\n \r\n */}\r\n
\r\n
\r\n
\r\n
No.
\r\n
課程類別
\r\n
完課日期
\r\n
完課時數
\r\n {/**\r\n * \r\n
完課狀況
\r\n
觀看時數
\r\n */}\r\n
單元名稱
\r\n
試卷分數
\r\n {\r\n /*\r\n
壽險認列年度
\r\n
產險認列年度
\r\n */\r\n }\r\n
\r\n
\r\n\r\n {\r\n renderData.map((state: MyCourseState, index: number) => {\r\n //console.log(state)\r\n return (\r\n
\r\n
\r\n No.\r\n {(index + 1) + (page * 10)}\r\n
\r\n
\r\n 課程類別\r\n {\r\n state.Class1Name == \"A\" ? \"活動報名\" :\r\n state.Class1Name == \"B\" ? \"課程報名\" :\r\n state.Class1Name == \"C\" && \"數位學習\"\r\n }\r\n
\r\n {/**\r\n * \r\n
\r\n 單元ID:\r\n {state.ActID}\r\n
\r\n */}\r\n {/* */}\r\n
\r\n 完課日期:\r\n {\r\n state.RealCompleteDate ?\r\n state.RealCompleteDate :\r\n \"無\"\r\n }\r\n
\r\n
\r\n 完課時數:\r\n \r\n {\r\n state.Hours < 1 ?\r\n (state.Hours * 60) + \"分鐘\":\r\n state.Hours + \"小時\"\r\n }\r\n \r\n
\r\n {/** \r\n
\r\n 完課狀況\r\n {\r\n state.isComplete == 1 ?\r\n 已完成 :\r\n state.isComplete == 0 ?\r\n 未完成 :\r\n state.isComplete}\r\n \r\n
\r\n\r\n
\r\n 觀看時數\r\n \r\n {\r\n state.Class1 == \"C\" ?\r\n Math.floor(state.RecordTime / 60) + \"分\" :\r\n \"無\"\r\n }\r\n \r\n
\r\n*/}\r\n\r\n
\r\n 單元名稱:\r\n \r\n \r\n {state.ActID}\r\n {\r\n state.Class2 ?\r\n \"-\" + state.Class2Name : \"\"\r\n }\r\n \r\n {state.ActTitle}\r\n \r\n
\r\n {\r\n /**\r\n * \r\n
\r\n 壽險認列年度:\r\n 109\r\n
\r\n
\r\n 產險認列年度:\r\n \r\n
\r\n */\r\n }\r\n
\r\n {\r\n state.Exam && <>\r\n 試卷分數:\r\n
\r\n {\r\n\r\n state.Exam &&\r\n JSON.parse(state.Exam).map((item: ExamObject) =>\r\n
\r\n {item.ExamName}:{item.Score}分\r\n
\r\n )\r\n }\r\n
\r\n \r\n }\r\n
\r\n\r\n\r\n
\r\n )\r\n })\r\n }\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n menuData.map((item, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\n","import React, { createContext, useEffect, useState } from \"react\";\r\n\r\n\r\nexport const ExamContext = createContext({\r\n isTesting: false as Boolean,\r\n examInfo: {} as ExamInfo,\r\n examData: [] as ExamUnit[],\r\n record: [] as ExamRightAnswer[],//使用者回答的紀錄\r\n setIsTesting: (value: boolean) => { },\r\n setRecord: (data: ExamRightAnswer[]) => { },\r\n updateRecord: (index: number, data: ExamAnswer) => { },\r\n setExamInfo: (data: ExamInfo) => { },\r\n setExamData: (data: any) => { },\r\n});\r\n\r\nexport const ExamContextProvider = (props: any) => {\r\n const [isTesting, setIsTesting] = useState(false);\r\n const [examInfo, setExamInfo] = useState({} as ExamInfo);\r\n const [examData, setExamData] = useState([]);\r\n const [record, setRecord] = useState([]);\r\n\r\n /*\r\n useEffect(()=>{ \r\n },[record])\r\n */\r\n const setBasicIsTesting = (value: boolean) => {\r\n setIsTesting(value)\r\n };\r\n\r\n\r\n const setBasicExamInfo = (data: ExamInfo) => {\r\n setExamInfo(data);\r\n };\r\n\r\n const setBasicExamData = (data: any) => {\r\n setExamData(data);\r\n };\r\n\r\n const setBasicRecord = (data: ExamRightAnswer[]) => {\r\n setRecord(data);\r\n };\r\n\r\n const updateBasicRecord = (index: number, data: ExamAnswer) => {\r\n let _t: ExamRightAnswer[] = [...record]\r\n _t[index].userAns = data\r\n setRecord(_t)\r\n };\r\n\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n\r\n\r\n","import React, { useState, useEffect, useContext, CSSProperties } from 'react';\r\n\r\nimport { ExamContext } from '../context/ExamContext'\r\nimport { BasicContext } from '../context/BasicContext'\r\nimport WebServiceContext from '../WebService/ServiceContext'\r\nimport { Yes, No, Not } from '../course/SVG';\r\n\r\ntype thisProps = {\r\n nowNum: number\r\n //exams: ExamUnit[]\r\n doAnswer: (ans: boolean) => void\r\n answerResult: boolean\r\n //endTemplate: JSX.Element;\r\n}\r\n\r\n\r\ntype IndicatorsProps = {\r\n list: []\r\n active: number\r\n}\r\n\r\nconst Indicators = (props: IndicatorsProps) => {\r\n return (\r\n
\r\n {\r\n props.list.map(\r\n (item: object, index: number) =>\r\n
\r\n
\r\n )\r\n }\r\n
\r\n )\r\n}\r\n\r\n//const ansNowList:ExamAnswer[] = []\r\n\r\nexport default (props: thisProps) => {\r\n\r\n const bc = useContext(BasicContext)\r\n const ec = useContext(ExamContext)\r\n const ws = useContext(WebServiceContext)\r\n\r\n const [examList, setExamList] = useState | undefined>()\r\n const [num, setNum] = useState(props.nowNum)\r\n const [ansRes, setAnsRes] = useState(true)\r\n const [yesOrNo, setYesOrNo] = useState(true)\r\n const [ansState, setAnsState] = useState(\"\")\r\n const [ansSelect, setAnsSelect] = useState(\"\")\r\n const [ansKind, setAnsKind] = useState(true);//控制答題方式\r\n\r\n //取得當下答題的答案,送出答題後將會記錄到ansNowList\r\n //const [ansNow, setAnsNow] = useState();//控制答題方式\r\n const [ansNow, setAnsNow] = useState();//控制答題方式\r\n\r\n //紀錄有改變就寫入資料\r\n useEffect(() => {\r\n const tdo: TempDataObject = {\r\n Action: \"UPDATE\",\r\n ActID: bc.ActID,\r\n ExamID: ec.examInfo.ExamID,\r\n TempData: JSON.stringify({\r\n examData: ec.examData,\r\n record: ec.record\r\n })\r\n }\r\n ws.ExamService.tempDataAction(tdo).then(res => {\r\n //console.log(res)\r\n })\r\n console.log(ec.record)\r\n }, [ec.record])\r\n\r\n useEffect(() => {\r\n if (ec.examInfo.AnsKind == \"2\") {\r\n setAnsKind(false)\r\n }\r\n }, [ec.examInfo])\r\n\r\n useEffect(() => {\r\n if (ec.examData.length > 0) {\r\n setExamList(ec.examData)\r\n }\r\n }, [ec.examData])\r\n\r\n useEffect(() => {\r\n setNum(props.nowNum)\r\n }, [props.nowNum])\r\n\r\n const answerHandler = (Ans: boolean) => {\r\n if (ansState != \"\") {\r\n props.doAnswer(Ans);\r\n }\r\n }\r\n\r\n const resultHandler = () => {\r\n setAnsRes(true)\r\n if (ansState == \"1\") {\r\n setAnsState(\"\")\r\n }\r\n }\r\n\r\n if (examList != undefined) {\r\n return (\r\n
\r\n {\r\n (ansRes || ansState != \"1\") &&\r\n
\r\n \r\n {num + 1}.\r\n \r\n \r\n {examList[num].question}\r\n \r\n
\r\n }\r\n
\r\n {\r\n ansRes == true ?\r\n
\r\n {\r\n examList[num].answersList.map((ans: ExamAnswer, aSN: number) =>\r\n
\r\n ) => {\r\n setAnsSelect(aSN.toString())\r\n setAnsState(event.target.value.toString())\r\n }}\r\n />\r\n \r\n \r\n {ans.ItemID}.\r\n \r\n \r\n {ans.ItemTitle}\r\n \r\n \r\n
\r\n )\r\n }\r\n {\r\n\r\n //--答題類型1 作答到對\r\n if (ec.examInfo.AnsKind == \"1\") {\r\n setAnsRes(false)\r\n if (ansState == \"1\") {\r\n answerHandler(true)\r\n }\r\n //--答題類型2 直接下一提\r\n } else if (ec.examInfo.AnsKind == \"2\") {\r\n if (ansSelect) {\r\n //記錄答題 start\r\n //找出正確的答案 如果沒有的話回傳null\r\n const rightAns = examList[num].answersList.find((item) => {\r\n if (item.Ans) {\r\n return item.ItemID\r\n } else {\r\n return null\r\n }\r\n })\r\n\r\n //console.log(examList[num])\r\n ec.setRecord([...ec.record,\r\n {\r\n title: examList[num].question,\r\n rightAns: rightAns,\r\n userAns: examList[num].answersList[parseInt(ansSelect)]\r\n } as ExamRightAnswer\r\n ])\r\n //記錄答題 end\r\n }\r\n const res = (ansState == \"1\" ? true : false)\r\n answerHandler(res)\r\n setAnsState(\"\")\r\n }\r\n\r\n setAnsSelect(\"\")//清空選擇\r\n\r\n if (ansState == \"\") {\r\n setAnsRes(false)\r\n }\r\n }}\r\n >確認答案,下一題\r\n
\r\n :\r\n <>\r\n {\r\n ansState == \"1\" ?\r\n :\r\n ansState == \"0\" ?\r\n :\r\n \r\n }\r\n\r\n \r\n \r\n }\r\n
\r\n\r\n \r\n\r\n
\r\n )\r\n\r\n } else {\r\n return (\r\n
設定中
\r\n )\r\n }\r\n}","import React, { useState, useEffect } from 'react';\r\n\r\ninterface IProps {\r\n time: number\r\n isPlay: boolean\r\n isEnd: (end: string) => void\r\n}\r\n\r\n\r\nlet timer: undefined | NodeJS.Timeout;\r\nlet now: number = 0;\r\nexport default (props: IProps) => {\r\n const [total] = useState(props.time)\r\n const [tn, setTn] = useState(0)\r\n const [isPlay, setIsPlay] = useState(props.isPlay)\r\n \r\n\r\n const [countTime, setCountTime] =useState(\"--:--\")\r\n const [countBar, setCountBar] =useState(0)\r\n\r\n const resetTimer = () => {\r\n now=0;\r\n setTn(0);\r\n }\r\n const startTimer = () => {\r\n const totalTime:number = Date.now() + (60000 * props.time)\r\n timer = setInterval(() => {\r\n const _d:Date = new Date(totalTime - Date.now())\r\n let _m = _d.getHours() > 8 ? _d.getMinutes() + 60 : _d.getMinutes();\r\n if (_d.getMinutes() > 0) {\r\n //document.querySelector(\"#timeout\").innerHTML = _m + \"分\" + _d.getSeconds() + \"秒\";\r\n //console.log(_m + \"分\" + _d.getSeconds() + \"秒\")\r\n setCountTime(_m+\"分:\"+ _d.getSeconds()+\"秒\" )\r\n } else {\r\n //document.querySelector(\"#timeout\").innerHTML = _d.getSeconds() + \"秒\";\r\n //console.log( _d.getSeconds() + \"秒\")\r\n setCountTime( _d.getSeconds().toString() +\"秒\")\r\n }\r\n\r\n setCountBar(Math.floor((totalTime-Date.now())/(60000 * props.time)*100))\r\n \r\n if(_d.getTime() <=0){\r\n stopTimer() \r\n }\r\n\r\n }, 500)\r\n }\r\n const stopTimer = () => {\r\n if (timer != undefined) {\r\n clearInterval(timer)\r\n props.isEnd(\"end\")\r\n }\r\n }\r\n useEffect(() => {\r\n console.log(isPlay)\r\n if (props.isPlay) { \r\n resetTimer();\r\n startTimer()\r\n } else {\r\n stopTimer()\r\n }\r\n }, [props.isPlay])\r\n\r\n if (tn != total) {\r\n return (\r\n
\r\n \r\n \r\n \r\n 剩餘時間\r\n \r\n {countTime}\r\n \r\n
\r\n
\r\n )\r\n } else {\r\n return (\r\n
Times Up!
\r\n )\r\n }\r\n}","import React, { useState, useEffect, useContext } from 'react';\r\n/*\r\ntype ExamCheckProps = {\r\n record: ExamRightAnswer[]\r\n}*/\r\n\r\ntype MyDataProps = {\r\n title: string\r\n rightAns: ExamAnswer | null\r\n userAns: ExamAnswer,\r\n answersList?: ExamAnswer[]\r\n}\r\n\r\nimport { ExamContext } from '../context/ExamContext'\r\nimport { HibModal } from '../course/HibModal';\r\nimport { Yes } from '../course/SVG';\r\n\r\nexport default (/*props: ExamCheckProps*/) => {\r\n\r\n const ec = useContext(ExamContext)\r\n\r\n const [MyData, setMyData] = useState()\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n\r\n const tempData: MyDataProps[] = []\r\n\r\n \r\n ec.record.map((ans: ExamRightAnswer, index: number) => {\r\n let _t: MyDataProps = { ...ans }\r\n _t.answersList = ec.examData[index].answersList\r\n tempData.push(_t)\r\n })\r\n setMyData(tempData)\r\n return\r\n }, [ec.record])\r\n\r\n\r\n return (\r\n <>\r\n \r\n {setOpen(false)}}\r\n children={\r\n\r\n
\r\n {\r\n MyData?.map((item: MyDataProps, index: number) => {\r\n return (\r\n
\r\n

{index+1}. {item.title}

\r\n
\r\n {\r\n item.answersList?.map((ans: ExamAnswer, index2: number) => {\r\n return (\r\n
{\r\n ec.updateRecord(index, ans)\r\n }}\r\n >\r\n \r\n {\r\n item.userAns?.ItemID == ans.ItemID && \r\n \r\n }\r\n \r\n\r\n \r\n {ans.ItemTitle}\r\n \r\n
\r\n )\r\n })\r\n }\r\n
\r\n
\r\n )\r\n })\r\n }\r\n {/*\r\n ec.examData.map((item: ExamUnit, index: number) => {\r\n return (\r\n
\r\n
\r\n \r\n {index + 1}.{item.question}\r\n \r\n
\r\n
\r\n {\r\n item.answersList.map((ans:ExamAnswer, index2:number)=>{\r\n return(\r\n \r\n )\r\n })\r\n }\r\n
\r\n
\r\n )\r\n })\r\n */\r\n }\r\n\r\n
\r\n }\r\n />\r\n \r\n )\r\n}","import React, { useState, useEffect, useContext } from 'react';\r\n//import { useSelector, shallowEqual } from \"react-redux\"\r\nimport ExamBasic from './ExamBasic'\r\n//import EndList from './EndList'\r\nimport { BasicContext } from '../context/BasicContext'\r\nimport { ExamContext } from '../context/ExamContext'\r\nimport Timer from './TimerType2'\r\n//import WebService from '../WebService/WebService';\r\n\r\nimport WebServiceContext from '../WebService/ServiceContext'\r\nimport { CloudComplete, Search } from '../course/SVG';\r\nimport ExamCheck from './ExamCheck';\r\nimport { HibModal } from '../course/HibModal';\r\n\r\ntype ExamProps = {\r\n //endTest: (end: string) => void\r\n answerResult: boolean\r\n answerNum: number\r\n}\r\n\r\n\r\nconst ExamBody = (props: ExamProps) => {\r\n\r\n const [timer, setTimer] = useState(0);\r\n const [timesUp, setTimesUp] = useState(false);\r\n const [timerSw, setTimerSw] = useState(true)\r\n const [isComplete, setIsComplete] = useState(false)\r\n const [isUploading, setIsUploading] = useState(false)\r\n\r\n const [num, setNum] = useState(props.answerNum)\r\n const [total, setTotal] = useState(0)\r\n const [open, setOpen] = useState(false)\r\n\r\n const ws = useContext(WebServiceContext)\r\n const bc = useContext(BasicContext)\r\n const ec = useContext(ExamContext)\r\n\r\n useEffect(() => {\r\n if (ec.examInfo.TestMinute) {\r\n setTimer(ec.examInfo.TestMinute)\r\n const _w: any = window\r\n if (_w && _w.hib168 && _w.hib168.TimeoutTimer != undefined) {\r\n _w.hib168.TimeoutTimer(null, ec.examInfo.TestMinute)\r\n }\r\n }\r\n }, [ec.examInfo])\r\n\r\n //const [ansResult, setAnsResult] = useState([])\r\n\r\n\r\n useEffect(() => {\r\n if(ec.examInfo.AnsKind == \"1\" && num == ec.examData.length) {\r\n setIsComplete(true)\r\n handInPaper()\r\n }\r\n }, [num])\r\n\r\n const doAnswer = (ans: boolean) => {\r\n\r\n if (ec.examInfo.AnsKind == \"1\") {\r\n //過關型\r\n if (ans) {\r\n setNum(num + 1)\r\n }\r\n } else if (ec.examInfo.AnsKind == \"2\") {\r\n //記錄型 \r\n setNum(num + 1)\r\n } else {\r\n alert(\"沒有類型\")\r\n }\r\n }\r\n\r\n const handInPaper = () => {\r\n if (num >= ec.examData.length && ec.examData.length != 0) {\r\n //setTimeout(()=>{\r\n setIsComplete(true)\r\n ws.ExamService.saveExamResult(\r\n bc.ActID,\r\n ec.examInfo.ExamID.toString(),\r\n (ec.examInfo.AnsKind == \"1\" ? \"100\" : countScore())\r\n\r\n ).then((res: any) => {\r\n if ((res.Result as string) == \"OK\") {\r\n setIsUploading(true)\r\n return true\r\n }\r\n }).then(() => {\r\n ws.ExamService.tempDataAction({\r\n Action: \"DEL\",\r\n ActID: bc.ActID,\r\n ExamID: ec.examInfo.ExamID\r\n } as TempDataObject)\r\n\r\n ec.record.map((item: ExamRightAnswer, index: number) => {\r\n ws.WebService.asyncAnswerQuestionnaire(\r\n ec.examInfo.ExamID,\r\n bc.ActID,\r\n (ec.examData[index] as ExamUnit).QSNo,\r\n item.userAns.ItemID,\r\n undefined,\r\n ).then(res => {\r\n console.log(\"asyncAnswerQuestionnaire result\", res)\r\n })\r\n\r\n\r\n })\r\n })\r\n }\r\n }\r\n\r\n const reTest = (event: React.MouseEvent) => {\r\n if (ec.examInfo.TestMinute) {\r\n setTimer(ec.examInfo.TestMinute * 60)\r\n }\r\n setNum(0)\r\n setTimesUp(false)\r\n setTimerSw(true)\r\n setIsComplete(false)\r\n setIsUploading(false)\r\n ec.setRecord([])\r\n ec.setIsTesting(false)\r\n }\r\n\r\n const countScore = (): string => {\r\n let count: number = 0\r\n ec.record.map((item: ExamRightAnswer) => {\r\n if (item.rightAns == item.userAns) {\r\n count++\r\n }\r\n })\r\n return (Math.ceil(((count / ec.examData.length) * 100)).toString())\r\n //return (Math.ceil(((count / ec.record.length) * 100)).toString())\r\n }\r\n\r\n\r\n const ExamResult = () =>\r\n
\r\n \r\n 您本次測驗結果\r\n \r\n
\r\n \r\n\r\n
\r\n \r\n {\r\n ec.examInfo.AnsKind == \"1\" ?\r\n \"100分\" :\r\n countScore() + \"分\"\r\n }\r\n \r\n
\r\n\r\n\r\n if (ec.examData) {\r\n return (\r\n\r\n <>\r\n {\r\n timer != 0 && !timesUp && !isComplete &&\r\n {\r\n setTimesUp(true);\r\n setTimerSw(false)//Timer計時停止\r\n //console.log(end)\r\n }}\r\n />\r\n }\r\n\r\n {\r\n timesUp ?\r\n <>\r\n

時間到!停止測驗,請重新作答

\r\n {\r\n ec.examInfo.ExamType == \"1\" &&\r\n \r\n }\r\n \r\n \r\n :\r\n isComplete ?\r\n
\r\n {\r\n ec.examInfo.ExamType == \"1\" &&\r\n

\r\n 全數做完題目!
\r\n 恭喜你!作答完成!\r\n

\r\n }\r\n {\r\n ec.examInfo.ExamType == \"3\" &&\r\n

\r\n 作答完成!\r\n

\r\n }\r\n {\r\n /*\r\n 答題內容對錯 先暫時不顯示\r\n

\r\n {\r\n ec.record.map((item: ExamRightAnswer) =>\r\n {item.rightAns == item.userAns ? \"O\" : \"X\"}\r\n )\r\n }\r\n

\r\n */\r\n }\r\n {\r\n ec.examInfo.ExamType == \"1\" &&\r\n \r\n }\r\n\r\n {\r\n isUploading ?\r\n <>\r\n \r\n

\r\n 上傳完成!\r\n

\r\n :\r\n \"上傳成績中請稍後...\"\r\n }\r\n\r\n {\r\n ec.examInfo.ExamType != \"3\" &&\r\n
\r\n \r\n \r\n
\r\n }\r\n
\r\n :\r\n <>\r\n {\r\n num == ec.examData.length ?\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n 您已經完成所有題目了,您可以再次檢查修正您的答案,確認完成後即可按\r\n \r\n 送出您的試卷。\r\n
\r\n
\r\n {\r\n setOpen(false)\r\n }}\r\n confirm={() => {\r\n handInPaper() \r\n }}\r\n children={<>確定是否要送出試卷}\r\n />\r\n \r\n :\r\n <>\r\n \r\n \r\n }\r\n {\r\n ec.examInfo.AnsKind == \"2\" &&\r\n \r\n }\r\n \r\n\r\n }\r\n \r\n )\r\n } else {\r\n return (
設定中...
)\r\n }\r\n}\r\n\r\nexport default ExamBody","import React, { useState, useEffect, useContext } from 'react';\r\n\r\nimport Questionnaire from '../course/Questionnaire';\r\nimport ServiceContext from \"../WebService/ServiceContext\";\r\nimport { HibModal } from \"../course/HibModal\";\r\nimport { ExamContext } from '../context/ExamContext'\r\nimport { BasicContext } from '../context/BasicContext'\r\nimport '../course/type.d.ts'\r\n\r\n\r\ntype ExamQuestProps = {\r\n examID: number\r\n}\r\n\r\nexport default (props: ExamQuestProps) => {\r\n const ec = useContext(ExamContext)\r\n const bc = useContext(BasicContext)\r\n const ws = useContext(ServiceContext)\r\n const [open, setOpen] = useState(false)\r\n const [mesg, setMesg] = useState(\"\")\r\n const [mesgOpen, setMesgOpen] = useState(false)\r\n const [examID, setExamID] = useState(props.examID)\r\n const [quests, setQuests] = useState([])\r\n const [isComplete, setIsComplete] = useState(true)\r\n /*\r\n useEffect(() => {\r\n console.log(ec)\r\n }, [ec.examInfo])\r\n\r\n useEffect(() => {\r\n console.log(bc)\r\n }, [bc])\r\n useEffect(() => {\r\n console.log(quests)\r\n }, [quests])\r\n */\r\n\r\n useEffect(() => {\r\n ws.WebService.asyncGetQuestionnaire(examID)\r\n .then(res => {\r\n setQuests(res as QuestRes[])\r\n return ws.WebService.asyncGetAnswer(bc.ActID, examID)\r\n })\r\n .then(res => {\r\n bc.setAnsList(res as ResAnswers[])\r\n })\r\n\r\n return\r\n }, [])\r\n\r\n const AnswerMyQ = (): Promise => {\r\n let sn: number = 0;\r\n return new Promise((resolve, reject) => {\r\n const doAnswer = (): boolean => {\r\n if ((bc.ansList[sn]?.ItemID || bc.ansList[sn]?.ItemTxt) && bc.ansList[sn]?.QSNo) {\r\n \r\n ws.WebService.asyncAnswerQuestionnaire(\r\n examID,\r\n bc.ActID,\r\n parseInt(bc.ansList[sn].QSNo),\r\n bc.ansList[sn].ItemID ? bc.ansList[sn].ItemID : undefined,\r\n bc.ansList[sn].ItemTxt ? bc.ansList[sn].ItemTxt : undefined,\r\n ).then(res => {\r\n sn++\r\n //console.log(bc.ansList.length, sn)\r\n if (bc.ansList.length != sn) { \r\n doAnswer()\r\n } else {\r\n sn = 0\r\n resolve(true)\r\n }\r\n })\r\n }\r\n return true\r\n }\r\n\r\n bc.ansList.length != quests.length ?\r\n resolve(false)\r\n :\r\n doAnswer()\r\n })\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n {\r\n quests.length > 0 &&\r\n
\r\n {\r\n setIsComplete(complete)\r\n })}\r\n />\r\n
\r\n }\r\n {\r\n {\r\n //setOpenConfirmWithQuest(true)\r\n setOpen(true)\r\n }}\r\n >送出\r\n\r\n }\r\n
\r\n\r\n {\r\n AnswerMyQ()\r\n .then(res => {\r\n console.log(res)\r\n if (res) {\r\n setOpen(false)\r\n setMesgOpen(true)\r\n setMesg(\"問卷填寫完成\")\r\n }else{\r\n setMesg(\"問卷填寫失敗\")\r\n }\r\n })\r\n }}\r\n cancel={() => {\r\n setOpen(false)\r\n }}\r\n >\r\n {\r\n\r\n bc.ansList &&\r\n bc.ansList.length > 0 &&\r\n <>\r\n
\r\n 您填寫的問卷如下:\r\n {\r\n bc.ansList.map((item: ResAnswers, index: number) => {\r\n if (item.ItemID && item.ItemID != \"\") {\r\n return (\r\n
\r\n
\r\n Q{index + 1}. {item.qtxt}\r\n
\r\n
\r\n {item.ansTxt}\r\n
\r\n
\r\n )\r\n }\r\n else if (item.ItemTxt) {\r\n return (\r\n
\r\n
\r\n Q{index + 1}. {item.qtxt}\r\n
\r\n
\r\n {item.ItemTxt}\r\n
\r\n
\r\n )\r\n }\r\n })\r\n }\r\n
\r\n 確認是否送出\r\n \r\n }\r\n \r\n\r\n {\r\n location.reload()\r\n }}\r\n confirmText=\"關閉\"\r\n >\r\n {mesg}\r\n \r\n\r\n \r\n )\r\n}\r\n\r\n","import React, { useState, useEffect, useContext } from 'react';\r\n\r\n\r\nimport { ExamContext } from '../context/ExamContext'\r\n\r\ntype ExamInfoProps = {\r\n showType: \"exam\" | \"ques\"\r\n}\r\n\r\nconst ExamInfo = (props: ExamInfoProps) => {\r\n\r\n const ec = useContext(ExamContext)\r\n\r\n\r\n useEffect(() => {\r\n }, [ec.examInfo])\r\n\r\n return (\r\n
\r\n
\r\n {ec.examInfo.title}\r\n
\r\n
\r\n {\r\n props.showType == \"exam\" && ec.examInfo.ExamType != \"3\" &&\r\n <>\r\n
\r\n \r\n 測驗時間\r\n \r\n \r\n {ec.examInfo.TestMinute}分鐘\r\n \r\n
\r\n \r\n
\r\n \r\n 完成時間\r\n \r\n \r\n {ec.examInfo.LastUpdate ? ec.examInfo.LastUpdate : \"無\"}\r\n \r\n
\r\n
\r\n \r\n 備註\r\n \r\n \r\n
\r\n                                    {ec.examInfo.Memo}\r\n                                
\r\n
\r\n
\r\n \r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nexport default ExamInfo","import React, { useState, useEffect, useContext } from 'react';\r\nimport ExamBody from './ExamBody'\r\nimport ExamQuest from './ExamQuest'\r\nimport WebServiceContext from '../WebService/ServiceContext'\r\nimport { BasicContext } from '../context/BasicContext'\r\nimport { ExamContext } from '../context/ExamContext'\r\n\r\nimport { HibModal } from \"../course/HibModal\";\r\n\r\n//import { useSelector, shallowEqual } from \"react-redux\"\r\n\r\nimport ExamInfo from './ExamInfo';\r\nimport { Spinner, Yes } from '../course/SVG';\r\n\r\n\r\n\r\n/** \r\n * 主要入口\r\n * 處理從server來的資料並派送到各個components\r\n * 狀態顯示\r\n */\r\nconst ExamApp = () => {\r\n\r\n //const [isTesting, setIsTesting] = useState(false);\r\n const [isAnswered, setIsAnswered] = useState(false);\r\n const ws = useContext(WebServiceContext)\r\n const ec = useContext(ExamContext)\r\n const bc = useContext(BasicContext)\r\n\r\n //控制只有正常讀取資料時可以顯示問卷選單\r\n const [loadState, setLoadState] = useState(false)\r\n\r\n //有尚未作答完成的資料\r\n const [tempData, setTempData] = useState(null)\r\n const [tempOpen, setTempOpen] = useState(false)\r\n const [answerNum, setAnswerNum] = useState(0)\r\n \r\n //mount 取得資料\r\n useEffect(() => {\r\n let ExamID: number = parseInt(bc.ExamPaper)\r\n let currentExamInfo: ExamInfo = {} as ExamInfo\r\n let ExamData: ExamUnit[] = []\r\n ws.ExamService.getExamInfo(ExamID.toString()).then((result) => {\r\n \r\n if (result) {\r\n setLoadState(true)\r\n const res = result as ResultData;\r\n const ei: ExamInfo = res.Data[0] as ExamInfo\r\n\r\n currentExamInfo = {\r\n ExamID: ExamID,\r\n title: ei.ExamName,\r\n Memo: ei.Memo,\r\n AnsKind: ei.AnsKind,\r\n TestMinute: ei.TestMinute,\r\n Optional: ei.Optional,//1:自選|0:非自選 這邊如果是自選 需要加上自選題數(尚未製作)\r\n QRecCount: ei.QRecCount, //預設題數 \r\n } as ExamInfo\r\n\r\n return ws.ExamService.getExamComplete(bc.ActID, ei.ExamID.toString())\r\n }\r\n }).then(result => {\r\n const res = result as ResultData;\r\n const ei: ExamInfo = res.Data[0] as ExamInfo\r\n if (ei && ei.LastUpdate) {\r\n currentExamInfo = {\r\n ...currentExamInfo,\r\n LastUpdate: ei.LastUpdate,\r\n } as ExamInfo\r\n }\r\n return ws.ExamService.getExamList(ExamID.toString(), currentExamInfo.Optional.toString(), currentExamInfo.QRecCount.toString());\r\n }).then(result => {\r\n const res = result as ResultData;\r\n const ary: Array = [];\r\n\r\n res.Data.map((item, index) => {\r\n const _it = item as ExamInfo;\r\n let ex: ExamUnit = {\r\n id: index,\r\n QSNo: _it.QSNo,\r\n question: _it.QName,\r\n answersList: _it.Answers ? JSON.parse(_it.Answers.toString()) as Array : [],\r\n userAnswer: null\r\n };\r\n ary.push(ex)\r\n })\r\n //console.log(res.Data[0].ExamType)\r\n currentExamInfo = {\r\n ...currentExamInfo,\r\n ExamType: res.Data[0].ExamType\r\n }\r\n ExamData = ary\r\n ec.setExamData(ary)\r\n ec.setExamInfo(currentExamInfo)\r\n\r\n\r\n //console.log(currentExamInfo)\r\n \r\n return ws.WebService.asyncGetAnswer(bc.ActID, ExamID)\r\n }).then(res => {\r\n //202408016新增 滿意度調查取得使用者的答案\r\n //已有回答的題目 且與題目列表的數字相同\r\n console.log(res)\r\n if (\r\n (res as []).length > 0 &&\r\n (res as []).length == ExamData.length\r\n ) {\r\n setIsAnswered(true)\r\n }\r\n\r\n //20241106取得暫存檔\r\n const tdo: TempDataObject = {\r\n Action: \"GET\",\r\n ActID: bc.ActID,\r\n ExamID: ExamID\r\n }\r\n return ws.ExamService.tempDataAction(tdo)\r\n }).then((res: any) => {\r\n //console.log(JSON.parse(res.Data[0].TempData))\r\n /*\r\n 20241107先暫時關閉\r\n if (res.Data[0].TempData) {\r\n setTempData(res.Data[0].TempData)\r\n }\r\n */\r\n })\r\n\r\n return\r\n }, [])\r\n /*\r\n useEffect(()=>{\r\n console.log(ec.examInfo)\r\n },[ec])\r\n */\r\n if (ec.examInfo.ExamType == \"1\" || ec.examInfo.ExamType == \"3\") {\r\n return (\r\n
\r\n\r\n {\r\n ec.isTesting ?\r\n 逐步回答型, false=>計算總分型\r\n answerNum={answerNum}\r\n />\r\n :\r\n <>\r\n \r\n {\r\n //\r\n }\r\n {\r\n isAnswered && ec.examInfo.ExamType == \"3\" ?\r\n
\r\n \r\n 您已經作答完畢!\r\n
\r\n :\r\n \r\n }\r\n \r\n }\r\n {\r\n if(tempData){\r\n const _td = JSON.parse(tempData)\r\n ec.setExamData(_td.examData)\r\n ec.setRecord(_td.record)\r\n setAnswerNum(_td.record.length)\r\n \r\n }\r\n setTempOpen(false)\r\n ec.setIsTesting(true)\r\n }}\r\n cancel={() => {\r\n setTempOpen(false)\r\n ec.setIsTesting(true)\r\n }}\r\n >\r\n 您有尚未作答完成的紀錄,您要從上次的進度開始嗎?\r\n \r\n
\r\n )\r\n } else {\r\n\r\n return (\r\n
\r\n {\r\n loadState ?\r\n <>\r\n \r\n \r\n :\r\n <>\r\n \r\n \r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default ExamApp;\r\n","70079\r\nimport React, { useContext, useState, useEffect } from 'react';\r\nimport WebServiceContext from '../WebService/ServiceContext'\r\nimport { BasicContext } from '../context/BasicContext'\r\n\r\nimport { ExamContextProvider } from '../context/ExamContext'\r\nimport { ExamContext } from '../context/ExamContext'\r\nimport ExamApp from './ExamApp'\r\n\r\n//import { Dispatch } from \"redux\";\r\n//import { useDispatch } from \"react-redux\"\r\n//import { setExamInfo, setExamData } from \"../../reducers/exam/creators\"\r\n\r\n\r\ntype CompleteData = {\r\n date: string\r\n}\r\n\r\n//type CompeteObject = ResultData & { y: number; };\r\n\r\n\r\n//const _url = new URL(document.location.href)\r\n//let ActID:string; \r\n//let ExamID:string;\r\n//let option:string=\"1\";//自選|非自選 預設非自選\r\n//let RecNum:string=\"10\";//撈回來的題數,預設10題\r\n\r\n/*\r\n//20220617\r\nif(!document.referrer.match(/course||localhost/i)){\r\n alert(\"請務必從168官網進入!\")\r\n window.open(\"https://168.hib.com.tw/Portal/Html/Course.html\",\"_self\");\r\n}\r\n\r\nif( _url.searchParams.get('ExamID') ){\r\n ExamID = _url.searchParams.get('ExamID') as string\r\n}else{\r\n alert(\"ActID尚未設置ActID或ExamID,返回列表\")\r\n window.open(\"./Course.html\",\"_self\");\r\n}\r\n\r\nif( _url.searchParams.get('ActID') ){\r\n ActID = _url.searchParams.get('ActID') as string\r\n}\r\n\r\nif( _url.searchParams.get('self') ){\r\n option = _url.searchParams.get('option') as string\r\n}\r\n\r\n*/\r\n\r\nconst Exam = () => { \r\n return ( \r\n \r\n \r\n \r\n )\r\n \r\n}\r\n\r\nexport default Exam;\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport ReactDOM from \"react\";\r\n\r\n//import Controls from \"./components/controls\";\r\nimport { BasicContext } from './context/BasicContext'\r\n\r\nimport WebServiceContext from \"./WebService/ServiceContext\";\r\n\r\nimport CardList from \"./course/CardList\";\r\nimport CardOtsList from \"./course/CardOtsList\";\r\nimport Dashbaord from \"./course/Dashbaord\";\r\nimport Menu from \"./course/Menu\";\r\nimport State from \"./course/State\";\r\nimport Exam from \"./exam\";\r\n\r\n\r\nlet sURL = new URL(window.location.href);\r\nconsole.log(window.location.href)\r\nsURL.searchParams.get('pid');\r\n\r\nexport default () => {\r\n const bc = useContext(BasicContext)\r\n \r\n useEffect(()=>{\r\n\r\n if(sURL.searchParams.get('pid') != null){\r\n bc.setPID(sURL.searchParams.get('pid') as string)\r\n }\r\n \r\n if(sURL.searchParams.get('bid') != null){\r\n bc.setBID(sURL.searchParams.get('bid') as string)\r\n }\r\n \r\n if(sURL.searchParams.get('type') != null){\r\n bc.setActType(sURL.searchParams.get('type') as string)\r\n }\r\n\r\n if(sURL.searchParams.get('Class1') != null){\r\n bc.setClass1(sURL.searchParams.get('Class1') as string)\r\n }\r\n\r\n if(sURL.searchParams.get('Class2') != null){\r\n bc.setClass2(sURL.searchParams.get('Class2') as string)\r\n } \r\n\r\n if(sURL.searchParams.get('actid') != null){\r\n bc.setActID(sURL.searchParams.get('actid') as string)\r\n }\r\n\r\n if(sURL.searchParams.get('examPaper') != null){\r\n bc.setExamPaper(sURL.searchParams.get('examPaper') as string)\r\n }\r\n\r\n if(sURL.searchParams.get('actid') != null){\r\n bc.setActID((sURL.searchParams.get('actid') as string).toUpperCase())\r\n } \r\n \r\n \r\n return\r\n },[])\r\n\r\n return (\r\n
\r\n \r\n {\r\n (bc.PID == \"exam\" && bc.ExamPaper)? //正式\r\n //(bc.PID == \"exam\" )?//測試\r\n :\r\n bc.PID == \"Dashbaord\"?\r\n :\r\n bc.PID == \"list\"?\r\n :\r\n (bc.PID == \"state1\" || bc.PID == \"state2\")?\r\n :\r\n bc.PID == \"event\"?\r\n :\r\n bc.PID == \"lession\"?\r\n :\r\n bc.PID == \"record\"?\r\n \"record\":\r\n \r\n }\r\n
\r\n )\r\n\r\n};\r\n","//import { rejects } from \"assert\";\r\n\r\nclass WebService {\r\n url: string = \"../Ashx/ActMain.ashx\";\r\n urlP: string = \"../Ashx/Performance.ashx\";\r\n testUID:string|null = null\r\n constructor() {\r\n if (process.env.NODE_ENV == \"development\") {\r\n this.url = \"http://localhost:56400/Ashx/ActMain.ashx\";\r\n //this.urlP = \"http://localhost:56400/Ashx/Performance.ashx\";\r\n\r\n //this.testUID = 'E222600814'\r\n //this.testUID = 'A220800045'\r\n //this.testUID = 'F230376659'\r\n //this.testUID = 'a126598784'\r\n //this.testUID = 'A226078181'\r\n //this.testUID = 'M221716220'\r\n //this.testUID = 'L120966750'\r\n this.testUID = 'G221847539'\r\n \r\n }\r\n console.log(\"init webservice \", this.url)\r\n }\r\n\r\n LRCurrentYearCheck = async (): Promise => {\r\n const fd = new FormData();\r\n return this.Call(\"LRCurrentYearCheck\", fd)\r\n }\r\n\r\n //20250123壽產第一第二年度狀態\r\n getLRStatus = async (ActType:string): Promise => {\r\n const fd = new FormData();\r\n fd.append(\"ActType\", ActType);\r\n return this.Call(\"GetLRStatus\", fd);\r\n }\r\n\r\n getActMainList = async (actType:string, class2: string): Promise => {\r\n const fd = new FormData();\r\n fd.append(\"ActType\", actType);\r\n fd.append(\"class2\", class2 ? class2 : \"\");\r\n return this.Call(\"GetActMainList\", fd)\r\n }\r\n\r\n getActMainListBCH125 = async (actType: string, class2: string): Promise => {\r\n const fd = new FormData();\r\n fd.append(\"ActType\", actType);\r\n return this.Call(\"GetActMainListBCH125\", fd)\r\n }\r\n\r\n //新的呼叫func\r\n Call = (RequestType:string, fd:FormData):object=>{\r\n fd.append(\"RequestType\",RequestType)\r\n return new Promise((resolve, reject) => {\r\n if(this.testUID){\r\n fd.append(\"TestUID\", this.testUID)\r\n }\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: fd,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result);\r\n }).catch((error) => {\r\n alert(`Promoted.${RequestType} 讀取資料失敗`)\r\n console.error(error)\r\n })\r\n })\r\n }\r\n \r\n asyncGetActCover = async (ActID: string): Promise => {\r\n return await this.GetActCover(ActID);\r\n }\r\n\r\n GetActCover = (ActID: string): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetActCover\");\r\n formData.append(\"ActID\", ActID);\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n resolve(res)\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n asyncGetCardPoster = async (FPath: string): Promise => {\r\n return await this.GetCardPoster(FPath);\r\n }\r\n\r\n GetCardPoster = (FPath: string): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetCardPoster\");\r\n formData.append(\"FPath\", FPath);\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n resolve(res)\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n reject()\r\n });\r\n })\r\n }\r\n \r\n asyncGetActMainOtsList = async (class1: string): Promise => {\r\n return await this.GetActMainOtsList(class1);\r\n }\r\n\r\n GetActMainOtsList = (class1: string): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetActMainOtsList\");\r\n formData.append(\"class1\", class1 ? class1 : \"A\");\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n return new Promise((resolve, reject) => { \r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n resolve(res)\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n\r\n //法尊狀態\r\n asyncGetLowStateDashboard = async (): Promise => {\r\n return await this.GetLowStateDashboard();\r\n }\r\n\r\n GetLowStateDashboard = (): object => { \r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetLowStateDashboard\")\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n //console.log(result)\r\n resolve(result.Data[0])\r\n }).catch(error => {\r\n console.error(error);\r\n })\r\n })\r\n }\r\n\r\n asyncGetShowPage1 = async (): Promise => {\r\n return await this.GetShowPage1();\r\n }\r\n\r\n GetShowPage1 = (): object => { \r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"ShowCourseState\")\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data)\r\n }).catch(error => {\r\n console.error(error);\r\n })\r\n })\r\n }\r\n\r\n asyncGetActCompleteList = async (): Promise => {\r\n return await this.GetActCompleteList();\r\n }\r\n\r\n GetActCompleteList = (): object => { \r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetActCompleteList\")\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data)\r\n //HibTable(result.Data);//設定客製的HibTable\r\n }).catch(error => {\r\n console.error(error);\r\n })\r\n })\r\n }\r\n\r\n\r\n asyncGetLowStateInfo = async (): Promise => {\r\n return await this.GetLowStateInfo()\r\n }\r\n\r\n GetLowStateInfo = (): object => { \r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetLowStateInfo\")\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data);\r\n })\r\n })\r\n }\r\n\r\n //使用者報名\r\n asyncDoApplyCourse = async (ActID: string, Answer: string): Promise => {\r\n return await this.DoApplyCourse(ActID, Answer)\r\n }\r\n\r\n DoApplyCourse = (ActID: string, Answer: string): object => {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"DoApplyCourse\")\r\n formData.append(\"ActID\", ActID)\r\n formData.append(\"Answer\", Answer ? Answer : \"Y\")\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data);\r\n })\r\n })\r\n }\r\n\r\n //取得問卷\r\n asyncGetQuestionnaire = async (ExamID: number): Promise => {\r\n return await this.GetQuestionnaire(ExamID)\r\n }\r\n\r\n GetQuestionnaire = (ExamID: number): object => {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetQuestionnaire\")\r\n formData.append(\"ExamID\", ExamID.toString())\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data);\r\n })\r\n })\r\n }\r\n\r\n //送出回答問卷內容\r\n asyncAnswerQuestionnaire = async (ExamID: number, ActID: string, QSNo: number, ItemID: string|undefined, ItemTxt: string|undefined ): Promise => {\r\n return await this.AnswerQuestionnaire(ExamID, ActID, QSNo, ItemID, ItemTxt)\r\n }\r\n\r\n AnswerQuestionnaire = (ExamID: number, ActID: string, QSNo: number, ItemID: string|undefined, ItemTxt: string|undefined): object => {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"AnswerQuestionnaire\")\r\n formData.append(\"ExamID\", ExamID.toString())\r\n formData.append(\"ActID\", ActID.toString())\r\n formData.append(\"QSNo\", QSNo.toString())\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n \r\n if(ItemID){\r\n formData.append(\"ItemID\", ItemID.toString())\r\n }\r\n if(ItemTxt){\r\n formData.append(\"ItemTxt\", ItemTxt.toString())\r\n }\r\n\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data);\r\n })\r\n })\r\n }\r\n\r\n //取得回答問卷內容\r\n asyncGetAnswer = async (ActID:string, ExamID:number): Promise => {\r\n return await this.GetAnswer(ActID, ExamID)\r\n }\r\n\r\n GetAnswer = (ActID:string, ExamID:number): object => {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetAnswer\")\r\n formData.append(\"ActID\", ActID.toString())\r\n formData.append(\"ExamID\", ExamID.toString())\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data);\r\n })\r\n })\r\n }\r\n \r\n //取得摸彩券\r\n asyncGetPerformanceTickets = async (year:number): Promise => {\r\n return await this.GetPerformanceTickets(year)\r\n }\r\n\r\n GetPerformanceTickets = (year:number): object => {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetPerformanceTickets\")\r\n formData.append(\"QueryYear\", year.toString())\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result.Data[0]);\r\n })\r\n })\r\n }\r\n\r\n //檔案上傳\r\n asyncRegFileUpload = async (ActID:string, base64Data:string): Promise => {\r\n return await this.RegFileUpload(ActID, base64Data)\r\n }\r\n\r\n RegFileUpload = (ActID:string, base64Data:string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"RegFileUpload\")\r\n formData.append(\"ActID\", ActID)\r\n formData.append(\"file64\", base64Data);\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n\r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result);\r\n })\r\n })\r\n }\r\n\r\n //檔案下載預覽\r\n asyncRegFileDownload = async ( fileName:string): Promise => {\r\n return await this.RegFileDownload(fileName)\r\n }\r\n\r\n RegFileDownload = (fileName:string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"RegFileDownload\")\r\n formData.append(\"fileName\", fileName)\r\n if(this.testUID){\r\n formData.append(\"TestUID\", this.testUID)\r\n }\r\n \r\n fetch(this.url, {\r\n method: 'POST',\r\n body: formData,\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n console.log(\"Performance 連線失敗,請聯絡資訊部\");\r\n return null;\r\n }\r\n }).then(result => {\r\n resolve(result);\r\n })\r\n })\r\n }\r\n \r\n}\r\n\r\nexport default WebService","//import { rejects } from \"assert\";\r\n\r\n\r\nclass ExamService {\r\n url: string = \"../Ashx/Examination.ashx\";\r\n TestUID: string = \"\"\r\n constructor() {\r\n if (process.env.NODE_ENV == \"development\") {\r\n this.url = \"http://localhost:56400/Ashx/Examination.ashx\";\r\n }\r\n //console.log(\"init webservice \", this.url) \r\n\r\n //this.TestUID='E222600814'\r\n this.TestUID = 'F125960334'\r\n }\r\n\r\n sayHello = async (): Promise => {\r\n return await this.asyncSayHello();\r\n }\r\n\r\n tempDataAction = async (tdo:TempDataObject): Promise => {\r\n return await this.asyncTempDataAction(tdo);\r\n }\r\n\r\n saveExamResult = async (ActID: string, ExamID: string, Score: string): Promise => {\r\n return await this.asyncSaveExamResult(ActID, ExamID, Score);\r\n }\r\n\r\n getExamComplete = async (ActID: string, ExamID: string): Promise => {\r\n return await this.asyncGetExamComplete(ActID, ExamID);\r\n }\r\n\r\n resetExamComplete = async (): Promise => {\r\n return await this.asyncResetExamComplete();\r\n }\r\n\r\n getExamList = async (eid: string, option: string = \"0\", recNum: string = \"10\"): Promise => {\r\n return await this.asyncGetExamList(eid, option, recNum);\r\n }\r\n\r\n getExamInfo = async (eid: string): Promise => {\r\n return await this.asyncGetExamInfo(eid);\r\n }\r\n\r\n asyncTempDataAction = async (tdo:TempDataObject): Promise =>{\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"TempDataAction\");\r\n formData.append(\"Action\", tdo.Action);\r\n formData.append(\"ActID\", tdo.ActID);\r\n formData.append(\"ExamID\", tdo.ExamID.toString());\r\n\r\n if(tdo.TempData){\r\n formData.append(\"TempData\", tdo.TempData);\r\n }\r\n\r\n if (process.env.NODE_ENV == \"development\") {\r\n formData.append(\"TestUID\", this.TestUID);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n console.log(res)\r\n resolve(res)\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n //reject()\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n asyncSayHello = async (): Promise =>{\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"SayHello\");\r\n\r\n if (process.env.NODE_ENV == \"development\") {\r\n formData.append(\"TestUID\", this.TestUID);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n console.log(res)\r\n resolve(res)\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n //reject()\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n asyncGetExamInfo = (eid: string): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetExamInfo\");\r\n formData.append(\"ExamID\", eid);\r\n\r\n if (process.env.NODE_ENV == \"development\") {\r\n formData.append(\"TestUID\", this.TestUID);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n resolve(res)\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n //reject()\r\n resolve(false)\r\n });\r\n })\r\n }\r\n\r\n asyncGetExamList = (eid: string, option: string, recNum: string): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetExamList\");\r\n formData.append(\"ExamID\", eid);\r\n formData.append(\"Option\", option);//自選題1|非自選題0\r\n formData.append(\"recNum\", recNum);//撈回來的題數,預設10題\r\n\r\n if (process.env.NODE_ENV == \"development\") {\r\n formData.append(\"TestUID\", this.TestUID);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n /* 資料處理:\r\n * 由於Answers在SQL已先使JSON string處理過,因此前端取回資料的時候先行將string處理回JSON物件以利後續處理。* */\r\n //console.log(res)\r\n if (res.Result == \"OK\") {\r\n resolve(res)\r\n } else {\r\n console.error('[HIB168 錯誤] => 連線成功但取得資料失敗。');\r\n reject()\r\n }\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n asyncSaveExamResult = (ActID: string, ExamID: string, Score: string): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"SaveExamResult\");\r\n formData.append(\"ActID\", ActID);\r\n formData.append(\"ExamID\", ExamID);\r\n formData.append(\"Score\", Score);\r\n //formData.append(\"Score\", score.toString());\r\n\r\n if (process.env.NODE_ENV == \"development\") {\r\n formData.append(\"TestUID\", this.TestUID);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n if (res.Result == \"OK\") {\r\n resolve(res)\r\n } else {\r\n console.error('[HIB168 錯誤] => 連線成功但取得資料失敗。');\r\n reject()\r\n }\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n asyncGetExamComplete = (ActID: string, ExamID: string): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"GetExamComplete\");\r\n formData.append(\"ActID\", ActID);\r\n formData.append(\"ExamID\", ExamID);\r\n\r\n if (process.env.NODE_ENV == \"development\") {\r\n formData.append(\"TestUID\", this.TestUID);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n if (res.Result == \"OK\") {\r\n resolve(res)\r\n } else {\r\n console.error('[HIB168 錯誤] => 連線成功但取得資料失敗。');\r\n reject()\r\n }\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n asyncResetExamComplete = (): object => {\r\n let formData = new FormData();\r\n formData.append(\"RequestType\", \"ResetExamComplete\");\r\n return new Promise((resolve, reject) => {\r\n fetch(this.url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n body: formData\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n }).then(res => {\r\n if (res.Result == \"OK\") {\r\n resolve(res)\r\n } else {\r\n console.error('[HIB168 錯誤] => 連線成功但取得資料失敗。');\r\n reject()\r\n }\r\n }).catch(error => {\r\n console.error('[HIB168 錯誤]=>jsonip 取得失敗:', error)\r\n reject()\r\n });\r\n })\r\n }\r\n\r\n \r\n\r\n}\r\n\r\n\r\nexport default ExamService","import React from 'react';\r\nimport ReactDOM from 'react-dom/client';\r\nimport App from './App';\r\n//import reportWebVitals from './reportWebVitals';\r\nimport WebService from './WebService/WebService'\r\nimport ExamService from './WebService/ExamService'\r\nimport ServiceContext from './WebService/ServiceContext'\r\nimport { BasicContextProvider } from './context/BasicContext'\r\n\r\n\r\nconst ws = new WebService();\r\nconst es = new ExamService();\r\n\r\n\r\nReactDOM.createRoot(\r\n\tdocument.getElementById('root') as HTMLElement\r\n).render(\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n)\r\n/*\r\nReactDOM.createRoot(\r\n\tdocument.getElementById('root') as HTMLElement\r\n).render(\r\n\r\n\t\r\n\t\t\r\n\t\r\n\r\n)\r\n*/","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkhib_course\"] = self[\"webpackChunkhib_course\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [473], () => (__webpack_require__(111)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","BasicContext","createContext","PID","BID","ActType","ActID","Class1","Class2","openCard","cardList","ansList","ExamPaper","setPID","pid","setBID","setActType","actType","setActID","setClass1","ID","setClass2","setOpenCard","open","setCardList","list","setAnsList","setExamPaper","examPaper","BasicContextProvider","props","useState","setMyPID","setMyBID","setMyActType","setMyActID","setMyClass1","setMyClass2","setMyOpenCard","undefined","cardlist","setMyCardlist","setMyAnsList","setMyExamPaper","useEffect","url","window","history","replaceState","trim","Provider","value","actID","toUpperCase","children","ws","useContext","WebServiceContext","queen","setQueen","inputRef","useRef","file64","setFile64","fileType","setFileType","resFileName","setResFileName","snakeBoxRef","cardData","ResFileName","WebService","RegFileUpload","then","res","console","log","_r","Result","fileName","setTimeout","current","launch","alert","complete","style","display","flexDirection","className","onClick","RegFileDownload","ext","split","a","document","createElement","toLowerCase","href","download","click","src","type","ref","onChange","event","file","_f","target","files","name","length","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","bc","setCurrent","defAns","isAnswered","marginBottom","defaultValue","ans","QSNo","toString","qtxt","qName","ItemTxt","temp","serial","checker","btns","setBtns","JSON","parse","jsonString","showAns","map","index","key","ItemID","ansTxt","ItemTitle","myAns","quests","notDone","setNotDone","checkAnsTotal","countAry","item","push","isComplete","quest","str","pattern","QName","RegExp","match","QType","AnswerInput","indexOf","Number","regState","editable","AnswerBtns","Answers","color","Spinner","Close","Yes","No","Not","CloudComplete","Search","_c","HibModal","this","title","show","showCross","cancel","confirm","confirmText","Component","prop","pic","setPic","useLayoutEffect","asyncGetActCover","asyncGetCardPoster","FPath","imgStyle","ServiceContext","EID","setEID","PT","setQuests","openQuest","setOpenQuest","hasFile","setHasFile","openReviewConfirm","setOpenReviewConfirm","openConfirm","setOpenConfirm","openNotToAttend","setOpenNotToAttend","openConfirmWithQuest","setOpenConfirmWithQuest","typeTitle","setTypeTitle","Date","getTime","nowTime","setNowTime","beginTime","setBeginTime","endTime","setEndTime","modalPhoto","setModalPhoto","swiperIndex","setSwiperIndex","sectionRef","openBtn","setOpenBtn","closePanel","loadData","asyncGetActMainOtsList","Data","gotoOnlineCourse","LessonDateFormat","timestamp","_d","parseInt","getFullYear","getMonth","getDate","getHours","getMinutes","BeginTime","bt","EndTime","et","ExamID","asyncGetQuestionnaire","QRes","asyncGetAnswer","scrollTo","top","behavior","time","timeFormateB","limit","Math","floor","id","ActTitle","競賽業績","Intl","NumberFormat","minimumFractionDigits","format","金張數","銀張數","銅張數","hours","Hours1","WatchHours","ExamScore","RecordTime","ActDate","PublishDate","Location","Speaker","Remark","tabIndex","Url","AttachmentPosters","width","height","margin","objectFit","RecognizeYear","ExamPaperList","flexWrap","ExamName","NoFilm","needFile","FileUploader","disabled","notjoin","Questionnaire","asyncDoApplyCourse","StateDefault","sn","doAnswer","asyncAnswerQuestionnaire","pagination","modules","Pagination","initialSlide","onSlideChange","onSwiper","swiper","maxHeight","myChart","chartContainer","data","d","dom","innerHTML","echarts","init","xLabels","lifeStart","lifeEnd","propStart","propEnd","bestStart","bestEnd","setRuler","startData","endData","sy","substr","sm","ey","em","cy","cm","sw","safe","getRulerValue","date","_v","e","replace","initCtData","LDate","LBetween","RDate","RBetween","SDate","SuggestDateHalfYear","timeline","LYear","RYear","setOption","text","left","tooltip","trigger","axisPointer","xAxis","boundaryGap","axisLabel","textStyle","fontSize","yAxis","splitNumber","interval","formatter","series","markPoint","symbol","getYear","symbolSize","symbolOffset","label","position","smooth","stack","sampling","itemStyle","markArea","addEventListener","resize","chart","setMyOpen","stateData","setStateData","setOpen","asyncGetLowStateInfo","asyncGetLowStateDashboard","LawChart","hasDetail","setClose","backgroundColor","marginTop","CosName","CompleteDate","isCompleteTotal","setIsCompleteTotal","getLRStatus","ct","Hours","padding","justifyContent","CurrentYear","nowCard","setNowCards","properties","setProperties","propertiesDictionary","setPropertiesDictionary","pCurrentCode","setPCurrentCode","LCurrentYear","RCurrentYear","getActMainList","Complete","to","PD","propertyCodes","jPropertys","p","PropertyCode","PropertyName","to2","card","ChartA","ChartB","hit","RecordCompleteDate","round","CardDetail","ActTime","RegTotal","Maximum","acceptNum","renderData","setRenderData","openChart","setOpenChart","openNotice","setOpenNotice","LD","ActTypeName","year","description","state","LComplete","LTotal","isHide","RD","RComplete","RTotal","asyncGetShowPage1","row","SD","ISFinish","FinalCC","ActBtn","setActBtn","menuMame","bid","class1","btn","class2","orgData","menuData","setMenuData","page","setPage","keywordInput","asyncGetActCompleteList","i","menu","ceil","placeholder","keyword","sortData","flat","searchByKeyWord","Class1Name","RealCompleteDate","Class2Name","Exam","Score","ExamContext","isTesting","examInfo","examData","record","setIsTesting","setRecord","updateRecord","setExamInfo","setExamData","ExamContextProvider","_t","userAns","Indicators","active","ec","examList","setExamList","nowNum","num","setNum","ansRes","setAnsRes","ansState","setAnsState","ansSelect","setAnsSelect","setAnsKind","tdo","Action","TempData","stringify","ExamService","tempDataAction","AnsKind","answerHandler","Ans","question","answersList","aSN","checked","rightAns","find","timer","total","tn","setTn","isPlay","countTime","setCountTime","countBar","setCountBar","stopTimer","clearInterval","isEnd","totalTime","now","setInterval","_m","getSeconds","marginRight","transition","MyData","setMyData","tempData","index2","flexBasis","paddingLeft","setTimer","timesUp","setTimesUp","timerSw","setTimerSw","setIsComplete","isUploading","setIsUploading","answerNum","TestMinute","_w","hib168","TimeoutTimer","handInPaper","saveExamResult","countScore","reTest","count","ExamResult","end","ExamType","ExamBasic","answerResult","ExamCheck","mesg","setMesg","mesgOpen","setMesgOpen","examID","location","reload","showType","LastUpdate","Memo","setIsAnswered","loadState","setLoadState","tempOpen","setTempOpen","setAnswerNum","currentExamInfo","ExamData","getExamInfo","ei","Optional","QRecCount","getExamComplete","getExamList","ary","_it","ex","userAnswer","_td","ExamQuest","sURL","URL","searchParams","get","Menu","Dashbaord","State","CardOtsList","fd","FormData","Call","append","RequestType","testUID","fetch","method","body","response","ok","json","GetActCover","formData","mode","GetCardPoster","GetActMainOtsList","GetLowStateDashboard","GetShowPage1","GetActCompleteList","GetLowStateInfo","Answer","DoApplyCourse","GetQuestionnaire","AnswerQuestionnaire","GetAnswer","GetPerformanceTickets","base64Data","asyncSayHello","asyncTempDataAction","asyncSaveExamResult","asyncGetExamComplete","asyncResetExamComplete","eid","option","recNum","asyncGetExamList","asyncGetExamInfo","TestUID","es","ReactDOM","getElementById","render","App","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","definition","o","defineProperty","enumerable","obj","prototype","hasOwnProperty","call","b","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}