@morya-ui/mcp 0.3.5 → 0.3.7
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/LICENSE +21 -21
- package/README.md +154 -151
- package/bin/morya-ui-mcp.js +2 -2
- package/data/catalog.json +487 -389
- package/data/example-coverage.json +56 -74
- package/data/golden-pages/dashboard-page.vue +138 -138
- package/data/golden-pages/detail-page.vue +178 -178
- package/data/golden-pages/empty-state.vue +56 -56
- package/data/golden-pages/form-in-dialog.vue +166 -166
- package/data/golden-pages/form-page.vue +107 -107
- package/data/golden-pages/landing-page.vue +358 -358
- package/data/golden-pages/list-page-dense.vue +168 -168
- package/data/golden-pages/list-page-rail.vue +272 -272
- package/data/golden-pages/list-page.vue +222 -222
- package/data/golden-pages/login-page.vue +231 -231
- package/data/golden-pages/result-page.vue +84 -84
- package/data/golden-pages/settings-page.vue +163 -163
- package/data/golden-pages/wizard-form.vue +182 -182
- package/dist/__tests__/fidelity.test.d.ts +1 -0
- package/dist/__tests__/fidelity.test.js +88 -0
- package/dist/__tests__/page-snippets.test.js +13 -5
- package/dist/__tests__/tools.test.js +10 -8
- package/dist/decisions.js +6 -16
- package/dist/index.js +46 -3
- package/dist/page-snippets.js +722 -635
- package/dist/reference-brief.d.ts +55 -0
- package/dist/reference-brief.js +468 -0
- package/dist/style-shells.d.ts +20 -0
- package/dist/style-shells.js +249 -0
- package/dist/tools.d.ts +26 -0
- package/dist/tools.js +471 -374
- package/package.json +1 -1
|
@@ -1,163 +1,163 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* 黄金样例:设置 / 配置页
|
|
4
|
-
* 窄栏 + Tabs 分组 + MPageSection form;保存用 message 单行回执。
|
|
5
|
-
* @see DESIGN.md · page-layouts.md § Settings · visual-craft § Ops polish
|
|
6
|
-
*/
|
|
7
|
-
import {
|
|
8
|
-
MBreadcrumb,
|
|
9
|
-
MButton,
|
|
10
|
-
MConfigProvider,
|
|
11
|
-
MForm,
|
|
12
|
-
MFormItem,
|
|
13
|
-
MInput,
|
|
14
|
-
MLayout,
|
|
15
|
-
MLayoutContent,
|
|
16
|
-
MLayoutHeader,
|
|
17
|
-
MPageContent,
|
|
18
|
-
MPageHeader,
|
|
19
|
-
MPageSection,
|
|
20
|
-
MSelect,
|
|
21
|
-
MSpace,
|
|
22
|
-
MSwitch,
|
|
23
|
-
MTabs,
|
|
24
|
-
message,
|
|
25
|
-
zhCN,
|
|
26
|
-
} from 'morya-ui'
|
|
27
|
-
import { reactive, ref } from 'vue'
|
|
28
|
-
|
|
29
|
-
const activeTab = ref('profile')
|
|
30
|
-
const submitting = ref(false)
|
|
31
|
-
|
|
32
|
-
const tabs = [
|
|
33
|
-
{ label: '资料', value: 'profile' },
|
|
34
|
-
{ label: '通知', value: 'notify' },
|
|
35
|
-
{ label: '安全', value: 'security' },
|
|
36
|
-
]
|
|
37
|
-
|
|
38
|
-
const profile = reactive({
|
|
39
|
-
displayName: '林晓',
|
|
40
|
-
email: 'linxiao@example.com',
|
|
41
|
-
language: 'zh-CN' as string | undefined,
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
const notify = reactive({
|
|
45
|
-
emailDigest: true,
|
|
46
|
-
productUpdates: false,
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
const languageOptions = [
|
|
50
|
-
{ label: '简体中文', value: 'zh-CN' },
|
|
51
|
-
{ label: 'English', value: 'en-US' },
|
|
52
|
-
]
|
|
53
|
-
|
|
54
|
-
async function saveProfile() {
|
|
55
|
-
submitting.value = true
|
|
56
|
-
try {
|
|
57
|
-
// await api.saveProfile(profile)
|
|
58
|
-
message.success('资料已保存')
|
|
59
|
-
} finally {
|
|
60
|
-
submitting.value = false
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async function saveNotify() {
|
|
65
|
-
submitting.value = true
|
|
66
|
-
try {
|
|
67
|
-
// await api.saveNotify(notify)
|
|
68
|
-
message.success('通知偏好已保存')
|
|
69
|
-
} finally {
|
|
70
|
-
submitting.value = false
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
</script>
|
|
74
|
-
|
|
75
|
-
<template>
|
|
76
|
-
<MConfigProvider :locale="zhCN">
|
|
77
|
-
<MLayout fill-viewport>
|
|
78
|
-
<MLayoutHeader padding="var(--m-space-4) var(--m-space-6)">
|
|
79
|
-
<MBreadcrumb :model="[{ label: '首页', to: '/' }, { label: '系统设置' }]" />
|
|
80
|
-
</MLayoutHeader>
|
|
81
|
-
|
|
82
|
-
<MLayoutContent>
|
|
83
|
-
<MPageContent width="narrow">
|
|
84
|
-
<MPageHeader
|
|
85
|
-
title="系统设置"
|
|
86
|
-
description="按域分组配置;切换 Tab 时保留未保存输入,保存成功用 message 一句话回执。"
|
|
87
|
-
/>
|
|
88
|
-
|
|
89
|
-
<MTabs v-model="activeTab" :tabs="tabs">
|
|
90
|
-
<template #default="{ activeValue }">
|
|
91
|
-
<MPageSection v-if="activeValue === 'profile'" variant="form" title="个人资料">
|
|
92
|
-
<MForm @submit.prevent="saveProfile">
|
|
93
|
-
<MFormItem label="显示名称" name="displayName" required>
|
|
94
|
-
<MInput v-model="profile.displayName" fluid />
|
|
95
|
-
</MFormItem>
|
|
96
|
-
<MFormItem label="工作邮箱" name="email" required>
|
|
97
|
-
<MInput v-model="profile.email" type="email" fluid />
|
|
98
|
-
</MFormItem>
|
|
99
|
-
<MFormItem label="界面语言" name="language">
|
|
100
|
-
<MSelect
|
|
101
|
-
v-model="profile.language"
|
|
102
|
-
:options="languageOptions"
|
|
103
|
-
placeholder="选择语言"
|
|
104
|
-
fluid
|
|
105
|
-
/>
|
|
106
|
-
</MFormItem>
|
|
107
|
-
<MPageSection variant="actions">
|
|
108
|
-
<MSpace>
|
|
109
|
-
<MButton native-type="submit" severity="primary" :loading="submitting">
|
|
110
|
-
保存资料
|
|
111
|
-
</MButton>
|
|
112
|
-
<MButton severity="secondary" text native-type="button">
|
|
113
|
-
恢复默认
|
|
114
|
-
</MButton>
|
|
115
|
-
</MSpace>
|
|
116
|
-
</MPageSection>
|
|
117
|
-
</MForm>
|
|
118
|
-
</MPageSection>
|
|
119
|
-
|
|
120
|
-
<MPageSection v-else-if="activeValue === 'notify'" variant="form" title="通知">
|
|
121
|
-
<MForm @submit.prevent="saveNotify">
|
|
122
|
-
<MFormItem label="邮件摘要" name="emailDigest">
|
|
123
|
-
<MSwitch v-model="notify.emailDigest" />
|
|
124
|
-
</MFormItem>
|
|
125
|
-
<MFormItem label="产品动态" name="productUpdates">
|
|
126
|
-
<MSwitch v-model="notify.productUpdates" />
|
|
127
|
-
</MFormItem>
|
|
128
|
-
<MPageSection variant="actions">
|
|
129
|
-
<MButton native-type="submit" severity="primary" :loading="submitting">
|
|
130
|
-
保存通知
|
|
131
|
-
</MButton>
|
|
132
|
-
</MPageSection>
|
|
133
|
-
</MForm>
|
|
134
|
-
</MPageSection>
|
|
135
|
-
|
|
136
|
-
<MPageSection v-else variant="form" title="安全">
|
|
137
|
-
<p class="settings-hint">
|
|
138
|
-
修改密码、两步验证等敏感操作放在此区;危险动作使用 severity="danger" 并配合确认。
|
|
139
|
-
</p>
|
|
140
|
-
<MSpace>
|
|
141
|
-
<MButton severity="secondary">
|
|
142
|
-
修改密码
|
|
143
|
-
</MButton>
|
|
144
|
-
<MButton severity="danger" text>
|
|
145
|
-
注销账号
|
|
146
|
-
</MButton>
|
|
147
|
-
</MSpace>
|
|
148
|
-
</MPageSection>
|
|
149
|
-
</template>
|
|
150
|
-
</MTabs>
|
|
151
|
-
</MPageContent>
|
|
152
|
-
</MLayoutContent>
|
|
153
|
-
</MLayout>
|
|
154
|
-
</MConfigProvider>
|
|
155
|
-
</template>
|
|
156
|
-
|
|
157
|
-
<style scoped>
|
|
158
|
-
.settings-hint {
|
|
159
|
-
margin: 0 0 var(--m-space-4);
|
|
160
|
-
color: var(--m-color-text-muted);
|
|
161
|
-
font-size: var(--m-font-size-sm);
|
|
162
|
-
}
|
|
163
|
-
</style>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* 黄金样例:设置 / 配置页
|
|
4
|
+
* 窄栏 + Tabs 分组 + MPageSection form;保存用 message 单行回执。
|
|
5
|
+
* @see DESIGN.md · page-layouts.md § Settings · visual-craft § Ops polish
|
|
6
|
+
*/
|
|
7
|
+
import {
|
|
8
|
+
MBreadcrumb,
|
|
9
|
+
MButton,
|
|
10
|
+
MConfigProvider,
|
|
11
|
+
MForm,
|
|
12
|
+
MFormItem,
|
|
13
|
+
MInput,
|
|
14
|
+
MLayout,
|
|
15
|
+
MLayoutContent,
|
|
16
|
+
MLayoutHeader,
|
|
17
|
+
MPageContent,
|
|
18
|
+
MPageHeader,
|
|
19
|
+
MPageSection,
|
|
20
|
+
MSelect,
|
|
21
|
+
MSpace,
|
|
22
|
+
MSwitch,
|
|
23
|
+
MTabs,
|
|
24
|
+
message,
|
|
25
|
+
zhCN,
|
|
26
|
+
} from 'morya-ui'
|
|
27
|
+
import { reactive, ref } from 'vue'
|
|
28
|
+
|
|
29
|
+
const activeTab = ref('profile')
|
|
30
|
+
const submitting = ref(false)
|
|
31
|
+
|
|
32
|
+
const tabs = [
|
|
33
|
+
{ label: '资料', value: 'profile' },
|
|
34
|
+
{ label: '通知', value: 'notify' },
|
|
35
|
+
{ label: '安全', value: 'security' },
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
const profile = reactive({
|
|
39
|
+
displayName: '林晓',
|
|
40
|
+
email: 'linxiao@example.com',
|
|
41
|
+
language: 'zh-CN' as string | undefined,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
const notify = reactive({
|
|
45
|
+
emailDigest: true,
|
|
46
|
+
productUpdates: false,
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
const languageOptions = [
|
|
50
|
+
{ label: '简体中文', value: 'zh-CN' },
|
|
51
|
+
{ label: 'English', value: 'en-US' },
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
async function saveProfile() {
|
|
55
|
+
submitting.value = true
|
|
56
|
+
try {
|
|
57
|
+
// await api.saveProfile(profile)
|
|
58
|
+
message.success('资料已保存')
|
|
59
|
+
} finally {
|
|
60
|
+
submitting.value = false
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function saveNotify() {
|
|
65
|
+
submitting.value = true
|
|
66
|
+
try {
|
|
67
|
+
// await api.saveNotify(notify)
|
|
68
|
+
message.success('通知偏好已保存')
|
|
69
|
+
} finally {
|
|
70
|
+
submitting.value = false
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<template>
|
|
76
|
+
<MConfigProvider :locale="zhCN">
|
|
77
|
+
<MLayout fill-viewport>
|
|
78
|
+
<MLayoutHeader padding="var(--m-space-4) var(--m-space-6)">
|
|
79
|
+
<MBreadcrumb :model="[{ label: '首页', to: '/' }, { label: '系统设置' }]" />
|
|
80
|
+
</MLayoutHeader>
|
|
81
|
+
|
|
82
|
+
<MLayoutContent>
|
|
83
|
+
<MPageContent width="narrow">
|
|
84
|
+
<MPageHeader
|
|
85
|
+
title="系统设置"
|
|
86
|
+
description="按域分组配置;切换 Tab 时保留未保存输入,保存成功用 message 一句话回执。"
|
|
87
|
+
/>
|
|
88
|
+
|
|
89
|
+
<MTabs v-model="activeTab" :tabs="tabs">
|
|
90
|
+
<template #default="{ activeValue }">
|
|
91
|
+
<MPageSection v-if="activeValue === 'profile'" variant="form" title="个人资料">
|
|
92
|
+
<MForm @submit.prevent="saveProfile">
|
|
93
|
+
<MFormItem label="显示名称" name="displayName" required>
|
|
94
|
+
<MInput v-model="profile.displayName" fluid />
|
|
95
|
+
</MFormItem>
|
|
96
|
+
<MFormItem label="工作邮箱" name="email" required>
|
|
97
|
+
<MInput v-model="profile.email" type="email" fluid />
|
|
98
|
+
</MFormItem>
|
|
99
|
+
<MFormItem label="界面语言" name="language">
|
|
100
|
+
<MSelect
|
|
101
|
+
v-model="profile.language"
|
|
102
|
+
:options="languageOptions"
|
|
103
|
+
placeholder="选择语言"
|
|
104
|
+
fluid
|
|
105
|
+
/>
|
|
106
|
+
</MFormItem>
|
|
107
|
+
<MPageSection variant="actions">
|
|
108
|
+
<MSpace>
|
|
109
|
+
<MButton native-type="submit" severity="primary" :loading="submitting">
|
|
110
|
+
保存资料
|
|
111
|
+
</MButton>
|
|
112
|
+
<MButton severity="secondary" text native-type="button">
|
|
113
|
+
恢复默认
|
|
114
|
+
</MButton>
|
|
115
|
+
</MSpace>
|
|
116
|
+
</MPageSection>
|
|
117
|
+
</MForm>
|
|
118
|
+
</MPageSection>
|
|
119
|
+
|
|
120
|
+
<MPageSection v-else-if="activeValue === 'notify'" variant="form" title="通知">
|
|
121
|
+
<MForm @submit.prevent="saveNotify">
|
|
122
|
+
<MFormItem label="邮件摘要" name="emailDigest">
|
|
123
|
+
<MSwitch v-model="notify.emailDigest" />
|
|
124
|
+
</MFormItem>
|
|
125
|
+
<MFormItem label="产品动态" name="productUpdates">
|
|
126
|
+
<MSwitch v-model="notify.productUpdates" />
|
|
127
|
+
</MFormItem>
|
|
128
|
+
<MPageSection variant="actions">
|
|
129
|
+
<MButton native-type="submit" severity="primary" :loading="submitting">
|
|
130
|
+
保存通知
|
|
131
|
+
</MButton>
|
|
132
|
+
</MPageSection>
|
|
133
|
+
</MForm>
|
|
134
|
+
</MPageSection>
|
|
135
|
+
|
|
136
|
+
<MPageSection v-else variant="form" title="安全">
|
|
137
|
+
<p class="settings-hint">
|
|
138
|
+
修改密码、两步验证等敏感操作放在此区;危险动作使用 severity="danger" 并配合确认。
|
|
139
|
+
</p>
|
|
140
|
+
<MSpace>
|
|
141
|
+
<MButton severity="secondary">
|
|
142
|
+
修改密码
|
|
143
|
+
</MButton>
|
|
144
|
+
<MButton severity="danger" text>
|
|
145
|
+
注销账号
|
|
146
|
+
</MButton>
|
|
147
|
+
</MSpace>
|
|
148
|
+
</MPageSection>
|
|
149
|
+
</template>
|
|
150
|
+
</MTabs>
|
|
151
|
+
</MPageContent>
|
|
152
|
+
</MLayoutContent>
|
|
153
|
+
</MLayout>
|
|
154
|
+
</MConfigProvider>
|
|
155
|
+
</template>
|
|
156
|
+
|
|
157
|
+
<style scoped>
|
|
158
|
+
.settings-hint {
|
|
159
|
+
margin: 0 0 var(--m-space-4);
|
|
160
|
+
color: var(--m-color-text-muted);
|
|
161
|
+
font-size: var(--m-font-size-sm);
|
|
162
|
+
}
|
|
163
|
+
</style>
|