From b788ee10adeb40da8ef12c00c1f0afdf3c2c74f6 Mon Sep 17 00:00:00 2001 From: devezhao Date: Thu, 27 May 2021 02:11:50 +0800 Subject: [PATCH 1/5] ProjectTasks --- .../dashboard/charts/ChartsFactory.java | 4 +- .../charts/builtin/ProjectTasks.java | 71 ++++++++++++++ .../core/service/project/ProjectManager.java | 6 +- src/main/resources/web/assets/css/charts.css | 63 +++++++++---- .../resources/web/assets/js/charts/charts.js | 93 ++++++++++++++++++- .../resources/web/assets/js/rb-view.append.js | 1 - .../dashboard/charts/BuiltinChartsTest.java | 12 ++- 7 files changed, 223 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java diff --git a/src/main/java/com/rebuild/core/service/dashboard/charts/ChartsFactory.java b/src/main/java/com/rebuild/core/service/dashboard/charts/ChartsFactory.java index 7cd62b994..e843d17bd 100644 --- a/src/main/java/com/rebuild/core/service/dashboard/charts/ChartsFactory.java +++ b/src/main/java/com/rebuild/core/service/dashboard/charts/ChartsFactory.java @@ -20,6 +20,7 @@ import com.rebuild.core.service.dashboard.ChartManager; import com.rebuild.core.service.dashboard.charts.builtin.ApprovalList; import com.rebuild.core.service.dashboard.charts.builtin.BuiltinChart; import com.rebuild.core.service.dashboard.charts.builtin.FeedsSchedule; +import com.rebuild.core.service.dashboard.charts.builtin.ProjectTasks; import com.rebuild.core.support.i18n.Language; /** @@ -98,7 +99,8 @@ public class ChartsFactory { public static BuiltinChart[] getBuiltinCharts() { return new BuiltinChart[]{ new ApprovalList(), - new FeedsSchedule() + new FeedsSchedule(), + new ProjectTasks() }; } } diff --git a/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java new file mode 100644 index 000000000..5f2851ec8 --- /dev/null +++ b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java @@ -0,0 +1,71 @@ +/* +Copyright (c) Ruifang Tech and/or its owners. All rights reserved. +*/ + +package com.rebuild.core.service.dashboard.charts.builtin; + +import cn.devezhao.commons.ObjectUtils; +import cn.devezhao.persist4j.engine.ID; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.rebuild.core.Application; +import com.rebuild.core.configuration.ConfigBean; +import com.rebuild.core.service.dashboard.charts.ChartData; +import com.rebuild.core.service.project.ProjectManager; +import com.rebuild.core.support.i18n.I18nUtils; +import com.rebuild.core.support.i18n.Language; +import com.rebuild.utils.JSONUtils; + +import java.util.Date; + +/** + * @author devezhao + * @since 2021/5/26 + */ +public class ProjectTasks extends ChartData implements BuiltinChart { + + // 虚拟ID + public static final ID MYID = ID.valueOf("017-9000000000000003"); + + public ProjectTasks() { + super(null); + this.config = getChartConfig(); + } + + @Override + public ID getChartId() { + return MYID; + } + + @Override + public String getChartTitle() { + return Language.L("我的任务"); + } + + @Override + public JSON build() { + final int viewState = ObjectUtils.toInt(getExtraParams().get("state"), 0); + Object[][] tasks = Application.createQueryNoFilter( + "select taskId,projectId,projectPlanId.planName,taskNumber,taskName,deadline,createdOn,endTime" + + " from ProjectTask where executor = ? and status = ?") + .setParameter(1, getUser()) + .setParameter(2, viewState) + .array(); + + JSONArray array = new JSONArray(); + for (Object[] o : tasks) { + ID projectId = (ID) o[1]; + ConfigBean cb = ProjectManager.instance.getProject(projectId, null); + String taskNumber = String.format("%s-%s", cb.getString("projectCode"), o[3]); + String planName = String.format("%s (%s)", o[2], cb.getString("projectName")); + + array.add(JSONUtils.toJSONObject( + new String[] { "id", "projectId", "taskNumber", "planName", "taskName", "deadline", "createdOn", "endTime" }, + new Object[] { o[0], projectId, taskNumber, planName, o[4], + I18nUtils.formatDate((Date) o[5]), + I18nUtils.formatDate((Date) o[6]), + I18nUtils.formatDate((Date) o[7]) })); + } + return array; + } +} diff --git a/src/main/java/com/rebuild/core/service/project/ProjectManager.java b/src/main/java/com/rebuild/core/service/project/ProjectManager.java index f667889f3..f7fd20251 100644 --- a/src/main/java/com/rebuild/core/service/project/ProjectManager.java +++ b/src/main/java/com/rebuild/core/service/project/ProjectManager.java @@ -134,12 +134,12 @@ public class ProjectManager implements ConfigManager { * 获取指定项目 * * @param projectId - * @param user + * @param checkUser * @return * @throws ConfigurationException If not found */ - public ConfigBean getProject(ID projectId, ID user) throws ConfigurationException { - ConfigBean[] ee = user == null ? getAllProjects() : getAvailable(user); + public ConfigBean getProject(ID projectId, ID checkUser) throws ConfigurationException { + ConfigBean[] ee = checkUser == null ? getAllProjects() : getAvailable(checkUser); for (ConfigBean e : ee) { if (projectId.equals(e.getID("id"))) { return e.clone(); diff --git a/src/main/resources/web/assets/css/charts.css b/src/main/resources/web/assets/css/charts.css index a3007efd7..99050b5fa 100644 --- a/src/main/resources/web/assets/css/charts.css +++ b/src/main/resources/web/assets/css/charts.css @@ -15,7 +15,7 @@ See LICENSE and COMMERCIAL in the project root for license information. } .chart-box.INDEX { - padding-bottom: 0px; + padding-bottom: 0; } .chart-box.high { @@ -152,7 +152,6 @@ See LICENSE and COMMERCIAL in the project root for license information. } .chart.ctable .table th { - background-color: #dee2e6; background-color: #eceff1; border-width: 1px; font-weight: normal; @@ -168,29 +167,28 @@ See LICENSE and COMMERCIAL in the project root for license information. } .chart-box.ApprovalList, -.chart-box.FeedsSchedule { - padding: 0; - padding-top: 20px; +.chart-box.FeedsSchedule, +.chart-box.ProjectTasks { + padding: 20px 0 0; } .chart-box.ApprovalList .chart-head, -.chart-box.FeedsSchedule .chart-head { +.chart-box.FeedsSchedule .chart-head, +.chart-box.ProjectTasks .chart-head { margin: 0 25px; } .chart.ApprovalList, -.chart.FeedsSchedule { +.chart.FeedsSchedule, +.chart.ProjectTasks { position: relative; width: 100%; margin-top: 5px; } -.chart.FeedsSchedule { - margin-top: 13px; -} - .chart.ApprovalList .table th, -.chart.FeedsSchedule .table th { +.chart.FeedsSchedule .table th, +.chart.ProjectTasks .table th { border-top: 0 none; padding-top: 0; padding-bottom: 6px; @@ -198,21 +196,26 @@ See LICENSE and COMMERCIAL in the project root for license information. } .chart.ApprovalList .table td, -.chart.FeedsSchedule .table td { +.chart.FeedsSchedule .table td, +.chart.ProjectTasks .table td { padding: 8px 10px; } .chart.ApprovalList .table tr th:first-child, .chart.ApprovalList .table tr td:first-child, .chart.FeedsSchedule .table tr th:first-child, -.chart.FeedsSchedule .table tr td:first-child { +.chart.FeedsSchedule .table tr td:first-child, +.chart.ProjectTasks .table tr th:first-child, +.chart.ProjectTasks .table tr td:first-child { padding-left: 25px; } .chart.ApprovalList .table tr th:last-child, .chart.ApprovalList .table tr td:last-child, .chart.FeedsSchedule .table tr th:last-child, -.chart.FeedsSchedule .table tr td:last-child { +.chart.FeedsSchedule .table tr td:last-child, +.chart.ProjectTasks .table tr th:last-child, +.chart.ProjectTasks .table tr td:last-child { padding-right: 23px; } @@ -236,7 +239,13 @@ See LICENSE and COMMERCIAL in the project root for license information. box-shadow: inset 3px 3px 3px rgba(0, 0, 0, 0.15); } -.chart.FeedsSchedule td > .content { +.chart.FeedsSchedule, +.chart.ProjectTasks { + margin-top: 13px; +} + +.chart.FeedsSchedule td > .content, +.chart.ProjectTasks td > .content { max-height: 37px; overflow: hidden; text-overflow: ellipsis; @@ -245,15 +254,32 @@ See LICENSE and COMMERCIAL in the project root for license information. line-height: 1; } -.chart.FeedsSchedule td > .content:hover { +.chart.FeedsSchedule td > .content:hover, +.chart.ProjectTasks td > .content:hover { opacity: 0.8; } -.chart.FeedsSchedule td > .content p { +.chart.FeedsSchedule td > .content p, +.chart.ProjectTasks td > .content p { margin: 0; line-height: 1.5; } +.chart.ProjectTasks td > .content p { + text-overflow: ellipsis; + max-width: 100%; +} + +.chart.ProjectTasks td.cell-detail span { + display: inline-block; +} + +.chart.ProjectTasks td.cell-detail span.badge { + font-weight: normal; + font-size: 12px; + padding: 0.07692rem 0.38rem; +} + .chart-select-wrap .nav-pills .nav-link { padding: 0.7rem 1rem; } @@ -314,7 +340,6 @@ See LICENSE and COMMERCIAL in the project root for license information. .chart-list > div .delete { font-size: 1.2rem; color: #a1a1a1; - display: inline-block; padding: 8px; margin-top: 3px; margin-right: 6px; diff --git a/src/main/resources/web/assets/js/charts/charts.js b/src/main/resources/web/assets/js/charts/charts.js index b99120e76..396a26f13 100644 --- a/src/main/resources/web/assets/js/charts/charts.js +++ b/src/main/resources/web/assets/js/charts/charts.js @@ -732,7 +732,7 @@ class FeedsSchedule extends BaseChart { return ( - +
{item.scheduleTime.substr(0, 16)}
@@ -761,6 +761,9 @@ class FeedsSchedule extends BaseChart { .find('.FeedsSchedule') .css('height', $tb.height() - 13) .perfectScrollbar() + $tb.find('.content').each(function () { + $(this).attr('title', $(this).text()) + }) this._$tb = $tb }) return table @@ -958,6 +961,92 @@ class ChartScatter extends BaseChart { } } +// ~ 我的任务 +class ProjectTasks extends BaseChart { + renderChart(data) { + const table = + (data || []).length === 0 ? ( +
+ {$L('你已完成所有任务')} +
+ ) : ( +
+ + + + + + + + + + {data.map((item) => { + let deadlineState = -1 + if (!item.endTime && item.deadline) { + if ($expired(item.deadline)) deadlineState = 2 + else if ($expired(item.deadline, -60 * 60 * 24)) deadlineState = 1 + else deadlineState = 0 + } + + return ( + + + + + + ) + })} + +
{$L('任务')}{$L('时间')}
+ + + +

{item.taskName}

+

{item.planName}

+
+
+ {deadlineState > -1 ? ( + + {$L('到期时间')} + + ) : ( +
+ {$L('创建时间')} +
+ )} +
+
+ ) + + const chartdata =
{table}
+ this.setState({ chartdata: chartdata }, () => { + const $tb = $(this._$body) + $tb + .find('.ProjectTasks') + .css('height', $tb.height() - 13) + .perfectScrollbar() + this._$tb = $tb + }) + return table + } + + resize() { + $setTimeout( + () => { + if (this._$tb) this._$tb.find('.ProjectTasks').css('height', this._$tb.height() - 13) + }, + 400, + 'resize-chart-' + this.state.id + ) + } + + _toggleStatus(id) { + } +} + // 确定图表类型 // eslint-disable-next-line no-unused-vars const detectChart = function (cfg, id) { @@ -986,6 +1075,8 @@ const detectChart = function (cfg, id) { return } else if (cfg.type === 'SCATTER') { return + } else if (cfg.type === 'ProjectTasks') { + return } else { return

