ng-athena-web
v0.0.2
Published
1. clone 时需点击 “递归子模块”选项 2. 执行命令: `git submodule add http://47.102.222.172:22691/agile-interaction/ng-dynamic-core.git projects/ng-dynamic-forms/ng-dynamic-core`; [submodule "application-plugin-package"] path = src/assets/plugins url = http://47.10
Downloads
6
Readme
ng-dynamic-core 子模块加载
- clone 时需点击 “递归子模块”选项
- 执行命令:
git submodule add http://47.102.222.172:22691/agile-interaction/ng-dynamic-core.git projects/ng-dynamic-forms/ng-dynamic-core
; [submodule "application-plugin-package"] path = src/assets/plugins url = http://47.102.222.172:22691/agile-interaction/application-plugin-package.gitgit submodule add http://47.102.222.172:22691/agile-interaction/application-plugin-package.git src/assets/plugins
; - 其他命令
git submodule init
git submodule update
1.基本校验规则
必填校验规则
{
"key": "required",
"condition": "true",
"errorMessage": "xxx字段必填" // 默认值 "必填"
}
最大值 / 最小值 校验规则
{
"key": "max",
"condition": "true",
"value": 999,
"errorMessage": "xxx字段不能超过999" // 默认值 "不能超过{value}值"
},
{
"key": "min",
"condition": "true",
"value": 20
"errorMessage": "xxx字段不能小于20" // 默认值 "不能小于20"
}
长度校验规则
{
"key": "maxLength",
"condition": "true",
"value": 40,
"errorMessage": "xxx字段的长度不能超过40" // 默认值: "长度不能超过40"
},
{
"key": "minLength",
"condition": "true",
"value": 2
"errorMessage": "xxx字段的长度不能小于2" // 默认值: "长度不能小于2"
}
正则表达式校验规则
{
"key": "pattern",
"condition": "true",
"value": "^[1][1-9]{2}[1-9]{4}[1-9]{4}$",
"errorMessage": "xxx字段需要符合手机号格式" // 默认值: "格式错误"
}
动态校验规则
适用于当前字段的校验规则与表单其他字段的值的关系。ex.当新建产品时,当产品分类是app的时候,品号必填。
{
"key": "required",
"condition": "good.category ==='app'",
"errorMessage": "xxx 字段必填" // 默认值: "必填"
}
自定义校验规则
适用于自定义表单值得关系,比如密码一致那种,不符合angular的内置校验就需要适用这种。
{
"key": "custom",
"condition": "register.confirmPassword === register.password",
"errorMessage": "密码输入不一致"
}
服务端校验规则
适用于当前字段需要连接服务器进行校验
{
"key": "server",
"condition": "true",
"serverUrl": "http://xxx.com/api/xxx"
}
服务端需返回以下格式的数据:
{
"success": true,
"message": "名字唯一"
}
或者
{
"success": false,
"message": "用户名称不唯一"
}
2. 数据计算规则
适用于当前字段与表单其他字段的计算关系,比如总价 = 单价 * 数量。
{
"key": "value",
"condition": "good.price * good.count"
}
再举一个复杂的例子:默认值的设定。 商品的价格单位 [0, 1, 2] 与 续约周期 [0,1, 2] 的关系。
{
"key": "value",
"condition": "good.paymentType === 0 ? 1: (good.paymentType === 1 ? 0: (good.paymentType === 2?2: null))"
}
3. 样式规则
隐藏规则
ex1: 默认隐藏
{
"key": "hidden",
"condition": "true"
}
ex2. 当contact表单没有值 或者 contact的 是否增加备注的 checkbox 为 false 时,备注字段是隐藏的。也就是说,只有用户点击了 “增加备注” 复选框,备注框才出现。
{
"key": "hidden",
"condition": "typeof contact !== 'object' || (contact && contact.addComments !== true)"
}
只读规则
ex1. 默认只读
{
"key": "readonly",
"condition": "true"
}
ex2. 当 商品分类没有填入值的时候,商品栏位只读
{
"key": "readonly",
"condition": "!good.category"
}
自定义控件样式
{
"key": "style",
"condition": "good.category === 'app' ? 'className2': 'className2'"
}
自定义主题
生成自定义文件
所有自定义主题文件放置于app/theme文件夹下,并在angular.json文件的styles列表加入该文件。
命名规则:theme-主题名称.less
如:theme-red.less
引入
在app/styles.less中定义主题的className,并引入对应的主题文件
命名规则:theme-主题名称.less
如:
.red-theme {
@import "./theme/theme-red.less";
}
常用变量
1.ng-zorro-design
@primary-color: 基础色调
@success-color:警报-成功色调
@processing-color:进度条色调
@error-color: 警报-错误提示色调
@highlight-color:高亮色调
@warning-color:警报-警告色调
@normal-color:正常色调
更多变量名请参考https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/components/style/themes/default.less
2.自定义变量
.card-bg-normal:正常卡片背景色
athena-web
├─ .angular-cli.json.bak
├─ .editorconfig
├─ .git
├─ .gitignore
├─ .gitlab-ci.yml
├─ .gitmodules
├─ .npmrc
├─ .prettierrc
├─ angular.json
├─ e2e
├─ karma.conf.js
├─ license.txt
├─ package.json
├─ projects
│ ├─ ng-dynamic-forms
│ │ ├─ ng-dynamic-core
│ │ │ ├─ .git
│ │ │ ├─ karma.conf.js
│ │ │ ├─ LICENSE
│ │ │ ├─ ng-package.json
│ │ │ ├─ package.json
│ │ │ ├─ README.md
│ │ │ ├─ src
│ │ │ │ ├─ lib
│ │ │ │ │ ├─ component
│ │ │ │ │ │ ├─ dynamic-form-array.component.ts
│ │ │ │ │ │ ├─ dynamic-form-control-container.component.ts
│ │ │ │ │ │ ├─ dynamic-form-control-event.ts
│ │ │ │ │ │ ├─ dynamic-form-control-interface.ts
│ │ │ │ │ │ ├─ dynamic-form-control-with-template-interface.ts
│ │ │ │ │ │ ├─ dynamic-form-control-with-template.component.ts
│ │ │ │ │ │ ├─ dynamic-form-control.component.ts
│ │ │ │ │ │ ├─ dynamic-form-group.component.ts
│ │ │ │ │ │ ├─ dynamic-form-table.component.ts
│ │ │ │ │ │ ├─ dynamic-form.component.ts
│ │ │ │ │ │ └─ dynamic-group.component.ts
│ │ │ │ │ ├─ core.module.ts
│ │ │ │ │ ├─ core.ts
│ │ │ │ │ ├─ decorator
│ │ │ │ │ │ └─ serializable.decorator.ts
│ │ │ │ │ ├─ directive
│ │ │ │ │ │ ├─ dynamic-list.directive.spec.ts
│ │ │ │ │ │ ├─ dynamic-list.directive.ts
│ │ │ │ │ │ ├─ dynamic-template.directive.spec.ts
│ │ │ │ │ │ └─ dynamic-template.directive.ts
│ │ │ │ │ ├─ model
│ │ │ │ │ │ ├─ address
│ │ │ │ │ │ │ └─ dynamic-address.model.ts
│ │ │ │ │ │ ├─ business
│ │ │ │ │ │ │ ├─ activity-description
│ │ │ │ │ │ │ │ └─ dynamic-activity-description.model.ts
│ │ │ │ │ │ │ ├─ activity-title
│ │ │ │ │ │ │ │ └─ dynamic-activity-title.model.ts
│ │ │ │ │ │ │ ├─ approval-description
│ │ │ │ │ │ │ │ └─ dynamic-approval-description.model.ts
│ │ │ │ │ │ │ ├─ area
│ │ │ │ │ │ │ │ └─ dynamic-area.model.ts
│ │ │ │ │ │ │ ├─ attachment
│ │ │ │ │ │ │ │ └─ dynamic-attachment.model.ts
│ │ │ │ │ │ │ ├─ collapse-and-expand
│ │ │ │ │ │ │ │ └─ dynamic-collapse-and-expand.model.ts
│ │ │ │ │ │ │ ├─ count-down
│ │ │ │ │ │ │ │ └─ dynamic-count-down.model.ts
│ │ │ │ │ │ │ ├─ d-array
│ │ │ │ │ │ │ │ └─ dynamic-d-array.model.ts
│ │ │ │ │ │ │ ├─ delivery-reply
│ │ │ │ │ │ │ │ ├─ description
│ │ │ │ │ │ │ │ │ └─ dynamic-description.model.ts
│ │ │ │ │ │ │ │ └─ title
│ │ │ │ │ │ │ │ └─ dynamic-title.model.ts
│ │ │ │ │ │ │ ├─ flow
│ │ │ │ │ │ │ │ └─ dynamic-flow.model.ts
│ │ │ │ │ │ │ ├─ line-table
│ │ │ │ │ │ │ │ └─ dynamic-line-table.model.ts
│ │ │ │ │ │ │ ├─ mechanism_adjustment
│ │ │ │ │ │ │ │ ├─ dynamic-mechanism-adjustment-formula-comparsion.model.ts
│ │ │ │ │ │ │ │ └─ dynamic-mechanism-adjustment-title.model.ts
│ │ │ │ │ │ │ ├─ operation-editor
│ │ │ │ │ │ │ │ └─ operation-editor.model.ts
│ │ │ │ │ │ │ ├─ read-times
│ │ │ │ │ │ │ │ └─ dynamic-read-times.model.ts
│ │ │ │ │ │ │ └─ results-of-quality
│ │ │ │ │ │ │ └─ results-of-quality.model.ts
│ │ │ │ │ │ ├─ card
│ │ │ │ │ │ │ ├─ dynamic-card.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-card.model.ts
│ │ │ │ │ │ ├─ charts
│ │ │ │ │ │ │ └─ dynamic-charts.model.ts
│ │ │ │ │ │ ├─ checkbox
│ │ │ │ │ │ │ ├─ dynamic-checkbox-group.model.spec.ts
│ │ │ │ │ │ │ ├─ dynamic-checkbox-group.model.ts
│ │ │ │ │ │ │ ├─ dynamic-checkbox.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-checkbox.model.ts
│ │ │ │ │ │ ├─ colorpicker
│ │ │ │ │ │ │ ├─ dynamic-colorpicker.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-colorpicker.model.ts
│ │ │ │ │ │ ├─ contact
│ │ │ │ │ │ │ └─ dynamic-contact.model.ts
│ │ │ │ │ │ ├─ datepicker
│ │ │ │ │ │ │ ├─ dynamic-datepicker.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-datepicker.model.ts
│ │ │ │ │ │ ├─ dynamic-binding.model.ts
│ │ │ │ │ │ ├─ dynamic-check-control.model.ts
│ │ │ │ │ │ ├─ dynamic-date-control.model.ts
│ │ │ │ │ │ ├─ dynamic-file-control.model.ts
│ │ │ │ │ │ ├─ dynamic-form-control.model.ts
│ │ │ │ │ │ ├─ dynamic-form-value-control.model.ts
│ │ │ │ │ │ ├─ dynamic-form.model.ts
│ │ │ │ │ │ ├─ dynamic-input-control.model.ts
│ │ │ │ │ │ ├─ dynamic-option-control.model.ts
│ │ │ │ │ │ ├─ dynamic-rule.model.ts
│ │ │ │ │ │ ├─ editor
│ │ │ │ │ │ │ ├─ dynamic-editor.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-editor.model.ts
│ │ │ │ │ │ ├─ file-upload
│ │ │ │ │ │ │ ├─ dynamic-file-upload.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-file-upload.model.ts
│ │ │ │ │ │ ├─ form-array
│ │ │ │ │ │ │ ├─ dynamic-form-array.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-form-array.model.ts
│ │ │ │ │ │ ├─ form-group
│ │ │ │ │ │ │ ├─ dynamic-form-group.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-form-group.model.ts
│ │ │ │ │ │ ├─ grid
│ │ │ │ │ │ │ └─ dynamic-grid.model.ts
│ │ │ │ │ │ ├─ group
│ │ │ │ │ │ │ └─ dynamic-group.model.ts
│ │ │ │ │ │ ├─ img
│ │ │ │ │ │ │ └─ dynamic-img.model.ts
│ │ │ │ │ │ ├─ input
│ │ │ │ │ │ │ ├─ dynamic-input.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-input.model.ts
│ │ │ │ │ │ ├─ label
│ │ │ │ │ │ │ └─ dynamic-label.model.ts
│ │ │ │ │ │ ├─ misc
│ │ │ │ │ │ │ ├─ dynamic-form-control-layout.model.ts
│ │ │ │ │ │ │ ├─ dynamic-form-control-path.model.ts
│ │ │ │ │ │ │ ├─ dynamic-form-control-relation.model.ts
│ │ │ │ │ │ │ └─ dynamic-form-control-validation.model.ts
│ │ │ │ │ │ ├─ mobile
│ │ │ │ │ │ │ └─ group-list.model.ts
│ │ │ │ │ │ ├─ open-window
│ │ │ │ │ │ │ └─ dynamic-open-window.model.ts
│ │ │ │ │ │ ├─ placeholder
│ │ │ │ │ │ │ └─ dynamic-placeholder.model.ts
│ │ │ │ │ │ ├─ radio
│ │ │ │ │ │ │ ├─ dynamic-radio-group.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-radio-group.model.ts
│ │ │ │ │ │ ├─ rating
│ │ │ │ │ │ │ ├─ dynamic-rating.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-rating.model.ts
│ │ │ │ │ │ ├─ select
│ │ │ │ │ │ │ ├─ dynamic-select.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-select.model.ts
│ │ │ │ │ │ ├─ select-api
│ │ │ │ │ │ │ └─ select-api.model.ts
│ │ │ │ │ │ ├─ slider
│ │ │ │ │ │ │ ├─ dynamic-slider.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-slider.model.ts
│ │ │ │ │ │ ├─ split-row
│ │ │ │ │ │ │ └─ split-row.model.ts
│ │ │ │ │ │ ├─ switch
│ │ │ │ │ │ │ ├─ dynamic-switch.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-switch.model.ts
│ │ │ │ │ │ ├─ table
│ │ │ │ │ │ │ └─ dynamic-table.model.ts
│ │ │ │ │ │ ├─ test
│ │ │ │ │ │ ├─ textarea
│ │ │ │ │ │ │ ├─ dynamic-textarea.model.spec.ts
│ │ │ │ │ │ │ └─ dynamic-textarea.model.ts
│ │ │ │ │ │ └─ timepicker
│ │ │ │ │ │ ├─ dynamic-timepicker.model.spec.ts
│ │ │ │ │ │ └─ dynamic-timepicker.model.ts
│ │ │ │ │ ├─ service
│ │ │ │ │ │ ├─ dynamic-form-builder.service.ts
│ │ │ │ │ │ ├─ dynamic-form-component.service.ts
│ │ │ │ │ │ ├─ dynamic-form-data-snapshot.service.ts
│ │ │ │ │ │ ├─ dynamic-form-data.service.ts
│ │ │ │ │ │ ├─ dynamic-form-default-errors.ts
│ │ │ │ │ │ ├─ dynamic-form-layout.service.ts
│ │ │ │ │ │ ├─ dynamic-form-model.service.ts
│ │ │ │ │ │ ├─ dynamic-form-not-required-model.ts
│ │ │ │ │ │ ├─ dynamic-form-relation-matchers.ts
│ │ │ │ │ │ ├─ dynamic-form-relation.service.ts
│ │ │ │ │ │ ├─ dynamic-form-validation.service.ts
│ │ │ │ │ │ ├─ dynamic-form-validators.ts
│ │ │ │ │ │ └─ dynamic-form.service.ts
│ │ │ │ │ └─ utils
│ │ │ │ │ ├─ autofill.utils.spec.ts
│ │ │ │ │ ├─ autofill.utils.ts
│ │ │ │ │ ├─ core.utils.spec.ts
│ │ │ │ │ ├─ core.utils.ts
│ │ │ │ │ ├─ json.utils.spec.ts
│ │ │ │ │ └─ json.utils.ts
│ │ │ │ ├─ public-api.ts
│ │ │ │ └─ test.ts
│ │ │ ├─ tsconfig.lib.json
│ │ │ ├─ tsconfig.spec.json
│ │ │ └─ tslint.json
│ │ └─ ui-ant-web
│ │ ├─ karma.conf.js
│ │ ├─ LICENSE
│ │ ├─ ng-package.json
│ │ ├─ package.json
│ │ ├─ README.md
│ │ ├─ src
│ │ │ ├─ lib
│ │ │ │ ├─ address
│ │ │ │ │ ├─ dynamic-ant-address.component.html
│ │ │ │ │ ├─ dynamic-ant-address.component.ts
│ │ │ │ │ └─ dynamic-ant-address.less
│ │ │ │ ├─ buiness
│ │ │ │ │ ├─ collapse-and-expand
│ │ │ │ │ ├─ d-array
│ │ │ │ │ │ ├─ d-array.component.html
│ │ │ │ │ │ ├─ d-array.component.less
│ │ │ │ │ │ └─ d-array.component.ts
│ │ │ │ │ ├─ delivery-reply
│ │ │ │ │ │ ├─ description
│ │ │ │ │ │ │ ├─ dynamic-description.component.html
│ │ │ │ │ │ │ ├─ dynamic-description.component.less
│ │ │ │ │ │ │ └─ dynamic-description.component.ts
│ │ │ │ │ │ └─ title
│ │ │ │ │ │ ├─ dynamic-title.component.html
│ │ │ │ │ │ ├─ dynamic-title.component.less
│ │ │ │ │ │ └─ dynamic-title.component.ts
│ │ │ │ │ ├─ dynamic-activity-description
│ │ │ │ │ │ ├─ dynamic-activity-description.component.html
│ │ │ │ │ │ ├─ dynamic-activity-description.component.less
│ │ │ │ │ │ └─ dynamic-activity-description.component.ts
│ │ │ │ │ ├─ dynamic-activity-title
│ │ │ │ │ │ ├─ dynamic-activity-title.component.html
│ │ │ │ │ │ ├─ dynamic-activity-title.component.less
│ │ │ │ │ │ └─ dynamic-activity-title.component.ts
│ │ │ │ │ ├─ dynamic-approval-description
│ │ │ │ │ │ ├─ dynamic-approval-description.component.html
│ │ │ │ │ │ ├─ dynamic-approval-description.component.less
│ │ │ │ │ │ └─ dynamic-approval-description.component.ts
│ │ │ │ │ ├─ dynamic-area
│ │ │ │ │ │ ├─ dynamic-area.component.html
│ │ │ │ │ │ ├─ dynamic-area.component.less
│ │ │ │ │ │ └─ dynamic-area.component.ts
│ │ │ │ │ ├─ dynamic-attachment
│ │ │ │ │ │ ├─ dynamic-attachment.component.html
│ │ │ │ │ │ ├─ dynamic-attachment.component.less
│ │ │ │ │ │ └─ dynamic-attachment.component.ts
│ │ │ │ │ ├─ dynamic-countdown
│ │ │ │ │ │ ├─ dynamic-countdown.component.html
│ │ │ │ │ │ ├─ dynamic-countdown.component.less
│ │ │ │ │ │ └─ dynamic-countdown.component.ts
│ │ │ │ │ ├─ dynamic-line-table
│ │ │ │ │ │ ├─ dynamic-line-table.component.html
│ │ │ │ │ │ ├─ dynamic-line-table.component.less
│ │ │ │ │ │ └─ dynamic-line-table.component.ts
│ │ │ │ │ ├─ dynamic-read-times
│ │ │ │ │ │ ├─ dynamic-read-times.component.html
│ │ │ │ │ │ ├─ dynamic-read-times.component.less
│ │ │ │ │ │ └─ dynamic-read-times.component.ts
│ │ │ │ │ ├─ dynamic-result-of-quality
│ │ │ │ │ │ ├─ dynamic-result-of-quality.component.html
│ │ │ │ │ │ ├─ dynamic-result-of-quality.component.less
│ │ │ │ │ │ └─ dynamic-result-of-quality.component.ts
│ │ │ │ │ ├─ flow
│ │ │ │ │ │ ├─ dynamic-flow.component.html
│ │ │ │ │ │ ├─ dynamic-flow.component.less
│ │ │ │ │ │ └─ dynamic-flow.component.ts
│ │ │ │ │ ├─ mechanism_adjustment
│ │ │ │ │ │ ├─ dynamic-mechanism-adjustment-formula-comparerison
│ │ │ │ │ │ │ ├─ dynamic-mechanism-adjustment-formula-comparerison.component.html
│ │ │ │ │ │ │ ├─ dynamic-mechanism-adjustment-formula-comparerison.component.less
│ │ │ │ │ │ │ ├─ dynamic-mechanism-adjustment-formula-comparerison.component.ts
│ │ │ │ │ │ │ └─ percent-input
│ │ │ │ │ │ │ ├─ percent-input.component.html
│ │ │ │ │ │ │ ├─ percent-input.component.less
│ │ │ │ │ │ │ └─ percent-input.component.ts
│ │ │ │ │ │ └─ dynamic-mechanism-adjustment-title
│ │ │ │ │ │ ├─ dynamic-mechanism-adjustment-title.component.html
│ │ │ │ │ │ ├─ dynamic-mechanism-adjustment-title.component.less
│ │ │ │ │ │ └─ dynamic-mechanism-adjustment-title.component.ts
│ │ │ │ │ └─ operation-editor
│ │ │ │ │ ├─ dynamic-operation-editor.component.html
│ │ │ │ │ ├─ dynamic-operation-editor.component.less
│ │ │ │ │ ├─ dynamic-operation-editor.component.ts
│ │ │ │ │ └─ validate.directive.ts
│ │ │ │ ├─ card
│ │ │ │ │ ├─ dynamic-ant-card.component.html
│ │ │ │ │ ├─ dynamic-ant-card.component.less
│ │ │ │ │ └─ dynamic-ant-card.component.ts
│ │ │ │ ├─ charts
│ │ │ │ │ ├─ basic.js
│ │ │ │ │ ├─ dynamic-charts.component.html
│ │ │ │ │ ├─ dynamic-charts.component.less
│ │ │ │ │ └─ dynamic-charts.component.ts
│ │ │ │ ├─ checkbox
│ │ │ │ │ ├─ dynamic-ant-checkbox.component.html
│ │ │ │ │ └─ dynamic-ant-checkbox.component.ts
│ │ │ │ ├─ contact
│ │ │ │ │ ├─ dynamic-ant-contact.component.html
│ │ │ │ │ ├─ dynamic-ant-contact.component.less
│ │ │ │ │ └─ dynamic-ant-contact.component.ts
│ │ │ │ ├─ datepicker
│ │ │ │ │ ├─ dynamic-ant-datepicker.component.html
│ │ │ │ │ └─ dynamic-ant-datepicker.component.ts
│ │ │ │ ├─ directive
│ │ │ │ │ └─ number-style.directive.ts
│ │ │ │ ├─ dynamic-ant-form-control-container.component.html
│ │ │ │ ├─ dynamic-ant-form-control-container.component.less
│ │ │ │ ├─ dynamic-ant-form-control-container.component.ts
│ │ │ │ ├─ dynamic-ant-form-ui.module.ts
│ │ │ │ ├─ dynamic-ant-form.component.html
│ │ │ │ ├─ dynamic-ant-form.component.ts
│ │ │ │ ├─ editor
│ │ │ │ │ ├─ dynamic-ant-editor.component.html
│ │ │ │ │ ├─ dynamic-ant-editor.component.less
│ │ │ │ │ └─ dynamic-ant-editor.component.ts
│ │ │ │ ├─ form-array
│ │ │ │ │ ├─ dynamic-ant-form-array.component.html
│ │ │ │ │ ├─ dynamic-ant-form-array.component.less
│ │ │ │ │ └─ dynamic-ant-form-array.component.ts
│ │ │ │ ├─ form-group
│ │ │ │ │ ├─ dynamic-ant-form-group.component.html
│ │ │ │ │ ├─ dynamic-ant-form-group.component.less
│ │ │ │ │ └─ dynamic-ant-form-group.component.ts
│ │ │ │ ├─ group
│ │ │ │ │ ├─ dynamic-ant-group.component.html
│ │ │ │ │ ├─ dynamic-ant-group.component.less
│ │ │ │ │ └─ dynamic-ant-group.component.ts
│ │ │ │ ├─ group-list
│ │ │ │ │ ├─ dynamic-group-list.component.html
│ │ │ │ │ ├─ dynamic-group-list.component.less
│ │ │ │ │ └─ dynamic-group-list.component.ts
│ │ │ │ ├─ img
│ │ │ │ │ ├─ dynamic-ant-img.component.html
│ │ │ │ │ └─ dynamic-ant-img.component.ts
│ │ │ │ ├─ index.ts
│ │ │ │ ├─ input
│ │ │ │ │ ├─ dynamic-ant-input.component.html
│ │ │ │ │ ├─ dynamic-ant-input.component.less
│ │ │ │ │ └─ dynamic-ant-input.component.ts
│ │ │ │ ├─ label
│ │ │ │ │ ├─ dynamic-ant-label.component.html
│ │ │ │ │ ├─ dynamic-ant-label.component.less
│ │ │ │ │ └─ dynamic-ant-label.component.ts
│ │ │ │ ├─ open-window
│ │ │ │ │ ├─ dynamic-ant-open-window.component.html
│ │ │ │ │ ├─ dynamic-ant-open-window.component.less
│ │ │ │ │ └─ dynamic-ant-open-window.component.ts
│ │ │ │ ├─ placeholder
│ │ │ │ │ ├─ dynamic-ant-placeholder.component.html
│ │ │ │ │ └─ dynamic-ant-placeholder.component.ts
│ │ │ │ ├─ radio-group
│ │ │ │ │ ├─ dynamic-ant-radio-group.component.html
│ │ │ │ │ └─ dynamic-ant-radio-group.component.ts
│ │ │ │ ├─ select
│ │ │ │ │ ├─ dynamic-ant-select.component.html
│ │ │ │ │ └─ dynamic-ant-select.component.ts
│ │ │ │ ├─ select-api
│ │ │ │ │ ├─ dynamic-select-api.component.html
│ │ │ │ │ ├─ dynamic-select-api.component.less
│ │ │ │ │ └─ dynamic-select-api.component.ts
│ │ │ │ ├─ service
│ │ │ │ │ ├─ ant-form-submit.service.ts
│ │ │ │ │ └─ dynamci-ant-form-control-map.ts
│ │ │ │ ├─ special-components
│ │ │ │ │ └─ transfer
│ │ │ │ │ ├─ transfer.component.html
│ │ │ │ │ ├─ transfer.component.less
│ │ │ │ │ ├─ transfer.component.ts
│ │ │ │ │ └─ transfer.service.ts
│ │ │ │ ├─ split-row
│ │ │ │ │ ├─ dynamic-split-row.component.html
│ │ │ │ │ ├─ dynamic-split-row.component.less
│ │ │ │ │ └─ dynamic-split-row.component.ts
│ │ │ │ ├─ table
│ │ │ │ │ ├─ dynamic-ant-table.component.html
│ │ │ │ │ ├─ dynamic-ant-table.component.less
│ │ │ │ │ ├─ dynamic-ant-table.component.ts
│ │ │ │ │ └─ tile-table
│ │ │ │ │ ├─ dynamic-tile-table.component.html
│ │ │ │ │ └─ dynamic-tile-table.component.ts
│ │ │ │ └─ textarea
│ │ │ │ ├─ dynamic-ant-textarea.component.html
│ │ │ │ └─ dynamic-ant-textarea.component.ts
│ │ │ ├─ public-api.ts
│ │ │ └─ test.ts
│ │ ├─ tsconfig.lib.json
│ │ ├─ tsconfig.spec.json
│ │ └─ tslint.json
│ └─ webdpt
│ ├─ analytics
│ │ ├─ index.ts
│ │ ├─ karma.conf.js
│ │ ├─ ng-package.json
│ │ ├─ package.json
│ │ ├─ src
│ │ │ ├─ lib
│ │ │ │ ├─ core
│ │ │ │ ├─ providers
│ │ │ │ ├─ routerlessmodule
│ │ │ │ │ ├─ package.json
│ │ │ │ │ ├─ routerless.module.ts
│ │ │ │ │ ├─ tsconfig-build.json
│ │ │ │ │ └─ tsconfig-esm.json
│ │ │ │ ├─ test.mocks.ts
│ │ │ │ └─ uiroutermodule
│ │ │ │ ├─ package.json
│ │ │ │ ├─ public_api.ts
│ │ │ │ ├─ tsconfig-build.json
│ │ │ │ ├─ tsconfig-esm.json
│ │ │ │ ├─ uirouter.module.ts
│ │ │ │ └─ uirouter.ts
│ │ │ └─ test.ts
│ │ ├─ tsconfig.lib.json
│ │ ├─ tsconfig.spec.json
│ │ └─ tslint.json
│ ├─ builds
│ │ ├─ dw-release.js
│ │ └─ rewrite-package.js
│ ├─ framework
│ │ ├─ account
│ │ ├─ app-title
│ │ ├─ assets
│ │ │ └─ i18n
│ │ │ ├─ en_US
│ │ │ │ └─ dw-basic.d.ts
│ │ │ ├─ zh_CN
│ │ │ │ └─ dw-basic.d.ts
│ │ │ └─ zh_TW
│ │ │ └─ dw-basic.d.ts
│ │ ├─ auth
│ │ │ ├─ action-authorized.service.d.ts
│ │ │ ├─ auth-guard.service.d.ts
│ │ │ ├─ auth-permission-info.service.d.ts
│ │ │ ├─ auth.module.d.ts
│ │ │ ├─ auth.service.d.ts
│ │ │ ├─ authorized.service.d.ts
│ │ │ ├─ interface
│ │ │ │ ├─ action-authorized-service.interface.d.ts
│ │ │ │ ├─ action-authorized.interface.d.ts
│ │ │ │ ├─ auth-function-permission-repository.interface.d.ts
│ │ │ │ ├─ auth.interface.d.ts
│ │ │ │ └─ authorized-service.interface.d.ts
│ │ │ ├─ model
│ │ │ │ └─ authorized.model.d.ts
│ │ │ ├─ public-api.d.ts
│ │ │ ├─ repository
│ │ │ │ └─ auth-function-permission-repository.d.ts
│ │ │ ├─ tenant.service.d.ts
│ │ │ ├─ user-storage.d.ts
│ │ │ └─ user.service.d.ts
│ │ ├─ bundles
│ │ ├─ cmc
│ │ │ ├─ cmc-http-client.d.ts
│ │ │ ├─ cmc-http-error-handler.d.ts
│ │ │ ├─ cmc.module.d.ts
│ │ │ └─ public-api.d.ts
│ │ ├─ components
│ │ ├─ index.ts
│ │ ├─ ng-package.json
│ │ ├─ ng-package.prod.json
│ │ ├─ package.json
│ │ ├─ programs.module.spec.ts
│ │ ├─ programs.module.ts
│ │ ├─ style
│ │ │ └─ index.less
│ │ ├─ tsconfig.lib.json
│ │ └─ tslint.json
│ └─ style
│ ├─ index.less
│ └─ variable.less
├─ protractor.conf.js
├─ proxy.config.json
├─ README.md
├─ src
│ ├─ app
│ │ ├─ app-routing.module.ts
│ │ ├─ app.component.css
│ │ ├─ app.component.ts
│ │ ├─ app.module.ts
│ │ ├─ config
│ │ │ ├─ app-auth-token.ts
│ │ │ ├─ system-config.ts
│ │ │ └─ system.module.ts
│ │ ├─ customization
│ │ │ ├─ customization-routes.ts
│ │ │ ├─ customization-routing.module.ts
│ │ │ ├─ customization.module.ts
│ │ │ └─ style
│ │ │ └─ index.less
│ │ ├─ implementation
│ │ │ ├─ auth
│ │ │ │ ├─ forget
│ │ │ │ │ ├─ forget-routing.module.ts
│ │ │ │ │ ├─ forget.component.css
│ │ │ │ │ ├─ forget.component.html
│ │ │ │ │ ├─ forget.component.spec.ts
│ │ │ │ │ ├─ forget.component.ts
│ │ │ │ │ └─ forget.module.ts
│ │ │ │ ├─ login
│ │ │ │ │ ├─ login.component.html
│ │ │ │ │ ├─ login.component.less
│ │ │ │ │ ├─ login.component.spec.ts
│ │ │ │ │ └─ login.component.ts
│ │ │ │ ├─ login-routing.module.ts
│ │ │ │ └─ login.module.ts
│ │ │ ├─ home
│ │ │ │ ├─ activity-card
│ │ │ │ │ ├─ activity-card.component.html
│ │ │ │ │ ├─ activity-card.component.less
│ │ │ │ │ └─ project-card-list.component.ts
│ │ │ │ ├─ card
│ │ │ │ │ ├─ activity-card-list
│ │ │ │ │ │ ├─ activity-card-list.component.html
│ │ │ │ │ │ ├─ activity-card-list.component.less
│ │ │ │ │ │ └─ project-card-list.component.ts
│ │ │ │ │ ├─ card-category
│ │ │ │ │ │ ├─ card-category.component.html
│ │ │ │ │ │ ├─ card-category.component.less
│ │ │ │ │ │ └─ card-category.component.ts
│ │ │ │ │ └─ task-card-list
│ │ │ │ │ ├─ task-card-list.component.html
│ │ │ │ │ ├─ task-card-list.component.less
│ │ │ │ │ └─ task-card-list.component.ts
│ │ │ │ ├─ home-routing.module.ts
│ │ │ │ ├─ home.component.html
│ │ │ │ ├─ home.component.less
│ │ │ │ ├─ home.component.ts
│ │ │ │ ├─ home.module.ts
│ │ │ │ ├─ service
│ │ │ │ │ ├─ project.service.ts
│ │ │ │ │ ├─ event-log.service.ts
│ │ │ │ │ ├─ search.service.ts
│ │ │ │ │ ├─ task-and-activity-shared.service.ts
│ │ │ │ │ ├─ task-panel.service.ts
│ │ │ │ │ └─ task.service.ts
│ │ │ │ ├─ task-card
│ │ │ │ │ ├─ task-card.component.html
│ │ │ │ │ ├─ task-card.component.less
│ │ │ │ │ └─ task-card-list.component.ts
│ │ │ │ └─ task-time
│ │ │ │ ├─ task-time.component.html
│ │ │ │ ├─ task-time.component.less
│ │ │ │ └─ task-time.component.ts
│ │ │ ├─ http-error-handle.service.ts
│ │ │ ├─ http-interceptor.service.ts
│ │ │ ├─ implementation-routes.ts
│ │ │ ├─ implementation-routing.module.ts
│ │ │ ├─ implementation.module.ts
│ │ │ ├─ language
│ │ │ │ └─ model
│ │ │ │ └─ language.config.ts
│ │ │ ├─ layout
│ │ │ │ ├─ default-layout
│ │ │ │ │ ├─ default-layout.component.html
│ │ │ │ │ ├─ default-layout.component.less
│ │ │ │ │ └─ default-layout.component.ts
│ │ │ │ └─ menu-bar
│ │ │ │ ├─ menu-bar.component.html
│ │ │ │ ├─ menu-bar.component.less
│ │ │ │ └─ menu-bar.component.ts
│ │ │ ├─ menu
│ │ │ │ └─ model
│ │ │ │ ├─ menu.config.ts
│ │ │ │ └─ menu.model.ts
│ │ │ ├─ message
│ │ │ │ ├─ message-center
│ │ │ │ │ ├─ badge-custom
│ │ │ │ │ │ ├─ badge-custom.component.html
│ │ │ │ │ │ ├─ badge-custom.component.less
│ │ │ │ │ │ └─ badge-custom.component.ts
│ │ │ │ │ ├─ message-center.component.html
│ │ │ │ │ ├─ message-center.component.less
│ │ │ │ │ ├─ message-center.component.ts
│ │ │ │ │ ├─ message-list
│ │ │ │ │ │ ├─ message-list.component.html
│ │ │ │ │ │ ├─ message-list.component.less
│ │ │ │ │ │ └─ message-list.component.ts
│ │ │ │ │ ├─ message-time
│ │ │ │ │ │ ├─ message-time.component.html
│ │ │ │ │ │ ├─ message-time.component.less
│ │ │ │ │ │ └─ message-time.component.ts
│ │ │ │ │ ├─ second-level-message
│ │ │ │ │ │ ├─ second-level-message.component.html
│ │ │ │ │ │ ├─ second-level-message.component.less
│ │ │ │ │ │ └─ second-level-message.component.ts
│ │ │ │ │ └─ top-level-message
│ │ │ │ │ ├─ top-level-message.component.html
│ │ │ │ │ ├─ top-level-message.component.less
│ │ │ │ │ └─ top-level-message.component.ts
│ │ │ │ ├─ message-center.service.ts
│ │ │ │ └─ message.service.ts
│ │ │ ├─ program-info
│ │ │ │ └─ model
│ │ │ │ ├─ program-action.config.ts
│ │ │ │ ├─ program-action.model.ts
│ │ │ │ ├─ program-page.config.ts
│ │ │ │ ├─ program-page.model.ts
│ │ │ │ ├─ program.config.ts
│ │ │ │ └─ program.model.ts
│ │ │ ├─ programs
│ │ │ │ ├─ add-task
│ │ │ │ │ ├─ add-task.component.html
│ │ │ │ │ ├─ add-task.component.less
│ │ │ │ │ ├─ add-task.component.ts
│ │ │ │ │ └─ add-task.service.ts
│ │ │ │ ├─ email-layout
│ │ │ │ │ ├─ email-layout.component.html
│ │ │ │ │ ├─ email-layout.component.less
│ │ │ │ │ ├─ email-layout.component.spec.ts
│ │ │ │ │ ├─ email-layout.component.ts
│ │ │ │ │ ├─ email.model.ts
│ │ │ │ │ └─ email.service.ts
│ │ │ │ ├─ open-window
│ │ │ │ │ ├─ open-window.component.html
│ │ │ │ │ ├─ open-window.component.less
│ │ │ │ │ ├─ open-window.component.spec.ts
│ │ │ │ │ ├─ open-window.component.ts
│ │ │ │ │ └─ open-window.service.ts
│ │ │ │ ├─ panel-layout
│ │ │ │ │ ├─ activity-panel
│ │ │ │ │ │ ├─ activity-panel.component.html
│ │ │ │ │ │ ├─ activity-panel.component.less
│ │ │ │ │ │ └─ activity-panel.component.ts
│ │ │ │ │ ├─ common-activity-panel
│ │ │ │ │ │ ├─ activity-panel.service.ts
│ │ │ │ │ │ ├─ common-activity-panel.component.html
│ │ │ │ │ │ ├─ common-activity-panel.component.less
│ │ │ │ │ │ └─ common-activity-panel.component.ts
│ │ │ │ │ ├─ panel-layout.component.html
│ │ │ │ │ ├─ panel-layout.component.less
│ │ │ │ │ ├─ panel-layout.component.ts
│ │ │ │ │ ├─ process
│ │ │ │ │ │ ├─ process.component.html
│ │ │ │ │ │ ├─ process.component.less
│ │ │ │ │ │ └─ process.component.ts
│ │ │ │ │ ├─ sub-project-list
│ │ │ │ │ │ ├─ sub-project-list.component.html
│ │ │ │ │ │ ├─ sub-project-list.component.less
│ │ │ │ │ │ ├─ sub-project-list.component.ts
│ │ │ │ │ │ └─ sub-project-list.service.ts
│ │ │ │ │ └─ task-panel
│ │ │ │ │ ├─ task-panel.component.html
│ │ │ │ │ ├─ task-panel.component.less
│ │ │ │ │ └─ task-panel.component.ts
│ │ │ │ ├─ share
│ │ │ │ │ ├─ activity-share
│ │ │ │ │ │ ├─ activity-share.component.html
│ │ │ │ │ │ └─ activity-share.component.ts
│ │ │ │ │ └─ task-share
│ │ │ │ │ ├─ task-share.component.html
│ │ │ │ │ └─ task-share.component.ts
│ │ │ │ ├─ task-report
│ │ │ │ │ ├─ task-report.component.html
│ │ │ │ │ ├─ task-report.component.less
│ │ │ │ │ ├─ task-report.component.ts
│ │ │ │ │ └─ task-report.service.ts
│ │ │ │ └─ user-setting
│ │ │ │ ├─ user-setting.component.html
│ │ │ │ ├─ user-setting.component.less
│ │ │ │ ├─ user-setting.component.ts
│ │ │ │ └─ user-setting.service.ts
│ │ │ ├─ shared
│ │ │ │ ├─ components
│ │ │ │ │ ├─ message-center
│ │ │ │ │ └─ submit-spin
│ │ │ │ │ ├─ submit-spin.component.html
│ │ │ │ │ ├─ submit-spin.component.less
│ │ │ │ │ ├─ submit-spin.component.ts
│ │ │ │ │ └─ submit-spin.service.ts
│ │ │ │ ├─ directive
│ │ │ │ │ ├─ click-out-side.directive.ts
│ │ │ │ │ └─ number-style.directive.ts
│ │ │ │ ├─ organize-tree-modal
│ │ │ │ │ └─ default.ts
│ │ │ │ ├─ select-modal
│ │ │ │ │ └─ default.ts
│ │ │ │ └─ shared.module.ts
│ │ │ ├─ tab-route
│ │ │ │ └─ model
│ │ │ │ └─ tab-route-config.ts
│ │ │ └─ tools-routing-wrapper.module.ts
│ │ ├─ page-not-found.component.ts
│ │ └─ routes.ts
│ ├─ assets
│ │ ├─ api.dev.json
│ │ ├─ api.json
│ │ ├─ i18n
│ │ │ ├─ en_US
│ │ │ │ ├─ ant-components.json
│ │ │ │ ├─ basic.json
│ │ │ │ ├─ default.json
│ │ │ │ ├─ home.json
│ │ │ │ └─ login.json
│ │ │ ├─ zh_CN
│ │ │ │ ├─ ant-components.json
│ │ │ │ ├─ basic.json
│ │ │ │ ├─ default.json
│ │ │ │ ├─ home.json
│ │ │ │ └─ login.json
│ │ │ └─ zh_TW
│ │ │ ├─ ant-components.json
│ │ │ ├─ basic.json
│ │ │ ├─ default.json
│ │ │ ├─ home.json
│ │ │ └─ login.json
│ │ ├─ icons
│ │ │ ├─ icon-128x128.png
│ │ │ ├─ icon-144x144.png
│ │ │ ├─ icon-152x152.png
│ │ │ ├─ ...
│ │ ├─ img
│ │ │ ├─ activity
│ │ │ │ ├─ agree.png
│ │ │ │ ├─ executeActivity.png
│ │ │ │ ├─ inProgress.png
│ │ │ │ ├─ ...
│ │ │ ├─ dwLogo.svg
│ │ │ ├─ ...
│ ├─ css
│ │ ├─ bootstrap-grid.css
│ │ ├─ global.less
│ │ ├─ index.less
│ │ ├─ reboot.less
│ │ └─ variable.less
│ ├─ environments
│ │ ├─ environment.prod.ts
│ │ └─ environment.ts
│ ├─ favicon.ico
│ ├─ index.html
│ ├─ main.ts
│ ├─ manifest.webmanifest
│ ├─ mock-data
│ │ └─ index.ts
│ ├─ ngsw-config.json
│ ├─ polyfills.ts
│ ├─ test.ts
│ ├─ theme
│ │ └─ theme-default.less
│ ├─ tsconfig.app.json
│ └─ tsconfig.spec.json
├─ themeCssBuild.js
├─ tsconfig.json
└─ tslint.json