{"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":""}