企业级组件系统 · 新资源

Vuestic UI 设计系统.

原生 Vuestic 评价表,采用经来源核实的浅色和深色预设、无障碍评分标签、文本区域验证、自动计算的平均分,以及可保留已完成评估的保存状态。

OpenDesign 指南9 个章节33 条参考条目原始应用指南
01

Vuestic UI 设计系统界面预览

评价清晰度、层级和反馈,补充有意义的观察意见,并保存本地评估。

设计评审工作表打开完整示例
Vuestic UI 1.10.3 与 Vue 3;通过 @quasar/extras 2.1.0 在本地捆绑 Material Icons。· 实现参考
02

Vuestic UI 设计系统设计参考

Vuestic UI 1.10.3。预设值从已安装的颜色服务读取,组件变量则来自其 CSS。工作表保留默认浅色预设,但有意将 --va-font-family 覆盖为 system-ui。装饰图形和周围的比例关系均为原创。

默认浅色预设

来源
名称 / 规则值 / 配置用途
primary#154EC1 评分和主要操作。
secondary#767C88 次要角色。
success#3D9209 已保存的结果。
info#158DE3 信息角色。
danger#E42222 错误角色。
warning#FFD43A 警告角色。
backgroundPrimary#f6f6f6 默认主表面。
backgroundSecondary#FFFFFF 默认凸起表面。
backgroundElement#ECF0F1 元素表面。
backgroundBorder#DEE5F2 边界角色。
textPrimary#262824 正文。
textInverted#FFFFFF 反色文本。
focus#49A8FF 焦点角色。

默认深色预设对比

来源
名称 / 规则值 / 配置用途
primary#3472F0 官方深色预设参考;本地示例仍采用浅色主题。
success#66BE33 官方深色预设参考;本地示例仍采用浅色主题。
danger#F34030 官方深色预设参考;本地示例仍采用浅色主题。
backgroundPrimary#050A10 官方深色预设参考;本地示例仍采用浅色主题。
backgroundSecondary#1F262F 官方深色预设参考;本地示例仍采用浅色主题。
backgroundElement#131A22 官方深色预设参考;本地示例仍采用浅色主题。
backgroundBorder#3D4C58 官方深色预设参考;本地示例仍采用浅色主题。
textPrimary#F1F1F1 官方深色预设参考;本地示例仍采用浅色主题。
textInverted#0B121A 官方深色预设参考;本地示例仍采用浅色主题。

原生 CSS 与明确指定的应用比例

来源
名称 / 规则值 / 配置用途
--va-font-family"Source Sans Pro", sans-serif库的默认值;示例中明确覆盖为 system-ui。
--va-button-border-radius0.25rem编译后的原生按钮圆角。
--va-form-element-border-radius0.25rem编译后的共享表单圆角。
--va-button-content-py0.5rem按钮垂直内容内边距。
--va-button-content-px0.75rem按钮水平内容内边距。
--va-rating-number-item-margin0.1em原生数字模式间距参考。
--va-rating-number-item-font-weight700原生数字模式强调样式参考。
Application title34px / 1.15; 29px narrow原创标题层级。
Application spacing6 / 7 / 8 / 10 / 12 / 14 / 16 / 18 / 22 / 24 / 28 / 32px实际的原创样式表数值,而非 Vuestic 令牌层级。
Application panel radius14px原创的外围几何布局。
LayoutFlexible form + 280px summary; stack below 760px适用于嵌入布局的内容高度。
03

Vuestic UI 设计系统完整指南

实用指南,介绍如何为真实界面选择、应用和评审此系统。

DESIGN-vuestic-ui.md

完整指导、实现起点和源代码链接。

下载指南

Vuestic UI 设计系统:具有命名颜色预设的可配置 Vue 库

具有命名颜色预设的可配置 Vue 库

Vuestic 通过 createVuestic 注册共享服务。示例使用从 vuestic-ui 导入的原生组件和默认浅色预设。评分、按钮、进度条和成功提示均通过同一服务解析语义颜色名称。

