diff --git a/examples/sites/demos/apis/dialog-select.js b/examples/sites/demos/apis/dialog-select.js
index 31e874fa9..da41b05f5 100644
--- a/examples/sites/demos/apis/dialog-select.js
+++ b/examples/sites/demos/apis/dialog-select.js
@@ -377,6 +377,21 @@ export default {
}
],
methods: [
+ {
+ name: 'getSelection',
+ type: '() => IData[]',
+ typeAnchorName: 'IData',
+ meta: {
+ stable: '3.19.0'
+ },
+ defaultValue: '',
+ desc: {
+ 'zh-CN': '获取多选选中数据',
+ 'en-US': 'Get multi-select selected data'
+ },
+ mode: ['pc'],
+ pcDemo: 'set-selection'
+ },
{
name: 'queryGridData',
type: '() => void',
@@ -387,6 +402,21 @@ export default {
},
mode: ['pc'],
pcDemo: 'nest-grid-multi'
+ },
+ {
+ name: 'setSelection',
+ type: '(data: IData | IData[], checked: boolean) => void',
+ typeAnchorName: 'IData',
+ meta: {
+ stable: '3.19.0'
+ },
+ defaultValue: '',
+ desc: {
+ 'zh-CN': '设置数据的多选选中状态,需要在弹窗初始化后调用,否则调用无效',
+ 'en-US': 'Set the multi-select selected state of data'
+ },
+ mode: ['pc'],
+ pcDemo: 'set-selection'
}
],
slots: [
@@ -674,6 +704,16 @@ interface IResizeEvent {
fullscreen: boolean
// 弹窗的元素
dialog: HTMLElement
+}
+ `
+ },
+ {
+ name: 'IData',
+ type: 'interface',
+ code: `
+interface IData {
+ // 表格或者tree行数据
+ [prop: string]: any
}
`
}
diff --git a/examples/sites/demos/apis/form.js b/examples/sites/demos/apis/form.js
index 9306358d4..efbfab5d5 100644
--- a/examples/sites/demos/apis/form.js
+++ b/examples/sites/demos/apis/form.js
@@ -631,7 +631,7 @@ type IFormTrigger = 'change' | 'blur'
interface IFormRules {
required?: boolean // 是否必填
- message?: number // 校验错误的提示
+ message?: string // 校验错误的提示
// 内置的类型校验
type?: 'date' | 'dateTime' | 'float' | 'array' | 'string' | 'number' | 'url' | 'time' | 'email' | 'object' | 'boolean' | 'enum'
// 校验触发时机, 默认为 ['change', 'blur'] 两种场景都触发,如果仅在主动调用校验方式时触发,可设置为空数组 []。
diff --git a/examples/sites/demos/apis/grid.js b/examples/sites/demos/apis/grid.js
index 616dd3dba..9d710a9e0 100644
--- a/examples/sites/demos/apis/grid.js
+++ b/examples/sites/demos/apis/grid.js
@@ -4415,6 +4415,8 @@ interface IEditConfig {
showStatus?: boolean
// 自定义编辑规则,返回true可以编辑返回false则禁止编辑
activeMethod?: ({row: IRow, column: IColumnConfig})=> boolean
+ // (3.19新增)当mode为'row'时,行编辑激活状态下默认会忽略activeMethod,配置为true使其生效
+ activeStrictly?: boolean
}
`
},
diff --git a/examples/sites/demos/apis/icon-multicolor.js b/examples/sites/demos/apis/icon-multicolor.js
new file mode 100644
index 000000000..b4b58ca0e
--- /dev/null
+++ b/examples/sites/demos/apis/icon-multicolor.js
@@ -0,0 +1,4 @@
+export default {
+ mode: ['pc'],
+ apis: []
+}
diff --git a/examples/sites/demos/apis/image.js b/examples/sites/demos/apis/image.js
index c0881c565..a778f474e 100644
--- a/examples/sites/demos/apis/image.js
+++ b/examples/sites/demos/apis/image.js
@@ -222,6 +222,21 @@ export default {
mode: ['pc', 'mobile-first'],
pcDemo: 'count-slot',
mfDemo: ''
+ },
+ {
+ name: 'appendToBody',
+ type: 'boolean',
+ defaultValue: 'true',
+ meta: {
+ stable: '3.19.0'
+ },
+ desc: {
+ 'zh-CN': '预览弹框是否显示在当前节点下面',
+ 'en-US': 'Indicates whether the preview dialog box is displayed under the current node.'
+ },
+ mode: ['pc', 'mobile-first'],
+ pcDemo: 'preview',
+ mfDemo: ''
}
]
}
diff --git a/examples/sites/demos/apis/tree-menu.js b/examples/sites/demos/apis/tree-menu.js
index 4509f4149..eb36cf68f 100644
--- a/examples/sites/demos/apis/tree-menu.js
+++ b/examples/sites/demos/apis/tree-menu.js
@@ -422,6 +422,21 @@ export default {
},
mode: ['pc'],
pcDemo: 'show-filter'
+ },
+ {
+ name: 'width-adapt',
+ type: 'boolean',
+ defaultValue: 'false',
+ desc: {
+ 'zh-CN': '通过 widthAdapt
属性,是否让组件宽度自适应父容器。',
+ 'en-US':
+ 'The widthAdapt
attribute specifies whether to enable the component width to adapt to the parent container.'
+ },
+ meta: {
+ stable: '3.19.0'
+ },
+ mode: ['pc'],
+ pcDemo: 'show-filter'
}
],
events: [
diff --git a/examples/sites/demos/pc/app/action-menu/icon-composition-api.vue b/examples/sites/demos/pc/app/action-menu/icon-composition-api.vue
index 666ae19a8..8c92063d0 100644
--- a/examples/sites/demos/pc/app/action-menu/icon-composition-api.vue
+++ b/examples/sites/demos/pc/app/action-menu/icon-composition-api.vue
@@ -11,9 +11,6 @@
>
-
-
-
场景2:只显示文本
@@ -22,12 +19,12 @@
+
+
diff --git a/examples/sites/demos/pc/app/button/image.vue b/examples/sites/demos/pc/app/button/image.vue
index c0b503b36..c8a20487c 100644
--- a/examples/sites/demos/pc/app/button/image.vue
+++ b/examples/sites/demos/pc/app/button/image.vue
@@ -1,5 +1,5 @@
-
+
图片按钮
@@ -14,8 +14,21 @@ export default {
},
data() {
return {
- image: `${import.meta.env.VITE_APP_BUILD_BASE_URL}static/images/button-image.png`
+ image: `${import.meta.env.VITE_APP_BUILD_BASE_URL}static/images/email.png`
}
}
}
+
+
diff --git a/examples/sites/demos/pc/app/card/card-size-composition-api.vue b/examples/sites/demos/pc/app/card/card-size-composition-api.vue
index 726af5f30..8fc54ac4e 100644
--- a/examples/sites/demos/pc/app/card/card-size-composition-api.vue
+++ b/examples/sites/demos/pc/app/card/card-size-composition-api.vue
@@ -26,26 +26,26 @@
-
diff --git a/examples/sites/demos/pc/app/dialog-select/nest-grid-multi.vue b/examples/sites/demos/pc/app/dialog-select/nest-grid-multi.vue
index 0102d155d..94596d870 100644
--- a/examples/sites/demos/pc/app/dialog-select/nest-grid-multi.vue
+++ b/examples/sites/demos/pc/app/dialog-select/nest-grid-multi.vue
@@ -21,7 +21,7 @@
@change="onDialogSelectChange"
value-field="id"
text-field="name"
- :main-height="290"
+ :main-height="240"
>
@@ -29,7 +29,13 @@
-
+
@@ -38,7 +44,7 @@
-
diff --git a/examples/sites/demos/pc/app/dialog-select/nest-grid-single-composition-api.vue b/examples/sites/demos/pc/app/dialog-select/nest-grid-single-composition-api.vue
index ec0da5c39..7e375bf61 100644
--- a/examples/sites/demos/pc/app/dialog-select/nest-grid-single-composition-api.vue
+++ b/examples/sites/demos/pc/app/dialog-select/nest-grid-single-composition-api.vue
@@ -18,7 +18,7 @@
@change="onDialogSelectChange"
value-field="id"
text-field="name"
- :main-height="290"
+ :main-height="240"
>
@@ -31,6 +31,7 @@
placeholder="选择城市"
:options="state.options"
clearable
+ @change="onCitySearch"
>
@@ -45,8 +46,7 @@ import {
DialogSelect as TinyDialogSelect,
Button as TinyButton,
Search as TinySearch,
- Select as TinySelect,
- Modal
+ Select as TinySelect
} from '@opentiny/vue'
// 模拟服务侧数据
@@ -103,20 +103,23 @@ const state = reactive({
},
gridOp: {
columns: [
- { field: 'id', title: 'ID', width: 40 },
+ { field: 'id', title: 'ID', width: 50 },
{ field: 'name', title: '名称', showOverflow: 'tooltip' },
{ field: 'province', title: '省份', width: 80 },
{ field: 'city', title: '城市', width: 80 }
],
data: [],
- radioConfig: { checkRowKey: '1' }
+ radioConfig: { checkRowKey: '1' },
+ border: false, // 设置边框
+ size: 'small' // 设置表格尺寸
},
pagerOp: {
currentPage: 1,
pageSize: 5,
pageSizes: [5, 10],
total: 0,
- layout: 'prev, pager, next'
+ layout: 'prev, pager, next',
+ size: 'mini'
}
})
@@ -136,6 +139,12 @@ const onSearch = (key, value) => {
dialogSelect.value.queryGridData()
}
+const onCitySearch = (value) => {
+ state.searchData.city = value
+ state.pagerOp.currentPage = 1
+ dialogSelect.value.queryGridData()
+}
+
const remoteSearch = () => {
return new Promise((resolve) => {
setTimeout(() => {
@@ -163,22 +172,21 @@ const lookupMethod = (values) => {
}
const onDialogSelectChange = (values, texts, selectedDatas) => {
- Modal.message({
- message: `values:${values},texts:${texts},selectedDatas:${JSON.stringify(selectedDatas)}`,
- status: 'info'
- })
+ // 打印change回调数据,控制台查看
+ console.log({ values, texts, selectedDatas })
}
-
diff --git a/examples/sites/demos/pc/app/dialog-select/nest-grid-single.vue b/examples/sites/demos/pc/app/dialog-select/nest-grid-single.vue
index 2e487f11d..dbd715ab1 100644
--- a/examples/sites/demos/pc/app/dialog-select/nest-grid-single.vue
+++ b/examples/sites/demos/pc/app/dialog-select/nest-grid-single.vue
@@ -18,7 +18,7 @@
@change="onDialogSelectChange"
value-field="id"
text-field="name"
- :main-height="290"
+ :main-height="240"
>
@@ -26,7 +26,13 @@
-
+
@@ -35,7 +41,7 @@
-
diff --git a/examples/sites/demos/pc/app/dialog-select/nest-tree-multi-composition-api.vue b/examples/sites/demos/pc/app/dialog-select/nest-tree-multi-composition-api.vue
index 0418a1fc2..ae8046ee2 100644
--- a/examples/sites/demos/pc/app/dialog-select/nest-tree-multi-composition-api.vue
+++ b/examples/sites/demos/pc/app/dialog-select/nest-tree-multi-composition-api.vue
@@ -1,6 +1,10 @@
{{ `${state.visible ? '关闭' : '打开'}窗口` }}
+
+ {{ `${state.visible1 ? '关闭' : '打开'}窗口(插槽自定义场景)` }}
+
+
+
+
@@ -37,7 +59,7 @@
@@ -201,28 +223,32 @@ const onDialogSelectChange = (values, texts, selectedDatas) => {
text-overflow: ellipsis;
white-space: nowrap;
height: 28px;
+ line-height: 28px;
}
.tiny-demo-tree-multi .tiny-demo-tree-multi-option .title {
- color: #161e26;
- position: relative;
- top: 4px;
+ color: #191919;
+ font-size: 14px;
}
.tiny-demo-tree-multi .tiny-demo-tree-multi-option .sub-text {
- color: #8d959e;
- position: relative;
- top: 4px;
+ color: #808080;
margin-left: 8px;
}
.tiny-demo-tree-multi-close {
height: 28px;
+ line-height: 28px;
+ font-size: 0;
+
+ .tiny-svg {
+ fill: #808080;
+ font-size: 16px;
+ }
}
.tiny-demo-tree-multi-close > span {
position: relative;
- top: 2px;
left: 12px;
}
diff --git a/examples/sites/demos/pc/app/dialog-select/nest-tree-multi.vue b/examples/sites/demos/pc/app/dialog-select/nest-tree-multi.vue
index 44db5e537..2e44242f0 100644
--- a/examples/sites/demos/pc/app/dialog-select/nest-tree-multi.vue
+++ b/examples/sites/demos/pc/app/dialog-select/nest-tree-multi.vue
@@ -1,6 +1,9 @@
{{ `${visible ? '关闭' : '打开'}窗口` }}
+
+ {{ `${visible1 ? '关闭' : '打开'}窗口(插槽自定义场景)` }}
+
+
+
@@ -36,7 +57,7 @@
diff --git a/examples/sites/demos/pc/app/dialog-select/nest-tree-single.vue b/examples/sites/demos/pc/app/dialog-select/nest-tree-single.vue
index 3bdea3f6c..3fab39dac 100644
--- a/examples/sites/demos/pc/app/dialog-select/nest-tree-single.vue
+++ b/examples/sites/demos/pc/app/dialog-select/nest-tree-single.vue
@@ -20,7 +20,7 @@
+
+
diff --git a/examples/sites/demos/pc/app/dialog-select/set-selection.vue b/examples/sites/demos/pc/app/dialog-select/set-selection.vue
new file mode 100644
index 000000000..30d9cd884
--- /dev/null
+++ b/examples/sites/demos/pc/app/dialog-select/set-selection.vue
@@ -0,0 +1,204 @@
+
+
+
{{ `${visible ? '关闭' : '打开'}窗口` }}
+
切换第二行选中状态
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/dialog-select/webdoc/dialog-select.js b/examples/sites/demos/pc/app/dialog-select/webdoc/dialog-select.js
index 35be26bac..34922d62a 100644
--- a/examples/sites/demos/pc/app/dialog-select/webdoc/dialog-select.js
+++ b/examples/sites/demos/pc/app/dialog-select/webdoc/dialog-select.js
@@ -1,6 +1,6 @@
export default {
column: '2',
- owner: '詹旖旎 30021340',
+ owner: '',
demos: [
{
demoId: 'nest-grid-multi',
@@ -57,6 +57,20 @@ export default {
'
Use the auto-lookup
,lookup-method
attributes, and change
events to set the anti lookup echo function for data initialization.
\n
Tree selection scenarios require setting popcollector
to tree
,multi
to false
, anddefaultCheckedKeys
to set default selected data.
\n'
},
codeFiles: ['nest-tree-single.vue']
+ },
+ {
+ demoId: 'set-selection',
+ name: {
+ 'zh-CN': '设置多选状态',
+ 'en-US': 'Tree radio selection'
+ },
+ desc: {
+ 'zh-CN':
+ '
通过 auto-lookup
、lookup-method
属性和 change
事件设置初始化时数据的反查回显功能。
\n
树单选场景需要设置 popselector
为 tree
,multi
为 false
,defaultCheckedKeys
设置默认选中数据。
\n',
+ 'en-US':
+ '
Use the auto-lookup
,lookup-method
attributes, and change
events to set the anti lookup echo function for data initialization.
\n
Tree selection scenarios require setting popcollector
to tree
,multi
to false
, anddefaultCheckedKeys
to set default selected data.
\n'
+ },
+ codeFiles: ['set-selection.vue']
}
]
}
diff --git a/examples/sites/demos/pc/app/dropdown/show-icon-composition-api.vue b/examples/sites/demos/pc/app/dropdown/show-icon-composition-api.vue
index 08a22ff0b..ff236814b 100644
--- a/examples/sites/demos/pc/app/dropdown/show-icon-composition-api.vue
+++ b/examples/sites/demos/pc/app/dropdown/show-icon-composition-api.vue
@@ -26,6 +26,20 @@
+
+
场景3:前置图标
+
+
+
+
+ 黄金糕
+ 狮子头
+ 螺蛳粉
+ 双皮奶
+ 蚵仔煎
+
+
+
@@ -35,9 +49,10 @@ import {
DropdownMenu as TinyDropdownMenu,
DropdownItem as TinyDropdownItem
} from '@opentiny/vue'
-import { iconEllipsis } from '@opentiny/vue-icon'
+import { iconEllipsis, iconLanguage } from '@opentiny/vue-icon'
const tinyIconEllipsis = iconEllipsis()
+const tinyIconLanguage = iconLanguage()
diff --git a/examples/sites/demos/pc/app/grid/editor/active-strictly.spec.js b/examples/sites/demos/pc/app/grid/editor/active-strictly.spec.js
new file mode 100644
index 000000000..c96122109
--- /dev/null
+++ b/examples/sites/demos/pc/app/grid/editor/active-strictly.spec.js
@@ -0,0 +1,11 @@
+import { test, expect } from '@playwright/test'
+
+test('维护编辑状态', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('grid-editor#active-strictly')
+ await page.getByRole('cell', { name: '福州' }).click()
+ const demo = page.locator('#active-strictly')
+ await expect(
+ demo.locator('.tiny-grid-body__row').first().locator('.tiny-grid-body__column').nth(1).locator('input')
+ ).toHaveCount(0)
+})
diff --git a/examples/sites/demos/pc/app/grid/editor/active-strictly.vue b/examples/sites/demos/pc/app/grid/editor/active-strictly.vue
new file mode 100644
index 000000000..0553c711e
--- /dev/null
+++ b/examples/sites/demos/pc/app/grid/editor/active-strictly.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/grid/mouse-keyboard/keyboard-navigation.spec.js b/examples/sites/demos/pc/app/grid/mouse-keyboard/keyboard-navigation.spec.js
index 12c99ec57..42a611ab4 100644
--- a/examples/sites/demos/pc/app/grid/mouse-keyboard/keyboard-navigation.spec.js
+++ b/examples/sites/demos/pc/app/grid/mouse-keyboard/keyboard-navigation.spec.js
@@ -4,7 +4,9 @@ test('键盘导航测试', async ({ page }) => {
page.on('pageerror', (exception) => expect(exception).toBeNull())
const demo = page.locator('#mouse-keyboard-keyboard-navigation')
await page.goto('grid-mouse-keyboard#mouse-keyboard-keyboard-navigation')
+
await page.getByText('GFD科技YX公司').click()
+ await page.waitForTimeout(300)
await page.locator('body').press('ArrowDown')
await page.waitForTimeout(300)
await page.locator('body').press('F2')
diff --git a/examples/sites/demos/pc/app/grid/webdoc/grid-editor.js b/examples/sites/demos/pc/app/grid/webdoc/grid-editor.js
index 9b54178e0..e1319cba7 100644
--- a/examples/sites/demos/pc/app/grid/webdoc/grid-editor.js
+++ b/examples/sites/demos/pc/app/grid/webdoc/grid-editor.js
@@ -64,6 +64,16 @@ export default {
},
'codeFiles': ['editor/editor-bg.vue']
},
+ {
+ 'demoId': 'active-strictly',
+ 'name': { 'zh-CN': '行编辑禁用特定列', 'en-US': '' },
+ 'desc': {
+ 'zh-CN':
+ "当 editConfig.mode
为'row'时,行编辑激活状态下默认会忽略 editConfig.activeMethod
,配置 editConfig.activeStrictly
为true使其生效",
+ 'en-US': ''
+ },
+ 'codeFiles': ['editor/active-strictly.vue']
+ },
{
'demoId': 'editor-custom-edit',
'name': { 'zh-CN': '多行编辑', 'en-US': '' },
diff --git a/examples/sites/demos/pc/app/icon-multicolor/basic-usage-composition-api.vue b/examples/sites/demos/pc/app/icon-multicolor/basic-usage-composition-api.vue
new file mode 100644
index 000000000..b4bb83018
--- /dev/null
+++ b/examples/sites/demos/pc/app/icon-multicolor/basic-usage-composition-api.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/icon-multicolor/basic-usage.vue b/examples/sites/demos/pc/app/icon-multicolor/basic-usage.vue
new file mode 100644
index 000000000..ff172fc58
--- /dev/null
+++ b/examples/sites/demos/pc/app/icon-multicolor/basic-usage.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/icon-multicolor/list-composition-api.vue b/examples/sites/demos/pc/app/icon-multicolor/list-composition-api.vue
new file mode 100644
index 000000000..38c5518c3
--- /dev/null
+++ b/examples/sites/demos/pc/app/icon-multicolor/list-composition-api.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+ {{ icon.name }}
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/icon-multicolor/list.vue b/examples/sites/demos/pc/app/icon-multicolor/list.vue
new file mode 100644
index 000000000..b71b7fb7d
--- /dev/null
+++ b/examples/sites/demos/pc/app/icon-multicolor/list.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+ {{ icon.name }}
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.cn.md b/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.cn.md
new file mode 100644
index 000000000..ed5ad9692
--- /dev/null
+++ b/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.cn.md
@@ -0,0 +1,7 @@
+---
+title: IconMulticolor 多色图标
+---
+
+# IconMulticolor 多色图标
+
+
多色图标集合
diff --git a/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.en.md b/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.en.md
new file mode 100644
index 000000000..00f80c961
--- /dev/null
+++ b/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.en.md
@@ -0,0 +1,7 @@
+---
+title: IconMulticolor
+---
+
+# IconMulticolor
+
+MultiColor icon collection
diff --git a/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.js b/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.js
new file mode 100644
index 000000000..4256b1b59
--- /dev/null
+++ b/examples/sites/demos/pc/app/icon-multicolor/webdoc/icon-multicolor.js
@@ -0,0 +1,38 @@
+export default {
+ column: '1',
+ owner: '',
+ demos: [
+ {
+ demoId: 'basic-usage',
+ name: {
+ 'zh-CN': '基本用法',
+ 'en-US': 'Basic Usage'
+ },
+ desc: {
+ 'zh-CN': `通过 first-color
自定义图标第一层颜色,通过 second-color
自定义图标第二层颜色。
+
+
图标颜色规则: 共三层颜色,其中一二层颜色可独立配置,第三层颜色为第二层颜色透明度的50%
+
第一层默认颜色: rgba(0,103,209,1)
+
第二层默认颜色: rgba(0,103,209,0.7) (默认为第一层的70%)
+
第三层默认颜色: rgba(0,103,209,0.35)(第二层的50%)
+
+ `,
+ 'en-US':
+ 'Introduce icon functions from the @opentiny/vue-icon
icon library, execute them, and generate corresponding icons.'
+ },
+ codeFiles: ['basic-usage.vue']
+ },
+ {
+ demoId: 'list',
+ name: {
+ 'zh-CN': '图标集合',
+ 'en-US': 'Icon Set'
+ },
+ desc: {
+ 'zh-CN': '输入图标名称进行搜索,点击图标即可快速复制名称。',
+ 'en-US': 'Enter the icon name for search, Click on the icon to quickly copy the name.'
+ },
+ codeFiles: ['list.vue']
+ }
+ ]
+}
diff --git a/examples/sites/demos/pc/app/icon/iconGroups.js b/examples/sites/demos/pc/app/icon/iconGroups.js
index 25411c6c2..d55d7186b 100644
--- a/examples/sites/demos/pc/app/icon/iconGroups.js
+++ b/examples/sites/demos/pc/app/icon/iconGroups.js
@@ -69,6 +69,7 @@ export const iconGroups = {
'IconDeltaUpO',
'IconFreeze',
'IconUp',
+ 'IconUpdate',
'IconUpO',
'IconUpWard'
],
@@ -179,6 +180,7 @@ export const iconGroups = {
],
Stretchable: [
'IconFullscreenLeft',
+ 'IconFullscreenRight',
'IconMinscreenLeft',
'IconMinscreenRight',
'IconStretch',
@@ -247,12 +249,15 @@ export const iconGroups = {
Brands: ['IconAngularjs', 'IconEspaceAuto', 'IconEspace', 'IconNodejs', 'IconReactjs', 'IconVuejs'],
Charts: ['IconAreaChart', 'IconDotChart', 'IconLineChart', 'IconPieChart', 'IconStatistics'],
Editor: [
+ 'IconEdit',
+ 'IconEditor',
'IconEditorAlignCenter',
'IconEditorAlignLeft',
'IconEditorAlignRight',
'IconEditorBackground',
'IconEditorCode',
'IconEditorEraser',
+ 'IconEditorEraserFilled',
'IconEditorLeftBorder',
'IconEditorList',
'IconEditorListDot',
@@ -262,6 +267,7 @@ export const iconGroups = {
'IconEditorQuote',
'IconEditorRedo',
'IconEditorRightBorder',
+ 'IconEditorTab',
'IconEditorTable',
'IconEditorTextcolor',
'IconExport',
@@ -276,6 +282,7 @@ export const iconGroups = {
'IconDesktopView',
'IconException',
'IconLanguage',
+ 'IconLock',
'IconMobileView',
'IconMobile',
'IconPrintPreview',
@@ -294,10 +301,16 @@ export const iconGroups = {
Email: ['IconEmailAdd', 'IconEmailCircle', 'IconMailContent', 'IconMail', 'IconReplies', 'IconSent', 'IconUnsent'],
Folder: ['IconFileCloudupload', 'IconFolder', 'IconFolderClosed', 'IconFolderOpened'],
File: [
+ 'IconAgency',
'IconCloudUpload',
+ 'iconCheckOut',
+ 'IconCheckedTrue',
+ 'IconDeletePage',
'IconDocument',
'IconExcel',
'IconExcelType',
+ 'IconExpressSearch',
+ 'IconFeedback',
'IconFileExcel',
'IconFile',
'IconFilesCircle',
@@ -307,9 +320,14 @@ export const iconGroups = {
'IconFileupload',
'IconFinishO',
'IconHistoryRecord',
+ 'IconLocalePanel',
+ 'IconNoPremission',
'IconOtherType',
+ 'IconPagelink',
'IconPdfType',
'IconPptType',
+ 'IconRenew',
+ 'IconSynchronize',
'IconTextType',
'IconText',
'IconTextAlign',
diff --git a/examples/sites/demos/pc/app/image/preview-composition-api.vue b/examples/sites/demos/pc/app/image/preview-composition-api.vue
index 82f0bde1e..13106f458 100644
--- a/examples/sites/demos/pc/app/image/preview-composition-api.vue
+++ b/examples/sites/demos/pc/app/image/preview-composition-api.vue
@@ -3,7 +3,7 @@
点击图片预览大图
-
+
diff --git a/examples/sites/demos/pc/app/image/preview.vue b/examples/sites/demos/pc/app/image/preview.vue
index 19335206a..b17f03b7a 100644
--- a/examples/sites/demos/pc/app/image/preview.vue
+++ b/examples/sites/demos/pc/app/image/preview.vue
@@ -3,7 +3,7 @@
点击图片预览大图
-
+
diff --git a/examples/sites/demos/pc/app/link/basic-usage-composition-api.vue b/examples/sites/demos/pc/app/link/basic-usage-composition-api.vue
index 0817c702d..3a0d42447 100644
--- a/examples/sites/demos/pc/app/link/basic-usage-composition-api.vue
+++ b/examples/sites/demos/pc/app/link/basic-usage-composition-api.vue
@@ -1,12 +1,16 @@
- 默认链接
+ 默认链接
-
-
- `
+ const cloesIcon = ``
cancelIcon.innerHTML = cloesIcon
const progress = document.createElement('span')
diff --git a/packages/renderless/src/image-viewer/vue.ts b/packages/renderless/src/image-viewer/vue.ts
index 00558b202..921761ba9 100644
--- a/packages/renderless/src/image-viewer/vue.ts
+++ b/packages/renderless/src/image-viewer/vue.ts
@@ -93,7 +93,8 @@ const initState = ({ reactive, computed, api, mode, props, constants, inject })
infinite: true,
loading: false,
transform: { scale: 1, deg: 0, offsetX: 0, offsetY: 0, objfit: 'contain', enableTransition: false },
- urlList: props.urlList || inject('urlList', null),
+ urlList:
+ props.urlList || (Array.isArray(inject('urlList')) && inject('urlList').length !== 0) ? inject('urlList') : null,
mode: constants.MODE.CONTAIN,
previewVisible: props.previewVisible,
fullScreen: props.imageFullCurrent,
diff --git a/packages/renderless/src/input/index.ts b/packages/renderless/src/input/index.ts
index c3954bfcc..4fc2c075f 100644
--- a/packages/renderless/src/input/index.ts
+++ b/packages/renderless/src/input/index.ts
@@ -11,13 +11,7 @@
*/
import { omitText } from '../common/string'
-import type {
- IInputApi,
- IInputClassPrefixConstants,
- IInputRenderlessParamUtils,
- IInputRenderlessParams,
- IInputState
-} from 'types/input.type'
+import type { IInputApi, IInputRenderlessParamUtils, IInputRenderlessParams, IInputState } from 'types/input.type'
const HIDDEN_STYLE = `
height:0 !important;visibility:hidden !important;overflow:hidden !important;
@@ -340,11 +334,9 @@ export const handleCompositionEnd =
}
export const calcIconOffset =
- ({ CLASS_PREFIX, parent }: Pick & { CLASS_PREFIX: IInputClassPrefixConstants }) =>
+ ({ vm, parent }: Pick) =>
(place: 'prefix' | 'suffix'): void => {
- const elList = [].slice.call(
- parent.$el.querySelectorAll(`.${CLASS_PREFIX.Input}${place}`) || []
- ) as unknown as HTMLElement[]
+ const elList = vm.$refs[place] ? [vm.$refs[place]] : []
if (!elList.length) {
return
@@ -367,11 +359,11 @@ export const calcIconOffset =
const pendant = pendantMap[place]
if (parent.$slots[pendant]) {
- const dom = parent.$el.querySelector(`.${CLASS_PREFIX.InputGroup}${pendant}`)
+ const dom = vm.$refs[pendant]
let transform
if (place === 'suffix') {
- transform = `translateX(-${dom.offsetWidth}px)`
+ transform = `translateX(-${dom.offsetWidth}px) translateY(-50%)`
} else if (place === 'prefix') {
transform = `translate(${dom.offsetWidth}px, -50%)`
}
diff --git a/packages/renderless/src/input/vue.ts b/packages/renderless/src/input/vue.ts
index d7eed2338..8985102e6 100644
--- a/packages/renderless/src/input/vue.ts
+++ b/packages/renderless/src/input/vue.ts
@@ -15,7 +15,6 @@ import type {
IInputState,
ISharedRenderlessParamHooks,
IInputRenderlessParamUtils,
- IInputClassPrefixConstants,
IInputEventNameConstants,
IInputRenderlessParams
} from '@/types'
@@ -195,15 +194,12 @@ const initApi = ({
emit,
vm,
props,
- CLASS_PREFIX,
parent,
nextTick
}: Pick<
IInputRenderlessParams,
'api' | 'state' | 'dispatch' | 'broadcast' | 'emit' | 'refs' | 'props' | 'parent' | 'vm' | 'nextTick'
-> & {
- CLASS_PREFIX: IInputClassPrefixConstants
-}) => {
+>) => {
Object.assign(api, {
state,
dispatch,
@@ -214,7 +210,7 @@ const initApi = ({
setShowMoreBtn: setShowMoreBtn({ state, vm }),
handleChange: handleChange(emit),
watchFormSelect: watchFormSelect({ emit, props, state }),
- calcIconOffset: calcIconOffset({ CLASS_PREFIX, parent }),
+ calcIconOffset: calcIconOffset({ vm, parent }),
getSuffixVisible: getSuffixVisible({ parent, props, state }),
calculateNodeStyling: calculateNodeStyling(),
handleCompositionStart: handleCompositionStart(state),
@@ -388,13 +384,9 @@ export const renderless = (
const api = {} as IInputApi
const componentName = constants.COMPONENT_NAME.FormItem
const eventName: IInputEventNameConstants = { change: 'form.change', blur: 'form.blur' }
- const CLASS_PREFIX: IInputClassPrefixConstants = {
- Input: constants.inputMode(mode),
- InputGroup: constants.inputGroupMode(mode)
- }
const state = initState({ reactive, computed, mode, props, parent, constants, api, vm, designConfig })
- initApi({ api, state, dispatch, broadcast, emit, refs, props, CLASS_PREFIX, parent, vm, nextTick })
+ initApi({ api, state, dispatch, broadcast, emit, refs, props, parent, vm, nextTick })
const storages = useStorageBox({ api, props, reactive, toRefs })
diff --git a/packages/renderless/src/locales/index.ts b/packages/renderless/src/locales/index.ts
index fa397b963..114476206 100644
--- a/packages/renderless/src/locales/index.ts
+++ b/packages/renderless/src/locales/index.ts
@@ -10,7 +10,7 @@
*
*/
-import { xss } from '../common'
+import { xss } from '../common/xss'
export const getLocales =
({ api, service, state }) =>
@@ -33,16 +33,10 @@ export const switchLanguage =
({ api, state, service }) =>
(lang) => {
const { locales, current } = state
- const domain = service.getDomain()
const hasMultiLocale = state.locales.length === 2
state.current = hasMultiLocale ? (state.current = locales.indexOf(current) === 0 ? locales[1] : locales[0]) : lang
- const expires = new Date(new Date().getTime() + 3600000).toGMTString()
- const currLang = state.current.substring(0, 2) === 'zh' ? 'zh' : 'en'
-
- document.cookie = `lang=${currLang};expires=${expires};domain=${domain};path=/`
-
api.setText()
}
diff --git a/packages/renderless/src/logout/index.ts b/packages/renderless/src/logout/index.ts
index 7676c3357..205efe5ab 100644
--- a/packages/renderless/src/logout/index.ts
+++ b/packages/renderless/src/logout/index.ts
@@ -10,7 +10,7 @@
*
*/
-import { xss } from '../common'
+import { xss } from '../common/xss'
export const logout =
({ service, state, props }) =>
diff --git a/packages/renderless/src/modal/index.ts b/packages/renderless/src/modal/index.ts
index 511bc4ef9..9e480b23b 100644
--- a/packages/renderless/src/modal/index.ts
+++ b/packages/renderless/src/modal/index.ts
@@ -138,6 +138,7 @@ export const beforeUnmouted =
isMobileFirstMode && off(window, 'resize', api.resetDragStyle)
off(document, 'keydown', api.handleGlobalKeydownEvent)
off(window, 'hashchange', api.handleHashChange)
+ off(window, 'resize', api.resetModalViewPosition)
api.removeMsgQueue()
api.hideScrollbar()
@@ -292,13 +293,13 @@ export const open =
} else {
modalBoxElem.style.left = `${clientVisibleWidth / 2 - modalBoxElem.offsetWidth / 2}px`
}
-
if (
modalBoxElem.offsetHeight + modalBoxElem.offsetTop + (props.marginSize as number) >
clientVisibleHeight
) {
modalBoxElem.style.top = `${props.marginSize}px`
}
+ on(window, 'resize', api.resetModalViewPosition)
}
if (props.fullscreen) {
@@ -915,3 +916,11 @@ export const showScrollbar = (lockScrollClass) => () => {
export const hideScrollbar = (lockScrollClass) => () => {
removeClass(document.body, lockScrollClass)
}
+
+export const resetModalViewPosition = (api: IModalApi) => () => {
+ const modalBoxElement = api.getBox()
+ const viewportWindow = getViewportWindow()
+ const clientVisibleWidth =
+ viewportWindow.document.documentElement.clientWidth || viewportWindow.document.body.clientWidth
+ modalBoxElement.style.left = `${clientVisibleWidth / 2 - modalBoxElement.offsetWidth / 2}px`
+}
diff --git a/packages/renderless/src/modal/vue.ts b/packages/renderless/src/modal/vue.ts
index 816cd5161..bc84b1ae8 100644
--- a/packages/renderless/src/modal/vue.ts
+++ b/packages/renderless/src/modal/vue.ts
@@ -37,6 +37,7 @@ import {
cancelEvent,
open,
resetDragStyle,
+ resetModalViewPosition,
computedBoxStyle,
handleHashChange,
showScrollbar,
@@ -64,7 +65,8 @@ export const api = [
'cancelEvent',
'open',
'beforeUnmouted',
- 'resetDragStyle'
+ 'resetDragStyle',
+ 'resetModalViewPosition'
]
export const renderless = (
@@ -121,6 +123,7 @@ export const renderless = (
mousedownEvent: mousedownEvent({ api, nextTick, props, state, emit, isMobileFirstMode }),
dragEvent: dragEvent({ api, emit, parent, props, state }),
resetDragStyle: resetDragStyle(api),
+ resetModalViewPosition: resetModalViewPosition(api),
computedBoxStyle: computedBoxStyle({ props, isMobileFirstMode }),
watchVisible: watchVisible({ api, props }),
hideScrollbar: hideScrollbar(lockScrollClass),
diff --git a/packages/renderless/src/nav-menu/index.ts b/packages/renderless/src/nav-menu/index.ts
index c2f223510..1e05f20d8 100644
--- a/packages/renderless/src/nav-menu/index.ts
+++ b/packages/renderless/src/nav-menu/index.ts
@@ -23,7 +23,7 @@ import PopupManager from '../common/deps/popup-manager'
import { mapTree } from '../grid/static'
import { transformTreeData } from '../common/array'
import { on, off } from '../common/deps/dom'
-import { xss } from '../common/xss.js'
+import { xss } from '../common/xss'
const { nextZIndex } = PopupManager
diff --git a/packages/renderless/src/picker/index.ts b/packages/renderless/src/picker/index.ts
index 613abec23..421182ca5 100644
--- a/packages/renderless/src/picker/index.ts
+++ b/packages/renderless/src/picker/index.ts
@@ -66,7 +66,7 @@ export const watchMobileVisible =
export const watchPickerVisible =
({ api, vm, dispatch, emit, props, state, nextTick }) =>
(value) => {
- if (props.readonly || state.pickerDisabled || state.isMobileMode) return
+ if (props.readonly || state.pickerDisabled || state.isMobileScreen) return
if (value) {
api.showPicker()
@@ -939,9 +939,9 @@ export const handleFocus =
const type = state.type
if (DATEPICKER.TriggerTypes.includes(type)) {
- if (state.isMobileMode && state.isDateMobileComponent) {
+ if (state.isMobileScreen && state.isDateMobileComponent) {
api.dateMobileToggle(true)
- } else if (state.isMobileMode && state.isTimeMobileComponent) {
+ } else if (state.isMobileScreen && state.isTimeMobileComponent) {
api.timeMobileToggle(true)
} else {
state.pickerVisible = true
diff --git a/packages/renderless/src/picker/vue.ts b/packages/renderless/src/picker/vue.ts
index dfb3e7ec0..5db6136bd 100644
--- a/packages/renderless/src/picker/vue.ts
+++ b/packages/renderless/src/picker/vue.ts
@@ -143,7 +143,7 @@ const initState = ({ api, reactive, vm, computed, props, utils, parent, breakpoi
labelTooltip: '',
displayOnlyTooltip: '',
isDisplayOnly: computed(() => props.displayOnly || (parent.tinyForm || {}).displayOnly),
- isMobileMode: computed(() => vm.$mode.includes('mobile')),
+ isMobileScreen: computed(() => breakpoint.current.value === 'default'),
dateMobileOption: {
visible: false,
type: props.type,
diff --git a/packages/renderless/src/rich-text/table-module.ts b/packages/renderless/src/rich-text/table-module.ts
index 2594ac5de..d44e6e04d 100644
--- a/packages/renderless/src/rich-text/table-module.ts
+++ b/packages/renderless/src/rich-text/table-module.ts
@@ -25,8 +25,8 @@ function addMatcherTr({ _quill, oper }) {
})
}
-function addMatcherTd({ _quill, oper, Delta }) {
- _quill.clipboard.addMatcher('TD', function (node, delta) {
+function addMatcherTdOrTh({ _quill, oper, Delta, tagName }) {
+ _quill.clipboard.addMatcher(tagName, function (node, delta) {
const tableId = oper.getTableId()
const rowId = oper.getRowId()
const cellId = cellName()
@@ -104,7 +104,8 @@ function addMatcher({ qil: _quill, Delta }) {
addMatcherTable({ _quill, oper })
addMatcherTr({ _quill, oper })
- addMatcherTd({ _quill, oper, Delta })
+ addMatcherTdOrTh({ _quill, oper, Delta, tagName: 'TD' })
+ addMatcherTdOrTh({ _quill, oper, Delta, tagName: 'TH' })
// 移除table/tr, tr/td间空白符
addMatcher3(_quill)
// word粘贴到IE里会出现几个空内容的font标签
diff --git a/packages/renderless/src/roles/index.ts b/packages/renderless/src/roles/index.ts
index 7ead14006..e1452d49e 100644
--- a/packages/renderless/src/roles/index.ts
+++ b/packages/renderless/src/roles/index.ts
@@ -10,7 +10,7 @@
*
*/
-import { xss } from '../common'
+import { xss } from '../common/xss'
export const showList = (state) => () => (state.showPopover = true)
diff --git a/packages/renderless/src/selected-box/vue.ts b/packages/renderless/src/selected-box/vue.ts
index 9ff0e5afe..e7817176b 100644
--- a/packages/renderless/src/selected-box/vue.ts
+++ b/packages/renderless/src/selected-box/vue.ts
@@ -57,7 +57,8 @@ export const renderless = (
popoverContent: '',
dragInstance: null,
slotParams: computed(() => ({ inverse: state.inverse, total: state.total, select: state.select })),
- showClear: computed(() => api.computedShowClear())
+ showClear: computed(() => api.computedShowClear()),
+ theme: vm.theme
})
const api = {
diff --git a/packages/renderless/src/tabbar-item/vue.ts b/packages/renderless/src/tabbar-item/vue.ts
index d55e5b1b8..bb8b2e0f3 100644
--- a/packages/renderless/src/tabbar-item/vue.ts
+++ b/packages/renderless/src/tabbar-item/vue.ts
@@ -11,7 +11,7 @@
*/
import { getRouteActive, onClick, bindChildren, routeTab, getTabbarItemsWidth } from './index'
-import { xss } from '../common'
+import { xss } from '../common/xss'
export const api = ['state', 'onClick', 'getTabbarItemsWidth']
diff --git a/packages/renderless/src/toggle-menu/index.ts b/packages/renderless/src/toggle-menu/index.ts
index ebdaddd05..7cccbd87e 100644
--- a/packages/renderless/src/toggle-menu/index.ts
+++ b/packages/renderless/src/toggle-menu/index.ts
@@ -10,7 +10,7 @@
*
*/
-import { xss } from '../common/xss.js'
+import { xss } from '../common/xss'
import { isObject } from '../common/type'
export const filterNode = (props) => (value, data) => {
diff --git a/packages/renderless/src/user-contact/vue.ts b/packages/renderless/src/user-contact/vue.ts
index 9776e23e5..a3c90687c 100644
--- a/packages/renderless/src/user-contact/vue.ts
+++ b/packages/renderless/src/user-contact/vue.ts
@@ -13,18 +13,29 @@
import { init } from '../common/deps/eSpaceCtrl'
import { getUserHref, doUserAction, initEspaceLink, openEspace } from './index'
import { testUID } from '../espace'
+import type {
+ IUserContactApi,
+ IUserContactProps,
+ IUserContactState,
+ ISharedRenderlessParamHooks,
+ IUserContactRenderlessParamUtils
+} from '@/types'
export const api = ['show', 'getUserHref', 'doUserAction', 'initEspaceLink', 'openEspace', 'testUID']
-export const renderless = (props, { reactive, ref }, { service }) => {
- const api = {}
+export const renderless = (
+ props: IUserContactProps,
+ { reactive, ref }: ISharedRenderlessParamHooks,
+ { service }: IUserContactRenderlessParamUtils
+): IUserContactApi => {
+ const api = {} as IUserContactApi
const { setting = {} } = service || {}
const { widgets = {} } = setting
const eSpaceCtrlDisabled = widgets.ESpaceCtrl && !widgets.ESpaceCtrl.autoLink
const eSpaceCtrl = eSpaceCtrlDisabled ? {} : init()
- const state = reactive({
+ const state: IUserContactState = reactive({
initialized: false
})
diff --git a/packages/renderless/types/modal.type.ts b/packages/renderless/types/modal.type.ts
index c989871d9..04fac1cba 100644
--- a/packages/renderless/types/modal.type.ts
+++ b/packages/renderless/types/modal.type.ts
@@ -63,6 +63,7 @@ export interface IModalApi {
mousedownEvent: (event: MouseEvent) => void
dragEvent: (event: MouseEvent) => void
resetDragStyle: () => void
+ resetModalViewPosition: () => void
}
export type IModalRenderlessParamUtils = ISharedRenderlessParamUtils
diff --git a/packages/renderless/types/user-contact.type.ts b/packages/renderless/types/user-contact.type.ts
index e69de29bb..22ca15ea6 100644
--- a/packages/renderless/types/user-contact.type.ts
+++ b/packages/renderless/types/user-contact.type.ts
@@ -0,0 +1,29 @@
+import type { ExtractPropTypes, ref } from 'vue'
+import type { userContactProps } from '@/user-contact/src'
+import type { ISharedRenderlessFunctionParams, ISharedRenderlessParamUtils } from './shared.type'
+import type { getUserHref, doUserAction, initEspaceLink, openEspace } from '../src/user-contact'
+import type { testUID } from '../src/espace'
+
+export type IUserContactProps = ExtractPropTypes
+
+export interface IUserContactState {
+ initialized: boolean
+}
+
+export type IUserContactRenderlessParams = ISharedRenderlessFunctionParams & {
+ api: IUserContactApi
+ state: IUserContactState
+ props: IUserContactProps
+}
+
+export interface IUserContactApi {
+ state: IUserContactState
+ testUID: ReturnType
+ show: ReturnType
+ getUserHref: ReturnType
+ initEspaceLink: ReturnType
+ doUserAction: ReturnType
+ openEspace: ReturnType
+}
+
+export type IUserContactRenderlessParamUtils = ISharedRenderlessParamUtils
diff --git a/packages/theme-saas/src/svgs/agency.svg b/packages/theme-saas/src/svgs/agency.svg
new file mode 100644
index 000000000..7910aaaeb
--- /dev/null
+++ b/packages/theme-saas/src/svgs/agency.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/theme-saas/src/svgs/feedback.svg b/packages/theme-saas/src/svgs/feedback.svg
new file mode 100644
index 000000000..e572b091f
--- /dev/null
+++ b/packages/theme-saas/src/svgs/feedback.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/theme-saas/src/svgs/fullscreen-right.svg b/packages/theme-saas/src/svgs/fullscreen-right.svg
new file mode 100644
index 000000000..4c8700113
--- /dev/null
+++ b/packages/theme-saas/src/svgs/fullscreen-right.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/theme-saas/src/svgs/locale-panel.svg b/packages/theme-saas/src/svgs/locale-panel.svg
new file mode 100644
index 000000000..fe1ab3815
--- /dev/null
+++ b/packages/theme-saas/src/svgs/locale-panel.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/theme-saas/src/svgs/refresh.svg b/packages/theme-saas/src/svgs/refresh.svg
index c0ed6fa7c..2a77716d1 100644
--- a/packages/theme-saas/src/svgs/refresh.svg
+++ b/packages/theme-saas/src/svgs/refresh.svg
@@ -1,14 +1,7 @@
-
-
-
+
\ No newline at end of file
diff --git a/packages/theme-saas/src/svgs/shutdown.svg b/packages/theme-saas/src/svgs/shutdown.svg
new file mode 100644
index 000000000..98cb80727
--- /dev/null
+++ b/packages/theme-saas/src/svgs/shutdown.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/theme-saas/src/svgs/synchronize.svg b/packages/theme-saas/src/svgs/synchronize.svg
new file mode 100644
index 000000000..970ed136d
--- /dev/null
+++ b/packages/theme-saas/src/svgs/synchronize.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/theme-saas/src/svgs/update.svg b/packages/theme-saas/src/svgs/update.svg
new file mode 100644
index 000000000..5a2eec6bb
--- /dev/null
+++ b/packages/theme-saas/src/svgs/update.svg
@@ -0,0 +1,7 @@
+
diff --git a/packages/theme/src/calendar-view/index.less b/packages/theme/src/calendar-view/index.less
index c079b9f35..733fd8197 100644
--- a/packages/theme/src/calendar-view/index.less
+++ b/packages/theme/src/calendar-view/index.less
@@ -34,6 +34,9 @@
&__header div:first-child {
flex-grow: 1;
}
+ &__header div:first-child{
+ flex-grow: 1;
+ }
&__picker {
flex-shrink: 0;
diff --git a/packages/theme/src/dialog-select/index.less b/packages/theme/src/dialog-select/index.less
index 26a5d78f5..69636f54b 100644
--- a/packages/theme/src/dialog-select/index.less
+++ b/packages/theme/src/dialog-select/index.less
@@ -14,34 +14,76 @@
@import './vars.less';
@dialog-select-prefix-cls: ~'@{css-prefix}dialog-select';
-@dialog-box-prefix-cls: ~'@{css-prefix}dialog-box';
.@{dialog-select-prefix-cls} {
- .component-css-vars-dialog-select();
-
- .@{dialog-box-prefix-cls}__body {
- margin-top: var(--ti-dialog-box-body-margin-top);
- margin-bottom: var(--ti-dialog-box-body-margin-bottom);
- }
+ .inject-DialogSelect-vars();
.@{dialog-select-prefix-cls}__body {
+ &-search {
+ margin-bottom: var(--tv-DialogSelect-search-margin-bottom);
+ }
- &-search,
&-selector {
- margin-bottom: var(--ti-dialog-select-body-margin-bottom);
+ .tiny-split-pane {
+ &.left-pane {
+ padding-right: var(--tv-DialogSelect-split-pane-padding-right-left);
+ }
+ }
+
+ .tiny-split-trigger-con-simple:hover {
+ .tiny-split-trigger {
+ background: transparent;
+ }
+ }
+
+ .tiny-split-trigger-vertical {
+ background-color: transparent;
+ }
+ }
+
+ &-grid {
+ border: var(--tv-DialogSelect-body-box-border);
+ border-radius: var(--tv-DialogSelect-border-radius);
+ overflow: hidden;
}
&-tree {
- margin-right: var(--ti-dialog-select-tree-margin-right);
+ margin-right: var(--tv-DialogSelect-tree-margin-right);
+
+ .tiny-input-prefix .tiny-input__inner {
+ padding-left: var(--tv-DialogSelect-search-input-padding-left);
+ }
+
+ .tiny-input__prefix {
+ display: inline-block;
+
+ .tiny-svg {
+ font-size: var(--tv-DialogSelect-icon-size);
+ }
+ }
+
+ &-wrapper {
+ margin-top: var(--tv-DialogSelect-tree-wrapper-margin-top);
+ border: var(--tv-DialogSelect-body-box-border);
+ border-radius: var(--tv-DialogSelect-border-radius);
+ padding: var(--tv-DialogSelect-tree-wrapper-padding);
+
+ > div {
+ height: 100%;
+ overflow: auto;
+
+ .tiny-tree {
+ padding: 0;
+ }
+ }
+ }
}
&-box {
- border: var(--ti-dialog-select-body-box-border-weight) var(--ti-dialog-select-body-box-border-style) var(--ti-dialog-select-body-box-border-color);
- border-left: none;
- }
-
- &-tree-wrapper {
- overflow: auto;
+ border: var(--tv-DialogSelect-body-box-border);
+ border-radius: var(--tv-DialogSelect-border-radius);
+ margin-left: var(--tv-DialogSelect-box-margin-left);
+ overflow: hidden;
}
}
@@ -49,34 +91,26 @@
display: flex;
justify-content: space-between;
align-items: center;
- padding: var(--ti-dialog-select-footer-padding-vertical) var(--ti-dialog-select-footer-padding-horizontal);
&-pager {
.tiny-pager {
- padding: var(--ti-dialog-select-pager-padding-vertical) var(--ti-dialog-select-pager-padding-horizontal);
+ padding: 0;
&__btn-prev {
- margin-left: var(--ti-dialog-select-pager-prev-margin-left);
+ margin-left: 0;
}
}
}
}
- .tiny-grid__body-wrapper {
- border-bottom: var(--ti-dialog-select-grid-body-border-weight-bottom);
- }
-
.tiny-split-trigger-con-vertical.tiny-split-trigger-con-simple {
- padding-left: var(--ti-dialog-select-split-simple-padding-left);
- padding-right: var(--ti-dialog-select-split-simple-padding-right);
- }
-
- .tiny-split-trigger-vertical {
- background-color: var(--ti-dialog-select-split-bg-color);
+ padding: var(--tv-DialogSelect-split-trigger-padding);
}
.tiny-split-wrapper {
box-shadow: none;
+ border: none;
+ border-radius: 0;
}
&.radio-check {
@@ -85,7 +119,27 @@
}
.tiny-dialog-select__body-tree {
- margin-right: var(--ti-dialog-select-tree-radio-margin-right);
+ margin-right: 0;
+ }
+
+ .@{dialog-select-prefix-cls}__body-grid {
+ border: none;
+ border-radius: 0;
+ overflow: auto;
}
}
-}
\ No newline at end of file
+
+ &.is-tree {
+ .tiny-split-pane {
+ &.left-pane {
+ padding-right: 0;
+ }
+
+ &.right-pane {
+ .tiny-dialog-select__body-box {
+ margin-left: 0;
+ }
+ }
+ }
+ }
+}
diff --git a/packages/theme/src/dialog-select/vars.less b/packages/theme/src/dialog-select/vars.less
index 513428f92..c16509504 100644
--- a/packages/theme/src/dialog-select/vars.less
+++ b/packages/theme/src/dialog-select/vars.less
@@ -10,39 +10,31 @@
*
*/
-.component-css-vars-dialog-select() {
- // 弹窗主体的顶部外边距
- --ti-dialog-box-body-margin-top: var(--ti-common-space-4x, 16px);
- // 弹窗主体的底部外边距
- --ti-dialog-box-body-margin-bottom: var(--ti-common-space-0, 0px);
- // 选择主体的底部外边距
- --ti-dialog-select-body-margin-bottom: var(--ti-common-space-4x, 16px);
+.inject-DialogSelect-vars() {
+ // 左侧表格的圆角
+ --tv-DialogSelect-border-radius: var(--tv-border-radius-md, 6px);
+ // 图标尺寸
+ --tv-DialogSelect-icon-size: var(--tv-icon-size, 16px);
+
+ // 搜索区域底部外边距
+ --tv-DialogSelect-search-margin-bottom: var(--tv-space-md, 8px);
+ // 搜索框左侧内间距
+ --tv-DialogSelect-search-input-padding-left: 32px;
+
// 树选择的右侧外边距
- --ti-dialog-select-tree-margin-right: var(--ti-common-space-2x, 8px);
+ --tv-DialogSelect-tree-margin-right: var(--tv-space-md, 8px);
+ // 树容器内边距
+ --tv-DialogSelect-tree-wrapper-padding: var(--tv-space-md, 8px) var(--tv-space-sm, 4px) var(--tv-space-md, 8px)
+ var(--tv-space-xl, 16px);
+ // 树容器顶部外边距
+ --tv-DialogSelect-tree-wrapper-margin-top: var(--tv-space-md, 8px);
// 选择主体的边框粗细
- --ti-dialog-select-body-box-border-weight: var(--ti-common-border-weight-normal, 1px);
- // 选择主体的边框样式
- --ti-dialog-select-body-box-border-style: var(--ti-common-border-style-solid, solid);
- // 选择主题的边框颜色
- --ti-dialog-select-body-box-border-color: var(--ti-common-color-line-normal, #c2c2c2);
- // 选择底部的水平方向内边距
- --ti-dialog-select-footer-padding-horizontal: var(--ti-common-space-6x, 24px);
- // 选择底部的垂直方向的内边距
- --ti-dialog-select-footer-padding-vertical: var(--ti-common-space-0, 0px);
- // 分页的水平方向内边距
- --ti-dialog-select-pager-padding-horizontal: var(--ti-common-space-0, 0px);
- // 分页的垂直方向内边距
- --ti-dialog-select-pager-padding-vertical: var(--ti-common-space-0, 0px);
- // 分页的上一页按钮的左侧外边距
- --ti-dialog-select-pager-prev-margin-left: var(--ti-common-space-0, 0px);
- // 表格主体的底部边框
- --ti-dialog-select-grid-body-border-weight-bottom: var(--ti-common-space-0, 0px);
- // 树单选时右侧外边距
- --ti-dialog-select-tree-radio-margin-right: var(--ti-common-space-0, 0px);
- // 面板分割线的背景色
- --ti-dialog-select-split-bg-color: rgba(22, 30, 38, 0.2);
+ --tv-DialogSelect-body-box-border: var(--tv-border-width, 1px) solid var(--tv-color-border, #c2c2c2);
+ // 右侧选择框的左侧外边距
+ --tv-DialogSelect-box-margin-left: var(--tv-space-sm, 4px);
+
// 面板分割线左侧内边距
- --ti-dialog-select-split-simple-padding-left: var(--ti-common-dropdown-gap, 4px);
- // 面板分割线右侧内边距
- --ti-dialog-select-split-simple-padding-right: var(--ti-common-dropdown-gap, 4px);
-}
\ No newline at end of file
+ --tv-DialogSelect-split-trigger-padding: 0 var(--tv-space-sm, 4px);
+ // 左侧面板的右侧内间距
+ --tv-DialogSelect-split-pane-padding-right-left: var(--tv-space-sm, 4px);
+}
diff --git a/packages/theme/src/grid/table.less b/packages/theme/src/grid/table.less
index c00ea8b82..10b68ba3f 100644
--- a/packages/theme/src/grid/table.less
+++ b/packages/theme/src/grid/table.less
@@ -418,7 +418,8 @@
background-color: var(--tv-Grid-bg-color);
// 勾选某一行时的背景颜色
- &.row__selected {
+ &.row__selected,
+ &.row__radio {
background-color: var(--tv-Grid-bg-color-selected);
}
// 选中某一行时的背景颜色
diff --git a/packages/theme/src/selected-box/index.less b/packages/theme/src/selected-box/index.less
index b197ca224..03d4ed08e 100644
--- a/packages/theme/src/selected-box/index.less
+++ b/packages/theme/src/selected-box/index.less
@@ -1,23 +1,27 @@
@import '../custom.less';
+@import './vars.less';
+
@selected-box-prefix-cls: ~'@{css-prefix}selected-box';
.@{selected-box-prefix-cls} {
+ .inject-SelectedBox-vars();
+
height: 100%;
- margin-left: 0.5rem;
- margin-right: 0.5rem;
display: grid;
grid-template-columns: repeat(1, minmax(0, 1fr));
- grid-template-rows: 36px auto;
- background-color: rgb(255 255 255);
+ grid-template-rows: var(--tv-SelectedBox-header-height) auto;
+ background-color: var(--tv-SelectedBox-bg-color);
+ font-size: var(--tv-SelectedBox-font-size);
+ line-height: var(--tv-SelectedBox-line-height);
+ color: var(--ti-selected-text-color);
.@{selected-box-prefix-cls}__header {
display: flex;
justify-content: space-between;
align-items: center;
- font-size: 0.75rem;
- color: #191919;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
+ padding: var(--tv-SelectedBox-header-padding);
+ border-bottom: var(--tv-SelectedBox-header-border);
+ height: var(--tv-SelectedBox-header-height);
.@{selected-box-prefix-cls}__header-select {
max-width: 8rem;
@@ -30,7 +34,7 @@
.@{selected-box-prefix-cls}__header-right {
display: flex;
user-select: none;
- color: #0067d1;
+ color: var(--tv-SelectedBox-text-color-clear);
> :not([hidden]) ~ :not([hidden]) {
margin-right: 0;
@@ -46,22 +50,19 @@
.@{selected-box-prefix-cls}__list {
overflow-x: hidden;
overflow-y: auto;
- font-size: 0.75rem;
- color: #191919;
+ padding: var(--tv-SelectedBox-list-padding);
.@{selected-box-prefix-cls}__item {
cursor: pointer;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- border-radius: 0.125rem;
+ padding: var(--tv-SelectedBox-item-padding);
&:hover {
- background-color: #f5f5f5;
+ background-color: var(--tv-SelectedBox-bg-color-hover);
}
.@{selected-box-prefix-cls}__item-grid {
display: grid;
- grid-template-columns: auto 24px;
+ grid-template-columns: auto var(--tv-SelectedBox-item-right-width);
.@{selected-box-prefix-cls}__item-grid-left {
overflow: hidden;
@@ -69,61 +70,65 @@
white-space: nowrap;
.@{selected-box-prefix-cls}__item-grid-left-label {
- height: 1.75rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- transform: translateY(0.25rem);
.@{selected-box-prefix-cls}__item-grid-left-label-pri {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
position: relative;
- top: 50%;
- transform: translateY(-50%);
}
}
.@{selected-box-prefix-cls}__item-grid-left-text {
- height: 1.75rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- transform: translateY(-0.25rem);
.@{selected-box-prefix-cls}__item-grid-left-text-aux {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- color: #939393;
+ color: var(--tv-SelectedBox-item-aux-text-color);
position: relative;
- top: 50%;
- transform: translateY(-50%);
}
}
}
.@{selected-box-prefix-cls}__item-grid-right {
- height: 1.75rem;
- transform: translateY(0.25rem);
display: flex;
align-items: center;
justify-content: flex-end;
- fill: #393939;
+ fill: var(--tv-SelectedBox-icon-color);
+ height: var(--tv-SelectedBox-item-right-height);
+
+ .tiny-svg {
+ font-size: var(--tv-SelectedBox-icon-size);
+ }
&:hover {
- fill: #0072e8;
+ fill: var(--tv-SelectedBox-icon-color-hover);
}
}
}
}
+
+ &-empty {
+ text-align: center;
+ color: var(--tv-SelectedBox-text-color-empty);
+
+ > div {
+ margin-top: 50%;
+ }
+ }
}
.@{selected-box-prefix-cls}__list--inverse {
text-decoration-line: line-through;
text-decoration-style: solid;
- text-decoration-color: #191919;
+ text-decoration-color: var(--tv-SelectedBox-text-color);
}
.@{selected-box-prefix-cls}__popover {
diff --git a/packages/theme/src/selected-box/vars.less b/packages/theme/src/selected-box/vars.less
new file mode 100644
index 000000000..30be508d3
--- /dev/null
+++ b/packages/theme/src/selected-box/vars.less
@@ -0,0 +1,56 @@
+/**
+* Copyright (c) 2022 - present TinyVue Authors.
+* Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+*
+* Use of this source code is governed by an MIT-style license.
+*
+* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+*
+*/
+
+.inject-SelectedBox-vars() {
+ // 文本色
+ --tv-SelectedBox-text-color: var(--tv-color-text, #191919);
+ // 字号
+ --tv-SelectedBox-font-size: var(--tv-font-size-md, 14px);
+ // 行高
+ --tv-SelectedBox-line-height: var(--tv-line-height-number, 1.5);
+ // 背景色
+ --tv-SelectedBox-bg-color: var(--tv-color-bg-secondary, #fff);
+ // 悬浮背景色
+ --tv-SelectedBox-bg-color-hover: var(--tv-color-bg-hover, #f5f5f5);
+
+ // 图标色
+ --tv-SelectedBox-icon-color: var(--tv-color-icon, #808080);
+ // 图标悬浮色
+ --tv-SelectedBox-icon-color-hover: var(--tv-color-icon-hover#191919);
+ // 图标尺寸
+ --tv-SelectedBox-icon-size: var(--tv-icon-size, 16px);
+
+ // 列表框内间距
+ --tv-SelectedBox-list-padding: var(--tv-space-md, 8px) 0;
+ // 空数据提示文本色
+ --tv-SelectedBox-text-color-empty: var(--tv-color-text-secondary, #595959);
+ // 清空按钮文本色
+ --tv-SelectedBox-text-color-clear: var(--tv-color-icon-link, #1476ff);
+
+ // 头部高度
+ --tv-SelectedBox-header-height: var(--tv-size-height-md, 32px);
+ //头部内间距
+ --tv-SelectedBox-header-padding: 0px var(--tv-space-lg, 12px);
+ // 头部分割线
+ --tv-SelectedBox-header-border: var(--tv-border-width, 1px) solid var(--tv-color-border-divider, #f0f0f0);
+
+ // 列表项内间距
+ --tv-SelectedBox-item-padding: 5.5px var(--tv-space-lg, 12px);
+ // 列表项右侧高度
+ --tv-SelectedBox-item-right-height: calc(
+ var(--tv-SelectedBox-line-height, 1.5) * var(--tv-SelectedBox-font-size, 14px)
+ );
+ // 列表项右侧宽度
+ --tv-SelectedBox-item-right-width: 24px;
+ // 列表项弱化文本色
+ --tv-SelectedBox-item-aux-text-color: var(--tv-color-text-weaken, #808080);
+}
diff --git a/packages/theme/src/svgs/agency.svg b/packages/theme/src/svgs/agency.svg
new file mode 100644
index 000000000..7910aaaeb
--- /dev/null
+++ b/packages/theme/src/svgs/agency.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/theme/src/svgs/app.svg b/packages/theme/src/svgs/app.svg
index ad5eddbe8..1cfcca3f1 100644
--- a/packages/theme/src/svgs/app.svg
+++ b/packages/theme/src/svgs/app.svg
@@ -1,6 +1,9 @@
-
-
\ No newline at end of file
+
diff --git a/packages/theme/src/svgs/chevron-down.svg b/packages/theme/src/svgs/chevron-down.svg
index ee2f28682..71787e8cf 100644
--- a/packages/theme/src/svgs/chevron-down.svg
+++ b/packages/theme/src/svgs/chevron-down.svg
@@ -1,15 +1,12 @@
-
\ No newline at end of file
+
+
diff --git a/packages/theme/src/svgs/chevron-left.svg b/packages/theme/src/svgs/chevron-left.svg
index cdbde3c56..adec662ad 100644
--- a/packages/theme/src/svgs/chevron-left.svg
+++ b/packages/theme/src/svgs/chevron-left.svg
@@ -1,13 +1,10 @@
-
-
-
diff --git a/packages/theme/src/svgs/mail.svg b/packages/theme/src/svgs/mail.svg
index 89c94a7eb..721a99b65 100644
--- a/packages/theme/src/svgs/mail.svg
+++ b/packages/theme/src/svgs/mail.svg
@@ -1,16 +1,10 @@
-
-
-
-
-
-
-
-
-
+
+
+ Created with Pixso.
+
+
+
+
+
-
-
\ No newline at end of file
+
diff --git a/packages/theme/src/svgs/minscreen-right.svg b/packages/theme/src/svgs/minscreen-right.svg
index d3e130b59..7b4a4b2e2 100644
--- a/packages/theme/src/svgs/minscreen-right.svg
+++ b/packages/theme/src/svgs/minscreen-right.svg
@@ -1,10 +1,10 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+ Created with Pixso.
+
+
+
+
+
+
+
diff --git a/packages/theme/src/svgs/picture.svg b/packages/theme/src/svgs/picture.svg
index bf9b98ee4..38fdacfc0 100644
--- a/packages/theme/src/svgs/picture.svg
+++ b/packages/theme/src/svgs/picture.svg
@@ -1,18 +1,9 @@
-
-
-
-
-
-
-
-
-
+
+
+ Created with Pixso.
+
+
+
+
-
-
\ No newline at end of file
+
diff --git a/packages/theme/src/svgs/popup.svg b/packages/theme/src/svgs/popup.svg
index 2045fd6c4..fcddae578 100644
--- a/packages/theme/src/svgs/popup.svg
+++ b/packages/theme/src/svgs/popup.svg
@@ -1 +1,9 @@
-
\ No newline at end of file
+
+
+ Created with Pixso.
+
+
+
+
+
+
diff --git a/packages/theme/src/svgs/right-frozen.svg b/packages/theme/src/svgs/right-frozen.svg
index 3fdc42a1a..e98c6c4e4 100644
--- a/packages/theme/src/svgs/right-frozen.svg
+++ b/packages/theme/src/svgs/right-frozen.svg
@@ -1,25 +1,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+Created with Pixso.
+
+
+
diff --git a/packages/theme/src/svgs/setting.svg b/packages/theme/src/svgs/setting.svg
index 273f7d9ba..aefa63989 100644
--- a/packages/theme/src/svgs/setting.svg
+++ b/packages/theme/src/svgs/setting.svg
@@ -1,30 +1,9 @@
-
-
-
-
-
-
-
-
-
+
+
+ Created with Pixso.
+
+
+
+
-
-
\ No newline at end of file
+
diff --git a/packages/theme/src/svgs/shutdown.svg b/packages/theme/src/svgs/shutdown.svg
new file mode 100644
index 000000000..98cb80727
--- /dev/null
+++ b/packages/theme/src/svgs/shutdown.svg
@@ -0,0 +1,9 @@
+
+
+ Created with Pixso.
+
+
+
+
+
+
diff --git a/packages/theme/src/svgs/star-o.svg b/packages/theme/src/svgs/star-o.svg
index 97c686d32..83e96c6d3 100644
--- a/packages/theme/src/svgs/star-o.svg
+++ b/packages/theme/src/svgs/star-o.svg
@@ -1,20 +1,9 @@
-
-
-
-
-
-
-
-
-
+
+
+ Created with Pixso.
+
+
+
+
-
-
\ No newline at end of file
+
diff --git a/packages/theme/src/svgs/successful.svg b/packages/theme/src/svgs/successful.svg
index 28189d145..c11f32713 100644
--- a/packages/theme/src/svgs/successful.svg
+++ b/packages/theme/src/svgs/successful.svg
@@ -1,20 +1,9 @@
-
-
-
-
-
-
-
-
-
-
+
+
+ Created with Pixso.
+
+
+
+
-
-
\ No newline at end of file
+
diff --git a/packages/theme/src/svgs/synchronize.svg b/packages/theme/src/svgs/synchronize.svg
new file mode 100644
index 000000000..970ed136d
--- /dev/null
+++ b/packages/theme/src/svgs/synchronize.svg
@@ -0,0 +1,9 @@
+
+
+ Created with Pixso.
+
+
+
+
+
+
diff --git a/packages/theme/src/svgs/unlock.svg b/packages/theme/src/svgs/unlock.svg
index 346996141..2575766f1 100644
--- a/packages/theme/src/svgs/unlock.svg
+++ b/packages/theme/src/svgs/unlock.svg
@@ -1,18 +1,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+Created with Pixso.
+
+
diff --git a/packages/theme/src/svgs/update.svg b/packages/theme/src/svgs/update.svg
new file mode 100644
index 000000000..5a2eec6bb
--- /dev/null
+++ b/packages/theme/src/svgs/update.svg
@@ -0,0 +1,7 @@
+
+
+ Created with Pixso.
+
+
+
+
diff --git a/packages/theme/src/svgs/warn.svg b/packages/theme/src/svgs/warn.svg
index 026e9f303..959a1b5a6 100644
--- a/packages/theme/src/svgs/warn.svg
+++ b/packages/theme/src/svgs/warn.svg
@@ -1,13 +1,7 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+ Created with Pixso.
+
+
+
+
diff --git a/packages/theme/src/svgs/warning.svg b/packages/theme/src/svgs/warning.svg
index 6bbf04118..20be54b6f 100644
--- a/packages/theme/src/svgs/warning.svg
+++ b/packages/theme/src/svgs/warning.svg
@@ -1,16 +1,14 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
diff --git a/packages/theme/src/svgs/web-plus.svg b/packages/theme/src/svgs/web-plus.svg
index b8172cf59..fbb861a42 100644
--- a/packages/theme/src/svgs/web-plus.svg
+++ b/packages/theme/src/svgs/web-plus.svg
@@ -1,9 +1,9 @@
-
-
-
-
-
-
-
+
+
+ Created with Pixso.
+
+
+
+
+
diff --git a/packages/vue-common/src/index.ts b/packages/vue-common/src/index.ts
index e4edc64a5..4c7b59b18 100644
--- a/packages/vue-common/src/index.ts
+++ b/packages/vue-common/src/index.ts
@@ -256,7 +256,14 @@ export function svg({ name = 'Icon', component }) {
defineComponent({
name: $prefix + name,
setup: (props, context) => {
- const { fill, width, height, 'custom-class': customClass } = context.attrs || {}
+ const {
+ fill,
+ width,
+ height,
+ 'custom-class': customClass,
+ 'first-color': firstColor,
+ 'second-color': secondColor
+ } = context.attrs || {}
const mergeProps = Object.assign({}, props, propData || null)
const mode = resolveMode(mergeProps, context)
const isMobileFirst = mode === 'mobile-first'
@@ -271,7 +278,13 @@ export function svg({ name = 'Icon', component }) {
const extend = Object.assign(
{
- style: { fill, width, height },
+ style: {
+ fill,
+ width,
+ height,
+ '--tiny-first-color': firstColor || '',
+ '--tiny-second-color': secondColor || ''
+ },
class: className,
isSvg: true
},
diff --git a/packages/vue-icon-multicolor/CHANGELOG.md b/packages/vue-icon-multicolor/CHANGELOG.md
new file mode 100644
index 000000000..420e6f23d
--- /dev/null
+++ b/packages/vue-icon-multicolor/CHANGELOG.md
@@ -0,0 +1 @@
+# Change Log
diff --git a/packages/vue-icon-multicolor/index.ts b/packages/vue-icon-multicolor/index.ts
new file mode 100644
index 000000000..0ff50e327
--- /dev/null
+++ b/packages/vue-icon-multicolor/index.ts
@@ -0,0 +1,130 @@
+import ColorIconActivitys from './src/activitys'
+import ColorIconAdministrativeFees from './src/administrative-fees'
+import ColorIconAirFares from './src/air-fares'
+import ColorIconApply from './src/apply'
+import ColorIconArchives from './src/archives'
+import ColorIconBaggageFees from './src/baggage-fees'
+import ColorIconCarInsurance from './src/car-insurance'
+import ColorIconCarRental from './src/car-rental'
+import ColorIconCeremonyFees from './src/ceremony-fees'
+import ColorIconConolences from './src/condolences'
+import ColorIconEntertainmentExpense from './src/entertainment-expense'
+import ColorIconExpertConsultationFees from './src/expert-consultation-fees'
+import ColorIconExpertTeachingFees from './src/expert-teaching-fees'
+import ColorIconExpressDelivery from './src/express-delivery'
+import ColorIconFerryFares from './src/ferry-fares'
+import ColorIconFuelCost from './src/fuel-cost'
+import ColorIconGiftCost from './src/gift-cost'
+import ColorIconHousingSubsidy from './src/housing-subsidy'
+import ColorIconIncidentalExpenses from './src/incidental-expenses'
+import ColorIconLandlinePhone from './src/landline-phone'
+import ColorIconLineRental from './src/line-rental'
+import ColorIconLivingSubsidy from './src/living-subsidy'
+import ColorIconLodgingFees from './src/lodging-fees'
+import ColorIconMaintenanceService from './src/maintenance-service'
+import ColorIconMealAllowance from './src/meal-allowance'
+import ColorIconMealSubsidy from './src/meal-subsidy'
+import ColorIconMeetingExpenses from './src/meeting-expenses'
+import ColorIconNewspaperSubscription from './src/newspaper-subscription'
+import ColorIconOfficeEquipments from './src/office-equipments'
+import ColorIconOfficeSupplies from './src/office-supplies'
+import ColorIconOthers from './src/others'
+import ColorIconPhoneBills from './src/phone-bills'
+import ColorIconPhysicalExamination from './src/physical-examination'
+import ColorIconPrivateVehicleAllowance from './src/private-vehicle-allowance'
+import ColorIconServiceCharges from './src/service-charges'
+import ColorIconTaxiFares from './src/taxi-fares'
+import ColorIconTrainFares from './src/train-fares'
+import ColorIconTrainingFees from './src/training-fees'
+import ColorIconTravelExpenses from './src/travel-expenses'
+import ColorIconVenueHospitalityFees from './src/venue-hospitality-fees'
+import ColorIconVenueRentalFees from './src/venue-rental-fees'
+import ColorIconVisaFees from './src/visa-fees'
+
+export { ColorIconActivitys }
+export { ColorIconAdministrativeFees }
+export { ColorIconAirFares }
+export { ColorIconApply }
+export { ColorIconArchives }
+export { ColorIconBaggageFees }
+export { ColorIconCarInsurance }
+export { ColorIconCarRental }
+export { ColorIconCeremonyFees }
+export { ColorIconConolences }
+export { ColorIconEntertainmentExpense }
+export { ColorIconExpertConsultationFees }
+export { ColorIconExpertTeachingFees }
+export { ColorIconExpressDelivery }
+export { ColorIconFerryFares }
+export { ColorIconFuelCost }
+export { ColorIconGiftCost }
+export { ColorIconHousingSubsidy }
+export { ColorIconIncidentalExpenses }
+export { ColorIconLandlinePhone }
+export { ColorIconLineRental }
+export { ColorIconLivingSubsidy }
+export { ColorIconLodgingFees }
+export { ColorIconMaintenanceService }
+export { ColorIconMealAllowance }
+export { ColorIconMealSubsidy }
+export { ColorIconMeetingExpenses }
+export { ColorIconNewspaperSubscription }
+export { ColorIconOfficeEquipments }
+export { ColorIconOfficeSupplies }
+export { ColorIconOthers }
+export { ColorIconPhoneBills }
+export { ColorIconPhysicalExamination }
+export { ColorIconPrivateVehicleAllowance }
+export { ColorIconServiceCharges }
+export { ColorIconTaxiFares }
+export { ColorIconTrainFares }
+export { ColorIconTrainingFees }
+export { ColorIconTravelExpenses }
+export { ColorIconVenueHospitalityFees }
+export { ColorIconVenueRentalFees }
+export { ColorIconVisaFees }
+
+export default {
+ ColorIconActivitys,
+ ColorIconAdministrativeFees,
+ ColorIconAirFares,
+ ColorIconApply,
+ ColorIconArchives,
+ ColorIconBaggageFees,
+ ColorIconCarInsurance,
+ ColorIconCarRental,
+ ColorIconCeremonyFees,
+ ColorIconConolences,
+ ColorIconEntertainmentExpense,
+ ColorIconExpertConsultationFees,
+ ColorIconExpertTeachingFees,
+ ColorIconExpressDelivery,
+ ColorIconFerryFares,
+ ColorIconFuelCost,
+ ColorIconGiftCost,
+ ColorIconHousingSubsidy,
+ ColorIconIncidentalExpenses,
+ ColorIconLandlinePhone,
+ ColorIconLineRental,
+ ColorIconLivingSubsidy,
+ ColorIconLodgingFees,
+ ColorIconMaintenanceService,
+ ColorIconMealAllowance,
+ ColorIconMealSubsidy,
+ ColorIconMeetingExpenses,
+ ColorIconNewspaperSubscription,
+ ColorIconOfficeEquipments,
+ ColorIconOfficeSupplies,
+ ColorIconOthers,
+ ColorIconPhoneBills,
+ ColorIconPhysicalExamination,
+ ColorIconPrivateVehicleAllowance,
+ ColorIconServiceCharges,
+ ColorIconTaxiFares,
+ ColorIconTrainFares,
+ ColorIconTrainingFees,
+ ColorIconTravelExpenses,
+ ColorIconVenueHospitalityFees,
+ ColorIconVenueRentalFees,
+ ColorIconVisaFees
+}
diff --git a/packages/vue-icon-multicolor/package.json b/packages/vue-icon-multicolor/package.json
new file mode 100644
index 000000000..d6d60a22e
--- /dev/null
+++ b/packages/vue-icon-multicolor/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@opentiny/vue-icon-multicolor",
+ "version": "3.18.0",
+ "description": "",
+ "main": "index.ts",
+ "license": "MIT",
+ "sideEffects": false,
+ "exports": {
+ ".": "./index.ts",
+ "./*": "./src/*"
+ },
+ "dependencies": {
+ "@opentiny/vue-common": "workspace:~"
+ },
+ "scripts": {
+ "build": "pnpm -w build:ui $npm_package_name",
+ "//postversion": "pnpm build"
+ }
+}
diff --git a/packages/vue-icon-multicolor/src/activitys/index.ts b/packages/vue-icon-multicolor/src/activitys/index.ts
new file mode 100644
index 000000000..eb35d2fd4
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/activitys/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import Activitys from '../../svgs/activitys.svg'
+
+export default svg({ name: 'ColorIconActivitys', component: Activitys })
diff --git a/packages/vue-icon-multicolor/src/administrative-fees/index.ts b/packages/vue-icon-multicolor/src/administrative-fees/index.ts
new file mode 100644
index 000000000..11716f78b
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/administrative-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import AdministrativeFees from '../../svgs/administrative-fees.svg'
+
+export default svg({ name: 'ColorIconAdministrativeFees', component: AdministrativeFees })
diff --git a/packages/vue-icon-multicolor/src/air-fares/index.ts b/packages/vue-icon-multicolor/src/air-fares/index.ts
new file mode 100644
index 000000000..ff1607a58
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/air-fares/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import AirFares from '../../svgs/air-fares.svg'
+
+export default svg({ name: 'ColorIconAirFares', component: AirFares })
diff --git a/packages/vue-icon-multicolor/src/apply/index.ts b/packages/vue-icon-multicolor/src/apply/index.ts
new file mode 100644
index 000000000..7b22d0a49
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/apply/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import Apply from '../../svgs/apply.svg'
+
+export default svg({ name: 'ColorIconApply', component: Apply })
diff --git a/packages/vue-icon-multicolor/src/archives/index.ts b/packages/vue-icon-multicolor/src/archives/index.ts
new file mode 100644
index 000000000..34d36de01
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/archives/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import Archives from '../../svgs/archives.svg'
+
+export default svg({ name: 'ColorIconArchives', component: Archives })
diff --git a/packages/vue-icon-multicolor/src/baggage-fees/index.ts b/packages/vue-icon-multicolor/src/baggage-fees/index.ts
new file mode 100644
index 000000000..c357c495c
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/baggage-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import BaggageFees from '../../svgs/baggage-fees.svg'
+
+export default svg({ name: 'ColorIconBaggageFees', component: BaggageFees })
diff --git a/packages/vue-icon-multicolor/src/car-insurance/index.ts b/packages/vue-icon-multicolor/src/car-insurance/index.ts
new file mode 100644
index 000000000..1fd129f24
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/car-insurance/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import CarInsurance from '../../svgs/car-insurance.svg'
+
+export default svg({ name: 'ColorIconCarInsurance', component: CarInsurance })
diff --git a/packages/vue-icon-multicolor/src/car-rental/index.ts b/packages/vue-icon-multicolor/src/car-rental/index.ts
new file mode 100644
index 000000000..3d92f52d9
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/car-rental/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import CarRental from '../../svgs/car-rental.svg'
+
+export default svg({ name: 'ColorIconCarRental', component: CarRental })
diff --git a/packages/vue-icon-multicolor/src/ceremony-fees/index.ts b/packages/vue-icon-multicolor/src/ceremony-fees/index.ts
new file mode 100644
index 000000000..840ad70ef
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/ceremony-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import CeremonyFees from '../../svgs/ceremony-fees.svg'
+
+export default svg({ name: 'IconCeremonyFees', component: CeremonyFees })
diff --git a/packages/vue-icon-multicolor/src/condolences/index.ts b/packages/vue-icon-multicolor/src/condolences/index.ts
new file mode 100644
index 000000000..fd3b5f483
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/condolences/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import Conolences from '../../svgs/condolences.svg'
+
+export default svg({ name: 'ColorIconConolences', component: Conolences })
diff --git a/packages/vue-icon-multicolor/src/entertainment-expense/index.ts b/packages/vue-icon-multicolor/src/entertainment-expense/index.ts
new file mode 100644
index 000000000..406193aa3
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/entertainment-expense/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import EntertainmentExpense from '../../svgs/entertainment-expense.svg'
+
+export default svg({ name: 'IconEntertainmentExpense', component: EntertainmentExpense })
diff --git a/packages/vue-icon-multicolor/src/expert-consultation-fees/index.ts b/packages/vue-icon-multicolor/src/expert-consultation-fees/index.ts
new file mode 100644
index 000000000..5f6898bfe
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/expert-consultation-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import ExpertConsultationFees from '../../svgs/expert-consultation-fees.svg'
+
+export default svg({ name: 'ColorIconExpertConsultationFees', component: ExpertConsultationFees })
diff --git a/packages/vue-icon-multicolor/src/expert-teaching-fees/index.ts b/packages/vue-icon-multicolor/src/expert-teaching-fees/index.ts
new file mode 100644
index 000000000..782cf28ee
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/expert-teaching-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import ExpertTeachingFees from '../../svgs/expert-teaching-fees.svg'
+
+export default svg({ name: 'ColorIconExpertTeachingFees', component: ExpertTeachingFees })
diff --git a/packages/vue-icon-multicolor/src/express-delivery/index.ts b/packages/vue-icon-multicolor/src/express-delivery/index.ts
new file mode 100644
index 000000000..c8514cc43
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/express-delivery/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import ExpressDelivery from '../../svgs/express-delivery.svg'
+
+export default svg({ name: 'ColorIconExpressDelivery', component: ExpressDelivery })
diff --git a/packages/vue-icon-multicolor/src/ferry-fares/index.ts b/packages/vue-icon-multicolor/src/ferry-fares/index.ts
new file mode 100644
index 000000000..569aae2db
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/ferry-fares/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import FerryFares from '../../svgs/ferry-fares.svg'
+
+export default svg({ name: 'ColorIconFerryFares', component: FerryFares })
diff --git a/packages/vue-icon-multicolor/src/fuel-cost/index.ts b/packages/vue-icon-multicolor/src/fuel-cost/index.ts
new file mode 100644
index 000000000..421ccc927
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/fuel-cost/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import FuelCost from '../../svgs/fuel-cost.svg'
+
+export default svg({ name: 'ColorIconFuelCost', component: FuelCost })
diff --git a/packages/vue-icon-multicolor/src/gift-cost/index.ts b/packages/vue-icon-multicolor/src/gift-cost/index.ts
new file mode 100644
index 000000000..7e42b4217
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/gift-cost/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import GiftCost from '../../svgs/gift-cost.svg'
+
+export default svg({ name: 'ColorIconGiftCost', component: GiftCost })
diff --git a/packages/vue-icon-multicolor/src/housing-subsidy/index.ts b/packages/vue-icon-multicolor/src/housing-subsidy/index.ts
new file mode 100644
index 000000000..507142ee6
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/housing-subsidy/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import HousingSubsidy from '../../svgs/housing-subsidy.svg'
+
+export default svg({ name: 'ColorIconHousingSubsidy', component: HousingSubsidy })
diff --git a/packages/vue-icon-multicolor/src/incidental-expenses/index.ts b/packages/vue-icon-multicolor/src/incidental-expenses/index.ts
new file mode 100644
index 000000000..05f664eab
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/incidental-expenses/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import IncidentalExpenses from '../../svgs/incidental-expenses.svg'
+
+export default svg({ name: 'ColorIconIncidentalExpenses', component: IncidentalExpenses })
diff --git a/packages/vue-icon-multicolor/src/index.ts b/packages/vue-icon-multicolor/src/index.ts
new file mode 100644
index 000000000..76d0cfac9
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/index.ts
@@ -0,0 +1,130 @@
+import ColorIconActivitys from './activitys'
+import ColorIconAdministrativeFees from './administrative-fees'
+import ColorIconAirFares from './air-fares'
+import ColorIconApply from './apply'
+import ColorIconArchives from './archives'
+import ColorIconBaggageFees from './baggage-fees'
+import ColorIconCarInsurance from './car-insurance'
+import ColorIconCarRental from './car-rental'
+import ColorIconCeremonyFees from './ceremony-fees'
+import ColorIconConolences from './condolences'
+import ColorIconEntertainmentExpense from './entertainment-expense'
+import ColorIconExpertConsultationFees from './expert-consultation-fees'
+import ColorIconExpertTeachingFees from './expert-teaching-fees'
+import ColorIconExpressDelivery from './express-delivery'
+import ColorIconFerryFares from './ferry-fares'
+import ColorIconFuelCost from './fuel-cost'
+import ColorIconGiftCost from './gift-cost'
+import ColorIconHousingSubsidy from './housing-subsidy'
+import ColorIconIncidentalExpenses from './incidental-expenses'
+import ColorIconLandlinePhone from './landline-phone'
+import ColorIconLineRental from './line-rental'
+import ColorIconLivingSubsidy from './living-subsidy'
+import ColorIconLodgingFees from './lodging-fees'
+import ColorIconMaintenanceService from './maintenance-service'
+import ColorIconMealAllowance from './meal-allowance'
+import ColorIconMealSubsidy from './meal-subsidy'
+import ColorIconMeetingExpenses from './meeting-expenses'
+import ColorIconNewspaperSubscription from './newspaper-subscription'
+import ColorIconOfficeEquipments from './office-equipments'
+import ColorIconOfficeSupplies from './office-supplies'
+import ColorIconOthers from './others'
+import ColorIconPhoneBills from './phone-bills'
+import ColorIconPhysicalExamination from './physical-examination'
+import ColorIconPrivateVehicleAllowance from './private-vehicle-allowance'
+import ColorIconServiceCharges from './service-charges'
+import ColorIconTaxiFares from './taxi-fares'
+import ColorIconTrainFares from './train-fares'
+import ColorIconTrainingFees from './training-fees'
+import ColorIconTravelExpenses from './travel-expenses'
+import ColorIconVenueHospitalityFees from './venue-hospitality-fees'
+import ColorIconVenueRentalFees from './venue-rental-fees'
+import ColorIconVisaFees from './visa-fees'
+
+export { ColorIconActivitys }
+export { ColorIconAdministrativeFees }
+export { ColorIconAirFares }
+export { ColorIconApply }
+export { ColorIconArchives }
+export { ColorIconBaggageFees }
+export { ColorIconCarInsurance }
+export { ColorIconCarRental }
+export { ColorIconCeremonyFees }
+export { ColorIconConolences }
+export { ColorIconEntertainmentExpense }
+export { ColorIconExpertConsultationFees }
+export { ColorIconExpertTeachingFees }
+export { ColorIconExpressDelivery }
+export { ColorIconFerryFares }
+export { ColorIconFuelCost }
+export { ColorIconGiftCost }
+export { ColorIconHousingSubsidy }
+export { ColorIconIncidentalExpenses }
+export { ColorIconLandlinePhone }
+export { ColorIconLineRental }
+export { ColorIconLivingSubsidy }
+export { ColorIconLodgingFees }
+export { ColorIconMaintenanceService }
+export { ColorIconMealAllowance }
+export { ColorIconMealSubsidy }
+export { ColorIconMeetingExpenses }
+export { ColorIconNewspaperSubscription }
+export { ColorIconOfficeEquipments }
+export { ColorIconOfficeSupplies }
+export { ColorIconOthers }
+export { ColorIconPhoneBills }
+export { ColorIconPhysicalExamination }
+export { ColorIconPrivateVehicleAllowance }
+export { ColorIconServiceCharges }
+export { ColorIconTaxiFares }
+export { ColorIconTrainFares }
+export { ColorIconTrainingFees }
+export { ColorIconTravelExpenses }
+export { ColorIconVenueHospitalityFees }
+export { ColorIconVenueRentalFees }
+export { ColorIconVisaFees }
+
+export default {
+ ColorIconActivitys,
+ ColorIconAdministrativeFees,
+ ColorIconAirFares,
+ ColorIconApply,
+ ColorIconArchives,
+ ColorIconBaggageFees,
+ ColorIconCarInsurance,
+ ColorIconCarRental,
+ ColorIconCeremonyFees,
+ ColorIconConolences,
+ ColorIconEntertainmentExpense,
+ ColorIconExpertConsultationFees,
+ ColorIconExpertTeachingFees,
+ ColorIconExpressDelivery,
+ ColorIconFerryFares,
+ ColorIconFuelCost,
+ ColorIconGiftCost,
+ ColorIconHousingSubsidy,
+ ColorIconIncidentalExpenses,
+ ColorIconLandlinePhone,
+ ColorIconLineRental,
+ ColorIconLivingSubsidy,
+ ColorIconLodgingFees,
+ ColorIconMaintenanceService,
+ ColorIconMealAllowance,
+ ColorIconMealSubsidy,
+ ColorIconMeetingExpenses,
+ ColorIconNewspaperSubscription,
+ ColorIconOfficeEquipments,
+ ColorIconOfficeSupplies,
+ ColorIconOthers,
+ ColorIconPhoneBills,
+ ColorIconPhysicalExamination,
+ ColorIconPrivateVehicleAllowance,
+ ColorIconServiceCharges,
+ ColorIconTaxiFares,
+ ColorIconTrainFares,
+ ColorIconTrainingFees,
+ ColorIconTravelExpenses,
+ ColorIconVenueHospitalityFees,
+ ColorIconVenueRentalFees,
+ ColorIconVisaFees
+}
diff --git a/packages/vue-icon-multicolor/src/landline-phone/index.ts b/packages/vue-icon-multicolor/src/landline-phone/index.ts
new file mode 100644
index 000000000..05444c65c
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/landline-phone/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import LandlinePhone from '../../svgs/landline-phone.svg'
+
+export default svg({ name: 'ColorIconLandlinePhone', component: LandlinePhone })
diff --git a/packages/vue-icon-multicolor/src/line-rental/index.ts b/packages/vue-icon-multicolor/src/line-rental/index.ts
new file mode 100644
index 000000000..a4a84e504
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/line-rental/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import LineRental from '../../svgs/line-rental.svg'
+
+export default svg({ name: 'ColorIconLineRental', component: LineRental })
diff --git a/packages/vue-icon-multicolor/src/living-subsidy/index.ts b/packages/vue-icon-multicolor/src/living-subsidy/index.ts
new file mode 100644
index 000000000..41bed49b8
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/living-subsidy/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import LivingSubsidy from '../../svgs/living-subsidy.svg'
+
+export default svg({ name: 'ColorIconLivingSubsidy', component: LivingSubsidy })
diff --git a/packages/vue-icon-multicolor/src/lodging-fees/index.ts b/packages/vue-icon-multicolor/src/lodging-fees/index.ts
new file mode 100644
index 000000000..8e2e0d069
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/lodging-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import LodgingFees from '../../svgs/lodging-fees.svg'
+
+export default svg({ name: 'ColorIconLodgingFees', component: LodgingFees })
diff --git a/packages/vue-icon-multicolor/src/maintenance-service/index.ts b/packages/vue-icon-multicolor/src/maintenance-service/index.ts
new file mode 100644
index 000000000..ada01fa81
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/maintenance-service/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import MaintenanceService from '../../svgs/maintenance-service.svg'
+
+export default svg({ name: 'ColorIconMaintenanceService', component: MaintenanceService })
diff --git a/packages/vue-icon-multicolor/src/meal-allowance/index.ts b/packages/vue-icon-multicolor/src/meal-allowance/index.ts
new file mode 100644
index 000000000..a231d08bd
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/meal-allowance/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import MealAllowance from '../../svgs/meal-allowance.svg'
+
+export default svg({ name: 'ColorIconMealAllowance', component: MealAllowance })
diff --git a/packages/vue-icon-multicolor/src/meal-subsidy/index.ts b/packages/vue-icon-multicolor/src/meal-subsidy/index.ts
new file mode 100644
index 000000000..8bc934309
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/meal-subsidy/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import MealSubsidy from '../../svgs/meal-subsidy.svg'
+
+export default svg({ name: 'ColorIconMealSubsidy', component: MealSubsidy })
diff --git a/packages/vue-icon-multicolor/src/meeting-expenses/index.ts b/packages/vue-icon-multicolor/src/meeting-expenses/index.ts
new file mode 100644
index 000000000..b8730f5a9
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/meeting-expenses/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import MeetingExpenses from '../../svgs/meeting-expenses.svg'
+
+export default svg({ name: 'ColorIconMeetingExpenses', component: MeetingExpenses })
diff --git a/packages/vue-icon-multicolor/src/newspaper-subscription/index.ts b/packages/vue-icon-multicolor/src/newspaper-subscription/index.ts
new file mode 100644
index 000000000..3f6024ea5
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/newspaper-subscription/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import NewspaperSubscription from '../../svgs/newspaper-subscription.svg'
+
+export default svg({ name: 'ColorIconNewspaperSubscription', component: NewspaperSubscription })
diff --git a/packages/vue-icon-multicolor/src/office-equipments/index.ts b/packages/vue-icon-multicolor/src/office-equipments/index.ts
new file mode 100644
index 000000000..c083c65c5
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/office-equipments/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import OfficeEquipments from '../../svgs/office-equipments.svg'
+
+export default svg({ name: 'ColorIconOfficeEquipments', component: OfficeEquipments })
diff --git a/packages/vue-icon-multicolor/src/office-supplies/index.ts b/packages/vue-icon-multicolor/src/office-supplies/index.ts
new file mode 100644
index 000000000..34a1ea5b3
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/office-supplies/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import OfficeSupplies from '../../svgs/office-supplies.svg'
+
+export default svg({ name: 'ColorIconOfficeSupplies', component: OfficeSupplies })
diff --git a/packages/vue-icon-multicolor/src/others/index.ts b/packages/vue-icon-multicolor/src/others/index.ts
new file mode 100644
index 000000000..1c7d010fa
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/others/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import Others from '../../svgs/others.svg'
+
+export default svg({ name: 'ColorIconOthers', component: Others })
diff --git a/packages/vue-icon-multicolor/src/phone-bills/index.ts b/packages/vue-icon-multicolor/src/phone-bills/index.ts
new file mode 100644
index 000000000..c4fc26e0b
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/phone-bills/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import PhoneBills from '../../svgs/phone-bills.svg'
+
+export default svg({ name: 'ColorIconPhoneBills', component: PhoneBills })
diff --git a/packages/vue-icon-multicolor/src/physical-examination/index.ts b/packages/vue-icon-multicolor/src/physical-examination/index.ts
new file mode 100644
index 000000000..a8b0aabf2
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/physical-examination/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import PhysicalExamination from '../../svgs/physical-examination.svg'
+
+export default svg({ name: 'ColorIconPhysicalExamination', component: PhysicalExamination })
diff --git a/packages/vue-icon-multicolor/src/private-vehicle-allowance/index.ts b/packages/vue-icon-multicolor/src/private-vehicle-allowance/index.ts
new file mode 100644
index 000000000..60093a243
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/private-vehicle-allowance/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import PrivateVehicleAllowance from '../../svgs/private-vehicle-allowance.svg'
+
+export default svg({ name: 'ColorIconPrivateVehicleAllowance', component: PrivateVehicleAllowance })
diff --git a/packages/vue-icon-multicolor/src/service-charges/index.ts b/packages/vue-icon-multicolor/src/service-charges/index.ts
new file mode 100644
index 000000000..535fe438f
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/service-charges/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import ServiceCharges from '../../svgs/service-charges.svg'
+
+export default svg({ name: 'ColorIconServiceCharges', component: ServiceCharges })
diff --git a/packages/vue-icon-multicolor/src/taxi-fares/index.ts b/packages/vue-icon-multicolor/src/taxi-fares/index.ts
new file mode 100644
index 000000000..b2b049de8
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/taxi-fares/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import TaxiFares from '../../svgs/taxi-fares.svg'
+
+export default svg({ name: 'ColorIconTaxiFares', component: TaxiFares })
diff --git a/packages/vue-icon-multicolor/src/train-fares/index.ts b/packages/vue-icon-multicolor/src/train-fares/index.ts
new file mode 100644
index 000000000..04f2ca419
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/train-fares/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import TrainFares from '../../svgs/train-fares.svg'
+
+export default svg({ name: 'ColorIconTrainFares', component: TrainFares })
diff --git a/packages/vue-icon-multicolor/src/training-fees/index.ts b/packages/vue-icon-multicolor/src/training-fees/index.ts
new file mode 100644
index 000000000..a1bd2e9cb
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/training-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import TrainingFees from '../../svgs/training-fees.svg'
+
+export default svg({ name: 'ColorIconTrainingFees', component: TrainingFees })
diff --git a/packages/vue-icon-multicolor/src/travel-expenses/index.ts b/packages/vue-icon-multicolor/src/travel-expenses/index.ts
new file mode 100644
index 000000000..40ebf38f7
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/travel-expenses/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import TravelExpenses from '../../svgs/travel-expenses.svg'
+
+export default svg({ name: 'ColorIconTravelExpenses', component: TravelExpenses })
diff --git a/packages/vue-icon-multicolor/src/venue-hospitality-fees/index.ts b/packages/vue-icon-multicolor/src/venue-hospitality-fees/index.ts
new file mode 100644
index 000000000..4d7c8d363
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/venue-hospitality-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import VenueHospitalityFees from '../../svgs/venue-hospitality-fees.svg'
+
+export default svg({ name: 'ColorIconVenueHospitalityFees', component: VenueHospitalityFees })
diff --git a/packages/vue-icon-multicolor/src/venue-rental-fees/index.ts b/packages/vue-icon-multicolor/src/venue-rental-fees/index.ts
new file mode 100644
index 000000000..d3717957d
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/venue-rental-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import VenueRentalFees from '../../svgs/venue-rental-fees.svg'
+
+export default svg({ name: 'ColorIconVenueRentalFees', component: VenueRentalFees })
diff --git a/packages/vue-icon-multicolor/src/visa-fees/index.ts b/packages/vue-icon-multicolor/src/visa-fees/index.ts
new file mode 100644
index 000000000..10d22a70b
--- /dev/null
+++ b/packages/vue-icon-multicolor/src/visa-fees/index.ts
@@ -0,0 +1,4 @@
+import { svg } from '@opentiny/vue-common'
+import VisaFees from '../../svgs/visa-fees.svg'
+
+export default svg({ name: 'ColorIconVisaFees', component: VisaFees })
diff --git a/packages/vue-icon-multicolor/svgs/activitys.svg b/packages/vue-icon-multicolor/svgs/activitys.svg
new file mode 100644
index 000000000..0acf785da
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/activitys.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/administrative-fees.svg b/packages/vue-icon-multicolor/svgs/administrative-fees.svg
new file mode 100644
index 000000000..87387a2ef
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/administrative-fees.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/air-fares.svg b/packages/vue-icon-multicolor/svgs/air-fares.svg
new file mode 100644
index 000000000..c01e3b1c3
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/air-fares.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/apply.svg b/packages/vue-icon-multicolor/svgs/apply.svg
new file mode 100644
index 000000000..78d08da08
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/apply.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/archives.svg b/packages/vue-icon-multicolor/svgs/archives.svg
new file mode 100644
index 000000000..4e0d71395
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/archives.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/baggage-fees.svg b/packages/vue-icon-multicolor/svgs/baggage-fees.svg
new file mode 100644
index 000000000..6421726e7
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/baggage-fees.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/car-insurance.svg b/packages/vue-icon-multicolor/svgs/car-insurance.svg
new file mode 100644
index 000000000..b0dc9e5cf
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/car-insurance.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/car-rental.svg b/packages/vue-icon-multicolor/svgs/car-rental.svg
new file mode 100644
index 000000000..70648675c
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/car-rental.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/ceremony-fees.svg b/packages/vue-icon-multicolor/svgs/ceremony-fees.svg
new file mode 100644
index 000000000..0e3497a22
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/ceremony-fees.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/condolences.svg b/packages/vue-icon-multicolor/svgs/condolences.svg
new file mode 100644
index 000000000..db27f9da8
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/condolences.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/entertainment-expense.svg b/packages/vue-icon-multicolor/svgs/entertainment-expense.svg
new file mode 100644
index 000000000..db2f1d69f
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/entertainment-expense.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/expert-consultation-fees.svg b/packages/vue-icon-multicolor/svgs/expert-consultation-fees.svg
new file mode 100644
index 000000000..6754918fe
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/expert-consultation-fees.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/expert-teaching-fees.svg b/packages/vue-icon-multicolor/svgs/expert-teaching-fees.svg
new file mode 100644
index 000000000..64c6a7bba
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/expert-teaching-fees.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/express-delivery.svg b/packages/vue-icon-multicolor/svgs/express-delivery.svg
new file mode 100644
index 000000000..ed7f1fcda
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/express-delivery.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/ferry-fares.svg b/packages/vue-icon-multicolor/svgs/ferry-fares.svg
new file mode 100644
index 000000000..0ef922875
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/ferry-fares.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/fuel-cost.svg b/packages/vue-icon-multicolor/svgs/fuel-cost.svg
new file mode 100644
index 000000000..70928b96f
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/fuel-cost.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/gift-cost.svg b/packages/vue-icon-multicolor/svgs/gift-cost.svg
new file mode 100644
index 000000000..6744c353c
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/gift-cost.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/housing-subsidy.svg b/packages/vue-icon-multicolor/svgs/housing-subsidy.svg
new file mode 100644
index 000000000..84becf321
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/housing-subsidy.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/incidental-expenses.svg b/packages/vue-icon-multicolor/svgs/incidental-expenses.svg
new file mode 100644
index 000000000..2a4075a13
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/incidental-expenses.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/landline-phone.svg b/packages/vue-icon-multicolor/svgs/landline-phone.svg
new file mode 100644
index 000000000..e805b512b
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/landline-phone.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/line-rental.svg b/packages/vue-icon-multicolor/svgs/line-rental.svg
new file mode 100644
index 000000000..b9d6eb8d8
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/line-rental.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/living-subsidy.svg b/packages/vue-icon-multicolor/svgs/living-subsidy.svg
new file mode 100644
index 000000000..cf60eb5b5
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/living-subsidy.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/lodging-fees.svg b/packages/vue-icon-multicolor/svgs/lodging-fees.svg
new file mode 100644
index 000000000..4c67ad25e
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/lodging-fees.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/maintenance-service.svg b/packages/vue-icon-multicolor/svgs/maintenance-service.svg
new file mode 100644
index 000000000..02e7c2c8c
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/maintenance-service.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/meal-allowance.svg b/packages/vue-icon-multicolor/svgs/meal-allowance.svg
new file mode 100644
index 000000000..060b1c181
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/meal-allowance.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/meal-subsidy.svg b/packages/vue-icon-multicolor/svgs/meal-subsidy.svg
new file mode 100644
index 000000000..5372fe9c8
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/meal-subsidy.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/meeting-expenses.svg b/packages/vue-icon-multicolor/svgs/meeting-expenses.svg
new file mode 100644
index 000000000..72934686a
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/meeting-expenses.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/newspaper-subscription.svg b/packages/vue-icon-multicolor/svgs/newspaper-subscription.svg
new file mode 100644
index 000000000..e9b001618
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/newspaper-subscription.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/office-equipments.svg b/packages/vue-icon-multicolor/svgs/office-equipments.svg
new file mode 100644
index 000000000..a7181be3c
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/office-equipments.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/office-supplies.svg b/packages/vue-icon-multicolor/svgs/office-supplies.svg
new file mode 100644
index 000000000..5f2fbcdc7
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/office-supplies.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/others.svg b/packages/vue-icon-multicolor/svgs/others.svg
new file mode 100644
index 000000000..0dff02098
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/others.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/phone-bills.svg b/packages/vue-icon-multicolor/svgs/phone-bills.svg
new file mode 100644
index 000000000..b28803c93
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/phone-bills.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/physical-examination.svg b/packages/vue-icon-multicolor/svgs/physical-examination.svg
new file mode 100644
index 000000000..bd0097cb6
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/physical-examination.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/private-vehicle-allowance.svg b/packages/vue-icon-multicolor/svgs/private-vehicle-allowance.svg
new file mode 100644
index 000000000..738b79a74
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/private-vehicle-allowance.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/service-charges.svg b/packages/vue-icon-multicolor/svgs/service-charges.svg
new file mode 100644
index 000000000..1fc79b0d6
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/service-charges.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/taxi-fares.svg b/packages/vue-icon-multicolor/svgs/taxi-fares.svg
new file mode 100644
index 000000000..51c207c95
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/taxi-fares.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/train-fares.svg b/packages/vue-icon-multicolor/svgs/train-fares.svg
new file mode 100644
index 000000000..abc1faba7
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/train-fares.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/training-fees.svg b/packages/vue-icon-multicolor/svgs/training-fees.svg
new file mode 100644
index 000000000..180e31e79
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/training-fees.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/travel-expenses.svg b/packages/vue-icon-multicolor/svgs/travel-expenses.svg
new file mode 100644
index 000000000..91e5ae2c7
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/travel-expenses.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/venue-hospitality-fees.svg b/packages/vue-icon-multicolor/svgs/venue-hospitality-fees.svg
new file mode 100644
index 000000000..aa3e1c478
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/venue-hospitality-fees.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/venue-rental-fees.svg b/packages/vue-icon-multicolor/svgs/venue-rental-fees.svg
new file mode 100644
index 000000000..08a337487
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/venue-rental-fees.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon-multicolor/svgs/visa-fees.svg b/packages/vue-icon-multicolor/svgs/visa-fees.svg
new file mode 100644
index 000000000..8f2f0dbd0
--- /dev/null
+++ b/packages/vue-icon-multicolor/svgs/visa-fees.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-icon/index.ts b/packages/vue-icon/index.ts
index c904be4b9..ed4536af2 100644
--- a/packages/vue-icon/index.ts
+++ b/packages/vue-icon/index.ts
@@ -127,6 +127,7 @@ import IconExport from './src/export'
import IconExpressSearch from './src/express-search'
import IconEyeclose from './src/eyeclose'
import IconEyeopen from './src/eyeopen'
+import IconFeedback from './src/feedback'
import IconEditorAlignCenter from './src/editor-align-center'
import IconEditorAlignLeft from './src/editor-align-left'
import IconEditorAlignRight from './src/editor-align-right'
@@ -180,6 +181,7 @@ import IconFrownO from './src/frown-o'
import IconFrown from './src/frown'
import IconFullscreen from './src/fullscreen'
import IconFullscreenLeft from './src/fullscreen-left'
+import IconFullscreenRight from './src/fullscreen-right'
import IconGoBack from './src/go-back'
import IconGrade from './src/grade'
import IconGroupTransfer from './src/group-transfer'
@@ -219,6 +221,7 @@ import IconLineThrought from './src/line-throught'
import IconLink from './src/link'
import IconLoading from './src/loading'
import IconLoadingShadow from './src/loading-shadow'
+import IconLocalePanel from './src/locale-panel'
import IconLock from './src/lock'
import IconMailContent from './src/mail-content'
import IconMail from './src/mail'
@@ -339,6 +342,7 @@ import IconSetting from './src/setting'
import IconShare from './src/share'
import IconShareArrow from './src/share-arrow'
import IconShoppingCard from './src/shopping-card'
+import IconShutdown from './src/shutdown'
import IconSmileO from './src/smile-o'
import IconSmile from './src/smile'
import IconSoldOut from './src/sold-out'
@@ -377,6 +381,7 @@ import IconUnlock from './src/unlock'
import IconUnsent from './src/unsent'
import IconUpO from './src/up-o'
import IconUp from './src/up'
+import IconUpdate from './src/update'
import IconUpload from './src/upload'
import IconUser from './src/user'
import IconVersiontree from './src/versiontree'
@@ -431,6 +436,7 @@ import IconAddPicture from './src/add-picture'
// sync aui icons
import IconAdministratorO from './src/administrator-o'
+import IconAgency from './src/agency'
import IconAudit from './src/audit'
import IconBatchFill from './src/batch-fill'
import IconCardMode from './src/card-mode'
@@ -509,6 +515,7 @@ import IconShipped from './src/shipped'
import IconSubstituteMaterial from './src/substitute-material'
import IconSurchargeSettled from './src/surcharge-settled'
import IconSurchargeToBeSettled from './src/surcharge-to-be-settled'
+import IconSynchronize from './src/synchronize'
import IconToBeUploaded from './src/to-be-uploaded'
import IconTotalNolume from './src/total-nolume'
import IconTotalNumber from './src/total-number'
@@ -593,6 +600,8 @@ export {
IconSurchargeSettled as iconSurchargeSettled,
IconSurchargeToBeSettled,
IconSurchargeToBeSettled as iconSurchargeToBeSettled,
+ IconSynchronize,
+ IconSynchronize as iconSynchronize,
IconToBeUploaded,
IconToBeUploaded as iconToBeUploaded,
IconTotalNolume,
@@ -919,6 +928,8 @@ export {
IconEyeclose as iconEyeclose,
IconEyeopen,
IconEyeopen as iconEyeopen,
+ IconFeedback,
+ IconFeedback as iconFeedback,
IconEditorAlignCenter,
IconEditorAlignCenter as iconEditorAlignCenter,
IconEditorAlignLeft,
@@ -1025,6 +1036,8 @@ export {
IconFullscreen as iconFullscreen,
IconFullscreenLeft,
IconFullscreenLeft as iconFullscreenLeft,
+ IconFullscreenRight,
+ IconFullscreenRight as iconFullscreenRight,
IconMinscreenLeft,
IconMinscreenLeft as iconMinscreenLeft,
IconGoBack,
@@ -1105,6 +1118,8 @@ export {
IconLoading as iconLoading,
IconLoadingShadow,
IconLoadingShadow as iconLoadingShadow,
+ IconLocalePanel,
+ IconLocalePanel as iconLocalePanel,
IconLock,
IconLock as iconLock,
IconLeftWardArrow,
@@ -1345,6 +1360,8 @@ export {
IconShareArrow as iconShareArrow,
IconShoppingCard,
IconShoppingCard as iconShoppingCard,
+ IconShutdown,
+ IconShutdown as iconShutdown,
IconSmileO,
IconSmileO as iconSmileO,
IconSmile,
@@ -1421,6 +1438,8 @@ export {
IconUpO as iconUpO,
IconUp,
IconUp as iconUp,
+ IconUpdate,
+ IconUpdate as iconUpdate,
IconUpWard,
IconUpWard as iconUpWard,
IconUpload,
@@ -1457,6 +1476,8 @@ export {
// sync aui icons
IconAdministratorO,
IconAdministratorO as iconAdministratorO,
+ IconAgency,
+ IconAgency as iconAgency,
IconAudit,
IconAudit as iconAudit,
IconBatchFill,
@@ -1580,6 +1601,7 @@ export default {
IconSubstituteMaterial,
IconSurchargeSettled,
IconSurchargeToBeSettled,
+ IconSynchronize,
IconToBeUploaded,
IconTotalNolume,
IconTotalNumber,
@@ -1741,6 +1763,7 @@ export default {
IconExpressSearch,
IconEyeclose,
IconEyeopen,
+ IconFeedback,
IconEditorAlignCenter,
IconEditorAlignLeft,
IconEditorAlignRight,
@@ -1794,6 +1817,7 @@ export default {
IconFrown,
IconFullscreen,
IconFullscreenLeft,
+ IconFullscreenRight,
IconMinscreenLeft,
IconGoBack,
IconGrade,
@@ -1834,6 +1858,7 @@ export default {
IconLink,
IconLoading,
IconLoadingShadow,
+ IconLocalePanel,
IconLock,
IconLeftWardArrow,
IconMailContent,
@@ -1953,6 +1978,7 @@ export default {
IconShare,
IconShareArrow,
IconShoppingCard,
+ IconShutdown,
IconSmileO,
IconSmile,
IconSoldOut,
@@ -1991,6 +2017,7 @@ export default {
IconUnsent,
IconUpO,
IconUp,
+ IconUpdate,
IconUpWard,
IconUpload,
IconUser,
@@ -2009,6 +2036,7 @@ export default {
IconAddPicture,
// sync aui icons
IconAdministratorO,
+ IconAgency,
IconAudit,
IconBatchFill,
IconCardMode,
diff --git a/packages/vue-icon/src/agency/index.ts b/packages/vue-icon/src/agency/index.ts
new file mode 100644
index 000000000..a08ec0c21
--- /dev/null
+++ b/packages/vue-icon/src/agency/index.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) 2022 - present TinyVue Authors.
+ * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+ *
+ * Use of this source code is governed by an MIT-style license.
+ *
+ * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+ * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+ *
+ */
+import { svg } from '@opentiny/vue-common'
+import Agency from '@opentiny/vue-theme/svgs/agency.svg'
+
+export default () => svg({ name: 'IconAgency', component: Agency })()
diff --git a/packages/vue-icon/src/feedback/index.ts b/packages/vue-icon/src/feedback/index.ts
new file mode 100644
index 000000000..ea5f32842
--- /dev/null
+++ b/packages/vue-icon/src/feedback/index.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) 2022 - present TinyVue Authors.
+ * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+ *
+ * Use of this source code is governed by an MIT-style license.
+ *
+ * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+ * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+ *
+ */
+import { svg } from '@opentiny/vue-common'
+import Feedback from '@opentiny/vue-theme/svgs/feedback.svg'
+
+export default () => svg({ name: 'IconFeedback', component: Feedback })()
diff --git a/packages/vue-icon/src/fullscreen-right/index.ts b/packages/vue-icon/src/fullscreen-right/index.ts
new file mode 100644
index 000000000..eb12f1dac
--- /dev/null
+++ b/packages/vue-icon/src/fullscreen-right/index.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) 2022 - present TinyVue Authors.
+ * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+ *
+ * Use of this source code is governed by an MIT-style license.
+ *
+ * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+ * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+ *
+ */
+import { svg } from '@opentiny/vue-common'
+import FullscreenRight from '@opentiny/vue-theme/svgs/fullscreen-right.svg'
+
+export default () => svg({ name: 'IconFullscreenRight', component: FullscreenRight })()
diff --git a/packages/vue-icon/src/locale-panel/index.ts b/packages/vue-icon/src/locale-panel/index.ts
new file mode 100644
index 000000000..b6a876b1b
--- /dev/null
+++ b/packages/vue-icon/src/locale-panel/index.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) 2022 - present TinyVue Authors.
+ * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+ *
+ * Use of this source code is governed by an MIT-style license.
+ *
+ * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+ * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+ *
+ */
+import { svg } from '@opentiny/vue-common'
+import LocalePanel from '@opentiny/vue-theme/svgs/locale-panel.svg'
+
+export default () => svg({ name: 'IconLocalePanel', component: LocalePanel })()
diff --git a/packages/vue-icon/src/shutdown/index.ts b/packages/vue-icon/src/shutdown/index.ts
new file mode 100644
index 000000000..d4def2177
--- /dev/null
+++ b/packages/vue-icon/src/shutdown/index.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) 2022 - present TinyVue Authors.
+ * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+ *
+ * Use of this source code is governed by an MIT-style license.
+ *
+ * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+ * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+ *
+ */
+import { svg } from '@opentiny/vue-common'
+import Shutdown from '@opentiny/vue-theme/svgs/shutdown.svg'
+
+export default () => svg({ name: 'IconShutdown', component: Shutdown })()
diff --git a/packages/vue-icon/src/synchronize/index.ts b/packages/vue-icon/src/synchronize/index.ts
new file mode 100644
index 000000000..4935401a9
--- /dev/null
+++ b/packages/vue-icon/src/synchronize/index.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) 2022 - present TinyVue Authors.
+ * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+ *
+ * Use of this source code is governed by an MIT-style license.
+ *
+ * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+ * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+ *
+ */
+import { svg } from '@opentiny/vue-common'
+import Synchronize from '@opentiny/vue-theme/svgs/synchronize.svg'
+
+export default () => svg({ name: 'IconSynchronize', component: Synchronize })()
diff --git a/packages/vue-icon/src/update/index.ts b/packages/vue-icon/src/update/index.ts
new file mode 100644
index 000000000..15d8c9140
--- /dev/null
+++ b/packages/vue-icon/src/update/index.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) 2022 - present TinyVue Authors.
+ * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
+ *
+ * Use of this source code is governed by an MIT-style license.
+ *
+ * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
+ * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+ *
+ */
+import { svg } from '@opentiny/vue-common'
+import Update from '@opentiny/vue-theme/svgs/update.svg'
+
+export default () => svg({ name: 'IconUpdate', component: Update })()
diff --git a/packages/vue-locale/src/lang/en.ts b/packages/vue-locale/src/lang/en.ts
index a69825402..c2d5c191f 100644
--- a/packages/vue-locale/src/lang/en.ts
+++ b/packages/vue-locale/src/lang/en.ts
@@ -11,7 +11,7 @@
*/
export default {
'en-US': 'English',
- 'zh-CN': '中文',
+ 'zh-CN': 'Chinese',
'zh-TW': '中国台湾',
hello: 'Hello {name}',
code: 'en-US',
@@ -26,12 +26,12 @@ export default {
numeric: {
equalTo: 'Equal to',
notEqualTo: 'Not equal to',
- moreThan: 'More than',
- moreThanOrEqualTo: 'More than or equal to',
+ moreThan: 'Greater than',
+ moreThanOrEqualTo: 'Greater than or equal to',
lessThan: 'Less than',
lessThanOrEqualTo: 'Less than or equal to',
- empty: 'Empty',
- nonEmpty: 'Non-empty'
+ empty: 'Null',
+ nonEmpty: 'Not null'
},
queryBuilder: {
addItem: 'Add Rule',
@@ -39,16 +39,16 @@ export default {
removeGroup: 'Del Rule Group'
},
wizard: {
- previousStep: 'LastStep',
- nextStep: 'NextStep',
+ previousStep: 'Previous',
+ nextStep: 'Next',
save: 'Save',
submit: 'Submit'
},
linkMenu: {
- title: 'news',
- placeholder: 'Please enter keywords to filter...',
- sure: 'Determine',
- cancel: 'cancel'
+ title: '',
+ placeholder: 'Enter a keyword.',
+ sure: 'OK',
+ cancel: 'Cancel'
},
todoList: {
add: 'Add',
@@ -56,9 +56,9 @@ export default {
},
alert: {
error: 'Error',
- info: 'Info',
+ info: 'Information',
success: 'Success',
- title: 'Message notification',
+ title: 'Information',
warning: 'Warning'
},
amount: {
@@ -74,6 +74,9 @@ export default {
empty: 'Empty',
nonEmpty: 'Non-empty'
},
+ actionMenu: {
+ moreText: 'More'
+ },
base: {
all: 'All',
cancel: 'Cancel',
@@ -97,13 +100,13 @@ export default {
confirm: 'Confirm'
},
cell: {
- placeholder: 'Select'
+ placeholder: '--Select--'
},
cascader: {
- noMatch: 'No matching data',
+ noMatch: 'No matches',
loading: 'Loading',
- placeholder: 'Select',
- noData: 'No data'
+ placeholder: '--Select--',
+ noData: 'No data available.'
},
chart: {
auxiliary: 'Auxiliary',
@@ -115,11 +118,11 @@ export default {
value: 'Value'
},
colorSelectPanel: {
- confirm: 'Ok',
+ confirm: 'Select',
cancel: 'Cancel',
- predefine: 'Predefine Color',
- history: 'History',
- empty: 'Empty'
+ predefine: 'Default Colors',
+ history: 'Recent Colors',
+ empty: 'None'
},
crop: {
choose: 'choose image',
@@ -129,15 +132,15 @@ export default {
rotate45: 'rotate 45°',
closeCropArea: 'hide selection',
reset: 'reset',
- closeCrop: 'exit crop',
- cropImage: 'select area'
+ cropImage: 'crop image',
+ croppedImage: 'Target image'
},
datepicker: {
clear: 'Clear',
cancel: 'Cancel',
endDate: 'End Date',
confirm: 'OK',
- month: 'month',
+ month: 'Month',
endTime: 'End Time',
month2: 'February',
month1: 'January',
@@ -165,16 +168,16 @@ export default {
dec: 'Dec',
nov: 'Nov'
},
- nextYear: 'Next Year',
+ nextYear: 'Next year',
nextMonth: 'Next Month',
prevMonth: 'Previous Month',
now: 'Now',
- selectDate: 'Select date',
- prevYear: 'Previous Year',
+ selectDate: 'Select a date.',
+ prevYear: 'Previous year',
startDate: 'Start Date',
- selectTime: 'Select time',
+ selectTime: 'Select a time.',
today: 'Today',
- currentMonth: 'Current Month',
+ currentMonth: 'This Month',
startTime: 'Start Time',
week: 'week',
weeks: {
@@ -186,14 +189,14 @@ export default {
sat: 'Sat',
fri: 'Fri'
},
- timezone: 'selecting a timezone',
- year: '',
+ timezone: 'Select a time zone.',
+ year: 'Year',
hour: 'hour',
minute: 'minute',
second: 'second',
- to: 'to',
- yearMonth: '{year} / {month}',
- yearMonthDay: '{year} / {month} / {day}'
+ to: '',
+ yearMonth: '{month} {year}',
+ yearMonthDay: '{month} {day}, {year}'
},
richTextEditor: {
bold: 'bold',
@@ -298,7 +301,7 @@ export default {
calcHash: 'Document is calculating encryption',
uploadFile: 'Upload file',
downloadAll: 'Download all',
- onlySupport: 'Support {type} file',
+ onlySupport: 'Only support {type} file',
fileNotLessThan: 'The size of single file cannot be less than ',
fileNotMoreThan: 'The size of single file cannot be more than ',
fileSizeRange: 'The size of a single file must range from {moreThan} to {lessThan}.',
@@ -343,21 +346,14 @@ export default {
deleteSelectRecord: 'Are you sure you want to delete the selected record?',
emptyText: 'No Data',
error: {
- cellEditRender: 'The renderer cell-render and edit-render cannot be used together.',
- delGetAllRecords: 'The function getAllRecords is deprecated, please use getRecordset.',
- delGetRecords: 'The function getRecords is deprecated, please use getData.',
- delLabel: 'The property label is deprecated, please use title.',
- delProp: 'The property prop is deprecated, please use field.',
delRevert: 'The function revert is deprecated, please use revertData.',
groupFixed: 'If grouping headers are used, fixed columns must be on the left and right sides.',
notDelete: 'delete method not exist.',
- notMouse: 'Horizontal virtual scrolling does not support mouse-config.',
notQuery: 'query method not exist.',
notResizable: 'Horizontal virtual scrolling does not support resizable.',
notSave: 'save method not exist.',
reqModule: 'require {{name}} module.',
rowIdEmpty: 'The property row-id is not allowed to be empty.',
- scrollOriginal: 'Virtual scrolling can only export source data, please set original=true.',
scrollYHeight: 'You must set the height or max-height to enable virtual scrolling.',
toolbarId: 'Toolbar must have a unique id',
treeFixedExpand: 'The fixed columns of the tree structure conflict with the expanded row.',
@@ -378,7 +374,6 @@ export default {
clipboardWriteError: 'clipboard write error'
},
filter: {
- allFilter: 'All',
allSelect: '(All)',
endDate: 'End Date',
startDate: 'Start Date',
@@ -610,10 +605,7 @@ export default {
usercard: {
address: 'Address',
collapse: 'Collapse',
- department: 'Department',
email: 'email',
- employeeId: 'Employee ID',
- 'employee_id': 'Employee ID',
empno: 'Employee Number',
expand: 'Expand',
fax: 'Fax',
@@ -623,10 +615,8 @@ export default {
other: 'Other',
phone: 'Telephone',
timezone: 'Time zone',
- title: 'User information: {0}',
travelcode: 'Travel code',
- viop: 'VIOP',
- zipcode: 'Postal Code'
+ viop: 'VIOP'
},
richText: {
bold: 'Bold',
@@ -721,7 +711,15 @@ export default {
chooseCurrency: 'Choose currency'
},
calendarBar: {
- week: { 0: 'SUN', 1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT' },
+ week: {
+ 0: 'SUN',
+ 1: 'MON',
+ 2: 'TUE',
+ 3: 'WED',
+ 4: 'THU',
+ 5: 'FRI',
+ 6: 'SAT'
+ },
year: 'Year %s',
yearMonth: '%m %y',
month: {
@@ -754,8 +752,24 @@ export default {
}
},
calendarView: {
- week: { 0: 'SUN', 1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT' },
- weekDays: { 0: 'SUN', 1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT' },
+ week: {
+ 0: 'SUN',
+ 1: 'MON',
+ 2: 'TUE',
+ 3: 'WED',
+ 4: 'THU',
+ 5: 'FRI',
+ 6: 'SAT'
+ },
+ weekDays: {
+ 0: 'SUN',
+ 1: 'MON',
+ 2: 'TUE',
+ 3: 'WED',
+ 4: 'THU',
+ 5: 'FRI',
+ 6: 'SAT'
+ },
backToday: 'back to today',
new: 'New',
noSchedule: 'No Schedule',
@@ -766,7 +780,8 @@ export default {
selectedBox: {
select: 'Selected (%s)',
allSelect: 'All selected (%s)',
- clear: 'Clear'
+ clear: 'Clear',
+ noData: 'No data'
},
record: {
record: 'Record',
diff --git a/packages/vue-locale/src/lang/zh-CN.ts b/packages/vue-locale/src/lang/zh-CN.ts
index c29396d6e..52964fd77 100644
--- a/packages/vue-locale/src/lang/zh-CN.ts
+++ b/packages/vue-locale/src/lang/zh-CN.ts
@@ -345,21 +345,14 @@ export default {
deleteSelectRecord: '您确定要删除所选记录吗?',
emptyText: '暂无数据',
error: {
- cellEditRender: '渲染器 cell-render 和 edit-render 不能同时使用',
- delGetAllRecords: '方法 getAllRecords 已废弃,请使用 getRecordset',
- delGetRecords: '方法 getRecords 已废弃,请使用 getData',
- delLabel: '参数 label 已废弃,请使用 title',
- delProp: '参数 prop 已废弃,请使用 field',
delRevert: '方法 revert 已废弃,请使用 revertData',
groupFixed: '如果使用分组表头,固定列必须在左右两侧',
notDelete: 'Delete 方法不存在',
- notMouse: '虚拟滚动不支持 mouse-config',
notQuery: 'query 方法不存在',
notResizable: '横向虚拟滚动不支持 resizable',
notSave: 'save 方法不存在',
reqModule: '缺少 {{name}} 模块',
rowIdEmpty: '参数 row-id 不允许为空',
- scrollOriginal: '虚拟滚动启用后只能导出源数据,请将设置 original=true',
scrollYHeight: '启用虚拟滚动必须要设置 height 或 max-height',
toolbarId: '工具栏需要设置唯一 id',
treeFixedExpand: '树结构的固定列与展开行功能有冲突',
@@ -378,7 +371,6 @@ export default {
clipboardWriteError: '剪切板写入错误'
},
filter: {
- allFilter: '全部',
allSelect: '(全选)',
endDate: '结束日期',
startDate: '开始日期',
@@ -609,10 +601,7 @@ export default {
usercard: {
address: '地址',
collapse: '收起',
- department: '部门',
email: '邮箱',
- employeeId: '员工 ID',
- 'employee_id': '员工 ID',
empno: '工号',
expand: '展开',
fax: '传真',
@@ -622,10 +611,8 @@ export default {
other: '其他',
phone: '固定电话',
timezone: '时区',
- title: '用户信息: {0}',
travelcode: '出差联系信息',
- viop: 'VIOP',
- zipcode: '邮编'
+ viop: 'VIOP'
},
richText: {
bold: '加粗',
@@ -765,7 +752,8 @@ export default {
selectedBox: {
select: '已选(%s)',
allSelect: '已全选(%s)',
- clear: '清空'
+ clear: '清空',
+ noData: '暂无数据'
},
record: {
record: '录音',
diff --git a/packages/vue/src/button-group/src/pc.vue b/packages/vue/src/button-group/src/pc.vue
index 657ff8b2c..358dfe292 100644
--- a/packages/vue/src/button-group/src/pc.vue
+++ b/packages/vue/src/button-group/src/pc.vue
@@ -99,7 +99,7 @@
-
+
@@ -116,7 +116,7 @@ import { renderless, api } from '@opentiny/vue-renderless/button-group/vue'
import { props, setup, defineComponent } from '@opentiny/vue-common'
import Popover from '@opentiny/vue-popover'
import Button from '@opentiny/vue-button'
-import { iconPopup, iconWriting } from '@opentiny/vue-icon'
+import { iconPopup, iconEditor } from '@opentiny/vue-icon'
import { AutoTip } from '@opentiny/vue-directive'
import type { IButtonGroupApi } from '@opentiny/vue-renderless/types/button-group.type'
@@ -140,7 +140,7 @@ export default defineComponent({
TinyPopover: Popover,
TinyButton: Button,
IconPopup: iconPopup(),
- IconWriting: iconWriting()
+ IconEditor: iconEditor() // 新规范图标
},
setup(props, context) {
return setup({ props, context, renderless, api }) as unknown as IButtonGroupApi
diff --git a/packages/vue/src/calendar-view/src/pc.vue b/packages/vue/src/calendar-view/src/pc.vue
index 728f8b410..a471155ca 100644
--- a/packages/vue/src/calendar-view/src/pc.vue
+++ b/packages/vue/src/calendar-view/src/pc.vue
@@ -58,8 +58,8 @@
day.isLast || day.isNext
? 'is-next-or-last'
: isToday(day) || isSelectedDate(day)
- ? 'is-selected'
- : '',
+ ? 'is-selected'
+ : '',
day.disabled ? 'is-disabled' : ''
]"
>
diff --git a/packages/vue/src/card/src/pc.vue b/packages/vue/src/card/src/pc.vue
index eff3be628..cd8b9d651 100644
--- a/packages/vue/src/card/src/pc.vue
+++ b/packages/vue/src/card/src/pc.vue
@@ -147,7 +147,6 @@ import DropdownMenu from '@opentiny/vue-dropdown-menu'
import DropdownItem from '@opentiny/vue-dropdown-item'
import Checkbox from '@opentiny/vue-checkbox'
import Radio from '@opentiny/vue-radio'
-import { IconEllipsis } from '@opentiny/vue-icon'
import '@opentiny/vue-theme/card/index.less'
export default defineComponent({
@@ -158,8 +157,7 @@ export default defineComponent({
TinyDropdownMenu: DropdownMenu,
TinyDropdownItem: DropdownItem,
TinyCheckbox: Checkbox,
- TinyRadio: Radio,
- IconEllipsis: IconEllipsis()
+ TinyRadio: Radio
},
props: [
...props,
diff --git a/packages/vue/src/dialog-select/src/index.ts b/packages/vue/src/dialog-select/src/index.ts
index b74fd57cc..63b9d7f85 100644
--- a/packages/vue/src/dialog-select/src/index.ts
+++ b/packages/vue/src/dialog-select/src/index.ts
@@ -5,10 +5,19 @@ const template = () => {
return PCTemplate
}
+const $constants = {
+ INPUT_HEIGHT: '32px',
+ INPUT_MARGIN_BOTTOM: '8px'
+}
+
export default defineComponent({
name: $prefix + 'DialogSelect',
props: {
...$props,
+ _constants: {
+ type: Object,
+ default: () => $constants
+ },
dialogOp: {
type: Object,
default: () => ({})
diff --git a/packages/vue/src/dialog-select/src/pc.vue b/packages/vue/src/dialog-select/src/pc.vue
index 21ad69875..c7da2b301 100644
--- a/packages/vue/src/dialog-select/src/pc.vue
+++ b/packages/vue/src/dialog-select/src/pc.vue
@@ -1,6 +1,11 @@
-
@@ -155,6 +172,7 @@ import Split from '@opentiny/vue-split'
import SelectedBox from '@opentiny/vue-selected-box'
import Input from '@opentiny/vue-input'
import Tree from '@opentiny/vue-tree'
+import { iconSearch } from '@opentiny/vue-icon'
import '@opentiny/vue-theme/dialog-select/index.less'
export default defineComponent({
@@ -206,7 +224,8 @@ export default defineComponent({
TinySplit: Split,
TinySelectedBox: SelectedBox,
TinyInput: Input,
- TinyTree: Tree
+ TinyTree: Tree,
+ TinyIconSearch: iconSearch()
},
setup(props, context): any {
return setup({ props, context, renderless, api })
diff --git a/packages/vue/src/dropdown/src/pc.vue b/packages/vue/src/dropdown/src/pc.vue
index 6133d1494..cdbd09fa9 100644
--- a/packages/vue/src/dropdown/src/pc.vue
+++ b/packages/vue/src/dropdown/src/pc.vue
@@ -88,6 +88,7 @@ export default defineComponent({
default: false
},
suffixIcon: Object,
+ prefixIcon: Object,
lazyShowPopper: {
type: Boolean,
default: false
@@ -106,7 +107,7 @@ export default defineComponent({
return setup({ props, context, renderless, api, h })
},
render() {
- const { splitButton, type, disabled, handleMainButtonClick, menuOptions, title, suffixIcon } = this
+ const { splitButton, type, disabled, handleMainButtonClick, menuOptions, title, suffixIcon, prefixIcon } = this
const { slots, size, state, border, showIcon, round, clickOutside } = this
const params = { visible: state.visible }
@@ -117,6 +118,7 @@ export default defineComponent({
// 优先级:suffix-icon 插槽 > suffixIcon 属性 > 其他主题图标 > 默认主题图标
const IconDown = suffixIcon || state.designConfig?.icons?.dropdownIcon || iconDownWard()
+ const IconPre = prefixIcon
const ButtonIconDown = state.designConfig?.icons?.dropdownIcon || iconDownWard()
const defaultSlot = slots.default && slots.default(params)
@@ -144,6 +146,7 @@ export default defineComponent({
)
} else {
const suffixSlot = slots['suffix-icon'] && slots['suffix-icon']()
+ const prefixSlot = slots['prefix-icon'] && slots['prefix-icon']()
const vnodeData = (defaultSlot && defaultSlot[0]?.data) || {}
const { attrs = {} } = vnodeData
@@ -159,6 +162,13 @@ export default defineComponent({
''
)
+ const prefixInner =
+ prefixIcon || prefixSlot ? (
+ {prefixSlot || }
+ ) : (
+ ''
+ )
+
let defaultTriggerElm =
defaultSlot || title ? {defaultSlot || title} : null
@@ -172,15 +182,15 @@ export default defineComponent({
showIcon ? ' is-show-icon ' : ''
} ${triggerClass}`}
reset-time={0}>
+ {prefixInner}
{defaultTriggerElm}
{suffixInner}
) : (
+ class={`is-text${state.visible ? ' is-expand' : ' is-hide'}${disabled ? ' is-disabled' : ''} ${triggerClass}`}>
+ {prefixInner}
{defaultTriggerElm}
{suffixInner}
diff --git a/packages/vue/src/file-upload/src/pc.vue b/packages/vue/src/file-upload/src/pc.vue
index 8077be0d5..9eeb9b6ee 100644
--- a/packages/vue/src/file-upload/src/pc.vue
+++ b/packages/vue/src/file-upload/src/pc.vue
@@ -43,7 +43,7 @@ import type { IFileUploadApi } from '@opentiny/vue-renderless/types/file-upload.
const TinyIconAttachment = iconAttachment()
const TinyIconSuccessful = iconSuccessful()
-const TinyIconCloseCircle = iconClose()
+const TinyIconClose = iconClose()
const TinyIconDownload = iconDownload()
const TinyIconFileCloudupload = iconFileCloudupload()
const TinyIconPlus = iconPlus()
@@ -239,7 +239,7 @@ export default defineComponent({
),
showDel && (
handleRemove(file)}>
-
+
)
]
diff --git a/packages/vue/src/grid/package.json b/packages/vue/src/grid/package.json
index 0b4dd1993..0c1d45200 100644
--- a/packages/vue/src/grid/package.json
+++ b/packages/vue/src/grid/package.json
@@ -15,20 +15,20 @@
"//postversion": "pnpm build"
},
"dependencies": {
- "@opentiny/vue-renderless": "workspace:~",
- "@opentiny/vue-locale": "workspace:~",
- "@opentiny/vue-modal": "workspace:~",
+ "@opentiny/vue-common": "workspace:~",
"@opentiny/vue-dropdown": "workspace:~",
"@opentiny/vue-dropdown-item": "workspace:~",
"@opentiny/vue-dropdown-menu": "workspace:~",
"@opentiny/vue-exception": "workspace:~",
- "@opentiny/vue-pager": "workspace:~",
"@opentiny/vue-icon": "workspace:~",
- "@opentiny/vue-tooltip": "workspace:~",
- "@opentiny/vue-theme": "workspace:~",
- "@opentiny/vue-tag": "workspace:~",
"@opentiny/vue-loading": "workspace:~",
- "@opentiny/vue-common": "workspace:~"
+ "@opentiny/vue-locale": "workspace:~",
+ "@opentiny/vue-modal": "workspace:~",
+ "@opentiny/vue-pager": "workspace:~",
+ "@opentiny/vue-renderless": "workspace:~",
+ "@opentiny/vue-tag": "workspace:~",
+ "@opentiny/vue-theme": "workspace:~",
+ "@opentiny/vue-tooltip": "workspace:~"
},
"license": "MIT"
}
diff --git a/packages/vue/src/grid/src/body/src/body.tsx b/packages/vue/src/grid/src/body/src/body.tsx
index e1e566b91..1060d2fc9 100644
--- a/packages/vue/src/grid/src/body/src/body.tsx
+++ b/packages/vue/src/grid/src/body/src/body.tsx
@@ -57,6 +57,7 @@ const classMap = {
colActived: 'col__actived',
rowNew: 'row__new',
rowSelected: 'row__selected',
+ rowRadio: 'row__radio',
rowActived: 'row__actived',
isScrollload: 'is__scrollload'
}
@@ -548,7 +549,8 @@ function renderRow(args) {
{
[`row__level-${rowLevel}`]: treeConfig,
[classMap.rowNew]: editStore.insertList.includes(row),
- [classMap.rowSelected]: selection.includes(row) || selectRow === row,
+ [classMap.rowSelected]: selection.includes(row),
+ [classMap.rowRadio]: selectRow === row,
[classMap.rowActived]: rowActived
},
rowClassName
diff --git a/packages/vue/src/grid/src/cell/src/cell.ts b/packages/vue/src/grid/src/cell/src/cell.ts
index afe0e4e23..4d19043fc 100644
--- a/packages/vue/src/grid/src/cell/src/cell.ts
+++ b/packages/vue/src/grid/src/cell/src/cell.ts
@@ -536,12 +536,6 @@ export const Cell = {
checkMethod && (options.attrs.disabled = isDisabled = !checkMethod(params))
treeConfig && (indeterminate = ~treeIndeterminates.indexOf(row))
options.domProps = { checked: ~$table.selection.indexOf(row) }
- options.on = {
- change(event) {
- $table.triggerCheckRowEvent(event, params, event.target.checked)
- $table.showSelectToolbar()
- }
- }
let { twcls } = params
let labelCls = [
@@ -565,7 +559,31 @@ export const Cell = {
options.class = inputCls
}
- let vnode = h('label', { class: labelCls, key: random() }, [
+ /** 之前版本通过监听input的change事件切换选中状态,
+ * 当同时配置了单选和多选时,且单选的trigger为row时:
+ * 点击后由于先触发了单元格点击事件,切换了行单元状态,导致行重渲染,input的change事件无法触发,导致多选无法选中问题
+ * 3.19.0将选切换提前至点击事件,从而支持单选和多选同时配置。
+ */
+ const checkboxEvent = {
+ click(event) {
+ // 忽略label特性触发的input点击冒泡
+ if (event?.target?.tagName.toLowerCase() === 'input') {
+ return
+ }
+ const isChecked = $table.selection.includes(row)
+ /** triggerCheckRowEvent会修改dom,导致事件冒泡处理时,依靠dom的逻辑判断有误。
+ * 例如:onClickSelectColumn方法中,会使用event.target向上查找父元素判断是否点击复现框,从而避免重复处理选中逻辑。
+ * 修改dom后,原本复选框已被移出document,因此需要使用setTimeout宏任务来将修改dom的操作延迟到所有事件冒泡处理完毕。
+ */
+ setTimeout(() => {
+ $table.triggerCheckRowEvent(event, params, !isChecked)
+ // TODO: 多选工具栏,貌似没什么用,待梳理后去除。
+ $table.showSelectToolbar()
+ }, 0)
+ }
+ }
+
+ let vnode = h('label', { class: labelCls, key: random(), on: checkboxEvent }, [
h('input', options),
h('span', { class: spanCls }, [
h(iconCheck(), { class: ['tiny-svg-size', 'icon-check'] }),
@@ -580,6 +598,7 @@ export const Cell = {
renderTreeSelectionCell(h, params) {
return Cell.renderTreeIcon(h, params).concat(Cell.renderSelectionCell(h, params))
},
+ // TODO: 与renderSelectionCell代码方法高度相似,待提取公共逻辑。
renderSelectionCellByProp(h, params) {
let { $table, column, row } = params
let { slots } = column
@@ -838,12 +857,8 @@ export const Cell = {
let { actived } = params.$table.editStore
const { editConfig } = params.$table
- return Cell.runRenderer(
- h,
- params,
- this,
- actived && actived.row === params.row && handleActivedCanActive({ editConfig, params })
- )
+ const isActiveCell = () => (editConfig?.activeStrictly ? handleActivedCanActive({ editConfig, params }) : true)
+ return Cell.runRenderer(h, params, this, actived?.row === params.row && isActiveCell())
},
renderTreeCellEdit(h, params) {
return Cell.renderTreeIcon(h, params).concat(Cell.renderCellEdit(h, params))
diff --git a/packages/vue/src/grid/src/filter/src/panel.tsx b/packages/vue/src/grid/src/filter/src/panel.tsx
index 80ff20cdd..9625fee77 100644
--- a/packages/vue/src/grid/src/filter/src/panel.tsx
+++ b/packages/vue/src/grid/src/filter/src/panel.tsx
@@ -1,5 +1,4 @@
/* eslint-disable vue/no-mutating-props */
-/* eslint-disable vue/no-use-computed-property-like-method */
/**
* MIT License
*
@@ -289,20 +288,29 @@ export default defineComponent({
}
}
- this.popperJS && this.popperJS.destroy() && (this.popperJS = null)
- this.$nextTick(() => {
- const { targetElemParentTr, id } = this.filterStore
- const reference = targetElemParentTr && targetElemParentTr.querySelector(`svg.tiny-grid-filter__btn.${id}`)
- const popper = this.$el
+ if (this.popperJS) {
+ this.popperJS.destroy()
+ this.popperJS = null
+ }
+ if (this.visible) {
+ /** popper通过resizeObserver监听尺寸变化,resizeObserver的回调默认会在下一事件循环执行一次,从而update popper
+ 此处获取的reference,在遇到长任务后,在下一事件循环时,可能已经被移除了,导致popper元素位置在左上角。
+ 使用setTimeout延迟弹出时机,使得两次update中的reference都为选中态的过滤图标。
+ */
+ setTimeout(() => {
+ const { targetElemParentTr, id } = this.filterStore
+ const reference = targetElemParentTr && targetElemParentTr.querySelector(`svg.tiny-grid-filter__btn.${id}`)
+ const popper = this.$el
- popper.style.zIndex = PopupManager.nextZIndex()
+ popper.style.zIndex = PopupManager.nextZIndex()
- if (this.visible) {
this.popperJS = new PopperJS(reference, popper, {
- placement: 'bottom-end'
- }).update()
- }
- })
+ placement: 'bottom-end',
+ gpuAcceleration: false
+ })
+ popper.style.display = 'block'
+ })
+ }
}),
// 基础清除选项
renderBase() {
diff --git a/packages/vue/src/grid/src/table/src/table.ts b/packages/vue/src/grid/src/table/src/table.ts
index 71ec1d3be..242d3367d 100644
--- a/packages/vue/src/grid/src/table/src/table.ts
+++ b/packages/vue/src/grid/src/table/src/table.ts
@@ -27,7 +27,7 @@ import Tooltip from '@opentiny/vue-tooltip'
import { extend } from '@opentiny/vue-renderless/common/object'
import { isEmptyObject, isObject, isNull } from '@opentiny/vue-renderless/common/type'
import { uniqueId, template, toNumber, isBoolean } from '@opentiny/vue-renderless/grid/static/'
-import { getRowkey, GlobalEvent, hasChildrenList, getListeners, isScale } from '@opentiny/vue-renderless/grid/utils'
+import { getRowkey, GlobalEvent, hasChildrenList, getListeners } from '@opentiny/vue-renderless/grid/utils'
import TINYGrid from '../../adapter'
import GridHeader from '../../header'
import GridFooter from '../../footer'
@@ -103,7 +103,9 @@ function mergeTreeConfig(_vm) {
}
const renderEmptyPartFn = (opt) => {
- const { _vm, tableData, $slots, renderEmpty } = opt
+ const { _vm, tableData } = opt
+ const { $grid = {}, renderEmpty } = _vm
+ const { $slots } = $grid
return () => {
let emptyPartVnode = null
let { computerTableBodyHeight } = _vm
@@ -272,21 +274,13 @@ function getRenderer(opt) {
visibleColumn
} = opt
const { $grid, ctxMenuStore, editRules, filterStore, footerData, footerMethod, hasFilter, hasTip, height, id } = _vm
- const {
- isCtxMenu,
- isResizable,
- renderEmpty,
- scrollbarHeight,
- selectToolbarStore,
- tooltipContentOpts,
- vaildTipOpts,
- validOpts
- } = _vm
+ const { isCtxMenu, isResizable, scrollbarHeight, selectToolbarStore, tooltipContentOpts, vaildTipOpts, validOpts } =
+ _vm
const { selectToolbar, renderedToolbar } = $grid
const renderHeader = () =>
showHeader ? h(GridHeader, { ref: 'tableHeader', props, class: _vm.viewCls('tableHeader') }) : [null]
- const renderEmptyPart = renderEmptyPartFn({ _vm, tableData, $slots, renderEmpty })
+ const renderEmptyPart = renderEmptyPartFn({ _vm, tableData })
const renderFooter = renderFooterFn({ _vm, showFooter, footerData, footerMethod, tableColumn, visibleColumn, vSize })
const renderResizeBar = renderResizeBarFn({ _vm, isResizable, overflowX, scrollbarHeight })
const arg1 = { hasFilter, optimizeOpts, filterStore, isCtxMenu, ctxMenuStore, hasTip, tooltipContentOpts }
@@ -316,9 +310,13 @@ const renderFooterBorder = (_vm) => {
// 设置表格最外层元素类名
function getTableAttrs(tableVm) {
const { isShapeTable, vSize, editConfig, showHeader, showFooter, overflowY, overflowX, showOverflow } = tableVm
- const { showHeaderOverflow, highlightCell, optimizeOpts, stripe, border, isGroup, mouseConfig = {} } = tableVm
+ const { showHeaderOverflow, highlightCell, optimizeOpts, stripe, border, isGroup } = tableVm
const { maxHeight, loading, highlightHoverRow, highlightHoverColumn, validOpts } = tableVm
- const { stripeSaas, borderSaas, borderVertical, isThemeSaas, rowSpan, dropConfig = {} } = tableVm
+ const { stripeSaas, borderSaas, borderVertical, isThemeSaas, rowSpan } = tableVm
+
+ // 当用户传null值,解构得到的值为null,因此需要使用fallback值
+ const dropConfig = tableVm.dropConfig || {}
+ const mouseConfig = tableVm.mouseConfig || {}
const map = {
showHeader: 'show__head',
@@ -334,7 +332,7 @@ function getTableAttrs(tableVm) {
// 多端表格的最大高度在多端模板中处理,此处仅处理pc端表格逻辑
if (isShapeTable && maxHeight) {
- style.maxHeight = isScale(maxHeight) ? maxHeight : toNumber(maxHeight) + 'px'
+ style.maxHeight = Number(maxHeight) ? maxHeight + 'px' : maxHeight
}
return {
diff --git a/packages/vue/src/grid/src/validator/src/methods.ts b/packages/vue/src/grid/src/validator/src/methods.ts
index 0aa7ecec3..e919c8f9d 100644
--- a/packages/vue/src/grid/src/validator/src/methods.ts
+++ b/packages/vue/src/grid/src/validator/src/methods.ts
@@ -60,8 +60,12 @@ const onRejected = (opt, _this) => {
cb ? resolve() : reject(args)
}
- const funcPosAndFinish = (params, finish) => () => {
- getCell(_this, params).then((activeCell) => {
+ const funcPosAndFinish = (params, finish) => async () => {
+ // 如果是虚拟滚动,则先滚动到对应单元格且渲染后再显示提示
+ if (_this.scrollXLoad) {
+ await _this.scrollToColumn(params.column, true)
+ }
+ return getCell(_this, params).then((activeCell) => {
params.cell = activeCell
_this.handleValidError(params)
finish()
diff --git a/packages/vue/src/image/src/index.ts b/packages/vue/src/image/src/index.ts
index 7256ec0c3..f51fcbdea 100644
--- a/packages/vue/src/image/src/index.ts
+++ b/packages/vue/src/image/src/index.ts
@@ -66,6 +66,10 @@ export const imageProps = {
keepStyle: {
type: Boolean,
default: false
+ },
+ appendToBody: {
+ type: Boolean,
+ default: true
}
}
export default defineComponent({
diff --git a/packages/vue/src/image/src/mobile-first.vue b/packages/vue/src/image/src/mobile-first.vue
index b4d62eb7f..ffbcce2bb 100644
--- a/packages/vue/src/image/src/mobile-first.vue
+++ b/packages/vue/src/image/src/mobile-first.vue
@@ -37,7 +37,7 @@
showHover ? 'block' : 'hidden'
]"
>
-
+
-
+
,
setup(props, context) {
return $setup({ props, context, template })
}
diff --git a/packages/vue/src/modal/src/pc.vue b/packages/vue/src/modal/src/pc.vue
index f298a127f..8b4429b4e 100644
--- a/packages/vue/src/modal/src/pc.vue
+++ b/packages/vue/src/modal/src/pc.vue
@@ -23,8 +23,8 @@ import {
iconLoadingShadow,
iconWarning,
iconClose,
- iconFullscreenLeft,
- iconMinscreenLeft
+ iconFullscreenRight,
+ iconMinscreenRight
} from '@opentiny/vue-icon'
import '@opentiny/vue-theme/modal/index.less'
import type { IModalApi } from '@opentiny/vue-renderless/types/modal.type'
@@ -192,7 +192,7 @@ export default defineComponent({
)
: null,
resize
- ? h(zoomLocat ? iconMinscreenLeft() : iconFullscreenLeft(), {
+ ? h(zoomLocat ? iconMinscreenRight() : iconFullscreenRight(), {
class: ['tiny-modal__zoom-btn', 'trigger__btn'],
on: {
click: this.toggleZoomEvent
diff --git a/packages/vue/src/picker/src/mobile-first.vue b/packages/vue/src/picker/src/mobile-first.vue
index 1263e1b23..e6fae9e3b 100644
--- a/packages/vue/src/picker/src/mobile-first.vue
+++ b/packages/vue/src/picker/src/mobile-first.vue
@@ -17,7 +17,7 @@
:tabindex="tabindex"
v-else-if="!state.ranged"
data-tag="tiny-date-editor"
- :readonly="state.isMobileMode || !editable || readonly || state.type === 'dates' || state.type === 'week'"
+ :readonly="state.isMobileScreen || !editable || readonly || state.type === 'dates' || state.type === 'week'"
:disabled="state.pickerDisabled"
:size="state.pickerSize"
:name="name"
@@ -49,7 +49,7 @@
-
+
@@ -183,7 +183,7 @@
(item.state ? item.state.currentLabel : item.currentLabel)).join('; ')
: !multiple && state.selectDisabled
- ? state.selectedLabel
- : ''
+ ? state.selectedLabel
+ : ''
"
>
diff --git a/packages/vue/src/selected-box/src/pc.vue b/packages/vue/src/selected-box/src/pc.vue
index 79bb65168..68de16fb7 100644
--- a/packages/vue/src/selected-box/src/pc.vue
+++ b/packages/vue/src/selected-box/src/pc.vue
@@ -59,6 +59,9 @@
+
+
{{ t('ui.selectedBox.noData') }}
+
-
+