0172bb380235b79158d9a3920ec90260.json 29.6 KB
{"ast":null,"code":"import { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\n\nvar _jsxFileName = \"C:\\\\Users\\\\kkwan_000\\\\Desktop\\\\git\\\\2017110269\\\\minsung\\\\src\\\\Container\\\\Html.js\",\n    _s = $RefreshSig$();\n\nimport React, { useState, useEffect } from 'react';\nimport { Modal, Upload, message, Form, InputNumber, Button, Select, Row, Col } from 'antd';\nimport { InboxOutlined, LockOutlined, SaveTwoTone } from '@ant-design/icons';\nimport { saveFileAndQno } from 'lib/api/html';\nimport { checkQno } from '../lib/api/html';\nconst {\n  Option\n} = Select; //파일 업로드\n//업로드 폼에서의 로직\n\nconst fetchSaveData = async data => {\n  try {\n    console.log(data);\n    const result = await saveFileAndQno(data);\n\n    if (result.status === 200) {\n      return result.data;\n    }\n  } catch (e) {\n    console.log(e);\n    message.warn(e.message);\n  }\n};\n\nconst fetchCheckQno = async qno => {\n  try {\n    const result = await checkQno(qno);\n\n    if (result.status === 200) {\n      console.log(result);\n      message.info(\"사용 가능한 문항 번호 입니다.\");\n      return true;\n    } else {\n      message.info(\"존재 하지 않는 문항 번호 입니다.\");\n      return false;\n    }\n  } catch (e) {\n    console.log(e);\n    message.info(\"존재 하지 않는 문항 번호 입니다.\");\n    return false;\n  }\n};\n\nconst Html = ({\n  visible,\n  onCancel,\n  callback\n}) => {\n  _s();\n\n  const [fields, setFields] = useState([]);\n  const [qno, setQno] = useState(null);\n  const [upload, setUpload] = useState(false);\n  const [fileList, setFileList] = useState([]);\n  const [qnoCheck, setQnoCheck] = useState(false);\n\n  const changeNumber = value => {\n    setQno(value);\n    setFields([...fields, {\n      name: ['qno'],\n      value: value\n    }]);\n  };\n\n  useEffect(() => {\n    if (!visible) {\n      let initFields = [{\n        name: ['qno'],\n        value: null\n      }, {\n        name: ['typeSol'],\n        value: null\n      }, {\n        name: ['typeQue'],\n        value: null\n      }, {\n        name: ['creator'],\n        value: null\n      }];\n      setQno(null);\n      setFields(initFields);\n      setFileList([]);\n    }\n  }, [visible]);\n  const props = {\n    multiple: false,\n    //data: { qno: qno },\n    accept: '.html',\n    onRemove: file => {\n      const index = fileList.indexOf(file);\n      const newFileList = fileList.slice();\n      newFileList.splice(index, 1);\n      return {\n        fileList: newFileList\n      };\n    },\n    beforeUpload: file => {\n      console.log(file);\n\n      if (file.name.indexOf('.html') > 0) {\n        setFileList([file]);\n      } else {\n        setFileList([]);\n        message.info(\"Html 형식의 파일이 아닙니다.\");\n      }\n\n      return false;\n    }\n  };\n\n  const onOk = () => {\n    setUpload(true);\n  };\n\n  const normFile = e => {\n    console.log('Upload event:', e);\n\n    if (Array.isArray(e)) {\n      return e;\n    }\n\n    return e && e.fileList;\n  };\n\n  const onClickQno = async e => {\n    e.preventDefault(); //번호가 호출 성공시 setQnoCheck(true);\n\n    if (qno) {\n      const _checkQno = await fetchCheckQno(qno);\n\n      setQnoCheck(_checkQno);\n    }\n  };\n\n  const onFinish = async values => {\n    console.log(qnoCheck);\n\n    if (!qnoCheck) {\n      message.warning(\"문제 번호를 확인해 주세요.\");\n      return;\n    } else {\n      const creator = sessionStorage.getItem('id');\n      console.log('Received values of form: ', values);\n      const formData = new FormData();\n      formData.append('qno', values.qno);\n      formData.append('typeSol', values.typeSol);\n      formData.append('typeQue', values.typeQue);\n      formData.append('html', values.html[0]);\n      formData.append('creator', creator);\n      const result = await fetchSaveData(formData);\n      console.log(result);\n\n      if (result) {\n        message.info(result.message);\n        let initFields = [{\n          name: ['qno'],\n          value: null\n        }, {\n          name: ['typeSol'],\n          value: null\n        }, {\n          name: ['typeQue'],\n          value: null\n        }, {\n          name: ['creator'],\n          value: null\n        }];\n        setQno(null);\n        setFields(initFields);\n        setFileList([]);\n        onCancel();\n        callback({\n          status: 'SAVE_OK'\n        });\n      } else {\n        callback({\n          status: 'SAVE_FAIL'\n        });\n      }\n    }\n  };\n\n  const onChangeTypeSol = value => {\n    console.log(value);\n    setFields([...fields, {\n      name: ['typeSol'],\n      value: value\n    }]);\n  };\n\n  const onChangeTypeQue = value => {\n    console.log(value);\n    setFields([...fields, {\n      name: ['typeQue'],\n      value: value\n    }]);\n  };\n\n  const formItemLayout = {\n    labelCol: {\n      span: 6\n    },\n    wrapperCol: {\n      span: 14\n    }\n  };\n  return /*#__PURE__*/_jsxDEV(Modal, {\n    placement: 'bottom',\n    closable: true,\n    height: '75%',\n    visible: visible,\n    okText: '저장',\n    cancelText: '이전',\n    onCancel: onCancel,\n    footer: null,\n    children: /*#__PURE__*/_jsxDEV(Form, {\n      name: \"validate_other\",\n      ...formItemLayout,\n      onFinish: onFinish,\n      fields: [{\n        name: ['html'],\n        value: fileList\n      }, ...fields],\n      children: [/*#__PURE__*/_jsxDEV(Form.Item, {\n        name: \"qno\",\n        label: \"\\uBB38\\uC81C \\uBC88\\uD638\",\n        rules: [{\n          required: true,\n          message: '저장할 html의 문항번호를 입력해 주세요.'\n        }],\n        children: /*#__PURE__*/_jsxDEV(Row, {\n          children: [/*#__PURE__*/_jsxDEV(Col, {\n            children: /*#__PURE__*/_jsxDEV(InputNumber, {\n              min: 0,\n              max: 10000,\n              value: qno,\n              onChange: changeNumber\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 199,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 198,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            children: /*#__PURE__*/_jsxDEV(Button, {\n              onClick: onClickQno,\n              children: \"\\uBC88\\uD638 \\uD655\\uC778\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 207,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 206,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 197,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 188,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n        name: \"typeSol\",\n        label: \"\\uBB38\\uC81C \\uD0C0\\uC785\",\n        rules: [{\n          required: true,\n          message: '저장할 html의 문제 타입을 선택해 주세요.'\n        }],\n        children: /*#__PURE__*/_jsxDEV(Select, {\n          onChange: onChangeTypeSol,\n          children: [/*#__PURE__*/_jsxDEV(Option, {\n            value: \"\\uC624\\uC9C0\\uC120\\uB2E4\\uD615\",\n            children: \"\\uC624\\uC9C0\\uC120\\uB2E4\\uD615\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 221,\n            columnNumber: 14\n          }, this), /*#__PURE__*/_jsxDEV(Option, {\n            value: \"\\uB2E8\\uB2F5\\uD615\",\n            children: \"\\uB2E8\\uB2F5\\uD615\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 222,\n            columnNumber: 14\n          }, this), /*#__PURE__*/_jsxDEV(Option, {\n            value: \"\\uACC4\\uC0B0\\uC2DD\",\n            children: \"\\uACC4\\uC0B0\\uC2DD\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 223,\n            columnNumber: 14\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 220,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 211,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n        name: \"typeQue\",\n        label: \"\\uBB38\\uC81C/\\uD480\\uC774 \\uAD6C\\uBD84\",\n        rules: [{\n          required: true,\n          message: '저장할 html의 문제/풀이 구분을 선택해 주세요.'\n        }],\n        children: /*#__PURE__*/_jsxDEV(Select, {\n          onChange: onChangeTypeQue,\n          children: [/*#__PURE__*/_jsxDEV(Option, {\n            value: \"\\uBB38\\uC81C\",\n            children: \"\\uBB38\\uC81C\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 236,\n            columnNumber: 14\n          }, this), /*#__PURE__*/_jsxDEV(Option, {\n            value: \"\\uD480\\uC774\",\n            children: \"\\uD480\\uC774\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 237,\n            columnNumber: 14\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 235,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 226,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n        label: \"\\uD30C\\uC77C \\uC5C5\\uB85C\\uB4DC\",\n        children: /*#__PURE__*/_jsxDEV(Form.Item, {\n          name: \"html\",\n          valuePropName: \"fileList\",\n          getValueFromEvent: normFile,\n          noStyle: true,\n          rules: [{\n            required: true,\n            message: '파일을 드래그하거나 선택해 주세요.'\n          }],\n          children: /*#__PURE__*/_jsxDEV(Upload.Dragger, {\n            name: \"files\",\n            ...props,\n            children: [/*#__PURE__*/_jsxDEV(\"p\", {\n              className: \"ant-upload-drag-icon\",\n              children: /*#__PURE__*/_jsxDEV(InboxOutlined, {}, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 255,\n                columnNumber: 15\n              }, this)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 254,\n              columnNumber: 13\n            }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n              className: \"ant-upload-text\",\n              children: \"Click or drag file to this area to upload\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 257,\n              columnNumber: 13\n            }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n              className: \"ant-upload-hint\",\n              children: \"Support for a single or bulk upload.\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 258,\n              columnNumber: 13\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 253,\n            columnNumber: 11\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 241,\n          columnNumber: 9\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 240,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n        style: {\n          alignContent: 'middle'\n        },\n        wrapperCol: {\n          span: 12,\n          offset: 6\n        },\n        children: /*#__PURE__*/_jsxDEV(Button, {\n          type: \"primary\",\n          htmlType: \"submit\",\n          children: \"\\uC800\\uC7A5\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 264,\n          columnNumber: 9\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 263,\n        columnNumber: 7\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 183,\n      columnNumber: 7\n    }, this)\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 173,\n    columnNumber: 5\n  }, this);\n};\n\n_s(Html, \"RT/1nQFqGepEy4/R5LrHcndfj5U=\");\n\n_c = Html;\nexport default Html;\n\nvar _c;\n\n$RefreshReg$(_c, \"Html\");","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/src/Container/Html.js"],"names":["React","useState","useEffect","Modal","Upload","message","Form","InputNumber","Button","Select","Row","Col","InboxOutlined","LockOutlined","SaveTwoTone","saveFileAndQno","checkQno","Option","fetchSaveData","data","console","log","result","status","e","warn","fetchCheckQno","qno","info","Html","visible","onCancel","callback","fields","setFields","setQno","upload","setUpload","fileList","setFileList","qnoCheck","setQnoCheck","changeNumber","value","name","initFields","props","multiple","accept","onRemove","file","index","indexOf","newFileList","slice","splice","beforeUpload","onOk","normFile","Array","isArray","onClickQno","preventDefault","_checkQno","onFinish","values","warning","creator","sessionStorage","getItem","formData","FormData","append","typeSol","typeQue","html","onChangeTypeSol","onChangeTypeQue","formItemLayout","labelCol","span","wrapperCol","required","alignContent","offset"],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from 'react';\r\nimport { Modal, Upload, message, Form, InputNumber, Button , Select ,Row, Col} from 'antd';\r\nimport { InboxOutlined, LockOutlined, SaveTwoTone } from '@ant-design/icons';\r\nimport { saveFileAndQno } from 'lib/api/html';\r\nimport { checkQno } from '../lib/api/html';\r\n\r\nconst { Option} = Select;\r\n//파일 업로드\r\n//업로드 폼에서의 로직\r\n\r\nconst fetchSaveData = async (data) => {\r\n  try{\r\n    console.log(data);\r\n    const result = await saveFileAndQno(data);\r\n    if(result.status===200){\r\n      return result.data;\r\n    }    \r\n  }catch(e){\r\n    console.log(e);\r\n    message.warn(e.message);\r\n  }\r\n}\r\n\r\nconst fetchCheckQno = async(qno) => {\r\n    try{\r\n      const result = await checkQno(qno);\r\n      if(result.status===200){\r\n        console.log(result);\r\n        message.info(\"사용 가능한 문항 번호 입니다.\");\r\n        return true;\r\n      }else{ \r\n        message.info(\"존재 하지 않는 문항 번호 입니다.\");\r\n        return false;\r\n      }\r\n    }catch(e){\r\n      console.log(e);\r\n      message.info(\"존재 하지 않는 문항 번호 입니다.\");\r\n      return false;\r\n    }\r\n}\r\n\r\nconst Html = ({ visible, onCancel, callback }) => {\r\n  const [fields,setFields] =useState([]);\r\n  const [qno, setQno] = useState(null);\r\n  const [upload,setUpload]=useState(false);\r\n  const [fileList, setFileList]=useState([]);\r\n  const [qnoCheck,setQnoCheck] =useState(false);\r\n\r\n\r\n  const changeNumber = (value) => {\r\n     setQno(value);\r\n     setFields([...fields, {name:['qno'],value:value}]);\r\n  };\r\n\r\n\r\n  useEffect(()=>{\r\n    if(!visible){\r\n      let initFields = [\r\n        {name:['qno'],value:null},\r\n        {name:['typeSol'],value:null},\r\n        {name:['typeQue'],value:null},\r\n        {name:['creator'],value:null},\r\n      ];\r\n      setQno(null);\r\n      setFields(initFields);\r\n      setFileList([]);\r\n    }\r\n  },[visible]);\r\n\r\n  const props = {\r\n    multiple:false,\r\n    //data: { qno: qno },\r\n    accept:'.html',\r\n    onRemove: file => {\r\n        const index = fileList.indexOf(file);\r\n        const newFileList = fileList.slice();\r\n        newFileList.splice(index, 1);\r\n        return {\r\n          fileList: newFileList,\r\n        };\r\n    },\r\n\r\n    beforeUpload: file => {\r\n      console.log(file);\r\n      if(file.name.indexOf('.html')>0)\r\n      {\r\n        setFileList([file]);\r\n      }else {\r\n        setFileList([]);\r\n        message.info(\"Html 형식의 파일이 아닙니다.\");\r\n      }\r\n      return false;\r\n          \r\n    },\r\n   };\r\n\r\n   const onOk = () => {\r\n     setUpload(true)\r\n   };\r\n  \r\n\r\n   const normFile = e => {\r\n    console.log('Upload event:', e);\r\n    if (Array.isArray(e)) {\r\n      return e;\r\n    }\r\n    return e && e.fileList;\r\n  };\r\n\r\n  const onClickQno = async(e)=>{\r\n    e.preventDefault();\r\n    //번호가 호출 성공시 setQnoCheck(true);\r\n    if(qno){\r\n      const _checkQno= await fetchCheckQno(qno);\r\n      setQnoCheck(_checkQno);\r\n    }\r\n  };\r\n\r\n  const onFinish = async values => {\r\n    console.log(qnoCheck);\r\n    if(!qnoCheck){\r\n      message.warning(\"문제 번호를 확인해 주세요.\")\r\n      return;\r\n    }else{\r\n    const creator = sessionStorage.getItem('id');\r\n    console.log('Received values of form: ', values);\r\n    const formData = new FormData();\r\n    formData.append('qno', values.qno);\r\n    formData.append('typeSol', values.typeSol);\r\n    formData.append('typeQue', values.typeQue);\r\n    formData.append('html', values.html[0]);\r\n    formData.append('creator', creator);\r\n\r\n    const result = await fetchSaveData(formData);\r\n    console.log(result);\r\n    if(result){\r\n      message.info(result.message);\r\n      let initFields = [\r\n        {name:['qno'],value:null},\r\n        {name:['typeSol'],value:null},\r\n        {name:['typeQue'],value:null},\r\n        {name:['creator'],value:null},\r\n      ];\r\n      setQno(null);\r\n      setFields(initFields);\r\n      setFileList([]);\r\n      onCancel();\r\n      callback({status:'SAVE_OK'});\r\n    }else{\r\n      callback({status:'SAVE_FAIL'})\r\n      }\r\n    } \r\n  };\r\n\r\n  const onChangeTypeSol = (value) => {\r\n    console.log(value);\r\n    setFields([...fields, {name:['typeSol'],value:value}]);\r\n  }\r\n\r\n  const onChangeTypeQue = (value) => {\r\n    console.log(value);\r\n    setFields([...fields, {name:['typeQue'],value:value}])\r\n  }\r\n\r\n\r\n   \r\n  const formItemLayout = {\r\n    labelCol: { span: 6 },\r\n    wrapperCol: { span: 14 },\r\n  };\r\n\r\n  return (\r\n    <Modal\r\n      placement={'bottom'}\r\n      closable={true}\r\n      height={'75%'}\r\n      visible={visible}\r\n      okText={'저장'}\r\n      cancelText={'이전'}\r\n      onCancel={onCancel}\r\n      footer={null}\r\n     >\r\n      <Form  name=\"validate_other\"\r\n      {...formItemLayout}\r\n      onFinish={onFinish}\r\n      fields={[{name:['html'],value:fileList},...fields]}\r\n      >\r\n        <Form.Item\r\n          name=\"qno\"\r\n          label=\"문제 번호\"\r\n          rules={[\r\n            {\r\n              required: true,\r\n              message: '저장할 html의 문항번호를 입력해 주세요.',\r\n            },\r\n          ]}>\r\n          <Row>\r\n            <Col>\r\n              <InputNumber\r\n                min={0}\r\n                max={10000}\r\n                value={qno}\r\n                onChange={changeNumber}>\r\n              </InputNumber>\r\n            </Col>\r\n            <Col>\r\n              <Button onClick={onClickQno}>번호 확인</Button>\r\n            </Col>\r\n          </Row>\r\n        </Form.Item>\r\n        <Form.Item\r\n          name=\"typeSol\"\r\n          label=\"문제 타입\"\r\n          rules={[\r\n            {\r\n              required: true,\r\n              message: '저장할 html의 문제 타입을 선택해 주세요.',\r\n            },\r\n          ]}>\r\n          <Select onChange={onChangeTypeSol}>\r\n             <Option value=\"오지선다형\">오지선다형</Option>\r\n             <Option value=\"단답형\">단답형</Option>\r\n             <Option value=\"계산식\">계산식</Option>\r\n          </Select>\r\n        </Form.Item>\r\n        <Form.Item\r\n          name=\"typeQue\"\r\n          label=\"문제/풀이 구분\"\r\n          rules={[\r\n            {\r\n              required: true,\r\n              message: '저장할 html의 문제/풀이 구분을 선택해 주세요.',\r\n            },\r\n          ]}>\r\n          <Select onChange={onChangeTypeQue}>\r\n             <Option value=\"문제\">문제</Option>\r\n             <Option value=\"풀이\">풀이</Option>\r\n          </Select>\r\n        </Form.Item>\r\n        <Form.Item label=\"파일 업로드\">\r\n        <Form.Item \r\n          name=\"html\" \r\n          valuePropName=\"fileList\" \r\n          getValueFromEvent={normFile} \r\n    \r\n          noStyle   \r\n          rules={[\r\n            {\r\n              required: true,\r\n              message: '파일을 드래그하거나 선택해 주세요.',\r\n            },\r\n          ]}>\r\n          <Upload.Dragger name=\"files\" {...props} >\r\n            <p className=\"ant-upload-drag-icon\">\r\n              <InboxOutlined />\r\n            </p>\r\n            <p className=\"ant-upload-text\">Click or drag file to this area to upload</p>\r\n            <p className=\"ant-upload-hint\">Support for a single or bulk upload.</p>\r\n          </Upload.Dragger>\r\n        </Form.Item>\r\n      </Form.Item>\r\n\r\n      <Form.Item style={{alignContent:'middle'}} wrapperCol={{ span: 12, offset: 6 }}>\r\n        <Button type=\"primary\" htmlType=\"submit\">\r\n          저장\r\n        </Button>\r\n      </Form.Item>\r\n      </Form>\r\n     \r\n    </Modal>\r\n  );\r\n};\r\n\r\nexport default Html;\r\n"]},"metadata":{},"sourceType":"module"}