antd点击logo设置五次后打开后台设置

logo点击五次后弹出:


image.png
/**
 * Ant Design Pro v4 use `@ant-design/pro-layout` to handle Layout.
 *
 * @see You can view component api by: https://github.com/ant-design/ant-design-pro-layout
 */
import { Card, Input,Layout, message, Modal } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
const { Footer } = Layout;
import type {
  MenuDataItem,
  BasicLayoutProps as ProLayoutProps,
  Settings,
} from '@ant-design/pro-layout';
import ProLayout, { SettingDrawer } from '@ant-design/pro-layout';
import React, { useState, useEffect, useMemo, useRef } from 'react';
import type { Dispatch } from 'umi';
import { Link, useIntl, connect, history } from 'umi';
import { Result, Button } from 'antd';
import Authorized from '@/utils/Authorized';
import RightContent from '@/components/GlobalHeader/RightContent';
import type { ConnectState } from '@/models/connect';
import { getMatchMenu } from '@umijs/route-utils';
import { postLogoInfo, queryRenders, postReportInfo } from "@/services/user";
const noMatch = (
  <Result
    status={403}
    title="403"
    subTitle="Sorry, you are not authorized to access this page."
    extra={
      <Button type="primary">
        <Link to="/user/login">Go Login</Link>
      </Button>
    }
  />
);
export type BasicLayoutProps = {
  breadcrumbNameMap: Record<string, MenuDataItem>;
  route: ProLayoutProps['route'] & {
    authority: string[];
  };
  settings: Settings;
  dispatch: Dispatch;
} & ProLayoutProps;
export type BasicLayoutContext = { [K in 'location']: BasicLayoutProps[K] } & {
  breadcrumbNameMap: Record<string, MenuDataItem>;
};
/** Use Authorized check all menu item */

const menuDataRender = (menuList: MenuDataItem[]): MenuDataItem[] =>
  menuList.map((item) => {
    // if(item.name == "Alarm"){
    //   item.unaccessible = true
    // }
    const localItem = {
      ...item,
      children: item.children ? menuDataRender(item.children) : undefined,
    };

    return Authorized.check(item.authority, localItem, null) as MenuDataItem;
  });

// const defaultFooterDom = (
//   <DefaultFooter
//     copyright={`2021 深圳金信诺高新技术股份有限公司出品`}
//     links={[
//     //   {
//     //     key: 'Ant Design Pro',
//     //     title: 'Ant Design Pro',
//     //     href: 'https://pro.ant.design',
//     //     blankTarget: true,
//     //   },
//     //   {
//     //     key: 'github',
//     //     title: <GithubOutlined />,
//     //     href: 'https://github.com/ant-design/ant-design-pro',
//     //     blankTarget: true,
//     //   },
//     //   {
//     //     key: 'Ant Design',
//     //     title: 'Ant Design',
//     //     href: 'https://ant.design',
//     //     blankTarget: true,
//     //   },
//     ]}
//   />
// );

