feat(module): ✨️init module with git submogule
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "package"]
|
||||
path = package
|
||||
url = git@git.wm-app.xyz:Zverse/ai-plugin-fe-basic.git
|
@ -21,6 +21,6 @@
|
||||
<body>
|
||||
<div id="app_ext"></div>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
<script type="module" src="/src/index.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
1
package
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 3b855086ecb55a0c54b45b4688adb11913e1e234
|
@ -58,5 +58,6 @@
|
||||
"typescript": "^5.2.2",
|
||||
"vite": "^5.0.8",
|
||||
"vite-plugin-make-offline": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72"
|
||||
}
|
||||
|
58
src/App.tsx
@ -1,58 +0,0 @@
|
||||
import {ConfigProvider} from 'antd';
|
||||
import zhCN from 'antd/locale/zh_CN';
|
||||
import './assets/App.less'
|
||||
import AppRoutes from "./routes";
|
||||
import {Suspense, useEffect} from "react";
|
||||
import {useUserinfoStore} from "./service/userinfoStore.ts";
|
||||
import {useBridge} from "@/core/bridge.ts";
|
||||
import {ApplicationInfo} from "@/core/config.ts";
|
||||
|
||||
|
||||
function App() {
|
||||
const {initialized, init} = useUserinfoStore()
|
||||
const {getAppInfo} = useBridge()
|
||||
|
||||
const initAppData = async () => {
|
||||
document.body.oncontextmenu = () => false;
|
||||
console.log(`APP-BUILD-AT: ${ApplicationInfo.buildVersion}`,ApplicationInfo)
|
||||
try{
|
||||
const info = await getAppInfo()
|
||||
console.log(`start GetAppVersion`,info)
|
||||
ApplicationInfo.platformVersion = info.version;
|
||||
ApplicationInfo.platform = info.platform;
|
||||
ApplicationInfo.environment = info.environment;
|
||||
ApplicationInfo.deviceId = info.deviceId;
|
||||
}catch (e){
|
||||
console.log(`start GetAppVersion error`,e)
|
||||
}
|
||||
const logged = await init();
|
||||
console.log('init user data finished!logged =>', logged)
|
||||
}
|
||||
useEffect(() => {initAppData().catch(e=>console.log(e));}, []);
|
||||
|
||||
return (
|
||||
<ConfigProvider
|
||||
locale={zhCN}
|
||||
theme={{
|
||||
token: {
|
||||
colorPrimary: 'rgba(201, 160, 99, 1)',
|
||||
borderRadius: 4,
|
||||
},
|
||||
components: {
|
||||
Button: {
|
||||
colorPrimary: 'rgba(201, 160, 99, 1)',
|
||||
algorithm: true,
|
||||
}
|
||||
}
|
||||
}}
|
||||
>
|
||||
<div className={"app-main"}>
|
||||
<Suspense>
|
||||
{initialized && <AppRoutes/>}
|
||||
</Suspense>
|
||||
</div>
|
||||
</ConfigProvider>
|
||||
)
|
||||
}
|
||||
|
||||
export default App
|
@ -1,337 +0,0 @@
|
||||
.test-age {
|
||||
max-width: 90%;
|
||||
margin: auto;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
width: 400px;
|
||||
|
||||
.box-container {
|
||||
border: solid 3px var(--primary-color);
|
||||
height: 600px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.row-item {
|
||||
line-height: 50px;
|
||||
text-align: center;
|
||||
border-bottom: solid 1px #eee;
|
||||
|
||||
&:hover {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&.active-item {
|
||||
background-color: #efefef;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-panel-container {
|
||||
.proofread-item {
|
||||
border-radius: 4px;
|
||||
margin-bottom: 10px;
|
||||
padding: 18px 24px;
|
||||
cursor: pointer;
|
||||
transition: height 0.2s;
|
||||
margin-left: 0;
|
||||
position: relative;
|
||||
background-color: #efefef;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
&.processed {
|
||||
background-color: #fff;
|
||||
outline: solid 1px #f5f5f5;
|
||||
}
|
||||
|
||||
&:before {
|
||||
content: ' ';
|
||||
background: var(--proofread-color,#fd6643 );
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
width: 4px;
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
.description {
|
||||
overflow: hidden;
|
||||
line-height: 20px;
|
||||
font-size: 12px;
|
||||
//display: grid;
|
||||
//grid-template-rows: 0fr;
|
||||
//transition: grid-template-rows ease 1s;
|
||||
height: 0;
|
||||
interpolate-size: allow-keywords;
|
||||
transition: height ease 0.5s;
|
||||
}
|
||||
.item-description{
|
||||
word-break: break-all;
|
||||
margin-top: 10px;
|
||||
span{
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
.description-item-container{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&.select {
|
||||
//box-shadow: 0 0 8px rgba(0, 0, 0, 0.3);
|
||||
box-shadow: 0px 9px 28px 8px rgba(0, 0, 0, 0.05), 0px 6px 16px 0px rgba(0, 0, 0, 0.08), 0px 3px 6px -4px rgba(0, 0, 0, 0.12);
|
||||
|
||||
margin-bottom: 20px;
|
||||
background-color: #fff;
|
||||
border-color: #efefef;
|
||||
|
||||
outline: 1px solid #efefef;
|
||||
|
||||
.description {
|
||||
//display: block;
|
||||
//grid-template-rows: 1fr;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.v3 {
|
||||
|
||||
|
||||
.proofread-item {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.processed-wrapper {
|
||||
font-size: 13px;
|
||||
|
||||
.state-accept {
|
||||
color: var(--primary-process-color, #aaaaaa);
|
||||
margin-top: 4px;
|
||||
white-space: nowrap;
|
||||
margin-left: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.action {
|
||||
|
||||
.btn, .more-action {
|
||||
margin-top: 10px;
|
||||
white-space: nowrap;
|
||||
width: auto;
|
||||
display: inline-block;
|
||||
padding: 0 10px;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
color: white;
|
||||
border: solid 1px var(--primary-color);
|
||||
background-color: var(--primary-color);
|
||||
&:hover {
|
||||
background-color: #fff !important;
|
||||
color: var(--primary-color) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.state-filter-tab {
|
||||
margin-top: 10px;
|
||||
padding-right: var(--type-width);
|
||||
|
||||
.tab-wrapper {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
border-bottom: none;
|
||||
height: 40px;
|
||||
line-height: 38px;
|
||||
width: 90px;
|
||||
text-align: center;
|
||||
border-radius: 4px 4px 0 0;
|
||||
margin-right: 7px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
font-size: 16px;
|
||||
&:after{
|
||||
content: ' ';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 1px;
|
||||
background: rgba(0,0,0,0);
|
||||
height: 4px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
&.active {
|
||||
font-weight: bold;
|
||||
color: var(--primary-color);
|
||||
&:after{
|
||||
background: var(--primary-color);
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: #fff;
|
||||
border-color: #d9d9d9;
|
||||
}
|
||||
.tab-item-count{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-loading-wrapper {
|
||||
position: fixed;
|
||||
z-index: 999;
|
||||
background: center bottom no-repeat #f5f5f5;
|
||||
background-size: contain;
|
||||
font-size: 16px;
|
||||
min-height: 40px;
|
||||
|
||||
.display-control-btn{
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top:10px;
|
||||
background: #ffffff;
|
||||
border-radius: 4px;
|
||||
padding: 3px 4px 3px 3px;
|
||||
display: flex;
|
||||
transform: rotate(180deg);
|
||||
cursor: pointer;
|
||||
border: solid 1px #fff;
|
||||
&:hover{
|
||||
border-color: var(--primary-color);
|
||||
}
|
||||
svg{
|
||||
transform: translateY(1px);
|
||||
}
|
||||
&.hide{
|
||||
transform: rotate(0);
|
||||
}
|
||||
}
|
||||
&.full-screen {
|
||||
inset: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&.bottom {
|
||||
left: 10px;
|
||||
right: 70px;
|
||||
bottom: 10px;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
background: linear-gradient(90.87deg, rgba(236, 220, 188, 0.9) 26.04%, rgba(240, 219, 178, 0.7) 60.98%, rgba(249, 235, 207, 0.7) 99.6%);
|
||||
padding: 0 20px;
|
||||
|
||||
.progress-bar-container {
|
||||
width: 100%;
|
||||
border: solid 1px rgba(214, 170, 105, 0.6);
|
||||
}
|
||||
|
||||
.progress-bar {
|
||||
border-radius: 4px 0 0 4px;
|
||||
background: rgba(214, 170, 105, 0.6);
|
||||
}
|
||||
}
|
||||
|
||||
.progress-container {
|
||||
margin: 15px 0;
|
||||
|
||||
p {
|
||||
margin-top: 10px;
|
||||
color: #000;
|
||||
}
|
||||
}
|
||||
|
||||
.progress-value {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.progress-bar-container {
|
||||
--bg-bar: no-repeat linear-gradient(rgba(202, 161, 101, 1) 0 0);
|
||||
--bg: linear-gradient(90.87deg, #ECDCBC 26.04%, #F0DBB2 60.98%, #F9EBCF 99.6%);
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
width: 200px;
|
||||
background: var(--bg);
|
||||
}
|
||||
|
||||
.progress-bar {
|
||||
height: 6px;
|
||||
width: 0;
|
||||
background: var(--bg-bar);
|
||||
transition: width 0.1s;
|
||||
border-radius: 4px;
|
||||
|
||||
&.loading {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: none;
|
||||
width: 100%;
|
||||
|
||||
&:before, &:after {
|
||||
content: ' ';
|
||||
width: auto;
|
||||
display: block;
|
||||
background: var(--bg-bar);
|
||||
border-radius: 4px;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
transition: transform 0.2s linear;
|
||||
transform-origin: left;
|
||||
animation: progress-bar-loading 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
|
||||
}
|
||||
|
||||
&:after {
|
||||
animation: progress-bar-loading-1 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.1s infinite;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.waiting-tips {
|
||||
margin: 20px 0;
|
||||
color: rgba(89, 89, 89, 1);
|
||||
}
|
||||
|
||||
.ant-btn {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
span {
|
||||
text-decoration: underline;
|
||||
color: #000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list-container {
|
||||
padding: 10px;
|
||||
.list-item {
|
||||
cursor: pointer;
|
||||
padding: 10px 20px;
|
||||
border-radius: 4px;
|
||||
|
||||
&:hover {
|
||||
background-color: #efefef;
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: #fff;
|
||||
background-color: #c9a063;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
<svg width="64" height="64" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_5239_3394)">
|
||||
<path d="M10.5379 4.66379H9.46422C9.36601 4.66379 9.28565 4.74414 9.28565 4.84236V10.9874C9.28565 11.0455 9.31244 11.0991 9.35931 11.1325L13.049 13.8267C13.1294 13.8848 13.241 13.8691 13.299 13.7888L13.9374 12.9183C13.9977 12.8357 13.9798 12.7241 13.8995 12.6683L10.7165 10.3669V4.84236C10.7165 4.74414 10.6361 4.66379 10.5379 4.66379ZM15.4441 6.34236L18.9441 7.19727C19.0557 7.22405 19.1651 7.13923 19.1651 7.02539L19.183 3.42048C19.183 3.27093 19.0111 3.18611 18.895 3.27986L15.3772 6.02763C15.3506 6.04819 15.3303 6.07585 15.3188 6.10741C15.3072 6.13897 15.3048 6.17315 15.3118 6.20603C15.3188 6.23891 15.3349 6.26914 15.3583 6.29326C15.3817 6.31738 15.4115 6.3344 15.4441 6.34236ZM19.1874 13.0633L17.9218 12.6281C17.8777 12.6129 17.8294 12.6157 17.7873 12.6357C17.7451 12.6557 17.7125 12.6914 17.6964 12.7352C17.654 12.8491 17.6093 12.9607 17.5624 13.0723C17.1651 14.012 16.5959 14.858 15.8682 15.5834C15.1486 16.3053 14.2958 16.8806 13.3571 17.2776C12.3846 17.6888 11.3393 17.8998 10.2834 17.8982C9.21646 17.8982 8.18297 17.6906 7.20976 17.2776C6.27101 16.8806 5.4182 16.3053 4.6986 15.5834C3.97315 14.858 3.40396 14.012 3.0044 13.0723C2.59551 12.0992 2.38602 11.0541 2.38833 9.99861C2.38833 8.93164 2.59592 7.89593 3.00887 6.92272C3.40619 5.98298 3.97538 5.137 4.70306 4.41155C5.42266 3.68972 6.27547 3.11436 7.21422 2.71736C8.18297 2.30441 9.21869 2.09682 10.2857 2.09682C11.3526 2.09682 12.3861 2.30441 13.3593 2.71736C14.2981 3.11436 15.1509 3.68972 15.8705 4.41155C16.0982 4.64147 16.3124 4.8803 16.5089 5.13254L17.8437 4.08789C16.087 1.84236 13.3526 0.398161 10.2812 0.400393C4.93297 0.402625 0.638331 4.74638 0.691902 10.0968C0.745473 15.3535 5.02003 19.5968 10.2857 19.5968C14.4263 19.5968 17.9531 16.9718 19.2968 13.2955C19.3303 13.2017 19.2812 13.0968 19.1874 13.0633Z" fill="#D6AA69"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_5239_3394">
|
||||
<rect width="20" height="20" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.1 KiB |
@ -1,43 +0,0 @@
|
||||
<svg width="207" height="94" viewBox="0 0 207 94" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
|
||||
fill="url(#paint0_linear_2366_40336)"/>
|
||||
<path d="M76.7295 60.4416H79.0956L81.7997 37.4322H79.366L76.7295 60.4416Z" fill="black"/>
|
||||
<path d="M112.425 31.5288H104.38L103.569 28.7114H101.135L101.946 31.5288H93.4282V34.2792H112.425V31.5288Z"
|
||||
fill="black"/>
|
||||
<path d="M98.9711 35.2855H96.4698L93.2925 43.6708H95.7262L98.9711 35.2855Z" fill="black"/>
|
||||
<path
|
||||
d="M92.8188 32.7363H85.9909V28.7114H83.6248V32.7363H76.9321V35.4867H83.6248V61.7161H85.9909V35.4867H92.8188V32.7363Z"
|
||||
fill="black"/>
|
||||
<path d="M107.016 35.2855L110.193 43.6708H112.694L109.449 35.2855H107.016Z" fill="black"/>
|
||||
<path
|
||||
d="M108.3 56.4837C107.016 55.6787 105.867 54.8737 104.852 54.0016C105.799 53.0625 106.61 52.0562 107.286 51.1171C108.03 50.1108 108.638 49.1716 109.111 48.3667C109.585 47.4946 109.99 46.7567 110.193 46.1529C110.464 45.4821 110.599 45.0125 110.734 44.6771L110.802 44.4758H108.368L108.3 44.61C107.962 45.3479 107.421 46.3542 106.475 47.9642C105.664 49.3058 104.447 50.7816 102.96 52.3245C101.472 50.7816 100.255 49.3058 99.4442 47.9642C98.4978 46.3542 97.957 45.3479 97.619 44.61L97.5514 44.4758H95.1177L95.1853 44.6771C95.3205 45.0125 95.4557 45.4821 95.7261 46.1529C95.9965 46.7567 96.4021 47.5617 96.8753 48.3667C97.3486 49.1716 97.957 50.1108 98.633 51.1171C99.309 52.0562 100.12 53.0625 101.067 54.0687C100.053 54.9408 98.9034 55.7458 97.619 56.5508C96.3345 57.3558 94.7796 58.1608 93.1572 58.8987L93.022 58.9658V61.9174L93.2924 61.8503C95.3205 60.9782 97.1458 60.0391 98.7682 59.0328C100.323 58.0266 101.743 57.0203 102.96 55.947C104.176 57.0203 105.529 58.0937 107.083 59.0328C108.706 60.0391 110.531 60.9782 112.627 61.8503L112.897 61.9174V58.9658L112.762 58.8987C111.14 58.0937 109.652 57.2887 108.3 56.4837Z"
|
||||
fill="black"/>
|
||||
<path d="M90.2506 37.4322H87.9521L90.5887 60.4416H92.9548L90.2506 37.5663V37.4322Z" fill="black"/>
|
||||
<path d="M145.618 38.7738H143.116L145.956 54.9408H148.389L145.618 38.7738Z" fill="black"/>
|
||||
<path
|
||||
d="M157.312 29.1139H154.946V32.8034H140.479V35.6209H154.946V58.0266C154.946 58.2949 154.878 58.4962 154.676 58.7645C154.54 58.9657 154.338 59.0999 154.135 59.0999H148.051V61.9174H154.135C155.014 61.9174 155.825 61.5149 156.433 60.7099C157.042 59.9049 157.38 59.0328 157.38 57.8924V35.688H160.151V32.8705H157.38V29.1139H157.312Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M137.37 54.6054C136.288 53.2637 135.274 51.855 134.395 50.5133C135.612 48.2996 136.626 46.0858 137.302 43.9392C137.978 41.7925 138.451 39.9142 138.789 38.2371C139.128 36.5601 139.263 35.2184 139.33 34.1451C139.398 33.0718 139.398 32.468 139.398 32.2668V30.858H125.134V33.6755H136.829C136.761 34.2793 136.694 35.0172 136.559 35.9563C136.423 36.9626 136.221 38.1701 135.95 39.4446C135.68 40.7192 135.274 42.128 134.733 43.6709C134.26 45.0796 133.652 46.5554 132.908 48.0312C132.232 46.8238 131.691 45.6163 131.218 44.4759C130.677 43.2013 130.204 41.9938 129.866 40.8534C129.528 39.713 129.19 38.6396 128.987 37.7005C128.784 36.7613 128.581 35.8892 128.446 35.1513V35.0172H126.013V35.2184C126.148 36.0905 126.351 37.0297 126.621 38.1701C126.891 39.3105 127.229 40.518 127.635 41.8596C128.041 43.2013 128.581 44.61 129.257 46.0858C129.866 47.5617 130.677 49.1046 131.556 50.5804C130.745 51.9221 129.798 53.3308 128.717 54.6725C127.635 56.0141 126.351 57.4229 124.931 58.6974L124.863 58.7645V62.2528L125.134 61.9845C126.824 60.5087 128.379 58.9658 129.663 57.4229C130.88 55.947 132.029 54.4041 132.976 52.9283C133.922 54.4041 135.071 55.947 136.356 57.4229C137.708 58.9658 139.263 60.5087 140.953 61.9845L141.223 62.2528V58.7645L141.156 58.6974C139.804 57.3558 138.519 55.947 137.37 54.6054Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M190.911 59.167V45.8846H205.919V43.1342H190.911V32.468H206.797V29.5834H172.388V32.468H188.274V43.1342H173.266V45.8846H188.274V59.167H172.117V61.9845H207V59.167H190.911Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
|
||||
fill="black"/>
|
||||
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="black"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2366_40336" x1="81.4256" y1="46.6327" x2="-0.00259662" y2="46.6327"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.1" stop-color="white" stop-opacity="0"/>
|
||||
<stop offset="0.1877" stop-color="#F3EADD" stop-opacity="0.0975"/>
|
||||
<stop offset="0.3016" stop-color="#E6D4B8" stop-opacity="0.224"/>
|
||||
<stop offset="0.4208" stop-color="#DCC199" stop-opacity="0.3565"/>
|
||||
<stop offset="0.5453" stop-color="#D3B281" stop-opacity="0.4948"/>
|
||||
<stop offset="0.677" stop-color="#CEA870" stop-opacity="0.6411"/>
|
||||
<stop offset="0.8209" stop-color="#CAA266" stop-opacity="0.8009"/>
|
||||
<stop offset="1" stop-color="#C9A063"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 5.1 KiB |
@ -1,9 +0,0 @@
|
||||
<svg width="594" height="594" viewBox="0 0 70 94" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
|
||||
fill="#C9A063"/>
|
||||
<path
|
||||
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
|
||||
fill="white"/>
|
||||
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="white"/>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 519 B |
@ -1,3 +0,0 @@
|
||||
<svg width="64" height="64" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18.511 5.12109L14.8816 1.49163C14.7141 1.32422 14.5088 1.20145 14.2856 1.13449V1.07422H1.78557C1.39049 1.07422 1.07129 1.39342 1.07129 1.7885V18.2171C1.07129 18.6122 1.39049 18.9314 1.78557 18.9314H18.2141C18.6092 18.9314 18.9284 18.6122 18.9284 18.2171V6.13002C18.9284 5.75056 18.7789 5.38895 18.511 5.12109ZM7.14272 2.68136H12.857V5.00279H7.14272V2.68136ZM17.3213 17.3242H2.67843V2.68136H5.71415V5.71708C5.71415 6.11217 6.03334 6.43136 6.42843 6.43136H13.5713C13.9664 6.43136 14.2856 6.11217 14.2856 5.71708V3.16797L17.3213 6.20368V17.3242ZM9.99986 8.44029C8.22531 8.44029 6.78558 9.88002 6.78558 11.6546C6.78558 13.4291 8.22531 14.8689 9.99986 14.8689C11.7744 14.8689 13.2141 13.4291 13.2141 11.6546C13.2141 9.88002 11.7744 8.44029 9.99986 8.44029ZM9.99986 13.4403C9.01325 13.4403 8.21415 12.6412 8.21415 11.6546C8.21415 10.668 9.01325 9.86886 9.99986 9.86886C10.9865 9.86886 11.7856 10.668 11.7856 11.6546C11.7856 12.6412 10.9865 13.4403 9.99986 13.4403Z" fill="#D6AA69"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,3 +0,0 @@
|
||||
<svg width="64" height="64" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18.2141 1.07422H1.78557C1.39049 1.07422 1.07129 1.39342 1.07129 1.7885V18.2171C1.07129 18.6122 1.39049 18.9314 1.78557 18.9314H18.2141C18.6092 18.9314 18.9284 18.6122 18.9284 18.2171V1.7885C18.9284 1.39342 18.6092 1.07422 18.2141 1.07422ZM17.3213 17.3242H2.67843V2.68136H17.3213V17.3242ZM9.55343 7.50279H13.6606C13.7588 7.50279 13.8391 7.42243 13.8391 7.32422V6.25279C13.8391 6.15458 13.7588 6.07422 13.6606 6.07422H9.55343C9.45522 6.07422 9.37486 6.15458 9.37486 6.25279V7.32422C9.37486 7.42243 9.45522 7.50279 9.55343 7.50279ZM9.55343 10.7171H13.6606C13.7588 10.7171 13.8391 10.6367 13.8391 10.5385V9.46708C13.8391 9.36886 13.7588 9.28851 13.6606 9.28851H9.55343C9.45522 9.28851 9.37486 9.36886 9.37486 9.46708V10.5385C9.37486 10.6367 9.45522 10.7171 9.55343 10.7171ZM9.55343 13.9314H13.6606C13.7588 13.9314 13.8391 13.851 13.8391 13.7528V12.6814C13.8391 12.5831 13.7588 12.5028 13.6606 12.5028H9.55343C9.45522 12.5028 9.37486 12.5831 9.37486 12.6814V13.7528C9.37486 13.851 9.45522 13.9314 9.55343 13.9314ZM6.16057 6.78851C6.16057 7.02531 6.25464 7.25241 6.42209 7.41985C6.58953 7.58729 6.81663 7.68136 7.05343 7.68136C7.29023 7.68136 7.51733 7.58729 7.68478 7.41985C7.85222 7.25241 7.94629 7.02531 7.94629 6.78851C7.94629 6.5517 7.85222 6.3246 7.68478 6.15716C7.51733 5.98972 7.29023 5.89565 7.05343 5.89565C6.81663 5.89565 6.58953 5.98972 6.42209 6.15716C6.25464 6.3246 6.16057 6.5517 6.16057 6.78851ZM6.16057 10.0028C6.16057 10.2396 6.25464 10.4667 6.42209 10.6341C6.58953 10.8016 6.81663 10.8956 7.05343 10.8956C7.29023 10.8956 7.51733 10.8016 7.68478 10.6341C7.85222 10.4667 7.94629 10.2396 7.94629 10.0028C7.94629 9.76599 7.85222 9.53889 7.68478 9.37145C7.51733 9.204 7.29023 9.10993 7.05343 9.10993C6.81663 9.10993 6.58953 9.204 6.42209 9.37145C6.25464 9.53889 6.16057 9.76599 6.16057 10.0028ZM6.16057 13.2171C6.16057 13.4539 6.25464 13.681 6.42209 13.8484C6.58953 14.0159 6.81663 14.1099 7.05343 14.1099C7.29023 14.1099 7.51733 14.0159 7.68478 13.8484C7.85222 13.681 7.94629 13.4539 7.94629 13.2171C7.94629 12.9803 7.85222 12.7532 7.68478 12.5857C7.51733 12.4183 7.29023 12.3242 7.05343 12.3242C6.81663 12.3242 6.58953 12.4183 6.42209 12.5857C6.25464 12.7532 6.16057 12.9803 6.16057 13.2171Z" fill="#D6AA69"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.3 KiB |
@ -1,174 +0,0 @@
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
font-family: -apple-system,pingfang, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
font-weight: 400;
|
||||
|
||||
color-scheme: light dark;
|
||||
color: rgba(255, 255, 255, 0.87);
|
||||
background-color: #242424;
|
||||
|
||||
font-synthesis: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
--bar-height: 50px;
|
||||
user-select: none;
|
||||
overflow: hidden;
|
||||
//scrollbar-gutter: stable;
|
||||
|
||||
--primary-golden-color: rgba(214, 170, 105, 1);
|
||||
--primary-color: #D6AA69;
|
||||
--primary-disabled-color: #D9D9D9;
|
||||
--primary-process-color: #aaaaaa;
|
||||
|
||||
--action-btn-radius: 2px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 3px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #999;
|
||||
height: 10px;
|
||||
border-radius: 5px;
|
||||
|
||||
&:hover {
|
||||
background: #666;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: #f0f0f0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.container-overflow-auto{
|
||||
overflow: auto;
|
||||
scrollbar-gutter: stable;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: 500;
|
||||
color: #646cff;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
a:hover {
|
||||
color: #535bf2;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
min-height: 100vh;
|
||||
}
|
||||
.full-width{
|
||||
width: 100%;
|
||||
}
|
||||
.fz-small{
|
||||
font-size: 14px;
|
||||
}
|
||||
.text-tip{
|
||||
color: #999;
|
||||
}
|
||||
.text-link{
|
||||
cursor: pointer;
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.text-link-blue{
|
||||
cursor: pointer;
|
||||
color: #558CB7 !important;
|
||||
}
|
||||
.pointer{
|
||||
cursor: pointer;
|
||||
}
|
||||
.relative {
|
||||
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
||||
.ml-2 {
|
||||
margin-left: 2px;
|
||||
}
|
||||
.d-flex {
|
||||
display: flex;
|
||||
}
|
||||
.space-between{
|
||||
justify-content: space-between;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-justify {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.align-start {
|
||||
.d-flex;
|
||||
user-select: text;
|
||||
align-items: start;
|
||||
}
|
||||
.justify-between {
|
||||
justify-content: space-between;
|
||||
}
|
||||
.justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.align-end {
|
||||
.d-flex;
|
||||
align-items: end;
|
||||
}
|
||||
|
||||
.align-center,.item-center {
|
||||
.d-flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flex-1 {
|
||||
flex: 1;
|
||||
}
|
||||
.ai-proofread-top {
|
||||
margin-block-start: calc(var(--bar-height) + 10px);
|
||||
}
|
||||
.btn-golden.ant-btn-primary{
|
||||
box-shadow: none;
|
||||
background: linear-gradient(270deg, #CAA266 0%, #E9C57E 100%);
|
||||
&:not(:disabled):not(.ant-btn-disabled):hover{
|
||||
background: linear-gradient(270deg, #CAA266 0%, #CAA266 100%);
|
||||
}
|
||||
}
|
||||
.text-blank-space{
|
||||
min-width: 12px;
|
||||
white-space: pre-wrap;
|
||||
display: inline !important;
|
||||
//&:after{
|
||||
// content: ' ';
|
||||
//}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
color: #213547;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
color: #213547;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
// material-ui
|
||||
import {CSSObject} from '@mui/material/styles';
|
||||
import {Box} from '@mui/material';
|
||||
|
||||
// project import
|
||||
|
||||
interface Props {
|
||||
color?: string;
|
||||
bgColor?: string;
|
||||
size?: number;
|
||||
variant?: string;
|
||||
sx?: CSSObject;
|
||||
}
|
||||
|
||||
const Dot = ({size, variant, sx, bgColor,color}: Props) => {
|
||||
const main = '#f00'
|
||||
return (
|
||||
<Box component="span"
|
||||
sx={{
|
||||
width: size || 8,
|
||||
height: size || 8,
|
||||
borderRadius: '50%',
|
||||
bgcolor: bgColor || (variant === 'outlined' ? '' : main),
|
||||
...(variant === 'outlined' && {
|
||||
border: `1px solid ${color}`
|
||||
}),
|
||||
...sx
|
||||
}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default Dot;
|
@ -1,28 +0,0 @@
|
||||
.win-app-title-bar{
|
||||
user-select: none;
|
||||
}
|
||||
.app-title-bar{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: var(--bar-height);
|
||||
background-color: #eee;
|
||||
overflow: hidden;
|
||||
position: fixed;
|
||||
left:0;right:0;top:0;
|
||||
padding: 0 10px 0 20px;
|
||||
z-index: 9999;
|
||||
//box-shadow: 0 0 5px rgba(0,0,0,0.7);
|
||||
//
|
||||
&.show-bar-border{
|
||||
border-bottom: solid 1px rgba(181, 181, 181, 0.5);
|
||||
}
|
||||
.app-close-btn{
|
||||
&:hover{
|
||||
background-color: rgba(0,0,0,0.05) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
.app-title-bar-placeholder{
|
||||
height: var(--bar-height);
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
import React from "react";
|
||||
import {createPortal} from "react-dom"
|
||||
import {Button} from "antd";
|
||||
import {CloseOutlined} from "@ant-design/icons";
|
||||
import './title-bar.less'
|
||||
|
||||
export type AppTitleBarProps = {
|
||||
title?: React.ReactNode;
|
||||
bordered?: boolean;
|
||||
backgroundColor?: string;
|
||||
closeSize?: string | number;
|
||||
className?:string;
|
||||
onClose?:()=>void;
|
||||
}
|
||||
export const AppTitleBar: React.FC<AppTitleBarProps> = ({title,className,onClose, backgroundColor, closeSize = 16, bordered = true}) => {
|
||||
const onMouseDown = (evt: React.MouseEvent<HTMLDivElement>) => {
|
||||
chrome.webview.hostObjects.sync.event.MouseDownDrag();
|
||||
evt.preventDefault();
|
||||
// evt.stopPropagation();
|
||||
}
|
||||
return createPortal((
|
||||
<div className={`win-app-title-bar ${className}`} onContextMenu={e => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
}}>
|
||||
<div className={`app-title-bar ${bordered ? 'show-bar-border' : ''}`}
|
||||
style={backgroundColor ? {backgroundColor} : {}} onMouseDown={onMouseDown}>
|
||||
<div className="app-title" style={{fontSize: 18,color:'#000'}}>{title}</div>
|
||||
<Button
|
||||
type="text" className={'app-close-btn'} size={'small'}
|
||||
onMouseDown={async (e) => {
|
||||
e.stopPropagation();
|
||||
if (e.button == 0) {
|
||||
if(onClose) {
|
||||
onClose();
|
||||
}else {
|
||||
chrome.webview.hostObjects.sync.event.Close();
|
||||
}
|
||||
|
||||
}
|
||||
}}
|
||||
icon={<CloseOutlined style={{fontSize: closeSize,color:'#818181'}}/>}></Button>
|
||||
</div>
|
||||
<div className="app-title-bar-placeholder"></div>
|
||||
</div>
|
||||
), document.querySelector('#app_ext')!)
|
||||
}
|
@ -1,175 +0,0 @@
|
||||
import {Button, Checkbox, Input, Modal, Space, message, App} from "antd";
|
||||
import React, {useState} from "react";
|
||||
import {useSetState} from "ahooks";
|
||||
|
||||
export type ModalOptions = {
|
||||
content?: React.ReactNode,
|
||||
title?: React.ReactNode,
|
||||
}
|
||||
|
||||
message.config({
|
||||
prefixCls:'ai-proofread'
|
||||
})
|
||||
|
||||
export const showModal = (opt: ModalOptions) => {
|
||||
Modal.confirm({
|
||||
title: opt.title,
|
||||
content: opt.content,
|
||||
onOk() {
|
||||
console.log('OK');
|
||||
},
|
||||
onCancel() {
|
||||
console.log('Cancel');
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
export function useAlert() {
|
||||
const {modal} = App.useApp()
|
||||
return {
|
||||
show(content: React.ReactNode, width = 300, afterClose?: () => void,title?:string) {
|
||||
modal.info({
|
||||
content,
|
||||
title,
|
||||
className: 'aui-alert',
|
||||
icon: null,
|
||||
width,
|
||||
onOk: afterClose
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function useLoading() {
|
||||
const {message} = App.useApp()
|
||||
const key = Math.random().toString(16).substring(2);
|
||||
return {
|
||||
show(content = 'loading...') {
|
||||
message.open({
|
||||
type: 'loading',
|
||||
content,
|
||||
duration: 0,
|
||||
key
|
||||
}).then()
|
||||
},
|
||||
close() {
|
||||
message.destroy(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function showToast(content: string, type?: 'success' | 'info' | 'warning' | 'error',duration?:number) {
|
||||
|
||||
message.open({
|
||||
type,
|
||||
content,
|
||||
className: 'aui-toast',
|
||||
duration,
|
||||
}).then();
|
||||
}
|
||||
|
||||
type ConfirmOptions = {
|
||||
content?: string;
|
||||
onYes?: (hideNextNotice?: boolean) => void;
|
||||
onNo?: () => void;
|
||||
yesText?: string;
|
||||
noText?: string;
|
||||
title?: string;
|
||||
showNextAsk?: boolean;
|
||||
}
|
||||
|
||||
export function useConfirm() {
|
||||
const [opts, setOpts] = useState<ConfirmOptions>({})
|
||||
const [open, setOpen] = useState(false)
|
||||
const [checked, setChecked] = useState(false)
|
||||
const confirmHolder = (
|
||||
<Modal
|
||||
centered
|
||||
open={open}
|
||||
title={opts.title}
|
||||
maskClosable={false}
|
||||
width={400}
|
||||
onCancel={() => {
|
||||
setOpen(false);
|
||||
opts.onNo?.()
|
||||
}}
|
||||
rootClassName="aui-custom-modal"
|
||||
footer={<div className={`d-flex space-between align-center ${opts.showNextAsk ? '' : 'space-center'}`}>
|
||||
<div>
|
||||
{opts.showNextAsk && <Checkbox onChange={e => {
|
||||
setChecked(e.target.checked)
|
||||
}}>不再提醒</Checkbox>}
|
||||
</div>
|
||||
<Space size={20}>
|
||||
<Button className="btn-grey" key="back" onClick={() => {
|
||||
setOpen(false)
|
||||
opts.onNo?.()
|
||||
}}>{opts.noText || '否'}</Button>
|
||||
<Button key="submit" type="primary" onClick={() => {
|
||||
setOpen(false)
|
||||
opts.onYes?.(checked)
|
||||
}}>{opts.yesText || '是'}</Button>
|
||||
</Space>
|
||||
</div>}
|
||||
>
|
||||
<div className="modal-confirm-body">
|
||||
{opts.content}
|
||||
</div>
|
||||
</Modal>
|
||||
)
|
||||
return {
|
||||
confirmHolder,
|
||||
showConfirm: (opts: ConfirmOptions) => {
|
||||
setOpts(opts)
|
||||
setOpen(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type PromptOptions = {
|
||||
title?: string;
|
||||
defaultValue?: string;
|
||||
placeholder?: string;
|
||||
required?: boolean;
|
||||
onOK?: (value: string) => void;
|
||||
}
|
||||
|
||||
export function usePrompt() {
|
||||
const [opt, setOpt] = useSetState<PromptOptions>({})
|
||||
const [open, setOpen] = useState<boolean>(false)
|
||||
const [value, setValue] = useState<string>('')
|
||||
|
||||
const promptHolder = (
|
||||
<Modal
|
||||
centered
|
||||
open={open}
|
||||
title={opt.title}
|
||||
maskClosable={false}
|
||||
onCancel={() => {
|
||||
setOpen(false)
|
||||
}}
|
||||
onOk={() => {
|
||||
setOpen(false);
|
||||
opt.onOK?.(value)
|
||||
}}
|
||||
>
|
||||
<Input
|
||||
value={value}
|
||||
onChange={e => setValue(e.currentTarget.value)}
|
||||
placeholder={opt.placeholder || '请输入'}
|
||||
/>
|
||||
</Modal>
|
||||
)
|
||||
return {
|
||||
promptHolder,
|
||||
show(option: PromptOptions) {
|
||||
setOpt(option)
|
||||
setValue(option.defaultValue || '')
|
||||
setOpen(true)
|
||||
// return new Promise<string>((resolve) => {
|
||||
// options.resolve = resolve
|
||||
// })
|
||||
}
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
import React from "react";
|
||||
import {Button, Empty, Pagination as AntPage} from "antd"
|
||||
import {TPaginationResult} from "@/service/types/base.ts";
|
||||
|
||||
type TPagination = {
|
||||
param?: TPaginationResult;
|
||||
className?: string;
|
||||
defaultCurrent?: number;
|
||||
onPageChange?: (page: number) => void;
|
||||
emptyText?: string | null;
|
||||
onEmptyReLoadClick?: () => void;
|
||||
emptyReLoadText?: string;
|
||||
}
|
||||
export const Pagination: React.FC<TPagination> = (props) => {
|
||||
return props.param && props.param.total > 0 ? (
|
||||
<AntPage
|
||||
className={`${props.className} simple-page`}
|
||||
total={props.param.total}
|
||||
defaultCurrent={props.defaultCurrent}
|
||||
pageSize={props.param.pageSize}
|
||||
hideOnSinglePage
|
||||
current={props.param.current}
|
||||
showSizeChanger={false}
|
||||
onChange={props.onPageChange}
|
||||
simple
|
||||
/>
|
||||
) : (props.emptyText === null ? null : (<Empty description={props.emptyText || '暂无数据'}>{props.onEmptyReLoadClick &&
|
||||
<Button type="link" onClick={props.onEmptyReLoadClick}>{props.emptyReLoadText || '重新加载'}</Button>}</Empty>))
|
||||
}
|
@ -1,104 +0,0 @@
|
||||
import React from "react";
|
||||
import {Dropdown, Popover} from "antd";
|
||||
import {cx} from "@emotion/css";
|
||||
import {CheckOutlined} from "@ant-design/icons";
|
||||
|
||||
|
||||
export type PopoverMenuItems = {
|
||||
type?: 'divider' | 'title' | string;
|
||||
label?: string;
|
||||
render?: React.ReactNode;
|
||||
icon?: React.ReactNode;
|
||||
key?: string;
|
||||
checked?: boolean;
|
||||
}
|
||||
export type PopoverMenuProps = {
|
||||
items: PopoverMenuItems[]
|
||||
open?: boolean;
|
||||
theme?: 'dark' | 'light';
|
||||
children?: React.ReactNode;
|
||||
onItemClick?: (item: PopoverMenuItems) => void;
|
||||
itemClassName?: string;
|
||||
showCheckBox?: boolean;
|
||||
}
|
||||
|
||||
export const PopoverMenu: React.FC<PopoverMenuProps> = (props) => {
|
||||
return (<Popover open={props.open} trigger={['hover']} overlayClassName={cx('ai-dropdown-menu ai-toolbar', {
|
||||
'theme-dark': props.theme == 'dark',
|
||||
'theme-light': (!props.theme || props.theme == 'light')
|
||||
})} content={<div>
|
||||
{props.items && props.items.map((it, index) => (
|
||||
it.type == 'divider' ? <div key={index} className="list-item-divider"></div> : <div
|
||||
key={index}
|
||||
className={cx('list-item', it.type == 'title' ? 'list-item-title' : '')}
|
||||
onClick={() => {
|
||||
props.onItemClick && it.type != 'title' && props.onItemClick(it)
|
||||
}}
|
||||
>
|
||||
{props.showCheckBox && <span className="pre-icon">{it.checked && <CheckOutlined/>}</span>}
|
||||
<div className="text">
|
||||
<span className="icon">{it.icon}</span>
|
||||
<span
|
||||
className={cx('text-inner', `${(props.itemClassName || '')}-${it.key}`)}>{it.render || it.label}</span>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>}>
|
||||
{props.children}
|
||||
</Popover>)
|
||||
}
|
||||
|
||||
export type DropDownMenuItem = {
|
||||
disabled?: boolean;
|
||||
danger?: boolean;
|
||||
icon?: React.ReactNode;
|
||||
title?: string;
|
||||
type?: 'divider' | 'title' | string;
|
||||
label?: string;
|
||||
key?: string;
|
||||
theme?: 'dark' | 'light';
|
||||
children?: DropDownMenuItem[];
|
||||
onClick?: () => void;
|
||||
}
|
||||
export type DropdownMenuProps = {
|
||||
items: DropDownMenuItem[]
|
||||
open?: boolean;
|
||||
theme?: 'dark' | 'light';
|
||||
children?: React.ReactNode;
|
||||
onItemClick?: (item: DropDownMenuItem) => void;
|
||||
inToolbar?:boolean;
|
||||
className?:string;
|
||||
itemClassName?: string;
|
||||
placement?: "topLeft" | "topCenter" | "topRight" | "bottomLeft" | "bottomCenter" | "bottomRight" | "top" | "bottom";
|
||||
selectable?: boolean;
|
||||
selectedKey?: string;
|
||||
}
|
||||
// 通用popover下拉菜单
|
||||
export const DropdownMenu: React.FC<DropdownMenuProps> = (props) => {
|
||||
const onClick = ({key}: { key: string }) => {
|
||||
const item = props.items.find(it => it.key == key);
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
if (!item.onClick) {
|
||||
props.onItemClick?.(item)
|
||||
}
|
||||
}
|
||||
return (<Dropdown
|
||||
arrow={{pointAtCenter: true}}
|
||||
open={props.open}
|
||||
trigger={['hover']}
|
||||
overlayClassName={cx(props.className,`ai-dropdown-menu ${props.selectable?'ai-dropdown-menu-selectable':'no-selected-icon'}`,props.inToolbar === false ?undefined:'ai-toolbar', {
|
||||
'theme-dark': props.theme == 'dark',
|
||||
'theme-light': (!props.theme || props.theme == 'light'),
|
||||
})}
|
||||
menu={{
|
||||
items: (props.items as any),
|
||||
onClick,
|
||||
selectable: props.selectable,
|
||||
selectedKeys: props.selectedKey ? [props.selectedKey] : undefined
|
||||
}}
|
||||
placement={props.placement || 'bottom'}>
|
||||
{props.children}
|
||||
</Dropdown>)
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
import {useSetState} from "ahooks";
|
||||
import {useNavigate} from "react-router-dom";
|
||||
import {useDemoStore} from "../../core/use-demo-store.ts";
|
||||
import {Alert, Button, Space} from "antd";
|
||||
|
||||
export function Test(){
|
||||
const [state, setState] = useSetState({
|
||||
warning: false
|
||||
})
|
||||
const navigate = useNavigate();
|
||||
const {view} = useDemoStore()
|
||||
const startProofread = () => {
|
||||
setState({warning: true})
|
||||
}
|
||||
return <>
|
||||
<h1>Home</h1>
|
||||
<Space>
|
||||
<Button onClick={startProofread}>开始校对</Button>
|
||||
<Button onClick={()=>navigate('/login')}>请先登录</Button>
|
||||
</Space>
|
||||
{state.warning && <div style={{margin: "10px 0"}}>
|
||||
<Alert message={'测试一下alert提示效果'} onClose={() => setState({warning: false})}/>
|
||||
</div>}
|
||||
<div>
|
||||
{JSON.stringify(view)}
|
||||
</div>
|
||||
</>
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
import {DependencyList, useEffect} from "react";
|
||||
|
||||
type NoticeDataType = {
|
||||
action: string;
|
||||
data?: any;
|
||||
}
|
||||
|
||||
// type HostBridge = {
|
||||
// showDialog: (message: string) => void;
|
||||
// loginSuccess: (userinfo: string|Account) => void;
|
||||
// noticeOtherWeb: (data: string, target: string | null) => Promise<void>;
|
||||
// getAllText: () => Promise<DocumentText[]>;
|
||||
// }
|
||||
|
||||
export const bridge: HostBridge = chrome.webview?.hostObjects.bridge;
|
||||
|
||||
export const useBridge = () => {
|
||||
return {
|
||||
bridge,
|
||||
showView: (url:string, width:number, height:number, dialog:boolean)=>{
|
||||
url = `${location.origin}${url}`
|
||||
bridge.ShowWebView(url,Math.ceil(width * window.devicePixelRatio),Math.ceil(height * window.devicePixelRatio),dialog);
|
||||
},
|
||||
getAppInfo: async () => {
|
||||
const res = await bridge.GetAppVersion()
|
||||
if(/^\d+(\.\d+){1,2}$/.test(res)){
|
||||
return {
|
||||
version: res,
|
||||
platform: 'wps',
|
||||
environment: 'Windows',
|
||||
deviceId:''
|
||||
}
|
||||
}
|
||||
return JSON.parse(res) as AppPluginInfo
|
||||
},
|
||||
noticeOtherWeb: (params: string | NoticeDataType, target: string | null = null) => {
|
||||
if (typeof params == "object") {
|
||||
params = JSON.stringify(params)
|
||||
}
|
||||
return bridge.noticeOtherWeb(params, target)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-expect-error
|
||||
window.bridge_ext = {
|
||||
bridge,
|
||||
markSentence: (content:string) => {
|
||||
bridge.MarkSentence(content,0).then((res)=>{
|
||||
console.log('标记成功',res)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export function useBridgeMessageListener<T>(listener: (params: WebMessage<T>) => void,deps?: DependencyList) {
|
||||
const onBridgeMessage = (e: MessageEvent) => {
|
||||
listener(e.data);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
// 添加消息事件监听
|
||||
chrome.webview?.addEventListener('message', onBridgeMessage)
|
||||
return () => {
|
||||
// 移除消息事件
|
||||
chrome.webview?.removeEventListener('message', onBridgeMessage)
|
||||
}
|
||||
}, deps || [])
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
// 数据 主要是保存当前文档id
|
||||
import {AppUpgradeInfo} from "@/service/types/settings.ts";
|
||||
|
||||
export const CACHE_DATA: {
|
||||
wordCount: number;
|
||||
state: 'ready' | 'proofreading' | 'finish';
|
||||
proofreadMode?: 'full' | 'exact' | string;
|
||||
DocumentID: number;
|
||||
correctId: number;
|
||||
selectId: number;
|
||||
selectStatus: 1 | 2 | 3;
|
||||
timer: number | null | undefined | object | object;
|
||||
progress_timer: number | null | undefined | object | object;
|
||||
progress_count: number;
|
||||
userinfo?: Account;
|
||||
upgradeInfo: AppUpgradeInfo;
|
||||
clearTimer: () => void;
|
||||
clearProgressTimer: () => void;
|
||||
currentSentenceList: V3.ProofreadSentence[];
|
||||
originData: {
|
||||
[key: number]: V3.OriginDataInfo
|
||||
}
|
||||
} = {
|
||||
state: 'ready',
|
||||
DocumentID: 0,
|
||||
wordCount: 0,
|
||||
correctId: 1,
|
||||
selectId: -1,
|
||||
selectStatus: 1,
|
||||
userinfo: undefined,
|
||||
upgradeInfo: {},
|
||||
timer: null,
|
||||
progress_timer: null,
|
||||
progress_count: 0,
|
||||
currentSentenceList: [],
|
||||
originData: {},
|
||||
clearProgressTimer: () => {
|
||||
console.log('clearProgressTimer')
|
||||
if (CACHE_DATA.progress_timer) {
|
||||
clearInterval(Number(CACHE_DATA.progress_timer))
|
||||
}
|
||||
CACHE_DATA.progress_timer = 0;
|
||||
CACHE_DATA.progress_count = 0;
|
||||
},
|
||||
clearTimer: () => {
|
||||
if (CACHE_DATA.timer) {
|
||||
clearTimeout(Number(CACHE_DATA.timer))
|
||||
CACHE_DATA.timer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const SentenceListCache: V3.ProofreadSentence[] = [];
|
@ -1,23 +0,0 @@
|
||||
export const ApplicationInfo = {
|
||||
version: AppVersion.version,
|
||||
buildVersion: AppVersion.buildVersion,
|
||||
platform: AppVersion.platform,
|
||||
platformVersion: AppVersion.platformVersion,
|
||||
environment: 'Dev',
|
||||
deviceId: ''
|
||||
}
|
||||
|
||||
export const ProofreadModelConfig:{
|
||||
[key:string]:{
|
||||
name:string;id:string
|
||||
}
|
||||
} = {
|
||||
exact: {
|
||||
name:'优先查准',
|
||||
id:'xt-20250305183041-correct'
|
||||
},
|
||||
full:{
|
||||
name:'优先查全',
|
||||
id:'xt-20250305183041-allround'
|
||||
}
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
// 缓存设备id
|
||||
import FingerprintJS from "@fingerprintjs/fingerprintjs";
|
||||
import md5 from "crypto-js/md5"
|
||||
|
||||
const CACHE = {
|
||||
deviceId: localStorage.getItem('ai_office_device_id')
|
||||
}
|
||||
|
||||
function getCanvasFingerprint() {
|
||||
const canvas = document.createElement('canvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
if (!ctx) {
|
||||
return md5(navigator.userAgent).toString();
|
||||
}
|
||||
canvas.width = 2000
|
||||
canvas.height = 200
|
||||
canvas.style.display = 'inline'
|
||||
ctx.rect(0, 0, 10, 10)
|
||||
ctx.rect(2, 2, 6, 6)
|
||||
//result.canvasWinding = ((ctx.isPointInPath(5, 5, 'evenodd') === false) ? 'yes' : 'no');
|
||||
|
||||
ctx.textBaseline = 'alphabetic'
|
||||
ctx.fillStyle = '#f60'
|
||||
ctx.fillRect(125, 1, 62, 20)
|
||||
ctx.fillStyle = '#069'
|
||||
ctx.font = '11pt Arial'
|
||||
ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 2, 15)
|
||||
ctx.fillStyle = 'rgba(102, 204, 0, 0.2)'
|
||||
ctx.font = '18pt Arial'
|
||||
ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 4, 45)
|
||||
ctx.globalCompositeOperation = 'multiply'
|
||||
ctx.fillStyle = 'rgb(255,0,255)'
|
||||
ctx.beginPath()
|
||||
ctx.arc(50, 50, 50, 0, Math.PI * 2, true)
|
||||
ctx.closePath()
|
||||
ctx.fill()
|
||||
ctx.fillStyle = 'rgb(0,255,255)'
|
||||
ctx.beginPath()
|
||||
ctx.arc(100, 50, 50, 0, Math.PI * 2, true)
|
||||
ctx.closePath()
|
||||
ctx.fill()
|
||||
ctx.fillStyle = 'rgb(255,255,0)'
|
||||
ctx.beginPath()
|
||||
ctx.arc(75, 100, 50, 0, Math.PI * 2, true)
|
||||
ctx.closePath()
|
||||
ctx.fill()
|
||||
ctx.fillStyle = 'rgb(255,0,255)'
|
||||
ctx.arc(75, 75, 75, 0, Math.PI * 2, true)
|
||||
ctx.arc(75, 75, 25, 0, Math.PI * 2, true)
|
||||
ctx.fill('evenodd')
|
||||
return md5(canvas.toDataURL()).toString().replace(
|
||||
/^(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})$/i,
|
||||
'$1-$2-$3-$4-$5'
|
||||
)
|
||||
}
|
||||
|
||||
const DEVICE_ID_KEY = 'ai_office_device_id'
|
||||
|
||||
function saveDeviceId(deviceId: string){
|
||||
CACHE.deviceId = deviceId
|
||||
localStorage.setItem(DEVICE_ID_KEY, CACHE.deviceId)
|
||||
}
|
||||
function calcDeviceId() {
|
||||
if (!CACHE.deviceId) {
|
||||
const deviceId = localStorage.getItem(DEVICE_ID_KEY)
|
||||
if(deviceId){
|
||||
CACHE.deviceId = deviceId
|
||||
return
|
||||
}
|
||||
// 如果缓存中没有设备id则获取指纹作为设备id
|
||||
FingerprintJS.load().then(ret => {
|
||||
ret.get().then((ret) => {
|
||||
saveDeviceId(ret.visitorId)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 计算设备id
|
||||
calcDeviceId();
|
||||
export function getDeviceId() {
|
||||
if(!CACHE.deviceId){
|
||||
CACHE.deviceId = getCanvasFingerprint()
|
||||
saveDeviceId(CACHE.deviceId)
|
||||
}
|
||||
return CACHE.deviceId;
|
||||
}
|
@ -1,127 +0,0 @@
|
||||
import {bridge} from "@/core/bridge.ts";
|
||||
import {CACHE_DATA} from "@/core/cache.ts";
|
||||
import GovInfo = V3.GovInfo;
|
||||
|
||||
/**
|
||||
* 队列信息
|
||||
*/
|
||||
const QUEUE_INFO: {
|
||||
state: 'initial' | 'pause' | 'marking' | 'ended';
|
||||
list: V3.ProofreadSentence[];
|
||||
govExtra: {
|
||||
[key:string]: GovInfo[]
|
||||
},
|
||||
confusionNotice: {
|
||||
[key:string]: string
|
||||
};
|
||||
correctId: number[];
|
||||
index: number;
|
||||
} = {
|
||||
state: 'initial',
|
||||
govExtra: {},
|
||||
confusionNotice: {},
|
||||
list: [],
|
||||
correctId: [],
|
||||
index: 0,
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化队列信息
|
||||
*/
|
||||
export function init() {
|
||||
QUEUE_INFO.list = [];
|
||||
QUEUE_INFO.govExtra = {};
|
||||
QUEUE_INFO.confusionNotice = {};
|
||||
QUEUE_INFO.correctId = [];
|
||||
QUEUE_INFO.index = 0;
|
||||
QUEUE_INFO.state = 'initial';
|
||||
return QUEUE_INFO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取队列信息
|
||||
*/
|
||||
export function getQueue() {
|
||||
return QUEUE_INFO;
|
||||
}
|
||||
|
||||
export function getQueueItem(count: number) {
|
||||
const list: V3.ProofreadSentence[] = [];
|
||||
for (let i = 0; i < count; i++) {
|
||||
if (QUEUE_INFO.index >= QUEUE_INFO.list.length) {
|
||||
break;
|
||||
}
|
||||
list.push(QUEUE_INFO.list[QUEUE_INFO.index])
|
||||
QUEUE_INFO.index++;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
// 获取当前处理句子
|
||||
export function getCurrent() {
|
||||
return QUEUE_INFO.list[QUEUE_INFO.index];
|
||||
}
|
||||
|
||||
export function pause() {
|
||||
QUEUE_INFO.state = 'pause';
|
||||
}
|
||||
|
||||
export function resume() {
|
||||
if (QUEUE_INFO.state !== 'pause') return;
|
||||
QUEUE_INFO.state = 'marking';
|
||||
processCurrentSentence();
|
||||
}
|
||||
|
||||
export function end() {
|
||||
QUEUE_INFO.state = 'ended';
|
||||
QUEUE_INFO.index = QUEUE_INFO.list.length;
|
||||
}
|
||||
|
||||
// 处理当前队列的句子
|
||||
export function processCurrentSentence() {
|
||||
if (QUEUE_INFO.state !== 'marking') return;
|
||||
if (QUEUE_INFO.index >= QUEUE_INFO.list.length) {
|
||||
QUEUE_INFO.state = 'ended'
|
||||
return;
|
||||
}
|
||||
// 每次取5个句子进行标记
|
||||
const list = getQueueItem(5)
|
||||
// 提交句子到word进行标记
|
||||
try {
|
||||
// console.log('mark sentence ===> ', list)
|
||||
bridge.MarkSentence(JSON.stringify(list), CACHE_DATA.DocumentID)
|
||||
.then(() => {
|
||||
processCurrentSentence()
|
||||
})
|
||||
.catch(e => {
|
||||
console.log(e)
|
||||
processCurrentSentence()
|
||||
})
|
||||
} catch (e) {
|
||||
console.log('MarkSentence==>', e)
|
||||
}
|
||||
|
||||
// const sentence = getCurrent();
|
||||
// setTimeout(() => {
|
||||
// console.log('sentence', sentence.insert)
|
||||
// }, 800)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加到队列
|
||||
* @param sentence
|
||||
*/
|
||||
export function push(sentence: V3.ProofreadSentence) {
|
||||
// 判断数据是否重复
|
||||
// 添加到队列中
|
||||
QUEUE_INFO.list.push(sentence);
|
||||
// 判断状态是未开始
|
||||
if (QUEUE_INFO.state === 'marking') {
|
||||
return;
|
||||
}
|
||||
|
||||
// 状态改为标记中
|
||||
QUEUE_INFO.state = 'marking';
|
||||
// 处理当前句子
|
||||
processCurrentSentence()
|
||||
}
|
@ -1,174 +0,0 @@
|
||||
import {bridge} from "@/core/bridge.ts";
|
||||
import {V3Enums} from "@/types/v3/enums.ts";
|
||||
import {base64Decode} from "@/core/string-utils.ts";
|
||||
import {getQueue} from "@/core/proofread-queue.ts";
|
||||
import {CACHE_DATA} from "@/core/cache.ts";
|
||||
|
||||
function findIndexByParagraphAndSentenceNum(searchItem: V3.ProofreadSentence, originList: V3.ProofreadSentence[]) {
|
||||
const index = originList.findIndex(item => {
|
||||
// 如果paragraph_num 大于 searchItem.paragraph_num,或者 paragraph_num 相同,sentence_offset 大于 searchItem.sentence_offset,则返回true
|
||||
return item.paragraph_num > searchItem.paragraph_num || (
|
||||
item.paragraph_num === searchItem.paragraph_num && item.sentence_offset! > searchItem.sentence_offset!
|
||||
)
|
||||
})
|
||||
// console.log(JSON.stringify(searchItem), index)
|
||||
return index
|
||||
}
|
||||
|
||||
export function parseProofreadSentence(sentence: V3.ProofreadSentence) {
|
||||
// 过滤纯空格删除
|
||||
sentence.diffs = sentence.diffs.filter(it=>{
|
||||
if(it.tag != 'd') return true;
|
||||
return it.origin.trim().length > 0;
|
||||
});
|
||||
sentence.diffs.forEach(it => {
|
||||
if(it.color) return;
|
||||
const data = V3Enums.ProofreadType[it.type] as V3.ProofreadTypeConfig
|
||||
if(!it.addition && data){
|
||||
it.addition = data.name
|
||||
}
|
||||
if(it.type == "incorrect_expression"){
|
||||
it.tag = '';
|
||||
}else if(it.type == 'blacklist_mask'){
|
||||
it.type = 'blacklist';
|
||||
it.tag = ''
|
||||
}else if(it.type == 'blacklist_replace'){
|
||||
it.type = 'blacklist';
|
||||
it.tag = 'r'
|
||||
}
|
||||
it.color = data?.color || '#D6AA69'; //#80D6AA69 #fd6643
|
||||
if(data && ['incorrect_expression'].includes(it.type)){
|
||||
it.typeName = data.name
|
||||
}
|
||||
//
|
||||
// it.id = CACHE_DATA.correctId ++ ;
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 将proofreadSentence插入到originList中
|
||||
* @param sentence
|
||||
*/
|
||||
export function buildProofreadSentenceList(sentenceList: V3.ProofreadSentence[], originList: V3.ProofreadSentence[]) {
|
||||
// 1. 对sentence中的diffs数组根据start进行排序
|
||||
// const diffs = sentence.diffs
|
||||
// .sort((a, b) => a.start - b.start)
|
||||
// .map(it=>({
|
||||
// ...it,
|
||||
// sentence_offset: sentence.sentence_offset,
|
||||
// paragraph_num: sentence.paragraph_num
|
||||
// }))
|
||||
const queue = getQueue();
|
||||
sentenceList.forEach(sentence=>{
|
||||
if(!sentence.paragraph_offset){
|
||||
const ext = JSON.parse(base64Decode(sentence.ext)) as V3.SentenceExt;
|
||||
const origin = CACHE_DATA.originData[ext.index]
|
||||
if(!origin){
|
||||
return;
|
||||
}
|
||||
// 还原原始段落
|
||||
sentence.paragraph_num = origin.paragraph_num;
|
||||
sentence.paragraph_offset = origin.paragraph_num;
|
||||
sentence.sentence_offset = sentence.sentence_num;
|
||||
}
|
||||
// 判断originList中是否存在相同的offset
|
||||
const oldItem = originList.find(item =>
|
||||
item.paragraph_num === sentence.paragraph_num
|
||||
&& item.sentence_num === sentence.sentence_num
|
||||
);
|
||||
if (oldItem){
|
||||
// 如果新数据和老数据不一致 则新增
|
||||
if(oldItem.diffs.length != sentence.diffs.length){
|
||||
// 比对差异 并将不存在的数据添加到老的diffs中
|
||||
const oldDiffs = oldItem.diffs.map(it=>it.id);
|
||||
// const newDiffs = sentence.diffs.filter(newItem=>{
|
||||
// return !oldItem.diffs.some(oldItem=>oldItem.id === newItem.id)
|
||||
// })
|
||||
sentence.diffs.forEach(it=>{
|
||||
// 判断是否已经存在, 并且添加到correctId中
|
||||
if(oldDiffs.includes(it.id) || queue.correctId.includes(it.id)) return;
|
||||
oldItem.diffs.push(it)
|
||||
queue.correctId.push(it.id)
|
||||
})
|
||||
}
|
||||
return;
|
||||
}
|
||||
// 重新赋值
|
||||
sentence.diffs = sentence.diffs.filter(it=>{
|
||||
if(it.index.length == 0){
|
||||
it.index = '-1'
|
||||
}
|
||||
// 判断是否已经存在, 并且添加到correctId中
|
||||
if(queue.correctId.includes(it.id)) return false;
|
||||
queue.correctId.push(it.id)
|
||||
return true
|
||||
});
|
||||
|
||||
sentence.diffs.sort((a, b) => a.start - b.start).forEach(it=>{
|
||||
if(typeof(it.addition) == "undefined") it.addition = '';
|
||||
})
|
||||
// 2. 根据sentence的offset,计算出当前结果在originList中所处的位置
|
||||
const index = findIndexByParagraphAndSentenceNum(sentence, originList)
|
||||
// 3. 根据找到的位置, 将diffs插入到originList中
|
||||
//如果index为-1,则说明sentence在originList的最后面,直接插入即可
|
||||
if (index === -1) {
|
||||
originList.push(sentence)
|
||||
// return [...originList, sentence]
|
||||
} else {
|
||||
originList.splice(index, 0, sentence)
|
||||
}
|
||||
})
|
||||
originList.forEach(sentence=>{
|
||||
// 过滤纯粹的空格删除
|
||||
sentence.diffs = sentence.diffs.filter(it=> {
|
||||
if( it.tag == 'd' && (!it.origin || it.origin.trim().length == 0)) return false;
|
||||
return true;
|
||||
})
|
||||
})
|
||||
return originList;//[...originList.slice(0, index), sentence, ...originList.slice(index)]
|
||||
|
||||
}
|
||||
|
||||
|
||||
export function parseV3ProofreadResult(sentences: V3.ProofreadSentence[], disabled: number[] = []) {
|
||||
const list: V3.ProofreadCorrect[] = [];
|
||||
|
||||
const count: {
|
||||
[key: string]: number
|
||||
} = {
|
||||
total: 0
|
||||
};
|
||||
|
||||
try {
|
||||
// 遍历内容
|
||||
sentences.forEach((s) => {
|
||||
s.diffs.forEach(it => {
|
||||
if (disabled.includes(it.id)) return;
|
||||
list.push(it)
|
||||
if (!count[it.type]) count[it.type] = 0;
|
||||
count['total']++;
|
||||
count[it.type]++;
|
||||
})
|
||||
})
|
||||
} catch (e) {
|
||||
console.log('parseV3ProofreadResult=>', e)
|
||||
}
|
||||
|
||||
return {
|
||||
list,
|
||||
count: count as V3.ProofreadCount
|
||||
}
|
||||
}
|
||||
|
||||
export async function saveProofreadCache(cache: V3.CacheData,silent: boolean) {
|
||||
return await bridge.SaveCache(CACHE_DATA.DocumentID, btoa(encodeURIComponent(JSON.stringify(cache))), silent);
|
||||
}
|
||||
|
||||
export async function loadProofreadCache() {
|
||||
const res = await bridge.LoadCache();
|
||||
const data = JSON.parse(res) as BridgeResult<string>
|
||||
if (data.code != 0) {
|
||||
throw new Error(data.message)
|
||||
}
|
||||
return JSON.parse(decodeURIComponent(atob(data.data))) as V3.CacheData
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
// import Base64 from 'crypto-js/enc-base64';
|
||||
// import Utf8Encode from 'crypto-js/enc-utf8'
|
||||
|
||||
/**
|
||||
* 判断是否为不可打印字符
|
||||
* @param char
|
||||
*/
|
||||
export function isInvisibleChar(char: string) {
|
||||
return char.charCodeAt(0) < 32 || char.charCodeAt(0) == 127;
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录并去除掉字符串中不可见字符的位置及对应的字符,然后返回过滤后的字符串及对应不可见字符及位置
|
||||
* @param str
|
||||
*/
|
||||
export function getAndRemoveInvisibleChars(str: string) {
|
||||
const invisibleChars: { pos: number, char: string }[] = [];
|
||||
let newStr = '';
|
||||
// let lastPos = 0;
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
const char = str[i];
|
||||
if (isInvisibleChar(char)) {
|
||||
invisibleChars.push({pos: i, char});
|
||||
} else {
|
||||
newStr += char;//str.substring(lastPos,i);
|
||||
// lastPos = i + 1;
|
||||
}
|
||||
}
|
||||
return {newStr, invisibleChars};
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断内容是否为空或空行
|
||||
* @param content
|
||||
*/
|
||||
export function isBlankOrInvisibleContent(content: string) {
|
||||
///^[\x20-\x7E\x7F-\x9F]+$/.test(content)
|
||||
return !content || content.trim().length === 0 || /^[\x00-\x1F\x7F-\x9F]+$/.test(content);
|
||||
}
|
||||
|
||||
const FootnoteRegExp = /^\[footnoteRef:\d+\]|\[endnoteRef:\d+\]$/
|
||||
|
||||
// 判断内容是否时脚注
|
||||
export function isFootnote(content: string) {
|
||||
return FootnoteRegExp.test(content);
|
||||
//return content.startsWith('[^') && content.endsWith(']');
|
||||
}
|
||||
|
||||
/**
|
||||
* base64编码
|
||||
* @param str
|
||||
*/
|
||||
export const base64Encode = (data: string) => btoa(encodeURI(data));//Base64.stringify(Utf8Encode.parse(data)).toString();
|
||||
|
||||
/**
|
||||
* base64解码
|
||||
* @param str
|
||||
*/
|
||||
export const base64Decode = (content: string) => decodeURI(atob(content));//Utf8Encode.stringify(Base64.parse(content));
|
||||
|
||||
|
||||
export const stringIsEmpty = (str: string|null|undefined) => !str || str.length === 0;
|
@ -1,32 +0,0 @@
|
||||
import {create} from "zustand";
|
||||
|
||||
export type ModalStoreType = {
|
||||
open: boolean;
|
||||
show: () => void;
|
||||
hide: () => void;
|
||||
}
|
||||
type CommonStoreKeys = 'login'
|
||||
|
||||
type CommonStoreType = {
|
||||
view: {
|
||||
[key in CommonStoreKeys]: boolean;
|
||||
};
|
||||
showView: (key: CommonStoreKeys) => void;
|
||||
hideView: (key: CommonStoreKeys) => void;
|
||||
}
|
||||
|
||||
export const useDemoStore = create<CommonStoreType>((set, _, _state) => ({
|
||||
view: {
|
||||
login: false
|
||||
},
|
||||
showView: (key: CommonStoreKeys) => {
|
||||
const view = _state.getState().view;
|
||||
view[key] = true
|
||||
set({view})
|
||||
},
|
||||
hideView: (key: CommonStoreKeys) => {
|
||||
const view = _state.getState().view;
|
||||
view[key] = false
|
||||
set({view})
|
||||
}
|
||||
}))
|
23
src/index.tsx
Normal file
@ -0,0 +1,23 @@
|
||||
import ReactDOM from "react-dom/client";
|
||||
|
||||
import createApp from "../package/package/index.tsx"
|
||||
|
||||
const HelloWorld = ()=><h1>Hello world</h1>
|
||||
console.log(createApp)
|
||||
const App = createApp([
|
||||
{
|
||||
path: "hello-world",
|
||||
element: <HelloWorld/>
|
||||
},
|
||||
{
|
||||
path: "hello-2",
|
||||
element: <HelloWorld/>
|
||||
},
|
||||
{
|
||||
path: "hello-3",
|
||||
element: <HelloWorld/>
|
||||
}
|
||||
])
|
||||
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root')!).render(App)
|
@ -1,5 +0,0 @@
|
||||
import ReactDOM from 'react-dom/client'
|
||||
import './assets/index.less'
|
||||
import App from './App.tsx'
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root')!).render(<App />)
|
@ -1,39 +0,0 @@
|
||||
import React, {useEffect, useRef, useState,} from "react";
|
||||
import styles from "./style.module.less";
|
||||
import markdownit from "markdown-it";
|
||||
|
||||
|
||||
type EllipsisParagraphProps = {
|
||||
content: string;
|
||||
className?: string;
|
||||
}
|
||||
const md = markdownit()
|
||||
export default function EllipsisParagraph({content,className}: EllipsisParagraphProps) {
|
||||
const contentRef = useRef<HTMLDivElement | null>(null);
|
||||
const [expanded, setExpanded] = useState(false);
|
||||
const [state, setState] = useState({
|
||||
expandVisible: false,
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
if (contentRef.current) {
|
||||
const height = contentRef.current.getBoundingClientRect().height,
|
||||
scrollHeight = contentRef.current.scrollHeight;
|
||||
if (scrollHeight > height) {
|
||||
setState({expandVisible: true,})
|
||||
}
|
||||
}
|
||||
}, [contentRef])
|
||||
|
||||
|
||||
return (<div className={styles.detectionResultContainer}>
|
||||
<div
|
||||
ref={contentRef} className={`${styles.detectionResult} ${className || ''}`}
|
||||
dangerouslySetInnerHTML={{__html: content?md.render(content):''}}
|
||||
style={expanded ? {maxHeight: 'none',height:'auto'} : {maxHeight: '100px'}}
|
||||
></div>
|
||||
{state.expandVisible && <div className={styles.contentExpand}>
|
||||
<span onClick={() => setExpanded(!expanded)}>{expanded ? '收起' : '展开'}</span>
|
||||
</div>}
|
||||
</div>)
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
import {Divider, Space} from "antd";
|
||||
import React from "react";
|
||||
|
||||
import styles from "./style.module.less";
|
||||
import {DetectionType} from "./types.ts";
|
||||
import {cutSummary} from "@/utils/strings.ts";
|
||||
|
||||
export default function GenerateResult({type,summary,location}:{
|
||||
type: DetectionType;
|
||||
summary?: string;
|
||||
location?: string;
|
||||
onGenerated: () => void;
|
||||
}){
|
||||
|
||||
return (<div className={styles.listItem}>
|
||||
<Space>
|
||||
<strong>{(type == DetectionType.All || type == DetectionType.AllError) ? '全文检测' : '段落检测'}</strong>
|
||||
{type == DetectionType.Paragraph && <>
|
||||
<Divider type={'vertical'}/>
|
||||
<span className={styles.summaryText}>“{location?`${location}:`:''}{cutSummary(summary)}”</span>
|
||||
</>}
|
||||
</Space>
|
||||
<Divider style={{margin:'10px 0'}}/>
|
||||
<div className={styles.detectionResult}>
|
||||
<div className={styles.generating}>
|
||||
<span>结果生成中...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>)
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
.header {
|
||||
}
|
||||
|
||||
.page {
|
||||
background-color: #f5f5f5;
|
||||
min-height: 100vh;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.contentContainer {
|
||||
}
|
||||
|
||||
.noData {
|
||||
text-align: center;
|
||||
height: calc(100vh - 100px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.summaryText {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.listContainer {
|
||||
max-height: calc(100vh - 80px);
|
||||
padding-right: 5px;
|
||||
margin-right: -5px;
|
||||
overflow: auto;
|
||||
margin-top: -4px;
|
||||
}
|
||||
|
||||
.listItem {
|
||||
padding: 15px 15px;
|
||||
margin: 15px 0;
|
||||
background-color: #fff;
|
||||
border-radius: 3px;
|
||||
|
||||
&:first-child {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.detectionResultContainer {
|
||||
text-align: justify;
|
||||
position: relative;
|
||||
}
|
||||
.detectionResult{
|
||||
line-height: 20px;
|
||||
height: 60px;
|
||||
font-size: 14px;
|
||||
overflow: hidden;
|
||||
user-select: text;
|
||||
p,h1,h2,h3,h4,h5,h6,ul,ol,li{
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
h1{
|
||||
font-size: 16px;
|
||||
margin-top: 20px;
|
||||
&:first-child{
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
h2{
|
||||
margin-top: 20px;
|
||||
&:first-child{
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.resultError{
|
||||
color: rgba(255, 0, 0, 1);
|
||||
}
|
||||
|
||||
.contentExpand {
|
||||
margin-top: 5px;
|
||||
display: block;
|
||||
text-align: right;
|
||||
color: rgba(214, 170, 105, 1);
|
||||
span{
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.expandedBtn {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.generating {
|
||||
color: rgba(68, 52, 255, 1);
|
||||
min-height: 100px;
|
||||
user-select: none !important;
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
|
||||
export enum DetectionType {
|
||||
All = 1,
|
||||
Paragraph = 2,
|
||||
AllError = 3,
|
||||
ParagraphError = 4
|
||||
}
|
@ -1,238 +0,0 @@
|
||||
import {Divider, Empty, Space} from "antd";
|
||||
import React, {useEffect, useState} from "react";
|
||||
|
||||
import {AppTitleBar} from "@/components/app/title-bar.tsx";
|
||||
import styles from './components/style.module.less'
|
||||
import {DetectionType} from "./components/types.ts";
|
||||
import EllipsisParagraph from "./components/ellipsi-paragraph.tsx";
|
||||
import GenerateResult from "./components/generating.tsx";
|
||||
import {useBridge, useBridgeMessageListener} from "@/core/bridge.ts";
|
||||
import { getDetectionResult, parseDetectionResult, sendContentToDetection } from '@/service/api/detection.ts';
|
||||
import {cutSummary} from "@/utils/strings.ts";
|
||||
import {sleep} from "@/utils/sleep.ts";
|
||||
|
||||
const runCache = {
|
||||
first: true
|
||||
}
|
||||
// 检测状态
|
||||
enum DetectionResultStatus {
|
||||
// 状态需要继续请求(未完成)
|
||||
Pending = 101,
|
||||
// result为json格式字符串需要转换成DetectionResult[]
|
||||
Success = 200,
|
||||
// 成功状态,未检测到常识性错误
|
||||
Correct = 201,
|
||||
// 400+ 异常
|
||||
Error = 400
|
||||
}
|
||||
|
||||
type IState = {
|
||||
generating: boolean;
|
||||
generateType: DetectionType;
|
||||
generateSummary: string;
|
||||
location: string;
|
||||
}
|
||||
export default function CommonsenseDetection() {
|
||||
const detectionApi = chrome.webview.hostObjects.detection;
|
||||
const {bridge} = useBridge()
|
||||
const [state, setState] = useState<IState>({
|
||||
generating: false,
|
||||
generateType: DetectionType.All,
|
||||
generateSummary: '',
|
||||
location: ''
|
||||
})
|
||||
const [detectionHistory, setHistory] = useState<Detection.DetectionInfo[]>([]);
|
||||
|
||||
function saveHistory(prev:IState,result:string,type:DetectionType){
|
||||
const item:Detection.DetectionInfo = {
|
||||
id: detectionHistory.length + 1,
|
||||
result_content:result,
|
||||
summary: prev.generateSummary,
|
||||
location: prev.location,
|
||||
type,
|
||||
}
|
||||
// 重置检测状态
|
||||
detectionApi.SetCheckingData(false, '', prev.generateType == DetectionType.All ? '' : prev.generateSummary, '')
|
||||
//存储结果
|
||||
setHistory((list) => [...list, item])
|
||||
detectionApi.SetHistory(JSON.stringify(item));
|
||||
return {...prev,generating: false, }
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 获取检测结果
|
||||
const getCheckResult = (key: string,type:number) => {
|
||||
getDetectionResult(key,type).then((ret) => {
|
||||
if (ret.status == DetectionResultStatus.Pending) {
|
||||
// 没有结果
|
||||
setTimeout(() => {
|
||||
getCheckResult(key,type)
|
||||
}, 5000);
|
||||
return;
|
||||
}else {
|
||||
const result = ret.status == DetectionResultStatus.Success ? parseDetectionResult(ret) : ret.result;
|
||||
setState(prev => saveHistory(prev,result,prev.generateType))
|
||||
}
|
||||
}).catch(e=>{
|
||||
setState(prev => saveHistory(prev,e.message || '常识检测服务异常,请稍后重试',prev.generateType == DetectionType.All ?DetectionType.AllError:DetectionType.ParagraphError))
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 判断是否已经存在检测任务
|
||||
*/
|
||||
const checkExistsTask = async () => {
|
||||
const ret = JSON.parse(await detectionApi.GetCheckStatus()) as Detection.CheckResult;
|
||||
if (ret.isChecking) {
|
||||
const generateType = ret.checkingSummary && ret.checkingSummary.length > 0?DetectionType.Paragraph : DetectionType.All
|
||||
setState(prev => ({
|
||||
...prev,
|
||||
generating: true,
|
||||
generateSummary: ret.checkingSummary,
|
||||
location: ret.checkingLocation,
|
||||
generateType,
|
||||
}))
|
||||
// 使用缓存的key进行获取检测结果
|
||||
getCheckResult(ret.checkingKey!,generateType)
|
||||
return true;
|
||||
}
|
||||
return false
|
||||
}
|
||||
const startCheck = async (content: string, type: DetectionType, location = '') => {
|
||||
if(runCache.first) {
|
||||
runCache.first = false
|
||||
await sleep(0.2)
|
||||
}
|
||||
const exists = await checkExistsTask();
|
||||
if (exists) {
|
||||
return;
|
||||
}
|
||||
setState(() => ({
|
||||
generating: true,
|
||||
generateType: type,
|
||||
generateSummary: content,
|
||||
location
|
||||
}))
|
||||
try {
|
||||
const ret = await sendContentToDetection(content,type)
|
||||
// 存储检测数据
|
||||
detectionApi.SetCheckingData(true, ret.assistantKey, type == DetectionType.All ? '' : content,location)
|
||||
// 获取检测结果 ai段落校对,后端这边采用分段异步请求了组装 等2s后再获取
|
||||
setTimeout(()=>getCheckResult(ret.assistantKey,type),2000)
|
||||
|
||||
} catch (e) {
|
||||
bridge.ShowMessage('常识检测失败,请稍后重试',3500,false)
|
||||
setState(prev => ({
|
||||
...prev,
|
||||
generating: false,
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
const scrollToBottom = () => {
|
||||
const scroller = document.querySelector('.list-container')
|
||||
// 判断是否为null
|
||||
if (!scroller) {
|
||||
return;
|
||||
}
|
||||
// 自动滚动到底部
|
||||
scroller.scrollTo({
|
||||
behavior: 'smooth',
|
||||
top: scroller.scrollHeight + scroller.getBoundingClientRect().height
|
||||
})
|
||||
}
|
||||
useEffect(() => {
|
||||
requestAnimationFrame(scrollToBottom)
|
||||
}, [state.generating,detectionHistory])
|
||||
|
||||
// 全文检测
|
||||
const checkAll = () => {
|
||||
bridge.GetDocumentAllText().then(async (result) => {
|
||||
await startCheck(result, DetectionType.All)
|
||||
})
|
||||
}
|
||||
// 选中段落检测
|
||||
const checkRange = (start: number, end: number) => {
|
||||
if (start == end || start > end) {
|
||||
return false;
|
||||
}
|
||||
bridge.GetTextByRange(start, end).then(async (result) => {
|
||||
try {
|
||||
const ret = JSON.parse(result) as { text: string; line: number; page: number; };
|
||||
await startCheck(ret.text, DetectionType.Paragraph, `第${ret.page}页第${ret.line}行`)
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听消息
|
||||
*/
|
||||
useBridgeMessageListener<string>(({Message, Data}) => {
|
||||
const data = Data ? JSON.parse(Data) : {}
|
||||
if (Message == 'detect-all') {
|
||||
checkAll()
|
||||
} else if (Message == 'detect-range') {
|
||||
checkRange(data.start, data.end)
|
||||
} else {
|
||||
runCache.first = false
|
||||
|
||||
scrollToBottom()
|
||||
// document.querySelector('.list-container')?.scrollTo({
|
||||
// behavior: 'smooth', top: 0
|
||||
// })
|
||||
}
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
// 通知初始化完成
|
||||
detectionApi.WebInitializationCompleted();
|
||||
// 获取当前历史
|
||||
detectionApi.GetHistory().then((result) => {
|
||||
setHistory(JSON.parse(result))
|
||||
})
|
||||
// 初始化已经存在任务的状态
|
||||
checkExistsTask().then()
|
||||
}, [])
|
||||
|
||||
return (<>
|
||||
<AppTitleBar
|
||||
className={styles.header}
|
||||
bordered={false}
|
||||
backgroundColor={'#f5f5f5'}
|
||||
onClose={() => detectionApi.Close()}
|
||||
/>
|
||||
<div className={styles.page}>
|
||||
<div className={styles.contentContainer}>
|
||||
<div className={`${styles.listContainer} list-container`}>
|
||||
{!state.generating && detectionHistory.length == 0 && <div className={styles.noData}>
|
||||
<Empty description={'暂无检测记录'}/>
|
||||
</div>}
|
||||
{detectionHistory.map((item, idx) => {
|
||||
return (<div className={styles.listItem} key={idx}>
|
||||
<Space>
|
||||
<strong>{(item.type == DetectionType.All || item.type == DetectionType.AllError) ? '全文检测' : '段落检测'}</strong>
|
||||
{(item.type == DetectionType.Paragraph || item.type == DetectionType.ParagraphError) && <>
|
||||
<Divider type={'vertical'}/>
|
||||
<span className={styles.summaryText}>“{item.location?`${item.location}:`:''}{cutSummary(item.summary)}”</span>
|
||||
</>}
|
||||
</Space>
|
||||
<Divider style={{margin: '10px 0'}}/>
|
||||
<div>
|
||||
<div className="text">
|
||||
<EllipsisParagraph className={item.type == DetectionType.AllError || item.type == DetectionType.ParagraphError ? styles.resultError:''} content={item.result_content}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>)
|
||||
})}
|
||||
{state.generating && <GenerateResult
|
||||
summary={state.generateSummary} location={state.location}
|
||||
type={state.generateType} onGenerated={() => {
|
||||
setState(prev => ({...prev, generating: false}))
|
||||
}}/>}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>);
|
||||
}
|
@ -1,297 +0,0 @@
|
||||
|
||||
.proofread-container {
|
||||
.proofread-items, .types {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.proofread-items {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-bottom: 15px;
|
||||
max-width: calc(100% - 60px);
|
||||
}
|
||||
|
||||
.operation-button {
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.btn-accept {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
color:var(--selected-color);
|
||||
border-color: var(--selected-color);
|
||||
&:hover{
|
||||
background-color: #e7eaf0;
|
||||
}
|
||||
}
|
||||
.btn-cancel{
|
||||
--btn-background-color: #c9c9c9;
|
||||
&:hover{
|
||||
--btn-background-color: #a2a2a2;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-rollback {
|
||||
border-color: var(--border-color);
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.proofread-list {
|
||||
|
||||
|
||||
.description {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
font-size: 12px;
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.item:last-child + .selected-line{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.info{
|
||||
max-width: 100%;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.origin,.replaced {
|
||||
max-width: 80%;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
padding: 2px 4px;
|
||||
//height: 30px;
|
||||
}
|
||||
.origin {
|
||||
color:#000;
|
||||
}
|
||||
.replaced {
|
||||
background-color: var(--primary-color, #558CB7);
|
||||
color: #fff;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.select{
|
||||
.replaced {
|
||||
|
||||
}
|
||||
.origin,.replaced {
|
||||
white-space: normal;
|
||||
//max-width: 100px;
|
||||
}
|
||||
}
|
||||
.proofread-replace-item-replace{
|
||||
.origin,.replaced {
|
||||
max-width: 50%;
|
||||
}
|
||||
}
|
||||
.proofread-replace-item-delete,
|
||||
.proofread-replace-item-insert{
|
||||
.origin {
|
||||
//max-width: 180px;
|
||||
}
|
||||
&.select{
|
||||
.origin,.replaced {
|
||||
white-space: inherit;
|
||||
//max-width: 160px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.action-text {
|
||||
color: var(--primary-color);
|
||||
margin-left:20px;
|
||||
font-weight: bold;
|
||||
min-width: 40px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.arrow {
|
||||
margin: 0 10px;
|
||||
}
|
||||
}
|
||||
|
||||
// 右侧面板
|
||||
.panel-right-state-wrapper {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
color: #979797;
|
||||
|
||||
.desc {
|
||||
margin: 5px 0 20px;
|
||||
}
|
||||
|
||||
.proofread-state-perfect {
|
||||
.desc {
|
||||
font-size: 18px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
.proofread-state-analyzing{
|
||||
font-size: 18px;
|
||||
color: #000;
|
||||
.remain{
|
||||
font-weight: bold;
|
||||
}
|
||||
.remain-time{
|
||||
margin-top: 10px;
|
||||
}
|
||||
.value{
|
||||
color: #FA674A;
|
||||
font-size: 20px;
|
||||
}
|
||||
.unit{
|
||||
font-size: 14px;
|
||||
margin-left: 3px;
|
||||
}
|
||||
.control{
|
||||
color: #979797;
|
||||
margin-top: 30px;
|
||||
line-height: 26px;
|
||||
|
||||
.small{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.back-to-document{
|
||||
margin-top: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tihuan
|
||||
.text-replace-item {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
padding: 5px 0;
|
||||
&:before{
|
||||
content:' ';
|
||||
display: none;
|
||||
position: absolute;
|
||||
left:-1px;
|
||||
right:-1px;
|
||||
bottom: -5px;
|
||||
top:-5px;
|
||||
background-color: rgba(253, 102, 67, 0.4);
|
||||
}
|
||||
&.replace-type-replace{
|
||||
padding-bottom: 7px;
|
||||
--background-image:url(./../../assets/editor/replace.svg);
|
||||
background-image:var(--background-image);
|
||||
background-size: 12px 5px;
|
||||
background-repeat: repeat-x;
|
||||
background-position:0 26px;
|
||||
&:after{
|
||||
//content:'\2000\2000\2000\2000';
|
||||
//display: block;
|
||||
//position: absolute;
|
||||
//left:0;right:0;
|
||||
//bottom: -7px;
|
||||
//height: 5px;
|
||||
//background-image:linear-gradient(135deg, transparent 40%, var(--current-color,#f00), transparent 60%),
|
||||
//linear-gradient(45deg, transparent 40%, var(--current-color,#f00), transparent 60%);
|
||||
//background-size: 10px 10px;
|
||||
//background-repeat: repeat-x;
|
||||
//background-position: 0 0rem;
|
||||
}
|
||||
}
|
||||
&.text-replace-none{
|
||||
text-decoration:none;
|
||||
border-bottom:none;
|
||||
color: inherit;
|
||||
cursor: inherit;
|
||||
}
|
||||
&.processed-accept{
|
||||
--current-color:var(--primary-color) !important;
|
||||
&.replace-type-replace{
|
||||
--background-image:url(./../../assets/editor/replace-accept.svg);
|
||||
background-image: var(--background-image);
|
||||
}
|
||||
}
|
||||
&.processed-ignore{
|
||||
border-color:#c9c9c9 !important;
|
||||
--current-color:#c9c9c9 !important;
|
||||
&.replace-type-replace{
|
||||
--background-image:url(./../../assets/editor/replace-ignore.svg);
|
||||
background-image: var(--background-image);
|
||||
}
|
||||
}
|
||||
&.replace-type-insert{
|
||||
--background-image:url(./../../assets/editor/insert.svg);
|
||||
min-width: 15px;
|
||||
background-size: 16px 30px;
|
||||
background-repeat: repeat-x;
|
||||
background-position: 0 1px;
|
||||
|
||||
&:not(.processed){
|
||||
background-image: var(--background-image);
|
||||
color: transparent;
|
||||
&::selection{
|
||||
color: transparent;
|
||||
text-decoration-color: #fff;
|
||||
}
|
||||
}
|
||||
&.processed-ignore{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.selection {
|
||||
//background-color: rgba(253, 102, 67, 0.4);
|
||||
background-image: var(--background-image),linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
|
||||
background-size: 12px 5px,100% 28px;
|
||||
background-position:0 26px,0 0;
|
||||
&.replace-type-delete,&.replace-type-insert.processed{
|
||||
background-image: linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
|
||||
background-size: 100% 28px;
|
||||
background-position: 0 0;
|
||||
}
|
||||
&.replace-type-insert:not(.processed){
|
||||
background-size: 16px 30px,100% 28px;
|
||||
background-position:0 1px,0 0;
|
||||
}
|
||||
|
||||
}
|
||||
&.replace-type-delete{
|
||||
text-decoration: line-through;
|
||||
text-decoration-color: var(--current-color,#f00);
|
||||
text-decoration-thickness: 2px;
|
||||
border-bottom:none;
|
||||
&.processed-ignore{
|
||||
border-color:gray !important;
|
||||
--current-color: gray !important;
|
||||
//text-decoration:none;
|
||||
}
|
||||
}
|
||||
|
||||
&.processed {
|
||||
&.processed-ignore{
|
||||
//text-decoration:none;
|
||||
//border-bottom:none;
|
||||
}
|
||||
&.processed-delete:not(.processed-delete-init) {
|
||||
&:before {
|
||||
//content: attr(data-replace-text);
|
||||
text-decoration: line-through;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.text-replace-item.processed-delete,.replace-type-insert.processed-ignore{
|
||||
width: 4px;
|
||||
max-width: 4px;
|
||||
min-width: 4px;
|
||||
display: inline-block !important;
|
||||
height: 30px;
|
||||
vertical-align: middle;
|
||||
}
|
@ -1,777 +0,0 @@
|
||||
.view-size-notice {
|
||||
position: fixed;
|
||||
//inset-inline: 0;
|
||||
//inset-block-start: 0;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
padding: 10px;
|
||||
line-height: 30px;
|
||||
z-index: 9999;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
backdrop-filter: blur(2px);
|
||||
}
|
||||
|
||||
@keyframes progress-bar-animation {
|
||||
0% {
|
||||
background-position: -150% 0, -150% 0
|
||||
}
|
||||
100% {
|
||||
background-position: 250% 0, 250% 0
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-notice-wrapper {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 999;
|
||||
//url(./images/loading.svg)
|
||||
background: center bottom no-repeat #f5f5f5;
|
||||
background-size: contain;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 14px;
|
||||
|
||||
.error-notice {
|
||||
p {
|
||||
margin: 0;
|
||||
color: rgba(140, 140, 140, 1);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.error-title {
|
||||
color: #000;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
button {
|
||||
width: 260px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-panel {
|
||||
--btn-size: 40px;
|
||||
--padding-right: 0px;
|
||||
--padding-left: 0px;
|
||||
--padding: 10px;
|
||||
--type-width: 60px;
|
||||
--header-height: 53px;
|
||||
font-size: 14px;
|
||||
|
||||
.panel-controls {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: calc(var(--padding-left) - var(--padding-right));
|
||||
background: #fafafa;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.panel-btn-visible {
|
||||
border-radius: 5px 0 0 5px;
|
||||
width: 28px;
|
||||
height: 40px;
|
||||
background-color: var(--primary-color, #36cfc9);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
top: 53px;
|
||||
right: 0;
|
||||
|
||||
svg {
|
||||
transform: rotate(-180deg) translateX(-3px);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
background-color: #009688;
|
||||
}
|
||||
}
|
||||
|
||||
&.open {
|
||||
|
||||
.panel-btn-visible svg {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-count-tag {
|
||||
border-radius: 8px;
|
||||
line-height: 1;
|
||||
padding: 2px 10px;
|
||||
}
|
||||
|
||||
.proofread-panel-tab-wrapper {
|
||||
background-color: #fff;
|
||||
margin: 0 var(--padding-right) 0 var(--padding-left);
|
||||
}
|
||||
|
||||
.ant-tabs-nav, .ant-tabs-nav-list {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ant-tabs-tab {
|
||||
flex: 1;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.proofread-panel-tab {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.tab-item {
|
||||
flex: 1;
|
||||
font-size: 14px;
|
||||
color: #262626;
|
||||
|
||||
&.Mui-selected {
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
.proofread-status {
|
||||
background-color: #fff;
|
||||
border-radius: 0 0 4px 4px;
|
||||
margin: 0 var(--padding-right) 20px var(--padding-left);
|
||||
}
|
||||
|
||||
.btn-all {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 32px;
|
||||
border: 1px solid #D9D9D9;
|
||||
box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.016);
|
||||
border-radius: 4px;
|
||||
|
||||
&:hover {
|
||||
border-color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-accept-all {
|
||||
color: rgba(54, 207, 201, 1);
|
||||
}
|
||||
|
||||
.btn-ignore-all {
|
||||
color: rgba(140, 140, 140, 1);
|
||||
}
|
||||
}
|
||||
|
||||
.panel-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
background: #fff;
|
||||
z-index: 10;
|
||||
padding: 10px;
|
||||
border-bottom: solid 1px rgba(217, 217, 217, 1);
|
||||
|
||||
.btn-start-proofread {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 150px;
|
||||
border: none !important;
|
||||
background: linear-gradient(to right, #E9C57E 0%, #CAA266 100%);
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(to right, #CAA266 0%, #CAA266 100%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.text-tip {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.count-value {
|
||||
color: #E9C57E;
|
||||
}
|
||||
}
|
||||
.header-logo{
|
||||
svg{
|
||||
height: 46px;
|
||||
width: 120px;
|
||||
}
|
||||
}
|
||||
.proofread-list-wrapper {
|
||||
margin-right: var(--type-width);
|
||||
&.has-result{
|
||||
}
|
||||
}
|
||||
.proofread-list{
|
||||
padding: 0 var(--padding);
|
||||
margin-top: 13px;
|
||||
margin-right: 5px;
|
||||
height: calc(100vh - var(--header-height) - 64px);
|
||||
bottom: 10px;
|
||||
overflow: auto;
|
||||
&::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #fff;
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
// hover时 显示滚动条
|
||||
&:hover{
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #999;
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
background: #f0f0f0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//.selected-line{
|
||||
// border-bottom:solid 1px transparent;
|
||||
// margin: 10px 0;
|
||||
//}
|
||||
}
|
||||
.operation-buttons {
|
||||
position: sticky;
|
||||
z-index: 10;
|
||||
background: #fff;
|
||||
top: calc(var(--header-height) - 1px);
|
||||
button.ant-btn-default{
|
||||
&.btn-operation-batch{
|
||||
border-color: var(--primary-color,rgba(76, 182, 125, 1));
|
||||
color: var(--primary-color,rgba(76, 182, 125, 1));
|
||||
&:not(:disabled):hover{
|
||||
background-color: var(--primary-color,rgba(76, 182, 125, 1));
|
||||
color: #fff;
|
||||
}
|
||||
&:disabled{
|
||||
background-color: #f4f4f4;
|
||||
border-color: #D9D9D9;
|
||||
}
|
||||
}
|
||||
&.btn-ignore-all{
|
||||
border-color: #D9D9D9;
|
||||
}
|
||||
}
|
||||
}
|
||||
.test-item{
|
||||
background-color:#99ffff;
|
||||
height:50px;
|
||||
margin:10px auto;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
border-radius: 4px;
|
||||
&:hover,&.active{
|
||||
background-color: #83d9d9;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-item-wrapper {
|
||||
--border-size: 2px;
|
||||
--timeline-width: 14px;
|
||||
--proofread-font-size: 16px;
|
||||
--content-font-size: 12px;
|
||||
--padding-size: 10px;
|
||||
cursor: default;
|
||||
padding: var(--border-size);
|
||||
overflow: hidden;
|
||||
margin-top: 15px;
|
||||
margin-right: calc(var(--padding-right) - 10px);
|
||||
margin-left: var(--padding-left);
|
||||
border-radius: 4px;
|
||||
background-image: linear-gradient(91.26deg, #fff, #fff);
|
||||
transition: 0.5s;
|
||||
outline: solid 1px transparent;
|
||||
|
||||
.d-flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.content-container {
|
||||
padding: 10px;
|
||||
background: #fff;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
outline: solid 1px #ccc;
|
||||
}
|
||||
|
||||
.proofread-content {
|
||||
display: none;
|
||||
color: #666;
|
||||
font-size: var(--content-font-size);
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.description-item {
|
||||
display: flex;
|
||||
background-color: #f6f5f6;
|
||||
padding: 5px 6px;
|
||||
border-radius: 3px;
|
||||
text-align: justify;
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
line-height: 20px;
|
||||
align-items: flex-start;
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 3px;
|
||||
}
|
||||
|
||||
.error_sort {
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
.content {
|
||||
flex: 1;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
height: 20px;
|
||||
padding-right: 5px;
|
||||
transition: all 0.5s;
|
||||
|
||||
a {
|
||||
color: var(--primary-color);
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.content-text {
|
||||
display: none;
|
||||
|
||||
span {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
.selection {
|
||||
background-color: #fabeb0;
|
||||
}
|
||||
|
||||
.arrow-icon {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
.desc-item {
|
||||
display: flex;
|
||||
background-color: #f6f5f6;
|
||||
padding: 5px 6px;
|
||||
border-radius: 3px;
|
||||
text-align: justify;
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
line-height: 20px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
&.open {
|
||||
.content {
|
||||
white-space: normal;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
max-height: 120px;
|
||||
}
|
||||
|
||||
.content-text {
|
||||
display: block;
|
||||
max-height: 100px;
|
||||
overflow: auto;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.arrow-icon {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
outline: solid 1px transparent;
|
||||
border-color: transparent;
|
||||
margin-left: 0px;
|
||||
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
|
||||
|
||||
.proofread-content {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.proofread-info {
|
||||
.replaced, .origin {
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.proofread-item-model {
|
||||
outline: solid 1px transparent;
|
||||
border-color: transparent;
|
||||
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
|
||||
}
|
||||
|
||||
.proofread-item-container {
|
||||
display: flex;
|
||||
overflow-x: hidden;
|
||||
max-width: 100%;
|
||||
border-bottom: 1px solid #F0F0F0;
|
||||
padding: var(--padding-size) 0;
|
||||
}
|
||||
|
||||
//
|
||||
.proofread-item {
|
||||
position: relative;
|
||||
padding: 0 var(--padding-size);
|
||||
font-size: var(--proofread-font-size);
|
||||
inset-inline-start: 10px;
|
||||
|
||||
&:last-child {
|
||||
.proofread-item-dot:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.proofread-item-container {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-info {
|
||||
position: relative;
|
||||
margin-inline-end: 0;
|
||||
margin-block-start: 0;
|
||||
margin-block-end: 0;
|
||||
line-height: 1.2;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
|
||||
.proofread-text {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&.has-tag {
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-tag {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
line-height: 19px;
|
||||
text-align: center;
|
||||
color: var(--item-type-color, #f00);
|
||||
margin-inline-start: 10px;
|
||||
margin-block-start: -1px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.text {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-item-dot {
|
||||
width: var(--timeline-width);
|
||||
position: absolute;
|
||||
top: 13px;
|
||||
bottom: -20px;
|
||||
left: -10px;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
inset-block-start: 10px;
|
||||
inset-inline-start: 6px;
|
||||
height: calc(100% - 10px);
|
||||
border-inline-start: 1px solid rgba(255, 133, 192, 1);
|
||||
}
|
||||
|
||||
.dot {
|
||||
width: var(--timeline-width);
|
||||
height: var(--timeline-width);
|
||||
border-radius: 50%;
|
||||
background: var(--item-type-color, #36cfc9);
|
||||
position: absolute;
|
||||
border: solid 3px #fff;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.actions {
|
||||
margin-inline-start: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
&:hover, &.active {
|
||||
.proofread-action {
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-action {
|
||||
visibility: hidden;
|
||||
display: flex;
|
||||
--btn-size: 20px;
|
||||
|
||||
&.processed {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.process-state-container {
|
||||
|
||||
}
|
||||
|
||||
.process-state-actions {
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
width: var(--btn-size);
|
||||
height: var(--btn-size);
|
||||
outline: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
padding: 0;
|
||||
color: #999;
|
||||
cursor: pointer;
|
||||
background: none;
|
||||
border: solid 1px transparent;
|
||||
border-radius: 4px;
|
||||
|
||||
&:not[disabled]:hover {
|
||||
color: #36CFC9;
|
||||
border-color: #36CFC9;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-accept {
|
||||
color: #36CFC9;
|
||||
border-color: #36CFC9;
|
||||
}
|
||||
|
||||
.btn-review {
|
||||
color: #9747FF;
|
||||
border-color: #9747FF;
|
||||
}
|
||||
|
||||
.btn-ignore {
|
||||
color: #fff;
|
||||
background-color: #D9D9D9;
|
||||
border-color: #D9D9D9;
|
||||
|
||||
&:not[disabled]:hover {
|
||||
color: #fff;
|
||||
background-color: #ccc;
|
||||
border-color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-add-to-lexicon {
|
||||
color: #D9D9D9;
|
||||
border-color: #D9D9D9;
|
||||
}
|
||||
|
||||
.btn-more {
|
||||
font-size: 10px;
|
||||
color: rgba(182, 182, 182, 1);
|
||||
background-color: rgba(245, 245, 245, 1);
|
||||
border-color: rgba(245, 245, 245, 1);
|
||||
}
|
||||
|
||||
// 已处理状态
|
||||
.process-state {
|
||||
display: flex;
|
||||
font-size: 12px;
|
||||
align-items: center;
|
||||
background-color: #f0f0f0;
|
||||
border-radius: 3px;
|
||||
padding: 0 4px;
|
||||
height: var(--btn-size);
|
||||
}
|
||||
|
||||
.state-accept {
|
||||
color: var(--primary-color-main, #08979C);
|
||||
}
|
||||
|
||||
.state-ignore {
|
||||
color: #C9C9C9;
|
||||
}
|
||||
|
||||
.ml-2 {
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
.rollback {
|
||||
border-radius: 4px;
|
||||
padding: 2px 4px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-hover-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.types {
|
||||
background: #f0f0f0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
top: var(--header-height);
|
||||
width: var(--type-width);
|
||||
|
||||
.item {
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
cursor: pointer;
|
||||
.count{
|
||||
color: var(--primary-color);
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
}
|
||||
&.active {
|
||||
background: #fff;
|
||||
box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-item{
|
||||
.action {
|
||||
margin-left: 10px;
|
||||
.btn {
|
||||
background: #fff;
|
||||
outline: none;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: solid 1px var(--primary-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 4px;
|
||||
color: var(--primary-color);
|
||||
cursor: pointer;
|
||||
box-sizing: border-box;
|
||||
|
||||
&:disabled{
|
||||
background-color: var(--primary-disabled-color);
|
||||
border: solid 1px var(--primary-disabled-color);
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
&:not(:disabled):hover {
|
||||
background-color: var(--primary-color);
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
.btn-odd{
|
||||
background-color: var(--primary-color);
|
||||
color: #fff;
|
||||
&:hover {
|
||||
background-color: #fff;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
}
|
||||
.btn-review{
|
||||
.icon-type{
|
||||
transform: translateY(0.5px);
|
||||
}
|
||||
}
|
||||
.btn-accept {
|
||||
}
|
||||
|
||||
.btn-ignore {
|
||||
}
|
||||
|
||||
.more-action {
|
||||
box-sizing: border-box;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 4px;
|
||||
border: solid 1px var(--primary-color);
|
||||
background-color: var(--primary-color);
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
|
||||
&:hover {
|
||||
background-color: #fff;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
}
|
||||
|
||||
.btn-add-to-lexicon {
|
||||
}
|
||||
|
||||
.processed-wrapper {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.state-accept {
|
||||
color: var(--primary-process-color,#aaaaaa);
|
||||
margin-right: 12px;
|
||||
}
|
||||
.state-review{
|
||||
//color: #3FD4CF;
|
||||
}
|
||||
|
||||
.state-ignore {
|
||||
color: #C9C9C9;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.rollback {
|
||||
border-radius: 4px;
|
||||
padding: 2px 4px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-hover-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-popover.black-bg{
|
||||
//--antd-arrow-background-color: var(--primary-color);
|
||||
.ant-popover-inner{
|
||||
transform: translateY(1px);
|
||||
// background-color: var(--primary-color);
|
||||
padding: 5px 10px;
|
||||
// .ant-popover-inner-content{
|
||||
// color: #fff;
|
||||
// }
|
||||
}
|
||||
}
|
@ -1,135 +0,0 @@
|
||||
import React, {CSSProperties} from "react";
|
||||
import Icon from "@ant-design/icons";
|
||||
import {cx} from "@emotion/css";
|
||||
|
||||
type SvgIconProps = {
|
||||
size?: number;
|
||||
className?: string;
|
||||
style?: CSSProperties;
|
||||
onClick?: (e: React.MouseEvent<HTMLSpanElement>) => void;
|
||||
component: React.ComponentType
|
||||
}
|
||||
|
||||
export const SvgIcon: React.FC<SvgIconProps> = (props) => {
|
||||
const styles: CSSProperties = props.style || {}
|
||||
if (props.size) {
|
||||
styles.fontSize = props.size + 'px';
|
||||
}
|
||||
|
||||
return (<Icon
|
||||
onClick={props.onClick}
|
||||
className={cx(props.className, `icon-type`)}
|
||||
style={styles}
|
||||
component={props.component}
|
||||
/>);
|
||||
}
|
||||
|
||||
export const IconClose = () => (
|
||||
// width="28" height="40"
|
||||
<svg width="28" height="40" viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
|
||||
<path d="M9.5 13L9.5 26" stroke="currentColor" strokeLinecap="round"/>
|
||||
<path d="M15.5 13L22 19.5L15.5 26" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconOpen = () => (
|
||||
<svg viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
|
||||
<path d="M17.5 13L12.5 19.5L17.5 26" stroke="currentColor" strokeLinejoin="round"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconArrowRight = () => (
|
||||
<svg width="1em" height="1em" viewBox="0 0 5 10" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
|
||||
<path d="M0.686285 1.20263L4.37257 4.88892L0.686285 8.5752" stroke="currentColor" strokeLinecap="round"
|
||||
strokeLinejoin="round"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconDotMore = () => (
|
||||
<svg width="1em" height="1em" viewBox="0 0 10 2" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="1" cy="1" r="1" fill="currentColor"/>
|
||||
<circle cx="5" cy="1" r="1" fill="currentColor"/>
|
||||
<circle cx="9" cy="1" r="1" fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconArrowDown = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path d="M232 392L512 672l280-280z" fill="currentColor"></path>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export const IconAccept = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M864.554667 268.501333a42.666667 42.666667 0 0 1 0 60.330667L412.032 781.397333a42.453333 42.453333 0 0 1-22.613333 11.818667l-5.034667 0.597333H379.306667a42.496 42.496 0 0 1-27.648-12.416l-211.2-211.2a42.666667 42.666667 0 1 1 60.330666-60.330666l180.992 180.992 422.4-422.4a42.666667 42.666667 0 0 1 60.330667 0z"
|
||||
fill="currentColor"></path>
|
||||
</svg>
|
||||
)
|
||||
export const IconIgnore = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M853.333333 554.666667H170.666667c-23.466667 0-42.666667-19.2-42.666667-42.666667s19.2-42.666667 42.666667-42.666667h682.666666c23.466667 0 42.666667 19.2 42.666667 42.666667s-19.2 42.666667-42.666667 42.666667z"
|
||||
fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconReviewOutlined = () => (
|
||||
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
|
||||
<path fillRule="evenodd" stroke="currentColor" strokeWidth="2px" strokeLinecap="butt" strokeLinejoin="miter"
|
||||
fill="rgb(255, 255, 255)"
|
||||
d="M9.001,1.000 L33.001,1.000 C37.418,1.000 41.000,4.581 41.000,9.000 L41.000,32.999 C41.000,37.417 37.418,41.000 33.001,41.000 L9.001,41.000 C4.584,41.000 0.999,37.417 0.999,32.999 L0.999,9.000 C0.999,4.581 4.584,1.000 9.001,1.000 Z"/>
|
||||
<path fillRule="evenodd" stroke="currentColor" strokeWidth="4px" strokeLinecap="round"
|
||||
strokeLinejoin="round" fill="none"
|
||||
d="M21.000,10.000 C27.075,10.000 32.000,14.925 32.000,21.000 C32.000,27.075 27.075,32.000 21.000,32.000 C14.925,32.000 10.000,27.075 10.000,21.000 C10.000,14.925 14.925,10.000 21.000,10.000 Z"/>
|
||||
</svg>
|
||||
|
||||
)
|
||||
|
||||
export const IconReview = () => (
|
||||
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
|
||||
<circle cx="22" cy="22" r="12" stroke="currentColor" strokeWidth="4px" fill="none"/>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export const IconPlus = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em" fill="currentColor">
|
||||
<path
|
||||
d="M480.256 128h64c5.632 0 8.704 3.072 8.704 8.704v751.104c0 5.632-3.072 8.704-8.704 8.704H480.256c-5.632 0-8.704-3.072-8.704-8.704V136.704c0-5.632 2.56-8.704 8.704-8.704z"
|
||||
></path>
|
||||
<path
|
||||
d="M153.6 471.552h716.8c5.632 0 8.704 3.072 8.704 8.704v64c0 5.632-3.072 8.704-8.704 8.704H153.6c-5.632 0-8.704-3.072-8.704-8.704V480.256c0-6.144 3.072-8.704 8.704-8.704z"
|
||||
></path>
|
||||
<path d="M471.552 128h84.48v768H471.552z"></path>
|
||||
<path d="M144.896 554.496V470.016h733.696v84.48z"></path>
|
||||
</svg>
|
||||
)
|
||||
export const IconRollback = () => (
|
||||
<svg className="icon" width="1em" height="1em" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.26 2.39797H5.07156V1.13664C5.07156 1.02243 4.95996 0.959368 4.8846 1.02925L2.82663 2.9383C2.81277 2.95105 2.80157 2.96735 2.79386 2.98596C2.78615 3.00456 2.78215 3.02499 2.78215 3.04568C2.78215 3.06638 2.78615 3.0868 2.79386 3.10541C2.80157 3.12401 2.81277 3.14031 2.82663 3.15307L4.8846 5.06211C4.95996 5.132 5.07156 5.06893 5.07156 4.95473V3.6934H11.0861V11.7046H2.30344C2.23967 11.7046 2.1875 11.7659 2.1875 11.8409V12.8636C2.1875 12.9386 2.23967 13 2.30344 13H11.26C11.7716 13 12.1875 12.5108 12.1875 11.9091V3.48885C12.1875 2.88716 11.7716 2.39797 11.26 2.39797Z" fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconRollbackOld = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M328.832 183.168a42.666667 42.666667 0 0 1 0 60.330667L188.330667 384l140.501333 140.501333a42.666667 42.666667 0 1 1-60.330667 60.330667l-170.666666-170.666667a42.666667 42.666667 0 0 1 0-60.330666l170.666666-170.666667a42.666667 42.666667 0 0 1 60.330667 0z"
|
||||
fill="currentColor"/>
|
||||
<path
|
||||
d="M85.333333 384a42.666667 42.666667 0 0 1 42.666667-42.666667h554.666667a256 256 0 0 1 0 512h-213.333334a42.666667 42.666667 0 1 1 0-85.333333h213.333334a170.666667 170.666667 0 0 0 0-341.333333H128a42.666667 42.666667 0 0 1-42.666667-42.666667z"
|
||||
fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export const IconDotMore2 = ()=>(
|
||||
<svg width="1em" height="1em" viewBox="0 0 9 2" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.256836 0.666667C0.256836 0.754215 0.27408 0.840905 0.307583 0.921789C0.341086 1.00267 0.390192 1.07617 0.452098 1.13807C0.514004 1.19998 0.587497 1.24908 0.66838 1.28259C0.749264 1.31609 0.835955 1.33333 0.923503 1.33333C1.01105 1.33333 1.09774 1.31609 1.17862 1.28259C1.25951 1.24908 1.333 1.19998 1.39491 1.13807C1.45681 1.07617 1.50592 1.00267 1.53942 0.921789C1.57293 0.840905 1.59017 0.754215 1.59017 0.666667C1.59017 0.579119 1.57293 0.492428 1.53942 0.411544C1.50592 0.330661 1.45681 0.257168 1.39491 0.195262C1.333 0.133356 1.25951 0.0842502 1.17862 0.0507471C1.09774 0.017244 1.01105 0 0.923503 0C0.835955 0 0.749264 0.017244 0.66838 0.0507471C0.587497 0.0842502 0.514004 0.133356 0.452098 0.195262C0.390192 0.257168 0.341086 0.330661 0.307583 0.411544C0.27408 0.492428 0.256836 0.579119 0.256836 0.666667ZM3.59017 0.666667C3.59017 0.843478 3.66041 1.01305 3.78543 1.13807C3.91046 1.2631 4.08002 1.33333 4.25684 1.33333C4.43365 1.33333 4.60322 1.2631 4.72824 1.13807C4.85326 1.01305 4.9235 0.843478 4.9235 0.666667C4.9235 0.489856 4.85326 0.320286 4.72824 0.195262C4.60322 0.0702377 4.43365 0 4.25684 0C4.08002 0 3.91046 0.0702377 3.78543 0.195262C3.66041 0.320286 3.59017 0.489856 3.59017 0.666667ZM6.9235 0.666667C6.9235 0.843478 6.99374 1.01305 7.11876 1.13807C7.24379 1.2631 7.41336 1.33333 7.59017 1.33333C7.76698 1.33333 7.93655 1.2631 8.06157 1.13807C8.1866 1.01305 8.25684 0.843478 8.25684 0.666667C8.25684 0.489856 8.1866 0.320286 8.06157 0.195262C7.93655 0.0702377 7.76698 0 7.59017 0C7.41336 0 7.24379 0.0702377 7.11876 0.195262C6.99374 0.320286 6.9235 0.489856 6.9235 0.666667Z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
||||
)
|
||||
export const IconStartProofread = () => (
|
||||
<svg className="icon" width="1em" height="1em" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M8.63496 9.45299C8.6234 9.43689 8.60814 9.4238 8.59047 9.41482C8.57279 9.40585 8.55322 9.40126 8.5334 9.40142H7.84277C7.74121 9.40142 7.68184 9.51705 7.74121 9.59986L8.89434 11.1952C8.94434 11.2639 9.0459 11.2639 9.0959 11.1952L10.8803 8.72642C10.9396 8.64361 10.8803 8.52799 10.7787 8.52799H10.0865C10.0459 8.52799 10.0084 8.54674 9.98496 8.57955L8.99277 9.95142L8.63496 9.45299ZM9.31152 3.77799V3.02798C9.31152 2.95923 9.25527 2.90298 9.18652 2.90298H3.18652C3.11777 2.90298 3.06152 2.95923 3.06152 3.02798V3.77799C3.06152 3.84674 3.11777 3.90299 3.18652 3.90299H9.18652C9.25527 3.90299 9.31152 3.84674 9.31152 3.77799ZM3.18652 5.15299C3.11777 5.15299 3.06152 5.20924 3.06152 5.27799V6.02799C3.06152 6.09674 3.11777 6.15299 3.18652 6.15299H6.06152C6.13027 6.15299 6.18652 6.09674 6.18652 6.02799V5.27799C6.18652 5.20924 6.13027 5.15299 6.06152 5.15299H3.18652ZM6.06152 12.3092H1.81152V1.30923H10.5615V5.93424C10.5615 6.00299 10.6178 6.05924 10.6865 6.05924H11.5615C11.6303 6.05924 11.6865 6.00299 11.6865 5.93424V0.684235C11.6865 0.407672 11.4631 0.184235 11.1865 0.184235H1.18652C0.909961 0.184235 0.686523 0.407672 0.686523 0.684235V12.9342C0.686523 13.2108 0.909961 13.4342 1.18652 13.4342H6.06152C6.13027 13.4342 6.18652 13.378 6.18652 13.3092V12.4342C6.18652 12.3655 6.13027 12.3092 6.06152 12.3092ZM12.3521 7.29674L9.35215 6.25455C9.33809 6.24986 9.32559 6.2483 9.31152 6.2483C9.29746 6.2483 9.2834 6.24986 9.2709 6.25455L6.2709 7.29674C6.24639 7.30506 6.22509 7.32082 6.20996 7.34183C6.19484 7.36284 6.18665 7.38804 6.18652 7.41392V11.3374C6.18652 11.3764 6.20371 11.4124 6.23496 11.4358L9.23496 13.7827C9.25684 13.7999 9.28496 13.8092 9.31152 13.8092C9.33809 13.8092 9.36621 13.7999 9.38809 13.7827L12.3881 11.4358C12.4178 11.4124 12.4365 11.3764 12.4365 11.3374V7.41392C12.4365 7.3608 12.4021 7.31392 12.3521 7.29674ZM11.4678 10.9295L9.31152 12.6155L7.15527 10.9295V8.01236L9.31152 7.26236L11.4678 8.01236V10.9295Z"
|
||||
fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
Before Width: | Height: | Size: 1.1 MiB |
@ -1,45 +0,0 @@
|
||||
export const IconLogo = () => (
|
||||
<svg width="207" height="94" viewBox="0 0 207 94" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
|
||||
fill="url(#paint0_linear_2366_40336)"/>
|
||||
<path d="M76.7295 60.4416H79.0956L81.7997 37.4322H79.366L76.7295 60.4416Z" fill="black"/>
|
||||
<path d="M112.425 31.5288H104.38L103.569 28.7114H101.135L101.946 31.5288H93.4282V34.2792H112.425V31.5288Z"
|
||||
fill="black"/>
|
||||
<path d="M98.9711 35.2855H96.4698L93.2925 43.6708H95.7262L98.9711 35.2855Z" fill="black"/>
|
||||
<path
|
||||
d="M92.8188 32.7363H85.9909V28.7114H83.6248V32.7363H76.9321V35.4867H83.6248V61.7161H85.9909V35.4867H92.8188V32.7363Z"
|
||||
fill="black"/>
|
||||
<path d="M107.016 35.2855L110.193 43.6708H112.694L109.449 35.2855H107.016Z" fill="black"/>
|
||||
<path
|
||||
d="M108.3 56.4837C107.016 55.6787 105.867 54.8737 104.852 54.0016C105.799 53.0625 106.61 52.0562 107.286 51.1171C108.03 50.1108 108.638 49.1716 109.111 48.3667C109.585 47.4946 109.99 46.7567 110.193 46.1529C110.464 45.4821 110.599 45.0125 110.734 44.6771L110.802 44.4758H108.368L108.3 44.61C107.962 45.3479 107.421 46.3542 106.475 47.9642C105.664 49.3058 104.447 50.7816 102.96 52.3245C101.472 50.7816 100.255 49.3058 99.4442 47.9642C98.4978 46.3542 97.957 45.3479 97.619 44.61L97.5514 44.4758H95.1177L95.1853 44.6771C95.3205 45.0125 95.4557 45.4821 95.7261 46.1529C95.9965 46.7567 96.4021 47.5617 96.8753 48.3667C97.3486 49.1716 97.957 50.1108 98.633 51.1171C99.309 52.0562 100.12 53.0625 101.067 54.0687C100.053 54.9408 98.9034 55.7458 97.619 56.5508C96.3345 57.3558 94.7796 58.1608 93.1572 58.8987L93.022 58.9658V61.9174L93.2924 61.8503C95.3205 60.9782 97.1458 60.0391 98.7682 59.0328C100.323 58.0266 101.743 57.0203 102.96 55.947C104.176 57.0203 105.529 58.0937 107.083 59.0328C108.706 60.0391 110.531 60.9782 112.627 61.8503L112.897 61.9174V58.9658L112.762 58.8987C111.14 58.0937 109.652 57.2887 108.3 56.4837Z"
|
||||
fill="black"/>
|
||||
<path d="M90.2506 37.4322H87.9521L90.5887 60.4416H92.9548L90.2506 37.5663V37.4322Z" fill="black"/>
|
||||
<path d="M145.618 38.7738H143.116L145.956 54.9408H148.389L145.618 38.7738Z" fill="black"/>
|
||||
<path
|
||||
d="M157.312 29.1139H154.946V32.8034H140.479V35.6209H154.946V58.0266C154.946 58.2949 154.878 58.4962 154.676 58.7645C154.54 58.9657 154.338 59.0999 154.135 59.0999H148.051V61.9174H154.135C155.014 61.9174 155.825 61.5149 156.433 60.7099C157.042 59.9049 157.38 59.0328 157.38 57.8924V35.688H160.151V32.8705H157.38V29.1139H157.312Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M137.37 54.6054C136.288 53.2637 135.274 51.855 134.395 50.5133C135.612 48.2996 136.626 46.0858 137.302 43.9392C137.978 41.7925 138.451 39.9142 138.789 38.2371C139.128 36.5601 139.263 35.2184 139.33 34.1451C139.398 33.0718 139.398 32.468 139.398 32.2668V30.858H125.134V33.6755H136.829C136.761 34.2793 136.694 35.0172 136.559 35.9563C136.423 36.9626 136.221 38.1701 135.95 39.4446C135.68 40.7192 135.274 42.128 134.733 43.6709C134.26 45.0796 133.652 46.5554 132.908 48.0312C132.232 46.8238 131.691 45.6163 131.218 44.4759C130.677 43.2013 130.204 41.9938 129.866 40.8534C129.528 39.713 129.19 38.6396 128.987 37.7005C128.784 36.7613 128.581 35.8892 128.446 35.1513V35.0172H126.013V35.2184C126.148 36.0905 126.351 37.0297 126.621 38.1701C126.891 39.3105 127.229 40.518 127.635 41.8596C128.041 43.2013 128.581 44.61 129.257 46.0858C129.866 47.5617 130.677 49.1046 131.556 50.5804C130.745 51.9221 129.798 53.3308 128.717 54.6725C127.635 56.0141 126.351 57.4229 124.931 58.6974L124.863 58.7645V62.2528L125.134 61.9845C126.824 60.5087 128.379 58.9658 129.663 57.4229C130.88 55.947 132.029 54.4041 132.976 52.9283C133.922 54.4041 135.071 55.947 136.356 57.4229C137.708 58.9658 139.263 60.5087 140.953 61.9845L141.223 62.2528V58.7645L141.156 58.6974C139.804 57.3558 138.519 55.947 137.37 54.6054Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M190.911 59.167V45.8846H205.919V43.1342H190.911V32.468H206.797V29.5834H172.388V32.468H188.274V43.1342H173.266V45.8846H188.274V59.167H172.117V61.9845H207V59.167H190.911Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
|
||||
fill="black"/>
|
||||
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="black"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2366_40336" x1="81.4256" y1="46.6327" x2="-0.00259662" y2="46.6327"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.1" stopColor="white" stopOpacity="0"/>
|
||||
<stop offset="0.1877" stopColor="#F3EADD" stopOpacity="0.0975"/>
|
||||
<stop offset="0.3016" stopColor="#E6D4B8" stopOpacity="0.224"/>
|
||||
<stop offset="0.4208" stopColor="#DCC199" stopOpacity="0.3565"/>
|
||||
<stop offset="0.5453" stopColor="#D3B281" stopOpacity="0.4948"/>
|
||||
<stop offset="0.677" stopColor="#CEA870" stopOpacity="0.6411"/>
|
||||
<stop offset="0.8209" stopColor="#CAA266" stopOpacity="0.8009"/>
|
||||
<stop offset="1" stopColor="#C9A063"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
@ -1,391 +0,0 @@
|
||||
export const ErrorNotice = ()=>(
|
||||
<svg width="260" height="231" viewBox="0 0 260 231" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M129.938 220.959C201.7 220.959 259.875 187.144 259.875 145.43C259.875 103.717 201.7 69.9013 129.938 69.9013C58.1751 69.9013 0 103.717 0 145.43C0 187.144 58.1751 220.959 129.938 220.959Z" fill="white"/>
|
||||
<path d="M86.544 139.325C97.1855 146.203 97.6191 157.556 86.9777 164.433C76.3362 171.311 58.646 171.106 48.0045 164.229C37.3631 157.352 37.3631 146.203 48.0045 139.325C58.646 132.448 75.9025 132.448 86.544 139.325Z" fill="#E6E6E6"/>
|
||||
<path d="M138.422 153.811L173.355 176.385C174.446 177.09 174.446 178.234 173.355 178.939L138.422 201.513C137.331 202.218 135.56 202.218 134.469 201.513L117.272 190.4L101.499 200.588C99.7093 201.743 97.4084 202.32 95.1121 202.32C92.8158 202.32 90.5149 201.743 88.7254 200.583L77.0385 193.031L76.4803 191.636L77.9515 191.264L89.6384 198.815C92.656 200.762 97.5682 200.767 100.586 198.815L115.445 189.22L99.5358 178.939C98.4447 178.234 98.4447 177.09 99.5358 176.385L134.469 153.811C135.56 153.106 137.331 153.106 138.422 153.811Z" fill="#F0F0F0"/>
|
||||
<path d="M64.265 180.763C64.265 181.831 64.9727 182.879 66.2646 183.712L72.1081 187.488L70.9229 188.082L71.195 189.255L65.3516 185.48C63.4753 184.269 62.439 182.593 62.439 180.763C62.439 178.939 63.4707 177.263 65.3516 176.047L86.0639 162.66C86.4976 162.374 87.0591 162.543 87.3102 163.033C87.5613 163.519 87.4152 164.147 86.9769 164.428L66.2646 177.815C64.9772 178.648 64.265 179.696 64.265 180.763Z" fill="#F0F0F0"/>
|
||||
<path d="M157.014 128.126C156.548 128.126 156.078 128.243 155.713 128.478L113.581 155.707C113.188 155.957 112.974 156.31 112.974 156.693C112.974 157.076 113.188 157.429 113.581 157.679L123.515 164.096L123.743 163.652L113.809 157.234C113.572 157.081 113.43 156.882 113.43 156.688C113.43 156.494 113.567 156.299 113.809 156.141L155.941 128.912C156.521 128.534 157.503 128.534 158.087 128.912L166.172 134.139L166.4 133.695L158.315 128.468C157.95 128.248 157.48 128.126 157.014 128.126Z" fill="#FAAD14"/>
|
||||
<path d="M157.014 123.333C156.548 123.333 156.078 123.45 155.713 123.685L106.162 155.707C105.769 155.957 105.555 156.309 105.555 156.693C105.555 157.076 105.769 157.428 106.162 157.679L119.812 166.498L120.04 166.053L106.39 157.234C106.153 157.081 106.011 156.882 106.011 156.688C106.011 156.493 106.148 156.299 106.39 156.141L155.941 124.12C156.521 123.747 157.502 123.741 158.086 124.12L169.883 131.743L170.111 131.298L158.315 123.675C157.949 123.45 157.479 123.333 157.014 123.333Z" fill="#FAAD14"/>
|
||||
<path d="M157.014 118.54C156.548 118.54 156.078 118.658 155.713 118.893L98.7434 155.707C98.3508 155.957 98.1362 156.31 98.1362 156.693C98.1362 157.076 98.3508 157.429 98.7434 157.679L116.1 168.894L116.329 168.45L98.9717 157.239C98.7343 157.086 98.5928 156.887 98.5928 156.693C98.5928 156.504 98.7297 156.304 98.9717 156.146L155.941 119.332C156.521 118.954 157.502 118.954 158.086 119.332L173.59 129.352L173.818 128.907L158.315 118.887C157.949 118.658 157.479 118.54 157.014 118.54Z" fill="#FAAD14"/>
|
||||
<path d="M53.1406 148.513C54.5878 149.499 56.5097 149.54 58.3221 148.824L59.7145 138.11L53.3004 136.275L53.1406 148.513Z" fill="#FFA8A7"/>
|
||||
<path d="M63.4531 158.783C63.6083 158.967 63.5125 160.305 63.3162 160.617C63.1062 160.944 62.0196 161.94 59.9973 161.981C58.0662 162.022 56.3588 161.624 55.2677 160.755C54.1766 159.881 53.6699 158.967 53.6242 157.73C53.5786 156.494 53.7566 155.318 53.2773 154.343C52.8345 153.443 52.2319 152.554 52.0858 152.069C51.7708 151.016 52.0766 149.427 52.0766 149.427L63.4531 158.783Z" fill="#7F5204"/>
|
||||
<path d="M58.765 148.369C58.7742 148.829 58.8244 149.284 58.934 149.749C59.1668 150.72 59.5503 151.639 59.9839 152.518C60.2076 152.973 60.445 153.418 60.7281 153.837C61.2713 154.649 61.9652 155.329 62.545 156.11C63.1248 156.892 63.6042 157.827 63.6087 158.829C63.6087 160.525 61.9424 161 60.6687 161.174C59.3083 161.363 57.8748 161.194 56.5783 160.699C55.1357 160.147 54.1405 158.813 53.9761 157.163C53.9305 156.688 53.9761 156.212 53.9488 155.737C53.8894 154.654 53.4375 153.637 52.917 152.707C52.6157 152.166 52.2825 151.639 52.0953 151.042C51.7529 149.974 52.1227 148.814 52.424 147.787C52.6842 146.898 52.8942 145.83 53.1727 145.932C53.1635 146.116 53.1635 146.51 53.1635 146.51C53.2457 146.709 53.4466 146.857 53.4968 147.087C53.547 147.327 53.6064 147.567 53.6931 147.797C53.8255 148.145 54.0355 148.472 54.3231 148.666C54.3733 148.027 54.4235 147.393 54.4738 146.755C54.4874 146.556 54.5103 146.346 54.6335 146.203C54.7568 146.055 54.9485 146.024 55.1266 145.999C56.204 145.84 57.2996 145.682 58.3724 145.896C58.5322 145.927 58.7103 145.978 58.797 146.137C58.87 146.264 58.8609 146.423 58.8472 146.571C58.797 147.184 58.7513 147.777 58.765 148.369Z" fill="#FFF1B8"/>
|
||||
<path d="M60.1711 152.886C59.6324 152.381 58.3724 152.299 57.6785 152.34C56.8111 152.391 56.0944 152.687 55.6835 152.989C55.5009 153.121 55.2544 153.086 55.1083 152.902C54.9303 152.687 54.9668 152.35 55.1859 152.186C55.6242 151.864 56.4094 151.425 57.432 151.405C59.1348 151.374 59.6142 151.727 59.6142 151.727C59.6142 151.727 60.3629 152.34 60.1711 152.886Z" fill="#D48806"/>
|
||||
<path d="M61.3811 154.7C60.6964 154.189 59.3085 154.174 58.6146 154.215C57.7472 154.266 57.0853 154.608 56.6699 154.91C56.4872 155.042 56.2407 155.002 56.0946 154.823C55.9166 154.608 55.9531 154.271 56.1723 154.107C56.6105 153.785 57.4459 153.275 58.4731 153.254C60.1759 153.223 60.5959 153.637 60.5959 153.637C60.5959 153.637 61.299 153.99 61.3811 154.7Z" fill="#D48806"/>
|
||||
<path d="M56.8482 149.555C58.026 149.488 58.5145 149.667 58.971 149.882C59.2586 150.086 59.4321 150.628 59.2312 150.75C58.866 150.495 58.1904 150.357 57.3549 150.347C56.7934 150.342 56.0812 150.551 55.4923 150.802C55.3417 150.863 55.1682 150.955 55.013 151.042C54.803 151.154 54.5519 151.052 54.4652 150.812C54.3921 150.613 54.4652 150.383 54.6386 150.28C55.0632 150.025 55.8941 149.606 56.8482 149.555Z" fill="#D48806"/>
|
||||
<path d="M71.1556 144.481C72.2695 147.603 74.0134 146.642 76.6704 144.844L77.0721 134.185L70.311 133.485L71.1556 144.481Z" fill="#FFA8A7"/>
|
||||
<path d="M86.8687 151.997C87.0103 152.376 86.9281 153.07 86.7227 153.5C86.5127 153.929 84.399 155.099 81.637 154.726C78.8751 154.348 77.0353 152.984 76.0127 152.14C74.9947 151.292 73.899 151.083 72.534 150.909C71.1644 150.74 70.1373 150.204 69.8679 149.468C69.6032 148.732 70.0095 147.516 70.0095 147.516L86.8687 151.997Z" fill="#7F5204"/>
|
||||
<path d="M76.1133 142.172C76.369 142.121 76.579 142.034 76.8483 141.942C76.9807 141.896 77.1314 141.85 77.2592 141.911C77.4327 141.998 77.492 142.233 77.5286 142.443C77.6062 142.867 77.6199 143.413 77.7659 143.807C77.8983 144.164 78.2544 144.507 78.5009 144.767C79.1446 145.442 79.8888 145.989 80.642 146.5C81.5231 147.097 82.3859 147.573 83.299 148.099C84.2303 148.635 85.4811 149.003 86.1979 149.611C87.2479 150.495 87.2889 152.565 86.0107 153.305C84.9105 153.944 82.0618 154.537 79.1538 153.423C77.5696 152.815 75.8805 150.786 73.7805 150.475C72.4429 150.275 70.6625 150.04 69.8545 148.85C69.5577 148.324 69.8179 146.862 70.0553 145.125C70.2699 143.572 70.4662 141.145 70.9044 141.303L70.941 141.773C70.941 141.773 71.3427 142.315 71.4751 142.494C71.5892 142.652 71.7216 142.749 71.8494 142.892C72.0138 143.071 72.1416 143.275 72.3242 143.439C72.5434 143.638 72.8127 143.786 73.0957 143.802C73.2281 143.807 73.3697 143.781 73.4838 143.71C73.712 143.562 73.7394 143.229 73.9266 143.02C74.1366 142.785 74.3968 142.601 74.6707 142.478C75.0588 142.31 75.4696 142.238 75.8805 142.202C75.9673 142.197 76.0403 142.182 76.1133 142.172Z" fill="#FFF1B8"/>
|
||||
<path d="M79.4287 145.611C79.4287 145.611 79.2644 145.023 78.4746 144.808C77.872 144.645 76.7672 145.084 76.0687 145.662C75.7811 145.897 75.7948 146.382 76.0961 146.592C76.2742 146.719 76.5024 146.699 76.6713 146.556C77.1324 146.152 78.155 145.432 79.4287 145.611Z" fill="#D48806"/>
|
||||
<path d="M81.2623 146.908C81.2623 146.908 80.9017 146.193 80.121 146.162C80.121 146.162 78.5232 146.116 77.4914 147.087C77.2267 147.333 77.2221 147.782 77.5143 147.987C77.6878 148.109 77.9069 148.094 78.0667 147.951C78.5323 147.527 79.4682 146.648 81.2623 146.908Z" fill="#D48806"/>
|
||||
<path d="M83.2988 148.104C83.2988 148.104 82.888 147.455 82.1073 147.419C82.1073 147.419 80.6191 147.394 79.5828 148.359C79.318 148.605 79.3134 149.054 79.6056 149.259C79.7791 149.381 79.9982 149.366 80.158 149.223C80.6282 148.804 81.5047 147.843 83.2988 148.104Z" fill="#D48806"/>
|
||||
<path d="M52.9586 119.746C53.164 114.6 54.141 111.923 54.2825 110.498C54.2825 110.498 54.6568 82.196 55.2731 73.6018L77.9165 72.5237C78.2498 81.7003 78.5511 106.43 78.3776 109.7C78.2087 112.833 77.072 140 77.072 140C73.8718 141.114 70.4661 139.509 70.4661 139.509C70.4661 139.509 68.567 124.058 68.2566 120.65C67.8548 116.241 68.4711 111.448 68.4711 111.448L67.024 89.4413C67.024 89.4413 65.2755 106.502 64.4081 112.93C63.4175 120.292 59.1764 143.117 59.1764 143.117C56.1223 143.97 53.1458 142.493 53.1458 142.493C53.1458 142.493 52.6618 127.201 52.9586 119.746Z" fill="#D48806"/>
|
||||
<path d="M67.0195 89.4363L67.4487 86.4064C68.768 86.1867 72.1097 83.8516 74.0865 81.8129C74.0865 81.8129 72.2969 85.2056 68.5352 87.5407L68.4667 111.448L67.0195 89.4363Z" fill="black" fillOpacity="0.4"/>
|
||||
<path d="M76.3056 57.6143C74.7671 53.6851 72.1193 47.0683 72.1193 47.0683L71.4482 36.3127C71.4482 36.3127 72.9502 36.3536 74.3745 36.604C75.8034 36.8543 78.0587 38.377 79.095 41.2485C79.8619 43.3792 83.8747 56.3778 83.8747 56.3778L90.8595 52.2544C92.649 50.9821 93.279 48.8719 94.4249 47.6763C95.5662 46.4807 96.7212 46.2763 97.9721 45.3004C99.2229 44.3245 99.7388 43.5427 100.054 44.5186C100.373 45.4945 98.9581 46.9916 98.7025 47.3646C98.4468 47.7376 97.0544 48.5347 98.8075 48.6369C100.565 48.7391 104.108 46.8281 104.957 46.5011C105.806 46.1741 105.728 47.3033 105.29 47.9982C104.847 48.6982 104.802 50.7522 104.062 51.907C103.277 53.1333 102.852 53.6595 101.168 54.3851C99.6018 55.0647 96.356 55.2333 94.6851 56.3165C93.0142 57.3946 88.9695 61.4873 86.2714 63.5873C82.6512 66.4078 80.6152 66.5917 79.1954 64.3435C77.771 62.1004 76.8443 58.999 76.3056 57.6143Z" fill="#FFA8A7"/>
|
||||
<path d="M70.5034 36.1083C72.8728 35.9039 75.6712 36.0674 77.2234 37.6514C78.456 38.9134 78.9216 39.7207 80.3003 44.0536C81.2316 46.9813 83.1673 53.7259 83.1673 53.7259C83.1673 53.7259 79.0586 54.5434 76.2967 58.4267L71.8456 47.2317L70.5034 36.1083Z" fill="#FFD666"/>
|
||||
<path d="M83.8658 56.3777C82.3182 56.996 81.2865 58.2121 80.9121 58.9121C80.9121 58.9121 81.0765 56.858 83.6375 55.6471L83.8658 56.3777Z" fill="#F28F8F"/>
|
||||
<path d="M64.8198 35.6278C64.8198 35.6278 63.295 35.5 61.4826 36.0365C59.3963 36.6548 55.6574 37.83 55.6574 37.83C54.4705 38.5198 54.0048 40.8242 53.74 42.1424C52.8818 46.3731 55.1279 55.9585 55.4565 59.6629C55.7807 63.3724 55.0731 74.7973 55.0731 74.7973C57.625 78.1032 71.453 80.3002 78.1867 74.7973C78.1867 74.7973 78.4789 48.6008 77.8169 44.8402C76.8126 39.1533 75.3243 36.4504 70.0698 36.1081L64.8198 35.6278Z" fill="#F5F5F5"/>
|
||||
<path d="M67.7732 21.5709L66.2712 22.5009C66.0475 22.0155 66.2073 21.4177 66.6227 21.1622C67.0382 20.9067 67.5495 21.0906 67.7732 21.5709Z" fill="#263238"/>
|
||||
<path d="M74.3012 22.2507L72.9316 21.0704C73.2101 20.631 73.7442 20.539 74.1232 20.866C74.5021 21.1879 74.5797 21.8113 74.3012 22.2507Z" fill="#263238"/>
|
||||
<path d="M60.8717 16.2214C60.8717 16.2214 59.2556 16.4718 58.6621 17.836C58.1463 19.0214 58.3334 21.8828 59.0182 24.9996C59.703 28.1164 60.3513 29.9967 60.7576 30.8602C61.1593 31.7237 61.9902 31.9638 61.9902 31.9638L61.908 28.2645L61.7893 25.6842C61.7893 25.6842 63.2684 23.4258 63.4282 21.5711C63.6382 19.1901 63.1908 18.2141 63.1908 18.2141L60.8717 16.2214Z" fill="#263238"/>
|
||||
<path d="M63.4781 19.8031C63.4872 23.6199 66.2628 26.7009 69.6685 26.6907C73.0787 26.6805 75.6306 23.5483 75.6215 19.7315C75.6124 15.9147 73.0376 12.8592 69.6274 12.8746C66.2218 12.8848 63.4644 15.9863 63.4781 19.8031Z" fill="#263238"/>
|
||||
<path d="M61.8761 25.2753C61.3191 25.8169 60.8672 24.4169 60.4015 23.8753C59.9359 23.3337 58.4111 22.5928 57.6578 24.3812C56.8909 26.2053 58.3243 28.7753 59.493 29.2812C60.7622 29.8279 61.4835 28.6016 61.4835 28.6016V36.8024C63.2411 40.3433 66.3408 40.236 67.9934 40.0367C69.6506 39.8374 70.0113 37.9112 68.8015 36.3579L68.7878 33.8235C68.7878 33.8235 70.6595 34.1352 71.568 33.9717C73.0836 33.706 73.878 32.4235 74.3345 30.5841C75.0649 27.6308 75.3571 22.6593 74.3436 16.9213C72.6454 15.4497 66.7517 15.695 63.1863 18.2242C63.4511 23.3082 62.433 24.7388 61.8761 25.2753Z" fill="#FFA8A7"/>
|
||||
<path d="M74.6268 14.0192C74.8551 12.9565 74.9601 11.8579 74.9327 10.7645C74.9235 10.3302 74.8368 9.80901 74.4807 9.65062C74.1338 9.49733 73.764 9.78346 73.4536 10.0185C72.1388 11.0097 70.5044 11.2908 68.9203 11.3879C66.1903 11.5565 61.9949 11.3572 60.6025 14.7141C60.2145 15.6441 60.1506 16.6251 60.9129 17.2689C61.5658 17.8156 62.3966 18.066 63.191 18.2193C64.5742 18.4901 65.9484 18.8273 67.3408 19.0368C68.7605 19.2463 70.4131 19.4558 71.8101 18.9704C72.9833 18.5667 74.1703 18.2193 75.0468 17.1769C75.7955 16.2828 76.2338 15.0616 76.2429 13.8353C76.2429 13.6616 76.2064 13.4419 76.0557 13.401C75.9781 13.3806 75.9005 13.4163 75.8275 13.4521C75.4303 13.636 75.0285 13.8302 74.6268 14.0192Z" fill="#263238"/>
|
||||
<path d="M68.792 33.8186C68.792 33.8186 65.4001 33.0675 64.2177 32.3675C63.4233 31.8974 62.7705 31.085 62.5742 30.5587C62.5742 30.5587 62.7979 31.6828 63.5101 32.6945C64.3775 33.931 68.7966 34.8251 68.7966 34.8251L68.792 33.8186Z" fill="#F28F8F"/>
|
||||
<path d="M68.1066 24.0853C68.1066 24.5758 67.7688 24.9692 67.3488 24.9692C66.9288 24.9692 66.5864 24.5758 66.5864 24.0853C66.5864 23.5948 66.9243 23.2013 67.3443 23.2013C67.7642 23.2013 68.1066 23.5999 68.1066 24.0853Z" fill="#263238"/>
|
||||
<path d="M69.7321 29.9866C69.7321 30.4465 68.9336 29.9154 68.5409 29.9154C68.1438 29.9154 67.2446 30.4465 67.2446 29.9866C67.2446 29.5268 68.0935 29.1538 68.4861 29.1538C68.8833 29.1538 69.7321 29.5268 69.7321 29.9866Z" fill="#B16668"/>
|
||||
<path d="M67.1485 21.4028L65.5781 22.5115C65.3133 22.0057 65.4457 21.3466 65.8794 21.04C66.3176 20.7334 66.8837 20.8969 67.1485 21.4028Z" fill="#263238"/>
|
||||
<path d="M72.695 20.3195L74.3476 21.1473C74.1605 21.6684 73.6355 21.9086 73.1789 21.6838C72.7224 21.4487 72.5078 20.8407 72.695 20.3195Z" fill="#263238"/>
|
||||
<path d="M73.567 23.8299C73.567 24.2999 73.2383 24.6832 72.8366 24.6832C72.4303 24.6832 72.1016 24.2999 72.1016 23.8299C72.1016 23.3598 72.4303 22.9766 72.832 22.9766C73.2337 22.9766 73.5624 23.3598 73.567 23.8299Z" fill="#263238"/>
|
||||
<path d="M69.8335 22.3888L70.1028 28.0654L72.5087 27.3552L69.8335 22.3888Z" fill="#F28F8F"/>
|
||||
<path d="M27.1939 45.7906C27.9836 46.2658 31.2021 48.8002 32.9506 49.0199C33.6901 49.1118 33.891 48.979 33.8636 48.7644C33.8225 48.468 33.3569 48.0235 33.2427 47.7834C33.0464 47.3695 31.8686 45.6323 32.3251 44.7279C32.7817 43.8235 33.1788 44.6921 34.2653 45.8826C35.3564 47.0731 36.4658 47.4819 37.4199 48.8717C38.374 50.2615 38.6936 52.4535 40.2686 54.0374L46.564 58.8403C46.564 58.8403 49.4949 43.6191 50.7822 41.8257C52.1335 39.9403 58.0318 44.0483 56.7992 50.0418C55.5574 56.0301 52.759 66.4229 50.8142 68.4667C49.5588 69.79 46.9018 68.5382 43.5921 65.2426C40.9762 62.6418 37.3925 58.7177 35.8997 57.3433C34.4069 55.9739 31.2295 55.2126 29.7823 54.2571C28.2256 53.2301 27.8878 52.6374 27.2897 51.2834C26.7282 50.0111 26.9793 47.9724 26.646 47.2009C26.3128 46.4396 26.4041 45.3104 27.1939 45.7906Z" fill="#FFA8A7"/>
|
||||
<path d="M55.6576 37.8301C57.6708 39.2455 57.7758 41.2995 57.8763 43.6448C57.9676 45.8061 57.5795 48.7901 56.7258 51.7382C55.8721 54.6966 54.5117 60.0974 54.5117 60.0974C54.5117 60.0974 49.2435 60.2354 46.5317 57.6142C46.5317 57.6142 47.7689 51.7944 48.6409 47.4156C49.5174 43.0367 50.5765 38.3258 55.6576 37.8301Z" fill="#FFD666"/>
|
||||
<path d="M46.5596 58.8403C47.9976 59.7345 48.8376 61.6557 49.1024 62.417C49.1024 62.417 49.0567 59.7191 46.7057 58.0586L46.5596 58.8403Z" fill="#F28F8F"/>
|
||||
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#FAAD14"/>
|
||||
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#D48806"/>
|
||||
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#FAAD14"/>
|
||||
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#AD6800"/>
|
||||
<path d="M171.681 169.272L136.447 146.504L101.213 169.272L136.447 192.04L171.681 169.272Z" fill="url(#paint0_linear_2661_68499)"/>
|
||||
<path opacity="0.1" d="M136.447 192.04V189.644L104.92 169.272H101.213L136.447 192.04Z" fill="black"/>
|
||||
<path opacity="0.1" d="M136.447 146.504V148.901L167.969 169.272H171.681L136.447 146.504Z" fill="black"/>
|
||||
<path d="M171.681 169.272H167.969L136.447 189.644V192.04L171.681 169.272Z" fill="url(#paint1_linear_2661_68499)"/>
|
||||
<path d="M136.447 146.504V148.901L104.92 169.272H101.213L136.447 146.504Z" fill="url(#paint2_linear_2661_68499)"/>
|
||||
<path d="M136.57 159.406L151.708 169.19C152.841 169.921 152.841 171.111 151.708 171.842L140.419 179.138C139.286 179.869 137.451 179.869 136.314 179.138L121.176 169.354C120.044 168.623 120.044 167.433 121.176 166.702L132.466 159.406C133.603 158.675 135.438 158.675 136.57 159.406Z" fill="#D48806"/>
|
||||
<path d="M140.418 179.139L151.338 172.082L136.569 162.538C135.437 161.807 133.598 161.807 132.465 162.538L121.545 169.594L136.314 179.139C137.451 179.869 139.286 179.869 140.418 179.139Z" fill="url(#paint3_linear_2661_68499)"/>
|
||||
<path d="M127.43 169.288L134.055 165.006C134.274 164.863 134.625 164.863 134.844 165.006L135.662 165.527C135.881 165.665 135.881 165.895 135.662 166.038L129.037 170.32C128.818 170.463 128.467 170.463 128.248 170.32L127.43 169.793C127.211 169.655 127.211 169.431 127.43 169.288Z" fill="#263238"/>
|
||||
<path d="M137.324 175.69L143.948 171.408C144.167 171.265 144.518 171.265 144.737 171.408L145.555 171.929C145.774 172.067 145.774 172.297 145.555 172.44L138.93 176.722C138.711 176.865 138.36 176.865 138.141 176.722L137.324 176.195C137.104 176.057 137.104 175.833 137.324 175.69Z" fill="#263238"/>
|
||||
<path d="M121.135 185.843C121.135 184.417 120.24 182.685 119.14 181.975C118.587 181.617 118.09 181.586 117.729 181.821C117.656 181.867 116.939 182.353 116.866 182.399C116.505 182.634 116.282 183.129 116.282 183.84C116.282 185.265 117.177 186.997 118.277 187.708C118.829 188.065 119.327 188.096 119.687 187.861C119.76 187.815 120.473 187.335 120.546 187.283C120.911 187.054 121.135 186.558 121.135 185.843Z" fill="url(#paint4_linear_2661_68499)"/>
|
||||
<path d="M118.277 182.552C119.377 183.262 120.272 184.994 120.272 186.42C120.272 187.846 119.377 188.423 118.277 187.708C117.177 186.997 116.282 185.26 116.282 183.84C116.282 182.419 117.177 181.837 118.277 182.552Z" fill="url(#paint5_linear_2661_68499)"/>
|
||||
<path d="M88.7234 197.134C90.5176 198.294 92.8139 198.872 95.1147 198.872C97.411 198.872 99.7119 198.294 101.497 197.134L118.73 186.006C119.164 185.725 119.315 185.101 119.064 184.611C118.813 184.126 118.256 183.957 117.817 184.238L100.584 195.366C97.5662 197.318 92.6541 197.318 89.6365 195.366L80.6855 189.583L79.3175 188.699L77.8036 188.971L78.2497 190.366L79.4628 191.15L88.7234 197.134Z" fill="#263238"/>
|
||||
<path d="M62.437 177.315C62.437 179.139 63.4687 180.815 65.3496 182.031L74.8926 188.197L74.628 186.897L76.0714 186.601L66.2626 180.263C64.9753 179.43 64.2631 178.382 64.2631 177.315C64.2631 176.247 64.9707 175.199 66.2626 174.366L93.3434 156.866C96.9225 154.552 99.7301 149.115 99.7301 144.486V48.5651C99.7301 48.003 99.3193 47.5432 98.8171 47.5432C98.3149 47.5432 97.904 48.003 97.904 48.5651V144.486C97.904 148.323 95.3978 153.182 92.4304 155.098L65.3496 172.598C63.4733 173.809 62.437 175.485 62.437 177.315Z" fill="#263238"/>
|
||||
<path d="M54.1012 11.8839C54.0783 11.7409 54.1012 11.6029 54.1788 11.4803C54.2564 11.3525 54.3568 11.2759 54.4846 11.2504L56.7079 10.7701C56.8357 10.7445 56.959 10.7701 57.0685 10.8569C57.1827 10.9438 57.2511 11.0562 57.274 11.2044L57.6164 13.1971C57.6392 13.3401 57.6164 13.4781 57.5387 13.6007C57.4657 13.7285 57.3607 13.8051 57.2329 13.8307L55.0142 14.3058C54.8864 14.3314 54.7631 14.3058 54.6535 14.219C54.5394 14.1321 54.4709 14.0197 54.4481 13.8766L54.1012 11.8839ZM52.2477 1.1233C52.2249 0.980234 52.2477 0.842277 52.3253 0.719649C52.4029 0.591911 52.5033 0.515268 52.6312 0.48972L54.8544 0.00942637C54.9822 -0.0161212 55.1055 0.00942637 55.2151 0.0962881C55.3292 0.18315 55.3977 0.295559 55.4205 0.438625L56.8859 8.94596C56.9087 9.08903 56.8859 9.22699 56.8083 9.34962C56.7307 9.47735 56.6303 9.554 56.5024 9.57954L54.2792 10.0598C54.1514 10.0854 54.0281 10.0598 53.9185 9.97298C53.8044 9.88611 53.7359 9.7737 53.7131 9.63064L52.2477 1.1233Z" fill="#C9A063"/>
|
||||
<path d="M50.3925 20.2226C50.3058 20.1153 50.2647 19.9825 50.2692 19.8292C50.2784 19.6759 50.3286 19.5533 50.429 19.4562L52.1136 17.7649C52.214 17.6679 52.3281 17.6219 52.4651 17.6321C52.602 17.6423 52.7116 17.6985 52.7984 17.8109L54.0081 19.3233C54.0949 19.4358 54.136 19.5635 54.1268 19.7168C54.1177 19.8701 54.0675 19.9927 53.967 20.0898L52.2825 21.781C52.1866 21.8781 52.0679 21.9241 51.931 21.9139C51.794 21.9088 51.6844 21.8474 51.5977 21.735L50.3925 20.2226ZM43.8597 12.0576C43.773 11.9503 43.7319 11.8175 43.741 11.6642C43.7501 11.5109 43.8003 11.3883 43.9008 11.2912L45.5853 9.59994C45.6858 9.50286 45.7999 9.45687 45.9369 9.46709C46.0738 9.4722 46.1834 9.53351 46.2701 9.64592L51.4334 16.0992C51.5201 16.2065 51.5612 16.3394 51.5521 16.4927C51.5429 16.646 51.4927 16.7686 51.3923 16.8657L49.7077 18.5569C49.6118 18.654 49.4931 18.7 49.3562 18.6898C49.2192 18.6795 49.1097 18.6233 49.0229 18.5109L43.8597 12.0576Z" fill="url(#paint6_linear_2661_68499)"/>
|
||||
<path d="M164.632 191.381C164.266 191.616 163.796 191.734 163.331 191.734C162.865 191.734 162.395 191.611 162.03 191.391L153.945 186.164L154.173 185.72L162.258 190.947C162.842 191.325 163.824 191.325 164.403 190.947L185.439 177.352L185.247 177.715L185.698 177.767L164.632 191.381Z" fill="#FAAD14"/>
|
||||
<path d="M207.371 163.167C207.371 163.55 207.157 163.902 206.764 164.153L186.835 177.123V176.827H186.57L206.536 163.718C206.778 163.56 206.915 163.366 206.915 163.172C206.915 162.978 206.773 162.778 206.536 162.625L196.602 156.207L196.83 155.763L206.764 162.18C207.157 162.431 207.371 162.783 207.371 163.167Z" fill="#FAAD14"/>
|
||||
<path d="M185.776 176.53V176.827L185.512 176.53H185.776Z" fill="#FAAD14"/>
|
||||
<path d="M185.247 176.827L185.433 176.787L185.337 177.056L185.247 176.827Z" fill="#FAAD14"/>
|
||||
<path d="M185.776 177.123L185.636 177.056L185.512 177.123H185.776Z" fill="#FAAD14"/>
|
||||
<path d="M186.835 177.715V178.011L186.57 177.715H186.835Z" fill="#FAAD14"/>
|
||||
<path d="M186.305 178.011L186.492 177.972L186.395 178.241L186.305 178.011Z" fill="#FAAD14"/>
|
||||
<path d="M186.835 178.308L186.694 178.241L186.57 178.308H186.835Z" fill="#FAAD14"/>
|
||||
<path d="M164.633 196.174C164.267 196.409 163.797 196.527 163.332 196.527C162.866 196.527 162.396 196.409 162.031 196.184L150.234 188.561L150.462 188.116L162.259 195.74C162.843 196.118 163.825 196.113 164.404 195.74L188.687 180.047L188.899 180.492L164.633 196.174Z" fill="#FAAD14"/>
|
||||
<path d="M214.791 163.167C214.791 163.55 214.576 163.902 214.183 164.153L189.408 180.163L189.18 179.729L213.955 163.719C214.197 163.56 214.334 163.366 214.334 163.172C214.334 162.978 214.192 162.778 213.955 162.625L200.305 153.806L200.533 153.362L214.183 162.181C214.576 162.431 214.791 162.783 214.791 163.167Z" fill="#FAAD14"/>
|
||||
<path d="M190.011 180.381L189.555 180.492L190.011 180.677V180.381Z" fill="#FAAD14"/>
|
||||
<path d="M189.253 180.492L189.746 180.973L189.408 181.27L189.253 180.492Z" fill="#FAAD14"/>
|
||||
<path d="M188.952 181.27V180.677L188.687 180.973L188.952 181.27Z" fill="#FAAD14"/>
|
||||
<path d="M189.18 179.196L188.952 179.789L188.687 179.196H189.18Z" fill="#FAAD14"/>
|
||||
<path d="M188.423 179.492L188.687 179.789H188.423V179.492Z" fill="#FAAD14"/>
|
||||
<path d="M163.331 201.319C163.797 201.319 164.267 201.202 164.632 200.967L221.601 164.153C221.994 163.902 222.208 163.55 222.208 163.167C222.208 162.783 221.994 162.431 221.601 162.18L204.244 150.965L204.016 151.41L221.373 162.62C221.61 162.773 221.752 162.972 221.752 163.167C221.752 163.356 221.615 163.555 221.373 163.713L164.404 200.527C163.824 200.905 162.843 200.905 162.258 200.527L146.755 190.508L146.527 190.952L162.03 200.972C162.395 201.202 162.865 201.319 163.331 201.319Z" fill="#FAAD14"/>
|
||||
<path d="M222.675 132.009L193.006 151.179L163.332 132.009L193.006 112.838L222.675 132.009Z" fill="#FFF1B8"/>
|
||||
<path d="M193.006 151.179V160.019C193.718 160.019 194.43 159.845 194.978 159.493H194.982L207.838 151.185L221.488 142.36C222.145 141.936 222.675 140.909 222.675 140.061V132.009L193.823 150.653L193.006 151.179Z" fill="#D48806"/>
|
||||
<path d="M163.332 132.009V140.061C163.332 140.909 163.866 141.936 164.519 142.36L176.315 149.984L191.029 159.493C191.576 159.845 192.289 160.019 193.005 160.019V151.179L192.083 150.587L163.332 132.009Z" fill="#D48806"/>
|
||||
<path d="M220.82 135.856V136.944C220.82 137.088 220.734 137.256 220.624 137.328L220.4 137.471C220.291 137.542 220.204 137.486 220.204 137.343V136.255C220.204 136.112 220.291 135.943 220.4 135.871L220.624 135.728C220.729 135.662 220.82 135.718 220.82 135.856Z" fill="#D48806"/>
|
||||
<path d="M219.82 136.505V137.593C219.82 137.736 219.734 137.905 219.624 137.976L219.4 138.119C219.291 138.191 219.204 138.135 219.204 137.992V136.903C219.204 136.76 219.291 136.592 219.4 136.52L219.624 136.377C219.729 136.306 219.82 136.362 219.82 136.505Z" fill="#D48806"/>
|
||||
<path d="M218.82 137.149V138.237C218.82 138.38 218.733 138.549 218.624 138.62L218.4 138.763C218.29 138.835 218.204 138.779 218.204 138.636V137.547C218.204 137.404 218.29 137.236 218.4 137.164L218.624 137.021C218.733 136.949 218.82 137.006 218.82 137.149Z" fill="#D48806"/>
|
||||
<path d="M217.82 137.793V138.881C217.82 139.024 217.734 139.193 217.624 139.264L217.4 139.407C217.291 139.479 217.204 139.423 217.204 139.279V138.191C217.204 138.048 217.291 137.879 217.4 137.808L217.624 137.665C217.734 137.593 217.82 137.65 217.82 137.793Z" fill="#D48806"/>
|
||||
<path d="M216.822 138.436V139.525C216.822 139.668 216.735 139.837 216.625 139.908L216.402 140.051C216.292 140.123 216.205 140.066 216.205 139.923V138.835C216.205 138.692 216.292 138.523 216.402 138.452L216.625 138.309C216.735 138.237 216.822 138.293 216.822 138.436Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 139.08V140.169C215.822 140.312 215.735 140.48 215.625 140.552L215.402 140.695C215.292 140.766 215.205 140.71 215.205 140.567V139.479C215.205 139.336 215.292 139.167 215.402 139.096L215.625 138.953C215.735 138.881 215.822 138.942 215.822 139.08Z" fill="#D48806"/>
|
||||
<path d="M214.826 139.724V140.812C214.826 140.955 214.739 141.124 214.629 141.196L214.406 141.339C214.296 141.41 214.209 141.354 214.209 141.211V140.123C214.209 139.979 214.296 139.811 214.406 139.739L214.629 139.596C214.734 139.53 214.826 139.586 214.826 139.724Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 140.373V141.461C213.826 141.604 213.739 141.773 213.629 141.845L213.406 141.988C213.296 142.059 213.209 142.003 213.209 141.86V140.772C213.209 140.628 213.296 140.46 213.406 140.388L213.629 140.245C213.734 140.174 213.826 140.23 213.826 140.373Z" fill="#FFF1B8"/>
|
||||
<path d="M212.827 141.017V142.105C212.827 142.248 212.74 142.417 212.63 142.488L212.407 142.631C212.297 142.703 212.21 142.647 212.21 142.503V141.415C212.21 141.272 212.297 141.103 212.407 141.032L212.63 140.889C212.74 140.817 212.827 140.874 212.827 141.017Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 141.66V142.749C211.827 142.892 211.74 143.06 211.63 143.132L211.407 143.275C211.297 143.347 211.21 143.29 211.21 143.147V142.059C211.21 141.916 211.297 141.747 211.407 141.676L211.63 141.533C211.74 141.461 211.827 141.517 211.827 141.66Z" fill="#D48806"/>
|
||||
<path d="M210.827 142.304V143.393C210.827 143.536 210.74 143.704 210.631 143.776L210.407 143.919C210.298 143.99 210.211 143.934 210.211 143.791V142.703C210.211 142.56 210.298 142.391 210.407 142.32L210.631 142.177C210.74 142.105 210.827 142.161 210.827 142.304Z" fill="#D48806"/>
|
||||
<path d="M209.828 142.948V144.037C209.828 144.18 209.741 144.348 209.631 144.42L209.408 144.563C209.298 144.634 209.211 144.578 209.211 144.435V143.347C209.211 143.204 209.298 143.035 209.408 142.964L209.631 142.82C209.741 142.749 209.828 142.805 209.828 142.948Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 143.592V144.68C208.832 144.823 208.745 144.992 208.636 145.064L208.412 145.207C208.302 145.278 208.216 145.222 208.216 145.079V143.991C208.216 143.848 208.302 143.679 208.412 143.607L208.636 143.464C208.741 143.393 208.832 143.454 208.832 143.592Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 144.236V145.324C207.833 145.467 207.746 145.636 207.636 145.707L207.413 145.85C207.303 145.922 207.216 145.866 207.216 145.723V144.634C207.216 144.491 207.303 144.323 207.413 144.251L207.636 144.108C207.741 144.042 207.833 144.098 207.833 144.236Z" fill="#D48806"/>
|
||||
<path d="M206.833 144.885V145.973C206.833 146.116 206.746 146.285 206.636 146.356L206.413 146.499C206.303 146.571 206.216 146.515 206.216 146.372V145.283C206.216 145.14 206.303 144.972 206.413 144.9L206.636 144.757C206.746 144.685 206.833 144.742 206.833 144.885Z" fill="#D48806"/>
|
||||
<path d="M205.833 145.528V146.617C205.833 146.76 205.746 146.928 205.637 147L205.413 147.143C205.303 147.214 205.217 147.158 205.217 147.015V145.927C205.217 145.784 205.303 145.615 205.413 145.544L205.637 145.401C205.746 145.329 205.833 145.385 205.833 145.528Z" fill="#D48806"/>
|
||||
<path d="M204.833 146.172V147.261C204.833 147.404 204.747 147.572 204.637 147.644L204.413 147.787C204.304 147.859 204.217 147.802 204.217 147.659V146.571C204.217 146.428 204.304 146.259 204.413 146.188L204.637 146.045C204.747 145.973 204.833 146.029 204.833 146.172Z" fill="#D48806"/>
|
||||
<path d="M220.82 139.08V140.169C220.82 140.312 220.734 140.48 220.624 140.552L220.4 140.695C220.291 140.766 220.204 140.71 220.204 140.567V139.479C220.204 139.336 220.291 139.167 220.4 139.096L220.624 138.953C220.729 138.881 220.82 138.942 220.82 139.08Z" fill="#D48806"/>
|
||||
<path d="M219.82 139.724V140.812C219.82 140.955 219.734 141.124 219.624 141.196L219.4 141.339C219.291 141.41 219.204 141.354 219.204 141.211V140.123C219.204 139.979 219.291 139.811 219.4 139.739L219.624 139.596C219.729 139.53 219.82 139.586 219.82 139.724Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 140.373V141.461C218.82 141.604 218.733 141.773 218.624 141.845L218.4 141.988C218.29 142.059 218.204 142.003 218.204 141.86V140.772C218.204 140.628 218.29 140.46 218.4 140.388L218.624 140.245C218.733 140.174 218.82 140.23 218.82 140.373Z" fill="#D48806"/>
|
||||
<path d="M217.82 141.017V142.105C217.82 142.248 217.734 142.417 217.624 142.488L217.4 142.631C217.291 142.703 217.204 142.647 217.204 142.504V141.415C217.204 141.272 217.291 141.104 217.4 141.032L217.624 140.889C217.734 140.818 217.82 140.874 217.82 141.017Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 141.661V142.749C216.822 142.892 216.735 143.061 216.625 143.132L216.402 143.275C216.292 143.347 216.205 143.291 216.205 143.148V142.059C216.205 141.916 216.292 141.748 216.402 141.676L216.625 141.533C216.735 141.461 216.822 141.518 216.822 141.661Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 142.304V143.393C215.822 143.536 215.735 143.704 215.625 143.776L215.402 143.919C215.292 143.99 215.205 143.934 215.205 143.791V142.703C215.205 142.56 215.292 142.391 215.402 142.32L215.625 142.177C215.735 142.105 215.822 142.161 215.822 142.304Z" fill="#D48806"/>
|
||||
<path d="M214.826 142.948V144.037C214.826 144.18 214.739 144.348 214.629 144.42L214.406 144.563C214.296 144.634 214.209 144.578 214.209 144.435V143.347C214.209 143.204 214.296 143.035 214.406 142.964L214.629 142.82C214.734 142.749 214.826 142.805 214.826 142.948Z" fill="#D48806"/>
|
||||
<path d="M213.826 143.592V144.68C213.826 144.823 213.739 144.992 213.629 145.064L213.406 145.207C213.296 145.278 213.209 145.222 213.209 145.079V143.991C213.209 143.848 213.296 143.679 213.406 143.607L213.629 143.464C213.734 143.393 213.826 143.454 213.826 143.592Z" fill="#D48806"/>
|
||||
<path d="M212.827 144.236V145.324C212.827 145.467 212.74 145.636 212.63 145.707L212.407 145.85C212.297 145.922 212.21 145.866 212.21 145.723V144.634C212.21 144.491 212.297 144.323 212.407 144.251L212.63 144.108C212.74 144.042 212.827 144.098 212.827 144.236Z" fill="#D48806"/>
|
||||
<path d="M211.827 144.885V145.973C211.827 146.116 211.74 146.285 211.63 146.356L211.407 146.499C211.297 146.571 211.21 146.515 211.21 146.372V145.283C211.21 145.14 211.297 144.972 211.407 144.9L211.63 144.757C211.74 144.685 211.827 144.742 211.827 144.885Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 145.529V146.617C210.827 146.76 210.74 146.929 210.631 147L210.407 147.143C210.298 147.215 210.211 147.159 210.211 147.015V145.927C210.211 145.784 210.298 145.615 210.407 145.544L210.631 145.401C210.74 145.329 210.827 145.386 210.827 145.529Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 146.172V147.261C209.828 147.404 209.741 147.572 209.631 147.644L209.408 147.787C209.298 147.859 209.211 147.802 209.211 147.659V146.571C209.211 146.428 209.298 146.259 209.408 146.188L209.631 146.045C209.741 145.973 209.828 146.029 209.828 146.172Z" fill="#D48806"/>
|
||||
<path d="M208.832 146.816V147.904C208.832 148.047 208.745 148.216 208.636 148.288L208.412 148.431C208.302 148.502 208.216 148.446 208.216 148.303V147.215C208.216 147.072 208.302 146.903 208.412 146.831L208.636 146.688C208.741 146.617 208.832 146.673 208.832 146.816Z" fill="#D48806"/>
|
||||
<path d="M207.833 147.46V148.548C207.833 148.691 207.746 148.86 207.636 148.931L207.413 149.074C207.303 149.146 207.216 149.09 207.216 148.947V147.858C207.216 147.715 207.303 147.547 207.413 147.475L207.636 147.332C207.741 147.261 207.833 147.322 207.833 147.46Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 148.104V149.192C206.833 149.335 206.746 149.504 206.636 149.575L206.413 149.718C206.303 149.79 206.216 149.734 206.216 149.591V148.502C206.216 148.359 206.303 148.191 206.413 148.119L206.636 147.976C206.746 147.91 206.833 147.966 206.833 148.104Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 148.747V149.836C205.833 149.979 205.746 150.147 205.637 150.219L205.413 150.362C205.303 150.434 205.217 150.377 205.217 150.234V149.146C205.217 149.003 205.303 148.834 205.413 148.763L205.637 148.62C205.746 148.553 205.833 148.609 205.833 148.747Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 149.396V150.485C204.833 150.628 204.747 150.796 204.637 150.868L204.413 151.011C204.304 151.082 204.217 151.026 204.217 150.883V149.795C204.217 149.652 204.304 149.483 204.413 149.412L204.637 149.268C204.747 149.197 204.833 149.253 204.833 149.396Z" fill="#FFF1B8"/>
|
||||
<path d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#874D00"/>
|
||||
<path d="M200.871 149.902C200.396 150.209 200.012 150.955 200.012 151.568C200.012 152.181 200.396 152.431 200.871 152.125C201.345 151.818 201.729 151.072 201.729 150.459C201.734 149.846 201.345 149.595 200.871 149.902Z" fill="#D48806"/>
|
||||
<path d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#874D00"/>
|
||||
<path d="M197.147 152.314C196.672 152.62 196.289 153.366 196.289 153.979C196.289 154.592 196.672 154.843 197.147 154.536C197.622 154.23 198.005 153.484 198.005 152.871C198.005 152.252 197.617 152.007 197.147 152.314Z" fill="#D48806"/>
|
||||
<path d="M222.675 117.63L193.006 136.801L163.332 117.63L193.006 98.4543L222.675 117.63Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 127.216L193.006 146.387V136.801L222.675 117.63V127.216Z" fill="#D48806"/>
|
||||
<path d="M193.005 146.387L163.332 127.216V117.63L193.005 136.801V146.387Z" fill="#D48806"/>
|
||||
<path d="M218.962 132.008V129.612L193.005 146.387V148.783L218.962 132.008Z" fill="#D48806"/>
|
||||
<path d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#874D00"/>
|
||||
<path d="M220.82 121.478V122.566C220.82 122.709 220.734 122.878 220.624 122.95L220.4 123.093C220.291 123.164 220.204 123.108 220.204 122.965V121.877C220.204 121.733 220.291 121.565 220.4 121.493L220.619 121.35C220.729 121.279 220.82 121.34 220.82 121.478Z" fill="#FFF1B8"/>
|
||||
<path d="M219.82 122.122V123.21C219.82 123.353 219.734 123.522 219.624 123.593L219.4 123.736C219.291 123.808 219.204 123.752 219.204 123.609V122.52C219.204 122.377 219.291 122.209 219.4 122.137L219.624 121.994C219.729 121.927 219.82 121.984 219.82 122.122Z" fill="#D48806"/>
|
||||
<path d="M218.82 122.771V123.859C218.82 124.002 218.733 124.171 218.624 124.242L218.4 124.385C218.29 124.457 218.204 124.401 218.204 124.258V123.169C218.204 123.026 218.29 122.858 218.4 122.786L218.624 122.643C218.733 122.571 218.82 122.628 218.82 122.771Z" fill="#D48806"/>
|
||||
<path d="M217.82 123.415V124.503C217.82 124.646 217.734 124.815 217.624 124.886L217.4 125.029C217.291 125.101 217.204 125.045 217.204 124.901V123.813C217.204 123.67 217.291 123.501 217.4 123.43L217.624 123.287C217.734 123.215 217.82 123.272 217.82 123.415Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 124.058V125.147C216.822 125.29 216.735 125.458 216.625 125.53L216.402 125.673C216.292 125.745 216.205 125.688 216.205 125.545V124.457C216.205 124.314 216.292 124.145 216.402 124.074L216.625 123.931C216.735 123.859 216.822 123.915 216.822 124.058Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 124.702V125.79C215.822 125.933 215.735 126.102 215.625 126.174L215.402 126.317C215.292 126.388 215.205 126.332 215.205 126.189V125.101C215.205 124.957 215.292 124.789 215.402 124.717L215.625 124.574C215.735 124.503 215.822 124.559 215.822 124.702Z" fill="#D48806"/>
|
||||
<path d="M214.826 125.346V126.434C214.826 126.577 214.739 126.746 214.629 126.817L214.406 126.96C214.296 127.032 214.209 126.976 214.209 126.833V125.744C214.209 125.601 214.296 125.433 214.406 125.361L214.629 125.218C214.734 125.147 214.826 125.208 214.826 125.346Z" fill="#D48806"/>
|
||||
<path d="M213.826 125.99V127.078C213.826 127.221 213.739 127.39 213.629 127.461L213.406 127.604C213.296 127.676 213.209 127.62 213.209 127.477V126.388C213.209 126.245 213.296 126.077 213.406 126.005L213.629 125.862C213.734 125.796 213.826 125.852 213.826 125.99Z" fill="#D48806"/>
|
||||
<path d="M212.827 126.633V127.722C212.827 127.865 212.74 128.033 212.63 128.105L212.407 128.248C212.297 128.32 212.21 128.263 212.21 128.12V127.032C212.21 126.889 212.297 126.72 212.407 126.649L212.63 126.506C212.74 126.439 212.827 126.495 212.827 126.633Z" fill="#D48806"/>
|
||||
<path d="M211.827 127.282V128.371C211.827 128.514 211.74 128.682 211.63 128.754L211.407 128.897C211.297 128.969 211.21 128.912 211.21 128.769V127.681C211.21 127.538 211.297 127.369 211.407 127.298L211.63 127.155C211.74 127.083 211.827 127.139 211.827 127.282Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 127.926V129.015C210.827 129.158 210.74 129.326 210.631 129.398L210.407 129.541C210.298 129.612 210.211 129.556 210.211 129.413V128.325C210.211 128.182 210.298 128.013 210.407 127.942L210.631 127.799C210.74 127.727 210.827 127.783 210.827 127.926Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 128.57V129.658C209.828 129.802 209.741 129.97 209.631 130.042L209.408 130.185C209.298 130.256 209.211 130.2 209.211 130.057V128.969C209.211 128.826 209.298 128.657 209.408 128.585L209.631 128.442C209.741 128.371 209.828 128.427 209.828 128.57Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 129.214V130.302C208.832 130.445 208.745 130.614 208.636 130.685L208.412 130.828C208.302 130.9 208.216 130.844 208.216 130.701V129.612C208.216 129.469 208.302 129.301 208.412 129.229L208.636 129.086C208.741 129.014 208.832 129.071 208.832 129.214Z" fill="#D48806"/>
|
||||
<path d="M207.833 129.858V130.946C207.833 131.089 207.746 131.258 207.636 131.329L207.413 131.472C207.303 131.544 207.216 131.488 207.216 131.344V130.256C207.216 130.113 207.303 129.944 207.413 129.873L207.636 129.73C207.741 129.658 207.833 129.72 207.833 129.858Z" fill="#D48806"/>
|
||||
<path d="M206.833 130.502V131.59C206.833 131.733 206.746 131.902 206.636 131.973L206.413 132.116C206.303 132.188 206.216 132.131 206.216 131.988V130.9C206.216 130.757 206.303 130.588 206.413 130.517L206.636 130.374C206.746 130.307 206.833 130.364 206.833 130.502Z" fill="#D48806"/>
|
||||
<path d="M205.833 131.15V132.239C205.833 132.382 205.746 132.55 205.637 132.622L205.413 132.765C205.303 132.836 205.217 132.78 205.217 132.637V131.549C205.217 131.406 205.303 131.237 205.413 131.166L205.637 131.023C205.746 130.951 205.833 131.007 205.833 131.15Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 131.794V132.882C204.833 133.025 204.747 133.194 204.637 133.265L204.413 133.408C204.304 133.48 204.217 133.424 204.217 133.281V132.192C204.217 132.049 204.304 131.881 204.413 131.809L204.637 131.666C204.747 131.595 204.833 131.651 204.833 131.794Z" fill="#D48806"/>
|
||||
<path d="M220.82 124.702V125.79C220.82 125.933 220.734 126.102 220.624 126.173L220.4 126.316C220.291 126.388 220.204 126.332 220.204 126.189V125.1C220.204 124.957 220.291 124.789 220.4 124.717L220.624 124.574C220.729 124.503 220.82 124.559 220.82 124.702Z" fill="#D48806"/>
|
||||
<path d="M219.82 125.346V126.434C219.82 126.577 219.734 126.746 219.624 126.817L219.4 126.96C219.291 127.032 219.204 126.976 219.204 126.832V125.744C219.204 125.601 219.291 125.432 219.4 125.361L219.624 125.218C219.729 125.146 219.82 125.208 219.82 125.346Z" fill="#D48806"/>
|
||||
<path d="M218.82 125.99V127.078C218.82 127.221 218.733 127.39 218.624 127.461L218.4 127.604C218.29 127.676 218.204 127.619 218.204 127.476V126.388C218.204 126.245 218.29 126.076 218.4 126.005L218.624 125.862C218.733 125.795 218.82 125.852 218.82 125.99Z" fill="#D48806"/>
|
||||
<path d="M217.82 126.633V127.721C217.82 127.865 217.734 128.033 217.624 128.105L217.4 128.248C217.291 128.319 217.204 128.263 217.204 128.12V127.032C217.204 126.889 217.291 126.72 217.4 126.648L217.624 126.505C217.734 126.439 217.82 126.495 217.82 126.633Z" fill="#D48806"/>
|
||||
<path d="M216.822 127.282V128.37C216.822 128.513 216.735 128.682 216.625 128.753L216.402 128.896C216.292 128.968 216.205 128.912 216.205 128.769V127.68C216.205 127.537 216.292 127.369 216.402 127.297L216.625 127.154C216.735 127.083 216.822 127.139 216.822 127.282Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 127.926V129.014C215.822 129.157 215.735 129.326 215.625 129.398L215.402 129.541C215.292 129.612 215.205 129.556 215.205 129.413V128.325C215.205 128.182 215.292 128.013 215.402 127.941L215.625 127.798C215.735 127.727 215.822 127.783 215.822 127.926Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 128.57V129.658C214.826 129.801 214.739 129.97 214.629 130.041L214.406 130.184C214.296 130.256 214.209 130.2 214.209 130.056V128.968C214.209 128.825 214.296 128.656 214.406 128.585L214.629 128.442C214.734 128.37 214.826 128.427 214.826 128.57Z" fill="#D48806"/>
|
||||
<path d="M213.826 129.214V130.302C213.826 130.445 213.739 130.614 213.629 130.685L213.406 130.828C213.296 130.9 213.209 130.843 213.209 130.7V129.612C213.209 129.469 213.296 129.3 213.406 129.229L213.629 129.086C213.734 129.014 213.826 129.07 213.826 129.214Z" fill="#D48806"/>
|
||||
<path d="M212.827 129.857V130.946C212.827 131.089 212.74 131.257 212.63 131.329L212.407 131.472C212.297 131.543 212.21 131.487 212.21 131.344V130.256C212.21 130.113 212.297 129.944 212.407 129.873L212.63 129.73C212.74 129.658 212.827 129.719 212.827 129.857Z" fill="#D48806"/>
|
||||
<path d="M211.827 130.501V131.589C211.827 131.732 211.74 131.901 211.63 131.973L211.407 132.116C211.297 132.187 211.21 132.131 211.21 131.988V130.9C211.21 130.756 211.297 130.588 211.407 130.516L211.63 130.373C211.74 130.307 211.827 130.363 211.827 130.501Z" fill="#D48806"/>
|
||||
<path d="M210.827 131.15V132.238C210.827 132.381 210.74 132.55 210.631 132.622L210.407 132.765C210.298 132.836 210.211 132.78 210.211 132.637V131.549C210.211 131.406 210.298 131.237 210.407 131.165L210.631 131.022C210.74 130.951 210.827 131.007 210.827 131.15Z" fill="#D48806"/>
|
||||
<path d="M209.828 131.794V132.882C209.828 133.025 209.741 133.194 209.631 133.265L209.408 133.408C209.298 133.48 209.211 133.424 209.211 133.28V132.192C209.211 132.049 209.298 131.88 209.408 131.809L209.631 131.666C209.741 131.594 209.828 131.651 209.828 131.794Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 132.438V133.526C208.832 133.669 208.745 133.838 208.636 133.909L208.412 134.052C208.302 134.124 208.216 134.068 208.216 133.925V132.836C208.216 132.693 208.302 132.525 208.412 132.453L208.636 132.31C208.741 132.238 208.832 132.295 208.832 132.438Z" fill="#D48806"/>
|
||||
<path d="M207.833 133.081V134.17C207.833 134.313 207.746 134.481 207.636 134.553L207.413 134.696C207.303 134.767 207.216 134.711 207.216 134.568V133.48C207.216 133.337 207.303 133.168 207.413 133.097L207.636 132.954C207.741 132.882 207.833 132.938 207.833 133.081Z" fill="#D48806"/>
|
||||
<path d="M206.833 133.725V134.814C206.833 134.957 206.746 135.125 206.636 135.197L206.413 135.34C206.303 135.411 206.216 135.355 206.216 135.212V134.124C206.216 133.981 206.303 133.812 206.413 133.741L206.636 133.597C206.746 133.526 206.833 133.587 206.833 133.725Z" fill="#D48806"/>
|
||||
<path d="M205.833 134.369V135.457C205.833 135.601 205.746 135.769 205.637 135.841L205.413 135.984C205.303 136.055 205.217 135.999 205.217 135.856V134.768C205.217 134.625 205.303 134.456 205.413 134.384L205.637 134.241C205.746 134.175 205.833 134.231 205.833 134.369Z" fill="#D48806"/>
|
||||
<path d="M204.833 135.013V136.101C204.833 136.244 204.747 136.413 204.637 136.484L204.413 136.627C204.304 136.699 204.217 136.643 204.217 136.5V135.411C204.217 135.268 204.304 135.1 204.413 135.028L204.637 134.885C204.747 134.819 204.833 134.875 204.833 135.013Z" fill="#D48806"/>
|
||||
<path d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#874D00"/>
|
||||
<path d="M200.871 135.524C200.396 135.831 200.012 136.577 200.012 137.19C200.012 137.803 200.396 138.053 200.871 137.747C201.345 137.44 201.729 136.694 201.729 136.081C201.734 135.468 201.345 135.218 200.871 135.524Z" fill="#D48806"/>
|
||||
<path d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#874D00"/>
|
||||
<path d="M197.147 137.935C196.672 138.242 196.289 138.988 196.289 139.601C196.289 140.214 196.672 140.465 197.147 140.158C197.622 139.852 198.005 139.106 198.005 138.492C198.005 137.874 197.617 137.629 197.147 137.935Z" fill="#D48806"/>
|
||||
<path d="M222.675 103.247L193.006 122.423L163.332 103.247L193.006 84.0766L222.675 103.247Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 112.838L193.006 132.009V122.423L222.675 103.247V112.838Z" fill="#D48806"/>
|
||||
<path d="M193.005 132.009L163.332 112.838V103.248L193.005 122.424V132.009Z" fill="#D48806"/>
|
||||
<path d="M218.962 117.631V115.234L193.005 132.009V134.405L218.962 117.631Z" fill="#D48806"/>
|
||||
<path d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#874D00"/>
|
||||
<path d="M220.82 107.1V108.189C220.82 108.332 220.734 108.5 220.624 108.572L220.4 108.715C220.291 108.786 220.204 108.73 220.204 108.587V107.499C220.204 107.356 220.291 107.187 220.4 107.116L220.624 106.973C220.729 106.901 220.82 106.957 220.82 107.1Z" fill="#D48806"/>
|
||||
<path d="M219.82 107.744V108.832C219.82 108.975 219.734 109.144 219.624 109.216L219.4 109.359C219.291 109.43 219.204 109.374 219.204 109.231V108.143C219.204 108 219.291 107.831 219.4 107.759L219.624 107.616C219.729 107.545 219.82 107.606 219.82 107.744Z" fill="#D48806"/>
|
||||
<path d="M218.82 108.388V109.476C218.82 109.619 218.733 109.788 218.624 109.859L218.4 110.003C218.29 110.074 218.204 110.018 218.204 109.875V108.786C218.204 108.643 218.29 108.475 218.4 108.403L218.624 108.26C218.733 108.189 218.82 108.25 218.82 108.388Z" fill="#D48806"/>
|
||||
<path d="M217.82 109.032V110.12C217.82 110.263 217.734 110.432 217.624 110.503L217.4 110.646C217.291 110.718 217.204 110.662 217.204 110.518V109.43C217.204 109.287 217.291 109.118 217.4 109.047L217.624 108.904C217.734 108.837 217.82 108.894 217.82 109.032Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 109.68V110.769C216.822 110.912 216.735 111.08 216.625 111.152L216.402 111.295C216.292 111.367 216.205 111.31 216.205 111.167V110.079C216.205 109.936 216.292 109.767 216.402 109.696L216.625 109.553C216.735 109.481 216.822 109.537 216.822 109.68Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 110.325V111.413C215.822 111.556 215.735 111.725 215.625 111.796L215.402 111.939C215.292 112.011 215.205 111.954 215.205 111.811V110.723C215.205 110.58 215.292 110.411 215.402 110.34L215.625 110.197C215.735 110.125 215.822 110.181 215.822 110.325Z" fill="#D48806"/>
|
||||
<path d="M214.826 110.968V112.056C214.826 112.2 214.739 112.368 214.629 112.44L214.406 112.583C214.296 112.654 214.209 112.598 214.209 112.455V111.367C214.209 111.224 214.296 111.055 214.406 110.983L214.629 110.84C214.734 110.769 214.826 110.825 214.826 110.968Z" fill="#D48806"/>
|
||||
<path d="M213.826 111.612V112.7C213.826 112.843 213.739 113.012 213.629 113.084L213.406 113.227C213.296 113.298 213.209 113.242 213.209 113.099V112.011C213.209 111.867 213.296 111.699 213.406 111.627L213.629 111.484C213.734 111.413 213.826 111.469 213.826 111.612Z" fill="#D48806"/>
|
||||
<path d="M212.827 112.256V113.344C212.827 113.487 212.74 113.656 212.63 113.727L212.407 113.87C212.297 113.942 212.21 113.886 212.21 113.743V112.654C212.21 112.511 212.297 112.343 212.407 112.271L212.63 112.128C212.74 112.057 212.827 112.118 212.827 112.256Z" fill="#D48806"/>
|
||||
<path d="M211.827 112.899V113.988C211.827 114.131 211.74 114.299 211.63 114.371L211.407 114.514C211.297 114.586 211.21 114.529 211.21 114.386V113.298C211.21 113.155 211.297 112.986 211.407 112.915L211.63 112.772C211.74 112.705 211.827 112.762 211.827 112.899Z" fill="#D48806"/>
|
||||
<path d="M210.827 113.549V114.637C210.827 114.78 210.74 114.949 210.631 115.02L210.407 115.163C210.298 115.235 210.211 115.178 210.211 115.035V113.947C210.211 113.804 210.298 113.635 210.407 113.564L210.631 113.421C210.74 113.349 210.827 113.405 210.827 113.549Z" fill="#D48806"/>
|
||||
<path d="M209.828 114.192V115.28C209.828 115.423 209.741 115.592 209.631 115.664L209.408 115.807C209.298 115.878 209.211 115.822 209.211 115.679V114.591C209.211 114.448 209.298 114.279 209.408 114.207L209.631 114.064C209.741 113.993 209.828 114.049 209.828 114.192Z" fill="#D48806"/>
|
||||
<path d="M208.832 114.836V115.925C208.832 116.068 208.745 116.236 208.636 116.308L208.412 116.451C208.302 116.522 208.216 116.466 208.216 116.323V115.235C208.216 115.092 208.302 114.923 208.412 114.852L208.636 114.709C208.741 114.637 208.832 114.693 208.832 114.836Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 115.48V116.568C207.833 116.711 207.746 116.88 207.636 116.951L207.413 117.094C207.303 117.166 207.216 117.11 207.216 116.967V115.878C207.216 115.735 207.303 115.567 207.413 115.495L207.636 115.352C207.741 115.281 207.833 115.337 207.833 115.48Z" fill="#D48806"/>
|
||||
<path d="M206.833 116.124V117.212C206.833 117.355 206.746 117.524 206.636 117.595L206.413 117.738C206.303 117.81 206.216 117.754 206.216 117.611V116.522C206.216 116.379 206.303 116.211 206.413 116.139L206.636 115.996C206.746 115.924 206.833 115.986 206.833 116.124Z" fill="#D48806"/>
|
||||
<path d="M205.833 116.768V117.856C205.833 117.999 205.746 118.168 205.637 118.239L205.413 118.382C205.303 118.454 205.217 118.397 205.217 118.254V117.166C205.217 117.023 205.303 116.854 205.413 116.783L205.637 116.64C205.746 116.568 205.833 116.63 205.833 116.768Z" fill="#D48806"/>
|
||||
<path d="M204.833 117.411V118.5C204.833 118.643 204.747 118.811 204.637 118.883L204.413 119.026C204.304 119.097 204.217 119.041 204.217 118.898V117.81C204.217 117.667 204.304 117.498 204.413 117.427L204.637 117.283C204.747 117.217 204.833 117.273 204.833 117.411Z" fill="#D48806"/>
|
||||
<path d="M220.82 110.324V111.413C220.82 111.556 220.734 111.724 220.624 111.796L220.4 111.939C220.291 112.01 220.204 111.954 220.204 111.811V110.723C220.204 110.58 220.291 110.411 220.4 110.34L220.624 110.197C220.729 110.125 220.82 110.181 220.82 110.324Z" fill="#D48806"/>
|
||||
<path d="M219.82 110.968V112.056C219.82 112.199 219.734 112.368 219.624 112.439L219.4 112.582C219.291 112.654 219.204 112.598 219.204 112.455V111.366C219.204 111.223 219.291 111.055 219.4 110.983L219.624 110.84C219.729 110.769 219.82 110.825 219.82 110.968Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 111.612V112.7C218.82 112.843 218.733 113.012 218.624 113.084L218.4 113.227C218.29 113.298 218.204 113.242 218.204 113.099V112.011C218.204 111.867 218.29 111.699 218.4 111.627L218.624 111.484C218.733 111.413 218.82 111.469 218.82 111.612Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 112.256V113.344C217.82 113.487 217.734 113.656 217.624 113.727L217.4 113.87C217.291 113.942 217.204 113.885 217.204 113.742V112.654C217.204 112.511 217.291 112.342 217.4 112.271L217.624 112.128C217.734 112.056 217.82 112.118 217.82 112.256Z" fill="#D48806"/>
|
||||
<path d="M216.822 112.899V113.988C216.822 114.131 216.735 114.299 216.625 114.371L216.402 114.514C216.292 114.586 216.205 114.529 216.205 114.386V113.298C216.205 113.155 216.292 112.986 216.402 112.915L216.625 112.772C216.735 112.705 216.822 112.762 216.822 112.899Z" fill="#D48806"/>
|
||||
<path d="M215.822 113.549V114.637C215.822 114.78 215.735 114.949 215.625 115.02L215.402 115.163C215.292 115.235 215.205 115.178 215.205 115.035V113.947C215.205 113.804 215.292 113.635 215.402 113.564L215.625 113.421C215.735 113.349 215.822 113.405 215.822 113.549Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 114.192V115.28C214.826 115.423 214.739 115.592 214.629 115.664L214.406 115.807C214.296 115.878 214.209 115.822 214.209 115.679V114.591C214.209 114.448 214.296 114.279 214.406 114.207L214.629 114.064C214.734 113.993 214.826 114.049 214.826 114.192Z" fill="#D48806"/>
|
||||
<path d="M213.826 114.836V115.924C213.826 116.067 213.739 116.236 213.629 116.308L213.406 116.451C213.296 116.522 213.209 116.466 213.209 116.323V115.235C213.209 115.091 213.296 114.923 213.406 114.851L213.629 114.708C213.734 114.637 213.826 114.693 213.826 114.836Z" fill="#D48806"/>
|
||||
<path d="M212.827 115.48V116.568C212.827 116.711 212.74 116.88 212.63 116.951L212.407 117.094C212.297 117.166 212.21 117.109 212.21 116.966V115.878C212.21 115.735 212.297 115.566 212.407 115.495L212.63 115.352C212.74 115.28 212.827 115.336 212.827 115.48Z" fill="#D48806"/>
|
||||
<path d="M211.827 116.123V117.212C211.827 117.355 211.74 117.523 211.63 117.595L211.407 117.738C211.297 117.81 211.21 117.753 211.21 117.61V116.522C211.21 116.379 211.297 116.21 211.407 116.139L211.63 115.996C211.74 115.924 211.827 115.985 211.827 116.123Z" fill="#D48806"/>
|
||||
<path d="M210.827 116.767V117.856C210.827 117.999 210.74 118.167 210.631 118.239L210.407 118.382C210.298 118.453 210.211 118.397 210.211 118.254V117.166C210.211 117.023 210.298 116.854 210.407 116.783L210.631 116.64C210.74 116.568 210.827 116.629 210.827 116.767Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 117.411V118.499C209.828 118.642 209.741 118.811 209.631 118.882L209.408 119.026C209.298 119.097 209.211 119.041 209.211 118.898V117.809C209.211 117.666 209.298 117.498 209.408 117.426L209.631 117.283C209.741 117.217 209.828 117.273 209.828 117.411Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 118.06V119.149C208.832 119.292 208.745 119.46 208.636 119.532L208.412 119.675C208.302 119.746 208.216 119.69 208.216 119.547V118.459C208.216 118.316 208.302 118.147 208.412 118.076L208.636 117.933C208.741 117.861 208.832 117.917 208.832 118.06Z" fill="#D48806"/>
|
||||
<path d="M207.833 118.704V119.792C207.833 119.935 207.746 120.104 207.636 120.175L207.413 120.318C207.303 120.39 207.216 120.334 207.216 120.191V119.102C207.216 118.959 207.303 118.791 207.413 118.719L207.636 118.576C207.741 118.505 207.833 118.561 207.833 118.704Z" fill="#D48806"/>
|
||||
<path d="M206.833 119.348V120.436C206.833 120.579 206.746 120.748 206.636 120.819L206.413 120.962C206.303 121.034 206.216 120.978 206.216 120.835V119.746C206.216 119.603 206.303 119.435 206.413 119.363L206.636 119.22C206.746 119.148 206.833 119.205 206.833 119.348Z" fill="#D48806"/>
|
||||
<path d="M205.833 119.991V121.08C205.833 121.223 205.746 121.391 205.637 121.463L205.413 121.606C205.303 121.677 205.217 121.621 205.217 121.478V120.39C205.217 120.247 205.303 120.078 205.413 120.007L205.637 119.864C205.746 119.792 205.833 119.848 205.833 119.991Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 120.635V121.723C204.833 121.866 204.747 122.035 204.637 122.107L204.413 122.25C204.304 122.321 204.217 122.265 204.217 122.122V121.034C204.217 120.891 204.304 120.722 204.413 120.65L204.637 120.507C204.747 120.436 204.833 120.497 204.833 120.635Z" fill="#D48806"/>
|
||||
<path d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#874D00"/>
|
||||
<path d="M200.871 121.146C200.396 121.453 200.012 122.199 200.012 122.812C200.012 123.425 200.396 123.675 200.871 123.369C201.345 123.062 201.729 122.316 201.729 121.703C201.734 121.085 201.345 120.839 200.871 121.146Z" fill="#D48806"/>
|
||||
<path d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#874D00"/>
|
||||
<path d="M197.147 123.553C196.672 123.859 196.289 124.605 196.289 125.218C196.289 125.832 196.672 126.082 197.147 125.775C197.622 125.469 198.005 124.723 198.005 124.11C198.005 123.497 197.617 123.246 197.147 123.553Z" fill="#D48806"/>
|
||||
<path d="M222.675 88.8689L193.006 108.04L163.332 88.8689L193.006 69.698L222.675 88.8689Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 98.4543L193.006 117.63V108.04L222.675 88.8689V98.4543Z" fill="#D48806"/>
|
||||
<path d="M193.005 117.63L163.332 98.4543V88.8689L193.005 108.04V117.63Z" fill="#D48806"/>
|
||||
<path d="M218.962 103.247V100.851L193.005 117.63V120.027L218.962 103.247Z" fill="#D48806"/>
|
||||
<path d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#874D00"/>
|
||||
<path d="M220.82 92.7216V93.81C220.82 93.953 220.734 94.1216 220.624 94.1932L220.4 94.3362C220.291 94.4078 220.204 94.3516 220.204 94.2085V93.1202C220.204 92.9771 220.291 92.8085 220.4 92.737L220.624 92.5939C220.729 92.5224 220.82 92.5786 220.82 92.7216Z" fill="#D48806"/>
|
||||
<path d="M219.82 93.3652V94.4535C219.82 94.5966 219.734 94.7652 219.624 94.8368L219.4 94.9798C219.291 95.0514 219.204 94.9951 219.204 94.8521V93.7638C219.204 93.6207 219.291 93.4521 219.4 93.3805L219.624 93.2375C219.729 93.1659 219.82 93.2221 219.82 93.3652Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 94.0094V95.0977C218.82 95.2408 218.733 95.4094 218.624 95.4809L218.4 95.624C218.29 95.6955 218.204 95.6393 218.204 95.4962V94.4079C218.204 94.2649 218.29 94.0962 218.4 94.0247L218.624 93.8816C218.733 93.8101 218.82 93.8663 218.82 94.0094Z" fill="#D48806"/>
|
||||
<path d="M217.82 94.6529V95.7412C217.82 95.8843 217.734 96.0529 217.624 96.1245L217.4 96.2675C217.291 96.3391 217.204 96.2828 217.204 96.1398V95.0515C217.204 94.9084 217.291 94.7398 217.4 94.6682L217.624 94.5252C217.734 94.4536 217.82 94.515 217.82 94.6529Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 95.2969V96.3852C216.822 96.5283 216.735 96.6969 216.625 96.7684L216.402 96.9115C216.292 96.983 216.205 96.9268 216.205 96.7837V95.6954C216.205 95.5523 216.292 95.3837 216.402 95.3122L216.625 95.1691C216.735 95.1027 216.822 95.1589 216.822 95.2969Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 95.9407V97.0291C215.822 97.1721 215.735 97.3407 215.625 97.4123L215.402 97.5553C215.292 97.6269 215.205 97.5707 215.205 97.4276V96.3393C215.205 96.1962 215.292 96.0276 215.402 95.9561L215.625 95.813C215.735 95.7466 215.822 95.8028 215.822 95.9407Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 96.5895V97.6778C214.826 97.8209 214.739 97.9895 214.629 98.061L214.406 98.2041C214.296 98.2756 214.209 98.2194 214.209 98.0764V96.988C214.209 96.845 214.296 96.6763 214.406 96.6048L214.629 96.4617C214.734 96.3902 214.826 96.4464 214.826 96.5895Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 97.2334V98.3217C213.826 98.4647 213.739 98.6334 213.629 98.7049L213.406 98.848C213.296 98.9195 213.209 98.8633 213.209 98.7202V97.6319C213.209 97.4888 213.296 97.3202 213.406 97.2487L213.629 97.1056C213.734 97.0341 213.826 97.0903 213.826 97.2334Z" fill="#D48806"/>
|
||||
<path d="M212.827 97.8769V98.9653C212.827 99.1083 212.74 99.2769 212.63 99.3485L212.407 99.4915C212.297 99.5631 212.21 99.5069 212.21 99.3638V98.2755C212.21 98.1324 212.297 97.9638 212.407 97.8923L212.63 97.7492C212.74 97.6777 212.827 97.7339 212.827 97.8769Z" fill="#D48806"/>
|
||||
<path d="M211.827 98.5211V99.6094C211.827 99.7525 211.74 99.9211 211.63 99.9926L211.407 100.136C211.297 100.207 211.21 100.151 211.21 100.008V98.9196C211.21 98.7766 211.297 98.608 211.407 98.5364L211.63 98.3934C211.74 98.3218 211.827 98.378 211.827 98.5211Z" fill="#D48806"/>
|
||||
<path d="M210.827 99.1646V100.253C210.827 100.396 210.74 100.565 210.631 100.636L210.407 100.779C210.298 100.851 210.211 100.795 210.211 100.652V99.5632C210.211 99.4201 210.298 99.2515 210.407 99.18L210.631 99.0369C210.74 98.9654 210.827 99.0267 210.827 99.1646Z" fill="#D48806"/>
|
||||
<path d="M209.828 99.8083V100.897C209.828 101.04 209.741 101.208 209.631 101.28L209.408 101.423C209.298 101.494 209.211 101.438 209.211 101.295V100.207C209.211 100.064 209.298 99.8952 209.408 99.8236L209.631 99.6806C209.741 99.6141 209.828 99.6703 209.828 99.8083Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 100.458V101.546C208.832 101.689 208.745 101.858 208.636 101.929L208.412 102.072C208.302 102.144 208.216 102.088 208.216 101.944V100.856C208.216 100.713 208.302 100.544 208.412 100.473L208.636 100.33C208.741 100.258 208.832 100.315 208.832 100.458Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 101.101V102.19C207.833 102.333 207.746 102.501 207.636 102.573L207.413 102.716C207.303 102.787 207.216 102.731 207.216 102.588V101.5C207.216 101.357 207.303 101.188 207.413 101.117L207.636 100.973C207.741 100.902 207.833 100.958 207.833 101.101Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 101.745V102.833C206.833 102.976 206.746 103.145 206.636 103.217L206.413 103.36C206.303 103.431 206.216 103.375 206.216 103.232V102.144C206.216 102.001 206.303 101.832 206.413 101.76L206.636 101.617C206.746 101.546 206.833 101.602 206.833 101.745Z" fill="#D48806"/>
|
||||
<path d="M205.833 102.389V103.477C205.833 103.62 205.746 103.789 205.637 103.86L205.413 104.003C205.303 104.075 205.217 104.019 205.217 103.876V102.787C205.217 102.644 205.303 102.476 205.413 102.404L205.637 102.261C205.746 102.189 205.833 102.246 205.833 102.389Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 103.032V104.121C204.833 104.264 204.747 104.432 204.637 104.504L204.413 104.647C204.304 104.719 204.217 104.662 204.217 104.519V103.431C204.217 103.288 204.304 103.119 204.413 103.048L204.637 102.905C204.747 102.833 204.833 102.895 204.833 103.032Z" fill="#FFF1B8"/>
|
||||
<path d="M220.82 95.9404V97.0288C220.82 97.1718 220.734 97.3404 220.624 97.412L220.4 97.555C220.291 97.6266 220.204 97.5704 220.204 97.4273V96.339C220.204 96.1959 220.291 96.0273 220.4 95.9558L220.624 95.8127C220.729 95.7463 220.82 95.8025 220.82 95.9404Z" fill="#FFF1B8"/>
|
||||
<path d="M219.82 96.5892V97.6775C219.82 97.8206 219.734 97.9892 219.624 98.0607L219.4 98.2038C219.291 98.2753 219.204 98.2191 219.204 98.0761V96.9877C219.204 96.8447 219.291 96.6761 219.4 96.6045L219.624 96.4615C219.729 96.3899 219.82 96.4461 219.82 96.5892Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 97.2331V98.3214C218.82 98.4645 218.733 98.6331 218.624 98.7046L218.4 98.8477C218.29 98.9192 218.204 98.863 218.204 98.7199V97.6316C218.204 97.4885 218.29 97.3199 218.4 97.2484L218.624 97.1053C218.733 97.0338 218.82 97.09 218.82 97.2331Z" fill="#D48806"/>
|
||||
<path d="M217.82 97.8769V98.9653C217.82 99.1083 217.734 99.2769 217.624 99.3485L217.4 99.4915C217.291 99.5631 217.204 99.5069 217.204 99.3638V98.2755C217.204 98.1324 217.291 97.9638 217.4 97.8923L217.624 97.7492C217.734 97.6777 217.82 97.7339 217.82 97.8769Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 98.5208V99.6091C216.822 99.7522 216.735 99.9208 216.625 99.9923L216.402 100.135C216.292 100.207 216.205 100.151 216.205 100.008V98.9194C216.205 98.7763 216.292 98.6077 216.402 98.5361L216.625 98.3931C216.735 98.3215 216.822 98.3777 216.822 98.5208Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 99.1646V100.253C215.822 100.396 215.735 100.565 215.625 100.636L215.402 100.779C215.292 100.851 215.205 100.795 215.205 100.652V99.5632C215.205 99.4201 215.292 99.2515 215.402 99.18L215.625 99.0369C215.735 98.9654 215.822 99.0267 215.822 99.1646Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 99.8083V100.897C214.826 101.04 214.739 101.208 214.629 101.28L214.406 101.423C214.296 101.494 214.209 101.438 214.209 101.295V100.207C214.209 100.064 214.296 99.8952 214.406 99.8236L214.629 99.6806C214.734 99.6141 214.826 99.6703 214.826 99.8083Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 100.457V101.546C213.826 101.689 213.739 101.857 213.629 101.929L213.406 102.072C213.296 102.143 213.209 102.087 213.209 101.944V100.856C213.209 100.713 213.296 100.544 213.406 100.473L213.629 100.33C213.734 100.258 213.826 100.314 213.826 100.457Z" fill="#D48806"/>
|
||||
<path d="M212.827 101.101V102.189C212.827 102.332 212.74 102.501 212.63 102.572L212.407 102.716C212.297 102.787 212.21 102.731 212.21 102.588V101.499C212.21 101.356 212.297 101.188 212.407 101.116L212.63 100.973C212.74 100.902 212.827 100.958 212.827 101.101Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 101.745V102.833C211.827 102.976 211.74 103.145 211.63 103.216L211.407 103.359C211.297 103.431 211.21 103.375 211.21 103.232V102.143C211.21 102 211.297 101.832 211.407 101.76L211.63 101.617C211.74 101.546 211.827 101.602 211.827 101.745Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 102.389V103.477C210.827 103.62 210.74 103.789 210.631 103.86L210.407 104.003C210.298 104.075 210.211 104.019 210.211 103.876V102.787C210.211 102.644 210.298 102.476 210.407 102.404L210.631 102.261C210.74 102.189 210.827 102.246 210.827 102.389Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 103.032V104.121C209.828 104.264 209.741 104.432 209.631 104.504L209.408 104.647C209.298 104.719 209.211 104.662 209.211 104.519V103.431C209.211 103.288 209.298 103.119 209.408 103.048L209.631 102.905C209.741 102.833 209.828 102.895 209.828 103.032Z" fill="#D48806"/>
|
||||
<path d="M208.832 103.676V104.765C208.832 104.908 208.745 105.076 208.636 105.148L208.412 105.291C208.302 105.363 208.216 105.306 208.216 105.163V104.075C208.216 103.932 208.302 103.763 208.412 103.692L208.636 103.549C208.741 103.482 208.832 103.538 208.832 103.676Z" fill="#D48806"/>
|
||||
<path d="M207.833 104.32V105.408C207.833 105.551 207.746 105.72 207.636 105.792L207.413 105.935C207.303 106.006 207.216 105.95 207.216 105.807V104.719C207.216 104.575 207.303 104.407 207.413 104.335L207.636 104.192C207.741 104.126 207.833 104.182 207.833 104.32Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 104.969V106.057C206.833 106.2 206.746 106.369 206.636 106.441L206.413 106.584C206.303 106.655 206.216 106.599 206.216 106.456V105.368C206.216 105.225 206.303 105.056 206.413 104.984L206.636 104.841C206.746 104.77 206.833 104.826 206.833 104.969Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 105.613V106.701C205.833 106.844 205.746 107.013 205.637 107.084L205.413 107.227C205.303 107.299 205.217 107.243 205.217 107.1V106.011C205.217 105.868 205.303 105.7 205.413 105.628L205.637 105.485C205.746 105.413 205.833 105.47 205.833 105.613Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 106.257V107.345C204.833 107.488 204.747 107.657 204.637 107.728L204.413 107.871C204.304 107.943 204.217 107.886 204.217 107.743V106.655C204.217 106.512 204.304 106.343 204.413 106.272L204.637 106.129C204.747 106.057 204.833 106.113 204.833 106.257Z" fill="#FFF1B8"/>
|
||||
<path d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#874D00"/>
|
||||
<path d="M200.871 106.767C200.396 107.074 200.012 107.82 200.012 108.433C200.012 109.046 200.396 109.297 200.871 108.99C201.345 108.683 201.729 107.937 201.729 107.324C201.734 106.706 201.345 106.461 200.871 106.767Z" fill="#D48806"/>
|
||||
<path d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#874D00"/>
|
||||
<path d="M197.147 109.174C196.672 109.481 196.289 110.227 196.289 110.84C196.289 111.453 196.672 111.703 197.147 111.397C197.622 111.09 198.005 110.344 198.005 109.731C198.005 109.118 197.617 108.868 197.147 109.174Z" fill="#D48806"/>
|
||||
<path d="M222.675 74.4907L193.006 93.6616L163.332 74.4907L193.006 55.3147L222.675 74.4907Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 84.076L193.006 103.247V93.6615L222.675 74.4906V84.076Z" fill="#D48806"/>
|
||||
<path d="M193.005 103.247L163.332 84.076V74.4906L193.005 93.6615V103.247Z" fill="#D48806"/>
|
||||
<path d="M218.962 88.8688V86.4725L193.005 103.247V105.643L218.962 88.8688Z" fill="#D48806"/>
|
||||
<path d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#874D00"/>
|
||||
<path d="M220.82 78.3381V79.4265C220.82 79.5695 220.734 79.7381 220.624 79.8097L220.4 79.9527C220.291 80.0243 220.204 79.9681 220.204 79.825V78.7367C220.204 78.5936 220.291 78.425 220.4 78.3535L220.619 78.2104C220.729 78.144 220.82 78.2002 220.82 78.3381Z" fill="#D48806"/>
|
||||
<path d="M219.82 78.9869V80.0752C219.82 80.2183 219.734 80.3869 219.624 80.4584L219.4 80.6015C219.291 80.673 219.204 80.6168 219.204 80.4738V79.3854C219.204 79.2424 219.291 79.0738 219.4 79.0022L219.624 78.8592C219.729 78.7876 219.82 78.8438 219.82 78.9869Z" fill="#D48806"/>
|
||||
<path d="M218.82 79.6308V80.7191C218.82 80.8622 218.733 81.0308 218.624 81.1023L218.4 81.2403C218.29 81.3118 218.204 81.2556 218.204 81.1125V80.0242C218.204 79.8811 218.29 79.7125 218.4 79.641L218.624 79.503C218.733 79.4315 218.82 79.4877 218.82 79.6308Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 80.2746V81.363C217.82 81.506 217.734 81.6746 217.624 81.7462L217.4 81.8892C217.291 81.9608 217.204 81.9046 217.204 81.7615V80.6732C217.204 80.5301 217.291 80.3615 217.4 80.29L217.624 80.1469C217.734 80.0754 217.82 80.1316 217.82 80.2746Z" fill="#D48806"/>
|
||||
<path d="M216.822 80.9185V82.0068C216.822 82.1499 216.735 82.3185 216.625 82.39L216.402 82.5331C216.292 82.6046 216.205 82.5484 216.205 82.4054V81.317C216.205 81.174 216.292 81.0054 216.402 80.9338L216.625 80.7908C216.735 80.7192 216.822 80.7754 216.822 80.9185Z" fill="#D48806"/>
|
||||
<path d="M215.822 81.5623V82.6507C215.822 82.7937 215.735 82.9623 215.625 83.0339L215.402 83.1769C215.292 83.2485 215.205 83.1923 215.205 83.0492V81.9609C215.205 81.8178 215.292 81.6492 215.402 81.5777L215.625 81.4346C215.735 81.3631 215.822 81.4244 215.822 81.5623Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 82.206V83.2943C214.826 83.4374 214.739 83.606 214.629 83.6775L214.406 83.8206C214.296 83.8921 214.209 83.8359 214.209 83.6929V82.6045C214.209 82.4615 214.296 82.2929 214.406 82.2213L214.629 82.0783C214.734 82.0118 214.826 82.068 214.826 82.206Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 82.855V83.9434C213.826 84.0864 213.739 84.255 213.629 84.3266L213.406 84.4696C213.296 84.5412 213.209 84.485 213.209 84.3419V83.2536C213.209 83.1105 213.296 82.9419 213.406 82.8704L213.629 82.7273C213.734 82.6558 213.826 82.712 213.826 82.855Z" fill="#D48806"/>
|
||||
<path d="M212.827 83.4986V84.5869C212.827 84.73 212.74 84.8986 212.63 84.9702L212.407 85.1132C212.297 85.1848 212.21 85.1286 212.21 84.9855V83.8972C212.21 83.7541 212.297 83.5855 212.407 83.5139L212.63 83.3709C212.74 83.2993 212.827 83.3556 212.827 83.4986Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 84.1425V85.2308C211.827 85.3739 211.74 85.5425 211.63 85.614L211.407 85.7571C211.297 85.8286 211.21 85.7724 211.21 85.6294V84.541C211.21 84.398 211.297 84.2294 211.407 84.1578L211.63 84.0148C211.74 83.9432 211.827 83.9994 211.827 84.1425Z" fill="#D48806"/>
|
||||
<path d="M210.827 84.7864V85.8747C210.827 86.0178 210.74 86.1864 210.631 86.2579L210.407 86.401C210.298 86.4725 210.211 86.4163 210.211 86.2732V85.1849C210.211 85.0418 210.298 84.8732 210.407 84.8017L210.631 84.6586C210.74 84.5871 210.827 84.6433 210.827 84.7864Z" fill="#D48806"/>
|
||||
<path d="M209.828 85.4302V86.5185C209.828 86.6616 209.741 86.8302 209.631 86.9017L209.408 87.0448C209.298 87.1163 209.211 87.0601 209.211 86.917V85.8287C209.211 85.6857 209.298 85.517 209.408 85.4455L209.631 85.3024C209.741 85.2309 209.828 85.2922 209.828 85.4302Z" fill="#D48806"/>
|
||||
<path d="M208.832 86.0741V87.1624C208.832 87.3054 208.745 87.4741 208.636 87.5456L208.412 87.6887C208.302 87.7602 208.216 87.704 208.216 87.5609V86.4726C208.216 86.3295 208.302 86.1609 208.412 86.0894L208.636 85.9463C208.741 85.8748 208.832 85.9361 208.832 86.0741Z" fill="#D48806"/>
|
||||
<path d="M207.833 86.7177V87.806C207.833 87.9491 207.746 88.1177 207.636 88.1893L207.413 88.3323C207.303 88.4039 207.216 88.3476 207.216 88.2046V87.1163C207.216 86.9732 207.303 86.8046 207.413 86.733L207.636 86.59C207.741 86.5236 207.833 86.5798 207.833 86.7177Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 87.3668V88.4551C206.833 88.5982 206.746 88.7668 206.636 88.8383L206.413 88.9814C206.303 89.0529 206.216 88.9967 206.216 88.8536V87.7653C206.216 87.6222 206.303 87.4536 206.413 87.3821L206.636 87.239C206.746 87.1675 206.833 87.2237 206.833 87.3668Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 88.0103V89.0987C205.833 89.2417 205.746 89.4103 205.637 89.4819L205.413 89.6249C205.303 89.6965 205.217 89.6403 205.217 89.4972V88.4089C205.217 88.2658 205.303 88.0972 205.413 88.0257L205.637 87.8826C205.746 87.8111 205.833 87.8673 205.833 88.0103Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 88.6542V89.7425C204.833 89.8856 204.747 90.0542 204.637 90.1257L204.413 90.2688C204.304 90.3403 204.217 90.2841 204.217 90.1411V89.0527C204.217 88.9097 204.304 88.7411 204.413 88.6695L204.637 88.5265C204.747 88.4549 204.833 88.5111 204.833 88.6542Z" fill="#D48806"/>
|
||||
<path d="M220.82 81.5623V82.6507C220.82 82.7937 220.734 82.9623 220.624 83.0339L220.4 83.1769C220.291 83.2485 220.204 83.1923 220.204 83.0492V81.9609C220.204 81.8178 220.291 81.6492 220.4 81.5777L220.619 81.4346C220.729 81.3631 220.82 81.4244 220.82 81.5623Z" fill="#D48806"/>
|
||||
<path d="M219.82 82.206V83.2943C219.82 83.4374 219.734 83.606 219.624 83.6775L219.4 83.8206C219.291 83.8921 219.204 83.8359 219.204 83.6929V82.6045C219.204 82.4615 219.291 82.2929 219.4 82.2213L219.624 82.0783C219.729 82.0118 219.82 82.068 219.82 82.206Z" fill="#D48806"/>
|
||||
<path d="M218.82 82.855V83.9434C218.82 84.0864 218.733 84.255 218.624 84.3266L218.4 84.4696C218.29 84.5412 218.204 84.485 218.204 84.3419V83.2536C218.204 83.1105 218.29 82.9419 218.4 82.8704L218.624 82.7273C218.733 82.6558 218.82 82.712 218.82 82.855Z" fill="#D48806"/>
|
||||
<path d="M217.82 83.4989V84.5872C217.82 84.7303 217.734 84.8989 217.624 84.9704L217.4 85.1135C217.291 85.185 217.204 85.1288 217.204 84.9858V83.8974C217.204 83.7544 217.291 83.5858 217.4 83.5142L217.624 83.3712C217.734 83.2996 217.82 83.3558 217.82 83.4989Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 84.1428V85.2311C216.822 85.3742 216.735 85.5428 216.625 85.6143L216.402 85.7574C216.292 85.8289 216.205 85.7727 216.205 85.6296V84.5413C216.205 84.3983 216.292 84.2296 216.402 84.1581L216.625 84.015C216.735 83.9435 216.822 83.9997 216.822 84.1428Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 84.7864V85.8747C215.822 86.0178 215.735 86.1864 215.625 86.2579L215.402 86.401C215.292 86.4725 215.205 86.4163 215.205 86.2732V85.1849C215.205 85.0418 215.292 84.8732 215.402 84.8017L215.625 84.6586C215.735 84.5871 215.822 84.6433 215.822 84.7864Z" fill="#D48806"/>
|
||||
<path d="M214.826 85.4302V86.5185C214.826 86.6616 214.739 86.8302 214.629 86.9017L214.406 87.0448C214.296 87.1163 214.209 87.0601 214.209 86.9171V85.8287C214.209 85.6857 214.296 85.517 214.406 85.4455L214.629 85.3024C214.734 85.2309 214.826 85.2922 214.826 85.4302Z" fill="#D48806"/>
|
||||
<path d="M213.826 86.0741V87.1624C213.826 87.3054 213.739 87.4741 213.629 87.5456L213.406 87.6887C213.296 87.7602 213.209 87.704 213.209 87.5609V86.4726C213.209 86.3295 213.296 86.1609 213.406 86.0894L213.629 85.9463C213.734 85.8748 213.826 85.9361 213.826 86.0741Z" fill="#D48806"/>
|
||||
<path d="M212.827 86.7177V87.806C212.827 87.9491 212.74 88.1177 212.63 88.1893L212.407 88.3323C212.297 88.4039 212.21 88.3476 212.21 88.2046V87.1163C212.21 86.9732 212.297 86.8046 212.407 86.733L212.63 86.59C212.74 86.5236 212.827 86.5798 212.827 86.7177Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 87.3668V88.4551C211.827 88.5982 211.74 88.7668 211.63 88.8383L211.407 88.9814C211.297 89.0529 211.21 88.9967 211.21 88.8536V87.7653C211.21 87.6222 211.297 87.4536 211.407 87.3821L211.63 87.239C211.74 87.1675 211.827 87.2237 211.827 87.3668Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 88.0106V89.099C210.827 89.242 210.74 89.4106 210.631 89.4822L210.407 89.6252C210.298 89.6968 210.211 89.6406 210.211 89.4975V88.4092C210.211 88.2661 210.298 88.0975 210.407 88.026L210.631 87.8829C210.74 87.8114 210.827 87.8676 210.827 88.0106Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 88.6545V89.7428C209.828 89.8859 209.741 90.0545 209.631 90.126L209.408 90.2691C209.298 90.3406 209.211 90.2844 209.211 90.1414V89.053C209.211 88.91 209.298 88.7414 209.408 88.6698L209.631 88.5268C209.741 88.4552 209.828 88.5114 209.828 88.6545Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 89.2981V90.3864C208.832 90.5295 208.745 90.6981 208.636 90.7696L208.412 90.9127C208.302 90.9842 208.216 90.928 208.216 90.7849V89.6966C208.216 89.5536 208.302 89.3849 208.412 89.3134L208.636 89.1703C208.741 89.0988 208.832 89.155 208.832 89.2981Z" fill="#D48806"/>
|
||||
<path d="M207.833 89.9419V91.0302C207.833 91.1733 207.746 91.3419 207.636 91.4134L207.413 91.5565C207.303 91.628 207.216 91.5718 207.216 91.4288V90.3404C207.216 90.1974 207.303 90.0288 207.413 89.9572L207.636 89.8142C207.741 89.7426 207.833 89.8039 207.833 89.9419Z" fill="#D48806"/>
|
||||
<path d="M206.833 90.5859V91.6742C206.833 91.8172 206.746 91.9859 206.636 92.0574L206.413 92.2005C206.303 92.272 206.216 92.2158 206.216 92.0727V90.9844C206.216 90.8413 206.303 90.6727 206.413 90.6012L206.636 90.4581C206.746 90.3917 206.833 90.4479 206.833 90.5859Z" fill="#D48806"/>
|
||||
<path d="M205.833 91.2346V92.3229C205.833 92.466 205.746 92.6346 205.637 92.7062L205.413 92.8492C205.303 92.9207 205.217 92.8645 205.217 92.7215V91.6331C205.217 91.4901 205.303 91.3215 205.413 91.2499L205.637 91.1069C205.746 91.0353 205.833 91.0915 205.833 91.2346Z" fill="#D48806"/>
|
||||
<path d="M204.833 91.8782V92.9665C204.833 93.1096 204.747 93.2782 204.637 93.3497L204.413 93.4928C204.304 93.5643 204.217 93.5081 204.217 93.3651V92.2767C204.217 92.1337 204.304 91.9651 204.413 91.8935L204.637 91.7505C204.747 91.6789 204.833 91.7351 204.833 91.8782Z" fill="#D48806"/>
|
||||
<path d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#874D00"/>
|
||||
<path d="M200.871 92.3843C200.396 92.6909 200.012 93.4369 200.012 94.05C200.012 94.6632 200.396 94.9135 200.871 94.607C201.345 94.3004 201.729 93.5544 201.729 92.9413C201.734 92.3281 201.345 92.0778 200.871 92.3843Z" fill="#D48806"/>
|
||||
<path d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#874D00"/>
|
||||
<path d="M197.147 94.7959C196.672 95.1024 196.289 95.8484 196.289 96.4616C196.289 97.0747 196.672 97.3251 197.147 97.0185C197.622 96.7119 198.005 95.9659 198.005 95.3528C198.005 94.7346 197.617 94.4893 197.147 94.7959Z" fill="#D48806"/>
|
||||
<path d="M164.519 59.3465L191.832 41.7033C192.485 41.2844 193.553 41.2844 194.206 41.7033L221.488 59.3465C222.141 59.7655 222.675 60.8027 222.675 61.6458V69.6983L192.987 88.8692L163.332 69.6983V61.6458C163.332 60.8027 163.866 59.7655 164.519 59.3465Z" fill="#D48806"/>
|
||||
<path d="M192.987 78.834V88.8691L222.675 69.6982V61.6456C222.675 60.8996 222.255 59.9952 221.702 59.5149C222.136 59.939 222.063 60.5062 221.488 60.8792L194.17 78.5172C193.846 78.7267 193.416 78.834 192.987 78.834Z" fill="#D48806"/>
|
||||
<path d="M221.488 60.8791L194.17 78.5171C193.517 78.9412 192.453 78.9412 191.796 78.5171L164.514 60.8791C163.861 60.455 163.861 59.7703 164.514 59.3462L191.832 41.7031C192.485 41.279 193.549 41.279 194.206 41.7031L221.488 59.3462C222.145 59.7652 222.145 60.455 221.488 60.8791Z" fill="#FFF1B8"/>
|
||||
<path d="M218.962 74.4908V72.0944L193.005 88.8689V91.2653L218.962 74.4908Z" fill="#D48806"/>
|
||||
<path d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#874D00"/>
|
||||
<path d="M220.82 63.9603V65.0486C220.82 65.1917 220.734 65.3603 220.624 65.4318L220.4 65.5749C220.291 65.6464 220.204 65.5902 220.204 65.4472V64.3588C220.204 64.2158 220.291 64.0471 220.4 63.9756L220.619 63.8325C220.729 63.761 220.82 63.8223 220.82 63.9603Z" fill="#FFF1B8"/>
|
||||
<path d="M219.82 64.604V65.6923C219.82 65.8353 219.734 66.004 219.624 66.0755L219.4 66.2186C219.291 66.2901 219.204 66.2339 219.204 66.0908V65.0025C219.204 64.8594 219.291 64.6908 219.4 64.6193L219.624 64.4762C219.729 64.4098 219.82 64.466 219.82 64.604Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 65.2528V66.3411C218.82 66.4842 218.733 66.6528 218.624 66.7244L218.4 66.8674C218.29 66.9338 218.204 66.8776 218.204 66.7346V65.6462C218.204 65.5032 218.29 65.3346 218.4 65.263L218.624 65.12C218.733 65.0535 218.82 65.1097 218.82 65.2528Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 65.8969V66.9852C217.82 67.1283 217.734 67.2969 217.624 67.3684L217.4 67.5115C217.291 67.583 217.204 67.5268 217.204 67.3837V66.2954C217.204 66.1523 217.291 65.9837 217.4 65.9122L217.624 65.7691C217.734 65.6976 217.82 65.7538 217.82 65.8969Z" fill="#D48806"/>
|
||||
<path d="M216.822 66.5407V67.6291C216.822 67.7721 216.735 67.9407 216.625 68.0123L216.402 68.1553C216.292 68.2269 216.205 68.1707 216.205 68.0276V66.9393C216.205 66.7962 216.292 66.6276 216.402 66.5561L216.625 66.413C216.735 66.3415 216.822 66.3977 216.822 66.5407Z" fill="#D48806"/>
|
||||
<path d="M215.822 67.1843V68.2726C215.822 68.4157 215.735 68.5843 215.625 68.6559L215.402 68.7989C215.292 68.8705 215.205 68.8143 215.205 68.6712V67.5829C215.205 67.4398 215.292 67.2712 215.402 67.1997L215.625 67.0566C215.735 66.9851 215.822 67.0413 215.822 67.1843Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 67.8282V68.9165C214.826 69.0596 214.739 69.2282 214.629 69.2997L214.406 69.4428C214.296 69.5143 214.209 69.4581 214.209 69.3151V68.2267C214.209 68.0837 214.296 67.9151 214.406 67.8435L214.629 67.7005C214.734 67.6289 214.826 67.6851 214.826 67.8282Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 68.472V69.5603C213.826 69.7034 213.739 69.872 213.629 69.9436L213.406 70.0866C213.296 70.1582 213.209 70.1019 213.209 69.9589V68.8706C213.209 68.7275 213.296 68.5589 213.406 68.4873L213.629 68.3443C213.734 68.2727 213.826 68.3341 213.826 68.472Z" fill="#FFF1B8"/>
|
||||
<path d="M212.827 69.1157V70.204C212.827 70.3471 212.74 70.5157 212.63 70.5872L212.407 70.7303C212.297 70.8018 212.21 70.7456 212.21 70.6025V69.5142C212.21 69.3712 212.297 69.2025 212.407 69.131L212.63 68.9879C212.74 68.9215 212.827 68.9777 212.827 69.1157Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 69.7647V70.853C211.827 70.9961 211.74 71.1647 211.63 71.2363L211.407 71.3793C211.297 71.4509 211.21 71.3947 211.21 71.2516V70.1633C211.21 70.0202 211.297 69.8516 211.407 69.78L211.63 69.637C211.74 69.5654 211.827 69.6217 211.827 69.7647Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 70.4086V71.4969C210.827 71.64 210.74 71.8086 210.631 71.8801L210.407 72.0232C210.298 72.0947 210.211 72.0385 210.211 71.8955V70.8071C210.211 70.6641 210.298 70.4955 210.407 70.4239L210.631 70.2809C210.74 70.2093 210.827 70.2655 210.827 70.4086Z" fill="#D48806"/>
|
||||
<path d="M209.828 71.0525V72.1408C209.828 72.2839 209.741 72.4525 209.631 72.524L209.408 72.6671C209.298 72.7386 209.211 72.6824 209.211 72.5393V71.451C209.211 71.3079 209.298 71.1393 209.408 71.0678L209.631 70.9247C209.741 70.8532 209.828 70.9094 209.828 71.0525Z" fill="#D48806"/>
|
||||
<path d="M208.832 71.696V72.7844C208.832 72.9274 208.745 73.0961 208.636 73.1676L208.412 73.3107C208.302 73.3822 208.216 73.326 208.216 73.1829V72.0946C208.216 71.9515 208.302 71.7829 208.412 71.7114L208.636 71.5683C208.741 71.4968 208.832 71.553 208.832 71.696Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 72.3399V73.4282C207.833 73.5713 207.746 73.7399 207.636 73.8114L207.413 73.9545C207.303 74.026 207.216 73.9698 207.216 73.8267V72.7384C207.216 72.5953 207.303 72.4267 207.413 72.3552L207.636 72.2121C207.741 72.1406 207.833 72.2019 207.833 72.3399Z" fill="#D48806"/>
|
||||
<path d="M206.833 72.9838V74.0721C206.833 74.2152 206.746 74.3838 206.636 74.4554L206.413 74.5984C206.303 74.67 206.216 74.6138 206.216 74.4707V73.3824C206.216 73.2393 206.303 73.0707 206.413 72.9991L206.636 72.8561C206.746 72.7897 206.833 72.8459 206.833 72.9838Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 73.6274V74.7157C205.833 74.8588 205.746 75.0274 205.637 75.0989L205.413 75.242C205.303 75.3135 205.217 75.2573 205.217 75.1143V74.0259C205.217 73.8829 205.303 73.7143 205.413 73.6427L205.637 73.4997C205.746 73.4332 205.833 73.4894 205.833 73.6274Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 74.2763V75.3646C204.833 75.5077 204.747 75.6763 204.637 75.7478L204.413 75.8858C204.304 75.9573 204.217 75.9011 204.217 75.758V74.6697C204.217 74.5266 204.304 74.358 204.413 74.2865L204.637 74.1434C204.747 74.077 204.833 74.1332 204.833 74.2763Z" fill="#FFF1B8"/>
|
||||
<path d="M220.82 67.1844V68.2727C220.82 68.4158 220.734 68.5844 220.624 68.6559L220.4 68.799C220.291 68.8705 220.204 68.8143 220.204 68.6712V67.5829C220.204 67.4398 220.291 67.2712 220.4 67.1997L220.619 67.0566C220.729 66.9851 220.82 67.0413 220.82 67.1844Z" fill="#D48806"/>
|
||||
<path d="M219.82 67.8279V68.9163C219.82 69.0593 219.734 69.228 219.624 69.2995L219.4 69.4425C219.291 69.5141 219.204 69.4579 219.204 69.3148V68.2265C219.204 68.0834 219.291 67.9148 219.4 67.8433L219.624 67.7002C219.729 67.6287 219.82 67.6849 219.82 67.8279Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 68.4721V69.5604C218.82 69.7034 218.733 69.8721 218.624 69.9436L218.4 70.0867C218.29 70.1582 218.204 70.102 218.204 69.9589V68.8706C218.204 68.7275 218.29 68.5589 218.4 68.4874L218.624 68.3443C218.733 68.2728 218.82 68.3341 218.82 68.4721Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 69.1157V70.204C217.82 70.3471 217.734 70.5157 217.624 70.5873L217.4 70.7303C217.291 70.8019 217.204 70.7457 217.204 70.6026V69.5143C217.204 69.3712 217.291 69.2026 217.4 69.1311L217.624 68.988C217.734 68.9216 217.82 68.9778 217.82 69.1157Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 69.7645V70.8528C216.822 70.9959 216.735 71.1645 216.625 71.236L216.402 71.3791C216.292 71.4506 216.205 71.3944 216.205 71.2513V70.163C216.205 70.02 216.292 69.8513 216.402 69.7798L216.625 69.6367C216.735 69.5652 216.822 69.6214 216.822 69.7645Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 70.4086V71.497C215.822 71.64 215.735 71.8086 215.625 71.8802L215.402 72.0232C215.292 72.0948 215.205 72.0386 215.205 71.8955V70.8072C215.205 70.6641 215.292 70.4955 215.402 70.424L215.625 70.2809C215.735 70.2094 215.822 70.2656 215.822 70.4086Z" fill="#D48806"/>
|
||||
<path d="M214.826 71.0522V72.1405C214.826 72.2836 214.739 72.4522 214.629 72.5238L214.406 72.6668C214.296 72.7384 214.209 72.6822 214.209 72.5391V71.4508C214.209 71.3077 214.296 71.1391 214.406 71.0675L214.629 70.9245C214.734 70.8529 214.826 70.9092 214.826 71.0522Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 71.6961V72.7844C213.826 72.9275 213.739 73.0961 213.629 73.1676L213.406 73.3107C213.296 73.3822 213.209 73.326 213.209 73.183V72.0946C213.209 71.9516 213.296 71.7829 213.406 71.7114L213.629 71.5683C213.734 71.4968 213.826 71.553 213.826 71.6961Z" fill="#D48806"/>
|
||||
<path d="M212.827 72.3399V73.4282C212.827 73.5713 212.74 73.7399 212.63 73.8114L212.407 73.9545C212.297 74.026 212.21 73.9698 212.21 73.8268V72.7384C212.21 72.5954 212.297 72.4268 212.407 72.3552L212.63 72.2122C212.74 72.1406 212.827 72.202 212.827 72.3399Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 72.9836V74.0719C211.827 74.215 211.74 74.3836 211.63 74.4551L211.407 74.5982C211.297 74.6697 211.21 74.6135 211.21 74.4704V73.3821C211.21 73.239 211.297 73.0704 211.407 72.9989L211.63 72.8558C211.74 72.7894 211.827 72.8456 211.827 72.9836Z" fill="#D48806"/>
|
||||
<path d="M210.827 73.6274V74.7158C210.827 74.8588 210.74 75.0274 210.631 75.099L210.407 75.242C210.298 75.3136 210.211 75.2574 210.211 75.1143V74.026C210.211 73.8829 210.298 73.7143 210.407 73.6428L210.631 73.4997C210.74 73.4333 210.827 73.4895 210.827 73.6274Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 74.2762V75.3645C209.828 75.5076 209.741 75.6762 209.631 75.7477L209.408 75.8908C209.298 75.9623 209.211 75.9061 209.211 75.7631V74.6747C209.211 74.5317 209.298 74.3631 209.408 74.2915L209.631 74.1485C209.741 74.0769 209.828 74.1331 209.828 74.2762Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 74.9204V76.0087C208.832 76.1518 208.745 76.3204 208.636 76.3919L208.412 76.535C208.302 76.6065 208.216 76.5503 208.216 76.4072V75.3189C208.216 75.1758 208.302 75.0072 208.412 74.9357L208.636 74.7926C208.741 74.7211 208.832 74.7773 208.832 74.9204Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 75.5639V76.6523C207.833 76.7953 207.746 76.9639 207.636 77.0355L207.413 77.1785C207.303 77.2501 207.216 77.1939 207.216 77.0508V75.9625C207.216 75.8194 207.303 75.6508 207.413 75.5793L207.636 75.4362C207.741 75.3647 207.833 75.4209 207.833 75.5639Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 76.2078V77.2961C206.833 77.4392 206.746 77.6078 206.636 77.6793L206.413 77.8224C206.303 77.8939 206.216 77.8377 206.216 77.6947V76.6064C206.216 76.4633 206.303 76.2947 206.413 76.2231L206.636 76.0801C206.746 76.0085 206.833 76.0647 206.833 76.2078Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 76.8516V77.94C205.833 78.083 205.746 78.2516 205.637 78.3232L205.413 78.4662C205.303 78.5378 205.217 78.4816 205.217 78.3385V77.2502C205.217 77.1071 205.303 76.9385 205.413 76.867L205.637 76.7239C205.746 76.6524 205.833 76.7137 205.833 76.8516Z" fill="#D48806"/>
|
||||
<path d="M204.833 77.4953V78.5836C204.833 78.7267 204.747 78.8953 204.637 78.9668L204.413 79.1099C204.304 79.1814 204.217 79.1252 204.217 78.9822V77.8938C204.217 77.7508 204.304 77.5821 204.413 77.5106L204.637 77.3676C204.747 77.3011 204.833 77.3573 204.833 77.4953Z" fill="#FFF1B8"/>
|
||||
<path d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#874D00"/>
|
||||
<path d="M200.871 78.0063C200.396 78.3128 200.012 79.0588 200.012 79.672C200.012 80.2851 200.396 80.5355 200.871 80.2289C201.345 79.9223 201.729 79.1763 201.729 78.5632C201.734 77.9501 201.345 77.6997 200.871 78.0063Z" fill="#D48806"/>
|
||||
<path d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#874D00"/>
|
||||
<path d="M197.147 80.4175C196.672 80.7241 196.289 81.4701 196.289 82.0832C196.289 82.6964 196.672 82.9467 197.147 82.6402C197.622 82.3336 198.005 81.5876 198.005 80.9745C198.005 80.3562 197.617 80.111 197.147 80.4175Z" fill="#D48806"/>
|
||||
<path d="M68.8062 138.833L71.3996 138.278L70.394 140.13L68.8062 138.833Z" fill="#263238"/>
|
||||
<path d="M72.0347 139.574L73.7284 138.833V140.13L72.0347 139.574Z" fill="#263238"/>
|
||||
<path d="M77.3275 141.427L76.216 139.574L75.4221 141.427H77.3275Z" fill="#263238"/>
|
||||
<path d="M82.5077 136.858L79.7672 137.25L80.9415 135.684L82.5077 136.858Z" fill="#263238"/>
|
||||
<path d="M80.5508 134.901L78.9852 135.293L79.6476 134.31L80.5508 134.901Z" fill="#263238"/>
|
||||
<path d="M76.2453 133.727L77.0281 134.901L78.5937 133.727L76.2453 133.727Z" fill="#263238"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2661_68499" x1="171.681" y1="169.272" x2="101.213" y2="169.272" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_2661_68499" x1="171.681" y1="180.656" x2="136.447" y2="180.656" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_2661_68499" x1="136.447" y1="157.888" x2="101.213" y2="157.888" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_2661_68499" x1="151.338" y1="170.838" x2="121.545" y2="170.838" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_2661_68499" x1="117.578" y1="180.496" x2="121.201" y2="180.538" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#ECDCBC"/>
|
||||
<stop offset="0.475" stopColor="#F0DBB2"/>
|
||||
<stop offset="1" stopColor="#F9EBCF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_2661_68499" x1="120.272" y1="185.13" x2="116.282" y2="185.13" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_2661_68499" x1="54.1281" y1="15.6905" x2="43.7397" y2="15.6905" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
)
|
@ -1,366 +0,0 @@
|
||||
import React, {useEffect, useMemo, useState} from "react";
|
||||
import Icon from "@ant-design/icons";
|
||||
import {useSetState} from "ahooks";
|
||||
import {Button, Flex, Space, Typography} from "antd";
|
||||
|
||||
import {IProofreadTypeData, ProofreadTypeData} from "@/types/proofread.ts";
|
||||
import {
|
||||
ProofreadStateEnum, ProofreadTypeEnum,
|
||||
TCorrectData,
|
||||
TCorrectedContent,
|
||||
TDocumentContentDetail
|
||||
} from "@/service/types/document.ts";
|
||||
import {showToast} from "@/components/messages/Modal.tsx";
|
||||
|
||||
import {IconRollback, IconStartProofread} from "./icons.tsx";
|
||||
import {ActionKey, ProofreadItem} from "./proofread-item.tsx";
|
||||
import {parseProofreadResult} from "./parse-proofread-result.ts";
|
||||
import './editor.less'
|
||||
import {IconLogo} from "./images/logo.tsx";
|
||||
|
||||
|
||||
type ProofreadPanelProps = {
|
||||
document?: TDocumentContentDetail;
|
||||
proofreadLoading?: boolean
|
||||
onUpdateProofreadItem: (item: TCorrectedContent) => void;
|
||||
onSelectProofreadItem: (item: TCorrectedContent | null) => void;
|
||||
activeProofreadItemId?: number;
|
||||
disabledProofreadItemList:number[];
|
||||
onStartProofread: () => Promise<void> | void;
|
||||
selectedProofreadItemId?: number;
|
||||
userinfo?: Account;
|
||||
}
|
||||
|
||||
const ProofreadPanel: React.FC<ProofreadPanelProps> = (props) => {
|
||||
const {userinfo} = props
|
||||
const [state, setState] = useSetState<{
|
||||
// 当前选中分类
|
||||
currentType: IProofreadTypeData | null;
|
||||
// 默认是否展开panel
|
||||
open: boolean;
|
||||
adoptAll?: boolean;
|
||||
ignoreAll?: boolean;
|
||||
listMaxCount: number;
|
||||
activeIndex: number;
|
||||
}>({
|
||||
currentType: null,
|
||||
open: true,
|
||||
adoptAll: false,
|
||||
ignoreAll: false,
|
||||
activeIndex: -1,
|
||||
listMaxCount: 100000,
|
||||
})
|
||||
|
||||
|
||||
const [proofreadResult, setProofreadResult] = useState<TCorrectData>()
|
||||
const [histories, setHistories] = useState<number[][]>([])
|
||||
|
||||
useEffect(() => {
|
||||
handleTypeChange(null)
|
||||
if (props.proofreadLoading) {
|
||||
//setProofreadList({all: [], processed: []})
|
||||
} else {
|
||||
if (props.document) {
|
||||
const result = parseProofreadResult(props.document,props.disabledProofreadItemList)
|
||||
setProofreadResult({
|
||||
abnormalCount: result.abnormalCount,
|
||||
list: result.resultList
|
||||
})
|
||||
setHistories([])
|
||||
}
|
||||
}
|
||||
}, [props.document, props.proofreadLoading,props.disabledProofreadItemList])
|
||||
|
||||
// 当前状态校对列表
|
||||
const currentProofreadList = useMemo(() => {
|
||||
const list = proofreadResult?.list || [];
|
||||
if (!state.currentType) return list;
|
||||
return list.filter(s => Array.isArray(state.currentType?.id) ? state.currentType?.id.includes(s.type) : s.type == state.currentType?.id)
|
||||
}, [proofreadResult, state.currentType])
|
||||
|
||||
// useEffect(() => {
|
||||
// if (props.document && bridge) {
|
||||
// bridge.clearAllProofreadMark()
|
||||
// currentProofreadList.forEach(it => {
|
||||
// bridge.addBookmark(JSON.stringify(it))
|
||||
// })
|
||||
// }
|
||||
// }, [currentProofreadList])
|
||||
|
||||
// 撤销操作
|
||||
const redoAction = async () => {
|
||||
if (!props.document) return;
|
||||
if (histories.length == 0) return;
|
||||
const currentList = histories.pop();
|
||||
setHistories(histories);
|
||||
if (!currentList || currentList.length == 0) return;
|
||||
currentList.forEach(id => {
|
||||
// 状态调整为未处理
|
||||
const item = proofreadResult?.list?.find(s => s.id == id)
|
||||
if (item) {
|
||||
item.isAccept = ProofreadStateEnum.Default
|
||||
props.onUpdateProofreadItem(item)
|
||||
}
|
||||
})
|
||||
setProofreadResult({
|
||||
abnormalCount: proofreadResult!.abnormalCount,
|
||||
list: proofreadResult!.list
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部/类似校对项
|
||||
* @param isAccept
|
||||
* @param p 如果不传入则获取该状态对应类型所有校对项
|
||||
*/
|
||||
const getSameProofreadItems = (isAccept?: boolean, p?: TCorrectedContent) => {
|
||||
const list = currentProofreadList.filter(s => {
|
||||
if (isAccept && s.type == ProofreadTypeEnum.sensitive) return false;
|
||||
return s.isAccept == ProofreadStateEnum.Default;
|
||||
})
|
||||
// 获取当前类型下所有
|
||||
return p ? list.filter(s => {
|
||||
return s.origin == p.origin && s.text == p.text && (
|
||||
isAccept ? s.tag : true
|
||||
);
|
||||
}) : (
|
||||
isAccept ? list.filter(s => s.tag) : [...list]
|
||||
)
|
||||
}
|
||||
|
||||
const addToHistory = (items: TCorrectedContent[]) => {
|
||||
setHistories([
|
||||
...histories,
|
||||
items.map(s => s.id)
|
||||
])
|
||||
setProofreadResult(proofreadResult)
|
||||
}
|
||||
|
||||
// 批量处理
|
||||
const batchProcess = (status: ProofreadStateEnum, proofread?: TCorrectedContent) => {
|
||||
const list = getSameProofreadItems(status == ProofreadStateEnum.Accept, proofread);
|
||||
if (list.length > 0) {
|
||||
// 设置 状态
|
||||
list.map(s => {
|
||||
s.isAccept = status;
|
||||
props.onUpdateProofreadItem(s);
|
||||
return s;
|
||||
})
|
||||
addToHistory(list)
|
||||
}
|
||||
}
|
||||
|
||||
// 处理全部
|
||||
const handleProcessAll = (action: ActionKey) => {
|
||||
return () => {
|
||||
if (!props.document) return;
|
||||
batchProcess(action == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 让当前选中的 item 居中
|
||||
const centerItem = (activeIndex: number) => {
|
||||
setState({activeIndex})
|
||||
// 将提示显示在视图中间
|
||||
const div = document.querySelector(`div.proofread-index-${activeIndex}`)
|
||||
if (div) {
|
||||
div.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'center'
|
||||
})
|
||||
}
|
||||
//
|
||||
props.onSelectProofreadItem(currentProofreadList[activeIndex]);
|
||||
}
|
||||
useEffect(() => {
|
||||
if (props.selectedProofreadItemId) {
|
||||
const index = currentProofreadList.findIndex(s => s.id == props.selectedProofreadItemId)
|
||||
if (index >= 0) {
|
||||
centerItem(index)
|
||||
}
|
||||
}
|
||||
}, [props.selectedProofreadItemId])
|
||||
// 处理校对项
|
||||
const handleItemAction = async (key: ActionKey, item: TCorrectedContent, index: number) => {
|
||||
try {
|
||||
if (key == 'click') {
|
||||
if (item) {
|
||||
setState({activeIndex: index})
|
||||
}
|
||||
centerItem(index)
|
||||
return;
|
||||
} else if (key == 'addToLexicon') {
|
||||
// 添加到词库
|
||||
showToast('添加词库成功', "success")
|
||||
} else {
|
||||
if (key == 'ignoreAll' || key == 'acceptAll') { // 同类型处理
|
||||
batchProcess(key == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore, item)
|
||||
} else {
|
||||
if (key == 'ignore') { // 忽略
|
||||
item.isAccept = ProofreadStateEnum.Ignore;
|
||||
} else if (key == 'accept') { // 采纳
|
||||
item.isAccept = ProofreadStateEnum.Accept;
|
||||
} else if (key == 'review') { // 复核
|
||||
item.isAccept = ProofreadStateEnum.Review;
|
||||
}
|
||||
props.onUpdateProofreadItem(item)
|
||||
addToHistory([item])
|
||||
}
|
||||
}
|
||||
} catch (e) { // 处理错误了
|
||||
console.log('process item action error:', (e as Error).message)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const handleTypeChange = (currentType: IProofreadTypeData | null) => {
|
||||
setState({
|
||||
currentType,
|
||||
activeIndex: -1,
|
||||
})
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth'
|
||||
})
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const movePrevOrNextProofreadItem = (action: 'prev' | 'next') => {
|
||||
const maxCount = currentProofreadList.length;
|
||||
if (maxCount == 0) return;
|
||||
let newId = state.activeIndex;
|
||||
if (action == 'next') {
|
||||
if (state.activeIndex >= maxCount - 1) {
|
||||
return;
|
||||
}
|
||||
newId += 1;
|
||||
} else { // 向上滚
|
||||
if (state.activeIndex <= 0) return;
|
||||
newId -= 1;
|
||||
}
|
||||
centerItem(newId)
|
||||
}
|
||||
// const handleUpAndDownEvent = (e: KeyboardEvent) => {
|
||||
// const key = e.key.toLowerCase();
|
||||
// if (key == 'arrowup' || key == 'arrowdown') {
|
||||
// movePrevOrNextProofreadItem(key == 'arrowup' ? 'prev' : 'next')
|
||||
// } else if (key == 'arrowleft' || key == 'arrowright') {
|
||||
// // movePrevOrNextProofreadItem(key == 'arrowleft' ? 'accept' : 'ignore')
|
||||
// }
|
||||
// }
|
||||
// const processScroll = (e: WheelEvent) => {
|
||||
// const {deltaY} = e;
|
||||
// movePrevOrNextProofreadItem(deltaY > 0 ? 'next' : 'prev')
|
||||
// }
|
||||
|
||||
// const {run: onMousewheel} = useDebounceFn((e) => processScroll(e), {wait: 20,})
|
||||
// useEffect(() => {
|
||||
// 绑定键盘事件
|
||||
// document.documentElement.addEventListener('keyup', handleUpAndDownEvent, false)
|
||||
// 绑定滚动事件
|
||||
// document.documentElement.addEventListener('wheel', onMousewheel, false)
|
||||
// return () => {
|
||||
// document.documentElement.removeEventListener('wheel', onMousewheel, false)
|
||||
// // document.documentElement.removeEventListener('keyup', handleUpAndDownEvent, false)
|
||||
// }
|
||||
// }, []);
|
||||
const currentProofreadTotal = useMemo(() => {
|
||||
return proofreadResult?.abnormalCount.total && proofreadResult?.abnormalCount.total > 0 ? proofreadResult?.abnormalCount.total : 0
|
||||
}, [proofreadResult])
|
||||
|
||||
// const {bridge} = useBridge();
|
||||
// const processGetContent = () => {
|
||||
// const t = Date.now()
|
||||
// //
|
||||
// bridge.getDocumentData().then(ret => {
|
||||
// console.log(ret, Date.now() - t);
|
||||
// // bridge.getTotalParagraphNumber().then((total) => {
|
||||
// // console.log(total, Date.now() - t)
|
||||
// // // bridge.getParagraphTextByRange(1535, 1544).then((ret) => {
|
||||
// // // console.log(ret, Date.now() - t);
|
||||
// // // })
|
||||
// //
|
||||
// // })
|
||||
// })
|
||||
// }
|
||||
|
||||
|
||||
return (<div className={'proofread-panel-container'}>
|
||||
<Flex justify={'space-between'} align={'center'} className="panel-header">
|
||||
<div className="align-center">
|
||||
{proofreadResult && currentProofreadTotal > 0 ? <span className={'header-logo'}>
|
||||
<IconLogo/>
|
||||
</span> : <Button
|
||||
type="primary"
|
||||
className="btn-start-proofread"
|
||||
icon={<Icon component={IconStartProofread} style={{fontSize: 16}}/>}
|
||||
onClick={props.onStartProofread}
|
||||
>开始校对</Button>}
|
||||
</div>
|
||||
<Typography.Text className="text-tip">
|
||||
建议修改 <strong
|
||||
className="count-value">{currentProofreadTotal}</strong> 项
|
||||
<span style={{marginLeft: 20}}>待审核 </span>
|
||||
<strong
|
||||
className="count-value">{proofreadResult?.list.filter(s => s.isAccept == ProofreadStateEnum.Default)?.length || 0}</strong> 项
|
||||
</Typography.Text>
|
||||
</Flex>
|
||||
<div className={`proofread-list-wrapper ${proofreadResult ? 'has-result' : ''}`}>
|
||||
<div className="proofread-result">
|
||||
<Flex justify={'center'} className={'operation-buttons'}>
|
||||
<Space style={{margin: 10}}>
|
||||
<Button
|
||||
disabled={!userinfo || !props.document || currentProofreadTotal == 0}
|
||||
className={'btn-accept-all btn-operation-batch'}
|
||||
onClick={handleProcessAll('acceptAll')}>全部采纳</Button>
|
||||
<Button
|
||||
disabled={!userinfo || !props.document || currentProofreadTotal == 0}
|
||||
className={'btn-ignore-all btn-operation-batch'}
|
||||
onClick={handleProcessAll('ignore')}>全部忽略</Button>
|
||||
<Button
|
||||
className="btn-rollback btn-operation-batch"
|
||||
disabled={!userinfo || histories.length == 0 || !props.document || currentProofreadTotal == 0}
|
||||
onClick={redoAction}
|
||||
icon={<Icon component={IconRollback}/>}>撤销</Button>
|
||||
</Space>
|
||||
</Flex>
|
||||
<div className={'proofread-list'}>
|
||||
<div style={{paddingTop: 2}}>
|
||||
{currentProofreadList.map((it, index) => (
|
||||
index >= state.listMaxCount ? null : <ProofreadItem
|
||||
it={it}
|
||||
className={`proofread-index-${index}`}
|
||||
index={index}
|
||||
last={false}
|
||||
selected={state.activeIndex == index}
|
||||
onAction={key => handleItemAction(key, it, index)}
|
||||
key={it.id}
|
||||
previewMode={false}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="types">
|
||||
<div className="container">
|
||||
<div onClick={() => handleTypeChange(null)}
|
||||
className={`item ${!state.currentType ? 'active' : ''}`}>
|
||||
<div className="count">{currentProofreadTotal}</div>
|
||||
<div className="text">全部</div>
|
||||
</div>
|
||||
{ProofreadTypeData.map((currentType, activeType) => (
|
||||
// 只显示有错误的项
|
||||
proofreadResult?.abnormalCount[currentType.key] ?
|
||||
<div key={activeType} onClick={() => handleTypeChange(currentType)}
|
||||
className={`item ${state.currentType?.key == currentType.key ? 'active' : ''}`}>
|
||||
<div className="count"
|
||||
style={{color: currentType.color}}>{proofreadResult?.abnormalCount[currentType.key] || 0}</div>
|
||||
<div className="text">{currentType.text}</div>
|
||||
</div> : null
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>)
|
||||
}
|
||||
export default ProofreadPanel;
|
@ -1,73 +0,0 @@
|
||||
import React from "react";
|
||||
import {Button} from "antd";
|
||||
import IdleImage from "./../images/icon-idle.png"
|
||||
import PerfectImg from "./../images/icon-perfect.png"
|
||||
|
||||
export type TProofreadState = 'idle' | 'processing' | 'perfect' | 'edit' | 'analyzing'
|
||||
type PanelRightStateProp = {
|
||||
state: TProofreadState;
|
||||
proofreadEndTime?: number;
|
||||
onBack?:()=>void;
|
||||
}
|
||||
|
||||
// 状态配置
|
||||
const StateConfig: {
|
||||
[key in TProofreadState]: {image: string, text: string} | null
|
||||
} = {
|
||||
'idle': {image: IdleImage, text: '在左侧输入内容开始校验'},
|
||||
'processing': {image: IdleImage, text: '正在校验中'},
|
||||
'edit': {image: IdleImage, text: '正在编辑中'},
|
||||
'perfect': null,
|
||||
'analyzing': null,
|
||||
}
|
||||
|
||||
const StateElement = ({state}: PanelRightStateProp) => {
|
||||
return (<div className="proofread-state-idle">
|
||||
<div className="image">
|
||||
<img src={StateConfig[state]?.image} alt={state} style={{width: 159}}/>
|
||||
</div>
|
||||
<div className="desc-title fz-large"><strong>专业校验工具</strong></div>
|
||||
<div className="desc">全面检查语义、语法、敏感词、标点符号等问题</div>
|
||||
<div className="notice tz-title">{StateConfig[state]?.text}</div>
|
||||
</div>)
|
||||
}
|
||||
|
||||
const Perfect = () => (<div className="proofread-state-perfect">
|
||||
<div className="image">
|
||||
<img src={PerfectImg} alt="perfect"/>
|
||||
</div>
|
||||
<div className="desc">非常完美</div>
|
||||
</div>)
|
||||
|
||||
const Analyzing = (props:PanelRightStateProp) => (<div className="proofread-state-analyzing text-center">
|
||||
<div className="remain">
|
||||
{props.proofreadEndTime === -2 ?<div className="remain-title">排队校对中...</div>:<>
|
||||
<div className="remain-title">预计还有</div>
|
||||
<div className="remain-time">
|
||||
<span className="value">{Math.round(props.proofreadEndTime! / 1000)}</span>
|
||||
<span className="unit">秒</span>
|
||||
</div>
|
||||
</>}
|
||||
</div>
|
||||
<div className="control">
|
||||
<div className="remain-text">
|
||||
<b>校对时间太长?</b>
|
||||
<div className="small">返回文稿同样可查看进度</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="back-to-document">
|
||||
<Button onClick={props.onBack} type={'primary'}>返回文稿</Button>
|
||||
</div>
|
||||
</div>)
|
||||
|
||||
const PanelElement = ({state,onBack,proofreadEndTime}: PanelRightStateProp)=>{
|
||||
if(state === 'perfect') return <Perfect/>;
|
||||
if(state === 'analyzing') return <Analyzing proofreadEndTime={proofreadEndTime} state={state} onBack={onBack}/>;
|
||||
return <StateElement state={state}/>;
|
||||
}
|
||||
|
||||
export const PanelRightState: React.FC<PanelRightStateProp> = (props) => (
|
||||
<div className="panel-right-state-wrapper">
|
||||
<PanelElement proofreadEndTime={props.proofreadEndTime} state={props.state} onBack={props.onBack}/>
|
||||
</div>
|
||||
)
|
@ -1,70 +0,0 @@
|
||||
import {
|
||||
ProofreadTypeEnum,
|
||||
TCorrectedContent,
|
||||
TDocumentContentDetail, TProofreadCountResult,
|
||||
} from "@/service/types/document.ts";
|
||||
import {ProofreadTypeData, ProofreadTypeKeys} from "@/types/proofread.ts";
|
||||
import {int} from "@/service/types/base.ts";
|
||||
|
||||
function getTypeData(type: ProofreadTypeEnum) {
|
||||
return ProofreadTypeData.find(s => Array.isArray(s.id) ? s.id.includes(type) : s.id == type)
|
||||
}
|
||||
|
||||
|
||||
export function buildProofreadResult(document: TDocumentContentDetail) {
|
||||
let offset = 0;
|
||||
let paragraph_offset = 1;
|
||||
document.correctedSet.forEach((item) => {
|
||||
item.offset = offset;//Math.ceil(item.offset) + offset;
|
||||
offset += item.insert_len;
|
||||
item.diffs?.forEach(it => {
|
||||
// it.start += item.offset + 1
|
||||
// it.end += item.offset + 1
|
||||
it.typeData = getTypeData(it.type)
|
||||
it.color = '#80D6AA69';//it.typeData?.color;
|
||||
})
|
||||
if (item.insert?.length > 1 && (item.insert.startsWith("\f") || item.insert.startsWith("\n"))) {
|
||||
paragraph_offset++;
|
||||
}
|
||||
// 当前是第几段
|
||||
item.paragraph_offset = paragraph_offset;
|
||||
// item.paragraph_num = paragraph_offset;
|
||||
if (item.insert.endsWith("\n") || item.insert.endsWith("\f")) {
|
||||
paragraph_offset++;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 解析并处理校对结果
|
||||
export function parseProofreadResult(document: TDocumentContentDetail, disabled: number[] = []) {
|
||||
const parseData = [];
|
||||
const resultList: TCorrectedContent[] = [];
|
||||
|
||||
const abnormalCount: {
|
||||
[key: string]: int
|
||||
} = {
|
||||
total: 0
|
||||
};
|
||||
|
||||
// 遍历内容
|
||||
document.correctedSet.forEach((item) => {
|
||||
item.diffs?.forEach(it => {
|
||||
// it.start += item.offset + 1
|
||||
// it.end += item.offset + 1
|
||||
// it.typeData = getTypeData(it.type)
|
||||
// it.color = it.typeData?.color;
|
||||
if (disabled.includes(it.id)) return;
|
||||
resultList.push(it)
|
||||
const type = ProofreadTypeKeys[it.type];
|
||||
if (!abnormalCount[type]) abnormalCount[type] = 0;
|
||||
abnormalCount['total']++;
|
||||
abnormalCount[type]++;
|
||||
})
|
||||
})
|
||||
|
||||
return {
|
||||
parseData,
|
||||
resultList,
|
||||
abnormalCount: abnormalCount as TProofreadCountResult
|
||||
}
|
||||
}
|
@ -1,179 +0,0 @@
|
||||
import React, {useMemo} from "react";
|
||||
import {RightOutlined} from "@ant-design/icons";
|
||||
import {Popover, Space} from "antd";
|
||||
import {css} from "@emotion/css";
|
||||
import {DropdownMenu} from "@/components/popover/dropdown-menu";
|
||||
import {
|
||||
ProofreadStateEnum,
|
||||
ProofreadTypeEnum,
|
||||
TCorrectedContent,
|
||||
} from "@/service/types/document";
|
||||
import {showToast} from "@/components/messages/Modal.tsx";
|
||||
import {whitelist} from "@/service/api/lexicon.ts";
|
||||
import {useSetState} from "ahooks";
|
||||
import {
|
||||
IconAccept,
|
||||
IconDotMore2,
|
||||
IconIgnore,
|
||||
IconPlus,
|
||||
IconReview,
|
||||
SvgIcon
|
||||
} from "./icons.tsx";
|
||||
|
||||
|
||||
export type ActionKey = 'click' | 'accept' | 'acceptAll' | 'ignore' | 'ignoreAll' | 'addToLexicon' | 'review' | 'redo'
|
||||
type ProofreadItemProps = {
|
||||
selected?: boolean;
|
||||
className?: string | undefined;
|
||||
previewMode?: boolean;
|
||||
last?: boolean;
|
||||
onAction: (key: ActionKey) => void
|
||||
it: TCorrectedContent
|
||||
index?: number;
|
||||
}
|
||||
|
||||
const ActionToolTip = (props: {open?:boolean; text: string; children: React.ReactNode }) => (
|
||||
<Popover
|
||||
open={props.open}
|
||||
overlayClassName="black-bg"
|
||||
content={props.text}
|
||||
>{props.children}</Popover>)
|
||||
|
||||
function getDescription(it: TCorrectedContent) {
|
||||
// 获取类型数据
|
||||
// const typeData = getTypeData(it.type)!;
|
||||
|
||||
const str = [`【${it.typeData?.text}】`]
|
||||
if (it.typeData?.type === 'black' || it.type == ProofreadTypeEnum.sensitive) {
|
||||
str.push('请复核',it.tag == 'r' && !/^[*]+$/.test(it.text) ?`,将选用"${it.text}"`:'')
|
||||
} else if (it.tag == 'r') {
|
||||
str.push(`建议选用"${it.text}"`)
|
||||
} else {
|
||||
str.push('建议' + (it.tag == 'd' ? '删除' : '新增'))
|
||||
}
|
||||
return str.join('');
|
||||
// return typeData?.text ? typeData?.text + ',' : ''}{props.it.tag == 'r' ? `选用"${props.it.text}"` : (
|
||||
// it.tag == 'd' ? '删除' : '新增'
|
||||
}
|
||||
|
||||
export const ProofreadItem: React.FC<ProofreadItemProps> = (props) => {
|
||||
|
||||
const requireReview = useMemo(() => {
|
||||
// 敏感词或者要拦截的黑名单
|
||||
return props.it.type == ProofreadTypeEnum.sensitive || props.it.type == ProofreadTypeEnum.blackWordBlock || (
|
||||
props.it.type == ProofreadTypeEnum.blackWord
|
||||
&& props.it.tag == 'r'
|
||||
&& /^[*]+$/.test(props.it.text)
|
||||
);
|
||||
}, [props.it])
|
||||
|
||||
// 当前类别颜色
|
||||
const colorStyle = css`--proofread-color: ${props.it.typeData?.color || '#000000'}`
|
||||
const [state, setState] = useSetState({
|
||||
addToLexiconVisible: true
|
||||
})
|
||||
|
||||
// 添加到词库
|
||||
const handleAddToLexicon = () => {
|
||||
whitelist.create({
|
||||
word: props.it.origin
|
||||
}).then(() => {
|
||||
showToast('加入白名单成功', 'success');
|
||||
// 隐藏添加按钮
|
||||
setState({
|
||||
addToLexiconVisible: false
|
||||
})
|
||||
}).catch((e) => {
|
||||
console.log(e);
|
||||
showToast('加入白名单失败', 'warning')
|
||||
})
|
||||
}
|
||||
// const handleUndo = async () => {
|
||||
// showToast('撤销成功')
|
||||
// }
|
||||
const AddToLexiconButton = ({disabled}:{disabled:boolean}) => {
|
||||
const AddButton = <button disabled={disabled} className="btn btn-add-to-lexicon" onClick={handleAddToLexicon}>
|
||||
<SvgIcon component={IconPlus}/>
|
||||
</button>;
|
||||
return (props.selected && state.addToLexiconVisible && props.it.type != ProofreadTypeEnum.blackWord) ?
|
||||
disabled ? AddButton : (<ActionToolTip text="加入白名单">
|
||||
{AddButton}
|
||||
</ActionToolTip>) : null
|
||||
}
|
||||
return (<>
|
||||
<div
|
||||
onClick={() => props.onAction('click')}
|
||||
className={`proofread-item ${props.it.isAccept == ProofreadStateEnum.Default?'':'processed'} proofread-action-${props.it.action} proofread-item-${props.it.id} ${props.className} ${colorStyle} item ${props.selected ? 'select' : ''}`}>
|
||||
<div className="info">
|
||||
<div className="text d-flex align-center">
|
||||
<span className="origin">{
|
||||
props.it.tag == 'i' ? props.it.text : (
|
||||
props.it.origin == ' ' ? '空格' : props.it.origin
|
||||
)
|
||||
}</span>
|
||||
{
|
||||
props.it.type == ProofreadTypeEnum.blackWord ?
|
||||
<span className="action-text">黑名单</span> : (props.it.typeData?.type == 'sensitive' ?
|
||||
<span className="action-text">敏感词</span> : (props.it.tag == 'r'
|
||||
? <>
|
||||
<span className="arrow"><RightOutlined/></span>
|
||||
<span className="replaced">{props.it.text}</span>
|
||||
</>
|
||||
: <span className="action-text">{props.it.tag == 'd' ? '删除' : '新增'}</span>))
|
||||
|
||||
}
|
||||
</div>
|
||||
<div className="description">
|
||||
{getDescription(props.it)}
|
||||
</div>
|
||||
</div>
|
||||
{!props.previewMode && <div className="action align-center">
|
||||
{props.selected && (props.it.isAccept == ProofreadStateEnum.Default) && <Space align={'center'}>
|
||||
{!requireReview && <ActionToolTip text="采纳">
|
||||
<button className="btn btn-accept" onClick={() => props.onAction('accept')}>
|
||||
<SvgIcon component={IconAccept}/>
|
||||
</button>
|
||||
</ActionToolTip>}
|
||||
{requireReview && <ActionToolTip text="复核">
|
||||
<button className="btn btn-review" onClick={() => props.onAction('review')}>
|
||||
<SvgIcon component={IconReview}/>
|
||||
</button>
|
||||
</ActionToolTip>}
|
||||
<ActionToolTip text="忽略">
|
||||
<button className="btn btn-odd btn-ignore" onClick={() => props.onAction('ignore')}>
|
||||
<SvgIcon component={IconIgnore}/>
|
||||
</button>
|
||||
</ActionToolTip>
|
||||
<AddToLexiconButton disabled={requireReview}/>
|
||||
<DropdownMenu
|
||||
theme="dark"
|
||||
items={!requireReview ? [
|
||||
{key: 'acceptAll', label: '采纳全部相同结果', onClick: () => props.onAction('acceptAll')},
|
||||
{type: 'divider'},
|
||||
{key: 'accept', label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')},
|
||||
] : [{key: 'accept', label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')}]}
|
||||
>
|
||||
<div className="more-action"><SvgIcon component={IconDotMore2} size={12}/></div>
|
||||
</DropdownMenu>
|
||||
</Space>}
|
||||
{props.it.isAccept != ProofreadStateEnum.Default &&
|
||||
<div className="processed-wrapper align-center">
|
||||
{props.it.isAccept == ProofreadStateEnum.Accept && <div className="state-accept align-center">
|
||||
<SvgIcon component={IconAccept}/>
|
||||
<span className="ml-2">已采纳</span>
|
||||
</div>}
|
||||
{props.it.isAccept == ProofreadStateEnum.Review &&
|
||||
<div className="state-accept state-review align-center">
|
||||
<SvgIcon component={IconReview}/>
|
||||
<span className="ml-2">已复核</span>
|
||||
</div>}
|
||||
{props.it.isAccept == ProofreadStateEnum.Ignore && <div className="state-ignore align-center">
|
||||
<SvgIcon component={IconIgnore}/>
|
||||
<span className="ml-2">已忽略</span>
|
||||
</div>}
|
||||
</div>}
|
||||
</div>}
|
||||
</div>
|
||||
{props.selected && !props.last && <div className={'selected-line'}></div>}
|
||||
</>)
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
import {IDocumentCorrect, IDocumentDetail, IDocumentProofread} from "@/types/document";
|
||||
import {IProofreadResult, ProofreadTypeEnum} from "./types.ts";
|
||||
|
||||
type Range = {
|
||||
start:number;
|
||||
end:number;
|
||||
}
|
||||
export function inRange(a:Range,b:Range){
|
||||
if(a.start == b.start && a.end == b.end) return true;
|
||||
// check a in b
|
||||
if(
|
||||
a.start >= b.start &&
|
||||
a.start <= b.end &&
|
||||
a.end >= b.start &&
|
||||
a.end <= b.end
|
||||
) return true;
|
||||
// check b in a
|
||||
if (
|
||||
b.start >= a.start &&
|
||||
b.start <= a.end &&
|
||||
b.end >= a.start &&
|
||||
b.end <= a.end
|
||||
) return true
|
||||
return false;
|
||||
}
|
||||
function buildProofreadResult(correct: IDocumentProofread[], block: IDocumentCorrect, document: IDocumentDetail) {
|
||||
const blockCorrect: IProofreadResult[] = [];
|
||||
correct.forEach(item => {
|
||||
// 处理涉政类型数据
|
||||
const result: IProofreadResult = {
|
||||
...item,
|
||||
key: block.key,
|
||||
document_id: document.id,
|
||||
leader: item.type === ProofreadTypeEnum.leader ? document.leaders[item.mid] : undefined,
|
||||
position: item.type === ProofreadTypeEnum.position ? document.positions[item.mid] : undefined,
|
||||
quotation: item.type === ProofreadTypeEnum.quotation ? document.quotations[item.mid] : undefined,
|
||||
relation:[]
|
||||
}
|
||||
for (const block of blockCorrect) {
|
||||
if (inRange(result,block)) {
|
||||
result.relation?.push(block)
|
||||
block.relation?.push(result)
|
||||
// if(result.tag != block.tag)
|
||||
blockCorrect.push(result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
blockCorrect.push(result);
|
||||
});
|
||||
|
||||
return blockCorrect;
|
||||
}
|
||||
|
||||
export function parseProofreadList(document: IDocumentDetail) {
|
||||
const result = document.correctedSet.filter(s => s.ranges && s.ranges.length > 0)
|
||||
.map(s => buildProofreadResult(s.ranges!, s, document));
|
||||
// console.log(result)
|
||||
return result.flat()
|
||||
}
|
@ -1,202 +0,0 @@
|
||||
export enum ProofreadTypeStatusEnum {
|
||||
// 默认,未处理?
|
||||
Default,
|
||||
// 已采纳
|
||||
Accept = 2,
|
||||
// 已忽略
|
||||
Ignore,
|
||||
// 已复核
|
||||
Audited
|
||||
}
|
||||
export type EditorProofreadFormat = {
|
||||
id: string|number;
|
||||
suggest?: ProofreadTypeStatusEnum;
|
||||
tag: string;
|
||||
start: any;
|
||||
end: any;
|
||||
current: string
|
||||
}
|
||||
// 编辑器
|
||||
export type SelectionEditorProofread = {
|
||||
proofread?:EditorProofreadFormat;
|
||||
insert?:EditorProofreadFormat;
|
||||
replace?:EditorProofreadFormat;
|
||||
delete?:EditorProofreadFormat;
|
||||
leader?:EditorProofreadFormat;
|
||||
position?:EditorProofreadFormat;
|
||||
quotation?:EditorProofreadFormat;
|
||||
}
|
||||
|
||||
// 校对分类
|
||||
export enum ProofreadTypeEnum {
|
||||
characterError = 2,
|
||||
/**
|
||||
* 易错词
|
||||
*/
|
||||
confusion = 18,
|
||||
/**
|
||||
* 语录
|
||||
*/
|
||||
quotation = 16,
|
||||
/**
|
||||
* 领导人
|
||||
*/
|
||||
leader = 17,
|
||||
/**
|
||||
* 黑名单
|
||||
*/
|
||||
blacklist = 20,
|
||||
/**
|
||||
* 标点
|
||||
*/
|
||||
punctuation = 22,
|
||||
/**
|
||||
* 敏感词
|
||||
*/
|
||||
sensitive = 19,
|
||||
/**
|
||||
* 白名单
|
||||
*/
|
||||
whitelist = 21,
|
||||
/**
|
||||
* 职位
|
||||
*/
|
||||
position = 23,
|
||||
/**
|
||||
* 其他模型
|
||||
*/
|
||||
model = 24,
|
||||
}
|
||||
|
||||
export interface IPositionInfo {
|
||||
leaders: string[];
|
||||
position: string;
|
||||
}
|
||||
|
||||
export interface IQuotationInfo {
|
||||
category: string;
|
||||
content: string;
|
||||
document_name: string;
|
||||
hypelink: string;
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface ILeaderInfo {
|
||||
name?: string;
|
||||
correct_name: string;
|
||||
positions: string[];
|
||||
sort_error?: any;
|
||||
}
|
||||
|
||||
export interface IProofreadResult {
|
||||
tag: 'r' | 'd' | 'i' | string;
|
||||
old: string;
|
||||
new: string;
|
||||
start: number;
|
||||
end: number;
|
||||
id: number;
|
||||
// 文档编号
|
||||
document_id: number;
|
||||
idx: number;
|
||||
// 对应句子hash
|
||||
key: string;
|
||||
suggest: ProofreadTypeStatusEnum;
|
||||
// 对应领导 语录等的索引
|
||||
mid: number;
|
||||
type: ProofreadTypeEnum;
|
||||
// 关联领导数据
|
||||
leader?: ILeaderInfo;
|
||||
// 关联职位数据
|
||||
position?: IPositionInfo;
|
||||
// 关联语录数据
|
||||
quotation?: IQuotationInfo;
|
||||
// 关联数据
|
||||
relation?:IProofreadResult[];
|
||||
}
|
||||
|
||||
export type IProofreadTypeData = {
|
||||
type: string,
|
||||
key: string;
|
||||
color: string;
|
||||
text: string;
|
||||
count?: number;
|
||||
id: ProofreadTypeEnum | ProofreadTypeEnum[];
|
||||
// 采纳全部时要提交的类型
|
||||
acceptAll?: ProofreadTypeEnum[];
|
||||
// 忽略全部时要提交的类型
|
||||
ignoreAll?: ProofreadTypeEnum[];
|
||||
}
|
||||
export const ProofreadTypeData: IProofreadTypeData[] = [
|
||||
{
|
||||
id: [ProofreadTypeEnum.blacklist],
|
||||
type: 'black',
|
||||
acceptAll: [ProofreadTypeEnum.blacklist],
|
||||
ignoreAll: [ProofreadTypeEnum.blacklist],
|
||||
count: 0,
|
||||
text: '黑名单',
|
||||
color: '#2A2A2A',
|
||||
key: 'blacklist'
|
||||
},
|
||||
|
||||
{id: ProofreadTypeEnum.whitelist, type: 'unit', count: 0, text: '白名单', color: '#77F1AE', key: 'whitelistError'},
|
||||
{id: ProofreadTypeEnum.confusion, type: 'confusion', count: 0, text: '易错词', color: '#D6AA69', key: 'confusion'},
|
||||
{
|
||||
id: ProofreadTypeEnum.punctuation,
|
||||
type: 'symbol',
|
||||
count: 0,
|
||||
text: '标点错',
|
||||
color: '#558CB7',
|
||||
key: 'punctuationError'
|
||||
},
|
||||
{id: ProofreadTypeEnum.sensitive, type: 'sensitive', count: 0, text: '敏感词', color: '#e971ba', key: 'sensitive'},
|
||||
{
|
||||
id: ProofreadTypeEnum.characterError,
|
||||
type: 'character',
|
||||
count: 0,
|
||||
text: '易错词',
|
||||
color: '#e971ba',
|
||||
key: 'characterError'
|
||||
},
|
||||
{id: ProofreadTypeEnum.model, type: 'model', count: 0, text: '其他错误', color: '#E9D0A7', key: 'model'},
|
||||
|
||||
{id: ProofreadTypeEnum.quotation, type: 'quotation', count: 0, text: '语录', color: '#29CEC0', key: 'quotation'},
|
||||
{id: ProofreadTypeEnum.leader, type: 'leader', count: 0, text: '政要人物', color: '#c9c9c9', key: 'leader'},
|
||||
{id: ProofreadTypeEnum.position, type: 'position', count: 0, text: '职位', color: '#CDAFE5', key: 'positionError'},
|
||||
]
|
||||
|
||||
export type ProofreadStatusType = 'all'| 'error'| 'sensitive'| 'blacklist'| 'politics'
|
||||
|
||||
export const ProofreadTypeConfig: {
|
||||
[key in ProofreadStatusType]: ProofreadTypeEnum[]
|
||||
} = {
|
||||
all: [],
|
||||
error: [
|
||||
ProofreadTypeEnum.punctuation,
|
||||
ProofreadTypeEnum.characterError,
|
||||
ProofreadTypeEnum.confusion,
|
||||
ProofreadTypeEnum.model
|
||||
],
|
||||
sensitive: [
|
||||
ProofreadTypeEnum.sensitive
|
||||
],
|
||||
blacklist: [
|
||||
ProofreadTypeEnum.blacklist
|
||||
],
|
||||
politics: [
|
||||
ProofreadTypeEnum.leader,
|
||||
ProofreadTypeEnum.quotation,
|
||||
ProofreadTypeEnum.position,
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
export type ProofreadItemActions =
|
||||
'ignore'
|
||||
| 'adopt'
|
||||
| 'review'
|
||||
| 'revoke'
|
||||
| 'addToLexicon'
|
||||
| 'undo'
|
||||
| 'revokeAll'
|
||||
| 'acceptAll'
|
||||
| 'ignoreAll';
|
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 490 B |
Before Width: | Height: | Size: 476 B |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 408 B |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 508 B |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 47 KiB |
@ -1,437 +0,0 @@
|
||||
import {useDebounceFn, useRequest} from "ahooks";
|
||||
import React, {useEffect, useState} from "react";
|
||||
|
||||
import {useBridge, useBridgeMessageListener} from "@/core/bridge.ts";
|
||||
|
||||
import ProofreadPanel from "./components";
|
||||
import './components/home-proofread.less'
|
||||
import {
|
||||
ProofreadLoading,
|
||||
ProofreadError,
|
||||
ProofreadPerfect,
|
||||
} from "./notice.tsx";
|
||||
import {useUserinfoStore} from "@/service/userinfoStore.ts";
|
||||
import {proofread, create, save, proofreadDetail} from "@/service/api/document.ts";
|
||||
import {calcContentLengthLikeWord, formatTime, hidePhone} from "@/utils/strings.ts";
|
||||
import {getAuthCode} from "@/service/api/user.ts";
|
||||
import {TDocumentContentDetail} from "@/service/types/document.ts";
|
||||
import {AppUpgradeInfo, Settings, UpgradeInfo} from "@/service/types/settings.ts";
|
||||
import {compareVersion, getAppUpgradeInfo, getSettings} from "@/service/api/settings.ts";
|
||||
import {buildProofreadResult} from "./components/parse-proofread-result.ts";
|
||||
// import FakeDocument1862 from "../../service/fake/doc-2236.ts";
|
||||
// import {cloneDeep} from "../../utils/cloneDeep.ts";
|
||||
// import {sleep} from "../../utils/sleep.ts";
|
||||
|
||||
// 数据 主要是保存当前文档id
|
||||
const CACHE_DATA: {
|
||||
DOC_ID: number;
|
||||
timer: number | null | undefined | object | object;
|
||||
userinfo?: Account;
|
||||
upgradeInfo: AppUpgradeInfo;
|
||||
clearTimer: () => void;
|
||||
} = {
|
||||
DOC_ID: 0,
|
||||
userinfo: undefined,
|
||||
upgradeInfo: {},
|
||||
timer: null,
|
||||
clearTimer: () => {
|
||||
if (CACHE_DATA.timer) {
|
||||
clearTimeout(Number(CACHE_DATA.timer))
|
||||
CACHE_DATA.timer = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const progressConfig = {
|
||||
start: 30,
|
||||
rangeUp: 20
|
||||
};
|
||||
|
||||
export default function Home() {
|
||||
const {userinfo: globalUser, logout, init} = useUserinfoStore()
|
||||
const {bridge} = useBridge();
|
||||
const [userinfo, setUserinfo] = useState<Account>()
|
||||
const [proofreadProgress, setProofreadProgress] = useState<number>(-1);
|
||||
const [disabledList,setDisabledList] = useState<number[]>([])
|
||||
// const [currentDocumentId,setCurrentDocumentId] = useState(0);
|
||||
|
||||
// 获取文档内容
|
||||
const getDocumentData = async () => {
|
||||
const content = await bridge.getDocumentData();
|
||||
return JSON.parse(content) as DocumentData;
|
||||
};
|
||||
|
||||
|
||||
// 校对并获取校对结果
|
||||
const getProofreadData = (settings?: Settings) => {
|
||||
return new Promise<TDocumentContentDetail>((resolve, reject) => {
|
||||
let retryCount = 0;
|
||||
const getProofreadResult = (needSetTimeout = true) => {
|
||||
setProofreadProgress(99);
|
||||
// 获取结果
|
||||
proofreadDetail(CACHE_DATA.DOC_ID).then((data) => {
|
||||
CACHE_DATA.clearTimer();
|
||||
setProofreadProgress(100);
|
||||
setTimeout(() => {
|
||||
// setProofreadProgress(-1);
|
||||
resolve(data)
|
||||
}, 500)
|
||||
}).catch((e) => {
|
||||
const ex = e as BizError;
|
||||
if (ex.message == '文稿未完成校对' && needSetTimeout) {
|
||||
CACHE_DATA.clearTimer();
|
||||
CACHE_DATA.timer = setTimeout(getProofreadResult, 1500 + 2000 * Math.floor(retryCount / 10))
|
||||
retryCount ++;
|
||||
}
|
||||
})
|
||||
}
|
||||
const startCountDown = (current: number, count: number) => {
|
||||
// 倒计时最多到99 获取结果后再将进度设置为100
|
||||
if (current >= count - 1) {
|
||||
// 等待剩余时间后再次获取校对结果
|
||||
setTimeout(getProofreadResult, 2500)
|
||||
return;
|
||||
}
|
||||
if (current % 10 == 0) {
|
||||
getProofreadResult(false)
|
||||
}
|
||||
const p = Math.floor(current / count * 100);
|
||||
// fixed bug 51 当前校对进度条是先慢后快,体验不好。改成先快后慢,前50%进程快一些,逐渐变慢
|
||||
if (p >= progressConfig.start + progressConfig.rangeUp) setProofreadProgress(p);
|
||||
else setProofreadProgress(Math.floor(current / count * progressConfig.rangeUp) + progressConfig.start);
|
||||
// count down
|
||||
CACHE_DATA.timer = setTimeout(() => {
|
||||
startCountDown(current + 1, count)
|
||||
}, 1000)
|
||||
}
|
||||
setProofreadProgress(20);
|
||||
// 開始校對
|
||||
proofread(CACHE_DATA.DOC_ID, 1, settings).then(ret => {
|
||||
setProofreadProgress(30);
|
||||
if (ret.remainingTime > 0) {
|
||||
// 如果有剩余时间则
|
||||
//setTimeout(getProofreadResult, ret.remainingTime * 1000)
|
||||
// 计算进度
|
||||
startCountDown(1, ret.remainingTime);
|
||||
} else {
|
||||
setTimeout(getProofreadResult, 500)
|
||||
}
|
||||
}).catch(reject)
|
||||
})
|
||||
}
|
||||
const noteReg = /^\[footnoteRef:\d+\]|\[endnoteRef:\d+\]$/
|
||||
// 保存内容并校对
|
||||
const getContentAndProofread = async () => {
|
||||
try {
|
||||
setDisabledList([])
|
||||
CACHE_DATA.clearTimer();
|
||||
setProofreadProgress(2);
|
||||
const start = Date.now();
|
||||
const doc = await getDocumentData();
|
||||
if(doc.code != 0){
|
||||
setProofreadProgress(-1);
|
||||
bridge.ShowDialog(doc.message)
|
||||
return;
|
||||
}
|
||||
// setCurrentDocumentId(doc.documentId);
|
||||
const count = calcContentLengthLikeWord(doc.content.text)
|
||||
console.log('doc',count,doc,'get document data spent',Date.now() - start)
|
||||
// const fakeDoc = cloneDeep(FakeDocument1862)
|
||||
// if(fakeDoc.abnormalCount.total > 0){
|
||||
// bridge?.ShowCurrentPane();
|
||||
// setProofreadProgress(99);
|
||||
// buildProofreadResult(fakeDoc);
|
||||
// await sleep(0.2)
|
||||
// if(CACHE_DATA.DOC_ID < 1){
|
||||
// const bridgeDocId = Number((await bridge?.GetCurrentDocumentId()) || 0);
|
||||
// if(bridgeDocId > 0){
|
||||
// CACHE_DATA.DOC_ID = bridgeDocId;
|
||||
// }else {
|
||||
// CACHE_DATA.DOC_ID = 1000001;
|
||||
// bridge?.SetCurrentDocumentId(CACHE_DATA.DOC_ID);
|
||||
// }
|
||||
// }
|
||||
// await bridge?.InitContent(JSON.stringify(fakeDoc.correctedSet), CACHE_DATA.DOC_ID);
|
||||
// setProofreadProgress(-1)
|
||||
// // throw new Error('初始化校对项失败')
|
||||
// return fakeDoc;
|
||||
// }
|
||||
if (doc.content.list.length == 0) {
|
||||
resetProofreadData()
|
||||
// bridge?.showDialog('当前文档为空,无法进行校对')
|
||||
return;
|
||||
}
|
||||
|
||||
if (APP_CONFIG.ALLOW_MAX_COUNT > 0 && count > APP_CONFIG.ALLOW_MAX_COUNT) {
|
||||
// bridge?.showDialog('正在校对中,请稍后再试...')
|
||||
bridge?.ShowDialog('校对内容超过最大字数,请删减后再试...')
|
||||
return;
|
||||
}
|
||||
bridge?.ShowCurrentPane();
|
||||
|
||||
// 判断是否已经创建了文档id
|
||||
if (CACHE_DATA.DOC_ID <= 0) {
|
||||
// 避免无意刷新网页导致 id 丢失
|
||||
const bridgeDocId = Number((await bridge?.GetCurrentDocumentId()) || 0);
|
||||
if(bridgeDocId > 0){
|
||||
CACHE_DATA.DOC_ID = bridgeDocId;
|
||||
}else{
|
||||
const {info} = await create({
|
||||
name: doc.name || ('未命名文档-' + formatTime(Date.now(), 'MMDDHHmmss'))
|
||||
});
|
||||
CACHE_DATA.DOC_ID = info.id;
|
||||
bridge?.SetCurrentDocumentId(CACHE_DATA.DOC_ID);
|
||||
}
|
||||
}
|
||||
bridge?.clearAllProofreadMarkById(CACHE_DATA.DOC_ID);
|
||||
const content = doc.content.list
|
||||
// 过滤掉空行、特殊行
|
||||
.filter(it=>(it.Text.trim().length > 0 && !noteReg.test(it.Text)))
|
||||
.map(it => ({
|
||||
insert: it.Text.replace(/\[endnoteRef:\d+\]|\[footnoteRef:\d+\]/ig,' '),
|
||||
origin_text: it.Text,
|
||||
hash: it.Hash,
|
||||
insert_len: it.Text.length,
|
||||
paragraph_num: it.ParagraphNumber,
|
||||
}
|
||||
))
|
||||
await save(CACHE_DATA.DOC_ID, content);
|
||||
setProofreadProgress(5);
|
||||
const settings = await getSettings();
|
||||
setProofreadProgress(15);
|
||||
// fixed server bug at 240416 (cannot unmarshal string into Go struct field ProofreadReq.industry_publish of type int64)
|
||||
// 如果是数字类型,则转换为数字类型
|
||||
Object.keys(settings).forEach(key => {
|
||||
if (/^\d+$/.test(String(settings[key]))) {
|
||||
settings[key] = Number(settings[key])
|
||||
}
|
||||
})
|
||||
const result = await getProofreadData(settings);
|
||||
buildProofreadResult(result);
|
||||
const initSuccess = await bridge?.InitContent(JSON.stringify(result.correctedSet),CACHE_DATA.DOC_ID);
|
||||
if(initSuccess == 'true') {
|
||||
setProofreadProgress(-1)
|
||||
}else{
|
||||
throw new Error('初始化校对项失败')
|
||||
}
|
||||
return result;
|
||||
} catch (e) {
|
||||
console.log('getContentAndProofread error:',e)
|
||||
setProofreadProgress(-1);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 在系统浏览器中打开链接
|
||||
const openUrlInOSBrowser = async (key: 'document' | 'lexicon') => {
|
||||
const target = `${APP_CONFIG.WEB_PATH}/${key}?from=office-plugin`;
|
||||
if (!CACHE_DATA.userinfo) { // 没有登录直接跳转
|
||||
bridge.OpenUrlWithOsBrowser(target)
|
||||
return;
|
||||
}
|
||||
const {code} = await getAuthCode();
|
||||
const url = `${APP_CONFIG.WEB_PATH}/redirect?code=${code}&target=${encodeURIComponent(target)}`;
|
||||
bridge.OpenUrlWithOsBrowser(url)
|
||||
}
|
||||
// 校对
|
||||
const {
|
||||
data: document, loading,
|
||||
run: startProofread, error,
|
||||
mutate,
|
||||
} = useRequest(getContentAndProofread, {
|
||||
manual: true,
|
||||
onError: () => {
|
||||
//showToast('校对失败,请重试')
|
||||
}
|
||||
})
|
||||
const noticeLoginSuccess = () => {
|
||||
if (CACHE_DATA.userinfo) {
|
||||
setUserinfo(CACHE_DATA.userinfo)
|
||||
const user = {
|
||||
...CACHE_DATA.userinfo,
|
||||
nickname: hidePhone(CACHE_DATA.userinfo.nickname || CACHE_DATA.userinfo.phone),
|
||||
expiration: '企业内测版'
|
||||
}
|
||||
bridge?.loginSuccess(JSON.stringify(user))
|
||||
}
|
||||
}
|
||||
|
||||
// 如果已经登录 则通知登录成功
|
||||
useEffect(() => {
|
||||
if (globalUser || CACHE_DATA.userinfo) {
|
||||
if (globalUser) CACHE_DATA.userinfo = globalUser
|
||||
noticeLoginSuccess();
|
||||
}
|
||||
}, [globalUser])
|
||||
|
||||
const getOldVersionUpgradeInfo = (up: UpgradeInfo)=>{
|
||||
return {
|
||||
...up,
|
||||
clientType:up.client_type,
|
||||
appName:up.app_name,
|
||||
publishType:up.publish_type,
|
||||
upgradeType:up.upgrade_type,
|
||||
downloadUrl:up.download_url,
|
||||
isShowPop:up.is_show_pop,
|
||||
}
|
||||
}
|
||||
const getUpgradeInfo = (callback?: ()=>void)=>{
|
||||
bridge.GetAppVersion().then(version => {
|
||||
// 版本小于 1.0.11 直接提示
|
||||
if(compareVersion(version, '1.0.11') === -1){
|
||||
getAppUpgradeInfo(version).then(info => {
|
||||
// setUpgradeInfo(info)
|
||||
console.log(info)
|
||||
CACHE_DATA.upgradeInfo = info;
|
||||
if(callback){
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
if (info.upgradeAvailable && info.upgradeInfo.upgrade_type == 1) {
|
||||
bridge.ShowUpgrade(JSON.stringify(getOldVersionUpgradeInfo(info.upgradeInfo)))
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
useEffect(getUpgradeInfo, [])
|
||||
|
||||
// 开始校对
|
||||
const handleProofread = (force?: boolean) => {
|
||||
// 没有登录则显示登录
|
||||
if (!CACHE_DATA.userinfo && !force) {
|
||||
bridge?.ShowLoginForm("proofread")
|
||||
return;
|
||||
}
|
||||
startProofread();
|
||||
}
|
||||
// 避免来回乱跳
|
||||
const {run: setActiveBookMark} = useDebounceFn((id) => bridge?.SelectMarkById(id,CACHE_DATA.DOC_ID), {wait: 200,})
|
||||
const [currentSelectProofreadId, setCurrentSelectProofreadId] = useState<number>(0)
|
||||
const resetProofreadData = () => {
|
||||
CACHE_DATA.clearTimer();
|
||||
mutate({
|
||||
abnormalCount: {total: -1},
|
||||
correctedSet: [],
|
||||
})
|
||||
setProofreadProgress(-1)
|
||||
bridge?.clearAllProofreadMarkById(CACHE_DATA.DOC_ID);
|
||||
}
|
||||
const checkLoginAndContinue = (callback: () => void, action = 'normal') => {
|
||||
if (CACHE_DATA.userinfo) {
|
||||
callback()
|
||||
} else {
|
||||
init().then((account) => {
|
||||
if (account) {
|
||||
CACHE_DATA.userinfo = account
|
||||
callback()
|
||||
} else {
|
||||
bridge?.ShowLoginForm(action)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 监听插件通知
|
||||
useBridgeMessageListener(({Message, Data}) => {
|
||||
if (Message == 'start') {
|
||||
// 添加强制更新检测
|
||||
if (CACHE_DATA.upgradeInfo.upgradeAvailable && CACHE_DATA.upgradeInfo.upgradeInfo!.upgrade_type == 1) {
|
||||
// bridge.ShowUpgrade(JSON.stringify(CACHE_DATA.upgradeInfo.upgradeInfo))
|
||||
bridge.ShowUpgrade(JSON.stringify(getOldVersionUpgradeInfo(CACHE_DATA.upgradeInfo.upgradeInfo!)))
|
||||
return;
|
||||
}
|
||||
// 开始校对
|
||||
checkLoginAndContinue(handleProofread);
|
||||
// if (CACHE_DATA.userinfo) {
|
||||
// handleProofread()
|
||||
// } else {
|
||||
// init().then((account) => {
|
||||
// if (account) {
|
||||
// CACHE_DATA.userinfo = account
|
||||
// } else {
|
||||
// bridge?.ShowLoginForm('normal')
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
} else if (Message == 'upgrade') { // 升级信息
|
||||
if (!CACHE_DATA.upgradeInfo.upgradeAvailable) {
|
||||
bridge.ShowDialog("当前版本为最新版本,无需升级")
|
||||
return;
|
||||
}
|
||||
if (CACHE_DATA.upgradeInfo.upgradeInfo) {
|
||||
bridge.ShowUpgrade(JSON.stringify(getOldVersionUpgradeInfo(CACHE_DATA.upgradeInfo.upgradeInfo!)))
|
||||
// bridge.ShowUpgrade(JSON.stringify(CACHE_DATA.upgradeInfo.upgradeInfo))
|
||||
}
|
||||
} else if (Message == 'clear-tips') { // 显示词库
|
||||
resetProofreadData()
|
||||
bridge.HideCurrentPane() // 隐藏当前面板
|
||||
} else if (Message == 'show-setting') { // 显示设置
|
||||
checkLoginAndContinue(() => {
|
||||
bridge?.ShowSettingForm()
|
||||
}, 'setting');
|
||||
} else if (Message == 'show-lexicon') { // 显示词库
|
||||
openUrlInOSBrowser('lexicon').catch(console.error)
|
||||
} else if (Message == 'logout') { // 退出登录
|
||||
logout().then(() => {
|
||||
resetProofreadData()
|
||||
bridge?.Logout("async-info")
|
||||
})
|
||||
} else if (Message == 'async-logout') { // 同步注销登录
|
||||
resetProofreadData()
|
||||
CACHE_DATA.userinfo = undefined;
|
||||
} else if (Message == 'async-login-success') {
|
||||
init().then(console.log)
|
||||
} else if (Message == 'select-proofread') {
|
||||
const id = Number(Data)
|
||||
if (id > 0) setCurrentSelectProofreadId(id)
|
||||
} else if (Message == 'getParagraphTextByRange') {
|
||||
console.log('getParagraphTextByRange', Data)
|
||||
}else if(Message == 'disabled-proofread'){
|
||||
// console.log('disabled-proofread',Data)
|
||||
setDisabledList(Data as number[])
|
||||
//
|
||||
} else {
|
||||
console.log('App useBridgeMessageListener:', Message,Data)
|
||||
}
|
||||
})
|
||||
// const xxx = ()=>{
|
||||
// //169567 169569 169564
|
||||
// // setDisabledList(disabledList => [...disabledList,169564])
|
||||
// // setProofreadProgress(100)
|
||||
// const result = document?.correctedSet.filter(it=>it.diffs && it.diffs.length > 0).map(it=>{
|
||||
// it.diffs?.forEach(s=>{
|
||||
// console.log(s.idx,s,it.insert)
|
||||
// })
|
||||
// return it
|
||||
// });
|
||||
// console.log(
|
||||
// result,disabledList
|
||||
// )
|
||||
// }
|
||||
return (<div className={'proofread-panel'}>
|
||||
{userinfo && proofreadProgress > 0 && <ProofreadLoading progress={`${proofreadProgress}%`}
|
||||
onOpenWebDocument={() => openUrlInOSBrowser('document')}/>}
|
||||
{userinfo && !loading && error && <ProofreadError onStartProofread={handleProofread}
|
||||
onOpenWebDocument={() => openUrlInOSBrowser('document')}/>}
|
||||
{userinfo && !loading && !error && document && document.abnormalCount.total === 0 && <ProofreadPerfect/>}
|
||||
|
||||
{/*<div style={{position:'fixed',insetInline:0,insetBlockEnd:0,backgroundColor:'#fee',zIndex:999,padding:20}}>*/}
|
||||
{/*<button onClick={xxx}>xxx</button>*/}
|
||||
{/*</div>*/}
|
||||
|
||||
{(!userinfo || (!loading && !error)) && <ProofreadPanel
|
||||
document={document} userinfo={userinfo}
|
||||
disabledProofreadItemList={disabledList}
|
||||
onUpdateProofreadItem={(item) => {
|
||||
// 还原标签状态
|
||||
bridge?.processMark(item.id, item.isAccept)
|
||||
}}
|
||||
onSelectProofreadItem={(item) => {
|
||||
if (item) setActiveBookMark(item.id)
|
||||
}}
|
||||
onStartProofread={() => handleProofread()}
|
||||
selectedProofreadItemId={currentSelectProofreadId}
|
||||
/>}
|
||||
</div>)
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
import React from "react";
|
||||
import {Button, Space} from "antd";
|
||||
import Icon from "@ant-design/icons";
|
||||
import {ErrorNotice} from "./components/images/notice.tsx";
|
||||
import {IconLogo} from "./components/images/logo.tsx";
|
||||
import IconPerfect from "./images/perfect.png";
|
||||
|
||||
type NoticeProps = {
|
||||
onOpenWebDocument?: () => void;
|
||||
onStartProofread?: () => void;
|
||||
progress?: number | string;
|
||||
}
|
||||
|
||||
export function ProofreadLoading({progress}: NoticeProps) {
|
||||
// 加载中...
|
||||
// 这里可以添加自定义的加载中逻辑
|
||||
// 例如,显示一个加载动画或提示信息
|
||||
return (<div className={'proofread-loading-wrapper full-screen'}>
|
||||
<div className="loading-container">
|
||||
<div className="logo">
|
||||
<IconLogo/>
|
||||
</div>
|
||||
<div className="progress-container">
|
||||
<div className="progress-value">{progress}</div>
|
||||
<div className="progress-bar-container">
|
||||
<div className="progress-bar" style={{width: progress}}></div>
|
||||
</div>
|
||||
{/*<p>正在返回校对结果...</p>*/}
|
||||
</div>
|
||||
{/*<Space className={'waiting-tips'}>*/}
|
||||
{/* <InfoCircleOutlined/>*/}
|
||||
{/* <span>等得太久?您也可以<Button onClick={onOpenWebDocument} className={'btn'}*/}
|
||||
{/* type={'link'}>前往网页端</Button>查看该任务</span>*/}
|
||||
{/*</Space>*/}
|
||||
</div>
|
||||
|
||||
</div>)
|
||||
}
|
||||
|
||||
export function ProofreadError({onStartProofread, onOpenWebDocument}: NoticeProps) {
|
||||
// 加载中...
|
||||
// 这里可以添加自定义的加载中逻辑
|
||||
// 例如,显示一个加载动画或提示信息
|
||||
return (<div className={'proofread-notice-wrapper'}>
|
||||
<div className="error-container">
|
||||
<Space direction={'vertical'} size={'large'}>
|
||||
<div className="error-notice">
|
||||
<p className={'error-title'}>
|
||||
糟糕!校对出现了问题
|
||||
</p>
|
||||
<p>请重新进行校对或前往网页端查看</p>
|
||||
</div>
|
||||
<div className="error-image">
|
||||
<Icon component={ErrorNotice}/>
|
||||
</div>
|
||||
<Space direction={'vertical'} className={'buttons'} size={'middle'}>
|
||||
<Button block type={'primary'} onClick={onStartProofread}>重新校对</Button>
|
||||
<Button block onClick={onOpenWebDocument}>前往网页端</Button>
|
||||
</Space>
|
||||
</Space>
|
||||
</div>
|
||||
|
||||
</div>)
|
||||
}
|
||||
|
||||
export function ProofreadPerfect({onStartProofread, onOpenWebDocument}: NoticeProps) {
|
||||
return (<div className={'proofread-notice-wrapper'}>
|
||||
<div className="error-container">
|
||||
<Space direction={'vertical'} size={'large'}>
|
||||
<div className="perfect-image">
|
||||
<img style={{transform: 'translateX(15px)'}} src={IconPerfect} alt=""/>
|
||||
<p>
|
||||
<b style={{color:'#979797',fontSize:18}}>非常完美</b>
|
||||
</p>
|
||||
</div>
|
||||
</Space>
|
||||
</div>
|
||||
</div>);
|
||||
}
|
@ -1,106 +0,0 @@
|
||||
import {formatTime} from "../../../utils/strings.ts";
|
||||
import React from "react";
|
||||
import {TBlackLexiconItem, TWhitelistItem} from "@/service/types/lexicon.ts";
|
||||
import {ColumnGroupType, ColumnType} from "antd/es/table/interface";
|
||||
import {css} from "@emotion/css";
|
||||
|
||||
|
||||
export type LexiconType = TBlackLexiconItem | TWhitelistItem
|
||||
|
||||
export interface EditableCellProps extends React.HTMLAttributes<HTMLElement> {
|
||||
editing: boolean;
|
||||
dataIndex: string;
|
||||
title: any;
|
||||
inputType: 'number' | 'text' | 'select';
|
||||
record: LexiconType;
|
||||
index: number;
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
|
||||
|
||||
export type TableColumnType = {
|
||||
dataIndex?: string;
|
||||
editable?: boolean;
|
||||
} & (ColumnGroupType<LexiconType> | ColumnType<LexiconType>)
|
||||
|
||||
/**
|
||||
*
|
||||
* @param type 黑名单|白名单
|
||||
* @param indexRender 序号列
|
||||
* @param optionRender 操作列
|
||||
*/
|
||||
export function getColumns(
|
||||
type: 'white' | 'black',
|
||||
indexRender: (id: any, item: LexiconType, index: number) => React.ReactNode,
|
||||
optionRender: (_: any, item: LexiconType) => React.ReactNode
|
||||
) {
|
||||
const columns: TableColumnType[] = [
|
||||
{
|
||||
title: '序号',
|
||||
dataIndex: 'id',
|
||||
key: 'id',
|
||||
width: 100,
|
||||
render: indexRender
|
||||
},
|
||||
{
|
||||
title: type === 'white' ? '放行词' : '拦截词',
|
||||
dataIndex: 'word',
|
||||
width: 350,
|
||||
key: 'word',
|
||||
editable: true,
|
||||
},
|
||||
{
|
||||
title: '领域',
|
||||
dataIndex: 'type',
|
||||
width: 150,
|
||||
key: 'type',
|
||||
editable: true,
|
||||
render: (_, item: LexiconType) => {
|
||||
return '通用'
|
||||
}
|
||||
},
|
||||
|
||||
];
|
||||
if (type === 'black') {
|
||||
columns.push(...[
|
||||
{
|
||||
title: '操作建议',
|
||||
dataIndex: 'actionType',
|
||||
key: 'actionType',
|
||||
editable: true,
|
||||
width: 170,
|
||||
render: (_: any, item: LexiconType) => {
|
||||
return item.actionType == 1 ? '拦截' : '替换';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '替换词',
|
||||
dataIndex: 'replaceWord',
|
||||
key: 'replaceWord',
|
||||
width: 350,
|
||||
editable: true,
|
||||
render: (_: any, item: LexiconType) => {
|
||||
return item.actionType == 2 ? item.replaceWord : '';
|
||||
}
|
||||
}
|
||||
])
|
||||
}
|
||||
columns.push({
|
||||
title: '修改时间',
|
||||
dataIndex: 'utime',
|
||||
key: 'utime',
|
||||
className:css(`min-width:200px`),
|
||||
render: (_, item: LexiconType) => {
|
||||
return formatTime((item.utime || item.ctime || 0) * 1000);
|
||||
}
|
||||
})
|
||||
columns.push({
|
||||
title: '操作',
|
||||
key: 'operation',
|
||||
width: 200,
|
||||
render: optionRender
|
||||
})
|
||||
return columns
|
||||
}
|
||||
|
@ -1,119 +0,0 @@
|
||||
import {Button, Divider, Modal, Spin, Upload} from "antd";
|
||||
import React from "react";
|
||||
import {useBoolean, useSetState} from "ahooks";
|
||||
import {LoadingOutlined} from "@ant-design/icons";
|
||||
import type {UploadProps} from 'antd';
|
||||
import {blacklist, whitelist} from "@/service/api/lexicon.ts";
|
||||
import {showToast, useLoading} from "@/components/messages/Modal.tsx";
|
||||
import {TImportBlackResult} from "@/service/types/lexicon.ts";
|
||||
|
||||
type ImportFileProps = {
|
||||
visible?: boolean;
|
||||
onClose?: (refresh?: boolean) => void;
|
||||
type: 'white' | 'black';
|
||||
}
|
||||
const loadingIcon = <LoadingOutlined style={{fontSize: 36}} spin/>;
|
||||
type UploadResult = {
|
||||
onClose?: (refresh?: boolean) => void;
|
||||
result?: TImportBlackResult
|
||||
}
|
||||
const UploadResult: React.FC<UploadResult> = (props) => {
|
||||
return (<div className="import-file-result">
|
||||
<h2 className="text-center">批量导入词条</h2>
|
||||
<Divider dashed/>
|
||||
<h3 className="import-info">本次共导入 <span
|
||||
className="count">{props.result?.totalWords?.length|| 0}</span> 条,导入成功 <span
|
||||
className="count">{props.result?.words?.length || 0}</span> 条;</h3>
|
||||
<div className="import-message text-tip">
|
||||
{props.result?.repeatWords && props.result?.repeatWords.length > 0 &&
|
||||
<p>{props.result?.repeatWords.map(s => `"${s}"`).join(',')} 因重复被过滤</p>}
|
||||
{props.result?.formatErrorWords && props.result?.formatErrorWords.length > 0 &&
|
||||
<p>{props.result?.formatErrorWords.map(s => `"${s}"`).join(',')} 因格式错误被过滤</p>}
|
||||
</div>
|
||||
<div className="operations text-center" style={{marginTop: 50}}>
|
||||
<div>
|
||||
<Button type="primary" onClick={() => props.onClose?.(true)}>关闭</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>)
|
||||
}
|
||||
|
||||
export const ImportFileModal: React.FC<ImportFileProps> = (props) => {
|
||||
// const [loading,setLoading] = useState(false)
|
||||
const [loading, {set: setLoading}] = useBoolean(false)
|
||||
const [showResult, {setTrue}] = useBoolean(false);
|
||||
const [state, setState] = useSetState<{
|
||||
showResult?: boolean;
|
||||
loading?: boolean;
|
||||
result?: TImportBlackResult
|
||||
}>({});
|
||||
const downloadUrl = `https://staticplus.gachafun.com/aixiaodui/templates/${props.type}list.xlsx?s=${Math.random().toString(16).substring(2)}`;
|
||||
|
||||
const uploadProps: UploadProps = {
|
||||
multiple: false,
|
||||
maxCount: 1,
|
||||
accept: 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
// itemRender:()=>null,
|
||||
showUploadList: false,
|
||||
withCredentials: true,
|
||||
beforeUpload: (file) => {
|
||||
setState({loading: true})
|
||||
const upload = props.type === 'black' ? blacklist.import : whitelist.import
|
||||
upload(file)
|
||||
.then(result => {
|
||||
setState({
|
||||
showResult: true,
|
||||
result
|
||||
})
|
||||
})
|
||||
.catch(e => showToast(`导入失败(${e.message})`,'warning'))
|
||||
.finally(() => setState({loading: false}))
|
||||
return false;
|
||||
},
|
||||
};
|
||||
const downloading = useLoading();
|
||||
const downloadTemplate = async (e:React.MouseEvent<HTMLElement>)=>{
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
// downloading.show('下载中请稍等');
|
||||
chrome.webview.hostObjects.host.Download(downloadUrl);
|
||||
//await download(downloadUrl,`${props.type == 'white' ? '白名单' : '黑名单'}-模板.xlsx`)
|
||||
// downloading.close()
|
||||
}
|
||||
|
||||
return (<Modal
|
||||
maskClosable={false}
|
||||
open={props.visible}
|
||||
className="modal-import-file"
|
||||
destroyOnClose={true}
|
||||
onCancel={() => props.onClose?.(state.showResult)}
|
||||
footer={null}
|
||||
width={600}
|
||||
centered
|
||||
>
|
||||
{state.showResult ? <UploadResult result={state.result} onClose={props.onClose}/> :
|
||||
<Spin spinning={loading} tip={<div style={{marginTop: 20}}>导入中</div>} indicator={loadingIcon}>
|
||||
<div style={{padding: '30px 20px'}}>
|
||||
<h2 className="text-center">批量导入词条</h2>
|
||||
<Divider dashed/>
|
||||
<div className="import-description">
|
||||
1、请下载模板后,严格按照模板进行填写; <br/>
|
||||
2、仅支持“.xls/.xlsx”两种格式,每次导入的词条数量不超过1000个;<br/>
|
||||
3、词条不可重复,不可包含空格及逗号,不符合要求的词条将被自动过滤.
|
||||
</div>
|
||||
<div className="operations text-center" style={{marginTop: 40}}>
|
||||
<div>
|
||||
<Upload {...uploadProps}>
|
||||
<Button type="primary">上传文件</Button>
|
||||
</Upload>
|
||||
</div>
|
||||
<div style={{marginTop: 20}}>
|
||||
{/*<a download={`${props.type == 'white' ? '白名单' : '黑名单'}-模板.xlsx`}*/}
|
||||
{/* href={`${APP_CONFIG.PUBLIC_PATH == './'?'/':APP_CONFIG.PUBLIC_PATH}assets/templates/${props.type}list.xlsx`}>模板下载</a>*/}
|
||||
<a href={downloadUrl} onClick={downloadTemplate}>模板下载</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Spin>}
|
||||
</Modal>)
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
import {Button, Form, Input, Modal, Select, Space} from "antd";
|
||||
import React from "react";
|
||||
import {useBoolean, useSetState} from "ahooks";
|
||||
import {
|
||||
BlackCreateActionType,
|
||||
TBlackLexiconItem,
|
||||
TWhitelistItem
|
||||
} from "@/service/types/lexicon.ts";
|
||||
import {blacklist, whitelist} from "@/service/api/lexicon.ts";
|
||||
import {showToast} from "../../../components/messages/Modal.tsx";
|
||||
|
||||
type LexiconType = TWhitelistItem | TBlackLexiconItem;
|
||||
type SaveModalProps = {
|
||||
visible?: boolean;
|
||||
onClose?: (refresh?: boolean) => void;
|
||||
lexicon: LexiconType;
|
||||
type: 'white' | 'black'
|
||||
}
|
||||
|
||||
|
||||
const SuggestionList = [
|
||||
{value: 1, label: '拦截'},
|
||||
{value: 2, label: '替换'},
|
||||
]
|
||||
|
||||
export const ModifyModal: React.FC<SaveModalProps> = (props) => {
|
||||
const [loading, {set: setLoading}] = useBoolean(false)
|
||||
const [showResult, {setTrue}] = useBoolean(false);
|
||||
|
||||
const handleSubmit = () => {
|
||||
const params = form.getFieldsValue();
|
||||
// 执行保存
|
||||
const save = props.type == 'white' ? whitelist.modify : blacklist.modify;
|
||||
setLoading(true)
|
||||
save(props.lexicon.id, params as any).then(() => {
|
||||
showToast('修改名单成功', 'success');
|
||||
props.onClose?.(true)
|
||||
}).catch((e: BizError) => showToast(e.message || '修改名单失败','warning')).finally(() => setLoading(false))
|
||||
};
|
||||
|
||||
const [form] = Form.useForm<LexiconType>()
|
||||
const [state, setState] = useSetState<{
|
||||
actionType?: BlackCreateActionType
|
||||
}>({
|
||||
actionType: props.lexicon.actionType
|
||||
})
|
||||
|
||||
return (<Modal
|
||||
maskClosable={false}
|
||||
open={props.visible}
|
||||
className="modal-save-lexicon"
|
||||
destroyOnClose={true}
|
||||
onCancel={() => props.onClose?.()}
|
||||
footer={null}
|
||||
>
|
||||
<div className={`modify-modal-body`}>
|
||||
<h2 className="text-center">修改{props.type == 'white' ? '白' : '黑'}名单词条</h2>
|
||||
<Form
|
||||
labelCol={{span: 5}}
|
||||
wrapperCol={{span: 19}}
|
||||
className="search-form"
|
||||
form={form}
|
||||
onFinish={handleSubmit}
|
||||
initialValues={props.lexicon}
|
||||
>
|
||||
<Form.Item name="word" label={props.type == 'white' ? '放行词' : '拦截词'} rules={[{required: true}]}>
|
||||
<Input placeholder={`请输入${props.type == 'white' ? '放行词' : '拦截词'}`}/>
|
||||
</Form.Item>
|
||||
<Form.Item label={'领域'} name={"type"}>
|
||||
<Select
|
||||
className="w-full"
|
||||
options={[{value: 0, label: '通用'},]}
|
||||
/>
|
||||
</Form.Item>
|
||||
{props.type === 'black' && <Form.Item label={'操作建议'} name="actionType">
|
||||
<Select
|
||||
className="w-full"
|
||||
options={SuggestionList}
|
||||
onChange={actionType => setState({actionType})}
|
||||
/>
|
||||
</Form.Item>}
|
||||
|
||||
{props.type === 'black' && state.actionType == BlackCreateActionType.Replace && <Form.Item
|
||||
label={'替换词'} name="replaceWord"
|
||||
rules={[
|
||||
{required: true},
|
||||
({ getFieldValue }) => ({
|
||||
validator(_, value) {
|
||||
if (getFieldValue('word') === value) {
|
||||
return Promise.reject(new Error('拦截词与替换词相同'));
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
}),
|
||||
]}
|
||||
>
|
||||
<Input placeholder={`请输入替换词`}/>
|
||||
</Form.Item>
|
||||
}
|
||||
<div className="text-center">
|
||||
<Space size={20} className="mt-10">
|
||||
<Button className="btn-grey" onClick={() => props.onClose?.()}>取消</Button>
|
||||
<Button loading={loading} type="primary" htmlType="submit">保存</Button>
|
||||
</Space>
|
||||
</div>
|
||||
</Form>
|
||||
</div>
|
||||
</Modal>)
|
||||
}
|
@ -1,243 +0,0 @@
|
||||
import {Button, Input, Modal, Select, Space} from "antd";
|
||||
import React, {useState} from "react";
|
||||
import {useBoolean} from "ahooks";
|
||||
import {cloneDeep} from "lodash"
|
||||
import {
|
||||
BlackCreateActionType,
|
||||
TBatchCreateError,
|
||||
TCreateBatch
|
||||
} from "@/service/types/lexicon.ts";
|
||||
import {blacklist, whitelist} from "@/service/api/lexicon.ts";
|
||||
import {showToast} from "../../../components/messages/Modal.tsx";
|
||||
import {PlusOutlined} from "@ant-design/icons";
|
||||
|
||||
type SaveModalProps = {
|
||||
visible?: boolean;
|
||||
onClose?: (refresh?: boolean) => void;
|
||||
type: 'white' | 'black'
|
||||
}
|
||||
|
||||
type LexiconField = {
|
||||
words: string | number;
|
||||
type: string | number;
|
||||
suggestion: string | number;
|
||||
replace: string | number;
|
||||
}
|
||||
type LexiconFieldList = keyof LexiconField;
|
||||
type FieldValue = {
|
||||
value: string | number;
|
||||
message?: string;
|
||||
}
|
||||
type LexiconFieldItem = {
|
||||
[field in LexiconFieldList]: FieldValue
|
||||
};
|
||||
const defaultFieldRow = {
|
||||
words: {value: '', message: undefined},
|
||||
type: {value: 1, message: undefined},
|
||||
suggestion: {value: BlackCreateActionType.Delete, message: undefined},
|
||||
replace: {value: '', message: undefined},
|
||||
}
|
||||
const SuggestionList = [
|
||||
{value: 1, label: '拦截'},
|
||||
{value: 2, label: '替换'},
|
||||
]
|
||||
|
||||
export const SaveModal: React.FC<SaveModalProps> = (props) => {
|
||||
const [loading, {set: setLoading}] = useBoolean(false)
|
||||
const [showResult, {setTrue}] = useBoolean(false);
|
||||
|
||||
const [fieldList, setFieldList] = useState<LexiconFieldItem[]>([cloneDeep(defaultFieldRow)])
|
||||
const requireCheck = (row: LexiconFieldItem, key: string) => {
|
||||
// @ts-ignore
|
||||
const item = row[key] as FieldValue;
|
||||
if (!item.value) {
|
||||
item.message = '未填写'
|
||||
return false;
|
||||
}
|
||||
if(key == 'replace' && item.value == row.words.value){
|
||||
item.message = '拦截词与替换词相同';
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
const handleSubmit = () => {
|
||||
const values: LexiconField[] = []
|
||||
let hasError = false;
|
||||
const params: TCreateBatch = {
|
||||
words: [],
|
||||
actionTypes: [],
|
||||
replaceWords: [],
|
||||
}
|
||||
// 验证是否填写
|
||||
fieldList.forEach(row => {
|
||||
row.words.message = undefined;
|
||||
row.replace.message = undefined;
|
||||
if (!requireCheck(row, 'words')) hasError = true;
|
||||
if (props.type === 'black' && row.suggestion.value === BlackCreateActionType.Replace && !requireCheck(row, 'replace')) hasError = true;
|
||||
params.words.push(row.words.value as any);
|
||||
if (props.type == 'black') {
|
||||
params.actionTypes.push(row.suggestion.value as any);
|
||||
params.replaceWords.push(row.replace.value as any);
|
||||
}
|
||||
values.push({
|
||||
words: row.words.value,
|
||||
type: row.type.value,
|
||||
suggestion: row.suggestion.value,
|
||||
replace: row.replace.value,
|
||||
})
|
||||
})
|
||||
if (hasError) {
|
||||
setFieldList(cloneDeep(fieldList));
|
||||
return;
|
||||
}
|
||||
setFieldList(cloneDeep(fieldList));
|
||||
// 执行保存
|
||||
const save = props.type == 'white' ? whitelist.createBatch : blacklist.createBatch;
|
||||
setLoading(true)
|
||||
save(params).then(() => {
|
||||
resetData()
|
||||
showToast('添加成功','success');
|
||||
props.onClose?.(true)
|
||||
}).catch((e: BizError) => { //
|
||||
if (e.data && e.code == 2) {
|
||||
console.log('create e', e, e.data)
|
||||
//校验失败
|
||||
const data = e.data as TBatchCreateError[];
|
||||
data.forEach(it => {
|
||||
// 是否存在该词条
|
||||
if (!fieldList[it.index]) return;
|
||||
if (it.type !== 1) { // 拦截词
|
||||
if (props.type == 'black') {
|
||||
fieldList[it.index].replace.message = it.msg
|
||||
}
|
||||
} else {
|
||||
fieldList[it.index].words.message = it.msg
|
||||
}
|
||||
})
|
||||
setFieldList(cloneDeep(fieldList));
|
||||
return;
|
||||
}
|
||||
showToast(e.message || '批量添加名单失败','warning')
|
||||
}).finally(() => setLoading(false))
|
||||
};
|
||||
const resetData = () => {
|
||||
setFieldList([
|
||||
cloneDeep(defaultFieldRow)
|
||||
])
|
||||
}
|
||||
const addItem = () => {
|
||||
const item: LexiconFieldItem = cloneDeep(defaultFieldRow)
|
||||
console.log('addItem', item)
|
||||
setFieldList([
|
||||
...fieldList,
|
||||
item
|
||||
])
|
||||
}
|
||||
const removeItem = (index: number) => {
|
||||
if (fieldList.length == 1) return;
|
||||
const list = cloneDeep(fieldList)
|
||||
list.splice(index, 1)
|
||||
setFieldList(list);
|
||||
}
|
||||
const setFieldValue = (key: string, index: number, value: any) => {
|
||||
// @ts-ignore
|
||||
const item = fieldList[index][key] as FieldValue;
|
||||
item.value = value;
|
||||
setFieldList(cloneDeep(fieldList));
|
||||
}
|
||||
|
||||
return (<Modal
|
||||
maskClosable={false}
|
||||
open={props.visible}
|
||||
className="modal-save-lexicon"
|
||||
destroyOnClose={true}
|
||||
onCancel={() => props.onClose?.()}
|
||||
footer={null}
|
||||
width={props.type == 'white' ? 700 : 850}
|
||||
>
|
||||
<div className={`save-modal-body save-modal-${props.type}`}>
|
||||
<h2 className="text-center">添加{props.type == 'white' ? '白' : '黑'}名单词条</h2>
|
||||
<div className="table-wrapper text-tip">
|
||||
<div className="form-table">
|
||||
<div className="header table-row">
|
||||
<div className="item item-input item-words">{props.type == 'white' ? '放行词' : '拦截词'}</div>
|
||||
<div className="item item-type">词条类型</div>
|
||||
{props.type == 'black' && <>
|
||||
<div className="item item-suggestion">操作建议</div>
|
||||
<div className="item item-input item-replace">替换词</div>
|
||||
</>}
|
||||
<div className="item-operation"></div>
|
||||
</div>
|
||||
{fieldList.map((it, index) => (<div className="table-row" key={index}>
|
||||
<div className="item item-input item-words">
|
||||
<div className="form-item">
|
||||
<Input
|
||||
value={it.words.value}
|
||||
onChange={e => {
|
||||
setFieldValue('words', index, e.currentTarget.value)
|
||||
}}
|
||||
placeholder="请输入"
|
||||
className={it.words.message ? 'has-error' : ''}
|
||||
/>
|
||||
</div>
|
||||
<div className="validate-message">{it.words.message}</div>
|
||||
</div>
|
||||
<div className="item item-type">
|
||||
<div className="form-item">
|
||||
<Select
|
||||
className="w-full"
|
||||
onChange={value => setFieldValue('type', index, value)}
|
||||
value={it.type.value}
|
||||
options={[
|
||||
{value: 1, label: '通用'},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
<div className="validate-message">{it.type.message}</div>
|
||||
</div>
|
||||
{props.type === 'black' && <>
|
||||
<div className="item item-suggestion">
|
||||
<div className="form-item">
|
||||
<Select
|
||||
className="w-full"
|
||||
onChange={value => setFieldValue('suggestion', index, value)}
|
||||
value={it.suggestion.value}
|
||||
options={SuggestionList}
|
||||
/>
|
||||
</div>
|
||||
<div className="validate-message">{it.type.message}</div>
|
||||
</div>
|
||||
<div className="item item-input item-replace">
|
||||
<div className="form-item">
|
||||
<Input
|
||||
disabled={it.suggestion.value != BlackCreateActionType.Replace}
|
||||
value={it.replace.value}
|
||||
onChange={e => setFieldValue('replace', index, e.currentTarget.value)}
|
||||
placeholder={it.suggestion.value == 'rep' ? "请输入" : ''}
|
||||
className={it.replace.message ? 'has-error' : ''}
|
||||
/>
|
||||
</div>
|
||||
<div className="validate-message">{it.replace.message}</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
<div className="item-operation text-center">
|
||||
{fieldList.length > 1 &&
|
||||
<span className="pointer" onClick={() => removeItem(index)}>删除</span>}
|
||||
</div>
|
||||
</div>))}
|
||||
</div>
|
||||
<div className="text-right add-row">
|
||||
<Button type="default" className="btn-default-border" icon={<PlusOutlined />} onClick={addItem}>再来一条 </Button>
|
||||
</div>
|
||||
|
||||
<div className="text-center">
|
||||
<Space size={30}>
|
||||
<Button className="btn-grey" onClick={() => props.onClose?.()}>取消</Button>
|
||||
<Button loading={loading} type="primary" onClick={handleSubmit}>保存</Button>
|
||||
</Space>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>)
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
import {Tabs} from "antd";
|
||||
import {useState} from "react";
|
||||
import "./lexicon.less"
|
||||
import {Lexicon} from "./lexicon.tsx";
|
||||
import {useNavigate, useSearchParams} from "react-router-dom";
|
||||
import { AppTitleBar } from '@/components/app/title-bar.tsx';
|
||||
|
||||
export default function LexiconIndex() {
|
||||
const [params] = useSearchParams();
|
||||
const navigate = useNavigate()
|
||||
|
||||
const [activeTab, setActiveTab] = useState(params.get('tab') || 'white')
|
||||
const onChange = (tab: string) => {
|
||||
navigate(`?tab=${tab}`)
|
||||
setActiveTab(tab)
|
||||
}
|
||||
return <>
|
||||
<AppTitleBar title={'词库管理'} backgroundColor={'#eddcb9'}/>
|
||||
<div className="lexicon-wrapper page-content-container">
|
||||
<Tabs
|
||||
activeKey={activeTab}
|
||||
onChange={onChange}
|
||||
type="card"
|
||||
items={[
|
||||
{
|
||||
label: `白名单`,
|
||||
key: 'white',
|
||||
children: <Lexicon type={"white"}/>,
|
||||
},
|
||||
{
|
||||
label: `黑名单`,
|
||||
key: 'black',
|
||||
children: <Lexicon type={"black"}/>,
|
||||
}
|
||||
]}
|
||||
className="normal-tab"
|
||||
/>
|
||||
</div>
|
||||
</>;
|
||||
};
|
@ -1,170 +0,0 @@
|
||||
.lexicon-wrapper {
|
||||
height: calc(100vh - 50px);
|
||||
overflow-y: auto;
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
.lexicon {
|
||||
|
||||
}
|
||||
|
||||
.search-form {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.data-table {
|
||||
|
||||
.aui-table-container {
|
||||
border: solid 1px var(--border-color);
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
.modify-button{
|
||||
min-width: 60px;
|
||||
height: 30px;
|
||||
}
|
||||
.del-link{
|
||||
color: #757575;
|
||||
&:hover{
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.modal-import-file {
|
||||
.import-file-result {
|
||||
font-weight: bold;
|
||||
padding: 30px 20px;
|
||||
}
|
||||
|
||||
.count {
|
||||
color: #FA674A;
|
||||
}
|
||||
|
||||
.import-message {
|
||||
margin-top: 30px;
|
||||
}
|
||||
}
|
||||
.modal-save-lexicon{
|
||||
.modify-modal-body{
|
||||
padding: 30px;
|
||||
}
|
||||
}
|
||||
.modal-save-lexicon {
|
||||
.save-modal-body{
|
||||
padding: 30px;
|
||||
}
|
||||
h2{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.form-table {
|
||||
border: solid 1px var(--border-color);
|
||||
}
|
||||
|
||||
.item {
|
||||
border-left: solid 1px transparent;
|
||||
flex: 2;
|
||||
margin-left: 20px;
|
||||
&:first-child{
|
||||
border-left: none;
|
||||
margin-left: 0px;
|
||||
}
|
||||
}
|
||||
.item-input{
|
||||
width: 170px;
|
||||
}
|
||||
.item-suggestion{
|
||||
flex:1;
|
||||
}
|
||||
.item-type{
|
||||
flex:1;
|
||||
min-width: 130px;
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: #fafafa;
|
||||
font-weight: bold;
|
||||
|
||||
.item {
|
||||
border-left-color: var(--border-color);
|
||||
padding-left: 10px;
|
||||
&:first-child{
|
||||
padding-left: 0px;
|
||||
}
|
||||
}
|
||||
.item-type{
|
||||
margin-left: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.table-row {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
border-top: solid 1px var(--border-color);
|
||||
padding: 8px 10px;
|
||||
&:first-child{
|
||||
border-top: none;
|
||||
}
|
||||
}
|
||||
.aui-input-disabled{
|
||||
border:none;
|
||||
}
|
||||
|
||||
.item-operation {
|
||||
width: 80px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
.add-row{
|
||||
margin: 20px 0;
|
||||
}
|
||||
.validate-message{
|
||||
color: #FA674A;
|
||||
}
|
||||
.has-error{
|
||||
border-color:#FA674A;
|
||||
}
|
||||
.save-modal-white{
|
||||
.item-words{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.validate-message{
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tab 样式
|
||||
.normal-tab {
|
||||
.aui-tabs-nav {
|
||||
background-color: var(--background-color);
|
||||
margin-bottom: 0;
|
||||
|
||||
.aui-tabs-tab {
|
||||
background-color: transparent;
|
||||
border-radius: 0 !important;
|
||||
border: none;
|
||||
font-weight: bold;
|
||||
color: #ABABAB;
|
||||
padding: 13px 40px;
|
||||
justify-content: center;
|
||||
|
||||
&.aui-tabs-tab-active {
|
||||
background-color: #fff;
|
||||
|
||||
.aui-tabs-tab-btn {
|
||||
color: #000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.aui-tabs-ink-bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.aui-tabs-content-holder {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
}
|
||||
}
|
@ -1,355 +0,0 @@
|
||||
import React, {useEffect} from "react";
|
||||
import {Button, DatePicker, Divider, Form, Input, Select, Space, Table, Typography} from "antd";
|
||||
import {RightOutlined} from "@ant-design/icons";
|
||||
import {useRequest, useSetState} from "ahooks";
|
||||
import {ImportFileModal} from "./components/import-file.tsx";
|
||||
import {showToast, useConfirm} from "@/components/messages/Modal.tsx";
|
||||
import {SaveModal} from "./components/save-modal.tsx";
|
||||
import {Pagination} from "@/components/pagination";
|
||||
import {BlackCreateActionType, TListParam} from "@/service/types/lexicon.ts";
|
||||
import {whitelist, blacklist} from "@/service/api/lexicon.ts"
|
||||
import {EditableCellProps, getColumns, LexiconType} from "./components/columns.tsx";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
type PageType = 'white' | 'black'
|
||||
// type Lexicon
|
||||
type LexiconProps = {
|
||||
type: PageType
|
||||
}
|
||||
|
||||
|
||||
// 是否隐藏删除提示的key
|
||||
const HIDE_NOTICE_KEY = 'ai-proofread-hide-remove-notice',
|
||||
Storage = window.sessionStorage // 采用session存储缓存
|
||||
|
||||
export const Lexicon: React.FC<LexiconProps> = (props) => {
|
||||
const [form] = Form.useForm<any>()
|
||||
// 搜索为单独触发所以文本需要独立
|
||||
|
||||
const [searchParam, setSearchParam] = useSetState<TListParam>({
|
||||
pageSize: 10,
|
||||
currentPage: 1
|
||||
})
|
||||
// 数据
|
||||
const {data: dataSource, run: loadingDataList, loading} = useRequest(() => {
|
||||
return props.type === 'white' ? whitelist.list(searchParam) : blacklist.list(searchParam)
|
||||
}, {
|
||||
manual: true,
|
||||
debounceWait: 500,
|
||||
onSuccess: (data) => {
|
||||
if(state.modifyItem){
|
||||
setState({modifyItem: undefined})
|
||||
}
|
||||
// 处理页码错误
|
||||
if (data.list.length == 0 && data.pagination.total > 0) {
|
||||
const maxPage = Math.ceil(data.pagination.total / data.pagination.pageSize);
|
||||
if (data.pagination.current > maxPage) {
|
||||
setSearchParam({currentPage: maxPage})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
// const loadData
|
||||
|
||||
const {confirmHolder, showConfirm} = useConfirm()
|
||||
// 删除后重新加载数据
|
||||
const loadDataAfterDelete = (type: 'deleteAll' | 'delete' = 'deleteAll') => {
|
||||
if (dataSource) {
|
||||
const page = dataSource.pagination
|
||||
// 判断是否需要到上一页
|
||||
const maxPage = Math.ceil(page.total / page.pageSize);
|
||||
if (page.current >= maxPage && maxPage > 1) { // 如果在最后一页且该页大于第一页 则自动加载前一页数据
|
||||
if (
|
||||
(type == 'deleteAll' && state.selectedKeys.length == dataSource.list.length)
|
||||
|| (type == 'delete' && dataSource.list.length === 1)) { // 删除了该页所有数据
|
||||
setSearchParam({currentPage: maxPage - 1})
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
loadingDataList();
|
||||
}
|
||||
// 处理多选删除
|
||||
const handleDeleteAll = () => {
|
||||
if (state.selectedKeys.length == 0) return;
|
||||
showConfirm({
|
||||
content: '是否删除选中结果? 请注意删除后不可恢复',
|
||||
onYes() {
|
||||
const remove = props.type === 'black' ? blacklist.removeBatch : whitelist.removeBatch
|
||||
// 删除并刷新
|
||||
remove(state.selectedKeys)
|
||||
.then(() => {
|
||||
loadDataAfterDelete();
|
||||
setState({selectedKeys: []}) // 重置选择项
|
||||
})
|
||||
.catch((e: BizError) => showToast('删除失败:' + e.message || '请稍后重试', 'warning'))
|
||||
}
|
||||
})
|
||||
}
|
||||
// 删除
|
||||
const deleteData = (item: LexiconType) => {
|
||||
const remove = props.type === 'black' ? blacklist.remove : whitelist.remove
|
||||
// 删除并刷新
|
||||
remove(item.id).then(() => {
|
||||
loadDataAfterDelete('delete')
|
||||
}).catch((e: BizError) => showToast('删除失败:' + e.message || '请稍后重试', 'warning'))
|
||||
}
|
||||
|
||||
const handleRemove = (item: LexiconType) => {
|
||||
// 判断是否需要隐藏
|
||||
if (Storage.getItem(HIDE_NOTICE_KEY)) {
|
||||
deleteData(item) // 直接走删除流程
|
||||
} else {
|
||||
// 弹出提醒
|
||||
showConfirm({
|
||||
content: '是否删除选中结果? 请注意删除后不可恢复',
|
||||
showNextAsk: true, // 是否显示下一次还问
|
||||
onYes(hideNextNotice) {
|
||||
// 需要隐藏写入缓存
|
||||
if (hideNextNotice) Storage.setItem(HIDE_NOTICE_KEY, 'yes')
|
||||
deleteData(item) // 走删除流程
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
// 页面状态
|
||||
const [state, setState] = useSetState<{
|
||||
importVisible?: boolean,
|
||||
saveVisible?: boolean,
|
||||
modifyVisible?: boolean,
|
||||
saving?: boolean;
|
||||
selectedKeys: any[],
|
||||
modifyItem?: LexiconType;
|
||||
}>({
|
||||
selectedKeys: []
|
||||
})
|
||||
// 全选
|
||||
const toggleSelectAll = () => {
|
||||
if (!dataSource) return;
|
||||
if (state.selectedKeys.length != dataSource.list.length) {
|
||||
const selectedKeys = dataSource.list.map(s => s.id);
|
||||
setState({selectedKeys})
|
||||
} else {
|
||||
setState({selectedKeys: []})
|
||||
}
|
||||
}
|
||||
// 搜索表单
|
||||
const onFormSearch = () => {
|
||||
const values = form.getFieldsValue();
|
||||
const timeParams:{startTime?: number, endTime?: number} = {startTime:undefined,endTime:undefined}
|
||||
// 搜索时间
|
||||
if (values.time) {
|
||||
const [start, end] = values.time;
|
||||
const timeStart = start.format('YYYY-MM-DD') + ' 00:00:00';
|
||||
const endStart = end.format('YYYY-MM-DD') + ' 23:59:59';
|
||||
timeParams.startTime = dayjs(timeStart).unix()
|
||||
timeParams.endTime = dayjs(endStart).unix()
|
||||
}
|
||||
setSearchParam({
|
||||
currentPage: 1,
|
||||
word: values.word,
|
||||
...timeParams
|
||||
})
|
||||
}
|
||||
// 加载
|
||||
useEffect(loadingDataList, [searchParam]);
|
||||
const [modifyForm] = Form.useForm();
|
||||
|
||||
const [modifyState, setModifyState] = useSetState<{
|
||||
category?:number;
|
||||
action?:number;
|
||||
}>({})
|
||||
const handleModifySave = async () => {
|
||||
try{
|
||||
const params = (await modifyForm.validateFields());
|
||||
|
||||
params.actionType = modifyState.action;
|
||||
params.type = modifyState.category;
|
||||
if(modifyState.action == 1){
|
||||
// 修改为拦截则将替换词置为空
|
||||
params.replaceWord = '';
|
||||
}
|
||||
// 执行保存
|
||||
const save = props.type == 'white' ? whitelist.modify : blacklist.modify;
|
||||
setState({saving: true})
|
||||
save(state.modifyItem!.id, params).then(() => {
|
||||
showToast('修改名单成功', 'success');
|
||||
loadingDataList();
|
||||
}).catch((e: BizError) => showToast(e.message || '修改数据失败', 'warning'))
|
||||
.finally(() => setState({saving: false}))
|
||||
}catch (e) {}
|
||||
}
|
||||
// 列配置
|
||||
const columns = getColumns(props.type, (_, _item, index) => {
|
||||
return (index + 1) + ((dataSource?.pagination.current || 1) - 1) * (searchParam.pageSize || 10);
|
||||
}, (_, item: LexiconType) => {
|
||||
return (state.modifyItem && state.modifyItem.id == item.id ? <Space size={20}>
|
||||
<Button loading={state.saving} className={'modify-button'} onClick={handleModifySave} type={'primary'} size={'small'}>保存</Button>
|
||||
<Button className={'modify-button'} size={'small'} onClick={() => setState({modifyItem: undefined})}>取消</Button>
|
||||
</Space> : <Space>
|
||||
<Typography.Link disabled={!!state.modifyItem} className={"text-link-blue"} onClick={() => {
|
||||
setModifyState({
|
||||
category:item.type,
|
||||
action:item.actionType
|
||||
})
|
||||
modifyForm.setFieldsValue({...item});
|
||||
// 修改
|
||||
setState({
|
||||
modifyItem: item,
|
||||
modifyVisible: true
|
||||
})
|
||||
}}>编辑</Typography.Link>
|
||||
<Divider type="vertical"/>
|
||||
<a className={'lexicon-del-link del-link'} onClick={() => handleRemove(item)}>删除</a>
|
||||
</Space>)
|
||||
})
|
||||
// 合并列
|
||||
const mergedColumns = columns.map((col) => {
|
||||
if (!col.editable) {
|
||||
return col;
|
||||
}
|
||||
const dataIndex = (col as any).dataIndex as string;
|
||||
return {
|
||||
...col,
|
||||
onCell: (record: LexiconType) => ({
|
||||
record,
|
||||
inputType: (dataIndex === 'actionType' || dataIndex === 'type') ? 'select' : 'text',
|
||||
dataIndex: dataIndex,
|
||||
title: col.title,
|
||||
editing: state.modifyItem && state.modifyItem.id == record.id,
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
// 修改数据
|
||||
const SuggestionList = [
|
||||
{value: 1, label: '拦截'},
|
||||
{value: 2, label: '替换'},
|
||||
]
|
||||
const ActionTypeSelect = () => (<Select value={modifyState?.action} onChange={action=>setModifyState({action})} className="w-full" options={SuggestionList} />)
|
||||
const CategorySelect = () => (<Select value={modifyState?.category} onChange={category=>setModifyState({category})} className="w-full" options={[{value: 0, label: '通用'},]}/>)
|
||||
// 自定义单元格渲染
|
||||
const EditableCell: React.FC<EditableCellProps> =
|
||||
({
|
||||
editing,
|
||||
dataIndex,
|
||||
title,
|
||||
inputType,
|
||||
record,
|
||||
index,
|
||||
children,
|
||||
...restProps
|
||||
}) => {
|
||||
|
||||
const rules: any[] = dataIndex === 'replaceWord'?[]:[{required: true, message: `请填写${title}`}]
|
||||
if (dataIndex === 'replaceWord') {
|
||||
rules.push(({getFieldValue}: { getFieldValue: (key: string) => string }) => ({
|
||||
validator(_: any, value: string) {
|
||||
// 替换时才判断
|
||||
if(modifyState.action == 2){
|
||||
if(value.length == 0){
|
||||
return Promise.reject(new Error('请填写替换词'));
|
||||
}
|
||||
if (getFieldValue('word') === value) {
|
||||
return Promise.reject(new Error('拦截词与替换词相同'));
|
||||
}
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
}))
|
||||
}
|
||||
return (
|
||||
<td {...restProps}>
|
||||
{editing ? (<Form.Item
|
||||
name={dataIndex}
|
||||
style={{margin: 0}}
|
||||
rules={rules}
|
||||
>
|
||||
{dataIndex === 'actionType' ? <ActionTypeSelect/> : (
|
||||
dataIndex === 'type' ? <CategorySelect/> : (<Input disabled={ dataIndex === 'replaceWord' && modifyState?.action != BlackCreateActionType.Replace}/>)
|
||||
)}
|
||||
</Form.Item>) : (children)}
|
||||
</td>
|
||||
);
|
||||
};
|
||||
|
||||
return (<div className="lexicon">
|
||||
{confirmHolder}
|
||||
<SaveModal type={props.type} visible={state.saveVisible} onClose={(refresh) => {
|
||||
setState({saveVisible: false})
|
||||
if (refresh) loadingDataList();
|
||||
}}/>
|
||||
{/*导入*/}
|
||||
{state.importVisible && <ImportFileModal type={props.type} visible={state.importVisible} onClose={(refresh) => {
|
||||
setState({importVisible: false})
|
||||
if (refresh) loadingDataList();
|
||||
}}/>}
|
||||
<Space className="button-wrapper">
|
||||
<Button type="primary" onClick={() => setState({saveVisible: true})}>手动新增</Button>
|
||||
<Button type="primary" onClick={() => setState({importVisible: true})}>批量导入</Button>
|
||||
</Space>
|
||||
<Form
|
||||
className="search-form" layout="inline"
|
||||
form={form}
|
||||
onFinish={onFormSearch}
|
||||
onReset={onFormSearch}
|
||||
>
|
||||
<Form.Item label={props.type === 'white' ? '放行词' : '拦截词'} name="word">
|
||||
<Input placeholder="请输入" allowClear />
|
||||
</Form.Item>
|
||||
<Form.Item label="修改时间" name="time">
|
||||
<DatePicker.RangePicker
|
||||
style={{width: 240}}
|
||||
separator={<RightOutlined style={{color: '#ccc'}}/>}
|
||||
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<Button type="primary" htmlType="submit">查询</Button>
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<Button htmlType="reset">重置</Button>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
<div className="data-table-wrapper">
|
||||
<div>
|
||||
<Form component={false} form={modifyForm}>
|
||||
<Table
|
||||
className="data-table"
|
||||
rowKey="id"
|
||||
components={{body: {cell: EditableCell}}}
|
||||
rowSelection={{
|
||||
type: 'checkbox',
|
||||
selectedRowKeys: state.selectedKeys,
|
||||
onChange: (selectedKeys) => {
|
||||
setState({selectedKeys})
|
||||
},
|
||||
}}
|
||||
dataSource={dataSource?.list || []}
|
||||
columns={mergedColumns as any}
|
||||
pagination={false}
|
||||
loading={loading}
|
||||
/>
|
||||
</Form>
|
||||
</div>
|
||||
{dataSource && dataSource.pagination.total > 0 && <div className="d-flex space-between" style={{marginTop:20}}>
|
||||
<div className="align-center">
|
||||
<div
|
||||
style={{minWidth: 70}}
|
||||
className="pointer text-left text-link-blue"
|
||||
onClick={toggleSelectAll}
|
||||
>{state.selectedKeys.length == dataSource?.list.length ? '取消全选' : '全选'}</div>
|
||||
{state.selectedKeys.length > 0 && <div className="align-center pointer" onClick={handleDeleteAll}>
|
||||
{/*<SvgIcon type="delete" size={18}/>*/}
|
||||
<span>批量删除</span>
|
||||
</div>}
|
||||
</div>
|
||||
{dataSource && <Pagination
|
||||
param={dataSource.pagination}
|
||||
onPageChange={currentPage => setSearchParam({currentPage})}
|
||||
emptyText={null}
|
||||
/>}
|
||||
</div>}
|
||||
</div>
|
||||
</div>)
|
||||
}
|
@ -1,284 +0,0 @@
|
||||
import React from "react";
|
||||
import {companyName,productName} from "./env.ts"
|
||||
|
||||
export const AgreementContent: React.FC = () => {
|
||||
return (
|
||||
<div className="terms-content">
|
||||
<p><strong>{productName}</strong><span
|
||||
>(以下统称“本产品”)是由{companyName}(下称“本公司”或“我们”)所有和负责运营,本协议双方为本公司与本产品注册用户(下称“用户”或“您”)签订的具有合同效力的文件。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>请您在注册成为本产品用户前务必仔细阅读本协议内容,若您不同意本协议的任何内容,或者无法准确理解本公司对条款的解释,请不要进行后续操作;若您注册成为本产品用户,则表示您对本协议的全部内容已充分阅读并认可和同意遵守。同时,承诺遵守中国法律、法规、规章及其他政府规范性文件规定,如有违反而造成任何法律后果,您将以本人名义独立承担所有相应的法律责任。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>如您未满18周岁,请在监护人陪同下仔细阅读并充分理解本协议,并征得监护人的同意后使用本产品及相关服务。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>本公司有权根据需要不定时地制定、修改本协议或各类规则,经修订的协议、规则一经公布,立即自动生效。对新协议、规则生效之后注册的用户发生法律效力,对于协议、规则生效之前注册的用户,若用户在新规则生效后继续使用本产品提供的各项服务,则表明用户已充分阅读并认可和同意遵守新的协议或规则。若用户拒绝接受新的协议和规则,用户有权放弃或终止继续使用本产品提供的各项服务,但该用户应承担在本产品已经进行的交易下所应承担的任何法律责任,且应遵循该用户发生交易时有效的协议或规则内容。</span>
|
||||
</p>
|
||||
<p><span>发布日期:2023年</span><span
|
||||
> 12</span><span
|
||||
>月</span><span
|
||||
> 01</span><span
|
||||
>日</span></p>
|
||||
<p><span>生效日期:</span><span
|
||||
>2023</span><span
|
||||
>年</span><span
|
||||
> 12</span><span
|
||||
> 月01日</span></p>
|
||||
<p><strong>一、定义与解释</strong></p>
|
||||
<p><span>1、</span><strong
|
||||
>{productName}</strong><span
|
||||
>:是指一个可以为用户提供准确高效的内容审核、校对的工具,包含的形态包含SAAS产品,客户端,插件。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2、用户:本协议中的“用户”指在阅读本协议后选择接受本协议全部条款的使用者。用户可通过注册、登录本产品账号使用本产品的服务。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>3、账号及密码:指您完成真实信息注册后,享有的用户账号及相应的密码,该用户账号和密码由您负责保管;您应当对以其用户账号下进行的所有行为负法律责任。</span>
|
||||
</p>
|
||||
<p><strong>二、关于“账号”</strong></p>
|
||||
<p><span>1、账号的注册</span></p>
|
||||
<p>
|
||||
<span>(1)您使用本产品可以自行申请注册账户进行授权登录,您的账号为您注册使用的手机号,通过账号+验证码方式注册和登录。您设置的账号作为登录、注册用户身份使用本产品的凭证。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(2)您理解并承诺,您所设置的账号不得违反国家法律法规及本公司的相关规则,您的账号名称、头像和简介等注册信息及其他个人信息中不得出现违法和不良信息,未经他人许可不得用他人名义(包括但不限于冒用他人姓名、名称、字号、头像等足以让人引起混淆的方式)开设账号,不得恶意注册账号(包括但不限于频繁注册、批量注册账号等行为)。您在账号注册及使用过程中需遵守相关法律法规,不得实施任何侵害国家利益、损害其他公民合法权益,有害社会道德风尚的行为。本公司有权对您提交的注册信息进行审核。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(3)您应保证注册/登录账号时需填写有效的手机号码,并使用手机验证短信来完成账户注册。若因您填写的手机号码不完整或不准确,则可能无法使用本产品或在使用过程中受到限制。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(4)您应保证您注册时提供的信息的真实性,请您在注册、管理账号时使用真实、准确、合法、有效的相关信息认证材料及必要信息。若您提交的材料或提供的信息不准确、不真实、不合法或者本公司有理由怀疑为错误、不实或不合法的资料,则本公司有权拒绝为您提供相关服务或您可能无法使用本产品或在使用过程中部分功能受到限制。</span>
|
||||
</p>
|
||||
<p><span>2、账号使用</span></p>
|
||||
<p>
|
||||
<span>(1)您在本产品中的注册账号所有权及有关权益均归本公司所有,您完成注册手续后仅享有该账号的使用权,您应当正确、适当地使用、运营、管理本产品账号。您的账号仅限于您本人使用,未经本公司书面同意,禁止以任何形式赠与、借用、出租、转让、售卖或以其他方式许可他人使用该账号。如果本公司发现或者有合理理由认为账号使用者并非您本人,本公司有权在未通知您的情况下,暂停或终止向该注册账号提供服务,并有权注销该账号,而无需向您户承担法律责任。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(2)您有责任维护您的个人账号的安全性与保密性,并对您以注册账号名义所从事的活动承担全部法律责任,包括但不限于您通过本产品上进行的任何数据修改、言论发表等操作行为。您应高度重视对账号的保密,在任何情况下不向他人透露账号。若发现他人未经许可使用您的账号或发生其他任何安全漏洞问题时,您应当立即通知本公司。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(3)您的账号在丢失后,可遵照本公司的申诉途径及时申诉请求找回账号。您理解并认可,本公司的账号找回机制仅需要识别申诉单上所填资料与系统记录资料具有一致性,若您提供的信息不真实或不完整,导致无法核实您的身份或判断您的需求而未进行及时处理所造成的一切损失由您自行承担。同时,您理解我们的回复和采取措施需要合理期限。我们不对非本团队原因造成的任何损失承担责任。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(4)本公司特别提醒您应妥善保管您的账号。当您使用完毕后,应安全退出。因您保管不当可能导致遭受盗号,责任由您自行承担。如您的账户遭到第三方使用或发生其他任何问题,您有义务及时通知本公司(包括但不限于提供您的身份信息和相关身份资料、相关事实情况及您的要求等)。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(5)为保障您和本公司利益,本公司有权审查您提交的相关材料(如自然人持有的身份证照片、企业法人营业执照副本复印件、事业单位法人证书复印件)并有权决定是否核准您的申请,并有权视情况要求您提供声明/说明、服务资质、服务范围及其他等材料。若您拒绝提供材料或提交的材料或填写的信息不真实、不准确、不完整或不合法的,则您可能无法使用本产品或在使用过程中受到限制。本公司的审查不代表对您提交的材料和信息的真实性、准确性、合法性负责。您应当对该材料和信息独立承担责任。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>(6)为更好地为您提供服务,本公司有权对使用本产品的用户进行分级、分类管理,并有权根据级别设置相应的权限、提供相应的服务。</span>
|
||||
</p>
|
||||
<p><span>3、账号的注销</span></p>
|
||||
<p>
|
||||
<span>您有权注销您的本公司账户,您可以根据本协议所述的方式联系我们的客服协助您注销账号。我们收到您的请求后需要您提供账号(手机号码)以及短信验证码,以核对身份,核验成功后我们将在15个工作日内为您完成注销。为了保障安全,我们可能需要您提供相应方式证明您的身份和请求的正当性。您注销成功后,我们将根据法律法规的要求尽快删除您的个人信息或作匿名化处理。</span>
|
||||
</p>
|
||||
<p><strong>三、本产品服务内容</strong></p>
|
||||
<p>
|
||||
<span>1、您可能可以通过电脑、手机等终端以网页等形式使用本产品,具体以本公司提供的为准,同时,本公司会不断丰富您使用本软件的终端、形式等。当您使用本产品时,您应选择与您的终端、系统等相匹配的本产品版本,否则,您可能无法正常使用本产品。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>2、本产品为您提供的服务包括文字审核、文档审核、图片审核,可以为上述形式提供文本纠错或内容安全审核。文本纠错包含拼写错误、语法错误、标点错误、数字错误、量与单位错误、政治领域错误、语法语义错误。内容安全审核包含涉政、违禁、色情、暴恐、辱骂、广告导流等风险内容的审核。</span>
|
||||
</p>
|
||||
<p>3、服务费用</p>
|
||||
<p>
|
||||
<span>(1)本产品的某些服务是以收费方式提供的,由于云服务的虚拟产品性质和特征,您所获取的虚拟产品不能够进行退货、换货。一旦用户凭个人账户和密码订购收费服务,将视为是您本人订购了该项收费服务,您有义务按照有关的收费标准、付款方式按时支付相应的服务费用,本公司也将按照相关服务的收费标准与付款方式进行收费。关于具体的服务资费,将会在本公司应用或官方网站相应的服务页面上有详细说明。如果您未能按时支付相应的服务费用,本公司将有权利自动取消您所订购的收费服务而无需另行通知。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(2)本公司将在您付款前,针对您提交的使用本服务请求的相应费用在订单相关界面给予确认;本公司有权根据纠错能力价格、敏感审核能力价格、服务器调整等因素等因素调整服务的费用同时给出定价说明,并由您通过本公司相关页面进行操作确定及支付。订单一旦进入“处理中”状态,将不接受任何形式的取消和退款。使用本产品不接受任何形式的议价,如对产品使用的费用产生疑问,可在本产品的相关界面联系客服咨询,使用本产品的价格信息具体可参见本软件内的价格说明。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>(3)您同意:本公司有权根据市场报价、经营成本等因素,对本产品服务的收费标准进行调整。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(4)您有权在费用支付完成后,通过本协议提供的方式向本公司索取使用本产品实付费用的等额合规正式发票;本公司固定在每月批量开具发票,并将自发票开具之日起10个工作日内完成发票发布(邮箱),遇节假日或其他不可抗力因素顺延。</span>
|
||||
</p>
|
||||
<p><strong>四、用户使用规范</strong></p>
|
||||
<p>
|
||||
<span>1、本公司授权您非商业性使用本产品,但是如果要进行商业性使用(包括但不限于:销售、复制、散发、预装、捆绑或用于其他商业活动)时,必须事先获得本公司的书面授权和许可。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>2、您可以就本产品的下载、安装、使用或卸载问题向本公司提出咨询,本公司解答的义务不应超过本公司的合理承受限度。如果您对本产品有任何意见,或有如何改进的建议,请通过在线沟通发表您的意见或建议。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>3、用户充分了解并同意,本产品的用户上传、分享、传播的信息,均不代表本公司的观点,本公司对此不承担任何责任。同时,用户应对本产品的其他用户提供的内容自行加以判断,并承担因使用该内容而引起的所有风险,包括因对内容的正确性、完整性或合法性的依赖而产生的风险,本平台对此不承担任何法律责任。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>4、您不得修改、复制、传播与本产品相关的材料。如果您复制和修改传播这些材料,因此而造成对其他人的损害,或者造成对本公司的形象损害,要承担相应的法律责任。您不得删除、掩盖或更改本公司的版权声明、商标或其它权利声明。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>5、用户使用本产品将图片、文字、音频等信息公开发布、传播、分享的行为代表了用户有权且同意在全世界范围内,永久性的、不可撤销的、免费的授予本公司:对该信息行使使用、发布、复制、修改、改编、出版、翻译、据以创作衍生作品、传播、表演和展示等权利;将信息的全部或部分编入其他任何形式的作品、媒体、技术中的权利;对用户的上传、发布信息进行商业开发的权利;通过有线或无线网络向用户的计算机终端、移动通讯终端(包括但不限于便携式通讯设备如手机和智能平板电脑等)等提供信息的下载、点播、数据传输及其相关的宣传和推广等服务的权利。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>6、用户在本产品上传、发布、传播的符号、文字、图片等内容的,应保证其内容不违反法律法规及其规范性文件,亦不侵犯任何第三方的合法权益,否则导致的一切不利后果均由用户自行承担,造成本公司损失的,还应向本公司承担赔偿责任。对于相关权利人因用户违反本款约定向本公司主张权利的,本公司有权不通知上传用户直接删除、下线、屏蔽相关争议内容。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>7、用户应当保证,不会利用本产品侵犯本公司以及他人的合法权益,禁止通过网络漏洞、恶意软件或其他非法手段破坏本平台的正常经营。否则,本公司有权根据情节严重而对该用户及用户账号进行冻结、封号等处理。构成犯罪的,本公司有权移交司法部门处理。</span>
|
||||
</p>
|
||||
<p>8、禁止用户从事以下行为:</p>
|
||||
<p><span
|
||||
>(1)使用未经公司授权或许可的任何插件、外挂、系统或第三方工具对本产品的正常运行进行干扰、破坏、修改或施加其他影响。</span>
|
||||
</p>
|
||||
<p><span>(2)利用或针对本产品进行任何危害计算机网络安全的行为,包括但不限于:</span>
|
||||
</p>
|
||||
<p><span
|
||||
>1)非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2)提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>3)明知他人从事危害网络安全的活动的,为其提供技术支持、广告推广、支付结算等帮助;</span>
|
||||
</p>
|
||||
<p><span>4)使用未经许可的数据或进入未经许可的服务器/账号;</span></p>
|
||||
<p><span
|
||||
>5)未经允许进入公众计算机网络或者他人计算机系统并删除、修改、增加存储信息;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>6)未经许可,企图探查、扫描、测试本服务系统或网络的弱点或其它实施破坏网络安全的行为;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>7)企图干涉、破坏本服务系统或网站的正常运行,故意传播恶意程序或病毒以及其他破坏干扰正常网络信息服务的行为;</span>
|
||||
</p>
|
||||
<p><span>8)伪造TCP/IP数据包名称或部分名称。</span></p>
|
||||
<p><span
|
||||
>(3)对本产品进行反向工程、反向汇编、编译或者以其他方式尝试发现本产品的源代码。</span>
|
||||
</p>
|
||||
<p><span>(4)恶意注册本产品账号,包括但不限于频繁、批量注册账号。</span></p>
|
||||
<p><span>(5)不得制作、复制、上传、发布、传播法律、行政法规禁止的下列信息内容:</span></p>
|
||||
<p><span>1)反对宪法确定的基本原则的;</span></p>
|
||||
<p><span>2)危害国家安全,泄露国家秘密的;</span></p>
|
||||
<p><span>3)颠覆国家政权,推翻社会主义制度、煽动分裂国家、破坏国家统一的;</span></p>
|
||||
<p><span>4)损害国家荣誉和利益的;</span></p>
|
||||
<p><span>5)宣扬恐怖主义、极端主义的;</span></p>
|
||||
<p><span>6)宣扬民族仇恨、民族歧视,破坏民族团结的;</span></p>
|
||||
<p><span>7)煽动地域歧视、地域仇恨的;</span></p>
|
||||
<p><span>8)破坏国家宗教政策,宣扬邪教和迷信的;</span></p>
|
||||
<p><span>9)编造、散布谣言、虚假信息,扰乱经济秩序和社会秩序、破坏社会稳定的;</span></p>
|
||||
<p><span>10)散布、传播暴力、淫秽、色情、赌博、凶杀、恐怖或者教唆犯罪的;</span></p>
|
||||
<p><span>11)侵害未成年人合法权益或者损害未成年人身心健康的;</span></p>
|
||||
<p><span>12)未获他人允许,偷拍、偷录他人,侵害他人合法权利的;</span></p>
|
||||
<p><span>13)包含恐怖、暴力血腥、高危险性、危害表演者自身或他人身心健康内容的;</span>
|
||||
</p>
|
||||
<p><span>14)危害网络安全、利用网络从事危害国家安全、荣誉和利益的;</span></p>
|
||||
<p><span>15)侮辱或者诽谤他人,侵害他人合法权益的;</span></p>
|
||||
<p><span>16)对他人进行暴力恐吓、威胁,实施人肉搜索的;</span></p>
|
||||
<p><span>17)涉及他人隐私、个人信息或资料的;</span></p>
|
||||
<p><span>18)散布污言秽语,损害社会公序良俗的;</span></p>
|
||||
<p><span>19)侵犯他人隐私权、名誉权、肖像权、知识产权、商业秘密等合法权益内容的;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>20)未经公司许可,利用本产品为自己或第三方进行推广、发布广告的(包括但不限于加入第三方链接、广告等行为);</span>
|
||||
</p>
|
||||
<p><span>21)过度营销信息,骚扰信息和/或垃圾信息、低俗类信息、垃圾广告的;</span></p>
|
||||
<p><span
|
||||
>22)使用本产品常用语言文字以外的其他语言文字制作、复制、上传、发布、传播的内容、留言、评论的;</span>
|
||||
</p>
|
||||
<p><span>23)与所制作、复制、上传、发布、传播的内容、留言、评论的信息毫无关系的;</span>
|
||||
</p>
|
||||
<p><span>24)所发布、传播的内容毫无意义的,或刻意使用字符组合以逃避技术审核的;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>25)其他违反法律法规、政策及公序良俗、干扰本产品合作平台正常运营或侵犯其他用户或第三方合法权益内容的其他信息。</span>
|
||||
</p>
|
||||
<p><strong>五、权利声明及保密</strong></p>
|
||||
<p><span
|
||||
>1、本公司拥有本产品的知识产权等相关权利,受国际版权公约、中华人民共和国著作权法、专利法及其他知识产权方面的法律法规的保护。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2、本公司授予您对本产品可撤销的、有限的、非排他的、不可转让的使用权,您仅限于以非商业使用本公司为目的进行使用。</span>
|
||||
</p>
|
||||
<p><span>除本协议另有约定外,未经您的允许,</span><span
|
||||
>{companyName}</span><span
|
||||
>不会向第三方公开或传播您的信息、语及文字稿件内容。</span></p>
|
||||
<p>3、保密</p>
|
||||
<p>
|
||||
<span>(1)本公司将采取特殊保密措施,利用VAD等技术对语音文件进行切分、打散等处理,通过这些严格措施努力保护您的信息不被未经授权的访问、使用或泄漏。维护本服务的安全与正常使用是本公司和您的共同责任,本公司将采取适当的安全措施和技术手段维护本产品。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>(2)您理解并同意,若非因本公司人为原因,如因天灾、盗窃、抢劫、黑客攻击等造成信息泄露的,本公司不承担法律责任。</span>
|
||||
</p>
|
||||
<p><span>(3)本公司在下述情况下不再承担保密义务:</span></p>
|
||||
<p><span>1)因非本公司的原因,您提供的信息、语音、视频及文字稿件被公开的;</span></p>
|
||||
<p><span>2)法律法规要求、行政司法机关要求、或其他有权机关要求披露的;</span></p>
|
||||
<p><span>3)事先获得您的授权;</span></p>
|
||||
<p><span>4)为查找、预防或处理欺诈、安全或技术方面的问题;</span></p>
|
||||
<p><span>5)为执行相关服务协议或本政策、维护社会公共利益;</span></p>
|
||||
<p><span
|
||||
>6)为保护我们的客户、我们或我们的关联公司、其他用户或雇员的人身财产安全或其他合法权益等合理且必要的用途。</span>
|
||||
</p>
|
||||
<p><strong>六、无担保声明</strong></p>
|
||||
<p>
|
||||
<span>1、虽然本产品(包括其升级版)经过本公司详细的测试,但本公司不能保证其与所有的软硬件、系统完全兼容。如果出现不兼容的情况您可将情况通知我们,以获得技术支持。如果无法解决问题,您可以选择停止使用本产品。</span>
|
||||
</p>
|
||||
<p><span>2、本公司对以下事宜不作任何类型的担保,不论是明确的或隐含的:</span></p>
|
||||
<p><span>(1)本协议项下本产品提供的相关网络服务将符合用户的要求;</span></p>
|
||||
<p>
|
||||
<span>(2)本协议项下本产品提供的相关服务将不受不可抗力、计算机病毒、黑客攻击、系统不稳定、用户所在位置、用户关机、电信部门原因及其他任何网络、技术、通信线路等外界或人为因素的影响;</span>
|
||||
</p>
|
||||
<p>3、第三方产品和服务</p>
|
||||
<p>
|
||||
<span>(1)您知悉并同意,若您在使用通过本产品的链接和标签所指向的第三方提供的产品或服务时,除遵守本协议约定外,还应遵守第三方的用户协议,您使用第三方提供的产品或服务可能出现的纠纷由您自行解决并承担风险。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(2)因您使用本软件或要求本产品提供特定服务时,本软件可能会调用第三方系统或者通过第三方支持您的使用或访问,使用或访问的结果由该第三方提供(包括但不限于第三方通过本软件插件提供的服务),本公司不保证通过第三方提供服务及内容的安全性、准确性、有效性及其他不确定的风险,由此若引发的任何争议及损害由您自行承担。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>(3)前述通过各种形式展现的相关协议或其他文件,均是本协议不可分割的组成部分,与本协议具有同等的法律效力,您应当遵守这些要求。如果您没有遵守这些要求,该第三方或者国家机关可能会对您提起诉讼、罚款或采取其他制裁措施,并要求本公司给予协助,您应当自行承担法律责任。</span>
|
||||
</p>
|
||||
<p><strong>七、隐私保护</strong></p>
|
||||
<p><span>隐私保护相关条款以《隐私政策》内容为准</span></p>
|
||||
<p><strong>八、违约处理</strong></p>
|
||||
<p>
|
||||
<span>1、针对您违反本协议或其他服务条款的行为,本公司有权独立判断并视情况采取预先警示、拒绝发布、要求整改、立即停止提供服务、删除内容、暂停更新、限制账号部分或者全部功能直至永久关闭账号等措施。本公司有权公告处理结果,且有权根据实际情况决定是否恢复使用。对涉嫌违反法律法规、涉嫌违法犯罪的行为将保存有关记录,并依法向有关主管部门报告、配合有关主管部门调查。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>2、因您违反本协议或其他服务条款规定,引起第三方投诉或诉讼索赔的,您应当自行承担全部法律责任。因您的违法或违约行为导致本公司向任何第三方赔偿或遭受国家机关处罚的,您还应足额赔偿本公司及其关联公司、控制公司因此遭受的全部损失。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>3、本公司尊重并保护法人、公民的知识产权、名誉权、姓名权、隐私权等合法权益。您保证,在使用本产品时上传的文字、图片、链接等不侵犯任何第三方的知识产权、名誉权、姓名权、隐私权等权利及合法权益。否则,本公司有权在收到权利方或者相关方通知的情况下移除该涉嫌侵权内容。针对第三方提出的全部权利主张,您应自行承担全部法律责任;如因您的侵权行为导致本公司及其关联公司、控制公司遭受损失的(包括经济、商誉等损失),您还应足额赔偿本公司及其关联公司、控制公司遭受的全部损失。</span>
|
||||
</p>
|
||||
<p><strong>九、服务的变更、中断和终止</strong></p>
|
||||
<p>
|
||||
<span>1、您理解并同意,本公司提供的本产品及相关服务是按照现有技术和条件所能达到的现状提供的。本公司会尽最大努力向您提供服务,确保服务的连贯性和安全性。您理解,本公司不能随时预见和防范技术以及其他风险,包括但不限于不可抗力、病毒、木马、黑客攻击、系统不稳定、第三方服务瑕疵及其他各种安全问题的侵扰等原因可能导致的服务中断、数据丢失以及其他的损失和风险。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2、您理解并同意,本公司为了服务整体运营的需要,有权在公告通知后修改、中断、中止或终止本产品的服务,而无须向您负责或承担任何赔偿责任。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>3、本公司有权提前30天通知您解除本协议,该情况下,本公司解除本协议时您的账户内仍有已支付且未完成订单的,本公司将以该订单的实付金额为限向您提供适当补偿。</span>
|
||||
</p>
|
||||
<p><strong>十、通知和送达</strong></p>
|
||||
<p>
|
||||
<span>1、您在使用本产品过程中有任何意见或建议,可通过本产品内【客服】提出,我们将向您及时做出反馈。您应保证您的联系方式畅通,以接收来自我们发出的电话或信息,我们不对您未收到通知而引起的任何损失承担责任。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2、如您在使用本产品的过程中对本用户服务协议有任何疑问或建议,请通过以下联系方式与我们联系:</span>
|
||||
</p>
|
||||
<p><span
|
||||
>电子邮件: zhengjianxiong@guomai.cn</span>
|
||||
</p>
|
||||
<p><span>电 话: 021-64386496-228</span></p>
|
||||
<p>
|
||||
<span>3、为保障我们高效处理您的问题并及时向您反馈,需要您提交身份证明、有效联系方式和书面请求及相关证据,我们会在验证您的身份后处理您的请求。一般情况下,我们将在三十天内回复。</span>
|
||||
</p>
|
||||
<p><strong>十一、其他</strong></p>
|
||||
<p>
|
||||
<span>1、本协议的订立、执行和解释及争议的解决均应适用中国法律并受中国法院管辖。如双方就本协议内容或其执行发生任何争议,双方应尽量友好协商解决;协商不成时,任何一方均可向本公司所在地的人民法院提起诉讼。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2、本协议构成双方对本协议之约定事项及其他有关事宜的完整协议,除本协议规定的之外,未赋予本协议各方其他权利。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>3、如本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力,本协议的其余条款仍应有效并且有约束力。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>4、本服务仅限于在中国大陆地区使用,如您擅自在中国大陆以外(特别是欧盟)地区使用,公司不承担因此而产生的任何责任。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>5、本协议自用户同意勾选或网上签署并成功注册成为本平台用户之日起生效,除非本公司终止本协议或者用户丧失本平台用户资格,否则本协议始终有效。本协议终止并不免除用户根据本协议或其他有关协议、规则所应承担的义务和责任。</span>
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
export const productName = "AI校对王"
|
||||
export const companyName = "果麦文化"
|
@ -1,526 +0,0 @@
|
||||
import React from "react";
|
||||
import {companyName,productName} from "./env.ts"
|
||||
|
||||
export const PrivacyContent: React.FC = () => {
|
||||
return (
|
||||
|
||||
<div className="terms-content">
|
||||
<p>发布日期:2023年12月01日</p>
|
||||
<p>生效日期:2023年12月01日</p>
|
||||
<p><span>《</span><strong
|
||||
>{productName}</strong><span
|
||||
>隐私政策》(以下简称“本政策”)仅适用于</span><span
|
||||
>{companyName}</span><span
|
||||
>(以下简称</span><span
|
||||
>“{companyName}”</span><span
|
||||
>或“我们”)为您提供的</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务。您在使用本软件前,请仔细阅读本政策,以了解我们处理您个人信息的详情。其中有关个人敏感信息以及与您个人信息权益相关的重要内容我们已用加粗形式提示,请特别关注。如您是未满14周岁的未成年人,请在您的父母或其他监护人陪同下仔细阅读并充分理解本政策,并征得您的父母或其他监护人的同意后使用</span><span
|
||||
>{productName}</span><span
|
||||
>产品与服务。</span></p>
|
||||
<p><strong>特别说明:</strong></p>
|
||||
<p><span>1.本政策适用对象为访问、注册、登录及使用</span><span
|
||||
>{productName}</span><span
|
||||
>产品与服务的访问者和使用者。</span></p>
|
||||
<p>2.如您使用{productName}提供的产品与服务,则应承诺:</p>
|
||||
<p><span>1)使用</span><span
|
||||
>{productName}</span><span
|
||||
>过程中,遵守可适用的法律法规,包括但不限于《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等。</span>
|
||||
</p>
|
||||
<p><span>2)不会以非法、不合理的途径注册或使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>。</span></p>
|
||||
<p><strong>本政策将帮助您了解以下内容:</strong></p>
|
||||
<p><span>一、定义与解释</span></p>
|
||||
<p><span>二、我们如何收集和使用您的个人信息</span></p>
|
||||
<p><span>三、我们如何使用 Cookie 和同类技术</span></p>
|
||||
<p><span>四、我们如何委托处理、共享、转让、公开披露您的个人信息</span></p>
|
||||
<p><span>五、我们如何保护您的个人信息</span></p>
|
||||
<p><span>六、我们如何存储您的个人信息</span></p>
|
||||
<p><span>七、您如何实现管理您个人信息的权利</span></p>
|
||||
<p><span>八、我们如何保护未成年人的个人信息</span></p>
|
||||
<p><span>九、您的个人信息如何在全球范围转移</span></p>
|
||||
<p><span>十、我们如何更新本政策</span></p>
|
||||
<p><span>十一、如何联系我们</span></p>
|
||||
<p><span>十二、其他</span></p>
|
||||
<p><strong>一、定义与解释</strong></p>
|
||||
<p><strong>1. </strong><strong
|
||||
>{productName}</strong><strong
|
||||
>产品与服务</strong></p>
|
||||
<p><span>包括</span><strong
|
||||
>{productName}</strong><span
|
||||
>网站,客户端,插件及</span><strong
|
||||
>{productName}</strong><span
|
||||
>能提供的所有功能与解决方案。</span></p>
|
||||
<p><strong>2. 用户</strong></p>
|
||||
<p><span>是指</span><strong
|
||||
>{productName}</strong><span
|
||||
>网站、客户端、插件注册、登录以及使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务,并通过启用、浏览或上传数据至</span><strong
|
||||
>{productName}</strong><span
|
||||
>的访问者和用户。在本政策中更多地称为“您”。</span></p>
|
||||
<p><strong>3. 账号</strong></p>
|
||||
<p><span
|
||||
>指您完成真实信息注册后,享有的用户账号,该用户账号由您负责保管;您应当对以您账号下进行的所有行为负法律责任。</span>
|
||||
</p>
|
||||
<p><strong>4. 个人信息</strong></p>
|
||||
<p><span
|
||||
>个人信息是以电子或者其他方式记录的与已识别或者可识别的自然人有关的各种信息,不包括匿名化处理后的信息。为免疑义,个人信息包括但不限于敏感个人信息。</span>
|
||||
</p>
|
||||
<p><strong>5. 敏感个人信息</strong></p>
|
||||
<p><span>敏感个人信息是一旦泄露或者非法使用,容易导致自然人的人格尊严受到侵害或者人身、财产安全受到危害的个人信息,包括生物识别、宗教信仰、特定身份、医疗健康、金融账号、行踪轨迹等信息,以及不满十四周岁未成年人的个人信息。</span>
|
||||
</p>
|
||||
<p><strong>6. 个人信息的处理</strong></p>
|
||||
<p><span
|
||||
>个人信息的处理包括个人信息的收集、存储、使用、加工、传输、提供、公开、删除等。</span>
|
||||
</p>
|
||||
<p><strong>7. 个人信息处理者</strong></p>
|
||||
<p><span
|
||||
>个人信息处理者是指在个人信息处理活动中自主决定处理目的、处理方式的组织、个人。</span>
|
||||
</p>
|
||||
<p><strong>8. 个人信息主体</strong></p>
|
||||
<p><span>个人信息主体指个人信息所标识或者关联的自然人。</span></p>
|
||||
<p><strong>9. 自动化决策</strong></p>
|
||||
<p><span
|
||||
>自动化决策是指通过计算机程序自动分析、评估个人的行为习惯、兴趣爱好或者经济、健康、信用状况等,并进行决策的活动。</span>
|
||||
</p>
|
||||
<p><strong>10. 去标识化</strong></p>
|
||||
<p><span
|
||||
>去标识化指个人信息经过处理,使其在不借助额外信息的情况下,无法识别特定自然人的过程。</span>
|
||||
</p>
|
||||
<p><strong>11. 匿名化</strong></p>
|
||||
<p><span>匿名化指个人信息经过处理无法识别特定自然人且不能复原的过程。</span></p>
|
||||
<p><strong>12. 设备</strong></p>
|
||||
<p><span>设备是指可用于</span><strong
|
||||
>{productName}</strong><span
|
||||
>服务的装置,例如台式计算机、笔记本电脑、平板电脑或智能手机。</span></p>
|
||||
<p><strong>13. 唯一设备标识符</strong></p>
|
||||
<p><span>唯一设备标识符(专属 ID 或 UID)是指由设备制造商编入到设备中的一串字符,可用于以独有方式标识相应设备(移动设备的 IMEI 号)。唯一设备标识符有多种用途,包括可在不能使用Cookies时用以提供广告。</span>
|
||||
</p>
|
||||
<p><strong>14. IP地址</strong></p>
|
||||
<p><span>每台上网的设备都会指定一个编号,称为互联网协议 (IP) 地址。这些编号通常都是根据地理区域指定的。IP 地址通常可用于识别设备连接至互联网时所在的位置。</span>
|
||||
</p>
|
||||
<p><strong>15. 基站</strong></p>
|
||||
<p>
|
||||
<span>基站,即公用移动通信基站,是无线电台站的一种形式,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。</span>
|
||||
</p>
|
||||
<p><strong>16. SSL</strong></p>
|
||||
<p><span>SSL(Secure Socket Layer)又称为安全套接层,是在传输通信协议(TCP/IP)上实现的一种安全协议。SSL支持各种类型的网络,同时提供三种基本的安全服务,均通过使用公开密钥和对称密钥技术以达到信息保密的效果。</span>
|
||||
</p>
|
||||
<p><strong>17. 信息收集技术</strong></p>
|
||||
<p><strong>{productName}</strong><span
|
||||
>在本政策中所述的“自动收集”包括以下方式:</span></p>
|
||||
<p>
|
||||
<span>1)Cookie:Cookie是您浏览网页时,网站服务器放在客户端(您的计算机、移动电话或其他智能终端内)里面的一个小小的文本文件,可用于改善您的使用体验。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>2)Web:beacon(网络信标) Web beacon是装嵌在网站或电邮内的电子图像文件或其他技术,可用于计算访客数目、记录您是否及何时阅览电邮或网站,或用以使用某些Cookie。</span>
|
||||
</p>
|
||||
<p><span>3)Log files(日志文件):Log files储存自动收集的若干数据。该等数据包括互联网协议(IP)地址、浏览器类型、互联网服务提供商(ISP)、引用/退出页面、操作系统、日期/时间戳和点击流数据等。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>4)ET Tag(实体标签):ET Tag是在互联网浏览器与互联网服务器之间背后传送的HTTP协议标头,可代替Cookie,用以追踪个别使用者,使我们可更深入地了解和改善我们的服务。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>5)JavaScript:JavaScript是一种编程语言,用于制作更具互动性和动态的网页。JavaScript可以设定Cookie、阅读Cookie及删除Cookie。</span>
|
||||
</p>
|
||||
<p><strong>二、我们如何收集和使用您的个人信息</strong></p>
|
||||
<p><span>{companyName}</span><span
|
||||
>作为个人信息的处理者,会遵循合法、正当、必要、诚信的原则,仅将您主动提供的个人信息和我们主动收集的个人信息用于本政策所限定的收集个人信息的使用用途并与实现产品或服务的业务功能有直接关联,以为您提供</span><strong
|
||||
>{productName}</strong><span
|
||||
>优质的产品与服务。以及用于身份验证、安全防范、反诈骗监测、存档备份、客户的安全服务用途以提高产品和服务的安全性。具体地,我们将出于如下所述的目的收集和使用您的个人信息。</span>
|
||||
</p>
|
||||
<p><strong>1. 向您提供产品与服务过程中您主动提供的个人信息</strong></p>
|
||||
<p><strong>1.1为实现我们的基本业务功能,您仅需要向我们提供该功能所对应的基本必要的个人信息,相关法律法规和规范性文件有特殊要求的除外。若您拒绝提供,我们将无法向您提供相应的服务。提示您注意:如果您提供的是非本人的个人信息,请您确保已取得相关主体的同意。</strong>
|
||||
</p>
|
||||
<p><span>a.账号注册/登录及使用</span></p>
|
||||
<p><span>如果您选择使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>的功能,为便于使用我们为您提供的完整的</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务,您需要注册一个</span><strong
|
||||
>{productName}</strong><span
|
||||
>账号。在您使用手机号注册或登录</span><strong
|
||||
>{productName}</strong><span
|
||||
>账号时,您需要提供手机号码,并且通过输入短信验证码,以便我们对您的用户身份进行核验,以保护您的账号不被未经授权的进入。如果您仅需使用输入、查看、搜索等访问相关服务,您不需要注册</span><strong
|
||||
>{productName}</strong><span
|
||||
>账号及提供上述个人信息。</span></p>
|
||||
<p><span>b.文字、文档审核</span></p>
|
||||
<p><span>在您使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>网站提供的文字、文档审核时,我们会收集您提供的文本信息。请您知悉,当您体验</span><strong
|
||||
>{productName}</strong><span
|
||||
>的前述功能时,您所输入的文本内容中虽然可能包含您或他人的个人信息,但我们不会依据所涉个人信息的内容识别到个人。如果您拒绝输入前述信息,您将无法体验前述完整的服务。</span>
|
||||
</p>
|
||||
<p><span>您理解并同意,上述服务可能需要您在您的设备中开启您的摄像头(相机)、相册(图片库)的访问权限,以实现这些权限所涉及信息的收集和使用。您可在您的设备设置中逐项查看上述权限的状态,并可自行决定这些权限随时的开启或关闭。请您注意,您开启任一权限即代表您授权我们可以收集和使用相关个人信息来为您提供对应服务,您一旦关闭任一权限即代表您取消了授权,我们将不再基于对应权限继续收集和使用相关个人信息,也无法为您提供该权限所对应的服务。但是,您关闭权限的决定不会影响此前基于您的授权所进行的信息收集及使用。</span>
|
||||
</p>
|
||||
<p><span>1.2为了向您提供更优质的</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务,我们可能需要收集下述信息。如果您拒绝提供下述信息,不影响您正常使用第1.1条下的基本业务功能,但您可能无法获得这些扩展业务功能给您带来的用户体验。</span>
|
||||
</p>
|
||||
<p><span>a.订单生成</span></p>
|
||||
<p><span>当您选择购买我们的产品与服务时,系统会生成购买该产品服务的订单,您至少需要填写收货人姓名、联系电话、收货地址。同时该订单会载明订单号、您购买的产品服务内容、应支付的货款金额以及支付方式。上述所有信息将构成您的“订单信息”。我们将通过订单为您提供相应的订单查询、支付结算、完成配送、提供客服咨询与售后服务。</span>
|
||||
</p>
|
||||
<p><span>b.支付</span></p>
|
||||
<p>
|
||||
<span>在您下单后,您可以通过支付宝支付所提供的第三方支付服务。支付功能本身并不收集您的个人信息,但我们需要将您的订单号与交易金额信息与这些支付机构共享以实现其确认您的支付指令并完成支付。</span>
|
||||
</p>
|
||||
<p>c.活动参与和服务改进</p>
|
||||
<p><span>当您通过我们的客服或参加</span><strong
|
||||
>{productName}</strong><span
|
||||
>举办的活动时,我们会收集您自愿参与填写的信息。如您参与</span><strong
|
||||
>{productName}</strong><span
|
||||
>线上活动时填写的调查问卷中可能包含您的姓名、电话、电子邮箱、家庭地址信息。并且,当您在</span><strong
|
||||
>{productName}</strong><span
|
||||
>注册、登录或后续使用过程中,您可以进入</span><strong
|
||||
>{productName}</strong><span
|
||||
>的账号信息页面自愿选择填写昵称、性别、生日和所在地信息。我们可能会利用前述信息向您进行活动反馈,或进行用户和市场调研分析(如判断您的大致用户属性),以提升、改进我们的产品设计,为您提供个性化的推荐和更优的服务体验。但如果您不提供这些个人信息,并不会影响您正常使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>的所有基本功能和服务。</span></p>
|
||||
<p><strong>2. 向您提供产品与服务过程中我们主动收集的个人信息</strong></p>
|
||||
<p><span
|
||||
>在符合法律法规前提下,为了保障您的账号安全和更好地为您提供优质的服务,我们会收集和使用您在使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务中产生的如下信息:</span></p>
|
||||
<p><span>系统日志</span></p>
|
||||
<p><span>当您使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>的产品与服务时,系统可能会通过Cookies或其他方式自动收集某些信息作为系统日志保存。收集此类信息的目的在于:通过数据统计改进和优化产品体验、保障服务稳定和网络安全。此类信息包含:您使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>时的详细使用情况,包括您的产品服务使用记录、搜索查询内容、访问的页面地址、登录IP、浏览器的类型、网络状态、运营商、使用的语言、访问日期和时间、系统活动及您访问的网页记录。</span>
|
||||
</p>
|
||||
<p><strong>三、我们如何使用Cookie和同类技术</strong></p>
|
||||
<p><strong>1. Cookie</strong></p>
|
||||
<p><span>为确保网站正常运转,我们会在您的计算机或移动设备上存储名为 Cookie 的小数据文件,通过Cookies收集和使用您的信息。我们使用自己的Cookies,目的是为您提供更个性化的用户体验和服务,并用于以下用途:</span>
|
||||
</p>
|
||||
<p><span
|
||||
>(1)记住您的身份。例如:Cookies有助于我们辨认您作为我们的注册用户的身份,或保存您向我们提供的有关您的喜好或其他信息;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>(2)分析您使用我们服务的情况。例如,我们可利用Cookies来了解您使用我们的服务进行什么活动,或哪些网页或服务最受您的欢迎;</span>
|
||||
</p>
|
||||
<p><strong>2. 网站信标和像素标签</strong></p>
|
||||
<p><span>除 Cookie 外,我们还可能会在网站上使用网站信标和像素标签等其他同类技术。例如,我们向您发送的电子邮件可能含有链接至我们网站内容的点击 URL。如果您点击该链接,我们则会跟踪此次点击,帮助我们了解您的产品或服务偏好并改善客户服务。网站信标通常是一种嵌入到网站或电子邮件中的透明图像。借助于电子邮件中的像素标签,我们能够获知电子邮件是否被打开。如果您不希望自己的活动以这种方式被追踪,则可以随时从我们的寄信名单中退订。</span>
|
||||
</p>
|
||||
<p><strong>四、我们如何委托处理、共享、转让、公开披露您的个人信息</strong></p>
|
||||
<p><strong>1.委托处理</strong></p>
|
||||
<p><span>为了向您提供更完善、更优质的产品和服务,我们可能会委托第三方(包括公司、组织和个人)处理您的某些个人信息。对我们委托处理您个人信息的第三方,我们会与其签署严格的数据处理协议,明确约定委托处理的目的、期限、处理方式、个人信息的种类、保护措施以及双方的权利和义务等,并对第三方的个人信息处理活动进行监督,要求第三方仅按照我们的要求、本政策的规定以及其他任何相关的保密和安全措施来处理您的个人信息,不得超出约定的处理目的、处理方式等处理个人信息。如果您拒绝我们的第三方在提供服务时收集为提供服务所必需的个人信息,将可能导致您在使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务的过程中无法享受该第三方提供的服务。</span></p>
|
||||
<p><span>例如,当您使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>提供的产品与服务时,根据相关法律法规要求,需要您进行实名认证。我们会通过国家信用评级业务主管部门认可的征信公司核实这些信息。 如果您拒绝与我们合作的征信公司收集为提供服务所必需的个人信息,将可能导致您在使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务的过程中无法享受该供应商提供的实名认证相关服务。</span></p>
|
||||
<p><strong>2.共享</strong></p>
|
||||
<p><span
|
||||
>我们不会与第三方(包括公司、组织和个人)共享您的个人信息,但以下情况除外:</span>
|
||||
</p>
|
||||
<p><span
|
||||
>(1)在获取明确同意的情况下共享:获得您的明确同意后,我们会与其他方共享您的个人信息。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>(2)在法定情形下的共享:我们可能会根据法律法规规定、诉讼争议解决需要,或按行政、司法机关依法提出的要求,对外共享您的个人信息。</span>
|
||||
</p>
|
||||
<p><span>对我们与之共享个人信息的公司、组织和个人,我们会与其签署严格的保密协定,要求他们按照我们的说明、本隐私政策以及其他任何相关的保密和安全措施来处理个人信息,并且要求他们的处理行为不得违反中国个人信息保护和数据安全相关的法律法规、国家标准和其他规范性文件。原则上,我们与之共享个人信息的公司、组织和个人无权将我们共享的个人信息用于本政策之外的其他任何用途。</span>
|
||||
</p>
|
||||
<p><strong>3.转让</strong></p>
|
||||
<p><span
|
||||
>我们不会将您的个人信息转让给任何第三方(包括公司、组织和个人),但以下情况除外:</span>
|
||||
</p>
|
||||
<p><span
|
||||
>1)在获取明确同意的情况下转让:获得您的明确同意后,我们会向其他方转让您的个人信息;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2)根据适用的法律法规、法律程序的要求、强制性的行政或司法要求所必须的情况下进行提供;</span>
|
||||
</p>
|
||||
<p><span>3)在本产品服务提供者发生合并、收购或破产清算情形,或其他涉及合并、收购或破产清算情形时,如涉及到个人信息转让,我们会告知您接收方的名称或者姓名和联系方式,并要求新的持有您个人信息的接收方继续受本政策的约束,对于接收方变更原先的处理目的、处理方式的,我们将要求该接收方重新向您征求授权同意。</span>
|
||||
</p>
|
||||
<p><strong>4. 公开披露</strong></p>
|
||||
<p><span>我们仅会在以下情况下,公开披露您的个人信息:</span></p>
|
||||
<p><span>1)获得您单独同意或基于您的主动选择,我们可能会公开披露您的个人信息;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>2)在法律、法律程序、诉讼或政府主管部门强制性要求的情况下,我们可能会公开披露您的个人信息。</span>
|
||||
</p>
|
||||
<p><span>3)如果我们确定您出现违反法律法规或严重违反本产品相关协议规则的情况,或为保护本产品及其关联公司用户或公众的人身财产安全免遭侵害,我们可能依据法律法规或本产品相关协议规则披露关于您的个人信息,包括相关违规行为以及本产品已对您采取的措施。</span>
|
||||
</p>
|
||||
<p><strong>5. 委托处理、共享、转让、披露个人信息时事先征得授权同意的例外</strong></p>
|
||||
<p><span>以下情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:</span>
|
||||
</p>
|
||||
<p><span>1)与我们履行法律法规规定的义务相关的;</span></p>
|
||||
<p><span>2)与国家安全、国防安全有关的;</span></p>
|
||||
<p><span>3)与公共安全、公共卫生、重大公共利益有关的;</span></p>
|
||||
<p><span>4)与犯罪侦查、起诉、审判和判决执行等有关的;</span></p>
|
||||
<p><span
|
||||
>5)出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;</span>
|
||||
</p>
|
||||
<p><span>6)您自行向社会公众公开的个人信息;</span></p>
|
||||
<p><span
|
||||
>7)从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>请您知悉,根据法律规定,共享、转让经去匿名化处理的个人信息,不属于个人信息的对外共享、转让及公开披露行为,对此类数据的保存及处理将无需另行向您通知并征得您的同意。</span>
|
||||
</p>
|
||||
<p><strong>五、我们如何保护您的个人信息</strong></p>
|
||||
<p><span
|
||||
>1.我们非常重视用户的隐私和个人信息保护,也会采取合理的措施保护用户的个人信息。除法律法规规定或本政策另有约定的情形外,</span><span
|
||||
>{companyName}</span><span
|
||||
>将运用各种安全技术和程序建立完善的管理制度来保护您的个人信息,以免遭受未经授权的访问、使用或披露。未经用户许可我们不会向第三方公开、透露用户个人信息,并会对相关信息采用专业加密存储与传输方式,保障用户个人信息的安全。</span>
|
||||
</p>
|
||||
<p><span>2.您理解并同意,在不透露单个用户隐私资料的前提下,</span><span
|
||||
>{companyName}</span><span
|
||||
>有权对整个用户数据库进行技术分析,只有对进行分析、整理后达到匿名化后的用户数据方才进行商业上的利用。</span>
|
||||
</p>
|
||||
<p><span>3.数据安全措施</span></p>
|
||||
<p><span>1)</span><strong
|
||||
>{productName}</strong><span
|
||||
>已采用符合业界标准的安全防护措施,包括建立合理的制度规范、安全技术来防止您的个人信息遭到未经授权的访问使用、修改,避免数据的损坏或丢失。例如,</span><strong
|
||||
>{productName}</strong><span
|
||||
>的网络服务采取了传输层安全协议等加密技术,通过https等方式提供浏览服务,确保用户数据在传输过程中的安全;我们采取加密技术(TLS、SSL)、匿名化处理和保护机制对用户个人信息进行加密保存,并通过隔离技术进行隔离;我们通过建立数据分类分级制度、数据安全管理规范、数据安全开发规范来管理规范个人信息的存储和使用;我们通过信息接触者保密协议等方式,仅允许有必要知晓这些信息的</span><strong
|
||||
>{productName}</strong><span
|
||||
>及</span><strong
|
||||
>{productName}</strong><span
|
||||
>关联方的员工、合作伙伴访问个人信息,并为此设置了严格的访问权限控制和监控机制,同时要求接触到您个人信息的所有人员履行相应的保密义务。如果未能履行这些义务,会被追究法律责任或被中止与</span><strong
|
||||
>{productName}</strong><span
|
||||
>的合作关系;我们会举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>3)我们会采取一切合理可行的措施,确保未收集无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>4)互联网并非绝对安全的环境,而且电子邮件、即时通讯、及与其他用户的交流方式并未加密,我们强烈建议您不要通过此类方式发送个人信息。请使用复杂密码,协助我们保证您的账号安全。</span>
|
||||
</p>
|
||||
<p><span>5)在不幸发生个人信息安全事件后,</span><span
|
||||
>{companyName}</span><span
|
||||
>将按照法律法规的要求,及时向您告知:安全事件发生的原因、可能造成的危害、涉及个人信息的种类、</span><span
|
||||
>{companyName}</span><span
|
||||
>已采取或将要采取的处置措施、您可自主防范和降低风险的建议和可采取的措施等。</span><span
|
||||
>{companyName}</span><span
|
||||
>将及时将事件相关情况以邮件、短信、电话、发送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。同时,</span><span
|
||||
>{companyName}</span><span
|
||||
>还将按照监管部门要求,主动上报个人信息安全事件的处置情况。请您知悉,根据可适用法律法规的规定,如采取措施能够有效避免信息泄露、篡改、丢失造成危害的,</span><span
|
||||
>{companyName}</span><span
|
||||
>可以不向您进行告知。</span></p>
|
||||
<p><strong>六、我们如何存储您的个人信息</strong></p>
|
||||
<p>
|
||||
<span>本产品与服务仅面向中国大陆地区(仅为本政策之目的,不包含香港特别行政区、澳门特别行政区和台湾地区)提供。原则上,我们在中华人民共和国境内收集产生的个人信息,存储在中华人民共和国境内,不会进行跨境传输。</span>
|
||||
</p>
|
||||
<p><strong>1.存储信息的地点</strong></p>
|
||||
<p><span>{companyName}</span><span
|
||||
>遵守法律法规的规定,收集的有关您的信息和资料将保存在中华人民共和国境内大陆地区</span><span
|
||||
>{companyName}</span><span
|
||||
>的服务器上。以下情形除外:</span></p>
|
||||
<p><span>• 法律法规有明确规定;</span></p>
|
||||
<p><span>• 获得您的明确授权;</span></p>
|
||||
<p><span>• 您通过互联网进行跨境交易等个人主动行为。</span></p>
|
||||
<p><strong>2.存储信息的期限</strong></p>
|
||||
<p><span>一般而言,我们将在您使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务期间为实现本政策所述目的所必需的时间内保留您的个人信息,除非可适用的法律法规或国家规范性文件另有规定。在超过上述期限,或您主动要求删除您的个人信息或注销您的账号后,我们将根据适用法律法规的要求尽快删除您的个人信息,除非可适用的法律法规或国家规范性文件要求在更长的期间内保留这些信息。但在下列情况下,</span><span
|
||||
>{companyName}</span><span
|
||||
>因需符合法律要求,更改个人信息的存储时间:</span></p>
|
||||
<p><span>• 为遵守适用的法律法规等有关规定;</span></p>
|
||||
<p><span>• 为遵守法院判决、裁定或其他法律程序的规定;</span></p>
|
||||
<p><span>• 为遵守相关政府机关或法定授权组织的要求;</span></p>
|
||||
<p><span>• </span><span
|
||||
>{companyName}</span><span
|
||||
>有理由确信需要遵守法律法规等有关规定;</span></p>
|
||||
<p><span>• 为执行相关服务协议或本政策、维护社会公共利益,为保护</span><span
|
||||
>{companyName}</span><span
|
||||
>的客户、</span><span
|
||||
>{companyName}</span><span
|
||||
>、其他用户或雇员的人身财产安全或其他合法权益所合理必需的用途。</span></p>
|
||||
<p><span>在您终止使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>后,</span><span
|
||||
>{companyName}</span><span
|
||||
>会停止对您的信息的收集和使用,法律法规或监管部门另有规定的除外。</span></p>
|
||||
<p><span>当</span><strong
|
||||
>{productName}</strong><span
|
||||
>的相关服务发生停止运营的情形时,</span><span
|
||||
>{companyName}</span><span
|
||||
>将采取包括发送通知和公告形式通知您,并在合理的期限内删除服务器中留存的您的个人信息。</span>
|
||||
</p>
|
||||
<p><strong>七、您如何实现管理您个人信息的权利</strong></p>
|
||||
<p><span
|
||||
>按照中国相关的法律、法规、标准,您在个人信息处理活动中享有若干权利,具体包括:</span>
|
||||
</p>
|
||||
<p><span
|
||||
>• 您对个人信息处理享有知情权、决定权,有权限制或者拒绝他人对您个人信息进行处理,法律、行政法规另有规定的除外;</span>
|
||||
</p>
|
||||
<p><span
|
||||
>• 您有权向个人信息处理者查阅、复制您的个人信息,法律另有规定情形的除外;</span>
|
||||
</p>
|
||||
<p><span>• 您有权请求将您的个人信息转移至您指定的个人信息处理者;</span></p>
|
||||
<p><span
|
||||
>• 您发现您的个人信息不准确或不完整的,有权请求个人信息处理者更正、补充;</span>
|
||||
</p>
|
||||
<p><span>• 您有权请求删除您的个人信息;</span></p>
|
||||
<p><span>• 您有权要求个人信息处理者对其个人信息处理规则进行解释说明。</span></p>
|
||||
<p><span>当您是使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>的产品与服务的开发者时:</span></p>
|
||||
<p><span>您可以参考下面的步骤进行相关操作:</span></p>
|
||||
<p><strong>1. 查阅您的个人信息</strong></p>
|
||||
<p><span>您可以通过以下步骤查阅昵称、电子邮箱、手机号、登录密码等基本信息:</span></p>
|
||||
<p><span>1)进入</span><strong
|
||||
>{productName}</strong><span
|
||||
>网站,登录您的</span><strong
|
||||
>{productName}</strong><span
|
||||
>账号;</span></p>
|
||||
<p><span>2)点击已登录的账号名称,点击基本资料菜单;</span></p>
|
||||
<p><span>3)点击个人资料;</span></p>
|
||||
<p><span>4)查看所需信息。 </span><strong
|
||||
>{productName}</strong><span
|
||||
>是网站业务,具体操作可能随着版本迭代略有差异。如果您无法通过上述操作、页面访问这些个人信息,您可以通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>客服,随时与我们联系。或根据本政策第十一章所述的方式联系我们的客服,我们将在15个工作日内对您的请求进行处理。</span>
|
||||
</p>
|
||||
<p><strong>2. 更正/补充您的个人信息</strong></p>
|
||||
<p><span>您可以通过以下步骤更正/补充邮箱、手机号、登录密码等基本信息:</span></p>
|
||||
<p><span>1)进入</span><strong
|
||||
>{productName}</strong><span
|
||||
>网站,登录您的</span><strong
|
||||
>{productName}</strong><span
|
||||
>账号;</span></p>
|
||||
<p><span>2)点击已登录的账号名称,点击基本资料菜单;</span></p>
|
||||
<p><span>3)点击基本资料或安全设置栏;</span></p>
|
||||
<p><span>4)更改所需信息。 不同版本的</span><strong
|
||||
>{productName}</strong><span
|
||||
>具体操作可能略有差异。当您发现我们处理的关于您的个人信息有错误时,您有权要求我们作出更正。如果您无法通过上述操作、页面更正这些个人信息,您可以通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>-客服服务,随时与我们联系。或根据本政策第十一章所述的方式联系我们的客服,我们将在15个工作日内对您的请求进行处理。</span>
|
||||
</p>
|
||||
<p><strong>3. 删除您的个人信息</strong></p>
|
||||
<p><span>您可以通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>-客服服务,随时与我们联系。或根据本政策第十一章所述的方式联系我们的客服,我们将在15个工作日内对您的请求进行处理。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>若我们决定响应您的删除请求,我们还将同时通知从我们获得您的个人信息的实体,要求其及时删除,除非法律法规另有规定,或这些实体获得您的独立授权。</span>
|
||||
</p>
|
||||
<p><strong>4. 获取您的个人信息副本</strong></p>
|
||||
<p><span>您有权获取您的个人信息副本,您可以通过您可以通过</span><strong
|
||||
>{productName}</strong><span
|
||||
> – 客服服务,随时与我们联系。或根据本政策第十一章所述的方式联系我们的客服,我们将在15个工作日内对您的请求进行处理。</span>
|
||||
</p>
|
||||
<p><strong>5. 转移您的个人信息</strong></p>
|
||||
<p><span
|
||||
>您有权请求将您的个人信息转移至您指定的个人信息处理者,符合国家网信部门规定条件的,我们会为您提供转移的途径。您可以通过您可以通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>- 在线咨询 - 人工服务,随时与我们联系。或根据本政策第十一章所述的方式联系我们的客服,我们将在15个工作日内对您的请求进行处理。</span>
|
||||
</p>
|
||||
<p><strong>6. 改变您授权同意的范围或撤回您的授权</strong></p>
|
||||
<p><span
|
||||
>您可以通过注销账号的方式改变您授权我们继续收集个人信息的范围或撤回您的授权,您可以通过以下步骤进行:请通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>客服服务,提交注销账号申请。当您撤回同意或授权后,我们无法继续为您提供撤回同意或授权所对应的服务,也不再处理您相应的个人信息。但您撤回同意或授权的决定,不会影响此前基于您的授权而开展的个人信息处理。</span>
|
||||
</p>
|
||||
<p><strong>7. 注销账户</strong></p>
|
||||
<p><span>您可以通过以下步骤进行: 请通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>- 客服服务,提交注销账号申请。经过线下的核实,告知注销账号相应风险后,为您进行注销操作。</span><strong
|
||||
>{productName}</strong><span
|
||||
>提供的产品服务需通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>网站账号使用和管理,注销账号会导致该账号下全部服务停止。</span></p>
|
||||
<p><strong>8. 响应您的上述请求</strong></p>
|
||||
<p><span
|
||||
>我们将采取适当的技术手段,保证您对于自己的个人资料可进行查阅、补充、更正、删除,或通过</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务发布的反馈或投诉渠道申请我们对相关信息进行补充、更正、删除、复制、转移;我们收到您的申请后将按流程予以处理,为保障安全,按照流程,</span><span
|
||||
>{companyName}</span><span
|
||||
>可能会先要求您验证自己的身份,我们需要您提供账号(手机号码)以及短信验证码,待核验成功后再处理您的请求。我们将在15个工作日内做出答复,对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情况收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际(例如,涉及备份磁带上存放的信息)的请求,我们可能会予以拒绝。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>如果您无法查阅、补充、更正、删除、复制、转移您的个人信息,或改变您授权同意的范围或撤回授权、注销账号、限制自动化决策和关闭定向推送,或您需要查阅、补充、更正、删除、复制、转移您在使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>时所产生的其他个人信息,或您认为我们存在任何违反法律法规或与您关于个人信息的收集或使用的约定,您可通过我们对外公布的相关产品或服务的官方反馈渠道与我们联系。</span>
|
||||
</p>
|
||||
<p><span>请您知悉,在以下情形中,我们将无法响应您的请求:</span></p>
|
||||
<p><span>1)与我们履行法律法规规定的义务相关的;</span></p>
|
||||
<p><span>2)与国家安全、国防安全直接相关的;</span></p>
|
||||
<p><span>3)与公共安全、公共卫生、重大公共利益直接相关的;</span></p>
|
||||
<p><span>4)与犯罪侦查、起诉、审判和执行判决等直接相关的;</span></p>
|
||||
<p><span>5)我们有充分证据表明您存在主观恶意或滥用权利的;</span></p>
|
||||
<p><span>6)出于您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;</span>
|
||||
</p>
|
||||
<p><span>7)响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的;</span></p>
|
||||
<p><span>8)涉及商业秘密的。</span></p>
|
||||
<p><strong>八、我们如何保护未成年人的个人信息</strong></p>
|
||||
<p><span>1.</span><span
|
||||
>{companyName}</span><span
|
||||
>非常重视对未成年人个人信息的保护,我们将根据国家相关法律法规的规定保护未成年人的个人信息。</span>
|
||||
</p>
|
||||
<p><span>2.我们将不满18周岁的任何人均视为未成年人。根据相关法律法规的规定,若您是年满14周岁的未成年人,我们在收集您的个人信息之前,会征得您或您的监护人的同意,并且当您、父母或者其他监护人要求我们更正、删除未成年人个人信息的,我们将及时采取措施予以更正、删除,但法律、行政法规另有规定的除外。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>3.若您是不满14周岁的未成年人(下称儿童),我们在收集您的个人信息之前,会征得您的父母或其他监护人的同意。</span>
|
||||
</p>
|
||||
<p><span>4.我们在处理儿童个人信息时,将采取以下措施予以保障:对于收集到的儿童个人信息,我们除遵守本政策关于用户个人信息的约定外,还会秉持正当必要、知情同意、目的明确、安全保障、依法利用的原则,严格遵循《儿童个人信息网络保护规定》等法律法规的要求进行存储、使用、披露,且不会超过实现收集、使用目的所必须的期限,到期后我们会对儿童个人信息进行删除。</span>
|
||||
</p>
|
||||
<p><span
|
||||
>5.若您是未成年人的父母或监护人,如您对本政策中所述相关事宜有任何疑问、意见、建议或投诉、举报需求,请通过第十一章所述方式与我们进行反馈。</span>
|
||||
</p>
|
||||
<p><strong>九、您的个人信息如何在全球范围转移</strong></p>
|
||||
<p><span>原则上,我们在中华人民共和国境内收集产生的个人信息,会存储在中华人民共和国境内,不会进行跨境传输。如因业务等需要,确需向境外提供您的个人信息的,我们会向您告知境外接收方的名称或者姓名、联系方式、处理目的、处理方式、个人信息的种类以及您向境外接收方行使本法规定权利的方式和程序等事项,并在获得您的单独同意和法律法规规定的跨境提供应具备的条件后,才会将您的个人信息转移到您使用产品与服务所在国家/地区的境外管辖区,或者使您的个人信息受到来自这些管辖区的访问。</span>
|
||||
</p>
|
||||
<p><span>请您知悉,此类管辖区可能设有不同的个人信息保护相关法律法规,我们会遵守管辖区内相关法律法规的要求确保您的个人信息得到充分保护。如此类管辖区未设立个人信息保护相关的法律法规,我们会尽力保障您的个人信息得到在中华人民共和国境内足够同等的保护。</span>
|
||||
</p>
|
||||
<p><strong>十、我们如何更新本政策</strong></p>
|
||||
<p><span>1.为给您提供更好的服务,</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务将不时更新与变化,我们会适时对本政策进行修订,这些修订构成本政策的一部分。但是未经您明确同意,我们不会削减您按照本政策所应享有的权利。同时</span><strong
|
||||
>{productName}</strong><span
|
||||
>会将本政策的旧版本存档,供您查阅。</span></p>
|
||||
<p><span>2.对于重大变更,</span><strong
|
||||
>{productName}</strong><span
|
||||
>还会提供更为显著的通知,包括</span><strong
|
||||
>{productName}</strong><span
|
||||
>会通过网站公示的方式进行通知甚至向您提供弹窗提示。如果您不同意本政策,或对本政策修改、更新的内容有异议,您可以选择停止使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>产品与服务或者注销</span><strong
|
||||
>{productName}</strong><span
|
||||
>账号。但请您知悉,您账号注销之前、停止使用本服务之前的行为和活动仍受本政策的约束。</span>
|
||||
</p>
|
||||
<p><span>本政策所指的重大变更包括但不限于:</span></p>
|
||||
<p><span>• </span><strong
|
||||
>{productName}</strong><span
|
||||
>的服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式等;</span>
|
||||
</p>
|
||||
<p><span>• </span><strong
|
||||
>{productName}</strong><span
|
||||
>在控制权等方面发生重大变化。如并购重组等引起的所有者变更等;</span></p>
|
||||
<p><span>• 个人信息共享、转让或公开披露的主要对象发生变化;</span></p>
|
||||
<p><span>• 您参与个人信息处理方面的权利及其行使方式发生重大变化;</span></p>
|
||||
<p><span>• </span><strong
|
||||
>{productName}</strong><span
|
||||
>负责处理个人信息安全的责任部门、联络方式及投诉渠道发生变化时;</span></p>
|
||||
<p><span>• 个人信息安全影响评估报告表明存在高风险时;</span></p>
|
||||
<p><span>• 伴随政策或法律发布实施,为响应国家政策或者法律规范,做出变更。</span></p>
|
||||
<p><strong>十一、如何联系我们</strong></p>
|
||||
<p><span
|
||||
>为更好地保护您的个人信息,我们设立有专门的网络安全与个人信息保护部门。如您在使用</span><strong
|
||||
>{productName}</strong><span
|
||||
>的过程中对本隐私政策有任何疑问或建议,请通过以下联系方式与我们联系:</span>
|
||||
</p>
|
||||
<p><span>电 话:021-64386496-228</span></p>
|
||||
<p><span>邮 箱: zhengjianxiong@guomai.cn</span>
|
||||
</p>
|
||||
<p><span
|
||||
>地址:上海市徐汇区古宜路181号B座401</span>
|
||||
</p>
|
||||
<p><span>为保障我们高效处理您的问题并及时向您反馈,需要您提交身份证明、有效联系方式和书面请求及相关证据,我们会在验证您的身份后处理您的请求。一般情况下,我们将在十五个工作日内回复。 如果您对我们的回复不满意,特别是您认为我们的个人信息处理行为损害了且在您向我们反馈后我们无法提供让您满意的回复且拒绝改进的,您可以向相关监管机构进行投诉和举报。</span>
|
||||
</p>
|
||||
<p><strong>十二、其他</strong></p>
|
||||
<p><span
|
||||
>与本政策相关的任何纠纷,双方应经友好协商解决;若不能协商解决,您在此同意向安上海市徐汇区人民法院提起诉讼。</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>如果有管辖权的任何法院裁定或判决本政策的任何条款无效,则该条款将从本政策中移除,但该条款的无效不影响本政策其余条款的效力。本政策的其余条款将继续执行。</span>
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
import { useUserinfoStore } from "@/service/userinfoStore";
|
||||
import {Avatar} from "antd";
|
||||
import React from "react";
|
||||
import DefaultAvatar from '@/assets/avatar.png'
|
||||
|
||||
export const UserAvatar = ({size,className}: { className?:string;size?: "large" | "small" | "default" | number }) => {
|
||||
const {userinfo} = useUserinfoStore()
|
||||
return <Avatar onError={()=>false} alt="点击替换头像" className={className} src={userinfo?.avatar || DefaultAvatar} size={size}/>
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
import {Button, Input, Space} from "antd";
|
||||
import {useCountDown, useSetState} from "ahooks";
|
||||
import React from "react";
|
||||
import {cx} from "@emotion/css";
|
||||
import { isPhone } from "@/utils/strings";
|
||||
import { sendCode } from "@/service/api/user";
|
||||
|
||||
export const InputValidateCode: React.FC<{
|
||||
className?: string;
|
||||
show?: boolean;
|
||||
defaultValue?: string;
|
||||
value?: string;
|
||||
onInput?: (v: string) => void;
|
||||
onChange?: (v: string) => void;
|
||||
phone?: string;
|
||||
onError?: (err: string, isPhone?: boolean) => void;
|
||||
}> = (props) => {
|
||||
const [data, setData] = useSetState<{
|
||||
targetDate?: number;
|
||||
sending?: boolean
|
||||
}>({});
|
||||
// 倒计时
|
||||
const [countdown] = useCountDown({
|
||||
targetDate: data.targetDate,
|
||||
});
|
||||
// 发送验证码
|
||||
const handleSendCode = () => {
|
||||
if (!props.phone) {
|
||||
props.onError && props.onError('请填写手机号', true);
|
||||
return;
|
||||
}
|
||||
if (!isPhone(props.phone)) {
|
||||
props.onError && props.onError('请填写正确的手机号', true);
|
||||
return;
|
||||
}
|
||||
props.onError && props.onError('');
|
||||
setData({sending: true})
|
||||
// 发送
|
||||
sendCode(props.phone).then(() => {
|
||||
setData({
|
||||
targetDate: Date.now() + 60000
|
||||
})
|
||||
}).catch((e: BizError) => {
|
||||
props.onError && props.onError(e.message || '发送失败,请重新发送');
|
||||
}).finally(() => setData({sending: false}))
|
||||
}
|
||||
return (<div className={cx({hidden: !props.show}, "validate-code input-row align-center space-between")}>
|
||||
<Space>
|
||||
<div className="input-code-wrapper">
|
||||
<Input
|
||||
className={`input-code ${props.className}`}
|
||||
defaultValue={props.defaultValue}
|
||||
maxLength={6}
|
||||
size={'large'}
|
||||
placeholder="输入验证码"
|
||||
onChange={e => {
|
||||
props.onChange && props.onChange(e.currentTarget.value);
|
||||
}}/>
|
||||
</div>
|
||||
<Button
|
||||
className="ml-5 btn-solid"
|
||||
loading={data.sending}
|
||||
size={'large'}
|
||||
disabled={countdown > 0 || !props.phone}
|
||||
onClick={handleSendCode}
|
||||
style={{width: 100, fontSize: 14}}
|
||||
>
|
||||
{data.sending ? '发送中' : (countdown > 0 ? `${Math.round(countdown / 1000)}s` : '获取验证码')}
|
||||
</Button>
|
||||
</Space>
|
||||
</div>)
|
||||
}
|
@ -1,139 +0,0 @@
|
||||
import React, {ChangeEvent, useState} from "react";
|
||||
import { Button, Form, Input, Space } from 'antd';
|
||||
import {useRequest, useSetState} from "ahooks";
|
||||
import css from "./user.module.less";
|
||||
import {InputValidateCode} from "./input.tsx";
|
||||
import {isPhone} from "@/utils/strings.ts";
|
||||
import {useUserinfoStore} from "@/service/userinfoStore.ts";
|
||||
|
||||
export type LoginFormProp = {
|
||||
type?: string;
|
||||
agreeTerms?: boolean;
|
||||
onSuccess: (data: Account) => void;
|
||||
}
|
||||
|
||||
export const LoginForm: React.FC<LoginFormProp> = (props) => {
|
||||
const {login, confirmLogin} = useUserinfoStore();
|
||||
// 输入数据
|
||||
const [data, setData] = useSetState<{
|
||||
phone?: string;
|
||||
code?: string;
|
||||
}>({
|
||||
phone: '',
|
||||
code: ''
|
||||
})
|
||||
const [confirmState,setConfirmState] = useSetState({
|
||||
loginConfirmVisible: false,
|
||||
confirmLoginKey: ''
|
||||
})
|
||||
const handleConfirmLogin = ()=>{
|
||||
confirmLogin({
|
||||
confirm_login_key: confirmState.confirmLoginKey
|
||||
}).then((data)=>{
|
||||
props.onSuccess(data);
|
||||
})
|
||||
}
|
||||
// 错误
|
||||
const [err, setErr] = useState<{
|
||||
phone?: string;
|
||||
code?: string;
|
||||
all?: string;
|
||||
}>({})
|
||||
// const {login, loginTarget} = useUserinfoStore();
|
||||
// 执行登录
|
||||
const {run, loading} = useRequest(() => {
|
||||
setErr({})
|
||||
if (!data.phone) {
|
||||
setErr({phone: '请填写手机号'})
|
||||
return Promise.reject();
|
||||
} else if (!isPhone(data.phone)) {
|
||||
setErr({phone: '手机号错误,请填写的正确的手机号'})
|
||||
return Promise.reject();
|
||||
} else if (!data.code) {
|
||||
setErr({code: '请填写验证码'})
|
||||
return Promise.reject();
|
||||
} else if (!props.agreeTerms) {
|
||||
setErr({code: '请阅读并同意服务协议和隐私政策'})
|
||||
return Promise.reject();
|
||||
}
|
||||
return login(data)
|
||||
}, {
|
||||
manual: true,
|
||||
async onSuccess(data) {
|
||||
props.onSuccess(data);
|
||||
},
|
||||
onError(e) {
|
||||
const err = e as BizError
|
||||
if(err.code == 11){
|
||||
// 已在别处登录
|
||||
setConfirmState({
|
||||
loginConfirmVisible: true,
|
||||
confirmLoginKey: String(err.data)
|
||||
})
|
||||
return;
|
||||
}
|
||||
setErr({all: e.message || `${props.type == 'link' ? '关联' : '登录'}失败,请重试`})
|
||||
}
|
||||
})
|
||||
const handlePhoneInput = (e: ChangeEvent<HTMLInputElement>) => {
|
||||
if (e.currentTarget.value) setErr({phone: undefined})
|
||||
setData({phone: e.currentTarget.value})
|
||||
}
|
||||
|
||||
return (<div>
|
||||
{/* 登录确认 */}
|
||||
<div style={{
|
||||
position:'fixed',
|
||||
inset:0,
|
||||
backgroundColor:'#fff',
|
||||
zIndex:190090,
|
||||
display:confirmState.loginConfirmVisible?'flex':'none',
|
||||
alignItems:'center',
|
||||
justifyContent:'center',
|
||||
}}>
|
||||
<div style={{padding: '30px 20px'}}>
|
||||
<div className="login-limit-confirm text-center" style={{padding:'0 10px'}}>
|
||||
<div style={{fontSize:22,padding:'10px'}}>登录提醒</div>
|
||||
<div className="login-limit-warning">
|
||||
<div className="content" style={{fontSize:16,margin:'10px 0'}}>您的账号已在别处登录,是否继续在当前设备登录?</div>
|
||||
<div className="description" style={{fontSize:13,color:"gray"}}>*注:选择当前设备登录,将自动为您退出别处登录状态</div>
|
||||
</div>
|
||||
<Space className="footer" style={{margin:'30px 0 20px'}} size={30}>
|
||||
<Button onClick={()=>setConfirmState({loginConfirmVisible: false})}>取消</Button>
|
||||
<Button onClick={handleConfirmLogin} type={'primary'}>确认</Button>
|
||||
</Space>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h3 className={css.loginTitle}
|
||||
style={{marginBottom: props.type === 'link' ? 20 : 0}}>{props.type == 'link' ? '关联手机号' : '手机号登录/注册'}</h3>
|
||||
<Form>
|
||||
<div className={css.formItem}>
|
||||
<Input
|
||||
maxLength={11}
|
||||
type="text"
|
||||
placeholder="手机号"
|
||||
className={`${err.phone ? 'input-error' : 'input-ok'}`}
|
||||
onChange={handlePhoneInput}
|
||||
size={'large'}
|
||||
/>
|
||||
</div>
|
||||
<div className={css.formItem}>
|
||||
<InputValidateCode
|
||||
className={`${err.code ? 'input-error' : 'input-ok'}`}
|
||||
phone={data.phone}
|
||||
onChange={code => {
|
||||
setErr({code: undefined})
|
||||
setData({code})
|
||||
}}
|
||||
onError={(err, isPhone) => setErr({
|
||||
phone: isPhone ? err : undefined,
|
||||
all: isPhone ? undefined : err
|
||||
})}/>
|
||||
</div>
|
||||
<div className={css.loginError}>{err.phone || err.code || err.all}</div>
|
||||
<Button className={'btn-golden'} onClick={run} loading={loading} size="large" block type="primary"
|
||||
htmlType="submit">{props.type == 'link' ? '关联' : '登录/注册'}</Button>
|
||||
</Form>
|
||||
</div>)
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
import React from "react";
|
||||
import { Button, Checkbox, Modal, Space } from 'antd';
|
||||
import {LoginForm} from "./login-form";
|
||||
import {QrLogin} from "./qr-login.tsx";
|
||||
import css from './user.module.less'
|
||||
import {useSetState} from "ahooks";
|
||||
import {AgreementContent} from "../terms/agreement.tsx";
|
||||
import {PrivacyContent} from "../terms/privacy.tsx";
|
||||
|
||||
|
||||
const ModalContent: {
|
||||
[key: string]: { title: string; content: React.ReactNode }
|
||||
} = {
|
||||
agreement: {
|
||||
title: 'AI校对王服务协议',
|
||||
content: <AgreementContent/>
|
||||
},
|
||||
privacy: {
|
||||
title: 'AI校对王隐私政策',
|
||||
content: <PrivacyContent/>
|
||||
}
|
||||
}
|
||||
export const LoginModal: React.FC<{
|
||||
onSuccess: (data: Account) => void
|
||||
}> = (props) => {
|
||||
const [state, setState] = useSetState({
|
||||
termsChecked: true,
|
||||
modalVisible: false,
|
||||
modalType: '',
|
||||
agreement: false,
|
||||
privacy: false,
|
||||
showLinkPhone: false
|
||||
});
|
||||
const hideLinkPhone = () => {
|
||||
setState({showLinkPhone: false})
|
||||
}
|
||||
|
||||
return (<>
|
||||
{/* 登录-扫码 */}
|
||||
<div className={css.modalContainer}>
|
||||
<div className={`d-flex ${css.modalContent}`}>
|
||||
<LoginForm agreeTerms={state.termsChecked} onSuccess={props.onSuccess}/>
|
||||
<div className={css.dividerLine}></div>
|
||||
<QrLogin agreeTerms={state.termsChecked} onSuccess={(data, showBind) => {
|
||||
if (showBind) setState({showLinkPhone: true})
|
||||
else props.onSuccess(data)
|
||||
}}/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-center fz-small text-tip" style={{marginTop: 20}}>
|
||||
<Checkbox checked={state.termsChecked}
|
||||
onChange={e => setState({termsChecked: e.target.checked})}>
|
||||
<span className="text-tip">您已经同意</span>
|
||||
</Checkbox>
|
||||
<a className="text-link"
|
||||
onClick={() => setState({modalVisible: true, modalType: 'agreement'})}>服务协议</a> 和 <a
|
||||
className="text-link" onClick={() => setState({modalVisible: true, modalType: 'privacy'})}>隐私政策</a>
|
||||
</div>
|
||||
{/* 扫码成功后绑定手机号 */}
|
||||
{state.showLinkPhone && <Modal
|
||||
open={true}
|
||||
destroyOnClose={true}
|
||||
maskClosable={false}
|
||||
footer={null}
|
||||
width={360}
|
||||
centered
|
||||
onCancel={() => setState({showLinkPhone: false})}
|
||||
>
|
||||
<div style={{padding: '30px 20px'}}>
|
||||
<LoginForm type={"link"} agreeTerms={true} onSuccess={hideLinkPhone}/>
|
||||
</div>
|
||||
</Modal>}
|
||||
{/* 协议 */}
|
||||
<Modal
|
||||
centered
|
||||
open={state.modalVisible}
|
||||
onCancel={() => setState({modalVisible: false})}
|
||||
zIndex={10001}
|
||||
footer={null}
|
||||
>
|
||||
<div className="modal-terms">
|
||||
<p className="terms-title">
|
||||
<strong>{ModalContent[state.modalType]?.title}</strong>
|
||||
</p>
|
||||
<div className="modal-terms-container container-overflow-auto" style={{maxHeight: 300}}>
|
||||
{ModalContent[state.modalType]?.content}
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
</>
|
||||
)
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
import React, {useEffect} from "react";
|
||||
import {useRequest, useSetState} from "ahooks";
|
||||
import {Spin} from "antd";
|
||||
|
||||
import css from './user.module.less'
|
||||
import {getLoginQR, qrLoginQRStatus} from "@/service/api/user";
|
||||
|
||||
export const QrLogin: React.FC<{
|
||||
agreeTerms?: boolean;
|
||||
onSuccess: (data: Account,showBind?:boolean) => void
|
||||
}> = (props) => {
|
||||
const [state, setState] = useSetState<{
|
||||
qrUrl?: string;
|
||||
ticket?: string;
|
||||
invalid?: boolean;
|
||||
}>({})
|
||||
|
||||
let invalidTImer: number | string | null | undefined| any;
|
||||
// 查询状态
|
||||
const queryQRState = async () => {
|
||||
try {
|
||||
// 查询登录状态
|
||||
const ret = await qrLoginQRStatus();
|
||||
const state = parseInt(ret.state);
|
||||
if (state == 3 || state == 2) {
|
||||
cancel();
|
||||
invalidTImer && clearTimeout(invalidTImer)
|
||||
// 扫码成功
|
||||
props.onSuccess?.(ret,state == 2) // state == 2 执行关联 需要绑定手机号
|
||||
}
|
||||
} catch (e) {
|
||||
// 已过期
|
||||
cancel(); // 停止
|
||||
// loadQrImage();// 重新加载
|
||||
setState({invalid: true})
|
||||
}
|
||||
}
|
||||
// 定时
|
||||
const {run, cancel} = useRequest(queryQRState, {pollingInterval: 3000,manual: true})
|
||||
const setQrInvalid = () => {
|
||||
setState({invalid: true})
|
||||
cancel();
|
||||
}
|
||||
// 加载qr
|
||||
const loadQrImage = () => {
|
||||
getLoginQR().then(ret => {
|
||||
setState({
|
||||
qrUrl: ret.img_url,
|
||||
ticket: ret.ticket,
|
||||
invalid: false
|
||||
})
|
||||
setTimeout(run, 2000)
|
||||
invalidTImer = setTimeout(() => {
|
||||
setQrInvalid();
|
||||
invalidTImer = null;
|
||||
}, 6000 * 100)
|
||||
}).catch(setQrInvalid)
|
||||
}
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
loadQrImage();
|
||||
return () => {
|
||||
cancel();// 停止轮询
|
||||
}
|
||||
}, []);
|
||||
|
||||
|
||||
return (<div className={`text-center ${css.qrLogin}`}>
|
||||
<h3 className={css.loginTitle}>扫码登录</h3>
|
||||
<div className={css.qrContainer}>
|
||||
{state.qrUrl ? <img alt="" src={state.qrUrl}/> : <div className={css.qrSpin}><Spin size={"large"}/></div>}
|
||||
{state.invalid && <div className={css.invalidMask} onClick={loadQrImage}></div>}
|
||||
{!props.agreeTerms && <div className={css.qrTermsTip}>
|
||||
<span>请阅读并同意<br/>服务协议和隐私政策</span>
|
||||
</div>}
|
||||
</div>
|
||||
<div className={`fz-small text-tip`}>请用微信扫一扫 登录/注册</div>
|
||||
</div>)
|
||||
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
.userIndex {
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-top: 50px;
|
||||
line-height: 50px;
|
||||
}
|
||||
|
||||
.userinfoContent {
|
||||
padding: 50px 0;
|
||||
background-color: #fff;
|
||||
min-height: calc(100vh - 150px - var(--header-height, 60px));
|
||||
}
|
||||
|
||||
.avatarContainer {
|
||||
text-align: center;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.nicknameContainer {
|
||||
text-align: center;
|
||||
margin-bottom: 35px;
|
||||
}
|
||||
|
||||
.bindWechat {
|
||||
color: var(--primary-color);
|
||||
padding: 0 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.qrContainer {
|
||||
padding: 20px 0;
|
||||
}
|
||||
.qrImageContainer{
|
||||
width: 180px;
|
||||
height: 180px;
|
||||
border: solid 1px #eee;
|
||||
border-radius: 0;
|
||||
padding: 5px;
|
||||
margin: 10px auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.qrSpin{
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.qrImage {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
scale: 1.15;
|
||||
|
||||
canvas {
|
||||
display: block;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.invalidMask{
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
left:10px;
|
||||
top:10px;
|
||||
right:10px;
|
||||
bottom: 10px;
|
||||
background: url(./../../assets/qr-invalid-mask.png) center;
|
||||
}
|
||||
.btn{
|
||||
border: solid 1px #333;
|
||||
color: #333;
|
||||
border-radius: 5px;
|
||||
padding: 3px 15px;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
margin-left: 20px;
|
||||
&:hover{
|
||||
background-color: var(--background-hover-color);
|
||||
}
|
||||
}
|
||||
.saveBtn {
|
||||
.btn;
|
||||
background-color: #5d91ba;
|
||||
color:white;
|
||||
border-color:#5d91ba;
|
||||
&:hover{
|
||||
background-color: var(--btn-primary-hover-color);
|
||||
border-color:var(--btn-primary-hover-color);
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
|
||||
.loginTitle {
|
||||
font-size: var(--title-font-size, 16px);
|
||||
font-weight: bold;
|
||||
}
|
||||
.modalContainer{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.modalContent {
|
||||
}
|
||||
|
||||
.formItem {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.loginError {
|
||||
height: 30px;
|
||||
color: var(--error-color, red);
|
||||
text-align: center;
|
||||
margin:30px 0 5px;
|
||||
}
|
||||
|
||||
.dividerLine {
|
||||
margin: 0 30px;
|
||||
border-right: solid 1px #DFDFDF;
|
||||
min-height: 100%;
|
||||
//height: 230px;
|
||||
}
|
||||
|
||||
// 二维码
|
||||
.qrLogin{
|
||||
margin-right: 20px;
|
||||
}
|
||||
.qrContainer {
|
||||
padding: 4px;
|
||||
border: solid 1px #eee;
|
||||
margin: 10px 0;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
width: 180px;
|
||||
height: 180px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
img{
|
||||
scale: 1.15;
|
||||
display: block;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.qrSpin{
|
||||
margin: auto;
|
||||
}
|
||||
.invalidMask{
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
left:10px;
|
||||
top:10px;
|
||||
right:10px;
|
||||
bottom: 10px;
|
||||
background: url(./../../assets/qr-invalid-mask.png) center;
|
||||
}
|
||||
.qrTip{
|
||||
}
|
||||
.qrTermsTip{
|
||||
position: absolute;
|
||||
left:0px;
|
||||
top:0;
|
||||
right:0px;
|
||||
bottom: 0;
|
||||
background-color: rgba(255,255,255,0.95);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
span{
|
||||
padding: 15px;
|
||||
margin: auto;
|
||||
color: var(--primary-color);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
import React, {useEffect} from "react";
|
||||
import {AppTitleBar} from "../../components/app/title-bar.tsx";
|
||||
import {LoginModal} from "./components/user/login-modal.tsx";
|
||||
import {useBridge} from "../../core/bridge.ts";
|
||||
import {useSearchParams} from "react-router-dom";
|
||||
import {useUserinfoStore} from "../../service/userinfoStore.ts";
|
||||
|
||||
const PageLogin: React.FC = () => {
|
||||
const {userinfo} = useUserinfoStore()
|
||||
const {bridge} = useBridge()
|
||||
const [params] = useSearchParams()
|
||||
const action = params.get('action') || 'default'
|
||||
const asyncLoginInfo = (data: Account) => {
|
||||
console.log('asyncLoginInfo',data,action)
|
||||
if (action == 'proofread') { // 登录后需要立即
|
||||
bridge?.StartProofread() // 启动校对
|
||||
}else if(action == 'setting'){
|
||||
bridge?.ShowSettingForm() // 启动设置
|
||||
}
|
||||
bridge?.loginSuccess?.(JSON.stringify(data)) // 登录成功 通知插件
|
||||
}
|
||||
const handleLoginSuccess = (data: Account) => {
|
||||
asyncLoginInfo(data)
|
||||
}
|
||||
useEffect(() => {
|
||||
if (userinfo) {
|
||||
asyncLoginInfo(userinfo)
|
||||
}
|
||||
}, [userinfo])
|
||||
|
||||
return (<div className={'login-page'}>
|
||||
<AppTitleBar backgroundColor={'white'} bordered={false}/>
|
||||
<div className="login-container">
|
||||
<LoginModal onSuccess={handleLoginSuccess}/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
export default PageLogin
|
@ -1,22 +0,0 @@
|
||||
.login-page {
|
||||
//display: flex;
|
||||
//place-items: center;
|
||||
.login-container{
|
||||
height: calc(100vh - 60px);
|
||||
overflow: auto;
|
||||
}
|
||||
.login-content{
|
||||
width: 300px;
|
||||
margin: auto;
|
||||
padding: 50px 0;
|
||||
}
|
||||
.qr-login-container {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.login-method-switch {
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
import {Breadcrumb, Button, Layout, Menu, Space} from "antd";
|
||||
|
||||
const {Header, Content, Footer} = Layout;
|
||||
|
||||
const items = new Array(15).fill(null).map((_, index) => ({
|
||||
key: index + 1,
|
||||
label: `nav ${index + 1}`,
|
||||
}));
|
||||
export default function DefaultPage() {
|
||||
|
||||
const request = (url: string) => {
|
||||
return fetch(`http://localhost:10800/${url}`).then(s => s.json());
|
||||
}
|
||||
const init = () => {
|
||||
request('?action=login').then(console.log)
|
||||
}
|
||||
const info = () => {
|
||||
request('?action=info').then(console.log)
|
||||
}
|
||||
return (
|
||||
<Layout style={{
|
||||
minHeight: '100vh'
|
||||
}}>
|
||||
<Header style={{display: 'flex', alignItems: 'center'}}>
|
||||
<div className="demo-logo"/>
|
||||
<Menu
|
||||
theme="dark"
|
||||
mode="horizontal"
|
||||
defaultSelectedKeys={['2']}
|
||||
items={items}
|
||||
style={{flex: 1, minWidth: 0}}
|
||||
/>
|
||||
</Header>
|
||||
<Content style={{padding: '0 48px'}}>
|
||||
<Breadcrumb style={{margin: '15px 0'}}>
|
||||
<Breadcrumb.Item>Home</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>List</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>App</Breadcrumb.Item>
|
||||
</Breadcrumb>
|
||||
<div
|
||||
style={{
|
||||
background: '#fff',
|
||||
minHeight: 280,
|
||||
padding: 24,
|
||||
borderRadius: 3,
|
||||
}}
|
||||
>
|
||||
<h1>default</h1>
|
||||
|
||||
<Space>
|
||||
<Button onClick={info}>info</Button>
|
||||
<Button onClick={init}>init</Button>
|
||||
</Space>
|
||||
</div>
|
||||
</Content>
|
||||
<Footer style={{textAlign: 'center'}}>
|
||||
Ant Design ©{new Date().getFullYear()} Created by Ant UED
|
||||
</Footer>
|
||||
</Layout>
|
||||
)
|
||||
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
import {Button, Space} from "antd";
|
||||
import {AppTitleBar} from "../../components/app/title-bar.tsx";
|
||||
|
||||
export default function DefaultPage() {
|
||||
|
||||
const request = (url: string) => {
|
||||
return fetch(`http://localhost:10800/${url}`).then(s => s.json());
|
||||
}
|
||||
const init = () => {
|
||||
request('?action=login').then(console.log)
|
||||
}
|
||||
const info = () => {
|
||||
request('?action=info').then(console.log)
|
||||
}
|
||||
const openLogin = () => {
|
||||
chrome.webview.hostObjects.bridge.ShowLoginForm("");
|
||||
}
|
||||
return (
|
||||
<>
|
||||
<div style={{
|
||||
minHeight: 'calc(100vh - var(--bar-height))',
|
||||
display: "flex",
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
backgroundColor: '#f0f0f0'
|
||||
}}>
|
||||
<AppTitleBar bordered={false} backgroundColor={'#f0f0f0'}/>
|
||||
<div
|
||||
style={{
|
||||
background: '#fff',
|
||||
minHeight: 250,
|
||||
borderRadius: 10,
|
||||
width: '80%',
|
||||
padding: 20,
|
||||
boxShadow: '0 0 10px rgba(0,0,0,0.2)',
|
||||
transform: 'translateY(calc(-1 * var(--bar-height) / 2))',
|
||||
}}
|
||||
>
|
||||
<h1>default</h1>
|
||||
|
||||
<Space direction={'vertical'}>
|
||||
<Button onClick={info}>info</Button>
|
||||
<Button onClick={init}>init</Button>
|
||||
<Button type={'primary'} size={'large'} onClick={openLogin}>打开登录</Button>
|
||||
</Space>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
import {Button} from "antd";
|
||||
import {AppTitleBar} from "@/components/app/title-bar.tsx";
|
||||
import {useBridge} from "@/core/bridge.ts";
|
||||
import ImageWechat from "./images/wechat_qrcode.png"
|
||||
|
||||
const PageContact = () => {
|
||||
const isDevMode = localStorage.getItem('plugin-dev-mode');
|
||||
const {bridge} = useBridge()
|
||||
return (<>
|
||||
<AppTitleBar title={'联系客服'} backgroundColor={'#eddcb9'}/>
|
||||
<div style={{paddingTop:5,height:'calc(100vh - var(--bar-height,50px))',display:'flex',justifyContent:'center',alignItems:'center'}}>
|
||||
<div style={{textAlign: 'center',fontSize:16}}>
|
||||
<div>使用过程中有任何疑问,请使用微信扫描二维码或发送邮件联系我们</div>
|
||||
<div style={{margin:5}}>
|
||||
<img src={ImageWechat} alt='' />
|
||||
</div>
|
||||
<div>联系邮箱:</div>
|
||||
<div>
|
||||
<div style={{
|
||||
backgroundColor:'#F0F0F080',
|
||||
padding:'5px 10px',borderRadius:4,
|
||||
display:'inline-block',margin:5
|
||||
}}>
|
||||
<a style={{color:'#D6AA69'}} href="mailto:aiprservice@goldmye.com">aiprservice@goldmye.com</a>
|
||||
</div>
|
||||
</div>
|
||||
{isDevMode && <div style={{marginTop:10,textAlign:'center'}}>
|
||||
<Button onClick={()=>{
|
||||
bridge?.ShowCurrentPane()
|
||||
}}>显示面板</Button>
|
||||
</div>}
|
||||
</div>
|
||||
</div>
|
||||
</>)
|
||||
}
|
||||
|
||||
export default PageContact
|
Before Width: | Height: | Size: 6.0 KiB |
@ -1,49 +0,0 @@
|
||||
import {useEffect, useState} from "react";
|
||||
import {useDebounceFn} from "ahooks";
|
||||
|
||||
const MaxCount = 20
|
||||
const centerItem = (activeIndex: number) => {
|
||||
// 将提示显示在视图中间
|
||||
const div = document.querySelector(`div.proofread-index-${activeIndex}`)
|
||||
if (div) {
|
||||
div.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'center'
|
||||
})
|
||||
}
|
||||
}
|
||||
export const TestPage = () => {
|
||||
const [lastIndex, setLastIndex] = useState(-1);
|
||||
const [activeIndex, setActiveIndex] = useState(-1)
|
||||
|
||||
const {run: setActiveLastIndex} = useDebounceFn((i) => setLastIndex(i), {wait: 200,})
|
||||
const processScroll = (e: WheelEvent) => {
|
||||
const {deltaY} = e;
|
||||
const newIndex = deltaY > 0 ? activeIndex + 1 : activeIndex - 1
|
||||
if (newIndex < 0 || newIndex >= MaxCount) return;
|
||||
setActiveIndex(newIndex)
|
||||
centerItem(newIndex)
|
||||
setActiveLastIndex(newIndex)
|
||||
}
|
||||
|
||||
const {run: onMousewheel} = useDebounceFn((e) => processScroll(e), {wait: 10,})
|
||||
useEffect(() => {
|
||||
// 绑定键盘事件
|
||||
// document.documentElement.addEventListener('keyup', handleUpAndDownEvent, false)
|
||||
// 绑定滚动事件
|
||||
document.documentElement.addEventListener('wheel', onMousewheel, false)
|
||||
return () => {
|
||||
document.documentElement.removeEventListener('wheel', onMousewheel, false)
|
||||
// document.documentElement.removeEventListener('keyup', handleUpAndDownEvent, false)
|
||||
}
|
||||
}, []);
|
||||
return (<div className="test-age">
|
||||
<h1>TEST ==》 {lastIndex}</h1>
|
||||
<div className="box-container">
|
||||
{Array(MaxCount).fill(0).map((_, i) => (
|
||||
<div key={i} className={`row-item proofread-index-${i} ${activeIndex == i ? 'active-item' : ''}`}>
|
||||
<span>{i}</span>
|
||||
</div>))}
|
||||
</div>
|
||||
</div>)
|
||||
}
|
@ -1,380 +0,0 @@
|
||||
|
||||
.proofread-container {
|
||||
.proofread-items, .types {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.proofread-items {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-bottom: 15px;
|
||||
max-width: calc(100% - 60px);
|
||||
}
|
||||
|
||||
.operation-button {
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.btn-accept {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
color:var(--selected-color);
|
||||
border-color: var(--selected-color);
|
||||
&:hover{
|
||||
background-color: #e7eaf0;
|
||||
}
|
||||
}
|
||||
.btn-cancel{
|
||||
--btn-background-color: #c9c9c9;
|
||||
&:hover{
|
||||
--btn-background-color: #a2a2a2;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-rollback {
|
||||
border-color: var(--border-color);
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-process{
|
||||
background-color: #fff;
|
||||
border: none;//solid 1px rgba(214, 170, 105, 0.7);
|
||||
outline: none;
|
||||
border-radius: 3px;
|
||||
font-size: 12px;
|
||||
padding: 8px 0;
|
||||
min-width: 70px;
|
||||
cursor: pointer;
|
||||
color:#333;
|
||||
.btn-icon{
|
||||
font-size: 20px;
|
||||
color:var(--primary-color);
|
||||
}
|
||||
&:hover{
|
||||
background-color: var(--primary-color);
|
||||
color:#fff;
|
||||
.btn-icon{
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
&[disabled]{
|
||||
color: #ccc;
|
||||
cursor: not-allowed;
|
||||
.btn-icon{
|
||||
color: #ccc;
|
||||
}
|
||||
}
|
||||
&[disabled]:hover{
|
||||
background-color: #fff;
|
||||
color: #ccc;
|
||||
}
|
||||
}
|
||||
.proofread-list {
|
||||
|
||||
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.item:last-child + .selected-line{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.info{
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.origin,.replaced {
|
||||
max-width: 80%;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
padding: 2px 4px;
|
||||
//height: 30px;
|
||||
}
|
||||
.origin {
|
||||
color:#000;
|
||||
}
|
||||
.replaced {
|
||||
background-color: var(--primary-color, #558CB7);
|
||||
color: #fff;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.select{
|
||||
.replaced {
|
||||
|
||||
}
|
||||
.origin,.replaced {
|
||||
white-space: normal;
|
||||
//max-width: 100px;
|
||||
}
|
||||
}
|
||||
.proofread-replace-item-replace{
|
||||
.origin,.replaced {
|
||||
max-width: 50%;
|
||||
}
|
||||
}
|
||||
.proofread-replace-item-delete,
|
||||
.proofread-replace-item-insert{
|
||||
.origin {
|
||||
//max-width: 180px;
|
||||
}
|
||||
&.select{
|
||||
.origin,.replaced {
|
||||
white-space: inherit;
|
||||
//max-width: 160px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.action-text {
|
||||
color: var(--primary-color);
|
||||
margin-left:20px;
|
||||
font-weight: bold;
|
||||
min-width: 40px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.arrow {
|
||||
margin: 0 10px;
|
||||
}
|
||||
}
|
||||
|
||||
// 右侧面板
|
||||
.panel-right-state-wrapper {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
color: #979797;
|
||||
|
||||
.desc {
|
||||
margin: 5px 0 20px;
|
||||
}
|
||||
|
||||
.proofread-state-perfect {
|
||||
.desc {
|
||||
font-size: 18px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
.proofread-state-analyzing{
|
||||
font-size: 18px;
|
||||
color: #000;
|
||||
.remain{
|
||||
font-weight: bold;
|
||||
}
|
||||
.remain-time{
|
||||
margin-top: 10px;
|
||||
}
|
||||
.value{
|
||||
color: #FA674A;
|
||||
font-size: 20px;
|
||||
}
|
||||
.unit{
|
||||
font-size: 14px;
|
||||
margin-left: 3px;
|
||||
}
|
||||
.control{
|
||||
color: #979797;
|
||||
margin-top: 30px;
|
||||
line-height: 26px;
|
||||
|
||||
.small{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.back-to-document{
|
||||
margin-top: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tihuan
|
||||
.text-replace-item {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
padding: 5px 0;
|
||||
&:before{
|
||||
content:' ';
|
||||
display: none;
|
||||
position: absolute;
|
||||
left:-1px;
|
||||
right:-1px;
|
||||
bottom: -5px;
|
||||
top:-5px;
|
||||
background-color: rgba(253, 102, 67, 0.4);
|
||||
}
|
||||
&.replace-type-replace{
|
||||
padding-bottom: 7px;
|
||||
--background-image:url(./../../assets/editor/replace.svg);
|
||||
background-image:var(--background-image);
|
||||
background-size: 12px 5px;
|
||||
background-repeat: repeat-x;
|
||||
background-position:0 26px;
|
||||
&:after{
|
||||
//content:'\2000\2000\2000\2000';
|
||||
//display: block;
|
||||
//position: absolute;
|
||||
//left:0;right:0;
|
||||
//bottom: -7px;
|
||||
//height: 5px;
|
||||
//background-image:linear-gradient(135deg, transparent 40%, var(--current-color,#f00), transparent 60%),
|
||||
//linear-gradient(45deg, transparent 40%, var(--current-color,#f00), transparent 60%);
|
||||
//background-size: 10px 10px;
|
||||
//background-repeat: repeat-x;
|
||||
//background-position: 0 0rem;
|
||||
}
|
||||
}
|
||||
&.text-replace-none{
|
||||
text-decoration:none;
|
||||
border-bottom:none;
|
||||
color: inherit;
|
||||
cursor: inherit;
|
||||
}
|
||||
&.processed-accept{
|
||||
--current-color:var(--primary-color) !important;
|
||||
&.replace-type-replace{
|
||||
--background-image:url(./../../assets/editor/replace-accept.svg);
|
||||
background-image: var(--background-image);
|
||||
}
|
||||
}
|
||||
&.processed-ignore{
|
||||
border-color:#c9c9c9 !important;
|
||||
--current-color:#c9c9c9 !important;
|
||||
&.replace-type-replace{
|
||||
--background-image:url(./../../assets/editor/replace-ignore.svg);
|
||||
background-image: var(--background-image);
|
||||
}
|
||||
}
|
||||
&.replace-type-insert{
|
||||
--background-image:url(./../../assets/editor/insert.svg);
|
||||
min-width: 15px;
|
||||
background-size: 16px 30px;
|
||||
background-repeat: repeat-x;
|
||||
background-position: 0 1px;
|
||||
|
||||
&:not(.processed){
|
||||
background-image: var(--background-image);
|
||||
color: transparent;
|
||||
&::selection{
|
||||
color: transparent;
|
||||
text-decoration-color: #fff;
|
||||
}
|
||||
}
|
||||
&.processed-ignore{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.selection {
|
||||
//background-color: rgba(253, 102, 67, 0.4);
|
||||
background-image: var(--background-image),linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
|
||||
background-size: 12px 5px,100% 28px;
|
||||
background-position:0 26px,0 0;
|
||||
&.replace-type-delete,&.replace-type-insert.processed{
|
||||
background-image: linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
|
||||
background-size: 100% 28px;
|
||||
background-position: 0 0;
|
||||
}
|
||||
&.replace-type-insert:not(.processed){
|
||||
background-size: 16px 30px,100% 28px;
|
||||
background-position:0 1px,0 0;
|
||||
}
|
||||
|
||||
}
|
||||
&.replace-type-delete{
|
||||
text-decoration: line-through;
|
||||
text-decoration-color: var(--current-color,#f00);
|
||||
text-decoration-thickness: 2px;
|
||||
border-bottom:none;
|
||||
&.processed-ignore{
|
||||
border-color:gray !important;
|
||||
--current-color: gray !important;
|
||||
//text-decoration:none;
|
||||
}
|
||||
}
|
||||
|
||||
&.processed {
|
||||
&.processed-ignore{
|
||||
//text-decoration:none;
|
||||
//border-bottom:none;
|
||||
}
|
||||
&.processed-delete:not(.processed-delete-init) {
|
||||
&:before {
|
||||
//content: attr(data-replace-text);
|
||||
text-decoration: line-through;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.text-replace-item.processed-delete,.replace-type-insert.processed-ignore{
|
||||
width: 4px;
|
||||
max-width: 4px;
|
||||
min-width: 4px;
|
||||
display: inline-block !important;
|
||||
height: 30px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.gov-extra-panel{
|
||||
span{
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.link{
|
||||
text-decoration: underline;
|
||||
color: #535bf2;
|
||||
}
|
||||
}
|
||||
.collapse-info-panel{
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
margin:10px 0;
|
||||
padding: 6px;
|
||||
border-radius: 2px;
|
||||
background: #ebebeb;
|
||||
|
||||
.arrow-icon{
|
||||
min-width: 0;
|
||||
min-width: 20px;
|
||||
height: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.caret-icon{
|
||||
transition: transform 0.2s;
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
.content{
|
||||
flex: 1;
|
||||
max-width: 100%;
|
||||
margin-right: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.more-text{
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
&.open{
|
||||
.caret-icon{
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
.gov-extra-panel{
|
||||
margin-right: 0;
|
||||
}
|
||||
.more-text{
|
||||
word-break: break-all;
|
||||
white-space: normal;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
import { ReactNode,useState } from 'react';
|
||||
import {CaretRightFilled} from '@ant-design/icons'
|
||||
|
||||
export default function CollapseInfo({ children }: { children: ReactNode }) {
|
||||
const [open, setOpen] = useState(false);
|
||||
return <div className={`collapse-info-panel ${open?'open':''}`} onClick={()=>setOpen(!open)}>
|
||||
<span className='arrow-icon'><CaretRightFilled className={'caret-icon'} /></span>
|
||||
<div className='content'>{children}</div>
|
||||
</div>;
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
import { ReactNode } from 'react';
|
||||
import CollapseInfo from './collapse-info.tsx';
|
||||
import { bridge } from '@/core/bridge.ts';
|
||||
|
||||
function GovExtraPanel({ children }: { children: ReactNode }) {
|
||||
return <div className={'gov-extra-panel'}>
|
||||
{children}
|
||||
</div>;
|
||||
}
|
||||
// 显示领导人职位
|
||||
function LeaderInfo({info}:{info: V3.GovInfo}){
|
||||
return <CollapseInfo><GovExtraPanel>
|
||||
<div className='more-text'><span>【职位】</span><span>{info.data?.origin}是现任{info.content}</span></div>
|
||||
</GovExtraPanel></CollapseInfo>
|
||||
}
|
||||
// 语录
|
||||
function QuotationInfo({info}:{info: V3.GovInfo}){
|
||||
const showHyperlink = ()=>{
|
||||
if(!info.data?.link || info.data?.link?.trim().length == 0) return;
|
||||
bridge.OpenUrlWithOsBrowser(info.data.link)
|
||||
}
|
||||
return <>
|
||||
<CollapseInfo>
|
||||
<GovExtraPanel><div className='more-text'>【修改建议】{info.content}</div></GovExtraPanel>
|
||||
</CollapseInfo>
|
||||
<CollapseInfo>
|
||||
<GovExtraPanel>
|
||||
<div>
|
||||
<span>【来源】</span>
|
||||
<span className="link" onClick={showHyperlink}>{info.data?.from}</span>
|
||||
</div>
|
||||
</GovExtraPanel>
|
||||
</CollapseInfo>
|
||||
</>
|
||||
}
|
||||
|
||||
export function GovExtra({list}:{list: V3.GovInfo[]}) {
|
||||
return (<>
|
||||
{list.map((info,idx)=><div key={idx}>
|
||||
{info.type == 'quotation' && <QuotationInfo info={info} />}
|
||||
{info.type == 'position' && <LeaderInfo info={info} />}
|
||||
{info.type == 'leader' && <LeaderInfo info={info} />}
|
||||
</div>)}
|
||||
</>)
|
||||
}
|
@ -1,77 +0,0 @@
|
||||
type QuotationResult = {
|
||||
[key: string]: {
|
||||
error_type: string;
|
||||
notice: {
|
||||
category: string;
|
||||
content: string;
|
||||
document_name: string;
|
||||
hypelink: string;
|
||||
id: string;
|
||||
publish_time: string;
|
||||
source: string;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type PositionResult = {
|
||||
[key: string]: {
|
||||
error_type: string;
|
||||
notice: {
|
||||
leaders: string[];
|
||||
position: string;
|
||||
}
|
||||
}
|
||||
}
|
||||
type LeaderResult = {
|
||||
[key: string]: {
|
||||
error_type: string;
|
||||
notice: {
|
||||
positions: string[];
|
||||
correct_name: string;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function parseLeader(key:string,result: LeaderResult) {
|
||||
// split by '、' when has leaders
|
||||
const nameArray = key.split('、')
|
||||
// if has leaders, return leaders
|
||||
return nameArray.map(name=>{
|
||||
const { notice } = result[name];
|
||||
return {
|
||||
type:'leader',
|
||||
content: `${notice.positions.join('、')}`,
|
||||
data:{
|
||||
origin: name
|
||||
}
|
||||
} as V3.GovInfo
|
||||
})
|
||||
}
|
||||
|
||||
export function parsePosition(key:string,result: PositionResult) {
|
||||
const { notice } = result[key];
|
||||
const position = notice.position.trim()
|
||||
const noLeader = position.length == 0 || notice.leaders[0] == '该职位组合无对应领导人'
|
||||
return {
|
||||
type:'position',
|
||||
// 如果没有 position 表示 无对应领导人
|
||||
content: noLeader ? notice.leaders[0] : `担任${position}的有${notice.leaders.join('、')}`,
|
||||
data:{
|
||||
origin: key,
|
||||
source: noLeader?'position-error':''
|
||||
}
|
||||
} as V3.GovInfo
|
||||
}
|
||||
|
||||
export function parseQuotation(key:string,result: QuotationResult) {
|
||||
const { notice } = result[key];
|
||||
return {
|
||||
type:'quotation',
|
||||
content: notice.content,
|
||||
data:{
|
||||
origin: notice.category,
|
||||
from: notice.document_name,
|
||||
link: notice.hypelink
|
||||
}
|
||||
} as V3.GovInfo
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
## 政务校对
|
||||
### 文档
|
||||
|
||||
https://pu7y37y121.feishu.cn/docx/ZAOzdGxRJoYztbxu7k0cAosNnDe
|
||||
|
||||
### 说明
|
||||
给AI校对王增加政务信息的校对,包括领导人排序、领导人讲话溯源和落马官员。
|
||||
|
||||
##
|
@ -1,157 +0,0 @@
|
||||
import React, {CSSProperties} from "react";
|
||||
import Icon from "@ant-design/icons";
|
||||
import {cx} from "@emotion/css";
|
||||
|
||||
type SvgIconProps = {
|
||||
size?: number;
|
||||
className?: string;
|
||||
style?: CSSProperties;
|
||||
onClick?: (e: React.MouseEvent<HTMLSpanElement>) => void;
|
||||
component: React.ComponentType
|
||||
}
|
||||
|
||||
export const SvgIcon: React.FC<SvgIconProps> = (props) => {
|
||||
const styles: CSSProperties = props.style || {}
|
||||
if (props.size) {
|
||||
styles.fontSize = props.size + 'px';
|
||||
}
|
||||
|
||||
return (<Icon
|
||||
onClick={props.onClick}
|
||||
className={cx(props.className, `icon-type`)}
|
||||
style={styles}
|
||||
component={props.component}
|
||||
/>);
|
||||
}
|
||||
|
||||
export const IconClose = () => (
|
||||
// width="28" height="40"
|
||||
<svg width="28" height="40" viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
|
||||
<path d="M9.5 13L9.5 26" stroke="currentColor" strokeLinecap="round"/>
|
||||
<path d="M15.5 13L22 19.5L15.5 26" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconOpen = () => (
|
||||
<svg viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
|
||||
<path d="M17.5 13L12.5 19.5L17.5 26" stroke="currentColor" strokeLinejoin="round"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconArrowRight = () => (
|
||||
<svg width="1em" height="1em" viewBox="0 0 5 10" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
|
||||
<path d="M0.686285 1.20263L4.37257 4.88892L0.686285 8.5752" stroke="currentColor" strokeLinecap="round"
|
||||
strokeLinejoin="round"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconDotMore = () => (
|
||||
<svg width="1em" height="1em" viewBox="0 0 10 2" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="1" cy="1" r="1" fill="currentColor"/>
|
||||
<circle cx="5" cy="1" r="1" fill="currentColor"/>
|
||||
<circle cx="9" cy="1" r="1" fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconArrowDown = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path d="M232 392L512 672l280-280z" fill="currentColor"></path>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export const IconAccept = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M864.554667 268.501333a42.666667 42.666667 0 0 1 0 60.330667L412.032 781.397333a42.453333 42.453333 0 0 1-22.613333 11.818667l-5.034667 0.597333H379.306667a42.496 42.496 0 0 1-27.648-12.416l-211.2-211.2a42.666667 42.666667 0 1 1 60.330666-60.330666l180.992 180.992 422.4-422.4a42.666667 42.666667 0 0 1 60.330667 0z"
|
||||
fill="currentColor"></path>
|
||||
</svg>
|
||||
)
|
||||
export const IconIgnore = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M853.333333 554.666667H170.666667c-23.466667 0-42.666667-19.2-42.666667-42.666667s19.2-42.666667 42.666667-42.666667h682.666666c23.466667 0 42.666667 19.2 42.666667 42.666667s-19.2 42.666667-42.666667 42.666667z"
|
||||
fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconReviewOutlined = () => (
|
||||
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
|
||||
<path fillRule="evenodd" stroke="currentColor" strokeWidth="2px" strokeLinecap="butt" strokeLinejoin="miter"
|
||||
fill="rgb(255, 255, 255)"
|
||||
d="M9.001,1.000 L33.001,1.000 C37.418,1.000 41.000,4.581 41.000,9.000 L41.000,32.999 C41.000,37.417 37.418,41.000 33.001,41.000 L9.001,41.000 C4.584,41.000 0.999,37.417 0.999,32.999 L0.999,9.000 C0.999,4.581 4.584,1.000 9.001,1.000 Z"/>
|
||||
<path fillRule="evenodd" stroke="currentColor" strokeWidth="4px" strokeLinecap="round"
|
||||
strokeLinejoin="round" fill="none"
|
||||
d="M21.000,10.000 C27.075,10.000 32.000,14.925 32.000,21.000 C32.000,27.075 27.075,32.000 21.000,32.000 C14.925,32.000 10.000,27.075 10.000,21.000 C10.000,14.925 14.925,10.000 21.000,10.000 Z"/>
|
||||
</svg>
|
||||
|
||||
)
|
||||
|
||||
export const IconReview = () => (
|
||||
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
|
||||
<circle cx="22" cy="22" r="12" stroke="currentColor" strokeWidth="4px" fill="none"/>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export const IconPlus = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em" fill="currentColor">
|
||||
<path
|
||||
d="M480.256 128h64c5.632 0 8.704 3.072 8.704 8.704v751.104c0 5.632-3.072 8.704-8.704 8.704H480.256c-5.632 0-8.704-3.072-8.704-8.704V136.704c0-5.632 2.56-8.704 8.704-8.704z"
|
||||
></path>
|
||||
<path
|
||||
d="M153.6 471.552h716.8c5.632 0 8.704 3.072 8.704 8.704v64c0 5.632-3.072 8.704-8.704 8.704H153.6c-5.632 0-8.704-3.072-8.704-8.704V480.256c0-6.144 3.072-8.704 8.704-8.704z"
|
||||
></path>
|
||||
<path d="M471.552 128h84.48v768H471.552z"></path>
|
||||
<path d="M144.896 554.496V470.016h733.696v84.48z"></path>
|
||||
</svg>
|
||||
)
|
||||
export const IconRollback = () => (
|
||||
<svg className="icon" width="1em" height="1em" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.26 2.39797H5.07156V1.13664C5.07156 1.02243 4.95996 0.959368 4.8846 1.02925L2.82663 2.9383C2.81277 2.95105 2.80157 2.96735 2.79386 2.98596C2.78615 3.00456 2.78215 3.02499 2.78215 3.04568C2.78215 3.06638 2.78615 3.0868 2.79386 3.10541C2.80157 3.12401 2.81277 3.14031 2.82663 3.15307L4.8846 5.06211C4.95996 5.132 5.07156 5.06893 5.07156 4.95473V3.6934H11.0861V11.7046H2.30344C2.23967 11.7046 2.1875 11.7659 2.1875 11.8409V12.8636C2.1875 12.9386 2.23967 13 2.30344 13H11.26C11.7716 13 12.1875 12.5108 12.1875 11.9091V3.48885C12.1875 2.88716 11.7716 2.39797 11.26 2.39797Z" fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconRollbackOld = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M328.832 183.168a42.666667 42.666667 0 0 1 0 60.330667L188.330667 384l140.501333 140.501333a42.666667 42.666667 0 1 1-60.330667 60.330667l-170.666666-170.666667a42.666667 42.666667 0 0 1 0-60.330666l170.666666-170.666667a42.666667 42.666667 0 0 1 60.330667 0z"
|
||||
fill="currentColor"/>
|
||||
<path
|
||||
d="M85.333333 384a42.666667 42.666667 0 0 1 42.666667-42.666667h554.666667a256 256 0 0 1 0 512h-213.333334a42.666667 42.666667 0 1 1 0-85.333333h213.333334a170.666667 170.666667 0 0 0 0-341.333333H128a42.666667 42.666667 0 0 1-42.666667-42.666667z"
|
||||
fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
||||
export const IconRollbackCircle = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M48 32c26.496 0 48 21.504 48 48v133.6C191.296 80.32 344.576 0 512 0c282.304 0 512 229.696 512 512s-229.696 512-512 512c-208.096 0-393.952-124.32-473.408-316.672-5.056-12.256-4.672-25.376 0.032-36.704 4.672-11.36 13.76-20.928 26.016-25.984 12.224-5.056 25.344-4.672 36.704 0.032 11.328 4.704 20.896 13.792 25.984 26.016C191.904 827.008 342.88 928 512 928c229.376 0 416-186.624 416-416S741.376 96 512 96c-143.552 0-274.24 72.704-350.368 192H304c26.496 0 48 21.504 48 48s-21.504 48-48 48H48c-26.496 0-48-21.504-48-48V80c0-26.496 21.504-48 48-48z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
)
|
||||
export const IconMinus = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path d="M64 576h896V448H64z" fill="currentColor" />
|
||||
</svg>
|
||||
)
|
||||
export const IconCheckOutline = () => (
|
||||
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
|
||||
height="1em">
|
||||
<path
|
||||
d="M369.792 704.32L930.304 128 1024 223.616 369.984 896l-20.288-20.864-0.128 0.128L0 516.8 96.128 423.68l273.664 280.64z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
)
|
||||
|
||||
export const IconDotMore2 = ()=>(
|
||||
<svg width="1em" height="1em" viewBox="0 0 9 2" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.256836 0.666667C0.256836 0.754215 0.27408 0.840905 0.307583 0.921789C0.341086 1.00267 0.390192 1.07617 0.452098 1.13807C0.514004 1.19998 0.587497 1.24908 0.66838 1.28259C0.749264 1.31609 0.835955 1.33333 0.923503 1.33333C1.01105 1.33333 1.09774 1.31609 1.17862 1.28259C1.25951 1.24908 1.333 1.19998 1.39491 1.13807C1.45681 1.07617 1.50592 1.00267 1.53942 0.921789C1.57293 0.840905 1.59017 0.754215 1.59017 0.666667C1.59017 0.579119 1.57293 0.492428 1.53942 0.411544C1.50592 0.330661 1.45681 0.257168 1.39491 0.195262C1.333 0.133356 1.25951 0.0842502 1.17862 0.0507471C1.09774 0.017244 1.01105 0 0.923503 0C0.835955 0 0.749264 0.017244 0.66838 0.0507471C0.587497 0.0842502 0.514004 0.133356 0.452098 0.195262C0.390192 0.257168 0.341086 0.330661 0.307583 0.411544C0.27408 0.492428 0.256836 0.579119 0.256836 0.666667ZM3.59017 0.666667C3.59017 0.843478 3.66041 1.01305 3.78543 1.13807C3.91046 1.2631 4.08002 1.33333 4.25684 1.33333C4.43365 1.33333 4.60322 1.2631 4.72824 1.13807C4.85326 1.01305 4.9235 0.843478 4.9235 0.666667C4.9235 0.489856 4.85326 0.320286 4.72824 0.195262C4.60322 0.0702377 4.43365 0 4.25684 0C4.08002 0 3.91046 0.0702377 3.78543 0.195262C3.66041 0.320286 3.59017 0.489856 3.59017 0.666667ZM6.9235 0.666667C6.9235 0.843478 6.99374 1.01305 7.11876 1.13807C7.24379 1.2631 7.41336 1.33333 7.59017 1.33333C7.76698 1.33333 7.93655 1.2631 8.06157 1.13807C8.1866 1.01305 8.25684 0.843478 8.25684 0.666667C8.25684 0.489856 8.1866 0.320286 8.06157 0.195262C7.93655 0.0702377 7.76698 0 7.59017 0C7.41336 0 7.24379 0.0702377 7.11876 0.195262C6.99374 0.320286 6.9235 0.489856 6.9235 0.666667Z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
||||
)
|
||||
export const IconStartProofread = () => (
|
||||
<svg className="icon" width="1em" height="1em" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M8.63496 9.45299C8.6234 9.43689 8.60814 9.4238 8.59047 9.41482C8.57279 9.40585 8.55322 9.40126 8.5334 9.40142H7.84277C7.74121 9.40142 7.68184 9.51705 7.74121 9.59986L8.89434 11.1952C8.94434 11.2639 9.0459 11.2639 9.0959 11.1952L10.8803 8.72642C10.9396 8.64361 10.8803 8.52799 10.7787 8.52799H10.0865C10.0459 8.52799 10.0084 8.54674 9.98496 8.57955L8.99277 9.95142L8.63496 9.45299ZM9.31152 3.77799V3.02798C9.31152 2.95923 9.25527 2.90298 9.18652 2.90298H3.18652C3.11777 2.90298 3.06152 2.95923 3.06152 3.02798V3.77799C3.06152 3.84674 3.11777 3.90299 3.18652 3.90299H9.18652C9.25527 3.90299 9.31152 3.84674 9.31152 3.77799ZM3.18652 5.15299C3.11777 5.15299 3.06152 5.20924 3.06152 5.27799V6.02799C3.06152 6.09674 3.11777 6.15299 3.18652 6.15299H6.06152C6.13027 6.15299 6.18652 6.09674 6.18652 6.02799V5.27799C6.18652 5.20924 6.13027 5.15299 6.06152 5.15299H3.18652ZM6.06152 12.3092H1.81152V1.30923H10.5615V5.93424C10.5615 6.00299 10.6178 6.05924 10.6865 6.05924H11.5615C11.6303 6.05924 11.6865 6.00299 11.6865 5.93424V0.684235C11.6865 0.407672 11.4631 0.184235 11.1865 0.184235H1.18652C0.909961 0.184235 0.686523 0.407672 0.686523 0.684235V12.9342C0.686523 13.2108 0.909961 13.4342 1.18652 13.4342H6.06152C6.13027 13.4342 6.18652 13.378 6.18652 13.3092V12.4342C6.18652 12.3655 6.13027 12.3092 6.06152 12.3092ZM12.3521 7.29674L9.35215 6.25455C9.33809 6.24986 9.32559 6.2483 9.31152 6.2483C9.29746 6.2483 9.2834 6.24986 9.2709 6.25455L6.2709 7.29674C6.24639 7.30506 6.22509 7.32082 6.20996 7.34183C6.19484 7.36284 6.18665 7.38804 6.18652 7.41392V11.3374C6.18652 11.3764 6.20371 11.4124 6.23496 11.4358L9.23496 13.7827C9.25684 13.7999 9.28496 13.8092 9.31152 13.8092C9.33809 13.8092 9.36621 13.7999 9.38809 13.7827L12.3881 11.4358C12.4178 11.4124 12.4365 11.3764 12.4365 11.3374V7.41392C12.4365 7.3608 12.4021 7.31392 12.3521 7.29674ZM11.4678 10.9295L9.31152 12.6155L7.15527 10.9295V8.01236L9.31152 7.26236L11.4678 8.01236V10.9295Z"
|
||||
fill="currentColor"/>
|
||||
</svg>
|
||||
)
|
@ -1,8 +0,0 @@
|
||||
export default function ArrowIcon() {
|
||||
return (<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'>
|
||||
<path
|
||||
d='M7.5 4.13397C8.16667 4.51888 8.16667 5.48113 7.5 5.86603L1.5 9.33013C0.833334 9.71503 5.06336e-07 9.2339 5.39985e-07 8.4641L8.42827e-07 1.5359C8.76476e-07 0.766098 0.833334 0.284973 1.5 0.669873L7.5 4.13397Z'
|
||||
fill='#666666' />
|
||||
</svg>
|
||||
);
|
||||
}
|
Before Width: | Height: | Size: 1.1 MiB |
@ -1,47 +0,0 @@
|
||||
import React from "react";
|
||||
|
||||
export const IconLogo = ({style}:{style?:React.CSSProperties}) => (
|
||||
<svg style={style} width="2em" height="0.9em" viewBox="0 0 207 94" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
|
||||
fill="url(#paint0_linear_2366_40336)"/>
|
||||
<path d="M76.7295 60.4416H79.0956L81.7997 37.4322H79.366L76.7295 60.4416Z" fill="black"/>
|
||||
<path d="M112.425 31.5288H104.38L103.569 28.7114H101.135L101.946 31.5288H93.4282V34.2792H112.425V31.5288Z"
|
||||
fill="black"/>
|
||||
<path d="M98.9711 35.2855H96.4698L93.2925 43.6708H95.7262L98.9711 35.2855Z" fill="black"/>
|
||||
<path
|
||||
d="M92.8188 32.7363H85.9909V28.7114H83.6248V32.7363H76.9321V35.4867H83.6248V61.7161H85.9909V35.4867H92.8188V32.7363Z"
|
||||
fill="black"/>
|
||||
<path d="M107.016 35.2855L110.193 43.6708H112.694L109.449 35.2855H107.016Z" fill="black"/>
|
||||
<path
|
||||
d="M108.3 56.4837C107.016 55.6787 105.867 54.8737 104.852 54.0016C105.799 53.0625 106.61 52.0562 107.286 51.1171C108.03 50.1108 108.638 49.1716 109.111 48.3667C109.585 47.4946 109.99 46.7567 110.193 46.1529C110.464 45.4821 110.599 45.0125 110.734 44.6771L110.802 44.4758H108.368L108.3 44.61C107.962 45.3479 107.421 46.3542 106.475 47.9642C105.664 49.3058 104.447 50.7816 102.96 52.3245C101.472 50.7816 100.255 49.3058 99.4442 47.9642C98.4978 46.3542 97.957 45.3479 97.619 44.61L97.5514 44.4758H95.1177L95.1853 44.6771C95.3205 45.0125 95.4557 45.4821 95.7261 46.1529C95.9965 46.7567 96.4021 47.5617 96.8753 48.3667C97.3486 49.1716 97.957 50.1108 98.633 51.1171C99.309 52.0562 100.12 53.0625 101.067 54.0687C100.053 54.9408 98.9034 55.7458 97.619 56.5508C96.3345 57.3558 94.7796 58.1608 93.1572 58.8987L93.022 58.9658V61.9174L93.2924 61.8503C95.3205 60.9782 97.1458 60.0391 98.7682 59.0328C100.323 58.0266 101.743 57.0203 102.96 55.947C104.176 57.0203 105.529 58.0937 107.083 59.0328C108.706 60.0391 110.531 60.9782 112.627 61.8503L112.897 61.9174V58.9658L112.762 58.8987C111.14 58.0937 109.652 57.2887 108.3 56.4837Z"
|
||||
fill="black"/>
|
||||
<path d="M90.2506 37.4322H87.9521L90.5887 60.4416H92.9548L90.2506 37.5663V37.4322Z" fill="black"/>
|
||||
<path d="M145.618 38.7738H143.116L145.956 54.9408H148.389L145.618 38.7738Z" fill="black"/>
|
||||
<path
|
||||
d="M157.312 29.1139H154.946V32.8034H140.479V35.6209H154.946V58.0266C154.946 58.2949 154.878 58.4962 154.676 58.7645C154.54 58.9657 154.338 59.0999 154.135 59.0999H148.051V61.9174H154.135C155.014 61.9174 155.825 61.5149 156.433 60.7099C157.042 59.9049 157.38 59.0328 157.38 57.8924V35.688H160.151V32.8705H157.38V29.1139H157.312Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M137.37 54.6054C136.288 53.2637 135.274 51.855 134.395 50.5133C135.612 48.2996 136.626 46.0858 137.302 43.9392C137.978 41.7925 138.451 39.9142 138.789 38.2371C139.128 36.5601 139.263 35.2184 139.33 34.1451C139.398 33.0718 139.398 32.468 139.398 32.2668V30.858H125.134V33.6755H136.829C136.761 34.2793 136.694 35.0172 136.559 35.9563C136.423 36.9626 136.221 38.1701 135.95 39.4446C135.68 40.7192 135.274 42.128 134.733 43.6709C134.26 45.0796 133.652 46.5554 132.908 48.0312C132.232 46.8238 131.691 45.6163 131.218 44.4759C130.677 43.2013 130.204 41.9938 129.866 40.8534C129.528 39.713 129.19 38.6396 128.987 37.7005C128.784 36.7613 128.581 35.8892 128.446 35.1513V35.0172H126.013V35.2184C126.148 36.0905 126.351 37.0297 126.621 38.1701C126.891 39.3105 127.229 40.518 127.635 41.8596C128.041 43.2013 128.581 44.61 129.257 46.0858C129.866 47.5617 130.677 49.1046 131.556 50.5804C130.745 51.9221 129.798 53.3308 128.717 54.6725C127.635 56.0141 126.351 57.4229 124.931 58.6974L124.863 58.7645V62.2528L125.134 61.9845C126.824 60.5087 128.379 58.9658 129.663 57.4229C130.88 55.947 132.029 54.4041 132.976 52.9283C133.922 54.4041 135.071 55.947 136.356 57.4229C137.708 58.9658 139.263 60.5087 140.953 61.9845L141.223 62.2528V58.7645L141.156 58.6974C139.804 57.3558 138.519 55.947 137.37 54.6054Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M190.911 59.167V45.8846H205.919V43.1342H190.911V32.468H206.797V29.5834H172.388V32.468H188.274V43.1342H173.266V45.8846H188.274V59.167H172.117V61.9845H207V59.167H190.911Z"
|
||||
fill="black"/>
|
||||
<path
|
||||
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
|
||||
fill="black"/>
|
||||
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="black"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2366_40336" x1="81.4256" y1="46.6327" x2="-0.00259662" y2="46.6327"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.1" stopColor="white" stopOpacity="0"/>
|
||||
<stop offset="0.1877" stopColor="#F3EADD" stopOpacity="0.0975"/>
|
||||
<stop offset="0.3016" stopColor="#E6D4B8" stopOpacity="0.224"/>
|
||||
<stop offset="0.4208" stopColor="#DCC199" stopOpacity="0.3565"/>
|
||||
<stop offset="0.5453" stopColor="#D3B281" stopOpacity="0.4948"/>
|
||||
<stop offset="0.677" stopColor="#CEA870" stopOpacity="0.6411"/>
|
||||
<stop offset="0.8209" stopColor="#CAA266" stopOpacity="0.8009"/>
|
||||
<stop offset="1" stopColor="#C9A063"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
@ -1,391 +0,0 @@
|
||||
export const ErrorNotice = ()=>(
|
||||
<svg width="260" height="231" viewBox="0 0 260 231" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M129.938 220.959C201.7 220.959 259.875 187.144 259.875 145.43C259.875 103.717 201.7 69.9013 129.938 69.9013C58.1751 69.9013 0 103.717 0 145.43C0 187.144 58.1751 220.959 129.938 220.959Z" fill="white"/>
|
||||
<path d="M86.544 139.325C97.1855 146.203 97.6191 157.556 86.9777 164.433C76.3362 171.311 58.646 171.106 48.0045 164.229C37.3631 157.352 37.3631 146.203 48.0045 139.325C58.646 132.448 75.9025 132.448 86.544 139.325Z" fill="#E6E6E6"/>
|
||||
<path d="M138.422 153.811L173.355 176.385C174.446 177.09 174.446 178.234 173.355 178.939L138.422 201.513C137.331 202.218 135.56 202.218 134.469 201.513L117.272 190.4L101.499 200.588C99.7093 201.743 97.4084 202.32 95.1121 202.32C92.8158 202.32 90.5149 201.743 88.7254 200.583L77.0385 193.031L76.4803 191.636L77.9515 191.264L89.6384 198.815C92.656 200.762 97.5682 200.767 100.586 198.815L115.445 189.22L99.5358 178.939C98.4447 178.234 98.4447 177.09 99.5358 176.385L134.469 153.811C135.56 153.106 137.331 153.106 138.422 153.811Z" fill="#F0F0F0"/>
|
||||
<path d="M64.265 180.763C64.265 181.831 64.9727 182.879 66.2646 183.712L72.1081 187.488L70.9229 188.082L71.195 189.255L65.3516 185.48C63.4753 184.269 62.439 182.593 62.439 180.763C62.439 178.939 63.4707 177.263 65.3516 176.047L86.0639 162.66C86.4976 162.374 87.0591 162.543 87.3102 163.033C87.5613 163.519 87.4152 164.147 86.9769 164.428L66.2646 177.815C64.9772 178.648 64.265 179.696 64.265 180.763Z" fill="#F0F0F0"/>
|
||||
<path d="M157.014 128.126C156.548 128.126 156.078 128.243 155.713 128.478L113.581 155.707C113.188 155.957 112.974 156.31 112.974 156.693C112.974 157.076 113.188 157.429 113.581 157.679L123.515 164.096L123.743 163.652L113.809 157.234C113.572 157.081 113.43 156.882 113.43 156.688C113.43 156.494 113.567 156.299 113.809 156.141L155.941 128.912C156.521 128.534 157.503 128.534 158.087 128.912L166.172 134.139L166.4 133.695L158.315 128.468C157.95 128.248 157.48 128.126 157.014 128.126Z" fill="#FAAD14"/>
|
||||
<path d="M157.014 123.333C156.548 123.333 156.078 123.45 155.713 123.685L106.162 155.707C105.769 155.957 105.555 156.309 105.555 156.693C105.555 157.076 105.769 157.428 106.162 157.679L119.812 166.498L120.04 166.053L106.39 157.234C106.153 157.081 106.011 156.882 106.011 156.688C106.011 156.493 106.148 156.299 106.39 156.141L155.941 124.12C156.521 123.747 157.502 123.741 158.086 124.12L169.883 131.743L170.111 131.298L158.315 123.675C157.949 123.45 157.479 123.333 157.014 123.333Z" fill="#FAAD14"/>
|
||||
<path d="M157.014 118.54C156.548 118.54 156.078 118.658 155.713 118.893L98.7434 155.707C98.3508 155.957 98.1362 156.31 98.1362 156.693C98.1362 157.076 98.3508 157.429 98.7434 157.679L116.1 168.894L116.329 168.45L98.9717 157.239C98.7343 157.086 98.5928 156.887 98.5928 156.693C98.5928 156.504 98.7297 156.304 98.9717 156.146L155.941 119.332C156.521 118.954 157.502 118.954 158.086 119.332L173.59 129.352L173.818 128.907L158.315 118.887C157.949 118.658 157.479 118.54 157.014 118.54Z" fill="#FAAD14"/>
|
||||
<path d="M53.1406 148.513C54.5878 149.499 56.5097 149.54 58.3221 148.824L59.7145 138.11L53.3004 136.275L53.1406 148.513Z" fill="#FFA8A7"/>
|
||||
<path d="M63.4531 158.783C63.6083 158.967 63.5125 160.305 63.3162 160.617C63.1062 160.944 62.0196 161.94 59.9973 161.981C58.0662 162.022 56.3588 161.624 55.2677 160.755C54.1766 159.881 53.6699 158.967 53.6242 157.73C53.5786 156.494 53.7566 155.318 53.2773 154.343C52.8345 153.443 52.2319 152.554 52.0858 152.069C51.7708 151.016 52.0766 149.427 52.0766 149.427L63.4531 158.783Z" fill="#7F5204"/>
|
||||
<path d="M58.765 148.369C58.7742 148.829 58.8244 149.284 58.934 149.749C59.1668 150.72 59.5503 151.639 59.9839 152.518C60.2076 152.973 60.445 153.418 60.7281 153.837C61.2713 154.649 61.9652 155.329 62.545 156.11C63.1248 156.892 63.6042 157.827 63.6087 158.829C63.6087 160.525 61.9424 161 60.6687 161.174C59.3083 161.363 57.8748 161.194 56.5783 160.699C55.1357 160.147 54.1405 158.813 53.9761 157.163C53.9305 156.688 53.9761 156.212 53.9488 155.737C53.8894 154.654 53.4375 153.637 52.917 152.707C52.6157 152.166 52.2825 151.639 52.0953 151.042C51.7529 149.974 52.1227 148.814 52.424 147.787C52.6842 146.898 52.8942 145.83 53.1727 145.932C53.1635 146.116 53.1635 146.51 53.1635 146.51C53.2457 146.709 53.4466 146.857 53.4968 147.087C53.547 147.327 53.6064 147.567 53.6931 147.797C53.8255 148.145 54.0355 148.472 54.3231 148.666C54.3733 148.027 54.4235 147.393 54.4738 146.755C54.4874 146.556 54.5103 146.346 54.6335 146.203C54.7568 146.055 54.9485 146.024 55.1266 145.999C56.204 145.84 57.2996 145.682 58.3724 145.896C58.5322 145.927 58.7103 145.978 58.797 146.137C58.87 146.264 58.8609 146.423 58.8472 146.571C58.797 147.184 58.7513 147.777 58.765 148.369Z" fill="#FFF1B8"/>
|
||||
<path d="M60.1711 152.886C59.6324 152.381 58.3724 152.299 57.6785 152.34C56.8111 152.391 56.0944 152.687 55.6835 152.989C55.5009 153.121 55.2544 153.086 55.1083 152.902C54.9303 152.687 54.9668 152.35 55.1859 152.186C55.6242 151.864 56.4094 151.425 57.432 151.405C59.1348 151.374 59.6142 151.727 59.6142 151.727C59.6142 151.727 60.3629 152.34 60.1711 152.886Z" fill="#D48806"/>
|
||||
<path d="M61.3811 154.7C60.6964 154.189 59.3085 154.174 58.6146 154.215C57.7472 154.266 57.0853 154.608 56.6699 154.91C56.4872 155.042 56.2407 155.002 56.0946 154.823C55.9166 154.608 55.9531 154.271 56.1723 154.107C56.6105 153.785 57.4459 153.275 58.4731 153.254C60.1759 153.223 60.5959 153.637 60.5959 153.637C60.5959 153.637 61.299 153.99 61.3811 154.7Z" fill="#D48806"/>
|
||||
<path d="M56.8482 149.555C58.026 149.488 58.5145 149.667 58.971 149.882C59.2586 150.086 59.4321 150.628 59.2312 150.75C58.866 150.495 58.1904 150.357 57.3549 150.347C56.7934 150.342 56.0812 150.551 55.4923 150.802C55.3417 150.863 55.1682 150.955 55.013 151.042C54.803 151.154 54.5519 151.052 54.4652 150.812C54.3921 150.613 54.4652 150.383 54.6386 150.28C55.0632 150.025 55.8941 149.606 56.8482 149.555Z" fill="#D48806"/>
|
||||
<path d="M71.1556 144.481C72.2695 147.603 74.0134 146.642 76.6704 144.844L77.0721 134.185L70.311 133.485L71.1556 144.481Z" fill="#FFA8A7"/>
|
||||
<path d="M86.8687 151.997C87.0103 152.376 86.9281 153.07 86.7227 153.5C86.5127 153.929 84.399 155.099 81.637 154.726C78.8751 154.348 77.0353 152.984 76.0127 152.14C74.9947 151.292 73.899 151.083 72.534 150.909C71.1644 150.74 70.1373 150.204 69.8679 149.468C69.6032 148.732 70.0095 147.516 70.0095 147.516L86.8687 151.997Z" fill="#7F5204"/>
|
||||
<path d="M76.1133 142.172C76.369 142.121 76.579 142.034 76.8483 141.942C76.9807 141.896 77.1314 141.85 77.2592 141.911C77.4327 141.998 77.492 142.233 77.5286 142.443C77.6062 142.867 77.6199 143.413 77.7659 143.807C77.8983 144.164 78.2544 144.507 78.5009 144.767C79.1446 145.442 79.8888 145.989 80.642 146.5C81.5231 147.097 82.3859 147.573 83.299 148.099C84.2303 148.635 85.4811 149.003 86.1979 149.611C87.2479 150.495 87.2889 152.565 86.0107 153.305C84.9105 153.944 82.0618 154.537 79.1538 153.423C77.5696 152.815 75.8805 150.786 73.7805 150.475C72.4429 150.275 70.6625 150.04 69.8545 148.85C69.5577 148.324 69.8179 146.862 70.0553 145.125C70.2699 143.572 70.4662 141.145 70.9044 141.303L70.941 141.773C70.941 141.773 71.3427 142.315 71.4751 142.494C71.5892 142.652 71.7216 142.749 71.8494 142.892C72.0138 143.071 72.1416 143.275 72.3242 143.439C72.5434 143.638 72.8127 143.786 73.0957 143.802C73.2281 143.807 73.3697 143.781 73.4838 143.71C73.712 143.562 73.7394 143.229 73.9266 143.02C74.1366 142.785 74.3968 142.601 74.6707 142.478C75.0588 142.31 75.4696 142.238 75.8805 142.202C75.9673 142.197 76.0403 142.182 76.1133 142.172Z" fill="#FFF1B8"/>
|
||||
<path d="M79.4287 145.611C79.4287 145.611 79.2644 145.023 78.4746 144.808C77.872 144.645 76.7672 145.084 76.0687 145.662C75.7811 145.897 75.7948 146.382 76.0961 146.592C76.2742 146.719 76.5024 146.699 76.6713 146.556C77.1324 146.152 78.155 145.432 79.4287 145.611Z" fill="#D48806"/>
|
||||
<path d="M81.2623 146.908C81.2623 146.908 80.9017 146.193 80.121 146.162C80.121 146.162 78.5232 146.116 77.4914 147.087C77.2267 147.333 77.2221 147.782 77.5143 147.987C77.6878 148.109 77.9069 148.094 78.0667 147.951C78.5323 147.527 79.4682 146.648 81.2623 146.908Z" fill="#D48806"/>
|
||||
<path d="M83.2988 148.104C83.2988 148.104 82.888 147.455 82.1073 147.419C82.1073 147.419 80.6191 147.394 79.5828 148.359C79.318 148.605 79.3134 149.054 79.6056 149.259C79.7791 149.381 79.9982 149.366 80.158 149.223C80.6282 148.804 81.5047 147.843 83.2988 148.104Z" fill="#D48806"/>
|
||||
<path d="M52.9586 119.746C53.164 114.6 54.141 111.923 54.2825 110.498C54.2825 110.498 54.6568 82.196 55.2731 73.6018L77.9165 72.5237C78.2498 81.7003 78.5511 106.43 78.3776 109.7C78.2087 112.833 77.072 140 77.072 140C73.8718 141.114 70.4661 139.509 70.4661 139.509C70.4661 139.509 68.567 124.058 68.2566 120.65C67.8548 116.241 68.4711 111.448 68.4711 111.448L67.024 89.4413C67.024 89.4413 65.2755 106.502 64.4081 112.93C63.4175 120.292 59.1764 143.117 59.1764 143.117C56.1223 143.97 53.1458 142.493 53.1458 142.493C53.1458 142.493 52.6618 127.201 52.9586 119.746Z" fill="#D48806"/>
|
||||
<path d="M67.0195 89.4363L67.4487 86.4064C68.768 86.1867 72.1097 83.8516 74.0865 81.8129C74.0865 81.8129 72.2969 85.2056 68.5352 87.5407L68.4667 111.448L67.0195 89.4363Z" fill="black" fillOpacity="0.4"/>
|
||||
<path d="M76.3056 57.6143C74.7671 53.6851 72.1193 47.0683 72.1193 47.0683L71.4482 36.3127C71.4482 36.3127 72.9502 36.3536 74.3745 36.604C75.8034 36.8543 78.0587 38.377 79.095 41.2485C79.8619 43.3792 83.8747 56.3778 83.8747 56.3778L90.8595 52.2544C92.649 50.9821 93.279 48.8719 94.4249 47.6763C95.5662 46.4807 96.7212 46.2763 97.9721 45.3004C99.2229 44.3245 99.7388 43.5427 100.054 44.5186C100.373 45.4945 98.9581 46.9916 98.7025 47.3646C98.4468 47.7376 97.0544 48.5347 98.8075 48.6369C100.565 48.7391 104.108 46.8281 104.957 46.5011C105.806 46.1741 105.728 47.3033 105.29 47.9982C104.847 48.6982 104.802 50.7522 104.062 51.907C103.277 53.1333 102.852 53.6595 101.168 54.3851C99.6018 55.0647 96.356 55.2333 94.6851 56.3165C93.0142 57.3946 88.9695 61.4873 86.2714 63.5873C82.6512 66.4078 80.6152 66.5917 79.1954 64.3435C77.771 62.1004 76.8443 58.999 76.3056 57.6143Z" fill="#FFA8A7"/>
|
||||
<path d="M70.5034 36.1083C72.8728 35.9039 75.6712 36.0674 77.2234 37.6514C78.456 38.9134 78.9216 39.7207 80.3003 44.0536C81.2316 46.9813 83.1673 53.7259 83.1673 53.7259C83.1673 53.7259 79.0586 54.5434 76.2967 58.4267L71.8456 47.2317L70.5034 36.1083Z" fill="#FFD666"/>
|
||||
<path d="M83.8658 56.3777C82.3182 56.996 81.2865 58.2121 80.9121 58.9121C80.9121 58.9121 81.0765 56.858 83.6375 55.6471L83.8658 56.3777Z" fill="#F28F8F"/>
|
||||
<path d="M64.8198 35.6278C64.8198 35.6278 63.295 35.5 61.4826 36.0365C59.3963 36.6548 55.6574 37.83 55.6574 37.83C54.4705 38.5198 54.0048 40.8242 53.74 42.1424C52.8818 46.3731 55.1279 55.9585 55.4565 59.6629C55.7807 63.3724 55.0731 74.7973 55.0731 74.7973C57.625 78.1032 71.453 80.3002 78.1867 74.7973C78.1867 74.7973 78.4789 48.6008 77.8169 44.8402C76.8126 39.1533 75.3243 36.4504 70.0698 36.1081L64.8198 35.6278Z" fill="#F5F5F5"/>
|
||||
<path d="M67.7732 21.5709L66.2712 22.5009C66.0475 22.0155 66.2073 21.4177 66.6227 21.1622C67.0382 20.9067 67.5495 21.0906 67.7732 21.5709Z" fill="#263238"/>
|
||||
<path d="M74.3012 22.2507L72.9316 21.0704C73.2101 20.631 73.7442 20.539 74.1232 20.866C74.5021 21.1879 74.5797 21.8113 74.3012 22.2507Z" fill="#263238"/>
|
||||
<path d="M60.8717 16.2214C60.8717 16.2214 59.2556 16.4718 58.6621 17.836C58.1463 19.0214 58.3334 21.8828 59.0182 24.9996C59.703 28.1164 60.3513 29.9967 60.7576 30.8602C61.1593 31.7237 61.9902 31.9638 61.9902 31.9638L61.908 28.2645L61.7893 25.6842C61.7893 25.6842 63.2684 23.4258 63.4282 21.5711C63.6382 19.1901 63.1908 18.2141 63.1908 18.2141L60.8717 16.2214Z" fill="#263238"/>
|
||||
<path d="M63.4781 19.8031C63.4872 23.6199 66.2628 26.7009 69.6685 26.6907C73.0787 26.6805 75.6306 23.5483 75.6215 19.7315C75.6124 15.9147 73.0376 12.8592 69.6274 12.8746C66.2218 12.8848 63.4644 15.9863 63.4781 19.8031Z" fill="#263238"/>
|
||||
<path d="M61.8761 25.2753C61.3191 25.8169 60.8672 24.4169 60.4015 23.8753C59.9359 23.3337 58.4111 22.5928 57.6578 24.3812C56.8909 26.2053 58.3243 28.7753 59.493 29.2812C60.7622 29.8279 61.4835 28.6016 61.4835 28.6016V36.8024C63.2411 40.3433 66.3408 40.236 67.9934 40.0367C69.6506 39.8374 70.0113 37.9112 68.8015 36.3579L68.7878 33.8235C68.7878 33.8235 70.6595 34.1352 71.568 33.9717C73.0836 33.706 73.878 32.4235 74.3345 30.5841C75.0649 27.6308 75.3571 22.6593 74.3436 16.9213C72.6454 15.4497 66.7517 15.695 63.1863 18.2242C63.4511 23.3082 62.433 24.7388 61.8761 25.2753Z" fill="#FFA8A7"/>
|
||||
<path d="M74.6268 14.0192C74.8551 12.9565 74.9601 11.8579 74.9327 10.7645C74.9235 10.3302 74.8368 9.80901 74.4807 9.65062C74.1338 9.49733 73.764 9.78346 73.4536 10.0185C72.1388 11.0097 70.5044 11.2908 68.9203 11.3879C66.1903 11.5565 61.9949 11.3572 60.6025 14.7141C60.2145 15.6441 60.1506 16.6251 60.9129 17.2689C61.5658 17.8156 62.3966 18.066 63.191 18.2193C64.5742 18.4901 65.9484 18.8273 67.3408 19.0368C68.7605 19.2463 70.4131 19.4558 71.8101 18.9704C72.9833 18.5667 74.1703 18.2193 75.0468 17.1769C75.7955 16.2828 76.2338 15.0616 76.2429 13.8353C76.2429 13.6616 76.2064 13.4419 76.0557 13.401C75.9781 13.3806 75.9005 13.4163 75.8275 13.4521C75.4303 13.636 75.0285 13.8302 74.6268 14.0192Z" fill="#263238"/>
|
||||
<path d="M68.792 33.8186C68.792 33.8186 65.4001 33.0675 64.2177 32.3675C63.4233 31.8974 62.7705 31.085 62.5742 30.5587C62.5742 30.5587 62.7979 31.6828 63.5101 32.6945C64.3775 33.931 68.7966 34.8251 68.7966 34.8251L68.792 33.8186Z" fill="#F28F8F"/>
|
||||
<path d="M68.1066 24.0853C68.1066 24.5758 67.7688 24.9692 67.3488 24.9692C66.9288 24.9692 66.5864 24.5758 66.5864 24.0853C66.5864 23.5948 66.9243 23.2013 67.3443 23.2013C67.7642 23.2013 68.1066 23.5999 68.1066 24.0853Z" fill="#263238"/>
|
||||
<path d="M69.7321 29.9866C69.7321 30.4465 68.9336 29.9154 68.5409 29.9154C68.1438 29.9154 67.2446 30.4465 67.2446 29.9866C67.2446 29.5268 68.0935 29.1538 68.4861 29.1538C68.8833 29.1538 69.7321 29.5268 69.7321 29.9866Z" fill="#B16668"/>
|
||||
<path d="M67.1485 21.4028L65.5781 22.5115C65.3133 22.0057 65.4457 21.3466 65.8794 21.04C66.3176 20.7334 66.8837 20.8969 67.1485 21.4028Z" fill="#263238"/>
|
||||
<path d="M72.695 20.3195L74.3476 21.1473C74.1605 21.6684 73.6355 21.9086 73.1789 21.6838C72.7224 21.4487 72.5078 20.8407 72.695 20.3195Z" fill="#263238"/>
|
||||
<path d="M73.567 23.8299C73.567 24.2999 73.2383 24.6832 72.8366 24.6832C72.4303 24.6832 72.1016 24.2999 72.1016 23.8299C72.1016 23.3598 72.4303 22.9766 72.832 22.9766C73.2337 22.9766 73.5624 23.3598 73.567 23.8299Z" fill="#263238"/>
|
||||
<path d="M69.8335 22.3888L70.1028 28.0654L72.5087 27.3552L69.8335 22.3888Z" fill="#F28F8F"/>
|
||||
<path d="M27.1939 45.7906C27.9836 46.2658 31.2021 48.8002 32.9506 49.0199C33.6901 49.1118 33.891 48.979 33.8636 48.7644C33.8225 48.468 33.3569 48.0235 33.2427 47.7834C33.0464 47.3695 31.8686 45.6323 32.3251 44.7279C32.7817 43.8235 33.1788 44.6921 34.2653 45.8826C35.3564 47.0731 36.4658 47.4819 37.4199 48.8717C38.374 50.2615 38.6936 52.4535 40.2686 54.0374L46.564 58.8403C46.564 58.8403 49.4949 43.6191 50.7822 41.8257C52.1335 39.9403 58.0318 44.0483 56.7992 50.0418C55.5574 56.0301 52.759 66.4229 50.8142 68.4667C49.5588 69.79 46.9018 68.5382 43.5921 65.2426C40.9762 62.6418 37.3925 58.7177 35.8997 57.3433C34.4069 55.9739 31.2295 55.2126 29.7823 54.2571C28.2256 53.2301 27.8878 52.6374 27.2897 51.2834C26.7282 50.0111 26.9793 47.9724 26.646 47.2009C26.3128 46.4396 26.4041 45.3104 27.1939 45.7906Z" fill="#FFA8A7"/>
|
||||
<path d="M55.6576 37.8301C57.6708 39.2455 57.7758 41.2995 57.8763 43.6448C57.9676 45.8061 57.5795 48.7901 56.7258 51.7382C55.8721 54.6966 54.5117 60.0974 54.5117 60.0974C54.5117 60.0974 49.2435 60.2354 46.5317 57.6142C46.5317 57.6142 47.7689 51.7944 48.6409 47.4156C49.5174 43.0367 50.5765 38.3258 55.6576 37.8301Z" fill="#FFD666"/>
|
||||
<path d="M46.5596 58.8403C47.9976 59.7345 48.8376 61.6557 49.1024 62.417C49.1024 62.417 49.0567 59.7191 46.7057 58.0586L46.5596 58.8403Z" fill="#F28F8F"/>
|
||||
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#FAAD14"/>
|
||||
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#D48806"/>
|
||||
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#FAAD14"/>
|
||||
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#AD6800"/>
|
||||
<path d="M171.681 169.272L136.447 146.504L101.213 169.272L136.447 192.04L171.681 169.272Z" fill="url(#paint0_linear_2661_68499)"/>
|
||||
<path opacity="0.1" d="M136.447 192.04V189.644L104.92 169.272H101.213L136.447 192.04Z" fill="black"/>
|
||||
<path opacity="0.1" d="M136.447 146.504V148.901L167.969 169.272H171.681L136.447 146.504Z" fill="black"/>
|
||||
<path d="M171.681 169.272H167.969L136.447 189.644V192.04L171.681 169.272Z" fill="url(#paint1_linear_2661_68499)"/>
|
||||
<path d="M136.447 146.504V148.901L104.92 169.272H101.213L136.447 146.504Z" fill="url(#paint2_linear_2661_68499)"/>
|
||||
<path d="M136.57 159.406L151.708 169.19C152.841 169.921 152.841 171.111 151.708 171.842L140.419 179.138C139.286 179.869 137.451 179.869 136.314 179.138L121.176 169.354C120.044 168.623 120.044 167.433 121.176 166.702L132.466 159.406C133.603 158.675 135.438 158.675 136.57 159.406Z" fill="#D48806"/>
|
||||
<path d="M140.418 179.139L151.338 172.082L136.569 162.538C135.437 161.807 133.598 161.807 132.465 162.538L121.545 169.594L136.314 179.139C137.451 179.869 139.286 179.869 140.418 179.139Z" fill="url(#paint3_linear_2661_68499)"/>
|
||||
<path d="M127.43 169.288L134.055 165.006C134.274 164.863 134.625 164.863 134.844 165.006L135.662 165.527C135.881 165.665 135.881 165.895 135.662 166.038L129.037 170.32C128.818 170.463 128.467 170.463 128.248 170.32L127.43 169.793C127.211 169.655 127.211 169.431 127.43 169.288Z" fill="#263238"/>
|
||||
<path d="M137.324 175.69L143.948 171.408C144.167 171.265 144.518 171.265 144.737 171.408L145.555 171.929C145.774 172.067 145.774 172.297 145.555 172.44L138.93 176.722C138.711 176.865 138.36 176.865 138.141 176.722L137.324 176.195C137.104 176.057 137.104 175.833 137.324 175.69Z" fill="#263238"/>
|
||||
<path d="M121.135 185.843C121.135 184.417 120.24 182.685 119.14 181.975C118.587 181.617 118.09 181.586 117.729 181.821C117.656 181.867 116.939 182.353 116.866 182.399C116.505 182.634 116.282 183.129 116.282 183.84C116.282 185.265 117.177 186.997 118.277 187.708C118.829 188.065 119.327 188.096 119.687 187.861C119.76 187.815 120.473 187.335 120.546 187.283C120.911 187.054 121.135 186.558 121.135 185.843Z" fill="url(#paint4_linear_2661_68499)"/>
|
||||
<path d="M118.277 182.552C119.377 183.262 120.272 184.994 120.272 186.42C120.272 187.846 119.377 188.423 118.277 187.708C117.177 186.997 116.282 185.26 116.282 183.84C116.282 182.419 117.177 181.837 118.277 182.552Z" fill="url(#paint5_linear_2661_68499)"/>
|
||||
<path d="M88.7234 197.134C90.5176 198.294 92.8139 198.872 95.1147 198.872C97.411 198.872 99.7119 198.294 101.497 197.134L118.73 186.006C119.164 185.725 119.315 185.101 119.064 184.611C118.813 184.126 118.256 183.957 117.817 184.238L100.584 195.366C97.5662 197.318 92.6541 197.318 89.6365 195.366L80.6855 189.583L79.3175 188.699L77.8036 188.971L78.2497 190.366L79.4628 191.15L88.7234 197.134Z" fill="#263238"/>
|
||||
<path d="M62.437 177.315C62.437 179.139 63.4687 180.815 65.3496 182.031L74.8926 188.197L74.628 186.897L76.0714 186.601L66.2626 180.263C64.9753 179.43 64.2631 178.382 64.2631 177.315C64.2631 176.247 64.9707 175.199 66.2626 174.366L93.3434 156.866C96.9225 154.552 99.7301 149.115 99.7301 144.486V48.5651C99.7301 48.003 99.3193 47.5432 98.8171 47.5432C98.3149 47.5432 97.904 48.003 97.904 48.5651V144.486C97.904 148.323 95.3978 153.182 92.4304 155.098L65.3496 172.598C63.4733 173.809 62.437 175.485 62.437 177.315Z" fill="#263238"/>
|
||||
<path d="M54.1012 11.8839C54.0783 11.7409 54.1012 11.6029 54.1788 11.4803C54.2564 11.3525 54.3568 11.2759 54.4846 11.2504L56.7079 10.7701C56.8357 10.7445 56.959 10.7701 57.0685 10.8569C57.1827 10.9438 57.2511 11.0562 57.274 11.2044L57.6164 13.1971C57.6392 13.3401 57.6164 13.4781 57.5387 13.6007C57.4657 13.7285 57.3607 13.8051 57.2329 13.8307L55.0142 14.3058C54.8864 14.3314 54.7631 14.3058 54.6535 14.219C54.5394 14.1321 54.4709 14.0197 54.4481 13.8766L54.1012 11.8839ZM52.2477 1.1233C52.2249 0.980234 52.2477 0.842277 52.3253 0.719649C52.4029 0.591911 52.5033 0.515268 52.6312 0.48972L54.8544 0.00942637C54.9822 -0.0161212 55.1055 0.00942637 55.2151 0.0962881C55.3292 0.18315 55.3977 0.295559 55.4205 0.438625L56.8859 8.94596C56.9087 9.08903 56.8859 9.22699 56.8083 9.34962C56.7307 9.47735 56.6303 9.554 56.5024 9.57954L54.2792 10.0598C54.1514 10.0854 54.0281 10.0598 53.9185 9.97298C53.8044 9.88611 53.7359 9.7737 53.7131 9.63064L52.2477 1.1233Z" fill="#C9A063"/>
|
||||
<path d="M50.3925 20.2226C50.3058 20.1153 50.2647 19.9825 50.2692 19.8292C50.2784 19.6759 50.3286 19.5533 50.429 19.4562L52.1136 17.7649C52.214 17.6679 52.3281 17.6219 52.4651 17.6321C52.602 17.6423 52.7116 17.6985 52.7984 17.8109L54.0081 19.3233C54.0949 19.4358 54.136 19.5635 54.1268 19.7168C54.1177 19.8701 54.0675 19.9927 53.967 20.0898L52.2825 21.781C52.1866 21.8781 52.0679 21.9241 51.931 21.9139C51.794 21.9088 51.6844 21.8474 51.5977 21.735L50.3925 20.2226ZM43.8597 12.0576C43.773 11.9503 43.7319 11.8175 43.741 11.6642C43.7501 11.5109 43.8003 11.3883 43.9008 11.2912L45.5853 9.59994C45.6858 9.50286 45.7999 9.45687 45.9369 9.46709C46.0738 9.4722 46.1834 9.53351 46.2701 9.64592L51.4334 16.0992C51.5201 16.2065 51.5612 16.3394 51.5521 16.4927C51.5429 16.646 51.4927 16.7686 51.3923 16.8657L49.7077 18.5569C49.6118 18.654 49.4931 18.7 49.3562 18.6898C49.2192 18.6795 49.1097 18.6233 49.0229 18.5109L43.8597 12.0576Z" fill="url(#paint6_linear_2661_68499)"/>
|
||||
<path d="M164.632 191.381C164.266 191.616 163.796 191.734 163.331 191.734C162.865 191.734 162.395 191.611 162.03 191.391L153.945 186.164L154.173 185.72L162.258 190.947C162.842 191.325 163.824 191.325 164.403 190.947L185.439 177.352L185.247 177.715L185.698 177.767L164.632 191.381Z" fill="#FAAD14"/>
|
||||
<path d="M207.371 163.167C207.371 163.55 207.157 163.902 206.764 164.153L186.835 177.123V176.827H186.57L206.536 163.718C206.778 163.56 206.915 163.366 206.915 163.172C206.915 162.978 206.773 162.778 206.536 162.625L196.602 156.207L196.83 155.763L206.764 162.18C207.157 162.431 207.371 162.783 207.371 163.167Z" fill="#FAAD14"/>
|
||||
<path d="M185.776 176.53V176.827L185.512 176.53H185.776Z" fill="#FAAD14"/>
|
||||
<path d="M185.247 176.827L185.433 176.787L185.337 177.056L185.247 176.827Z" fill="#FAAD14"/>
|
||||
<path d="M185.776 177.123L185.636 177.056L185.512 177.123H185.776Z" fill="#FAAD14"/>
|
||||
<path d="M186.835 177.715V178.011L186.57 177.715H186.835Z" fill="#FAAD14"/>
|
||||
<path d="M186.305 178.011L186.492 177.972L186.395 178.241L186.305 178.011Z" fill="#FAAD14"/>
|
||||
<path d="M186.835 178.308L186.694 178.241L186.57 178.308H186.835Z" fill="#FAAD14"/>
|
||||
<path d="M164.633 196.174C164.267 196.409 163.797 196.527 163.332 196.527C162.866 196.527 162.396 196.409 162.031 196.184L150.234 188.561L150.462 188.116L162.259 195.74C162.843 196.118 163.825 196.113 164.404 195.74L188.687 180.047L188.899 180.492L164.633 196.174Z" fill="#FAAD14"/>
|
||||
<path d="M214.791 163.167C214.791 163.55 214.576 163.902 214.183 164.153L189.408 180.163L189.18 179.729L213.955 163.719C214.197 163.56 214.334 163.366 214.334 163.172C214.334 162.978 214.192 162.778 213.955 162.625L200.305 153.806L200.533 153.362L214.183 162.181C214.576 162.431 214.791 162.783 214.791 163.167Z" fill="#FAAD14"/>
|
||||
<path d="M190.011 180.381L189.555 180.492L190.011 180.677V180.381Z" fill="#FAAD14"/>
|
||||
<path d="M189.253 180.492L189.746 180.973L189.408 181.27L189.253 180.492Z" fill="#FAAD14"/>
|
||||
<path d="M188.952 181.27V180.677L188.687 180.973L188.952 181.27Z" fill="#FAAD14"/>
|
||||
<path d="M189.18 179.196L188.952 179.789L188.687 179.196H189.18Z" fill="#FAAD14"/>
|
||||
<path d="M188.423 179.492L188.687 179.789H188.423V179.492Z" fill="#FAAD14"/>
|
||||
<path d="M163.331 201.319C163.797 201.319 164.267 201.202 164.632 200.967L221.601 164.153C221.994 163.902 222.208 163.55 222.208 163.167C222.208 162.783 221.994 162.431 221.601 162.18L204.244 150.965L204.016 151.41L221.373 162.62C221.61 162.773 221.752 162.972 221.752 163.167C221.752 163.356 221.615 163.555 221.373 163.713L164.404 200.527C163.824 200.905 162.843 200.905 162.258 200.527L146.755 190.508L146.527 190.952L162.03 200.972C162.395 201.202 162.865 201.319 163.331 201.319Z" fill="#FAAD14"/>
|
||||
<path d="M222.675 132.009L193.006 151.179L163.332 132.009L193.006 112.838L222.675 132.009Z" fill="#FFF1B8"/>
|
||||
<path d="M193.006 151.179V160.019C193.718 160.019 194.43 159.845 194.978 159.493H194.982L207.838 151.185L221.488 142.36C222.145 141.936 222.675 140.909 222.675 140.061V132.009L193.823 150.653L193.006 151.179Z" fill="#D48806"/>
|
||||
<path d="M163.332 132.009V140.061C163.332 140.909 163.866 141.936 164.519 142.36L176.315 149.984L191.029 159.493C191.576 159.845 192.289 160.019 193.005 160.019V151.179L192.083 150.587L163.332 132.009Z" fill="#D48806"/>
|
||||
<path d="M220.82 135.856V136.944C220.82 137.088 220.734 137.256 220.624 137.328L220.4 137.471C220.291 137.542 220.204 137.486 220.204 137.343V136.255C220.204 136.112 220.291 135.943 220.4 135.871L220.624 135.728C220.729 135.662 220.82 135.718 220.82 135.856Z" fill="#D48806"/>
|
||||
<path d="M219.82 136.505V137.593C219.82 137.736 219.734 137.905 219.624 137.976L219.4 138.119C219.291 138.191 219.204 138.135 219.204 137.992V136.903C219.204 136.76 219.291 136.592 219.4 136.52L219.624 136.377C219.729 136.306 219.82 136.362 219.82 136.505Z" fill="#D48806"/>
|
||||
<path d="M218.82 137.149V138.237C218.82 138.38 218.733 138.549 218.624 138.62L218.4 138.763C218.29 138.835 218.204 138.779 218.204 138.636V137.547C218.204 137.404 218.29 137.236 218.4 137.164L218.624 137.021C218.733 136.949 218.82 137.006 218.82 137.149Z" fill="#D48806"/>
|
||||
<path d="M217.82 137.793V138.881C217.82 139.024 217.734 139.193 217.624 139.264L217.4 139.407C217.291 139.479 217.204 139.423 217.204 139.279V138.191C217.204 138.048 217.291 137.879 217.4 137.808L217.624 137.665C217.734 137.593 217.82 137.65 217.82 137.793Z" fill="#D48806"/>
|
||||
<path d="M216.822 138.436V139.525C216.822 139.668 216.735 139.837 216.625 139.908L216.402 140.051C216.292 140.123 216.205 140.066 216.205 139.923V138.835C216.205 138.692 216.292 138.523 216.402 138.452L216.625 138.309C216.735 138.237 216.822 138.293 216.822 138.436Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 139.08V140.169C215.822 140.312 215.735 140.48 215.625 140.552L215.402 140.695C215.292 140.766 215.205 140.71 215.205 140.567V139.479C215.205 139.336 215.292 139.167 215.402 139.096L215.625 138.953C215.735 138.881 215.822 138.942 215.822 139.08Z" fill="#D48806"/>
|
||||
<path d="M214.826 139.724V140.812C214.826 140.955 214.739 141.124 214.629 141.196L214.406 141.339C214.296 141.41 214.209 141.354 214.209 141.211V140.123C214.209 139.979 214.296 139.811 214.406 139.739L214.629 139.596C214.734 139.53 214.826 139.586 214.826 139.724Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 140.373V141.461C213.826 141.604 213.739 141.773 213.629 141.845L213.406 141.988C213.296 142.059 213.209 142.003 213.209 141.86V140.772C213.209 140.628 213.296 140.46 213.406 140.388L213.629 140.245C213.734 140.174 213.826 140.23 213.826 140.373Z" fill="#FFF1B8"/>
|
||||
<path d="M212.827 141.017V142.105C212.827 142.248 212.74 142.417 212.63 142.488L212.407 142.631C212.297 142.703 212.21 142.647 212.21 142.503V141.415C212.21 141.272 212.297 141.103 212.407 141.032L212.63 140.889C212.74 140.817 212.827 140.874 212.827 141.017Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 141.66V142.749C211.827 142.892 211.74 143.06 211.63 143.132L211.407 143.275C211.297 143.347 211.21 143.29 211.21 143.147V142.059C211.21 141.916 211.297 141.747 211.407 141.676L211.63 141.533C211.74 141.461 211.827 141.517 211.827 141.66Z" fill="#D48806"/>
|
||||
<path d="M210.827 142.304V143.393C210.827 143.536 210.74 143.704 210.631 143.776L210.407 143.919C210.298 143.99 210.211 143.934 210.211 143.791V142.703C210.211 142.56 210.298 142.391 210.407 142.32L210.631 142.177C210.74 142.105 210.827 142.161 210.827 142.304Z" fill="#D48806"/>
|
||||
<path d="M209.828 142.948V144.037C209.828 144.18 209.741 144.348 209.631 144.42L209.408 144.563C209.298 144.634 209.211 144.578 209.211 144.435V143.347C209.211 143.204 209.298 143.035 209.408 142.964L209.631 142.82C209.741 142.749 209.828 142.805 209.828 142.948Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 143.592V144.68C208.832 144.823 208.745 144.992 208.636 145.064L208.412 145.207C208.302 145.278 208.216 145.222 208.216 145.079V143.991C208.216 143.848 208.302 143.679 208.412 143.607L208.636 143.464C208.741 143.393 208.832 143.454 208.832 143.592Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 144.236V145.324C207.833 145.467 207.746 145.636 207.636 145.707L207.413 145.85C207.303 145.922 207.216 145.866 207.216 145.723V144.634C207.216 144.491 207.303 144.323 207.413 144.251L207.636 144.108C207.741 144.042 207.833 144.098 207.833 144.236Z" fill="#D48806"/>
|
||||
<path d="M206.833 144.885V145.973C206.833 146.116 206.746 146.285 206.636 146.356L206.413 146.499C206.303 146.571 206.216 146.515 206.216 146.372V145.283C206.216 145.14 206.303 144.972 206.413 144.9L206.636 144.757C206.746 144.685 206.833 144.742 206.833 144.885Z" fill="#D48806"/>
|
||||
<path d="M205.833 145.528V146.617C205.833 146.76 205.746 146.928 205.637 147L205.413 147.143C205.303 147.214 205.217 147.158 205.217 147.015V145.927C205.217 145.784 205.303 145.615 205.413 145.544L205.637 145.401C205.746 145.329 205.833 145.385 205.833 145.528Z" fill="#D48806"/>
|
||||
<path d="M204.833 146.172V147.261C204.833 147.404 204.747 147.572 204.637 147.644L204.413 147.787C204.304 147.859 204.217 147.802 204.217 147.659V146.571C204.217 146.428 204.304 146.259 204.413 146.188L204.637 146.045C204.747 145.973 204.833 146.029 204.833 146.172Z" fill="#D48806"/>
|
||||
<path d="M220.82 139.08V140.169C220.82 140.312 220.734 140.48 220.624 140.552L220.4 140.695C220.291 140.766 220.204 140.71 220.204 140.567V139.479C220.204 139.336 220.291 139.167 220.4 139.096L220.624 138.953C220.729 138.881 220.82 138.942 220.82 139.08Z" fill="#D48806"/>
|
||||
<path d="M219.82 139.724V140.812C219.82 140.955 219.734 141.124 219.624 141.196L219.4 141.339C219.291 141.41 219.204 141.354 219.204 141.211V140.123C219.204 139.979 219.291 139.811 219.4 139.739L219.624 139.596C219.729 139.53 219.82 139.586 219.82 139.724Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 140.373V141.461C218.82 141.604 218.733 141.773 218.624 141.845L218.4 141.988C218.29 142.059 218.204 142.003 218.204 141.86V140.772C218.204 140.628 218.29 140.46 218.4 140.388L218.624 140.245C218.733 140.174 218.82 140.23 218.82 140.373Z" fill="#D48806"/>
|
||||
<path d="M217.82 141.017V142.105C217.82 142.248 217.734 142.417 217.624 142.488L217.4 142.631C217.291 142.703 217.204 142.647 217.204 142.504V141.415C217.204 141.272 217.291 141.104 217.4 141.032L217.624 140.889C217.734 140.818 217.82 140.874 217.82 141.017Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 141.661V142.749C216.822 142.892 216.735 143.061 216.625 143.132L216.402 143.275C216.292 143.347 216.205 143.291 216.205 143.148V142.059C216.205 141.916 216.292 141.748 216.402 141.676L216.625 141.533C216.735 141.461 216.822 141.518 216.822 141.661Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 142.304V143.393C215.822 143.536 215.735 143.704 215.625 143.776L215.402 143.919C215.292 143.99 215.205 143.934 215.205 143.791V142.703C215.205 142.56 215.292 142.391 215.402 142.32L215.625 142.177C215.735 142.105 215.822 142.161 215.822 142.304Z" fill="#D48806"/>
|
||||
<path d="M214.826 142.948V144.037C214.826 144.18 214.739 144.348 214.629 144.42L214.406 144.563C214.296 144.634 214.209 144.578 214.209 144.435V143.347C214.209 143.204 214.296 143.035 214.406 142.964L214.629 142.82C214.734 142.749 214.826 142.805 214.826 142.948Z" fill="#D48806"/>
|
||||
<path d="M213.826 143.592V144.68C213.826 144.823 213.739 144.992 213.629 145.064L213.406 145.207C213.296 145.278 213.209 145.222 213.209 145.079V143.991C213.209 143.848 213.296 143.679 213.406 143.607L213.629 143.464C213.734 143.393 213.826 143.454 213.826 143.592Z" fill="#D48806"/>
|
||||
<path d="M212.827 144.236V145.324C212.827 145.467 212.74 145.636 212.63 145.707L212.407 145.85C212.297 145.922 212.21 145.866 212.21 145.723V144.634C212.21 144.491 212.297 144.323 212.407 144.251L212.63 144.108C212.74 144.042 212.827 144.098 212.827 144.236Z" fill="#D48806"/>
|
||||
<path d="M211.827 144.885V145.973C211.827 146.116 211.74 146.285 211.63 146.356L211.407 146.499C211.297 146.571 211.21 146.515 211.21 146.372V145.283C211.21 145.14 211.297 144.972 211.407 144.9L211.63 144.757C211.74 144.685 211.827 144.742 211.827 144.885Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 145.529V146.617C210.827 146.76 210.74 146.929 210.631 147L210.407 147.143C210.298 147.215 210.211 147.159 210.211 147.015V145.927C210.211 145.784 210.298 145.615 210.407 145.544L210.631 145.401C210.74 145.329 210.827 145.386 210.827 145.529Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 146.172V147.261C209.828 147.404 209.741 147.572 209.631 147.644L209.408 147.787C209.298 147.859 209.211 147.802 209.211 147.659V146.571C209.211 146.428 209.298 146.259 209.408 146.188L209.631 146.045C209.741 145.973 209.828 146.029 209.828 146.172Z" fill="#D48806"/>
|
||||
<path d="M208.832 146.816V147.904C208.832 148.047 208.745 148.216 208.636 148.288L208.412 148.431C208.302 148.502 208.216 148.446 208.216 148.303V147.215C208.216 147.072 208.302 146.903 208.412 146.831L208.636 146.688C208.741 146.617 208.832 146.673 208.832 146.816Z" fill="#D48806"/>
|
||||
<path d="M207.833 147.46V148.548C207.833 148.691 207.746 148.86 207.636 148.931L207.413 149.074C207.303 149.146 207.216 149.09 207.216 148.947V147.858C207.216 147.715 207.303 147.547 207.413 147.475L207.636 147.332C207.741 147.261 207.833 147.322 207.833 147.46Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 148.104V149.192C206.833 149.335 206.746 149.504 206.636 149.575L206.413 149.718C206.303 149.79 206.216 149.734 206.216 149.591V148.502C206.216 148.359 206.303 148.191 206.413 148.119L206.636 147.976C206.746 147.91 206.833 147.966 206.833 148.104Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 148.747V149.836C205.833 149.979 205.746 150.147 205.637 150.219L205.413 150.362C205.303 150.434 205.217 150.377 205.217 150.234V149.146C205.217 149.003 205.303 148.834 205.413 148.763L205.637 148.62C205.746 148.553 205.833 148.609 205.833 148.747Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 149.396V150.485C204.833 150.628 204.747 150.796 204.637 150.868L204.413 151.011C204.304 151.082 204.217 151.026 204.217 150.883V149.795C204.217 149.652 204.304 149.483 204.413 149.412L204.637 149.268C204.747 149.197 204.833 149.253 204.833 149.396Z" fill="#FFF1B8"/>
|
||||
<path d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#874D00"/>
|
||||
<path d="M200.871 149.902C200.396 150.209 200.012 150.955 200.012 151.568C200.012 152.181 200.396 152.431 200.871 152.125C201.345 151.818 201.729 151.072 201.729 150.459C201.734 149.846 201.345 149.595 200.871 149.902Z" fill="#D48806"/>
|
||||
<path d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#874D00"/>
|
||||
<path d="M197.147 152.314C196.672 152.62 196.289 153.366 196.289 153.979C196.289 154.592 196.672 154.843 197.147 154.536C197.622 154.23 198.005 153.484 198.005 152.871C198.005 152.252 197.617 152.007 197.147 152.314Z" fill="#D48806"/>
|
||||
<path d="M222.675 117.63L193.006 136.801L163.332 117.63L193.006 98.4543L222.675 117.63Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 127.216L193.006 146.387V136.801L222.675 117.63V127.216Z" fill="#D48806"/>
|
||||
<path d="M193.005 146.387L163.332 127.216V117.63L193.005 136.801V146.387Z" fill="#D48806"/>
|
||||
<path d="M218.962 132.008V129.612L193.005 146.387V148.783L218.962 132.008Z" fill="#D48806"/>
|
||||
<path d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#874D00"/>
|
||||
<path d="M220.82 121.478V122.566C220.82 122.709 220.734 122.878 220.624 122.95L220.4 123.093C220.291 123.164 220.204 123.108 220.204 122.965V121.877C220.204 121.733 220.291 121.565 220.4 121.493L220.619 121.35C220.729 121.279 220.82 121.34 220.82 121.478Z" fill="#FFF1B8"/>
|
||||
<path d="M219.82 122.122V123.21C219.82 123.353 219.734 123.522 219.624 123.593L219.4 123.736C219.291 123.808 219.204 123.752 219.204 123.609V122.52C219.204 122.377 219.291 122.209 219.4 122.137L219.624 121.994C219.729 121.927 219.82 121.984 219.82 122.122Z" fill="#D48806"/>
|
||||
<path d="M218.82 122.771V123.859C218.82 124.002 218.733 124.171 218.624 124.242L218.4 124.385C218.29 124.457 218.204 124.401 218.204 124.258V123.169C218.204 123.026 218.29 122.858 218.4 122.786L218.624 122.643C218.733 122.571 218.82 122.628 218.82 122.771Z" fill="#D48806"/>
|
||||
<path d="M217.82 123.415V124.503C217.82 124.646 217.734 124.815 217.624 124.886L217.4 125.029C217.291 125.101 217.204 125.045 217.204 124.901V123.813C217.204 123.67 217.291 123.501 217.4 123.43L217.624 123.287C217.734 123.215 217.82 123.272 217.82 123.415Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 124.058V125.147C216.822 125.29 216.735 125.458 216.625 125.53L216.402 125.673C216.292 125.745 216.205 125.688 216.205 125.545V124.457C216.205 124.314 216.292 124.145 216.402 124.074L216.625 123.931C216.735 123.859 216.822 123.915 216.822 124.058Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 124.702V125.79C215.822 125.933 215.735 126.102 215.625 126.174L215.402 126.317C215.292 126.388 215.205 126.332 215.205 126.189V125.101C215.205 124.957 215.292 124.789 215.402 124.717L215.625 124.574C215.735 124.503 215.822 124.559 215.822 124.702Z" fill="#D48806"/>
|
||||
<path d="M214.826 125.346V126.434C214.826 126.577 214.739 126.746 214.629 126.817L214.406 126.96C214.296 127.032 214.209 126.976 214.209 126.833V125.744C214.209 125.601 214.296 125.433 214.406 125.361L214.629 125.218C214.734 125.147 214.826 125.208 214.826 125.346Z" fill="#D48806"/>
|
||||
<path d="M213.826 125.99V127.078C213.826 127.221 213.739 127.39 213.629 127.461L213.406 127.604C213.296 127.676 213.209 127.62 213.209 127.477V126.388C213.209 126.245 213.296 126.077 213.406 126.005L213.629 125.862C213.734 125.796 213.826 125.852 213.826 125.99Z" fill="#D48806"/>
|
||||
<path d="M212.827 126.633V127.722C212.827 127.865 212.74 128.033 212.63 128.105L212.407 128.248C212.297 128.32 212.21 128.263 212.21 128.12V127.032C212.21 126.889 212.297 126.72 212.407 126.649L212.63 126.506C212.74 126.439 212.827 126.495 212.827 126.633Z" fill="#D48806"/>
|
||||
<path d="M211.827 127.282V128.371C211.827 128.514 211.74 128.682 211.63 128.754L211.407 128.897C211.297 128.969 211.21 128.912 211.21 128.769V127.681C211.21 127.538 211.297 127.369 211.407 127.298L211.63 127.155C211.74 127.083 211.827 127.139 211.827 127.282Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 127.926V129.015C210.827 129.158 210.74 129.326 210.631 129.398L210.407 129.541C210.298 129.612 210.211 129.556 210.211 129.413V128.325C210.211 128.182 210.298 128.013 210.407 127.942L210.631 127.799C210.74 127.727 210.827 127.783 210.827 127.926Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 128.57V129.658C209.828 129.802 209.741 129.97 209.631 130.042L209.408 130.185C209.298 130.256 209.211 130.2 209.211 130.057V128.969C209.211 128.826 209.298 128.657 209.408 128.585L209.631 128.442C209.741 128.371 209.828 128.427 209.828 128.57Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 129.214V130.302C208.832 130.445 208.745 130.614 208.636 130.685L208.412 130.828C208.302 130.9 208.216 130.844 208.216 130.701V129.612C208.216 129.469 208.302 129.301 208.412 129.229L208.636 129.086C208.741 129.014 208.832 129.071 208.832 129.214Z" fill="#D48806"/>
|
||||
<path d="M207.833 129.858V130.946C207.833 131.089 207.746 131.258 207.636 131.329L207.413 131.472C207.303 131.544 207.216 131.488 207.216 131.344V130.256C207.216 130.113 207.303 129.944 207.413 129.873L207.636 129.73C207.741 129.658 207.833 129.72 207.833 129.858Z" fill="#D48806"/>
|
||||
<path d="M206.833 130.502V131.59C206.833 131.733 206.746 131.902 206.636 131.973L206.413 132.116C206.303 132.188 206.216 132.131 206.216 131.988V130.9C206.216 130.757 206.303 130.588 206.413 130.517L206.636 130.374C206.746 130.307 206.833 130.364 206.833 130.502Z" fill="#D48806"/>
|
||||
<path d="M205.833 131.15V132.239C205.833 132.382 205.746 132.55 205.637 132.622L205.413 132.765C205.303 132.836 205.217 132.78 205.217 132.637V131.549C205.217 131.406 205.303 131.237 205.413 131.166L205.637 131.023C205.746 130.951 205.833 131.007 205.833 131.15Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 131.794V132.882C204.833 133.025 204.747 133.194 204.637 133.265L204.413 133.408C204.304 133.48 204.217 133.424 204.217 133.281V132.192C204.217 132.049 204.304 131.881 204.413 131.809L204.637 131.666C204.747 131.595 204.833 131.651 204.833 131.794Z" fill="#D48806"/>
|
||||
<path d="M220.82 124.702V125.79C220.82 125.933 220.734 126.102 220.624 126.173L220.4 126.316C220.291 126.388 220.204 126.332 220.204 126.189V125.1C220.204 124.957 220.291 124.789 220.4 124.717L220.624 124.574C220.729 124.503 220.82 124.559 220.82 124.702Z" fill="#D48806"/>
|
||||
<path d="M219.82 125.346V126.434C219.82 126.577 219.734 126.746 219.624 126.817L219.4 126.96C219.291 127.032 219.204 126.976 219.204 126.832V125.744C219.204 125.601 219.291 125.432 219.4 125.361L219.624 125.218C219.729 125.146 219.82 125.208 219.82 125.346Z" fill="#D48806"/>
|
||||
<path d="M218.82 125.99V127.078C218.82 127.221 218.733 127.39 218.624 127.461L218.4 127.604C218.29 127.676 218.204 127.619 218.204 127.476V126.388C218.204 126.245 218.29 126.076 218.4 126.005L218.624 125.862C218.733 125.795 218.82 125.852 218.82 125.99Z" fill="#D48806"/>
|
||||
<path d="M217.82 126.633V127.721C217.82 127.865 217.734 128.033 217.624 128.105L217.4 128.248C217.291 128.319 217.204 128.263 217.204 128.12V127.032C217.204 126.889 217.291 126.72 217.4 126.648L217.624 126.505C217.734 126.439 217.82 126.495 217.82 126.633Z" fill="#D48806"/>
|
||||
<path d="M216.822 127.282V128.37C216.822 128.513 216.735 128.682 216.625 128.753L216.402 128.896C216.292 128.968 216.205 128.912 216.205 128.769V127.68C216.205 127.537 216.292 127.369 216.402 127.297L216.625 127.154C216.735 127.083 216.822 127.139 216.822 127.282Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 127.926V129.014C215.822 129.157 215.735 129.326 215.625 129.398L215.402 129.541C215.292 129.612 215.205 129.556 215.205 129.413V128.325C215.205 128.182 215.292 128.013 215.402 127.941L215.625 127.798C215.735 127.727 215.822 127.783 215.822 127.926Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 128.57V129.658C214.826 129.801 214.739 129.97 214.629 130.041L214.406 130.184C214.296 130.256 214.209 130.2 214.209 130.056V128.968C214.209 128.825 214.296 128.656 214.406 128.585L214.629 128.442C214.734 128.37 214.826 128.427 214.826 128.57Z" fill="#D48806"/>
|
||||
<path d="M213.826 129.214V130.302C213.826 130.445 213.739 130.614 213.629 130.685L213.406 130.828C213.296 130.9 213.209 130.843 213.209 130.7V129.612C213.209 129.469 213.296 129.3 213.406 129.229L213.629 129.086C213.734 129.014 213.826 129.07 213.826 129.214Z" fill="#D48806"/>
|
||||
<path d="M212.827 129.857V130.946C212.827 131.089 212.74 131.257 212.63 131.329L212.407 131.472C212.297 131.543 212.21 131.487 212.21 131.344V130.256C212.21 130.113 212.297 129.944 212.407 129.873L212.63 129.73C212.74 129.658 212.827 129.719 212.827 129.857Z" fill="#D48806"/>
|
||||
<path d="M211.827 130.501V131.589C211.827 131.732 211.74 131.901 211.63 131.973L211.407 132.116C211.297 132.187 211.21 132.131 211.21 131.988V130.9C211.21 130.756 211.297 130.588 211.407 130.516L211.63 130.373C211.74 130.307 211.827 130.363 211.827 130.501Z" fill="#D48806"/>
|
||||
<path d="M210.827 131.15V132.238C210.827 132.381 210.74 132.55 210.631 132.622L210.407 132.765C210.298 132.836 210.211 132.78 210.211 132.637V131.549C210.211 131.406 210.298 131.237 210.407 131.165L210.631 131.022C210.74 130.951 210.827 131.007 210.827 131.15Z" fill="#D48806"/>
|
||||
<path d="M209.828 131.794V132.882C209.828 133.025 209.741 133.194 209.631 133.265L209.408 133.408C209.298 133.48 209.211 133.424 209.211 133.28V132.192C209.211 132.049 209.298 131.88 209.408 131.809L209.631 131.666C209.741 131.594 209.828 131.651 209.828 131.794Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 132.438V133.526C208.832 133.669 208.745 133.838 208.636 133.909L208.412 134.052C208.302 134.124 208.216 134.068 208.216 133.925V132.836C208.216 132.693 208.302 132.525 208.412 132.453L208.636 132.31C208.741 132.238 208.832 132.295 208.832 132.438Z" fill="#D48806"/>
|
||||
<path d="M207.833 133.081V134.17C207.833 134.313 207.746 134.481 207.636 134.553L207.413 134.696C207.303 134.767 207.216 134.711 207.216 134.568V133.48C207.216 133.337 207.303 133.168 207.413 133.097L207.636 132.954C207.741 132.882 207.833 132.938 207.833 133.081Z" fill="#D48806"/>
|
||||
<path d="M206.833 133.725V134.814C206.833 134.957 206.746 135.125 206.636 135.197L206.413 135.34C206.303 135.411 206.216 135.355 206.216 135.212V134.124C206.216 133.981 206.303 133.812 206.413 133.741L206.636 133.597C206.746 133.526 206.833 133.587 206.833 133.725Z" fill="#D48806"/>
|
||||
<path d="M205.833 134.369V135.457C205.833 135.601 205.746 135.769 205.637 135.841L205.413 135.984C205.303 136.055 205.217 135.999 205.217 135.856V134.768C205.217 134.625 205.303 134.456 205.413 134.384L205.637 134.241C205.746 134.175 205.833 134.231 205.833 134.369Z" fill="#D48806"/>
|
||||
<path d="M204.833 135.013V136.101C204.833 136.244 204.747 136.413 204.637 136.484L204.413 136.627C204.304 136.699 204.217 136.643 204.217 136.5V135.411C204.217 135.268 204.304 135.1 204.413 135.028L204.637 134.885C204.747 134.819 204.833 134.875 204.833 135.013Z" fill="#D48806"/>
|
||||
<path d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#874D00"/>
|
||||
<path d="M200.871 135.524C200.396 135.831 200.012 136.577 200.012 137.19C200.012 137.803 200.396 138.053 200.871 137.747C201.345 137.44 201.729 136.694 201.729 136.081C201.734 135.468 201.345 135.218 200.871 135.524Z" fill="#D48806"/>
|
||||
<path d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#874D00"/>
|
||||
<path d="M197.147 137.935C196.672 138.242 196.289 138.988 196.289 139.601C196.289 140.214 196.672 140.465 197.147 140.158C197.622 139.852 198.005 139.106 198.005 138.492C198.005 137.874 197.617 137.629 197.147 137.935Z" fill="#D48806"/>
|
||||
<path d="M222.675 103.247L193.006 122.423L163.332 103.247L193.006 84.0766L222.675 103.247Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 112.838L193.006 132.009V122.423L222.675 103.247V112.838Z" fill="#D48806"/>
|
||||
<path d="M193.005 132.009L163.332 112.838V103.248L193.005 122.424V132.009Z" fill="#D48806"/>
|
||||
<path d="M218.962 117.631V115.234L193.005 132.009V134.405L218.962 117.631Z" fill="#D48806"/>
|
||||
<path d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#874D00"/>
|
||||
<path d="M220.82 107.1V108.189C220.82 108.332 220.734 108.5 220.624 108.572L220.4 108.715C220.291 108.786 220.204 108.73 220.204 108.587V107.499C220.204 107.356 220.291 107.187 220.4 107.116L220.624 106.973C220.729 106.901 220.82 106.957 220.82 107.1Z" fill="#D48806"/>
|
||||
<path d="M219.82 107.744V108.832C219.82 108.975 219.734 109.144 219.624 109.216L219.4 109.359C219.291 109.43 219.204 109.374 219.204 109.231V108.143C219.204 108 219.291 107.831 219.4 107.759L219.624 107.616C219.729 107.545 219.82 107.606 219.82 107.744Z" fill="#D48806"/>
|
||||
<path d="M218.82 108.388V109.476C218.82 109.619 218.733 109.788 218.624 109.859L218.4 110.003C218.29 110.074 218.204 110.018 218.204 109.875V108.786C218.204 108.643 218.29 108.475 218.4 108.403L218.624 108.26C218.733 108.189 218.82 108.25 218.82 108.388Z" fill="#D48806"/>
|
||||
<path d="M217.82 109.032V110.12C217.82 110.263 217.734 110.432 217.624 110.503L217.4 110.646C217.291 110.718 217.204 110.662 217.204 110.518V109.43C217.204 109.287 217.291 109.118 217.4 109.047L217.624 108.904C217.734 108.837 217.82 108.894 217.82 109.032Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 109.68V110.769C216.822 110.912 216.735 111.08 216.625 111.152L216.402 111.295C216.292 111.367 216.205 111.31 216.205 111.167V110.079C216.205 109.936 216.292 109.767 216.402 109.696L216.625 109.553C216.735 109.481 216.822 109.537 216.822 109.68Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 110.325V111.413C215.822 111.556 215.735 111.725 215.625 111.796L215.402 111.939C215.292 112.011 215.205 111.954 215.205 111.811V110.723C215.205 110.58 215.292 110.411 215.402 110.34L215.625 110.197C215.735 110.125 215.822 110.181 215.822 110.325Z" fill="#D48806"/>
|
||||
<path d="M214.826 110.968V112.056C214.826 112.2 214.739 112.368 214.629 112.44L214.406 112.583C214.296 112.654 214.209 112.598 214.209 112.455V111.367C214.209 111.224 214.296 111.055 214.406 110.983L214.629 110.84C214.734 110.769 214.826 110.825 214.826 110.968Z" fill="#D48806"/>
|
||||
<path d="M213.826 111.612V112.7C213.826 112.843 213.739 113.012 213.629 113.084L213.406 113.227C213.296 113.298 213.209 113.242 213.209 113.099V112.011C213.209 111.867 213.296 111.699 213.406 111.627L213.629 111.484C213.734 111.413 213.826 111.469 213.826 111.612Z" fill="#D48806"/>
|
||||
<path d="M212.827 112.256V113.344C212.827 113.487 212.74 113.656 212.63 113.727L212.407 113.87C212.297 113.942 212.21 113.886 212.21 113.743V112.654C212.21 112.511 212.297 112.343 212.407 112.271L212.63 112.128C212.74 112.057 212.827 112.118 212.827 112.256Z" fill="#D48806"/>
|
||||
<path d="M211.827 112.899V113.988C211.827 114.131 211.74 114.299 211.63 114.371L211.407 114.514C211.297 114.586 211.21 114.529 211.21 114.386V113.298C211.21 113.155 211.297 112.986 211.407 112.915L211.63 112.772C211.74 112.705 211.827 112.762 211.827 112.899Z" fill="#D48806"/>
|
||||
<path d="M210.827 113.549V114.637C210.827 114.78 210.74 114.949 210.631 115.02L210.407 115.163C210.298 115.235 210.211 115.178 210.211 115.035V113.947C210.211 113.804 210.298 113.635 210.407 113.564L210.631 113.421C210.74 113.349 210.827 113.405 210.827 113.549Z" fill="#D48806"/>
|
||||
<path d="M209.828 114.192V115.28C209.828 115.423 209.741 115.592 209.631 115.664L209.408 115.807C209.298 115.878 209.211 115.822 209.211 115.679V114.591C209.211 114.448 209.298 114.279 209.408 114.207L209.631 114.064C209.741 113.993 209.828 114.049 209.828 114.192Z" fill="#D48806"/>
|
||||
<path d="M208.832 114.836V115.925C208.832 116.068 208.745 116.236 208.636 116.308L208.412 116.451C208.302 116.522 208.216 116.466 208.216 116.323V115.235C208.216 115.092 208.302 114.923 208.412 114.852L208.636 114.709C208.741 114.637 208.832 114.693 208.832 114.836Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 115.48V116.568C207.833 116.711 207.746 116.88 207.636 116.951L207.413 117.094C207.303 117.166 207.216 117.11 207.216 116.967V115.878C207.216 115.735 207.303 115.567 207.413 115.495L207.636 115.352C207.741 115.281 207.833 115.337 207.833 115.48Z" fill="#D48806"/>
|
||||
<path d="M206.833 116.124V117.212C206.833 117.355 206.746 117.524 206.636 117.595L206.413 117.738C206.303 117.81 206.216 117.754 206.216 117.611V116.522C206.216 116.379 206.303 116.211 206.413 116.139L206.636 115.996C206.746 115.924 206.833 115.986 206.833 116.124Z" fill="#D48806"/>
|
||||
<path d="M205.833 116.768V117.856C205.833 117.999 205.746 118.168 205.637 118.239L205.413 118.382C205.303 118.454 205.217 118.397 205.217 118.254V117.166C205.217 117.023 205.303 116.854 205.413 116.783L205.637 116.64C205.746 116.568 205.833 116.63 205.833 116.768Z" fill="#D48806"/>
|
||||
<path d="M204.833 117.411V118.5C204.833 118.643 204.747 118.811 204.637 118.883L204.413 119.026C204.304 119.097 204.217 119.041 204.217 118.898V117.81C204.217 117.667 204.304 117.498 204.413 117.427L204.637 117.283C204.747 117.217 204.833 117.273 204.833 117.411Z" fill="#D48806"/>
|
||||
<path d="M220.82 110.324V111.413C220.82 111.556 220.734 111.724 220.624 111.796L220.4 111.939C220.291 112.01 220.204 111.954 220.204 111.811V110.723C220.204 110.58 220.291 110.411 220.4 110.34L220.624 110.197C220.729 110.125 220.82 110.181 220.82 110.324Z" fill="#D48806"/>
|
||||
<path d="M219.82 110.968V112.056C219.82 112.199 219.734 112.368 219.624 112.439L219.4 112.582C219.291 112.654 219.204 112.598 219.204 112.455V111.366C219.204 111.223 219.291 111.055 219.4 110.983L219.624 110.84C219.729 110.769 219.82 110.825 219.82 110.968Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 111.612V112.7C218.82 112.843 218.733 113.012 218.624 113.084L218.4 113.227C218.29 113.298 218.204 113.242 218.204 113.099V112.011C218.204 111.867 218.29 111.699 218.4 111.627L218.624 111.484C218.733 111.413 218.82 111.469 218.82 111.612Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 112.256V113.344C217.82 113.487 217.734 113.656 217.624 113.727L217.4 113.87C217.291 113.942 217.204 113.885 217.204 113.742V112.654C217.204 112.511 217.291 112.342 217.4 112.271L217.624 112.128C217.734 112.056 217.82 112.118 217.82 112.256Z" fill="#D48806"/>
|
||||
<path d="M216.822 112.899V113.988C216.822 114.131 216.735 114.299 216.625 114.371L216.402 114.514C216.292 114.586 216.205 114.529 216.205 114.386V113.298C216.205 113.155 216.292 112.986 216.402 112.915L216.625 112.772C216.735 112.705 216.822 112.762 216.822 112.899Z" fill="#D48806"/>
|
||||
<path d="M215.822 113.549V114.637C215.822 114.78 215.735 114.949 215.625 115.02L215.402 115.163C215.292 115.235 215.205 115.178 215.205 115.035V113.947C215.205 113.804 215.292 113.635 215.402 113.564L215.625 113.421C215.735 113.349 215.822 113.405 215.822 113.549Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 114.192V115.28C214.826 115.423 214.739 115.592 214.629 115.664L214.406 115.807C214.296 115.878 214.209 115.822 214.209 115.679V114.591C214.209 114.448 214.296 114.279 214.406 114.207L214.629 114.064C214.734 113.993 214.826 114.049 214.826 114.192Z" fill="#D48806"/>
|
||||
<path d="M213.826 114.836V115.924C213.826 116.067 213.739 116.236 213.629 116.308L213.406 116.451C213.296 116.522 213.209 116.466 213.209 116.323V115.235C213.209 115.091 213.296 114.923 213.406 114.851L213.629 114.708C213.734 114.637 213.826 114.693 213.826 114.836Z" fill="#D48806"/>
|
||||
<path d="M212.827 115.48V116.568C212.827 116.711 212.74 116.88 212.63 116.951L212.407 117.094C212.297 117.166 212.21 117.109 212.21 116.966V115.878C212.21 115.735 212.297 115.566 212.407 115.495L212.63 115.352C212.74 115.28 212.827 115.336 212.827 115.48Z" fill="#D48806"/>
|
||||
<path d="M211.827 116.123V117.212C211.827 117.355 211.74 117.523 211.63 117.595L211.407 117.738C211.297 117.81 211.21 117.753 211.21 117.61V116.522C211.21 116.379 211.297 116.21 211.407 116.139L211.63 115.996C211.74 115.924 211.827 115.985 211.827 116.123Z" fill="#D48806"/>
|
||||
<path d="M210.827 116.767V117.856C210.827 117.999 210.74 118.167 210.631 118.239L210.407 118.382C210.298 118.453 210.211 118.397 210.211 118.254V117.166C210.211 117.023 210.298 116.854 210.407 116.783L210.631 116.64C210.74 116.568 210.827 116.629 210.827 116.767Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 117.411V118.499C209.828 118.642 209.741 118.811 209.631 118.882L209.408 119.026C209.298 119.097 209.211 119.041 209.211 118.898V117.809C209.211 117.666 209.298 117.498 209.408 117.426L209.631 117.283C209.741 117.217 209.828 117.273 209.828 117.411Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 118.06V119.149C208.832 119.292 208.745 119.46 208.636 119.532L208.412 119.675C208.302 119.746 208.216 119.69 208.216 119.547V118.459C208.216 118.316 208.302 118.147 208.412 118.076L208.636 117.933C208.741 117.861 208.832 117.917 208.832 118.06Z" fill="#D48806"/>
|
||||
<path d="M207.833 118.704V119.792C207.833 119.935 207.746 120.104 207.636 120.175L207.413 120.318C207.303 120.39 207.216 120.334 207.216 120.191V119.102C207.216 118.959 207.303 118.791 207.413 118.719L207.636 118.576C207.741 118.505 207.833 118.561 207.833 118.704Z" fill="#D48806"/>
|
||||
<path d="M206.833 119.348V120.436C206.833 120.579 206.746 120.748 206.636 120.819L206.413 120.962C206.303 121.034 206.216 120.978 206.216 120.835V119.746C206.216 119.603 206.303 119.435 206.413 119.363L206.636 119.22C206.746 119.148 206.833 119.205 206.833 119.348Z" fill="#D48806"/>
|
||||
<path d="M205.833 119.991V121.08C205.833 121.223 205.746 121.391 205.637 121.463L205.413 121.606C205.303 121.677 205.217 121.621 205.217 121.478V120.39C205.217 120.247 205.303 120.078 205.413 120.007L205.637 119.864C205.746 119.792 205.833 119.848 205.833 119.991Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 120.635V121.723C204.833 121.866 204.747 122.035 204.637 122.107L204.413 122.25C204.304 122.321 204.217 122.265 204.217 122.122V121.034C204.217 120.891 204.304 120.722 204.413 120.65L204.637 120.507C204.747 120.436 204.833 120.497 204.833 120.635Z" fill="#D48806"/>
|
||||
<path d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#874D00"/>
|
||||
<path d="M200.871 121.146C200.396 121.453 200.012 122.199 200.012 122.812C200.012 123.425 200.396 123.675 200.871 123.369C201.345 123.062 201.729 122.316 201.729 121.703C201.734 121.085 201.345 120.839 200.871 121.146Z" fill="#D48806"/>
|
||||
<path d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#874D00"/>
|
||||
<path d="M197.147 123.553C196.672 123.859 196.289 124.605 196.289 125.218C196.289 125.832 196.672 126.082 197.147 125.775C197.622 125.469 198.005 124.723 198.005 124.11C198.005 123.497 197.617 123.246 197.147 123.553Z" fill="#D48806"/>
|
||||
<path d="M222.675 88.8689L193.006 108.04L163.332 88.8689L193.006 69.698L222.675 88.8689Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 98.4543L193.006 117.63V108.04L222.675 88.8689V98.4543Z" fill="#D48806"/>
|
||||
<path d="M193.005 117.63L163.332 98.4543V88.8689L193.005 108.04V117.63Z" fill="#D48806"/>
|
||||
<path d="M218.962 103.247V100.851L193.005 117.63V120.027L218.962 103.247Z" fill="#D48806"/>
|
||||
<path d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#874D00"/>
|
||||
<path d="M220.82 92.7216V93.81C220.82 93.953 220.734 94.1216 220.624 94.1932L220.4 94.3362C220.291 94.4078 220.204 94.3516 220.204 94.2085V93.1202C220.204 92.9771 220.291 92.8085 220.4 92.737L220.624 92.5939C220.729 92.5224 220.82 92.5786 220.82 92.7216Z" fill="#D48806"/>
|
||||
<path d="M219.82 93.3652V94.4535C219.82 94.5966 219.734 94.7652 219.624 94.8368L219.4 94.9798C219.291 95.0514 219.204 94.9951 219.204 94.8521V93.7638C219.204 93.6207 219.291 93.4521 219.4 93.3805L219.624 93.2375C219.729 93.1659 219.82 93.2221 219.82 93.3652Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 94.0094V95.0977C218.82 95.2408 218.733 95.4094 218.624 95.4809L218.4 95.624C218.29 95.6955 218.204 95.6393 218.204 95.4962V94.4079C218.204 94.2649 218.29 94.0962 218.4 94.0247L218.624 93.8816C218.733 93.8101 218.82 93.8663 218.82 94.0094Z" fill="#D48806"/>
|
||||
<path d="M217.82 94.6529V95.7412C217.82 95.8843 217.734 96.0529 217.624 96.1245L217.4 96.2675C217.291 96.3391 217.204 96.2828 217.204 96.1398V95.0515C217.204 94.9084 217.291 94.7398 217.4 94.6682L217.624 94.5252C217.734 94.4536 217.82 94.515 217.82 94.6529Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 95.2969V96.3852C216.822 96.5283 216.735 96.6969 216.625 96.7684L216.402 96.9115C216.292 96.983 216.205 96.9268 216.205 96.7837V95.6954C216.205 95.5523 216.292 95.3837 216.402 95.3122L216.625 95.1691C216.735 95.1027 216.822 95.1589 216.822 95.2969Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 95.9407V97.0291C215.822 97.1721 215.735 97.3407 215.625 97.4123L215.402 97.5553C215.292 97.6269 215.205 97.5707 215.205 97.4276V96.3393C215.205 96.1962 215.292 96.0276 215.402 95.9561L215.625 95.813C215.735 95.7466 215.822 95.8028 215.822 95.9407Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 96.5895V97.6778C214.826 97.8209 214.739 97.9895 214.629 98.061L214.406 98.2041C214.296 98.2756 214.209 98.2194 214.209 98.0764V96.988C214.209 96.845 214.296 96.6763 214.406 96.6048L214.629 96.4617C214.734 96.3902 214.826 96.4464 214.826 96.5895Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 97.2334V98.3217C213.826 98.4647 213.739 98.6334 213.629 98.7049L213.406 98.848C213.296 98.9195 213.209 98.8633 213.209 98.7202V97.6319C213.209 97.4888 213.296 97.3202 213.406 97.2487L213.629 97.1056C213.734 97.0341 213.826 97.0903 213.826 97.2334Z" fill="#D48806"/>
|
||||
<path d="M212.827 97.8769V98.9653C212.827 99.1083 212.74 99.2769 212.63 99.3485L212.407 99.4915C212.297 99.5631 212.21 99.5069 212.21 99.3638V98.2755C212.21 98.1324 212.297 97.9638 212.407 97.8923L212.63 97.7492C212.74 97.6777 212.827 97.7339 212.827 97.8769Z" fill="#D48806"/>
|
||||
<path d="M211.827 98.5211V99.6094C211.827 99.7525 211.74 99.9211 211.63 99.9926L211.407 100.136C211.297 100.207 211.21 100.151 211.21 100.008V98.9196C211.21 98.7766 211.297 98.608 211.407 98.5364L211.63 98.3934C211.74 98.3218 211.827 98.378 211.827 98.5211Z" fill="#D48806"/>
|
||||
<path d="M210.827 99.1646V100.253C210.827 100.396 210.74 100.565 210.631 100.636L210.407 100.779C210.298 100.851 210.211 100.795 210.211 100.652V99.5632C210.211 99.4201 210.298 99.2515 210.407 99.18L210.631 99.0369C210.74 98.9654 210.827 99.0267 210.827 99.1646Z" fill="#D48806"/>
|
||||
<path d="M209.828 99.8083V100.897C209.828 101.04 209.741 101.208 209.631 101.28L209.408 101.423C209.298 101.494 209.211 101.438 209.211 101.295V100.207C209.211 100.064 209.298 99.8952 209.408 99.8236L209.631 99.6806C209.741 99.6141 209.828 99.6703 209.828 99.8083Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 100.458V101.546C208.832 101.689 208.745 101.858 208.636 101.929L208.412 102.072C208.302 102.144 208.216 102.088 208.216 101.944V100.856C208.216 100.713 208.302 100.544 208.412 100.473L208.636 100.33C208.741 100.258 208.832 100.315 208.832 100.458Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 101.101V102.19C207.833 102.333 207.746 102.501 207.636 102.573L207.413 102.716C207.303 102.787 207.216 102.731 207.216 102.588V101.5C207.216 101.357 207.303 101.188 207.413 101.117L207.636 100.973C207.741 100.902 207.833 100.958 207.833 101.101Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 101.745V102.833C206.833 102.976 206.746 103.145 206.636 103.217L206.413 103.36C206.303 103.431 206.216 103.375 206.216 103.232V102.144C206.216 102.001 206.303 101.832 206.413 101.76L206.636 101.617C206.746 101.546 206.833 101.602 206.833 101.745Z" fill="#D48806"/>
|
||||
<path d="M205.833 102.389V103.477C205.833 103.62 205.746 103.789 205.637 103.86L205.413 104.003C205.303 104.075 205.217 104.019 205.217 103.876V102.787C205.217 102.644 205.303 102.476 205.413 102.404L205.637 102.261C205.746 102.189 205.833 102.246 205.833 102.389Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 103.032V104.121C204.833 104.264 204.747 104.432 204.637 104.504L204.413 104.647C204.304 104.719 204.217 104.662 204.217 104.519V103.431C204.217 103.288 204.304 103.119 204.413 103.048L204.637 102.905C204.747 102.833 204.833 102.895 204.833 103.032Z" fill="#FFF1B8"/>
|
||||
<path d="M220.82 95.9404V97.0288C220.82 97.1718 220.734 97.3404 220.624 97.412L220.4 97.555C220.291 97.6266 220.204 97.5704 220.204 97.4273V96.339C220.204 96.1959 220.291 96.0273 220.4 95.9558L220.624 95.8127C220.729 95.7463 220.82 95.8025 220.82 95.9404Z" fill="#FFF1B8"/>
|
||||
<path d="M219.82 96.5892V97.6775C219.82 97.8206 219.734 97.9892 219.624 98.0607L219.4 98.2038C219.291 98.2753 219.204 98.2191 219.204 98.0761V96.9877C219.204 96.8447 219.291 96.6761 219.4 96.6045L219.624 96.4615C219.729 96.3899 219.82 96.4461 219.82 96.5892Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 97.2331V98.3214C218.82 98.4645 218.733 98.6331 218.624 98.7046L218.4 98.8477C218.29 98.9192 218.204 98.863 218.204 98.7199V97.6316C218.204 97.4885 218.29 97.3199 218.4 97.2484L218.624 97.1053C218.733 97.0338 218.82 97.09 218.82 97.2331Z" fill="#D48806"/>
|
||||
<path d="M217.82 97.8769V98.9653C217.82 99.1083 217.734 99.2769 217.624 99.3485L217.4 99.4915C217.291 99.5631 217.204 99.5069 217.204 99.3638V98.2755C217.204 98.1324 217.291 97.9638 217.4 97.8923L217.624 97.7492C217.734 97.6777 217.82 97.7339 217.82 97.8769Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 98.5208V99.6091C216.822 99.7522 216.735 99.9208 216.625 99.9923L216.402 100.135C216.292 100.207 216.205 100.151 216.205 100.008V98.9194C216.205 98.7763 216.292 98.6077 216.402 98.5361L216.625 98.3931C216.735 98.3215 216.822 98.3777 216.822 98.5208Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 99.1646V100.253C215.822 100.396 215.735 100.565 215.625 100.636L215.402 100.779C215.292 100.851 215.205 100.795 215.205 100.652V99.5632C215.205 99.4201 215.292 99.2515 215.402 99.18L215.625 99.0369C215.735 98.9654 215.822 99.0267 215.822 99.1646Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 99.8083V100.897C214.826 101.04 214.739 101.208 214.629 101.28L214.406 101.423C214.296 101.494 214.209 101.438 214.209 101.295V100.207C214.209 100.064 214.296 99.8952 214.406 99.8236L214.629 99.6806C214.734 99.6141 214.826 99.6703 214.826 99.8083Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 100.457V101.546C213.826 101.689 213.739 101.857 213.629 101.929L213.406 102.072C213.296 102.143 213.209 102.087 213.209 101.944V100.856C213.209 100.713 213.296 100.544 213.406 100.473L213.629 100.33C213.734 100.258 213.826 100.314 213.826 100.457Z" fill="#D48806"/>
|
||||
<path d="M212.827 101.101V102.189C212.827 102.332 212.74 102.501 212.63 102.572L212.407 102.716C212.297 102.787 212.21 102.731 212.21 102.588V101.499C212.21 101.356 212.297 101.188 212.407 101.116L212.63 100.973C212.74 100.902 212.827 100.958 212.827 101.101Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 101.745V102.833C211.827 102.976 211.74 103.145 211.63 103.216L211.407 103.359C211.297 103.431 211.21 103.375 211.21 103.232V102.143C211.21 102 211.297 101.832 211.407 101.76L211.63 101.617C211.74 101.546 211.827 101.602 211.827 101.745Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 102.389V103.477C210.827 103.62 210.74 103.789 210.631 103.86L210.407 104.003C210.298 104.075 210.211 104.019 210.211 103.876V102.787C210.211 102.644 210.298 102.476 210.407 102.404L210.631 102.261C210.74 102.189 210.827 102.246 210.827 102.389Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 103.032V104.121C209.828 104.264 209.741 104.432 209.631 104.504L209.408 104.647C209.298 104.719 209.211 104.662 209.211 104.519V103.431C209.211 103.288 209.298 103.119 209.408 103.048L209.631 102.905C209.741 102.833 209.828 102.895 209.828 103.032Z" fill="#D48806"/>
|
||||
<path d="M208.832 103.676V104.765C208.832 104.908 208.745 105.076 208.636 105.148L208.412 105.291C208.302 105.363 208.216 105.306 208.216 105.163V104.075C208.216 103.932 208.302 103.763 208.412 103.692L208.636 103.549C208.741 103.482 208.832 103.538 208.832 103.676Z" fill="#D48806"/>
|
||||
<path d="M207.833 104.32V105.408C207.833 105.551 207.746 105.72 207.636 105.792L207.413 105.935C207.303 106.006 207.216 105.95 207.216 105.807V104.719C207.216 104.575 207.303 104.407 207.413 104.335L207.636 104.192C207.741 104.126 207.833 104.182 207.833 104.32Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 104.969V106.057C206.833 106.2 206.746 106.369 206.636 106.441L206.413 106.584C206.303 106.655 206.216 106.599 206.216 106.456V105.368C206.216 105.225 206.303 105.056 206.413 104.984L206.636 104.841C206.746 104.77 206.833 104.826 206.833 104.969Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 105.613V106.701C205.833 106.844 205.746 107.013 205.637 107.084L205.413 107.227C205.303 107.299 205.217 107.243 205.217 107.1V106.011C205.217 105.868 205.303 105.7 205.413 105.628L205.637 105.485C205.746 105.413 205.833 105.47 205.833 105.613Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 106.257V107.345C204.833 107.488 204.747 107.657 204.637 107.728L204.413 107.871C204.304 107.943 204.217 107.886 204.217 107.743V106.655C204.217 106.512 204.304 106.343 204.413 106.272L204.637 106.129C204.747 106.057 204.833 106.113 204.833 106.257Z" fill="#FFF1B8"/>
|
||||
<path d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#874D00"/>
|
||||
<path d="M200.871 106.767C200.396 107.074 200.012 107.82 200.012 108.433C200.012 109.046 200.396 109.297 200.871 108.99C201.345 108.683 201.729 107.937 201.729 107.324C201.734 106.706 201.345 106.461 200.871 106.767Z" fill="#D48806"/>
|
||||
<path d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#874D00"/>
|
||||
<path d="M197.147 109.174C196.672 109.481 196.289 110.227 196.289 110.84C196.289 111.453 196.672 111.703 197.147 111.397C197.622 111.09 198.005 110.344 198.005 109.731C198.005 109.118 197.617 108.868 197.147 109.174Z" fill="#D48806"/>
|
||||
<path d="M222.675 74.4907L193.006 93.6616L163.332 74.4907L193.006 55.3147L222.675 74.4907Z" fill="#FFF1B8"/>
|
||||
<path d="M222.675 84.076L193.006 103.247V93.6615L222.675 74.4906V84.076Z" fill="#D48806"/>
|
||||
<path d="M193.005 103.247L163.332 84.076V74.4906L193.005 93.6615V103.247Z" fill="#D48806"/>
|
||||
<path d="M218.962 88.8688V86.4725L193.005 103.247V105.643L218.962 88.8688Z" fill="#D48806"/>
|
||||
<path d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#874D00"/>
|
||||
<path d="M220.82 78.3381V79.4265C220.82 79.5695 220.734 79.7381 220.624 79.8097L220.4 79.9527C220.291 80.0243 220.204 79.9681 220.204 79.825V78.7367C220.204 78.5936 220.291 78.425 220.4 78.3535L220.619 78.2104C220.729 78.144 220.82 78.2002 220.82 78.3381Z" fill="#D48806"/>
|
||||
<path d="M219.82 78.9869V80.0752C219.82 80.2183 219.734 80.3869 219.624 80.4584L219.4 80.6015C219.291 80.673 219.204 80.6168 219.204 80.4738V79.3854C219.204 79.2424 219.291 79.0738 219.4 79.0022L219.624 78.8592C219.729 78.7876 219.82 78.8438 219.82 78.9869Z" fill="#D48806"/>
|
||||
<path d="M218.82 79.6308V80.7191C218.82 80.8622 218.733 81.0308 218.624 81.1023L218.4 81.2403C218.29 81.3118 218.204 81.2556 218.204 81.1125V80.0242C218.204 79.8811 218.29 79.7125 218.4 79.641L218.624 79.503C218.733 79.4315 218.82 79.4877 218.82 79.6308Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 80.2746V81.363C217.82 81.506 217.734 81.6746 217.624 81.7462L217.4 81.8892C217.291 81.9608 217.204 81.9046 217.204 81.7615V80.6732C217.204 80.5301 217.291 80.3615 217.4 80.29L217.624 80.1469C217.734 80.0754 217.82 80.1316 217.82 80.2746Z" fill="#D48806"/>
|
||||
<path d="M216.822 80.9185V82.0068C216.822 82.1499 216.735 82.3185 216.625 82.39L216.402 82.5331C216.292 82.6046 216.205 82.5484 216.205 82.4054V81.317C216.205 81.174 216.292 81.0054 216.402 80.9338L216.625 80.7908C216.735 80.7192 216.822 80.7754 216.822 80.9185Z" fill="#D48806"/>
|
||||
<path d="M215.822 81.5623V82.6507C215.822 82.7937 215.735 82.9623 215.625 83.0339L215.402 83.1769C215.292 83.2485 215.205 83.1923 215.205 83.0492V81.9609C215.205 81.8178 215.292 81.6492 215.402 81.5777L215.625 81.4346C215.735 81.3631 215.822 81.4244 215.822 81.5623Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 82.206V83.2943C214.826 83.4374 214.739 83.606 214.629 83.6775L214.406 83.8206C214.296 83.8921 214.209 83.8359 214.209 83.6929V82.6045C214.209 82.4615 214.296 82.2929 214.406 82.2213L214.629 82.0783C214.734 82.0118 214.826 82.068 214.826 82.206Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 82.855V83.9434C213.826 84.0864 213.739 84.255 213.629 84.3266L213.406 84.4696C213.296 84.5412 213.209 84.485 213.209 84.3419V83.2536C213.209 83.1105 213.296 82.9419 213.406 82.8704L213.629 82.7273C213.734 82.6558 213.826 82.712 213.826 82.855Z" fill="#D48806"/>
|
||||
<path d="M212.827 83.4986V84.5869C212.827 84.73 212.74 84.8986 212.63 84.9702L212.407 85.1132C212.297 85.1848 212.21 85.1286 212.21 84.9855V83.8972C212.21 83.7541 212.297 83.5855 212.407 83.5139L212.63 83.3709C212.74 83.2993 212.827 83.3556 212.827 83.4986Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 84.1425V85.2308C211.827 85.3739 211.74 85.5425 211.63 85.614L211.407 85.7571C211.297 85.8286 211.21 85.7724 211.21 85.6294V84.541C211.21 84.398 211.297 84.2294 211.407 84.1578L211.63 84.0148C211.74 83.9432 211.827 83.9994 211.827 84.1425Z" fill="#D48806"/>
|
||||
<path d="M210.827 84.7864V85.8747C210.827 86.0178 210.74 86.1864 210.631 86.2579L210.407 86.401C210.298 86.4725 210.211 86.4163 210.211 86.2732V85.1849C210.211 85.0418 210.298 84.8732 210.407 84.8017L210.631 84.6586C210.74 84.5871 210.827 84.6433 210.827 84.7864Z" fill="#D48806"/>
|
||||
<path d="M209.828 85.4302V86.5185C209.828 86.6616 209.741 86.8302 209.631 86.9017L209.408 87.0448C209.298 87.1163 209.211 87.0601 209.211 86.917V85.8287C209.211 85.6857 209.298 85.517 209.408 85.4455L209.631 85.3024C209.741 85.2309 209.828 85.2922 209.828 85.4302Z" fill="#D48806"/>
|
||||
<path d="M208.832 86.0741V87.1624C208.832 87.3054 208.745 87.4741 208.636 87.5456L208.412 87.6887C208.302 87.7602 208.216 87.704 208.216 87.5609V86.4726C208.216 86.3295 208.302 86.1609 208.412 86.0894L208.636 85.9463C208.741 85.8748 208.832 85.9361 208.832 86.0741Z" fill="#D48806"/>
|
||||
<path d="M207.833 86.7177V87.806C207.833 87.9491 207.746 88.1177 207.636 88.1893L207.413 88.3323C207.303 88.4039 207.216 88.3476 207.216 88.2046V87.1163C207.216 86.9732 207.303 86.8046 207.413 86.733L207.636 86.59C207.741 86.5236 207.833 86.5798 207.833 86.7177Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 87.3668V88.4551C206.833 88.5982 206.746 88.7668 206.636 88.8383L206.413 88.9814C206.303 89.0529 206.216 88.9967 206.216 88.8536V87.7653C206.216 87.6222 206.303 87.4536 206.413 87.3821L206.636 87.239C206.746 87.1675 206.833 87.2237 206.833 87.3668Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 88.0103V89.0987C205.833 89.2417 205.746 89.4103 205.637 89.4819L205.413 89.6249C205.303 89.6965 205.217 89.6403 205.217 89.4972V88.4089C205.217 88.2658 205.303 88.0972 205.413 88.0257L205.637 87.8826C205.746 87.8111 205.833 87.8673 205.833 88.0103Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 88.6542V89.7425C204.833 89.8856 204.747 90.0542 204.637 90.1257L204.413 90.2688C204.304 90.3403 204.217 90.2841 204.217 90.1411V89.0527C204.217 88.9097 204.304 88.7411 204.413 88.6695L204.637 88.5265C204.747 88.4549 204.833 88.5111 204.833 88.6542Z" fill="#D48806"/>
|
||||
<path d="M220.82 81.5623V82.6507C220.82 82.7937 220.734 82.9623 220.624 83.0339L220.4 83.1769C220.291 83.2485 220.204 83.1923 220.204 83.0492V81.9609C220.204 81.8178 220.291 81.6492 220.4 81.5777L220.619 81.4346C220.729 81.3631 220.82 81.4244 220.82 81.5623Z" fill="#D48806"/>
|
||||
<path d="M219.82 82.206V83.2943C219.82 83.4374 219.734 83.606 219.624 83.6775L219.4 83.8206C219.291 83.8921 219.204 83.8359 219.204 83.6929V82.6045C219.204 82.4615 219.291 82.2929 219.4 82.2213L219.624 82.0783C219.729 82.0118 219.82 82.068 219.82 82.206Z" fill="#D48806"/>
|
||||
<path d="M218.82 82.855V83.9434C218.82 84.0864 218.733 84.255 218.624 84.3266L218.4 84.4696C218.29 84.5412 218.204 84.485 218.204 84.3419V83.2536C218.204 83.1105 218.29 82.9419 218.4 82.8704L218.624 82.7273C218.733 82.6558 218.82 82.712 218.82 82.855Z" fill="#D48806"/>
|
||||
<path d="M217.82 83.4989V84.5872C217.82 84.7303 217.734 84.8989 217.624 84.9704L217.4 85.1135C217.291 85.185 217.204 85.1288 217.204 84.9858V83.8974C217.204 83.7544 217.291 83.5858 217.4 83.5142L217.624 83.3712C217.734 83.2996 217.82 83.3558 217.82 83.4989Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 84.1428V85.2311C216.822 85.3742 216.735 85.5428 216.625 85.6143L216.402 85.7574C216.292 85.8289 216.205 85.7727 216.205 85.6296V84.5413C216.205 84.3983 216.292 84.2296 216.402 84.1581L216.625 84.015C216.735 83.9435 216.822 83.9997 216.822 84.1428Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 84.7864V85.8747C215.822 86.0178 215.735 86.1864 215.625 86.2579L215.402 86.401C215.292 86.4725 215.205 86.4163 215.205 86.2732V85.1849C215.205 85.0418 215.292 84.8732 215.402 84.8017L215.625 84.6586C215.735 84.5871 215.822 84.6433 215.822 84.7864Z" fill="#D48806"/>
|
||||
<path d="M214.826 85.4302V86.5185C214.826 86.6616 214.739 86.8302 214.629 86.9017L214.406 87.0448C214.296 87.1163 214.209 87.0601 214.209 86.9171V85.8287C214.209 85.6857 214.296 85.517 214.406 85.4455L214.629 85.3024C214.734 85.2309 214.826 85.2922 214.826 85.4302Z" fill="#D48806"/>
|
||||
<path d="M213.826 86.0741V87.1624C213.826 87.3054 213.739 87.4741 213.629 87.5456L213.406 87.6887C213.296 87.7602 213.209 87.704 213.209 87.5609V86.4726C213.209 86.3295 213.296 86.1609 213.406 86.0894L213.629 85.9463C213.734 85.8748 213.826 85.9361 213.826 86.0741Z" fill="#D48806"/>
|
||||
<path d="M212.827 86.7177V87.806C212.827 87.9491 212.74 88.1177 212.63 88.1893L212.407 88.3323C212.297 88.4039 212.21 88.3476 212.21 88.2046V87.1163C212.21 86.9732 212.297 86.8046 212.407 86.733L212.63 86.59C212.74 86.5236 212.827 86.5798 212.827 86.7177Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 87.3668V88.4551C211.827 88.5982 211.74 88.7668 211.63 88.8383L211.407 88.9814C211.297 89.0529 211.21 88.9967 211.21 88.8536V87.7653C211.21 87.6222 211.297 87.4536 211.407 87.3821L211.63 87.239C211.74 87.1675 211.827 87.2237 211.827 87.3668Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 88.0106V89.099C210.827 89.242 210.74 89.4106 210.631 89.4822L210.407 89.6252C210.298 89.6968 210.211 89.6406 210.211 89.4975V88.4092C210.211 88.2661 210.298 88.0975 210.407 88.026L210.631 87.8829C210.74 87.8114 210.827 87.8676 210.827 88.0106Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 88.6545V89.7428C209.828 89.8859 209.741 90.0545 209.631 90.126L209.408 90.2691C209.298 90.3406 209.211 90.2844 209.211 90.1414V89.053C209.211 88.91 209.298 88.7414 209.408 88.6698L209.631 88.5268C209.741 88.4552 209.828 88.5114 209.828 88.6545Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 89.2981V90.3864C208.832 90.5295 208.745 90.6981 208.636 90.7696L208.412 90.9127C208.302 90.9842 208.216 90.928 208.216 90.7849V89.6966C208.216 89.5536 208.302 89.3849 208.412 89.3134L208.636 89.1703C208.741 89.0988 208.832 89.155 208.832 89.2981Z" fill="#D48806"/>
|
||||
<path d="M207.833 89.9419V91.0302C207.833 91.1733 207.746 91.3419 207.636 91.4134L207.413 91.5565C207.303 91.628 207.216 91.5718 207.216 91.4288V90.3404C207.216 90.1974 207.303 90.0288 207.413 89.9572L207.636 89.8142C207.741 89.7426 207.833 89.8039 207.833 89.9419Z" fill="#D48806"/>
|
||||
<path d="M206.833 90.5859V91.6742C206.833 91.8172 206.746 91.9859 206.636 92.0574L206.413 92.2005C206.303 92.272 206.216 92.2158 206.216 92.0727V90.9844C206.216 90.8413 206.303 90.6727 206.413 90.6012L206.636 90.4581C206.746 90.3917 206.833 90.4479 206.833 90.5859Z" fill="#D48806"/>
|
||||
<path d="M205.833 91.2346V92.3229C205.833 92.466 205.746 92.6346 205.637 92.7062L205.413 92.8492C205.303 92.9207 205.217 92.8645 205.217 92.7215V91.6331C205.217 91.4901 205.303 91.3215 205.413 91.2499L205.637 91.1069C205.746 91.0353 205.833 91.0915 205.833 91.2346Z" fill="#D48806"/>
|
||||
<path d="M204.833 91.8782V92.9665C204.833 93.1096 204.747 93.2782 204.637 93.3497L204.413 93.4928C204.304 93.5643 204.217 93.5081 204.217 93.3651V92.2767C204.217 92.1337 204.304 91.9651 204.413 91.8935L204.637 91.7505C204.747 91.6789 204.833 91.7351 204.833 91.8782Z" fill="#D48806"/>
|
||||
<path d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#874D00"/>
|
||||
<path d="M200.871 92.3843C200.396 92.6909 200.012 93.4369 200.012 94.05C200.012 94.6632 200.396 94.9135 200.871 94.607C201.345 94.3004 201.729 93.5544 201.729 92.9413C201.734 92.3281 201.345 92.0778 200.871 92.3843Z" fill="#D48806"/>
|
||||
<path d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#874D00"/>
|
||||
<path d="M197.147 94.7959C196.672 95.1024 196.289 95.8484 196.289 96.4616C196.289 97.0747 196.672 97.3251 197.147 97.0185C197.622 96.7119 198.005 95.9659 198.005 95.3528C198.005 94.7346 197.617 94.4893 197.147 94.7959Z" fill="#D48806"/>
|
||||
<path d="M164.519 59.3465L191.832 41.7033C192.485 41.2844 193.553 41.2844 194.206 41.7033L221.488 59.3465C222.141 59.7655 222.675 60.8027 222.675 61.6458V69.6983L192.987 88.8692L163.332 69.6983V61.6458C163.332 60.8027 163.866 59.7655 164.519 59.3465Z" fill="#D48806"/>
|
||||
<path d="M192.987 78.834V88.8691L222.675 69.6982V61.6456C222.675 60.8996 222.255 59.9952 221.702 59.5149C222.136 59.939 222.063 60.5062 221.488 60.8792L194.17 78.5172C193.846 78.7267 193.416 78.834 192.987 78.834Z" fill="#D48806"/>
|
||||
<path d="M221.488 60.8791L194.17 78.5171C193.517 78.9412 192.453 78.9412 191.796 78.5171L164.514 60.8791C163.861 60.455 163.861 59.7703 164.514 59.3462L191.832 41.7031C192.485 41.279 193.549 41.279 194.206 41.7031L221.488 59.3462C222.145 59.7652 222.145 60.455 221.488 60.8791Z" fill="#FFF1B8"/>
|
||||
<path d="M218.962 74.4908V72.0944L193.005 88.8689V91.2653L218.962 74.4908Z" fill="#D48806"/>
|
||||
<path d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#874D00"/>
|
||||
<path d="M220.82 63.9603V65.0486C220.82 65.1917 220.734 65.3603 220.624 65.4318L220.4 65.5749C220.291 65.6464 220.204 65.5902 220.204 65.4472V64.3588C220.204 64.2158 220.291 64.0471 220.4 63.9756L220.619 63.8325C220.729 63.761 220.82 63.8223 220.82 63.9603Z" fill="#FFF1B8"/>
|
||||
<path d="M219.82 64.604V65.6923C219.82 65.8353 219.734 66.004 219.624 66.0755L219.4 66.2186C219.291 66.2901 219.204 66.2339 219.204 66.0908V65.0025C219.204 64.8594 219.291 64.6908 219.4 64.6193L219.624 64.4762C219.729 64.4098 219.82 64.466 219.82 64.604Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 65.2528V66.3411C218.82 66.4842 218.733 66.6528 218.624 66.7244L218.4 66.8674C218.29 66.9338 218.204 66.8776 218.204 66.7346V65.6462C218.204 65.5032 218.29 65.3346 218.4 65.263L218.624 65.12C218.733 65.0535 218.82 65.1097 218.82 65.2528Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 65.8969V66.9852C217.82 67.1283 217.734 67.2969 217.624 67.3684L217.4 67.5115C217.291 67.583 217.204 67.5268 217.204 67.3837V66.2954C217.204 66.1523 217.291 65.9837 217.4 65.9122L217.624 65.7691C217.734 65.6976 217.82 65.7538 217.82 65.8969Z" fill="#D48806"/>
|
||||
<path d="M216.822 66.5407V67.6291C216.822 67.7721 216.735 67.9407 216.625 68.0123L216.402 68.1553C216.292 68.2269 216.205 68.1707 216.205 68.0276V66.9393C216.205 66.7962 216.292 66.6276 216.402 66.5561L216.625 66.413C216.735 66.3415 216.822 66.3977 216.822 66.5407Z" fill="#D48806"/>
|
||||
<path d="M215.822 67.1843V68.2726C215.822 68.4157 215.735 68.5843 215.625 68.6559L215.402 68.7989C215.292 68.8705 215.205 68.8143 215.205 68.6712V67.5829C215.205 67.4398 215.292 67.2712 215.402 67.1997L215.625 67.0566C215.735 66.9851 215.822 67.0413 215.822 67.1843Z" fill="#FFF1B8"/>
|
||||
<path d="M214.826 67.8282V68.9165C214.826 69.0596 214.739 69.2282 214.629 69.2997L214.406 69.4428C214.296 69.5143 214.209 69.4581 214.209 69.3151V68.2267C214.209 68.0837 214.296 67.9151 214.406 67.8435L214.629 67.7005C214.734 67.6289 214.826 67.6851 214.826 67.8282Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 68.472V69.5603C213.826 69.7034 213.739 69.872 213.629 69.9436L213.406 70.0866C213.296 70.1582 213.209 70.1019 213.209 69.9589V68.8706C213.209 68.7275 213.296 68.5589 213.406 68.4873L213.629 68.3443C213.734 68.2727 213.826 68.3341 213.826 68.472Z" fill="#FFF1B8"/>
|
||||
<path d="M212.827 69.1157V70.204C212.827 70.3471 212.74 70.5157 212.63 70.5872L212.407 70.7303C212.297 70.8018 212.21 70.7456 212.21 70.6025V69.5142C212.21 69.3712 212.297 69.2025 212.407 69.131L212.63 68.9879C212.74 68.9215 212.827 68.9777 212.827 69.1157Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 69.7647V70.853C211.827 70.9961 211.74 71.1647 211.63 71.2363L211.407 71.3793C211.297 71.4509 211.21 71.3947 211.21 71.2516V70.1633C211.21 70.0202 211.297 69.8516 211.407 69.78L211.63 69.637C211.74 69.5654 211.827 69.6217 211.827 69.7647Z" fill="#FFF1B8"/>
|
||||
<path d="M210.827 70.4086V71.4969C210.827 71.64 210.74 71.8086 210.631 71.8801L210.407 72.0232C210.298 72.0947 210.211 72.0385 210.211 71.8955V70.8071C210.211 70.6641 210.298 70.4955 210.407 70.4239L210.631 70.2809C210.74 70.2093 210.827 70.2655 210.827 70.4086Z" fill="#D48806"/>
|
||||
<path d="M209.828 71.0525V72.1408C209.828 72.2839 209.741 72.4525 209.631 72.524L209.408 72.6671C209.298 72.7386 209.211 72.6824 209.211 72.5393V71.451C209.211 71.3079 209.298 71.1393 209.408 71.0678L209.631 70.9247C209.741 70.8532 209.828 70.9094 209.828 71.0525Z" fill="#D48806"/>
|
||||
<path d="M208.832 71.696V72.7844C208.832 72.9274 208.745 73.0961 208.636 73.1676L208.412 73.3107C208.302 73.3822 208.216 73.326 208.216 73.1829V72.0946C208.216 71.9515 208.302 71.7829 208.412 71.7114L208.636 71.5683C208.741 71.4968 208.832 71.553 208.832 71.696Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 72.3399V73.4282C207.833 73.5713 207.746 73.7399 207.636 73.8114L207.413 73.9545C207.303 74.026 207.216 73.9698 207.216 73.8267V72.7384C207.216 72.5953 207.303 72.4267 207.413 72.3552L207.636 72.2121C207.741 72.1406 207.833 72.2019 207.833 72.3399Z" fill="#D48806"/>
|
||||
<path d="M206.833 72.9838V74.0721C206.833 74.2152 206.746 74.3838 206.636 74.4554L206.413 74.5984C206.303 74.67 206.216 74.6138 206.216 74.4707V73.3824C206.216 73.2393 206.303 73.0707 206.413 72.9991L206.636 72.8561C206.746 72.7897 206.833 72.8459 206.833 72.9838Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 73.6274V74.7157C205.833 74.8588 205.746 75.0274 205.637 75.0989L205.413 75.242C205.303 75.3135 205.217 75.2573 205.217 75.1143V74.0259C205.217 73.8829 205.303 73.7143 205.413 73.6427L205.637 73.4997C205.746 73.4332 205.833 73.4894 205.833 73.6274Z" fill="#FFF1B8"/>
|
||||
<path d="M204.833 74.2763V75.3646C204.833 75.5077 204.747 75.6763 204.637 75.7478L204.413 75.8858C204.304 75.9573 204.217 75.9011 204.217 75.758V74.6697C204.217 74.5266 204.304 74.358 204.413 74.2865L204.637 74.1434C204.747 74.077 204.833 74.1332 204.833 74.2763Z" fill="#FFF1B8"/>
|
||||
<path d="M220.82 67.1844V68.2727C220.82 68.4158 220.734 68.5844 220.624 68.6559L220.4 68.799C220.291 68.8705 220.204 68.8143 220.204 68.6712V67.5829C220.204 67.4398 220.291 67.2712 220.4 67.1997L220.619 67.0566C220.729 66.9851 220.82 67.0413 220.82 67.1844Z" fill="#D48806"/>
|
||||
<path d="M219.82 67.8279V68.9163C219.82 69.0593 219.734 69.228 219.624 69.2995L219.4 69.4425C219.291 69.5141 219.204 69.4579 219.204 69.3148V68.2265C219.204 68.0834 219.291 67.9148 219.4 67.8433L219.624 67.7002C219.729 67.6287 219.82 67.6849 219.82 67.8279Z" fill="#FFF1B8"/>
|
||||
<path d="M218.82 68.4721V69.5604C218.82 69.7034 218.733 69.8721 218.624 69.9436L218.4 70.0867C218.29 70.1582 218.204 70.102 218.204 69.9589V68.8706C218.204 68.7275 218.29 68.5589 218.4 68.4874L218.624 68.3443C218.733 68.2728 218.82 68.3341 218.82 68.4721Z" fill="#FFF1B8"/>
|
||||
<path d="M217.82 69.1157V70.204C217.82 70.3471 217.734 70.5157 217.624 70.5873L217.4 70.7303C217.291 70.8019 217.204 70.7457 217.204 70.6026V69.5143C217.204 69.3712 217.291 69.2026 217.4 69.1311L217.624 68.988C217.734 68.9216 217.82 68.9778 217.82 69.1157Z" fill="#FFF1B8"/>
|
||||
<path d="M216.822 69.7645V70.8528C216.822 70.9959 216.735 71.1645 216.625 71.236L216.402 71.3791C216.292 71.4506 216.205 71.3944 216.205 71.2513V70.163C216.205 70.02 216.292 69.8513 216.402 69.7798L216.625 69.6367C216.735 69.5652 216.822 69.6214 216.822 69.7645Z" fill="#FFF1B8"/>
|
||||
<path d="M215.822 70.4086V71.497C215.822 71.64 215.735 71.8086 215.625 71.8802L215.402 72.0232C215.292 72.0948 215.205 72.0386 215.205 71.8955V70.8072C215.205 70.6641 215.292 70.4955 215.402 70.424L215.625 70.2809C215.735 70.2094 215.822 70.2656 215.822 70.4086Z" fill="#D48806"/>
|
||||
<path d="M214.826 71.0522V72.1405C214.826 72.2836 214.739 72.4522 214.629 72.5238L214.406 72.6668C214.296 72.7384 214.209 72.6822 214.209 72.5391V71.4508C214.209 71.3077 214.296 71.1391 214.406 71.0675L214.629 70.9245C214.734 70.8529 214.826 70.9092 214.826 71.0522Z" fill="#FFF1B8"/>
|
||||
<path d="M213.826 71.6961V72.7844C213.826 72.9275 213.739 73.0961 213.629 73.1676L213.406 73.3107C213.296 73.3822 213.209 73.326 213.209 73.183V72.0946C213.209 71.9516 213.296 71.7829 213.406 71.7114L213.629 71.5683C213.734 71.4968 213.826 71.553 213.826 71.6961Z" fill="#D48806"/>
|
||||
<path d="M212.827 72.3399V73.4282C212.827 73.5713 212.74 73.7399 212.63 73.8114L212.407 73.9545C212.297 74.026 212.21 73.9698 212.21 73.8268V72.7384C212.21 72.5954 212.297 72.4268 212.407 72.3552L212.63 72.2122C212.74 72.1406 212.827 72.202 212.827 72.3399Z" fill="#FFF1B8"/>
|
||||
<path d="M211.827 72.9836V74.0719C211.827 74.215 211.74 74.3836 211.63 74.4551L211.407 74.5982C211.297 74.6697 211.21 74.6135 211.21 74.4704V73.3821C211.21 73.239 211.297 73.0704 211.407 72.9989L211.63 72.8558C211.74 72.7894 211.827 72.8456 211.827 72.9836Z" fill="#D48806"/>
|
||||
<path d="M210.827 73.6274V74.7158C210.827 74.8588 210.74 75.0274 210.631 75.099L210.407 75.242C210.298 75.3136 210.211 75.2574 210.211 75.1143V74.026C210.211 73.8829 210.298 73.7143 210.407 73.6428L210.631 73.4997C210.74 73.4333 210.827 73.4895 210.827 73.6274Z" fill="#FFF1B8"/>
|
||||
<path d="M209.828 74.2762V75.3645C209.828 75.5076 209.741 75.6762 209.631 75.7477L209.408 75.8908C209.298 75.9623 209.211 75.9061 209.211 75.7631V74.6747C209.211 74.5317 209.298 74.3631 209.408 74.2915L209.631 74.1485C209.741 74.0769 209.828 74.1331 209.828 74.2762Z" fill="#FFF1B8"/>
|
||||
<path d="M208.832 74.9204V76.0087C208.832 76.1518 208.745 76.3204 208.636 76.3919L208.412 76.535C208.302 76.6065 208.216 76.5503 208.216 76.4072V75.3189C208.216 75.1758 208.302 75.0072 208.412 74.9357L208.636 74.7926C208.741 74.7211 208.832 74.7773 208.832 74.9204Z" fill="#FFF1B8"/>
|
||||
<path d="M207.833 75.5639V76.6523C207.833 76.7953 207.746 76.9639 207.636 77.0355L207.413 77.1785C207.303 77.2501 207.216 77.1939 207.216 77.0508V75.9625C207.216 75.8194 207.303 75.6508 207.413 75.5793L207.636 75.4362C207.741 75.3647 207.833 75.4209 207.833 75.5639Z" fill="#FFF1B8"/>
|
||||
<path d="M206.833 76.2078V77.2961C206.833 77.4392 206.746 77.6078 206.636 77.6793L206.413 77.8224C206.303 77.8939 206.216 77.8377 206.216 77.6947V76.6064C206.216 76.4633 206.303 76.2947 206.413 76.2231L206.636 76.0801C206.746 76.0085 206.833 76.0647 206.833 76.2078Z" fill="#FFF1B8"/>
|
||||
<path d="M205.833 76.8516V77.94C205.833 78.083 205.746 78.2516 205.637 78.3232L205.413 78.4662C205.303 78.5378 205.217 78.4816 205.217 78.3385V77.2502C205.217 77.1071 205.303 76.9385 205.413 76.867L205.637 76.7239C205.746 76.6524 205.833 76.7137 205.833 76.8516Z" fill="#D48806"/>
|
||||
<path d="M204.833 77.4953V78.5836C204.833 78.7267 204.747 78.8953 204.637 78.9668L204.413 79.1099C204.304 79.1814 204.217 79.1252 204.217 78.9822V77.8938C204.217 77.7508 204.304 77.5821 204.413 77.5106L204.637 77.3676C204.747 77.3011 204.833 77.3573 204.833 77.4953Z" fill="#FFF1B8"/>
|
||||
<path d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#874D00"/>
|
||||
<path d="M200.871 78.0063C200.396 78.3128 200.012 79.0588 200.012 79.672C200.012 80.2851 200.396 80.5355 200.871 80.2289C201.345 79.9223 201.729 79.1763 201.729 78.5632C201.734 77.9501 201.345 77.6997 200.871 78.0063Z" fill="#D48806"/>
|
||||
<path d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#D48806"/>
|
||||
<path opacity="0.2" d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#874D00"/>
|
||||
<path d="M197.147 80.4175C196.672 80.7241 196.289 81.4701 196.289 82.0832C196.289 82.6964 196.672 82.9467 197.147 82.6402C197.622 82.3336 198.005 81.5876 198.005 80.9745C198.005 80.3562 197.617 80.111 197.147 80.4175Z" fill="#D48806"/>
|
||||
<path d="M68.8062 138.833L71.3996 138.278L70.394 140.13L68.8062 138.833Z" fill="#263238"/>
|
||||
<path d="M72.0347 139.574L73.7284 138.833V140.13L72.0347 139.574Z" fill="#263238"/>
|
||||
<path d="M77.3275 141.427L76.216 139.574L75.4221 141.427H77.3275Z" fill="#263238"/>
|
||||
<path d="M82.5077 136.858L79.7672 137.25L80.9415 135.684L82.5077 136.858Z" fill="#263238"/>
|
||||
<path d="M80.5508 134.901L78.9852 135.293L79.6476 134.31L80.5508 134.901Z" fill="#263238"/>
|
||||
<path d="M76.2453 133.727L77.0281 134.901L78.5937 133.727L76.2453 133.727Z" fill="#263238"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2661_68499" x1="171.681" y1="169.272" x2="101.213" y2="169.272" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_2661_68499" x1="171.681" y1="180.656" x2="136.447" y2="180.656" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_2661_68499" x1="136.447" y1="157.888" x2="101.213" y2="157.888" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_2661_68499" x1="151.338" y1="170.838" x2="121.545" y2="170.838" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_2661_68499" x1="117.578" y1="180.496" x2="121.201" y2="180.538" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#ECDCBC"/>
|
||||
<stop offset="0.475" stopColor="#F0DBB2"/>
|
||||
<stop offset="1" stopColor="#F9EBCF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_2661_68499" x1="120.272" y1="185.13" x2="116.282" y2="185.13" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_2661_68499" x1="54.1281" y1="15.6905" x2="43.7397" y2="15.6905" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#CAA266"/>
|
||||
<stop offset="1" stopColor="#E9C57E"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
)
|
@ -1,576 +0,0 @@
|
||||
import React, {useCallback, useEffect, useMemo, useState} from "react";
|
||||
import Icon from "@ant-design/icons";
|
||||
import {useDebounceFn, useSetState} from "ahooks";
|
||||
import {Flex, Space} from "antd";
|
||||
import clsx from "clsx"
|
||||
|
||||
import {ProofreadStateEnum,} from "@/service/types/document.ts";
|
||||
import {showToast} from "@/components/messages/Modal.tsx";
|
||||
|
||||
import './editor.less'
|
||||
|
||||
import {IconCheckOutline, IconMinus, IconRollback, IconRollbackCircle, IconRollbackOld} from "./icons.tsx";
|
||||
import {ActionKey, ProofreadItem} from "./proofread-item.tsx";
|
||||
|
||||
import {IconLogo} from "./images/logo.tsx";
|
||||
import {parseV3ProofreadResult} from "@/core/proofread-util.ts";
|
||||
import {V3Enums} from "@/types/v3/enums.ts";
|
||||
import {stringIsEmpty} from "@/core/string-utils.ts";
|
||||
import {useBridge} from "@/core/bridge.ts";
|
||||
import {CACHE_DATA} from "@/core/cache.ts";
|
||||
import {process} from "@/service/api/v3/document.ts";
|
||||
import {VirtualListItem} from "@/pages/proofread/components/virtual-list-item.tsx";
|
||||
|
||||
type ProofreadPanelProps = {
|
||||
children?: React.ReactNode;
|
||||
sentences: V3.ProofreadSentence[];
|
||||
proofreadLoading?: boolean
|
||||
onUpdateProofreadItem: (item: V3.ProofreadCorrect, action?: 'process' | 'redo') => void;
|
||||
onSelectProofreadItem: (item: V3.ProofreadCorrect | null) => void;
|
||||
activeProofreadItemId?: number;
|
||||
disabledProofreadItemList: number[];
|
||||
onStartProofread: () => Promise<void> | void;
|
||||
selectedProofreadItemId?: number;
|
||||
selectedAcceptStatus?: 1 | 2 | 3;
|
||||
userinfo?: Account;
|
||||
histories: V3.ProcessAction[];
|
||||
setHistories: (values: V3.ProcessAction[]) => void;
|
||||
onStateChange?: (state: { activeItemId: number; acceptState: AcceptStatus; }) => void;
|
||||
}
|
||||
|
||||
enum AcceptStatus {
|
||||
NotAdopted = 1,
|
||||
Adopted = 2,
|
||||
Default = 3
|
||||
}
|
||||
|
||||
|
||||
const GovCheckKeys = [
|
||||
V3Enums.ProofreadType.leader.key,
|
||||
V3Enums.ProofreadType.position.key,
|
||||
V3Enums.ProofreadType.quotation.key,
|
||||
V3Enums.ProofreadType.fallen_officers.key,
|
||||
]
|
||||
/**
|
||||
* 是否需要复核
|
||||
* @param item
|
||||
*/
|
||||
function itemNeedReview(item:V3.ProofreadCorrect){
|
||||
if(
|
||||
item.tag.trim().length == 0 // not delete insert replace
|
||||
&& (
|
||||
item.type == V3Enums.ProofreadType.sensitive.key
|
||||
|| item.type == V3Enums.ProofreadType.blacklist.key
|
||||
|| GovCheckKeys.includes(item.type)
|
||||
|
||||
)
|
||||
) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
const ProofreadPanel: React.FC<ProofreadPanelProps> = (props) => {
|
||||
const {userinfo, histories, setHistories} = props
|
||||
const [state, setState] = useSetState<{
|
||||
// 当前选中分类
|
||||
currentType: string | null;
|
||||
// 默认是否展开panel
|
||||
open: boolean;
|
||||
adoptAll?: boolean;
|
||||
ignoreAll?: boolean;
|
||||
listMaxCount: number;
|
||||
activeIndex: number;
|
||||
activeItemId: number;
|
||||
acceptState: AcceptStatus;
|
||||
}>({
|
||||
currentType: null,
|
||||
open: true,
|
||||
|
||||
adoptAll: false,
|
||||
ignoreAll: false,
|
||||
|
||||
activeIndex: -1,
|
||||
activeItemId: -1,
|
||||
listMaxCount: -1,
|
||||
acceptState: AcceptStatus.NotAdopted
|
||||
})
|
||||
|
||||
|
||||
const [proofreadResult, setProofreadResult] = useState<V3.ParsedProofreadResult>()
|
||||
|
||||
useEffect(() => {
|
||||
handleTypeChange(null, false)
|
||||
const result = parseV3ProofreadResult(props.sentences, props.disabledProofreadItemList)
|
||||
setProofreadResult(result)
|
||||
}, [props.sentences, props.proofreadLoading, props.disabledProofreadItemList])
|
||||
|
||||
const getCurrentProofreadTypeListByAcceptStatus = (_state?: AcceptStatus, disableType = false) => {
|
||||
_state = _state || state.acceptState
|
||||
let list = proofreadResult?.list || [];
|
||||
if (_state == AcceptStatus.NotAdopted) {
|
||||
// 获取未复核的校对项
|
||||
list = list.filter(s => s.isAccept == ProofreadStateEnum.Default);
|
||||
} else if (_state == AcceptStatus.Adopted) {
|
||||
// 获取已复核的校对项
|
||||
list = list.filter(s => s.isAccept != ProofreadStateEnum.Default)
|
||||
}
|
||||
if (state.currentType && !disableType) {
|
||||
list = list.filter(s => {
|
||||
if(state.currentType == 'gov-check'){
|
||||
return GovCheckKeys.includes(s.type)
|
||||
}
|
||||
if(state.currentType == 'error'){
|
||||
return s.type != 'blacklist' && s.type != 'sensitive' && !GovCheckKeys.includes(s.type)
|
||||
}
|
||||
return s.type == state.currentType
|
||||
})
|
||||
}
|
||||
return list;
|
||||
}
|
||||
// 当前校对数据
|
||||
const currentProofreadCount = useMemo(() => {
|
||||
const all = ( proofreadResult?.list || []).length;
|
||||
// 全局获取待复核的校对项 避免过滤后的数据为空
|
||||
const not_adopted = ( proofreadResult?.list || []).filter(s => s.isAccept == ProofreadStateEnum.Default).length;
|
||||
const list = getCurrentProofreadTypeListByAcceptStatus(undefined, true) || [];
|
||||
const count: V3.ProofreadResultCount = {
|
||||
all,
|
||||
adopted: 0,
|
||||
not_adopted,
|
||||
error:0,
|
||||
total: not_adopted,
|
||||
sensitive: 0,
|
||||
blacklist: 0,
|
||||
govCheck: 0,
|
||||
};
|
||||
list.forEach(it => {
|
||||
//count.total ++;
|
||||
if (it.type === 'sensitive'){
|
||||
count.sensitive ++;
|
||||
}else if(it.type === 'blacklist'){
|
||||
count.blacklist++;
|
||||
}else if(GovCheckKeys.includes(it.type)){
|
||||
count.govCheck ++;
|
||||
}else{
|
||||
count.error ++;
|
||||
}
|
||||
})
|
||||
count.adopted = all - count.not_adopted;
|
||||
// if(state.acceptState == AcceptStatus.Adopted) {
|
||||
// }else{
|
||||
// count.not_adopted = count.total;
|
||||
// count.adopted = all - count.not_adopted;
|
||||
// }
|
||||
return count;
|
||||
}, [proofreadResult, state.acceptState, state.activeItemId, props.histories])
|
||||
|
||||
// 当前状态校对列表
|
||||
const currentProofreadList = useMemo(() => {
|
||||
const list = proofreadResult?.list || [];
|
||||
if (!state.currentType) return list;
|
||||
// Array.isArray(state.currentType?.id) ? state.currentType?.id.includes(s.type) :
|
||||
return list.filter(s => {
|
||||
if(state.currentType == 'error'){
|
||||
return s.type != 'blacklist' && s.type != 'sensitive'
|
||||
}
|
||||
return s.type == state.currentType
|
||||
})
|
||||
}, [proofreadResult, state.currentType])
|
||||
|
||||
// 撤销操作
|
||||
const redoAction = async () => {
|
||||
if (props.sentences.length == 0 || histories.length == 0) return;
|
||||
const last = histories[histories.length - 1];
|
||||
// 获取最后一个历史的同一批次记录
|
||||
const currentList = histories.filter(s => s.id == last.id);
|
||||
if (!currentList || currentList.length == 0) return;
|
||||
currentList.forEach(it => {
|
||||
// 状态调整为未处理
|
||||
const item = proofreadResult?.list?.find(s => s.id == it.correctId)
|
||||
if (item) {
|
||||
item.isAccept = ProofreadStateEnum.Default
|
||||
props.onUpdateProofreadItem(item, 'redo')
|
||||
}
|
||||
})
|
||||
setHistories(histories.filter(s => s.id != last.id));
|
||||
setProofreadResult({
|
||||
count: proofreadResult!.count,
|
||||
list: proofreadResult!.list
|
||||
})
|
||||
// 将状态调整为未复核
|
||||
if (state.acceptState == AcceptStatus.Adopted) {
|
||||
setState({acceptState: AcceptStatus.NotAdopted})
|
||||
}
|
||||
// 选中第一个
|
||||
const actId = currentList[0];
|
||||
// 找到要选中的item的index
|
||||
const item = currentProofreadList.find(s => s.id == actId.correctId)
|
||||
if (item) {
|
||||
centerItem(-1, item)
|
||||
// setState({activeIndex: index})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部/类似校对项
|
||||
* @param isAccept
|
||||
* @param p 如果不传入则获取该状态对应类型所有校对项
|
||||
*/
|
||||
const getSameProofreadItems = (isAccept?: boolean, p?: V3.ProofreadCorrect) => {
|
||||
const list = currentProofreadList.filter(s => {
|
||||
// if (isAccept && s.type == V3Enums.ProofreadType.sensitive.key) return false;
|
||||
return s.isAccept == ProofreadStateEnum.Default;
|
||||
})
|
||||
// 获取当前类型下所有
|
||||
return p ? list.filter(s => {
|
||||
return s.origin == p.origin && s.text == p.text;
|
||||
}) : (
|
||||
[...list]
|
||||
)
|
||||
}
|
||||
|
||||
const addToHistory = (items: V3.ProofreadCorrect[]) => {
|
||||
// 根据最后一个记录,生成新的批次id
|
||||
const last = histories.length == 0 ? null : histories[histories.length - 1]
|
||||
const id = last ? last.id + 1 : 1;
|
||||
|
||||
setHistories([
|
||||
...histories,
|
||||
...items.map(s => ({id, correctId: s.id}))
|
||||
])
|
||||
setProofreadResult(proofreadResult)
|
||||
}
|
||||
|
||||
// 批量处理
|
||||
const batchProcess = (status: ProofreadStateEnum, proofread?: V3.ProofreadCorrect) => {
|
||||
const isAccept = status == ProofreadStateEnum.Accept;
|
||||
const list = getSameProofreadItems(isAccept, proofread);
|
||||
if (list.length > 0) {
|
||||
const ids: number[] = [];
|
||||
// 设置 状态
|
||||
list.map(s => {
|
||||
ids.push(s.id)
|
||||
// 处理以下复核情况
|
||||
s.isAccept = isAccept && itemNeedReview(s) ? ProofreadStateEnum.Review :status;
|
||||
props.onUpdateProofreadItem(s, 'process');
|
||||
return s;
|
||||
})
|
||||
addToHistory(list)
|
||||
process(CACHE_DATA.DocumentID, {
|
||||
ids,
|
||||
action: status
|
||||
})
|
||||
// 采用随机数 避免默认值均为-1 导致选中项不更新
|
||||
const activeItemId = 0 - Math.ceil(Math.random() * 10)
|
||||
setTimeout(()=>{
|
||||
setState({activeItemId})
|
||||
},20)
|
||||
}
|
||||
}
|
||||
|
||||
// 处理全部
|
||||
const handleProcessAll = (action: ActionKey) => {
|
||||
return () => {
|
||||
if (props.sentences.length == 0) return;
|
||||
batchProcess(action == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 让当前选中的 item 居中
|
||||
const centerItem = (activeIndex: number, item: V3.ProofreadCorrect, showInCenter = true) => {
|
||||
if (item.id == state.activeItemId) return;
|
||||
setState((origin) => ({
|
||||
...origin,
|
||||
activeIndex,
|
||||
activeItemId: item.id
|
||||
}))
|
||||
if (showInCenter) {
|
||||
// 将提示显示在视图中间
|
||||
const div = document.querySelector(`div.proofread-item-${item.id}`)
|
||||
if (div) {
|
||||
div.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'center',
|
||||
inline: 'nearest' // 水平对齐方式
|
||||
})
|
||||
}
|
||||
}
|
||||
//
|
||||
props.onSelectProofreadItem(item);
|
||||
}
|
||||
useEffect(() => {
|
||||
if (props.selectedProofreadItemId) {
|
||||
const index = currentProofreadList.filter(s => (state.acceptState == AcceptStatus.Default
|
||||
|| (state.acceptState == AcceptStatus.Adopted && s.isAccept != ProofreadStateEnum.Default)
|
||||
|| (state.acceptState == AcceptStatus.NotAdopted && s.isAccept == ProofreadStateEnum.Default)
|
||||
)).findIndex(s => s.id == props.selectedProofreadItemId)
|
||||
if (index >= 0) {
|
||||
centerItem(index, currentProofreadList[index])
|
||||
}
|
||||
setState({activeItemId: props.selectedProofreadItemId})
|
||||
}
|
||||
}, [props.selectedProofreadItemId])
|
||||
useEffect(() => {
|
||||
if (props.selectedAcceptStatus) {
|
||||
setState({
|
||||
acceptState: props.selectedAcceptStatus
|
||||
})
|
||||
}
|
||||
}, [props.selectedAcceptStatus])
|
||||
// 处理校对项
|
||||
const handleItemAction = async (key: ActionKey, item: V3.ProofreadCorrect, index: number) => {
|
||||
try {
|
||||
if (key == 'click') {
|
||||
if (item) {
|
||||
setState({activeIndex: index, activeItemId: item.id})
|
||||
}
|
||||
centerItem(index, item, false)
|
||||
return;
|
||||
} else if (key == 'addToLexicon') {
|
||||
// 添加到词库
|
||||
showToast('添加词库成功', "success")
|
||||
} else {
|
||||
if (key == 'ignoreAll' || key == 'acceptAll') { // 同类型处理
|
||||
batchProcess(key == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore, item)
|
||||
} else {
|
||||
if (key == 'ignore') { // 忽略
|
||||
item.isAccept = ProofreadStateEnum.Ignore;
|
||||
} else if (key == 'accept') { // 采纳
|
||||
item.isAccept = ProofreadStateEnum.Accept;
|
||||
} else if (key == 'review') { // 复核
|
||||
item.isAccept = ProofreadStateEnum.Review;
|
||||
}
|
||||
props.onUpdateProofreadItem(item, 'process')
|
||||
|
||||
addToHistory([item])
|
||||
process(CACHE_DATA.DocumentID, {
|
||||
ids: [item.id],
|
||||
action: item.isAccept
|
||||
}).catch(console.log)
|
||||
// 自动定位下一个
|
||||
const currentList = state.acceptState == AcceptStatus.Default ? currentProofreadList : currentProofreadList.filter(s => (state.acceptState == AcceptStatus.Default
|
||||
|| (state.acceptState == AcceptStatus.Adopted && s.isAccept != ProofreadStateEnum.Default)
|
||||
|| (state.acceptState == AcceptStatus.NotAdopted && s.isAccept == ProofreadStateEnum.Default)
|
||||
));
|
||||
if (currentList.length == 0) {
|
||||
setTimeout(() => {
|
||||
setState((prevState) => ( {
|
||||
...prevState,
|
||||
activeIndex: -1,
|
||||
activeItemId: 0 - Math.ceil(Math.random() * 100),
|
||||
}))
|
||||
}, 20)
|
||||
return;
|
||||
}
|
||||
const _idx = index >= currentList.length ? index - 1 : (state.acceptState == AcceptStatus.Default ? index + 1 : index)
|
||||
const _it = currentList[_idx];
|
||||
setTimeout(() => {
|
||||
centerItem(_idx, _it,false)
|
||||
}, 20)
|
||||
|
||||
}
|
||||
}
|
||||
} catch (e) { // 处理错误了
|
||||
console.log('process item action error:', (e as Error).message)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 切换类型
|
||||
const handleTypeChange = (currentType: string | null, resetIndex = true) => {
|
||||
setState(_prev => ({
|
||||
currentType: _prev.currentType == currentType ? null : currentType,
|
||||
activeIndex: resetIndex ? -1 : _prev.activeIndex
|
||||
}))
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth'
|
||||
})
|
||||
}
|
||||
const {bridge} = useBridge();
|
||||
const focusPane = useDebounceFn(() => bridge?.Focus(), {wait: 200,})
|
||||
// Focus
|
||||
const movePrevOrNextProofreadItem = (action: 'prev' | 'next') => {
|
||||
setState(state => {
|
||||
// 方向键移动
|
||||
let list = getCurrentProofreadTypeListByAcceptStatus() || [];
|
||||
if (list.length == 0) return state;
|
||||
if (!stringIsEmpty(state.currentType)) {
|
||||
list = list.filter(s => s.type == state.currentType)
|
||||
}
|
||||
// 当前选中项的索引
|
||||
const index = list.findIndex(s => s.id == state.activeItemId)
|
||||
const maxCount = list.length;
|
||||
if (maxCount == 0
|
||||
|| (action == 'next' && index >= maxCount - 1)
|
||||
|| (action == 'prev' && index <= 0)
|
||||
) {
|
||||
return state;
|
||||
}
|
||||
const activeIndex = index + (action == 'next' ? 1 : -1)
|
||||
const item = list[activeIndex]
|
||||
const div = document.querySelector(`div.proofread-item-${item.id}`)
|
||||
if (div) {
|
||||
div.scrollIntoView({behavior: 'smooth', block: 'center',inline: 'nearest'})
|
||||
}
|
||||
props.onSelectProofreadItem(item);
|
||||
setTimeout(focusPane.run, 50);
|
||||
return {
|
||||
...state,
|
||||
activeIndex,
|
||||
activeItemId: item.id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleUpAndDownEvent = useCallback((e: KeyboardEvent) => {
|
||||
const key = e.key.toLowerCase();
|
||||
if (key == 'arrowup' || key == 'arrowdown') {
|
||||
console.log('handleUpAndDownEvent=>', proofreadResult)
|
||||
if (proofreadResult) {
|
||||
movePrevOrNextProofreadItem(key == 'arrowup' ? 'prev' : 'next')
|
||||
}
|
||||
}
|
||||
}, [proofreadResult, state])
|
||||
|
||||
useEffect(() => {
|
||||
// 绑定键盘事件
|
||||
document.documentElement.addEventListener('keyup', handleUpAndDownEvent, false)
|
||||
return () => {
|
||||
document.documentElement.removeEventListener('keyup', handleUpAndDownEvent, false)
|
||||
}
|
||||
}, [handleUpAndDownEvent]);
|
||||
|
||||
|
||||
const currentProofreadTotal = useMemo(() => {
|
||||
//const list = getCurrentProofreadTypeListByAcceptStatus(undefined,true) || [];
|
||||
return currentProofreadCount.total;
|
||||
// return proofreadResult?.count.total && proofreadResult?.count.total > 0 ? proofreadResult?.count.total : 0
|
||||
}, [currentProofreadCount])
|
||||
const _currentList = useMemo(() => {
|
||||
return getCurrentProofreadTypeListByAcceptStatus() || []
|
||||
}, [currentProofreadList, state.acceptState, state.activeItemId])
|
||||
|
||||
const handleTabChange = (key: AcceptStatus) => {
|
||||
let activeItemId = -1;
|
||||
if (key == AcceptStatus.Adopted) {
|
||||
// 如果切换到已复核 则自动定位到最后一个
|
||||
if (histories.length > 0) {
|
||||
// const list = getCurrentProofreadTypeListByAcceptStatus(AcceptStatus.Adopted)
|
||||
// if(list){
|
||||
// const last = list.length > 0 ? list[list.length - 1] : null
|
||||
// if(last) {
|
||||
// activeItemId = last.id
|
||||
// }
|
||||
// }
|
||||
const last = histories[histories.length - 1];
|
||||
console.log('---last', last)
|
||||
activeItemId = last.correctId;
|
||||
bridge?.SelectMarkById(activeItemId, CACHE_DATA.DocumentID)
|
||||
}
|
||||
}
|
||||
setState({acceptState: key, activeItemId})
|
||||
handleTypeChange(null)
|
||||
props.onStateChange?.({acceptState: key, activeItemId})
|
||||
CACHE_DATA.selectStatus = key
|
||||
// 如果是
|
||||
}
|
||||
|
||||
return (<div className={'proofread-panel-container v3'}>
|
||||
<div className="panel-header system-font">
|
||||
<Flex align="center">
|
||||
<div style={{fontSize: 50, marginRight: 30}}>
|
||||
<IconLogo style={{display: 'block'}}/>
|
||||
</div>
|
||||
<Flex justify={'center'} className={'operation-buttons'}>
|
||||
<Space style={{margin: 10}}>
|
||||
<button
|
||||
disabled={props.proofreadLoading || state.acceptState == AcceptStatus.Adopted || props.sentences.length == 0 || currentProofreadTotal == 0}
|
||||
className={'btn-process'}
|
||||
onClick={handleProcessAll('acceptAll')}>
|
||||
<div className="btn-icon"><Icon component={IconCheckOutline}/></div>
|
||||
<div>全部采纳</div>
|
||||
</button>
|
||||
<button
|
||||
disabled={props.proofreadLoading || state.acceptState == AcceptStatus.Adopted || props.sentences.length == 0 || currentProofreadTotal == 0}
|
||||
className={'btn-process'}
|
||||
onClick={handleProcessAll('ignore')}>
|
||||
<div className="btn-icon"><Icon component={IconMinus}/></div>
|
||||
<div>全部忽略</div>
|
||||
</button>
|
||||
<button
|
||||
className="btn-process"
|
||||
disabled={histories.length == 0 || props.sentences.length == 0 || (currentProofreadTotal == 0 && histories.length == 0)}
|
||||
onClick={redoAction}>
|
||||
<div className="btn-icon"><Icon component={IconRollbackCircle}/></div>
|
||||
<div>上一步</div>
|
||||
</button>
|
||||
</Space>
|
||||
</Flex>
|
||||
{props.children}
|
||||
</Flex>
|
||||
<div className="state-filter-tab">
|
||||
<div className="tab-wrapper">
|
||||
{[
|
||||
{title: '待复核', key: AcceptStatus.NotAdopted, count: currentProofreadCount.not_adopted},
|
||||
{title: '已复核', key: AcceptStatus.Adopted,count: currentProofreadCount.adopted},
|
||||
{title: '全部', key: AcceptStatus.Default,count: currentProofreadCount.all}
|
||||
].map((it, idx) => (
|
||||
<div
|
||||
key={idx}
|
||||
onClick={() => {handleTabChange(it.key)}}
|
||||
className={clsx('tab-item d-flex justify-center item-center', {active: state.acceptState == it.key})}
|
||||
>
|
||||
<span>{it.title}</span>
|
||||
<span className="tab-item-count" style={{marginLeft:5}}>{props.proofreadLoading?'...':it.count}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={`proofread-list-wrapper ${proofreadResult ? 'has-result' : ''}`}>
|
||||
<div className="proofread-result">
|
||||
|
||||
<div className={'proofread-list'}>
|
||||
<div style={{paddingTop: 2}}>
|
||||
{_currentList.map((it, index) => (
|
||||
<VirtualListItem key={it.id} id={it.id} index={index}>
|
||||
<ProofreadItem
|
||||
it={it}
|
||||
className={`proofread-index-${index}`}
|
||||
index={index}
|
||||
last={false}
|
||||
proofreading={props.proofreadLoading}
|
||||
selected={state.activeItemId == it.id}
|
||||
onAction={key => handleItemAction(key, it, index)}
|
||||
previewMode={false}
|
||||
/>
|
||||
</VirtualListItem>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="types system-font">
|
||||
<div className="container">
|
||||
{
|
||||
[
|
||||
{title: '错误', key: 'error', count: currentProofreadCount.error},
|
||||
{title: '敏感词', key: 'sensitive', count: currentProofreadCount.sensitive},
|
||||
{title: '黑名单', key: 'blacklist', count: currentProofreadCount.blacklist},
|
||||
{title: '政务', key: 'gov-check', count: currentProofreadCount.govCheck,color:'hsla(179, 100%, 70%, 1)'}
|
||||
].map((it, idx) => (
|
||||
it.count <= 0 ? null : <div key={idx} onClick={() => handleTypeChange(it.key)}
|
||||
className={`item ${state.currentType == it.key ? 'active' : ''}`}>
|
||||
<div className="count" style={it.color?{color:it.color}:{}}>{props.proofreadLoading ? '...' : it.count}</div>
|
||||
<div className="text">{it.title}</div>
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>)
|
||||
}
|
||||
export default ProofreadPanel;
|
@ -1,73 +0,0 @@
|
||||
import React from "react";
|
||||
import {Button} from "antd";
|
||||
import IdleImage from "./../images/icon-idle.png"
|
||||
import PerfectImg from "./../images/icon-perfect.png"
|
||||
|
||||
export type TProofreadState = 'idle' | 'processing' | 'perfect' | 'edit' | 'analyzing'
|
||||
type PanelRightStateProp = {
|
||||
state: TProofreadState;
|
||||
proofreadEndTime?: number;
|
||||
onBack?:()=>void;
|
||||
}
|
||||
|
||||
// 状态配置
|
||||
const StateConfig: {
|
||||
[key in TProofreadState]: {image: string, text: string} | null
|
||||
} = {
|
||||
'idle': {image: IdleImage, text: '在左侧输入内容开始校验'},
|
||||
'processing': {image: IdleImage, text: '正在校验中'},
|
||||
'edit': {image: IdleImage, text: '正在编辑中'},
|
||||
'perfect': null,
|
||||
'analyzing': null,
|
||||
}
|
||||
|
||||
const StateElement = ({state}: PanelRightStateProp) => {
|
||||
return (<div className="proofread-state-idle">
|
||||
<div className="image">
|
||||
<img src={StateConfig[state]?.image} alt={state} style={{width: 159}}/>
|
||||
</div>
|
||||
<div className="desc-title fz-large"><strong>专业校验工具</strong></div>
|
||||
<div className="desc">全面检查语义、语法、敏感词、标点符号等问题</div>
|
||||
<div className="notice tz-title">{StateConfig[state]?.text}</div>
|
||||
</div>)
|
||||
}
|
||||
|
||||
const Perfect = () => (<div className="proofread-state-perfect">
|
||||
<div className="image">
|
||||
<img src={PerfectImg} alt="perfect"/>
|
||||
</div>
|
||||
<div className="desc">非常完美</div>
|
||||
</div>)
|
||||
|
||||
const Analyzing = (props:PanelRightStateProp) => (<div className="proofread-state-analyzing text-center">
|
||||
<div className="remain">
|
||||
{props.proofreadEndTime === -2 ?<div className="remain-title">排队校对中...</div>:<>
|
||||
<div className="remain-title">预计还有</div>
|
||||
<div className="remain-time">
|
||||
<span className="value">{Math.round(props.proofreadEndTime! / 1000)}</span>
|
||||
<span className="unit">秒</span>
|
||||
</div>
|
||||
</>}
|
||||
</div>
|
||||
<div className="control">
|
||||
<div className="remain-text">
|
||||
<b>校对时间太长?</b>
|
||||
<div className="small">返回文稿同样可查看进度</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="back-to-document">
|
||||
<Button onClick={props.onBack} type={'primary'}>返回文稿</Button>
|
||||
</div>
|
||||
</div>)
|
||||
|
||||
const PanelElement = ({state,onBack,proofreadEndTime}: PanelRightStateProp)=>{
|
||||
if(state === 'perfect') return <Perfect/>;
|
||||
if(state === 'analyzing') return <Analyzing proofreadEndTime={proofreadEndTime} state={state} onBack={onBack}/>;
|
||||
return <StateElement state={state}/>;
|
||||
}
|
||||
|
||||
export const PanelRightState: React.FC<PanelRightStateProp> = (props) => (
|
||||
<div className="panel-right-state-wrapper">
|
||||
<PanelElement proofreadEndTime={props.proofreadEndTime} state={props.state} onBack={props.onBack}/>
|
||||
</div>
|
||||
)
|
@ -1,68 +0,0 @@
|
||||
import {
|
||||
ProofreadTypeEnum,
|
||||
TCorrectedContent,
|
||||
TDocumentContentDetail, TProofreadCountResult,
|
||||
} from "@/service/types/document.ts";
|
||||
import {ProofreadTypeData, ProofreadTypeKeys} from "@/types/proofread.ts";
|
||||
import {int} from "@/service/types/base.ts";
|
||||
|
||||
function getTypeData(type: ProofreadTypeEnum) {
|
||||
return ProofreadTypeData.find(s => Array.isArray(s.id) ? s.id.includes(type) : s.id == type)
|
||||
}
|
||||
|
||||
|
||||
export function buildProofreadResult(document: TDocumentContentDetail){
|
||||
let offset = 0;
|
||||
let paragraph_offset = 1;
|
||||
document.correctedSet.forEach((item) => {
|
||||
item.offset = offset;//Math.ceil(item.offset) + offset;
|
||||
offset += item.insert_len;
|
||||
item.diffs?.forEach(it => {
|
||||
// it.start += item.offset + 1
|
||||
// it.end += item.offset + 1
|
||||
it.typeData = getTypeData(it.type)
|
||||
it.color = '#80E9DABB';//it.typeData?.color;
|
||||
})
|
||||
if(item.insert?.length > 1 && (item.insert.startsWith("\f") || item.insert.startsWith("\n"))){
|
||||
paragraph_offset ++;
|
||||
}
|
||||
// 当前是第几段
|
||||
item.paragraph_offset = paragraph_offset;
|
||||
if(item.insert.endsWith("\n") || item.insert.endsWith("\f")){
|
||||
paragraph_offset ++;
|
||||
}
|
||||
})
|
||||
}
|
||||
// 解析并处理校对结果
|
||||
export function parseProofreadResult(document: TDocumentContentDetail,disabled:number[] = []) {
|
||||
const parseData = [];
|
||||
const resultList: TCorrectedContent[] = [];
|
||||
|
||||
const abnormalCount : {
|
||||
[key:string]:int
|
||||
}= {
|
||||
total:0
|
||||
};
|
||||
|
||||
// 遍历内容
|
||||
document.correctedSet.forEach((item) => {
|
||||
item.diffs?.forEach(it => {
|
||||
// it.start += item.offset + 1
|
||||
// it.end += item.offset + 1
|
||||
// it.typeData = getTypeData(it.type)
|
||||
// it.color = it.typeData?.color;
|
||||
if(disabled.includes(it.id)) return;
|
||||
resultList.push(it)
|
||||
const type = ProofreadTypeKeys[it.type];
|
||||
if(!abnormalCount[type]) abnormalCount[type] = 0;
|
||||
abnormalCount['total'] ++;
|
||||
abnormalCount[type] ++;
|
||||
})
|
||||
})
|
||||
|
||||
return {
|
||||
parseData,
|
||||
resultList,
|
||||
abnormalCount: abnormalCount as TProofreadCountResult
|
||||
}
|
||||
}
|
@ -1,90 +0,0 @@
|
||||
import {V3Enums} from "@/types/v3/enums.ts";
|
||||
import { stringIsEmpty } from '@/core/string-utils.ts';
|
||||
|
||||
const ItemTipsConfig = {
|
||||
'term': '规范术语',
|
||||
'first_choice': '首选',
|
||||
'now_called': '现称',
|
||||
'alien': '异形词',
|
||||
'quoting_legal': '引用法律条文时',
|
||||
'coinage': '造字',
|
||||
'coinage_first_choice': '造字 首选',
|
||||
// 'incorrect_expression': '表述有误',
|
||||
'serial_number': '作为标题序号时',
|
||||
'after_a_certain_year': '现称',
|
||||
}
|
||||
const GovTipConfig = {
|
||||
'quotation': '引用领导人讲话',
|
||||
'fallen_officers': '疑似落马官员',
|
||||
'leader': '政要人物',
|
||||
'leader-sort': '政要人物顺序',
|
||||
'leader-error': '政要人物缺失或顺序有误',
|
||||
|
||||
'position': '职位或人名有误',
|
||||
'position-error': '职位或人名有误',
|
||||
'position-sort': '政要人物的职位顺序',
|
||||
}
|
||||
|
||||
export default function ProofreadItemDescription({it}:{it: V3.ProofreadCorrect}) {
|
||||
// 获取类型数据 敏感词、
|
||||
//const typeData = V3Enums.ProofreadType[it.type] || V3Enums.ProofreadType.other;
|
||||
if(!ItemTipsConfig[it.type] && !GovTipConfig[it.type]) return null;
|
||||
if(GovTipConfig[it.type]){
|
||||
if(it.gov && it.gov?.length > 0 && (it.type == 'position-error' || (
|
||||
it.type == 'position' && it.gov[0].content == '该职位组合无对应领导人'
|
||||
))){
|
||||
|
||||
return <>
|
||||
{it.gov?.map((it,idx)=>(
|
||||
<div className='item-description' key={idx}>
|
||||
<span className='tag' style={{marginLeft:-3}}>【提示】</span>
|
||||
<span>{it.content}</span>
|
||||
</div>
|
||||
)
|
||||
)}
|
||||
</>
|
||||
}
|
||||
return <div className='item-description'>
|
||||
<span className='tag' style={{marginLeft:-3}}>【提示】</span>
|
||||
<span>{it.addition || GovTipConfig[it.type]}</span>
|
||||
</div>
|
||||
}
|
||||
if(it.tag == 'r'){
|
||||
const notice = it.type == V3Enums.ProofreadType.after_a_certain_year.key ? it.addition : ItemTipsConfig[it.type] || it.addition;
|
||||
if(stringIsEmpty(notice)){
|
||||
return null;
|
||||
}
|
||||
// 有提示内容的情况仅包含下述四种:〈现称〉、〈XXXX 年后〉、〈作为标题序号时〉和〈引用法律条文时〉
|
||||
// 无提示内容的情况:如不属于上述四种情况,则不显示任何提示内容
|
||||
return <div className='item-description'>
|
||||
<span className='tag' style={{marginLeft:-3}}>【提示】</span>
|
||||
<span>{notice}</span>
|
||||
</div>
|
||||
// if(ItemTipsConfig[it.type]){
|
||||
// return `${}`
|
||||
// }
|
||||
// if(it.type == V3Enums.ProofreadType.after_a_certain_year.key){
|
||||
// return `【提示】${it.addition}`
|
||||
// }
|
||||
// return `【提示】${it.addition}`
|
||||
}
|
||||
if(it.tag == 'i' || it.tag == 'd' || [
|
||||
V3Enums.ProofreadType.blacklist.key,
|
||||
V3Enums.ProofreadType.sensitive.key,
|
||||
V3Enums.ProofreadType.incorrectExpression.key, // 无修改建议的的情况分为三种:敏感词、黑名单和表述有误。
|
||||
].includes(it.type)){
|
||||
return '';
|
||||
}
|
||||
return null;
|
||||
// if (it.type == V3Enums.ProofreadType.blacklist.key) {
|
||||
// str.push('请复核',it.tag == 'r' && !/^[*]+$/.test(it.text) ?`,将选用"${it.text}"`:'')
|
||||
// } else if (it.tag == 'r') {
|
||||
// str.push(`建议选用"${it.text}"`)
|
||||
// } else {
|
||||
// str.push('建议' + (it.tag == 'd' ? '删除' : '新增'))
|
||||
// }
|
||||
// const str = [`【提示】`] // ${typeData?.name}
|
||||
// return str.join('');
|
||||
// return typeData?.text ? typeData?.text + ',' : ''}{props.it.tag == 'r' ? `选用"${props.it.text}"` : (
|
||||
// it.tag == 'd' ? '删除' : '新增'
|
||||
}
|
@ -1,195 +0,0 @@
|
||||
import React, {useMemo} from "react";
|
||||
import {RightOutlined} from "@ant-design/icons";
|
||||
import { Space} from "antd";
|
||||
import {css} from "@emotion/css";
|
||||
import {DropdownMenu} from "@/components/popover/dropdown-menu";
|
||||
import {
|
||||
ProofreadStateEnum,
|
||||
} from "@/service/types/document";
|
||||
import {showToast} from "@/components/messages/Modal.tsx";
|
||||
import {whitelist} from "@/service/api/lexicon.ts";
|
||||
import {useSetState} from "ahooks";
|
||||
import {
|
||||
IconAccept,
|
||||
IconIgnore,
|
||||
IconReview,
|
||||
SvgIcon
|
||||
} from "./icons.tsx";
|
||||
import {V3Enums} from "@/types/v3/enums.ts";
|
||||
import {stringIsEmpty} from "@/core/string-utils.ts";
|
||||
import ProofreadItemDescription from '@/pages/proofread/components/proofread-item-description.tsx';
|
||||
import { GovExtra } from '@/pages/proofread/components/gov/gov-extra.tsx';
|
||||
|
||||
|
||||
export type ActionKey = 'click' | 'accept' | 'acceptAll' | 'ignore' | 'ignoreAll' | 'addToLexicon' | 'review' | 'redo'
|
||||
type ProofreadItemProps = {
|
||||
selected?: boolean;
|
||||
className?: string | undefined;
|
||||
previewMode?: boolean;
|
||||
proofreading?: boolean;
|
||||
last?: boolean;
|
||||
onAction: (key: ActionKey) => void
|
||||
it: V3.ProofreadCorrect
|
||||
index?: number;
|
||||
}
|
||||
|
||||
// const ActionToolTip = (props: {open?:boolean; text: string; children: React.ReactNode }) => (
|
||||
// <Popover
|
||||
// open={props.open}
|
||||
// overlayClassName="black-bg"
|
||||
// content={props.text}
|
||||
// >{props.children}</Popover>)
|
||||
|
||||
const ProofreadItemType = ({it}:{it: V3.ProofreadCorrect})=>{
|
||||
if(it.type == V3Enums.ProofreadType.blacklist.key){
|
||||
return <span className="action-text">黑名单</span>
|
||||
}
|
||||
if(it.type == V3Enums.ProofreadType.sensitive.key){
|
||||
return <span className="action-text">敏感词</span>
|
||||
}
|
||||
if(it.type == V3Enums.ProofreadType.incorrectExpression.key){
|
||||
return <span className="action-text">表述有误</span>
|
||||
}
|
||||
return (stringIsEmpty(it.tag) || it.tag == 'r') ? null : <span className="action-text">{it.tag == 'd' ? '删除' : '新增'}</span>
|
||||
}
|
||||
|
||||
function getBlankSpaceElement(regex:RegExp,content:string,id:number){
|
||||
if(!content || !content.match(regex)) return [];
|
||||
const matched = content.match(regex);
|
||||
if(!matched) return [];
|
||||
return Array(matched[0].length).fill(0).map((_,index)=>(<span key={id + index} className="text-blank-space"> </span>))
|
||||
}
|
||||
function replaceWhiteSpaceToTag(content:string,id:number){
|
||||
if(!content || !content.match(/(\s)+/)) return content;
|
||||
return [
|
||||
...getBlankSpaceElement(/^(\s)+/,content,id),
|
||||
(content.trim().length > 0 ?<span>{content.trim()}</span>:null),
|
||||
...getBlankSpaceElement(/(\s)+$/,content.trimStart(),id)
|
||||
]
|
||||
}
|
||||
export const ProofreadItem: React.FC<ProofreadItemProps> = (props) => {
|
||||
|
||||
const typeData = (V3Enums.ProofreadType[props.it.type] || V3Enums.ProofreadType.other) as V3.ProofreadTypeConfig;
|
||||
const govCheck = props.it.type == V3Enums.ProofreadType.leader.key
|
||||
|| props.it.type == V3Enums.ProofreadType.position.key
|
||||
|| props.it.type == V3Enums.ProofreadType.fallen_officers.key
|
||||
|| props.it.type == V3Enums.ProofreadType.quotation.key;
|
||||
const requireReview = useMemo(() => {
|
||||
if(props.it.tag == 'r') return false;
|
||||
// 敏感词或者要拦截的黑名单
|
||||
return govCheck
|
||||
|| props.it.type == V3Enums.ProofreadType.sensitive.key
|
||||
|| props.it.type == V3Enums.ProofreadType.incorrectExpression.key
|
||||
|| props.it.type == V3Enums.ProofreadType.blacklist.key
|
||||
|| ( props.it.type == V3Enums.ProofreadType.blacklist.key && props.it.tag == 'r' && /^[*]+$/.test(props.it.text)
|
||||
);
|
||||
}, [props.it])
|
||||
// 当前类别颜色
|
||||
const colorStyle = css`--proofread-color: ${typeData.color || '#000000'}`
|
||||
const [state, setState] = useSetState({
|
||||
addToLexiconVisible: true
|
||||
})
|
||||
|
||||
// 添加到词库
|
||||
const handleAddToLexicon = () => {
|
||||
whitelist.create({
|
||||
word: props.it.origin
|
||||
}).then(() => {
|
||||
showToast('加入白名单成功', 'success');
|
||||
// 隐藏添加按钮
|
||||
setState({
|
||||
addToLexiconVisible: false
|
||||
})
|
||||
}).catch((e) => {
|
||||
const error = e.message || '加入白名单失败'
|
||||
if(error == '放行词已存在'){
|
||||
// 隐藏添加按钮
|
||||
setState({
|
||||
addToLexiconVisible: false
|
||||
})
|
||||
}
|
||||
showToast(error == '放行词已存在'?'已经加入白名单':error, 'warning')
|
||||
})
|
||||
}
|
||||
// const handleUndo = async () => {
|
||||
// showToast('撤销成功')
|
||||
// }
|
||||
const AddToLexiconButton = ({disabled}:{disabled:boolean}) => {
|
||||
if(
|
||||
props.it.type == V3Enums.ProofreadType.sensitive.key
|
||||
|| props.it.type == V3Enums.ProofreadType.incorrectExpression.key
|
||||
) return null;
|
||||
const AddButton = <button disabled={disabled} className="btn btn-add-to-lexicon" onClick={handleAddToLexicon}>加入白名单</button>;
|
||||
return (props.selected && state.addToLexiconVisible && props.it.type != V3Enums.ProofreadType.blacklist.key) ?
|
||||
disabled ? AddButton : (AddButton) : null
|
||||
}
|
||||
|
||||
return (<>
|
||||
<div
|
||||
onClick={() => props.onAction('click')}
|
||||
className={`proofread-item ${props.it.isAccept == ProofreadStateEnum.Default?'':'processed'} proofread-action-${props.it.tag} proofread-item-${props.it.id} ${props.className} ${colorStyle} item ${props.selected ? 'select' : ''}`}>
|
||||
<div className="align-start">
|
||||
<div className="info stream-mode">
|
||||
<div className="text d-flex align-center">
|
||||
<span className="origin">
|
||||
{replaceWhiteSpaceToTag(props.it.tag == 'i' ? props.it.text:props.it.origin,props.it.id)}
|
||||
</span>
|
||||
{
|
||||
props.it.tag == 'r' && <>
|
||||
<span className="arrow"><RightOutlined/></span>
|
||||
<span className="replaced">{replaceWhiteSpaceToTag(props.it.text,props.it.id)}</span>
|
||||
</>
|
||||
}
|
||||
<ProofreadItemType it={props.it} />
|
||||
</div>
|
||||
<div className="description">
|
||||
<div className="description-item-container">
|
||||
<ProofreadItemDescription it={props.it} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{props.it.isAccept != ProofreadStateEnum.Default &&
|
||||
<div className="processed-wrapper align-center">
|
||||
{props.it.isAccept == ProofreadStateEnum.Accept && <div className="state-accept align-center">
|
||||
<SvgIcon component={IconAccept}/>
|
||||
<span className="ml-2">已采纳</span>
|
||||
</div>}
|
||||
{props.it.isAccept == ProofreadStateEnum.Review &&
|
||||
<div className="state-accept state-review align-center">
|
||||
<SvgIcon component={IconReview}/>
|
||||
<span className="ml-2">已复核</span>
|
||||
</div>}
|
||||
{props.it.isAccept == ProofreadStateEnum.Ignore && <div className="state-ignore align-center">
|
||||
<SvgIcon component={IconIgnore}/>
|
||||
<span className="ml-2">已忽略</span>
|
||||
</div>}
|
||||
</div>}
|
||||
</div>
|
||||
{props.selected && (props.it.isAccept == ProofreadStateEnum.Default) && props.it.gov && props.it.gov?.length > 0 && <div className='gov-extra-panel'>
|
||||
{/* 政务校对 */}
|
||||
<GovExtra list={props.it.gov} />
|
||||
</div>}
|
||||
{/* 非预览模式 */}
|
||||
{!props.previewMode && <div className="action align-center">
|
||||
{props.selected && (props.it.isAccept == ProofreadStateEnum.Default) && <Space align={'center'}>
|
||||
{!requireReview && <button className="btn btn-accept" onClick={() => props.onAction('accept')}>采纳</button>}
|
||||
{requireReview && <button className="btn btn-review" onClick={() => props.onAction('review')}>复核</button>}
|
||||
<button className="btn btn-ignore" onClick={() => props.onAction('ignore')}>忽略</button>
|
||||
{!govCheck && <AddToLexiconButton disabled={requireReview}/>}
|
||||
<DropdownMenu
|
||||
theme="dark"
|
||||
items={!requireReview ? [
|
||||
{key: 'acceptAll',disabled:props.proofreading, label: '采纳全部相同结果', onClick: () => props.onAction('acceptAll')},
|
||||
{type: 'divider'},
|
||||
{key: 'accept',disabled:props.proofreading, label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')},
|
||||
] : [{key: 'accept',disabled:props.proofreading, label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')}]}
|
||||
>
|
||||
<div className="more-action">更多</div>
|
||||
</DropdownMenu>
|
||||
</Space>}
|
||||
</div>}
|
||||
</div>
|
||||
{props.selected && !props.last && <div className={'selected-line'}></div>}
|
||||
</>)
|
||||
}
|
@ -1,865 +0,0 @@
|
||||
.view-size-notice {
|
||||
position: fixed;
|
||||
//inset-inline: 0;
|
||||
//inset-block-start: 0;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
padding: 10px;
|
||||
line-height: 30px;
|
||||
z-index: 9999;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
backdrop-filter: blur(2px);
|
||||
}
|
||||
|
||||
@keyframes progress-bar-animation {
|
||||
0% {
|
||||
background-position: -150% 0, -150% 0
|
||||
}
|
||||
100% {
|
||||
background-position: 250% 0, 250% 0
|
||||
}
|
||||
}
|
||||
@keyframes progress-bar-loading{
|
||||
0%{left:-35%;right:100%;}
|
||||
60%{left:100%;right:-90%;}
|
||||
100%{left:100%;right:-90%;}
|
||||
}
|
||||
@keyframes progress-bar-loading-1{
|
||||
0%{left:-200%;right:100%;}
|
||||
60%{left:107%;right:-8%;}
|
||||
100%{left:107%;right:-8%;}
|
||||
}
|
||||
|
||||
.proofread-notice-wrapper {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 999;
|
||||
//url(./images/loading.svg)
|
||||
background: center bottom no-repeat #f5f5f5;
|
||||
background-size: contain;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 14px;
|
||||
|
||||
.error-notice {
|
||||
p {
|
||||
margin: 0;
|
||||
color: rgba(140, 140, 140, 1);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.error-title {
|
||||
color: #000;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
button {
|
||||
width: 260px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-panel {
|
||||
--btn-size: 40px;
|
||||
--padding-right: 0px;
|
||||
--padding-left: 0px;
|
||||
--padding: 10px;
|
||||
--type-width: 60px;
|
||||
--header-height: 140px;
|
||||
font-size: 14px;
|
||||
|
||||
.panel-controls {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: calc(var(--padding-left) - var(--padding-right));
|
||||
background: #fafafa;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.panel-btn-visible {
|
||||
border-radius: 5px 0 0 5px;
|
||||
width: 28px;
|
||||
height: 40px;
|
||||
background-color: var(--primary-color, #36cfc9);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
top: 53px;
|
||||
right: 0;
|
||||
|
||||
svg {
|
||||
transform: rotate(-180deg) translateX(-3px);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
background-color: #009688;
|
||||
}
|
||||
}
|
||||
|
||||
&.open {
|
||||
|
||||
.panel-btn-visible svg {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-count-tag {
|
||||
border-radius: 8px;
|
||||
line-height: 1;
|
||||
padding: 2px 10px;
|
||||
}
|
||||
|
||||
.proofread-panel-tab-wrapper {
|
||||
background-color: #fff;
|
||||
margin: 0 var(--padding-right) 0 var(--padding-left);
|
||||
}
|
||||
|
||||
.ant-tabs-nav, .ant-tabs-nav-list {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ant-tabs-tab {
|
||||
flex: 1;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.proofread-panel-tab {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.tab-item {
|
||||
flex: 1;
|
||||
font-size: 14px;
|
||||
color: #262626;
|
||||
|
||||
&.Mui-selected {
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
.proofread-status {
|
||||
background-color: #fff;
|
||||
border-radius: 0 0 4px 4px;
|
||||
margin: 0 var(--padding-right) 20px var(--padding-left);
|
||||
}
|
||||
|
||||
.btn-all {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 32px;
|
||||
border: 1px solid #D9D9D9;
|
||||
box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.016);
|
||||
border-radius: 4px;
|
||||
|
||||
&:hover {
|
||||
border-color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-accept-all {
|
||||
color: rgba(54, 207, 201, 1);
|
||||
}
|
||||
|
||||
.btn-ignore-all {
|
||||
color: rgba(140, 140, 140, 1);
|
||||
}
|
||||
}
|
||||
.system-font{
|
||||
font-family: 'Arial','SimHei','黑体';
|
||||
font-weight: bold;
|
||||
}
|
||||
.ui-font{
|
||||
font-family: 'Simsun','宋体';
|
||||
font-weight: normal;
|
||||
}
|
||||
.panel-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
background: #fff;
|
||||
z-index: 10;
|
||||
padding: 10px 10px 2px;
|
||||
//border-bottom: solid 1px rgba(217, 217, 217, 0.5);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
||||
overflow: hidden;
|
||||
|
||||
.btn-start-proofread {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 150px;
|
||||
border: none !important;
|
||||
background: linear-gradient(to right, #E9C57E 0%, #CAA266 100%);
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(to right, #CAA266 0%, #CAA266 100%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.text-tip {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.count-value {
|
||||
color: #E9C57E;
|
||||
}
|
||||
}
|
||||
.header-logo{
|
||||
svg{
|
||||
height: 46px;
|
||||
width: 120px;
|
||||
}
|
||||
}
|
||||
.proofread-list-wrapper {
|
||||
margin-right: var(--type-width);
|
||||
}
|
||||
.proofread-list{
|
||||
padding: 0 var(--padding);
|
||||
margin-top: 13px;
|
||||
margin-right: 5px;
|
||||
// fixed 由于添加新的间距 导致高度过高显示内容不足
|
||||
height: calc(100vh - var(--header-height) - 20px);
|
||||
bottom: 10px;
|
||||
overflow: auto;
|
||||
&::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #fff;
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
// hover时 显示滚动条
|
||||
&:hover{
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #d2d2d2;
|
||||
&:hover{
|
||||
background: #b6b6b6;
|
||||
}
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
.stream-mode{
|
||||
.origin {
|
||||
color: #000;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
text-align: justify;
|
||||
font-family: '宋体';
|
||||
}
|
||||
|
||||
.arrow {
|
||||
color: var(--primary-golden-color);
|
||||
font-size: 10px;
|
||||
margin: 0 15px;
|
||||
|
||||
svg {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.replaced {
|
||||
font-family: '宋体';
|
||||
color: #000;
|
||||
background: none;
|
||||
border-radius: 3px;
|
||||
display: block;
|
||||
padding: 4px 5px;
|
||||
line-height: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.action-text{
|
||||
color: var(--primary-color);
|
||||
}
|
||||
}
|
||||
.proofread-item.select{
|
||||
.stream-mode{
|
||||
.origin,.replaced{
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.operation-buttons {
|
||||
position: sticky;
|
||||
z-index: 10;
|
||||
background: #fff;
|
||||
top: calc(var(--header-height) - 1px);
|
||||
button.ant-btn-default{
|
||||
&.btn-operation-batch{
|
||||
border-color: var(--primary-color,rgba(76, 182, 125, 1));
|
||||
color: var(--primary-color,rgba(76, 182, 125, 1));
|
||||
&:not(:disabled):hover{
|
||||
background-color: var(--primary-color,rgba(76, 182, 125, 1));
|
||||
color: #fff;
|
||||
}
|
||||
&:disabled{
|
||||
background-color: #f4f4f4;
|
||||
border-color: #D9D9D9;
|
||||
}
|
||||
}
|
||||
&.btn-ignore-all{
|
||||
border-color: #D9D9D9;
|
||||
}
|
||||
}
|
||||
}
|
||||
.test-item{
|
||||
background-color:#99ffff;
|
||||
height:50px;
|
||||
margin:10px auto;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
border-radius: 4px;
|
||||
&:hover,&.active{
|
||||
background-color: #83d9d9;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-item-wrapper {
|
||||
--border-size: 2px;
|
||||
--timeline-width: 14px;
|
||||
--proofread-font-size: 16px;
|
||||
--content-font-size: 12px;
|
||||
--padding-size: 10px;
|
||||
cursor: default;
|
||||
padding: var(--border-size);
|
||||
overflow: hidden;
|
||||
margin-top: 15px;
|
||||
margin-right: calc(var(--padding-right) - 10px);
|
||||
margin-left: var(--padding-left);
|
||||
border-radius: 4px;
|
||||
background-image: linear-gradient(91.26deg, #fff, #fff);
|
||||
transition: 0.5s;
|
||||
outline: solid 1px transparent;
|
||||
|
||||
.d-flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.content-container {
|
||||
padding: 10px;
|
||||
background: #fff;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
outline: solid 1px #ccc;
|
||||
}
|
||||
|
||||
.proofread-content {
|
||||
display: none;
|
||||
color: #666;
|
||||
font-size: var(--content-font-size);
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.description-item {
|
||||
display: flex;
|
||||
background-color: #f6f5f6;
|
||||
padding: 5px 6px;
|
||||
border-radius: 3px;
|
||||
text-align: justify;
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
line-height: 20px;
|
||||
align-items: flex-start;
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 3px;
|
||||
}
|
||||
|
||||
.error_sort {
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
.content {
|
||||
flex: 1;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
height: 20px;
|
||||
padding-right: 5px;
|
||||
transition: all 0.5s;
|
||||
|
||||
a {
|
||||
color: var(--primary-color);
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.content-text {
|
||||
display: none;
|
||||
|
||||
span {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
.selection {
|
||||
background-color: #fabeb0;
|
||||
}
|
||||
|
||||
.arrow-icon {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
.desc-item {
|
||||
display: flex;
|
||||
background-color: #f6f5f6;
|
||||
padding: 5px 6px;
|
||||
border-radius: 3px;
|
||||
text-align: justify;
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
line-height: 20px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
&.open {
|
||||
.content {
|
||||
white-space: normal;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
max-height: 120px;
|
||||
}
|
||||
|
||||
.content-text {
|
||||
display: block;
|
||||
max-height: 100px;
|
||||
overflow: auto;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.arrow-icon {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
outline: solid 1px transparent;
|
||||
border-color: transparent;
|
||||
margin-left: 0px;
|
||||
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
|
||||
|
||||
.proofread-content {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.proofread-info {
|
||||
.replaced, .origin {
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.proofread-item-model {
|
||||
outline: solid 1px transparent;
|
||||
border-color: transparent;
|
||||
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
|
||||
}
|
||||
|
||||
.proofread-item-container {
|
||||
display: flex;
|
||||
overflow-x: hidden;
|
||||
max-width: 100%;
|
||||
border-bottom: 1px solid #F0F0F0;
|
||||
padding: var(--padding-size) 0;
|
||||
}
|
||||
|
||||
//
|
||||
.proofread-item {
|
||||
position: relative;
|
||||
padding: 0 var(--padding-size);
|
||||
font-size: var(--proofread-font-size);
|
||||
inset-inline-start: 10px;
|
||||
|
||||
&:last-child {
|
||||
.proofread-item-dot:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.proofread-item-container {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-info {
|
||||
position: relative;
|
||||
margin-inline-end: 0;
|
||||
margin-block-start: 0;
|
||||
margin-block-end: 0;
|
||||
line-height: 1.2;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
|
||||
.proofread-text {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&.has-tag {
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-tag {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
line-height: 19px;
|
||||
text-align: center;
|
||||
color: var(--item-type-color, #f00);
|
||||
margin-inline-start: 10px;
|
||||
margin-block-start: -1px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.text {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.origin-mode {
|
||||
color: #000;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
text-align: justify;
|
||||
font-family: -apple-system, Helvetica, Arial, "pingfang-sc", "micrsoft yahei", sans-serif;
|
||||
}
|
||||
|
||||
.arrow {
|
||||
color: rgba(119, 119, 119, 1);
|
||||
font-size: 10px;
|
||||
margin: 0 15px;
|
||||
|
||||
svg {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.replaced {
|
||||
background: rgba(255, 0, 0, 1);
|
||||
color: #fff;
|
||||
border-radius: 3px;
|
||||
display: block;
|
||||
padding: 4px 5px;
|
||||
line-height: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-item-dot {
|
||||
width: var(--timeline-width);
|
||||
position: absolute;
|
||||
top: 13px;
|
||||
bottom: -20px;
|
||||
left: -10px;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
inset-block-start: 10px;
|
||||
inset-inline-start: 6px;
|
||||
height: calc(100% - 10px);
|
||||
border-inline-start: 1px solid rgba(255, 133, 192, 1);
|
||||
}
|
||||
|
||||
.dot {
|
||||
width: var(--timeline-width);
|
||||
height: var(--timeline-width);
|
||||
border-radius: 50%;
|
||||
background: var(--item-type-color, #36cfc9);
|
||||
position: absolute;
|
||||
border: solid 3px #fff;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.actions {
|
||||
margin-inline-start: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
&:hover, &.active {
|
||||
.proofread-action {
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-action {
|
||||
visibility: hidden;
|
||||
display: flex;
|
||||
--btn-size: 20px;
|
||||
|
||||
&.processed {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.process-state-container {
|
||||
|
||||
}
|
||||
|
||||
.process-state-actions {
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
width: var(--btn-size);
|
||||
height: var(--btn-size);
|
||||
outline: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
padding: 0;
|
||||
color: #999;
|
||||
cursor: pointer;
|
||||
background: none;
|
||||
border: solid 1px transparent;
|
||||
border-radius: 4px;
|
||||
|
||||
&:not[disabled]:hover {
|
||||
color: #36CFC9;
|
||||
border-color: #36CFC9;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-accept {
|
||||
color: #36CFC9;
|
||||
border-color: #36CFC9;
|
||||
}
|
||||
|
||||
.btn-review {
|
||||
color: #9747FF;
|
||||
border-color: #9747FF;
|
||||
}
|
||||
|
||||
.btn-ignore {
|
||||
color: #fff;
|
||||
background-color: #D9D9D9;
|
||||
border-color: #D9D9D9;
|
||||
|
||||
&:not[disabled]:hover {
|
||||
color: #fff;
|
||||
background-color: #ccc;
|
||||
border-color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-add-to-lexicon {
|
||||
color: #D9D9D9;
|
||||
border-color: #D9D9D9;
|
||||
}
|
||||
|
||||
.btn-more {
|
||||
font-size: 10px;
|
||||
color: rgba(182, 182, 182, 1);
|
||||
background-color: rgba(245, 245, 245, 1);
|
||||
border-color: rgba(245, 245, 245, 1);
|
||||
}
|
||||
|
||||
// 已处理状态
|
||||
.process-state {
|
||||
display: flex;
|
||||
font-size: 12px;
|
||||
align-items: center;
|
||||
background-color: #f0f0f0;
|
||||
border-radius: 3px;
|
||||
padding: 0 4px;
|
||||
height: var(--btn-size);
|
||||
}
|
||||
|
||||
.state-accept {
|
||||
color: var(--primary-color-main, #08979C);
|
||||
}
|
||||
|
||||
.state-ignore {
|
||||
color: #C9C9C9;
|
||||
}
|
||||
|
||||
.ml-2 {
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
.rollback {
|
||||
border-radius: 4px;
|
||||
padding: 2px 4px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-hover-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.types {
|
||||
background: #f0f0f0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
top: var(--header-height);
|
||||
width: var(--type-width);
|
||||
|
||||
.item {
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
cursor: pointer;
|
||||
.count{
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
}
|
||||
&.active {
|
||||
background: #fff;
|
||||
box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.proofread-item{
|
||||
.action {
|
||||
.btn {
|
||||
background: #fff;
|
||||
outline: none;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: solid 1px var(--primary-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: var(--action-btn-radius);
|
||||
color: var(--primary-color);
|
||||
cursor: pointer;
|
||||
box-sizing: border-box;
|
||||
|
||||
&:disabled{
|
||||
background-color: var(--primary-disabled-color);
|
||||
border: solid 1px var(--primary-disabled-color);
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
&:not(:disabled):hover {
|
||||
background-color: var(--primary-color);
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
.btn-odd{
|
||||
background-color: var(--primary-color);
|
||||
color: #fff;
|
||||
&:hover {
|
||||
background-color: #fff;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
}
|
||||
.btn-review{
|
||||
.icon-type{
|
||||
transform: translateY(0.5px);
|
||||
}
|
||||
}
|
||||
.btn-accept {
|
||||
}
|
||||
|
||||
.btn-ignore {
|
||||
}
|
||||
|
||||
.more-action {
|
||||
box-sizing: border-box;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: var(--action-btn-radius);
|
||||
border: solid 1px var(--primary-color);
|
||||
background-color: var(--primary-color);
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
|
||||
&:hover {
|
||||
background-color: #fff;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
}
|
||||
|
||||
.btn-add-to-lexicon {
|
||||
}
|
||||
|
||||
.processed-wrapper {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.state-accept {
|
||||
color: var(--primary-process-color,#aaaaaa);
|
||||
margin-right: 12px;
|
||||
}
|
||||
.state-review{
|
||||
//color: #3FD4CF;
|
||||
}
|
||||
|
||||
.state-ignore {
|
||||
color: #C9C9C9;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.rollback {
|
||||
border-radius: 4px;
|
||||
padding: 2px 4px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-hover-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-popover.black-bg{
|
||||
//--antd-arrow-background-color: var(--primary-color);
|
||||
.ant-popover-inner{
|
||||
transform: translateY(1px);
|
||||
// background-color: var(--primary-color);
|
||||
padding: 5px 10px;
|
||||
// .ant-popover-inner-content{
|
||||
// color: #fff;
|
||||
// }
|
||||
}
|
||||
}
|