problem description
I try to split dialog into individual components, but properties already defined by data in subcomponents will still report an error
the environmental background of the problems and what methods you have tried
try to use vuex, but you may not be in the right posture. These dialog services are complex. The dialog button in this menu column can evoke the dialog display in another menu and display dialog after opening the route
.related codes
/ / Please paste the code text below (do not replace the code with pictures)
< template >
< el-tabs vMui model = "activeName" >
<el-tab-pane label="" name="socalInfo" :disabled="tabActive1">
<el-form label-position="top" class="demo-table-expand" :rules="rules" :model="socalInfo">
<!-- <el-row :gutter="10">
<el-col :span="16">
<el-form-item label="" prop="name">
<el-input v-model="socalInfo.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="" prop="status">
<el-select v-model="socalInfo.status" placeholder="">
<el-option v-for="(item,index) in spaceData" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row> -->
<!-- <el-row :gutter="10">
<el-col :span="24">
<el-form-item label="" prop="address">
<el-col :span="24">
<el-cascader size="large" :options="AreaOptions" expand-trigger="hover" v-model="socalInfo.address" @change="handleChange">
</el-cascader>
</el-col>
</el-form-item>
<el-form-item label="" prop="mapPoint" style="margin-top:15px;">
<el-col :span="24">
<el-input v-model="socalInfo.mapPoint" placeholder="">
<i slot="suffix" class="ion-location mapControl" @click="clickMap"><span></span></i>
</el-input>
</el-col>
</el-form-item>
</el-col>
</el-row> -->
<!-- -->
<!-- <el-dialog width="573px" title="" :visible.sync="innerVisible" append-to-body>
<el-row>
<div class="amap-page-container">
<el-amap-search-box class="search-box" v-model="address" :search-option="searchOption" :on-search-result="onSearchResult"></el-amap-search-box>
<el-amap vid="amapDialog" :plugin="plugins" :zoom="zoom" :center="center" :events="events">
<el-amap-marker :position="marker.position" :events="marker.events" :visible="marker.visible" :draggable="marker.draggable"></el-amap-marker>
</el-amap>
</div>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="innerVisible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</span>
</el-dialog> -->
<!-- -->
<!-- <el-row :gutter="10">
<el-col :span="8">
<el-form-item label="" prop="build">
<el-input v-model="socalInfo.build"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="" prop="hight">
<el-input v-model="socalInfo.hight" type="number"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="" prop="floor">
<el-input v-model="socalInfo.floor" type="number"></el-input>
</el-form-item>
</el-col>
</el-row> -->
<!-- <el-row :gutter="10">
<el-col :span="8">
<el-form-item label="" prop="mianji">
<el-input v-model="socalInfo.mianji" type="number"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="" prop="dianti">
<el-input v-model="socalInfo.dianti" type="number"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="" prop="gongwei">
<el-input v-model="socalInfo.gongwei" type="number"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="" prop="direction">
<el-select v-model="socalInfo.direction" placeholder="">
<el-option v-for="(item,index) in libs.direction" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="" prop="window">
<el-select v-model="socalInfo.window" placeholder="">
<el-option v-for="(item,index) in libs.window" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="16">
<el-row>
<el-col :span="12">
<el-form-item label="" prop="min_lease_rent">
<el-input placeholder="" v-model="socalInfo.min_lease_rent">
<template slot="prepend"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="" prop="max_lease_rent">
<el-input placeholder="" v-model="socalInfo.max_lease_rent">
<template slot="prepend"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="" prop="beginTime">
<el-date-picker v-model="socalInfo.beginTime" type="date" placeholder="">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="" prop="manager">
<el-select v-model="socalInfo.manager" placeholder="">
<el-option v-for="(item,index) in manager" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row> -->
<!-- <el-card class="box-card uploadPic">
<el-row :gutter="10">
<el-col :span="24">
<el-form-item label="" prop="pic">
<el-upload :headers="headers" :file-list="socalInfo.fileList" :on-success="getPhotoList" accept="image/jpeg,image/gif,image/png,image/bmp" ref="upload" action="`/api/attachment/up?action=community`" list-type="picture-card" :on-preview="handlePictureCardPreview" :on-remove="handleRemove">
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible" append-to-body>
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="24">
<el-form-item label="" prop="remarks">
<el-input v-model="socalInfo.remarks" type="textarea" :rows="8"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-card> -->
</el-form>
</el-tab-pane>
<el-tab-pane label="" name="serverInfo" :disabled="tabActive2">
<!-- form -->
<el-form label-position="top" class="demo-table-expand" :rules="serverInforules" :model="serverInfo">
<!-- <el-row :gutter="10">
<el-col :span="24">
<div class="server_icon">
<div class="roleClass" v-for="(roleLine, index) in serverData" :key="index">
{{roleLine.label}}
<el-checkbox-group v-model="checkedServe" class="inlineStyle service_inline" @change="(data)=>handleCheckedChange(data,index)">
<el-checkbox v-for="name in roleLine.children" :key="name.name" :label="name.name" border>
<span class="small_icon">
<img :src="`${API}/up/servers/${name.ico}`" alt="">
</span> {{name.name}}
</el-checkbox>
</el-checkbox-group>
<div style="margin: 10px 0;"></div>
</div>
</div>
</el-col>
</el-row> -->
<!-- <el-row :gutter="10">
<el-col :span="24">
<el-form-item label="" prop="remarks">
<el-input v-model="serverInfo.remarks" type="textarea" :rows="5" auto-complete="off"></el-input>
</el-form-item>
</el-col>
</el-row> -->
</el-form>
<!-- form -->
</el-tab-pane>
< / el-tabs >
< span slot= "footer center" class= "dialog-footer" >
<el-button v-if="activeName !== "socalInfo"" @click="prePage"></el-button>
<el-button type="primary" v-if="activeName !=="serverInfo"" @click="saveAndNext">&</el-button>
<el-button v-show="activeName == "serverInfo"" type="primary" @click="saveAndClose"></el-button>
</span>
< / div >
< / template >
< script >
import {
API,
ERR_OK
} from "@ / api/api";
import http from "@ / router/axios.js";
import {
provinceAndCityData,
regionData,
provinceAndCityDataPlus,
regionDataPlus,
CodeToText,
TextToCode
} from "element-china-area-data";
import {
validatenull
} from" @ / util/validate.js";
export default {
props: ["dialogVisible"],
data () {
let self = this;
const token = getStore({
name: "token"
});
return {
checkedServe: [],
API,
provinceAndCityData,
regionData,
provinceAndCityDataPlus,
regionDataPlus,
CodeToText,
TextToCode,
activeName: "socalInfo",
tabPanel: ["socalInfo", "serverInfo"],
headers: {
Authorization: `Bearer ${token}`
},
editable: true,
isDragging: false,
delayedDragging: false,
dialogImageUrl: "",
dialogVisible: false,
showDouble: false,
showSigle: true,
bindGrid: 8,
formEdit: true,
mapAddressInfo: "",
AreaOptions: regionData,
plugins: ["AMap.Autocomplete"],
innerVisible: false,
innerVisible2: false,
q: "",
amapManager,
address: "",
zoom: 14,
lng: 0,
lat: 0,
center: [113.666226, 34.799998],
markers: [],
marker: {
position: [113.666226, 34.799998],
visible: true,
draggable: true,
events: {
click: (e) => {
let o = this.amapManager.getMap();
let marker = new AMap.Marker({
position: this.center
});
marker.setMap(o);
console.log(e)
},
dragend: (e) => {
console.log(e)
this.marker.position = [e.lnglat.lng, e.lnglat.lat];
let {
lng,
lat
} = e.lnglat;
self.lng = lng;
self.lat = lat;
self.socalInfo.lng = lng;
self.socalInfo.lat = lat;
// SDK
var geocoder = new AMap.Geocoder({
radius: 1000,
extensions: "all"
});
geocoder.getAddress([lng, lat], function (status, result) {
if (status === "complete" && result.info === "OK") {
if (result && result.regeocode) {
self.address = result.regeocode.formattedAddress;
self.$nextTick();
}
}
});
}
}
},
events: {
click: (e) => {
// this.$notify({
// title: "",
// message: ""
// })
this.marker.position = [e.lnglat.lng, e.lnglat.lat];
let {
lng,
lat
} = e.lnglat;
self.lng = lng;
self.lat = lat;
self.socalInfo.lng = lng;
self.socalInfo.lat = lat;
// SDK
var geocoder = new AMap.Geocoder({
radius: 1000,
extensions: "all"
});
geocoder.getAddress([lng, lat], function (status, result) {
if (status === "complete" && result.info === "OK") {
if (result && result.regeocode) {
self.address = result.regeocode.formattedAddress;
self.$nextTick();
}
}
});
console.log(e);
}
},
getCity: "",
searchOption: {
city: String(this.getCity),
citylimit: true
},
serverInfo: {
device: [],
remarks: ""
},
spaceData: [],
manager: [],
socalInfo: {
name: "",
status: "",
managerId: "",
address: ["410000", "", ""],
mapPoint: "",
build: "",
floor: "",
hight: "",
mianji: "",
dianti: "",
gongwei: "",
beginTime: "",
manager: "",
lng: "",
lat: "",
photo: "",
fileList: [],
pic: [],
direction:"",
window:"",
min_lease_rent:"",
max_lease_rent:""
},
buildInfo: {
buildNum: "",
buildStart: "",
buildEnd: "",
buildSquare: "",
list: [],
newList: []
},
rules: {
name: [{
required: true,
message: "",
trigger: "blur"
}],
status: [{
required: true,
message: "",
trigger: "change"
}],
address: [{
required: true,
message: "",
trigger: "blur"
}],
mapPoint: [{
required: true,
message: "",
trigger: "blur"
}],
build: [{
required: true,
message: "",
trigger: "blur"
}],
floor: [{
required: true,
message: "",
trigger: "blur"
}],
hight: [{
required: true,
message: "",
trigger: "blur"
}],
mianji: [{
required: true,
message: "",
trigger: "blur"
}],
dianti: [{
required: true,
message: "",
trigger: "blur"
}],
gongwei: [{
required: true,
message: "",
trigger: "blur"
}],
beginTime: [{
required: true,
message: "",
trigger: "blur"
}],
},
serverInforules: {
buildNum: [{
required: true,
message: "",
trigger: "change"
}],
floor_name: [{
required: true,
message: ""
}],
buildStart: [{
required: true,
message: ""
}],
buildEnd: [{
required: true,
message: ""
}],
buildSquare: [{
required: true,
message: ""
}]
},
tableSearch: {},
tableOption: tableOption, //
tableData: [], //
tableRow: {},
tablePage: 1,
tableLoading: false,
addDisabled: false,
addVisdiplay: false,
tabelObj: {},
formJson: "",
user: {},
options: [],
page: {
total: 0, //
currentPage: 1, //
pageSize: 10 //
},
currentFormId: "", //formid
serverData: [{
checkedServe: []
}],
tabActive1: false,
tabActive2: true,
fullscreenLoading: false,
isShow: true,
isDisabled: false,
dialogState: {
show: false
},
libs:{
direction:[],
window:[],
min_lease_rent:[],
max_lease_rent:[]
}
}
},
methods: {
onClose() {
this.$emit("update:dialogVisible", false)
}
},
}
< / script >
< style lang= "less" scoped >
< / style >
what result do you expect? What is the error message actually seen?
how do you solve the problem when dealing with the split of multiple new editing components in dialog