摘自本 OpenDesign 指南

该工作表将这些组件应用于具体场景:分别提出三个评审问题,收集辅助观察意见,计算平均值,并锁定已保存的本地结果。彩色评审标准标记和双栏布局均为原创应用设计,并非额外的 Vuestic 组件。

阅读配套规范

Vuestic UI 设计系统:区分服务预设与 CSS 几何变量

区分服务预设与 CSS 几何变量

经验证的浅色预设定义了 primary #154EC1、success #3D9209 和 textPrimary #262824。其深色预设使用不同的 primary、text 和 surface 值,而不是简单反转浅色页面。参考表记录了这两种预设,而预览有意保持浅色模式。

组件几何属性通过 CSS 变量配置,例如 --va-button-border-radius 和 --va-form-element-border-radius;在已安装的样式表中,两者的值均为 0.25rem。颜色预设和 CSS 变量覆盖用于解决不同问题:语义角色应使用服务,受支持的组件几何属性则应使用文档说明的变量。

阅读配套规范

Vuestic UI 设计系统:加载所需图标并明确字体覆盖设置

加载所需图标并明确字体覆盖设置

Vuestic 默认的 --va-font-family 指定了 Source Sans Pro。示例将该变量覆盖为 system-ui,避免默认依赖未加载的字体。这样,原生组件标签和应用文案就会使用明确可用的字体栈。

默认评分图标使用 star 和 star_outline 等 Material Icons 名称。它们的本地字体样式表从 @quasar/extras 导入,并与字体文件一同打包。如果缺少该资源,预期的星形图标可能会显示为字面图标名称。图标字体与应用文本的字体覆盖设置分开处理。

阅读配套规范

Vuestic UI 设计系统:用零表示未评分,而不是低分

将零设为未作答状态,而不是低分

每个 VaRating 都绑定到一个评分项的数值。其 max 为五,并启用了 clearable,因此再次选择当前分数即可将该项重置为零。对于零分,界面显示“未评分”,而不是把它呈现为已完成的零分(满分五分)评价。

平均分仅以正分的数量为除数。这样,在填写过程中,未评分的项目就不会拉低平均分。保存仍要求三个项目全部评分,因此最终平均分始终反映完整的评估结果。更改评分会立即更新完成状态标签、进度条和摘要。

  1. 保存空白表单,并查看缺少评分和备注时的提示。
  2. 将清晰度设为 4、层级设为 3、反馈设为 2;平均分将变为 3.0。
  3. 填写一条具体的观察并保存;然后点击“重新开始”重置整份表单。

阅读配套规范

Vuestic UI 设计系统:有价值的观察需要有意义的文本和足够的空间

有效的观察意见需要有意义的文字和充足的空间

VaTextarea 有明确可见的标签、400 个字符的上限和字符计数器。尝试保存后,应用会检查去除首尾空格的文本是否至少包含 20 个字符。因此,即使一串空格在字符长度上达标,也无法满足要求。

该文本区域启用了自动调整大小,最少显示 4 行,最多显示 12 行。这是一项实际功能设置,而不只是示例属性:如果不启用自动调整大小,最小行数设置无法实现预期的可扩展备注区域。修复后的版本能让较窄屏幕上的观察内容保持可见,同时对特别长的备注保留正常滚动功能。

阅读配套规范

Vuestic UI 设计系统:根据完成情况计算进度,而非根据平均分

根据完成情况而非评分平均值计算进度

进度条衡量已获得正分的评分项数量,计算方式为已评分项数除以 3,再乘以 100。旁边的大号数字表示平均分。这两者的分母不同,不应混为一谈:即使三项得分都很低,完成度仍可达到 100%。

完成情况说明直接写出分子和分母。平均分标注为“已评分项目的平均分”,摘要则列出每项的分数。这些标签能帮助读者理解计算方式,而不是把含义不明的进度条误解为整体质量判断。