const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
  const [isSettingsModalVisible, setIsSettingsModalVisible] = useState(false);
  const [logoClickCount, setLogoClickCount] = useState(0);
  //const [logoData, seLogoData] = useState("data:image/png;base64,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");
  const [logoData, seLogoData] = useState("");
  const [isSettingsMode, setIsSettingsMode] = useState(false);
  const [reportFrequency, setReportFrequency] = useState('');
  const fileInputRef = useRef(null);

  const {
    dispatch,
    children,
    settings,
    location = {
      pathname: '/',
    },
  } = props;
  const menuDataRef = useRef<MenuDataItem[]>([]);
  useEffect(() => {
    console.log("+=====++++=======")
    getLogoInfo();
    if (dispatch) {
      dispatch({
        type: 'user/fetchCurrent',
      });
    }
  }, []);
  /** Init variables */

  const getLogoInfo = async () => {
    const res = await queryRenders();
    seLogoData(res?.data?.value);
  }

  const handleMenuCollapse = (payload: boolean): void => {
    if (dispatch) {
      dispatch({
        type: 'global/changeLayoutCollapsed',
        payload,
      });
    }
  }; // get children authority

  const authorized = useMemo(
    () =>
      getMatchMenu(location.pathname || '/', menuDataRef.current).pop() || {
        authority: undefined,
      },
    [location.pathname],
  );
  const { formatMessage } = useIntl();

  const onChange = e => {
    setLogoClickCount((prevCount) => {
      const newCount = prevCount + 1;
      // 达到五次点击后显示Modal窗口
      if (newCount === 5) {
        setIsSettingsModalVisible(true);
        return 0; // 重置点击次数
      }
      return newCount;
    });
/*    e.stopPropagation();
    const input = document.createElement('input');
    input.setAttribute('type', 'file');
    input.setAttribute('multiple', true);
    input.setAttribute('style', 'display:none');
    input.addEventListener('change', handleInputChange);
    document.body.appendChild(input);
    input.click();*/
  };

  // 控制Modal关闭
  const handleModalClose = () => {
    setIsSettingsModalVisible(false);
  };

  // 在这里处理表单提交事件
  const handleFormSubmit = (values) => {
    console.log('Received values from form: ', values);
    // 在这里可以进行设置参数和更换头像的逻辑处理
    if (values.reportFrequency != ""){
      console.log('xxxxxxxxxxxxxxxxxxxxxxxxx: ', values.reportFrequency)
      postReportInfo(values.reportFrequency);
    }
    handleModalClose(); // 提交后关闭Modal
  };

  // 处理 logo 点击事件
  const handleLogoClick = () => {
    setLogoClickCount(prevCount => {
      const newCount = prevCount + 1;
      // 如果达到五次点击,启用设置模式
      if (newCount === 5) {
        toggleSettingsMode(true);
      }
      return newCount;
    });
  };

  // 切换设置模式
  const toggleSettingsMode = (enable) => {
    setIsSettingsMode(enable);
    // 重置logo点击次数
    setLogoClickCount(0);
  };

  const handleInputChange = e => {
    const files = e.target.files;
    const reader = new FileReader();
    reader.readAsDataURL(files[0]);
    reader.onload = () => {
      const base64Str = reader.result;
      postLogoInfo(base64Str);
      seLogoData(base64Str);
      history.go(0);
    };
  };

  // 定义键盘事件处理程序以启动设置模式
  const handleKeyDown = (event) => {
    if (event.ctrlKey && event.shiftKey && event.key === 'k') {
      toggleSettingsMode(true);
    }
  };

  // 连接和断开键盘事件处理程序
  useEffect(() => {
    window.addEventListener('keydown', handleKeyDown);
    // 当组件卸载时不要忘记清除
    return () => window.removeEventListener('keydown', handleKeyDown);
  }, []);

  return (
    <div
    // style={{sss
    //   height: '200vh',
    // }}
    >
      <ProLayout
        logo={logoData}
        formatMessage={formatMessage}
        {...props}
        {...settings}

        onCollapse={handleMenuCollapse}
        onMenuHeaderClick={handleLogoClick}
        /*
                onMenuHeaderClick={() => history.push('/Monitor/Dashboard')}
        */
        menuItemRender={(menuItemProps, defaultDom) => {
          if (
            menuItemProps.isUrl ||
            !menuItemProps.path ||
            location.pathname === menuItemProps.path
          ) {
            return defaultDom;
          }

          return <Link to={menuItemProps.path}>{defaultDom}</Link>;
        }}
        breadcrumbRender={(routers = []) => [
          {
            path: '/',
            breadcrumbName: formatMessage({
              id: 'menu.home',
            }),
          },
          ...routers,
        ]}
        // itemRender={(router = {}) => {
        //   if (router.component) {
        //     return <Link to={router.path}>{router.breadcrumbName}</Link>
        //   }
        //   return router.breadcrumbName
        // }}
        // itemRender={(route, params, routes, paths) => {
        //   const first = routes.indexOf(route) === 0;
        //   return first ? (
        //     <Link to={paths.join(route.path)}>{route.breadcrumbName}</Link>
        //   ) : (
        //     <span>{route.breadcrumbName}</span>
        //   );
        // }}

        itemRender={(route, params, routes, paths) => {
          const first = routes.indexOf(route) === 0;
          return first ? (
            <Link to={paths.join('/')}>{route.breadcrumbName}</Link>
          ) : (
            <span>{route.breadcrumbName}</span>
          );
        }}
        footerRender={() => {
          if (settings.footerRender || settings.footerRender === undefined) {
            return (<Footer style={{ textAlign: 'center' }}>Copyright © 2020-2023 Kingsignal Technology Co., Ltd. All rights reserved.</Footer>)
            // defaultFooterDom
            // (<Footer style={{ textAlign: 'center'}}>Copyright © 2021 LEAX Arkivator Telecom. All rights reserved.</Footer>)
          }
          return null;
        }}

        menuDataRender={menuDataRender}
        rightContentRender={() => <RightContent />}
        postMenuData={(menuData) => {
          menuDataRef.current = menuData || [];
          return menuData || [];
        }}
      // waterMarkProps={{
      //   content: 'Ant Design Pro',
      //   fontColor: 'rgba(24,144,255,0.15)',
      // }}
      >
        <Authorized authority={authorized!.authority} noMatch={noMatch}>
          {children}
        </Authorized>

      </ProLayout>
      <Modal
        title="Edit Logo or Set Report Frequency"
        visible={isSettingsMode}
        onCancel={() => setIsSettingsMode(false)}
        onOk={() => handleFormSubmit({
          logo: logoData,
          reportFrequency: reportFrequency
        })}
      >
        <Card bordered={false}>
          {logoData && <img src={logoData} alt="Preview Logo" style={{ height: '100px', marginBottom: '10px' }} />}
          <br></br>
          <input
            type="file"
            onChange={handleInputChange}
            style={{ display: 'none' }}
            ref={fileInputRef}
          />
          <Button
            type="primary"
            icon={<UploadOutlined />}
            onClick={() => fileInputRef.current && fileInputRef.current.click()}
          >
            Change Logo
          </Button>
          <p></p>
          <Input
            placeholder="Report Frequency"
            value={reportFrequency}
            onChange={(e) => setReportFrequency(e.target.value)}
          />
        </Card>
      </Modal>
      <SettingDrawer
        settings={settings}
        onSettingChange={(config) =>
          dispatch({
            type: 'settings/changeSetting',
            payload: config,
          })
        }
      />
    </div>
  );
};

export default connect(({ global, settings }: ConnectState) => ({
  collapsed: global.collapsed,
  settings,
}))(BasicLayout);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容