Squashed commit of the following:

commit b9e9f86d39
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Fri Apr 26 13:35:56 2024 +0800

    * Adjust mr actions style.

commit 1ddb2067b2
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Fri Apr 26 13:24:05 2024 +0800

    * Fix bug #48463.

commit 94528ed5b0
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Fri Apr 26 13:17:29 2024 +0800

    * Fix bug#48410.

commit d1b38c54f9
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Fri Apr 26 13:13:38 2024 +0800

    - Remove mr repos switch block.

commit c94da3e17a
Author: sunhao <sunhao@easycorp.ltd>
Date:   Fri Apr 26 11:30:43 2024 +0800

    * my: optimize UI of manage contacts page.

commit 2e74f33d22
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Fri Apr 26 11:13:16 2024 +0800

    * Fix bug #48317.

commit 45b6beccae
Author: liwenrui <liwenrui@easycorp.ltd>
Date:   Fri Apr 26 11:13:06 2024 +0800

    * handle direct client download without selecting os.

commit 82be78538f
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Fri Apr 26 10:43:42 2024 +0800

    * Fix ipd project only one execution bug.

commit faa6c605fc
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Fri Apr 26 10:42:25 2024 +0800

    * Fix bug #48499, modify the icon.

commit 5134736779
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Fri Apr 26 10:41:35 2024 +0800

    * Fix bug#48167.

commit 5ca23cd76f
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Fri Apr 26 10:30:02 2024 +0800

    * Fix bug #48453.

commit 23cde4b38e
Author: sunhao <sunhao@easycorp.ltd>
Date:   Fri Apr 26 10:19:28 2024 +0800

    * tutorial: fix tutorial start modal style.

commit 1d710e10bd
Author: sunhao <sunhao@easycorp.ltd>
Date:   Fri Apr 26 10:18:40 2024 +0800

    * zin: fix batch-form style in old iframe modal.

commit c9092603f0
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Fri Apr 26 10:15:27 2024 +0800

    * Fix bug #48495.

commit c0aeb9f69d
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Fri Apr 26 10:12:39 2024 +0800

    * Fix bug #48431.

commit 4348fd543a
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Fri Apr 26 10:11:45 2024 +0800

    * Fix bug #48445.

commit c9df08b1a1
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Fri Apr 26 10:07:01 2024 +0800

    * Fix bug for screen browse.

commit ebc469c0a4
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Fri Apr 26 09:55:44 2024 +0800

    * Adjust recentproject block css.

commit 9337fa109a
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Fri Apr 26 09:50:34 2024 +0800

    * Adjust recentproject block css.

commit 07903733bf
Author: 王怡栋 <wangyidong@cnezsoft.com>
Date:   Fri Apr 26 09:33:39 2024 +0800

    * Fix bug #48473.

commit a347de8354
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Fri Apr 26 09:34:29 2024 +0800

    * Add progress to recentproject block. task #116976.

commit e6e6c6047e
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Fri Apr 26 09:29:12 2024 +0800

    * Modify the problem of code review.

commit a53a577b69
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Fri Apr 26 09:13:43 2024 +0800

    * Finish task #45906.

commit 774cb4efbc
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Fri Apr 26 09:03:42 2024 +0800

    * Adjust review by me data to DAO search.

commit 976ef156b6
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Fri Apr 26 09:00:51 2024 +0800

    * Add class for copy project button.

commit 36f2c24a97
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Fri Apr 26 09:00:39 2024 +0800

    * Fix bug #48480.

commit ae9ef45621
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Thu Apr 25 21:12:27 2024 +0800

    * Optimated code.

commit 20eefb90dc
Author: sunhao <sunhao@easycorp.ltd>
Date:   Thu Apr 25 19:42:50 2024 +0800

    * zin: optimize UI for loading old pages.

commit 56006bca4f
Author: sunhao <sunhao@easycorp.ltd>
Date:   Thu Apr 25 18:18:24 2024 +0800

    * theme: update themes for old pages.

commit 0dd32057e4
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 17:15:25 2024 +0800

    * Modify style of productplan desc.

commit 272cdc4a61
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 17:03:07 2024 +0800

    * Fix bug #48413, replace executionLang with productplanLang.

commit 1f0b96aab2
Author: tanghucheng <tanghucheng@easycorp.ltd>
Date:   Thu Apr 25 16:59:05 2024 +0800

    * Program in the product lines can be empty.

commit fb6bb48ee6
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Thu Apr 25 17:02:29 2024 +0800

    * Remove update bi guide img file.

commit 66bcb21455
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 16:48:22 2024 +0800

    * Fix bug #48464, set icon by project model.

commit c5738c4129
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Thu Apr 25 16:47:41 2024 +0800

    * Fix bug for preview pivot.

commit cc0a8aabce
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Thu Apr 25 16:39:20 2024 +0800

    + Add the or vision image.

commit 73d70324fd
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Thu Apr 25 16:34:31 2024 +0800

    * Change lang item.

commit a54780438a
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 16:33:11 2024 +0800

    * Modify the style of bugSteps.

commit ff5be095b4
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 16:32:24 2024 +0800

    * Fix bug #48453.

commit 0432554143
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 16:21:52 2024 +0800

    + Add comment.

commit 9155a82131
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Thu Apr 25 16:07:55 2024 +0800

    * Adjust jenkins job form style.

commit dc272445cf
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 15:59:31 2024 +0800

    * Fix bug if the execution doesn't have the products.

commit 1fce0df29b
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Thu Apr 25 15:48:41 2024 +0800

    * Adjust app create tips.

commit a48e48394e
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 15:47:09 2024 +0800

    * Fix bug #48452.

commit c500f9ce58
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 15:27:17 2024 +0800

    * Fix bug #48449.

commit 076b33652c
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 15:11:57 2024 +0800

    * Fix bug #48429, don't append relatedBugs to excludeBugs when linking bugs.

commit bf59668dff
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Fri Apr 19 11:22:22 2024 +0800

    + Add page data for repo code view.

commit 91e83ce12b
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Thu Apr 25 15:10:34 2024 +0800

    * Adjust repo branch switch style.

commit 16147ac595
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 15:09:44 2024 +0800

    * Fix bug #48444.

commit da77572ec8
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Thu Apr 25 15:06:20 2024 +0800

    * Adjust executionstatistic block burn. task #116977.

commit 73235c93c8
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 15:03:45 2024 +0800

    * Fix bug #48436, add ztfRun to the actions in execution::testcase.

commit 248b65ba6a
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Thu Apr 25 15:02:39 2024 +0800

    * Fix bug#48420.

commit 388f54b5ec
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Thu Apr 25 15:01:03 2024 +0800

    * Fix bug#48427.

commit 2c4122b084
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 14:58:02 2024 +0800

    * Fix bug #48441, keep in current tab when changing the stepsType.

commit c9b094b3ab
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 14:58:13 2024 +0800

    * Fix bug #48438.

commit ae10a1c686
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 14:54:28 2024 +0800

    * Fix bug #48435, replace `$this->session` with `$app->session`.

commit c81031dab9
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 14:49:42 2024 +0800

    * Fix bug #48430, replace `{runID}`.

commit 0635779f1f
Author: 王怡栋 <wangyidong@cnezsoft.com>
Date:   Thu Apr 25 14:48:58 2024 +0800

    * Fix bug #48419.

commit 2b1358fb75
Author: zhouxin <zhouxin@easycorp.ltd>
Date:   Thu Apr 25 14:46:08 2024 +0800

    * Fix bug #47408.

commit aef64e2c85
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 14:45:30 2024 +0800

    * Fix bug #48423, replace `<br />` with `<p></p>`.

commit 392a031495
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 14:41:55 2024 +0800

    * Show the product line when the program is not selected.

commit 1449ea4d06
Author: tanghucheng <tanghucheng@easycorp.ltd>
Date:   Thu Apr 25 14:41:09 2024 +0800

    * Fix bug #116431.

commit 9ce8dfe3ee
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 14:31:03 2024 +0800

    * Fix bug #48433.

commit 62a8779806
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Thu Apr 25 14:28:56 2024 +0800

    * Add loadProductModules function.

commit 8ec4efde62
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 14:27:36 2024 +0800

    * Add return type.

commit 035f15b16e
Author: sunhao <sunhao@easycorp.ltd>
Date:   Thu Apr 25 14:21:50 2024 +0800

    * disable loading effect on loading modal with same url.

commit 1b7aac3f6f
Author: zhouxin <zhouxin@easycorp.ltd>
Date:   Thu Apr 25 14:19:34 2024 +0800

    * Fix bug #47654.

commit 730ab12d86
Author: sunhao <sunhao@easycorp.ltd>
Date:   Thu Apr 25 13:59:51 2024 +0800

    * zin: add favicon to base page.

commit e7051b2d2f
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 13:58:51 2024 +0800

    * Fix bug #48421, removes duplicate projects.

commit 3089e95041
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 13:43:47 2024 +0800

    * Fix bug #48176.

commit 1409059467
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 13:41:20 2024 +0800

    * Fix bug #48418.

commit 6934f36b9e
Author: zhouxin <zhouxin@easycorp.ltd>
Date:   Thu Apr 25 13:35:10 2024 +0800

    * Remove useless method.

