refactor(components): 统一组件API规范并完善表单重置功能

- 将多个组件的props从具体属性名改为统一的value属性
- 为所有组件添加v-model支持,替换原有的具体属性绑定
- 统一实现resetField方法,确保表单重置功能一致性
- 修正组件内部数据绑定逻辑,使用innerValue替代直接修改prop
- 更新文档示例,将API参数说明改为value | v-model格式
- 为代码编辑器、富文本编辑器等组件添加input事件发射
- 调整文件上传组件的值类型定义,从Object改为String
- 移除废弃的maxLength回调方法,优化编辑器性能
- 重构双向绑定逻辑,确保父子组件数据同步正确性
- 为树形选择器添加ref引用以便操作内部实例
- 调整组件演示页面的导入路径和标签页名称结构
This commit is contained in:
2026-02-05 14:34:32 +08:00
parent 9adedc71a5
commit 882ac772d3
31 changed files with 218 additions and 120 deletions
@@ -44,9 +44,9 @@ export default {
dept: null
},
apiData: [
{ name: 'value', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' },
{ name: 'node-click', remark: '部门节点发生改变的时候触发的回调', type: '(value) => {}', defaultValue: '-', required: '否' },
{ name: 'search', remark: '搜索部门回调事件', type: '(value) => {}', defaultValue: '-', required: '否' }
{ name: 'value | v-model', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' },
{ name: 'search', remark: '搜索部门回调事件', type: '(value) => {}', defaultValue: '-', required: '否' },
{ name: 'node-click', remark: '部门节点发生改变的时候触发的回调', type: '(value) => {}', defaultValue: '-', required: '否' }
]
}
},
@@ -18,7 +18,7 @@
</el-select>
</el-form-item>
<el-form-item label="文件上传" prop="fileUrl">
<cute-file-drag-upload v-model="form" mode="local" />
<cute-file-drag-upload v-model="form.fileUrl" mode="local" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('form')">提 交</el-button>
@@ -37,7 +37,7 @@
</el-select>
</el-form-item>
<el-form-item label="文件上传" prop="fileUrl" label-width="80px">
<cute-file-drag-upload v-model="form" mode="local" />
<cute-file-drag-upload v-model="form.fileUrl" mode="local" />
</el-form-item>
</cute-form-dialog>
<h4>与CuteFormDrawer集成</h4>
@@ -53,7 +53,7 @@
</el-select>
</el-form-item>
<el-form-item label="文件上传" prop="fileUrl" label-width="80px">
<cute-file-drag-upload v-model="form" mode="local" />
<cute-file-drag-upload v-model="form.fileUrl" mode="local" />
</el-form-item>
</cute-form-drawer>
<h4>API</h4>
@@ -83,7 +83,7 @@ export default {
fileUrl: ''
},
apiData: [
{ name: 'value', remark: '上传的文件路径', type: 'string', defaultValue: '-', required: '是' },
{ name: 'value | v-model', remark: '上传的文件路径', type: 'string', defaultValue: '-', required: '否' },
{ name: 'mode', remark: '上传方式。local本地、oss对象存储', type: 'string', defaultValue: 'local', required: '否' }
]
}
@@ -18,7 +18,7 @@
</el-select>
</el-form-item>
<el-form-item label="文件上传" prop="fileUrl">
<cute-file-upload v-model="form" mode="local" />
<cute-file-upload v-model="form.fileUrl" mode="local" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('form')">提 交</el-button>
@@ -37,7 +37,7 @@
</el-select>
</el-form-item>
<el-form-item label="文件上传" prop="fileUrl" label-width="80px">
<cute-file-upload v-model="form" mode="local" />
<cute-file-upload v-model="form.fileUrl" mode="local" />
</el-form-item>
</cute-form-dialog>
<h4>与CuteFormDrawer集成</h4>
@@ -53,7 +53,7 @@
</el-select>
</el-form-item>
<el-form-item label="文件上传" prop="fileUrl" label-width="80px">
<cute-file-upload v-model="form" mode="local" />
<cute-file-upload v-model="form.fileUrl" mode="local" />
</el-form-item>
</cute-form-drawer>
<h4>API</h4>
@@ -40,7 +40,7 @@ export default {
productLine: null
},
apiData: [
{ name: 'value', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' },
{ name: 'value | v-model', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' },
{ name: 'disabled', remark: '是否禁用', type: 'boolean', defaultValue: 'false', required: '否' },
{ name: 'change', remark: '产品线发生改变的时候触发的回调', type: '(value) => {}', defaultValue: '-', required: '否' },
{ name: 'detail', remark: '产品线明细发生改变的时候触发的回调', type: '(value) => {}', defaultValue: '-', required: '否' }
@@ -41,7 +41,7 @@ export default {
productLine: null
},
apiData: [
{ name: 'value', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' }
{ name: 'value | v-model', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' }
]
}
},
@@ -41,7 +41,7 @@ export default {
user: ''
},
apiData: [
{ name: 'value', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' },
{ name: 'value | v-model', remark: '绑定的值', type: 'string', defaultValue: '-', required: '否' },
{ name: 'change', remark: '选中用户发生改变的时候触发的回调', type: '(value) => {}', defaultValue: '-', required: '否' }
]
}
@@ -42,7 +42,7 @@ export default {
user: []
},
apiData: [
{ name: 'value', remark: '绑定的值', type: 'array', defaultValue: '[]', required: '否' },
{ name: 'value | v-model', remark: '绑定的值', type: 'array', defaultValue: '[]', required: '否' },
{ name: 'change', remark: '选中用户发生改变的时候触发的回调', type: '(value) => {}', defaultValue: '-', required: '否' }
]
}
@@ -6,9 +6,9 @@
<li>在使用过程中有任何问题,咨询 @Odboy(前端)</li>
</ul>
<h4>Java编辑器</h4>
<cute-code-editor :content="javaContent" mode="java" @change="onJavaChange" />
<cute-code-editor v-model="javaContent" mode="java" @change="onJavaChange" />
<h4>Yaml编辑器</h4>
<cute-code-editor :content="yamlContent" mode="yaml" @change="onYamlChange" />
<cute-code-editor v-model="yamlContent" mode="yaml" @change="onYamlChange" />
<h4>API</h4>
<el-table :data="apiData">
<el-table-column prop="name" label="参数" width="220" />
@@ -77,7 +77,7 @@ export default {
' # IMMEDIATE(立即): 当应用程序以"IMMEDIATE"模式关闭时,它会立即终止,而不管当前是否有任何活动任务或请求。这种方式适用于那些可以立即停止而不会造成严重问题的情况。\n' +
' shutdown: graceful\n',
apiData: [
{ name: 'content', remark: '内容', type: 'string', defaultValue: '-', required: '是' },
{ name: 'value | v-model', remark: '内容', type: 'string', defaultValue: '-', required: '否' },
{ name: 'height', remark: '编辑框高度', type: 'string', defaultValue: '500px', required: '否' },
{ name: 'readonly', remark: '是否只读', type: 'boolean', defaultValue: 'false', required: '否' },
{ name: 'mode', remark: '语法模式。支持:yaml | java | go | swift | dockerfile | groovy | lua | perl | python | ruby | sql | xml | vue', type: 'string', defaultValue: 'yaml', required: '否' },
@@ -7,7 +7,7 @@
</ul>
<h4>基础用法</h4>
<cute-markdown
:content="content"
v-model="content"
@change="onChange"
@save="onSave"
/>
@@ -38,20 +38,20 @@ export default {
'- HTML 标签;\n' +
'- 流程图和序列图 \n',
apiData: [
{ name: 'content', remark: 'markdown格式内容', type: 'string', defaultValue: '-', required: '是' },
{ name: 'change', remark: '编辑区发生变化的回调事件', type: '(text, markdown) => {}', defaultValue: '-', required: '否' },
{ name: 'save', remark: 'ctrl + s 的回调事件(保存按键,同样触发该回调)', type: '(text, markdown) => {}', defaultValue: '-', required: '否' }
{ name: 'value | v-model', remark: 'markdown格式内容', type: 'string', defaultValue: '-', required: '否' },
{ name: 'change', remark: '编辑区发生变化的回调事件', type: '(markdown, html) => {}', defaultValue: '-', required: '否' },
{ name: 'save', remark: 'ctrl + s 的回调事件(保存按键,同样触发该回调)', type: '(markdown, html) => {}', defaultValue: '-', required: '否' }
]
}
},
methods: {
onChange(text, markdown) {
console.log('onChange:text', text)
onChange(markdown, html) {
console.log('onChange:markdown', markdown)
console.log('onChange:html', html)
},
onSave(text, markdown) {
console.log('onSave:text', text)
onSave(markdown, html) {
console.log('onSave:markdown', markdown)
console.log('onSave:html', html)
}
}
}
@@ -8,7 +8,8 @@
<h4>基础用法:clipboard版</h4>
<div id="btn" @click="copy">复制</div>
<h4>基础用法:OneKeyCopy组件版(推荐)</h4>
<cute-one-key-copy :content.sync="msg" />
<!-- v-model 会自动绑定元素的 value 属性,并监听 input 事件(某些元素如复选框监听 change 事件)-->
<cute-one-key-copy v-model="msg" />
<h4>API</h4>
<el-table :data="apiData">
<el-table-column prop="name" label="参数" width="220" />
@@ -30,7 +31,7 @@ export default {
return {
msg: '来复制我吧',
apiData: [
{ name: 'content', remark: '待复制的内容', type: 'string', defaultValue: '-', required: '是' }
{ name: 'value | v-model', remark: '待复制的内容', type: 'string', defaultValue: '-', required: '否' }
]
}
},
@@ -34,7 +34,7 @@ export default {
return {
content: '',
apiData: [
{ name: 'content', remark: '内容', type: 'string', defaultValue: '-', required: '是' },
{ name: 'value | v-model', remark: '内容', type: 'string', defaultValue: '-', required: '否' },
{ name: 'readonly', remark: '是否只读', type: 'boolean', defaultValue: 'false', required: '否' },
{ name: 'change', remark: '内容改变回调事件', type: '(html, text) => {}', defaultValue: '-', required: '否' },
{ name: 'focus', remark: '编辑器获得焦点回调事件', type: '(editor) => {}', defaultValue: '-', required: '否' },
@@ -56,7 +56,7 @@ export default {
{ id: 18, name: '小王', description: '小王牛P' }
],
apiData: [
{ name: 'value', remark: '右侧已选值', type: 'array', defaultValue: '[]', required: '否' },
{ name: 'value | v-model', remark: '右侧数据对象属性值集合', type: 'array', defaultValue: '[]', required: '否' },
{ name: 'dataSource', remark: '左侧表格数据', type: 'array', defaultValue: '[]', required: '是' },
{ name: 'primary-key', remark: '取对象的哪个值作为value', type: 'string', defaultValue: 'id', required: '否' },
{ name: 'loading', remark: '是否加载中', type: 'boolean', defaultValue: 'false', required: '是' },
@@ -50,7 +50,7 @@
</el-collapse-item>
</el-collapse>
</el-tab-pane>
<el-tab-pane label="快捷组件" name="kit">
<el-tab-pane label="快捷组件" name="util">
<el-collapse accordion>
<el-collapse-item title="信息提示 KitMessage" name="KitMessage">
<KitMessageDemo />
@@ -130,10 +130,10 @@
import CutePage from '@/views/components/dev/CutePage.vue'
import CuteButtonDemo from '@/views/componentsDemo/dev/CuteButtonDemo.vue'
import KitMessageDemo from '@/views/componentsDemo/dev/KitMessageDemo.vue'
import KitNotificationDemo from '@/views/componentsDemo/dev/KitNotificationDemo.vue'
import KitDialogDemo from '@/views/componentsDemo/dev/KitDialogDemo.vue'
import KitWsClientDemo from '@/views/componentsDemo/dev/KitWsClientDemo.vue'
import KitMessageDemo from '@/views/componentsDemo/util/KitMessageDemo.vue'
import KitNotificationDemo from '@/views/componentsDemo/util/KitNotificationDemo.vue'
import KitDialogDemo from '@/views/componentsDemo/util/KitDialogDemo.vue'
import KitWsClientDemo from '@/views/componentsDemo/util/KitWsClientDemo.vue'
import CuteLinkDemo from '@/views/componentsDemo/dev/CuteLinkDemo.vue'
import CutePageDemo from '@/views/componentsDemo/dev/CutePageDemo.vue'
import CuteNoDataDemo from '@/views/componentsDemo/dev/CuteNoDataDemo.vue'