功能变化: foreign-key-crud-form组件支持多对多
parent
3543ea86d4
commit
9c8d057fe6
|
@ -24,6 +24,7 @@
|
||||||
:rules="[
|
:rules="[
|
||||||
{ required: elProps.fields[key].required, message: '不能为空', trigger: 'blur' },
|
{ required: elProps.fields[key].required, message: '不能为空', trigger: 'blur' },
|
||||||
]"
|
]"
|
||||||
|
style="text-align: center"
|
||||||
>
|
>
|
||||||
<el-select v-model="field[key]" v-if="elProps.fields[key].type === 'select'" placeholder="请选择">
|
<el-select v-model="field[key]" v-if="elProps.fields[key].type === 'select'" placeholder="请选择">
|
||||||
<el-option
|
<el-option
|
||||||
|
@ -34,13 +35,22 @@
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-input-number style="width: 100%" v-else-if="elProps.fields[key].type === 'number'" controls-position="right" v-model="field[key]"></el-input-number>
|
<el-input-number style="width: 100%" v-else-if="elProps.fields[key].type === 'number'" controls-position="right" v-model="field[key]"></el-input-number>
|
||||||
<div v-else-if="elProps.fields[key].type === 'image'" style="height: 50px;width: 50px;">
|
<div v-else-if="elProps.fields[key].type === 'image'" style="height: 30px;width: 30px;">
|
||||||
<d2p-file-uploader v-model="field[key]" :elProps="elProps.fields[key].elProps || { listType: 'picture-card', accept: '.png,.jpeg,.jpg,.ico,.bmp,.gif', limit: 1 }"></d2p-file-uploader>
|
<d2p-file-uploader v-model="field[key]" :elProps="elProps.fields[key].elProps || { listType: 'picture-card', accept: '.png,.jpeg,.jpg,.ico,.bmp,.gif', limit: 1 }"></d2p-file-uploader>
|
||||||
</div>
|
</div>
|
||||||
<!-- 富文本 -->
|
<!-- 富文本 -->
|
||||||
<span v-else-if="elProps.fields[key].type === 'ueditor'">
|
<span v-else-if="elProps.fields[key].type === 'ueditor'">
|
||||||
<values-popover v-model="field[key]" :elProps="{ type: 'ueditor' }" @previewClick="previewClick(index,key)"></values-popover>
|
<values-popover v-model="field[key]" :elProps="{ type: 'ueditor' }" @previewClick="previewClick(index,key)"></values-popover>
|
||||||
</span>
|
</span>
|
||||||
|
<!-- 多对多 -->
|
||||||
|
<span v-else-if="elProps.fields[key].type === 'many_to_many'">
|
||||||
|
<values-popover
|
||||||
|
v-model="field[key]"
|
||||||
|
:dict="elProps.fields[key].dict"
|
||||||
|
:elProps="{ type: elProps.fields[key].value?.type || 'strList', rowKey: elProps.fields[key].value?.rowKey || 'title', label: elProps.value?.title || '答复选项内容' }"
|
||||||
|
@listClick="manyToManyClick(index,key)">
|
||||||
|
</values-popover>
|
||||||
|
</span>
|
||||||
<el-input v-model="field[key]" v-else placeholder="请输入"></el-input>
|
<el-input v-model="field[key]" v-else placeholder="请输入"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -64,7 +74,7 @@
|
||||||
append-to-body
|
append-to-body
|
||||||
width="900">
|
width="900">
|
||||||
<d2p-ueditor
|
<d2p-ueditor
|
||||||
v-if="currentForm.data && currentForm.data[ueditorIndex]"
|
v-if="currentForm.data && currentForm.data[ueditorIndex] && ueditorKey"
|
||||||
v-model="currentForm.data[ueditorIndex][ueditorKey]"
|
v-model="currentForm.data[ueditorIndex][ueditorKey]"
|
||||||
:config="ueditorConfig">
|
:config="ueditorConfig">
|
||||||
</d2p-ueditor>
|
</d2p-ueditor>
|
||||||
|
@ -72,6 +82,22 @@
|
||||||
<el-button type="primary" @click="previewVisible = false">完成</el-button>
|
<el-button type="primary" @click="previewVisible = false">完成</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
<el-dialog
|
||||||
|
title="编辑"
|
||||||
|
:visible.sync="manyToManyVisible"
|
||||||
|
append-to-body
|
||||||
|
v-if="currentForm.data && currentForm.data[manyToManyIndex] && manyToManyKey"
|
||||||
|
:width="elProps.fields[manyToManyKey].dialogWidth">
|
||||||
|
<foreign-key-crud-form
|
||||||
|
v-model="currentForm.data[manyToManyIndex][manyToManyKey]"
|
||||||
|
:isInitRows="elProps.fields[manyToManyKey].isInitRows"
|
||||||
|
:elProps="elProps.fields[manyToManyKey].elProps"
|
||||||
|
@change="foreignChange"
|
||||||
|
></foreign-key-crud-form>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="manyToManyVisible = false">保存</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
@ -128,6 +154,50 @@ export default {
|
||||||
required: true,
|
required: true,
|
||||||
min: 0,
|
min: 0,
|
||||||
max: null
|
max: null
|
||||||
|
},
|
||||||
|
option_data: {
|
||||||
|
name: '选项题目',
|
||||||
|
type: 'many_to_many',
|
||||||
|
span: 2,
|
||||||
|
default: [],
|
||||||
|
required: false,
|
||||||
|
unit: '个',
|
||||||
|
value: {
|
||||||
|
type: 'strList',
|
||||||
|
rowKey: 'name',
|
||||||
|
title: '选项内容'
|
||||||
|
},
|
||||||
|
// 子级多对多
|
||||||
|
isInitRows: true,
|
||||||
|
dialogWidth: '700',
|
||||||
|
dict: {
|
||||||
|
value: 'id', // 数据字典中value字段的属性名
|
||||||
|
label: 'name' // 数据字典中label字段的属性名
|
||||||
|
},
|
||||||
|
elProps: {
|
||||||
|
index: {
|
||||||
|
name: '序号',
|
||||||
|
span: 2
|
||||||
|
},
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
name: '题目选项内容',
|
||||||
|
type: 'input',
|
||||||
|
span: 10,
|
||||||
|
default: null,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
sort: {
|
||||||
|
name: '排序',
|
||||||
|
type: 'number',
|
||||||
|
span: 8,
|
||||||
|
default: 0,
|
||||||
|
required: true,
|
||||||
|
min: 0,
|
||||||
|
max: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,7 +234,11 @@ export default {
|
||||||
// 富文本弹窗编辑框
|
// 富文本弹窗编辑框
|
||||||
previewVisible: false,
|
previewVisible: false,
|
||||||
ueditorIndex: 0,
|
ueditorIndex: 0,
|
||||||
ueditorKey: null
|
ueditorKey: null,
|
||||||
|
// 多对多弹窗
|
||||||
|
manyToManyIndex: 0,
|
||||||
|
manyToManyKey: null,
|
||||||
|
manyToManyVisible: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -254,6 +328,20 @@ export default {
|
||||||
this.ueditorKey = key
|
this.ueditorKey = key
|
||||||
this.previewVisible = true
|
this.previewVisible = true
|
||||||
console.log('previewClick', index, key)
|
console.log('previewClick', index, key)
|
||||||
|
},
|
||||||
|
// 多对多点击事件
|
||||||
|
manyToManyClick (index, key) {
|
||||||
|
this.manyToManyIndex = index
|
||||||
|
this.manyToManyKey = key
|
||||||
|
this.manyToManyVisible = true
|
||||||
|
if (!this.currentForm.data[this.manyToManyIndex][this.manyToManyKey]) {
|
||||||
|
this.currentForm.data[this.manyToManyIndex][this.manyToManyKey] = []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
foreignChange (res) {
|
||||||
|
if (this.manyToManyKey) {
|
||||||
|
this.currentForm.data[this.manyToManyIndex][this.manyToManyKey] = res
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue