Compare commits

...

10 Commits

Author SHA1 Message Date
lys 5f95bab79d Merge branch 'master' into release/2.19.1.2503.01-业务线个税 2025-08-22 15:01:56 +08:00
lys 4ac19f78fd master 2025-08-22 15:00:57 +08:00
lys 49634c9285 master 2025-07-14 14:47:27 +08:00
lys d607c2abcf master 2025-07-03 13:44:01 +08:00
lys e35f1999fb master 2025-06-19 10:09:07 +08:00
lys 0f1f099144 master 2025-06-19 10:05:57 +08:00
lys eb126006a1 master 2025-06-19 09:19:30 +08:00
lys 2be569f8eb master 2025-06-11 09:55:13 +08:00
lys 57811df6e2 master 2025-06-04 11:22:44 +08:00
lys f46a01daf2 master 2025-06-04 09:12:20 +08:00
14 changed files with 371 additions and 44 deletions

View File

@ -54,6 +54,30 @@
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe78c;</span>
<div class="name">标记-copy</div>
<div class="code-name">&amp;#xe78c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe604;</span>
<div class="name">标记</div>
<div class="code-name">&amp;#xe604;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe710;</span>
<div class="name">取消标记</div>
<div class="code-name">&amp;#xe710;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6f0;</span>
<div class="name">双击</div>
<div class="code-name">&amp;#xe6f0;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe61e;</span>
<div class="name">export</div>
@ -204,9 +228,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1741245710478') format('woff2'),
url('iconfont.woff?t=1741245710478') format('woff'),
url('iconfont.ttf?t=1741245710478') format('truetype');
src: url('iconfont.woff2?t=1750298885691') format('woff2'),
url('iconfont.woff?t=1750298885691') format('woff'),
url('iconfont.ttf?t=1750298885691') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -232,6 +256,42 @@
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-biaoji-copy"></span>
<div class="name">
标记-copy
</div>
<div class="code-name">.icon-biaoji-copy
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-biaoji"></span>
<div class="name">
标记
</div>
<div class="code-name">.icon-biaoji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-quxiaobiaoji"></span>
<div class="name">
取消标记
</div>
<div class="code-name">.icon-quxiaobiaoji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-shuangji"></span>
<div class="name">
双击
</div>
<div class="code-name">.icon-shuangji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-export"></span>
<div class="name">
@ -457,6 +517,38 @@
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-biaoji-copy"></use>
</svg>
<div class="name">标记-copy</div>
<div class="code-name">#icon-biaoji-copy</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-biaoji"></use>
</svg>
<div class="name">标记</div>
<div class="code-name">#icon-biaoji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-quxiaobiaoji"></use>
</svg>
<div class="name">取消标记</div>
<div class="code-name">#icon-quxiaobiaoji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shuangji"></use>
</svg>
<div class="name">双击</div>
<div class="code-name">#icon-shuangji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-export"></use>

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 4257468 */
src: url('iconfont.woff2?t=1741245710478') format('woff2'),
url('iconfont.woff?t=1741245710478') format('woff'),
url('iconfont.ttf?t=1741245710478') format('truetype');
src: url('iconfont.woff2?t=1750298885691') format('woff2'),
url('iconfont.woff?t=1750298885691') format('woff'),
url('iconfont.ttf?t=1750298885691') format('truetype');
}
.iconfont {
@ -13,6 +13,22 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-biaoji-copy:before {
content: "\e78c";
}
.icon-biaoji:before {
content: "\e604";
}
.icon-quxiaobiaoji:before {
content: "\e710";
}
.icon-shuangji:before {
content: "\e6f0";
}
.icon-export:before {
content: "\e61e";
}

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,34 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "44653522",
"name": "标记-copy",
"font_class": "biaoji-copy",
"unicode": "e78c",
"unicode_decimal": 59276
},
{
"icon_id": "14559255",
"name": "标记",
"font_class": "biaoji",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "33872224",
"name": "取消标记",
"font_class": "quxiaobiaoji",
"unicode": "e710",
"unicode_decimal": 59152
},
{
"icon_id": "39084114",
"name": "双击",
"font_class": "shuangji",
"unicode": "e6f0",
"unicode_decimal": 59120
},
{
"icon_id": "10124054",
"name": "export",

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -199,7 +199,7 @@ const index: FunctionComponent<Props> = (props) => {
return (
<Dropdown menu={{ items: !item.calcDetail || item.rightClickType ? items : [] }} trigger={["contextMenu"]} overlayClassName={styles.contextMenu} destroyPopupOnHide>
<span className={styles.contentSpan}>
<span title={text} className={styles.contentTitle} style={{ color: `${record?.[item.dataIndex + "_color"]}` }}>
<span title={text} className={styles.contentTitle} style={record?.[item.dataIndex + "_color"] ? { color: `${record?.[item.dataIndex + "_color"]}` } : {}}>
{text}
</span>
<Icon type="icon-piliangfenpei" title={i18n["查看拓扑图"]} className={styles.diagramIcon} onClick={() => handleDiagramTd(item?.dataIndex, record?.id)} />

22
src/pages/demo/index.less Normal file
View File

@ -0,0 +1,22 @@
.block {
height: 300px;
border: 3px solid #ccc;
margin-bottom: 20px;
color: white;
padding: 24px;
line-height: 32px;
font-size: 24px;
}
.lazyloadImg{
display: flex;
flex-wrap: wrap;
&>li{
width: 400px;
margin-right: 10px;
margin-bottom: 10px;
img{
width: 100%;
}
}
}

View File

@ -0,0 +1,48 @@
import React, { useEffect, useRef } from "react";
import styles from "../../index.less";
interface OwnProps {}
type Props = OwnProps;
const Index: React.FC<Props> = (props) => {
const itemRef = useRef<HTMLElement[]>([]);
const ob = new IntersectionObserver((entries) => {
for (const entry of entries) {
if (entry.isIntersecting) {
const img: any = entry.target;
img.src = img.dataset.src;
ob.unobserve(entry.target);
}
}
});
useEffect(() => {
if (itemRef.current) {
_.forEach(itemRef.current, (item) => {
ob.observe(item);
});
}
return () => {
if (itemRef.current) {
_.forEach(itemRef.current, (item) => {
ob.unobserve(item);
});
}
};
}, [itemRef.current]);
return (
<ul className={styles.lazyloadImg}>
{_.map(
Array.from({ length: 200 }, () => Math.floor(Math.random() * 100)),
(item, index) => (
<li key={index}>
<img data-src={`https://picsum.photos/300/300?random=${index}`} alt="" src={require("../default.jpeg")} ref={(el) => (itemRef.current[index] = el as HTMLElement)} />
</li>
)
)}
</ul>
);
};
export default Index;

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -0,0 +1,43 @@
import React from "react";
import SlideInItem from "./slideInItem";
interface OwnProps {}
type Props = OwnProps;
const list = [
{ id: 1, bg: "red" },
{ id: 2, bg: "blue" },
{ id: 3, bg: "green" },
{ id: 4, bg: "yellowgreen" },
{ id: 5, bg: "orange" },
{ id: 6, bg: "pink" },
{ id: 7, bg: "antiquewhite" },
{ id: 8, bg: "darkseagreen" },
{ id: 9, bg: "purple" },
{ id: 10, bg: "red" },
{ id: 11, bg: "black" }
];
const Index: React.FC<Props> = (props) => {
const map = new WeakMap();
const ob = new IntersectionObserver((entries) => {
for (const entry of entries) {
if (entry.isIntersecting) {
const animation = map.get(entry.target);
if (animation) {
animation.play();
ob.unobserve(entry.target);
}
}
}
});
return (
<>
{list.map((item, index) => {
return <SlideInItem key={index} item={item} ob={ob} map={map}></SlideInItem>;
})}
</>
);
};
export default Index;

View File

@ -0,0 +1,64 @@
import React, { useEffect, useRef } from "react";
import styles from "../index.less";
interface OwnProps {
item: any;
ob: any;
map: any;
}
type Props = OwnProps;
const SLIDE_FADE_DISTANCE = 50;
const SLIDE_FADE_DURATION = 1000;
const isBelowViewport = (el: HTMLDivElement) => {
const rect = el.getBoundingClientRect();
return rect.top - SLIDE_FADE_DISTANCE > window.innerHeight;
};
const slideInItem: React.FC<Props> = (props) => {
const { item, ob, map } = props;
const itemRef = useRef<HTMLDivElement>(null);
useEffect(() => {
if (itemRef.current && ob) {
if (!isBelowViewport(itemRef.current)) {
return;
}
const animation = itemRef.current.animate(
[
{
transform: `translateY(${SLIDE_FADE_DISTANCE}px)`,
opacity: 0.1
},
{
transform: `translateY(0)`,
opacity: 1
}
],
{
duration: SLIDE_FADE_DURATION,
easing: "ease-in-out",
fill: "forwards" // 当动画完成后,保留最后一个关键帧的样式
}
);
animation.pause();
map.set(itemRef.current, animation);
ob.observe(itemRef.current);
}
return () => {
ob.unobserve(itemRef.current);
};
}, [itemRef.current]);
return (
<div className={styles.block} ref={itemRef} style={{ backgroundColor: item.bg }}>
<h3>The most popular component library</h3>
<h5>for Tailwind CSS</h5>
<p>daisyUI adds component class names to Tailwind CSS so you can make beautiful websites faster than ever.</p>
</div>
);
};
export default slideInItem;

View File

@ -46,7 +46,7 @@ export function renderCols(initialState: any[], type: string, i18n?: AnyObject,
};
break;
case "paymentOrganization":
col = { ...col, width: 200 };
col = { ...col, width: g.width || 200 };
break;
case "socialNum":
case "otherNum":
@ -452,41 +452,19 @@ export function renderCols(initialState: any[], type: string, i18n?: AnyObject,
case "operate":
col = {
...col,
width: 176,
fixed: "right" // render: (__: string, record: any) => {
// let items: MenuProps["items"] = [
// {
// key: "DeleteList",
// label: i18n?.["删除"],
// onClick: () => postMessageToParent("DEL", record)
// },
// {
// key: "Log",
// label: i18n?.["操作日志"],
// onClick: () => postMessageToParent("log", record)
// }
// ];
// isSpecial && items.shift();
// return (
// <Space>
// <Button type="link" onClick={() => postMessageToParent("EDIT", record)}>
// {i18n?.["编辑"]}
// </Button>
// {isSpecial ? (
// <Button type="link" onClick={() => postMessageToParent("DEL", record)}>
// {i18n?.["删除"]}
// </Button>
// ) : (
// <Button type="link" onClick={() => postMessageToParent("VIEW", record)}>
// {i18n?.["查看明细"]}
// </Button>
// )}
// <Dropdown menu={{ items }} placement="bottomRight">
// <Button type="link" icon={<MoreOutlined />} />
// </Dropdown>
// </Space>
// );
// }
ellipsis: false,
width: 120,
render: (__: string, record: any) => {
return (
<Space>
{_.map(col?.operateType, (o) => (
<Button key={o.key} type="link" onClick={() => postMessageToParent(o.key, record)}>
{o.label}
</Button>
))}
</Space>
);
}
};
break;
default:
@ -496,6 +474,42 @@ export function renderCols(initialState: any[], type: string, i18n?: AnyObject,
return col;
})
];
} else if (type === "declare") {
return [
..._.map(initialState, (g) => {
let col = { ...g, ellipsis: true };
switch (g.dataIndex) {
case "operate":
col = {
...col,
ellipsis: false,
width: 120,
render: (__: string, record: any) => {
return (
<Space>
{_.map(col?.operateType, (o) => (
<Button key={o.key} type="link" onClick={() => postMessageToParent(o.key, record)}>
{o.label}
</Button>
))}
</Space>
);
}
};
break;
default:
col = { ...col };
break;
}
return col;
})
];
} else if (type === "cusTitle") {
return [
..._.map(initialState, (g) => {
return { ...g, title: <span dangerouslySetInnerHTML={{ __html: g.title }} /> };
})
];
}
return initialState;
}, [initialState, type, i18n, extraParams]);