1
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user