diff --git a/.deploy/gulpfile.js b/.deploy/gulpfile.js index 61b1f7f3fe..1f9c84f359 100644 --- a/.deploy/gulpfile.js +++ b/.deploy/gulpfile.js @@ -34,7 +34,7 @@ function compileJs(m) { .pipe(babel(BABEL_OPTIONS)) .pipe( debug({ - title: 'Compiled .js : ', + title: 'Compiled .js :', }) ) .pipe(dest(`${OUT_ROOT}/assets/js`)) @@ -45,7 +45,7 @@ function compileCss(m) { .pipe(cleanCSS()) .pipe( debug({ - title: 'Compiled .css : ', + title: 'Compiled .css :', }) ) .pipe(dest(`${OUT_ROOT}/assets/css`)) @@ -121,7 +121,7 @@ function compileHtml(m) { ) .pipe( debug({ - title: 'Compiled .html : ', + title: 'Compiled .html :', }) ) .pipe(dest(OUT_ROOT)) diff --git a/.eslintrc.js b/.eslintrc.js index cf9fa6cb34..f204f13dfc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -85,6 +85,7 @@ module.exports = { UserSelector: true, UserShow: true, DateShow: true, + FileShow: true, DeleteConfirm: true, RbFormModal: true, DlgAssign: true, @@ -135,6 +136,7 @@ module.exports = { $formattedCode: true, CodeViewport: true, $clipboard: true, + $clipboard2: true, $getScript: true, $sec2Time: true, $removeHtml: true, @@ -159,5 +161,8 @@ module.exports = { marked: true, $focus2End: true, RecordSelectorModal: true, + $fetchMetaInfo: true, + FileRename: true, + $syncGet: true, }, } diff --git a/@rbv b/@rbv index ad8d85de12..53bb022f1c 160000 --- a/@rbv +++ b/@rbv @@ -1 +1 @@ -Subproject commit ad8d85de1278e5c071e69c53e7f1b6478708dcd6 +Subproject commit 53bb022f1c022fc172e4cc1bc43fe7d69fa49df6 diff --git a/pom.xml b/pom.xml index e190070095..f0de492e1b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.rebuild rebuild - 4.1.8 + 4.2.0-dev rebuild Building your business-systems freely! https://getrebuild.com/ @@ -343,12 +343,12 @@ redis.clients jedis - 4.4.8 + 6.2.0 com.qiniu qiniu-java-sdk - 7.15.1 + 7.19.0 com.github.whvcse @@ -358,17 +358,17 @@ com.github.oshi oshi-core - 6.6.1 + 6.8.3 org.jsoup jsoup - 1.17.2 + 1.21.2 com.hankcs hanlp - portable-1.8.4 + portable-1.8.6 com.vladsch.flexmark @@ -404,12 +404,12 @@ commons-fileupload commons-fileupload - 1.5 + 1.6.0 com.alibaba easyexcel - 3.3.4 + 4.0.3 ehcache @@ -429,22 +429,22 @@ org.apache.poi poi - 5.2.5 + 5.4.1 org.apache.poi poi-ooxml - 5.2.5 + 5.4.1 com.h2database h2 - 2.2.224 + 2.3.232 com.googlecode.aviator aviator - 5.4.1 + 5.4.3 net.coobird @@ -464,12 +464,12 @@ org.redisson redisson - 3.33.0 + 3.51.0 org.apache.commons commons-email - 1.5 + 1.6.0 eu.bitwalker @@ -490,17 +490,17 @@ cn.hutool hutool-core - 5.8.36 + 5.8.40 cn.hutool hutool-jwt - 5.8.36 + 5.8.40 org.apache.commons commons-lang3 - 3.14.0 + 3.18.0 - - + + - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%-20thread] [%reqid] - %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%-20thread] [%reqid] %logger{36}:%line - %msg%n - ${LOGS_HOME}/rebuild.AVATOR.%d{yyyy-MM-dd}-%i.log + ${LOGS_HOME}/rebuild.ERROR.%d{yyyy-MM-dd}-%i.log 100MB 180 + + ERROR + - - + + diff --git a/src/main/resources/metadata-conf.xml b/src/main/resources/metadata-conf.xml index 6555048a56..9a9899d548 100644 --- a/src/main/resources/metadata-conf.xml +++ b/src/main/resources/metadata-conf.xml @@ -140,7 +140,7 @@ - + @@ -149,7 +149,7 @@ - + @@ -157,14 +157,14 @@ - + - + @@ -223,7 +223,7 @@ - + @@ -239,7 +239,7 @@ - + @@ -247,12 +247,12 @@ - + - + - + @@ -295,6 +295,7 @@ + diff --git a/src/main/resources/scripts/db-init.sql b/src/main/resources/scripts/db-init.sql index 4b0d2d865f..d63a07e9fa 100644 --- a/src/main/resources/scripts/db-init.sql +++ b/src/main/resources/scripts/db-init.sql @@ -370,10 +370,10 @@ create table if not exists `attachment_folder` ( -- ************ Entity [LoginLog] DDL ************ create table if not exists `login_log` ( `LOG_ID` char(20) not null, - `USER` char(20) not null comment '登陆用户', + `USER` char(20) not null comment '登录用户', `IP_ADDR` varchar(100) comment 'IP 地址', `USER_AGENT` varchar(200) comment '客户端', - `LOGIN_TIME` datetime not null default current_timestamp comment '登陆时间', + `LOGIN_TIME` datetime not null default current_timestamp comment '登录时间', `LOGOUT_TIME` datetime null default null comment '退出时间', primary key (`LOG_ID`), index IX0_login_log (`USER`, `LOGIN_TIME`) @@ -436,6 +436,7 @@ create table if not exists `robot_approval_step` ( `APPROVER` char(20) not null comment '审批人', `STATE` smallint(6) default '1' comment '审批结果', `REMARK` varchar(600) comment '批注', + `REMARK_ATTACHMENTS` varchar(700) comment '批注附件', `APPROVED_TIME` datetime null default null comment '审批时间', `PREV_NODE` varchar(100) not null comment '上一审批节点', `IS_CANCELED` char(1) default 'F' comment '是否取消', @@ -965,4 +966,4 @@ insert into `project_task` (`TASK_ID`, `PROJECT_ID`, `PROJECT_PLAN_ID`, `TASK_NU -- DB Version (see `db-upgrade.sql`) insert into `system_config` (`CONFIG_ID`, `ITEM`, `VALUE`) - values ('021-9000000000000001', 'DBVer', 65); + values ('021-9000000000000001', 'DBVer', 66); diff --git a/src/main/resources/scripts/db-upgrade.sql b/src/main/resources/scripts/db-upgrade.sql index 0834f910c2..a9b13da03f 100644 --- a/src/main/resources/scripts/db-upgrade.sql +++ b/src/main/resources/scripts/db-upgrade.sql @@ -1,6 +1,10 @@ -- Database upgrade scripts for rebuild 1.x and 2.x -- Each upgraded starts with `-- #VERSION` +-- #66 (v4.2) +alter table `robot_approval_step` + add column `REMARK_ATTACHMENTS` varchar(700) comment '批注附件'; + -- #65 (v4.1) alter table `robot_sop_step` change column `OPERATOR` `OPERATOR` char(20) comment '操作人', @@ -789,10 +793,10 @@ insert into `classification` (`DATA_ID`, `NAME`, `DESCRIPTION`, `OPEN_LEVEL`, `I -- ************ Entity [LoginLog] DDL ************ create table if not exists `login_log` ( `LOG_ID` char(20) not null, - `USER` char(20) not null comment '登陆用户', + `USER` char(20) not null comment '登录用户', `IP_ADDR` varchar(100) comment 'IP地址', `USER_AGENT` varchar(200) comment '客户端', - `LOGIN_TIME` datetime not null default current_timestamp comment '登陆时间', + `LOGIN_TIME` datetime not null default current_timestamp comment '登录时间', `LOGOUT_TIME` datetime null default null comment '退出时间', primary key (`LOG_ID`), index IX0_login_log (`USER`, `LOGIN_TIME`) diff --git a/src/main/resources/web/_include/header.html b/src/main/resources/web/_include/header.html index 7b52b4e969..4a837bfceb 100644 --- a/src/main/resources/web/_include/header.html +++ b/src/main/resources/web/_include/header.html @@ -40,11 +40,14 @@ + + + diff --git a/src/main/resources/web/_include/nav-left-admin.html b/src/main/resources/web/_include/nav-left-admin.html index 9a81ea7cd2..6222afae7b 100644 --- a/src/main/resources/web/_include/nav-left-admin.html +++ b/src/main/resources/web/_include/nav-left-admin.html @@ -80,6 +80,9 @@
  • FrontJS
  • +
  • + [[${bundle.L('多语言')}]] (LAB) +
  • [[${bundle.L('用户')}]]
  • [[${bundle.L('部门用户')}]] diff --git a/src/main/resources/web/_include/nav-top.html b/src/main/resources/web/_include/nav-top.html index 60b04a1b49..27dd067552 100644 --- a/src/main/resources/web/_include/nav-top.html +++ b/src/main/resources/web/_include/nav-top.html @@ -47,7 +47,7 @@
  • -
    +
    中文 繁体 English diff --git a/src/main/resources/web/admin/admin-cli.html b/src/main/resources/web/admin/admin-cli.html index 70e0a0f670..e7c213c043 100644 --- a/src/main/resources/web/admin/admin-cli.html +++ b/src/main/resources/web/admin/admin-cli.html @@ -74,6 +74,7 @@ } }) $in.focus() + $in.val($urlp('i') || '') }) diff --git a/src/main/resources/web/admin/audit/login-logs.html b/src/main/resources/web/admin/audit/login-logs.html index 218aece112..c20f178ab7 100644 --- a/src/main/resources/web/admin/audit/login-logs.html +++ b/src/main/resources/web/admin/audit/login-logs.html @@ -16,7 +16,7 @@
    -
    +
    diff --git a/src/main/resources/web/admin/audit/recycle-bin.html b/src/main/resources/web/admin/audit/recycle-bin.html index 9d798f596b..6391651edf 100644 --- a/src/main/resources/web/admin/audit/recycle-bin.html +++ b/src/main/resources/web/admin/audit/recycle-bin.html @@ -11,7 +11,7 @@
    -
    +
    @@ -52,8 +52,6 @@ - - diff --git a/src/main/resources/web/admin/audit/revision-history.html b/src/main/resources/web/admin/audit/revision-history.html index 0656fdb0a3..f7f88c1293 100644 --- a/src/main/resources/web/admin/audit/revision-history.html +++ b/src/main/resources/web/admin/audit/revision-history.html @@ -52,7 +52,7 @@
    -
    +
    diff --git a/src/main/resources/web/admin/bizuser/dept-list.html b/src/main/resources/web/admin/bizuser/dept-list.html index 05170cd686..52eb975cb3 100644 --- a/src/main/resources/web/admin/bizuser/dept-list.html +++ b/src/main/resources/web/admin/bizuser/dept-list.html @@ -53,7 +53,7 @@ [[${bundle.L('部门')}]] -
    +
    diff --git a/src/main/resources/web/admin/bizuser/dept-view.html b/src/main/resources/web/admin/bizuser/dept-view.html index 428fcf8e6f..d0e2534150 100644 --- a/src/main/resources/web/admin/bizuser/dept-view.html +++ b/src/main/resources/web/admin/bizuser/dept-view.html @@ -12,7 +12,7 @@

    [[${bundle.L('部门详情')}]]

    - +
    diff --git a/src/main/resources/web/admin/bizuser/role-view.html b/src/main/resources/web/admin/bizuser/role-view.html index f5e948285d..03af93c533 100644 --- a/src/main/resources/web/admin/bizuser/role-view.html +++ b/src/main/resources/web/admin/bizuser/role-view.html @@ -12,7 +12,7 @@

    [[${bundle.L('角色详情')}]]

    - +
    diff --git a/src/main/resources/web/admin/bizuser/team-list.html b/src/main/resources/web/admin/bizuser/team-list.html index 887db2c44a..d50f64cc32 100644 --- a/src/main/resources/web/admin/bizuser/team-list.html +++ b/src/main/resources/web/admin/bizuser/team-list.html @@ -11,7 +11,7 @@
    -
    +
    diff --git a/src/main/resources/web/admin/bizuser/team-view.html b/src/main/resources/web/admin/bizuser/team-view.html index 4fa0c42163..e66fe6ecf1 100644 --- a/src/main/resources/web/admin/bizuser/team-view.html +++ b/src/main/resources/web/admin/bizuser/team-view.html @@ -22,7 +22,7 @@

    [[${bundle.L('团队详情')}]]

    - +
    diff --git a/src/main/resources/web/admin/bizuser/user-list.html b/src/main/resources/web/admin/bizuser/user-list.html index 028be001bb..a8ba0a6b4d 100644 --- a/src/main/resources/web/admin/bizuser/user-list.html +++ b/src/main/resources/web/admin/bizuser/user-list.html @@ -58,7 +58,7 @@ [[${bundle.L('部门')}]] -
    +
    diff --git a/src/main/resources/web/admin/bizuser/user-view.html b/src/main/resources/web/admin/bizuser/user-view.html index b3acde5109..fe93f3d58a 100644 --- a/src/main/resources/web/admin/bizuser/user-view.html +++ b/src/main/resources/web/admin/bizuser/user-view.html @@ -21,7 +21,7 @@

    [[${bundle.L('用户详情')}]]

    - +
    diff --git a/src/main/resources/web/admin/data/data-imports-body.html b/src/main/resources/web/admin/data/data-imports-body.html index 8d62f87f1a..d77e5bad3e 100644 --- a/src/main/resources/web/admin/data/data-imports-body.html +++ b/src/main/resources/web/admin/data/data-imports-body.html @@ -31,8 +31,9 @@ #fieldsMapping td > i.zmdi { float: right; color: #aaa; - font-size: 1.4rem; + font-size: 1.2rem; margin-right: 10px; + margin-top: 2px; } #user-warn .alert { margin-top: 10px; @@ -139,8 +140,8 @@ - - + + diff --git a/src/main/resources/web/admin/integration/apis-manager.html b/src/main/resources/web/admin/integration/apis-manager.html index 92a37d9ab8..1fa144fe73 100644 --- a/src/main/resources/web/admin/integration/apis-manager.html +++ b/src/main/resources/web/admin/integration/apis-manager.html @@ -14,6 +14,7 @@ } .logs-list .list-group-item { padding: 6px 8px; + line-height: 1.2; } .logs-list .list-group-item.active > div { color: #fff; @@ -114,8 +115,6 @@ - - diff --git a/src/main/resources/web/admin/metadata/entities.html b/src/main/resources/web/admin/metadata/entities.html index f36920cf08..e9edba0c89 100644 --- a/src/main/resources/web/admin/metadata/entities.html +++ b/src/main/resources/web/admin/metadata/entities.html @@ -26,11 +26,14 @@ } .card.entity div.badge-wrap { position: absolute; - top: 11px; + top: 13px; right: 11px; } .card.entity div.badge-wrap .badge { text-transform: uppercase; + max-width: 40px; + overflow: hidden; + background-color: rgba(255, 255, 255, 0.7); } .card.entity span { margin-top: 2px; diff --git a/src/main/resources/web/admin/metadata/entity-advanced.html b/src/main/resources/web/admin/metadata/entity-advanced.html index 10ad6173f3..71065735cd 100644 --- a/src/main/resources/web/admin/metadata/entity-advanced.html +++ b/src/main/resources/web/admin/metadata/entity-advanced.html @@ -110,7 +110,32 @@
    [[${bundle.L('卡片模式')}]]
    -
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    [[${bundle.L('日历模式')}]] (LAB)
    +
    + + +
    +
    +
    +
    @@ -127,12 +152,14 @@
    [[${bundle.L('卡片模式')}]]
    - +
    [[${bundle.L('系统内置,不允许删除')}]]
    @@ -141,7 +168,7 @@
    [[${bundle.L('卡片模式')}]]
    -
    [[${bundle.L('导出实体')}]]
    +
    [[${bundle.L('导出实体')}]] (LAB)
    diff --git a/src/main/resources/web/admin/metadata/entity-i18n.html b/src/main/resources/web/admin/metadata/entity-i18n.html new file mode 100644 index 0000000000..7c750f4e46 --- /dev/null +++ b/src/main/resources/web/admin/metadata/entity-i18n.html @@ -0,0 +1,105 @@ + + + + + + [[${bundle.L('多语言')}]] + + + +
    [[${bundle.L('数据列')}]][[${bundle.L('导入到字段')}]][[${bundle.L('数据列')}]][[${bundle.L('导入到字段')}]]
    + + + + + + + + + + + + +
    [[${bundle.L('实体')}]]/[[${bundle.L('字段')}]]
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + diff --git a/src/main/resources/web/admin/metadata/field-edit.html b/src/main/resources/web/admin/metadata/field-edit.html index 6f39bb3f7a..af323df9c7 100644 --- a/src/main/resources/web/admin/metadata/field-edit.html +++ b/src/main/resources/web/admin/metadata/field-edit.html @@ -65,7 +65,7 @@
    - +
    @@ -115,9 +115,7 @@ - +
    @@ -133,9 +131,7 @@ - +
    @@ -449,18 +445,6 @@
    [[${bundle.L('常用')}]]
    -
    - -
    - -
    -
    @@ -502,6 +486,18 @@
    [[${bundle.L('常用')}]]
    +
    + +
    + +
    +
    @@ -537,7 +533,7 @@
    [[${bundle.L('常用')}]]
    diff --git a/src/main/resources/web/admin/metadata/fields.html b/src/main/resources/web/admin/metadata/fields.html index a705f9a8d3..8f676d6572 100644 --- a/src/main/resources/web/admin/metadata/fields.html +++ b/src/main/resources/web/admin/metadata/fields.html @@ -4,6 +4,11 @@ [[${bundle.L('字段管理')}]] +
    diff --git a/src/main/resources/web/admin/setup/rbsystem.html b/src/main/resources/web/admin/setup/rbsystem.html index c94b6d3fdb..eeafe3b4fb 100644 --- a/src/main/resources/web/admin/setup/rbsystem.html +++ b/src/main/resources/web/admin/setup/rbsystem.html @@ -63,7 +63,7 @@

    [[${bundle.L('请稍后')}]]

    diff --git a/src/main/resources/web/admin/system-cfg.html b/src/main/resources/web/admin/system-cfg.html index e73b6dcb91..8b2d10218b 100644 --- a/src/main/resources/web/admin/system-cfg.html +++ b/src/main/resources/web/admin/system-cfg.html @@ -169,6 +169,10 @@
    [[${bundle.L('安全使用')}]]
    [[${bundle.L('显示页面水印')}]] [[${MarkWatermark ? bundle.L('是') : bundle.L('否')}]] + + [[${bundle.L('页面水印内容')}]] + [[${MarkWatermarkFormat ?:bundle.L('默认')}]] + [[${bundle.L('允许分享文件')}]] [[${FileSharable ? bundle.L('是') : bundle.L('否')}]] @@ -299,11 +303,11 @@
    [[${bundle.L('其他')}]]
    [[${PortalUploadMaxSize}]] MB - [[${bundle.L('百度地图 AK')}]] + [[${bundle.L('百度地图 AK')}]] (LAB) [[${PortalBaiduMapAk ?:bundle.L('默认')}]] - [[${bundle.L('悼念模式')}]] + [[${bundle.L('悼念模式')}]] (LAB) [[${PageMourningMode ? bundle.L('是') : bundle.L('否')}]] diff --git a/src/main/resources/web/assets/css/approvals.css b/src/main/resources/web/assets/css/approvals.css index e0f6de2876..ea4c26f0b3 100644 --- a/src/main/resources/web/assets/css/approvals.css +++ b/src/main/resources/web/assets/css/approvals.css @@ -46,7 +46,7 @@ See LICENSE and COMMERCIAL in the project root for license information. right: 27px; top: 18px; color: #999; - font-size: 1.23rem; + font-size: 15px; } #config-side .header > input { @@ -714,7 +714,8 @@ See LICENSE and COMMERCIAL in the project root for license information. width: 100%; } -.expires-notify-set { +.expires-notify-set, +.editable-mode-set { background-color: #eee; padding: 20px; padding-top: 15px; diff --git a/src/main/resources/web/assets/css/chart-design.css b/src/main/resources/web/assets/css/chart-design.css index 7fc696eecc..9a0e5e2641 100644 --- a/src/main/resources/web/assets/css/chart-design.css +++ b/src/main/resources/web/assets/css/chart-design.css @@ -263,8 +263,9 @@ a.ui-draggable.ui-draggable-dragging { .data-info .input .form-control + .icon { position: absolute; right: 12px; - top: 9px; + top: 8px; color: #999; + font-size: 15px; } .data-info .input .form-control:hover, @@ -468,20 +469,29 @@ a.ui-draggable.ui-draggable-dragging { background-position: -1290px -1288px; } -.chart-type > a.DATALIST2 { +.chart-type > a.DATALIST2, +.chart-type > a.PARETO { transform: translateY(7px); } -.chart-type > a > i.DATALIST2 { +.chart-type > a > i.DATALIST2, +.chart-type > a > i.PARETO { position: absolute; background: none; - font-size: 27px; + font-size: 29px; color: #ddd; - margin-top: 3px; - margin-left: 2px; + margin-top: 2px; + margin-left: 1px; } -.chart-type > a.active > i.DATALIST2 { +.chart-type > a > i.PARETO { + font-size: 20px; + margin-left: 5px; + margin-top: 7px; +} + +.chart-type > a.active > i.DATALIST2, +.chart-type > a.active > i.PARETO { color: #4285f4; } @@ -494,6 +504,10 @@ a.ui-draggable.ui-draggable-dragging { margin-left: 5px; } +.rbcolors { + margin-bottom: 12px; +} + .J_opt-DATALIST2 input, .J_opt-CNMAP select, .themeStyle { @@ -531,3 +545,41 @@ a.ui-draggable.ui-draggable-dragging { box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px; width: 199px; } + +.gradient-bg-list { + text-align: center; +} + +.gradient-bg-list > a { + display: inline-block; + width: 57px; + height: 23px; + margin: 0 3px; + margin-top: 1px; +} + +.gradient-bg-list > a:hover { + opacity: 0.8; +} + +h5 > .search-input { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + position: relative; +} + +h5 > .search-input > input { + border: 0 none; + width: 100%; + padding: 3px 0; + appearance: none; + outline: 0 none; + background-color: transparent; +} + +h5 > .search-input > .zmdi { + position: absolute; + right: 1px; + top: 4px; + color: #999; + font-size: 15px; +} diff --git a/src/main/resources/web/assets/css/charts.css b/src/main/resources/web/assets/css/charts.css index 3061313772..ce3c6ed088 100644 --- a/src/main/resources/web/assets/css/charts.css +++ b/src/main/resources/web/assets/css/charts.css @@ -69,13 +69,18 @@ See LICENSE and COMMERCIAL in the project root for license information. color: rgba(0, 0, 0, 0.7); } -.chart-box .chart-head .chart-oper > a .zmdi { +.chart-box .chart-head .chart-oper > a .zmdi, +.chart-box .chart-head .chart-oper > a .mdi { font-size: 1.3rem; vertical-align: middle; width: 20px; text-align: center; } +.chart-box .chart-head .chart-oper > a .mdi-filter { + font-size: 1.25rem; +} + .chart-box .chart-head .chart-oper > a .zmdi-close { font-size: 1.45rem; } @@ -88,6 +93,7 @@ See LICENSE and COMMERCIAL in the project root for license information. .chart-undata { margin: 0; color: #999; + color: rgba(0, 0, 0, 0.3); display: inline-block; font-size: 1.1rem; } @@ -98,6 +104,11 @@ See LICENSE and COMMERCIAL in the project root for license information. text-align: center; } +.chart-body.rb-loading-active::after { + opacity: unset; + background-color: transparent; +} + .chart-body .chart { line-height: normal; height: 100%; @@ -130,7 +141,6 @@ See LICENSE and COMMERCIAL in the project root for license information. } .chart.index > .data-item strong { - font-size: 3.1rem; font-size: 2.5rem; font-weight: 400; } @@ -230,6 +240,7 @@ See LICENSE and COMMERCIAL in the project root for license information. background-color: #eceff1; border-width: 1px; font-weight: normal; + font-weight: bold; } .chart.ctable .table.line-number thead th:first-child, @@ -306,6 +317,7 @@ See LICENSE and COMMERCIAL in the project root for license information. padding-top: 0; padding-bottom: 6px; font-weight: normal; + font-weight: bold; } .chart.ApprovalList .table td, @@ -557,19 +569,30 @@ See LICENSE and COMMERCIAL in the project root for license information. background-position: -1372px -1464px; } -.chart-list > div .chart-icon > i.DATALIST2 { +.chart-list > div .chart-icon > i.DATALIST2, +.chart-list > div .chart-icon > i.PARETO { background: none; - margin-top: 5px; + margin-top: 4px; } -.chart-list > div .chart-icon > i.DATALIST2::before { +.chart-list > div .chart-icon > i.DATALIST2::before, +.chart-list > div .chart-icon > i.PARETO::before { font-family: 'Material Design Icons', serif; content: '\F148C'; color: #4285f4; - font-size: 27px; + font-size: 28px; font-style: normal; } +.chart-list > div .chart-icon > i.PARETO { + margin-top: 9px; +} + +.chart-list > div .chart-icon > i.PARETO::before { + font-size: 21px; + content: '\F1213'; +} + .sortable-box.h200 { height: 208px; } @@ -645,7 +668,6 @@ See LICENSE and COMMERCIAL in the project root for license information. .tcs td:not(.tcs-selection-enabled), .tcs th:not(.tcs-selection-enabled) { -webkit-user-select: none !important; - -khtml-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; user-select: none !important; @@ -667,14 +689,15 @@ See LICENSE and COMMERCIAL in the project root for license information. } .tcs td.tcs-selected:not(.sel-from) { - /*border: 1px double #4887c7;*/ - /*background-color: rgba(51, 122, 183, 0.2) !important;*/ border: 1px double #4285f4; - background-color: #f5f8fd; + background-color: #f5f8fd !important; } -.chart-box.CNMAP .chart-body { - margin-top: -5px; +.chart-box.CNMAP .chart-body, +.chart-box.EmbedFrame .chart-body { + margin-top: 0; + margin-left: -25px; + margin-right: -25px; } .grid-stack .grid-stack-item.HeadingText .grid-stack-item-content { @@ -741,3 +764,217 @@ See LICENSE and COMMERCIAL in the project root for license information. left: unset; right: 0; } + +.chart-box.TABLE .chart.ctable .table { + background-color: transparent; +} + +.chart-box.MyNotification { + padding-left: 0; + padding-right: 0; +} + +.chart-box.MyNotification .chart-head { + margin: 0 25px; +} + +.chart-box.MyNotification .notification-list .a { + padding: 8px 25px; +} + +.chart-box.MyNotification .notification-op { + padding: 10px 25px 15px; +} + +.chart-box.MyNotification .notification-list .notification.append .badge, +.chart-box.MyNotification .notification-list .notification .read-mark, +.chart-box.MyNotification .notification-list .notification.notification-unread > .a::after { + right: 25px; +} + +.chart-box.TABLE.gradient-bg .chart.ctable .table th { + background-color: rgba(255, 255, 255, 0.2); +} + +/* gradient-backgrounds.css */ + +.gradient-bg-1 { + background: linear-gradient(135deg, #fceabb, #f8b500); +} +.gradient-bg-2 { + background: linear-gradient(135deg, #ffecd2, #fcb69f); +} +.gradient-bg-3 { + background: linear-gradient(135deg, #c2e9fb, #a1c4fd); +} +.gradient-bg-4 { + background: linear-gradient(135deg, #d4fc79, #96e6a1); +} +.gradient-bg-5 { + background: linear-gradient(135deg, #fbc2eb, #a6c1ee); +} +.gradient-bg-6 { + background: linear-gradient(135deg, #fdfbfb, #ebedee); +} +.gradient-bg-7 { + background: linear-gradient(135deg, #e0c3fc, #8ec5fc); +} +.gradient-bg-8 { + background: linear-gradient(135deg, #f6d365, #fda085); +} +.gradient-bg-9 { + background: linear-gradient(135deg, #ff9a9e, #fecfef); +} +.gradient-bg-10 { + background: linear-gradient(135deg, #fdfcfb, #e2d1c3); +} +.gradient-bg-11 { + background: linear-gradient(135deg, #ffdde1, #ee9ca7); +} +.gradient-bg-12 { + background: linear-gradient(135deg, #cfd9df, #e2ebf0); +} +.gradient-bg-13 { + background: linear-gradient(135deg, #fddb92, #d1fdff); +} +.gradient-bg-14 { + background: linear-gradient(135deg, #a1ffce, #faffd1); +} +.gradient-bg-15 { + background: linear-gradient(135deg, #f6f9d4, #eaf2f8); +} +.gradient-bg-16 { + background: linear-gradient(135deg, #d9afd9, #97d9e1); +} +.gradient-bg-17 { + background: linear-gradient(135deg, #e0c3fc, #f9f9f9); +} +.gradient-bg-18 { + background: linear-gradient(135deg, #fceabb, #f8b500); +} +.gradient-bg-19 { + background: linear-gradient(135deg, #ffecd2, #fcb69f); +} +.gradient-bg-20 { + background: linear-gradient(135deg, #c2e9fb, #e0c3fc); +} +.gradient-bg-21 { + background: linear-gradient(135deg, #ff9a9e, #fecfef); +} +.gradient-bg-22 { + background: linear-gradient(135deg, #a18cd1, #fbc2eb); +} +.gradient-bg-23 { + background: linear-gradient(135deg, #fad0c4, #ffd1ff); +} +.gradient-bg-24 { + background: linear-gradient(135deg, #fbc2eb, #a6c1ee); +} +.gradient-bg-25 { + background: linear-gradient(135deg, #fdfbfb, #ebedee); +} +.gradient-bg-26 { + background: linear-gradient(135deg, #d4fc79, #96e6a1); +} +.gradient-bg-27 { + background: linear-gradient(135deg, #f6d365, #fda085); +} +.gradient-bg-28 { + background: linear-gradient(135deg, #fddb92, #d1fdff); +} +.gradient-bg-29 { + background: linear-gradient(135deg, #cfd9df, #e2ebf0); +} +.gradient-bg-30 { + background: linear-gradient(135deg, #fceabb, #f8b500); +} +.gradient-bg-31 { + background: linear-gradient(135deg, #ffecd2, #fcb69f); +} +.gradient-bg-32 { + background: linear-gradient(135deg, #a1ffce, #faffd1); +} +.gradient-bg-33 { + background: linear-gradient(135deg, #e0c3fc, #8ec5fc); +} +.gradient-bg-34 { + background: linear-gradient(135deg, #f6f9d4, #eaf2f8); +} +.gradient-bg-35 { + background: linear-gradient(135deg, #fad0c4, #ffd1ff); +} +.gradient-bg-36 { + background: linear-gradient(135deg, #e0c3fc, #f9f9f9); +} +.gradient-bg-37 { + background: linear-gradient(135deg, #ffdde1, #ee9ca7); +} +.gradient-bg-38 { + background: linear-gradient(135deg, #c2e9fb, #a1c4fd); +} +.gradient-bg-39 { + background: linear-gradient(135deg, #fbc2eb, #a6c1ee); +} +.gradient-bg-40 { + background: linear-gradient(135deg, #fdfcfb, #e2d1c3); +} +.gradient-bg-41 { + background: linear-gradient(135deg, #f6d365, #fda085); +} +.gradient-bg-42 { + background: linear-gradient(135deg, #a18cd1, #fbc2eb); +} +.gradient-bg-43 { + background: linear-gradient(135deg, #ff9a9e, #fecfef); +} +.gradient-bg-44 { + background: linear-gradient(135deg, #cfd9df, #e2ebf0); +} +.gradient-bg-45 { + background: linear-gradient(135deg, #d4fc79, #96e6a1); +} +.gradient-bg-46 { + background: linear-gradient(135deg, #fddb92, #d1fdff); +} +.gradient-bg-47 { + background: linear-gradient(135deg, #e0c3fc, #8ec5fc); +} +.gradient-bg-48 { + background: linear-gradient(135deg, #fceabb, #f8b500); +} +.gradient-bg-49 { + background: linear-gradient(135deg, #f6f9d4, #eaf2f8); +} +.gradient-bg-50 { + background: linear-gradient(135deg, #fad0c4, #ffd1ff); +} +.gradient-bg-51 { + background: linear-gradient(135deg, #ffdde1, #ee9ca7); +} +.gradient-bg-52 { + background: linear-gradient(135deg, #d9afd9, #97d9e1); +} +.gradient-bg-53 { + background: linear-gradient(135deg, #fbc2eb, #a6c1ee); +} +.gradient-bg-54 { + background: linear-gradient(135deg, #fdfbfb, #ebedee); +} +.gradient-bg-55 { + background: linear-gradient(135deg, #f6d365, #fda085); +} +.gradient-bg-56 { + background: linear-gradient(135deg, #c2e9fb, #a1c4fd); +} +.gradient-bg-57 { + background: linear-gradient(135deg, #fddb92, #d1fdff); +} +.gradient-bg-58 { + background: linear-gradient(135deg, #a1ffce, #faffd1); +} +.gradient-bg-59 { + background: linear-gradient(135deg, #ffecd2, #fcb69f); +} +.gradient-bg-60 { + background: linear-gradient(135deg, #e0c3fc, #f9f9f9); +} diff --git a/src/main/resources/web/assets/css/chat.css b/src/main/resources/web/assets/css/chat.css index 0a73aadcce..413fe70598 100644 --- a/src/main/resources/web/assets/css/chat.css +++ b/src/main/resources/web/assets/css/chat.css @@ -220,6 +220,25 @@ See LICENSE and COMMERCIAL in the project root for license information. font-family: 'Courier New', 'Hiragina Sans GB', 'San Francisco', 'Helvetica Neue', Helvetica, Arial, PingFangSC-Light, 'Noto Sans SC', 'Microsoft YaHei UI', 'Microsoft YaHei', sans-serif; } +.chat-message .msg-content .md-content h1 { + font-size: 21px; +} +.chat-message .msg-content .md-content h2 { + font-size: 19px; +} +.chat-message .msg-content .md-content h3 { + font-size: 17px; +} +.chat-message .msg-content .md-content h4 { + font-size: 15px; +} +.chat-message .msg-content .md-content h5 { + font-size: 13px; +} +.chat-message .msg-content .md-content h6 { + font-size: 13px; +} + /* ChatSidebar */ .chat-sidebar { diff --git a/src/main/resources/web/assets/css/dashboard.css b/src/main/resources/web/assets/css/dashboard.css index 0f3e3d966a..7cba1f33bc 100644 --- a/src/main/resources/web/assets/css/dashboard.css +++ b/src/main/resources/web/assets/css/dashboard.css @@ -17,6 +17,10 @@ See LICENSE and COMMERCIAL in the project root for license information. border-radius: 6px; } +.grid-stack .grid-stack-item .grid-stack-item-content > .chart-box { + border-radius: 6px; +} + .grid-stack .grid-stack-item .grid-stack-item-content.high, .grid-stack .grid-stack-item .grid-stack-item-content:hover { box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1), 0 16px 24px 0 rgba(81, 129, 228, 0.1); @@ -122,7 +126,7 @@ See LICENSE and COMMERCIAL in the project root for license information. .dash-list .dash-head { display: inline-block; - padding-right: 71px; + padding-right: 61px; position: relative; } @@ -134,7 +138,7 @@ See LICENSE and COMMERCIAL in the project root for license information. padding-left: 6px; display: none; text-align: left; - width: 70px; + width: 60px; } .dash-head:hover .dash-action { @@ -146,6 +150,10 @@ See LICENSE and COMMERCIAL in the project root for license information. margin-left: 3px; } +.dash-list .dash-head { + float: left; +} + .modal.select-list .modal-body li a { border: 1px solid #4285f4; background-color: #fff; diff --git a/src/main/resources/web/assets/css/entity-advanced.css b/src/main/resources/web/assets/css/entity-advanced.css index db49c6e8b8..be3abddebc 100644 --- a/src/main/resources/web/assets/css/entity-advanced.css +++ b/src/main/resources/web/assets/css/entity-advanced.css @@ -186,3 +186,20 @@ See LICENSE and COMMERCIAL in the project root for license information. font-weight: bold; color: #fbbc05; } + +.block4 { + text-align: center; + vertical-align: middle; + font-size: 2px; + padding-top: 9px; +} + +.block4 .block-item4 { + display: inline-block; + background-color: #dee2e6; + width: 30%; + height: 30%; + margin: 0; + padding: 0; + margin-top: 0; +} diff --git a/src/main/resources/web/assets/css/feeds.css b/src/main/resources/web/assets/css/feeds.css index 022117896c..76763aa1a5 100644 --- a/src/main/resources/web/assets/css/feeds.css +++ b/src/main/resources/web/assets/css/feeds.css @@ -307,6 +307,7 @@ See LICENSE and COMMERCIAL in the project root for license information. .comments .comment-reply { background-color: #f5f5f5; + background-color: #f8f8f8; padding: 15px; margin-bottom: 15px; margin-top: 4px; diff --git a/src/main/resources/web/assets/css/files.css b/src/main/resources/web/assets/css/files.css index c8481b18f9..2adea19211 100644 --- a/src/main/resources/web/assets/css/files.css +++ b/src/main/resources/web/assets/css/files.css @@ -222,7 +222,7 @@ See LICENSE and COMMERCIAL in the project root for license information. height: 30px; line-height: 30px; text-align: center; - font-size: 16px; + font-size: 17px; color: #777 !important; } diff --git a/src/main/resources/web/assets/css/list-page.css b/src/main/resources/web/assets/css/list-page.css index b03969f6cd..6b80edab39 100644 --- a/src/main/resources/web/assets/css/list-page.css +++ b/src/main/resources/web/assets/css/list-page.css @@ -348,6 +348,7 @@ See LICENSE and COMMERCIAL in the project root for license information. width: 100%; height: 240px; background-color: #fff; + border-radius: 6px; } #asideCharts .chart-box .chart-body { @@ -367,25 +368,42 @@ See LICENSE and COMMERCIAL in the project root for license information. } #asideCharts .chart-box:hover .chart-oper a.J_source, -#asideCharts .chart-box:hover .chart-oper a.J_fullscreen, #asideCharts .chart-box:hover .chart-oper a.J_chart-edit, -#asideCharts .chart-box:hover .chart-oper a.J_export { +#asideCharts .chart-box:hover .chart-oper a.J_export, +#asideCharts .chart-box:hover .chart-oper a.J_chart-filter { display: none !important; } #asideCharts .charts-wrap > div { - margin-bottom: 20px; + margin-bottom: 15px; } #asideCharts .charts-wrap > div.fullscreen { position: fixed; top: 60px !important; left: 230px !important; - width: 100% !important; - height: 100% !important; + right: 0 !important; + bottom: 0 !important; z-index: 9999; background-color: #fff; padding: 20px; + margin: 0; + overflow: hidden; + transition: all 0.3s; +} + +#asideCharts .charts-wrap > div.fullscreen .chart-box { + height: 100%; +} + +@media (min-width: 768px) and (max-width: 1464px) { + #asideCharts .charts-wrap > div.fullscreen { + left: 200px !important; + } +} + +.rb-collapsible-sidebar-collapsed #asideCharts .charts-wrap > div.fullscreen { + left: 60px !important; } #asideCharts .charts-wrap .ui-sortable-helper { @@ -444,3 +462,21 @@ See LICENSE and COMMERCIAL in the project root for license information. margin-left: 0; } } + +.dataTables_wrapper .rb-datatable-header.v42 { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 10px; +} + +.dataTables_wrapper .rb-datatable-header.v42 > div { + flex: none; + white-space: nowrap; + width: unset; + max-width: unset; +} + +.dataTables_wrapper .rb-datatable-header.v42 > div.right { + text-align: right; +} diff --git a/src/main/resources/web/assets/css/rb-base.css b/src/main/resources/web/assets/css/rb-base.css index b693187f78..d469ea6594 100644 --- a/src/main/resources/web/assets/css/rb-base.css +++ b/src/main/resources/web/assets/css/rb-base.css @@ -142,7 +142,7 @@ body { font-size: 1rem; font-weight: 400; line-height: 1.428571; - color: #404040; + color: #222222; text-align: left; background-color: #eee; min-width: 360px; @@ -2309,7 +2309,7 @@ pre code { padding: 0.7692rem 0.75rem; font-size: 1rem; line-height: 1.428571; - color: #404040; + color: #222222; background-color: #fff; background-clip: padding-box; border: 1px solid #d5d8de; @@ -2333,7 +2333,7 @@ pre code { } .form-control:focus { - color: #404040; + color: #222222; background-color: #fff; border-color: #4285f4; outline: 0; @@ -2373,7 +2373,7 @@ select.form-control:not([size]):not([multiple]) { } select.form-control:focus::-ms-value { - color: #404040; + color: #222222; background-color: #fff; } @@ -2412,7 +2412,7 @@ select.form-control:focus::-ms-value { padding-bottom: 0.7692rem; margin-bottom: 0; line-height: 1.428571; - color: #404040; + color: #222222; background-color: transparent; border: solid transparent; border-width: 1px 0; @@ -3422,7 +3422,7 @@ input[type='submit'].btn-block { padding: 0.5rem 0; margin: 0.125rem 0 0; font-size: 1rem; - color: #404040; + color: #222222; text-align: left; list-style: none; background-color: #fff; @@ -3857,7 +3857,7 @@ input[type='submit'].btn-block { font-size: 1rem; font-weight: 400; line-height: 1.428571; - color: #404040; + color: #222222; text-align: center; white-space: nowrap; background-color: #f5f5f5; @@ -4017,7 +4017,7 @@ input[type='submit'].btn-block { height: 3.2rem; padding: 0.375rem 1.75rem 0.375rem 0.75rem; line-height: 1.428571; - color: #404040; + color: #222222; vertical-align: middle; background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%233d3c3c' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; @@ -4037,7 +4037,7 @@ input[type='submit'].btn-block { } .custom-select:focus::-ms-value { - color: #404040; + color: #222222; background-color: #fff; } @@ -4111,7 +4111,7 @@ input[type='submit'].btn-block { height: 3.2rem; padding: 0.7692rem 0.75rem; line-height: 1.428571; - color: #404040; + color: #222222; background-color: #fff; border: 1px solid #d5d8de; border-radius: 2px; @@ -4127,7 +4127,7 @@ input[type='submit'].btn-block { height: 2.966971rem; padding: 0.7692rem 0.75rem; line-height: 1.428571; - color: #404040; + color: #222222; content: 'Browse'; background-color: #f5f5f5; border-left: 1px solid #d5d8de; @@ -5176,7 +5176,7 @@ input[type='submit'].btn-block { padding: 0.5rem 0.75rem; margin-left: -1px; line-height: 1.25; - color: #404040; + color: #222222; background-color: #fff; border: 1px solid #dee2e6; min-width: 36px; @@ -5685,7 +5685,7 @@ input[type='submit'].btn-block { } .list-group-item-action:active { - color: #404040; + color: #222222; background-color: #ddd; } @@ -6431,7 +6431,7 @@ button.close { .popover-body { padding: 0.6154rem 1.077rem; - color: #404040; + color: #222222; } .carousel { @@ -10875,7 +10875,7 @@ a.text-grey:hover { } .text-body { - color: #404040 !important; + color: #222222 !important; } .text-muted { @@ -11168,7 +11168,7 @@ canvas { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 0 20px; - color: #404040; + color: #222222; } .rb-nosidebar-left .rb-top-header .page-title { @@ -11361,7 +11361,7 @@ canvas { } .rb-top-header .search-input-gs { - color: #404040; + color: #222222; border-radius: 99px; background: #f7f7f7; width: 320px; @@ -11476,7 +11476,7 @@ canvas { display: none; background-color: #fff; padding: 16px 10px; - color: #404040; + color: #222222; font-weight: 300; font-size: 1.077rem; border-bottom: 1px solid #f5f5f5; @@ -12419,8 +12419,8 @@ a.avatar.x48 img { display: none; background-color: #fff; padding: 16px 10px; - color: #404040; - font-weight: 300; + color: #222222; + /* font-weight: 300; */ font-size: 1.077rem; } @@ -12478,6 +12478,7 @@ a.avatar.x48 img { display: block; padding: 0 20px; color: #696969; + color: #606060; font-size: 1.077rem; line-height: 38px; text-overflow: ellipsis; @@ -12517,6 +12518,7 @@ a.avatar.x48 img { .rb-left-sidebar .sidebar-elements > li > a:hover > span { color: #3d3d3d; + color: #404040; } .rb-left-sidebar .sidebar-elements > li > ul { @@ -13187,7 +13189,7 @@ a.avatar.x48 img { .rb-right-sidebar .tab-panel .tab-content .bottom-input > input { border: 0; background-color: #fafafa; - color: #404040; + color: #222222; width: 100%; font-size: 1rem; font-weight: 400; @@ -13436,7 +13438,7 @@ a.avatar.x48 img { border-right: 1px solid #e6e6e6; margin-top: 61px; padding-bottom: 61px; - color: #404040; + color: #222222; } .rb-collapsible-sidebar-collapsed .page-aside { @@ -13527,7 +13529,7 @@ a.avatar.x48 img { } .aside-nav .nav li a { - color: #404040; + color: #222222; padding: 13px 22px; } @@ -13944,7 +13946,7 @@ a.avatar.x48 img { .rb-sub-navigation-collapse { padding: 16px 10px; - color: #404040; + color: #222222; border-bottom: 1px solid #f5f5f5; display: none; } @@ -13969,7 +13971,7 @@ a.avatar.x48 img { } .rb-sub-navigation-collapse:focus { - color: #404040; + color: #222222; } .rb-sub-navigation-collapse:hover { @@ -14266,7 +14268,7 @@ a.avatar.x48 img { display: none; background-color: #fff; padding: 16px 10px; - color: #404040; + color: #222222; font-weight: 300; font-size: 1.077rem; text-align: left; @@ -14906,7 +14908,7 @@ a.avatar.x48 img { -ms-flex-direction: column; flex-direction: column; text-align: center; - color: #404040; + color: #222222; padding: 12px 21px; border-radius: 3px; min-width: 107px; @@ -15483,7 +15485,7 @@ pre code { .btn-light, .btn-secondary { - color: #404040; + color: #222222; background-color: #fff; border-color: #dbdbdb; } @@ -15492,7 +15494,7 @@ pre code { .btn-light:focus, .btn-secondary.focus, .btn-secondary:focus { - color: #404040; + color: #222222; background-color: #fff; border-color: #dbdbdb; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05); @@ -15503,7 +15505,7 @@ pre code { .btn-light:hover, .btn-secondary.hover, .btn-secondary:hover { - color: #404040; + color: #222222; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); background-color: #fff; @@ -15579,7 +15581,7 @@ pre code { .btn-secondary[disabled], fieldset[disabled] .btn-light, fieldset[disabled] .btn-secondary { - color: #404040; + color: #222222; } .btn-light.disabled, @@ -15618,7 +15620,7 @@ fieldset[disabled] .btn-secondary.focus, fieldset[disabled] .btn-secondary:active, fieldset[disabled] .btn-secondary:focus, fieldset[disabled] .btn-secondary:hover { - color: #404040; + color: #222222; background-color: #fff; border-color: #dbdbdb; -webkit-box-shadow: none; @@ -15661,7 +15663,7 @@ fieldset[disabled] .btn-secondary.focus .icon, fieldset[disabled] .btn-secondary:active .icon, fieldset[disabled] .btn-secondary:focus .icon, fieldset[disabled] .btn-secondary:hover .icon { - color: #404040; + color: #222222; } .btn-light .icon, @@ -15677,7 +15679,7 @@ fieldset[disabled] .btn-secondary:hover .icon { .btn-light .badge, .btn-secondary .badge { color: #fff; - background-color: #404040; + background-color: #222222; } .btn-primary { @@ -16301,14 +16303,14 @@ fieldset[disabled] .btn-success:hover { } .btn-light { - color: #404040; + color: #222222; background-color: #fff; border-color: #fff; } .btn-light.focus, .btn-light:focus { - color: #404040; + color: #222222; background-color: #fff; border-color: #fff; outline: 0; @@ -16316,7 +16318,7 @@ fieldset[disabled] .btn-success:hover { .btn-light.hover, .btn-light:hover { - color: #404040; + color: #222222; -webkit-box-shadow: inset 0 -1px 0 #e6e6e6; box-shadow: inset 0 -1px 0 #e6e6e6; background-color: #fff; @@ -16329,7 +16331,7 @@ fieldset[disabled] .btn-success:hover { .btn-light:not([disabled]):not(.disabled).active, .btn-light:not([disabled]):not(.disabled):active, .show > .btn-light.dropdown-toggle { - color: #404040; + color: #222222; -webkit-box-shadow: inset 0 2px 0 #e6e6e6; box-shadow: inset 0 2px 0 #e6e6e6; background-color: #f0f0f0; @@ -16342,7 +16344,7 @@ fieldset[disabled] .btn-success:hover { .btn-light:not([disabled]):not(.disabled).active .icon, .btn-light:not([disabled]):not(.disabled):active .icon, .show > .btn-light.dropdown-toggle .icon { - color: #404040; + color: #222222; } .btn-light.active.focus, @@ -16360,7 +16362,7 @@ fieldset[disabled] .btn-success:hover { .show > .btn-light.dropdown-toggle.focus, .show > .btn-light.dropdown-toggle:focus, .show > .btn-light.dropdown-toggle:hover { - color: #404040; + color: #222222; background-color: #f0f0f0; border-color: #f0f0f0; border-top-color: #d4d4d4; @@ -16383,7 +16385,7 @@ fieldset[disabled] .btn-success:hover { .show > .btn-light.dropdown-toggle.focus .icon, .show > .btn-light.dropdown-toggle:focus .icon, .show > .btn-light.dropdown-toggle:hover .icon { - color: #404040; + color: #222222; } .btn-light.active, @@ -16414,14 +16416,14 @@ fieldset[disabled] .btn-light:focus, fieldset[disabled] .btn-light:hover { background-color: #fff; border-color: #fff; - color: #404040; + color: #222222; -webkit-box-shadow: none; box-shadow: none; } .btn-light .badge { color: #fff; - background-color: #404040; + background-color: #222222; } .btn-dark { @@ -17459,12 +17461,12 @@ fieldset[disabled] .btn-dark:hover { } .card-full-color.card-full-light .card-header { - color: #404040; + color: #222222; } .card-full-color.card-full-light .card-header .card-subtitle, .card-full-color.card-full-light .card-header .icon { - color: #404040; + color: #222222; } .card-full-primary { @@ -17564,7 +17566,7 @@ fieldset[disabled] .btn-dark:hover { .card-full-light { background-color: #fff; - color: #404040; + color: #222222; } .card-full-light .card-header-contrast { @@ -17574,7 +17576,7 @@ fieldset[disabled] .btn-dark:hover { } .card-full-light .tools .icon { - color: #404040; + color: #222222; } .card-full-light .tools .icon:hover { @@ -18073,7 +18075,7 @@ fieldset[disabled] .btn-dark:hover { display: block; color: #4285f4; width: 100%; - color: #404040; + color: #222222; background-color: transparent; text-align: left; } @@ -18253,7 +18255,7 @@ fieldset[disabled] .btn-dark:hover { .was-validated .custom-control:valid, .was-validated .form-check-label:valid, .was-validated .form-control-feedback:valid { - color: #404040; + color: #222222; } .custom-select.is-valid, @@ -18313,7 +18315,7 @@ fieldset[disabled] .btn-dark:hover { .was-validated .custom-control:invalid, .was-validated .form-check-label:invalid, .was-validated .form-control-feedback:invalid { - color: #404040; + color: #222222; } .custom-select.is-invalid, @@ -18413,7 +18415,7 @@ fieldset[disabled] .btn-dark:hover { min-width: 60px; text-align: center; border-radius: 0; - color: #404040; + color: #222222; border-width: 0; } @@ -18444,7 +18446,7 @@ fieldset[disabled] .btn-dark:hover { .nav-tabs > li.nav-item a.nav-link.active:focus, .nav-tabs > li.nav-item a.nav-link.active:hover { - color: #404040; + color: #222222; } .nav-tabs > li.nav-item a.nav-link.disabled { @@ -18623,7 +18625,7 @@ fieldset[disabled] .btn-dark:hover { -webkit-box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); background-color: #fff; - color: #404040; + color: #222222; border: none; } @@ -18912,7 +18914,7 @@ fieldset[disabled] .btn-dark:hover { .colored-header .modal-content .modal-body { padding: 35px 20px 20px; background-color: #fff; - color: #404040; + color: #222222; } .colored-header .modal-content .modal-footer { @@ -19028,7 +19030,7 @@ fieldset[disabled] .btn-dark:hover { .alert-light { background-color: #fff; outline: 1px solid rgba(115, 115, 115, 0.08); - color: #404040; + color: #222222; } .alert-light > .icon { @@ -19084,7 +19086,7 @@ fieldset[disabled] .btn-dark:hover { } .alert-dismissible.alert-light .close { - color: #404040; + color: #222222; opacity: 0.35; } @@ -19093,7 +19095,7 @@ fieldset[disabled] .btn-dark:hover { } .alert-dismissible.alert-dark .close { - color: #404040; + color: #222222; opacity: 0.35; } @@ -19166,7 +19168,7 @@ fieldset[disabled] .btn-dark:hover { .alert-icon > .message { display: table-cell; padding: 1.385rem 1.385rem; - color: #404040; + color: #222222; border: 1px solid #d4d4d4; border-left-width: 0; } @@ -19178,7 +19180,7 @@ fieldset[disabled] .btn-dark:hover { } .alert-icon.alert-dismissible .close { - color: #404040; + color: #222222; opacity: 0.35; } @@ -19363,7 +19365,7 @@ fieldset[disabled] .btn-dark:hover { .alert-simple { border: 1px solid #d4d4d4; background-color: #fff; - color: #404040; + color: #222222; -webkit-box-shadow: 0.5px 0.9px 0 rgba(0, 0, 0, 0.07); box-shadow: 0.5px 0.9px 0 rgba(0, 0, 0, 0.07); } @@ -19725,7 +19727,7 @@ fieldset[disabled] .btn-dark:hover { .badge-secondary { background-color: #fff; - color: #404040; + color: #222222; } .badge-success { @@ -20042,7 +20044,7 @@ address { line-height: 14px; font-weight: 400; padding: 0.7692rem 0.9231rem; - color: #404040; + color: #222222; background-color: #fff; border: 1px solid #ddd; border-radius: 2px; @@ -20099,6 +20101,7 @@ address { padding-bottom: 0; line-height: 1; color: #222; + color: #404040; } @media (max-width: 575.98px) { @@ -21004,7 +21007,7 @@ div.dataTables_wrapper div.dataTables_filter label select { } .full-calendar .fc-button { - color: #404040; + color: #222222; background: #fff; border-color: #dbdbdb; height: auto; @@ -21015,7 +21018,7 @@ div.dataTables_wrapper div.dataTables_filter label select { .full-calendar .fc-button.focus, .full-calendar .fc-button:focus { - color: #404040; + color: #222222; background-color: #fff; border-color: #dbdbdb; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05); @@ -21378,7 +21381,7 @@ fieldset[disabled] .full-calendar .fc-button:hover { } .gritter-item-wrapper.clean .gritter-item { - color: #404040; + color: #222222; } .gritter-item-wrapper.clean .gritter-item .gritter-img-container { @@ -21386,7 +21389,7 @@ fieldset[disabled] .full-calendar .fc-button:hover { } .gritter-item-wrapper.clean .gritter-item .gritter-content { - color: #404040; + color: #222222; } .gritter-item-wrapper.clean .gritter-item .gritter-content .gritter-close { @@ -21394,7 +21397,7 @@ fieldset[disabled] .full-calendar .fc-button:hover { } .gritter-item-wrapper.clean .gritter-item .gritter-content .gritter-close::after { - color: #404040; + color: #222222; } .gritter-item-wrapper.color .gritter-item .gritter-content { @@ -21565,7 +21568,7 @@ fieldset[disabled] .full-calendar .fc-button:hover { line-height: 37px; line-height: 35px; font-size: 1rem; - color: #404040; + color: #222222; } .select2-container--default .select2-selection--single .select2-selection__rendered .select2-selection__clear, @@ -21600,7 +21603,7 @@ fieldset[disabled] .full-calendar .fc-button:hover { font-weight: 400; line-height: 37px; line-height: 35px; - color: #404040; + color: #222222; } .select2-container--default .select2-selection--multiple { @@ -23252,4 +23255,4 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^='col-']:las border-radius: 50%; opacity: 0; animation: spinner-grow 0.75s linear infinite; -} \ No newline at end of file +} diff --git a/src/main/resources/web/assets/css/rb-page.css b/src/main/resources/web/assets/css/rb-page.css index dd3a58400b..53733e40d7 100644 --- a/src/main/resources/web/assets/css/rb-page.css +++ b/src/main/resources/web/assets/css/rb-page.css @@ -14,27 +14,23 @@ See LICENSE and COMMERCIAL in the project root for license information. .bosskey-show, .admin-show { - display: none; + display: none !important; +} + +html.commercial .rbv { + display: none !important; } html.admin .admin-show { - display: block; + display: block !important; } html.admin .admin-show.inline { - display: inline-block; + display: inline-block !important; } html.admin .admin-show.row { - display: flex; -} - -html.commercial .rbv { - display: none !important; -} - -.dev-show { - display: none; + display: flex !important; } html, @@ -519,6 +515,7 @@ a.btn { .custom-control-label { line-height: 1.9; color: #444; + color: #404040; } .custom-control-sm .custom-control-label { @@ -890,7 +887,7 @@ body.view-body { .select2-container--default .select2-selection--multiple .select2-search--inline .select2-search__field, .select2-container--default .select2-selection--multiple .select2-selection__choice { - color: #404040; + color: #222222; } /* .select2-container--default .select2-selection--multiple .select2-search--inline .select2-search__field { @@ -915,6 +912,12 @@ body.view-body { margin: 0 0 0 5px; } +textarea.row1x { + height: 37px !important; + resize: none; + padding-top: 7px; +} + textarea.row2x { height: 52px !important; resize: none; @@ -1077,7 +1080,7 @@ a.link.link-icon::after { font-size: 1.6rem; font-weight: 400; line-height: 35px; - color: #404040; + color: #222222; position: absolute; right: 10px; } @@ -1190,15 +1193,21 @@ a.link.link-icon::after { position: absolute; right: 0; top: 0; - font-size: 1.15rem; + font-size: 1rem; color: #fff; cursor: default; - background-color: rgba(0, 0, 0, 0.3); + background-color: rgba(0, 0, 0, 0.4); text-align: center; display: none; - width: 18px; - height: 19px; - line-height: 19px; + width: 16px; + height: 16px; + line-height: 16px; +} + +.img-field a.img-upload b + b, +.img-field label.img-upload b + b, +.file-field .img-thumbnail b + b { + right: 17px; } .img-field.drop .inputfile + label, @@ -1291,7 +1300,7 @@ a.link.link-icon::after { position: relative; overflow: hidden; border: 0 none; - color: #404040; + color: #222222; border-left: 2px solid #ccc; border-radius: 2px; max-height: 38px; @@ -1405,7 +1414,7 @@ a.link.link-icon::after { top: 0; font-size: 1rem; font-weight: 700; - color: #404040; + color: #222222; width: 12px; height: 32px; cursor: pointer; @@ -1424,7 +1433,7 @@ a.link.link-icon::after { } .protable thead > tr > th.required::after { - margin-top: 2px; + margin-top: 3px; } .form-text { @@ -1585,6 +1594,11 @@ a.link.link-icon::after { background-color: #fff; } +.data-list .table.table-bordered42 td, +.data-list .table.table-bordered42 th { + border-right: 1px solid #dee2e6; +} + .data-list .table thead th.column-checkbox > div > .custom-control.custom-control-sm { margin-top: -19px; } @@ -1676,6 +1690,12 @@ i.dividing.ui-draggable-dragging { max-width: 1000px; } +.data-list .table td[data-copy]:hover, +.data-list .table td[data-copy]:hover .badge { + cursor: pointer; + font-weight: bold !important; +} + .data-list .table td.td-sm, .data-list .table tbody tr td.user-avatar { padding: 3px 10px; @@ -1783,6 +1803,8 @@ i.dividing.ui-draggable-dragging { .column-multi span.badge { background-color: #f2f2f2; border-color: #f2f2f2; + background-color: rgba(0, 0, 0, 0.04); + border-color: transparent; } .column-fixed { @@ -2332,6 +2354,7 @@ th.column-fixed { display: block; padding: 8px 10px; color: #444; + color: #404040; } .aside-tree > ul > li > a { @@ -2485,13 +2508,13 @@ th.column-fixed { line-height: 34px; text-align: center; font-size: 1.2rem; - border-radius: 2px; + border-radius: 6px; width: 22px; display: none; } .aside-2tree li span.action:hover { - background-color: rgba(0, 0, 0, 0.2); + background-color: rgba(0, 0, 0, 0.1); color: #fff; } @@ -2769,6 +2792,7 @@ div.dataTables_wrapper div.dataTables_filter .dropdown-menu-advfilter input { cursor: help; float: right; margin-left: 0.384615rem; + margin-top: 1px; } form.dropzone { @@ -2812,6 +2836,10 @@ form.simple { font-size: 0 !important; } +.fs-11 { + font-size: 11px !important; +} + .fs-12 { font-size: 12px !important; } @@ -2866,7 +2894,7 @@ form.simple { } .cl-base { - color: #404040; + color: #222222; } .modal-dialog.selector.show { @@ -3027,10 +3055,11 @@ form { text-overflow: clip; } +.user-selector .tab-container, .user-selector .tab-content { - margin: 0; - padding: 0; - border-radius: 0; + margin: 0 !important; + padding: 0 !important; + border-radius: 0 !important; } .user-selector .rb-scroller { @@ -3254,7 +3283,7 @@ a.user-show:not([href]) { } .approval-toolbar .alert > .close .btn { - padding: 8px 0; + padding: 8px; font-size: 12px; line-height: 1.1; min-height: 0; @@ -3289,7 +3318,7 @@ a.user-show:not([href]) { .form.approval-form .aforms { background-color: #f5f5f5; border-radius: 2px; - padding: 15px; + padding: 20px; background-color: rgba(230, 230, 230, 0.3); box-shadow: inset 0 0 10px rgba(230, 230, 230, 0.6); } @@ -3307,6 +3336,11 @@ a.user-show:not([href]) { border-top: 1px solid #eceff1; } +.form.approval-form .aforms .form.row > .form-group { + padding-left: 0; + padding-right: 0; +} + .form.approval-form .approval-list { padding: 5px 0; } @@ -3340,7 +3374,7 @@ a.user-show:not([href]) { } .form.approval-form .cc-accounts a { - color: #404040; + color: #222222; font-weight: bold; } @@ -3351,6 +3385,32 @@ a.user-show:not([href]) { color: #8a8a8a; } +.form.approval-form .file-field { + margin-top: 6px; +} + +.form.approval-form .file-field .file-field-handle { + display: inline-block; + height: 38px; + width: 38px; + margin: 0; + background-color: #eee; + border-radius: 2px; + text-align: center; + line-height: 38px; + font-size: 18px; + cursor: pointer; + margin-bottom: 5px; +} + +.form.approval-form .file-field .file-field-handle:hover { + opacity: 0.8; +} + +.form.approval-form .file-field { + display: flex; +} + .select2-sm .select2-container--default .select2-selection--single, .select2-sm .select2-container--default .select2-selection--multiple { min-height: 36px; @@ -3606,7 +3666,7 @@ a.user-show:not([href]) { .preview-modal .preview-body .oper-box-wrap { position: absolute; - bottom: 20px; + bottom: 25px; text-align: center; left: 0; right: 0; @@ -3831,10 +3891,14 @@ a.user-show:not([href]) { } .page-aside.widgets { - z-index: 2; + z-index: 3; overflow: hidden; } +.page-aside.widgets + .main-content { + z-index: 2; +} + .page-aside.widgets .tab-container { min-width: 279px; overflow: hidden; @@ -4993,6 +5057,7 @@ pre.unstyle { .rbcolors > a.default > i { color: #444 !important; + color: #404040 !important; } .rbcolors input[type='color'] { @@ -5460,7 +5525,7 @@ pre.unstyle { } .light-link { - color: #404040 !important; + color: #222222 !important; border-bottom: 1px dotted #4285f4; } @@ -5514,30 +5579,44 @@ pre.unstyle { padding: 0 15px; } +.rsheetb-table > span { + overflow: auto; + display: block; +} + .rsheetb-table th { font-weight: normal !important; } .rsheetb-table table { margin: 0; + border-left: 0 none; + border-right: 0 none; +} + +.rsheetb-table table td:first-child, +.table-bordered th:first-child { + border-left: 0 none; + padding-left: 15px !important; +} + +.rsheetb-table table td:last-child, +.table-bordered th:last-child { + border-right: 0 none; + padding-right: 15px !important; } .rsheetb-table td > span { - padding: 4px; + padding: 5px 0; + width: 100%; min-width: 120px; display: block; line-height: 1; - outline-color: #bdc0c7; -} - -.rsheetb-table tr > th:first-child, -.rsheetb-table tr > td:first-child { - padding-left: 15px; } -.rsheetb-table tr > th:last-child, -.rsheetb-table tr > td:last-child { - padding-right: 15px; +.rsheetb-table td > span:focus { + outline-width: 1px; + outline-color: var(--rb-color); } /*.input-search .input-group-btn,*/ @@ -5562,6 +5641,10 @@ div.formula-code { padding: 4px 10px; } +div.formula-code { + white-space: pre; +} + .flatpickr-time input::selection { background-color: var(--rb-theme-color); color: #fff; @@ -5628,6 +5711,10 @@ div.formula-code { width: auto; } +.form-layout.vertical38.rbview-form > .row .form-group > .col-form-label { + margin-bottom: 5px; +} + /* fjs style */ .rbform-fjsalert { @@ -5760,7 +5847,8 @@ div.formula-code { .rb-aside .main-content { margin-left: 230px; } - .rb-left-sidebar { + .rb-left-sidebar, + .rb-collapsible-sidebar-collapsed .rb-left-sidebar .sidebar-elements > li ul.visible { width: 200px; } .rb-content { @@ -5768,6 +5856,10 @@ div.formula-code { } } +.rb-collapsible-sidebar-collapsed .rb-left-sidebar .sidebar-elements > li ul.visible .title { + padding-top: 9px; +} + .form-control::placeholder, .select2-search__field::placeholder { color: #999; @@ -5829,6 +5921,12 @@ div.formula-code { margin: 0 0 1rem !important; } +.md-content h1, +.md-content h2 { + border-bottom: 1px solid #d1d9e0b3; + padding-bottom: 0.3em; +} + .md-content ol, .md-content ul { padding-left: 2rem; @@ -5884,3 +5982,125 @@ div.formula-code { .navbar-more41.show > a { background-color: rgba(255, 255, 255, 0.15); } + +/* v4.2 Notification */ + +.notification-list .list-nodata { + padding-top: 70px; +} + +.notification-list .notification > .a { + cursor: default; + padding-left: 15px; +} + +.notification-list .notification:hover { + background-color: #ebf2fe !important; +} + +.notification-list .notification.notification-unread:hover { + background-color: #dce9fd !important; +} + +.notification-list .notification .text { + color: #222222 !important; + font-size: 1rem !important; +} + +.notification-list .notification .date { + color: #8a8a8a !important; + margin-top: 6px !important; +} + +.notification-list .notification .text a { + cursor: pointer; +} + +.notification-list .notification .text a.record { + text-decoration: underline; + padding: 0 1px; +} + +.notification-list .notification.append { + padding-right: 70px; +} + +.notification-list .notification.append .badge, +.notification-list .notification .read-mark { + position: absolute; + right: 15px; + top: 11px; + font-weight: normal; +} + +.notification-list .notification.append .badge { + line-height: 1.35; +} + +.notification-list .notification .read-mark { + top: unset; + bottom: 6px; + font-size: 12px; + display: none; + visibility: hidden; +} + +.notification-list .notification:hover .read-mark { + display: inline-block; +} + +.notification-list .notification.notification-unread > .a::after { + right: 13px; + top: 4px; + background-color: #4285f4 !important; +} + +.notification-list .notification.notification-unread .read-mark { + visibility: visible; +} + +.notification-list .notification .text > ul { + padding-left: 18px; +} + +.notification-list .notification .text > ul li > p { + margin: 0; +} + +.notification-list .notification.focus { + outline: 2px solid #fbbc05; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1); + z-index: 1; +} + +.notification-info blockquote { + font-size: 1rem; + border-left: 3px solid #ccc; + padding-left: 6px; + margin: 4px 0 6px 1px; + color: #777; +} + +.notification-list li:first-child { + border-top: 1px solid #ebebeb; +} + +.modal-header .close[disabled] { + color: #aaa !important; + opacity: 0.5 !important; +} + +.rb-icons-nav > li.dropdown > a .indicator:not(:empty) { + background-color: #ea4335 !important; + color: #fff; + height: 14px; + min-width: 14px; + line-height: 14px; + width: auto; + text-align: center; + padding: 0 3px; + right: unset; + left: 24px; + font-size: 10px; + border-radius: 10rem; +} diff --git a/src/main/resources/web/assets/css/transform-design.css b/src/main/resources/web/assets/css/transform-design.css index d719efc5a6..f27a8aa702 100644 --- a/src/main/resources/web/assets/css/transform-design.css +++ b/src/main/resources/web/assets/css/transform-design.css @@ -35,6 +35,10 @@ See LICENSE and COMMERCIAL in the project root for license information. border-left: 3px solid #bbb; } +.fields-mapping span.badge.rep { + border-left: 3px solid #fbbc05; +} + .fields-mapping span.badge::before, .entities-mapping > li.nav-item a > span::before { content: '\f2fd'; @@ -43,9 +47,9 @@ See LICENSE and COMMERCIAL in the project root for license information. right: 0; color: #aaa; transform: rotate(180deg); - font-size: 1.1rem; + font-size: 1.2rem; font-weight: bold; - margin-top: -2px; + margin-top: -3px; } .entities-mapping > li.nav-item a.nav-link > span { @@ -83,13 +87,28 @@ See LICENSE and COMMERCIAL in the project root for license information. color: #fbbc05; } +.fields-mapping .row { + margin-left: 0; + margin-right: 0; +} + +.fields-mapping .row > div:first-child { + padding-left: 0; +} + +.fields-mapping .row > div:last-child { + padding-right: 0; +} + +.fields-mapping .row:not(.title2):hover { + background-color: #f0f0f0; +} + .fields-mapping .row::after { content: ' '; height: 1px; width: 100%; border-bottom: 1px dotted #dee2e6; - margin-left: 15px; - margin-right: 15px; } .fields-mapping .row.title2::after { diff --git a/src/main/resources/web/assets/css/triggers.css b/src/main/resources/web/assets/css/triggers.css index 3e8dc19dc2..d37d79d542 100644 --- a/src/main/resources/web/assets/css/triggers.css +++ b/src/main/resources/web/assets/css/triggers.css @@ -360,8 +360,13 @@ See LICENSE and COMMERCIAL in the project root for license information. color: #fff; } -textarea.formula-code + .fields-vars { - bottom: 21px; +textarea.formula-code + .fields-vars > a, +textarea.formula-code + .fields-vars + .fields-vars > a { + bottom: 12px; +} + +.textarea-wrap .fields-vars.funcs > a { + right: 33px; } .auto-assign .select2-selection__rendered, @@ -522,7 +527,7 @@ textarea.formula-code + .fields-vars { position: relative; } -.textarea-wrap > .fields-vars { +.textarea-wrap > .fields-vars > a { position: absolute; right: 6px; bottom: 6px; @@ -531,20 +536,21 @@ textarea.formula-code + .fields-vars { line-height: 1; padding: 4px 3px 2px; border-radius: 4px; + background-color: rgba(255, 255, 255, 0.1); background-color: #212121; opacity: 0.4; transition: opacity 0.4s; } -.textarea-wrap:hover > .fields-vars { +.textarea-wrap:hover > .fields-vars > a { opacity: 1; } -.textarea-wrap > .fields-vars > .mdi { +.textarea-wrap > .fields-vars > a > .mdi { color: rgba(255, 255, 255, 0.8); } -.textarea-wrap > .fields-vars:hover > .mdi { +.textarea-wrap > .fields-vars:hover > a > .mdi { color: rgba(255, 255, 255, 1); } diff --git a/src/main/resources/web/assets/css/view-page.css b/src/main/resources/web/assets/css/view-page.css index 9b64d5b62d..dedf36b9d5 100644 --- a/src/main/resources/web/assets/css/view-page.css +++ b/src/main/resources/web/assets/css/view-page.css @@ -69,7 +69,6 @@ body { line-height: 1.428571; display: inline-block; margin: 0; - font-weight: 300; font-size: 1.538rem; max-width: 80%; } @@ -97,6 +96,11 @@ body { opacity: 0.8; } +.view-header > span > .close.sm.J_record-prev .mdi, +.view-header > span > .close.sm.J_record-next .mdi { + font-size: 21px; +} + .rbview-form > .row .form-group { padding-top: 4px; padding-bottom: 4px; @@ -106,6 +110,12 @@ body { min-height: 37px; } +.rbview-form .form-control-plaintext[data-copy]:hover, +.rbview-form .form-control-plaintext[data-copy]:hover .badge { + cursor: pointer; + font-weight: bold !important; +} + .rbview-form .type-NTEXT .form-control-plaintext { max-height: 72px; position: relative; @@ -341,6 +351,7 @@ body { .view-user .col-lg-4 { padding-right: 0; color: #222; + color: #404040; } .view-user .col-lg-8 { @@ -382,6 +393,7 @@ body { .view-user .user-show { line-height: 1; + cursor: pointer !important; } .shares-list { @@ -488,20 +500,20 @@ body { background-color: transparent; } -.rbview-form.inside { +.rbview-form-inside { display: none; padding: 10px 15px; } -.rbview-form.inside > .rb-loading { +.rbview-form-inside > .rb-loading { height: 60px; } -.rbview-form.inside > .alert { +.rbview-form-inside > .alert { margin: 10px auto !important; } -.card.active .rbview-form.inside { +.card.active .rbview-form-inside { display: block; } @@ -869,6 +881,7 @@ body { .timeline.approved-steps .timeline-header > .blockquote { margin-top: 5px; padding: 2px 10px; + padding-right: 0; } .timeline.approved-steps .timeline-header > .blockquote.cc { diff --git a/src/main/resources/web/assets/js/admin/apis-manager.js b/src/main/resources/web/assets/js/admin/apis-manager.js index 340b0ac7e2..9d2efa2abe 100644 --- a/src/main/resources/web/assets/js/admin/apis-manager.js +++ b/src/main/resources/web/assets/js/admin/apis-manager.js @@ -231,7 +231,7 @@ class AppLogsViewer extends RbModal {
    {item[3].split('?')[0]}
    - {item[1].split('UTC')[0]} + {item[1].split('UTC')[0]}
    {respOk ? $L('成功') : $L('失败')} @@ -264,9 +264,9 @@ class AppLogsViewer extends RbModal {
    {$L('请求地址')}
    {dataShow[3]}
    {$L('请求数据')}
    -
    {dataShow[4] && }
    +
    {dataShow[4] && }
    {$L('响应数据')}
    -
    {dataShow[5] && }
    +
    {dataShow[5] && }
    ) : ( diff --git a/src/main/resources/web/assets/js/admin/approval-design.js b/src/main/resources/web/assets/js/admin/approval-design.js index 6ab6f39ea7..0d5e271e77 100644 --- a/src/main/resources/web/assets/js/admin/approval-design.js +++ b/src/main/resources/web/assets/js/admin/approval-design.js @@ -221,10 +221,10 @@ class SimpleNode extends NodeSpec { if (this.nodeType === 'approver') { if (data.allowReferral) descs.push($L('允许转审')) if (data.allowCountersign) descs.push($L('允许加签')) - if (data.allowBatch) descs.push($L('允许批量')) + // if (data.allowBatch) descs.push($L('允许批量')) descs.push(data.signMode === 'AND' ? $L('会签') : data.signMode === 'ALL' ? $L('依次审批') : $L('或签')) if (data.expiresAuto && ~~data.expiresAuto.expiresAuto > 0) descs.push($L('限时审批')) - if (data.editableFields && data.editableFields.length > 0) descs.push($L('可修改字段')) + if (~~data.editableMode > 0 || (data.editableFields || []).length > 0) descs.push($L('记录可修改')) } else if (this.nodeType === 'start') { if (data.unallowCancel) descs.push($L('禁止撤回')) } @@ -545,10 +545,12 @@ class StartNodeConfig extends RbFormHandler {

    {$L('符合条件的记录才可以使用/选择此流程')}

    -
    + +
    +
    @@ -635,6 +637,10 @@ class ApproverNodeConfig extends StartNodeConfig { if (!props.users || props.users.length === 0) this.state.users = 'SPEC' else if (props.users[0] === 'SELF') this.state.users = 'SELF' else this.state.users = 'SPEC' + // v4.2 兼容 + if (props.editableFields && props.editableFields.length > 0 && !props.editableMode) { + this.state.editableMode = '10' + } } render() { @@ -682,7 +688,7 @@ class ApproverNodeConfig extends StartNodeConfig {
    -
    +
    -
    - -
    - - (this._$editableFields = c)}> - {(this.state.editableFields || []).map((item) => { - return ( - - - - - - ) - })} - -
    {this.__fieldLabel(item.field)} - - - - this.removeEditableField(item.field)}> - - -
    -
    - +
    + +
    +
    + +
    +
    +
    +
    + +
    + + (this._$editableFields = c)}> + {(this.state.editableFields || []).map((item) => { + return ( + + + + + + ) + })} + +
    {this.__fieldLabel(item.field)} + + + + this.removeEditableField(item.field)}> + + +
    +
    + +
    + {this.renderButton()}
    ) @@ -907,14 +927,6 @@ class ApproverNodeConfig extends StartNodeConfig { } save = () => { - const editableFields = [] - $(this._$editableFields) - .find('td[data-field]') - .each(function () { - const $this = $(this) - editableFields.push({ field: $this.data('field'), notNull: $this.find('input:eq(0)').prop('checked'), readOnly: $this.find('input:eq(1)').prop('checked') }) - }) - const expiresAuto = {} $(this._$expiresAuto) .find('input, select, textarea') @@ -929,11 +941,27 @@ class ApproverNodeConfig extends StartNodeConfig { return } + const editableFields = [] + if (~~this.state.editableMode === 10) { + $(this._$editableFields) + .find('td[data-field]') + .each(function () { + const $this = $(this) + editableFields.push({ field: $this.data('field'), notNull: $this.find('input:eq(0)').prop('checked'), readOnly: $this.find('input:eq(1)').prop('checked') }) + }) + + if (editableFields.length === 0) { + RbHighbar.create($L('请指定可修改字段')) + return + } + } + const d = { nodeName: this.state.nodeName, users: this.state.users === 'SPEC' ? this._UserSelector.getSelected() : [this.state.users], signMode: this.state.signMode, selfSelecting: this.state.selfSelecting, + editableMode: this.state.editableMode, editableFields: editableFields, allowReferral: this.state.allowReferral, allowCountersign: this.state.allowCountersign, diff --git a/src/main/resources/web/assets/js/admin/approval-list.js b/src/main/resources/web/assets/js/admin/approval-list.js index 28c0aed0c4..9ed62c4a0a 100644 --- a/src/main/resources/web/assets/js/admin/approval-list.js +++ b/src/main/resources/web/assets/js/admin/approval-list.js @@ -11,6 +11,7 @@ $(document).ready(() => { $('.J_add').on('click', () => renderRbcomp()) $('.J_referral').on('click', () => renderRbcomp()) + if ($urlp('new')) setTimeout(() => $('.J_add').trigger('click'), 500) }) class ApprovalList extends ConfigList { @@ -114,7 +115,7 @@ class ApprovalEdit extends ConfigFormDlg { - + ) } @@ -201,6 +201,12 @@ class DlgMM extends RbAlert { + } + return (this._$value = c)} key={field.name} maxLength="255" /> } @@ -79,6 +83,7 @@ class FieldValueSet extends React.Component { } } + dpcfg.forceParse = false this.__$datetimepicker = $(this._$value).datetimepicker(dpcfg) } diff --git a/src/main/resources/web/assets/js/metadata/fields.js b/src/main/resources/web/assets/js/metadata/fields.js index 45aeb5b1de..b18a7dee7d 100644 --- a/src/main/resources/web/assets/js/metadata/fields.js +++ b/src/main/resources/web/assets/js/metadata/fields.js @@ -53,6 +53,9 @@ const renderList = function () { } else if (!item.nullable) { $tr.addClass('danger') } + // 优先标记不可重复字段 + if (!item.repeatable && item.displayTypeName !== 'SERIES') $tr.addClass('warning') + $(`
    ${item.fieldName}
    `).appendTo($tr) let type = item.displayType if (item.displayTypeRef) type += ` (${item.displayTypeRef[1]})` diff --git a/src/main/resources/web/assets/js/metadata/form-design.js b/src/main/resources/web/assets/js/metadata/form-design.js index 399f590f35..67a807b0d2 100644 --- a/src/main/resources/web/assets/js/metadata/form-design.js +++ b/src/main/resources/web/assets/js/metadata/form-design.js @@ -794,7 +794,9 @@ class DlgNForm extends RbModalHandler { } else if (typeof props.attrs === 'object') { this.state.fallback = props.attrs.fallback this.state.fornew = props.attrs.fornew + this.state.hideEmptyFields = props.attrs.hideEmptyFields this.state.useFilter = props.attrs.filter || null + this.state.verticalLayout = props.attrs.verticalLayout || null } } @@ -840,11 +842,35 @@ class DlgNForm extends RbModalHandler {
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    {this.state.detailsFromsAttr && ( -
    - -
    (this._$detailsFromsAttr = c)}> +
    + +
    (this._$detailsFromsAttr = c)}> {this.state.detailsFromsAttr.map((de) => { return (
    @@ -860,7 +886,7 @@ class DlgNForm extends RbModalHandler { })}
    -
    +
    {de[1]}
    @@ -896,7 +922,8 @@ class DlgNForm extends RbModalHandler { componentDidMount() { // super.componentDidMount() - if (!wpc.mainEntityName) { + // 明细绑定 + if (wpc.isMainEntity) { $.get(`/admin/entity/${wpc.entityName}/get-details-forms-attr`, (res) => { this.setState({ detailsFromsAttr: res.data || {} }, () => { const detailsFromsAttr = (this.props.attrs || {}).detailsFromsAttr @@ -907,8 +934,6 @@ class DlgNForm extends RbModalHandler { let name = $(this).attr('name') $(this).val(detailsFromsAttr[name] || '0') }) - // show - $(this._$detailsFromsAttr).parents('.bosskey-show').removeClass('bosskey-show') } }) }) @@ -953,7 +978,9 @@ class DlgNForm extends RbModalHandler { filter: this.state.useFilter || null, fallback: $val(this._$fallback), fornew: $val(this._$fornew), + hideEmptyFields: $val(this._$hideEmptyFields), detailsFromsAttr: Object.keys(detailsFromsAttr).length === 0 ? null : detailsFromsAttr, + verticalLayout: ~~$val(this._$verticalLayout), } if (!ps.name) { return RbHighbar.createl('请输入名称') diff --git a/src/main/resources/web/assets/js/nav-settings.js b/src/main/resources/web/assets/js/nav-settings.js index 53a03a5477..de30bdc1ee 100644 --- a/src/main/resources/web/assets/js/nav-settings.js +++ b/src/main/resources/web/assets/js/nav-settings.js @@ -33,7 +33,8 @@ $(document).ready(() => { placeholder: $L('选择关联项'), allowClear: false, templateResult: function (res) { - const $span = $('').attr('title', res.text).text(res.text) + const $span = $('').attr('title', res.text).text(res.text) + if (!res.children) $span.addClass('icon-append') // optgroup const found = _entities[res.id] if (found) $(``).appendTo($span) return $span diff --git a/src/main/resources/web/assets/js/notifications.js b/src/main/resources/web/assets/js/notifications.js index affb66e7ea..dfaf8c119f 100644 --- a/src/main/resources/web/assets/js/notifications.js +++ b/src/main/resources/web/assets/js/notifications.js @@ -26,7 +26,7 @@ $(document).ready(() => { activeNav.trigger('click') }) -// 消息列表 +// 通知列表 class MessageList extends React.Component { state = { ...this.props, page: 1, pageSize: 20 } @@ -43,7 +43,7 @@ class MessageList extends React.Component { {this.state.list && msglist.length === 0 && (
    -

    {$L('暂无消息')}

    +

    {$L('暂无通知')}

    )}
    @@ -96,7 +96,7 @@ class MessageList extends React.Component { )} {item[3] && ( - {$L('点击已读')} + {$L('设为已读')} )} @@ -109,7 +109,7 @@ class MessageList extends React.Component { const that = this $('.read-all').on('click', () => { - RbAlert.create($L('确认已读全部消息?'), { + RbAlert.create($L('确认已读全部通知?'), { onConfirm: function () { this.hide() that.makeRead('ALL') @@ -153,7 +153,7 @@ class MessageList extends React.Component { }) this.setState({ list: list }) - if (id === 'ALL') RbHighbar.success($L('全部消息已设为已读')) + if (id === 'ALL') RbHighbar.success($L('全部通知已设为已读')) }) } } diff --git a/src/main/resources/web/assets/js/project/task-view.js b/src/main/resources/web/assets/js/project/task-view.js index e87c24fb6d..1b0527d293 100644 --- a/src/main/resources/web/assets/js/project/task-view.js +++ b/src/main/resources/web/assets/js/project/task-view.js @@ -148,7 +148,7 @@ class TaskForm extends React.Component { _handleDelete() { const that = this - RbAlert.create($L('确认删除此任务?'), { + RbAlert.create({$L('确认删除此任务?')}, { type: 'danger', confirmText: $L('删除'), confirm: function () { @@ -595,7 +595,7 @@ class ValueAttachments extends ValueComp { {this.state.attachments.map((item) => { const fileName = $fileCutName(item) return ( - (parent || window).RbPreview.create([item])}> + (parent || window).RbPreview.create(item)}> {fileName} {del && ( @@ -614,7 +614,7 @@ class ValueAttachments extends ValueComp { _deleteAttachment(item, e) { $stopEvent(e) const that = this - RbAlert.create($L('确认删除此附件?'), { + RbAlert.create({$L('确认删除此附件?')}, { type: 'danger', confirmText: $L('删除'), confirm: function () { @@ -855,7 +855,7 @@ class ValueTagsEditor extends React.Component { _deleteTag(tagId) { const that = this - RbAlert.create($L('确认删除此标签?'), { + RbAlert.create({$L('确认删除此标签?')}, { confirm: function () { this.disabled(true) $.post(`/app/entity/common-delete?id=${tagId}`, () => { @@ -1027,7 +1027,7 @@ class TaskCommentsList extends React.Component { _handleDelete(item) { const that = this - RbAlert.create($L('确认删除此评论?'), { + RbAlert.create({$L('确认删除此评论?')}, { type: 'danger', confirmText: $L('删除'), confirm: function () { @@ -1167,15 +1167,16 @@ class RichTextEditor extends React.Component {
    {(this.state.files || []).map((item) => { - const fileName = $fileCutName(item) return ( -
    - - {fileName} - this._removeFile(item)}> - - -
    + { + const files = this.state.files + files.remove(item) + this.setState({ files: files }) + }} + /> ) })}
    @@ -1225,12 +1226,6 @@ class RichTextEditor extends React.Component { } } - _removeFile(file) { - const files = this.state.files - files.remove(file) - this.setState({ files: files }) - } - val() { return $(this._$editor).val() } diff --git a/src/main/resources/web/assets/js/rb-base.js b/src/main/resources/web/assets/js/rb-base.js index 1e3a2ebf99..c66e3617c0 100644 --- a/src/main/resources/web/assets/js/rb-base.js +++ b/src/main/resources/web/assets/js/rb-base.js @@ -133,8 +133,13 @@ See LICENSE and COMMERCIAL in the project root for license information. // for `watermark` if (window.watermark && self === top) { + var wt = rb._markWatermarkText + if (wt) wt = JSON.parse(wt) + if (!wt) wt = [rb.currentUser ? '***' + rb.currentUser.substr(7) : null, rb.appName] + wt.push(rb._rbTempAuth ? 'TEMP.AUTH 临时授权' : null) + window.watermark.init({ - watermark_txt: [rb.currentUser ? '***' + rb.currentUser.substr(7) : null, rb.appName, rb._rbTempAuth ? 'TEMP.AUTH 临时授权' : null], + watermark_txt: wt, watermark_angle: 30, watermark_width: 200, watermark_font: 'arial', diff --git a/src/main/resources/web/assets/js/rb-components.js b/src/main/resources/web/assets/js/rb-components.js index 0d6ecaa6b7..293d9d1805 100644 --- a/src/main/resources/web/assets/js/rb-components.js +++ b/src/main/resources/web/assets/js/rb-components.js @@ -47,8 +47,8 @@ class RbModal extends React.Component {

    {props.title || ''}

    {props.url && props.urlOpenInNew && ( -
    - + + )} {this.props.maximize && ( @@ -298,10 +298,10 @@ class RbAlert extends React.Component {
    - -
    @@ -344,7 +344,7 @@ class RbAlert extends React.Component { disabled(d, preventHide) { d = d === true // 带有 tabIndex=-1 导致 select2 组件搜索框无法搜索??? - this.setState({ disable: d }, () => _preventHide(d, preventHide, this._dlg)) + this.setState({ disabled: d }, () => _preventHide(d, preventHide, this._dlg)) } // -- Usage @@ -842,6 +842,39 @@ class DateShow extends React.Component { } } +// ~~ 附件显示 +class FileShow extends React.Component { + render() { + const file = this.props.file + const fileName = $fileCutName(file) + const isImage = $isImage(fileName) + let imageUrl + if (isImage) { + if (file.startsWith('http://') || file.startsWith('https://')) imageUrl = file + else imageUrl = `${rb.baseUrl}/filex/img/${file}?imageView2/2/w/100/interlace/1/q/100` + } + + return ( +
    (parent || window).RbPreview.create(file)}> + + {isImage && } + + {fileName} + {this.props.removeHandle && ( + { + $stopEvent(e, true) + this.props.removeHandle(e, file) + }}> + + + )} +
    + ) + } +} + // ~~ 记录选择器 // @see rb-page.js#$initReferenceSelect2 class RecordSelector extends React.Component { @@ -956,7 +989,6 @@ class RecordSelector extends React.Component { // ~~ 任意记录选择器 class AnyRecordSelector extends RecordSelector { render() { - const ae = this.props.allowEntities || [] return (
    @@ -1323,7 +1355,7 @@ class CodeViewport extends React.Component { } componentDidMount() { - this._$code.innerHTML = $formattedCode(this.props.code || '') + this._$code.innerHTML = $formattedCode(this.props.code || '', this.props.type) if (this._$copy) { const that = this @@ -1338,7 +1370,10 @@ class CodeViewport extends React.Component { } UNSAFE_componentWillReceiveProps(newProps) { - if (newProps.code) this._$code.innerHTML = $formattedCode(newProps.code) + // eslint-disable-next-line eqeqeq + if (newProps.code && newProps.code != this.props.code) { + this._$code.innerHTML = $formattedCode(newProps.code, this.props.type) + } } } @@ -1448,6 +1483,63 @@ class AsideTree extends React.Component { } } +// ~~ 文件重命名 +class FileRename extends RbAlert { + constructor(props) { + super(props) + this.__fileName = $fileCutName(this.props.fileKey) + } + + renderContent() { + const isOffice = this.props.fileId && ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx'].includes($fileExtName(this.__fileName)) + return ( +
    +
    + + (this._$fileName = c)} maxLength="100" /> +
    +
    + + {isOffice && ( + + +   + {$L('在线编辑')} (LAB) + + )} +
    + + ) + } + + componentDidMount() { + super.componentDidMount() + // 选择 + } + + handleConfirm(e) { + const newName = $val(this._$fileName) + if (newName && this.__fileName !== newName) { + typeof this.props.onConfirm === 'function' && this.props.onConfirm(newName, this) + } else { + typeof this.props.onConfirm === 'function' && this.props.onConfirm(null) // Nochangs + this.hide() + } + } + + // -- Usage + + /** + * @param {*} fileKey + * @param {*} onConfirm + */ + static create(fileKey, onConfirm) { + renderRbcomp() + } +} + /** * JSX 组件渲染 * diff --git a/src/main/resources/web/assets/js/rb-page.js b/src/main/resources/web/assets/js/rb-page.js index fa7d738e93..00e1eaad66 100644 --- a/src/main/resources/web/assets/js/rb-page.js +++ b/src/main/resources/web/assets/js/rb-page.js @@ -28,6 +28,7 @@ See LICENSE and COMMERCIAL in the project root for license information. $(function () { // navless if (rb.commercial > 1 && (~~$urlp('navless') === 1 || ~~$urlp('frame') === 1)) $(document.body).addClass('rb-navless40') + if (rb.commercial > 1 && (rb.env === 'dev' || window.__LAB === true)) $('.bosskey-show').removeClass('bosskey-show') // scroller var $t = $('.rb-scroller') @@ -421,8 +422,12 @@ var _checkMessage = function () { if (res.error_code > 0) return $('.J_top-notifications .badge').text(res.data.unread) - if (res.data.unread > 0) $('.J_top-notifications .indicator').removeClass('hide') - else $('.J_top-notifications .indicator').addClass('hide') + if (res.data.unread > 0) { + $('.J_top-notifications .indicator').removeClass('hide') + if (window.__LAB_SHOW_INDICATORNUM42) $('.J_top-notifications .indicator').text(res.data.unread > 9999 ? '9999+' : res.data.unread) + } else { + $('.J_top-notifications .indicator').addClass('hide').text('') + } if (_checkMessage__state !== res.data.unread) { _checkMessage__state = res.data.unread @@ -430,6 +435,8 @@ var _checkMessage = function () { if (!window.__title) window.__title = document.title document.title = '(' + _checkMessage__state + ') ' + window.__title _showNotification(_checkMessage__state) + } else if (window.__title) { + document.title = window.__title } _loadMessages__state = false } @@ -472,7 +479,7 @@ var _showNotification = function (state) { var _Notification = window.Notification || window.mozNotification || window.webkitNotification if (_Notification) { if (_Notification.permission === 'granted') { - var n = new _Notification($L('你有 %d 条未读消息', state), { + var n = new _Notification($L('你有 %d 条未读通知', state), { body: window.rb.appName, icon: rb.baseUrl + '/assets/img/icon-192x192.png', tag: 'rbNotification', @@ -610,7 +617,7 @@ var _initGlobalCreate = function () { var $item = $('' + this.entityLabel + '').appendTo($gc) var _this = this $item.on('click', function () { - RbFormModal.create({ title: $L('新建%s', _this.entityLabel), entity: _this.entity, icon: _this.icon, _nextOpenView: true }) + RbFormModal.create({ title: $L('新建%s', _this.entityLabel), entity: _this.entity, icon: _this.icon, showExtraButton: true }) }) }) } @@ -769,7 +776,7 @@ var $createUploader = function (input, next, complete, error) { var idname = $input.attr('id') || $input.attr('name') || $random('H5UP-') $input.html5Uploader({ name: idname, - postUrl: rb.baseUrl + '/filex/upload?temp=' + (upLocal === 'temp') + '&noname=' + noname + '&updir=' + updir + useToken, + postUrl: rb.baseUrl + '/filex/upload?iw=' + $encode(window.__LAB_IWTEXT42) + '&temp=' + (upLocal === 'temp') + '&noname=' + noname + '&updir=' + updir + useToken, onSelectError: function (file, err) { if (err === 'ErrorType') { RbHighbar.create(imageType ? $L('请上传图片') : $L('上传文件类型错误')) @@ -937,6 +944,53 @@ var $initReferenceSelect2 = function (el, option) { return $(el).select2(select2Option) } +// 搜索 text/id +// https://select2.org/searching#customizing-how-results-are-matched +var $select2MatcherAll = function (params, data) { + if (!window.__pinyinLoaded) { + window.__pinyinLoaded = 1 + $getScript('/assets/lib/pinyin-pro.min.js?v=3.27.0', () => { + console.log('pinyin-pro.min.js loaded') + }) + } + + if ($trim(params.term) === '') { + return data + } + if (typeof data.text === 'undefined') { + return null + } + + // 匹配 + function _FN(item, s) { + s = s.toLowerCase() + if ((item.text || '').toLowerCase().indexOf(s) > -1 || (item.id || '').toLowerCase().indexOf(s) > -1) return true + // v4.2 + if (window.pinyinPro) { + var pinyin = window.pinyinPro.pinyin(item.text, { toneType: 'none' }).replace(/\s+/g, '') + return pinyin && pinyin.toLowerCase().indexOf(s) > -1 + } + return false + } + + if (data.children) { + var ch = data.children.filter(function (item) { + return _FN(item, params.term) + }) + if (ch.length === 0) return null + + var data2 = $.extend({}, data, true) + data2.children = ch + return data2 + } else { + if (_FN(data, params.term, data.element)) { + return data + } + } + + return null +} + /** * 保持模态窗口(如果需要) */ @@ -1229,39 +1283,6 @@ var $getScript = function (url, callback) { }) } -// 搜索 text/id -// https://select2.org/searching#customizing-how-results-are-matched -var $select2MatcherAll = function (params, data) { - if ($trim(params.term) === '') { - return data - } - if (typeof data.text === 'undefined') { - return null - } - - function _matcher(item, s) { - s = s.toLowerCase() - return (item.text || '').toLowerCase().indexOf(s) > -1 || (item.id || '').toLowerCase().indexOf(s) > -1 - } - - if (data.children) { - var ch = data.children.filter(function (item) { - return _matcher(item, params.term) - }) - if (ch.length === 0) return null - - var data2 = $.extend({}, data, true) - data2.children = ch - return data2 - } else { - if (_matcher(data, params.term)) { - return data - } - } - - return null -} - // 绝对 URL var $isFullUrl = function (url) { return url && (url.startsWith('http://') || url.startsWith('https://')) @@ -1307,21 +1328,30 @@ var $pages = function (tp, cp) { // 格式化代码 var $formattedCode = function (c, type) { + // v4.2 + if (type === 'json') { + try { + return JSON.stringify(typeof c === 'object' ? c : JSON.parse(c), null, 2) + } catch (err) { + if (rb.env === 'dev') console.log('Cannot format code : ' + err) + // ignored + } + } + if (typeof c === 'object') c = JSON.stringify(c) - if (!window.prettier) return c - - try { - // eslint-disable-next-line no-undef - return prettier.format(c, { - parser: type || 'json', - // eslint-disable-next-line no-undef - plugins: prettierPlugins, - printWidth: 10, - }) - } catch (err) { - console.log('Cannot format code :', err) - return c + if (window.prettier) { + try { + return window.prettier.format(c, { + parser: type || 'json', + plugins: window.prettierPlugins, + printWidth: 10, + }) + } catch (err) { + console.log('Cannot format code : ' + err) + return c + } } + return c } // 复制 @@ -1349,6 +1379,28 @@ var $clipboard = function ($el, text) { }) } +// 复制 +var $clipboard2 = function (text, tips) { + if (navigator.clipboard) { + navigator.clipboard + .writeText(text) + .then(() => { + tips && RbHighbar.success($L('已复制')) + }) + .catch((err) => { + console.log('Cannot copy text :', err) + }) + } else { + const textarea = document.createElement('textarea') + textarea.value = text + document.body.appendChild(textarea) + textarea.select() + document.execCommand('copy') + document.body.removeChild(textarea) + tips && RbHighbar.success($L('已复制')) + } +} + // 格式化秒显示 function $sec2Time(s) { if (!s || ~~s <= 0) return '00:00' @@ -1447,7 +1499,8 @@ function $dropdownMenuSearch($dd) { var $item = $(this) var name = ($item.data('name') || $item.data('value') || $item.data('id') || '').toLowerCase() var text = $item.text().toLowerCase() - if (!q || name.contains(q) || text.contains(q)) { + var pinyin = ($item.data('pinyin') || '').toLowerCase() + if (!q || name.contains(q) || text.contains(q) || pinyin.contains(q)) { $item.removeClass('hide') } else { $item.addClass('hide') @@ -1479,3 +1532,26 @@ function $focus2End(el, delay) { el.setSelectionRange(len, len) }, delay || 100) } + +// 获取实体元数据 +function $fetchMetaInfo(name, cb) { + $.get('/commons/metadata/meta-info?name=' + $encode(name), function (res) { + if (res.error_code === 0) { + typeof cb === 'function' && cb(res.data || {}) + } else { + RbHighbar.error(res.error_msg) + } + }) +} + +// 同步获取数据 +function $syncGet(url) { + var _data + $.ajax({ + type: 'GET', + async: false, + url: url, + success: (res) => (_data = res), + }) + return _data || {} +} diff --git a/src/main/resources/web/assets/js/sortable.js b/src/main/resources/web/assets/js/sortable.js index 3f098c8f38..a4ea9c664d 100644 --- a/src/main/resources/web/assets/js/sortable.js +++ b/src/main/resources/web/assets/js/sortable.js @@ -18,6 +18,7 @@ $(document).ready(function () { const render_unset = function (data, target) { const $item = $(`
  • ${data[1]}
  • `).appendTo(target || '.unset-list') + if (data[2]) $item.attr('data-pinyin', data[2]) $item.on('click', function () { render_item(data) $item.remove() diff --git a/src/main/resources/web/assets/js/trigger/trigger-design.js b/src/main/resources/web/assets/js/trigger/trigger-design.js index c736f32980..2e083e5e00 100644 --- a/src/main/resources/web/assets/js/trigger/trigger-design.js +++ b/src/main/resources/web/assets/js/trigger/trigger-design.js @@ -100,7 +100,7 @@ $(document).ready(() => { if (advFilter) { advFilter.show() } else { - renderRbcomp(, function () { + renderRbcomp(, function () { advFilter = this }) } @@ -390,9 +390,15 @@ function _handle512Change() { else $('.on-timers').addClass('hide') } +let useExecManual__taskid +window.onbeforeunload = function () { + if (useExecManual__taskid) return 'SHOW-CLOSE-CONFIRM' +} + // 立即执行 function useExecManual() { function _FN(taskid, that) { + useExecManual__taskid = taskid const mp_parent = $(that._dlg).find('.modal-header').attr('id', $random('node-')) const mp = new Mprogress({ template: 1, start: true, parent: '#' + $(mp_parent).attr('id') }) useExecManual_checkState(taskid, mp, that) @@ -418,9 +424,14 @@ function useExecManual() { // 执行中了 if (taskid.startsWith('_EXECUTE:')) { taskid = taskid.substr(9) + RbAlert.create($L('此触发器已在执行中,不能同时执行。是否显示执行状态?'), { onConfirm: function () { this.hide() + + that.setState({ disabled: false }, () => { + $(that._$btn).attr('disabled', true) + }) _FN(taskid, that) }, onCancel: function () { @@ -431,9 +442,37 @@ function useExecManual() { return } + that.setState({ disabled: false }, () => { + $(that._$btn).attr('disabled', true) + }) _FN(taskid, that) }) }, + onCancel: function () { + if (!useExecManual__taskid) { + this.hide() + return + } + + RbAlert.create($L('是否取消/终止当前操作?'), { + onConfirm: function () { + if (!useExecManual__taskid) { + this.hide() + return + } + + this.disabled(true) + $.post(`/commons/task/cancel?taskid=${useExecManual__taskid}`, (res) => { + if (res.error_code !== 0) { + RbHighbar.error(res.error_msg) + } else { + useExecManual__taskid = null + this.hide() + } + }) + }, + }) + }, countdown: 5, } ) @@ -444,9 +483,15 @@ function useExecManual_checkState(taskid, mp, _alert) { $.get(`/commons/task/state?taskid=${taskid}`, (res) => { const cp = res.data.progress if (res.data.isCompleted) { + useExecManual__taskid = null mp && mp.end() - _alert && _alert.hide(true) - RbHighbar.success($L('执行成功')) + if (_alert) { + $(_alert._$btn).text(res.data.isInterrupted ? $L('已终止') : $L('已完成')) + setTimeout(() => _alert.hide(true), 3000) + } + + if (res.data.isInterrupted) RbHighbar.success($L('%d 条记录已执行成功', res.data.succeeded)) + else RbHighbar.success($L('执行成功')) } else { mp && mp.set(cp) setTimeout(() => useExecManual_checkState(taskid, mp, _alert), 1000) diff --git a/src/main/resources/web/assets/js/trigger/trigger.AUTOASSIGN.js b/src/main/resources/web/assets/js/trigger/trigger.AUTOASSIGN.js index 430f826e42..d707bdb311 100644 --- a/src/main/resources/web/assets/js/trigger/trigger.AUTOASSIGN.js +++ b/src/main/resources/web/assets/js/trigger/trigger.AUTOASSIGN.js @@ -14,6 +14,7 @@ class ContentAutoAssign extends ActionContentSpec { static = { ...this.props, assignRule: 1 } render() { + const fields42 = this.state.relatedsFields return (
    @@ -45,18 +46,47 @@ class ContentAutoAssign extends ActionContentSpec {
    - +
    - + {this.state.cascadesEntity && ( + + )} + + {fields42 && ( + + )}
    @@ -82,17 +112,39 @@ class ContentAutoAssign extends ActionContentSpec { } const cascades = content.cascades ? content.cascades.split(',') : [] - $.get(`/commons/metadata/references?entity=${this.props.sourceEntity}`, (res) => { - this.setState({ cascadesEntity: res.data }, () => { - this.__select2 = $(this._cascades) - .select2({ - multiple: true, - placeholder: `${$L('选择相关实体')} ${$L('(可选)')}`, + if (cascades.length > 0) { + $.get(`/commons/metadata/references?entity=${this.props.sourceEntity}`, (res) => { + this.setState({ cascadesEntity: res.data }, () => { + this.__select2 = $(this._cascades) + .select2({ + multiple: true, + placeholder: $L('(可选)'), + }) + .val(cascades.length === 0 ? null : cascades) + .trigger('change') + }) + }) + } else { + // 4.2 + $.get(`/commons/metadata/relateds?entity=${this.props.sourceEntity}`, (res) => { + this.setState({ relatedsFields: res.data || {} }, () => { + this.__select42 = $(this._$relatedsFields).select2({ + placeholder: $L('(可选)'), + allowClear: true, + templateResult: function (res) { + const text = res.text.split(' (N)') + const $span = $('').text(text[0]) + if (text.length > 1) $('N').appendTo($span) + return $span + }, }) - .val(cascades.length === 0 ? null : cascades) - .trigger('change') + + if (content.fields42) { + this.__select42.val(content.fields42).trigger('change') + } + }) }) - }) + } } changeValue = (e) => { @@ -105,7 +157,8 @@ class ContentAutoAssign extends ActionContentSpec { const _data = { assignTo: this._assignTo.getSelected(), assignRule: ~~this.state.assignRule, - cascades: this.__select2.val().join(','), + cascades: this.__select2 ? this.__select2.val().join(',') : null, + fields42: this.__select42 ? this.__select42.val() : null, } if (!_data.assignTo || _data.assignTo.length === 0) { RbHighbar.create($L('请选择分配给谁')) diff --git a/src/main/resources/web/assets/js/trigger/trigger.AUTOSHARE.js b/src/main/resources/web/assets/js/trigger/trigger.AUTOSHARE.js index fd04d14089..5d04d94cdf 100644 --- a/src/main/resources/web/assets/js/trigger/trigger.AUTOSHARE.js +++ b/src/main/resources/web/assets/js/trigger/trigger.AUTOSHARE.js @@ -14,6 +14,7 @@ class ContentAutoShare extends ActionContentSpec { state = { ...this.props } render() { + const fields42 = this.state.relatedsFields return (
    @@ -31,18 +32,47 @@ class ContentAutoShare extends ActionContentSpec {
    - +
    - + {this.state.cascadesEntity && ( + + )} + + {fields42 && ( + + )}
    @@ -74,17 +104,39 @@ class ContentAutoShare extends ActionContentSpec { } const cascades = content.cascades ? content.cascades.split(',') : [] - $.get(`/commons/metadata/references?entity=${this.props.sourceEntity}`, (res) => { - this.setState({ cascadesEntity: res.data }, () => { - this.__select2 = $(this._cascades) - .select2({ - multiple: true, - placeholder: `${$L('选择相关实体')} ${$L('(可选)')}`, + if (cascades.length > 0) { + $.get(`/commons/metadata/references?entity=${this.props.sourceEntity}`, (res) => { + this.setState({ cascadesEntity: res.data }, () => { + this.__select2 = $(this._cascades) + .select2({ + multiple: true, + placeholder: `${$L('选择相关实体')} ${$L('(可选)')}`, + }) + .val(cascades.length === 0 ? null : cascades) + .trigger('change') + }) + }) + } else { + // 4.2 + $.get(`/commons/metadata/relateds?entity=${this.props.sourceEntity}`, (res) => { + this.setState({ relatedsFields: res.data || {} }, () => { + this.__select42 = $(this._$relatedsFields).select2({ + placeholder: $L('(可选)'), + allowClear: true, + templateResult: function (res) { + const text = res.text.split(' (N)') + const $span = $('').text(text[0]) + if (text.length > 1) $('N').appendTo($span) + return $span + }, }) - .val(cascades.length === 0 ? null : cascades) - .trigger('change') + + if (content.fields42) { + this.__select42.val(content.fields42).trigger('change') + } + }) }) - }) + } if (content.withUpdate) { $(this._withUpdate).attr('checked', true) @@ -94,7 +146,8 @@ class ContentAutoShare extends ActionContentSpec { buildContent() { const _data = { shareTo: this._shareTo.getSelected(), - cascades: this.__select2.val().join(','), + cascades: this.__select2 ? this.__select2.val().join(',') : null, + fields42: this.__select42 ? this.__select42.val() : null, withUpdate: $(this._withUpdate).prop('checked'), } if (!_data.shareTo || _data.shareTo.length === 0) { diff --git a/src/main/resources/web/assets/js/trigger/trigger.FIELDAGGREGATION.js b/src/main/resources/web/assets/js/trigger/trigger.FIELDAGGREGATION.js index 64f96fbaa7..a84cf12b35 100644 --- a/src/main/resources/web/assets/js/trigger/trigger.FIELDAGGREGATION.js +++ b/src/main/resources/web/assets/js/trigger/trigger.FIELDAGGREGATION.js @@ -6,15 +6,14 @@ See LICENSE and COMMERCIAL in the project root for license information. */ /* global FormulaAggregation, ActionContentSpec, MatchFields */ -const CALC_MODES2 = { +const CALC_MODES_FULL = { ...FormulaAggregation.CALC_MODES, RBJOIN: $L('连接'), RBJOIN2: $L('去重连接'), RBJOIN3: $L('去重连接*N'), + RAND: $L('随机赋值'), } -let __LAB_MATCHFIELDS = false - // ~~ 字段聚合 class ContentFieldAggregation extends ActionContentSpec { render() { @@ -89,7 +88,7 @@ class ContentFieldAggregation extends ActionContentSpec {
    - {CALC_MODES2[item.calcMode]} + {CALC_MODES_FULL[item.calcMode]}
    @@ -125,7 +124,7 @@ class ContentFieldAggregation extends ActionContentSpec { {(this.state.calcModes || []).map((item) => { return ( ) })} @@ -239,7 +238,7 @@ class ContentFieldAggregation extends ActionContentSpec { const content = this.props.content this.__select2 = [] - $.get(`/admin/robot/trigger/field-aggregation-entities?source=${this.props.sourceEntity}&matchfields=${__LAB_MATCHFIELDS}`, (res) => { + $.get(`/admin/robot/trigger/field-aggregation-entities?source=${this.props.sourceEntity}&matchfields=true`, (res) => { this.setState({ targetEntities: res.data || [] }, () => { const $s2te = $(this._$targetEntity) .select2({ placeholder: $L('选择目标实体') }) @@ -274,9 +273,7 @@ class ContentFieldAggregation extends ActionContentSpec { if (!teSplit || !teSplit[1]) return // 清空现有规则 this.setState({ items: [], fillbackFields: [] }) - if (__LAB_MATCHFIELDS) { - this.setState({ showMatchFields: teSplit[0] === '$' }) - } + this.setState({ showMatchFields: teSplit[0] === '$' }) $.get(`/admin/robot/trigger/field-aggregation-fields?source=${this.props.sourceEntity}&target=${teSplit[1]}`, (res) => { this.setState({ hasWarning: res.data.hadApproval ? $L('目标实体已启用审批流程,可能影响源实体操作 (触发动作),建议启用“允许强制更新”') : null }) @@ -312,6 +309,8 @@ class ContentFieldAggregation extends ActionContentSpec { cmAllow = ['COUNT', 'COUNT2', 'RBJOIN', 'RBJOIN2', 'RBJOIN3', 'FORMULA'] } + // v4.2 + cmAllow.splice(cmAllow.length - 1, 0, 'RAND') this.setState({ calcModes: cmAllow }, () => $s2cm.trigger('change')) }) @@ -327,14 +326,17 @@ class ContentFieldAggregation extends ActionContentSpec { let tfAllow = this.__targetFieldsCache.filter((x) => ['NUMBER', 'DECIMAL'].includes(x.type)) if ('RBJOIN' === cm || 'RBJOIN2' === cm || 'RBJOIN3' === cm) { - tfAllow = this.__targetFieldsCache.filter((x) => { - if ('NTEXT' === x.type) return true - if ('N2NREFERENCE' === x.type) return sf.ref && sf.ref[0] === x.ref[0] - if ('FILE' === x.type) return true + tfAllow = this.__targetFieldsCache.filter((t) => { + if ('NTEXT' === t.type) return true + if ('N2NREFERENCE' === t.type) return sf.ref && sf.ref[0] === t.ref[0] + if ('FILE' === t.type) return true return false }) + } else if ('RAND' === cm) { + // v4.2 赋值 + tfAllow = this.__targetFieldsCache.filter((t) => $fieldIsCompatible(sf, t)) } else if (['DATE', 'DATETIME'].includes(sf.type) && !['COUNT', 'COUNT2', 'FORMULA'].includes(cm)) { - tfAllow = this.__targetFieldsCache.filter((x) => ['DATE', 'DATETIME'].includes(x.type)) + tfAllow = this.__targetFieldsCache.filter((t) => ['DATE', 'DATETIME'].includes(t.type)) } this.setState({ targetFields: tfAllow }) @@ -489,8 +491,6 @@ class ContentFieldAggregation extends ActionContentSpec { // eslint-disable-next-line no-undef renderContentComp = function (props) { - __LAB_MATCHFIELDS = window.__BOSSKEY || !!(props.content && props.content.targetEntityMatchFields) - __LAB_MATCHFIELDS = true // v3.9 renderRbcomp(, 'react-content', function () { // eslint-disable-next-line no-undef contentComp = this diff --git a/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js b/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js index f233963a0d..4bca543ef8 100644 --- a/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js +++ b/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js @@ -15,8 +15,6 @@ const UPDATE_MODES = { FORMULA: $L('计算公式'), } -let __LAB_MATCHFIELDS = false - // ~~ 字段更新 // eslint-disable-next-line no-undef class ContentFieldWriteback extends ActionContentSpec { @@ -250,7 +248,7 @@ class ContentFieldWriteback extends ActionContentSpec { componentDidMount() { const content = this.props.content this.__select2 = [] - $.get(`/admin/robot/trigger/field-writeback-entities?source=${this.props.sourceEntity}&matchfields=${__LAB_MATCHFIELDS}`, (res) => { + $.get(`/admin/robot/trigger/field-writeback-entities?source=${this.props.sourceEntity}&matchfields=true`, (res) => { this.setState({ targetEntities: res.data || [] }, () => { const $s2te = $(this._$targetEntity) .select2({ @@ -297,9 +295,7 @@ class ContentFieldWriteback extends ActionContentSpec { if (!teSplit || !teSplit[1]) return // 清空现有规则 this.setState({ items: [], targetEntity: teSplit[1] }) - if (__LAB_MATCHFIELDS) { - this.setState({ showMatchFields: teSplit[0] === '$' }) - } + this.setState({ showMatchFields: teSplit[0] === '$' }) $.get(`/admin/robot/trigger/field-writeback-fields?source=${this.props.sourceEntity}&target=${teSplit[1]}`, (res) => { const _data = res.data || {} @@ -500,7 +496,7 @@ class FieldFormula extends React.Component { render() { const toFieldType = this.state.targetField.type // @see DisplayType.java - if (['AVATAR', 'SIGN'].includes(toFieldType)) { + if (['AVATAR'].includes(toFieldType)) { return
    {$L('暂不支持')}
    } else { return ( @@ -666,7 +662,7 @@ class FormulaCode extends React.Component { render() { return (
    - (this._formulaCode = c)} placeholder="## Support AviatorScript" isCode /> + (this._formulaCode = c)} placeholder="## Support AviatorScript" isCode />
    @@ -716,8 +712,6 @@ class FormulaCode extends React.Component { // eslint-disable-next-line no-undef renderContentComp = function (props) { - __LAB_MATCHFIELDS = window.__BOSSKEY || !!(props.content && props.content.targetEntityMatchFields) - __LAB_MATCHFIELDS = true // v3.8 renderRbcomp(, 'react-content', function () { // eslint-disable-next-line no-undef contentComp = this diff --git a/src/main/resources/web/assets/js/trigger/trigger.SENDNOTIFICATION.js b/src/main/resources/web/assets/js/trigger/trigger.SENDNOTIFICATION.js index f0b54ad69b..bf5153c096 100644 --- a/src/main/resources/web/assets/js/trigger/trigger.SENDNOTIFICATION.js +++ b/src/main/resources/web/assets/js/trigger/trigger.SENDNOTIFICATION.js @@ -167,7 +167,7 @@ class ContentSendNotification extends ActionContentSpec { diff --git a/src/main/resources/web/assets/lib/fullcalendar/index.global.js b/src/main/resources/web/assets/lib/fullcalendar/index.global.js new file mode 100644 index 0000000000..77ee8b939e --- /dev/null +++ b/src/main/resources/web/assets/lib/fullcalendar/index.global.js @@ -0,0 +1,14833 @@ +/*! +FullCalendar Standard Bundle v6.1.19 +Docs & License: https://fullcalendar.io/docs/initialize-globals +(c) 2024 Adam Shaw +*/ +var FullCalendar = (function (exports) { + 'use strict'; + + var n,l$1,u$1,i$1,t,r$1,o,f$1,e$1,c$1={},s=[],a$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function h(n,l){for(var u in l)n[u]=l[u];return n}function v$1(n){var l=n.parentNode;l&&l.removeChild(n);}function y(l,u,i){var t,r,o,f={};for(o in u)"key"==o?t=u[o]:"ref"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return p(l,f,t,r,null)}function p(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u$1:o};return null==o&&null!=l$1.vnode&&l$1.vnode(f),f}function d(){return {current:null}}function _(n){return n.children}function k$1(n,l,u,i,t){var r;for(r in u)"children"===r||"key"===r||r in l||g$2(n,r,null,u[r],i);for(r in l)t&&"function"!=typeof l[r]||"children"===r||"key"===r||"value"===r||"checked"===r||u[r]===l[r]||g$2(n,r,l[r],u[r],i);}function b$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||a$1.test(l)?u:u+"px";}function g$2(n,l,u,i,t){var r;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||b$1(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||b$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])r=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?i||n.addEventListener(l,r?w$2:m$1,r):n.removeEventListener(l,r?w$2:m$1,r);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==l&&"height"!==l&&"href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&-1==l.indexOf("-")?n.removeAttribute(l):n.setAttribute(l,u));}}function m$1(n){t=!0;try{return this.l[n.type+!1](l$1.event?l$1.event(n):n)}finally{t=!1;}}function w$2(n){t=!0;try{return this.l[n.type+!0](l$1.event?l$1.event(n):n)}finally{t=!1;}}function x$1(n,l){this.props=n,this.context=l;}function A(n,l){if(null==l)return n.__?A(n.__,n.__.__k.indexOf(n)+1):null;for(var u;ll&&r$1.sort(function(n,l){return n.__v.__b-l.__v.__b}));$$1.__r=0;}function H$1(n,l,u,i,t,r,o,f,e,a){var h,v,y,d,k,b,g,m=i&&i.__k||s,w=m.length;for(u.__k=[],h=0;h0?p(d.type,d.props,d.key,d.ref?d.ref:null,d.__v):d)){if(d.__=u,d.__b=u.__b+1,null===(y=m[h])||y&&d.key==y.key&&d.type===y.type)m[h]=void 0;else for(v=0;v=0;l--)if((u=n.__k[l])&&(i=L$1(u)))return i;return null}function M(n,u,i,t,r,o,f,e,c){var s,a,v,y,p,d,k,b,g,m,w,A,P,C,T,$=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,o=[e]),(s=l$1.__b)&&s(u);try{n:if("function"==typeof $){if(b=u.props,g=(s=$.contextType)&&t[s.__c],m=s?g?g.props.value:s.__:t,i.__c?k=(a=u.__c=i.__c).__=a.__E:("prototype"in $&&$.prototype.render?u.__c=a=new $(b,m):(u.__c=a=new x$1(b,m),a.constructor=$,a.render=B$1),g&&g.sub(a),a.props=b,a.state||(a.state={}),a.context=m,a.__n=t,v=a.__d=!0,a.__h=[],a._sb=[]),null==a.__s&&(a.__s=a.state),null!=$.getDerivedStateFromProps&&(a.__s==a.state&&(a.__s=h({},a.__s)),h(a.__s,$.getDerivedStateFromProps(b,a.__s))),y=a.props,p=a.state,a.__v=u,v)null==$.getDerivedStateFromProps&&null!=a.componentWillMount&&a.componentWillMount(),null!=a.componentDidMount&&a.__h.push(a.componentDidMount);else {if(null==$.getDerivedStateFromProps&&b!==y&&null!=a.componentWillReceiveProps&&a.componentWillReceiveProps(b,m),!a.__e&&null!=a.shouldComponentUpdate&&!1===a.shouldComponentUpdate(b,a.__s,m)||u.__v===i.__v){for(u.__v!==i.__v&&(a.props=b,a.state=a.__s,a.__d=!1),u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u);}),w=0;w2&&(f.children=arguments.length>3?n.call(arguments,2):i),p(l.type,f,t||l.key,r||l.ref,null)}function G$1(n,l){var u={__c:l="__cC"+e$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,T$1(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l$1={__e:function(n,l,u,i){for(var t,r,o;l=l.__;)if((t=l.__c)&&!t.__)try{if((r=t.constructor)&&null!=r.getDerivedStateFromError&&(t.setState(r.getDerivedStateFromError(n)),o=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),o=t.__d),o)return t.__E=t}catch(l){n=l;}throw n}},u$1=0,i$1=function(n){return null!=n&&void 0===n.constructor},t=!1,x$1.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=h({},this.state),"function"==typeof n&&(n=n(h({},u),this.props)),n&&h(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),T$1(this));},x$1.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),T$1(this));},x$1.prototype.render=_,r$1=[],f$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,$$1.__r=0,e$1=0; + + var r,u,i,f=[],c=[],e=l$1.__b,a=l$1.__r,v=l$1.diffed,l=l$1.__c,m=l$1.unmount;function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w$1),t.__H.__h=[];}catch(r){t.__H.__h=[],l$1.__e(r,t.__v);}}l$1.__b=function(n){r=null,e&&e(n);},l$1.__r=function(n){a&&a(n);var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0;})):(i.__h.forEach(k),i.__h.forEach(w$1),i.__h=[])),u=r;},l$1.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===l$1.requestAnimationFrame||((i=l$1.requestAnimationFrame)||j$1)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c;})),u=r=null;},l$1.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return !n.__||w$1(n)});}catch(u){r.some(function(n){n.__h&&(n.__h=[]);}),r=[],l$1.__e(u,t.__v);}}),l&&l(t,r);},l$1.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n);}catch(n){r=n;}}),u.__H=void 0,r&&l$1.__e(r,u.__v));};var g$1="function"==typeof requestAnimationFrame;function j$1(n){var t,r=function(){clearTimeout(u),g$1&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);g$1&&(t=requestAnimationFrame(r));}function k(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function w$1(n){var t=r;n.__c=n.__(),r=t;} + + function g(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function w(n){this.props=n;}(w.prototype=new x$1).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var x=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),x&&x(n);};var T=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);T(n,t,e,r);};var I=l$1.unmount;function L(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return L(n,t,e)})),n}function U(n,t,e){return n&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return U(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.insertBefore(n.__e,n.__d),n.__c.__e=!0,n.__c.__P=e)),n}function D(){this.__u=0,this.t=null,this.__b=null;}function F(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function V(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),I&&I(n);},(D.prototype=new x$1).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=F(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l());};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=U(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}},c=!0===t.__h;r.__u++||c||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},D.prototype.componentWillUnmount=function(){this.t=[];},D.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=L(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&y(_,null,n.fallback);return i&&(i.__h=null),[y(_,null,e.__a?null:n.children),i]};var W=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]>>1,1),e.i.removeChild(n);}}),D$1(y(P,{context:e.context},n.__v),e.l)):e.l&&e.componentWillUnmount();}function j(n,e){var r=y($,{__v:n,i:e});return r.containerInfo=e,r}(V.prototype=new x$1).__a=function(n){var t=this,e=F(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),W(t,n,r)):u();};e?e(o):o();}},V.prototype.render=function(n){this.u=null,this.o=new Map;var t=j$2(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},V.prototype.componentDidUpdate=V.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){W(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H="undefined"!=typeof document,Z=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};x$1.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(x$1.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var G=l$1.event;function J(){}function K(){return this.cancelBubble}function Q(){return this.defaultPrevented}l$1.event=function(n){return G&&(n=G(n)),n.persist=J,n.isPropagationStopped=K,n.isDefaultPrevented=Q,n.nativeEvent=n};var nn={configurable:!0,get:function(){return this.class}},tn=l$1.vnode;l$1.vnode=function(n){var t=n.type,e=n.props,u=e;if("string"==typeof t){var o=-1===t.indexOf("-");for(var i in u={},e){var l=e[i];H&&"children"===i&&"noscript"===t||"value"===i&&"defaultValue"in e&&null==l||("defaultValue"===i&&"value"in e&&null==e.value?i="value":"download"===i&&!0===l?l="":/ondoubleclick/i.test(i)?i="ondblclick":/^onchange(textarea|input)/i.test(i+t)&&!Z(e.type)?i="oninput":/^onfocus$/i.test(i)?i="onfocusin":/^onblur$/i.test(i)?i="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)?i=i.toLowerCase():o&&B.test(i)?i=i.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===l&&(l=void 0),/^oninput$/i.test(i)&&(i=i.toLowerCase(),u[i]&&(i="oninputCapture")),u[i]=l);}"select"==t&&u.multiple&&Array.isArray(u.value)&&(u.value=j$2(e.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==t&&null!=u.defaultValue&&(u.value=j$2(e.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),n.props=u,e.class!=e.className&&(nn.enumerable="className"in e,null!=e.className&&(u.class=e.className),Object.defineProperty(u,"className",nn));}n.$$typeof=z,tn&&tn(n);};var en=l$1.__r;l$1.__r=function(n){en&&en(n),n.__c;}; + + const styleTexts = []; + const styleEls = new Map(); + function injectStyles(styleText) { + styleTexts.push(styleText); + styleEls.forEach((styleEl) => { + appendStylesTo(styleEl, styleText); + }); + } + function ensureElHasStyles(el) { + if (el.isConnected && // sometimes true if SSR system simulates DOM + el.getRootNode // sometimes undefined if SSR system simulates DOM + ) { + registerStylesRoot(el.getRootNode()); + } + } + function registerStylesRoot(rootNode) { + let styleEl = styleEls.get(rootNode); + if (!styleEl || !styleEl.isConnected) { + styleEl = rootNode.querySelector('style[data-fullcalendar]'); + if (!styleEl) { + styleEl = document.createElement('style'); + styleEl.setAttribute('data-fullcalendar', ''); + const nonce = getNonceValue(); + if (nonce) { + styleEl.nonce = nonce; + } + const parentEl = rootNode === document ? document.head : rootNode; + const insertBefore = rootNode === document + ? parentEl.querySelector('script,link[rel=stylesheet],link[as=style],style') + : parentEl.firstChild; + parentEl.insertBefore(styleEl, insertBefore); + } + styleEls.set(rootNode, styleEl); + hydrateStylesRoot(styleEl); + } + } + function hydrateStylesRoot(styleEl) { + for (const styleText of styleTexts) { + appendStylesTo(styleEl, styleText); + } + } + function appendStylesTo(styleEl, styleText) { + const { sheet } = styleEl; + const ruleCnt = sheet.cssRules.length; + styleText.split('}').forEach((styleStr, i) => { + styleStr = styleStr.trim(); + if (styleStr) { + sheet.insertRule(styleStr + '}', ruleCnt + i); + } + }); + } + // nonce + // ------------------------------------------------------------------------------------------------- + let queriedNonceValue; + function getNonceValue() { + if (queriedNonceValue === undefined) { + queriedNonceValue = queryNonceValue(); + } + return queriedNonceValue; + } + /* + TODO: discourage meta tag and instead put nonce attribute on placeholder + + +
    +
    +
    + + + + + + + + + diff --git a/src/main/resources/web/common/mermaid-chart.html b/src/main/resources/web/common/mermaid-chart.html index 1228da370d..f011195fe8 100644 --- a/src/main/resources/web/common/mermaid-chart.html +++ b/src/main/resources/web/common/mermaid-chart.html @@ -24,31 +24,6 @@ padding: 0; margin: 0; } - pre.mermaid .edgeLabel, - pre.mermaid .er.relationshipLabel { - background-color: #fff !important; - font-size: 14px; - } - pre.mermaid .relationshipLabelBox { - fill: none !important; - opacity: 1 !important; - } - pre.mermaid .nodeLabel { - font-size: 14px; - color: #222; - } - pre.mermaid .node rect { - fill: #eee !important; - stroke: #999 !important; - } - pre.mermaid .mermaidTooltip { - display: none; - font-size: 0; - } - pre.mermaid .edgeLabel { - background-color: #e6eff8 !important; - padding: 6px !important; - } .zoom { bottom: 20px; } @@ -74,7 +49,6 @@ + + + + + + + + + + + + diff --git a/src/main/resources/web/common/shared-folder.html b/src/main/resources/web/common/shared-folder.html new file mode 100644 index 0000000000..8918f5c036 --- /dev/null +++ b/src/main/resources/web/common/shared-folder.html @@ -0,0 +1,92 @@ + + + + + + + + [[${bundle.L('分享文件')}]] + + + + Logo for Thumb +
    +
    +
    +
    [[${folderName}]]
    +
    +
    +
    +
    +
    +
    +
    [[${bundle.L('共 %d 个文件', folderFiles.size())}]]
    + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    + + + + diff --git a/src/main/resources/web/contacts/home.html b/src/main/resources/web/contacts/home.html index 45c69e3dbb..12ca15a0c4 100644 --- a/src/main/resources/web/contacts/home.html +++ b/src/main/resources/web/contacts/home.html @@ -63,6 +63,8 @@
    diff --git a/src/main/resources/web/dashboard/chart-design.html b/src/main/resources/web/dashboard/chart-design.html index d49d94b279..524cc6ba91 100644 --- a/src/main/resources/web/dashboard/chart-design.html +++ b/src/main/resources/web/dashboard/chart-design.html @@ -25,10 +25,15 @@
    [[${bundle.L('数据来源')}]]
    -
    [[${bundle.L('可用字段')}]]
    +
    +
    + + +
    +
    @@ -59,6 +64,7 @@
    [[${bundle.L('图表类型')}]]
    +