123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- import {
- Button,
- Form,
- Image,
- Input,
- Modal,
- Select,
- Skeleton,
- Breadcrumb,
- message,
- notification,
- Tooltip,
- } from "antd";
- import type { BreadcrumbProps } from "antd";
- import { useMemo, useState } from "react";
- import { useParams, useRequest, history } from "umi";
- import { GetAppDetail } from "@/api/appStore";
- import { GetTemplateDetail } from "@/api/templateStore";
- import styles from "./index.less";
- import { LeftOutlined } from "@ant-design/icons";
- import { SubmitApply } from "@/api/apply";
- export default function detail() {
- const [showAdvisory, setShowAdvisory] = useState(false);
- const [form] = Form.useForm();
- const { id, type } = useParams();
- const { data, loading } = useRequest<{ result: any }>(
- type === "application" ? GetAppDetail : GetTemplateDetail,
- {
- defaultParams: [
- {
- id: id,
- },
- ],
- }
- );
- const handleToApp = () => {
- if (data?.result?.trialUrl) {
- window.open(data?.result?.trialUrl, "_blank");
- }
- };
- const handleBack = () => {
- history.back();
- };
- // 提交申请
- const handleSubmit = () => {
- form.validateFields().then(async (values) => {
- await SubmitApply({
- ...values,
- type: type === "application" ? 0 : 1,
- templateId: id,
- });
- notification.success({
- message: "您的申请已提交,后续会有专员与您联系!~",
- });
- setShowAdvisory(false);
- });
- };
- const breadcrumbItems: BreadcrumbProps["items"] = useMemo(() => {
- return [
- {
- key: "all",
- // title: (
- // <a onClick={handleBack}>
- // <LeftOutlined />
- // <span className="m-l-4px">返回</span>
- // </a>
- // ),
- title: "全部",
- },
- { key: "current", title: data?.result.name },
- ];
- }, [data]);
- return (
- <div className="detail relative mx-auto pt-24px h-full overflow-y-auto">
- <div className="max-w-[1200px] mx-auto">
- <Breadcrumb className="mb-24px" items={breadcrumbItems} />
- <Skeleton avatar active loading={loading}>
- <div className="flex mb-32px">
- <div className="w-128px h-128px rounded-20px bg-gray-200 overflow-hidden flex justify-center items-center">
- <Image
- className="w-full h-full"
- preview={false}
- src={
- data?.result?.icon
- ? `/api/File/Download?fileId=${data?.result?.icon}`
- : ""
- }
- />
- </div>
- <div className="flex-1 mx-24px">
- <div className="text-32px font-[600]">{data?.result?.name}</div>
- <div className="text-secondary text-14px">
- {data?.result?.desc || "暂无描述"}
- </div>
- <div className="mt-12px flex items-center">
- {/* <div className="block bg-[#dcdde0] rounded-8px text-secondary px-8px py-4px text-12px">
- <i className="iconfont icon-qiyexinxi mr-8px" />
- <span>{data?.result?.createByName || "易码工坊"}</span>
- </div> */}
- <div className="flex items-center px-[14px] leading-24px text-12px">
- <div className="flex items-center space-x-1 text-text-tertiary">
- {/* <svg
- viewBox="0 0 24 24"
- xmlns="http://www.w3.org/2000/svg"
- width="24"
- height="24"
- fill="currentColor"
- className="remixicon shrink-0 w-3 h-3"
- >
- <path d="M9 2V4H5L4.999 14H18.999L19 4H15V2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H9ZM18.999 16H4.999L5 20H19L18.999 16ZM17 17V19H15V17H17ZM13 2V7H16L12 11L8 7H11V2H13Z"></path>
- </svg> */}
- <i className="iconfont icon-liulanliang"/>
- <div className="system-xs-regular">浏览量 {data?.result?.viewCount || 0}</div>
- </div>
- <div className="mx-2 text-text-quaternary system-xs-regular">
- ·
- </div>
- <div className="flex flex-wrap space-x-2 h-4 overflow-hidden">
- {(data?.result.tags?.split(",") || []).map(
- (tag: string) => {
- return (
- <div
- className="flex space-x-1 system-xs-regular max-w-[120px] overflow-hidden"
- title={`# ${tag}`}
- >
- <span className="text-text-quaternary">#</span>
- <span className="truncate text-text-tertiary">
- {tag}
- </span>
- </div>
- );
- }
- )}
- </div>
- </div>
- </div>
- </div>
- <div className="head-right flex flex-col justify-center items-center">
- <Tooltip title={!data?.result?.isCanUseTrial ? "暂不支持体验~" : ""}>
- <Button
- type="primary"
- className="w-full mb-24px"
- onClick={handleToApp}
- disabled={!data?.result?.isCanUseTrial}
- >
- 在线体验
- </Button>
- </Tooltip>
- <Button className="w-full" onClick={() => setShowAdvisory(true)}>
- 购买咨询
- </Button>
- </div>
- </div>
- </Skeleton>
- <div className="inline-block">
- <div className="text-24px font-[600] mb-8px">方案详情</div>
- <div className="w-60px h-4px bg-primary rounded-4px mx-auto" />
- </div>
- <Skeleton active loading={loading}>
- <div
- className={
- "content m-y-32px overflow-hidden relative " + styles.rich
- }
- >
- <div
- dangerouslySetInnerHTML={{ __html: data?.result?.detail || "" }}
- />
- </div>
- </Skeleton>
- </div>
- <Modal
- title="购买咨询"
- width={500}
- open={showAdvisory}
- onCancel={() => setShowAdvisory(false)}
- onOk={handleSubmit}
- >
- <Form labelCol={{ span: 6 }} autoComplete="off" form={form}>
- <Form.Item
- label="如何称呼您?"
- name="name"
- rules={[{ required: true, message: "请输入您的称呼!" }]}
- >
- <Input placeholder="请输入" maxLength={20} />
- </Form.Item>
- <Form.Item
- label="联系方式"
- name="tel"
- rules={[
- { required: true, message: "请输入您的联系方式!", max: 20 },
- ]}
- >
- <Input placeholder="请输入" maxLength={20} />
- </Form.Item>
- <Form.Item label="公司名称" name="companyName">
- <Input placeholder="请输入" maxLength={100} />
- </Form.Item>
- <Form.Item label="企业规模" name="companySize">
- <Select
- placeholder="请选择"
- options={[
- { label: "1-10人", value: "1-10人" },
- { label: "11-50人", value: "11-50人" },
- { label: "51-200人", value: "51-200人" },
- { label: "200人以上", value: "200人以上" },
- ]}
- />
- </Form.Item>
- <Form.Item label="您的职务" name="jobTitle">
- <Input placeholder="请输入" maxLength={20} />
- </Form.Item>
- </Form>
- </Modal>
- </div>
- );
- }
|