Commit Graph

114 Commits

Author SHA1 Message Date
chenos
83bf8ea3bb chore(versions): 😊 publish v0.10.0-alpha.3 2023-06-25 14:04:19 +08:00
chenos
0b06e2cd69 chore(versions): 😊 publish v0.10.0-alpha.2 2023-06-20 11:51:16 +08:00
jack zhang
d76e8fb87f
refactor: upgrade umi, react and react-router-dom (#1921)
* refactor: update umi version 3.x to version 4.x

* refactor: update react-router-dom version to 6.x

* refactor(react-router-dom): change Layout Component `props.children` to `<Outlet />`

* refactor(react-router-dom): change <Route /> props and <RouteSwitch /> correct

* refactor(react-router-dom): replace `<Redirect />` to `<Navigate replace />`

* refactor(react-router-dom): replace `useHistory` to `useNavigate`

* refactor(react-router-dom): replace `useRouteMatch` to `useParams`

* refactor(react-router-dom & dumi): fix <RouteSwitch /> & umi document bug

* refactor(react-router-dom): `useRoutes` Optimize `<RouteSwitch />` code

* refactor(react-router-dom): update `Route` types and docs

* refactor(react-router-dom): optimize RouteSwitch code

* refactor(react-router-dom): `useLocation` no generics type

* refactor(react-router-dom): add `less v3.9.0` to `resolutions` to solve the error of `gulp-less`

* refactor(react-router-dom): fix `<RouteSwitch />`  `props.routes` as an array is not handled

* chore: upgrade `dumi` and refactor docs

* fix: completed code review, add `targets` to solve browser compatibility & removed `chainWebpack`

* refactor(dumi): upgraded dumi under `packages/core/client`

* refactor(dumi): delete `packages/core/dumi-theme-nocobase`

* refactor(dumi): degrade `react`  & replace `dumi-theme-antd` to `dumi-theme-nocobase`

* refactor(dumi): solve conflicts between multiple dumi applications

* fix: login page error in react 17

* refactor(dumi): remove less resolutions

* refactor(dumi): umi add `msfu: true` config

* fix: merge bug

* fix: self code review

* fix: code reivew and test bug

* refactor: upgrade react to 18

* refactor: degrade react types to 17

* chore: fix ci error

* fix: support routerBase & fix workflow page params

* fix(doc): menu externel link

* fix: build error

* fix: delete

* fix: vitest error

* fix: react-router new code replace

* fix: vitest markdown error

* fix: title is none when refresh

* fix: merge error

* fix: sidebar width is wrong

* fix: useProps error

* fix: side-menu-width

* fix: menu selectId is wrong & useProps is string

* fix: menu selected first default & side menu hide when change

* fix: test error & v0.10 change log

* fix: new compnent doc modify

* fix: set umi `fastRefresh=false`

* refactor: application v2

* fix: improve code

* fix: bug

* fix: page = 0 error

* fix: workflow navigate error

* feat: plugin manager

* fix: afterAdd

* feat: update docs

* feat: update docs

* fix: page tab change not work

* fix: login redirect query param doesn't work

* fix: bug and doc

* feat: update docs

* fix: ci error

* fix: merge main

* feat: update docs

* feat: update docs

* feat: update docs

* chore(versions): 😊 publish v0.10.0-alpha.1

* fix: translations

* chore: backend node test max old space size

* docs: add useSearchParams

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: ChengLei Shao <chareice@live.com>
2023-06-20 11:48:02 +08:00
chenos
106f9d90f5 fix(file-manager): only allow logged-in users to upload files 2023-06-17 21:53:49 +08:00
被雨水过滤的空气-Rairn
58840e5fab
refactor(PluginManager): remove useless code (#2022)
* refactor(PluginManager): remove useless code

* chore: fix build error
2023-06-14 09:35:09 +08:00
Dunqing
69bbfee67a
feat: use ActionContextProvider instated of ActionContext.Provider (#2019) 2023-06-09 13:05:05 +08:00
Junyi
0c150eaf9b
feat(plugin-fm): add option for storage to remove file physically or not (#2005)
* feat(plugin-fm): add server side destroy action for removing files of attachments

* feat(plugin-fm): add client option for storage
2023-06-07 05:44:16 -07:00
chenos
e6a2a292b3
feat: upgrade formily (#1880)
* feat: upgrade formily

* fix: upgrade @formily/json-schema

* fix: optimizing performance

* fix: performance code

* refactor: `React.memo` and `observer` component add `displayName` property

* fix: add cache to Schema.compile

* feat: 优化代码

* fix: 修复卡顿最终的问题

* Update SchemaComponentProvider.tsx

* feat: 再次优化代码

* feat: optimized code

---------

Co-authored-by: dream2023 <1098626505@qq.com>
2023-06-06 19:33:04 +08:00
Junyi
36d16bc015
refactor(plugin-fm): change api and allow to select storage (#1250)
* refactor(plugin-fm): change api and allow to select storage

* fix(plugin-fm): fix lint errors and demo actions

* refactor(plugin-fm): refactor action codes

* fix(plugin-fm): fix api in test

* fix(plugin-fm): fix build

* fix(plugin-fm): fix locale

* refactor(plugin-fm): hide storage from api and use sourceField param

* fix(plugin-fm): fix storage select load

* fix: improve code

* fix(plugin-fm): change to attachmentField

* refactor(plugin-fm): change middleware name

* fix(plugin-fm): fix params in test cases

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-06-06 19:30:42 +08:00
lincode
4296db5859
feat(plugin-manager): better plugin manager experience (#1927) 2023-05-29 11:06:54 +08:00
chenos
d7f21460c6 chore(versions): 😊 publish v0.9.4-alpha.2 2023-05-26 17:05:46 +08:00
chenos
9c94840c6b chore(versions): 😊 publish v0.9.4-alpha.1 2023-05-25 22:48:39 +08:00
chenos
cf0a921f85 chore(versions): 😊 publish v0.9.3-alpha.1 2023-05-11 12:49:18 +08:00
chenos
923f6e7884 chore(versions): 😊 publish v0.9.2-alpha.4 2023-04-26 22:33:55 +08:00
chenos
9756dd134b chore(versions): 😊 publish v0.9.2-alpha.3 2023-04-25 13:15:40 +08:00
chenos
883f1e6fd1
fix: eslint (#1759)
* fix: eslint

* fix: eslint --fix

* fix: changelog
2023-04-25 13:12:14 +08:00
chenos
3dfd5a1f7a chore(versions): 😊 publish v0.9.2-alpha.2 2023-04-19 13:10:55 +08:00
被雨水过滤的空气-Rairn
2050eb5317
feat: optimize file collection (#1666)
* feat(Upload.DraggerV2): add loading

* feat: auto close on uploading over

* feat: auto selected when upload is complete

* feat: filter selected options

* feat: add quick-upload and select-file

* fix: should not appear on readPretty mode

* fix: radio

* fix: compatible with older version

* feat: improving the interaction of radio selections

* fix: show two butons by default
2023-04-09 16:46:53 +08:00
被雨水过滤的空气-Rairn
c1057ad52b
fix: fix the 'Add menu item' button disappears (#1655) 2023-04-06 16:10:38 +08:00
被雨水过滤的空气-Rairn
53d0c2dd23
feat: support file collection (#1636)
* feat: support to add File collection

* feat: support to upload files

* refactor: rename 'ReadPretty.Attachment' to 'ReadPretty.File'

* feat: support to associate the File collection

* refactor: add Preview and replace Upload.Selector

* fix(Preview): fix some problems in ReadPretty mode

* feat: use 'preview' as a default title field

* feat: support only local storage now

* fix: should not show 'Add new' button

* chore: add default value for file storage

* fix: fix preview field of file collection cannot be displayed normally

* fix: only Table and Details can display File collection

* chore: translate

* refactor: migration to plugin from core

* refactor: change 'preview' to 'url'

* fix: only 'belongsTo' and 'belongsToMany' can linked file collection

* fix: fix storage and add a field called storage in file collection

* feat: add 'deletable' to configure the visibility of the delete button

* fix: fix can't upload attachment problem

* fix: remove more option

* fix: can't use preview to filter

* fix: remove Import action option

* refactor: remove useless code

* chore: optimize condition

* chore: remove comment

* test: windows compatible

* refactor: optimize upload

* fix: upload action

* fix: createAction

* fix: uploads

* fix: file collection cannot be inherited by other collections

* fix: url should be editable

* fix: url is filterable

* fix: use input interface for url field

* fix: fix error

* fix: remove subform

* Revert "chore: translate"

This reverts commit 53cd346dab.

* refactor: move translation to plugin

* fix: title is editable

* fix: collection?.template === 'file'

* fix: fix order of URL

* fix(collection-manager): allow collectionCategories:list

* chore: add translation

* fix(upload): should enable to use drawer

* refactor: move code to plugin

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-04-06 12:43:40 +08:00
chenos
50183b065d fix(file-manager): upgrade s3 version 2023-03-21 15:01:02 +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
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
chenos
bc5156d458 chore(versions): 😊 publish v0.9.1-alpha.2 2023-03-09 12:45:30 +08:00
chenos
a463c3d747 fix: schema name conflicts 2023-03-06 16:51:01 +08:00
chenos
946c8f25a3 chore(versions): 😊 publish v0.9.1-alpha.1 2023-03-03 09:34:06 +08:00
ChengLei Shao
0e0eb6432e
feat: provide the underscored option for the database (#1366)
* feat: underscored options

* feat: underscored using hook

* feat: database underscored options

* feat: underscored env

* fix: collectionExistsInDb

* fix: test

* fix: nocobase install

* fix: test

* fix: belongsTo association

* fix: test of underscored

* chore: console.log

* fix: list action test

* fix: dump test

* chore: snakeCase algo

* fix: underscored field create

* fix: underscored env

* fix(acl): custom appends merge strategy (#1416)

* Update index.md

* fix(plugin-workflow): use promise to request (#1426)

* Update index.md

* Update collection.md

* Update index.md

* Update index.md

* Update collection.md

* Update field.md

* Update repository.md

* Update has-one-repository.md

* Update has-many-repository.md

* Update belongs-to-many-repository.md

* Update index.md

* chore: translate 'Add tab' in page header (#1424)

* fix: test

* fix: workflow test

* fix: underscored with inherits

* fix: underscored test

* fix:  process.env.DB_UNDERSCORED

* fix: process.env.DB_UNDERSCORED === 'true'

* fix: test

* fix: pg test

* fix: underscored table name

* feat: tableName & fieldName conflict check

* fix: test

* fix: underscored index

* fix: update field unique index

* fix: sync default value

* fix: collection manager create field

* chore: field sync

* fix: pg test

* chore: test

* fix: test

* chore: default constraint name

* chore: syncUniqueIndex

* feat: field destory before check

* feat: field type check

* fix: test

* fix: test

* fix: improve

* fix: should destroy when fields refer to the same field

* fix: acl meta with underscored

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-02-13 21:38:47 +08:00
chenos
e5e503fe87
feat: add namespace and duplicator parameters for collection options (#1449)
* feat: add namespace and duplicator parameters for collection options

* fix: duplicator:getDict
2023-02-13 09:57:03 +08:00
chenos
68511f05bc docs: add plug-in documentation 2023-02-11 00:09:39 +08:00
Junyi
2b7f138491
fix(plugin-fm): fix path config for storages (#1445) 2023-02-09 22:40:26 +08:00
chenos
daa91e95a6 chore(versions): 😊 publish v0.9.0-alpha.2 2023-01-14 12:07:20 +08:00
chenos
c5238f5643
feat: update dependencies (#1353)
* feat: update dependencies

* fix: import error
2023-01-12 10:12:37 +08:00
chenos
013f0916a5 chore(versions): 😊 publish v0.9.0-alpha.1 2023-01-11 12:08:24 +08:00
chenos
8d30bee757
feat: change license (#1350) 2023-01-11 11:58:47 +08:00
ChengLei Shao
a614bc7de8
feat: acl optimization (#1136)
* fix: sort field with table dose not have primary key

* feat: fixed params merger

* chore(plugins/acl): fixed params

* chore(plugins/acl): allowConfigure of collections

* chore(plugins/china-region): disable actions other than list

* chore(plugins/collection-manager): allowConfigure permission

* chore(plugins/file-manager): acl fixed params

* chore: acl fixed params

* chore: rolesResourcesScopes onDelete cascade

* fix: install error

* chore: test

* fix: root user fixed params

* fix: role resource scope onDelete

* chore: test

* chore: test

* fix: acl

* chore: disable index.html cache

* chore: disable index.html cache

* test: destory user role

* test: destory throught table

* fix: test

* fix: test

* chore: add rolesUsers to fixed params

* feat: permission logging

* feat: permission logging

* fix: test

* fix: test

* chore: disable grant target action

* fix: appends with fields

* fix: get action params

* fix: associationActions

* chore: change AssociationField using relation type

* chore: typo

* refactor: allow to skip

* fix: prettier

* chore: attachments association action

* fix: allowConfigure condition

* fix: deprecated allow

* fix: please use skip instead

* feat: table column aclcheck

* chore: test

* feat: throw error when detory no permission record

* chore: test

* chore: acl test

* feat: field acl

* chore: after action middleware

* fix: destory permission check

* chore: middleware use

* fix: test

* feat: filter match

* feat: subform/subtable field acl check

* feat: action permision by scope

* feat: action permision by scope

* feat: list action with allowedActions

* chore: all allowed action

* fix: pk error

* fix: merge error

* fix: create query sql

* fix: skip permission

* fix: scope with association field

* feat: action acl fix

* feat: action acl fix

* fix: update submodule

* Feat: setting center permission (#1214)

* feat: add setting center permissions

* feat: setting center permissions backlist

* feat: setting center permissions BLACKLIST

* feat: setting center permissions blacklist

* feat: setting center permissions blacklist

* feat: setting center permission

* feat: configure plugin tab expand

Co-authored-by: chenos <chenlinxh@gmail.com>

* Feat :field acl (#1211)

Co-authored-by: chenos <chenlinxh@gmail.com>

* fix: build error

* test: acl snippet

* feat: set field

* fix: test

* fix: build error

* fix: utils Dependency cycles

* feat: general permissions

* feat: delete pluginTabBlacklist

* fix: test

* feat: snippetManager allow method

* feat: acl role snippetAllowed method

* feat: array field repository

* feat:  ArrayFieldRepository

* fix: test

* fix: ci

* fix: ci error

* fix: add set parse

* test: array field repository

* chore: addSnippetPatten

* fix: start

* feat: sync role snippets

* feat: snippets check

* feat: snippets check

* chore: acl role snippet api

* fix: test

* fix: test

* refactor: acl role snippets

* chore: registerACLSettingSnippet

* chore: default snippets

* feat: snippets match

* feat: snippets check

* feat: snippets check

* feat: pm permision check

* feat: pm permision check

* feat: snippet pattern match

* feat: pluginManagerToolbar check

* feat: pluginManagerToolbar check

* chore: snippets default value

* feat: set role snippets migration

* chore: snippets

* feat: acl local

* feat: acl local

* feat: bookmask fix

* feat: plugin-manger & ui-editor snippet

* feat: set allowConfigure to false when upgrade to snippets

* feat: destory action acl fix

* feat: destory action acl fix

* fix: association resource params merge

* fix: ui editor snippet

* feat:  action acl fix

* chore: move list meta middleware into plugins/acl

* fix: test

* feat:  action acl fix

* feat: action acl check fix

* feat: plugins toolbar fix

* feat: gitmodules

* fix: subproject

* chore: add avaiableActions to snippet

* chore: change plugin-manager snippet

* feat: configure action acl fix

* feat: plugin tab acl check fix

* chore: roles snippets

* fix: add actions to snippet

* feat: allowconfigure fix

* fix: count with filterBy

* fix: build error

* feat: get action with allowedActions

* feat: acl route check fix

* feat:  aclActionProvider fix

* feat: actionscpe fix

* feat: actionname alias

* feat: setting center fix

* feat: acl provider fix

* fix: role collection

* feat: associate resource  acl

* feat: associate resource  acl

* feat: redirect to 403

* feat: route redirct

* feat:  acl scope check by record

* fix: fields  appends fix

* fix: fields  appends fix

* fix: fields  appends fix

* fix: allowedActions  fix

* fix:  menu items

* fix: rename

* fix: improve code

* fix: improve code

* fix: improve code

* fix: ctx?.data?.data

* fix: styling

* fix: allowAll after ignore scope

* chore: allowConfigure condition

* fix: collections.fields:*

* fix: acl test

* fix: update submodule

* fix: acl test

* fix: acl snippet

* fix: updates

* fix: only load history for logged-in users

* fix: this.app.acl.registerSnippet

* fix: downloadXlsxTemplate

* fix: 404

* feat: allowedAction in association list response

* fix: listData get

* fix: test

* fix: x-collection-field

* fix: update record error

* fix: calendar template

* test: allow manager

* fix: fetch action step

* fix: update submodule

* fix: refresh

* fix: refresh

* fix: rolesResourcesScopes

* test: snippets

* fix: snippets

* fix: test

* fix: omit filter.createdById

* fix: improve code

* fix: collections path

* fix: test error

* fix: upgrade error

* fix: errors

* fix: read allowed actions error

* fix: kanban error

* fix: error

Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: katherinehhh <katherine_15995@163.com>
2023-01-09 07:35:48 +08:00
ChengLei Shao
6b0ed79f51
feat: duplicator plugin (#1265)
* chore: dump plugin

* chore: rename plugin

* chore: add duplicator into preset

* chore: tmp commit

* feat: restore & dump action

* feat: collection dump & restore

* feat: collection dump & restore

* fix: dump with json type

* fix: dump uischema

* chore: tmp commit

* chore: tmp commit

* feat: restore custom collections

* chore: code

* fix: build

* chore: tmp commit

* fix: pm.generateClientFile

* feat: dump with user plugins

* feat: restore ignore collection

* feat: ignore user with rolesUsers

* chore: client plugins

* refactor: restore insert sql

* chore: code format

* feat: restore with sequelize insert query

* fix: restore json field

* fix: json restore

* refactor: dumper

* refactor: restorer

* chore: dump file name

* chore: dump file name

* chore: dump message

* fix: restore with jsonb fields

* feat: field data writer

* chore: code

* feat: collection group manager

* feat: duplicator client

* feat: duplicator panel

* chore: disable duplicator ui

* feat: dump with inquirer

* chore: dumper

* chore: collection group manager

* feat: restore with inquirer

* chore: comment

* chore: inquirer page size

* feat: warning before restore

* feat: sync postgres sequence id after import collection

* chore: restore checked

* feat: dump with through table

* feat: restore with through table

* feat: restore with sequence field

* chore: graph collection manager collection group

* fix: dump with no column tables

* fix: dump empty table

* fix: force remove workdir

* chore: disable throw error when sync empty table

* feat: support map field restore

* fix: restore from pg dumped file

* fix: dump with logic field

* chore: console.log

* chore: collection group

* chore: handle import collection error

* fix: dump migrations table

* feat: display custom collection title

* fix: restore collection title display

* fix: dump iframe html

* fix: dump with postgres inhertitance

* fix: dump sql

* chore: export snapshot field

* fix: import with sequences

* fix: import sequences

* fix: storage

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-01-08 12:45:02 +08:00
chenos
d062c8fd99
chore(versions): 😊 publish v0.8.1-alpha.4 (#1331) 2023-01-05 23:22:18 +08:00
chenos
4ecd2ee40d chore(versions): 😊 publish v0.8.1-alpha.2 2023-01-05 18:29:47 +08:00
Junyi
0d732d214c
fix(plugin-fm): fix local storage config and skip empty base url (#1294) 2022-12-28 07:18:14 -08:00
Junyi
9e9688fa5b
fix(plugin-fm): drawer form values (#1259) 2022-12-17 15:41:38 +08:00
Junyi
41f8e6a285
fix(plugin-file-manager): fix local serve middleware (#1226) 2022-12-09 18:15:42 -08:00
Junyi
7b5277fb2a
Feat: plugin verification config (#1129)
* feat(plugin-verification): add client config

* feat(plugin-verification): add config ui

* fix(plugin-verification): fix schema

* refactor(plugin-verification): add default for verification providers

* fix(plugin-users): fix initVerification in lifecycle

* fix(plugin-users): fix initVerification in lifecycle

* fix(plugin-verification): fix locale and default provider

* fix(plugin-verification): fix test case

* fix(plugin-verification): fix locale
2022-11-28 00:41:58 -08:00
chenos
dcee3dd94a chore(versions): 😊 publish v0.8.0-alpha.13 2022-11-04 21:23:02 +08:00
chenos
642e04490d chore(versions): 😊 publish v0.8.0-alpha.9 2022-11-02 22:27:03 +08:00
chenos
d5680f80d7 chore(versions): 😊 publish v0.8.0-alpha.8 2022-11-01 18:34:12 +08:00
chenos
85ead5375a
chore(versions): 😊 publish v0.8.0-alpha.7 (#1002) 2022-11-01 17:29:49 +08:00
chenos
3453f46997 chore(versions): 😊 publish v0.8.0-alpha.5 2022-11-01 00:50:00 +08:00
ChengLei Shao
9f5f2d6028
feat: reference check (#989)
* chore: test

* chore: test

* chore: test code

* feat:  on delete restrict

* feat: on delete cascade

* feat:  on delete set null

* feat: reference unbind

* fix: test

* fix: acl test

* fix: test on Windows

* fix: database recreate

* fix: application reload

* fix: multi-app-manager test

* fix: test

* feat: ondelete

* fix: hasOne field onDelete

Co-authored-by: chenos <chenlinxh@gmail.com>
2022-10-31 22:45:39 +08:00
Dunqing
8905e3c211 feat(file-manager): support tencent cos (#958)
* feat: support tencent cos

* feat: normalize

* chore: update env example

* test: add cos

* Revert "feat: normalize"

This reverts commit 371880013c.

* feat: normalize

* feat: tengxun to tencent

* chore: fix missing deps

* fix: locale

* fix: locale cos
2022-10-27 14:09:29 +08:00
chenos
ace6232787 feat: file storage settings 2022-10-27 14:04:04 +08:00