@ticatec/uniface-element 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +273 -1
- package/README_CN.md +341 -0
- package/dist/common/MouseClickHandler.d.ts +1 -1
- package/dist/dialog/CommonDialog.svelte +6 -3
- package/dist/dialog/CommonDialog.svelte.d.ts +2 -1
- package/dist/dialog/Dialog.svelte +36 -10
- package/dist/dialog/Dialog.svelte.d.ts +4 -3
- package/dist/dialog/DialogBoard.svelte +11 -8
- package/dist/dialog/DialogWrapper.svelte +10 -0
- package/dist/dialog/DialogWrapper.svelte.d.ts +22 -0
- package/dist/dialog/Dialogs.js +1 -1
- package/dist/dialog/ModalResult.d.ts +5 -0
- package/dist/dialog/ModalResult.js +5 -0
- package/docs/buttons/cn/ActionBar.md +459 -0
- package/docs/buttons/cn/Button.md +228 -0
- package/docs/buttons/cn/IconButton.md +294 -0
- package/docs/buttons/cn/README.md +600 -0
- package/docs/buttons/cn/TextButton.md +163 -0
- package/docs/buttons/en/ActionBar.md +459 -0
- package/docs/buttons/en/Button.md +228 -0
- package/docs/buttons/en/IconButton.md +294 -0
- package/docs/buttons/en/README.md +600 -0
- package/docs/buttons/en/TextButton.md +163 -0
- package/docs/containers/cn/accordion.md +622 -0
- package/docs/containers/cn/box.md +445 -0
- package/docs/containers/cn/card.md +404 -0
- package/docs/containers/cn/page.md +576 -0
- package/docs/containers/cn/tabs.md +686 -0
- package/docs/containers/en/accordion.md +622 -0
- package/docs/containers/en/box.md +445 -0
- package/docs/containers/en/card.md +404 -0
- package/docs/containers/en/page.md +576 -0
- package/docs/containers/en/tabs.md +686 -0
- package/docs/data-display/cn/concise-data-table.md +731 -0
- package/docs/data-display/cn/listbox.md +786 -0
- package/docs/data-display/cn/treeview.md +863 -0
- package/docs/data-display/en/concise-data-table.md +732 -0
- package/docs/data-display/en/listbox.md +786 -0
- package/docs/data-display/en/treeview.md +863 -0
- package/docs/data-table/cn/README.md +596 -0
- package/docs/data-table/en/README.md +596 -0
- package/docs/dialog/cn/README.md +767 -0
- package/docs/dialog/en/README.md +767 -0
- package/docs/form/cn/README.md +847 -0
- package/docs/form/en/README.md +847 -0
- package/docs/form-components/cn/README.md +495 -0
- package/docs/form-components/cn/attachmentfilesfield.md +757 -0
- package/docs/form-components/cn/cascade-options-select.md +374 -0
- package/docs/form-components/cn/checkbox.md +58 -0
- package/docs/form-components/cn/date-picker.md +138 -0
- package/docs/form-components/cn/datetime-picker.md +228 -0
- package/docs/form-components/cn/group-checkbox.md +405 -0
- package/docs/form-components/cn/group-radiobox.md +525 -0
- package/docs/form-components/cn/imagefilesfield.md +651 -0
- package/docs/form-components/cn/input-options-select.md +250 -0
- package/docs/form-components/cn/lookup-editor.md +406 -0
- package/docs/form-components/cn/memoeditor.md +409 -0
- package/docs/form-components/cn/number-editor.md +261 -0
- package/docs/form-components/cn/options-multi-select.md +177 -0
- package/docs/form-components/cn/options-select.md +83 -0
- package/docs/form-components/cn/passwordeditor.md +538 -0
- package/docs/form-components/cn/prompts-text-editor.md +241 -0
- package/docs/form-components/cn/radiobutton.md +84 -0
- package/docs/form-components/cn/switch.md +178 -0
- package/docs/form-components/cn/text-editor.md +142 -0
- package/docs/form-components/cn/time-editor.md +159 -0
- package/docs/form-components/cn/unit-number-editor.md +164 -0
- package/docs/form-components/en/README.md +463 -0
- package/docs/form-components/en/attachmentfilesfield.md +757 -0
- package/docs/form-components/en/cascade-options-select.md +358 -0
- package/docs/form-components/en/checkbox.md +59 -0
- package/docs/form-components/en/date-picker.md +138 -0
- package/docs/form-components/en/datetime-picker.md +228 -0
- package/docs/form-components/en/group-checkbox.md +395 -0
- package/docs/form-components/en/group-radiobox.md +498 -0
- package/docs/form-components/en/imagefilesfield.md +651 -0
- package/docs/form-components/en/input-options-select.md +239 -0
- package/docs/form-components/en/lookup-editor.md +389 -0
- package/docs/form-components/en/memoeditor.md +409 -0
- package/docs/form-components/en/number-editor.md +249 -0
- package/docs/form-components/en/options-multi-select.md +177 -0
- package/docs/form-components/en/options-select.md +83 -0
- package/docs/form-components/en/passwordeditor.md +538 -0
- package/docs/form-components/en/prompts-text-editor.md +241 -0
- package/docs/form-components/en/radiobutton.md +84 -0
- package/docs/form-components/en/switch.md +180 -0
- package/docs/form-components/en/text-editor.md +142 -0
- package/docs/form-components/en/time-editor.md +159 -0
- package/docs/form-components/en/unit-number-editor.md +164 -0
- package/docs/form-layout/cn/criteria-field.md +652 -0
- package/docs/form-layout/cn/flex-form.md +454 -0
- package/docs/form-layout/cn/flex-row-form.md +542 -0
- package/docs/form-layout/cn/form-field.md +923 -0
- package/docs/form-layout/cn/grid-form.md +676 -0
- package/docs/form-layout/en/criteria-field.md +652 -0
- package/docs/form-layout/en/flex-form.md +454 -0
- package/docs/form-layout/en/flex-row-form.md +542 -0
- package/docs/form-layout/en/form-field.md +923 -0
- package/docs/form-layout/en/grid-form.md +676 -0
- package/docs/global/cn/README.md +534 -0
- package/docs/global/en/README.md +534 -0
- package/docs/layout/cn/classiclayout.md +460 -0
- package/docs/layout/cn/headerlayout.md +524 -0
- package/docs/layout/cn/sidebarlayout.md +263 -0
- package/docs/layout/en/classiclayout.md +951 -0
- package/docs/layout/en/headerlayout.md +524 -0
- package/docs/layout/en/sidebarlayout.md +262 -0
- package/docs/misc/cn/README.md +1217 -0
- package/docs/misc/en/README.md +1217 -0
- package/docs/navigation/cn/breadcrumb.md +291 -0
- package/docs/navigation/cn/navigator.md +322 -0
- package/docs/navigation/cn/navigatormenu.md +512 -0
- package/docs/navigation/cn/progressbar.md +199 -0
- package/docs/navigation/cn/progressstepbar.md +299 -0
- package/docs/navigation/en/breadcrumb.md +291 -0
- package/docs/navigation/en/navigator.md +322 -0
- package/docs/navigation/en/navigatormenu.md +512 -0
- package/docs/navigation/en/progressbar.md +199 -0
- package/docs/navigation/en/progressstepbar.md +299 -0
- package/docs/search-filters/cn/daterange.md +1156 -0
- package/docs/search-filters/cn/numberrange.md +688 -0
- package/docs/search-filters/cn/searchbox.md +1582 -0
- package/docs/search-filters/en/daterange.md +1156 -0
- package/docs/search-filters/en/numberrange.md +688 -0
- package/docs/search-filters/en/searchbox.md +1582 -0
- package/package.json +38 -5
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# OptionsMultiSelect 组件
|
|
2
|
+
|
|
3
|
+
多选下拉组件,允许从选项中选择多个值,以标签形式显示。
|
|
4
|
+
|
|
5
|
+
## 属性
|
|
6
|
+
|
|
7
|
+
| 属性 | 类型 | 默认值 | 描述 |
|
|
8
|
+
|------|------|--------|------|
|
|
9
|
+
| `variant` | `'' \| 'plain' \| 'outlined' \| 'filled'` | `''` | 外观变体 |
|
|
10
|
+
| `disabled` | `boolean` | `false` | 是否禁用 |
|
|
11
|
+
| `readonly` | `boolean` | `false` | 是否只读 |
|
|
12
|
+
| `compact` | `boolean` | `false` | 是否紧凑模式 |
|
|
13
|
+
| `value` | `string` | `''` | 选中值(用分隔符连接) |
|
|
14
|
+
| `delimiter` | `string` | `';'` | 值分隔符 |
|
|
15
|
+
| `options` | `Array<any>` | `[]` | 选项数组 |
|
|
16
|
+
| `keyField` | `string` | `'code'` | 值字段名 |
|
|
17
|
+
| `textField` | `string` | `'text'` | 显示字段名 |
|
|
18
|
+
| `placeholder` | `string` | `''` | 占位符文本 |
|
|
19
|
+
| `emptyText` | `string` | `''` | 空值显示文本 |
|
|
20
|
+
| `disableOptions` | `Array<string>` | `[]` | 禁用的选项值 |
|
|
21
|
+
| `hideOptions` | `Array<string>` | `[]` | 隐藏的选项值 |
|
|
22
|
+
| `displayMode` | `DisplayMode` | `DisplayMode.Edit` | 显示模式 |
|
|
23
|
+
| `menu$height` | `number` | `0` | 下拉菜单高度 |
|
|
24
|
+
| `tagColor` | `string` | `''` | 标签颜色 |
|
|
25
|
+
| `tagVariant` | `'borderless' \| 'border' \| 'round'` | `'border'` | 标签样式 |
|
|
26
|
+
| `style` | `string` | `''` | 自定义样式 |
|
|
27
|
+
| `onChange` | `OnChangeHandler<Array<string>>` | - | 值变化回调 |
|
|
28
|
+
|
|
29
|
+
## 使用示例
|
|
30
|
+
|
|
31
|
+
```svelte
|
|
32
|
+
<script lang="ts">
|
|
33
|
+
import OptionsMultiSelect from '@ticatec/uniface-element/OptionsMultiSelect';
|
|
34
|
+
|
|
35
|
+
interface Option {
|
|
36
|
+
code: string;
|
|
37
|
+
text: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 技能选项
|
|
41
|
+
const skills: Option[] = [
|
|
42
|
+
{ code: 'js', text: 'JavaScript' },
|
|
43
|
+
{ code: 'ts', text: 'TypeScript' },
|
|
44
|
+
{ code: 'svelte', text: 'Svelte' },
|
|
45
|
+
{ code: 'vue', text: 'Vue.js' },
|
|
46
|
+
{ code: 'react', text: 'React' },
|
|
47
|
+
{ code: 'node', text: 'Node.js' },
|
|
48
|
+
{ code: 'python', text: 'Python' },
|
|
49
|
+
{ code: 'java', text: 'Java' }
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
// 兴趣爱好
|
|
53
|
+
const hobbies: Option[] = [
|
|
54
|
+
{ code: 'reading', text: '阅读' },
|
|
55
|
+
{ code: 'music', text: '音乐' },
|
|
56
|
+
{ code: 'sports', text: '运动' },
|
|
57
|
+
{ code: 'travel', text: '旅行' },
|
|
58
|
+
{ code: 'photography', text: '摄影' },
|
|
59
|
+
{ code: 'cooking', text: '烹饪' }
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
let selectedSkills: string = '';
|
|
63
|
+
let selectedHobbies: string = '';
|
|
64
|
+
|
|
65
|
+
const handleSkillsChange = (values: string[]): void => {
|
|
66
|
+
console.log('选择的技能:', values);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const handleHobbiesChange = (values: string[]): void => {
|
|
70
|
+
console.log('选择的爱好:', values);
|
|
71
|
+
};
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
<!-- 技能多选 -->
|
|
75
|
+
<OptionsMultiSelect
|
|
76
|
+
placeholder="请选择您的技能"
|
|
77
|
+
options={skills}
|
|
78
|
+
keyField="code"
|
|
79
|
+
textField="text"
|
|
80
|
+
bind:value={selectedSkills}
|
|
81
|
+
onChange={handleSkillsChange}
|
|
82
|
+
/>
|
|
83
|
+
|
|
84
|
+
<!-- 兴趣爱好多选(圆角标签) -->
|
|
85
|
+
<OptionsMultiSelect
|
|
86
|
+
placeholder="请选择您的兴趣爱好"
|
|
87
|
+
options={hobbies}
|
|
88
|
+
keyField="code"
|
|
89
|
+
textField="text"
|
|
90
|
+
tagVariant="round"
|
|
91
|
+
tagColor="#007bff"
|
|
92
|
+
bind:value={selectedHobbies}
|
|
93
|
+
onChange={handleHobbiesChange}
|
|
94
|
+
/>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 高级用法
|
|
98
|
+
|
|
99
|
+
### 动态选项管理
|
|
100
|
+
```svelte
|
|
101
|
+
<script lang="ts">
|
|
102
|
+
interface Category {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
parent_id: string | null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
let selectedCategories: string = '';
|
|
109
|
+
let availableCategories: Category[] = [];
|
|
110
|
+
let userLevel: 'basic' | 'premium' | 'admin' = 'basic';
|
|
111
|
+
|
|
112
|
+
// 根据用户级别过滤可用分类
|
|
113
|
+
$: filteredCategories = availableCategories.filter(cat => {
|
|
114
|
+
if (userLevel === 'basic') {
|
|
115
|
+
return cat.parent_id === null; // 只显示顶级分类
|
|
116
|
+
} else if (userLevel === 'premium') {
|
|
117
|
+
return true; // 显示所有分类
|
|
118
|
+
} else {
|
|
119
|
+
return true; // 管理员看到所有分类
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// 根据用户级别设置禁用选项
|
|
124
|
+
$: disabledOptions = userLevel === 'basic'
|
|
125
|
+
? availableCategories.filter(cat => cat.parent_id !== null).map(cat => cat.id)
|
|
126
|
+
: [];
|
|
127
|
+
</script>
|
|
128
|
+
|
|
129
|
+
<OptionsMultiSelect
|
|
130
|
+
placeholder="请选择分类"
|
|
131
|
+
options={filteredCategories}
|
|
132
|
+
keyField="id"
|
|
133
|
+
textField="name"
|
|
134
|
+
{disabledOptions}
|
|
135
|
+
bind:value={selectedCategories}
|
|
136
|
+
/>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## 最佳实践
|
|
140
|
+
|
|
141
|
+
### 1. 限制选择数量
|
|
142
|
+
```svelte
|
|
143
|
+
<script lang="ts">
|
|
144
|
+
let selectedTags: string = '';
|
|
145
|
+
let maxTags: number = 5;
|
|
146
|
+
let tagError: string = '';
|
|
147
|
+
|
|
148
|
+
const handleTagsChange = (values: string[]): void => {
|
|
149
|
+
if (values.length > maxTags) {
|
|
150
|
+
tagError = `最多只能选择 ${maxTags} 个标签`;
|
|
151
|
+
// 截取前maxTags个
|
|
152
|
+
selectedTags = values.slice(0, maxTags).join(';');
|
|
153
|
+
} else {
|
|
154
|
+
tagError = '';
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
</script>
|
|
158
|
+
|
|
159
|
+
<OptionsMultiSelect
|
|
160
|
+
options={tagOptions}
|
|
161
|
+
bind:value={selectedTags}
|
|
162
|
+
onChange={handleTagsChange}
|
|
163
|
+
/>
|
|
164
|
+
{#if tagError}
|
|
165
|
+
<div class="error-message">{tagError}</div>
|
|
166
|
+
{/if}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 2. 自定义标签样式
|
|
170
|
+
```svelte
|
|
171
|
+
<OptionsMultiSelect
|
|
172
|
+
options={colorOptions}
|
|
173
|
+
tagVariant="round"
|
|
174
|
+
tagColor="var(--primary-color)"
|
|
175
|
+
bind:value={selectedColors}
|
|
176
|
+
/>
|
|
177
|
+
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# OptionsSelect 组件
|
|
2
|
+
|
|
3
|
+
单选下拉选择组件,从预定义选项中选择一个值。
|
|
4
|
+
|
|
5
|
+
## 属性
|
|
6
|
+
|
|
7
|
+
| 属性 | 类型 | 默认值 | 描述 |
|
|
8
|
+
|------|------|--------|------|
|
|
9
|
+
| `variant` | `'' \| 'plain' \| 'outlined' \| 'filled'` | `''` | 外观变体 |
|
|
10
|
+
| `disabled` | `boolean` | `false` | 是否禁用 |
|
|
11
|
+
| `readonly` | `boolean` | `false` | 是否只读 |
|
|
12
|
+
| `compact` | `boolean` | `false` | 是否紧凑模式 |
|
|
13
|
+
| `value` | `any` | `null` | 选中的值 |
|
|
14
|
+
| `options` | `Array<any>` | `[]` | 选项数组 |
|
|
15
|
+
| `keyField` | `string` | `'code'` | 值字段名 |
|
|
16
|
+
| `textField` | `string` | `'text'` | 显示字段名 |
|
|
17
|
+
| `placeholder` | `string` | `''` | 占位符文本 |
|
|
18
|
+
| `emptyText` | `string` | `''` | 空值显示文本 |
|
|
19
|
+
| `disableOptions` | `Array<string>` | `[]` | 禁用的选项值 |
|
|
20
|
+
| `hideOptions` | `Array<string>` | `[]` | 隐藏的选项值 |
|
|
21
|
+
| `displayMode` | `DisplayMode` | `DisplayMode.Edit` | 显示模式 |
|
|
22
|
+
| `menu$height` | `number` | `0` | 下拉菜单高度 |
|
|
23
|
+
| `style` | `string` | `''` | 自定义样式 |
|
|
24
|
+
| `onChange` | `OnChangeHandler<any>` | - | 值变化回调 |
|
|
25
|
+
|
|
26
|
+
## 使用示例
|
|
27
|
+
|
|
28
|
+
```svelte
|
|
29
|
+
<script lang="ts">
|
|
30
|
+
import OptionsSelect from '@ticatec/uniface-element/OptionsSelect';
|
|
31
|
+
|
|
32
|
+
// 国家选项
|
|
33
|
+
const countries = [
|
|
34
|
+
{ code: 'CN', text: '中国' },
|
|
35
|
+
{ code: 'US', text: '美国' },
|
|
36
|
+
{ code: 'JP', text: '日本' },
|
|
37
|
+
{ code: 'GB', text: '英国' },
|
|
38
|
+
{ code: 'DE', text: '德国' }
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
// 状态选项
|
|
42
|
+
const statuses = [
|
|
43
|
+
{ code: 'active', text: '活跃' },
|
|
44
|
+
{ code: 'inactive', text: '非活跃' },
|
|
45
|
+
{ code: 'pending', text: '待审核' },
|
|
46
|
+
{ code: 'suspended', text: '暂停' }
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
let selectedCountry = '';
|
|
50
|
+
let userStatus = 'active';
|
|
51
|
+
|
|
52
|
+
const handleCountryChange = (value) => {
|
|
53
|
+
selectedCountry = value;
|
|
54
|
+
console.log('选择的国家:', value);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const handleStatusChange = (value) => {
|
|
58
|
+
userStatus = value;
|
|
59
|
+
console.log('用户状态:', value);
|
|
60
|
+
};
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<!-- 国家选择 -->
|
|
64
|
+
<OptionsSelect
|
|
65
|
+
placeholder="请选择国家"
|
|
66
|
+
options={countries}
|
|
67
|
+
keyField="code"
|
|
68
|
+
textField="text"
|
|
69
|
+
bind:value={selectedCountry}
|
|
70
|
+
onChange={handleCountryChange}
|
|
71
|
+
/>
|
|
72
|
+
|
|
73
|
+
<!-- 用户状态选择(禁用部分选项) -->
|
|
74
|
+
<OptionsSelect
|
|
75
|
+
placeholder="请选择状态"
|
|
76
|
+
options={statuses}
|
|
77
|
+
keyField="code"
|
|
78
|
+
textField="text"
|
|
79
|
+
disableOptions={['suspended']}
|
|
80
|
+
bind:value={userStatus}
|
|
81
|
+
onChange={handleStatusChange}
|
|
82
|
+
/>
|
|
83
|
+
```
|