阅读配套规范

Vuestic UI 设计系统:完成本地评估后锁定内容,直到明确重置

锁定已完成的本地评估,直至明确重置

点击保存后,程序会先将 attempted 设为 true,再检查所有评分和观察内容,然后才启用已保存状态。saved 标记会将评分和文本区域设为只读,并禁用保存按钮。成功提示会说明评估已保存在本地,且未发送任何内容。

“重新开始”会在同一个处理函数中清除所有评分、备注、验证提示的显示状态和已保存状态。此操作有意设置为明确的重置步骤,因为保存后若更改任一值,确认提示就会过时。此示例不涉及后端、账户或评审接收方。

阅读配套规范

Vuestic UI 设计系统:为每个评分项注明其评分标准和数值

为每个评分项注明其评分标准和数值

原生 VaRating 项会在无障碍树中公开按钮。aria-item-label 包含评分标准名称以及数值和上限占位符,可生成“清晰度,得分 4(满分 5)”这样的标签。这样,同一页面上出现三组评分时,就不会有 15 个难以区分的星形控件。

文本区域有自己的可见标签,进度条有完成情况标签,已保存提示则是一个状态区域。装饰性的评分标准标记会对辅助技术隐藏。本地检查点击了带实际标签的评分按钮、测试了验证逻辑,并在 280px 宽度下检查最终布局,而不只是确认存在 ARIA 属性。

  • 为每个重复的评分项设置与其评分标准相对应的项目标签。
  • 让未回答和只读状态明显区分开来。
  • 与实际的原生控件交互后,核对数值摘要。

阅读配套规范

Vuestic UI 设计系统:引入插件、组件 CSS 和本地图标资源

引入插件、组件 CSS 和本地图标资源

入口文件注册 createVuestic,并在原有布局样式表之前引入 vuestic-ui/css。App.vue 会引入所有用到的组件,因此示例不依赖未记录的自动引入配置。共享字体覆盖样式在库 CSS 之后应用。

软件包命令仅将 @quasar/extras 用作本地 Material Icons 字体的来源;它不会注册 Quasar,也不会将其组件混入此工作表。上方完整的 SFC 和样式表可直接放入下方的 Vite Vue 配置中。生成的独立预览会内联所需资源,不会获取远程字体。

阅读配套规范

Vuestic UI 设计系统组件示例

完整的原生设计评审工作表

VaRating、VaTextarea、VaButton、VaChip、VaProgressBar 和 VaAlert 共用同一个评估模型。

