@ticatec/uniface-element 0.2.4 → 0.3.0
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/dist/accordion/README.md +169 -0
- package/dist/accordion/README_CN.md +176 -0
- package/dist/action-bar/README.md +275 -0
- package/dist/action-bar/README_CN.md +285 -0
- package/dist/app-layout/README.md +374 -0
- package/dist/app-layout/README_CN.md +381 -0
- package/dist/app-top-bar/README.md +357 -0
- package/dist/app-top-bar/README_CN.md +365 -0
- package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
- package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
- package/dist/base-calendar/CalendarBase.svelte +0 -3
- package/dist/box/README.md +385 -0
- package/dist/box/README_CN.md +393 -0
- package/dist/breadcrumbs/README.md +442 -0
- package/dist/breadcrumbs/README_CN.md +442 -0
- package/dist/button/Button.svelte +27 -7
- package/dist/button/Button.svelte.d.ts +3 -1
- package/dist/button/IconButton.svelte +26 -6
- package/dist/button/IconButton.svelte.d.ts +3 -1
- package/dist/button/IconButton_README.md +513 -0
- package/dist/button/IconButton_README_CN.md +513 -0
- package/dist/button/README.md +428 -0
- package/dist/button/README_CN.md +428 -0
- package/dist/button/TextButton.svelte +26 -6
- package/dist/button/TextButton.svelte.d.ts +3 -1
- package/dist/button/TextButton_README.md +571 -0
- package/dist/button/TextButton_README_CN.md +571 -0
- package/dist/card/README.md +666 -0
- package/dist/card/README_CN.md +666 -0
- package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
- package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
- package/dist/cascade-options-select/README.md +663 -2
- package/dist/cascade-options-select/README_CN.md +664 -0
- package/dist/checkbox/CheckBox.svelte +20 -6
- package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
- package/dist/checkbox/README.md +562 -0
- package/dist/checkbox/README_CN.md +727 -0
- package/dist/common-editor/NumberInput.svelte +39 -26
- package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
- package/dist/concise-data-table/ConciseListTable.svelte +133 -36
- package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
- package/dist/concise-data-table/DataCell.svelte +5 -6
- package/dist/concise-data-table/DataRow.svelte +22 -2
- package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
- package/dist/concise-data-table/README.md +606 -0
- package/dist/concise-data-table/README_CN.md +611 -0
- package/dist/context-menu/ContextMenu.svelte +138 -21
- package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
- package/dist/context-menu/ContextMenuItem.d.ts +20 -4
- package/dist/context-menu/README.md +551 -0
- package/dist/context-menu/README_CN.md +551 -0
- package/dist/criteria-field/CriteriaField.svelte +3 -5
- package/dist/criteria-field/README.md +532 -0
- package/dist/criteria-field/README_CN.md +532 -0
- package/dist/data-table/README.md +712 -0
- package/dist/data-table/README_CN.md +712 -0
- package/dist/date-picker/DatePicker.svelte +44 -7
- package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
- package/dist/date-picker/DateTimePicker.svelte +32 -8
- package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
- package/dist/date-picker/README.md +326 -0
- package/dist/date-picker/README_CN.md +316 -0
- package/dist/date-picker/ScrollBar.svelte +18 -8
- package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
- package/dist/date-picker/TimePanel.svelte +5 -5
- package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
- package/dist/date-range/README.md +374 -0
- package/dist/date-range/README_CN.md +374 -0
- package/dist/dialog/README.md +596 -0
- package/dist/dialog/README_CN.md +596 -0
- package/dist/drawer/README.md +679 -1
- package/dist/drawer/README_CN.md +679 -0
- package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
- package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
- package/dist/group-box/group-check-box/README.md +749 -0
- package/dist/group-box/group-check-box/README_CN.md +750 -0
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
- package/dist/group-box/group-radio-box/README.md +920 -0
- package/dist/group-box/group-radio-box/README_CN.md +920 -0
- package/dist/image-files/README.md +1346 -0
- package/dist/image-files/README_CN.md +1346 -0
- package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
- package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
- package/dist/lib/forwardAllEvents.d.ts +3 -0
- package/dist/lib/forwardAllEvents.js +24 -0
- package/dist/list-box/README.md +579 -0
- package/dist/list-box/README_CN.md +682 -0
- package/dist/lookup-editor/LookupEditor.svelte +15 -3
- package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
- package/dist/lookup-editor/README.md +684 -0
- package/dist/lookup-editor/README_CN.md +684 -0
- package/dist/memo-editor/MemoEditor.svelte +77 -27
- package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
- package/dist/memo-editor/README.md +819 -0
- package/dist/memo-editor/README_CN.md +819 -0
- package/dist/message-box/README.md +398 -0
- package/dist/message-box/README_CN.md +398 -0
- package/dist/number-editor/NumberEditor.svelte +2 -2
- package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
- package/dist/number-editor/README.md +353 -22
- package/dist/number-editor/README_CN.md +357 -0
- package/dist/number-range/README.md +443 -0
- package/dist/number-range/README_CN.md +443 -0
- package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
- package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
- package/dist/options-multi-select/README.md +480 -0
- package/dist/options-multi-select/README_CN.md +480 -0
- package/dist/options-select/OptionsSelect.svelte +36 -5
- package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
- package/dist/options-select/README.md +632 -0
- package/dist/options-select/README_CN.md +632 -0
- package/dist/page/README.md +605 -0
- package/dist/page/README_CN.md +605 -0
- package/dist/pagination/README.md +946 -0
- package/dist/pagination/README_CN.md +946 -0
- package/dist/pagination-panel/README.md +1075 -0
- package/dist/pagination-panel/README_CN.md +1075 -0
- package/dist/popup-hint/README.md +841 -0
- package/dist/popup-hint/README_CN.md +840 -0
- package/dist/progress-bar/README.md +242 -0
- package/dist/progress-bar/README_CN.md +242 -0
- package/dist/progress-step-bar/README.md +316 -0
- package/dist/progress-step-bar/README_CN.md +316 -0
- package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
- package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
- package/dist/prompts-text-editor/README.md +329 -0
- package/dist/prompts-text-editor/README_CN.md +329 -0
- package/dist/property-editor/README.md +969 -0
- package/dist/property-editor/README_CN.md +969 -0
- package/dist/radio-button/README.md +372 -0
- package/dist/radio-button/README_CN.md +372 -0
- package/dist/radio-button/RadioButton.svelte +32 -3
- package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
- package/dist/search-box/README.md +425 -0
- package/dist/search-box/README_CN.md +424 -0
- package/dist/search-box/SearchBox.svelte +22 -6
- package/dist/search-box/SearchBox.svelte.d.ts +4 -1
- package/dist/tabs/README.md +919 -0
- package/dist/tabs/README_CN.md +920 -0
- package/dist/tag/README.md +922 -0
- package/dist/tag/README_CN.md +922 -0
- package/dist/text-editor/PasswordEditor.svelte +17 -2
- package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
- package/dist/text-editor/PasswordEditor_README.md +551 -0
- package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
- package/dist/text-editor/README.md +466 -0
- package/dist/text-editor/README_CN.md +466 -0
- package/dist/text-editor/TextEditor.svelte +51 -19
- package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
- package/dist/time-editor/README.md +498 -24
- package/dist/time-editor/README_CN.md +498 -0
- package/dist/time-editor/TimeEditor.svelte +7 -3
- package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
- package/dist/toast/README.md +667 -0
- package/dist/toast/README_CN.md +667 -0
- package/dist/transfer/README.md +795 -0
- package/dist/transfer/Transfer.svelte +6 -4
- package/dist/transfer/Transfer.svelte.d.ts +3 -1
- package/dist/tree-view/README.md +761 -0
- package/dist/tree-view/README_CN.md +761 -0
- package/dist/tree-view/TreeView.svelte +5 -3
- package/dist/tree-view/TreeView.svelte.d.ts +3 -1
- package/dist/unit-number-editor/README.md +546 -20
- package/dist/unit-number-editor/README_CN.md +525 -0
- package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
- package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
- package/docs/form-field/cn/README_CN.md +364 -0
- package/docs/form-field/en/README.md +364 -0
- package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
- package/docs/form-panel/flex-form/en/README.md +586 -0
- package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
- package/docs/form-panel/flex-row-form/en/README.md +787 -0
- package/docs/form-panel/grid-form/en/README.md +744 -0
- package/package.json +1 -1
- package/dist/drawer/README-CN.md +0 -1
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
# 页面组件
|
|
2
|
+
|
|
3
|
+
一个全面的页面容器组件,提供标准化的页面布局,包括头部、内容区域和导航操作。
|
|
4
|
+
|
|
5
|
+
## 功能
|
|
6
|
+
|
|
7
|
+
- **标准化布局**:跨应用的统一页面结构
|
|
8
|
+
- **头部组件**:内置页面头部,包含标题和描述
|
|
9
|
+
- **导航操作**:支持返回和刷新功能
|
|
10
|
+
- **灵活样式**:支持自定义外观,带阴影和圆角
|
|
11
|
+
- **插槽系统**:可扩展的头部和内容区域
|
|
12
|
+
- **响应式设计**:适配不同屏幕尺寸
|
|
13
|
+
- **操作集成**:轻松集成导航和刷新操作
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @ticatec/uniface-element
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 基本用法
|
|
22
|
+
|
|
23
|
+
```svelte
|
|
24
|
+
<script>
|
|
25
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Page title="我的页面" comment="这是一个示例页面">
|
|
29
|
+
<div>页面内容在这里</div>
|
|
30
|
+
</Page>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## API 参考
|
|
34
|
+
|
|
35
|
+
### 页面属性
|
|
36
|
+
|
|
37
|
+
| 属性 | 类型 | 默认值 | 描述 |
|
|
38
|
+
|------|------|---------|-------------|
|
|
39
|
+
| `title` | `string` | `''` | 头部显示的页面标题 |
|
|
40
|
+
| `comment` | `string` | `null` | 副标题或描述文本 |
|
|
41
|
+
| `header$style` | `string` | `''` | 头部区域的自定义 CSS 样式 |
|
|
42
|
+
| `content$style` | `string` | `''` | 内容区域的自定义 CSS 样式 |
|
|
43
|
+
| `round` | `boolean` | `false` | 为页面容器应用圆角 |
|
|
44
|
+
| `shadow` | `boolean` | `true` | 为页面容器应用阴影效果 |
|
|
45
|
+
| `goBack` | `PageAction \| null` | `null` | 返回按钮操作处理程序 |
|
|
46
|
+
| `reload` | `PageAction \| null` | `null` | 刷新按钮操作处理程序 |
|
|
47
|
+
| `style` | `string` | `''` | 页面包装器的自定义 CSS 样式 |
|
|
48
|
+
|
|
49
|
+
### 页面插槽
|
|
50
|
+
|
|
51
|
+
| 插槽 | 描述 |
|
|
52
|
+
|------|-------------|
|
|
53
|
+
| `default` | 页面的主要内容区域 |
|
|
54
|
+
| `page-header` | 替换整个头部组件 |
|
|
55
|
+
| `header-ext` | 头部中的附加内容(如按钮等) |
|
|
56
|
+
|
|
57
|
+
### 页面头部属性
|
|
58
|
+
|
|
59
|
+
| 属性 | 类型 | 默认值 | 描述 |
|
|
60
|
+
|------|------|---------|-------------|
|
|
61
|
+
| `title` | `string` | `''` | 头部标题文本 |
|
|
62
|
+
| `comment` | `string` | `''` | 头部副标题/描述 |
|
|
63
|
+
| `goBack` | `PageAction \| null` | `null` | 返回导航操作 |
|
|
64
|
+
| `reload` | `PageAction \| null` | `null` | 刷新操作 |
|
|
65
|
+
|
|
66
|
+
### 类型
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
export type PageAction = () => any;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 示例
|
|
73
|
+
|
|
74
|
+
### 基本页面布局
|
|
75
|
+
|
|
76
|
+
```svelte
|
|
77
|
+
<script>
|
|
78
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
<Page
|
|
82
|
+
title="仪表盘"
|
|
83
|
+
comment="你的应用指标概览"
|
|
84
|
+
>
|
|
85
|
+
<div style="padding: 20px;">
|
|
86
|
+
<h2>欢迎体验你的仪表盘</h2>
|
|
87
|
+
<p>在这里你可以查看所有重要的指标和数据。</p>
|
|
88
|
+
</div>
|
|
89
|
+
</Page>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 带导航的页面
|
|
93
|
+
|
|
94
|
+
```svelte
|
|
95
|
+
<script>
|
|
96
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
97
|
+
import { goto } from '$app/navigation';
|
|
98
|
+
|
|
99
|
+
function handleGoBack() {
|
|
100
|
+
goto('/dashboard');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function handleReload() {
|
|
104
|
+
window.location.reload();
|
|
105
|
+
}
|
|
106
|
+
</script>
|
|
107
|
+
|
|
108
|
+
<Page
|
|
109
|
+
title="用户资料"
|
|
110
|
+
comment="管理你的账户设置"
|
|
111
|
+
goBack={handleGoBack}
|
|
112
|
+
reload={handleReload}
|
|
113
|
+
>
|
|
114
|
+
<div style="padding: 20px;">
|
|
115
|
+
<form>
|
|
116
|
+
<!-- 资料表单内容 -->
|
|
117
|
+
</form>
|
|
118
|
+
</div>
|
|
119
|
+
</Page>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 带圆角样式的页面
|
|
123
|
+
|
|
124
|
+
```svelte
|
|
125
|
+
<script>
|
|
126
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
127
|
+
</script>
|
|
128
|
+
|
|
129
|
+
<Page
|
|
130
|
+
title="设置"
|
|
131
|
+
comment="配置你的偏好"
|
|
132
|
+
round
|
|
133
|
+
shadow
|
|
134
|
+
style="max-width: 800px; margin: 0 auto;"
|
|
135
|
+
>
|
|
136
|
+
<div style="padding: 24px;">
|
|
137
|
+
<div class="settings-section">
|
|
138
|
+
<h3>常规设置</h3>
|
|
139
|
+
<!-- 设置内容 -->
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
</Page>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 带头部扩展的页面
|
|
146
|
+
|
|
147
|
+
```svelte
|
|
148
|
+
<script>
|
|
149
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
150
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
151
|
+
|
|
152
|
+
function handleSave() {
|
|
153
|
+
console.log('保存数据...');
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function handleCancel() {
|
|
157
|
+
console.log('取消...');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function handleExport() {
|
|
161
|
+
console.log('导出数据...');
|
|
162
|
+
}
|
|
163
|
+
</script>
|
|
164
|
+
|
|
165
|
+
<Page
|
|
166
|
+
title="文档编辑器"
|
|
167
|
+
comment="编辑你的文档内容"
|
|
168
|
+
round
|
|
169
|
+
>
|
|
170
|
+
<div slot="header-ext" style="display: flex; gap: 8px;">
|
|
171
|
+
<Button type="primary" label="保存" onClick={handleSave} />
|
|
172
|
+
<Button type="secondary" label="取消" onClick={handleCancel} />
|
|
173
|
+
<Button type="third" label="导出" onClick={handleExport} />
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<div style="padding: 20px;">
|
|
177
|
+
<textarea
|
|
178
|
+
style="width: 100%; height: 400px; border: 1px solid #ccc; padding: 12px;"
|
|
179
|
+
placeholder="开始输入你的文档..."
|
|
180
|
+
></textarea>
|
|
181
|
+
</div>
|
|
182
|
+
</Page>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 数据表格页面
|
|
186
|
+
|
|
187
|
+
```svelte
|
|
188
|
+
<script>
|
|
189
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
190
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
191
|
+
import DataTable from '@ticatec/uniface-element/DataTable';
|
|
192
|
+
|
|
193
|
+
let users = [
|
|
194
|
+
{ id: 1, name: 'John Doe', email: 'john@example.com', role: '管理员' },
|
|
195
|
+
{ id: 2, name: 'Jane Smith', email: 'jane@example.com', role: '用户' },
|
|
196
|
+
{ id: 3, name: 'Bob Wilson', email: 'bob@example.com', role: '用户' }
|
|
197
|
+
];
|
|
198
|
+
|
|
199
|
+
function handleAddUser() {
|
|
200
|
+
console.log('添加新用户...');
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function handleRefresh() {
|
|
204
|
+
console.log('刷新用户列表...');
|
|
205
|
+
}
|
|
206
|
+
</script>
|
|
207
|
+
|
|
208
|
+
<Page
|
|
209
|
+
title="用户管理"
|
|
210
|
+
comment="管理系统用户和权限"
|
|
211
|
+
reload={handleRefresh}
|
|
212
|
+
shadow
|
|
213
|
+
>
|
|
214
|
+
<div slot="header-ext">
|
|
215
|
+
<Button type="primary" label="添加用户" onClick={handleAddUser} />
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div style="padding: 20px;">
|
|
219
|
+
<DataTable
|
|
220
|
+
data={users}
|
|
221
|
+
columns={[
|
|
222
|
+
{ field: 'name', title: '姓名' },
|
|
223
|
+
{ field: 'email', title: '邮箱' },
|
|
224
|
+
{ field: 'role', title: '角色' }
|
|
225
|
+
]}
|
|
226
|
+
/>
|
|
227
|
+
</div>
|
|
228
|
+
</Page>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 带验证的表单页面
|
|
232
|
+
|
|
233
|
+
```svelte
|
|
234
|
+
<script>
|
|
235
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
236
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
237
|
+
import FormField from '@ticatec/uniface-element/FormField';
|
|
238
|
+
import TextEditor from '@ticatec/uniface-element/TextEditor';
|
|
239
|
+
|
|
240
|
+
let formData = {
|
|
241
|
+
title: '',
|
|
242
|
+
description: '',
|
|
243
|
+
category: ''
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
let isValid = false;
|
|
247
|
+
|
|
248
|
+
$: isValid = formData.title && formData.description;
|
|
249
|
+
|
|
250
|
+
function handleGoBack() {
|
|
251
|
+
if (hasUnsavedChanges()) {
|
|
252
|
+
if (confirm('你有未保存的更改,确定要离开吗?')) {
|
|
253
|
+
history.back();
|
|
254
|
+
}
|
|
255
|
+
} else {
|
|
256
|
+
history.back();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function hasUnsavedChanges() {
|
|
261
|
+
return formData.title || formData.description || formData.category;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function handleSubmit() {
|
|
265
|
+
if (isValid) {
|
|
266
|
+
console.log('提交表单:', formData);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function handleReset() {
|
|
271
|
+
formData = { title: '', description: '', category: '' };
|
|
272
|
+
}
|
|
273
|
+
</script>
|
|
274
|
+
|
|
275
|
+
<Page
|
|
276
|
+
title="创建新项目"
|
|
277
|
+
comment="填写表单以创建新项目"
|
|
278
|
+
goBack={handleGoBack}
|
|
279
|
+
round
|
|
280
|
+
>
|
|
281
|
+
<div slot="header-ext" style="display: flex; gap: 8px;">
|
|
282
|
+
<Button
|
|
283
|
+
type="primary"
|
|
284
|
+
label="提交"
|
|
285
|
+
disabled={!isValid}
|
|
286
|
+
onClick={handleSubmit}
|
|
287
|
+
/>
|
|
288
|
+
<Button type="secondary" label="重置" onClick={handleReset} />
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<div style="padding: 24px;">
|
|
292
|
+
<div style="max-width: 600px;">
|
|
293
|
+
<FormField label="标题" required>
|
|
294
|
+
<TextEditor
|
|
295
|
+
variant="outlined"
|
|
296
|
+
bind:value={formData.title}
|
|
297
|
+
placeholder="输入项目标题"
|
|
298
|
+
/>
|
|
299
|
+
</FormField>
|
|
300
|
+
|
|
301
|
+
<FormField label="描述" required>
|
|
302
|
+
<TextEditor
|
|
303
|
+
variant="outlined"
|
|
304
|
+
bind:value={formData.description}
|
|
305
|
+
placeholder="输入描述"
|
|
306
|
+
/>
|
|
307
|
+
</FormField>
|
|
308
|
+
|
|
309
|
+
<FormField label="类别">
|
|
310
|
+
<TextEditor
|
|
311
|
+
variant="outlined"
|
|
312
|
+
bind:value={formData.category}
|
|
313
|
+
placeholder="输入类别"
|
|
314
|
+
/>
|
|
315
|
+
</FormField>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
</Page>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### 自定义头部页面
|
|
322
|
+
|
|
323
|
+
```svelte
|
|
324
|
+
<script>
|
|
325
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
326
|
+
import Icon from '@ticatec/uniface-element/Icon';
|
|
327
|
+
|
|
328
|
+
function handleSearch() {
|
|
329
|
+
console.log('搜索中...');
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
function handleFilter() {
|
|
333
|
+
console.log('过滤中...');
|
|
334
|
+
}
|
|
335
|
+
</script>
|
|
336
|
+
|
|
337
|
+
<Page style="height: 100vh;">
|
|
338
|
+
<div slot="page-header" class="custom-header">
|
|
339
|
+
<div class="header-left">
|
|
340
|
+
<Icon name="icon_google_apps" />
|
|
341
|
+
<h1>自定义仪表盘</h1>
|
|
342
|
+
</div>
|
|
343
|
+
<div class="header-center">
|
|
344
|
+
<input
|
|
345
|
+
type="search"
|
|
346
|
+
placeholder="搜索..."
|
|
347
|
+
class="search-input"
|
|
348
|
+
/>
|
|
349
|
+
</div>
|
|
350
|
+
<div class="header-right">
|
|
351
|
+
<Icon name="icon_google_search" onClick={handleSearch} />
|
|
352
|
+
<Icon name="icon_google_filter_list" onClick={handleFilter} />
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
<div style="padding: 20px; height: 100%; overflow-y: auto;">
|
|
357
|
+
<!-- 页面内容 -->
|
|
358
|
+
</div>
|
|
359
|
+
</Page>
|
|
360
|
+
|
|
361
|
+
<style>
|
|
362
|
+
.custom-header {
|
|
363
|
+
display: flex;
|
|
364
|
+
align-items: center;
|
|
365
|
+
justify-content: space-between;
|
|
366
|
+
padding: 16px 24px;
|
|
367
|
+
background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
|
|
368
|
+
color: white;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.header-left {
|
|
372
|
+
display: flex;
|
|
373
|
+
align-items: center;
|
|
374
|
+
gap: 12px;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.header-left h1 {
|
|
378
|
+
margin: 0;
|
|
379
|
+
font-size: 24px;
|
|
380
|
+
font-weight: 600;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.search-input {
|
|
384
|
+
padding: 8px 16px;
|
|
385
|
+
border: none;
|
|
386
|
+
border-radius: 20px;
|
|
387
|
+
width: 300px;
|
|
388
|
+
outline: none;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
.header-right {
|
|
392
|
+
display: flex;
|
|
393
|
+
gap: 16px;
|
|
394
|
+
}
|
|
395
|
+
</style>
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### 仪表盘概览页面
|
|
399
|
+
|
|
400
|
+
```svelte
|
|
401
|
+
<script>
|
|
402
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
403
|
+
import Card from '@ticatec/uniface-element/Card';
|
|
404
|
+
|
|
405
|
+
let stats = [
|
|
406
|
+
{ title: '总用户数', value: '1,234', change: '+12%' },
|
|
407
|
+
{ title: '收入', value: '$45,678', change: '+5.2%' },
|
|
408
|
+
{ title: '订单', value: '890', change: '-2.1%' },
|
|
409
|
+
{ title: '转化率', value: '3.2%', change: '+0.8%' }
|
|
410
|
+
];
|
|
411
|
+
|
|
412
|
+
function handleRefresh() {
|
|
413
|
+
console.log('刷新仪表盘数据...');
|
|
414
|
+
// 刷新逻辑
|
|
415
|
+
}
|
|
416
|
+
</script>
|
|
417
|
+
|
|
418
|
+
<Page
|
|
419
|
+
title="分析仪表盘"
|
|
420
|
+
comment="实时业务指标和洞察"
|
|
421
|
+
reload={handleRefresh}
|
|
422
|
+
shadow={false}
|
|
423
|
+
content$style="background-color: #f5f5f5;"
|
|
424
|
+
>
|
|
425
|
+
<div style="padding: 24px;">
|
|
426
|
+
<div class="stats-grid">
|
|
427
|
+
{#each stats as stat}
|
|
428
|
+
<Card style="padding: 20px; text-align: center;">
|
|
429
|
+
<h3 style="margin: 0 0 8px 0; color: #666;">{stat.title}</h3>
|
|
430
|
+
<div style="font-size: 32px; font-weight: bold; margin: 8px 0;">
|
|
431
|
+
{stat.value}
|
|
432
|
+
</div>
|
|
433
|
+
<div style="color: {stat.change.startsWith('+') ? '#4caf50' : '#f44336'};">
|
|
434
|
+
{stat.change}
|
|
435
|
+
</div>
|
|
436
|
+
</Card>
|
|
437
|
+
{/each}
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
<div style="margin-top: 24px;">
|
|
441
|
+
<Card style="padding: 24px;">
|
|
442
|
+
<h3>近期活动</h3>
|
|
443
|
+
<!-- 活动内容 -->
|
|
444
|
+
</Card>
|
|
445
|
+
</div>
|
|
446
|
+
</div>
|
|
447
|
+
</Page>
|
|
448
|
+
|
|
449
|
+
<style>
|
|
450
|
+
.stats-grid {
|
|
451
|
+
display: grid;
|
|
452
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
453
|
+
gap: 20px;
|
|
454
|
+
}
|
|
455
|
+
</style>
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### 移动响应式页面
|
|
459
|
+
|
|
460
|
+
```svelte
|
|
461
|
+
<script>
|
|
462
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
463
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
464
|
+
|
|
465
|
+
let isMobile = false;
|
|
466
|
+
|
|
467
|
+
// 在挂载时检查是否为移动端
|
|
468
|
+
import { onMount } from 'svelte';
|
|
469
|
+
onMount(() => {
|
|
470
|
+
isMobile = window.innerWidth < 768;
|
|
471
|
+
|
|
472
|
+
const handleResize = () => {
|
|
473
|
+
isMobile = window.innerWidth < 768;
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
window.addEventListener('resize', handleResize);
|
|
477
|
+
return () => window.removeEventListener('resize', handleResize);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
function handleGoBack() {
|
|
481
|
+
history.back();
|
|
482
|
+
}
|
|
483
|
+
</script>
|
|
484
|
+
|
|
485
|
+
<Page
|
|
486
|
+
title="移动端示例"
|
|
487
|
+
comment="响应式页面设计"
|
|
488
|
+
goBack={handleGoBack}
|
|
489
|
+
round={!isMobile}
|
|
490
|
+
shadow={!isMobile}
|
|
491
|
+
style={isMobile ? 'height: 100vh; margin: 0;' : 'max-width: 800px; margin: 20px auto;'}
|
|
492
|
+
>
|
|
493
|
+
<div style="padding: {isMobile ? '16px' : '24px'};">
|
|
494
|
+
<div class="responsive-content">
|
|
495
|
+
<h2>响应式内容</h2>
|
|
496
|
+
<p>此页面适配移动端和桌面端屏幕。</p>
|
|
497
|
+
|
|
498
|
+
<div class="button-group">
|
|
499
|
+
<Button type="primary" label="操作 1" />
|
|
500
|
+
<Button type="secondary" label="操作 2" />
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
</div>
|
|
504
|
+
</Page>
|
|
505
|
+
|
|
506
|
+
<style>
|
|
507
|
+
.responsive-content {
|
|
508
|
+
max-width: 100%;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.button-group {
|
|
512
|
+
display: flex;
|
|
513
|
+
gap: 12px;
|
|
514
|
+
margin-top: 20px;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
@media (max-width: 767px) {
|
|
518
|
+
.button-group {
|
|
519
|
+
flex-direction: column;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
</style>
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
## 最佳实践
|
|
526
|
+
|
|
527
|
+
1. **一致的布局**:对所有主要应用屏幕使用页面组件
|
|
528
|
+
2. **导航**:根据需要提供适当的返回/刷新操作
|
|
529
|
+
3. **内容组织**:使用适当的间距并逻辑组织内容
|
|
530
|
+
4. **移动响应式**:考虑移动端布局和触摸交互
|
|
531
|
+
5. **头部扩展**:使用头部插槽添加页面特定的操作
|
|
532
|
+
6. **加载状态**:在数据获取期间显示加载指示器
|
|
533
|
+
7. **错误处理**:提供适当的错误状态和恢复选项
|
|
534
|
+
|
|
535
|
+
## 样式
|
|
536
|
+
|
|
537
|
+
页面组件提供多个用于样式的 CSS 类:
|
|
538
|
+
|
|
539
|
+
```css
|
|
540
|
+
.uniface-page-wrapper {
|
|
541
|
+
/* 页面包装容器 */
|
|
542
|
+
width: 100%;
|
|
543
|
+
height: 100%;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.uniface-page {
|
|
547
|
+
/* 主页面容器 */
|
|
548
|
+
display: flex;
|
|
549
|
+
flex-direction: column;
|
|
550
|
+
height: 100%;
|
|
551
|
+
background: white;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.uniface-page.shadow {
|
|
555
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
.uniface-page.round {
|
|
559
|
+
border-radius: 8px;
|
|
560
|
+
overflow: hidden;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.uniface-page-header {
|
|
564
|
+
/* 头部区域 */
|
|
565
|
+
flex: 0 0 auto;
|
|
566
|
+
padding: 16px 24px;
|
|
567
|
+
border-bottom: 1px solid #e0e0e0;
|
|
568
|
+
background: #fafafa;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
.page-container {
|
|
572
|
+
/* 内容区域 */
|
|
573
|
+
flex: 1 1 auto;
|
|
574
|
+
overflow: hidden;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
.page-topic {
|
|
578
|
+
/* 页面标题 */
|
|
579
|
+
font-size: 24px;
|
|
580
|
+
font-weight: 600;
|
|
581
|
+
margin-bottom: 4px;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.page-comment {
|
|
585
|
+
/* 页面副标题 */
|
|
586
|
+
font-size: 14px;
|
|
587
|
+
color: #666;
|
|
588
|
+
}
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
## 可访问性
|
|
592
|
+
|
|
593
|
+
- 使用语义化 HTML 提供适当的标题层级
|
|
594
|
+
- 支持所有交互元素的键盘导航
|
|
595
|
+
- 为导航操作提供 ARIA 标签
|
|
596
|
+
- 模态式使用的焦点管理
|
|
597
|
+
- 屏幕阅读器兼容性
|
|
598
|
+
- 支持高对比度模式
|
|
599
|
+
|
|
600
|
+
## 相关组件
|
|
601
|
+
|
|
602
|
+
- [页面头部](./PageHeader.md) - 独立的头部组件
|
|
603
|
+
- [卡片](../card/README.md) - 用于页面内的内容部分
|
|
604
|
+
- [按钮](../button/README.md) - 用于页面操作
|
|
605
|
+
- [操作栏](../action-bar/README.md) - 用于多个页面操作
|