commit 908f7dd087
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Thu Apr 25 13:30:56 2024 +0800

    * Adjust teamachievement block css. task #116978.

commit abb2d04bd0
Author: zhouxin <zhouxin@easycorp.ltd>
Date:   Thu Apr 25 13:25:53 2024 +0800

    * Optimize code.

commit 042726dd6a
Author: tanghucheng <tanghucheng@easycorp.ltd>
Date:   Thu Apr 25 11:16:45 2024 +0800

    * Fix bug #48143, Add $config->story->dtable->fieldList['roadmap']['width'].

commit b3b3a4884b
Author: tanghucheng <tanghucheng@easycorp.ltd>
Date:   Thu Apr 25 11:00:11 2024 +0800

    * Fix bug #48415.

commit b2878c8644
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 10:59:32 2024 +0800

    - Remove `var_dump`.

commit b8e22a5446
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 10:59:02 2024 +0800

    * Optimize code for uploading files.

commit 328cf2c605
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 10:57:27 2024 +0800

    - Remove unused style.

commit 98f501ad66
Author: sunhao <sunhao@easycorp.ltd>
Date:   Thu Apr 25 10:57:18 2024 +0800

    * zui: update zui3 lib.

commit 138ae9b7bb
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Thu Apr 25 10:55:12 2024 +0800

    * Adjust repo page language.

commit 2a4abbde8d
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Thu Apr 25 10:24:32 2024 +0800

    * Fix bug #48350.

commit c2c122b678
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Thu Apr 25 10:22:08 2024 +0800

    * Adjust welcome block css. task #116979.

commit 1cba83c80f
Author: sunhao <sunhao@easycorp.ltd>
Date:   Thu Apr 25 10:21:24 2024 +0800

    * kanban: optimize label style.

commit a92ca103b9
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 10:18:16 2024 +0800

    * Fix bug #48402.

commit decae20945
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 10:11:24 2024 +0800

    * Adjust select execution title style.

commit 8fc680ecc9
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Thu Apr 25 10:03:04 2024 +0800

    * Add delete file.

commit 0c08073647
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 09:39:41 2024 +0800

    * The date field was not validated when fixing the bug import task.

commit b6aa30da6f
Author: liyang <liyang@easycorp.ltd>
Date:   Thu Apr 25 09:41:02 2024 +0800

    Add delete btn in import repo page.

commit 188bdfff90
Author: liyang <liyang@easycorp.ltd>
Date:   Thu Apr 25 09:30:58 2024 +0800

    Hide the hidden function of the imported code library page

commit 22e899b21f
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Thu Apr 25 09:26:39 2024 +0800

    * Fix bug #48372.

commit dea8d5785a
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Thu Apr 25 09:25:57 2024 +0800

    * Remove the box when it is out of focus.

commit 94117eac4a
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 09:21:31 2024 +0800

    * Modify testtask's order in qastatistic block.

commit 16558b955d
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Thu Apr 25 09:18:46 2024 +0800

    * Use ajaxGetOldDropMenu

commit eb7f606fe5
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Thu Apr 25 09:07:24 2024 +0800

    * Add todo-calendar privilege to or interface.

commit 119fef4fae
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Thu Apr 25 09:06:33 2024 +0800

    * Adjust closedSetting to closeSetting.

commit 1179f36595
Author: tanghucheng <tanghucheng@easycorp.ltd>
Date:   Thu Apr 25 08:58:31 2024 +0800

    * Fix bug #47758, unset percent when disabled.

commit b143356a55
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Thu Apr 25 08:56:35 2024 +0800

    * Fix bug #48379.

commit e1ec138058
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Thu Apr 25 08:52:51 2024 +0800

    * Optimize code for bug #48271.

commit 8ca008736a
Author: liwenrui <liwenrui@easycorp.ltd>
Date:   Thu Apr 25 08:49:31 2024 +0800

    * tweak again, actually only wanted to add padding to the top.

commit 388006b340
Author: liwenrui <liwenrui@easycorp.ltd>
Date:   Thu Apr 25 08:49:05 2024 +0800

    * tweak zeneditor to add some padding back.

commit 0e0121b201
Author: liwenrui <liwenrui@easycorp.ltd>
Date:   Thu Apr 25 08:27:23 2024 +0800

    * update zeneditor and remove paragraph margin within.

commit 5e3b42a9f3
Author: sunhao <sunhao@easycorp.ltd>
Date:   Wed Apr 24 17:32:20 2024 +0800

    * zui: update zui3 lib.

commit 3e543c1403
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Wed Apr 24 17:30:35 2024 +0800

    * Optimize code.

commit ce8e34849d
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Wed Apr 24 17:29:17 2024 +0800

    * Fix project menu bug. bug #48121.

commit bff8da8aba
Author: sunhao <sunhao@easycorp.ltd>
Date:   Wed Apr 24 17:20:38 2024 +0800

    * zin: sort fields after reload form.

commit 01e15f6635
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 16:53:10 2024 +0800

    * Fix bug #46381.

commit b89caabfce
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Wed Apr 24 16:53:21 2024 +0800

    * Adjust the default filename for export execution.

commit 17d5d65a17
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 16:47:28 2024 +0800

    * Fix bug #48367, get linked bugs.

commit 3ee2f3ea5c
Author: 宋辰轩 <songchenxuan@easycorp.ltd>
Date:   Wed Apr 24 16:45:43 2024 +0800

    * Fix bug for preview pivot menu.

commit 2c00f9a657
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Wed Apr 24 16:29:25 2024 +0800

    * Fix bug#48334.

commit 484e24fd9d
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 16:24:24 2024 +0800

    * Fix bug #48343.

commit 1aa110645c
Author: liwenrui <liwenrui@easycorp.ltd>
Date:   Wed Apr 24 16:01:19 2024 +0800

    * fix ai prompt menu injected multiple times, bug #48358.

commit a2333979b5
Author: zhouxin <zhouxin@easycorp.ltd>
Date:   Wed Apr 24 15:59:09 2024 +0800

    * Fix height of project deviation pivot.

commit 7a3b20222f
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 15:54:16 2024 +0800

    * Replace runID in testcase::browse.

commit ab05d56301
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 15:45:01 2024 +0800

    * No iterative project hides execution column.

commit dffcd9e5c7
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Wed Apr 24 15:46:18 2024 +0800

    * Fix sql error.

commit 22d89bb361
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Wed Apr 24 15:43:11 2024 +0800

    * Fix bug#48349.

commit 603195b1e1
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 15:41:27 2024 +0800

    * Adjust execution column style of the build list.

commit 989f2b8ca5
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 15:27:01 2024 +0800

    * Fix bug #48344, set runID.

commit 2db2a7f9dc
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Wed Apr 24 15:25:54 2024 +0800

    - Remove gitfox for 20.0.

commit 3a1f824210
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Wed Apr 24 15:24:46 2024 +0800

    * Fix bug#48351.

commit af0b038283
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 15:14:43 2024 +0800

    * Fix bug #48348.

commit d4dc98d604
Author: tanghucheng <tanghucheng@easycorp.ltd>
Date:   Wed Apr 24 15:13:00 2024 +0800

    * Fix bug #48140, Enabled child stage for ipd project.

commit 08e0f83941
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 15:07:36 2024 +0800

    * Adjust height of the batchcreate stakeholder page.

commit 8e1dfa7634
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 14:58:29 2024 +0800

    * Fix bug #48345.

commit 0562ebb542
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Wed Apr 24 14:55:42 2024 +0800

    * Add story pairs to search form.

commit 2c062163a5
Author: tanghucheng <tanghucheng@easycorp.ltd>
Date:   Wed Apr 24 14:40:10 2024 +0800

    * Fix bug #48314.

commit b812069307
Author: qixinzhi <qixinzhi@easycorp.ltd>
Date:   Wed Apr 24 06:38:51 2024 +0000

    * Auto column width with cell max value length.

commit f9c1a3e850
Author: qixinzhi <qixinzhi@easycorp.ltd>
Date:   Wed Apr 24 06:38:04 2024 +0000

    * Delete screen 3 scheme.

commit 3ffa92734f
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Wed Apr 24 14:35:14 2024 +0800

    * Fix bug #48239.

commit 99e1864ca8
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 14:30:08 2024 +0800

    * Fix bug #46381.

commit 81c3ebaa0a
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Wed Apr 24 14:28:26 2024 +0800

    + Add time fliter for commit search.

commit 14d5bf7cf0
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Wed Apr 24 09:34:53 2024 +0800

    * Adjust repo create page linkage.

commit 6880ef70af
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 14:22:28 2024 +0800

    * Replace `->size` with `set::width` and `set::height` in echarts.

commit b4ea64832a
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Wed Apr 24 14:15:13 2024 +0800

    * Adjust job view repo name.

commit 8168c98ba8
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 14:13:53 2024 +0800

    * Fix bug #48262.

commit d480ef87bd
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 13:51:05 2024 +0800

    * Fix bug #48025, modify id.

commit 003a73d5cb
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 13:49:12 2024 +0800

    * Fix bug #48025, modify id.

commit 3ad257eb53
Author: daitingting <daitingting@xirangit.com>
Date:   Wed Apr 24 05:43:53 2024 +0000

     * Fix bug #48261.

