Commit Graph

477 Commits

Author SHA1 Message Date
Junyi
7036879ea6
refactor(client): change Variable.TextArea to controlled component (#1605)
* refactor(client): change Variable.TextArea to controlled component

* fix(client): fix space and range index

* fix(client): fix ime state in Variable.TextArea

* chore(ci): trigger ci

* fix(client): fix expression validation

* fix(plugin-workflow): fix test case

* fix(client): fix caret when not focused

* fix(client): add html-sanitize

* fix(client): fix range errors on any input

* fix(client): fix start and end range
2023-04-03 08:57:19 +08:00
ChengLei Shao
86abc251d9
fix: get pg view def (#1641)
* fix: get pg view def

* chore: console.log
2023-04-02 22:50:55 +08:00
ChengLei Shao
bec624eb54
fix: infer view column type with alias (#1634)
* fix: infer view column type with alias

* fix: build

* fix: type

* fix: test
2023-04-02 14:32:20 +08:00
Junyi
822099271a
fix(plugin-workflow): fix minors ui issues (#1635)
* fix(plugin-workflow): fix minors ui issues

* fix(plugin-workflow): add refresh after title changed back

* fix(plugin-workflow): fix collection fields variable
2023-04-02 13:24:25 +08:00
ChengLei Shao
3f81d7cd7d
chore: disabled underscored in view collection. (#1633)
* chore: disabled underscored in view collection

* fix: test
2023-04-02 11:27:04 +08:00
ChengLei Shao
4f87de7da5
feat: database view collection (#1587)
* test: create view collection

* feat: view collection class

* feat: list view

* chore: skip sync view collection

* test: should create view collection in difference schema

* test: create view collection in collection manager

* feat: create view collection by user sql

* test: view resourcer

* feat: view collection

* feat: view collection cannot be added, deleted, or modified

* feat: view collection cannot be added, deleted, or modified

* feat: view collection cannot be added, deleted, or modified

* feat: view collection cannot be added, deleted, or modified

* refactor: connect to database view

* refactor: sync from database

* chore: rename list view sql

* chore: list view fields api

* chore: create collection without viewName

* feat: bring out fields when selecting a view

* chore: bring out fields when selecting a view

* feat: view field inference class

* chore: bring out fields when selecting a view

* chore: sync form database view

* chore: sync form database view

* refactor: view collection local

* feat: view get api

* feat: database type infer

* feat: integer map

* chore: remove from in view list

* chore: build error

* chore: uniq collection

* fix: typo

* chore: replace collection list source field

* fix: destroy view collection

* chore: timestamp field map

* refactor: interface avalableTypes

* refactor: interface avalableTypes

* chore: list fields test

* refactor: interface avalableTypes

* chore: uiSchema response in field source

* fix: view query

* chore: collection snippet

* refactor: view collection support preview

* fix: handle field source

* fix: typo

* fix: configure fileds title

* fix: configure fileds title

* fix: configure fileds title

* fix: sync from databse interface

* fix: sync from databse interface

* feat: set fields api

* fix: sync from databse fix

* feat: possibleTypes

* chore: fields get

* fix: sync from databse

* fix: list view test

* fix: view test in difference schema

* chore: comment

* feat: when there is only one source  collection, the view is a subset of a Collection

* feat: view collection add field

* fix: inherit query with schema

* fix: test

* fix: ci test

* fix: test with schema

* chore: set pg default search path

* chore: mysql test

* fix: test with schema

* chore: test

* chore: action test

* chore: view column usage return type

* feat: mysql field inference

* fix: tableName

* chore: node sql parser

* fix: sql build

* fix: database build

* fix: mysql test

* feat: view collection uiSchema title

* fix: incorrect field source display  when switching views

* refactor: view collection not allow modify

* fix: view collection is allow add, delete, and modify

* fix: mysql test

* fix: sqlite test

* fix: sqlite test

* fix: sqlite test

* fix: sqlite test

* chore: add id field as default target key

* style: style improve

* feat: load source field options

* style: style improve

* chore: disable remove column in view collection

* chore: support creating view collection with different schemas with the same name

* chore: support creating view collection with different schemas with the same name

* fix: query view in difference schema

* refactor: view collection viewname

* fix: query view collection in difference schema

* fix: field load

* chore: field options

* fix: mysql test

* fix: uiSchema component error when using a view field in a block

* fix: sqlite test

* chore: test

* fix: dump user views

* fix: view collection can be updated and edited in table block

* chore: sync from database display last field configuration

* chore: loadCollections

* chore: sync from database display last field configuration

* fix: field options merge issues

* style: preview table

* fix: view collection is allow using in kanban blocks

* refactor: code improve

* fix: view collection can be updated an edited in calendar block

* chore: disable infer field without interface

* feat: preview only shows source or interface fields

* fix: test

* refactor: locale

* feat: sql parser

* chore: remove node-sql-parser

* fix: yarn.lock

* test: view repository

* fix: view repository test

* chore: console.log

* chore: console.log

* fix: mysql without schema

* fix: mysql without schema

* chore: preview with field schema

* chore: tableActionInitializers

* style: preview style improve

* chore:  parameter is filter when there is no filterByTk

* fix: preview pagination

* fix: preview pagination

* style: preview table style improve

* fix: sync from database loading

* chore: preview performance optimization

* chore: preview performance optimization

* feat: limit & offset

* chore: preview performance optimization

* test: field with dot column

* fix: datetime interface display

* fix: missing boolean type

* fix: sync

* fix: sync from database

* style: style improve

* style: style improve

* style: style improve

* chore: preview table

* chore: preview table

* chore: preview table

* fix: styling

---------

Co-authored-by: katherinehhh <katherine_15995@163.com>
Co-authored-by: chenos <chenlinxh@gmail.com>
2023-04-01 21:56:01 +08:00
被雨水过滤的空气-Rairn
098140d511
feat(parse-variables): support to parse variables in filter params (#1558)
* fix: add field linkage on setting default datetime

* fix: fix dateonly timezone problem

* fix: improve test

* docs(DatePicker): add demos

* fix(DatePicker): should return the beginning of a second

* feat(DatePicker): support non-UTC

* refactor: rename

* fix(RangePicker): get correct end date

* test(mapDatePicker): add test

* test(mapRangePicker): add test

* feat(Filter): use non-UTC to filter

* feat(FilterBlock): use non-UTC to filter

* feat: add '$dateBetween' operator in datetime

* feat: use RangePicker on toggled to 'dateBetween' operator

* feat: set ranges for RangePicker

* feat: backend support to parse 'dateBetween' operator

* fix: fix build error

* fix: adaptive content width

* feat: support to use var on data scope

* feat: add parse-variables plugin

* feat: support to parse variables

* feat: support only to set system variables

* test: rename

* feat: cover all

* fix: fix build error

* feat(RangePicker): extend more shortcut keys

* feat(parse-variables): support more date var

* feat: support user variables

* feat: disable unmatched options

* fix: use component name to filter option

* fix: fix build error

* feat: remove some operator of id

* chore: remove useless operators

* fix: built in plugin

* refactor: move to core from plugin

* refactor: remove code of plugin

* refactor: remove useless code

* fix: should after acl

* Update server.ts

* fix: compatible with old version

* feat: test cases

* refactor: rename to 'is between'

* refactor: parse filter

* fix: improve code

* feat: test cases

* fix: fix error

* fix: improve parse date

* fix: date variables

* fix: day range

* fix: test error

* fix: typo

* fix: test error

* feat: $user variable

* fix: toDate

* fix: fix the value range of shortcuts

* feat: add quarter and test

* feat: support to use user's association fields to filter

* refactor: use maxDepth

* refactor: remove useless code

* fix: make AssociationSelect.Designer to support variables

* fix: getField

* fix: parse utc

* fix: remove only

* fix: filter by ctx.db.getFieldByPath

* fix: avoid error

* fix: add translation

* fix(RangePicker): can be set to empty

* feat(utils): add hasEmptyValue

* fix: should not save empty

* fix: last few days should include today

* fix: limit user variable type to display

* fix: parse filter error

* fix: empty

* test: [skip ci]

* fix: remove ';'

* feat: improve code

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-03-30 23:49:57 +08:00
Dunqing
6b47597256
fix: when the page has FixedBlock, the table of popup is not displayed (#1619)
* fix: when the page has FixedBlock, the table of popup is not displayed

* feat: improve disable link

* docs: update

* feat: improve fixedblock design item
2023-03-30 12:33:57 +08:00
Junyi
c572b696cc
fix(plugin-workflow): fix todo list form read-pretty for non-assigneed user (#1615)
Fix #1572.
2023-03-29 18:16:46 +08:00
Dunqing
6747331529
refactor: improve FixedBlock performance (#1593)
* refactor:  improve FixedBlock performance

* fix: style

* fix: fixedBlock not work when the page have many blocks

* refactor: improve performance
2023-03-29 17:11:20 +08:00
Dunqing
92d0eab0cc
fix(audit-logs): Add ellipsis feature to table columns (#1603)
* fix: text is so long

* feat: don't need rowSelection
2023-03-29 16:54:59 +08:00
katherinehhh
22498d8fc6
fix( importable-field): incorrect display when moving sort handle (#1613)
* fix: importable-field incorrect display when moving sort

* fix: cascader

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-03-29 00:12:39 +08:00
chenos
64b1ee28fd fix(plugin-export): sheet name cannot contain : \ / ? * [ ] 2023-03-28 23:56:04 +08:00
ChengLei Shao
e566d56c2d
fix: destroy through table record referencing collections table (#1611)
* test: destory through table record referencing collections table

* fix: belongs to many fields to reference
2023-03-28 12:26:30 +08:00
chenos
708675deb9 fix(plugin-import): sheet name cannot contain : \ / ? * [ ] 2023-03-28 10:33:36 +08:00
Junyi
435eaee262
fix(plugin-workflow): add default actions value of manual node (#1600) 2023-03-25 17:48:01 +08:00
Junyi
d8e8f5ec45
feat(plugin-workflow): add failOnEmpty option for query node (#1599) 2023-03-24 23:15:03 -07:00
Junyi
cc50b38a12
fix(plugin-workflow): use toJSON instead of get to get valid result (#1596) 2023-03-24 23:54:07 +08:00
Italo A. G
726b08e87a
Translation pt-BR (Brazilian Portuguese) (#1591)
* feat: portuguese brazil translations

* feat: add pt-BR languate to the plugins

* feat: add pt-BR languate to the plugins
2023-03-23 22:53:33 +08:00
katherinehhh
0a25426f31
fix: repeat request categories when switching between graph interface and collection&fields (#1590) 2023-03-23 12:18:52 +08:00
chenos
50183b065d fix(file-manager): upgrade s3 version 2023-03-21 15:01:02 +08:00
Junyi
c3b89c9abf
fix(plugin-workflow): fix input width in request node config (#1585) 2023-03-21 13:04:37 +08:00
被雨水过滤的空气-Rairn
070c9c21ec
feat(filter-blocks): support filter-blocks (#1505)
* refactor: audit log (#1516)

* refactor: audit-log

* refactor: audit-log fix view action

* refactor: audit-log view fix

* refactor(audit-log): collection field fix

* refactor: audit-log view field fix

* refactor(audit-log): support fixedBlock

* refactor(audit-log): i18n fix

* feat(filter-blocks): support form-block

* feat(filter-blocks): add FilterProvider

* feat: filter data blocks

* perf: use useMemo

* refactor: rename

* feat: collect filter params

* refactor: rename

* refactor: remove useless code

* feat: add 'Connect data blocks' option

* feat: support 'x-filter-targets' to save data-blocks

* refactor: extract Form.FilterFormDesigner

* feat: extract FormItem.FilterFormDesigner

* refactor: extract common editing options

* feat: support to set operator

* feat: use operator created by user

* fix: improve loading

* fix: merge prev params

* feat: support reset

* refactor: rename

* chore: left a TODO

* feat: add Table.FilterDesigner

* feat: support filter-table

* refactor: reduce code

* feat: handle click event of table row

* feat: support to connect association collection

* feat: support Collapse

* feat: show empty

* refactor: optimize readability

* fix: keep state as latest

* fix: highlight row on selected

* feat: highlight data block on hover

* fix: avoid misuse

* chore: reduce code

* fix(Table): support to cancel select

* fix(Collapse): merge multiple filter params

* chore: make to pass CI

* feat: merge all filter params

* refactor: remove useless code

* fix: undefined

* fix(Form): fix bug with association fields

* chore: fix typo

* fix: use title

* chore: avoid infinite loops

* test: cancel comments

* fix: make ci normal

* fix: filter down non-association fields

* fix: fix page crash

* fix: use correct operator

* fix: avoid infinte loops

* style: optimize style on hover

* fix: avoid crash

* chore: optimize empty description

* fix: avoid targetKey empty

* refactor: use getTargetKey instead

* fix: filter out unfilterable fields

* refactor: avoid to invoke hook multiple times

* refactor: reduce the judgment conditions of component

* fix: group fields in the right way

* fix: fix error of type

* fix: fix error on no FilterBlockProvider

* fix(Table): fix fexed-block bug

* chore: reduce gap

* fix(Form): use AssociationSelect by default

* fix: remove g2plot blocks

* fix(Form): remove 'Display association fields'

* fix(Table): use radio

* fix(Table): no need Actions

* fix: fix template problem

* fix(Table): keep only 'filter' and 'refresh'

* fix: use collection name as identifier for data blocks

* fix: make sure all fields are editable

* fix(Form): remove custom actions

* fix(Details): display empty component on no data

* feat(Form): support association fields

* refactor: rename

* feat(Form): support for deep-level association fields

* Revert "fix(Table): keep only 'filter' and 'refresh'"

This reverts commit 61a1d101a7d15223cfd3523adb33567fff545568.

* Revert "fix(Table): no need Actions"

This reverts commit 8314629e92fb3b5b7ec1c97904a42c76c43e4d4a.

* Revert "fix(Table): use radio"

This reverts commit c6f009740e1835f9762653a721ff64f52d0994cf.

* feat(Table): highlight row on selected

* feat: support to cacel highlight

* fix: type error

* feat: remove Table from filter list

* fix(Table): highlight rows problem

* refactor: remove usless code

* refactor(Collapse): detach from Table

* fix(Table): highlighting row problem

* fix: translate problem

* fix(Collapse): fix error of useProps

* fix(Table): avoid undefined

* Update Details.tsx

* Update DetailsBlockProvider.tsx

* refactor: rename target.name to target.uid

* fix: add translate

* style: add padding

---------

Co-authored-by: anuoua <anuoua@gmail.com>
Co-authored-by: chenos <chenlinxh@gmail.com>
2023-03-20 17:40:16 +08:00
chenos
ef47cac5e6 feat(duplicator): tableName and schema 2023-03-20 15:40:22 +08:00
ChengLei Shao
ca95edf295
refactor: multi-app (#1578)
* feat: compact theme

* fix: theme

* fix: styling

* fix: margin

* feat: improve

* fix: remove console.log

* test: enable plugin test

* refactor: multi app

* test: lazy load sync plugin

* test: lazy load test

* fix: beforeGetApplication Event

* feat: loadFromDatabase options in traverseSubApps

* fix: test

* fix: multi app manager test

* chore: test

* test: should upgrade sub apps when main app upgrade

* feat: plugin require check

* chore: yarn.lock

* fix: sql typo

* feat: share collections

* fix: record name

* test: belongs to many repository

* fix: belongs to many with targetKey alias

* fix: extend collection error

* fix: transaction error

* feat: collection graph

* fix: update options in collection

* chore: collections graph

* chore: export uitls

* feat: connected nodes method in collections graph

* feat: exclude params in connected nodes

* chore: sub app collection list params

* fix: collections graph

* feat: syncToApps migration

* fix:  translation

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-03-19 23:40:42 +08:00
chenos
4427c70087
feat: compact theme (#1574)
* feat: compact theme

* fix: theme

* fix: styling

* fix: margin

* feat: improve

* fix: remove console.log
2023-03-19 23:40:11 +08:00
Dunqing
3cce8f75e5
feat: support cron field (#1421)
* feat(calendar): replace cron component with CronSet

* fix: same exported

* fix: type incorrect

* fix: locale

* feat: upgrade react-js-cron and update some text

* fix: cron path

* fix: edge case

* feat: support FixedBlock
2023-03-19 10:55:05 +08:00
chenos
bf50615060 fix: tree collection can be sync to sub-apps 2023-03-17 14:19:28 +08:00
Dunqing
471b319b86
fix(plugin-map): map block repeats (#1582)
* fix: map block repeats

* feat: update logic
2023-03-17 11:04:29 +08:00
chenos
a9e5e14429
feat: tree collection (#1561)
* feat: adjacency list

* fix: error

* feat: collection extender

* Revert "feat: collection extender"

This reverts commit a942eee769.

* fix: registerBuiltInListeners

* chore: getAllNodeIds

# Conflicts:
#	packages/plugins/acl/src/server.ts

* fix: get list data tree ids

# Conflicts:
#	packages/plugins/acl/src/__tests__/list-action.test.ts

* feat: suport add child

* feat: demo3

* feat: suport add child

* feat: support add child

* feat: support add child

* fix: tree true

* feat: suport expend and collapse

* feat: support expend and collapse

* feat: support expend and collapse

* feat:  table block of the selector supports tree table

* feat: expand and collapse are only displayed in the tree table

* fix: when the tree table is closed and opened, it needs to be refreshed to take effect

* fix: test

* refactor: add child is hidden when the tree table is closed

* refactor: tree table filter the children field

* refactor: tree table filter the children field

* refactor: tree table filter the children field

* refactor: expand and collapse button does not support modify name and icon

* refactor: parent cannot be modified when adding child

* refactor: expand and collapse button hide when treetable is closed

* refactor: expand and collapse button hide when treetable is closed

* refactor: expand and collapse button hide when treetable is closed

* refactor: expand and collapse button hide when treetable is closed

* refactor: expand and collapse button hide when treetable is closed

* refactor: expand and collapse button hide when treetable is closed

* refactor: expand and collapse button hide when treetable is closed

* refactor: expand and collapse button hide when treetable is closed

* refactor: filter out the node itself when selecting parent

* refactor: filter out the node itself when selecting parent

* refactor:  tree collection locale

* refactor:  tree collection locale

* fix: parameter exception when creating data selector

* fix: translation

* refactor:  tree collection locale

* feat: data selector Support tree table

* fix: failed to uncheck when multiple data selectors are selected

* fix: open or disabled the tree table, and add child does not respond immediately

* feat: data selector Support tree table

* fix: can not hide add child button

* fix: improve code

* fix: tree table

* fix: dynamic children column

---------

Co-authored-by: Chareice <chareice@live.com>
Co-authored-by: katherinehhh <katherine_15995@163.com>
2023-03-17 09:20:56 +08:00
Dunqing
46c736d7d3
feat(plugin-map): add map block (#1486)
* feat(plugin-map): add MapBlock

* feat: improve implementation to better support multiple fields

* feat: support click overlay

* fix: the width of select is not 100%

* fix: repeat MapBlock

* fix: loss initializer

* feat: support selected marker in map

* feat: support select point use box

* fix: fixedBlock not work

* fix: template not work

* feat: improve ui

* feat: improve selecting

* feat: update ui

* feat: improve map readpretty

* feat: support marker field
2023-03-16 12:12:14 +08:00
ChengLei Shao
2de165c1eb
chore: lazy load sub app in share collection (#1569) 2023-03-15 23:20:29 +08:00
ChengLei Shao
e86e40b93a
fix: app manager reload (#1565)
* fix: app manager reload

* chore: plugin test order
2023-03-14 13:10:15 +08:00
ChengLei Shao
976b094f96
feat: multi-app-share-collection plugin (#1562)
* feat: multi-app-share-collection plugin

* chore: plugin name

* fix: build

* chore: pg only test

* fix: test

* Update package.json

* Create

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-03-13 20:43:57 +08:00
chenos
907eb72efc fix: column ui_schema_id does not exist 2023-03-12 18:44:45 +08:00
anuoua
7313307210
feat: record picker support to enable links (#1515)
* feat: link-tag-switch

* feat(link-tag-switch): add interface

* feat(link-tag-switch): i18n fix

* feat(link-tag-switch): fix link enable

* feat(link-tag-switch): cr fix

* fix: error

* fix: skip test

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-03-12 17:16:17 +08:00
chenos
cb97c7ae5c fix: migration error 2023-03-12 14:08:43 +08:00
chenos
aece9015aa fix: transaction cannot be rolled back because it has been finished 2023-03-12 13:39:27 +08:00
ChengLei Shao
0832a56868
feat: multiple apps (#1540)
* chore: skip yarn install in pm command

* feat: dump sub app by sub app name

* feat: dump & restore by sub app

* chore: enable application name to edit

* chore: field belongsTo uiSchema

* test: drop schema

* feat: uiSchema migrator

* fix: test

* fix: remove uiSchema

* fix: rerun migration

* chore: migrate fieldsHistory uiSchema

* fix: set uiSchema options

* chore: transaction params

* fix: sql error in mysql

* fix: sql compatibility

* feat: collection group api

* chore: restore & dump action template

* chore: tmp commit

* chore: collectionGroupAction

* feat: dumpableCollection api

* refactor: dump command

* fix: remove uiSchemaUid

* chore: get uiSchemaUid from tmp field

* feat: return dumped file url in dumper.dump

* feat: dump api

* refactor: collection groyoup

* chore: comment

* feat: restore command force option

* feat: dump with collection groups

* refactor: restore command

* feat: restore http api

* fix: test

* fix: test

* fix: restore test

* chore: volta pin

* fix: sub app load collection options

* fix: stop sub app

* feat: add stopped status to application to prevent duplicate application stop

* chore: tmp commit

* test: upgrade

* feat: pass upgrade event to sub app

* fix: app manager client

* fix: remove stopped status

* fix: emit beforeStop event

* feat: support dump & restore subApp through api

* chore: dumpable collections api

* refactor: getTableNameWithSchema

* fix: schema name

* feat:  cname

* refactor: collection 同步实现方式

* refactor: move collection group manager to database

* fix: test

* fix: remove uiSchema

* fix: uiSchema

* fix: remove settings

* chore: plugin enable & disable event

* feat: modal warning

* fix: users_jobs namespace

* fix: rolesUischemas namespace

* fix: am snippet

* feat: beforeSubAppInstall event

* fix: improve NOCOBASE_LOCALE_KEY & NOCOBASE_ROLE_KEY

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-03-10 19:16:00 +08:00
Frozen FIsh
1c2711920a
fix(charts): improve chart table preview with object type (#1555) 2023-03-10 16:41:31 +08:00
Junyi
ea4d4ac062
feat(plugin-workflow) config preload associations in triggers and nodes (#1548)
* feat(plugin-workflow): add preload associations for triggers and nodes

* feat(plugin-workflow): add appends parameter to schedule trigger

* fix(plugin-workflow): fix import

* fix(plugin-workflow): fix component injection

* test(plugin-workflow): add test case
2023-03-10 16:36:58 +08:00
chenos
bc5156d458 chore(versions): 😊 publish v0.9.1-alpha.2 2023-03-09 12:45:30 +08:00
Junyi
060ccd04e7
fix(plugin-workflow): fix module import (#1550) (#1552)
* fix(plugin-workflow): fix module import (#1550)

* fix(plugin-workflow): fix module import
2023-03-08 23:00:44 +08:00
Junyi
313217a671
fix(plugin-workflow): fix assignees config component in manual node (#1547) 2023-03-07 19:24:02 +08:00
Junyi
2e4354fcf3
fix(plugin-workflow): fix AssociationInput field path (#1542) 2023-03-06 17:45:09 +08:00
chenos
a463c3d747 fix: schema name conflicts 2023-03-06 16:51:01 +08:00
chenos
cd7338d1d8 fix(formula-field): remove afterSync hook 2023-03-06 11:58:21 +08:00
ChengLei Shao
a214c7b2aa
fix: belongs to many through table with custom schema (#1539) 2023-03-05 17:43:04 +08:00
Junyi
d380c94c52
fix(plugin-formula): expose formula field result in form (#1534)
* fix(plugin-formula): make formula field result available in form

* fix(plugin-formula): fix infinite field change loop
2023-03-05 14:48:32 +08:00
ChengLei Shao
d1fb3c92d8
test: with collection_manager_schema env (#1532)
* test: with collection_manager_schema env

* fix: remove collection

* fix: collection test

* fix: collection exist in db with custom schema

* fix: inherited with custom collection schema

* fix: build error

* fix: sync unique index & database logger
2023-03-05 14:45:56 +08:00