Commit Graph

239 Commits

Author SHA1 Message Date
chenos
7779cd79ac
refactor: optimize the command line (#3339)
* fix: perform load action on boot main app

* feat: add dataType option in collection duplicator

* chore: reset optional dumpable config

* chore: dump command

* chore: dump & restore command

* chore: delay restore

* fix: dump test

* chore: restore command

* chore: dump command action

* chore: dumpable collection api

* chore: client collection option

* feat: backup& restore client

* chore: content disposition header in dump response

* chore: download backup field

* feat: collection origin option

* fix: test

* chore: collection manager collection origin

* chore: upload  backup field

* chore: upload restore file

* chore: upload restore file

* fix: test

* chore: backup and restore support learn more

* refactor: upload restore file

* refactor: upload restore file

* fix: test

* fix: test

* chore: dumpable collection with title

* chore: pg only test

* chore: test

* fix: test

* chore: test sleep

* style: locale improve

* refactor: download backup file

* refactor: start restore

* fix: restore key name

* refactor: start restore

* refactor: start restore

* refactor: start restore

* refactor: start restore

* refactor: start restore

* refactor: start restore

* chore: unify duplicator option

* fix: dump empty collection

* chore: test

* chore: test

* style: style improve

* refactor: locale improve

* chore: dumpalbe collection orders

* style: style improve

* style: style improve

* style: icon adjust

* chore: nginx body size

* chore: get file status

* feat: run dump task

* feat: download api

* chore: backup files resourcer

* feat: restore destroy api

* chore: backup files resoucer

* feat: list backup files action

* chore: get collection meta from dumped file

* fix: dump file name

* fix: test

* chore: backup and restore ui

* chore: swagger api for backup & restore

* chore: api doc

* chore: api doc

* chore: api doc

* chore: backup and restore ui

* chore: backup and restore ui

* chore: backup and restore ui

* chore: backup and restore ui

* chore: backup and restore ui

* fix: restore values

* style: style improve

* fix: download field respontype

* fix: restore form local file

* refactor: local improve

* refactor: delete backup file

* fix: in progress status

* refactor: locale improve

* refactor: locale improve

* refactor: style improve

* refactor: style improve

* refactor: style improve

* test: dump collection table attribute

* chore: dump collection with table attributes

* chore: test

* chore: create new table in restore

* fix: import error

* chore: restore table from backup file

* chore: sync collection after restore collections

* fix: restore json data

* style: style improve

* chore: restore with fields

* chore: test

* fix: test

* fix: test with underscored

* style: style improve

* fix: lock file state

* chore: add test file

* refactor: backup & restore plugin

* fix: mysql test

* chore: skip import view collection

* chore: restore collection with inherits topo order

* fix: import

* style: style improve

* fix: restore sequence fields

* fix: themeConfig collection duplicator option

* fix: restore with dialectOnly meta

* fix: throw error

* fix: restore

* fix: import backup file created in postgres into mysql

* fix: repeated items in inherits

* chore: upgrade after restore

* feat: check database env before restore

* feat: handle autoincr val in postgres

* chore: sqlite & mysql queryInterface

* chore: test

* fix: test

* chore: test

* fix: build

* fix: pg test

* fix: restore with date field

* chore: theme-config collection

* chore: chage import collections method to support collection origin

* chore: fallback get autoincr value in mysql

* fix: dataType normalize

* chore: delay restore

* chore: test

* fix: build

* feat: collectin onDump

* feat: collection onDump interface

* chore: dump with view collection

* chore: sync in restore

* refactor: locale improve

* refactor: code improve

* fix: test

* fix: data sync

* chore: rename backup & restore plugin

* chore: skip test

* style: style improve

* style: style improve

* style: style improve

* style: style improve

* chore: import version check

* chore: backup file dir

* chore: build

* fix: bugs

* fix: error

* fix: pageSize

* fix: import origin

* fix: improve code

* fix: remove namespace

* chore: dump rules config

* fix: dump custom collection

* chore: version

* fix: test

* fix: test

* fix: test

* fix: test

* chore: test

* fix: load custom collection

* fix: client

* fix: translation

* chore: code

* fix: bug

* fix:  support shared option

* fix: roles collection dumpRules

* chore: test

* fix: define collections

* chore: collection group

* fix: translation

* fix: translation

* fix: restore options

* chore: restore command

* refactor: optimize the command line

* chore: dump error

* fix: test error

* fix:  test error

* fix: test error

* fix: test error

* fix: test error

* fix: skip cli test cases

* fix: test error

* fix: too many open files

* fix: update migration version

* fix: migrations

* fix: upgrade

* fix: error

* fix: migration error

* fix: upgrade

* fix: test error

* fix: timeout

* fix: width

* feat: auto load collections

* fix: test error

* fix: test error

* fix: test error

* fix: test error

* fix: test error

* fix: test error

* fix: test error

* fix: ipc error

* fix: test error

---------

Co-authored-by: Chareice <chareice@live.com>
Co-authored-by: katherinehhh <katherine_15995@163.com>
2024-01-08 19:05:14 +08:00
ChengLei Shao
fa97d0a642
feat: application backup and restore (#3268)
* fix: perform load action on boot main app

* feat: add dataType option in collection duplicator

* chore: reset optional dumpable config

* chore: dump command

* chore: dump & restore command

* chore: delay restore

* fix: dump test

* chore: restore command

* chore: dump command action

* chore: dumpable collection api

* chore: client collection option

* feat: backup& restore client

* chore: content disposition header in dump response

* chore: download backup field

* feat: collection origin option

* fix: test

* chore: collection manager collection origin

* chore: upload  backup field

* chore: upload restore file

* chore: upload restore file

* fix: test

* chore: backup and restore support learn more

* refactor: upload restore file

* refactor: upload restore file

* fix: test

* fix: test

* chore: dumpable collection with title

* chore: pg only test

* chore: test

* fix: test

* chore: test sleep

* style: locale improve

* refactor: download backup file

* refactor: start restore

* fix: restore key name

* refactor: start restore

* refactor: start restore

* refactor: start restore

* refactor: start restore

* refactor: start restore

* refactor: start restore

* chore: unify duplicator option

* fix: dump empty collection

* chore: test

* chore: test

* style: style improve

* refactor: locale improve

* chore: dumpalbe collection orders

* style: style improve

* style: style improve

* style: icon adjust

* chore: nginx body size

* chore: get file status

* feat: run dump task

* feat: download api

* chore: backup files resourcer

* feat: restore destroy api

* chore: backup files resoucer

* feat: list backup files action

* chore: get collection meta from dumped file

* fix: dump file name

* fix: test

* chore: backup and restore ui

* chore: swagger api for backup & restore

* chore: api doc

* chore: api doc

* chore: api doc

* chore: backup and restore ui

* chore: backup and restore ui

* chore: backup and restore ui

* chore: backup and restore ui

* chore: backup and restore ui

* fix: restore values

* style: style improve

* fix: download field respontype

* fix: restore form local file

* refactor: local improve

* refactor: delete backup file

* fix: in progress status

* refactor: locale improve

* refactor: locale improve

* refactor: style improve

* refactor: style improve

* refactor: style improve

* test: dump collection table attribute

* chore: dump collection with table attributes

* chore: test

* chore: create new table in restore

* fix: import error

* chore: restore table from backup file

* chore: sync collection after restore collections

* fix: restore json data

* style: style improve

* chore: restore with fields

* chore: test

* fix: test

* fix: test with underscored

* style: style improve

* fix: lock file state

* chore: add test file

* refactor: backup & restore plugin

* fix: mysql test

* chore: skip import view collection

* chore: restore collection with inherits topo order

* fix: import

* style: style improve

* fix: restore sequence fields

* fix: themeConfig collection duplicator option

* fix: restore with dialectOnly meta

* fix: throw error

* fix: restore

* fix: import backup file created in postgres into mysql

* fix: repeated items in inherits

* chore: upgrade after restore

* feat: check database env before restore

* feat: handle autoincr val in postgres

* chore: sqlite & mysql queryInterface

* chore: test

* fix: test

* chore: test

* fix: build

* fix: pg test

* fix: restore with date field

* chore: theme-config collection

* chore: chage import collections method to support collection origin

* chore: fallback get autoincr value in mysql

* fix: dataType normalize

* chore: delay restore

* chore: test

* fix: build

* feat: collectin onDump

* feat: collection onDump interface

* chore: dump with view collection

* chore: sync in restore

* refactor: locale improve

* refactor: code improve

* fix: test

* fix: data sync

* chore: rename backup & restore plugin

* chore: skip test

* style: style improve

* style: style improve

* style: style improve

* style: style improve

* chore: import version check

* chore: backup file dir

* chore: build

* fix: bugs

* fix: error

* fix: pageSize

* fix: import origin

* fix: improve code

* fix: remove namespace

* chore: dump rules config

* fix: dump custom collection

* chore: version

* fix: test

* fix: test

* fix: test

* fix: test

* chore: test

* fix: load custom collection

* fix: client

* fix: translation

* chore: code

* fix: bug

* fix:  support shared option

* fix: roles collection dumpRules

* chore: test

* fix: define collections

* chore: collection group

* fix: translation

* fix: translation

* fix: restore options

* chore: restore command

* chore: dump error

* fix: too many open files

---------

Co-authored-by: katherinehhh <katherine_15995@163.com>
Co-authored-by: chenos <chenlinxh@gmail.com>
2024-01-08 18:59:56 +08:00
hongboji
56b1234c1c
fix: workflow e2e concurrency errors (#3345)
* fix: workflow e2e concurrency errors

* fix: edit Collection event name
2024-01-08 14:05:35 +08:00
hongboji
3c87755e6c
test: workflow aggregate node e2e (#3342) 2024-01-07 19:52:01 +08:00
hongboji
908944ce62
test: workflow sql node e2e (#3341) 2024-01-07 17:09:32 +08:00
Zeke Zhang
d85aaa36e3
fix(z-index): avoid obscuring the pop-up and upgrade antd to v5.12.8 (#3337)
* fix(z-index): avoid obscuring the pop-up

* test: optimize

* chore: fix build

* test: fix errors
2024-01-06 18:32:25 +08:00
Junyi
05078faf1a
refactor(plugin-workflow): add trigger title for workflow which is different with title (#3333) 2024-01-06 11:17:28 +08:00
Zeke Zhang
2ab9f8625e
chore(e2e): make parallelism mode more stable (#3294)
* chore: make parallelism mode more stable

* refactor: optimize e2e tests

* test: make test more stable

* chore: change concurrency to 4 from 2

* refactor: inline variable

* test: fix error

* test: avoid error

* test: avoid error

* test: avoid error

* chore(e2e): remove --stop-on-error on CI runs

* Revert "refactor: inline variable"

This reverts commit 454bb04613f6f394f2f27db6808295261487c963.

* test: make more stable

* chore: adjust timeout

* chore: update config

* test: make test more stable

* chore: update yarn.lock

* Revert "chore: update yarn.lock"

This reverts commit 1bb7a661d181050e647450d5d8b2cfd67bd128b1.

* test(workflow): increase local timeout

* test: optimize

* test: more stable

* test: fix errors

* test: more stable

* chore: increase retries to 2 in CI
2024-01-06 06:37:23 +08:00
Junyi
b9398d1cd4
fix(plugin-workflow-manual): adjust locale and column (#3331) 2024-01-05 21:48:21 +08:00
YANG QIA
33c690b877
fix: fix T-2879 (#3330) 2024-01-05 20:12:30 +08:00
katherinehhh
c102655317
refactor: gantt tooltip hover (#3328) 2024-01-05 14:30:45 +08:00
YANG QIA
f803105e69
perf(bi): optimize performance of chart filter block (#3316)
* perf: add useMemo

* fix: bug

* fix: bug

* chore: remove memo
2024-01-04 19:21:54 +08:00
Junyi
0b1eb36152
refactor(client): adjust list item style and fix warning (#3315)
* refactor(client): adjust list item style and fix warning

* refactor(client): adjust list item padding

* refactor(client): adjust list style
2024-01-04 14:45:14 +08:00
Zeke Zhang
ba67b7aede
fix: z-index of antd (#3313)
* chore: auto update yarn.lock

* fix: z-index of antd

* test: add test

* test: add tests
2024-01-04 11:34:34 +08:00
jack zhang
4c42dd8a13
fix: in the dev environment, all plugins are loaded locally (#3309)
* fix: cna plugin load

* fix: support storage

* fix: storage plugins

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2024-01-03 17:31:58 +08:00
Junyi
c4c7b7a6b6
fix(plugin-workflow): adjust locale (#3308) 2024-01-03 11:15:18 +08:00
xilesun
004998a80a chore(versions): 😊 publish v0.18.0-alpha.9 2024-01-03 10:00:45 +08:00
Junyi
cebd8efd2e
chore(plugin-workflow): add metric example (#3305)
* chore(plugin-workflow): add metric example

* refactor(plugin-workflow): refactor some code

* refactor(plugin-workflow): remove type for less dependencies
2024-01-03 09:59:33 +08:00
Junyi
64e0659f7b
feat(plugin-workflow-request): allow to use variable in url (#3304) 2024-01-02 21:35:09 +08:00
chenos
5de28cd4c4 fix(ui-schema-storage): duplicate of empty schema 2024-01-02 14:44:54 +08:00
Zeke Zhang
e99c2f2011
fix(defaultValue): fix unparsed default value in edit form's subtable (#3289)
* chore: yarn.lock

* fix: fix unparsed default value in edit form's subtable

* test: fix test

* fix: fix T-2805

* chore: increase timeout

* chore: increase expect timeout

* test: optimize parallelism mode

* test: reduce expect timeout

* test: mack test more stable

* chore: test

* chore: test

* test: fix parallelism mode

* chore: restart
2024-01-01 18:44:42 +08:00
chenos
8bac8dac71 chore(versions): 😊 publish v0.18.0-alpha.8 2023-12-29 15:49:02 +08:00
chenos
6816aded87 fix: add LICENSE 2023-12-29 13:11:56 +08:00
Zeke Zhang
c6915c69f8
fix: use appends param to load association data (#3282)
* fix: use appends param to load association data

* chore: update yarn.lock

* test: add test

* test: remove the 'BUG:' text

* test: fix 'window is not defined'

* test: increase timeout
2023-12-29 11:34:27 +08:00
chenos
501e3f1db2 chore(versions): 😊 publish v0.18.0-alpha.3 2023-12-29 09:42:06 +08:00
Junyi
7f0d699590
refactor(plugin-workflow): adjust some api and packages (#3281)
* fix(plugin-workflow): fix locale and some api

* fix(plugin-workflow-test): fix test package

* fix(plugin-workflow): fix package and types

* test(plugin-workflow): test package
2023-12-29 09:29:37 +08:00
katherinehhh
c9d5292d03
test(e2e): acl e2e test (#3249)
* test: acl test

* test: acl action test

* test: acl test

* test: acl test

* test: acl collection block test

* test: acl e2e test

* test: acl e2e test

* test: acl test

* test: acl collection test

* test: acl collectin test

* test: acl association test

* test: association acl test

* test: collection acl test

* test: collection acl test

* test: acl test

* test: acl updateRole test

* test: menu permission test

* test: menu permission test

* test: menu permission test

* test: menu permission test

* test: acl test

* test: acl test

* test: acl test

* test: acl test

* test: acl test

* test: menu acl test

* test: acl test

* refactor: setDefaultRole

* fix: merge bug

* fix: merge bug

* test: acl test
2023-12-29 09:15:57 +08:00
Zeke Zhang
4121075a98
test(e2e): add tests for collection manager (#3253)
* refactor: optimize file structure

* test: add tests for collection templates

* test: fix errors

* fix: fix errors

* test: schemaInitializer of fields

* fix: test erros

* fix: test error

* test: make tests more stable

* test: fix tree template
2023-12-29 09:14:47 +08:00
hongboji
e7c2c9ff83
test: workflow e2e (#3261)
* test: workflow e2e

* test: workflow e2e

* fix: merge main, fix incompatibility

* test: remove unneeded test cases

* fix: process.env.PLAYWRIGHT_AUTH_FILE

* fix: workflow e2e

* test: increase e2e timeout-minutes to 180

* fix: error

* fix: workflow aggregate e2e test

* fix: cancel useTransaction

* fix: updateRecord

* fix: queryRecord

* fix: queryRecord

* fix: queryRecord

* fix: formEvent

* fix: format files

* fix: test

* fix: error

* fix: error

* fix: split files

* fix: ci

* fix: error

* fix: error

* fix: client end

* fix: test

* fix: test

* feat: concurrency=10

* fix: concurrency=3

* test: increase timeout

* test: p-test

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: Zeke Zhang <958414905@qq.com>
2023-12-29 09:13:00 +08:00
YANG QIA
8633ec3735
refactor(logger): improve logger format (#2664)
* refactor(logger): improve logger format

* chore: improve log format

* feat(logger): plugin-logger

* feat: allow to download log files, close T-1917

* chore: update yarn.lock

* chore: improve log format

* fix: add maxsize params

* chore: add userId field to request

* chore: remove userId from request

* chore: change userId in response

* chore: change action in response

* chore: add database logger

* fix: build

* fix: test

* chore: solve conflicts

* fix: escape delimiter in message

* refactor: improve create logger api

* chore: update app logger options

* chore: remove colorize for json

* fix: bug of data2tree

* fix: test

* chore: log

* chore: remove GITHUB_ACTION check

* fix: bug

* chore: change version

* fix: transports

* fix: mockServer

* chore: use new plugin settings api

* fix: version

* fix: build

* feat: support logfmt

* fix: build

* fix: build

* fix: test

* chore: update config

* fix: test

* fix: bug

* fix: test

* fix: format

* chore: update path

* fix: build

* fix: bug

* chore: update comment

* fix: allow to custom format

* fix: package.json

* fix: version

* fix: bug
2023-12-27 13:56:13 +08:00
Junyi
8ee8ab7d6d
refactor(plugin-workflow): refactor apis (#3267)
* refactor(plugin-workflow): refactor apis

* fix(plugin-workflow-parallel): fix import in test cases

* fix(plugin-workflow): fix some module import source

* fix(plugin-workflow): move manual table acl to manual plugin

* fix(plugin-workflow-manual): fix folder typo
2023-12-27 13:55:48 +08:00
Junyi
b68fde9d47
fix(plugin-workflow): defend unimplemented trigger type (#3263) 2023-12-25 23:59:45 +08:00
chenos
e8f481ae68 chore(versions): 😊 publish v0.18.0-alpha.2 2023-12-25 22:26:05 +08:00
Junyi
f17e10caa4
fix(plugin-workflow): queueing execution of disabled workflow block dispatching (#3256)
* fix(plugin-workflow): queueing execution of disabled workflow block dispatching

* fix(plugin-workflow): fix typo
2023-12-25 17:44:07 +08:00
Junyi
0330e33704
feat(plugin-workflow): add space control to RadioWithTooltip (#3252) 2023-12-24 17:14:38 +08:00
Dunqing
e112a644ea
feat(plugin-calendar): add calendar plugin (#3109)
* feat: init calendar plugin

* feat: move files to plugin

* feat: handle CalendarBlockInitializer in plugin

* feat: add todo

* feat: move collection template to plugin and fix i18n

* chore: update deps

* feat: export genStyleHook

* feat: handle i18n

* chore: remove react-i18next

* docs: update info

* test: move e2e test

* test: move to client

* chore: update version

* fix: merge revert

* fix: merge revert

* fix: missing SchemaSettings.xxx

* test: fix e2e failed

* test: update

* test: fix case failed

* fix: data blocks

* fix: remove provider

* fix: missing CalendarV2

* fix: missing CalendarActionInitializers

* fix: version

* fix: error

* fix: calender block form action should support print

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: katherinehhh <katherine_15995@163.com>
2023-12-23 15:16:41 +08:00
Junyi
3b5240cc0a
fix(plugin-workflow-dynamic-calculation): fix missed component (#3247) 2023-12-22 15:01:11 +08:00
chenos
5e89a02044 fix(test): migration error 2023-12-21 21:03:03 +08:00
chenos
95e6a32647 chore(versions): 😊 publish v0.18.0-alpha.1 2023-12-21 20:40:32 +08:00
ChengLei Shao
261d4c4137
refactor: establish a sound testing system (#3179)
* chore: use vitest to replace jest

* chore: support vitest

* feat: vitest 1.0

* fix: test

* chore: yarn.lock

* chore: github actions

* fix: test

* fix: test

* fix: test

* fix: test

* fix: jest.fn

* fix: require

* fix: test

* fix: build

* fix: test

* fix: test

* fix: test

* fix: test

* fix: test

* fix: test

* fix: test

* fix: dynamic import

* fix: bug

* chore: yarn run test command

* chore: package.json

* chore: package.json

* chore: vite 5

* fix: fix variable test

* fix: import json

* feat: initEnv

* fix: env.APP_ENV_PATH

* chore: get package json

* fix: remove GlobalThmeProvider

* chore: update snap

* chore: test env

* chore: test env

* chore: import module

* chore: jest

* fix: load package json

* chore: test

* fix: bug

* chore: test

* chore: test

* chore: test

* chore: test

* chore: test

* fix: import file in windows

* chore: import module with absolute file path

* fix: test error

* test: update snapshot

* chore: update yarn.lock

* fix: front-end tests do not include utils folder

* refactor: use vitest-dom

* fix: fix build

* fix: test error

* fix: change to vitest.config.mts

* fix: types error

* fix: types error

* fix: types error

* fix: error

* fix: test

* chore: test

* fix: test package

* feat: update dependencies

* refactor: test

* fix: error

* fix: error

* fix: __dirname is not defined in ES module scope

* fix: allow only

* fix: error

* fix: error

* fix: error

* fix: create-app

* fix: install-deps

* feat: update docs

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: dream2023 <1098626505@qq.com>
Co-authored-by: Zeke Zhang <958414905@qq.com>
2023-12-21 20:39:11 +08:00
YANG QIA
06f11a2d08
refactor(auth): move auth client from core to the plugin & refactor auth client api (#3215)
* refactor(auth): auth client api

* fix: build

* fix: dependencies

* fix: fix T-2777

* fix: fix T-2776

* chore: update type

* fix: build

* fix: allowSignUp

* fix: file name

* fix: file name

* refactor: client api

* fix: build

* chore: update name

* fix: tsx must be loaded with --import instead of --loader

* fix: type

* fix: type

* fix: type

* fix: type

* fix: bug

* chore: improve wording

* fix: test

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-12-21 20:19:25 +08:00
Junyi
978c4c5f61
refactor(plugin-audit-log): remove useless function wrap (#3237) 2023-12-20 23:18:02 +08:00
Zeke Zhang
e7b9737920
perf: remove lazy load association fields (#3222)
* perf: remove lazy load association fields

* test: fix error

* chore: fix workflows

* test: fix error

* test: fix errors
2023-12-20 13:56:24 +08:00
Junyi
2f892f00d7
refactor(plugin-workflow): add logs and try/catch for preparing (#3236) 2023-12-20 10:13:08 +08:00
ChengLei Shao
2289bb7418
chore: remove field from db (#3233)
* chore: remove field from db

* fix: test

* chore: test
2023-12-19 20:49:34 +08:00
katherinehhh
2808440426
fix(kanban): kanban data on a page should be isolated (#3232)
* fix: kanban block data on a page influences each other

* test: kanban test
2023-12-19 15:27:00 +08:00
ChengLei Shao
f60c7626e0
fix: update assocations in belongs to many repository (#3229) 2023-12-19 10:07:25 +08:00
katherinehhh
5a55987033
fix(graph-collection-manager): application context missing (#3224)
* fix: appicationContext

* fix: appicationContext

* fix: update position
2023-12-18 20:19:36 +08:00
Zeke Zhang
6bd0568d08
chore: upgrade antd to v5.12.2 (#3185)
* chore: upgrade antd to v5.12.2

* refactor: rename to StablePopover

* fix: fix tests

* test: fix e2e

* chore(CI): optimize E2E workflow

* chore: fix playwright

* fix: re-generate yarn.lock to fix e2e errors

* test: update locator

* fix: fix build errors

* fix: fix unit tests

* fix: fix e2e tests

* fix: should not auto close when clicking menu item

* fix: fix column width

* test: increase e2e timeout-minutes to 90

* test: fix e2e

* fix: update dockerfile

* fix: npmignore

* fix: app component false

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-12-18 15:21:57 +08:00
Dunqing
1cbdfa4f60
feat(mobile-client): update the text of the preview button (#3189) 2023-12-17 11:17:18 +08:00