commit 77e6744f1d
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 13:42:13 2024 +0800

    * Fix bug #48294.

commit f10b3f5710
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 13:36:01 2024 +0800

    * Reset code.

commit 068f97bc38
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 13:18:34 2024 +0800

    * Fix bug #48308, set control of stage.

commit 078d566703
Author: wangyuting <wangyuting@easycorp.ltd>
Date:   Wed Apr 24 13:18:41 2024 +0800

    * Adjust edit feedback data toggle.

commit 34738e42d9
Author: zhouxin <zhouxin@easycorp.ltd>
Date:   Wed Apr 24 13:13:29 2024 +0800

    * Adjust lang.

commit eddba468d0
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 13:07:40 2024 +0800

    * Fix bug #48310.

commit fc673b76ce
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 11:26:49 2024 +0800

    * Fix bug #48310.

commit 7840c1ab35
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Wed Apr 24 11:24:40 2024 +0800

    * Remove dm driver from convert date.

commit d47e91c07e
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Wed Apr 24 11:20:10 2024 +0800

    * Fix bug #48293.

commit d475b63a74
Author: daitingting <daitingting@xirangit.com>
Date:   Wed Apr 24 03:16:57 2024 +0000

     * Fix bug #48261.

commit 655cc652be
Author: 王怡栋 <wangyidong@cnezsoft.com>
Date:   Wed Apr 24 11:14:54 2024 +0800

    * Fix bug for select usage when install.

commit 425fade713
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 11:14:19 2024 +0800

    * Fix bug #48303.

commit 723797107b
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 11:09:27 2024 +0800

    * Fix bug #48303.

commit 6740a4c699
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 11:06:32 2024 +0800

    * Fix bug #48306.

commit c42f7ad83e
Author: zhouxin <zhouxin@easycorp.ltd>
Date:   Wed Apr 24 11:02:21 2024 +0800

    * Fix bug #48073.

commit e38f2f6531
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 10:42:42 2024 +0800

    * Set search form open.

commit 2cb511cf52
Author: 王怡栋 <wangyidong@cnezsoft.com>
Date:   Wed Apr 24 10:07:43 2024 +0800

    * Fix error for sso module.

commit f8b093e0eb
Author: xieqiyu <xieqiyu@easycorp.ltd>
Date:   Wed Apr 24 10:21:37 2024 +0800

    * Fix the bug of duration and BSA default value.

commit c3e9c7d7cd
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 10:20:25 2024 +0800

    * Fix bug #48243.

commit c7cf68be63
Author: hufangzhou <hufangzhou@easycorp.ltd>
Date:   Wed Apr 24 10:17:03 2024 +0800

    * Fix bug #48280, #48289.

commit b9cdcf5bcd
Author: sunhao <sunhao@easycorp.ltd>
Date:   Wed Apr 24 10:17:34 2024 +0800

    * my: fix cannot update badges in main navbar.

commit 3aa9609ce2
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 10:16:21 2024 +0800

    * Fix bug #48294.

commit fb26e627de
Author: sunhao <sunhao@easycorp.ltd>
Date:   Wed Apr 24 10:10:56 2024 +0800

    Revert "* zin: fix cannot find page method on update."

    This reverts commit 367a4ae49d.

commit 63a70421ed
Author: tianshujie <tianshujie@easycorp.ltd>
Date:   Wed Apr 24 09:45:07 2024 +0800

    * Fix bug #48271.

commit c1a66b708b
Author: sunguangming <sunguangming@easycorp.ltd>
Date:   Wed Apr 24 09:40:09 2024 +0800

    * Modify upgrade method.

commit c68b2170f9
Author: 王怡栋 <wangyidong@cnezsoft.com>
Date:   Wed Apr 24 09:18:09 2024 +0800

    * Fix for sso login from zdoo.

commit 580b4f170f
Author: liumengyi <liumengyi@easycorp.ltd>
Date:   Wed Apr 24 09:30:37 2024 +0800

    * Fix bug #48272, update program's consumed, left and progress.

commit 1d9791a55e
Author: 王怡栋 <wangyidong@cnezsoft.com>
Date:   Tue Apr 23 17:27:07 2024 +0800

    * Remove useless code.

commit 40f0e10c1f
Author: caoyanyi <caoyanyi@easycorp.ltd>
Date:   Tue Apr 23 17:18:03 2024 +0800

    * Update standard sql.