{`${$L('未知图表')} [${cfg.type}]`}

} diff --git a/src/main/resources/web/assets/js/rb-view.append.js b/src/main/resources/web/assets/js/rb-view.append.js index e5e52f251..d6d4005f9 100644 --- a/src/main/resources/web/assets/js/rb-view.append.js +++ b/src/main/resources/web/assets/js/rb-view.append.js @@ -91,7 +91,6 @@ class LightFeedsList extends RelatedList { class LightTaskList extends RelatedList { constructor(props) { super(props) - this.__FeedsList = new FeedsList() this.__listClass = 'tasks-list inview' this.__listNoData = ( diff --git a/src/test/java/com/rebuild/core/service/dashboard/charts/BuiltinChartsTest.java b/src/test/java/com/rebuild/core/service/dashboard/charts/BuiltinChartsTest.java index 0f734659c..2522d794b 100644 --- a/src/test/java/com/rebuild/core/service/dashboard/charts/BuiltinChartsTest.java +++ b/src/test/java/com/rebuild/core/service/dashboard/charts/BuiltinChartsTest.java @@ -12,6 +12,7 @@ import com.rebuild.TestSupport; import com.rebuild.core.service.approval.ApprovalState; import com.rebuild.core.service.dashboard.charts.builtin.ApprovalList; import com.rebuild.core.service.dashboard.charts.builtin.FeedsSchedule; +import com.rebuild.core.service.dashboard.charts.builtin.ProjectTasks; import org.junit.jupiter.api.Test; import java.util.HashMap; @@ -24,16 +25,23 @@ import java.util.Map; public class BuiltinChartsTest extends TestSupport { @Test - public void testApprovalList() { + void testApprovalList() { Map params = new HashMap<>(); params.put("state", ApprovalState.APPROVED.getState()); + JSON ret = ((ApprovalList) new ApprovalList().setUser(SIMPLE_USER)).setExtraParams(params).build(); System.out.println(ret); } @Test - public void testFeedsSchedule() { + void testFeedsSchedule() { JSON ret = ((FeedsSchedule) new FeedsSchedule().setUser(SIMPLE_USER)).build(); System.out.println(ret); } + + @Test + void testProjectTasks() { + JSON ret = ((ProjectTasks) new ProjectTasks().setUser(SIMPLE_USER)).build(); + System.out.println(ret); + } } From 3e825322151763e9fc1a585acfe7ce97acb638a0 Mon Sep 17 00:00:00 2001 From: devezhao Date: Thu, 27 May 2021 12:05:21 +0800 Subject: [PATCH 2/5] style: Task in view --- .../web/project/ProjectTaskController.java | 3 +- .../resources/web/assets/css/view-page.css | 22 +++++++------- .../resources/web/assets/js/rb-view.append.js | 29 +++++++++---------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/rebuild/web/project/ProjectTaskController.java b/src/main/java/com/rebuild/web/project/ProjectTaskController.java index a6674bb3c..e0c7ae78b 100644 --- a/src/main/java/com/rebuild/web/project/ProjectTaskController.java +++ b/src/main/java/com/rebuild/web/project/ProjectTaskController.java @@ -266,7 +266,8 @@ public class ProjectTaskController extends BaseController { ID projectId = (ID) o[12]; ConfigBean project = ProjectManager.instance.getProject(projectId, null); ConfigBean plan = ProjectManager.instance.getPlanOfProject(projectPlanId, projectId); - formatted.put("planName", String.format("%s (%s)", plan.getString("planName"), project.getString("projectName"))); + formatted.put("planName", String.format("%s (%s)", + project.getString("projectName"), plan.getString("planName"))); formatted.put("planFlow", plan.getInteger("flowStatus")); alist.add(formatted); diff --git a/src/main/resources/web/assets/css/view-page.css b/src/main/resources/web/assets/css/view-page.css index 5d6d599c9..7719c7b7e 100644 --- a/src/main/resources/web/assets/css/view-page.css +++ b/src/main/resources/web/assets/css/view-page.css @@ -558,18 +558,6 @@ body { margin: -1px 0 0; } -.tasks-list.inview .header-title .title .badge { - background-color: #f5f5f5; - color: #595959; - font-size: 12px; - font-weight: normal; - padding: 0.07692rem 0.38rem; - border: 0 none; - float: left; - margin-top: -2px; - margin-right: 10px; -} - .tasks-list.inview .header-title::after { content: ''; } @@ -600,6 +588,16 @@ body { border-left-color: #ea3f30; } +.tasks-list.inview .card.priority-2 .header-title .title, +.tasks-list.inview .card.priority-3 .header-title .title { + padding-left: 41px; +} + +.tasks-list.inview .card.priority-2 .header-title .title .custom-control, +.tasks-list.inview .card.priority-3 .header-title .title .custom-control { + left: 11px; +} + .tasks-list.inview .card.status-1 .title { color: #8c8c8c; opacity: 0.5; diff --git a/src/main/resources/web/assets/js/rb-view.append.js b/src/main/resources/web/assets/js/rb-view.append.js index d6d4005f9..cd87509eb 100644 --- a/src/main/resources/web/assets/js/rb-view.append.js +++ b/src/main/resources/web/assets/js/rb-view.append.js @@ -127,12 +127,18 @@ class LightTaskList extends RelatedList {
- {item.taskNumber} - {item.taskName} + [{item.taskNumber}] {item.taskName}
+
+ {item.executor && ( + + Avatar + + )} +
{item.planName}
{!item.deadline && !item.endTime && ( @@ -141,24 +147,17 @@ class LightTaskList extends RelatedList { )} - {item.deadline && ( - - {$L('到期时间')} - - - )} - {!item.deadline && item.endTime && ( + {item.endTime && ( {$L('完成时间')} )} -
-
- {item.executor && ( - - Avatar - + {!item.endTime && item.deadline && ( + + {$L('到期时间')} + + )}
From ff9dff628e8460bfe5ffa7958f47e02b06cc15b2 Mon Sep 17 00:00:00 2001 From: devezhao Date: Thu, 27 May 2021 12:39:58 +0800 Subject: [PATCH 3/5] ProjectTasks --- .../charts/builtin/ProjectTasks.java | 19 +++--- src/main/resources/web/assets/css/charts.css | 23 +++---- .../resources/web/assets/js/charts/charts.js | 62 ++++++++++++------- .../web/assets/js/charts/dashboard.js | 3 +- 4 files changed, 65 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java index 5f2851ec8..9385cdc72 100644 --- a/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java +++ b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java @@ -46,7 +46,7 @@ public class ProjectTasks extends ChartData implements BuiltinChart { public JSON build() { final int viewState = ObjectUtils.toInt(getExtraParams().get("state"), 0); Object[][] tasks = Application.createQueryNoFilter( - "select taskId,projectId,projectPlanId.planName,taskNumber,taskName,deadline,createdOn,endTime" + + "select taskId,projectId,projectPlanId,taskNumber,taskName,createdOn,deadline,endTime,status,priority" + " from ProjectTask where executor = ? and status = ?") .setParameter(1, getUser()) .setParameter(2, viewState) @@ -55,16 +55,21 @@ public class ProjectTasks extends ChartData implements BuiltinChart { JSONArray array = new JSONArray(); for (Object[] o : tasks) { ID projectId = (ID) o[1]; - ConfigBean cb = ProjectManager.instance.getProject(projectId, null); - String taskNumber = String.format("%s-%s", cb.getString("projectCode"), o[3]); - String planName = String.format("%s (%s)", o[2], cb.getString("projectName")); + ConfigBean cbProject = ProjectManager.instance.getProject(projectId, null); + ConfigBean cbPlan = ProjectManager.instance.getPlanOfProject((ID) o[2], projectId); + + String projectName = String.format("%s (%s)", + cbProject.getString("projectName"), cbPlan.getString("planName")); + String taskNumber = String.format("%s-%s", cbProject.getString("projectCode"), o[3]); array.add(JSONUtils.toJSONObject( - new String[] { "id", "projectId", "taskNumber", "planName", "taskName", "deadline", "createdOn", "endTime" }, - new Object[] { o[0], projectId, taskNumber, planName, o[4], + new String[] { "id", "projectName", "planFlow", "taskNumber", "taskName", "createdOn", "deadline", "endTime", "status", "priority" }, + new Object[] { o[0], projectName, cbPlan.getInteger("flowStatus"), taskNumber, o[4], I18nUtils.formatDate((Date) o[5]), I18nUtils.formatDate((Date) o[6]), - I18nUtils.formatDate((Date) o[7]) })); + I18nUtils.formatDate((Date) o[7]), + o[8], o[9] + })); } return array; } diff --git a/src/main/resources/web/assets/css/charts.css b/src/main/resources/web/assets/css/charts.css index 99050b5fa..47035ac6d 100644 --- a/src/main/resources/web/assets/css/charts.css +++ b/src/main/resources/web/assets/css/charts.css @@ -246,7 +246,7 @@ See LICENSE and COMMERCIAL in the project root for license information. .chart.FeedsSchedule td > .content, .chart.ProjectTasks td > .content { - max-height: 37px; + max-height: 36px; overflow: hidden; text-overflow: ellipsis; color: #404040; @@ -262,22 +262,23 @@ See LICENSE and COMMERCIAL in the project root for license information. .chart.FeedsSchedule td > .content p, .chart.ProjectTasks td > .content p { margin: 0; - line-height: 1.5; + line-height: 1.4; } -.chart.ProjectTasks td > .content p { - text-overflow: ellipsis; - max-width: 100%; +.chart.ProjectTasks tr.priority-2 td:first-child, +.chart.ProjectTasks tr.priority-3 td:first-child { + border-left: 5px solid #f7b904; + padding-left: 20px; } -.chart.ProjectTasks td.cell-detail span { - display: inline-block; +.chart.ProjectTasks tr.priority-3 td:first-child { + border-left-color: #ea3f30; } -.chart.ProjectTasks td.cell-detail span.badge { - font-weight: normal; - font-size: 12px; - padding: 0.07692rem 0.38rem; +.chart.ProjectTasks tr.status-1 a, +.chart.ProjectTasks tr.status-1 label { + color: #8c8c8c; + opacity: 0.5; } .chart-select-wrap .nav-pills .nav-link { diff --git a/src/main/resources/web/assets/js/charts/charts.js b/src/main/resources/web/assets/js/charts/charts.js index 396a26f13..7b74c7e6e 100644 --- a/src/main/resources/web/assets/js/charts/charts.js +++ b/src/main/resources/web/assets/js/charts/charts.js @@ -976,41 +976,47 @@ class ProjectTasks extends BaseChart { {$L('任务')} - {$L('时间')} + {$L('时间')} {data.map((item) => { - let deadlineState = -1 - if (!item.endTime && item.deadline) { - if ($expired(item.deadline)) deadlineState = 2 - else if ($expired(item.deadline, -60 * 60 * 24)) deadlineState = 1 - else deadlineState = 0 - } - return ( - - + + -

{item.taskName}

-

{item.planName}

+

+ [{item.taskNumber}] {item.taskName} +

+

+ {item.projectName} +

- - {deadlineState > -1 ? ( - - {$L('到期时间')} - - ) : ( -
- {$L('创建时间')} -
+ + {!item.deadline && !item.endTime && ( + + {$L('创建时间')} + + + )} + {item.endTime && ( + + {$L('完成时间')} + + + )} + {!item.endTime && item.deadline && ( + + {$L('到期时间')} + + )} @@ -1043,7 +1049,17 @@ class ProjectTasks extends BaseChart { ) } - _toggleStatus(id) { + _toggleStatus(item, e) { + const $target = $(e.currentTarget) + const data = { + status: $target.prop('checked') ? 1 : 0, + metadata: { id: item.id }, + } + + $.post('/app/entity/common-save', JSON.stringify(data), (res) => { + if (res.error_code > 0) return RbHighbar.error(res.error_msg) + $target.parents('tr').removeClass('status-0 status-1').addClass('status-' + data.status) + }) } } diff --git a/src/main/resources/web/assets/js/charts/dashboard.js b/src/main/resources/web/assets/js/charts/dashboard.js index 5f35bcfbb..a18a7bb5b 100644 --- a/src/main/resources/web/assets/js/charts/dashboard.js +++ b/src/main/resources/web/assets/js/charts/dashboard.js @@ -212,7 +212,8 @@ const render_dashboard = function (init) { // When resize/re-postion/remove $('.grid-stack') - .on('change', function () { + .on('change', function (e) { + if (e.target) return // input 元素也会触发 ??? save_dashboard() }) .on('resizestart', function () { From c8321179b1fb7a25de1ece0b07281cf5abaa1941 Mon Sep 17 00:00:00 2001 From: devezhao Date: Thu, 27 May 2021 12:57:33 +0800 Subject: [PATCH 4/5] ProjectTasks --- .../core/service/dashboard/charts/builtin/ProjectTasks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java index 9385cdc72..d71603284 100644 --- a/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java +++ b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java @@ -47,7 +47,7 @@ public class ProjectTasks extends ChartData implements BuiltinChart { final int viewState = ObjectUtils.toInt(getExtraParams().get("state"), 0); Object[][] tasks = Application.createQueryNoFilter( "select taskId,projectId,projectPlanId,taskNumber,taskName,createdOn,deadline,endTime,status,priority" + - " from ProjectTask where executor = ? and status = ?") + " from ProjectTask where executor = ? and status = ? order by seq asc") .setParameter(1, getUser()) .setParameter(2, viewState) .array(); From a6a10f87c2e64bdddc5f05904ed1aa39787a0779 Mon Sep 17 00:00:00 2001 From: devezhao Date: Thu, 27 May 2021 20:23:08 +0800 Subject: [PATCH 5/5] better code --- .../core/service/dashboard/charts/builtin/ProjectTasks.java | 5 ++++- src/main/resources/web/assets/js/project/task-view.js | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java index d71603284..29c44cecd 100644 --- a/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java +++ b/src/main/java/com/rebuild/core/service/dashboard/charts/builtin/ProjectTasks.java @@ -1,5 +1,8 @@ /* -Copyright (c) Ruifang Tech and/or its owners. All rights reserved. +Copyright (c) REBUILD and/or its owners. All rights reserved. + +rebuild is dual-licensed under commercial and open source licenses (GPLv3). +See LICENSE and COMMERCIAL in the project root for license information. */ package com.rebuild.core.service.dashboard.charts.builtin; 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 4beea77d7..416a16a31 100644 --- a/src/main/resources/web/assets/js/project/task-view.js +++ b/src/main/resources/web/assets/js/project/task-view.js @@ -279,6 +279,7 @@ class ValueStatus extends ValueComp { } // 执行者 +// TODO 执行者仅允许选择成员 ??? class ValueExecutor extends ValueComp { state = { ...this.props } @@ -1066,7 +1067,7 @@ class TextEditor extends React.Component { const item = EMOJIS[k] this.__es.push( this._selectEmoji(k)}> - + {k} ) }