Compare commits
408 Commits
Author | SHA1 | Date |
---|---|---|
|
96d727c60f | |
|
78325d3fbd | |
|
482a7322bf | |
|
9e3205060a | |
|
a01534c6dc | |
|
3c43c688dd | |
|
a706dadaf8 | |
|
7a90768240 | |
|
1003b4ea23 | |
|
751aa30884 | |
|
a7f771da34 | |
|
b3479543c4 | |
|
de854e83bf | |
|
acdcd09214 | |
|
d329e5cc8c | |
|
2b2969e256 | |
|
72a47123b7 | |
|
5f48623204 | |
|
d37d9e4966 | |
|
fc82ce3ef9 | |
|
95d37fab45 | |
|
5657b2d806 | |
|
f5c0d8e28a | |
|
06ceddbd15 | |
|
8c578aa707 | |
|
0205552d92 | |
|
d1d003e7f4 | |
|
2a6abb3ad2 | |
|
b9958ebdb1 | |
|
082e35f9c5 | |
|
a14ffac2bd | |
|
e7b424885a | |
|
60b880930a | |
|
9864ee43c7 | |
|
7d14cda64c | |
|
93c5730c4c | |
|
08df9489a5 | |
|
e26c79cf23 | |
|
58e87b2416 | |
|
f8d55d7c0a | |
|
c8541786dd | |
|
5c6158377e | |
|
7778f37f02 | |
|
9155b554da | |
|
ea16bd847c | |
|
7c416e34ee | |
|
e440d52ebf | |
|
8a01cf3856 | |
|
8f8d4dbb08 | |
|
ef1f1ff326 | |
|
d649f22678 | |
|
aa121061d5 | |
|
261bfd443e | |
|
b6971a78d1 | |
|
d9a0c5b99e | |
|
3b3784aa37 | |
|
b29e602186 | |
|
ea06236cf9 | |
|
16e131d60e | |
|
f6cc1ecbf8 | |
|
fc8226e526 | |
|
70ae89dd70 | |
|
3604154c1c | |
|
f7213542c0 | |
|
c345857ce7 | |
|
8c06e14a40 | |
|
cdda19bfae | |
|
1fda12bdff | |
|
e23d807e0f | |
|
73fd57044f | |
|
85e5da3405 | |
|
5e838368cb | |
|
1b80070208 | |
|
6d1663f282 | |
|
c979a4cd92 | |
|
c50517a26c | |
|
7c736b0fd5 | |
|
ba6d050b71 | |
|
d280db235a | |
|
c127b5019b | |
|
3d4515c56f | |
|
e5c06edcee | |
|
c486fd61d9 | |
|
8f69fc9d45 | |
|
d9e6d81393 | |
|
fbcc9d5b85 | |
|
0183f4e6fd | |
|
28904c6768 | |
|
d07e2e8129 | |
|
060632dd82 | |
|
af47403143 | |
|
3d260f7134 | |
|
40cf397199 | |
|
b34bf8bb9e | |
|
6d5be9402c | |
|
dd32355b98 | |
|
5a580280a7 | |
|
3cdb0d62da | |
|
6443a6e929 | |
|
871964321d | |
|
3699296e63 | |
|
d27ddfe2f8 | |
|
425eca74a2 | |
|
8add9bb887 | |
|
c372d4a8dd | |
|
3bfbc3d61f | |
|
ff7b80ddbf | |
|
d00f1c5363 | |
|
81b0a5244e | |
|
0c4a9f260d | |
|
e2dd163efc | |
|
5880a4c36b | |
|
c9432db452 | |
|
04213e6d91 | |
|
002abc4774 | |
|
b22316d993 | |
|
cf6b67bf5a | |
|
4db7c1f325 | |
|
ac0c401534 | |
|
b26778ca05 | |
|
cad9b21562 | |
|
c0dbc27d5f | |
|
d2b8ce4b2c | |
|
e5653b4c56 | |
|
10f6cad6cb | |
|
a9d0d7ad46 | |
|
75953e6c1f | |
|
d5797bdb89 | |
|
c968a009b3 | |
|
f598a52789 | |
|
4635d42aa4 | |
|
bb93a26ed0 | |
|
dea174ab73 | |
|
898e4a5dd4 | |
|
082acc5ce8 | |
|
e31a2e2c91 | |
|
20986f1a1f | |
|
0b340003f3 | |
|
f3735dbced | |
|
7820a68145 | |
|
9a41479bec | |
|
411a84e564 | |
|
c02f15dc7b | |
|
248f3e1042 | |
|
be9e392ec7 | |
|
2536e68a0d | |
|
deca8b10fc | |
|
f32f647c11 | |
|
bf1d2ce0a7 | |
|
9d129fae53 | |
|
c093e4dd91 | |
|
6491e9d05d | |
|
e1a8ab5ade | |
|
bc4d6e14ca | |
|
2fbf85a62b | |
|
5fb316b69f | |
|
4c189dd5a4 | |
|
cb04fa4bca | |
|
76d3f1513b | |
|
98abe2de96 | |
|
4cbac781bd | |
|
24e5c71579 | |
|
8ccb8fefd5 | |
|
c9fb9f9f56 | |
|
6703fc0bd1 | |
|
cfca6bb5c1 | |
|
fd1d8c3f27 | |
|
4c06b239d9 | |
|
67cc8b2b32 | |
|
66eb3670f2 | |
|
b835425aed | |
|
94a0c70313 | |
|
b44bfe838c | |
|
815e830e30 | |
|
9b80dc0edc | |
|
71b00ac449 | |
|
8d889e30ea | |
|
e227a1a158 | |
|
c9104c62e3 | |
|
d4fb05d7d1 | |
|
20f9f2864d | |
|
cee68db1d3 | |
|
5b28d1cbea | |
|
849401501a | |
|
25e1882b4c | |
|
a5f0802170 | |
|
c0dc65db73 | |
|
1c6c543523 | |
|
41f8cfcd35 | |
|
e6cc6dbf52 | |
|
dc560902e3 | |
|
e4479a11ad | |
|
53193f94bb | |
|
f4ecf0425f | |
|
44d498c2dc | |
|
04fbf42be4 | |
|
55b1ed0d1e | |
|
a38dfefa84 | |
|
acb89e5bc1 | |
|
42f0beb605 | |
|
049a04bcc7 | |
|
ce126e5682 | |
|
ee3ac9904a | |
|
1a9f23ee0b | |
|
3540ec00ee | |
|
dedd2dc535 | |
|
674595d683 | |
|
24f70b0efb | |
|
3d0597c252 | |
|
72ff6d6f49 | |
|
d45a66a2fe | |
|
9f3b2b35b2 | |
|
b682453d76 | |
|
7978582c60 | |
|
716b388d46 | |
|
5a19e81931 | |
|
af69e57c4f | |
|
886fe18434 | |
|
19fb6e61f9 | |
|
a8853781c4 | |
|
c48a9130d7 | |
|
42e7f1f2c0 | |
|
a278edbd29 | |
|
c7162b09ce | |
|
f04e7b191b | |
|
4176ed29fc | |
|
45af87f1f6 | |
|
4dde6b7b36 | |
|
5be1fdd66a | |
|
55dc571444 | |
|
946004d476 | |
|
2aa0013846 | |
|
cba2a35f2f | |
|
f91232d0e0 | |
|
e40e1092e5 | |
|
3d7ce9ea79 | |
|
1492f4ce31 | |
|
a408dec2ef | |
|
e892f77673 | |
|
9490d7aa7c | |
|
b33a2cd67c | |
|
72cf2d257c | |
|
af4cfe9ff8 | |
|
7b08ca2043 | |
|
785a80f661 | |
|
abb4acb456 | |
|
80e68aeae4 | |
|
654d6bf001 | |
|
0d4b0152d3 | |
|
111be9687a | |
|
ffc70cbe29 | |
|
757686d4fa | |
|
1535514b0f | |
|
6cdfdf8da9 | |
|
d7a12c5a2a | |
|
e88f802800 | |
|
2bd827b5d2 | |
|
9988754739 | |
|
c5c077d1cb | |
|
5d0e06bc7b | |
|
44a2e7fb34 | |
|
355f842d06 | |
|
552f768190 | |
|
964a904cc1 | |
|
0ab4165788 | |
|
cee073cbc7 | |
|
011b937191 | |
|
4a39d7507b | |
|
044fd616b1 | |
|
6235eaf1ec | |
|
a1f7d8df78 | |
|
d07206d57d | |
|
a3d00eac91 | |
|
eaa5ad1167 | |
|
b02c67b7a3 | |
|
f8ebc6679b | |
|
467e9755fc | |
|
f312a55d7d | |
|
0b7801b302 | |
|
7dbe6f0e68 | |
|
70f43b3973 | |
|
8877bef239 | |
|
d3cfe40087 | |
|
9d75715d31 | |
|
72fe8bdc16 | |
|
d7bdc1849f | |
|
8c38750b3b | |
|
659f828a27 | |
|
a58b7b8b03 | |
|
dd887b0496 | |
|
30fbba6b6b | |
|
46650c7b71 | |
|
497177d521 | |
|
26a1acb114 | |
|
4a80de3acc | |
|
d563d23b07 | |
|
b0ba39d781 | |
|
7c8e5aac33 | |
|
355d94c1b5 | |
|
ad0b751737 | |
|
3346e22d2f | |
|
234f32caad | |
|
05c15aeb9a | |
|
1723b7d0ac | |
|
13c655fa1c | |
|
300608c53e | |
|
69e2d0cb35 | |
|
d641a73d5e | |
|
732c9c705f | |
|
4bd4b8eb20 | |
|
685a6db03e | |
|
f3790e1b68 | |
|
692c601235 | |
|
909bc281a9 | |
|
c6596db86c | |
|
8ed1dd28e1 | |
|
c62d6d3cc3 | |
|
727c7c414c | |
|
6b29ab9a30 | |
|
a2ad6bce52 | |
|
6de8e3c413 | |
|
445908a5e8 | |
|
73df61a0a0 | |
|
b8aadddcca | |
|
dcd93473ed | |
|
3a494c9bb2 | |
|
a0094c618a | |
|
396c18b2ff | |
|
6fa3c1aed7 | |
|
c55ea4a88e | |
|
55070225cc | |
|
725f4290c1 | |
|
d39ec4c92f | |
|
ec14b0557b | |
|
181d2e9d53 | |
|
48dda158ad | |
|
df400f758b | |
|
23ad592b40 | |
|
a0a14975af | |
|
5c1e1e427b | |
|
ea52f8e363 | |
|
4e2416fee1 | |
|
806f1fe08f | |
|
098dda6c65 | |
|
17ae99df01 | |
|
3fe8f4c6c3 | |
|
62b7274548 | |
|
0811adc4a9 | |
|
3535b0d6a8 | |
|
1cf74add92 | |
|
953f85ffc8 | |
|
7fcd920b52 | |
|
822d4add1f | |
|
88c5960665 | |
|
d27312f85b | |
|
f618dee734 | |
|
c7dd2063a6 | |
|
7352d2df76 | |
|
4e2e4c831f | |
|
deeaaa4ff4 | |
|
25e37adf01 | |
|
a440b1c265 | |
|
cfe27cd9a6 | |
|
7f0d164d4c | |
|
2667592b63 | |
|
c51bd4bc1e | |
|
0d67d70ff4 | |
|
b9a5b6479d | |
|
4bd3fdf5e3 | |
|
3f24b7a5dd | |
|
b0cd65d526 | |
|
7664525e84 | |
|
31ae5e42a7 | |
|
cf9af39a16 | |
|
286e8abc0a | |
|
38419e4369 | |
|
ac7ee58db2 | |
|
1c95a50d1c | |
|
9519000083 | |
|
3a787ef690 | |
|
10063c973d | |
|
b1e743282f | |
|
e2f8f6b72e | |
|
db2da78256 | |
|
0c877ddfeb | |
|
b0082e87da | |
|
6f7807a7ac | |
|
04384f6dc6 | |
|
cfa648dbe6 | |
|
77fa7476d8 | |
|
589f8e7132 | |
|
d8f63fa43b | |
|
8674561038 | |
|
fe56d910ae | |
|
72cf76c249 | |
|
73f42a722d | |
|
ecbb506578 | |
|
cafb381e80 | |
|
e9d43fbdfa | |
|
0bf42f74cf | |
|
eb8bb88d26 | |
|
cd7c5aa52d | |
|
8d96f8f34f | |
|
31f994df3b | |
|
8045c5535b | |
|
3f0d87a28d | |
|
aff4a1f7cc | |
|
9e4e5b8488 |
|
@ -35,7 +35,6 @@ nbbuild/
|
|||
dist/
|
||||
nbdist/
|
||||
.nb-gradle/
|
||||
*.css
|
||||
*.css.map
|
||||
|
||||
######################################################################
|
||||
|
@ -44,6 +43,7 @@ nbdist/
|
|||
*.xml.versionsBackup
|
||||
*.swp
|
||||
|
||||
|
||||
!*/build/*.java
|
||||
!*/build/*.html
|
||||
!*/build/*.xml
|
||||
!*/build/*.xml
|
53
README.md
|
@ -29,31 +29,34 @@
|
|||
## 系统模块
|
||||
|
||||
~~~
|
||||
com.ruoyi
|
||||
├── ruoyi-ui // 前端框架 [80]
|
||||
├── ruoyi-gateway // 网关模块 [8080]
|
||||
├── ruoyi-auth // 认证中心 [9200]
|
||||
├── ruoyi-rocketMQ // 消息队列 [9204]
|
||||
├── ruoyi-manage // 分库分表 [9205]
|
||||
├── ruoyi-api // 接口模块
|
||||
│ └── ruoyi-api-system // 系统接口
|
||||
├── ruoyi-common // 通用模块
|
||||
│ └── ruoyi-common-core // 核心模块
|
||||
│ └── ruoyi-common-datascope // 权限范围
|
||||
│ └── ruoyi-common-datasource // 多数据源
|
||||
│ └── ruoyi-common-log // 日志记录
|
||||
│ └── ruoyi-common-redis // 缓存服务
|
||||
│ └── ruoyi-common-seata // 分布式事务
|
||||
│ └── ruoyi-common-security // 安全模块
|
||||
│ └── ruoyi-common-swagger // 系统接口
|
||||
├── ruoyi-modules // 业务模块
|
||||
│ └── ruoyi-system // 系统模块 [9201]
|
||||
│ └── ruoyi-gen // 代码生成 [9202]
|
||||
│ └── ruoyi-job // 定时任务 [9203]
|
||||
│ └── ruoyi-file // 文件服务 [9300]
|
||||
├── ruoyi-visual // 图形化管理模块
|
||||
│ └── ruoyi-visual-monitor // 监控中心 [9100]
|
||||
├──pom.xml // 公共依赖
|
||||
com.yanzhu
|
||||
├── yanzhu-api // 接口模块
|
||||
│ └── yanzhu-api-system // 系统接口
|
||||
├── yanzhu-auth // 认证中心 [9200]
|
||||
├── yanzhu-common // 通用模块
|
||||
│ └── yanzhu-common-core // 核心模块
|
||||
│ └── yanzhu-common-datascope // 权限范围
|
||||
│ └── yanzhu-common-datasource // 多数据源
|
||||
│ └── yanzhu-common-log // 日志记录
|
||||
│ └── yanzhu-common-mapper // 数据映射
|
||||
│ └── yanzhu-common-redis // 缓存服务
|
||||
│ └── yanzhu-common-seata // 分布式事务
|
||||
│ └── yanzhu-common-security // 安全模块
|
||||
│ └── yanzhu-common-swagger // 系统接口
|
||||
├── yanzhu-gateway // 网关模块 [8080]
|
||||
├── yanzhu-modules // 业务模块
|
||||
│ └── yanzhu-system // 系统模块 [9201]
|
||||
│ └── yanzhu-manage // 业务模块 [9208]
|
||||
│ └── yanzhu-wechat // 微信模块 [9206]
|
||||
│ └── yanzhu-gen // 代码生成 [9202]
|
||||
│ └── yanzhu-job // 定时任务 [9203]
|
||||
│ └── yanzhu-file // 文件服务 [9300]
|
||||
│ └── yanzhu-flowable // 工作流服务 [9205]
|
||||
├── yanzhu-monitor // 监控中心 [9100]
|
||||
├── yanzhu-rocketMQ // 消息队列 [9207]
|
||||
├── yanzhu-ui-vue3 // 前端框架 [80]
|
||||
├── yanzhu-ui-app // 移动端
|
||||
├──pom.xml // 公共依赖
|
||||
~~~
|
||||
|
||||
由个人原因没有时间写文档 有不明白的地方朋友请加好友
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 清理工程target生成路径。
|
||||
echo [信息] 清理工程target生成路径。
|
||||
echo.
|
||||
|
||||
%~d0
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-auth/target/yanzhu-auth.jar
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-gateway/target/yanzhu-gateway.jar
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-file/target/yanzhu-modules-file.jar
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-gen/target/yanzhu-modules-gen.jar
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar ruoyi-modules/ruoyi-job/target/yanzhu-modules-job.jar
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-manage/target/yanzhu-modules-manage.jar
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-system/target/yanzhu-modules-system.jar
|
|
@ -0,0 +1 @@
|
|||
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar ruoyi-visual/ruoyi-monitor/target/yanzhu-visual-monitor.jar
|
|
@ -0,0 +1 @@
|
|||
mvn clean package -Dmaven.test.skip=true
|
|
@ -1,6 +1,6 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 打包Web工程,生成war/jar包文件。
|
||||
echo [信息] 打包Web工程,生成war/jar包文件。
|
||||
echo.
|
||||
|
||||
%~d0
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Auth工程。
|
||||
echo.
|
||||
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-auth/target
|
||||
cd ../yanzhu-auth/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-auth.jar
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-auth.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -1,14 +1,12 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Gateway工程。
|
||||
echo.
|
||||
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-gateway/target
|
||||
cd ../yanzhu-gateway/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-gateway.jar
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-gateway.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -1,14 +1,12 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Modules-File工程。
|
||||
echo.
|
||||
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-modules/ruoyi-file/target
|
||||
cd ../yanzhu-modules/yanzhu-file/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-file.jar
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-file.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -1,14 +1,11 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Modules-Gen工程。
|
||||
echo.
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-modules/ruoyi-gen/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-gen.jar
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-gen.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -1,14 +1,12 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Modules-Job工程。
|
||||
echo.
|
||||
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-modules/ruoyi-job/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-job.jar
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-job.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -0,0 +1,12 @@
|
|||
@echo off
|
||||
|
||||
|
||||
cd %~dp0
|
||||
cd ../yanzhu-modules/yanzhu-manage/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-manage.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -1,14 +1,12 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Modules-System工程。
|
||||
echo.
|
||||
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-modules/ruoyi-system/target
|
||||
cd ../yanzhu-modules/yanzhu-system/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-system.jar
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-system.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -1,14 +1,12 @@
|
|||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Monitor工程。
|
||||
echo.
|
||||
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-visual/ruoyi-monitor/target
|
||||
|
||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-visual-monitor.jar
|
||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-visual-monitor.jar
|
||||
|
||||
cd bin
|
||||
pause
|
|
@ -0,0 +1,4 @@
|
|||
start bin\run-auth.bat
|
||||
start bin\run-gateway.bat
|
||||
start bin\run-modules-system.bat
|
||||
start bin\run-modules-manage.bat
|
|
@ -14,28 +14,30 @@ cp ../sql/ry_config_20220510.sql ./mysql/db
|
|||
|
||||
# copy html
|
||||
echo "begin copy html "
|
||||
cp -r ../ruoyi-ui/dist/** ./nginx/html/dist
|
||||
|
||||
cp -r ../yanzhu-ui-vue3/dist/** ./nginx/html/dist
|
||||
|
||||
# copy jar
|
||||
echo "begin copy ruoyi-gateway "
|
||||
cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jar
|
||||
echo "begin copy yanzhu-gateway "
|
||||
cp ../yanzhu-gateway/target/yanzhu-gateway.jar ./yanzhu/gateway/jar
|
||||
|
||||
echo "begin copy ruoyi-auth "
|
||||
cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jar
|
||||
echo "begin copy yanzhu-auth "
|
||||
cp ../yanzhu-auth/target/yanzhu-auth.jar ./yanzhu/auth/jar
|
||||
|
||||
echo "begin copy ruoyi-visual "
|
||||
cp ../ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar ./ruoyi/visual/monitor/jar
|
||||
echo "begin copy yanzhu-visual "
|
||||
cp ../yanzhu-visual/yanzhu-monitor/target/yanzhu-visual-monitor.jar ./yanzhu/visual/monitor/jar
|
||||
|
||||
echo "begin copy ruoyi-modules-system "
|
||||
cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar
|
||||
echo "begin copy yanzhu-modules-system "
|
||||
cp ../yanzhu-modules/yanzhu-system/target/yanzhu-modules-system.jar ./yanzhu/modules/system/jar
|
||||
|
||||
echo "begin copy ruoyi-modules-file "
|
||||
cp ../ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar ./ruoyi/modules/file/jar
|
||||
echo "begin copy yanzhu-modules-manage "
|
||||
cp ../yanzhu-modules/yanzhu-manage/target/yanzhu-modules-manage.jar ./yanzhu/modules/manage/jar
|
||||
|
||||
echo "begin copy ruoyi-modules-job "
|
||||
cp ../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar ./ruoyi/modules/job/jar
|
||||
echo "begin copy yanzhu-modules-file "
|
||||
cp ../yanzhu-modules/yanzhu-file/target/yanzhu-modules-file.jar ./yanzhu/modules/file/jar
|
||||
|
||||
echo "begin copy ruoyi-modules-gen "
|
||||
cp ../ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar ./ruoyi/modules/gen/jar
|
||||
echo "begin copy yanzhu-modules-job "
|
||||
cp ../yanzhu-modules/yanzhu-job/target/yanzhu-modules-job.jar ./yanzhu/modules/job/jar
|
||||
|
||||
echo "begin copy yanzhu-modules-gen "
|
||||
cp ../yanzhu-modules/yanzhu-gen/target/yanzhu-modules-gen.jar ./yanzhu/modules/gen/jar
|
||||
|
||||
|
|
|
@ -0,0 +1,246 @@
|
|||
##全部,根据finishTime判断代办,已办
|
||||
DROP view vw_flow_all;
|
||||
CREATE VIEW vw_flow_all AS (
|
||||
SELECT
|
||||
RES.ID_ AS procInsId,
|
||||
DEF.DEPLOYMENT_ID_ AS deployId,
|
||||
RES.START_TIME_ AS createTime,
|
||||
RES.END_TIME_ AS finishTime,
|
||||
CASE
|
||||
WHEN RES.END_TIME_ IS NULL THEN
|
||||
TIMESTAMPDIFF(
|
||||
MINUTE,
|
||||
RES.START_TIME_,
|
||||
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S')
|
||||
)
|
||||
ELSE
|
||||
TIMESTAMPDIFF(
|
||||
MINUTE,
|
||||
RES.START_TIME_,
|
||||
RES.END_TIME_
|
||||
)
|
||||
END AS duration,
|
||||
DEF.NAME_ AS procDefName,
|
||||
DEF.VERSION_ AS procDefVersion,
|
||||
DEF.CATEGORY_ AS category,
|
||||
DEF.KEY_ AS procDefKey,
|
||||
v1.TEXT_ AS startUserId,
|
||||
v2.TEXT_ AS startUserName,
|
||||
v3.TEXT_ AS startDeptName,
|
||||
v4.TEXT_ AS startComId,
|
||||
v5.TEXT_ AS startComName,
|
||||
v6.TEXT_ AS startProId,
|
||||
v7.TEXT_ AS startProName,
|
||||
v8.TEXT_ AS businessKey,
|
||||
RES.PROC_INST_ID_,
|
||||
IFNULL(hr.ID_,ht.taskId) as taskId,
|
||||
IFNULL(hr.NAME_,ht.taskName) as taskName,
|
||||
IF(hr.ID_ IS NULL, ht.assigneeId, tu.user_id) as assigneeId,
|
||||
IF(hr.ID_ IS NULL, ht.assigneeName, tu.nick_name) as assigneeName,
|
||||
IF(hr.ID_ IS NULL, ht.assigneeDeptName, td.dept_name) as assigneeDeptName,
|
||||
IF(hr.ID_ IS NULL, ht.taskComType, 0) as taskComType
|
||||
FROM
|
||||
ACT_HI_PROCINST RES
|
||||
LEFT JOIN ACT_RE_PROCDEF DEF ON RES.PROC_DEF_ID_ = DEF.ID_
|
||||
LEFT JOIN act_hi_varinst v1 ON v1.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v1.NAME_ = 'INITIATOR'
|
||||
LEFT JOIN act_hi_varinst v2 ON v2.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v2.NAME_ = 'userName'
|
||||
LEFT JOIN act_hi_varinst v3 ON v3.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v3.NAME_ = 'userDeptName'
|
||||
LEFT JOIN act_hi_varinst v4 ON v4.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v4.NAME_ = 'comId'
|
||||
LEFT JOIN act_hi_varinst v5 ON v5.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v5.NAME_ = 'comName'
|
||||
LEFT JOIN act_hi_varinst v6 ON v6.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v6.NAME_ = 'proId'
|
||||
LEFT JOIN act_hi_varinst v7 ON v7.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v7.NAME_ = 'proName'
|
||||
LEFT JOIN act_hi_varinst v8 ON v8.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v8.NAME_ = 'businessKey'
|
||||
LEFT JOIN act_ru_task hr ON hr.PROC_INST_ID_ = RES.PROC_INST_ID_
|
||||
LEFT JOIN act_ru_actinst ra ON ra.TASK_ID_ = hr.ID_ AND ra.PROC_INST_ID_ = RES.PROC_INST_ID_
|
||||
LEFT JOIN sys_user tu ON tu.user_id = ra.ASSIGNEE_
|
||||
LEFT JOIN sys_dept td ON td.dept_id = tu.dept_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ht.ID_ AS taskId,
|
||||
ht.NAME_ AS taskName,
|
||||
tu.user_id AS assigneeId,
|
||||
tu.nick_name AS assigneeName,
|
||||
td.dept_name AS assigneeDeptName,
|
||||
ht.PROC_INST_ID_,
|
||||
ahc.TYPE_ as taskComType
|
||||
FROM
|
||||
act_hi_taskinst ht
|
||||
LEFT JOIN sys_user tu ON tu.user_id = ht.ASSIGNEE_
|
||||
LEFT JOIN sys_dept td ON td.dept_id = tu.dept_id
|
||||
left join act_hi_comment ahc on ahc.TASK_ID_ = ht.ID_ AND ahc.PROC_INST_ID_ is not NULL
|
||||
WHERE
|
||||
ht.ID_ IN (
|
||||
SELECT
|
||||
MAX(ID_)
|
||||
FROM
|
||||
act_hi_taskinst
|
||||
GROUP BY
|
||||
PROC_INST_ID_
|
||||
)
|
||||
GROUP BY ht.PROC_INST_ID_
|
||||
) ht ON ht.PROC_INST_ID_ = RES.PROC_INST_ID_
|
||||
)
|
||||
|
||||
##待办
|
||||
DROP view vw_flow_await;
|
||||
CREATE VIEW vw_flow_await AS (
|
||||
SELECT
|
||||
RES.ID_ AS taskId,
|
||||
RES.NAME_ AS taskName,
|
||||
re.ID_ AS procInsId,
|
||||
DEF.DEPLOYMENT_ID_ AS deployId,
|
||||
DATE_FORMAT(re.START_TIME_, '%Y-%m-%d %H:%i:%S') AS createTime,
|
||||
TIMESTAMPDIFF(
|
||||
MINUTE,
|
||||
re.START_TIME_,
|
||||
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S')
|
||||
) AS duration,
|
||||
DEF.NAME_ AS procDefName,
|
||||
DEF.VERSION_ AS procDefVersion,
|
||||
DEF.CATEGORY_ AS category,
|
||||
DEF.KEY_ AS procDefKey,
|
||||
v1.TEXT_ AS startUserId,
|
||||
v2.TEXT_ AS startUserName,
|
||||
v3.TEXT_ AS startDeptName,
|
||||
v4.TEXT_ AS startComId,
|
||||
v5.TEXT_ AS startComName,
|
||||
v6.TEXT_ AS startProId,
|
||||
v7.TEXT_ AS startProName,
|
||||
v8.TEXT_ AS businessKey,
|
||||
RES.SUSPENSION_STATE_,
|
||||
RES.ASSIGNEE_,
|
||||
LINK.USER_ID_,
|
||||
LINK.GROUP_ID_
|
||||
FROM
|
||||
ACT_RU_TASK RES
|
||||
LEFT JOIN act_ru_execution re ON re.PARENT_ID_ IS NULL AND re.PROC_INST_ID_ = RES.PROC_INST_ID_
|
||||
LEFT OUTER JOIN ACT_RE_PROCDEF DEF ON re.PROC_DEF_ID_ = DEF.ID_
|
||||
LEFT JOIN act_hi_varinst v1 ON v1.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v1.NAME_ = 'INITIATOR'
|
||||
LEFT JOIN act_hi_varinst v2 ON v2.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v2.NAME_ = 'userName'
|
||||
LEFT JOIN act_hi_varinst v3 ON v3.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v3.NAME_ = 'userDeptName'
|
||||
LEFT JOIN act_hi_varinst v4 ON v4.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v4.NAME_ = 'comId'
|
||||
LEFT JOIN act_hi_varinst v5 ON v5.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v5.NAME_ = 'comName'
|
||||
LEFT JOIN act_hi_varinst v6 ON v6.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v6.NAME_ = 'proId'
|
||||
LEFT JOIN act_hi_varinst v7 ON v7.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v7.NAME_ = 'proName'
|
||||
LEFT JOIN act_hi_varinst v8 ON v8.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v8.NAME_ = 'businessKey'
|
||||
LEFT JOIN ACT_RU_IDENTITYLINK LINK on LINK.TASK_ID_ = RES.ID_ AND LINK.TYPE_ = 'candidate'
|
||||
WHERE
|
||||
RES.SUSPENSION_STATE_ = 1)
|
||||
##下面是当前登录人代办查询条件
|
||||
-- AND (
|
||||
-- RES.ASSIGNEE_ = 1
|
||||
-- OR (
|
||||
-- RES.ASSIGNEE_ IS NULL
|
||||
-- AND EXISTS (
|
||||
-- SELECT
|
||||
-- LINK.ID_
|
||||
-- FROM
|
||||
-- ACT_RU_IDENTITYLINK LINK
|
||||
-- WHERE
|
||||
-- LINK.TASK_ID_ = RES.ID_
|
||||
-- AND LINK.TYPE_ = 'candidate'
|
||||
-- AND (
|
||||
-- LINK.USER_ID_ = 1
|
||||
-- OR (
|
||||
-- LINK.GROUP_ID_ IN (1, 42, 45, 46)
|
||||
-- )
|
||||
-- )
|
||||
-- )
|
||||
-- )
|
||||
-- )
|
||||
|
||||
##审批意见
|
||||
DROP view vw_flow_comment;
|
||||
CREATE VIEW vw_flow_comment AS (
|
||||
SELECT
|
||||
hc.ID_ AS commentId,
|
||||
hc.TYPE_ AS commentType,
|
||||
ht.ID_ AS taskId,
|
||||
ht.NAME_ AS taskName,
|
||||
ht.REV_ AS rev,
|
||||
CASE
|
||||
WHEN hc.TYPE_ = 1 and ht.NAME_ !='提交申请' THEN
|
||||
'通过'
|
||||
WHEN hc.TYPE_ = 2 THEN
|
||||
'退回'
|
||||
WHEN hc.TYPE_ = 3 THEN
|
||||
'驳回'
|
||||
WHEN hc.TYPE_ = 4 THEN
|
||||
'委派'
|
||||
WHEN hc.TYPE_ = 5 THEN
|
||||
'转办'
|
||||
WHEN hc.TYPE_ = 6 THEN
|
||||
'终止'
|
||||
WHEN hc.TYPE_ = 7 THEN
|
||||
'撤回'
|
||||
END AS commentResult,
|
||||
ht.PROC_INST_ID_ AS procInstId,
|
||||
ht.TASK_DEF_KEY_ AS taskDefKey,
|
||||
ht.EXECUTION_ID_ AS executionId,
|
||||
ht.DELETE_REASON_ AS deleteReason,
|
||||
DATE_FORMAT(
|
||||
ht.START_TIME_,
|
||||
'%Y-%m-%d %H:%i:%S'
|
||||
) AS startTime,
|
||||
DATE_FORMAT(
|
||||
ht.END_TIME_,
|
||||
'%Y-%m-%d %H:%i:%S'
|
||||
) AS endTime,
|
||||
ht.DURATION_ AS duration,
|
||||
hc.MESSAGE_ AS message,
|
||||
ru.nick_name AS assigneeName,
|
||||
IF(ru.dept_id IS NOT NULL, rd.dept_name, ru.remark) as deptName,
|
||||
sr.role_name as candidate
|
||||
FROM
|
||||
act_hi_taskinst ht
|
||||
LEFT JOIN act_hi_comment hc ON hc.TASK_ID_ = ht.ID_ or (hc.TASK_ID_ is null and hc.PROC_INST_ID_ = ht.PROC_INST_ID_)
|
||||
LEFT JOIN act_hi_identitylink hi on hi.TASK_ID_ = ht.ID_ and hi.TYPE_ = 'candidate'
|
||||
left JOIN sys_role sr on sr.role_id = hi.group_Id_
|
||||
LEFT JOIN sys_user ru ON ru.user_id = ht.ASSIGNEE_
|
||||
LEFT JOIN sys_dept rd ON rd.dept_id = ru.dept_id
|
||||
where hc.TYPE_ is null or hc.TYPE_!='event')
|
||||
|
||||
##已办
|
||||
DROP view vw_flow_finished;
|
||||
CREATE VIEW vw_flow_finished AS (
|
||||
SELECT
|
||||
RES.ID_ AS taskId,
|
||||
RES.NAME_ AS taskName,
|
||||
RES.PROC_INST_ID_ AS procInsId,
|
||||
pd.DEPLOYMENT_ID_ as deployId,
|
||||
DATE_FORMAT(RES.START_TIME_, '%Y-%m-%d %H:%i:%S') AS createTime,
|
||||
DATE_FORMAT(RES.END_TIME_, '%Y-%m-%d %H:%i:%S') AS endTime,
|
||||
TIMESTAMPDIFF(
|
||||
MINUTE,
|
||||
res.START_TIME_,
|
||||
RES.END_TIME_
|
||||
) AS duration,
|
||||
DEF.END_TIME_ as finishTime,
|
||||
pd.NAME_ AS procDefName,
|
||||
pd.CATEGORY_ AS category,
|
||||
pd.KEY_ AS procDefKey,
|
||||
v1.TEXT_ AS startUserId,
|
||||
v2.TEXT_ AS startUserName,
|
||||
v3.TEXT_ AS startDeptName,
|
||||
v4.TEXT_ AS startComId,
|
||||
v5.TEXT_ AS startComName,
|
||||
v6.TEXT_ AS startProId,
|
||||
v7.TEXT_ AS startProName,
|
||||
v8.TEXT_ AS businessKey,
|
||||
RES.ASSIGNEE_,
|
||||
ahc.TYPE_ as taskComType
|
||||
FROM
|
||||
act_hi_taskinst RES
|
||||
LEFT OUTER JOIN act_hi_procinst DEF ON RES.PROC_INST_ID_ = DEF.PROC_INST_ID_
|
||||
LEFT OUTER join act_re_procdef pd on RES.PROC_DEF_ID_ = pd.ID_
|
||||
LEFT JOIN act_hi_varinst v1 ON v1.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v1.NAME_ = 'INITIATOR'
|
||||
LEFT JOIN act_hi_varinst v2 ON v2.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v2.NAME_ = 'userName'
|
||||
LEFT JOIN act_hi_varinst v3 ON v3.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v3.NAME_ = 'userDeptName'
|
||||
LEFT JOIN act_hi_varinst v4 ON v4.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v4.NAME_ = 'comId'
|
||||
LEFT JOIN act_hi_varinst v5 ON v5.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v5.NAME_ = 'comName'
|
||||
LEFT JOIN act_hi_varinst v6 ON v6.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v6.NAME_ = 'proId'
|
||||
LEFT JOIN act_hi_varinst v7 ON v7.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v7.NAME_ = 'proName'
|
||||
LEFT JOIN act_hi_varinst v8 ON v8.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v8.NAME_ = 'businessKey'
|
||||
left join act_hi_comment ahc on ahc.TASK_ID_ = RES.ID_ AND ahc.PROC_INST_ID_ is not NULL
|
||||
WHERE
|
||||
RES.ASSIGNEE_ is not null and RES.END_TIME_ is not null)
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"name": "YZProjectCloud",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {}
|
||||
}
|
119
pom.xml
|
@ -28,13 +28,24 @@
|
|||
<pagehelper.boot.version>1.4.6</pagehelper.boot.version>
|
||||
<druid.version>1.2.16</druid.version>
|
||||
<dynamic-ds.version>3.5.2</dynamic-ds.version>
|
||||
<commons.io.version>2.11.0</commons.io.version>
|
||||
<commons.io.version>2.16.1</commons.io.version>
|
||||
<org.projectlombok>1.18.16</org.projectlombok>
|
||||
<velocity.version>2.3</velocity.version>
|
||||
<fastjson.version>2.0.23</fastjson.version>
|
||||
<jjwt.version>0.9.1</jjwt.version>
|
||||
<minio.version>8.2.2</minio.version>
|
||||
<poi.version>4.1.2</poi.version>
|
||||
<poi.version>5.3.0</poi.version>
|
||||
<pinyin4j.version>2.5.1</pinyin4j.version>
|
||||
<weixin.mp.version>4.0.6.B</weixin.mp.version>
|
||||
<weixin.miniapp.version>4.0.6.B</weixin.miniapp.version>
|
||||
<transmittable-thread-local.version>2.14.2</transmittable-thread-local.version>
|
||||
<hutool.version>5.8.20</hutool.version>
|
||||
<aspectjweaver.version>1.9.1</aspectjweaver.version>
|
||||
<lowagie.version>2.1.7</lowagie.version>
|
||||
<poi-tl.version>1.12.0</poi-tl.version>
|
||||
<lowagie.iTextAsian.version>1.0</lowagie.iTextAsian.version>
|
||||
<itextpdf.version>5.5.13</itextpdf.version>
|
||||
<aspose.words.version>15.8.0</aspose.words.version>
|
||||
</properties>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
|
@ -115,6 +126,57 @@
|
|||
<version>${poi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 生成pdf-->
|
||||
<dependency>
|
||||
<groupId>com.lowagie</groupId>
|
||||
<artifactId>itext</artifactId>
|
||||
<version>${lowagie.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.lowagie</groupId>
|
||||
<artifactId>itext-rtf</artifactId>
|
||||
<version>${lowagie.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.lowagie</groupId>
|
||||
<artifactId>iTextAsian</artifactId>
|
||||
<version>${lowagie.iTextAsian.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--根据word模板生成word文件-->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>${poi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml-schemas</artifactId>
|
||||
<version>4.1.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.deepoove</groupId>
|
||||
<artifactId>poi-tl</artifactId>
|
||||
<version>${poi-tl.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--word文件转化为PDF文件-->
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjweaver</artifactId>
|
||||
<version>${aspectjweaver.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.aspose</groupId>
|
||||
<artifactId>aspose-words</artifactId>
|
||||
<version>${aspose.words.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 代码生成使用模板 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.velocity</groupId>
|
||||
|
@ -143,6 +205,27 @@
|
|||
<version>${transmittable-thread-local.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Belerweb Pinyin4j -->
|
||||
<dependency>
|
||||
<groupId>com.belerweb</groupId>
|
||||
<artifactId>pinyin4j</artifactId>
|
||||
<version>${pinyin4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 微信公众号 -->
|
||||
<dependency>
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-mp</artifactId>
|
||||
<version>${weixin.mp.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 微信小程序 -->
|
||||
<dependency>
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-miniapp</artifactId>
|
||||
<version>${weixin.miniapp.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 核心模块 -->
|
||||
<dependency>
|
||||
<groupId>com.yanzhu</groupId>
|
||||
|
@ -178,13 +261,6 @@
|
|||
<version>${yanzhu.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 分布式事务 -->
|
||||
<dependency>
|
||||
<groupId>com.yanzhu</groupId>
|
||||
<artifactId>yanzhu-common-seata</artifactId>
|
||||
<version>${yanzhu.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 日志记录 -->
|
||||
<dependency>
|
||||
<groupId>com.yanzhu</groupId>
|
||||
|
@ -206,6 +282,12 @@
|
|||
<version>${yanzhu.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.sf.mpxj</groupId>
|
||||
<artifactId>mpxj</artifactId>
|
||||
<version>13.0.2</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
@ -217,8 +299,6 @@
|
|||
<module>yanzhu-modules</module>
|
||||
<module>yanzhu-monitor</module>
|
||||
<module>yanzhu-rocketmq</module>
|
||||
<module>yanzhu-modules/yanzhu-wechat</module>
|
||||
<module>yanzhu-modules/yanzhu-manage</module>
|
||||
</modules>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
|
@ -292,6 +372,14 @@
|
|||
<profiles.active>本地服务器环境</profiles.active>
|
||||
<discovery.server-addr>62.234.3.186:8848</discovery.server-addr>
|
||||
</properties>
|
||||
|
||||
</profile>
|
||||
<profile>
|
||||
<id>测试服务器环境</id>
|
||||
<properties>
|
||||
<profiles.active>测试服务器环境</profiles.active>
|
||||
<discovery.server-addr>62.234.3.186:8848</discovery.server-addr>
|
||||
</properties>
|
||||
<!-- 默认环境 -->
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
|
@ -304,14 +392,7 @@
|
|||
<discovery.server-addr>0.0.0.0:8848</discovery.server-addr>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>测试服务器环境</id>
|
||||
<properties>
|
||||
<profiles.active>测试服务器环境</profiles.active>
|
||||
<discovery.server-addr>62.234.3.186:8848</discovery.server-addr>
|
||||
</properties>
|
||||
</profile>
|
||||
<!-- docker环境打包-->
|
||||
<!-- docker环境打包 -->
|
||||
<profile>
|
||||
<id>docker测试环境1</id>
|
||||
<properties>
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package com.yanzhu.system.api;
|
||||
|
||||
import com.yanzhu.common.core.constant.SecurityConstants;
|
||||
import com.yanzhu.common.core.constant.ServiceNameConstants;
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.system.api.domain.SysDept;
|
||||
import com.yanzhu.system.api.factory.RemoteDeptFallbackFactory;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
/**
|
||||
* 部门服务
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteDeptFallbackFactory.class)
|
||||
public interface RemoteDeptService
|
||||
{
|
||||
|
||||
/**
|
||||
* 通过部门主键查询部门信息
|
||||
*
|
||||
* @param deptId 部门主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/dept/info/{deptId}")
|
||||
public R<SysDept> getDeptInfo(@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
}
|
|
@ -2,6 +2,7 @@ package com.yanzhu.system.api;
|
|||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestPart;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
@ -26,4 +27,24 @@ public interface RemoteFileService
|
|||
*/
|
||||
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file);
|
||||
|
||||
/**
|
||||
* 指定上传文件
|
||||
* @param proPackage 项目包
|
||||
* @param dirs 目录
|
||||
* @param file 文件
|
||||
* @return
|
||||
*/
|
||||
@PostMapping(value = "/upload/{proPackage}/dirs/{dirs}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public R<SysFile> dirsUploadFile(@PathVariable("proPackage") String proPackage, @PathVariable("dirs") String dirs, @RequestPart(value = "file") MultipartFile file);
|
||||
|
||||
/**
|
||||
* 指定上传文件
|
||||
* @param proPackage 项目包
|
||||
* @param dirs 目录
|
||||
* @param file 文件
|
||||
* @return
|
||||
*/
|
||||
@PostMapping(value = "/upload/{proPackage}/dirs/{dirs}/date/{datePath}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public R<SysFile> dirDatePathUploadFile(@PathVariable("proPackage") String proPackage, @PathVariable("dirs") String dirs, @PathVariable("datePath") String datePath, @RequestPart(value = "file") MultipartFile file);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
package com.yanzhu.system.api;
|
||||
|
||||
import com.yanzhu.common.core.constant.SecurityConstants;
|
||||
import com.yanzhu.common.core.constant.ServiceNameConstants;
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.common.core.web.domain.AjaxResult;
|
||||
import com.yanzhu.system.api.factory.RemoteFlowFallbackFactory;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 工作流服务
|
||||
*
|
||||
* @author JiangYuQi
|
||||
*/
|
||||
@FeignClient(contextId = "remoteFlowService", value = ServiceNameConstants.FLOWABLE_SERVICE, fallbackFactory = RemoteFlowFallbackFactory.class)
|
||||
public interface RemoteFlowService {
|
||||
|
||||
/**
|
||||
* 发起流程
|
||||
*
|
||||
* @param procDefId 流程Id
|
||||
* @param variables 表单信息
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/definition/startByParams/{procDefId}")
|
||||
public R<AjaxResult> startDefinitionByParams(@PathVariable("procDefId") String procDefId, @RequestBody Map<String, Object> variables, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
package com.yanzhu.system.api;
|
||||
|
||||
import com.yanzhu.common.core.constant.SecurityConstants;
|
||||
import com.yanzhu.common.core.constant.ServiceNameConstants;
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.common.core.web.domain.AjaxResult;
|
||||
import com.yanzhu.system.api.factory.RemoteProFallbackFactory;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 项目服务
|
||||
*
|
||||
* @author JiangYuQi
|
||||
*/
|
||||
@FeignClient(contextId = "remoteProService", value = ServiceNameConstants.MANAGE_SERVICE, fallbackFactory = RemoteProFallbackFactory.class)
|
||||
public interface RemoteProService
|
||||
{
|
||||
|
||||
/**
|
||||
* 项目详情
|
||||
*
|
||||
* @param id 项目主键
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping(value = "/proProjectInfo/info/{id}")
|
||||
public R<Map<String,Object>> info(@PathVariable("id") Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 单位人员审批通过信息同步
|
||||
*
|
||||
* @param busKey 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/proProjectInfoSubdeptsUsers/approveSubDeptsUser/{busKey}")
|
||||
public R<AjaxResult> approveSubDeptsUser(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 公司安全承诺书文件签名章
|
||||
*
|
||||
* @param busKey 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/proProjectInfoSubdeptsUsers/subDeptsUserComSign/{busKey}")
|
||||
public R<AjaxResult> subDeptsUserComSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 项目安全承诺书文件签名章
|
||||
*
|
||||
* @param busKey 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/proProjectInfoSubdeptsUsers/subDeptsUserProSign/{busKey}")
|
||||
public R<AjaxResult> subDeptsUserProSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 班组安全承诺书文件签名章
|
||||
*
|
||||
* @param busKey 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/proProjectInfoSubdeptsUsers/subDeptsUserGroSign/{busKey}")
|
||||
public R<AjaxResult> subDeptsUserGroSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 查询公司安全承诺书文件签名章
|
||||
*
|
||||
* @param busKey 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/proProjectInfoSubdeptsUsers/findUserComSign/{busKey}")
|
||||
public R<Boolean> findUserComSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 查询项目安全承诺书文件签名章
|
||||
*
|
||||
* @param busKey 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/proProjectInfoSubdeptsUsers/findUserProSign/{busKey}")
|
||||
public R<Boolean> findUserProSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 查询班组安全承诺书文件签名章
|
||||
*
|
||||
* @param busKey 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/proProjectInfoSubdeptsUsers/findUserGroSign/{busKey}")
|
||||
public R<Boolean> findUserGroSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 系统人员添加修改信息同步
|
||||
*
|
||||
* @param data 业务主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/proProjectInfoSubdeptsUsers/syspushSubDeptsUser")
|
||||
public R<AjaxResult> syspushSubDeptsUser(Map<String, Object> data, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.yanzhu.system.api;
|
||||
|
||||
import com.yanzhu.common.core.constant.SecurityConstants;
|
||||
import com.yanzhu.common.core.constant.ServiceNameConstants;
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.system.api.domain.SysRole;
|
||||
import com.yanzhu.system.api.factory.RemoteRoleFallbackFactory;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
/**
|
||||
* 用户服务
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@FeignClient(contextId = "remoteRoleService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteRoleFallbackFactory.class)
|
||||
public interface RemoteRoleService
|
||||
{
|
||||
|
||||
/**
|
||||
* 通过用户主键查询角色信息
|
||||
*
|
||||
* @param roleId 角色主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/role/info/{roleId}")
|
||||
public R<SysRole> getRoleInfo(@PathVariable("roleId") Long roleId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
}
|
|
@ -1,18 +1,19 @@
|
|||
package com.yanzhu.system.api;
|
||||
|
||||
import com.yanzhu.system.api.domain.SysUserUniopen;
|
||||
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
|
||||
import com.yanzhu.system.api.model.LoginUser;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import com.yanzhu.common.core.constant.SecurityConstants;
|
||||
import com.yanzhu.common.core.constant.ServiceNameConstants;
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.system.api.domain.SysUser;
|
||||
import com.yanzhu.system.api.factory.RemoteUserFallbackFactory;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 用户服务
|
||||
*
|
||||
|
@ -21,6 +22,53 @@ import com.yanzhu.system.api.factory.RemoteUserFallbackFactory;
|
|||
@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class)
|
||||
public interface RemoteUserService
|
||||
{
|
||||
/**
|
||||
* 获取小程序授权
|
||||
* @param code 授权码
|
||||
* @param source 请求来源
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/sysUserUniopen/getMaOpenId/{code}")
|
||||
public R<Map<String,Object>> getMaOpenId(@PathVariable("code") String code, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 获取小程序手机号
|
||||
* @param body 加密参数
|
||||
* @param source 请求来源
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/sysUserUniopen/getMaPhoneNumber")
|
||||
public R<Map<String,Object>> getMaPhoneNumber(@RequestBody WxMaLoginBody body, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 查询小程序授权
|
||||
* @param maOpenId 小程序授权id
|
||||
* @param source 请求来源
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/sysUserUniopen/findByMaOpenId/{maOpenId}")
|
||||
public R<SysUserUniopen> findByMaOpenId(@PathVariable("maOpenId") String maOpenId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 新增小程序唯一授权
|
||||
*
|
||||
* @param sysUserUniopen 小程序授权信息
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/sysUserUniopen/add")
|
||||
public R<Integer> addSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 修改小程序唯一授权
|
||||
*
|
||||
* @param sysUserUniopen 小程序授权信息
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@PutMapping("/sysUserUniopen/edit")
|
||||
public R<Integer> editSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 通过用户名查询用户信息
|
||||
*
|
||||
|
@ -31,6 +79,27 @@ public interface RemoteUserService
|
|||
@GetMapping("/user/info/{username}")
|
||||
public R<LoginUser> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 通过用户名查询用户信息
|
||||
*
|
||||
* @param username 用户名
|
||||
* @param deptId 公司主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/user/infoAndDept/{username}/{deptId}")
|
||||
public R<LoginUser> getUserInfo(@PathVariable("username") String username,@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 通过用户主键查询用户信息
|
||||
*
|
||||
* @param userId 用户主键
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@GetMapping("/user/sysUser/{userId}")
|
||||
public R<SysUser> getSysUserInfo(@PathVariable("userId") Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 注册用户信息
|
||||
*
|
||||
|
@ -39,5 +108,24 @@ public interface RemoteUserService
|
|||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/user/register")
|
||||
public R<Boolean> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
public R<Long> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 删除用户角色
|
||||
*
|
||||
* @param sysUser 用户信息
|
||||
* @param source 请求来源
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/user/removeUserRoles")
|
||||
public R<Long> removeUserRoles(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 修改用户信息
|
||||
* @param sysUser
|
||||
* @param source
|
||||
* @return
|
||||
*/
|
||||
@PutMapping("/user")
|
||||
public R<Long> updateUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
}
|
||||
|
|
|
@ -19,9 +19,15 @@ public class SysDept extends BaseEntity
|
|||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 项目单位... */
|
||||
public static final String XMDW = "4";
|
||||
|
||||
/** 部门ID */
|
||||
private Long deptId;
|
||||
|
||||
/** 公司编号 */
|
||||
private Long comId;
|
||||
|
||||
/** 父部门ID */
|
||||
private Long parentId;
|
||||
|
||||
|
@ -31,6 +37,18 @@ public class SysDept extends BaseEntity
|
|||
/** 部门名称 */
|
||||
private String deptName;
|
||||
|
||||
/** 部门简称 */
|
||||
private String deptShortName;
|
||||
|
||||
/** 部门简称 */
|
||||
private String deptCode;
|
||||
|
||||
/** 部门详情 */
|
||||
private String deptType;
|
||||
|
||||
/** 部门详情 */
|
||||
private String deptInfos;
|
||||
|
||||
/** 显示顺序 */
|
||||
private Integer orderNum;
|
||||
|
||||
|
@ -65,6 +83,14 @@ public class SysDept extends BaseEntity
|
|||
this.deptId = deptId;
|
||||
}
|
||||
|
||||
public Long getComId() {
|
||||
return comId;
|
||||
}
|
||||
|
||||
public void setComId(Long comId) {
|
||||
this.comId = comId;
|
||||
}
|
||||
|
||||
public Long getParentId()
|
||||
{
|
||||
return parentId;
|
||||
|
@ -181,13 +207,50 @@ public class SysDept extends BaseEntity
|
|||
this.children = children;
|
||||
}
|
||||
|
||||
public String getDeptShortName() {
|
||||
return deptShortName;
|
||||
}
|
||||
|
||||
public void setDeptShortName(String deptShortName) {
|
||||
this.deptShortName = deptShortName;
|
||||
}
|
||||
|
||||
public String getDeptCode() {
|
||||
return deptCode;
|
||||
}
|
||||
|
||||
public void setDeptCode(String deptCode) {
|
||||
this.deptCode = deptCode;
|
||||
}
|
||||
|
||||
public String getDeptType() {
|
||||
return deptType;
|
||||
}
|
||||
|
||||
public void setDeptType(String deptType) {
|
||||
this.deptType = deptType;
|
||||
}
|
||||
|
||||
public String getDeptInfos() {
|
||||
return deptInfos;
|
||||
}
|
||||
|
||||
public void setDeptInfos(String deptInfos) {
|
||||
this.deptInfos = deptInfos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("deptId", getDeptId())
|
||||
.append("comId", getComId())
|
||||
.append("parentId", getParentId())
|
||||
.append("ancestors", getAncestors())
|
||||
.append("deptName", getDeptName())
|
||||
.append("deptShortName", getDeptShortName())
|
||||
.append("deptCode", getDeptCode())
|
||||
.append("deptType", getDeptType())
|
||||
.append("deptInfos", getDeptInfos())
|
||||
.append("orderNum", getOrderNum())
|
||||
.append("leader", getLeader())
|
||||
.append("phone", getPhone())
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.yanzhu.system.api.domain;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
@ -23,6 +25,12 @@ public class SysRole extends BaseEntity
|
|||
@Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
|
||||
private Long roleId;
|
||||
|
||||
/** 公司ID */
|
||||
private Long comId;
|
||||
|
||||
/** 项目ID */
|
||||
private Long projectId;
|
||||
|
||||
/** 角色名称 */
|
||||
@Excel(name = "角色名称")
|
||||
private String roleName;
|
||||
|
@ -58,12 +66,17 @@ public class SysRole extends BaseEntity
|
|||
/** 菜单组 */
|
||||
private Long[] menuIds;
|
||||
|
||||
/** 部门主键 */
|
||||
private Long deptId;
|
||||
|
||||
/** 部门组(数据权限) */
|
||||
private Long[] deptIds;
|
||||
|
||||
/** 角色菜单权限 */
|
||||
private Set<String> permissions;
|
||||
|
||||
private List<SysRoleDept> roleDeptList;
|
||||
|
||||
public SysRole()
|
||||
{
|
||||
|
||||
|
@ -89,11 +102,22 @@ public class SysRole extends BaseEntity
|
|||
return isAdmin(this.roleId);
|
||||
}
|
||||
|
||||
|
||||
public static boolean isAdmin(Long roleId)
|
||||
{
|
||||
return roleId != null && 1L == roleId;
|
||||
}
|
||||
|
||||
public static boolean isGsAdmin(String roleKey)
|
||||
{
|
||||
return Objects.equals(roleKey,"gsAdmin");
|
||||
}
|
||||
|
||||
public static boolean isGsAdmin(List<String> roleKeys)
|
||||
{
|
||||
return roleKeys.contains("gsAdmin");
|
||||
}
|
||||
|
||||
@NotBlank(message = "角色名称不能为空")
|
||||
@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
|
||||
public String getRoleName()
|
||||
|
@ -219,10 +243,44 @@ public class SysRole extends BaseEntity
|
|||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
public Long getDeptId() {
|
||||
return deptId;
|
||||
}
|
||||
|
||||
public void setDeptId(Long deptId) {
|
||||
this.deptId = deptId;
|
||||
}
|
||||
|
||||
public List<SysRoleDept> getRoleDeptList() {
|
||||
return roleDeptList;
|
||||
}
|
||||
|
||||
public void setRoleDeptList(List<SysRoleDept> roleDeptList) {
|
||||
this.roleDeptList = roleDeptList;
|
||||
}
|
||||
|
||||
public Long getComId() {
|
||||
return comId;
|
||||
}
|
||||
|
||||
public void setComId(Long comId) {
|
||||
this.comId = comId;
|
||||
}
|
||||
|
||||
public Long getProjectId() {
|
||||
return projectId;
|
||||
}
|
||||
|
||||
public void setProjectId(Long projectId) {
|
||||
this.projectId = projectId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("roleId", getRoleId())
|
||||
.append("comId", getComId())
|
||||
.append("projectId", getProjectId())
|
||||
.append("roleName", getRoleName())
|
||||
.append("roleKey", getRoleKey())
|
||||
.append("roleSort", getRoleSort())
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.yanzhu.system.domain;
|
||||
package com.yanzhu.system.api.domain;
|
||||
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
|
@ -16,6 +16,9 @@ public class SysRoleDept
|
|||
/** 部门ID */
|
||||
private Long deptId;
|
||||
|
||||
/** 部门名称 */
|
||||
private String deptName;
|
||||
|
||||
public Long getRoleId()
|
||||
{
|
||||
return roleId;
|
||||
|
@ -36,6 +39,14 @@ public class SysRoleDept
|
|||
this.deptId = deptId;
|
||||
}
|
||||
|
||||
public String getDeptName() {
|
||||
return deptName;
|
||||
}
|
||||
|
||||
public void setDeptName(String deptName) {
|
||||
this.deptName = deptName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
|
@ -25,6 +25,13 @@ public class SysUser extends BaseEntity
|
|||
@Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
|
||||
private Long userId;
|
||||
|
||||
/** 公司编号 */
|
||||
@Excel(name = "公司编号", type = Type.IMPORT)
|
||||
private Long comId;
|
||||
|
||||
/** 公司名称 */
|
||||
private String comName;
|
||||
|
||||
/** 部门ID */
|
||||
@Excel(name = "部门编号", type = Type.IMPORT)
|
||||
private Long deptId;
|
||||
|
@ -33,6 +40,14 @@ public class SysUser extends BaseEntity
|
|||
@Excel(name = "登录名称")
|
||||
private String userName;
|
||||
|
||||
/** 用户类型 */
|
||||
@Excel(name = "用户类型")
|
||||
private String userType;
|
||||
|
||||
/** 证件号码 */
|
||||
@Excel(name = "证件号码")
|
||||
private String cardCode;
|
||||
|
||||
/** 用户昵称 */
|
||||
@Excel(name = "用户名称")
|
||||
private String nickName;
|
||||
|
@ -77,9 +92,19 @@ public class SysUser extends BaseEntity
|
|||
})
|
||||
private SysDept dept;
|
||||
|
||||
public SysDept getComp() {
|
||||
return comp;
|
||||
}
|
||||
|
||||
public void setComp(SysDept comp) {
|
||||
this.comp = comp;
|
||||
}
|
||||
|
||||
private SysDept comp;
|
||||
/** 角色对象 */
|
||||
private List<SysRole> roles;
|
||||
|
||||
private String userInfos;
|
||||
/** 角色组 */
|
||||
private Long[] roleIds;
|
||||
|
||||
|
@ -89,6 +114,47 @@ public class SysUser extends BaseEntity
|
|||
/** 角色ID */
|
||||
private Long roleId;
|
||||
|
||||
private Long workType;
|
||||
|
||||
public Long getWorkType() {
|
||||
return workType;
|
||||
}
|
||||
|
||||
public String getUserInfos() {
|
||||
return userInfos;
|
||||
}
|
||||
|
||||
public void setUserInfos(String userInfos) {
|
||||
this.userInfos = userInfos;
|
||||
}
|
||||
|
||||
public void setWorkType(Long workType) {
|
||||
this.workType = workType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于修改
|
||||
*/
|
||||
private Long oldComId;
|
||||
|
||||
public Long getOldComId() {
|
||||
return oldComId;
|
||||
}
|
||||
|
||||
public void setOldComId(Long oldComId) {
|
||||
this.oldComId = oldComId;
|
||||
}
|
||||
|
||||
private Long isActive;
|
||||
|
||||
public Long getIsActive() {
|
||||
return isActive;
|
||||
}
|
||||
|
||||
public void setIsActive(Long isActive) {
|
||||
this.isActive = isActive;
|
||||
}
|
||||
|
||||
public SysUser()
|
||||
{
|
||||
|
||||
|
@ -119,6 +185,22 @@ public class SysUser extends BaseEntity
|
|||
return userId != null && 1L == userId;
|
||||
}
|
||||
|
||||
public Long getComId() {
|
||||
return comId;
|
||||
}
|
||||
|
||||
public void setComId(Long comId) {
|
||||
this.comId = comId;
|
||||
}
|
||||
|
||||
public String getComName() {
|
||||
return comName;
|
||||
}
|
||||
|
||||
public void setComName(String comName) {
|
||||
this.comName = comName;
|
||||
}
|
||||
|
||||
public Long getDeptId()
|
||||
{
|
||||
return deptId;
|
||||
|
@ -129,6 +211,18 @@ public class SysUser extends BaseEntity
|
|||
this.deptId = deptId;
|
||||
}
|
||||
|
||||
@Xss(message = "用户账号不能包含脚本字符")
|
||||
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
|
||||
public String getUserName()
|
||||
{
|
||||
return userName;
|
||||
}
|
||||
|
||||
public void setUserName(String userName)
|
||||
{
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
@Xss(message = "用户昵称不能包含脚本字符")
|
||||
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
|
||||
public String getNickName()
|
||||
|
@ -141,17 +235,12 @@ public class SysUser extends BaseEntity
|
|||
this.nickName = nickName;
|
||||
}
|
||||
|
||||
@Xss(message = "用户账号不能包含脚本字符")
|
||||
@NotBlank(message = "用户账号不能为空")
|
||||
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
|
||||
public String getUserName()
|
||||
{
|
||||
return userName;
|
||||
public String getUserType() {
|
||||
return userType;
|
||||
}
|
||||
|
||||
public void setUserName(String userName)
|
||||
{
|
||||
this.userName = userName;
|
||||
public void setUserType(String userType) {
|
||||
this.userType = userType;
|
||||
}
|
||||
|
||||
@Email(message = "邮箱格式不正确")
|
||||
|
@ -296,13 +385,24 @@ public class SysUser extends BaseEntity
|
|||
{
|
||||
this.roleId = roleId;
|
||||
}
|
||||
|
||||
public String getCardCode() {
|
||||
return cardCode;
|
||||
}
|
||||
|
||||
public void setCardCode(String cardCode) {
|
||||
this.cardCode = cardCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("userId", getUserId())
|
||||
.append("comId", getComId())
|
||||
.append("deptId", getDeptId())
|
||||
.append("userName", getUserName())
|
||||
.append("nickName", getNickName())
|
||||
.append("userType", getUserType())
|
||||
.append("email", getEmail())
|
||||
.append("phonenumber", getPhonenumber())
|
||||
.append("sex", getSex())
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
package com.yanzhu.system.api.domain;
|
||||
|
||||
import com.yanzhu.common.core.annotation.Excel;
|
||||
import com.yanzhu.common.core.web.domain.BaseEntity;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
|
||||
/**
|
||||
* 用户授权对象 sys_user_uniopen
|
||||
*
|
||||
* @author JiangYuQi
|
||||
* @date 2024-10-13
|
||||
*/
|
||||
public class SysUserUniopen extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键 */
|
||||
private Long id;
|
||||
|
||||
/** 用户主键 */
|
||||
@Excel(name = "用户主键")
|
||||
private Long userId;
|
||||
|
||||
/** 用户账号 */
|
||||
@Excel(name = "用户账号")
|
||||
private String userName;
|
||||
|
||||
/** 用户昵称 */
|
||||
@Excel(name = "用户昵称")
|
||||
private String userNick;
|
||||
|
||||
/** 唯一关联id */
|
||||
@Excel(name = "唯一关联id")
|
||||
private String unionid;
|
||||
|
||||
/** 小程序授权id */
|
||||
@Excel(name = "小程序授权id")
|
||||
private String maOpenId;
|
||||
|
||||
/** 公众号授权id */
|
||||
@Excel(name = "公众号授权id")
|
||||
private String mpOpenId;
|
||||
|
||||
public void setId(Long id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
public void setUserId(Long userId)
|
||||
{
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public Long getUserId()
|
||||
{
|
||||
return userId;
|
||||
}
|
||||
public void setUserName(String userName)
|
||||
{
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public String getUserName()
|
||||
{
|
||||
return userName;
|
||||
}
|
||||
public void setUserNick(String userNick)
|
||||
{
|
||||
this.userNick = userNick;
|
||||
}
|
||||
|
||||
public String getUserNick()
|
||||
{
|
||||
return userNick;
|
||||
}
|
||||
public void setUnionid(String unionid)
|
||||
{
|
||||
this.unionid = unionid;
|
||||
}
|
||||
|
||||
public String getUnionid()
|
||||
{
|
||||
return unionid;
|
||||
}
|
||||
public void setMaOpenId(String maOpenId)
|
||||
{
|
||||
this.maOpenId = maOpenId;
|
||||
}
|
||||
|
||||
public String getMaOpenId()
|
||||
{
|
||||
return maOpenId;
|
||||
}
|
||||
public void setMpOpenId(String mpOpenId)
|
||||
{
|
||||
this.mpOpenId = mpOpenId;
|
||||
}
|
||||
|
||||
public String getMpOpenId()
|
||||
{
|
||||
return mpOpenId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("id", getId())
|
||||
.append("userId", getUserId())
|
||||
.append("userName", getUserName())
|
||||
.append("userNick", getUserNick())
|
||||
.append("unionid", getUnionid())
|
||||
.append("maOpenId", getMaOpenId())
|
||||
.append("mpOpenId", getMpOpenId())
|
||||
.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.yanzhu.system.api.domain.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* 微信小程序登录对象
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(description = "微信小程序登录对象")
|
||||
public class WxMaLoginBody {
|
||||
|
||||
/**
|
||||
* 授权项目
|
||||
*/
|
||||
private Long proId;
|
||||
|
||||
/**
|
||||
* 授权编号
|
||||
*/
|
||||
@NotBlank(message = "授权编号不能为空")
|
||||
private String openId;
|
||||
|
||||
/**
|
||||
* 授权密钥
|
||||
*/
|
||||
@NotBlank(message = "授权密钥不能为空")
|
||||
private String sessionKey;
|
||||
|
||||
/**
|
||||
* 加密代码
|
||||
*/
|
||||
@NotBlank(message = "加密代码不能为空")
|
||||
private String encryptedData;
|
||||
|
||||
/**
|
||||
* 加密方式
|
||||
*/
|
||||
@NotBlank(message = "加密方式不能为空")
|
||||
private String iv;
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.yanzhu.system.api.factory;
|
||||
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.system.api.RemoteDeptService;
|
||||
import com.yanzhu.system.api.domain.SysDept;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 部门服务降级处理
|
||||
*
|
||||
* @author JiangYuQi
|
||||
*/
|
||||
@Component
|
||||
public class RemoteDeptFallbackFactory implements FallbackFactory<RemoteDeptService> {
|
||||
private static final Logger log = LoggerFactory.getLogger(RemoteDeptFallbackFactory.class);
|
||||
|
||||
@Override
|
||||
public RemoteDeptService create(Throwable throwable) {
|
||||
log.error("部门服务调用失败:{}", throwable.getMessage());
|
||||
return new RemoteDeptService() {
|
||||
@Override
|
||||
public R<SysDept> getDeptInfo(Long deptId, String source) {
|
||||
return R.fail("获取部门失败:" + throwable.getMessage());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -30,6 +30,18 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
|
|||
{
|
||||
return R.fail("上传文件失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<SysFile> dirsUploadFile(String proPackage, String dirs, MultipartFile file)
|
||||
{
|
||||
return R.fail("上传文件失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<SysFile> dirDatePathUploadFile(String proPackage, String dirs, String datePath, MultipartFile file)
|
||||
{
|
||||
return R.fail("上传文件失败:" + throwable.getMessage());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package com.yanzhu.system.api.factory;
|
||||
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.common.core.web.domain.AjaxResult;
|
||||
import com.yanzhu.system.api.RemoteFlowService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 工作流服务降级处理
|
||||
*
|
||||
* @author JiangYuQi
|
||||
*/
|
||||
@Component
|
||||
public class RemoteFlowFallbackFactory implements FallbackFactory<RemoteFlowService>
|
||||
{
|
||||
private static final Logger log = LoggerFactory.getLogger(RemoteFlowFallbackFactory.class);
|
||||
|
||||
@Override
|
||||
public RemoteFlowService create(Throwable throwable)
|
||||
{
|
||||
log.error("业务服务调用失败:{}", throwable.getMessage());
|
||||
return new RemoteFlowService()
|
||||
{
|
||||
@Override
|
||||
public R<AjaxResult> startDefinitionByParams(String procDefId, Map<String, Object> variables, String source)
|
||||
{
|
||||
return R.fail("保存分包单位信息失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,85 @@
|
|||
package com.yanzhu.system.api.factory;
|
||||
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.common.core.web.domain.AjaxResult;
|
||||
import com.yanzhu.system.api.RemoteProService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 文件服务降级处理
|
||||
*
|
||||
* @author JiangYuQi
|
||||
*/
|
||||
@Component
|
||||
public class RemoteProFallbackFactory implements FallbackFactory<RemoteProService>
|
||||
{
|
||||
private static final Logger log = LoggerFactory.getLogger(RemoteProFallbackFactory.class);
|
||||
|
||||
@Override
|
||||
public RemoteProService create(Throwable throwable)
|
||||
{
|
||||
log.error("项目服务调用失败:{}", throwable.getMessage());
|
||||
return new RemoteProService()
|
||||
{
|
||||
@Override
|
||||
public R<Map<String,Object>> info(Long id, String source)
|
||||
{
|
||||
return R.fail("查询项目失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<AjaxResult> approveSubDeptsUser(Long busKey, String source)
|
||||
{
|
||||
return R.fail("审批通过信息同步失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<AjaxResult> subDeptsUserComSign(Long busKey, String source)
|
||||
{
|
||||
return R.fail("公司承诺书签名章失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<AjaxResult> subDeptsUserProSign(Long busKey, String source)
|
||||
{
|
||||
return R.fail("项目承诺书签名章失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Boolean> findUserGroSign(Long busKey, String source)
|
||||
{
|
||||
return R.fail("班组承诺书签名章失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Boolean> findUserComSign(Long busKey, String source)
|
||||
{
|
||||
return R.fail("公司承诺书签名章失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Boolean> findUserProSign(Long busKey, String source)
|
||||
{
|
||||
return R.fail("项目承诺书签名章失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<AjaxResult> subDeptsUserGroSign(Long busKey, String source)
|
||||
{
|
||||
return R.fail("班组承诺书签名章失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<AjaxResult> syspushSubDeptsUser(Map<String, Object> data, String source)
|
||||
{
|
||||
return R.fail("项目系统人员同步失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.yanzhu.system.api.factory;
|
||||
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.system.api.RemoteRoleService;
|
||||
import com.yanzhu.system.api.domain.SysRole;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 角色服务降级处理
|
||||
*
|
||||
* @author JiangYuQi
|
||||
*/
|
||||
@Component
|
||||
public class RemoteRoleFallbackFactory implements FallbackFactory<RemoteRoleService> {
|
||||
private static final Logger log = LoggerFactory.getLogger(RemoteRoleFallbackFactory.class);
|
||||
|
||||
@Override
|
||||
public RemoteRoleService create(Throwable throwable) {
|
||||
log.error("用户服务调用失败:{}", throwable.getMessage());
|
||||
return new RemoteRoleService() {
|
||||
@Override
|
||||
public R<SysRole> getRoleInfo(Long roleId, String source) {
|
||||
return R.fail("获取角色失败:" + throwable.getMessage());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,18 +1,22 @@
|
|||
package com.yanzhu.system.api.factory;
|
||||
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.system.api.RemoteUserService;
|
||||
import com.yanzhu.system.api.domain.SysUser;
|
||||
import com.yanzhu.system.api.domain.SysUserUniopen;
|
||||
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
|
||||
import com.yanzhu.system.api.model.LoginUser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.system.api.domain.SysUser;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 用户服务降级处理
|
||||
*
|
||||
* @author ruoyi
|
||||
* @author JiangYuQi
|
||||
*/
|
||||
@Component
|
||||
public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
|
||||
|
@ -25,6 +29,36 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
|
|||
log.error("用户服务调用失败:{}", throwable.getMessage());
|
||||
return new RemoteUserService()
|
||||
{
|
||||
@Override
|
||||
public R<Map<String,Object>> getMaOpenId(String code, String source)
|
||||
{
|
||||
return R.fail("获取小程序授权失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Map<String,Object>> getMaPhoneNumber(WxMaLoginBody body, String source)
|
||||
{
|
||||
return R.fail("获取小程序手机号失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<SysUserUniopen> findByMaOpenId(String maOpenId, String source)
|
||||
{
|
||||
return R.fail("查询小程序授权失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Integer> addSysUserUniopen(SysUserUniopen sysUserUniopen, String source)
|
||||
{
|
||||
return R.fail("获取小程序手机号失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Integer> editSysUserUniopen(SysUserUniopen sysUserUniopen, String source)
|
||||
{
|
||||
return R.fail("获取小程序手机号失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<LoginUser> getUserInfo(String username, String source)
|
||||
{
|
||||
|
@ -32,10 +66,33 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
|
|||
}
|
||||
|
||||
@Override
|
||||
public R<Boolean> registerUserInfo(SysUser sysUser, String source)
|
||||
public R<LoginUser> getUserInfo(String username, Long deptId, String source)
|
||||
{
|
||||
return R.fail("获取用户失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<SysUser> getSysUserInfo(Long userId, String source)
|
||||
{
|
||||
return R.fail("获取用户失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Long> registerUserInfo(SysUser sysUser, String source)
|
||||
{
|
||||
return R.fail("注册用户失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Long> removeUserRoles(SysUser sysUser, String source)
|
||||
{
|
||||
return R.fail("删除用户角色失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Long> updateUserInfo(SysUser sysUser, String source) {
|
||||
return R.fail("修改用户失败:" + throwable.getMessage());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,26 @@ public class LoginUser implements Serializable
|
|||
*/
|
||||
private SysUser sysUser;
|
||||
|
||||
/**
|
||||
* 项目信息
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 项目信息
|
||||
*/
|
||||
private String projectName;
|
||||
|
||||
/**
|
||||
* 项目公司信息
|
||||
*/
|
||||
private Long projectDeptId;
|
||||
|
||||
/**
|
||||
* 项目公司信息
|
||||
*/
|
||||
private String projectDeptName;
|
||||
|
||||
public String getToken()
|
||||
{
|
||||
return token;
|
||||
|
@ -147,4 +167,43 @@ public class LoginUser implements Serializable
|
|||
{
|
||||
this.sysUser = sysUser;
|
||||
}
|
||||
|
||||
public Long getProjectId() {
|
||||
return projectId;
|
||||
}
|
||||
|
||||
public void setProjectId(Long projectId) {
|
||||
this.projectId = projectId;
|
||||
}
|
||||
|
||||
public Long getProjectDeptId() {
|
||||
return projectDeptId;
|
||||
}
|
||||
|
||||
public void setProjectDeptId(Long projectDeptId) {
|
||||
this.projectDeptId = projectDeptId;
|
||||
}
|
||||
|
||||
public String getProjectName() {
|
||||
return projectName;
|
||||
}
|
||||
|
||||
public void setProjectName(String projectName) {
|
||||
this.projectName = projectName;
|
||||
}
|
||||
|
||||
public String getProjectDeptName() {
|
||||
return projectDeptName;
|
||||
}
|
||||
|
||||
public void setProjectDeptName(String projectDeptName) {
|
||||
this.projectDeptName = projectDeptName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 无参构造方法
|
||||
*/
|
||||
public LoginUser() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
com.yanzhu.system.api.factory.RemoteUserFallbackFactory
|
||||
com.yanzhu.system.api.factory.RemoteLogFallbackFactory
|
||||
com.yanzhu.system.api.factory.RemoteFileFallbackFactory
|
||||
com.yanzhu.system.api.factory.RemoteFlowFallbackFactory
|
||||
com.yanzhu.system.api.factory.RemoteRoleFallbackFactory
|
||||
com.yanzhu.system.api.factory.RemoteProFallbackFactory
|
||||
com.yanzhu.system.api.factory.RemoteDeptFallbackFactory
|
|
@ -53,13 +53,16 @@
|
|||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>2.5.15</version>
|
||||
<configuration>
|
||||
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
|
@ -68,43 +71,17 @@
|
|||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- docker-maven-plugin插件(不带Dockerfile文件) -->
|
||||
<plugin>
|
||||
<groupId>com.spotify</groupId>
|
||||
<artifactId>docker-maven-plugin</artifactId>
|
||||
<version>1.2.0</version>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<configuration>
|
||||
<!--用于指定镜像名称-->
|
||||
<imageName>${project.build.finalName}</imageName>
|
||||
<imageTags>latest</imageTags>
|
||||
<!--用于指定基础镜像,相当于Dockerfile中的FROM指令-->
|
||||
<baseImage>openjdk:latest</baseImage>
|
||||
<!--相当于Dockerfile的ENTRYPOINT指令-->
|
||||
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
|
||||
<!--是否跳过docker build-->
|
||||
<!--<skipDockerBuild>true</skipDockerBuild>-->
|
||||
<dockerHost>${configuration.docker-one-Host}</dockerHost>
|
||||
<resources>
|
||||
<resource>
|
||||
<targetPath>/</targetPath>
|
||||
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
|
||||
<directory>${project.build.directory}</directory>
|
||||
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
|
||||
<include>${project.build.finalName}.jar</include>
|
||||
</resource>
|
||||
</resources>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<warName>${project.artifactId}</warName>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-image</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>build</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<!--如果不设置resource 会导致bootstrap.yml中的@@找不到pom文件中的配置-->
|
||||
<resources>
|
||||
<resource>
|
||||
|
@ -113,5 +90,65 @@
|
|||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
|
||||
<!-- <build>-->
|
||||
<!-- <finalName>${project.artifactId}</finalName>-->
|
||||
<!-- <plugins>-->
|
||||
<!-- <plugin>-->
|
||||
<!-- <groupId>org.springframework.boot</groupId>-->
|
||||
<!-- <artifactId>spring-boot-maven-plugin</artifactId>-->
|
||||
<!-- <executions>-->
|
||||
<!-- <execution>-->
|
||||
<!-- <goals>-->
|
||||
<!-- <goal>repackage</goal>-->
|
||||
<!-- </goals>-->
|
||||
<!-- </execution>-->
|
||||
<!-- </executions>-->
|
||||
<!-- </plugin>-->
|
||||
<!-- <!– docker-maven-plugin插件(不带Dockerfile文件) –>-->
|
||||
<!-- <plugin>-->
|
||||
<!-- <groupId>com.spotify</groupId>-->
|
||||
<!-- <artifactId>docker-maven-plugin</artifactId>-->
|
||||
<!-- <version>1.2.0</version>-->
|
||||
<!-- <configuration>-->
|
||||
<!-- <!–用于指定镜像名称–>-->
|
||||
<!-- <imageName>${project.build.finalName}</imageName>-->
|
||||
<!-- <imageTags>latest</imageTags>-->
|
||||
<!-- <!–用于指定基础镜像,相当于Dockerfile中的FROM指令–>-->
|
||||
<!-- <baseImage>openjdk:latest</baseImage>-->
|
||||
<!-- <!–相当于Dockerfile的ENTRYPOINT指令–>-->
|
||||
<!-- <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>-->
|
||||
<!-- <!–是否跳过docker build–>-->
|
||||
<!-- <skipDockerBuild>true</skipDockerBuild>-->
|
||||
<!-- <dockerHost>${configuration.docker-one-Host}</dockerHost>-->
|
||||
<!-- <resources>-->
|
||||
<!-- <resource>-->
|
||||
<!-- <targetPath>/</targetPath>-->
|
||||
<!-- <!–用于指定需要复制的根目录,${project.build.directory}表示target目录–>-->
|
||||
<!-- <directory>${project.build.directory}</directory>-->
|
||||
<!-- <!–用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。–>-->
|
||||
<!-- <include>${project.build.finalName}.jar</include>-->
|
||||
<!-- </resource>-->
|
||||
<!-- </resources>-->
|
||||
<!-- </configuration>-->
|
||||
<!-- <executions>-->
|
||||
<!-- <execution>-->
|
||||
<!-- <id>build-image</id>-->
|
||||
<!-- <phase>package</phase>-->
|
||||
<!-- <goals>-->
|
||||
<!-- <goal>build</goal>-->
|
||||
<!-- </goals>-->
|
||||
<!-- </execution>-->
|
||||
<!-- </executions>-->
|
||||
<!-- </plugin>-->
|
||||
<!-- </plugins>-->
|
||||
<!-- <!–如果不设置resource 会导致bootstrap.yml中的@@找不到pom文件中的配置–>-->
|
||||
<!-- <resources>-->
|
||||
<!-- <resource>-->
|
||||
<!-- <directory>src/main/resources</directory>-->
|
||||
<!-- <filtering>true</filtering>-->
|
||||
<!-- </resource>-->
|
||||
<!-- </resources>-->
|
||||
<!-- </build>-->
|
||||
|
||||
</project>
|
||||
|
|
|
@ -1,21 +1,32 @@
|
|||
package com.yanzhu.auth.controller;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import com.yanzhu.auth.form.LoginBody;
|
||||
import com.yanzhu.auth.form.RegisterBody;
|
||||
import com.yanzhu.common.core.exception.ServiceException;
|
||||
import com.yanzhu.common.redis.service.RedisService;
|
||||
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
|
||||
import com.yanzhu.auth.form.WxMaOpenIdBody;
|
||||
import com.yanzhu.auth.service.SysLoginService;
|
||||
import com.yanzhu.common.core.constant.SecurityConstants;
|
||||
import com.yanzhu.common.core.domain.R;
|
||||
import com.yanzhu.common.core.text.Convert;
|
||||
import com.yanzhu.common.core.utils.JwtUtils;
|
||||
import com.yanzhu.common.core.utils.StringUtils;
|
||||
import com.yanzhu.common.security.auth.AuthUtil;
|
||||
import com.yanzhu.common.security.service.TokenService;
|
||||
import com.yanzhu.common.security.utils.SecurityUtils;
|
||||
import com.yanzhu.system.api.RemoteProService;
|
||||
import com.yanzhu.system.api.RemoteUserService;
|
||||
import com.yanzhu.system.api.domain.SysUser;
|
||||
import com.yanzhu.system.api.model.LoginUser;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.validation.Valid;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* token 控制
|
||||
|
@ -25,12 +36,26 @@ import com.yanzhu.system.api.model.LoginUser;
|
|||
@RestController
|
||||
public class TokenController
|
||||
{
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
|
||||
@Autowired
|
||||
private SysLoginService sysLoginService;
|
||||
|
||||
@Autowired
|
||||
private RemoteProService remoteProService;
|
||||
|
||||
@Autowired
|
||||
private RemoteUserService remoteUserService;
|
||||
|
||||
/**
|
||||
* 账号密码登录
|
||||
* @param form
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("login")
|
||||
public R<?> login(@RequestBody LoginBody form)
|
||||
{
|
||||
|
@ -40,6 +65,161 @@ public class TokenController
|
|||
return R.ok(tokenService.createToken(userInfo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取小程序授权
|
||||
* @param body 请求参数
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("getMaOpenId")
|
||||
public R<?> getMaOpenId(@RequestBody @Valid WxMaOpenIdBody body)
|
||||
{
|
||||
Map<String, Object> data = sysLoginService.getMaOpenId(body.getCode());
|
||||
// 获取授权openId
|
||||
return R.ok(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取小程序手机号
|
||||
* @param body 请求参数
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("getMaPhoneNumber")
|
||||
public R<?> getMaPhoneNumber(@RequestBody @Valid WxMaLoginBody body)
|
||||
{
|
||||
String maOpenId = sysLoginService.getMaPhoneNumber(body);
|
||||
// 获取授权openId
|
||||
return R.ok(maOpenId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 账号密码登录 微信
|
||||
* @param form
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("wxLogin")
|
||||
public R<?> wxLogin(@RequestBody LoginBody form)
|
||||
{
|
||||
// 用户登录
|
||||
LoginUser userInfo = sysLoginService.wxLogin(form.getUsername());
|
||||
// 获取登录token
|
||||
return R.ok(tokenService.createMobileToken(userInfo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 账号密码登录 微信
|
||||
* @param form
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("wxNumberLogin")
|
||||
public R<?> wxNumberLogin(@RequestBody LoginBody form)
|
||||
{
|
||||
String openId = Convert.toStr(redisService.getCacheObject("SysUserPhoneNumber::"+form.getUsername()),null);
|
||||
if(Objects.isNull(openId)){
|
||||
throw new ServiceException("登录信息异常!!!");
|
||||
}
|
||||
// 用户登录
|
||||
LoginUser userInfo = sysLoginService.wxLogin(form.getUsername());
|
||||
// 获取登录token
|
||||
return R.ok(tokenService.createMobileToken(userInfo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序一键登录
|
||||
* @param body 请求参数
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("maLogin")
|
||||
public R<?> maLogin(@RequestBody @Valid WxMaLoginBody body)
|
||||
{
|
||||
// 微信用户登录
|
||||
LoginUser userInfo = sysLoginService.maLogin(body);
|
||||
// 获取登录token
|
||||
return R.ok(tokenService.createMobileToken(userInfo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换项目登录
|
||||
* @param proId 切换项目登录
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/switchProject/{proId}")
|
||||
public R<?> switchProject(@PathVariable("proId") Long proId,HttpServletRequest request)
|
||||
{
|
||||
if(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || SecurityUtils.isGSAdmin()){
|
||||
LoginUser loginUser = tokenService.getLoginUser(request);
|
||||
if (StringUtils.isNotNull(loginUser))
|
||||
{
|
||||
R<Map<String, Object>> dataResult = remoteProService.info(proId,SecurityConstants.INNER);
|
||||
Map<String, Object> proData = dataResult.getData();
|
||||
SysUser user = loginUser.getSysUser();
|
||||
user.setActiveComId(Convert.toLong(proData.get("comId")));
|
||||
user.setActiveComName(Convert.toStr(proData.get("comName")));
|
||||
user.setActiveProjectId(Convert.toLong(proData.get("id")));
|
||||
user.setActiveProjectName(Convert.toStr(proData.get("projectName")));
|
||||
loginUser.setSysUser(user);
|
||||
loginUser.setProjectId(Convert.toLong(proData.get("id")));
|
||||
loginUser.setProjectName(Convert.toStr(proData.get("projectName")));
|
||||
loginUser.setProjectDeptId(Convert.toLong(proData.get("comId")));
|
||||
loginUser.setProjectDeptName(Convert.toStr(proData.get("comName")));
|
||||
// 刷新令牌有效期
|
||||
tokenService.refreshToken(loginUser);
|
||||
return R.ok();
|
||||
}
|
||||
}else{
|
||||
// 查询用户信息
|
||||
R<LoginUser> userResult = remoteUserService.getUserInfo(SecurityUtils.getUsername(), proId, SecurityConstants.INNER);
|
||||
LoginUser userInfo = userResult.getData();
|
||||
SysUser user = userResult.getData().getSysUser();
|
||||
// 补充用户项目信息
|
||||
if(Objects.nonNull(user.getActiveComId())){
|
||||
userInfo.setProjectDeptId(user.getActiveComId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveComName())){
|
||||
userInfo.setProjectDeptName(user.getActiveComName());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectId())){
|
||||
userInfo.setProjectId(user.getActiveProjectId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectName())){
|
||||
userInfo.setProjectName(user.getActiveProjectName());
|
||||
}
|
||||
// 刷新令牌有效期
|
||||
tokenService.refreshToken(userInfo);
|
||||
return R.ok();
|
||||
}
|
||||
return R.fail();
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消项目登录
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/cancelProject")
|
||||
public R<?> cancelProject(HttpServletRequest request)
|
||||
{
|
||||
LoginUser loginUser = tokenService.getLoginUser(request);
|
||||
if(SecurityUtils.isAdmin(loginUser.getUserid())){
|
||||
SysUser user = loginUser.getSysUser();
|
||||
user.setActiveComId(null);
|
||||
user.setActiveProjectId(null);
|
||||
user.setActiveProjectName(null);
|
||||
loginUser.setSysUser(user);
|
||||
loginUser.setProjectId(null);
|
||||
loginUser.setProjectName(null);
|
||||
loginUser.setProjectDeptId(null);
|
||||
}else{
|
||||
SysUser user = loginUser.getSysUser();
|
||||
user.setActiveProjectId(null);
|
||||
user.setActiveProjectName(null);
|
||||
loginUser.setSysUser(user);
|
||||
loginUser.setProjectId(null);
|
||||
loginUser.setProjectName(null);
|
||||
}
|
||||
// 刷新令牌有效期
|
||||
tokenService.refreshToken(loginUser);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@DeleteMapping("logout")
|
||||
public R<?> logout(HttpServletRequest request)
|
||||
{
|
||||
|
@ -55,7 +235,7 @@ public class TokenController
|
|||
return R.ok();
|
||||
}
|
||||
|
||||
@PostMapping("refresh")
|
||||
@GetMapping("refresh")
|
||||
public R<?> refresh(HttpServletRequest request)
|
||||
{
|
||||
LoginUser loginUser = tokenService.getLoginUser(request);
|
||||
|
@ -65,7 +245,20 @@ public class TokenController
|
|||
tokenService.refreshToken(loginUser);
|
||||
return R.ok();
|
||||
}
|
||||
return R.ok();
|
||||
return R.fail();
|
||||
}
|
||||
|
||||
@GetMapping("refreshMobile")
|
||||
public R<?> refreshMobile(HttpServletRequest request)
|
||||
{
|
||||
LoginUser loginUser = sysLoginService.wxLogin(SecurityUtils.getUsername());
|
||||
if (StringUtils.isNotNull(loginUser))
|
||||
{
|
||||
// 刷新令牌有效期
|
||||
tokenService.refreshToken(loginUser);
|
||||
return R.ok();
|
||||
}
|
||||
return R.fail();
|
||||
}
|
||||
|
||||
@PostMapping("register")
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
package com.yanzhu.auth.form;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* 微信小程序授权
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(description = "微信小程序授权对象")
|
||||
public class WxMaOpenIdBody {
|
||||
|
||||
/**
|
||||
* 授权码
|
||||
*/
|
||||
@NotBlank(message = "授权码不能为空")
|
||||
private String code;
|
||||
|
||||
}
|
|
@ -1,5 +1,8 @@
|
|||
package com.yanzhu.auth.service;
|
||||
|
||||
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
|
||||
import com.yanzhu.system.api.RemoteProService;
|
||||
import com.yanzhu.system.api.domain.SysUserUniopen;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import com.yanzhu.common.core.constant.CacheConstants;
|
||||
|
@ -18,6 +21,11 @@ import com.yanzhu.system.api.RemoteUserService;
|
|||
import com.yanzhu.system.api.domain.SysUser;
|
||||
import com.yanzhu.system.api.model.LoginUser;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 登录校验方法
|
||||
*
|
||||
|
@ -26,6 +34,13 @@ import com.yanzhu.system.api.model.LoginUser;
|
|||
@Component
|
||||
public class SysLoginService
|
||||
{
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
@Autowired
|
||||
private RemoteProService remoteProService;
|
||||
|
||||
@Autowired
|
||||
private RemoteUserService remoteUserService;
|
||||
|
||||
|
@ -35,16 +50,13 @@ public class SysLoginService
|
|||
@Autowired
|
||||
private SysRecordLogService recordLogService;
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*/
|
||||
public LoginUser login(String username, String password)
|
||||
{
|
||||
// 用户名或密码为空 错误
|
||||
if (StringUtils.isAnyBlank(username, password))
|
||||
if (StringUtils.isAnyBlank(username, password))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
|
||||
throw new ServiceException("用户/密码必须填写");
|
||||
|
@ -75,7 +87,11 @@ public class SysLoginService
|
|||
|
||||
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
|
||||
String msg=userResult.getMsg();
|
||||
if(StringUtils.isBlank(msg)){
|
||||
msg="登录用户不存在";
|
||||
}
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, msg);
|
||||
throw new ServiceException("登录用户:" + username + " 不存在");
|
||||
}
|
||||
|
||||
|
@ -98,9 +114,141 @@ public class SysLoginService
|
|||
}
|
||||
passwordService.validate(user, password);
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
|
||||
|
||||
// 补充用户项目信息
|
||||
if(Objects.nonNull(user.getActiveComId())){
|
||||
userInfo.setProjectDeptId(user.getActiveComId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveComName())){
|
||||
userInfo.setProjectDeptName(user.getActiveComName());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectId())){
|
||||
userInfo.setProjectId(user.getActiveProjectId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectName())){
|
||||
userInfo.setProjectName(user.getActiveProjectName());
|
||||
}
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取小程序授权
|
||||
*/
|
||||
public Map<String, Object> getMaOpenId(String code)
|
||||
{
|
||||
Map<String,Object> loginResult = remoteUserService.getMaOpenId(code,SecurityConstants.INNER).getData();
|
||||
return loginResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取小程序手机号
|
||||
*/
|
||||
public String getMaPhoneNumber(WxMaLoginBody loginBody)
|
||||
{
|
||||
Map<String,Object> phoneResult = remoteUserService.getMaPhoneNumber(loginBody,SecurityConstants.INNER).getData();
|
||||
redisService.setCacheObject("SysUserPhoneNumber::"+phoneResult.get("phoneNumber"),loginBody.getOpenId(),12L, TimeUnit.HOURS);
|
||||
return Convert.toStr(phoneResult.get("phoneNumber"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序登录
|
||||
*/
|
||||
public LoginUser wxLogin(String username)
|
||||
{
|
||||
// 查询用户信息
|
||||
R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
|
||||
|
||||
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
|
||||
throw new ServiceException("登录用户:" + username + " 不存在");
|
||||
}
|
||||
|
||||
if (R.FAIL == userResult.getCode())
|
||||
{
|
||||
throw new ServiceException(userResult.getMsg());
|
||||
}
|
||||
|
||||
LoginUser userInfo = userResult.getData();
|
||||
SysUser user = userResult.getData().getSysUser();
|
||||
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
|
||||
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
|
||||
}
|
||||
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
|
||||
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
|
||||
}
|
||||
|
||||
// 补充用户项目信息
|
||||
if(Objects.nonNull(user.getActiveComId())){
|
||||
userInfo.setProjectDeptId(user.getActiveComId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveComName())){
|
||||
userInfo.setProjectDeptName(user.getActiveComName());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectId())){
|
||||
userInfo.setProjectId(user.getActiveProjectId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectName())){
|
||||
userInfo.setProjectName(user.getActiveProjectName());
|
||||
}
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序登录
|
||||
*/
|
||||
public LoginUser maLogin(WxMaLoginBody loginBody)
|
||||
{
|
||||
LoginUser userInfo;
|
||||
// 查询小程序授权情况
|
||||
Map<String,Object> phoneResult = remoteUserService.getMaPhoneNumber(loginBody,SecurityConstants.INNER).getData();
|
||||
if(Objects.nonNull(phoneResult) && Objects.nonNull(phoneResult.get("phoneNumber"))){
|
||||
// 查询用户信息
|
||||
R<LoginUser> userResult = remoteUserService.getUserInfo(Convert.toStr(phoneResult.get("phoneNumber")), SecurityConstants.INNER);
|
||||
userInfo = userResult.getData();
|
||||
if(Objects.isNull(userResult.getData())){
|
||||
throw new ServiceException("登录失败,当前手机号未获取项目授权...");
|
||||
}
|
||||
redisService.setCacheObject("SysUserUniopen::"+phoneResult.get("phoneNumber"),loginBody.getOpenId(),12L, TimeUnit.HOURS);
|
||||
}else{
|
||||
throw new ServiceException("获取授权手机号失败...");
|
||||
}
|
||||
SysUser user = userInfo.getSysUser();
|
||||
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
|
||||
{
|
||||
recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
|
||||
throw new ServiceException("对不起,您的账号:" + user.getUserName() + " 已被删除");
|
||||
}
|
||||
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
|
||||
{
|
||||
recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
|
||||
throw new ServiceException("对不起,您的账号:" + user.getUserName() + " 已停用");
|
||||
}
|
||||
recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, "登录成功");
|
||||
|
||||
// 补充用户项目信息
|
||||
if(Objects.nonNull(user.getActiveComId())){
|
||||
userInfo.setProjectDeptId(user.getActiveComId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveComName())){
|
||||
userInfo.setProjectDeptName(user.getActiveComName());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectId())){
|
||||
userInfo.setProjectId(user.getActiveProjectId());
|
||||
}
|
||||
if(Objects.nonNull(user.getActiveProjectName())){
|
||||
userInfo.setProjectName(user.getActiveProjectName());
|
||||
}
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退出登录
|
||||
*/
|
||||
public void logout(String loginName)
|
||||
{
|
||||
recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功");
|
||||
|
|
|
@ -42,7 +42,7 @@ public class SysPasswordService
|
|||
public void validate(SysUser user, String password)
|
||||
{
|
||||
String username = user.getUserName();
|
||||
|
||||
redisService.setCacheObject(getCacheKey(username), 0, lockTime, TimeUnit.MINUTES);
|
||||
Integer retryCount = redisService.getCacheObject(getCacheKey(username));
|
||||
|
||||
if (retryCount == null)
|
||||
|
|
|
@ -15,9 +15,13 @@ spring:
|
|||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: @discovery.server-addr@
|
||||
# 服务分组
|
||||
group: lijun
|
||||
config:
|
||||
# 配置中心地址
|
||||
server-addr: @discovery.server-addr@
|
||||
# 工作空间配置
|
||||
# namespace: a113aa27-4d61-46e0-81d6-9cede0457f0d
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
# 页面标题
|
||||
VUE_APP_TITLE = 产发工程数字管理平台
|
||||
|
||||
# 开发环境配置
|
||||
ENV = 'development'
|
||||
|
||||
# 产发工程数字管理平台/开发环境
|
||||
VUE_APP_BASE_API = '/dev-api'
|
||||
|
||||
# 路由懒加载
|
||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true
|
|
@ -0,0 +1,8 @@
|
|||
# 页面标题
|
||||
VUE_APP_TITLE = 产发工程数字管理平台
|
||||
|
||||
# 生产环境配置
|
||||
ENV = 'production'
|
||||
|
||||
# 产发工程数字管理平台/生产环境
|
||||
VUE_APP_BASE_API = '/prod-api'
|
|
@ -0,0 +1,10 @@
|
|||
# 页面标题
|
||||
VUE_APP_TITLE = 产发工程数字管理平台
|
||||
|
||||
NODE_ENV = production
|
||||
|
||||
# 测试环境配置
|
||||
ENV = 'staging'
|
||||
|
||||
# 产发工程数字管理平台/测试环境
|
||||
VUE_APP_BASE_API = '/stage-api'
|
|
@ -0,0 +1,6 @@
|
|||
/node_modules
|
||||
/dist
|
||||
/src/*
|
||||
/package-lock.json
|
||||
.DS_Store
|
||||
vue.config.js
|
|
@ -0,0 +1,23 @@
|
|||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
/doc
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
|
@ -0,0 +1,24 @@
|
|||
# v3
|
||||
|
||||
## Project setup
|
||||
```
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
```
|
||||
yarn serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
```
|
||||
yarn build
|
||||
```
|
||||
|
||||
### Lints and fixes files
|
||||
```
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"module": "esnext",
|
||||
"baseUrl": "./",
|
||||
"moduleResolution": "node",
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
]
|
||||
},
|
||||
"lib": [
|
||||
"esnext",
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"scripthost"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"name": "v3",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"serve:prod": "vue-cli-service serve --mode production",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.6.8",
|
||||
"core-js": "^3.8.3",
|
||||
"dayjs": "^1.11.9",
|
||||
"element-ui": "^2.15.13",
|
||||
"emittery": "^0.8.1",
|
||||
"file-saver": "2.0.5",
|
||||
"gsap": "^3.12.2",
|
||||
"js-cookie": "^3.0.5",
|
||||
"less": "^4.1.3",
|
||||
"less-loader": "^11.1.3",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
"logt": "^1.4.1",
|
||||
"nprogress": "0.2.0",
|
||||
"v3": "file:",
|
||||
"vue": "^2.6.14",
|
||||
"vue-router": "^3.1.3",
|
||||
"vuex": "3.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.16",
|
||||
"@babel/eslint-parser": "^7.12.16",
|
||||
"@vue/cli-plugin-babel": "~5.0.0",
|
||||
"@vue/cli-plugin-eslint": "~5.0.0",
|
||||
"@vue/cli-service": "~5.0.0",
|
||||
"svg-sprite-loader": "^6.0.11",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-plugin-vue": "^8.0.3",
|
||||
"javascript-obfuscator": "^4.1.1",
|
||||
"vue-template-compiler": "^2.6.14",
|
||||
"webpack-obfuscator": "^3.5.1"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended"
|
||||
],
|
||||
"parserOptions": {
|
||||
"parser": "@babel/eslint-parser"
|
||||
},
|
||||
"rules": {}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not dead"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 33 KiB |
|
@ -0,0 +1,167 @@
|
|||
.module-title{
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
padding-left: 15px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.module-title span{
|
||||
white-space: nowrap;
|
||||
}
|
||||
.module-title-red{
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
.screen-one-1-1{
|
||||
height: 310px;
|
||||
background: url("../images/one/1x1.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-1-2{
|
||||
height: 310px;
|
||||
background: url("../images/one/1x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-1-3{
|
||||
height: 310px;
|
||||
background: url("../images/one/1x3.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-1-4{
|
||||
height: 310px;
|
||||
background: url("../images/one/1x4.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
.screen-one-2-1{
|
||||
height: 640px;
|
||||
background: url("../images/one/2x1.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-2-2{
|
||||
height: 640px;
|
||||
background: url("../images/one/2x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-2-3{
|
||||
height: 640px;
|
||||
background: url("../images/one/2x3.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-2-4{
|
||||
height: 640px;
|
||||
background: url("../images/one/2x4.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
.screen-one-3-1{
|
||||
height: 970px;
|
||||
background: url("../images/one/3x1.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-3-1.no-border{
|
||||
background: none;
|
||||
}
|
||||
.screen-one-3-1.no-lable .module-title{
|
||||
display: none;
|
||||
}
|
||||
.screen-one-3-2{
|
||||
height: 970px;
|
||||
background: url("../images/one/3x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-3-3{
|
||||
height: 970px;
|
||||
background: url("../images/one/3x3.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-3-3.no-title{
|
||||
background: url("../images/one/3x32.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-3-4{
|
||||
height: 970px;
|
||||
background: url("../images/one/3x4.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.screen-two-1-1{
|
||||
height: 290px;
|
||||
background: url("../images/two/1x1.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-1-2{
|
||||
height: 290px;
|
||||
background: url("../images/two/1x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-1-3{
|
||||
height: 290px;
|
||||
background: url("../images/two/1x3.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-1-4{
|
||||
height: 290px;
|
||||
background: url("../images/two/1x3.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
|
||||
.screen-two-2-1{
|
||||
height: 600px;
|
||||
background: url("../images/two/2x1.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-2-2{
|
||||
height: 600px;
|
||||
background: url("../images/two/2x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-2-3{
|
||||
height: 600px;
|
||||
background: url("../images/two/2x3.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-2-4{
|
||||
height: 600px;
|
||||
background: url("../images/two/2x4.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
.screen-two-3-1{
|
||||
height: 920px;
|
||||
background: url("../images/two/3x1.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-3-2{
|
||||
height: 920px;
|
||||
background: url("../images/two/3x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-3-3{
|
||||
height: 920px;
|
||||
background: url("../images/two/3x3.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-two-3-4{
|
||||
height: 920px;
|
||||
background: url("../images/two/3x4.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.screen-red-1-1{
|
||||
height: 310px;
|
||||
background: url("../images/red/1x1.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-red-1-2{
|
||||
height: 310px;
|
||||
background: url("../images/red/1x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-red-2-2{
|
||||
height: 640px;
|
||||
background: url("../images/red/2x2.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
|
||||
.screen-big{
|
||||
height: 310px;
|
||||
background: url("../images/red/big_bgd.png") no-repeat center/100% 100%;
|
||||
}
|
||||
|
||||
.screen-one-0-5{
|
||||
height: 475px;
|
||||
background: url("../images/red/0x5.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.screen-one-video{
|
||||
height: 970px;
|
||||
background: url("../images/red/video.png") no-repeat center/100% 100%;
|
||||
}
|
||||
.div-header{
|
||||
height: 129px;
|
||||
}
|
||||
.header-title-user-info{
|
||||
text-align: right;
|
||||
padding-right: 60px;
|
||||
}
|
||||
.command{
|
||||
cursor: pointer;
|
||||
}
|
|
@ -0,0 +1,176 @@
|
|||
*{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "title-font";
|
||||
src:url(../fonts/HYLXTJ.eot),url(../fonts/HYLXTJ.svg),url(../fonts/HYLXTJ.ttf),url(../fonts/HYLXTJ.woff),url(../fonts/HYLXTJ.woff2)
|
||||
}
|
||||
@font-face {
|
||||
font-family: "number-font";
|
||||
src:url(../fonts/PUTHIAfont.eot),url(../fonts/PUTHIAfont.svg),url(../fonts/PUTHIAfont.ttf),url(../fonts/PUTHIAfont.woff),url(../fonts/PUTHIAfont.woff2)
|
||||
}
|
||||
p,label,ul{
|
||||
margin: 0;
|
||||
font-weight: 400;
|
||||
}
|
||||
table{
|
||||
width: 100%;
|
||||
}
|
||||
body{
|
||||
min-width: 1500px;
|
||||
min-height: 800px;
|
||||
}
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
#app{
|
||||
height: 100vh;
|
||||
min-height: 800px;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
}
|
||||
.login-bgd{
|
||||
position: relative;
|
||||
height: 100%;
|
||||
width:1400px;
|
||||
background: url("../images/login_bgd.png") no-repeat 50%;
|
||||
background-size: cover;
|
||||
}
|
||||
.login-max{
|
||||
height: 100%;
|
||||
position: relative;
|
||||
display: flex;
|
||||
}
|
||||
.login-content{
|
||||
width: 520px;
|
||||
}
|
||||
.login-content-max{
|
||||
padding: 100px 50px;
|
||||
}
|
||||
.login-logo{
|
||||
text-align: center;
|
||||
}
|
||||
.login-title{
|
||||
padding: 20px;
|
||||
font-weight: bold;
|
||||
color: #000000;
|
||||
font-size: 28px;
|
||||
text-align: center;
|
||||
}
|
||||
.login-content-form{
|
||||
padding:30px;
|
||||
position: relative;
|
||||
}
|
||||
.login-mode-max{
|
||||
display: flex;
|
||||
border-bottom: 1px solid #aaaaaa;
|
||||
}
|
||||
.login-mode{
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
padding: 15px 0;
|
||||
cursor: pointer;
|
||||
color: #aaaaaa;
|
||||
}
|
||||
.login-mode.active{
|
||||
color: #0063b1;
|
||||
font-weight: bold;
|
||||
}
|
||||
.login-mode-hr-max{
|
||||
position: relative;
|
||||
top: -2px;
|
||||
}
|
||||
.login-mode-hr {
|
||||
border-top: 3px solid #0162b1;
|
||||
width: 50%;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
transition: left 0.3s;
|
||||
|
||||
}
|
||||
.login-form-fill{
|
||||
padding:0 30px;
|
||||
}
|
||||
.login-form-text{
|
||||
padding: 15px 0 20px 5px;
|
||||
color: #888888;
|
||||
}
|
||||
.login-form-fill-min{
|
||||
padding: 10px 0;
|
||||
}
|
||||
.login-form-fill-min input{
|
||||
height: 50px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.login-form-state{
|
||||
padding: 15px 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.login-forgot-password{
|
||||
font-size: 14px;
|
||||
color: #3da2ff;
|
||||
cursor: pointer;
|
||||
}
|
||||
.login-form-btn{
|
||||
padding: 15px 0;
|
||||
}
|
||||
.login-tips{
|
||||
height: 40px;
|
||||
color: #ff0000;
|
||||
text-align: center;
|
||||
}
|
||||
.login-submit-btn{
|
||||
background: #0162b1;
|
||||
text-align: center;
|
||||
height: 45px;
|
||||
line-height: 45px;
|
||||
color: #ffffff;
|
||||
cursor: pointer;
|
||||
}
|
||||
.login-submit-btn:hover{
|
||||
background: #0274d1;
|
||||
}
|
||||
.login-submit-btn:active{
|
||||
background: #0162b1;
|
||||
}
|
||||
.login-form-code{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.login-form-code button{
|
||||
width: 150px;
|
||||
height: 50px;
|
||||
border: 0;
|
||||
background: #0162b1;
|
||||
cursor: pointer;
|
||||
color: #ffffff;
|
||||
}
|
||||
.login-form-code button:hover{
|
||||
background: #0274d1;
|
||||
}
|
||||
.login-form-code button:active{
|
||||
background: #0162b1;
|
||||
}
|
||||
.left-enter,
|
||||
.left-leave-to {
|
||||
opacity: 0;
|
||||
transform: translateX(-100px);
|
||||
}
|
||||
.left-enter-active,
|
||||
.left-leave-active{
|
||||
transition: all 0.5s ease;
|
||||
}
|
||||
|
||||
.right-enter,
|
||||
.right-leave-to {
|
||||
opacity: 0;
|
||||
transform: translateX(100px);
|
||||
}
|
||||
.right-enter-active,
|
||||
.right-leave-active{
|
||||
transition: all 0.5s ease;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
.scroll::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
.scroll::-webkit-scrollbar-thumb {
|
||||
background-color: rgb(1, 169, 255);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.bg-date-picker-pop{
|
||||
background-image: url('../images/list_bgd.png');
|
||||
border:solid 1px rgb(1, 169, 255);
|
||||
}
|
||||
.div-no-data{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-flow: column;
|
||||
}
|
||||
.my-module-title{
|
||||
background: url(../images/one/2x1.png) no-repeat;background-size: 100%;
|
||||
}
|
||||
|
||||
|
||||
.mytable.is-scroll .el-table__body-wrapper::-webkit-scrollbar{
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
.mytable.is-scroll .el-table__body-wrapper::-webkit-scrollbar-thumb {
|
||||
background-color: rgb(1, 169, 255);
|
||||
border-radius: 4px;
|
||||
}
|
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 3.2 MiB |
|
@ -0,0 +1,310 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
|
||||
<defs>
|
||||
<font id="PUTHIAfontRegular" horiz-adv-x="962" >
|
||||
<font-face
|
||||
font-family="PUTHIAfont"
|
||||
font-weight="5"
|
||||
font-stretch="normal"
|
||||
units-per-em="1750"
|
||||
panose-1="0 0 0 0 0 0 0 0 0 0"
|
||||
ascent="1556"
|
||||
descent="-194"
|
||||
x-height="681"
|
||||
cap-height="1269"
|
||||
bbox="-73 -149 1459 1556"
|
||||
underline-thickness="17"
|
||||
underline-position="-122"
|
||||
unicode-range="U+0020-00D7"
|
||||
/>
|
||||
<missing-glyph horiz-adv-x="1556"
|
||||
d="M97 0v1556h1362v-1556h-1362zM1362 97v1362h-1168v-1362h1168z" />
|
||||
<glyph glyph-name=".notdef" horiz-adv-x="1556"
|
||||
d="M97 0v1556h1362v-1556h-1362zM1362 97v1362h-1168v-1362h1168z" />
|
||||
<glyph glyph-name=".null" unicode="×" horiz-adv-x="0"
|
||||
/>
|
||||
<glyph glyph-name=".null" unicode="Ł" horiz-adv-x="0"
|
||||
/>
|
||||
<glyph glyph-name=".null" unicode="ý" horiz-adv-x="0"
|
||||
/>
|
||||
<glyph glyph-name="nonmarkingreturn"
|
||||
/>
|
||||
<glyph glyph-name="space" unicode=" "
|
||||
/>
|
||||
<glyph glyph-name="exclam" unicode="!"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22
|
||||
t10 -18z" />
|
||||
<glyph glyph-name="quotedbl" unicode="""
|
||||
d="M162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="quotesingle" unicode="'"
|
||||
d="M162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="parenleft" unicode="("
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
|
||||
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="parenright" unicode=")"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5
|
||||
t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="plus" unicode="+"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="comma" unicode="," horiz-adv-x="114"
|
||||
d="M-52 33q-16 18 -16 44q0 37 28.5 66.5t67.5 29.5q47 0 79 -38q15 -21 15 -53q0 -49 -25 -92l-33 -52q-11 -19 -33.5 -39.5t-37.5 -29t-38 -18.5l36 61q10 19 15.5 38t5.5 35q0 9 -5 22l-30 8q-18 7 -29 18z" />
|
||||
<glyph glyph-name="hyphen" unicode="-"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
|
||||
<glyph glyph-name="hyphen" unicode="­"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
|
||||
<glyph glyph-name="period" unicode="." horiz-adv-x="114"
|
||||
d="M-73 -7l6 154h176l-14 -154h-168z" />
|
||||
<glyph glyph-name="slash" unicode="/"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55
|
||||
l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="zero" unicode="0"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
|
||||
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22
|
||||
t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="one" unicode="1"
|
||||
d="M861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="two" unicode="2"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="three" unicode="3"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z
|
||||
" />
|
||||
<glyph glyph-name="four" unicode="4"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20
|
||||
q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="five" unicode="5"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="six" unicode="6"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22
|
||||
q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="seven" unicode="7"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41
|
||||
q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="eight" unicode="8"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32
|
||||
q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="nine" unicode="9"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22
|
||||
t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="colon" unicode=":" horiz-adv-x="431"
|
||||
d="M132 847l13 175h189l-20 -175h-182zM103 371l14 175h189l-21 -175h-182z" />
|
||||
<glyph glyph-name="semicolon" unicode=";"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
|
||||
<glyph glyph-name="less" unicode="<"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
|
||||
<glyph glyph-name="equal" unicode="="
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
|
||||
<glyph glyph-name="greater" unicode=">"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
|
||||
q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="question" unicode="?"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
|
||||
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="A" unicode="A"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
|
||||
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
|
||||
q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="B" unicode="B"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="C" unicode="C"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
|
||||
<glyph glyph-name="D" unicode="D"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
|
||||
l39 -33z" />
|
||||
<glyph glyph-name="E" unicode="E"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="F" unicode="F"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
|
||||
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="G" unicode="G"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
|
||||
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="H" unicode="H"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="I" unicode="I"
|
||||
d="M861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="J" unicode="J"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51
|
||||
l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="K" unicode="K"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
|
||||
q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="L" unicode="L"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
|
||||
q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="M" unicode="M"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
|
||||
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="N" unicode="N"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77
|
||||
l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="O" unicode="O"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="P" unicode="P"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
|
||||
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
|
||||
q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="Q" unicode="Q"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
|
||||
q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="R" unicode="R"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
|
||||
<glyph glyph-name="S" unicode="S"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="T" unicode="T"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="U" unicode="U"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
|
||||
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
|
||||
l39 -33z" />
|
||||
<glyph glyph-name="V" unicode="V"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
|
||||
q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="W" unicode="W"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
|
||||
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="X" unicode="X"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
|
||||
q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="Y" unicode="Y"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
|
||||
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
|
||||
q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="Z" unicode="Z"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="bracketleft" unicode="["
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
|
||||
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="backslash" unicode="\"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41
|
||||
q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="bracketright" unicode="]"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5
|
||||
t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="asciicircum" unicode="^"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55
|
||||
l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="underscore" unicode="_"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
|
||||
<glyph glyph-name="grave" unicode="`"
|
||||
d="M162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="a" unicode="a"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
|
||||
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
|
||||
q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="b" unicode="b"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="c" unicode="c"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
|
||||
<glyph glyph-name="d" unicode="d"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
|
||||
l39 -33z" />
|
||||
<glyph glyph-name="e" unicode="e"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="f" unicode="f"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
|
||||
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="g" unicode="g"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
|
||||
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="h" unicode="h"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="i" unicode="i"
|
||||
d="M861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="j" unicode="j"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51
|
||||
l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="k" unicode="k"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
|
||||
q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="l" unicode="l"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
|
||||
q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="m" unicode="m"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
|
||||
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="n" unicode="n"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77
|
||||
l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="o" unicode="o"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="p" unicode="p"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
|
||||
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
|
||||
q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="q" unicode="q"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
|
||||
q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="r" unicode="r"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
|
||||
<glyph glyph-name="s" unicode="s"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="t" unicode="t"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
|
||||
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
|
||||
<glyph glyph-name="u" unicode="u"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
|
||||
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
|
||||
l39 -33z" />
|
||||
<glyph glyph-name="v" unicode="v"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
|
||||
q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="w" unicode="w"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
|
||||
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="x" unicode="x"
|
||||
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
|
||||
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
|
||||
q32 30 44 32q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="y" unicode="y"
|
||||
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
|
||||
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
|
||||
q13 -3 38 -22l39 -33z" />
|
||||
<glyph glyph-name="z" unicode="z"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
|
||||
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
|
||||
<glyph glyph-name="asciitilde" unicode="~"
|
||||
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346z" />
|
||||
<glyph glyph-name="nonbreakingspace" unicode=" "
|
||||
/>
|
||||
<glyph glyph-name="Otilde" unicode="Õ" horiz-adv-x="77"
|
||||
d="M14 1272q-16 17 -16 44q0 35 30 68q28 28 67 28q46 0 70 -29t24 -62q0 -48 -28.5 -97t-55 -80.5t-84.5 -53.5q15 21 30.5 50.5t21.5 48t6 35.5q0 10 -6 22l-30 8q-19 8 -29 18z" />
|
||||
<hkern u1="M" u2="7" k="339" />
|
||||
<hkern u1="W" u2="j" k="329" />
|
||||
<hkern u1="W" u2="J" k="329" />
|
||||
<hkern u1="m" u2="7" k="339" />
|
||||
<hkern u1="w" u2="j" k="331" />
|
||||
<hkern u1="w" u2="J" k="329" />
|
||||
</font>
|
||||
</defs></svg>
|
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 142 KiB |
After Width: | Height: | Size: 285 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 4.8 MiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 145 KiB |
After Width: | Height: | Size: 289 KiB |
After Width: | Height: | Size: 307 KiB |
After Width: | Height: | Size: 294 KiB |