hanqiangqiang
|
481d427f5c
|
[UI.Client]
1添加Recipe历史数据记录
2添加历史数据展示列表
|
2023-11-15 09:59:10 +08:00 |
hanqiangqiang
|
931057e752
|
[UI.Client]
修改SC配置界面Setpoint宽度,由120改为140,修改对模板尺寸
|
2023-11-07 13:58:30 +08:00 |
hanqiangqiang
|
25bc154df3
|
[RT.EquipmentLibrary]
1添加测温基础功能类,在测温硬件类中,作为对象,提供Log输出和DO操作
2优化数据为null时处理
3删除测温对象多余代码
|
2023-11-01 17:17:45 +08:00 |
hanqiangqiang
|
6a62465bca
|
Merge branch 'feature/优化Recipe对比功能' into develop
|
2023-10-26 14:59:32 +08:00 |
auvkk
|
094abb37c9
|
[Common]
IoManager启动Monitor线程的时机从构造函数移至Initialize()方法。
BoolDataPollProvider中增加断言,方便调试时发现数据注册问题。
[UI.Client]
优化RecipeData的GetXmlString()方法,修正当ComboBox类型参数的Option不存在于格式模板文件中是,输出错误信息,而不是直接抛异常导致难以定位错误的问题。
|
2023-10-25 16:40:36 +08:00 |
hanqiangqiang
|
608924abfe
|
UI.Client]
1.Recipe参数添加对比属性IsCompareDifferent,通过函数CompareDifferent来设置
2.IsCompareDifferent添加颜色转换器
3.优化对比界面动画和提示信息
|
2023-10-25 13:47:44 +08:00 |
auvkk
|
639befe87e
|
[UI.Client]
修正Recipe编辑视图中所有参数显示空白的问题。
|
2023-10-24 18:46:26 +08:00 |
hanqiangqiang
|
c31e0ed594
|
Recipe对比合并到Develope分支,报错处理
|
2023-10-24 17:19:18 +08:00 |
hanqiangqiang
|
2f89f5e00e
|
Merge branch 'develop' into RecipeComparison
# Conflicts:
# MECF.Framework.UI.Client/CenterViews/Editors/Recipe/RecipeEditorView.xaml
# MECF.Framework.UI.Client/RecipeEditorLib/DGExtension/DataGridRecipe.xaml
|
2023-10-23 09:25:45 +08:00 |
SIC1016\caipeilun
|
2f0e6197e2
|
Merge branch 'develop' of http://118.31.5.210:65000/Sic-Software/Sic.Framework into develop_configChangedV2
|
2023-10-20 14:48:54 +08:00 |
hanqiangqiang
|
fa32e573fc
|
[UI.Client]
1添加图片资源,作为菜单背景
2添加image样式,鼠标悬浮改变数据源
|
2023-10-19 13:24:40 +08:00 |
hanqiangqiang
|
e80f15c09f
|
[UI.Client]
Recipe对比功能,添加单元格背景设置
|
2023-10-19 10:38:31 +08:00 |
hanqiangqiang
|
ef20419a7e
|
[UI.Client]
Recipe对比功能修改类名称
|
2023-10-18 16:25:36 +08:00 |
hanqiangqiang
|
a3511fd0c6
|
[UI.Client]
1完善Recipe对比,递归获取选择项
2优化界面,添加注释
|
2023-10-18 15:48:41 +08:00 |
hanqiangqiang
|
0b1ac249ff
|
[UI.Client]
1:Recipe对比功能,添加界面隐藏动画
2:调试递归获取Recipe名称
|
2023-10-18 09:37:14 +08:00 |
auvkk
|
acf1b1912f
|
[UI.Client]
修正Recipe编辑视图加载了Recipe,切换到其它视图,再次切换回来时,顶部功能按钮被禁用的问题。
|
2023-10-17 17:03:58 +08:00 |
hanqiangqiang
|
66f8be2fbb
|
[UI.Client]
删除多余方法
|
2023-10-16 17:23:26 +08:00 |
hanqiangqiang
|
ddf0947c7b
|
[UI.Client]
1优化函数和变量名称
2添加空表头界面,屏蔽选择的对比界面表头
|
2023-10-16 15:48:30 +08:00 |
SL
|
82721f7a35
|
[Common]
日志系统增加输出Debug信息的方法。
[UI.Client]
RecipeEditorViewModel的OnActive方法输出Debug信息用于调试视图无法打开时程序卡死的问题。
|
2023-10-14 10:13:30 +08:00 |
SL
|
856b7bbbe9
|
[UI.Client]
整理RecipeEditorViewModel.cs格式。
|
2023-10-14 09:30:50 +08:00 |
SL
|
e7cef4cfe1
|
[UI.Client]
修正Recipe编辑器加载页面可能失去响应导致SicUI卡死的问题。
修正Recipe编辑器中点击左侧文件列表中的文件夹后,再点击Recipe会提示文件已被更改的提示的问题。
|
2023-10-13 21:49:10 +08:00 |
hanqiangqiang
|
acf4a20fc0
|
[UI.Client]
1修改对比界面布局
2修改双界面同时拖动存在的BUG
|
2023-10-06 20:53:33 +08:00 |
SIC1016\caipeilun
|
79b642b871
|
Merge branch 'develop' of http://118.31.5.210:65000/Sic-Software/Sic.Framework into develop_configChangedV2
|
2023-10-04 16:11:59 +08:00 |
SIC1016\caipeilun
|
c6533050c5
|
配置文件对比功能V2
1.启动时与上次软件配置做对比,若存在差异,将生成新的备份文件,并将差异进行提示
2.配置界面右上角按钮可以过滤差异项,树状图有高亮提示
3.右上角按钮可以直接恢复上次配置软件参数,需要确认
4.config文件夹中有配置备份,可以复制出来替换掉配置文件,重启后生效
|
2023-10-04 16:10:17 +08:00 |
hanqiangqiang
|
378ce6a781
|
[UI.Client]
修改Recipe同时滚动,数据显示问题
|
2023-10-02 15:14:23 +08:00 |
hanqiangqiang
|
3e4b04b23f
|
[UI.Client]
1,Recipe对比,添加同时滚动功能
|
2023-10-02 12:47:13 +08:00 |
SL
|
47863a000d
|
Merge branch 'develop' into feature/single-session-login
# Conflicts:
# MECF.Framework.UI.Client/CenterViews/Modules/PM/PMProcessViewModel.cs
|
2023-09-30 17:36:10 +08:00 |
SL
|
10636be286
|
[UI.Client]
修正当远端登录请求取消时,LoginRequestConfirmationDialog对话框关闭后被设置DialogResult的问题。
|
2023-09-30 17:29:04 +08:00 |
hanqiangqiang
|
ff6b96f58a
|
[UI.Client]
Recipe对比只显示一个列表表头
|
2023-09-30 16:26:44 +08:00 |
hanqiangqiang
|
99b66c36d8
|
[UI.Client]
添加差异化高亮显示
|
2023-09-30 11:04:09 +08:00 |
hanqiangqiang
|
4603c3624d
|
[UI.Client]
添加Recipe显示功能
|
2023-09-29 10:36:26 +08:00 |
hanqiangqiang
|
03a6a6f8c4
|
[UI.Click]
1添加Recipe对比基础界面
2添加选择Recipe
|
2023-09-28 17:36:21 +08:00 |
DESKTOP-OKMOOJ9\MK
|
344032223e
|
[UI.Client]
LoginRequestConfirmationDialog构造函数中传入CancellationTokenSource对象。
|
2023-09-27 23:57:16 +08:00 |
SIC1016\caipeilun
|
5f3798a25c
|
Merge branch 'develop' into interlock
|
2023-09-25 15:35:13 +08:00 |
SL
|
c4605ac278
|
[UI.Client]
简化进入ReadOnly模式时RecipeEditor和PMProcess视图的操作逻辑,仅锁定Recipe,不处理锁定窗口的IsEnabled属性。MainView统一处理鼠标和键盘输入逻辑。
|
2023-09-22 17:47:23 +08:00 |
SL
|
4fff7bb521
|
[UI.Client]
优化Login等待和确认窗口样式,允许用户拖动窗口。
|
2023-09-22 17:24:07 +08:00 |
SL
|
30cdf4e271
|
[UI.Client]
修正当前用户被踢出并进入ReadOnly模式后,RecipeEditor和PMProcess视图中已解锁的Recipe没有锁定、或锁定的Recipe仍然可以通过输入密码并按下Enter键解锁的问题。
|
2023-09-22 16:22:42 +08:00 |
SL
|
de686cbb4c
|
[UI.Client]
RecipeParam对象新增IsHideValue属性和HiddenValueMasking属性,用于控制Recipe参数内容的显示与隐藏。
修改RecipeParam基类为BindableBase,简化各属性的set方法。
优化DataGridRecipe控件使用的ParamValueDisplayConverter,增加IsHideValue和HiddenValueMasking属性的绑定。
|
2023-09-22 14:58:18 +08:00 |
SL
|
042c45a216
|
[UI.Client]
移除AccountPasswordChangeDialog窗体。
|
2023-09-22 11:08:13 +08:00 |
SL
|
6d2a10161a
|
[UI.Client]
修正Account设置视图中,输入新密码后无法Save的问题。
|
2023-09-22 11:04:49 +08:00 |
SL
|
b3c8c4007a
|
[UI.Client]
优化Account编辑视图和Role编辑视图对话框消息和样式。
|
2023-09-22 09:35:11 +08:00 |
SL
|
c7c66701a5
|
[UI.Client]
修正克隆角色并保存时,会将原本的角色覆盖的问题。
优化创建角色后的默认权限,新建角色默认全部赋予读写权限。
|
2023-09-22 09:25:42 +08:00 |
SL
|
426cb43828
|
Merge branch 'develop' into feature/single-session-login
# Conflicts:
# MECF.Framework.RT.EquipmentLibrary/Devices/TcAds.cs
|
2023-09-22 08:51:21 +08:00 |
SL
|
63b88cb8fb
|
[UI.Client]
修正RecipeEditor和PMProcess视图中Recipe编辑表格的行不随权限变更实时变化的问题。
|
2023-09-21 14:14:06 +08:00 |
SL
|
97e1f2ab98
|
[Common]
优化IAccountService的GetMenuPermission方法返回类型,由int变更为MenuPermissionEnum。
优化PermissionHelper的PaserPermission方法,移除字符串前后的\t字符。
优化RecipeData的BuildFormat方法,创建Recipe格式后立即设置权限。
[UI.Client]
修正PMProcess视图中的Recipe编辑表格中不显示行的问题。
移除RecipeEditorViewModel的UpdateRecipeFormat方法中设置Recipe行权限的代码,该权限已在RecipeDalta中设置。
|
2023-09-21 11:41:43 +08:00 |
SL
|
265f70d63c
|
[UI.Client]
修正RecipeEditor视图第一次加载Recipe时所有参数均显示为“-”的问题。
|
2023-09-20 17:45:38 +08:00 |
SL
|
5a1b5fd6ef
|
[Common]
升级角色账号系统处理逻辑,UI中获取Role信息均从RT实时拉取,而非使用UI缓存的信息,已解决多用户登录变更角色后其它UI的Role信息无法同步导致的数据错乱问题。
修正Role设置视图中更改了权限,但UI使用的权限没有刷新到最新状态的问题。
所有View的Permission属性更改为MenuPermissionEnum枚举,而不是数字,解决UI端没有强约束,并且程序可读性差的问题。
所有View的Permission属性和IsPermission属性移至BaseModel基类。
简化和重构一些代码,移除未使用的代码。
[UI.Client]
UI端使用的AccountManager和RoleManager更名为AccountManagerClient和RoleManagerClient。
移除未使用的Account相关视图。
|
2023-09-20 17:25:51 +08:00 |
SL
|
84ef795a1e
|
[UI.Client]
整理BaseApp.cs代码结构。
|
2023-09-19 15:52:46 +08:00 |
SL
|
8158cecbd6
|
[Common]
修正AccountExManager的Initialize方法中错误抛出ApplicationException异常的问题。
移除PermissionHelper对象中的PermissionToString方法。
修正PermissionHelper对象的ParsePermission方法中处理字符串空格的逻辑。
[UI.Client]
优化Role编辑视图Recipe权限Tab的标题文本。
修正Recipe编辑器中所有行无法显示的问题。
|
2023-09-19 13:18:08 +08:00 |
SL
|
db20c20909
|
[Common]
修正Credential对象的某些属性无法被反序列化的问题。
优化登录请求确认对话框的描述,增加发出请求的客户端信息显示。
CredentialKeepAliveCheckResult对象的UserName属性替换为RequestingCredential。
|
2023-09-18 16:29:37 +08:00 |
SL
|
1b127e04fa
|
[Common]
修正单会话模式下登录逻辑。
新增CredentialKeepAliveCheckResult对象,用于修正当RT为单绘画模式时,已登录的UI不能弹出确认对话框的问题。
|
2023-09-18 15:51:37 +08:00 |
SL
|
aa62db176a
|
[UI.Client]
修正LoginRequestWaitDialog等待被取消后没有被关闭的问题。
移除LoginRequestWaitDialog DialogResult属性赋值,外部调用者不关心这个结果。
|
2023-09-18 14:37:21 +08:00 |
SL
|
ed26bf6bd1
|
[Common]
移除EV.PostLoginBySameUser方法,改为UI端轮训LoginRequest状态凭据。
优化CredentialManager对于Requesting凭据字典的处理,在OnTimer方法中检测KeepAlive时移除RequestCanceled和Rejected状态的凭据。
|
2023-09-18 14:17:34 +08:00 |
SL
|
4898aa6911
|
[Common]
CredentialManager对象中新增一些超时常量定义。
|
2023-09-15 23:57:38 +08:00 |
SL
|
b2e805a0dd
|
[Common]
完善CredentialManager凭据操作历史记录写入数据库的逻辑。
[UI.Client]
新增LoginRequestWaitDialog窗体。
|
2023-09-15 17:44:30 +08:00 |
SL
|
d47be38527
|
[Common]
Credential增加新属性RoleID和ClientInfo。
CredentialManager的Grant和Remove方法中增加数据库操作,保存凭据历史记录。
LoginClientInfo对象中增加更多的属性,记录客户端环境。
AccountExManager的RequestAndWaitLoginConfirmation方法中等待超时时间修改为40秒。
AccountExManager的Login方法中创建凭据时保存客户端信息。
新增SystemInfoHelper对象,用于获取系统信息。
[UI.Client]
BaseApp对象中增加ClientInfo属性和LoadSystemInfo方法,用于UI启动时获取PC信息。
|
2023-09-14 23:55:38 +08:00 |
SL
|
0f032ac783
|
[Common]
CredentialManager的_dictCredentialsRequesting字典的Key变更为string,已LoginName为主键。
CredentialKeepAliveResults枚举中增加RequestingLogin定义,用于指示已登录的客户端有其它客户端请求使用此用户名登录。
移除IAccountService实现类中多余的函数。
[UI.Client]
新增LoginRequestConfirmDialog窗体。
|
2023-09-14 14:17:16 +08:00 |
SL
|
45bb9e7bf7
|
[Common]
继续优化用户管理器相关代码,并修正错误,编译通过。(未调试)
|
2023-09-12 18:11:47 +08:00 |
hanqiangqiang
|
66857dde41
|
修改气体流量统计公式
|
2023-09-11 13:37:12 +08:00 |
SL
|
6110e1fbce
|
[Common]
用户登录相关对象的SessionId属性更名为Token。
|
2023-09-06 15:25:32 +08:00 |
SL
|
991899e5d7
|
[UI.Client]
优化BaseModel代码格式,移除不必要的内容。
|
2023-09-05 23:19:52 +08:00 |
SL
|
416b6bd72f
|
[UI.Client]
修正Role保存的一些问题。
当前提交已对Role编辑功能进行测试并通过。
|
2023-09-05 18:04:35 +08:00 |
SL
|
6d3ad925c8
|
Account配置文件迁移到新格式,同时保留对旧格式的兼容。
|
2023-09-05 11:33:11 +08:00 |
SL
|
211fa4a680
|
增加将Menu.xml移至RT的支持。
|
2023-09-05 10:20:23 +08:00 |
SL
|
86aed90177
|
[UI.Client]
修正Role编辑界面中没有显示权限条目的问题。
|
2023-09-05 00:40:37 +08:00 |
SL
|
a913ebe2b5
|
准备优化Role权限保存方式,从字符串方式更改为XmlElement节点方式保存每一条权限。
[Common]
Permission相关对象从UI.Client工程移至Common工程。
PermissionHelper中增加PermissionToDictionary方法,将权限项目转换为字典。
[UI.Client]
Role对象新增构造函数,可以传入解析好的权限清单。
|
2023-09-05 00:12:08 +08:00 |
SL
|
6ca07e3513
|
[Common]
优化AccountExManager的GenerateRoleID方法,RoleID从4开始编号,0-3为系统保留编号。
优化AccountExManager的AuthLogin方法,修正登录失败原因不准确的问题。
优化RoleLoader的AnalyzeXml方法,RoleId为0-3的角色自动将IsBuildIn属性置为True。
Role对象的IsBuildIn属性的set作用域更改为public。
[UI.Client]
优化RoleManager的GenerateRoleID方法,RoleID从4开始生成,0-3作为系统保留ID。
移除RoleManager中未使用的CloneRole方法。
优化RoleViewModel的LoadRoleList方法,直接使用RoleManager的Roles列表,而不是Clone一个新的列表。
|
2023-09-04 17:22:01 +08:00 |
SL
|
72cc41eee9
|
[Common]
[UI.Client]
Role增加IsBuildIn属性,用于标记当前角色是否为系统内置角色,系统内置角色不可删除。
|
2023-09-04 16:28:14 +08:00 |
SL
|
b7747e788a
|
[Common]
优化AppMenu代码格式。
AppMenu对象新增Description属性。
优化MenuLoad代码格式,修复变量名。
优化RoleLoad代码格式,修复变量名。
[UI.Client]
修正RoleManager保存Role后,UI中仍然显示未为保存状态的问题。
移除RoleManager的RoleContainer属性,将其变更为私有变量。
重命名RoleManager的GetRoleByID方法和GetRoleByName方法,变更为FindRoleByID和FindRoleByName。
移除PermissionControlItem中的ComboBoxSaved属性。
PermissionControlItem新增Update方法,用于Save后更新保存状态。
[Sicentury.Core]
BindableBase对象增加Serializable属性标签。
|
2023-09-04 11:51:05 +08:00 |
SL
|
ad681a5f3d
|
[UI.Client]
优化和整理角色、权限相关代码。
|
2023-09-03 23:31:57 +08:00 |
SL
|
8ae5186ee0
|
[UI.Client]
新增RolePermissionTrueFalseMapper对象。
Role编辑界面的Content权限编辑表格中的权限用Yes、No代替NONE、Read、Read&Write,使语义更加准确。
优化RoleViewModel.cs代码格式。
优化RolePermissionMapper.cs代码格式。
|
2023-09-02 23:46:13 +08:00 |
SL
|
035c2655ae
|
[UI.Client]
Role编辑界面中的Content编辑表格增加Description列。
|
2023-09-02 23:23:34 +08:00 |
SL
|
0347491cde
|
[UI.Client]
优化RoleItem代码结构。
|
2023-09-02 23:01:20 +08:00 |
SL
|
ebe387c969
|
[UI.Client]
将Menuinfo、RecipeInfo、StepInfo、ContentInfo对象从RoleItem.cs中移出,独立为单独cs文件。
|
2023-09-02 22:55:35 +08:00 |
SL
|
cbb7c732ac
|
[Common]
完成LoginbySameUser事件测试。
|
2023-09-02 00:58:20 +08:00 |
SL
|
514bcd31a3
|
Merge branch 'develop' into feature/single-session-login
|
2023-08-31 16:45:56 +08:00 |
SL
|
60c90f7df2
|
[UI.Client]
修正PMProcessViewModel StartProcess()方法中拉取RT的BypassInterlock等属性错误的问题。
|
2023-08-31 15:22:18 +08:00 |
SL
|
52991feb4b
|
[Common]
优化AccountExManager的AuthLogin()方法,如果相同用户从异地登录,当前登录状态被清除。
LoginResult对象新增属性,记录客户端IP信息。
|
2023-08-29 17:45:38 +08:00 |
hanqiangqiang
|
2aa64210a3
|
[UI.Client]
1Recipe更新触发函数明修改
2修改气流统计界面外观
(cherry picked from commit dd6def17c6 )
|
2023-08-29 12:02:56 +08:00 |
SL
|
77ec57f97e
|
Backup
|
2023-08-29 11:16:43 +08:00 |
SIC1016\caipeilun
|
3bdc347fba
|
Merge branch 'develop' into feature/bind-interlock-manager-to-module
|
2023-08-28 15:31:42 +08:00 |
SL
|
5fd6deaf0c
|
[Common]
优化Account相关对象文件的代码结构、增加注释、规范变量命名等。
|
2023-08-28 11:30:57 +08:00 |
hanqiangqiang
|
dd6def17c6
|
[UI.Client]
1Recipe更新触发函数明修改
2修改气流统计界面外观
|
2023-08-28 09:14:06 +08:00 |
SL
|
788333d6e6
|
Merge branch 'develop' into feature/bind-interlock-manager-to-module
|
2023-08-25 17:23:53 +08:00 |
HCL
|
8ad853c9b2
|
Merge branch 'feature/fix-edit-routine-issues' into develop
|
2023-08-24 11:21:31 +08:00 |
hanqiangqiang
|
b0faa5c386
|
[UI.Client]
修改标签绑定数据源
|
2023-08-23 17:08:46 +08:00 |
HCL
|
c9b7de7f1c
|
1.取消Clean
|
2023-08-23 14:07:44 +08:00 |
SL
|
3b958606fa
|
[UI.Client]
修正Recipe编辑器中加载Routine后,所有单元格没有权限的问题。
|
2023-08-22 17:20:28 +08:00 |
SL
|
d09efef6f5
|
[UI.Client]
修正当Recipe类型不为Process时,Recipe编辑器中完成单元格编辑时,RecipeStep仍然计算流量导致异常的问题。
|
2023-08-22 16:58:11 +08:00 |
SL
|
e516422e8e
|
[UI.Client]
修正RecipeEditor视图无法加载Routine编辑表格的问题。
新增类型RecipeType,用于区分当前RecipeData对象的类型。
RecipeFormatBuilder对象中构建Recipe表格格式时,判断Recipe类型,如果不是Process,则默认赋予所有列WR权限。
|
2023-08-22 16:48:45 +08:00 |
SL
|
eba8837a5e
|
[UI.Client]
修正PMProcess界面点击Start按钮启动工艺时,无法获取IsInterlockBypassed的问题。
|
2023-08-18 16:00:59 +08:00 |
SL
|
c17d73a7e6
|
Merge branch 'develop' into feature/bind-interlock-manager-to-module
|
2023-08-17 21:17:48 +08:00 |
hanqiangqiang
|
f6a6b7a868
|
[UI.Client]
PMProcess界面中加载Recipe时,默认使用PM1中配置的参数,修改为实际对应的PM模块
|
2023-08-16 10:28:19 +08:00 |
SL
|
4ba62bfbbf
|
[UI.Core]
移除EngMode相关的Converters。
[UI.Client]
ModuleStatusIndicator对象增加Warning图标和Warning图标Tips。
[RT.Equipment]
PMModuleBase对象新增IsInterlockBypassed属性,用于指示PM模组是否旁路互锁。
|
2023-08-15 15:36:38 +08:00 |
SL
|
96630d9c96
|
[UI.Client]
新增ModuleStatusIndicator控件。
|
2023-08-15 12:39:17 +08:00 |
SL
|
9967ac9716
|
[UI.Core]
修正当设备配置中未定义IoSensorWaterFlowTemp时,PM Operation视图水温指示控件中的FlowSW信号灯没有隐藏的问题。
|
2023-08-14 17:45:47 +08:00 |
SL
|
ac949099c2
|
[UI.Client]
CoolingWaterResPresenter对象更名为CoolingWaterDataPresenter。
修正CoolingWaterDataPresenter温度Warning和Alarm时背景色没有变化的问题。
修正CoolingWaterDataPresenter水流传感器信号灯绑定的属性名错误的问题。
修正CoolingWaterDataPresenter的Tip无法显示的问题。
[RT.Equipment]
IoSensorAnalog对象的Warning High/Low 和 Alarm High/Low的默认值修改为double.Infinity
|
2023-08-14 11:56:12 +08:00 |
hanqiangqiang
|
7e833d8667
|
[UI.Client]
水温报警控件,修改ON和Off控制的颜色转化
|
2023-08-13 15:43:41 +08:00 |
hanqiangqiang
|
3192c8314f
|
[UI.Client]
添加水温监控件
|
2023-08-11 17:34:36 +08:00 |
HCL
|
b0d3c03b9b
|
Merge branch 'hotfix/整理优化WaferInfo' into develop
|
2023-08-10 17:29:11 +08:00 |