功能变化: foreign-key-crud-form组件支持多对多

pull/102/MERGE
李强 2023-07-10 08:28:32 +08:00
parent 3543ea86d4
commit 9c8d057fe6
1 changed files with 91 additions and 3 deletions

View File

@ -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
}
} }
} }
} }