# Conflicts:
#	db/update20.0.beta2.sql
#	module/block/config/feedback.php
#	module/block/zen.php
#	module/custom/lang/vi.php
#	module/mr/ui/browsebyexecution.html.php
#	module/repo/lang/de.php
#	module/repo/lang/en.php
#	module/repo/lang/fr.php
#	module/repo/lang/zh-cn.php
#	module/space/lang/de.php
#	module/space/lang/en.php
#	module/space/lang/fr.php
#	module/space/lang/zh-cn.php
#	module/space/ui/createapplication.html.php
#	www/js/zui3/zen-editor/index.esm.js
#	www/js/zui3/zen-editor/p-0aaccc7e.js
#	www/js/zui3/zen-editor/p-276dd30f.js
#	www/js/zui3/zen-editor/p-2b13cc9a.js
#	www/js/zui3/zen-editor/p-38d18c5d.js
#	www/js/zui3/zen-editor/p-3f6cad83.js
#	www/js/zui3/zen-editor/p-51e3a048.js
#	www/js/zui3/zen-editor/p-617d463f.js
#	www/js/zui3/zen-editor/p-62c0132e.js
#	www/js/zui3/zen-editor/p-6d22490c.js
#	www/js/zui3/zen-editor/p-a563f50b.js
#	www/js/zui3/zen-editor/p-bf31230c.js
#	www/js/zui3/zen-editor/p-c6c95773.js
#	www/js/zui3/zen-editor/p-d83dd3f0.js
#	www/js/zui3/zen-editor/p-d8bedd14.js
#	www/js/zui3/zen-editor/p-eaaa4129.js
#	www/js/zui3/zen-editor/zen-editor.esm.js
This commit is contained in:
caoyanyi
2024-04-26 13:59:25 +08:00
parent 84374012d5
commit 7bb53ec47f
56 changed files with 183 additions and 210 deletions
+1
View File
@@ -25,3 +25,4 @@ UPDATE `zt_grouppriv` SET `method` = 'deleteWorkhour' WHERE `module` = 'task' AN
ALTER TABLE `zt_demandreview` CHANGE `reviewDate` `reviewDate` datetime NULL;
DELETE FROM `zt_lang` WHERE `module` = 'project' AND `section` = 'menuOrder';
DELETE FROM `zt_config` WHERE `module` = 'bi' AND `key` IN ('update2BI','bizGuide','pmsGuide');
+8 -8
View File
@@ -22,27 +22,27 @@ renderContactList = function()
* 选择联系人列表后加载联系人。
* Load contact users after selecting contact list.
*
* @param string value
* @param string target
* @access public
* @return void
*/
window.loadContactUsers = function(value)
window.loadContactUsers = function(target)
{
const event = this.base;
const $picker = $(event).zui('picker');
const picker = event.target;
const $picker = $(picker).zui('picker');
if($picker === undefined)
{
if(config.debug) console.log('[ZIN] Contact picker not found');
return;
}
if(!value) return;
const listID = $picker.$.value;
if(!listID) return;
const link = $.createLink('user', 'ajaxGetContactUsers', 'listID=' + value);
const target = this.props.loadTarget === undefined ? '' : this.props.loadTarget;
const link = $.createLink('user', 'ajaxGetContactUsers', 'listID=' + listID);
$.getJSON(link, function(users)
{
const $target = target ? $("[name^='" + target + "']") : $(event).closest('span').prev();
const $target = target ? $("[name^='" + target + "']") : $(picker).closest('#contactBox').prev();
const $targetPicker = $target.zui('picker');
if($targetPicker === undefined)
{
+1 -2
View File
@@ -63,8 +63,7 @@ class contactList extends wg
set::name($this->prop('name')),
set::items($items),
set::placeholder($this->prop('placeholder')),
set::onChange(jsRaw('loadContactUsers')),
setData('loadTarget', $target)
on::change()->call('loadContactUsers', "{$target}")
),
a
(
+1
View File
@@ -51,6 +51,7 @@ class formBatchPanel extends formPanel
.panel-form-batch > .panel-body {position: relative; padding: 0; margin: 0 -16px}
.panel-form-batch .form {gap: 0}
.panel-form-batch .form-batch-container {max-height: calc(100vh - 214px); padding: 0 16px 16px; flex: auto; min-height: 0; overflow: auto}
.modal-body .panel-form-batch .form-batch-container {max-height: unset;}
.panel-form-batch .form-actions {left: 0; position: static; flex: none; padding: 24px 0; border-top: 1px solid var(--color-border)}
CSS;
}
+1 -1
View File
@@ -90,7 +90,7 @@ class linkedStoryList extends storyList
'data-url' => str_replace('{id}', "$story->id", $this->unlinkUrl),
'data-params' => 'event',
'data-call' => 'unlinkStory',
'hint' => $lang->story->unlinkStory
'hint' => $story->type == 'requirement' ? str_replace($lang->SRCommon, $lang->URCommon, $lang->story->unlinkStory) : $lang->story->unlinkStory
);
if(is_array($unlinkBtn)) $btn = array_merge($btn, $unlinkBtn);
+6 -6
View File
@@ -19,14 +19,14 @@ class navbar extends wg
$object = $app->dbh->query('SELECT project,type FROM ' . TABLE_EXECUTION . " WHERE `id` = '$executionID'")->fetch();
if(empty($object)) return;
$executionPairs = array();
$userCondition = !$app->user->admin ? " AND `id` " . helper::dbIN($app->user->view->sprints) : '';
$orderBy = $object->type == 'stage' ? 'ORDER BY `id` ASC' : 'ORDER BY `id` DESC';
$executionList = $app->dbh->query("SELECT id,name,parent FROM " . TABLE_EXECUTION . " WHERE `project` = '{$object->project}' AND `deleted` = '0' $userCondition $orderBy")->fetchAll();
$executionPairs = array();
$userCondition = !$app->user->admin ? " AND `id` " . helper::dbIN($app->user->view->sprints) : '';
$orderBy = $object->type == 'stage' ? 'ORDER BY `id` ASC' : 'ORDER BY `id` DESC';
$executionList = $app->dbh->query("SELECT id,name,parent FROM " . TABLE_EXECUTION . " WHERE `project` = '{$object->project}' AND `deleted` = '0' $userCondition $orderBy")->fetchAll();
$parentExecutions = array_flip(array_column($executionList, 'parent'));
foreach($executionList as $execution)
{
if(isset($executionPairs[$execution->parent])) unset($executionPairs[$execution->parent]);
if($execution->id == $executionID) continue;
if($execution->id == $executionID || isset($parentExecutions[$execution->id])) continue;
$executionPairs[$execution->id] = $execution->name;
}
+3 -1
View File
@@ -86,7 +86,7 @@ class backup extends control
/**
* Backup.
*
* param string $reload yes|no
* @param string $reload yes|no
* @access public
* @return void
*/
@@ -306,6 +306,7 @@ class backup extends control
if($attachFileName)
{
$log = $this->backup->getBackupDirProgress($attachFileName);
if(empty($log)) return print('');
$message = sprintf($this->lang->backup->progressAttach, zget($log, 'allCount', 0), zget($log, 'count', 0));
}
@@ -313,6 +314,7 @@ class backup extends control
if($codeFileName)
{
$log = $this->backup->getBackupDirProgress($codeFileName);
if(empty($log)) return print('');
$message = sprintf($this->lang->backup->progressCode, zget($log, 'allCount', 0), zget($log, 'count', 0));
}
+3 -2
View File
@@ -44,13 +44,13 @@ function backupData()
{
clearInterval(timeID);
$('#message').append(data);
setTimeout(function(){return location.href = $.createLink('backup', 'index');}, 2000);
setTimeout(function(){return loadPage($.createLink('backup', 'index'));}, 2000);
},
error: function(request, textstatus, error)
{
clearInterval(timeID);
if(textstatus == 'timeout') $('#message').append("<p class='text-danger'>" + backupTimeout + '</p>');
setTimeout(function(){return location.href = $.createLink('backup', 'index');}, 2000);
setTimeout(function(){return loadPage($.createLink('backup', 'index'));}, 2000);
}
});
@@ -62,6 +62,7 @@ function backupData()
{
$.get($.createLink('backup', 'ajaxGetProgress'), function(data)
{
if(data == '') return;
$('#message').html(data);
});
}, 1000);
+7 -6
View File
@@ -193,17 +193,18 @@ class backupModel extends model
{
$die = "<?php die();?" . ">\n";
$tmpFile = $fileName . '.tmp';
rename($fileName, $tmpFile);
file_put_contents($tmpFile, $die);
$fh = fopen($fileName, 'r');
file_put_contents($fileName, $die);
$fh = fopen($tmpFile, 'r');
$length = 2 * 1024 * 1024;
while(!feof($fh))
{
$buff = fread($fh, $length);
file_put_contents($tmpFile, $buff, FILE_APPEND);
file_put_contents($fileName, $buff, FILE_APPEND);
}
fclose($fh);
rename($tmpFile, $fileName);
unlink($tmpFile);
return true;
}
@@ -331,7 +332,7 @@ class backupModel extends model
$log = json_decode(file_get_contents($tmpLogFile), true);
return empty($log) ? array() : $log;
}
return array();
return array('allCount' => 0, 'count' => 0);
}
/**
@@ -401,7 +402,7 @@ class backupModel extends model
/**
* Get disk space.
*
* @param int $backupPath
* @param string $backupPath
* @access public
* @return string
*/
+3
View File
@@ -51,6 +51,7 @@ class backupZen extends backup
* backupSQL
*
* @param string $fileName
* @param string $reload
* @access protected
* @return array
*/
@@ -83,6 +84,7 @@ class backupZen extends backup
* Backup appendix file.
*
* @param string $fileName
* @param string $reload
* @access protected
* @return array
*/
@@ -110,6 +112,7 @@ class backupZen extends backup
* Backup code
*
* @param string $fileName
* @param string $reload
* @access protected
* @return array
*/
+1 -1
View File
@@ -296,7 +296,7 @@ $config->block->size['product']['releasestatistic'] = array(1 => 8, 2 => 5);
$config->block->size['project']['overview'] = array(1 => 3);
$config->block->size['project']['statistic'] = array(2 => 5, 1 => 8);
$config->block->size['project']['recentproject'] = array(2 => 4, 1 => 9);
$config->block->size['project']['recentproject'] = array(2 => 4, 1 => 10);
$config->block->size['project']['project'] = array(2 => 6, 1 => 6);
$config->block->size['scrumproject']['scrumoverview'] = array(2 => 5, 1 => 8);
+1 -1
View File
@@ -8,7 +8,7 @@ if(in_array($config->edition, array('max', 'biz', 'ipd')))
$config->block->feedback->dtable = new stdclass();
$config->block->feedback->dtable->fieldList = array();
$config->block->feedback->dtable->fieldList['id'] = array('name' => 'id', 'title' => $lang->idAB, 'type' => 'id' , 'sort' => 'number');
$config->block->feedback->dtable->fieldList['title'] = array('name' => 'title', 'title' => $lang->feedback->title, 'type' => 'title', 'sort' => true, 'flex' => 1, 'link' => array('module' => 'feedback', 'method' => 'adminView', 'params' => 'feedbackID={id}'));
$config->block->feedback->dtable->fieldList['title'] = array('name' => 'title', 'title' => $lang->feedback->title, 'type' => 'title', 'sort' => true, 'flex' => 1, 'link' => array('module' => 'feedback', 'method' => $config->vision == 'lite' ? 'view' : 'adminView', 'params' => 'feedbackID={id}'));
$config->block->feedback->dtable->fieldList['product'] = array('name' => 'product', 'title' => $lang->feedback->product, 'type' => 'category', 'sort' => true);
$config->block->feedback->dtable->fieldList['pri'] = array('name' => 'pri', 'title' => $lang->feedback->pri, 'type' => 'pri', 'sort' => true);
$config->block->feedback->dtable->fieldList['status'] = array('name' => 'status', 'title' => $lang->feedback->status, 'type' => 'status', 'sort' => true, 'statusMap' => $lang->feedback->statusList);
+1
View File
@@ -147,6 +147,7 @@ blockPanel
div($contents),
h::css
(
'.block-assigntome .panel-heading .panel-title {overflow: hidden; text-overflow: clip; white-space: nowrap; width : 40%}',
'.block-assigntome .nav > .nav-item > a {padding: 0 16px; border-radius: 4px; height: 28px; color: var(--color-gray-700)}',
'.block-assigntome .nav > .nav-item > a.active {font-weight: bold; color: var(--color-gray-900); background: var(--color-primary-50)}'
)
+20 -7
View File
@@ -19,14 +19,14 @@ foreach($projects as $projectID => $project)
$cards[] = cell
(
setClass('p-2', $longBlock ? 'w-1/3' : 'w-full h-40'),
setClass('p-2', $longBlock ? 'w-1/3' : 'w-full h-50'),
div
(
setClass('border rounded-sm h-full px-4 hover:shadow hover:border-primary cursor-pointer open-url group', $longBlock ? 'py-4' : 'py-2'),
setClass('border rounded-sm h-full px-4 hover:shadow hover:border-primary cursor-pointer open-url group', $longBlock ? 'py-3' : 'py-2'),
setData('url', $viewLink),
div
(
setClass('mb-4'),
setClass('mb-2'),
a
(
setClass('font-bold text-fore text-md group-hover:text-primary'),
@@ -55,9 +55,9 @@ foreach($projects as $projectID => $project)
),
$project->end == LONG_TIME ? $lang->program->longTime : $project->end
),
($project->multiple && $execution) ? array
div
(
div
$project->multiple && $execution ? div
(
span
(
@@ -74,8 +74,21 @@ foreach($projects as $projectID => $project)
setClass('label warning-pale circle ml-2'),
$lang->execution->statusList[$execution->status]
)
),
) : null
) : div(setClass('h-5'))
),
div
(
setClass('flex items-center'),
span(setClass('num mr-1'), $project->progress . '%'),
progressBar
(
setClass('progress flex-auto'),
set::height(8),
set::percent($project->progress),
set::color('var(--color-primary-300)'),
set::background('rgba(0,0,0,0.02)')
)
)
)
)
);
+4 -19
View File
@@ -435,7 +435,7 @@ class blockZen extends block
/* 获取昨日解决的Bug数。 */
$fixBug = 0;
$fixBugGroup = $this->metric->getResultByCode('count_of_daily_fixed_bug_in_user', array('user' => $this->app->user->account, 'year' => date('Y', $yesterday), 'month' => date('m', $yesterday), 'day' => date('d', $yesterday)));
if(!empty($fixBug))
if(!empty($fixBugGroup))
{
$fixBugGroup = reset($fixBugGroup);
$fixBug = zget($fixBugGroup, 'value', 0);
@@ -469,27 +469,12 @@ class blockZen extends block
$assignedGroup = reset($assignedGroup);
$count = zget($assignedGroup, 'value', 0);
}
$assignToMe[$field] = array('number' => $count, 'href' => helper::createLink('my', 'work', "mode=$field&type=$type"));
$assignToMe[$field] = array('number' => $count, 'href' => common::hasPriv('my', 'work') ? helper::createLink('my', 'work', "mode=$field&type=$type") : '');
}
/* 生成待我审批的数据。 */
$reviewByMe['reviewByMe']['number'] = 0;
$reviewByMe['reviewByMe']['href'] = helper::createLink('my', 'audit');
foreach($this->lang->block->welcome->reviewList as $field => $label)
{
/* 根据不同的模块生成不同的度量项查询码。 */
$code = "reviewing_{$field}";
/* 查询当前指派给当前用户的不同数据。 */
$reviewingGroup = $this->metric->getResultByCode("count_of_{$code}_in_user", array('user' => $this->app->user->account));
$count = 0;
if(!empty($reviewingGroup))
{
$reviewingGroup = reset($reviewingGroup);
$count = zget($reviewingGroup, 'value', 0);
}
$reviewByMe['reviewByMe']['number'] += $count;
}
$reviewList = $this->loadModel('my')->getReviewingList('all');
$reviewByMe['reviewByMe'] = array('number' => count($reviewList), 'href' => common::hasPriv('my', 'audit') ? helper::createLink('my', 'audit') : '');
$this->view->todaySummary = date(DT_DATE3, time()) . ' ' . $this->lang->datepicker->dayNames[date('w', time())]; // 当前年月日 星期几。
$this->view->welcomeType = $welcomeType;
+1 -1
View File
@@ -947,7 +947,7 @@ class commonModel extends model
}
else
{
if(strpos($sql, ' ORDER BY') !== false) $queryCondition = substr($sql, 0, strpos($sql, ' ORDER BY '));
$queryCondition = strpos($sql, ' ORDER BY') !== false ? substr($sql, 0, strpos($sql, ' ORDER BY ')) : $sql;
}
$queryCondition = trim($queryCondition);
if(empty($queryCondition)) $queryCondition = "1=1";
+1
View File
@@ -193,6 +193,7 @@ window.getItem = function(info)
info.item.title = info.item.title.replaceAll(searchValue, "<span class='text-danger'>" + searchValue + "</span>");
info.item.title = {html: info.item.title};
}
info.item.titleAttrs = {'class': 'card-title clip'};
}
window.renderAvatar = function(item)
+1
View File
@@ -238,6 +238,7 @@ window.getItem = function(info)
info.item.content = {html: content};
if(info.item.color && info.item.color != '#fff') info.item.className = 'color-' + info.item.color.replace('#', '');
info.item.titleAttrs = {'class': 'card-title clip'};
}
window.getItemActions = function(item)
+1 -1
View File
@@ -1109,7 +1109,7 @@ class fileModel extends model
$objectType = zget($this->config->file->objectType, $file->objectType);
$html .= "<li class='mb-2 file' title='{$uploadDate}'>" . html::a($downloadLink, $fileTitle . " <span class='text-gray'>({$fileSize})</span>", '_blank', "id='fileTitle$file->id' onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title')\"");
$html .= "<li class='mb-2 file' title='{$uploadDate}'>" . html::a($downloadLink, $fileTitle . " <span class='text-gray'>({$fileSize})</span>", '_blank', "id='fileTitle$file->id'");
if(strpos('view,edit', $method) !== false)
{
if(common::hasPriv($objectType, 'view', $object)) $html = $this->buildFileActions($html, $downloadLink, $imageWidth, $showEdit, $showDelete, $file, $object);
+1 -1
View File
@@ -32,7 +32,7 @@ $(function()
function resizeModal()
{
const $modal = $('body>.modal-dialog>.modal-content>.modal-body,.modal-body').first();
const $modal = $('body>.modal-dialog>.modal-content,.modal-body').first();
const height = $modal.outerHeight();
$modal.closest('body').height(height);
}
+5 -3
View File
@@ -182,6 +182,8 @@ window.getItem = function(info)
renderGeneralItem(info);
}
if(info.item.color && info.item.color != '#fff') info.item.className = 'color-' + info.item.color.replace('#', '');
info.item.titleAttrs = {'class': 'card-title clip'};
}
window.renderGeneralItem = function(info)
@@ -283,11 +285,11 @@ window.renderProductplanItem = function(info)
if(info.item.deleted == '0')
{
statusBox = '<span class="label label-' + info.item.objectStatus + '">' + executionLang.statusList[info.item.objectStatus] + '</span>';
statusBox = '<span class="label label-' + info.item.objectStatus + '">' + productplanLang.statusList[info.item.objectStatus] + '</span>';
}
else
{
statusBox = '<span class="label label-deleted">' + executionLang.deleted + '</span>';
statusBox = '<span class="label label-deleted">' + productplanLang.deleted + '</span>';
}
const today = zui.formatDate(new Date(), 'yyyy-MM-dd');
@@ -295,7 +297,7 @@ window.renderProductplanItem = function(info)
const date = '<span class="ml-2 label ' + labelType + '">' + info.item.begin.slice(5) + ' ' + productplanLang.to + ' ' + info.item.end.slice(5) + '</span>';
info.item.content = {html: info.item.desc}
info.item.contentClass = 'text-gray';
info.item.contentClass = 'text-gray clip mr-2';
info.item.footer = {html: statusBox + date}
}
window.renderTicketItem = function(info)
+2
View File
@@ -66,3 +66,5 @@ window.showPackageSize = () =>
}
});
};
if(!$('#downloadClient input#os:not(.hidden)').length && !$('#downloadClient button.primary').length) getClient();
+2 -30
View File
@@ -10,10 +10,7 @@ declare(strict_types=1);
*/
namespace zin;
dropmenu
(
set::url(createLink('execution', 'ajaxGetDropMenu', "objectID=$objectID&module={$app->rawModule}&method={$app->rawMethod}"))
);
dropmenu(set::url(createLink('execution', 'ajaxGetDropMenu', "objectID=$objectID&module={$app->rawModule}&method={$app->rawMethod}")));
foreach($MRList as $index => $MR)
{
@@ -78,36 +75,11 @@ if(empty($repoID))
}
$MRs = initTableData($MRList, $config->mr->dtable->fieldList, $this->mr);
$repoData = array(array(
'text' => $lang->mr->statusList['all'],
'data-app' => $app->tab,
'url' => createLink('mr', 'browse', "repoID=0&mode={$mode}&param={$param}&objectID={$objectID}"),
'active' => !$repoID
));
foreach($repoList as $repo)
{
if(!in_array($repo->SCM, $this->config->repo->gitServiceTypeList)) continue;
$repoData[] = array(
'text' => $repo->name,
'data-app' => $app->tab,
'url' => createLink('mr', 'browse', "repoID={$repo->id}&mode={$mode}&param={$param}&objectID={$objectID}"),
'active' => $repo->id == $repoID
);
}
featureBar
(
set::current($mode != 'status' ? $mode : $param),
set::linkParams("repoID={$repoID}&mode=status&param={key}&objectID={$objectID}"),
count($repoPairs) > 1 ? to::leading(
dropdown
(
btn(setClass('ghost'), zget($repoPairs, $repoID, $lang->mr->statusList['all'])),
set::items($repoData),
set::placement('bottom-end')
)
) : null
set::linkParams("repoID={$repoID}&mode=status&param={key}&objectID={$objectID}")
);
toolBar
+1 -1
View File
@@ -294,7 +294,7 @@ panel
div
(
setClass('flex justify-center items-center pt-6'),
setClass('detail-actions center sticky mt-4 bottom-4 z-10'),
floatToolbar
(
set::object($MR),
+3 -6
View File
@@ -1,9 +1,6 @@
#mainContent .tab-pane li {height: 2rem; line-height: 2rem; cursor: pointer;}
#mainContent .tab-pane li.active {background-color: var(--color-gray-100);}
#mainContent .tab-pane li {color: rgba(var(--color-black-rgb),var(--tw-text-opacity));}
#mainContent .tab-pane li.active {font-weight: 600; color: rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));}
#mainContent .tab-pane li:hover {color: rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));}
#manageContacts .tabs > .nav-tabs {margin-top: 1rem;}
#contactTab .listitem {color: inherit}
#contactTab .listitem.selected {color: var(--color-primary-500); font-weight: bold;}
#contactPanel .form-row .form-group {padding-left: 70px;}
#contactPanel .form-row .form-group .form-label {padding-left: 0; justify-content: start; width: 80px;}
#contactPanel .form-actions {margin-top: 0;}
-15
View File
@@ -1,15 +0,0 @@
function createContact()
{
$('#contactTab').find('.contact').removeClass('active');
const url = $.createLink('my', 'manageContacts');
loadPage(url, '#contactPanel');
}
function getContact(event)
{
$('#contactTab').find('.contact').removeClass('active');
const $li = $(event.target).addClass('active');
const listID = $li.data('id');
const url = $.createLink('my', 'manageContacts', 'listID=' + listID);
loadPage(url, '#contactPanel');
}
+27 -49
View File
@@ -12,27 +12,20 @@ namespace zin;
$listID = isset($list->id) ? $list->id : 0;
$myContactList = array();
$publicContactList = array();
$myContactList = array();
$publicContactList = array();
$isActivePublicList = false;
foreach($lists as $contactList)
{
$selected = $listID == $contactList->id;
if($contactList->account == $app->user->account)
{
$myContactList[] = li
(
setClass('contact ellipsis pl-2 ' . ($listID == $contactList->id ? 'active' : '')),
set('data-id', $contactList->id),
$contactList->listName
);
$myContactList[] = array('text' => $contactList->listName, 'url' => createLink('my', 'manageContacts', "listID=$contactList->id"), 'selected' => $selected);
}
else if($contactList->public)
{
$publicContactList[] = li
(
setClass('contact ellipsis pl-2'),
set('data-id', $contactList->id),
$contactList->listName
);
$publicContactList[] = array('text' => $contactList->listName, 'url' => createLink('my', 'manageContacts', "listID=$contactList->id"), 'selected' => $selected);
if($selected) $isActivePublicList = true;
}
}
@@ -42,63 +35,49 @@ if(!empty($list->userList))
foreach(explode(',', $list->userList) as $account) $userList[] = zget($users, $account);
}
panel
div
(
set::shadow(false),
setClass('panel-form px-4 mx-auto size-lg'),
on::click('#createContact', 'createContact'),
on::click('.contact', 'getContact'),
setClass('canvas shadow ring rounded mx-auto'),
style::maxWidth(1200),
div
(
setID('manageContacts'),
setClass('w-full flex'),
setClass('row'),
cell
(
set::width('180px'),
setClass('border-r overflow-hidden'),
div
setClass('col flex-none p-4 gap-3 w-48 items-stretch'),
div(setClass('text-gray'), $lang->my->contactList),
btn
(
setClass('border-b py-3 pr-4'),
div(span(setClass('text-gray'), $lang->my->contactList)),
div
(
setClass('pt-3'),
a
(
setID('createContact'),
setClass('btn primary-pale bd-primary w-full'),
icon('plus'),
$lang->my->createContacts
)
)
set::type('primary-pale'),
set::icon('plus'),
set::url('my', 'manageContacts'),
setData('load', '#contactPanel'),
setClass('w-full'),
$lang->my->createContacts
),
tabs
(
setID('contactTab'),
setClass('pr-4'),
tabPane
(
set::key('my'),
set::title($lang->my->myContact),
set::active(true),
ul
(
setClass('pl-0'),
$myContactList
)
set::active(!$isActivePublicList),
simpleList(set::items($myContactList)),
),
tabPane
(
set::key('public'),
set::title($lang->my->publicContact),
ul($publicContactList)
set::active($isActivePublicList),
simpleList(set::items($publicContactList)),
)
)
),
divider(),
cell
(
setID('contactPanel'),
setClass('flex-1 px-8'),
setClass('flex-1 px-8 pb-8'),
div
(
set('class', 'panel-title text-lg flex w-full py-6'),
@@ -120,6 +99,7 @@ panel
($mode == 'create' || $mode == 'edit') ? form
(
set::actions(array()),
$listID ? null : on::init()->removeClass('#contactTab .selected', 'selected'),
formRow
(
formGroup
@@ -196,5 +176,3 @@ panel
)
)
);
render();
+1 -1
View File
@@ -79,7 +79,7 @@ sidebar
$this->config->edition == 'open' ? div
(
set::width(240),
setClass('bg-canvas px-4 py-2 module-menu shadow'),
setClass('bg-canvas px-4 py-2 module-menu'),
html(empty($config->isINT) ? $lang->bizVersion : $lang->bizVersionINT)
) : null
)
+1 -2
View File
@@ -67,10 +67,9 @@ class pivotZen extends pivot
if($this->config->edition == 'open' && $group->grade == 1) continue;
$pivots = $this->pivot->getAllPivotByGroupID($group->id);
if(empty($group->collector) && empty($pivots)) continue;
$menus[] = (object)array('id' => $group->id, 'parent' => 0, 'name' => $group->name);
if($group->grade > 1) $menus[] = (object)array('id' => $group->id, 'parent' => 0, 'name' => $group->name);
if($pivots) $pivots = $this->pivot->processPivot($pivots, false);
+2 -2
View File
@@ -663,7 +663,7 @@ class product extends control
}
$this->view->title = $this->lang->product->manageLine;
$this->view->programs = $this->loadModel('program')->getTopPairs('withDeleted');
$this->view->programs = array(0 => $this->lang->null) + $this->loadModel('program')->getTopPairs('withDeleted');
$this->view->lines = $this->product->getLines();
$this->view->fields = $this->config->product->form->manageLine;
$this->display();
@@ -1002,7 +1002,7 @@ class product extends control
public function ajaxGetLine(int $programID, int $productID = 0)
{
$lines = array();
if(empty($productID) or $programID) $lines = $this->product->getLinePairs($programID);
if(empty($productID) || $programID) $lines = $this->product->getLinePairs($programID, true);
$items = array();
foreach($lines as $lineID => $lineName) $items[] = array('text' => $lineName, 'value' => $lineID);
+1 -1
View File
@@ -325,7 +325,7 @@ class productTao extends productModel
*/
protected function createLine(int $programID, string $lineName): int|false
{
if($programID <= 0) return false;
if($programID < 0) return false;
if(empty($lineName)) return false;
$line = new stdClass();
+2 -2
View File
@@ -172,8 +172,8 @@ $fnBuildLinkStoryButton = function() use($lang, $app, $product, $projectHasProdu
);
}
if($canLinkStory && !$canlinkPlanStory) return item(set($linkItem + array('class' => 'btn primary link-story-btn', 'icon' => 'plus')));
if($canlinkPlanStory && !$canLinkStory) return item(set($linkPlanItem + array('class' => 'btn primary', 'icon' => 'plus')));
if($canLinkStory && !$canlinkPlanStory) return item(set($linkItem + array('class' => 'btn primary link-story-btn', 'icon' => 'link')));
if($canlinkPlanStory && !$canLinkStory) return item(set($linkPlanItem + array('class' => 'btn primary', 'icon' => 'link')));
};
/* DataTable columns. */
+4 -3
View File
@@ -74,7 +74,7 @@ foreach($lines as $line)
(
set::width('1/2'),
set::className('ml-4'),
set::control(array('control' => 'picker', 'id' => "programs_id{$line->id}")),
set::control(array('control' => 'picker', 'id' => "programs_id{$line->id}", 'required' => true)),
set::name("programs[id$line->id]"),
set::items($programs),
set::value($line->root),
@@ -103,9 +103,10 @@ for($i = 0; $i <= 5; $i ++)
(
set::width('1/2'),
set::className('ml-4'),
set::control(array('control' => 'picker', 'id' => "programs_{$i}")),
set::control(array('control' => 'picker', 'id' => "programs_{$i}", 'required'=> true)),
set::name("programs[$i]"),
set::items($programs)
set::items($programs),
set::value('0')
) : null
),
cell
-5
View File
@@ -639,11 +639,6 @@ class productZen extends product
foreach($data->modules as $id => $name)
{
if(empty($name)) continue;
if(in_array($this->config->systemMode, array('ALM', 'PLM')) and empty($data->programs[$id]))
{
dao::$errors["programs[{$id}]"] = $this->lang->product->programEmpty;
return false;
}
$programID = $data->programs[$id];
if(!isset($lines[$programID])) $lines[$programID] = array();
+1 -1
View File
@@ -235,7 +235,7 @@ window.getCol = function(col)
window.getItem = function(info)
{
if(info.item.delay)
if(info.item.delay && ['wait', 'doing'].includes(info.item.status))
{
info.item.suffix = productplanLang.expired;
info.item.suffixClass = 'label danger rounded-xl' + (info.item.status == 'doing' ? ' mr-8' : '');
+5 -4
View File
@@ -222,8 +222,8 @@ class projectModel extends model
$this->app->loadClass('pager', true);
foreach($projects as $projectID => $project)
{
$orderBy = $project->model == 'waterfall' ? 'id_asc' : 'id_desc';
$pager = $project->model == 'waterfall' ? null : new pager(0, 1, 1);
$orderBy = in_array($project->model, array('waterfall', 'ipd')) ? 'id_asc' : 'id_desc';
$pager = in_array($project->model, array('waterfall', 'ipd')) ? null : new pager(0, 1, 1);
$project->executions = $this->loadModel('execution')->getStatData($projectID, 'undone', 0, 0, false, '', $orderBy, $pager);
$project->teamCount = isset($teamCount[$projectID]) ? $teamCount[$projectID] : 0;
$project->estimate = isset($estimates[$projectID]) ? round($estimates[$projectID]->estimate, 2) : 0;
@@ -925,10 +925,11 @@ class projectModel extends model
* @param string $model all|scrum|waterfall|kanban
* @param string $param noclosed
* @param int $projectID
* @param bool $pairs
* @access public
* @return array array(projectID => projectName, ...)
*/
public function getPairsByModel(string $model = 'all', string $param = '', int $projectID = 0): array
public function getPairsByModel(string $model = 'all', string $param = '', int $projectID = 0, bool $pairs = true): array
{
if(commonModel::isTutorialMode()) return $this->loadModel('tutorial')->getProjectPairs();
@@ -972,7 +973,7 @@ class projectModel extends model
$projectPairs = array();
foreach($allProjects as $programID => $projects)
{
foreach($projects as $project) $projectPairs[$project->id] = $project->name;
foreach($projects as $project) $projectPairs[$project->id] = $pairs ? $project->name : $project;
}
return $projectPairs;
}
+5 -5
View File
@@ -75,7 +75,7 @@ formGridPanel
btn
(
set::icon('copy'),
setClass('primary-ghost size-md'),
setClass('primary-ghost size-md copy-project-btn'),
toggle::modal(array('target' => '#copyProjectModal', 'destoryOnHide' => true, 'size' => 'sm')),
$lang->project->copy
),
@@ -122,17 +122,17 @@ JS
$copyProjectsBox = array();
if(!empty($copyProjects))
{
foreach($copyProjects as $id => $name)
foreach($copyProjects as $id => $project)
{
$copyProjectsBox[] = btn
(
setClass('project-block justify-start'),
setClass($copyProjectID == $id ? 'primary-outline' : ''),
set('data-id', $id),
set('data-pinyin', zget($copyPinyinList, $name, '')),
icon(setClass('text-gray'), !empty($model) ? ($model == 'scrum' ? 'sprint' : $model) : $lang->icons['project']),
set('data-pinyin', zget($copyPinyinList, $project->name, '')),
icon(setClass('text-gray'), !empty($project->model) ? ($project->model == 'scrum' ? 'sprint' : $project->model) : $lang->icons['project']),
on::click($toggleActiveProject),
span($name, set::title($name), setClass('text-left'))
span($project->name, set::title($project->name), setClass('text-left'))
);
}
}
+6 -2
View File
@@ -316,6 +316,10 @@ class projectZen extends project
}
}
/* Get copy projects. */
$copyProjects = $this->project->getPairsByModel($model, '', 0, false);
$copyProjectPairs = array_combine(array_keys($copyProjects), array_column($copyProjects, 'name'));
$this->view->title = $this->lang->project->create;
$this->view->gobackLink = (isset($output['from']) && $output['from'] == 'global') ? $this->createLink('project', 'browse') : '';
$this->view->model = $model;
@@ -326,8 +330,8 @@ class projectZen extends project
$this->view->branchID = isset($output['branchID']) ? $output['branchID'] : 0;
$this->view->allProducts = $allProducts;
$this->view->multiBranchProducts = $this->product->getMultiBranchPairs((int)$topProgramID);
$this->view->copyProjects = $this->project->getPairsByModel($model);
$this->view->copyPinyinList = common::convert2Pinyin($this->view->copyProjects);
$this->view->copyProjects = $copyProjects;
$this->view->copyPinyinList = common::convert2Pinyin($copyProjectPairs);
$this->view->copyProjectID = $copyProjectID;
$this->view->parentProgram = $parentProgram;
$this->view->programList = $this->program->getParentPairs();
+1
View File
@@ -128,6 +128,7 @@ function onScmChange()
const $hostPicker = $('#serviceHost').zui('picker');
$hostPicker.render({items: data});
$hostPicker.$.clear();
onHostChange();
});
}
}
+2 -1
View File
@@ -26,7 +26,8 @@ class screen extends control
*/
public function browse(int $dimensionID = 0)
{
$this->checkShowGuide();
//$this->checkShowGuide();
$this->view->showGuide = false;
$dimensionID = $this->loadModel('dimension')->getDimension($dimensionID);
-1
View File
@@ -3814,7 +3814,6 @@ class storyModel extends model
$storyLang->legendLinkStories = str_replace($SRCommon, $URCommon, $storyLang->legendLinkStories);
$storyLang->legendChildStories = str_replace($SRCommon, $URCommon, $storyLang->legendChildStories);
$storyLang->legendSpec = str_replace($SRCommon, $URCommon, $storyLang->legendSpec);
$storyLang->unlinkStory = str_replace($SRCommon, $URCommon, $storyLang->unlinkStory);
$storyLang->notice->closed = str_replace($SRCommon, $URCommon, $storyLang->notice->closed);
$storyLang->notice->reviewerNotEmpty = str_replace($SRCommon, $URCommon, $storyLang->notice->reviewerNotEmpty);
+4 -2
View File
@@ -54,7 +54,9 @@ function toggleZeroTaskStory()
const $storyTd = $(this);
$.getJSON(getStoryLink, function(stories)
{
$storyTd.find('[name^=story]').zui('picker').render({items: stories});
const $storyPicker = $storyTd.find('[name^=story]').zui('picker');
$storyPicker.render({items: stories});
$storyPicker.$.setValue(0);
});
});
}
@@ -87,7 +89,7 @@ function setStoryRelated(event)
{
const storyInfo = data['storyInfo'];
$module.zui('picker').$.setValue(parseInt(storyInfo.moduleID));
$module.zui('picker').$.setValue(parseInt(storyInfo.moduleID), true);
$storyEstimate.val(storyInfo.estimate);
$storyPri.val(storyInfo.pri);
$storyDesc.val(storyInfo.spec);
+3 -2
View File
@@ -1,4 +1,5 @@
#start {padding: 40px; text-align: center; color: #fff;}
#startModal {color: #fff;}
#start {padding: 40px; text-align: center;}
.start-icon {position: relative; width: 140px; height: 140px; margin: 0 auto; line-height: 140px;}
.start-icon .icon1{font-size: 140px; color: rgba(0,0,0,.1); text-shadow: 0 1px 7px rgb(0,0,0,.1); animation: -spin 15s linear infinite}
.start-icon .icon2{font-size: 56px; position: absolute; top: 35px; left: 42px; color: #EBF2F9; z-index: 10; width: 70px; height: 70px; text-align: center; line-height: 70px; text-shadow: 0 1px 3px rgb(0,0,0,.15);}
@@ -7,4 +8,4 @@ h1{font-size: 24px;}
.btn-start-now{min-width: 120px; height: 42px;}
.btn-lg{padding: 11px 16px; font-size: 14px; line-height: 18px; border-radius: 4px;}
.btn-info{color: #2e7fff; background-color: #e6f0ff; border-color: transparent;}
.tutorial-start .modal-dialog .modal-content .modal-body {padding: 0; margin-top: 0;}
#startModal .modal-body {padding: 0; margin-top: 0;}
+2
View File
@@ -10,6 +10,8 @@ declare(strict_types=1);
*/
namespace zin;
setID('startModal');
div
(
setID('start'),
+1 -1
View File
@@ -1 +1 @@
export{M as MonacoEditor,Z as ZenEditor}from"./p-38bd6d84.js";import"./p-1f29e0e0.js";
export{M as MonacoEditor,Z as ZenEditor}from"./p-898ed1c1.js";import"./p-b9d115dd.js";
+1 -1
View File
@@ -1 +1 @@
import{p as e,b as o}from"./p-1f29e0e0.js";export{s as setNonce}from"./p-1f29e0e0.js";import"./p-49a055b9.js";(()=>{const o=import.meta.url,r={};return""!==o&&(r.resourcesUrl=new URL(".",o).href),e(r)})().then((e=>o([["p-a72657f3",[[65,"zen-editor",{name:[1],uploadUrl:[1,"upload-url"],placeholder:[1],fullscreenable:[4],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],bubbleMenu:[4,"bubble-menu"],locale:[1],css:[1],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],value:[1025],editor:[32],isFullscreen:[32],rendered:[32],setHTML:[64],getHTML:[64],getText:[64],focusEditor:[64],blurEditor:[64]},null,{css:["onCSSChange"]}],[1,"zen-editor-core",{name:[1],uploadUrl:[1,"upload-url"],placeholder:[1],initialContent:[1,"initial-content"],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],bubbleMenu:[4,"bubble-menu"],locale:[1],styles:[16],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],updateInputValue:[16],fullscreenable:[4],toggleFullscreen:[16],isFullscreen:[4,"is-fullscreen"],value:[1],editor:[32],forceUpdateCounter:[32],isMonaco:[32]},null,{locale:["onLocaleChanage"]}],[2,"zen-editor-bubble-menu",{menuProps:[16],editor:[16],disabled:[4],element:[32]}],[1,"zen-editor-menubar",{editor:[16],menubarMode:[2,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],forceUpdateCounter:[2,"force-update-counter"],states:[8],toggleMonaco:[16],toggleFullscreen:[16],styles:[16]}],[0,"monaco-editor",{options:[8],initialValue:[1,"initial-value"],tiptapEditor:[16],updateInputValue:[16],setFocus:[64],getValue:[64]},null,{options:["onOptionsChange"]}],[1,"zen-editor-content",{editor:[16],styles:[16]},[[2,"click","handleClick"]]],[0,"zen-editor-menu-item",{itemProps:[8,"item-props"],menubarMode:[2,"menubar-mode"],styles:[16]}]]],["p-5330989c",[[0,"zen-editor-floating-menu",{menuProps:[16],editor:[16],element:[32]}]]],["p-1e3048b8",[[0,"zen-editor-footer",{editor:[16],forceUpdateCounter:[2,"force-update-counter"],toggleFullscreen:[16],showCharCount:[4,"show-char-count"]}]]]],e)));
import{p as e,b as o}from"./p-b9d115dd.js";export{s as setNonce}from"./p-b9d115dd.js";import{g as r}from"./p-90d6b5f8.js";(()=>{const o=import.meta.url,r={};return""!==o&&(r.resourcesUrl=new URL(".",o).href),e(r)})().then((async e=>(await r(),o([["p-5306bec1",[[65,"zen-editor",{name:[1],readonly:[1028],uploadUrl:[1,"upload-url"],placeholder:[1],fullscreenable:[4],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideUI:[4,"hide-ui"],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],bubbleMenu:[4,"bubble-menu"],preferHardBreak:[4,"prefer-hard-break"],locale:[1],css:[1],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],value:[1025],editor:[32],isFullscreen:[32],rendered:[32],setHTML:[64],insertHTML:[64],getHTML:[64],getText:[64],focusEditor:[64],blurEditor:[64],setReadonly:[64]},null,{css:["onCSSChange"]}],[1,"zen-editor-core",{name:[1],readonly:[4],uploadUrl:[1,"upload-url"],placeholder:[1],initialContent:[1,"initial-content"],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideUI:[4,"hide-ui"],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],bubbleMenu:[4,"bubble-menu"],preferHardBreak:[4,"prefer-hard-break"],locale:[1],styles:[16],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],updateInputValue:[16],fullscreenable:[4],toggleFullscreen:[16],isFullscreen:[4,"is-fullscreen"],value:[1],editor:[32],forceUpdateCounter:[32],isMonaco:[32]},null,{locale:["onLocaleChanage"]}],[2,"zen-editor-bubble-menu",{menuProps:[16],editor:[16],disabled:[4],element:[32]}],[1,"zen-editor-menubar",{editor:[16],menubarMode:[2,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],forceUpdateCounter:[2,"force-update-counter"],states:[8],toggleMonaco:[16],toggleFullscreen:[16],styles:[16]}],[0,"monaco-editor",{options:[8],initialValue:[1,"initial-value"],tiptapEditor:[16],updateInputValue:[16],setFocus:[64],getValue:[64]},null,{options:["onOptionsChange"]}],[1,"zen-editor-content",{editor:[16],styles:[16]},[[2,"click","handleClick"]]],[0,"zen-editor-menu-item",{itemProps:[8,"item-props"],menubarMode:[2,"menubar-mode"],styles:[16]}]]],["p-de75d67e",[[0,"zen-editor-floating-menu",{menuProps:[16],editor:[16],element:[32]}]]],["p-cd71f736",[[0,"zen-editor-footer",{editor:[16],forceUpdateCounter:[2,"force-update-counter"],toggleFullscreen:[16],showCharCount:[4,"show-char-count"]}]]]],e))));
+3 -2
View File
@@ -630,19 +630,20 @@
{
$page = $('<div/>')
.append($('<iframe />').attr({name: `app-${currentCode}-old`, frameborder: 'no', scrolling: 'auto', style: 'width:100%;height:100%;'}))
.attr({id: 'oldPage', class: 'canvas fixed w-full h-full top-0 left-0 load-indicator', style: 'z-index:100;'})
.attr({id: 'oldPage', class: 'canvas fixed w-full h-full top-0 left-0', style: 'z-index:100;'})
.insertAfter('body')
.on('oldPageLoad.app', () =>
{
const frame = window.frameElement;
frame.classList.remove('loading');
frame.classList.add('in');
$page.find('iframe').removeClass('invisible');
$page.removeClass('loading').find('iframe').addClass('in');
$(document).trigger('pageload.app');
});
}
if($page.hasClass('hidden')) $page.addClass('loading').removeClass('hidden');
const $iframe = $page.find('iframe').removeClass('in');
const $iframe = $page.find('iframe').removeClass('in').addClass('invisible');
if($iframe.attr('src') === url) $iframe[0].contentWindow.location.reload();
else $iframe.attr('src', url);
currentAppUrl = url;
Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