vue
<script setup>
import {ref,computed} from 'vue';
import {VaRating,VaTextarea,VaButton,VaAlert,VaChip,VaProgressBar} from 'vuestic-ui';
const criteria=ref([{name:'Clarity',hint:'Can you tell what the next action will do?',value:0},{name:'Hierarchy',hint:'Does the most important information stand out?',value:0},{name:'Feedback',hint:'Does the page explain what changed?',value:0}]);
const note=ref(''),attempted=ref(false),saved=ref(false);
const rated=computed(()=>criteria.value.filter(x=>x.value>0).length),average=computed(()=>rated.value?(criteria.value.reduce((a,x)=>a+x.value,0)/rated.value).toFixed(1):'—');
const noteError=computed(()=>attempted.value&&note.value.trim().length<20);
function save(){attempted.value=true;if(rated.value===3&&note.value.trim().length>=20)saved.value=true}
function reset(){criteria.value.forEach(x=>x.value=0);note.value='';saved.value=false;attempted.value=false}
</script>
<template><main class="review-shell"><header><p class="eyebrow">DESIGN CRITIQUE · PERSONAL WORKSHEET</p><h1>Turn an impression into useful feedback.</h1><p>Review an interface using three specific questions. Keep one concrete observation alongside the scores.</p></header><div class="review-layout"><section class="review-form"><div class="form-head"><h2>Your assessment</h2><VaChip outline size="small">{{rated}} of 3 rated</VaChip></div><div v-for="(criterion,index) in criteria" :key="criterion.name" class="criterion"><div class="criterion-mark" :class="'mark-'+index" aria-hidden="true"><i></i><b></b></div><div class="criterion-body"><h3>{{criterion.name}}</h3><p>{{criterion.hint}}</p><VaRating v-model="criterion.value" :max="5" clearable color="primary" :readonly="saved" :aria-label="criterion.name+' rating: '+criterion.value+' of 5'" :aria-item-label="criterion.name+' score {value} of {max}'"/><span class="score">{{criterion.value?criterion.value+' / 5':'Not rated'}}</span></div></div><p v-if="attempted&&rated<3" class="error" role="alert">Rate all three criteria before saving.</p><VaTextarea v-model="note" label="One concrete observation" placeholder="For example: the Save button gives no confirmation after the form closes." autosize :min-rows="4" :max-rows="12" :max-length="400" counter :error="noteError" :error-messages="noteError?['Write at least 20 meaningful characters.']:[]" :readonly="saved"/><div class="actions"><VaButton @click="save" :disabled="saved">Save assessment</VaButton><VaButton preset="secondary" @click="reset">Start again</VaButton></div></section><aside><div class="summary"><p class="eyebrow">ASSESSMENT SNAPSHOT</p><div class="average">{{average}}<span>/ 5</span></div><p class="average-label">Average of rated criteria</p><VaProgressBar :model-value="rated/3*100" color="primary" aria-label="Criteria completion"/><p class="completion">{{rated}} of 3 criteria completed</p><p class="guidance">A score starts a conversation. Your example explains what should change and why.</p><dl><div v-for="criterion in criteria" :key="criterion.name"><dt>{{criterion.name}}</dt><dd>{{criterion.value||'—'}}</dd></div></dl></div><VaAlert v-if="saved" color="success" outline class="saved" role="status"><strong>Assessment saved locally.</strong><p>All three criteria and your observation are captured in this preview. Nothing was sent.</p></VaAlert><p v-else class="local-note">This worksheet stores only local page state. It does not submit a review to another person.</p></aside></div></main></template>

代码参考

  • 0 表示尚未评分,不计入平均分。
  • 保存前需完成全部三项评分,并输入至少 20 个去除首尾空白后的字符。
  • 保存后,评分和文本将变为只读状态,直到重新开始。

完整的原始布局和字体配置

明确的字体覆盖、响应式卡片和装饰性标准标记。

