瀏覽代碼

feat: 新增外链,优化跳转等

liaojiaxing 1 月之前
父節點
當前提交
9ec7940dc4

+ 1 - 1
.umirc.ts

@@ -6,7 +6,7 @@ export default defineConfig({
   outputPath: "marketplace",
   esbuildMinifyIIFE: true,
   favicons: [],
-  styles: ["//at.alicdn.com/t/c/font_4840729_ot8ca1ti90n.css"],
+  styles: ["//at.alicdn.com/t/c/font_4840729_yq3mj2py5j.css"],
   scripts: ["//at.alicdn.com/t/c/font_4840729_qpwqs1eruu.js"],
   model: {},
   metas: [

+ 24 - 0
src/api/index.ts

@@ -65,3 +65,27 @@ export const GetMyAppList = (data: commonParams) => {
     data,
   });
 };
+
+/**
+ * 获取当前用户信息
+ * @param
+ * @returns
+ */
+export const GetUserInfo = () => {
+  return request("/api/account/curUserInfo", {
+    method: "POST",
+    skipErrorHandler: true
+  });
+};
+
+/**
+ * 获取退出登陆
+ * @param
+ * @returns
+ */
+export const Logout = () => {
+  return request("/api/account/doLogout", {
+    method: "POST",
+    skipErrorHandler: true
+  });
+};

+ 1 - 1
src/app.ts

@@ -74,7 +74,7 @@ export const request: RequestConfig = {
     (response) => {
       const {data = {} as any, config} = response;
       if(data?.error) {
-        message.error(data.error);
+        // message.error(data.error);
         return Promise.reject(data.error);
       }
       

+ 2 - 1
src/components/ItemCard.tsx

@@ -53,8 +53,9 @@ export default function AppItem({
           <div className="mx-2 text-text-quaternary system-xs-regular">·</div>
           <div className="flex flex-wrap space-x-2 h-4 overflow-hidden">
             {
-              (data?.tags?.split(",") || []).map((tag: string) => {
+              (data?.tags?.split(",") || []).map((tag: string, index: number) => {
                 return <div
+                key={index}
                 className="flex space-x-1 system-xs-regular max-w-[120px] overflow-hidden"
                 title={`# ${tag}`}
               >

+ 55 - 7
src/layouts/index.tsx

@@ -1,20 +1,34 @@
 import { Link, Outlet, useLocation } from "umi";
 import logo from "@/assets/shalu-new1.png";
-import { Avatar, ConfigProvider } from "antd";
+import { Avatar, ConfigProvider, Button, Dropdown } from "antd";
 import zhCN from "antd/locale/zh_CN";
 import "dayjs/locale/zh-cn";
-import { UserOutlined } from "@ant-design/icons";
+import { DownOutlined, UserOutlined } from "@ant-design/icons";
+import { useModel } from "umi";
 
 export default function Layout() {
   const location = useLocation();
+  const { userInfo, handleLogout } = useModel("userModel");
+
+  const handleLogin = () => {
+    window.open(`/Views/Account/Index.html?ReturnUrl=${window.location.href}`, '_self');
+  }
+
+  const handleToManagement = () => {
+    window.open(`/Views/Home/Index.html`)
+  }
+
+  const handleToSchool = () => {
+    window.open(`https://college.shalu.com`)
+  }
 
   return (
     <ConfigProvider locale={zhCN}>
       <div>
         <div className="header h-56px flex items-center justify-between border-0 border-b border-solid border-gray-200 px-8">
-          <img src={logo} alt="logo" className="h-48px w-200px" />
-
-          <ul className="menu flex items-center pl-0 gap-x-24px">
+          <img src={logo} alt="logo" className="h-48px w-170px" />
+          
+          <ul className="menu flex items-center pl-0">
             <Link to="/" className="decoration-none">
               <li
                 className={`nav-button ${location.pathname.includes("application") ? "nav-button-active" : ""} `}
@@ -31,10 +45,44 @@ export default function Layout() {
                 模版市场
               </li>
             </Link>
+            <li className={`nav-button`} onClick={handleToSchool}>
+              <i className="iconfont icon-shuben-book3 text-12px mr-4px" />
+              沙鲁学院
+            </li>
+            <Link to="/ai" target="_blank" className="decoration-none">
+              <li className={`nav-button`}>
+                <i className="iconfont icon-AI1 text-12px mr-4px" />
+                AI助手
+              </li>
+            </Link>
           </ul>
 
-          <div className="right w-200px text-right">
-            {/* <Avatar size={32} icon={<UserOutlined />} /> */}
+          <div className="right w-170px text-right">
+            {userInfo ? (
+              <Dropdown
+                menu={{
+                  items: [
+                    { key: "1", label: <span>管理后台</span>, onClick: handleToManagement },
+                    { key: "2", label: <span>退出</span>, onClick: handleLogout },
+                  ],
+                }}
+                trigger={["click"]}
+                placement="bottomRight" 
+                arrow
+              >
+                <span>
+                  <Avatar size={32} icon={<UserOutlined />} />
+                  <span className="ml-4px text-12px text-text-secondary cursor-pointer">
+                    {userInfo.account}
+                  </span>
+                  <DownOutlined className="ml-4px text-12px text-text-secondary" />
+                </span>
+              </Dropdown>
+            ) : (
+              <Button className="ml-4px" size="small" onClick={handleLogin} shape="round">
+                登录
+              </Button>
+            )}
           </div>
         </div>
 

+ 34 - 0
src/models/userModel.ts

@@ -0,0 +1,34 @@
+import { useState, useEffect } from "react";
+import { GetUserInfo, Logout } from "@/api";
+import { message } from "antd";
+
+export type UserInfo = {
+  account: string;
+  cellPhone: string;
+  id: string;
+  isActive: boolean;
+  langName: string;
+  language: string;
+  partnerInfoId: string;
+};
+export default function userModel(){
+  const [userInfo, setUserInfo] = useState<UserInfo>();
+
+  useEffect(() => {
+    GetUserInfo().then((res) => {
+      setUserInfo(res?.result);
+    });
+  }, []);
+
+  const handleLogout = () => {
+    Logout().then((res) => {
+      message.success("退出成功");
+      setUserInfo(undefined);
+    });
+  };
+
+  return {
+    userInfo,
+    handleLogout,
+  };
+};

+ 1 - 1
src/pages/application/index.tsx

@@ -59,7 +59,7 @@ export default function Home() {
   }, [industryFilter, sceneFilter, search]);
 
   const handleToAppDetail = (id: string) => {
-    history.push(`/detail/application/${id}`);
+    window.open(`#/detail/application/${id}`, '_blank');
   };
 
   return (

+ 2 - 2
src/pages/apply/index.tsx

@@ -130,7 +130,7 @@ export default () => {
   }
 
   return (
-    <>
+    <div className="p-12px">
       <ProTable
         columns={columns}
         actionRef={actionRef}
@@ -246,6 +246,6 @@ export default () => {
           rules={[{ required: true, message: "请输入处理备注" }]}
         />
       </ModalForm>
-    </>
+    </div>
   );
 };

+ 7 - 6
src/pages/detail/index.tsx

@@ -65,12 +65,13 @@ export default function detail() {
     return [
       {
         key: "all",
-        title: (
-          <a onClick={handleBack}>
-            <LeftOutlined />
-            <span className="m-l-4px">返回</span>
-          </a>
-        ),
+        // title: (
+        //   <a onClick={handleBack}>
+        //     <LeftOutlined />
+        //     <span className="m-l-4px">返回</span>
+        //   </a>
+        // ),
+        title: '全部'
       },
       { key: "current", title: data?.result.name },
     ];

+ 14 - 2
src/pages/management/AddAppDrawer.tsx

@@ -12,9 +12,10 @@ import type { FormInstance } from "@ant-design/pro-components";
 import { Button, Space, message } from "antd";
 import { useState, useRef, useEffect, useMemo } from "react";
 import Editor from "@/components/Editor";
-import { AppItem, SaveOrUpdateApp } from "@/api/appStore";
+import { AppItem, SaveOrUpdateApp, GetAppDetail } from "@/api/appStore";
 import { INDUSTRIE_OPTIONS, APPLICATION_SCENARIOS_OPTIONS } from "@/constants";
 import { customUploadRequest } from "@/utils";
+import { useRequest } from "umi";
 
 export default ({
   onSuccess,
@@ -28,9 +29,20 @@ export default ({
   const [drawerVisit, setDrawerVisit] = useState(false);
   const [html, setHtml] = useState("");
   const formRef = useRef<FormInstance>();
+  const { run } = useRequest(GetAppDetail, {
+    manual: true,
+    onSuccess: (res) => {
+      setHtml(res?.result?.detail || "");
+    },
+  });
 
   useEffect(() => {
     setDrawerVisit(!!editData);
+    if(editData?.id) {
+      run({
+        id: editData.id,
+      });
+    }
   }, [editData]);
 
   useEffect(() => {
@@ -83,7 +95,7 @@ export default ({
             ...values,
             id: editData?.id,
             version: editData?.version,
-            icon: values?.icon?.[0]?.response.id || values?.icon?.[0].uid || "",
+            icon: values?.icon?.[0]?.response?.id || values?.icon?.[0].uid || "",
             tags: values.tags?.replaceAll(",", ","),
             detail: html,
             isFree: !values?.price,

+ 14 - 1
src/pages/management/AddTemplateDrawer.tsx

@@ -12,12 +12,13 @@ import { Button, Space, message } from "antd";
 import { useEffect, useState, useMemo } from "react";
 import Editor from "@/components/Editor";
 import { customUploadRequest } from "@/utils";
-import { SaveOrUpdateTemplate } from "@/api/templateStore";
+import { SaveOrUpdateTemplate, GetTemplateDetail } from "@/api/templateStore";
 import {
   APPLICATION_SCENARIOS_OPTIONS,
   INDUSTRIE_OPTIONS,
   MODULE_TEMPLATE_TYPE,
 } from "@/constants";
+import { useRequest } from "umi";
 
 export default ({
   onSuccess,
@@ -31,8 +32,20 @@ export default ({
   const [drawerVisit, setDrawerVisit] = useState(false);
   const [html, setHtml] = useState("");
 
+  const { run } = useRequest(GetTemplateDetail, {
+    manual: true,
+    onSuccess: (res) => {
+      setHtml(res?.result?.detail || "");
+    },
+  });
+
   useEffect(() => {
     setDrawerVisit(!!editData);
+    if(editData?.id) {
+      run({
+        id: editData.id,
+      });
+    }
   }, [editData]);
 
   useEffect(() => {

+ 1 - 1
src/pages/template/index.tsx

@@ -64,7 +64,7 @@ export default function Template() {
   }, [industryFilter, sceneFilter, search]);
 
   const handleToAppDetail = (id: string) => {
-    history.push(`/detail/template/${id}`);
+    window.open(`#/detail/template/${id}`, '_blank');
   }
 
   return (