File diff suppressed because one or more lines are too long
+24 -3
View File
@@ -9,6 +9,11 @@
* @link http://www.zentao.net
*/
body {font-family: -apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Wenquanyi Micro Hei,WenQuanYi Zen Hei,ST Heiti,SimHei,WenQuanYi Zen Hei Sharp,sans-serif;}
.container {max-width: 1720px!important}
@media (min-width: 1720px) {.container {max-width:1720px}}
.mt-md {margin-top: 100px!important;}
/* Finish task #5068*/
.main-table .table{cursor:pointer;}
@@ -78,9 +83,18 @@ th.c-confirmed, th.c-confirm {text-align: center;}
.confirmed, .confirm1 {color: #313C52;}
.unconfirmed, .confirm0 {color: #9EA3B0;}
#navbar .nav>li.active>a {background-color: transparent;}
#navbar .nav>li.active>a:before {position: absolute; right: 10px; bottom: 8px!important; left: 10px; display: block; height: 2px; content: ' '; background-color: var(--color-primary); opacity: .9;}
.theme-default #navbar .nav>li.active>a:before {background-color: #fff;}
#navbar .nav>li>a {font-size: 14px; padding: 8px 12px 10px;}
#navbar .nav>li>a:hover {background-color: rgba(0,0,0,.04);}
#navbar .nav>li.active>a {background-color: rgba(0,0,0,.08);}
#mainHeader {height: 48px;}
.header-btn {padding: 7px 0;}
.header-btn > .btn {display: inline-flex; align-items: center; gap: 6px; padding: 0 6px!important; height: 32px;}
.header-btn+.header-btn:before {top: 15px; left: -14px;}
.header-btn+.header-btn > .btn {padding-left: 5px!important;}
#heading {left: 9px;}
#toolbar {right: 9px;}
@media (min-width: 1400px){#heading {left: 33px}#toolbar {right: 34px}}
#userNav>li>a {padding-top: 9px;}
#userNav > li {height: 48px; display: flex; align-items: center; justify-content: center;}
#userNav > li + li {margin-left: 8px;}
@@ -91,6 +105,7 @@ th.c-confirmed, th.c-confirm {text-align: center;}
#userNav>li.open>a:before, #userNav>li>a:hover:before {position: absolute; bottom: 0px; left: calc(50% - 5px); width: 0; height: 0; content: ' '; border-color: transparent transparent #fff transparent; border-style: solid; border-width: 0 6px 6px 6px;}
#userNav .dropdown-menu {z-index: 2000;}
#userNav .dropdown-menu:hover + .dropdown-toggle:before {position: absolute; bottom: 0px; left: calc(50% - 5px); width: 0; height: 0; content: ' '; border-color: transparent transparent #fff transparent; border-style: solid; border-width: 0 6px 6px 6px;}
#userNav>li:hover>a,#userNav>li>a:hover {background: none;}
#userNav .dropdown-menu, #userNav .create-list {margin-right: -15px !important; border-top: 0px;}
#userNav .dropdown-menu .dropdown-submenu>ul {margin-right: 0px !important;}
#userNav .dropdown-menu .dropdown-submenu>ul::before {position: absolute; content: ''; top: -60px; bottom: -40px; left: -40px; right: 0;}
@@ -110,6 +125,12 @@ th.c-confirmed, th.c-confirm {text-align: center;}
#headerActions .dropdown-menu:before, #headerActions .dropdown-menu:hover:before {position: absolute; top: -9px; right: 50%; width: 0; height: 0; content: ' '; border-color: transparent transparent #fff transparent; border-style: solid; border-width: 0 10px 10px 10px;}
[lang^='zh'] #headerActions {right: 235px;}
#mainMenu>.btn-toobar .btn-active-text, #mainMenu>.btn-toolBar .btn-active-text, #mainMenu>.btn-toolbar .btn-active-text {color: var(--color-fore); background-color: var(--color-pale);}
.btn-active-text .text {color: inherit}
#mainMenu>.btn-toolbar {height: 32px; display: flex; align-items: center;}
#mainMenu>.btn-toolbar .btn {padding: 0 8px; height: 28px; display: inline-flex; gap: 4px; align-items: center;}
#mainMenu>.btn-toolbar .label-badge {border-radius: 4px;}
.icon-size-width:before {content: "\e9c5"; transform: rotate(90deg); -ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -webkit-transform: rotate(90deg); -o-transform: rotate(90deg);}
.checkbox-primary > label{overflow: hidden;}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long