@gwall/std-ui
| Install | |
|---|---|
npm install @gwall/std-ui |
|
| Latest Version: | 0.0.4 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Oct 19, 2026 |
| Links: | npm |
@gwall/std-ui
巨沃标准 Vue 3 组件库。由低代码平台物料组件(gw-*)标准化改造而来:保留能力、改变调用方式——
全部组件为标准 Vue 3 + TypeScript 组件(defineProps / defineEmits / v-model / defineExpose),
去除低代码运行时依赖(变量池、new Function 事件脚本、宿主全局对象),视觉与交互和原组件保持一致。
- Vue
^3.2.47+ Element Plus^2.7.3+@element-plus/icons-vue ^2.1.0(peer 依赖) - ESM 产物 +
preserveModules,支持按需引入与 tree shaking - 第一批组件:
GwStdButton/GwStdInput/GwStdSelect - 第二批组件:
GwStdForm/GwStdTable/GwStdDialog - 第三批组件:
GwStdTree/GwStdUpload/GwStdTabs - 第四批组件:
GwStdRadio/GwStdCheckbox/GwStdSwitch/GwStdGroupCheckbox - 第五批组件:
GwStdDate/GwStdTimePicker/GwStdCascader - 第六批组件:
GwStdRate/GwStdSlider/GwStdTag/GwStdNumber - 第七批组件:
GwStdAlert/GwStdColorPicker/GwStdMark/GwStdDivider/GwStdIcon/GwStdText - 第八批组件:
GwStdProvinceCity/GwStdRichEditor/GwStdDynamicSelect/GwStdCustomData - 第九批组件:
GwStdSqlRuleInput - 第十批组件:
GwStdSelectVirtualized/GwStdDynamicConfig - 第十一批组件:
GwStdFileUpload/GwStdPictureUpload/GwStdUploadManage - 第十二批组件:
GwStdCard/GwStdDrawer/GwStdFormDrawer/GwStdVerticalTabs/GwStdIterator/GwStdDivideContainer/GwStdElevatorTabs - 第十三批组件:
GwStdListCard/GwStdPhotoWall/GwStdCronExpression/GwStdFlowChart - 第十四批组件:
GwStdProgress/GwStdTimeline/GwStdSteps/GwStdDeliverySteps/GwStdQrcode - 第十五批组件:
GwStdCarousel/GwStdRoleCard/GwStdDimensionCard/GwStdSquareData/GwStdMediaGallery/GwStdDataVisualization - 第十六批组件:
GwStdGroupList/GwStdDataMapping/GwStdPermissionTransfer/GwStdCalendar/GwStdMap/GwStdListGenerate - 第十七批组件:
GwStdPagination/GwStdImage/GwStdCardMsg/GwStdCustomCard/GwStdCustomInfo - 第十八批组件:
GwStdScanTable/GwStdExcelChart/GwStdComment/GwStdLinkForm(GwStdExcelChart已于后续移除) - 第十九批组件:
GwStdTrackingNumber/GwStdNumberCard/GwStdUserCard/GwStdNotification/GwStdDataList - 第二十批组件:
GwStdBarChart/GwStdLineChart/GwStdPieChart/GwStdProgressChart/GwStdQuickAccess(引入 echarts peer 依赖) - 第二十一批组件:
GwStdHtmlText/GwStdIconButtonGroup/GwStdIframe/GwStdElectronicScale/GwStdApiDebug/GwStdCodeEditor(引入 codemirror peer 依赖) - 第二十二批组件:
GwStdDropdownButton/GwStdButtonGroup/GwStdExpression/GwStdLogicDesignerLog(引入 panzoom peer 依赖) - 第二十三批组件:
GwStdScreenRecord/GwStdRapidModeling(projectDesigner 因依赖平台宿主注入的设计器本体不可迁移,跳过) - 第二十四批组件:
GwStdChartTitle/GwStdTimeSelect/GwStdMenuIcon/GwStdLogsShow/GwStdMultilevelTable/GwStdMagnifier(前两者由图表件内部件公开化;multilevelTable 原组件即未实现、magnifier 原组件为半成品,均按现状保留能力补全) - 第二十五批组件:
GwStdAnnexShow/GwStdElevatorFloatDetails/GwStdProjectDesigner(projectDesigner 为注入壳:设计器本体由宿主注入,diff/合并逻辑保留为纯函数) - 第二十六批组件:
GwStdMagnifyingGlass/GwStdMagnifyingGlassNew/GwStdDragVariables(两个放大镜 + 可拖拽变量列表;magnifyGlassNew 完整弹窗渲染低代码页面改#dialog插槽注入,联合搜索参数保留为buildOrSearchParams纯函数) - 第二十七批组件:
GwStdGridLayout/GwStdChartContainer(栅格表单容器 + 仪表盘网格容器;格子内低代码指标组件改作用域插槽,新增 peer 依赖vue-grid-layout;同批 flex 布局容器GwStdLayout已于第三十二批移除) - 第二十八批组件:
GwStdBillsSetting/GwStdPageConfigPanel(单据设置页 + 页面配置面板;原 billsSetting 其余 7 个配置页已注释停用不迁移,经插槽扩展;写死配置接口改 fetchConfig/saveConfig 注入) - 第二十九批组件:
GwStdQueryModule/GwStdQueryCondition(查询模块 + 条件行;0.0.3 起查询模块为内核 1:1 移植版——原低代码运行时内核约万行整体搬运,方案管理/常用条件/字段显隐排序/折叠锁定/联动查询原行为保留,声明式groupsprop 直传字段池,原变量池脚本改@search等事件,方案持久化接口经apiprop 注入;GwStdQueryCondition 条件行保留为独立小组件) - 第三十批组件:
GwStdLogicDesigner/GwStdLogicNodePanel/GwStdLogicLineConfig/GwStdLogicCondition/GwStdLogicContextMenu(逻辑设计器 jsPlumb 画布:组件拖入、连线、容器、框选复制粘贴、撤销、自动排版、缩放平移;getComponent/getFlowConfig/updateFlowConfig/executeFlow 四接口改 props + 函数注入,节点表单改 #node-form 插槽) - 第三十一批组件:
GwStdNewTable(标准列表,原 gw-newTable 全家族:el-table 标准模式 + fastMode VTable 性能模式、九类行内编辑器、表头自定义/筛选、右键菜单、同步/异步/前端勾选导出、合计、子表展开、标记底色、跨页全选、拖拽排序、行列锁定;全部取数与配置持久化改函数注入 props,事件脚本改 emits,setEvent 16 方法改 defineExpose;新增 peer 依赖@visactor/vue-vtable、@visactor/vtable-editors) - 第三十二批组件:
GwStdNewTableConfig列表配置面板 +createGwStdTableConfigStore工厂(原 gw-newTable 设计器属性面板链 13 文件整体移植:设计列表/字段勾选/查询条件配置/列属性/按钮配置/浮窗配置/历史记录;variablePoolStore 改工厂伪造,历史记录等 11 接口经apiprop 注入默认同域 fetch fail-soft,vuedraggable 改 sortablejs,图标字体复用 query-module iconfont 资产);同时移除GwStdLayout(弹性布局容器,宿主可自行以 flex 容器替代,GwStdGridLayout不受影响) - 第三十三批组件:
GwStdImportDialog数据导入弹窗(原 componentsExtra/Upload/UploadDialog:拖拽多选上传 + 重名/类型/大小/数量校验 + 导入模板下载 + 上传到服务器;后端 apiName 与非标 api 改uploadRequest函数注入)
安装
npm install @gwall/std-ui
本地更新并重新安装同版本 .tgz 后,需重启宿主 Vite 并强制重建依赖缓存:npm run dev -- --force。仅刷新浏览器可能混用旧预编译组件 JS 与新 style.css,造成导航按钮边框、操作换行、抽屉布局等样式失效。
宿主项目需自行安装并注册 peer 依赖:
npm install vue element-plus @element-plus/icons-vue
# 图表件(GwStdBarChart / GwStdLineChart / GwStdPieChart)额外需要 echarts ^5
npm install echarts
# 代码编辑器(GwStdCodeEditor)额外需要 codemirror ^5 与其 Vue3 包装
npm install codemirror@^5 codemirror-editor-vue3
# 连线画布:数据映射(GwStdDataMapping)需要 jsplumb;逻辑流程日志(GwStdLogicDesignerLog)需要 jsplumb + panzoom
npm install jsplumb panzoom
重要:组件模板内部使用
el-button/el-select等全局组件,宿主必须全局注册 Element Plus (app.use(ElementPlus)),仅用 unplugin 按需解析器无法命中组件库内部的el-*组件。
引入方式
全量引入
import { createApp } from 'vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import '@gwall/std-ui/style.css'; // 组件库样式(button/form 等扩展样式汇总)
import App from './App.vue';
createApp(App).use(ElementPlus).mount('#app');
<script setup lang="ts">
import { GwStdButton, GwStdInput, GwStdSelect } from '@gwall/std-ui';
</script>
按需引入(推荐)
<script setup lang="ts">
import { GwStdButton } from '@gwall/std-ui/button';
import { GwStdInput } from '@gwall/std-ui/input';
import { GwStdSelect } from '@gwall/std-ui/select';
import '@gwall/std-ui/style.css'; // 样式一次引入即可(体积很小)
</script>
按需入口:@gwall/std-ui/button、@gwall/std-ui/input、@gwall/std-ui/select、
@gwall/std-ui/form、@gwall/std-ui/table、@gwall/std-ui/dialog、
@gwall/std-ui/tree、@gwall/std-ui/upload、@gwall/std-ui/tabs、
@gwall/std-ui/radio、@gwall/std-ui/checkbox、@gwall/std-ui/switch、@gwall/std-ui/group-checkbox、
@gwall/std-ui/date、@gwall/std-ui/time-picker、@gwall/std-ui/cascader、
@gwall/std-ui/rate、@gwall/std-ui/slider、@gwall/std-ui/tag、@gwall/std-ui/number、
@gwall/std-ui/alert、@gwall/std-ui/color-picker、@gwall/std-ui/mark、@gwall/std-ui/divider、
@gwall/std-ui/icon、@gwall/std-ui/text、
@gwall/std-ui/province-city、@gwall/std-ui/rich-editor、@gwall/std-ui/dynamic-select、@gwall/std-ui/custom-data、
@gwall/std-ui/sql-rule-input、@gwall/std-ui/select-virtualized、@gwall/std-ui/dynamic-config、
@gwall/std-ui/file-upload、@gwall/std-ui/picture-upload、@gwall/std-ui/upload-manage、
@gwall/std-ui/card、@gwall/std-ui/drawer、@gwall/std-ui/form-drawer、@gwall/std-ui/vertical-tabs、
@gwall/std-ui/iterator、@gwall/std-ui/divide-container、@gwall/std-ui/elevator-tabs、
@gwall/std-ui/list-card、@gwall/std-ui/photo-wall、@gwall/std-ui/cron-expression、@gwall/std-ui/flow-chart、
@gwall/std-ui/progress、@gwall/std-ui/timeline、@gwall/std-ui/steps、@gwall/std-ui/delivery-steps、@gwall/std-ui/qrcode、
@gwall/std-ui/carousel、@gwall/std-ui/role-card、@gwall/std-ui/dimension-card、@gwall/std-ui/square-data、
@gwall/std-ui/media-gallery、@gwall/std-ui/data-visualization、
@gwall/std-ui/group-list、@gwall/std-ui/data-mapping、@gwall/std-ui/permission-transfer、
@gwall/std-ui/calendar、@gwall/std-ui/map、@gwall/std-ui/list-generate、
@gwall/std-ui/pagination、@gwall/std-ui/image、@gwall/std-ui/card-msg、
@gwall/std-ui/custom-card、@gwall/std-ui/custom-info、
@gwall/std-ui/scan-table、
@gwall/std-ui/comment、@gwall/std-ui/link-form、
@gwall/std-ui/tracking-number、@gwall/std-ui/number-card、@gwall/std-ui/user-card、
@gwall/std-ui/notification、@gwall/std-ui/data-list、
@gwall/std-ui/bar-chart、@gwall/std-ui/line-chart、@gwall/std-ui/pie-chart、
@gwall/std-ui/progress-chart、@gwall/std-ui/quick-access、@gwall/std-ui/chart-shared(时段工具)、
@gwall/std-ui/html-text、@gwall/std-ui/icon-button-group、@gwall/std-ui/iframe、
@gwall/std-ui/electronic-scale、@gwall/std-ui/api-debug、@gwall/std-ui/code-editor、
@gwall/std-ui/dropdown-button、@gwall/std-ui/button-group、@gwall/std-ui/expression、@gwall/std-ui/logic-designer-log、
@gwall/std-ui/screen-record、@gwall/std-ui/rapid-modeling、
@gwall/std-ui/chart-title、@gwall/std-ui/time-select、@gwall/std-ui/menu-icon、
@gwall/std-ui/logs-show、@gwall/std-ui/multilevel-table、@gwall/std-ui/magnifier、
@gwall/std-ui/annex-show、@gwall/std-ui/elevator-float-details、@gwall/std-ui/project-designer、
@gwall/std-ui/magnifying-glass、@gwall/std-ui/magnifying-glass-new、@gwall/std-ui/drag-variables、
@gwall/std-ui/grid-layout、@gwall/std-ui/chart-container、
@gwall/std-ui/page-config-panel、@gwall/std-ui/bills-setting、@gwall/std-ui/query-module、@gwall/std-ui/logic-designer、
@gwall/std-ui/new-table、@gwall/std-ui/import-dialog,
未引入的组件模块会被 tree shaking 移除。
图标字体说明
组件沿用低代码平台的图标 class 约定:gicon gicon-xxx。gicon / gwicon 字体文件不在本包内,
由宿主环境提供(与原平台一致)。传入 'gicon-xxx' 图标名时:
- 宿主已引入平台字体 → 正常渲染;
- 未引入 → 图标位为空,不影响其它功能。
element-plus 图标(组件对象,如 :icon="Search")与图片地址(http(s):// / data:image)不依赖平台字体,开箱可用。
GwStdButton 按钮
由 gw-button 改造。el-button 全部能力透传,另扩展平台按钮类型、下拉模式、浮标提示、遮挡检测。
<GwStdButton type="primary" :loading="saving" @click="onSave">保存</GwStdButton>
<GwStdButton
type="primary"
:items="[{ label: '新增' }, { label: '编辑', helpText: '编辑选中行' }, { label: '删除', disabled: true }]"
@select="(item, index) => console.log(item, index)"
>更多操作</GwStdButton>
Props
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| type | '' | 'primary' | 'success' | 'info' | 'warning' | 'danger' | 'danger_old' | 'notBorder' | 'notBorder_danger' | 'scanStyle' |
'' |
后四个为平台扩展类型(样式随包提供) |
| size | 'gw' | 'small' | 'default' | 'large' |
'gw' |
gw 为平台紧凑尺寸(22px) |
| plain / round / circle / link / text | boolean |
false |
同 el-button |
| color | string |
'' |
自定义按钮颜色 |
| disabled | boolean |
false |
禁用 |
| loading | boolean |
false |
加载中(完全受控,原组件点击后自动 loading 1s 的行为已去除) |
| icon | string | Component |
'' |
'gicon-xxx' 字体图标 / element 图标组件 / 图片地址 |
| width / height | string |
'' |
自定义宽高(如 '120px'),原 sizeCustom + width/height |
| showTooltip | boolean |
false |
显示浮标提示 |
| tooltipStyle | 'left' | 'center' |
'left' |
浮标样式 |
| helpText | string |
'' |
浮标帮助文本(支持 \n 换行) |
| items | GwStdButtonDropdownItem[] |
[] |
下拉菜单项,≥2 项渲染为下拉按钮(原 buttonsConfig) |
| detectCover | boolean |
false |
开启"被抽屉遮挡"轮询检测(原 buttonFolding) |
GwStdButtonDropdownItem:{ label: string; icon?: string | Component; disabled?: boolean; helpText?: string }
Emits
click(MouseEvent)、select(item, index)、covered-change(boolean)
GwStdInput 输入框
由 gw-input 改造。text / textarea / number 三态,数值过滤与精度格式化、可锁定、可选内置表单项。
<!-- 普通用法 -->
<GwStdInput v-model="name" placeholder="请输入名称" clearable />
<!-- 数值 + 精度:type '1' 截断 / '2' 四舍五入,失焦生效 -->
<GwStdInput v-model="price" type="number" :precision="{ value: 2, type: '2' }" :default-precision="2" />
<!-- 内置表单项:传 label / rule / rules / name 任意一项即渲染 el-form-item 结构 -->
<GwStdInput v-model="email" label="邮箱" name="email" rule="email-req" required />
<!-- 可锁定(原 inputInlineLock):有值才可锁定,v-model:locked 受控 -->
<GwStdInput v-model="amount" lockable v-model:locked="locked" />
Props(常用)
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| modelValue | string | number |
'' |
v-model |
| type | 'text' | 'textarea' | 'number' |
'text' |
number 用 text 渲染 + 组件自行过滤(避免原生 number 输入非法字符时丢值) |
| precision | { value: number; type: '1' | '2' } |
— | 数值精度:'1' 截断、'2' 四舍五入,失焦时格式化(原 markFormat) |
| defaultPrecision | number |
2 |
未配置 precision 时的四舍五入位数(原全局 G.global_Decimal_Places 默认 2) |
| lockable / locked | boolean |
false |
可锁定 / 锁定状态(v-model:locked),锁定后禁用不可聚焦 |
| prefixIcon / suffixIcon | string | object |
'' |
'gicon-xxx' / element 图标 / 图片地址 |
| scrollBottomAuto | boolean |
false |
textarea 内容变化后自动滚到底部 |
| disabled / readonly | boolean |
false |
禁用 / 只读(视觉与交互态) |
| 表单项 | label / labelWidth / labelHidden / labelFontsize / valueFontsize / labelAlign / flexDirection / isUnderlined / required / rule / rules / name / showHelp / helpContent |
rule 支持低代码全部内置规则:required、email、phone、idCard、length、date、url、price、
ip、zipCode、chinese 等,加 -req 后缀表示必填版(如 email-req);rules 可传 element-plus
FormItemRule 叠加自定义校验。name 即 el-form-item 的 prop,配合 el-form 的 model 与 validate() 使用。
Emits
update:modelValue、update:locked、change、focus、blur、enter、prefix-click、suffix-click、clear
Expose
focus()、blur()
GwStdSelect 下拉选择
由 gw-select 改造。单选/多选/限选、色点、折叠标签、底部全选/清空/反选、分组过滤、默认选中、类型归一化。
<!-- 基础 -->
<GwStdSelect v-model="status" :options="statusOptions" label="状态" placeholder="请选择" />
<!-- 带色点:选项携带 colors 字段即自动展示 -->
<GwStdSelect v-model="status" :options="[{ label: '待处理', value: '1', colors: '#f56c6c' }]" />
<!-- 多选 + 折叠标签 + 默认全选 -->
<GwStdSelect v-model="tags" :options="options" multiple collapse-tags :max-collapse-tags="2"
collapse-tags-tooltip select-all-default />
<!-- 分组过滤:选项 groupcode 命中 filterCodes 才显示(原 filterCode 变量池版) -->
<GwStdSelect v-model="v" :options="options" :filter-codes="['status']" />
<!-- 值类型归一化:选项值与 v-model 均为 number -->
<GwStdSelect v-model="num" :options="options" value-type="number" />
Props(常用)
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| modelValue | any |
— | v-model,多选为数组 |
| options | GwStdSelectOption[] |
[] |
选项:{ label, value, disabled?, colors?, groupcode?, ...扩展字段 } |
| labelKey / valueKey | string |
'label' / 'value' |
自定义取值字段(原 bindName / bindValue) |
| multiple / multipleLimit | boolean / number |
false / 0 |
多选 / 最多可选数 |
| clearable / filterable / allowCreate / automaticDropdown | boolean |
— | 同 el-select;filterable 含下拉头部搜索框(平台样式) |
| valueType | 'string' | 'number' |
— | 值类型归一化:多选自动去重、字符串拆分、与选项类型对齐 |
| collapseTags / maxCollapseTags / collapseTagsTooltip | boolean / number / boolean |
false / 1 / false |
多选折叠标签(tag 渲染为平台定制样式) |
| filterCodes | string[] |
[] |
按 groupcode 过滤选项 |
| filterEmptyCode | boolean |
false |
选项无分组码时是否过滤掉 |
| selectFirst | boolean |
false |
选项加载后默认选中第一项 |
| selectAllDefault | boolean |
false |
选项加载后默认全选(多选) |
| showFooterActions | boolean |
true |
下拉底部操作栏(全选/清空/反选) |
| disabled / readonly | boolean |
false |
禁用 / 只读 |
| 表单项 | 同 GwStdInput |
Emits
update:modelValue、change、focus、blur、visible-change、remove-tag、clear、enter
Expose
focus()、getSelectedOption()(按当前值返回选中的选项对象,多选返回数组)
远程数据源(原 bindData/bindType 的替代)
原组件的字典 / 数据源远程加载依赖平台宿主(Request、G.top().G.sysDictOptions),标准版由调用方拉取后传入 options:
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdSelect } from '@gwall/std-ui/select';
import { getDict } from '@/api'; // 业务侧接口
const options = ref([]);
const loadOptions = async () => {
options.value = await getDict('warehouse'); // [{ label, value, colors }]
};
</script>
<template>
<GwStdSelect v-model="warehouse" :options="options" label="仓库"
select-first @focus="loadOptions" @visible-change="(v) => v && loadOptions()" />
</template>
GwStdForm 动态表单(第二批,原 gw-dynamic-form)
配置驱动的动态表单:一份 fields 配置渲染整表,内置校验、回车流转、分组折叠与锚点导航、业务周格式日期。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdForm } from '@gwall/std-ui/form';
import type { GwStdFormFieldGroup } from '@gwall/std-ui/form';
const formData = ref<Record<string, any>>({});
const fields: GwStdFormFieldGroup[] = [
{
group: '基础信息',
list: [
{ key: 'skuCode', name: '商品编码', required: true, default: 'SKU-001' },
{ key: 'qty', name: '数量', type: 'integer' },
{ key: 'status', name: '状态', type: 'select', options: [{ label: '待处理', value: '1' }] },
],
},
{
group: '补充信息',
list: [
{ key: 'yearWeek', name: '年周', type: 'date', format: 'yyyy-ww' }, // 业务周格式
{ key: 'frozen', name: '冻结', type: 'switch', options: { activeValue: '1', inactiveValue: '0' } },
],
},
];
</script>
<template>
<GwStdForm ref="formRef" v-model="formData" :fields="fields" is-group :row-number="3" />
</template>
字段类型(GwStdFormField.type)
input(默认)/ password / letter(仅字母)/ integer(仅整数)/ number(数值,失焦修正)/
select / selectAdd(多选可创建)/ date / dateTime / time / switch / text(纯展示);
date / dateTime 支持 format: 'yyyy-ww' | 'yyyyww' | 'yyyy-WW' | 'yyyyWW' 业务周格式与 isRange 范围模式。
Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
表单值对象 | {} |
fields |
字段分组配置(原 formConfigInfo) | [] |
is-group |
分组模式:分组折叠 + 锚点导航 | false |
is-hide-radio |
隐藏分组锚点 | false |
v-model:active-group |
当前激活分组(原 activeTab) | 首组 |
row-number |
每行字段数 | 3 |
label-width / label-position / size |
el-form 布局 | 80 / 'right' / 'small' |
disabled / readonly / is-underlined |
整表状态 | — |
enter-flow |
回车流转开关 | true |
height |
内容区高度(超出滚动,锚点导航生效前提) | — |
Emits / Expose
- emits:
update:modelValue、change(key, value)、enter(key)、enter-complete(values)(回车流转到末尾且全部校验通过)、reset - expose:
reset()(恢复 default 配置值)、submitForm(): Promise<values | false>、validate()、validateField(key)、clearValidate()、focusField(key)、getFormModel()
GwStdTable 表格(第二批,原 gw-table)
列配置驱动的表格:格式化列、行内编辑、可点击列、switch 列、操作列、多选/单选、跨页序号、受控分页。 数据与分页完全受控(原内置 Request 远程取数移除,由调用方请求后传入)。
<script setup lang="ts">
import { ref, computed } from 'vue';
import { GwStdTable } from '@gwall/std-ui/table';
import type { GwStdTableColumn } from '@gwall/std-ui/table';
const columns: GwStdTableColumn[] = [
{ prop: 'skuCode', label: '商品编码', width: 130 },
{ prop: 'status', label: '状态', formatType: 'select', format: '1:待处理/2:已完成', width: 100 },
{ prop: 'qty', label: '数量', formatType: 'precision', format: '2', width: 90 },
{ prop: 'enabled', label: '启停', formatType: 'switch', width: 80 },
{ prop: 'createTime', label: '创建时间', formatType: 'time', format: 'yyyy-MM-dd HH:mm' },
{ prop: 'remark', label: '备注', editable: true },
];
const pageNum = ref(1);
const pageSize = ref(10);
</script>
<template>
<GwStdTable
:data="rows" :columns="columns" selection is-index
:operate-items="[{ label: '编辑' }]"
:total="total" v-model:page-num="pageNum" v-model:page-size="pageSize"
@operate="(row, item) => {}" @current-change="loadData"
/>
</template>
列配置(GwStdTableColumn)
prop / label / width / minWidth / fixed / align / sortable / hidden(原 ishidden 'Y')/
editable(原 isedit 'Y',行内 el-input)/ clickable(原 clickHandle,蓝字加粗 + column-click 事件)/
formatType:select('a:1/b:2' 键值映射)、image(首图 + 预览)、time(日期格式化)、
fieldStr(固定文本)、precision(小数位)、switch('1'/'0' 开关)。
Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
data / columns |
数据与列配置 | [] |
selection / is-multiple |
多选列与多选模式(false 时单选) | false / true |
is-index |
序号列(跨页连续) | false |
operate-items |
操作列按钮(原 operateConfig) | [] |
pagination / total |
分页显隐与总条数 | true / 0 |
v-model:page-num / v-model:page-size |
分页受控 | 1 / 10 |
page-sizes |
可选每页条数,支持 '100,200' 字符串 |
[10,20,50,100] |
primary-keys |
主键字段(getSelectedPrimaryKeys 用) | [] |
loading / stripe / size / row-key |
el-table 透传 | — |
Emits / Expose
- emits:
update:pageNum、update:pageSize、size-change、current-change、selection-change、select、select-all、row-click(自动切换选中态)、row-dblclick、cell-click、cell-dblclick、header-dragend、column-click、column-switch、cell-change、operate - expose:
getSelection()、getSelectedPrimaryKeys(fields?)、toggleRowSelection(row, selected?)、clearSelection()、toggleAllSelection()、setCurrentRow(row)、doLayout()、getTableRef()
GwStdDialog 弹窗(第二批,原 gw-dialog)
基于 el-dialog 实现的原 gw-dialog 视觉与行为:头部 44px 底部分隔线、底部 40px 按钮区、
buttonsConfig 底部按钮('取消'/'关闭' 自动关闭)、btnPosition 对齐、拖拽记位。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdDialog } from '@gwall/std-ui/dialog';
import type { GwStdDialogButtonItem } from '@gwall/std-ui/dialog';
const visible = ref(false);
const buttons: GwStdDialogButtonItem[] = [
{ label: '关闭' }, // label 为'取消'/'关闭'时点击自动关闭
{ label: '保存', type: 'primary' }, // 其余按钮抛 btn-click
];
</script>
<template>
<GwStdDialog v-model="visible" title="订单详情" :width="600" :items="buttons" draggable @btn-click="onBtn">
<p>内容</p>
</GwStdDialog>
</template>
Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
显隐 | false |
title / width |
标题与宽度(width 兼容原 {value, type} 结构) |
'' / 500 |
items |
底部按钮(原 buttonsConfig);为空时渲染 取消+确定 | [] |
btn-position |
底部对齐 left/center/right |
'right' |
fullscreen / modal / modal-close |
全屏 / 遮罩 / 点击遮罩关闭 | false/true/false |
draggable / record-drag-position |
拖拽 / 记住拖拽位置 | false |
close-destroy / with-header / show-close |
关闭销毁 / 头部显隐 / 关闭按钮 | false/true/true |
append-to-body / custom-class / min-height |
el-dialog 透传 | — |
Emits / 插槽
- emits:
update:modelValue、open、opened、close、closed、confirm(默认确定按钮)、btn-click(item, index)、beforeClose(done) - 插槽:
default(内容)、footer(完全自定义底部)、header(with-header=false 时)
GwStdTree 虚拟滚动树(第三批,原 gw-tree)
基于 el-tree-v2 的虚拟滚动大树组件,保留原组件全部交互:自管理复选框(父子联动/半选)、 过滤(isFilter + filterShowChildren)、目录/叶子图标分流、label 后缀字段、右键菜单(支持二级)、 高亮字段、单击/双击分流(300ms 检测)、容器高度自适应(ResizeObserver)。
万级节点性能设计完整保留:内部以 WeakMap 按对象身份分配唯一 key(防止业务 key 重复导致勾选串联)、
markRaw 阻止节点被深层代理、勾选态用 Set 自底向上推导。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdTree } from '@gwall/std-ui/tree';
import type { GwStdTreeContextItem } from '@gwall/std-ui/tree';
const treeData = ref<any[]>([
{ id: 'area-sh', label: '华东区域', isDir: true, children: [
{ id: 'wh-sh', label: '上海一号仓', checked: true },
] },
]);
const contextItems: GwStdTreeContextItem[] = [
{ label: '新增子节点' },
{ label: '更多', children: [{ label: '删除' }] },
];
</script>
<template>
<div style="height: 300px">
<GwStdTree
node-key="id"
:data="treeData"
show-checkbox
is-filter
show-icon
directory-icon="gicon-wenjianjia"
:context-items="contextItems"
@check-change="(nodes, keys) => console.log(keys)"
/>
</div>
</template>
Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
data |
树数据(递归 children) | [] |
node-key / label-key / children-key |
取值字段 | 'id' / 'label' / 'children' |
show-checkbox / checked-key |
复选框开关与勾选回显字段(原 checkedName) | false / 'checked' |
include-half-checked |
勾选结果是否包含半选节点 | false |
default-expand-all |
默认展开全部 | false |
is-filter / filter-show-children |
内置过滤框 / 祖先命中时是否显示其子节点 | false |
show-icon / directory-icon / node-icon |
图标分流开关与图标(gicon 名) | false |
directory-field / directory-value |
目录判定字段与值 | '' / true |
msg-field / suffix-field |
label 后缀(数量)/ 额外后缀字段 | '' |
highlight-field / highlight-color / font-color |
高亮字段 / 颜色 / 文字色 | '' |
context-items |
右键菜单(支持 children 二级) | [] |
loading |
加载中 | false |
容器高度自适应:组件内部用 ResizeObserver 取父级高度驱动 el-tree-v2 滚动区(外层给固定高度即可)。
Emits / Expose
- emits:
node-click(node)、node-dblclick(node)、check-change(checkedNodes, checkedKeys)、context-select(item, parentItem, node) - expose:
getCheckedNodes/getCheckedKeys/setCheckedKeys/setCurrentKey/filter(text)/updateNode(partialData)(按业务 key 局部更新)/getTreeRef(el-tree-v2 实例)
GwStdUpload 导入上传(第三批,原 gw-upload)
导入/上传按钮 + 弹窗确认 + 文件校验 + 模板下载。上传请求由调用方注入(uploadRequest prop),
替代原组件对宿主 Request 的依赖;响应为文件流时自动下载(Content-Disposition 文件名解析、
扩展名补全),响应为 JSON 时按平台 {success, data} 结构处理。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdUpload } from '@gwall/std-ui/upload';
import type { GwStdUploadFile } from '@gwall/std-ui/upload';
import { myUploadApi } from '@/api';
const files = ref<GwStdUploadFile[]>([]);
const uploadRequest = (formData: FormData) => myUploadApi(formData); // 返回 {success, data:[{fileid,url,name}]}
</script>
<template>
<GwStdUpload
v-model="files"
label="导入Excel"
type="primary"
file-type=".xls,.xlsx"
:file-size="{ value: 10, type: 'MB' }"
:upload-request="uploadRequest"
@success="(res) => console.log(res)"
/>
</template>
Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
已上传文件列表 [{fileid, url, name}] |
[] |
label / title / tips |
按钮文字 / 弹窗标题 / 弹窗提示 | '上传' / '上传文件' / '' |
button-name |
弹窗确认按钮文字 | '上传' |
file-type |
接受类型(mime 前缀或后缀,逗号分隔) | '' |
file-size |
大小限制 `{value, type: 'KB' | 'MB' |
limit |
文件数上限(0 不限,超出自动移除最早) | 0 |
auto-upload |
确认即上传;false 时仅抛 pop-submit |
true |
multiple-upload |
多文件并行逐个上传(false 合并为一次 FormData 提交) | false |
upload-res-type |
响应类型 'json' / 'fileStream'(文件流自动下载) |
'json' |
upload-request |
上传请求函数 (formData) => Promise(必填,注入式) |
— |
template-url / template-request |
模板下载地址 / 自定义下载函数 | '' |
params / template-params |
上传附加字段 / 模板下载附加参数 | {} |
icon |
按钮图标(gicon 名自动识别 / element 图标传组件) | '' |
show-detail |
按钮旁展示已传文件名列表 | true |
| 其余 | 按钮外观透传(type / size / plain / loading / disabled / width / height) | — |
Emits / Expose
- emits:
before-upload(done)(打开弹窗前,调 done() 继续)、success(响应)、error、pop-submit(files)(autoUpload=false)、remove(file, index)、update:modelValue - expose:
open()(直接开弹窗)、submit()、clearFiles()、getFileIds()(fileid 逗号串)
GwStdTabs 页签(第三批,原 gw-tab)
el-tabs 底座 + 原 tab-container 视觉(选中色/加粗/下划线高度/间距全部可配),
支持配置驱动(tabs + 具名插槽)与 default 插槽(自行放置 el-tab-pane)双模式。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdTabs } from '@gwall/std-ui/tabs';
import type { GwStdTabItem } from '@gwall/std-ui/tabs';
const active = ref('1');
const tabs: GwStdTabItem[] = [
{ label: '基本信息', name: '1' },
{ label: '操作日志', name: '2', lazy: true },
];
</script>
<template>
<GwStdTabs v-model="active" :tabs="tabs" :line-height="40" :font-size="12" active-color="#409eff" active-bold>
<template #tab-1><div>页签一</div></template>
<template #tab-2><div>页签二</div></template>
</GwStdTabs>
</template>
Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
当前页签 name | 首个 tab.name |
tabs |
页签配置(为空时走 default 插槽模式) | [] |
type |
'default' / 'card' / 'border-card' |
'default' |
title-align |
头部对齐 left/center/right(left/right 通过标题 padding 实现) |
'center' |
active-color / color |
选中色(含下划线)/ 未选中文字色,空值走样式默认 | '' |
active-bold / bold |
选中加粗 / 未选中加粗 | false |
line-height / font-size / spacing |
头部行高 / 字号 / 页签间距 | 40 / 12 / 0 |
fill |
内容区撑满容器高度 | true |
padding / horizontal-padding / border-radius |
内容区 padding(border-card 默认 15px)/ 水平附加 / 圆角 | — |
插槽
- 配置驱动:
#tab-{name}或#tab-{index+1}(作用域含{tab, index}) default:无 tabs 配置时自行放置el-tab-pane
GwStdRadio / GwStdCheckbox / GwStdSwitch / GwStdGroupCheckbox(第四批)
第四批选择类组件:GwStdRadio(原 gw-radio)、GwStdCheckbox(原 gw-checkbox)、
GwStdSwitch(原 gw-switch)、GwStdGroupCheckbox(原 gw-group-checkbox 分组多选按钮组)。
均支持可选表单项包装(传 label / required / rules / name 时渲染 el-form-item,change 触发校验)。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdRadio } from '@gwall/std-ui/radio';
import { GwStdCheckbox } from '@gwall/std-ui/checkbox';
import { GwStdSwitch } from '@gwall/std-ui/switch';
import { GwStdGroupCheckbox } from '@gwall/std-ui/group-checkbox';
import type { GwStdGroupCheckboxGroup } from '@gwall/std-ui/group-checkbox';
const options = [
{ label: '标准件', value: '1' },
{ label: '定制品', value: '2' },
];
const radioValue = ref('');
const checkboxValue = ref<string[]>([]);
const switchValue = ref(false);
const groupValue = ref<Record<string, string>>({});
const groups: GwStdGroupCheckboxGroup[] = [
{ title: '销售渠道', field: 'channel', list: [{ key: 'online', name: '线上商城' }] },
];
</script>
<template>
<GwStdRadio v-model="radioValue" :options="options" label="类型" required select-first />
<GwStdCheckbox v-model="checkboxValue" :options="options" label="标签" select-all />
<GwStdSwitch v-model="switchValue" label="启用" active-value="1" inactive-value="0" />
<GwStdGroupCheckbox v-model="groupValue" :groups="groups" label="适用范围" :group-columns="2" />
</template>
GwStdRadio Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
选中值 | '' |
options / labelKey / valueKey |
选项与取值字段(原 optionItems/bindName/bindValue) | [] / 'label' / 'value' |
button-style / border |
按钮形态(el-radio-button)/ 边框模式 | false |
display-style |
选项布局,'block' 时整组纵向块布局 |
'inline-block' |
item-height / item-gap |
选项高度(行高同步)/ 间距 | — |
filter-codes / filter-empty-code |
分组码过滤 / 无码选项是否保留 | [] / false |
select-first |
默认选中首项(有值不覆盖) | false |
value-fontsize / disabled / readonly / size |
视觉态 | 12 / false |
emits:update:modelValue、change;expose:focus()、getRadioRef()
GwStdCheckbox Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
选中值数组(字符串按逗号/JSON 数组自动解析,原 normalizeSelectedValues) | [] |
options / labelKey / valueKey |
同 Radio | — |
button-style / border / display-style / item-height / item-gap |
同 Radio | — |
select-all |
顶部 全选/反选 操作标签 | false |
filter-codes / filter-empty-code |
同 Radio | — |
select-first |
默认选中首项(一次性) | false |
emits:update:modelValue、change;expose:getCheckboxRef()
GwStdSwitch Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
开关值('true'/'false' 转布尔、数字字符串转数字,原 dealValue) |
false |
active-value / inactive-value |
打开/关闭值(同样归一化) | true / false |
active-text / inactive-text |
打开/关闭文字 | — |
active-color / inactive-color |
背景色(EP 2.x 已废弃但仍生效) | — |
width / border-radius |
宽度 / 圆角(作用于开关与手柄) | — / 10 |
disabled / readonly |
禁用 / 只读(并入禁用) | false |
emits:update:modelValue、change;expose:focus()、getSwitchRef()
GwStdGroupCheckbox Props(常用)
分组多选按钮组:组标题复选框支持整组全选/半选,组内为按钮式选项;
输出值为 { [分组输出键]: '值1,值2' },输出键由 condition_alias_field 拼接(全空时 group_N),
bm/tj 为 alias/condition 的兼容别名;hideEmptyValue=true(默认)时无选中的分组键不出现在输出值中。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
输出值 {分组键: '值,值'} |
{} |
groups |
分组数据 [{title, field, alias, condition, list:[{key, name, select}]}] |
[] |
group-columns / group-gap |
分组列数(grid)/ 分组间距 | 1 / 12 |
item-gap / box-width / box-height / item-height |
选项间距/最小宽/高 | 10 / 100 / — / 30 |
value-fontsize / title-fontsize |
选项 / 标题字号 | 12 |
hide-empty-value |
输出值隐藏无选中分组键 | true |
disabled |
禁用整组 | false |
emits:update:modelValue、change(value, groups)(groups 含勾选态);
expose:getValue()、getGroups()
GwStdDate / GwStdTimePicker / GwStdCascader(第五批)
第五批日期时间与级联组件:GwStdDate(原 gw-date,业务周格式核心)、
GwStdTimePicker(原 gw-timePicker)、GwStdCascader(原 gw-cascader,末级值/全路径互转)。
均支持可选表单项包装(传 label / required / rules / name 时渲染 el-form-item)。
组件不再内置 el-config-provider locale 注入,多语言由宿主统一配置。
GwStdDate Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
选中值(按 valueFormat 输出) | '' |
type |
date / dates / datetime / week / month / year / daterange / datetimerange / monthrange | 'date' |
format |
显示格式;周格式 yyyy-ww/yyyyww/yyyy-WW/yyyyWW 由覆盖层显示业务周文本 |
'YYYY-MM-DD' |
value-format |
绑定格式;周格式时组件内部与普通日期自动互转(不入 Element 解析链路) | — |
current-date |
值为空时默认填充当前时间 | false |
clearable / disabled / readonly / size / value-fontsize |
常规态 | true/false/false/—/12 |
emits:update:modelValue、change、focus、blur;expose:focus()、blur()、getPickerRef()
业务周格式说明:年周(
yyyy-ww→2026-31)星期日起始、1 月 1 日所在周为第 1 周; 月周(yyyy-WW→2026-05)按当月日历格计算。月周格式不含月份,回显优先使用本次选择缓存的日期。
GwStdTimePicker Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
选中值(按 format 输出字符串) | '' |
format |
时间格式(同时作为显示与绑定值格式,与原组件一致) | 'HH:mm:ss' |
current-date |
值为空时默认填充当前时间 | false |
clearable / disabled / readonly / size / value-fontsize |
常规态 | — |
emits:update:modelValue、change、focus、blur;expose:focus()、blur()、getPickerRef()
GwStdCascader Props(常用)
级联选择核心能力:getLastVal 决定存储形态——true 时 v-model 只存末级值
(组件在 get 端自动递归查找全路径回显),false(默认)存全路径数组;多选为对应形态的数组。
字段名可通过 props-value / props-label / props-children 映射。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
选中值(末级值或全路径,多选为数组) | '' |
options |
级联选项({value, label, children}) |
[] |
props-value / props-label / props-children |
字段映射(原 propsValue 等) | 'value'/'label'/'children' |
get-last-val |
值只保留末级 | false |
multiple / check-strictly |
多选 / 任选一级 | false |
filterable / clearable / show-all-levels / expand-trigger |
常规态(默认仅显示末级、hover 展开,与原组件一致) | false/true/false/'hover' |
emits:update:modelValue、change(存储形态值)、focus、blur;
expose:focus()、blur()、getPathByValue(value)、getCascaderRef()
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdDate } from '@gwall/std-ui/date';
import { GwStdTimePicker } from '@gwall/std-ui/time-picker';
import { GwStdCascader } from '@gwall/std-ui/cascader';
const week = ref(''); // 业务年周:'2026-31'
const time = ref('');
const area = ref('yuhang'); // 末级值,自动找全父级路径回显
const options = [
{ value: 'zhejiang', label: '浙江省', children: [{ value: 'yuhang', label: '余杭区' }] },
];
</script>
<template>
<GwStdDate v-model="week" value-format="yyyy-ww" label="年周" />
<GwStdTimePicker v-model="time" label="送达时间" current-date />
<GwStdCascader v-model="area" :options="options" get-last-val label="所在区县" />
</template>
GwStdRate / GwStdSlider / GwStdTag / GwStdNumber(第六批)
第六批轻量件:GwStdRate(原 gw-rate 评分)、GwStdSlider(原 gw-slider 滑块)、
GwStdTag(原 gw-tag 标签,三模式 + 分组配色)、GwStdNumber(原 gw-number 计数器)。
均支持可选表单项包装(传 label / required / rules / name 时渲染 el-form-item)。
GwStdRate Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
评分值 | 0 |
max / low-threshold / high-threshold |
最大分值 / 低分与中分界限 / 高分与中分界限 | 5 / 2 / 4 |
allow-half |
允许半选 | false |
show-text / show-score / texts |
显示辅助文字 / 显示分数 / 文字数组 | false |
colors / void-color / disabled-void-color / icon-class |
分值段颜色等(el-rate 同名透传) | — |
disabled / readonly |
禁用 / 只读(并入禁用) | false |
emits:update:modelValue、change;expose:getRateRef()
GwStdSlider Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
滑块值(range 模式为 [起点, 终点]) |
0 |
min / max / step |
范围与步长 | 0 / 100 / 1 |
show-stops / range / vertical |
断点 / 范围选择 / 竖向模式 | false |
height |
竖向模式高度(如 '200px',原组件未提供、标准版补充) |
'' |
disabled / readonly |
禁用 / 只读(并入禁用) | false |
emits:update:modelValue、change(松手)、input(拖动实时,标准版补充);
expose:getSliderRef()
GwStdTag Props(常用)
三种展示模式:单值(一个标签)、数组(每项一个标签)、多标签(multi-tag + 对象数组,
显示 tagNameField:tagValueField,按 tagNameField 分组取马卡龙色,同组同色)。
color 自定义色优先;effect 三主题由 CSS 变量控制(light = 10% 透明度浅色底)。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
标签值:单值 / 基本类型数组 / 对象数组(multi-tag) | '' |
multi-tag / tag-name-field / tag-value-field |
多标签模式与取值字段 | false / '' / '' |
min-tags |
每分组最少保留数量(低于此数该组禁删) | 0 |
color |
自定义颜色(空则分组马卡龙色 / el-tag 默认色) | '' |
closable |
可关闭(关闭即从值中移除并抛 close) |
false |
effect / round / size / value-fontsize |
主题 / 圆角 / 尺寸 / 字号 | 'light' / false / 'default' / 12 |
width / height / disabled |
容器宽高(原 sizeCustom)/ 禁用置灰 | '' / '' / false |
emits:update:modelValue、close(node)(节点已移除;对象项字段解构到顶层、
基本类型项挂 item,含 index)、tag-click(node);expose:removeTag(index)
GwStdNumber Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
计数器值 | — |
min / max |
边界(默认 ±Infinity 不限制,传 0 亦生效,与原组件一致) | ±Infinity |
step / precision |
步长 / 小数精度 | 1 / — |
controls / controls-position |
控制按钮开关 / 位置('round' 悬浮角标) |
true / '' |
readonly |
只读(透传 el-input-number,仍可聚焦,不并入禁用) | false |
size / value-fontsize |
尺寸 / 值字号(非 12 时按尺寸补偿高度) | — / 12 |
disabled |
禁用 | false |
emits:update:modelValue、change(value, oldValue)、focus、blur;
expose:focus()、blur()、getNumberRef()
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdRate } from '@gwall/std-ui/rate';
import { GwStdSlider } from '@gwall/std-ui/slider';
import { GwStdTag } from '@gwall/std-ui/tag';
import { GwStdNumber } from '@gwall/std-ui/number';
const score = ref(3);
const range = ref<number[]>([20, 60]);
const qty = ref(5);
const multiTags = ref([
{ warehouse: '上海一号仓', goodsType: '食品' },
{ warehouse: '杭州二号仓', goodsType: '生鲜' },
]);
</script>
<template>
<GwStdRate v-model="score" label="评分" allow-half />
<GwStdSlider v-model="range" label="范围" range />
<GwStdNumber v-model="qty" label="数量" :min="1" :precision="0" />
<GwStdTag v-model="multiTags" label="多标签" multi-tag tag-name-field="warehouse"
tag-value-field="goodsType" :min-tags="1" closable />
</template>
GwStdAlert / GwStdColorPicker / GwStdMark / GwStdDivider / GwStdIcon / GwStdText(第七批)
第七批静态展示与轻交互件:GwStdAlert(原 gw-Alert 警告提示)、GwStdColorPicker(原 gw-color 颜色选择)、
GwStdMark(原 gw-mark 批注)、GwStdDivider(原 gw-divider 分隔线)、GwStdIcon(原 gw-icon 独立图标)、
GwStdText(原 gw-text 文本展示)。
GwStdAlert Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
title |
标题(空则不显示,原 label + labelHidden) | '' |
type |
success / warning / info / error | 'info' |
description |
描述文本(按换行符拆分段落渲染) | '' |
show-icon / closable |
显示图标 / 可关闭 | false |
width / height |
自定义宽高 | '' |
插槽 default 优先于 description;emits:close
GwStdColorPicker Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
颜色值(hex / rgb / hsl) | '' |
show-alpha / predefine |
透明度 / 预定义色板(标准版补充) | false / — |
disabled / readonly / size |
禁用 / 只读(并入禁用)/ 尺寸 | false |
emits:update:modelValue、change;expose:getColorPickerRef();支持表单项包装
GwStdMark Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
number / type |
圆形编号标签值 / el-tag 类型 | '' / 'primary' |
title / describe / width |
弹层标题 / 描述 / 宽度 | '' / '' / 200 |
bg-color |
弹层背景色 | '' |
v-model:visible |
弹层显隐(原 markShow 受控) | false |
top / left |
传入后绝对定位(原设计器批注定位) | '' |
GwStdDivider Props
direction(horizontal / vertical,默认 horizontal)、contentPosition(left / center / right,默认 center)、
borderStyle(默认 solid);文案走默认插槽(原 label)
GwStdIcon Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
icon |
图标(gicon / gwicon / element 图标组件 / 图片地址) | '' |
icon-prefix |
字体前缀 gicon / gwicon(原 iconPrefix) | '' |
font-size |
大小(px,原 fontSize) | 14 |
color / enter-color |
默认色 / 悬停色 | '' |
click-color / selected-color |
点击色(200ms)/ 选中色(点击切换) | '' |
emits:click;三态变色逻辑与原组件一致(点击色 > 悬停色 > 选中色 > 默认色)
GwStdText Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
动态文本(传入时优先于 text,原 assignFormValue) | — |
text |
静态文本 | '' |
is-html |
按 HTML 渲染(v-html) | false |
center |
水平垂直居中 | false |
color / font-weight / is-italic / size |
文字样式(size 为 px 字号) | '' / '' / false / 0 |
width / height |
自定义宽高(传入时溢出隐藏) | '' |
emits:click
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdAlert } from '@gwall/std-ui/alert';
import { GwStdColorPicker } from '@gwall/std-ui/color-picker';
import { GwStdMark } from '@gwall/std-ui/mark';
import { GwStdDivider } from '@gwall/std-ui/divider';
import { GwStdIcon } from '@gwall/std-ui/icon';
import { GwStdText } from '@gwall/std-ui/text';
import { Search } from '@element-plus/icons-vue';
const color = ref('#409EFF');
const markVisible = ref(false);
</script>
<template>
<GwStdAlert title="提示" type="warning" show-icon description="第一行 第二行" />
<GwStdColorPicker v-model="color" label="主题色" :predefine="['#409EFF', '#67C23A']" />
<GwStdMark :number="1" type="danger" title="批注" describe="描述内容" v-model:visible="markVisible" />
<GwStdDivider content-position="left">分组标题</GwStdDivider>
<GwStdIcon :icon="Search" :font-size="24" color="#909399" enter-color="#409eff" />
<GwStdText v-model="textValue" center font-weight="bold" />
</template>
GwStdProvinceCity 省市区选择(第八批,原 gw-provinceCity)
基于 el-cascader + element-china-area-data(peer 依赖,宿主需安装)。 内置四种数据类型,编码型与文本型互转,支持邮编式 6 位行政区划码回显。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
选中值数组(文本型存 label、编码型存 code) | [] |
type |
数据类型:pcaTextArr(省/市/县文本)/ pcTextArr(省/市文本)/ regionData(省/市/县编码)/ provinceAndCityData(省/市编码) |
'pcaTextArr' |
placeholder / clearable / disabled / readonly / size |
el-cascader 透传 | '' / true / false / false |
valueFontsize |
值字号(非 12 时按尺寸补偿控件高度) | 12 |
label / labelWidth / labelHidden / labelFontsize / labelAlign / required / rule / rules / name |
可选表单项包装(传入即渲染 el-form-item,blur 触发校验) | — |
emits:update:modelValue / change / focus / blur
expose:getLabels()(编码 → label 数组)、setValueByLabels(labels)(label → 编码并写入 v-model,失败返回 null)、
setByAdCode(adCode)(邮编式 6 位码回显:前 2 位省 / 3-4 位市 / 5-6 位区县;provinceAndCityData 直辖市 11/12/31/50 取 [省, 区县])、
isCodeType()、getCascaderRef()
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdProvinceCity } from '@gwall/std-ui/province-city';
const area = ref<string[]>([]);
</script>
<template>
<GwStdProvinceCity v-model="area" label="所在地区" type="regionData" required name="area" />
</template>
GwStdRichEditor 富文本编辑器(第八批,原 gw-richEditor)
基于 vue3-quill(自 0.0.3 起已内置打包进本组件库产物,宿主无需安装 vue3-quill/quill,
也无需任何 optimizeDeps 预构建配置;quill 的 core/snow/bubble 样式随本包 style.css 汇总,
无需自行引入)。表单项校验错误时编辑器红框提示。
历史背景:vue3-quill 以
.vue源码形式发布且内部import quill from 'quill'(CJS), 宿主 Vite dev 依赖扫描进不了.vue,曾导致does not provide an export named 'default'报错、需宿主配置optimizeDeps: { include: ['quill'] };现随包内置后此问题不复存在。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
HTML 内容字符串 | '' |
placeholder |
占位文本 | '' |
height |
内容区高度(如 '200px',原 contentHeight) |
'' |
toolbar |
quill 工具栏配置(容器选择器或数组;不传用 quill 默认全量) | — |
disabled / readonly |
只读(两者等价,均设 readOnly) | false |
label 等表单项包装 |
同其它表单组件 | — |
emits:update:modelValue / change({ html, text, quill }) / focus(quill) / blur(quill);expose:getEditor()
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdRichEditor } from '@gwall/std-ui/rich-editor';
const content = ref('');
const toolbar = [['bold', 'italic'], [{ list: 'ordered' }, { list: 'bullet' }], ['clean']];
</script>
<template>
<GwStdRichEditor v-model="content" label="描述" name="desc" height="180px" :toolbar="toolbar" />
</template>
GwStdDynamicSelect 动态条件选择(第八批,原 gw-dynamicSelect)
多字段条件输入组:每行「label + 勾选框 + 输入框(可带按钮)」,勾选启用输入并清空原值,取消勾选恢复禁用与 placeholder。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
值对象({ [name]: value }) |
{} |
fields |
字段行配置(原 formConfigInfo):{ name, label, placeholder, checked, disabled, buttonLabel, showCheck, checkDisabled, show } |
[] |
show-button |
是否显示行尾按钮 | true |
disabled / readonly |
整组禁用 / 只读 | false |
label-position / label-width / size / loading |
el-form 透传 / 加载中 | 'right' / '' / — / false |
emits:update:modelValue / change / enter({ name, value, row }) / buttonClick({ name, value, row }) / checkChange(row)
expose:reset()(恢复 fields 初始配置、清空值与勾选)、clearField(name)(清空指定字段值)
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdDynamicSelect } from '@gwall/std-ui/dynamic-select';
const value = ref<Record<string, any>>({});
const fields = [
{ name: 'orderNo', label: '订单号', placeholder: '请输入订单号', checked: false, disabled: true, buttonLabel: '查询' },
{ name: 'warehouse', label: '仓库', placeholder: '自动生成', checked: true, disabled: false },
];
</script>
<template>
<GwStdDynamicSelect v-model="value" :fields="fields" label-width="110px" @button-click="(p) => query(p)" />
</template>
GwStdCustomData 数据卡片(第八批,原 gw-customData)
数据展示卡片组:items 定义展示项、config 定义栅格与样式,值从 modelValue 对象按 item.value 取。
| Prop | 说明 | 默认 |
|---|---|---|
model-value |
值对象({ [item.value]: 展示值 }) |
{} |
items |
展示项(原 fieldScheme.items):{ label, value, icon, labelColor, fontColor, backgroundColor, allBackgroundColor, show } |
[] |
config |
样式配置(原 fieldScheme.configItems):{ style: 'card' | 'cardStyleTwo', columns, space, fontSize, labelSize, height, labelJustifyContent, fontJustifyContent } |
{} |
hide-empty |
隐藏空值项(值为 undefined/null/'' 时整卡隐藏) | false |
set-default |
值为 0 时显示 0(原 setDefault) | false |
emits:itemClick(item, index)(原 item.event 脚本)
样式说明:card 为阴影卡片 + 右侧图标圆底(${backgroundColor}20 半透明);cardStyleTwo 为整卡 allBackgroundColor 背景的紧凑样式;
栅格宽度按 calc((100% - space*(columns-1)px) / columns) 计算、列尾不留间距;图标支持 gicon/gwicon 字体(随包样式)、element 图标组件与图片地址。
<script setup lang="ts">
import { GwStdCustomData } from '@gwall/std-ui/custom-data';
const value = { orderCount: 128, todayOut: 3560 };
const items = [
{ label: '订单总数', value: 'orderCount', icon: 'gicon-dingdan', fontColor: '#409eff', backgroundColor: '#409eff' },
{ label: '今日出库', value: 'todayOut', icon: 'gicon-chuku', fontColor: '#67c23a', backgroundColor: '#67c23a' },
];
</script>
<template>
<GwStdCustomData :model-value="value" :items="items" :config="{ style: 'card', columns: 2, space: 16 }" />
</template>
GwStdSqlRuleInput 规则配置(第九批,原 gw-sqlRuleInput)
数据模板规则配置:点击输入框打开两步式配置弹窗——步骤1 勾选数据表、配置表间关联(主表 BFS 可达过滤); 步骤2 可视化构建规则表达式(字段/运算符/输入值 token 拖拽编排),实时校验并生成 SQL WHERE 语句。
数据源注入(替代原 Request 远程取数):dbTables 静态传入 > fetchTables 函数 > 内置演示表(DEFAULT_TABLES)。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
规则配置(RuleConfig 对象或其 JSON 字符串,兼容原平台存储格式) | '' |
placeholder |
占位文本 | '点击配置数据模板规则' |
disabled |
禁用 | false |
size |
尺寸(原默认 small) | 'small' |
dbTables |
静态数据表列表(直接传入) | [] |
fetchTables |
数据表列表获取函数(弹窗打开时调用) | — |
fetchFields |
表字段获取函数(展开表/进入规则编辑时调用) | — |
label 等表单项包装 |
同其它表单组件(blur 校验) | — |
emits:update:modelValue(JSON 字符串)/ change(config)(解析后的完整对象)/ open / close
expose:open() / close() / getSql() / getConfig()
子路径还导出工具:validateSqlRule(tokens, tables, dbTables)、generateSqlRule(tokens, tables)、
SQL_RULE_DEMO_TABLES(内置演示表)、全套类型(GwStdSqlRuleConfig 等)。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdSqlRuleInput, type GwStdSqlRuleConfig } from '@gwall/std-ui/sql-rule-input';
const value = ref('');
const onRuleChange = (cfg: GwStdSqlRuleConfig) => console.log(cfg.sql);
</script>
<template>
<GwStdSqlRuleInput v-model="value" label="规则配置" name="rule" required :fetch-tables="loadTables" :fetch-fields="loadFields" @change="onRuleChange" />
</template>
GwStdSelectVirtualized 虚拟滚动下拉(第十批,原 gw-selectVirtualized)
基于 el-select-v2 的大数据量下拉:万级选项仅渲染可视区域,交互与 GwStdSelect 对齐
(色点、折叠标签、底部全选/清空/反选、默认选中、分组码过滤),另有显示层保护——
多选结果超 50 条自动折叠为 +N(选中值仍完整保存),tooltip 最多展示 200 条。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
选中值(多选为数组,字符串按逗号/JSON 自动解析) | — |
options |
选项列表(万级数据量可用) | [] |
labelKey / valueKey |
取值字段(原 bindName/bindValue) | 'label' / 'value' |
dropdownHeight / itemHeight |
下拉高度 / 选项行高 | 274 / 34 |
multiple / multipleLimit / clearable / filterable / allowCreate |
常规态(filterable 含头部搜索框) | — |
valueType |
值类型归一化(多选自动去重、与选项类型对齐) | — |
selectFirst / selectAllDefault |
默认选首项 / 默认全选(异步加载选项前不清空已配置值) | false |
filterCodes / filterEmptyCode |
按 groupcode 过滤 / 无分组码选项是否保留 |
[] / false |
showFooterActions |
底部全选/清空/反选操作栏 | true |
collapseTags / maxCollapseTags / collapseTagsTooltip |
折叠标签 | false / 1 / false |
size / valueFontsize / disabled / readonly / isUnderlined |
视觉态 | — |
label 等表单项包装 |
同其它表单组件 | — |
emits:update:modelValue、change、focus、blur、visible-change、remove-tag、clear、keydownEnter
expose:focus()、getSelectRef()
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdSelectVirtualized } from '@gwall/std-ui/select-virtualized';
const value = ref<any[]>([]);
// 万级选项:虚拟滚动,多选全选也不卡顿
const options = Array.from({ length: 10000 }, (_, i) => ({ label: `数据-${i + 1}`, value: i }));
</script>
<template>
<GwStdSelectVirtualized v-model="value" :options="options" multiple select-all-default filterable label="数据" />
</template>
GwStdDynamicConfig 列表增项(第十批,原 gw-dynamicConfig)
配置驱动的动态行编辑器:columns 定义每列控件类型,v-model 绑定行数组,内置增删行、
必填校验、checkbox 列头全选、远程选项列注入。低代码专用子组件列(放大镜/表达式/规则配置/XML 编辑器)
以 type: 'slot' 具名插槽 #列名 替代(作用域含 { row, index, item })。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
行数据数组(原 defaultValue) | [] |
columns |
列配置(原 conditionConfig) | [] |
fetchOptions |
远程选项获取函数 (prop) => Promise<any[]>(*DataSource 列,挂载时拉取缓存) |
— |
indexNum |
序号列 | false |
label / labelHidden / showHelp / helpContent / labelFontsize |
标题与帮助 | '' / false / false |
size / valueFontsize / isUnderlined |
尺寸 / 值字号 / 底边框模式 | — / 12 / false |
oneLineDefault |
默认展示一行空白明细 | false |
disabledOperate / disabled / readonly |
隐藏增删按钮 / 禁用 / 只读 | false |
列配置(GwStdDynamicConfigColumn):prop / label / type(input、text、select、selectMultiple、
createSelect、checkbox、radio、switch、timePicker、datePicker、selectDataSource、checkboxDataSource、
radioDataSource、slot)/ span / required / disabled / isHidden / placeholder /
options('1:启用' 字符串或对象数组)/ bindValue / bindLabel /
defaultValue: { type: 1|2|3, value }(1 原样 / 2 数字 / 3 布尔,多选类型逗号拆分)/
explanatoryNote(列头问号气泡)/ dataConfig(multiple、filterable、type、format、valueFormat、
bindValue、bindName、onFocusQuery 聚焦刷新、optionsList 初始选项)。
emits:update:modelValue、change(rows)、row-click(row, item, index)(行/单元格聚焦,原 setRowData)、
add(rows)、delete(rows)
expose:onValid(): Promise<boolean>(全部行必填校验)、addRow()、deleteRow(index)
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdDynamicConfig } from '@gwall/std-ui/dynamic-config';
import type { GwStdDynamicConfigColumn } from '@gwall/std-ui/dynamic-config';
const rows = ref<Record<string, any>[]>([]);
const columns: GwStdDynamicConfigColumn[] = [
{ prop: 'field', label: '字段', type: 'select', required: true, options: ['1:订单号', '2:商品编码'] },
{ prop: 'value', label: '值', type: 'input', required: true, placeholder: '请输入值' },
{ prop: 'warehouse', label: '仓库', type: 'selectDataSource', dataConfig: { filterable: true } },
];
const fetchOptions = async (prop: string) => (prop === 'warehouse' ? await getWarehouses() : []);
</script>
<template>
<GwStdDynamicConfig ref="dcRef" v-model="rows" :columns="columns" :fetch-options="fetchOptions" label="条件配置" index-num one-line-default />
</template>
GwStdFileUpload / GwStdPictureUpload / GwStdUploadManage(第十一批)
第十一批上传三件:GwStdFileUpload(原 gw-fileUpload 文件上传)、GwStdPictureUpload
(原 gw-pictureUpload 图片上传)、GwStdUploadManage(原 gw-uploadManage 附件管理)。
前两者为 el-upload action 直传模式(表单内选择即上传,区别于第三批 GwStdUpload
的弹窗确认 + uploadRequest 注入模式);附件管理为「按钮 + 附件表格 + 拖拽上传弹窗」三段式,
全部请求注入式。
GwStdFileUpload Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
已上传文件 [{name, url}] |
[] |
action / headers / data / withCredentials |
上传地址(直传)与请求配置 | '' |
fileTypes |
允许的后缀(空数组不校验) | [] |
fileMaxSize |
大小上限(MB) | 5 |
multiple / limit |
多选 / 数量上限(达到后隐藏上传按钮) | false / 0 |
uploadTip |
提示文案 | '' |
disabled / readonly |
禁用 / 只读(隐藏行内删除与下载保留) | false |
label 等表单项包装 |
同其它表单组件 | — |
文件列表自定义渲染:文件名截断 + 下载链接 + 删除图标。emits:update:modelValue、
change、success(response, file, fileList)、error、remove(file)、exceed;
expose:getUploadRef()。
GwStdPictureUpload Props(常用)
同 GwStdFileUpload(fileTypes 按 image/[后缀] 校验 mime),picture-card 卡片模式:
el-image 预览(preview-src-list 大图、initial-index 定位)、上传成功角标、卡片悬浮
预览/删除操作按钮、达到上限隐藏加号卡片。
emits:上述全部 + preview(file)。
GwStdUploadManage Props(常用)
| Prop | 说明 | 默认 |
|---|---|---|
files |
静态附件列表(无 fetchFiles 时展示) | [] |
fetchFiles |
附件列表获取函数(挂载/上传成功/删除成功后调用) | — |
uploadRequest |
上传请求 (formData) => Promise<{success, data}>(必填,注入式) |
— |
deleteRequest |
删除请求 (file) => Promise<{success}>(未注入时删除仅抛 operate 事件) |
— |
baseUrl |
相对下载地址前缀(原 top.G.path) | '' |
params |
上传附加字段(追加进 FormData) | {} |
fileType / fileSize / limit |
后缀(逗号串或数组)/ {value, type} 大小 / 数量上限 |
[] / {} / 5 |
hiddenBtn / label / 按钮 props |
隐藏按钮 / 文案 / type/size/icon/width/height 等 | false / '上传附件' |
title / buttonName |
上传弹窗标题 / 确认按钮文字 | '上传文件' / '上传' |
tableHeight / stripe |
表格高度 / 斑马纹 | '200px' / true |
showPreview / showDownload / showDelete |
操作列按钮显隐 | true |
行结构(GwStdUploadManageFile):fileName / fileSize(KB) / crna 上传人 / crdt 上传时间 /
downLoadUrl(http 原样、相对路径拼 baseUrl)/ fileId。预览分流:图片后缀内置查看弹窗,
其余 window.open;下载为 a 标签触发;删除走 ElMessageBox 确认 + deleteRequest + 自动刷新。
emits:upload-success(response)、delete-success(response, file)、operate(row, type)、
error(type, error)、before-upload;expose:open()、refresh()、submit()、
clearFiles()、getUploadRef()、getTableRef()。
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdUploadManage } from '@gwall/std-ui/upload-manage';
import { uploadApi, deleteFileApi, getFileListApi } from '@/api';
const umRef = ref();
const uploadRequest = (formData: FormData) => uploadApi(formData); // POST 附件接口
const deleteRequest = (file: any) => deleteFileApi({ fileid: file.fileId });
const fetchFiles = () => getFileListApi({ keys: orderNo, uploadType: 'component' });
</script>
<template>
<GwStdUploadManage
ref="umRef"
label="上传附件"
:fetch-files="fetchFiles"
:upload-request="uploadRequest"
:delete-request="deleteRequest"
:file-type="'doc,docx,pdf,jpg,png'"
:file-size="{ value: 10, type: 'MB' }"
/>
</template>
容器件(第十二批)
第十二批 7 个容器组件,由 containerModule 改造:GwStdCard(原 card)、GwStdDrawer(原 drawer)、
GwStdFormDrawer(原 formDrawer)、GwStdVerticalTabs(原 verticalTabs)、GwStdIterator(原 iterator)、
GwStdDivideContainer(原 divideContainer)、GwStdElevatorTabs(原 elevatorTabs)。
原组件的设计器画布机制(选中边框 gwBorders、拖拽 gw-draggable、变量池 widget/options、setEvent 事件注册)
全部去除,能力以标准 props / slots / emits 提供。
GwStdCard 卡片
el-card 包装,保留原 body 10px 内边距与 header 能力。
| Prop | 说明 | 默认 |
|---|---|---|
shadow |
always / hover / never |
'always' |
header |
头部标题(空且无 header 插槽时不渲染头部) | '' |
bodyPadding |
内容区内边距 | '10px' |
width / height |
自定义宽高 | '' |
插槽 default / header;emits click
GwStdDrawer 抽屉
el-drawer 包装。原设计器画布抽屉(绝对定位白盒 + 遮罩 + 选中边框)改为标准 v-model 弹层。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
显隐 | false |
direction |
rtl / ltr / ttb / btt |
'rtl' |
size |
尺寸,兼容原 {value, type} 结构 |
'30%' |
withHeader / title / modal / append-to-body / showClose / closeOnClickModal / destroyOnClose / zIndex / customClass |
el-drawer 透传 | — |
emits:update:modelValue、open、opened、close、closed;expose:getDrawerRef()、open()、close()
GwStdFormDrawer 表单抽屉
对齐原运行态:无默认标题栏,外侧 30px 工具栏、上下分组、拖拽调宽及中间全屏/返回按钮。
默认插槽渲染原生表单;也支持 src、formId / formSrcBuilder(formId, context) 嵌入页面。
| Prop | 说明 | 默认 |
|---|---|---|
v-model |
显隐 | false |
src |
iframe 页面地址(原 formId 组装逻辑由调用方实现) | '' |
direction |
同 GwStdDrawer | 'rtl' |
size |
尺寸(兼容 {value, type});全屏为工具栏、分隔线和拖拽边缘预留 36px,仅显示拖拽边缘时预留 4px,退出恢复原尺寸 |
'65%' |
withHeader / showClose |
可显式启用普通标题栏及关闭按钮 | false / false |
buttons |
原上下分组工具配置,支持 show / disabled / btnType / action / code;传 [] 清空业务按钮 |
原 11 个按钮 |
resizable / minSize |
拖拽或方向键调宽;最小尺寸不超过可用空间 | true / 240 |
formType / row / rows / rowKey |
新增、编辑、预览状态及上一条/下一条数据;预览通过插槽 readonly 禁用表单 |
'edit' / {} / [] / 'id' |
activePanel |
支持 v-model:activePanel,日志/附件/设置切换时保留表单内容 |
'form' |
logsProps / annexProps / settingsProps |
内置 GwStdLogsShow / GwStdAnnexShow / GwStdBillsSetting 的接口及配置注入;仍需宿主提供业务请求 | {} |
beforeClose(context, reason) |
支持异步关闭校验,返回 false 阻止返回、取消、ESC、遮罩及关闭按钮;外部 v-model 更新由宿主控制 |
— |
loading / footer |
业务加载状态 / 默认取消确定底栏 | false / false |
iframeAttrs |
iframe 附加属性(name / allow 等) | {} |
| 其余 | withHeader / title / modal / appendToBody / showClose / customClass | — |
默认插槽、#panel-{action或code}、#footer 的作用域为 {formType, row, readonly, index, activePanel, close, refresh};#header 沿用 el-drawer 作用域。
内置日志、附件、设置可被对应面板插槽覆盖;自定义选中型按钮通过 code 切换面板。
emits:原生命周期及 iframeLoad(event)、back;另有 button-click(button, context)、refresh(context)、
form-change(context)、record-change(row, index)、panel-change(panel)、confirm(context)、
settings-saved(config, options)、fullscreen-change(bool)、resize(px)、close-error(error),
以及 update:formType / update:row / update:activePanel / update:size。
expose:getDrawerRef()、getIframeRef()、reload()、refresh()、toggleFullScreen()、handleButtonClick(button)、
open({formType, row})、openAdd(row?)、openEdit(row)、openPreview(row)、close()、getContext()。
GwStdVerticalTabs 纵向页签
左侧 el-tree 导航(原 leftTreeBox 200px)+ 右侧内容区;叶节点点击切换页签(父节点仅展开),
内容区按平铺叶节点 v-show 切换(不销毁)。
| Prop | 说明 | 默认 |
|---|---|---|
tabs |
树形页签 [{label, code, children, disabled?}] |
[] |
v-model |
当前激活叶节点 code | 首个叶节点 |
treeWidth |
左侧树宽度 | 200 |
defaultExpandAll / labelKey / childrenKey |
树配置 | true / 'label' / 'children' |
emits:update:modelValue、change(code);插槽 #tab-{code}(作用域 {tab});
expose:setActive(code)、getFlatTabs()、getTreeRef()
GwStdIterator 迭代器
数据驱动卡片列表:每行渲染一张卡片(default 插槽作用域 {row, index, iteratorIndex}),
可选左上角勾选框,选中/单击/双击分别抛事件。原远程分页取数(pubPage)由调用方完成后传 data。
| Prop | 说明 | 默认 |
|---|---|---|
data |
行数据数组(原 dataList) | [] |
v-model |
选中行的主键值数组(原 selectedKeys) | [] |
multiple |
是否显示勾选框 | true |
primaryKey |
主键字段(逗号分隔多字段,原 primaryKey) | 'id' |
startIndex |
跨页序号基数(原 iterator_index) | 0 |
rowKey / loading / emptyText |
key 字段 / 加载中 / 空数据文案 | '' / false / '暂无数据' |
emits:update:modelValue、select(rows, keys, keysMap)(keysMap 即原 multipleKeys 各主键字段逗号串)、
row-click(row, index, currentKey)、row-dblclick(row, index, currentValue);
expose:getSelectedRows()、getSelectedKeys()、clearSelection()
<script setup lang="ts">
import { ref } from 'vue';
import { GwStdIterator } from '@gwall/std-ui/iterator';
const selected = ref<any[]>([]);
const rows = await fetchSkus(); // 调用方取数
</script>
<template>
<GwStdIterator v-model="selected" :data="rows" primary-key="id" @row-click="(row) => openDetail(row)">
<template #default="{ row }">
<div class="sku-card">{{ row.name }}</div>
</template>
</GwStdIterator>
</template>
GwStdDivideContainer 分割容器
双区域 + 可拖拽分隔条:direction 左右/上下分隔、mirror 镜像布局(-reverse)、
固定侧尺寸(原 selectRange + range)、hover 分隔条显示折叠按钮(折叠某侧归零)。
| Prop | 说明 | 默认 |
|---|---|---|
direction |
row 左右 / column 上下(原 flexDirection) |
'row' |
mirror |
镜像(第二区域显示在前,原 ismirrorImage) | false |
divideWidth |
分隔条宽度 | 6 |
fixedSide |
固定尺寸侧 'first' / 'second' / 'none'(原 selectRange) |
'first' |
range |
固定侧初始尺寸(数字 / '40%' / 兼容 {value, type}) |
'50%' |
emits:resize(fixedPx)(拖拽结束)、collapse(pane);
expose:collapse(pane)、expand()、reset();插槽 #first / #second
分隔条折叠按钮原用 gicon 上/下箭头字体图标,标准版改用 element-plus
CaretTop/CaretBottom/CaretLeft/CaretRight(按方向分流),不依赖平台字体。
GwStdElevatorTabs 电梯页签
电梯导航 + 分组页签双模式(原 displayType elevator-tab / normal-tab)。电梯模式:顶部横向按钮组或
右上角浮窗导航(可折叠)+ 纵向滚动内容区 + 滚动联动高亮 + 点击平滑滚动 + 区块折叠
(+/- 图标、折叠时高度锁标题行)+ 全部收起/展开。分组页签模式:多组 el-tabs 卡片(原 tabsBox),
组右上角展开/收起(收起时只留页签头),有 children 的一级开启新组、后续单页签并入该组(原 collapseInfoOther)。
子页签默认以右侧覆盖面板打开明细表单(宽度 70%,仅覆盖所属列表内容区),列表宽度不超过 550px 时自动铺满列表并隐藏调宽手柄,保证页签和操作可读。支持切换、关闭、拖动左边缘调宽及列表区域内全屏;也接受原配置的平铺 bindCode 关联。面板不参与列表布局,主信息和列表标题不被遮挡,从可见列表打开时不改变滚动位置,切换电梯/页签模式保留已挂载的明细内容。
需要将子页签直接显示为电梯区块或组内页签时,设置 child-display="sections"。
| Prop | 说明 | 默认 |
|---|---|---|
tabs |
页签配置 [{prop, label, children?, fold?, defaultCollapse?, helpText?, disabled?}] |
[] |
v-model |
当前激活页签 prop | 首个页签 |
type |
elevator 电梯导航 / tabs 分组页签(原 displayType) |
'elevator' |
layout |
电梯模式导航位置 horizontal / affix(原 tabsLayout) |
'horizontal' |
childDisplay |
子页签显示方式:details 明细表单 / sections 独立区块及组内页签 |
'details' |
showModeSwitch |
显示电梯表单/页签表单切换图标,支持 v-model:type |
true |
beforeDetailClose |
(parent, childProp) => boolean | Promise<boolean>,返回 false 阻止关闭明细 |
- |
detailWidth / detailResizable |
明细初始总宽度(数字按 px)/ 允许拖动左边缘调宽,宽度限制在所属列表区域内 | 'calc(70% + 32px)' / true |
detailTools |
左侧工具配置 [{action, label?, disabled?}],action 支持 return/save/fullscreen/refresh/previous/next |
六个图标;未接入业务的保存、刷新及行切换默认禁用 |
collapsible |
区块可折叠(原 fold) | true |
showCollapseAll |
显示全部收起/展开按钮 | true |
height |
内容区高度(超出滚动,滚动联动前提) | '' |
lineHeight / fontSize / borderRadius / margin |
标题行高 / 字号 / 圆角 / 区块间距(原 linHeight/fontSize/borderRadius/tabsMarging) | 30 / 12 / '0' / 3 |
color / selectColor / bolded / selectBolded |
标题默认/激活色与加粗(激活色默认主色) | '#000000' / '#3d8bfd' / false |
emits:update:modelValue、change(prop)(点击导航/页签)、collapse(tab, collapsed)、update:type、type-change(type)、
detail-open(parentProp, childProp)、detail-change(parentProp, childProp)、detail-close(parentProp)、detail-fullscreen(parentProp, fullscreen)、detail-resize(parentProp, width)、detail-tool(action, parentProp, childProp)(宿主接入保存、刷新、上一条/下一条;返回和全屏自带行为);
插槽 #tab-{prop}(父页签作用域 {tab, index, openDetail(childProp?)},明细页签作用域 {tab, index, parent, close()});
#tab-actions(展开时标题右侧按钮,作用域 {tab, index, openDetail(childProp?)})、#tab-abstract(收起时标题摘要,作用域 {tab, index});
#detail-actions(明细页签行右侧的保存/返回等操作,作用域 {parent, tab, close()};自动为操作预留宽度);
expose:scrollToTab(prop)、toggleCollapseAll(collapsed?)、toggleCollapse(tab)、setActive(prop)、
openDetailForm(parentProp, childProp?)、closeDetailForm(parentProp)。
<GwStdElevatorTabs :tabs="[{ prop: 'orders', label: '订单', children: [{ prop: 'detail', label: '订单详情' }] }]">
<template #tab-orders="{ openDetail }"><el-button @click="openDetail('detail')">查看明细</el-button></template>
<template #tab-detail><OrderDetail /></template>
</GwStdElevatorTabs>
主从表单布局可参考 demo/ElevatorFormExample.vue:主信息和明细列表为两个一级页签,明细信息放入列表页签的 children,新增/删除放入 #tab-actions。列表插槽占满一行,列表高度由内部容器设置;主信息使用五列、顶部标签和下边框输入框。
GwStdFormDrawer 可传 initialFullscreen(默认 false)控制每次打开时的全屏状态,showResizeControls(默认 true)控制中部伸缩按钮;隐藏按钮不影响拖动调宽和工具栏全屏。通过 rows / row / rowKey 接入当前页记录,record-change 通知宿主重新回填。
GwStdNewTable.getRows() 返回当前页数组快照;compactPagination(默认未设置)可显式切换左侧紧凑分页,未传时仍沿用原 compactMode 配置。明细打开/关闭时由宿主切换此 prop,detail-nav-change 配合 selectPreviousLine() / selectNextLine() 接入明细导航。
#toolbar 可放保存/返回等表单操作,显示为导航上方的 32px 操作行,明细覆盖面板会避开此行。带子表单的区块默认显示全屏按钮,tab.fullscreen: false 可关闭,普通区块可用 tab.fullscreen: true 开启;全屏仅铺满电梯内容区,退出时恢复滚动位置。原型预览:开发服务的 /?elevator-form,默认左侧单据列表、右侧 55% 表单抽屉,支持记录切换、编辑保存及明细浮层;内置操作图标随组件打包原平台字体,不依赖宿主加载 gicon。
滚动联动说明:滚动内容区时按区块可视状态反向高亮导航(仅同步 v-model,不触发
change); 点击导航后 2 秒内暂停联动(平滑滚动期间避免高亮抖动,与原组件一致)。原页签按钮面包屑 (tabsButtonByTab)、摘要配置(tabsAbstractByTab)分别由#tab-actions、#tab-abstract插槽承载; 页签显隐由show控制,关闭明细前的未保存校验由宿主通过beforeDetailClose提供。
系统件(第十三批)
原 systemModule 中的四个业务组件:GwStdListCard(原 tableList 列表卡片)、GwStdPhotoWall(原 photoWall 照片墙)、
GwStdCronExpression(原 cronExpression cron 表达式)、GwStdFlowChart(原 flowChart 流程图)。
GwStdListCard 列表卡片
卡片式数据列表(原 tableList):标题栏 + 状态标签(default 行内 / style1 右上角悬浮)、24 栅格字段布局(列 span)、
字典 / 时间 / 精度(截断、四舍五入)列格式化、动态行背景(跨列阈值 / 文本规则)、斑马纹、选中高亮、
行内编辑(列 editable)、右侧纵向 / 底部横条操作按钮、空值列隐藏。
<GwStdListCard
:data="rows"
:columns="columns"
title-key="orderNo"
state-key="status"
state-map="1:待处理/2:已完成"
state-bg-map="1:#e6a23c/2:#67c23a"
stripe
:buttons="[{ label: '查看' }]"
@button-click="onCardButton"
/>
| Prop | 说明 | 默认 |
|---|---|---|
data / columns |
行数据 / 列配置 GwStdListCardColumn |
[] |
primaryKey |
主键字段(行 key 与选中比对) | 'id' |
showTitle / titleKey / titleBgColor / titleColor |
标题栏显隐 / 取值字段 / 背景色(默认渐变浅蓝)/ 文字色 | true / '' |
stateKey / stateMap |
状态字段 / 状态文本映射 '1:待处理/2:已完成'(未命中的值隐藏标签) |
'' |
stateBgMap / stateColorMap / stateTextColor |
默认样式标签底色映射 / style1 标签字色映射(底色按 10% 透明度派生)/ 默认样式文字色 | '' / '#ffffff' |
titleStyle |
default 行内标签 / style1 右上角悬浮标签 |
'default' |
showIndex / stripe / stripeColor / selectedColor |
行 |
Related Packages
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.0.4 | ^3.2.47 | MIT | |
| 0.0.3 | ^3.2.47 | MIT | |
| 0.0.2 | ^3.2.47 | MIT | |
| 0.0.1 | ^3.2.47 | MIT |
Pre-releases (1)
| Version | Released | License |
|---|---|---|
| 0.0.0-stage |