This commit is contained in:
张成
2026-03-25 11:28:45 +08:00
parent c3623d4a95
commit b13fabb370
3 changed files with 452 additions and 25 deletions

View File

@@ -1,6 +1,7 @@
<template>
<Switch
:value="value"
<!-- iView / View Design 全局注册为 i-switch勿用 <Switch> 与本组件 name 形成自引用 -->
<i-switch
:value="innerValue"
v-bind="$attrs"
@on-change="handleChange"
/>
@@ -8,12 +9,23 @@
<script>
export default {
name: 'Switch',
name: 'FrameworkSwitch',
props: ['value'],
inheritAttrs: false,
computed: {
innerValue() {
const v = this.value
if (v === true || v === 1 || v === '1' || v === 'true') return true
if (v === false || v === 0 || v === '0' || v === 'false') return false
if (v === '' || v === null || v === undefined) return false
return Boolean(v)
}
},
methods: {
handleChange(checked) {
this.$emit('input', checked)
this.$emit('change', checked)
this.$emit('on-change', checked)
}
}
}

View File

@@ -3,7 +3,7 @@
<!-- 使用组件映射表来简化条件渲染 -->
<component
:is="getComponentName(col.com)"
:value="col.com === 'Radio' ? radioValue : value"
:value="inputBindValue"
v-bind="getComponentProps(col)"
:disabled="disabled"
:class="getComponentClass(col.com)"
@@ -58,6 +58,7 @@
<script>
import templateRender from './templateRender'
import FrameworkSwitch from '../switch/index.vue'
// 导入框架中的图标配置
let icons = []
@@ -71,7 +72,8 @@ try {
export default {
name: 'FieldRenderer',
components: {
templateRender
templateRender,
FrameworkSwitch
},
props: {
col: {
@@ -93,9 +95,21 @@ export default {
}
},
computed: {
// 直接返回原始值,不进行类型转换
radioValue() {
return this.value
},
inputBindValue() {
if (this.col.com === 'Radio') {
return this.radioValue
}
if (this.col.com === 'Switch') {
const v = this.value
if (v === true || v === 1 || v === '1' || v === 'true') return true
if (v === false || v === 0 || v === '0' || v === 'false') return false
if (v === '' || v === null || v === undefined) return false
return Boolean(v)
}
return this.value
}
},
mounted() {
@@ -118,7 +132,7 @@ export default {
'Input': 'Input',
'DatePicker': 'DatePicker',
'TimePicker': 'TimePicker',
'Switch': 'Switch',
'Switch': 'FrameworkSwitch',
'Checkbox': 'Checkbox',
'Slider': 'Slider',
'Rate': 'Rate',
@@ -151,7 +165,10 @@ export default {
delete baseProps.data_type
delete baseProps.type
delete baseProps.rowStyle
delete baseProps.key
delete baseProps.title
delete baseProps.render
// 根据组件类型添加特定属性
if (col.com === 'Select') {
baseProps.filterable = true
@@ -237,7 +254,9 @@ export default {
'Input': 'width:100%;',
'TextArea': 'width:100%;',
'DatePicker': 'width:100%;',
'TimePicker': 'width:100%;'
'TimePicker': 'width:100%;',
"inputNumber": "width:100%;",
}
return styleMap[componentType] || ''
},
@@ -252,14 +271,17 @@ export default {
this.$emit('input', value)
},
// 处理变化事件
// 处理变化事件i-switch 等只发 on-change需同步 input 供 editModal 更新行)
handleChange(value) {
// 如果接收到的是事件对象,提取值
if (value && typeof value === 'object' && value.target) {
value = value.target.value
}
// 直接传递值,不进行类型转换
this.$emit('change', value)
const out =
this.col.com === 'Switch'
? !!value
: value
this.$emit('input', out)
this.$emit('change', out)
}
}
}