198 lines
6.1 KiB
Vue
198 lines
6.1 KiB
Vue
|
|
<template>
|
|||
|
|
<div v-show="props.compType === 'radio'">
|
|||
|
|
<!-- <el-form-item label="字段名">
|
|||
|
|
<el-input class="input" v-model="props"></el-input>
|
|||
|
|
</el-form-item> -->
|
|||
|
|
<el-form-item label="ID">
|
|||
|
|
<el-tooltip class="item" effect="dark" content="请注意,ID的修改可能会导致该组件相关事件失效!" placement="left">
|
|||
|
|
<el-input class="input" v-model="props.id" @change="handlerChangeId"></el-input>
|
|||
|
|
</el-tooltip>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="标题">
|
|||
|
|
<el-input class="input" v-model="props.label"></el-input>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="提示符">
|
|||
|
|
<el-input class="input" v-model="props.placeholder" placeholder="请输入提示符"/>
|
|||
|
|
</el-form-item>
|
|||
|
|
<!-- <el-form-item label="表单栅格">
|
|||
|
|
<el-slider class="input" v-model="props.span" :max="24" :min="1" :marks="{12:''}"></el-slider>
|
|||
|
|
</el-form-item> -->
|
|||
|
|
<el-form-item label="栅格间隔">
|
|||
|
|
<el-input-number v-model="props.gutter" :min="0"></el-input-number>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="标签宽度">
|
|||
|
|
<el-input-number v-model="props.labelWidth" :min="1" :max="200"></el-input-number>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="显示标签">
|
|||
|
|
<el-switch v-model="props.showLabel" @change="handlerChangeLabel"></el-switch>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="必填">
|
|||
|
|
<el-switch v-model="props.required"></el-switch>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="垂直">
|
|||
|
|
<el-switch v-model="props.vertical"></el-switch>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="选项样式">
|
|||
|
|
<el-radio-group v-model="props.optionType">
|
|||
|
|
<el-radio-button label="default">默认</el-radio-button>
|
|||
|
|
<el-radio-button label="button">按钮</el-radio-button>
|
|||
|
|
</el-radio-group>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="显示边框">
|
|||
|
|
<el-switch v-model="props.border"></el-switch>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="大小" v-show="props.border||props.optionType ==='button'">
|
|||
|
|
<el-radio-group v-model="props.size">
|
|||
|
|
<el-radio-button label="medium">正常</el-radio-button>
|
|||
|
|
<el-radio-button label="small">略小</el-radio-button>
|
|||
|
|
<el-radio-button label="mini">迷你</el-radio-button>
|
|||
|
|
</el-radio-group>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="禁用">
|
|||
|
|
<el-switch v-model="props.disabled" @change="handlerChangeDisStatus('disabled')"></el-switch>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="默认值">
|
|||
|
|
<el-input class="input"
|
|||
|
|
:value="setDefaultValue(props.value)"
|
|||
|
|
placeholder="请输入默认值"
|
|||
|
|
@input="onDefaultValueInput"
|
|||
|
|
/>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="数据类型">
|
|||
|
|
<el-radio-group v-model="props.dataType" @change="handlerChangeDataType">
|
|||
|
|
<el-radio-button label="static">静态数据</el-radio-button>
|
|||
|
|
<el-radio-button label="dynamic">动态数据</el-radio-button>
|
|||
|
|
</el-radio-group>
|
|||
|
|
</el-form-item>
|
|||
|
|
<div v-show='props.dataType ==="static"'>
|
|||
|
|
<el-divider>选项</el-divider>
|
|||
|
|
<draggable :list="props.options" handle=".option-drag">
|
|||
|
|
<div v-for="(item, index) in props.options" :key="index" class="select-item">
|
|||
|
|
<div class="select-line-icon option-drag">
|
|||
|
|
<i class="el-icon-s-operation" />
|
|||
|
|
</div>
|
|||
|
|
<el-input v-model="item.label" placeholder="选项名" size="small" />
|
|||
|
|
<el-input
|
|||
|
|
placeholder="选项值"
|
|||
|
|
size="small"
|
|||
|
|
:value="item.value"
|
|||
|
|
@input="setOptionValue(item, $event)"
|
|||
|
|
/>
|
|||
|
|
<div class="close-btn select-line-icon" @click="props.options.splice(index, 1)">
|
|||
|
|
<i class="el-icon-remove-outline" />
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</draggable>
|
|||
|
|
<div style="margin-left: 20px;">
|
|||
|
|
<el-button
|
|||
|
|
style="padding-bottom: 0"
|
|||
|
|
icon="el-icon-circle-plus-outline"
|
|||
|
|
type="text"
|
|||
|
|
@click="addSelectItem"
|
|||
|
|
>
|
|||
|
|
添加选项
|
|||
|
|
</el-button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div v-show='props.dataType ==="dynamic"'>
|
|||
|
|
<el-form-item label="地址">
|
|||
|
|
<el-input v-model="props.action"></el-input>
|
|||
|
|
</el-form-item>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
<script>
|
|||
|
|
import {changeId} from '../mixin'
|
|||
|
|
import draggable from "vuedraggable";
|
|||
|
|
import { isNumberStr } from '../../utils/index'
|
|||
|
|
/**
|
|||
|
|
* input的配置项
|
|||
|
|
*/
|
|||
|
|
let vm = {
|
|||
|
|
name:"inputConfig",
|
|||
|
|
props:['props','getFormId'],
|
|||
|
|
components:{
|
|||
|
|
draggable
|
|||
|
|
},
|
|||
|
|
mixins:[changeId],
|
|||
|
|
data(){
|
|||
|
|
return {
|
|||
|
|
val:123
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods:{
|
|||
|
|
handlerChangeLabel(val){
|
|||
|
|
this.props.labelWidth = val?'80':'1'
|
|||
|
|
},
|
|||
|
|
handlerChangeDisStatus(val){
|
|||
|
|
this.props.readOnly = !val
|
|||
|
|
},
|
|||
|
|
handlerChangeReadStatus(val){
|
|||
|
|
this.props.disabled = !val
|
|||
|
|
},
|
|||
|
|
setDefaultValue(val) {
|
|||
|
|
if (Array.isArray(val)) {
|
|||
|
|
return val.join(',')
|
|||
|
|
}
|
|||
|
|
if (['string', 'number'].indexOf(val) > -1) {
|
|||
|
|
return val
|
|||
|
|
}
|
|||
|
|
if (typeof val === 'boolean') {
|
|||
|
|
return `${val}`
|
|||
|
|
}
|
|||
|
|
return val
|
|||
|
|
},
|
|||
|
|
onDefaultValueInput(str) {
|
|||
|
|
if (Array.isArray(this.props.value)) {
|
|||
|
|
// 数组
|
|||
|
|
this.$set(
|
|||
|
|
this.props,
|
|||
|
|
'value',
|
|||
|
|
str.split(',').map(val => (isNumberStr(val) ? +val : val))
|
|||
|
|
)
|
|||
|
|
} else if (['true', 'false'].indexOf(str) > -1) {
|
|||
|
|
// 布尔
|
|||
|
|
this.$set(this.props, 'value', JSON.parse(str))
|
|||
|
|
} else {
|
|||
|
|
// 字符串和数字
|
|||
|
|
this.$set(
|
|||
|
|
this.props,
|
|||
|
|
'value',
|
|||
|
|
isNumberStr(str) ? +str : str
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
setOptionValue(item,val){
|
|||
|
|
item.value = isNumberStr(val) ? +val : val
|
|||
|
|
},
|
|||
|
|
addSelectItem(){
|
|||
|
|
this.props.options.push({
|
|||
|
|
label: '',
|
|||
|
|
value: ''
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
multipleChange(val){
|
|||
|
|
// this.$set(this.props, 'value', val ? [] : '')
|
|||
|
|
},
|
|||
|
|
handlerChangeDataType(value){
|
|||
|
|
if(value === 'static'){
|
|||
|
|
this.props.options = [];
|
|||
|
|
this.props.options = this.tempOptions;
|
|||
|
|
}else{
|
|||
|
|
this.tempOptions = this.props.options;
|
|||
|
|
this.props.options = [];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
mounted(){
|
|||
|
|
},
|
|||
|
|
watch: {
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
export default vm;
|
|||
|
|
</script>
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.input{
|
|||
|
|
width:75%
|
|||
|
|
}
|
|||
|
|
</style>
|