/* eslint-disable consistent-return */
<template>
<div>
<div class="projectMask"></div>
<div class="project">
<div class="mask"></div>
<i class="el-icon-close" @click="hideForm"></i>
<div class="aside">
<p class="title">编辑项目信息</p>
<el-form :model="projectForm" label-width="0" :rules="rules" ref="form">
<el-form-item prop="name">
<p class="form-title">项目名称:</p>
<el-input class="form-ipt" v-model="projectForm.name" placeholder="输入项目名称" ></el-input>
</el-form-item>
<el-form-item prop="childName">
<p class="form-title">子项目名称:</p>
<el-input class="form-ipt" v-model="projectForm.childName" placeholder="输入子项目名称" ></el-input>
</el-form-item>
<el-form-item class="address" prop="addrArr">
<p class="form-title">项目地点:</p>
<el-select v-model="projectForm.addrArr.province" placeholder="省/直辖市">
<el-option
@click.native="provinceClick(index)"
v-for="(item,index) in addressData"
:key="item.code"
:label="item.name"
:value="+item.code">
</el-option>
</el-select>
<el-select v-model="projectForm.addrArr.city" placeholder="地级市">
<el-option
@click.native="cityClick(index)"
v-for="(item,index) in cityData"
:key="item.code"
:label="item.name"
:value="+item.code">
</el-option>
</el-select>
<el-select v-model="projectForm.addrArr.area" placeholder="县级市">
<el-option
v-for="item in areaData"
:key="item.code"
:label="item.name"
:value="+item.code">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="ruleId">
<p class="form-title">评分规则:</p>
<el-select v-model="projectForm.ruleId" placeholder="评分规则">
<el-option
v-for="item in options"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<p class="form-title">设计单位:</p>
<el-input maxlength="20" class="form-ipt" v-model="projectForm.designCompany" placeholder="输入设计单位"></el-input>
</el-form-item>
<el-form-item>
<p class="form-title">建设单位:</p>
<el-input maxlength="20" class="form-ipt" v-model="projectForm.buildCompany" placeholder="输入建设单位"></el-input>
</el-form-item>
<div class="btn">
<el-button @click="hideForm">取消</el-button>
<el-button class="com" @click="handleSave">保存</el-button>
</div>
</el-form>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'editProjectInfo',
},
data() {
let checkAddress = (rule, value, callback) => {
console.log(this.projectForm.addrArr.city);
if (this.projectForm.addrArr.city && String(this.projectForm.addrArr.city).length === 4) {
return false;
}
callback(new Error('请选择项目地点'));
};
return {
provinceIndex: null,
cityIndex: null,
areaIndex: null,
addressData: [],
cityData: [],
areaData: [],
options: [
{
name: '深圳市装配式建筑评分规则',
id: '1212',
},
],
projectForm: {
name: null,
childName: null,
ruleId: '',
address: '',
designCompany: null,
buildCompany: null,
addrArr: {
province: 44,
city: 4403,
area: 440305,
},
},
rules: {
name: [
{ required: true, message: '请输入项目名称', trigger: 'blur' },
{ min: 1, max: 20, message: '字符长度1~20', trigger: 'blur' },
],
childName: [
{ required: true, message: '请输入子项目名称', trigger: 'blur' },
{ min: 1, max: 20, message: '字符长度1~20', trigger: 'blur' },
],
ruleId: [
{ required: true, message: '请选择评分规则', trigger: 'change' },
{ min: 4, max: 4, message: '请选择评分规则', trigger: 'change' },
],
addrArr: [
{ validator: checkAddress, trigger: 'blur' },
],
},
formObj: {}, // 父组件传递过来的当前编辑项目对象
};
},
computed: {
formIsChange() {
const oldForm = JSON.stringify(this.formObj);
const newForm = JSON.stringify(this.projectForm);
if (oldForm === newForm) {
return false;
}
return true;
},
},
created() {
this.init();
},
methods: {
provinceClick(index) {
if (this.provinceIndex === index) {
return;
}
this.projectForm.addrArr.city = null;
this.provinceIndex = index;
this.cityData = [];
this.cityIndex = null;
this.projectForm.addrArr.area = null;
this.cityData = this.addressData[index].children;
this.areaData = [];
this.areaIndex = null;
},
cityClick(index) {
if (this.cityIndex === index) {
return;
}
this.cityIndex = index;
this.projectForm.addrArr.area = null;
this.areaData = this.cityData[index].children;
this.areaIndex = null;
},
init() {
this.$http.get('/static/js/pcas-code.json').then((response) => {
this.addressData = response.body;
if (this.projectForm.addrArr.province) {
for (let i = 0; i < this.addressData.length; i += 1) {
if (this.addressData[i].code == this.projectForm.addrArr.province) {
this.cityData = this.addressData[i].children;
this.provinceIndex = i;
}
}
}
if (this.cityData && this.projectForm.addrArr.city) {
for (let i = 0; i < this.cityData.length; i += 1) {
if (this.cityData[i].code == this.projectForm.addrArr.city) {
this.areaData = this.cityData[i].children;
this.cityIndex = i;
}
}
}
if (this.areaData && this.projectForm.addrArr.area) {
for (let i = 0; i < this.areaData.length; i += 1) {
if (this.areaData[i].code == this.projectForm.addrArr.area) {
this.areaIndex = i;
}
}
}
});
},
hideForm() {
this.initialization();
this.closeBullet();
},
// 值初始化
initialization() {
this.projectForm = {
name: null,
childName: null,
ruleId: '',
address: '',
designCompany: null,
buildCompany: null,
addrArr: {
province: null,
city: null,
area: null,
},
};
},
closeBullet() {
this.$parent.isShow = false;
},
// 新增项目
async addProject() {
},
// 编辑项目
async editProject() {
},
handleSave() {
this.$refs.form.validate((valid) => {
if (valid) {
this.editProject();
// 关闭弹框
this.closeBullet();
}
});
},
},
};
</script>
<style lang="scss" scoped>
@import '../../.././../../mixinCss/mixin';
.projectMask{
position: fixed;
z-index: 1;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.05);
}
.project{
378px;
height: 405px;
background: #ffffff;
position: fixed;
z-index: 2;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.05);
border-radius: 4px;
.el-icon-close{
position: absolute;
top: 12px;
right: 12px;
color: $wordColor;
cursor: pointer;
font-size: 16px;
}
.aside{
100%;
background: #ffffff;
border-radius: 4px;
font-family: $fontFamily;
font-weight: 400;
.title{
height: 40px;
line-height: 40px;
color: $titleColor;
font-size: 16px;
background-color: #EFEFEF;
text-align: left;
padding-left: 12px;
}
.el-form{
padding: 12px 12px 0;
border-radius: 4px;
>>> .el-form-item__content{
line-height: 28px;
display: flex;
}
>>> .el-form-item{
display: flex;
align-items: center;
}
>>> .el-input{
270px;
height: 32px;
}
.address >>> .el-input{
89px;
height: 32px;
font-size: 12px;
margin-right: 2px;
}
>>> .el-input__inner{
height: 32px;
padding-left: 10px;
border-color: #f2f2f2;
color: #888888;
font-size: 12px;
}
>>> .el-input__inner:focus{
border-color: $borderColor;
}
>>> .el-form-item__error{
left: 84px;
padding-top: 4px;
}
>>> .el-input__prefix{
display: none;
}
.form-title{
font-size: 14px;
color: #666666;
84px;
text-align: right;
>span{
color: red;
}
}
.btn{
margin-top: -10px;
box-sizing: border-box;
>>> .el-button{
64px;
height: 28px;
padding: 0px;
border-color: #f2f2f2;
color: #888888;
background: #ffffff;
font-size: 12px;
}
.com{
background: $wordActive;
color: #ffffff;
}
}
}
}
}
</style>