css
:root{--va-font-family:system-ui,sans-serif}html,body,#app{height:auto;min-height:0;margin:0}*{box-sizing:border-box}body{background:#f3f5f8;color:#262824;font-family:system-ui,sans-serif}.review-shell{max-width:1100px;margin:auto;padding:32px}.eyebrow{font-size:10px;font-weight:700;letter-spacing:.13em;color:#667182}h1{font-size:34px;line-height:1.15;margin:12px 0;max-width:710px}header>p:last-child{max-width:640px;line-height:1.6;font-size:15px;color:#677080}.review-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:24px;margin-top:28px}.review-form,.summary{background:white;border:1px solid #dee5f2;border-radius:14px;padding:24px;min-width:0}.form-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.form-head h2{font-size:20px;font-weight:650}.criterion{display:flex;gap:18px;padding:24px 0;border-bottom:1px solid #e6eaf0}.criterion:last-of-type{margin-bottom:24px}.criterion-body{min-width:0;flex:1}.criterion h3{font-size:16px;font-weight:650;margin:0 0 6px}.criterion p{font-size:13px;line-height:1.5;color:#677080;margin:0 0 12px}.criterion-mark{width:58px;height:58px;border-radius:12px;flex-shrink:0;position:relative;overflow:hidden;background:#e8efff}.criterion-mark i,.criterion-mark b{position:absolute;display:block}.mark-0 i{width:27px;height:27px;background:#7a9cdf;border-radius:50%;left:10px;top:14px}.mark-0 b{width:14px;height:14px;background:#154ec1;border-radius:50%;left:31px;top:22px}.mark-1{background:#eee8f8}.mark-1 i{width:15px;height:34px;background:#9273b6;left:10px;top:13px}.mark-1 b{width:15px;height:19px;background:#c2aedb;left:32px;top:28px}.mark-2{background:#e6f0e0}.mark-2 i{width:36px;height:23px;border-radius:6px;background:#86a16f;left:11px;top:14px}.mark-2 b{border:8px solid transparent;border-top-color:#86a16f;left:17px;top:33px}.score{display:block;font-size:11px;color:#667182;margin-top:7px}.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}.average{font-size:64px;line-height:1.2;font-weight:650;margin-top:16px;color:#154ec1}.average span{font-size:19px;color:#78828f;font-weight:400;margin-left:8px}.average-label{font-size:12px;color:#697482;margin:5px 0 24px}.completion{font-size:11px;color:#687387;margin-top:10px}.guidance{font-size:14px;line-height:1.6;margin:24px 0}.summary dl>div{display:flex;justify-content:space-between;border-top:1px solid #e6eaf0;padding:12px 0;font-size:13px}.summary dd{font-weight:700}.saved{margin-top:16px;font-size:13px;line-height:1.6}.saved p{margin-top:7px}.local-note{font-size:12px;line-height:1.6;color:#687387;padding:16px 5px}.error{font-size:13px;color:#b71717;margin-bottom:16px}@media(max-width:760px){.review-shell{padding:20px}.review-layout{grid-template-columns:minmax(0,1fr)}h1{font-size:29px}}@media(max-width:360px){.review-shell{padding:14px}.review-form,.summary{padding:16px}.criterion{gap:12px}.criterion-mark{width:38px;height:48px}.criterion-mark i,.criterion-mark b{transform:scale(.7);transform-origin:left}.criterion-mark i{left:4px}.criterion-mark b{left:18px}.actions>*{width:100%}.va-textarea{max-width:100%}}

代码参考

  • Material Icons 使用各自的字体系列。
  • 不设置文档高度下限。
04

Vuestic UI 设计系统 Agent 设置

实现起点

已验证 Vuestic UI 1.10.3,以及来自 @quasar/extras 2.1.0 的本地 Material Icons。提供了两份完整源代码示例;无需外部字体服务。

javascript
// npm create vite@latest vuestic-review -- --template vue
// cd vuestic-review && npm install
// npm install [email protected] @quasar/[email protected]
// Save the complete examples as src/App.vue and src/style.css.
// src/main.js:
import {createApp} from 'vue';
import {createVuestic} from 'vuestic-ui';
import 'vuestic-ui/css';
import '@quasar/extras/material-icons/material-icons.css';
import './style.css';
import App from './App.vue';
createApp(App).use(createVuestic()).mount('#app');
// index.html: <div id="app"></div><script type="module" src="/src/main.js"></script>
// npm run dev

适用于你项目的提示词

Agent 提示词
使用 Vuestic UI 1.10.3,通过三个原生 VaRating 评估标准、VaTextarea、进度、状态以及保存/重置控件,复现设计评审工作表。根据已评分的标准计算平均分,并要求三项评分全部完成,且去除首尾空白后的备注至少包含 20 个字符,才能保存。保留自动调整大小的文本区域,确保完整评审内容始终可见,并确保保存后的只读状态和重置行为一致。引入 createVuestic、原生 CSS 和本地图标字体。这是本地评审记录,不是检查批次服务。
05

Vuestic UI 设计系统来源与范围

Vuestic UI 1.10.3,使用默认浅色配色预设和明确的系统字体覆盖。原始评审问题与插图。保存状态仅保存在本地,不会向外部提交评审,也不会在重新加载后保留。