123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- <!--
- * @Descripttion: 参数-动态表单组件
- * @Author: Devli
- * @Date: 2021-2-10 10:17:24
- * @Last Modified by: yanzili
- * @Last Modified time: 2021-6-24 11:20:24
- !-->
- <template>
- <span>
- <!-- input 输入框-->
- <el-form-item :label="item.label" v-if="item.type == 'input'" :rules="[{required:item.required}]">
- <el-input
- :name="item.name"
- clearable
- :show-password ="item.name == 'password'?true:false"
- :placeholder="item.placeholder"
- v-model.trim="ConfigData[item.name]"
- @change="drivreConfigChange($event,item.name)"
- ></el-input>
- </el-form-item>
- <!-- input-number 数字输入框-->
- <el-form-item :label="item.label" v-if="item.type == 'input-number'" :rules="[{required:item.required}]">
- <el-input-number
- style="width:100%"
- :min="1"
- :label="item.label"
- v-model.trim="ConfigData[item.name]"
- @change="drivreConfigChange($event,item.name)"
- ></el-input-number>
- </el-form-item>
- <!-- select 下拉 显示给定的值-->
- <el-form-item :label="item.label" v-if="item.type == 'select'" :rules="[{required:item.required}]">
- <el-select @change="drivreConfigChange($event,item.name)" v-model="ConfigData[item.name]" :placeholder="item.placeholder" style="width:100%">
- <el-option
- v-for="option in item.options"
- :key="option.value"
- :label="option.label"
- :value="option.value">
- </el-option>
- </el-select>
- </el-form-item>
- <!-- select-code 下拉 直接取字典值 -->
- <el-form-item :label="item.label" v-if="item.type == 'code-select'" :rules="[{required:item.required}]">
- <code-select v-model="ConfigData[item.name]" :inputName="item.name" :dictname="item.dictname" mystyle="width: 100%;" placeholder="请选择" @changed="drivreConfigChange($event,item.name)" />
- </el-form-item>
- <!-- textarea 文本框-->
- <el-form-item :label="item.label" v-if="item.type == 'textarea'" :rules="[{required:item.required}]">
- <el-input
- type="textarea"
- clearable
- autosize
- :placeholder="item.placeholder"
- v-model="ConfigData[item.name]"
- @change="drivreConfigChange($event,item.name)"
- ></el-input>
- </el-form-item>
- <!-- checkbox 多选框 -->
- <el-form-item :label="item.label" v-if="item.type == 'checkbox-group'" :rules="[{required:item.required}]">
- <el-checkbox-group v-model="ConfigData[item.name]" @change="drivreConfigChange($event,item.name)">
- <el-checkbox v-for="(option,index) in item.options" :key="index" :label="option">{{option}}</el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- <!-- radio 单选框 -->
- <el-form-item :label="item.label" v-if="item.type == 'radio-group'" :rules="[{required:item.required}]">
- <el-radio-group v-model="ConfigData[item.name]" @change="drivreConfigChange($event,item.name)">
- <el-radio v-for="(option,index) in item.options" :key="index" :label="option">{{option}}</el-radio>
- </el-radio-group>
- </el-form-item>
- <!-- 文件上传 -->
- <el-form-item :label="item.label" v-if="item.type == 'upload'" :rules="[{required:item.required}]" class="elForm">
- <el-upload
- :action="uploadUrl"
- list-type="picture-card"
- :on-preview="handlePictureCardPreview"
- :on-success="(response, file, fileList) => handleSuccess(response, file, fileList, item.name)"
- :on-remove="(file, fileList) => handleRemove(file, fileList, item.name)"
- :class="ConfigData[item.name]?'hide_box':''"
- :file-list="ConfigData[item.name] | imgFilter"
- :limit="1"
- >
- <i class="el-icon-plus"></i>
- </el-upload>
- <el-dialog :visible.sync="dialogVisible">
- <img width="100%" :src="dialogImageUrl" alt="">
- </el-dialog>
- </el-form-item>
- </span>
- </template>
- <script>
- import CodeSelect from "@/components/codeSelect.vue";
- import axios from 'axios';
- export default {
- props: {
- value: {
- type: [Object, String],
- required: true,
- default:()=>{}
- },
- // element 单个组件信息值
- item:{
- type:Object,
- required: true,
- default:()=>{}
- }
- },
- components:{
- CodeSelect
- },
- data () {
- return {
- // inputVals:[],
- ConfigData:{
- payType: []
- }, // 要传递出去的数据
- formItemsArr: [],
- dialogImageUrl: '',
- dialogVisible: false,
- // fileList: [],
- uploadUrl: axios.defaults.baseURL + '/auth-service/file/upload'
- }
- },
- watch: {
- value(newValue, oldValue) {
- // console.log(newValue,"newValue");
- this.ConfigData = newValue
- },
- item(val){
- console.log(val, 'item233');
- }
- },
- computed: {},
- filters: {
- imgFilter(val){
- if(val) {
- return [{url: val}]
- }
- }
- },
- methods: {
- // 上传成功的回调
- handleSuccess(response, file, fileList, imgName) {
- let fileListArr = []
- fileList.forEach(el => {
- if(el) {
- fileListArr.push(el.response.repData)
- }
- })
- this.drivreConfigChange(fileListArr.join(','), imgName)
- },
- // 移除图片的回调
- handleRemove(file, fileList, imgName) {
- console.log(imgName)
- this.ConfigData[imgName] = ""
- },
- // 预览图片
- handlePictureCardPreview(file) {
- this.dialogImageUrl = file.url;
- this.dialogVisible = true;
- },
- // 无论哪个输入框改变 都需要触发事件 将值回传
- drivreConfigChange(val,key){
- const {ConfigData} = this
- // console.log(val,key,"方法方法付付");
- // 针对type是下拉框的处理
- if (val.extend) {
- this.$set(ConfigData,key,val.value);
- }else{
- this.$set(ConfigData,key,val);
- }
- this.$emit('input', ConfigData)
- this.$emit('eachChange', ConfigData)
- },
- //重新选择了 数据连接类型 就重置输入框的值
- clearInput(){
- // this.inputVals.forEach((item,index,arr) => this.$set(arr,index,''));
- // 清空 对象
- let obj = this.ConfigData
- Object.keys(obj).forEach(key => {
- if (obj[key]) obj[key] = "";
- });
- }
- }
- }
- </script>
- <style lang="scss">
- .elForm .el-upload--picture-card{
- width: 80px;
- height: 80px;
- line-height: 83px;
- }
- .elForm .el-upload-list__item {
- width: 80px;
- height: 80px;
- }
- .hide_box .el-upload--picture-card{
- display: none;
- }
- </style>
|