{"version":3,"file":"js/chunk.1f6d62f77edc48cd.js","mappings":"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","sources":["webpack:///./src/components/group/GroupPostAsset/index.tsx","webpack:///./src/components/user/Auth/AuthModal.tsx"],"sourcesContent":["import assetSvg from '@/static/imgs/post_asset.svg';\nimport { Button } from 'antd';\n// import download from 'downloadjs';\nimport AuthModal from '@/components/user/Auth/AuthModal';\nimport { useEffect, useState } from 'react';\nimport './index.scss';\n\ntype File = {\n  name: string;\n  oss_info_parsed: {\n    filename: string;\n    key: string;\n    url: string;\n  };\n};\n\n// TODO 资料内容对接真实数据\ntype GroupPostAssetProps = {\n  files: File[];\n  user: any;\n};\n\nfunction download(url: string, filename: string) {\n  fetch(url)\n    .then((response) => response.blob())\n    .then((blob) => {\n      const link = document.createElement('a');\n      link.href = URL.createObjectURL(blob);\n      link.download = filename;\n      link.click();\n    })\n    .catch(console.error);\n}\n\nconst IsPicOrPdf = (url: string) => {\n  const index = url.lastIndexOf('.');\n  const ext = url.slice(index + 1).toLowerCase();\n  if (ext === 'png' || ext === 'jpg' || ext === 'jpeg' || ext === 'pdf') {\n    return true;\n  }\n  return false;\n};\n\nconst GroupPostAsset: React.FC<GroupPostAssetProps> = (props) => {\n  const [authOpen, setAuthOpen] = useState('false');\n\n  const setPropClose = () => {\n    setAuthOpen('false');\n  };\n\n  const [pop, setPop] = useState('0');\n  useEffect(() => {\n    if (!props.user?.is_base_vip) {\n      if (\n        props.user?.is_founding_vip ||\n        props.user?.super_vip_status === '生效中'\n      ) {\n        setPop('5');\n      } else {\n        setPop('4');\n      }\n    }\n  }, [props.user]);\n\n  return (\n    <div className=\"group-post-asset bg-hex-fff w-324px fixed rounded-6px p-20px\">\n      <div className=\"text-16px font-550 text-hex-1d2129\">资料</div>\n\n      {props.files.length ? (\n        props.files.map((file) => {\n          return (\n            <div\n              className=\"asset p-10px mt-10px\"\n              data-flex=\"main:justify cross:center\"\n              key={file.oss_info_parsed.key}\n            >\n              <div className=\"asset-title\">\n                <img src={assetSvg} />\n                <span className=\"ml-5px\">{file.name}</span>\n              </div>\n              {IsPicOrPdf(file.oss_info_parsed.url) && (\n                <a\n                  className=\"link\"\n                  rel=\"noreferrer\"\n                  onClick={() => {\n                    if (pop !== '0') {\n                      setAuthOpen('true');\n                      return;\n                    } else {\n                      setAuthOpen('false');\n                    }\n                    window.open(file.oss_info_parsed.url, '_blank');\n                  }}\n                >\n                  查看\n                </a>\n              )}\n              <Button\n                type=\"link\"\n                className=\"link\"\n                onClick={() => {\n                  if (pop !== '0') {\n                    setAuthOpen('true');\n                    return;\n                  } else {\n                    setAuthOpen('false');\n                  }\n                  download(file.oss_info_parsed.url, file.name);\n                }}\n              >\n                下载\n              </Button>\n            </div>\n          );\n        })\n      ) : (\n        <div className=\"mt-10px\">暂无资料</div>\n      )}\n      <AuthModal\n        pop={pop}\n        needOpen={false}\n        setOpen={authOpen}\n        title={'下载附件需认证'}\n        setPropClose={setPropClose}\n        utm_source=\"post_attachment\"\n      />\n    </div>\n  );\n};\n\nexport default GroupPostAsset;\n","import { Button, Modal } from 'antd';\nimport { useEffect, useState } from 'react';\nimport './index.scss';\n\ntype AuthModalProps = {\n  utm_source: string;\n  pop: string;\n  needOpen: boolean;\n  setOpen?: any;\n  title?: any;\n  setPropClose?: () => void;\n  next?: string;\n};\n\ntype tipsDataType = {\n  [propname: string]: {\n    title: string;\n    desc: string;\n    btnName: string;\n    skipUrl: string;\n  };\n};\n\nconst notCloseType = [\n  'ai_assistance',\n  'ai_literature_reading',\n  'crf_page',\n  'ai_paper_polish',\n];\nconst aiTypes = ['ai_assistance', 'ai_literature_reading', 'ai_paper_polish'];\n\nconst AuthModal: React.FC<AuthModalProps> = (props) => {\n  const tipsData: tipsDataType = {\n    '1': {\n      // 非会员认证\n      title: props.title || '科研工具是医咖会员专属权益',\n      desc: `<div class='text-hex-4E5969' style='line-height: 20px'>\n      <div class='text-hex-1D2129 text-14px'>认证可免费享受基础会员权益</div>\n      <div class='flex items-center mt-12px'>\n        <div class='w-4px h-4px bg-hex-709cD0 rounded-full mr-8px flex-shrink-0'></div>\n        <span>基础课程券2张</span>\n      </div>\n      <div class='flex items-center mt-12px'>\n        <div class='w-4px h-4px bg-hex-709cD0 rounded-full mr-8px flex-shrink-0'></div>\n        <span>工具权益</span>\n      </div>\n      <div class='flex items-center mt-12px'>\n        <div class='w-4px h-4px bg-hex-709cD0 rounded-full mr-8px flex-shrink-0'></div>\n        <span>200积分</span>\n      </div>\n    </div>`,\n      btnName: '去认证',\n      skipUrl:\n        `/community/user/certification/?utm_source=${props.utm_source}` +\n        (props.next ? `&next=${props.next}` : ''),\n    },\n    '2': {\n      // 会员认证\n      title: '您还未完成职业认证',\n      desc: `<div>为保证平台的学术氛围和交流合作的高效,请各位会员尽快认证,即可开启会员中心各项功能和服务</div>`,\n      btnName: '去认证',\n      skipUrl:\n        `/community/user/certification/?utm_source=${props.utm_source}` +\n        (props.next ? `&next=${props.next}` : ''),\n    },\n    '3': {\n      // 会员升级\n      title: '您的会员权益不包含该模块',\n      desc: `<div>您当前为基础会员,升级为超级会员后可使用该模块</div>`,\n      btnName: '去升级',\n      skipUrl: '/community/user/vip/categories/',\n    },\n    '4': {\n      // 非会员认证,课程兑换场景和下载认证场景\n      title: props.title || '您还未完成职业认证',\n      desc: `<div class='text-hex-4E5969' style='line-height: 20px'>\n      <div class='text-hex-1D2129 text-14px'>为保证平台的学术氛围,请先完成认证,认证可免费享受基础会员权益</div>\n      <div class='flex items-center mt-12px'>\n        <div class='w-4px h-4px bg-hex-709cD0 rounded-full mr-8px flex-shrink-0'></div>\n        <span>基础课程券2张</span>\n      </div>\n      <div class='flex items-center mt-12px'>\n        <div class='w-4px h-4px bg-hex-709cD0 rounded-full mr-8px flex-shrink-0'></div>\n        <span>工具权益</span>\n      </div>\n      <div class='flex items-center mt-12px'>\n        <div class='w-4px h-4px bg-hex-709cD0 rounded-full mr-8px flex-shrink-0'></div>\n        <span>200积分</span>\n      </div>\n    </div>`,\n      btnName: '去认证',\n      skipUrl:\n        `/community/user/certification/?utm_source=${props.utm_source}` +\n        (props.next ? `&next=${props.next}` : ''),\n    },\n    '5': {\n      // 会员认证,课程兑换场景和下载认证场景\n      title: props.title || '您还未完成职业认证',\n      desc: `<div>为保证平台的学术氛围,请先完成认证</div>`,\n      btnName: '去认证',\n      skipUrl:\n        `/community/user/certification/?utm_source=${props.utm_source}` +\n        (props.next ? `&next=${props.next}` : ''),\n    },\n    '6': {\n      // 众智问卷语料库\n      title: '请先完成医咖会认证',\n      desc: `<div>“众智问卷语料库”是为医学研究者提供的问卷资源交流平台,请您完成医咖会认证后使用。</div>`,\n      btnName: '去认证',\n      skipUrl:\n        `/community/user/certification/?utm_source=${props.utm_source}` +\n        (props.next ? `&next=${props.next}` : ''),\n    },\n  };\n\n  const [open, setOpen] = useState<boolean>(props.needOpen);\n\n  useEffect(() => {\n    if (props.needOpen) return;\n    if (props.setOpen === 'true') {\n      setOpen(true);\n    } else if (props.setOpen === 'false') {\n      if (props.setPropClose) {\n        props.setPropClose();\n      }\n      setOpen(false);\n    }\n  }, [props]);\n\n  if (props.pop === '0') return null;\n\n  return (\n    <Modal\n      className=\"authModal\"\n      width={430}\n      open={open}\n      zIndex={199}\n      footer={[\n        <div className=\"pr-16px mt-20px\" key=\"next\">\n          <Button\n            onClick={() => {\n              if (props.setPropClose) {\n                props.setPropClose();\n              }\n              setOpen(false);\n\n              if (\n                props.pop === '6' ||\n                notCloseType.includes(props.utm_source)\n              ) {\n                window.location.href = '/community/';\n              }\n            }}\n          >\n            稍后再说\n          </Button>\n          <Button\n            type=\"primary\"\n            onClick={() => window.open(tipsData[props.pop].skipUrl)}\n            style={\n              aiTypes.includes(props.utm_source)\n                ? {\n                    background: `linear-gradient(113deg,#356ce8 17%, #02cedb 91%)`,\n                    border: 'none',\n                  }\n                : {}\n            }\n          >\n            {tipsData[props.pop].btnName}\n          </Button>\n        </div>,\n      ]}\n      onCancel={() => {\n        if (props.setPropClose) {\n          props.setPropClose();\n        }\n        setOpen(false);\n      }}\n      closable={!notCloseType.includes(props.utm_source)}\n      maskClosable={false}\n      centered\n    >\n      <div className=\"h-57px pt-16px px-16px text-18px text-hex-1D2129 font-500 header\">\n        {tipsData[props.pop].title}\n      </div>\n      <div\n        className=\"px-16px text-14px text-hex-1D2129\"\n        dangerouslySetInnerHTML={{ __html: tipsData[props.pop].desc }}\n      >\n        {/* {tipsData[props.pop].desc} */}\n      </div>\n    </Modal>\n  );\n};\n\nexport default AuthModal;\n"],"names":["props","useState","authOpen","setAuthOpen","pop","setPop","useEffect","user","is_base_vip","is_founding_vip","super_vip_status","className","files","length","map","file","src","assetSvg","name","url","oss_info_parsed","index","lastIndexOf","ext","slice","toLowerCase","rel","onClick","window","open","type","filename","fetch","then","response","blob","link","document","createElement","href","URL","createObjectURL","download","click","catch","console","error","key","AuthModal","needOpen","setOpen","title","setPropClose","utm_source","notCloseType","aiTypes","tipsData","desc","btnName","skipUrl","next","width","zIndex","footer","includes","location","style","background","border","onCancel","closable","maskClosable","centered","dangerouslySetInnerHTML","__html"],"sourceRoot":""}