|
|
<template>
|
|
|
<!-- 外层容器 -->
|
|
|
<div class="addEdit-block">
|
|
|
<!-- 表单组件 -->
|
|
|
<el-form
|
|
|
class="detail-form-content"
|
|
|
ref="ruleForm"
|
|
|
:model="ruleForm"
|
|
|
:rules="rules"
|
|
|
label-width="80px"
|
|
|
:style="{backgroundColor:addEditForm.addEditBoxColor}"
|
|
|
>
|
|
|
<!-- 表单项布局行 -->
|
|
|
<el-row>
|
|
|
<!-- 占据12列(半屏) -->
|
|
|
<el-col :span="12">
|
|
|
<!-- 房屋类型输入项,非查看模式显示可编辑框 -->
|
|
|
<el-form-item class="input" v-if="type!='info'" label="房屋类型" prop="fangwuleixing">
|
|
|
<el-input v-model="ruleForm.fangwuleixing"
|
|
|
placeholder="房屋类型" clearable :readonly="ro.fangwuleixing"></el-input>
|
|
|
</el-form-item>
|
|
|
<!-- 查看模式下显示只读输入框 -->
|
|
|
<div v-else>
|
|
|
<el-form-item class="input" label="房屋类型" prop="fangwuleixing">
|
|
|
<el-input v-model="ruleForm.fangwuleixing"
|
|
|
placeholder="房屋类型" readonly></el-input>
|
|
|
</el-form-item>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
<!-- 提交按钮区域 -->
|
|
|
<el-form-item class="btn">
|
|
|
<!-- 非查看模式下显示提交和取消按钮 -->
|
|
|
<el-button v-if="type!='info'" type="primary" class="btn-success" @click="onSubmit">提交</el-button>
|
|
|
<el-button v-if="type!='info'" class="btn-close" @click="back()">取消</el-button>
|
|
|
<!-- 查看模式下显示返回按钮 -->
|
|
|
<el-button v-if="type=='info'" class="btn-close" @click="back()">返回</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
// 导入验证工具函数:数字、整数、邮箱、电话、手机号、URL、身份证校验
|
|
|
import { isNumber, isIntNumer, isEmail, isPhone, isMobile, isURL, checkIdCard } from "@/utils/validate";
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
let self = this;
|
|
|
|
|
|
// 身份证格式校验
|
|
|
var validateIdCard = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
} else if (!checkIdCard(value)) {
|
|
|
callback(new Error("请输入正确的身份证号码"));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// URL格式校验
|
|
|
var validateUrl = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
} else if (!isURL(value)) {
|
|
|
callback(new Error("请输入正确的URL地址"));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 手机号格式校验
|
|
|
var validateMobile = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
} else if (!isMobile(value)) {
|
|
|
callback(new Error("请输入正确的手机号码"));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 固定电话格式校验
|
|
|
var validatePhone = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
} else if (!isPhone(value)) {
|
|
|
callback(new Error("请输入正确的电话号码"));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 邮箱格式校验
|
|
|
var validateEmail = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
} else if (!isEmail(value)) {
|
|
|
callback(new Error("请输入正确的邮箱地址"));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 数字格式校验
|
|
|
var validateNumber = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
} else if (!isNumber(value)) {
|
|
|
callback(new Error("请输入数字"));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 整数格式校验
|
|
|
var validateIntNumber = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
} else if (!isIntNumer(value)) {
|
|
|
callback(new Error("请输入整数"));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return {
|
|
|
// 页面样式配置对象
|
|
|
addEditForm: {
|
|
|
"btnSaveFontColor": "#fff",
|
|
|
"selectFontSize": "14px",
|
|
|
"btnCancelBorderColor": "rgba(152, 129, 129, 1)",
|
|
|
"inputBorderRadius": "22px",
|
|
|
"inputFontSize": "14px",
|
|
|
"textareaBgColor": "#fff",
|
|
|
"btnSaveFontSize": "14px",
|
|
|
"textareaBorderRadius": "22px",
|
|
|
"uploadBgColor": "#fff",
|
|
|
"textareaBorderStyle": "solid",
|
|
|
"btnCancelWidth": "88px",
|
|
|
"textareaHeight": "120px",
|
|
|
"dateBgColor": "#fff",
|
|
|
"btnSaveBorderRadius": "22px",
|
|
|
"uploadLableFontSize": "14px",
|
|
|
"textareaBorderWidth": "1px",
|
|
|
"inputLableColor": "#606266",
|
|
|
"addEditBoxColor": "rgba(210, 194, 194, 0.29)",
|
|
|
"dateIconFontSize": "14px",
|
|
|
"btnSaveBgColor": "#409EFF",
|
|
|
"uploadIconFontColor": "#8c939d",
|
|
|
"textareaBorderColor": "rgba(152, 129, 129, 1)",
|
|
|
"btnCancelBgColor": "rgba(143, 222, 143, 1)",
|
|
|
"selectLableColor": "#606266",
|
|
|
"btnSaveBorderStyle": "solid",
|
|
|
"dateBorderWidth": "1px",
|
|
|
"dateLableFontSize": "14px",
|
|
|
"dateBorderRadius": "22px",
|
|
|
"btnCancelBorderStyle": "solid",
|
|
|
"selectLableFontSize": "14px",
|
|
|
"selectBorderStyle": "solid",
|
|
|
"selectIconFontColor": "#C0C4CC",
|
|
|
"btnCancelHeight": "44px",
|
|
|
"inputHeight": "40px",
|
|
|
"btnCancelFontColor": "#606266",
|
|
|
"dateBorderColor": "rgba(152, 129, 129, 1)",
|
|
|
"dateIconFontColor": "#C0C4CC",
|
|
|
"uploadBorderStyle": "solid",
|
|
|
"dateBorderStyle": "solid",
|
|
|
"dateLableColor": "#606266",
|
|
|
"dateFontSize": "14px",
|
|
|
"inputBorderWidth": "1px",
|
|
|
"uploadIconFontSize": "28px",
|
|
|
"selectHeight": "40px",
|
|
|
"inputFontColor": "#606266",
|
|
|
"uploadHeight": "148px",
|
|
|
"textareaLableColor": "#606266",
|
|
|
"textareaLableFontSize": "14px",
|
|
|
"btnCancelFontSize": "14px",
|
|
|
"inputBorderStyle": "solid",
|
|
|
"btnCancelBorderRadius": "22px",
|
|
|
"inputBgColor": "rgba(252, 250, 250, 1)",
|
|
|
"inputLableFontSize": "14px",
|
|
|
"uploadLableColor": "#606266",
|
|
|
"uploadBorderRadius": "22px",
|
|
|
"btnSaveHeight": "44px",
|
|
|
"selectBgColor": "#fff",
|
|
|
"btnSaveWidth": "88px",
|
|
|
"selectIconFontSize": "14px",
|
|
|
"dateHeight": "40px",
|
|
|
"selectBorderColor": "rgba(152, 129, 129, 1)",
|
|
|
"inputBorderColor": "rgba(152, 129, 129, 1)",
|
|
|
"uploadBorderColor": "rgba(152, 129, 129, 1)",
|
|
|
"textareaFontColor": "#606266",
|
|
|
"selectBorderWidth": "1px",
|
|
|
"dateFontColor": "#606266",
|
|
|
"btnCancelBorderWidth": "1px",
|
|
|
"uploadBorderWidth": "1px",
|
|
|
"textareaFontSize": "14px",
|
|
|
"selectBorderRadius": "22px",
|
|
|
"selectFontColor": "#606266",
|
|
|
"btnSaveBorderColor": "#409EFF",
|
|
|
"btnSaveBorderWidth": "1px"
|
|
|
},
|
|
|
id: '', // 当前操作数据ID
|
|
|
type: '', // 操作类型(新增、编辑、详情)
|
|
|
ro: { // 只读字段控制
|
|
|
fangwuleixing: false,
|
|
|
},
|
|
|
ruleForm: { // 表单绑定数据模型
|
|
|
fangwuleixing: '',
|
|
|
},
|
|
|
rules: { // 表单验证规则
|
|
|
fangwuleixing: [
|
|
|
{ required: true, message: '房屋类型不能为空', trigger: 'blur' },
|
|
|
],
|
|
|
}
|
|
|
};
|
|
|
},
|
|
|
props: ["parent"], // 接收父组件传参
|
|
|
computed: {}, // 计算属性(当前未使用)
|
|
|
created() { // 组件创建时执行
|
|
|
this.addEditStyleChange(); // 动态设置表单样式
|
|
|
this.addEditUploadStyleChange(); // 设置上传控件样式
|
|
|
},
|
|
|
methods: {
|
|
|
// 下载文件方法
|
|
|
download(file) {
|
|
|
window.open(`${file}`);
|
|
|
},
|
|
|
// 初始化方法,用于加载数据或初始化状态
|
|
|
init(id, type) {
|
|
|
if (id) {
|
|
|
this.id = id;
|
|
|
this.type = type;
|
|
|
}
|
|
|
// 如果是查看详情或其它模式则加载详情数据
|
|
|
if (this.type == 'info' || this.type == 'else') {
|
|
|
this.info(id);
|
|
|
} else if (this.type == 'cross') {
|
|
|
// 如果是跨表操作,则从storage中读取数据填充
|
|
|
var obj = this.$storage.getObj('crossObj');
|
|
|
for (var o in obj) {
|
|
|
if (o == 'fangwuleixing') {
|
|
|
this.ruleForm.fangwuleixing = obj[o];
|
|
|
this.ro.fangwuleixing = true;
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 获取用户会话信息
|
|
|
this.$http({
|
|
|
url: `${this.$storage.get('sessionTable')}/session`,
|
|
|
method: "get"
|
|
|
}).then(({ data }) => {
|
|
|
if (data && data.code === 0) {
|
|
|
var json = data.data;
|
|
|
} else {
|
|
|
this.$message.error(data.msg);
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
// 加载详情数据
|
|
|
info(id) {
|
|
|
this.$http({
|
|
|
url: `fangwuleixing/info/${id}`,
|
|
|
method: "get"
|
|
|
}).then(({ data }) => {
|
|
|
if (data && data.code === 0) {
|
|
|
this.ruleForm = data.data;
|
|
|
} else {
|
|
|
this.$message.error(data.msg);
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
// 提交表单方法
|
|
|
onSubmit() {
|
|
|
this.$refs["ruleForm"].validate(valid => {
|
|
|
if (valid) {
|
|
|
this.$http({
|
|
|
url: `fangwuleixing/${!this.ruleForm.id ? "save" : "update"}`,
|
|
|
method: "post",
|
|
|
data: this.ruleForm
|
|
|
}).then(({ data }) => {
|
|
|
if (data && data.code === 0) {
|
|
|
this.$message({
|
|
|
message: "操作成功",
|
|
|
type: "success",
|
|
|
duration: 1500,
|
|
|
onClose: () => {
|
|
|
this.parent.showFlag = true;
|
|
|
this.parent.addOrUpdateFlag = false;
|
|
|
this.parent.fangwuleixingCrossAddOrUpdateFlag = false;
|
|
|
this.parent.search();
|
|
|
this.parent.contentStyleChange();
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
this.$message.error(data.msg);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
// 获取唯一标识符
|
|
|
getUUID () {
|
|
|
return new Date().getTime();
|
|
|
},
|
|
|
// 返回上一界面
|
|
|
back() {
|
|
|
this.parent.showFlag = true;
|
|
|
this.parent.addOrUpdateFlag = false;
|
|
|
this.parent.fangwuleixingCrossAddOrUpdateFlag = false;
|
|
|
this.parent.contentStyleChange();
|
|
|
},
|
|
|
// 根据配置动态设置各控件样式
|
|
|
addEditStyleChange() {
|
|
|
this.$nextTick(() => {
|
|
|
// 处理 input 类型控件样式
|
|
|
document.querySelectorAll('.addEdit-block .input .el-input__inner').forEach(el=>{
|
|
|
el.style.height = this.addEditForm.inputHeight;
|
|
|
el.style.color = this.addEditForm.inputFontColor;
|
|
|
el.style.fontSize = this.addEditForm.inputFontSize;
|
|
|
el.style.borderWidth = this.addEditForm.inputBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.inputBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.inputBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.inputBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.inputBgColor;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .input .el-form-item__label').forEach(el=>{
|
|
|
el.style.lineHeight = this.addEditForm.inputHeight;
|
|
|
el.style.color = this.addEditForm.inputLableColor;
|
|
|
el.style.fontSize = this.addEditForm.inputLableFontSize;
|
|
|
});
|
|
|
|
|
|
// select 控件样式
|
|
|
document.querySelectorAll('.addEdit-block .select .el-input__inner').forEach(el=>{
|
|
|
el.style.height = this.addEditForm.selectHeight;
|
|
|
el.style.color = this.addEditForm.selectFontColor;
|
|
|
el.style.fontSize = this.addEditForm.selectFontSize;
|
|
|
el.style.borderWidth = this.addEditForm.selectBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.selectBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.selectBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.selectBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.selectBgColor;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .select .el-form-item__label').forEach(el=>{
|
|
|
el.style.lineHeight = this.addEditForm.selectHeight;
|
|
|
el.style.color = this.addEditForm.selectLableColor;
|
|
|
el.style.fontSize = this.addEditForm.selectLableFontSize;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .select .el-select__caret').forEach(el=>{
|
|
|
el.style.color = this.addEditForm.selectIconFontColor;
|
|
|
el.style.fontSize = this.addEditForm.selectIconFontSize;
|
|
|
});
|
|
|
|
|
|
// date 控件样式
|
|
|
document.querySelectorAll('.addEdit-block .date .el-input__inner').forEach(el=>{
|
|
|
el.style.height = this.addEditForm.dateHeight;
|
|
|
el.style.color = this.addEditForm.dateFontColor;
|
|
|
el.style.fontSize = this.addEditForm.dateFontSize;
|
|
|
el.style.borderWidth = this.addEditForm.dateBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.dateBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.dateBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.dateBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.dateBgColor;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .date .el-form-item__label').forEach(el=>{
|
|
|
el.style.lineHeight = this.addEditForm.dateHeight;
|
|
|
el.style.color = this.addEditForm.dateLableColor;
|
|
|
el.style.fontSize = this.addEditForm.dateLableFontSize;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .date .el-input__icon').forEach(el=>{
|
|
|
el.style.color = this.addEditForm.dateIconFontColor;
|
|
|
el.style.fontSize = this.addEditForm.dateIconFontSize;
|
|
|
el.style.lineHeight = this.addEditForm.dateHeight;
|
|
|
});
|
|
|
|
|
|
// upload 控件样式
|
|
|
let iconLineHeight = parseInt(this.addEditForm.uploadHeight) - parseInt(this.addEditForm.uploadBorderWidth) * 2 + 'px';
|
|
|
document.querySelectorAll('.addEdit-block .upload .el-upload--picture-card').forEach(el=>{
|
|
|
el.style.width = this.addEditForm.uploadHeight;
|
|
|
el.style.height = this.addEditForm.uploadHeight;
|
|
|
el.style.borderWidth = this.addEditForm.uploadBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.uploadBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.uploadBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.uploadBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.uploadBgColor;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .upload .el-form-item__label').forEach(el=>{
|
|
|
el.style.lineHeight = this.addEditForm.uploadHeight;
|
|
|
el.style.color = this.addEditForm.uploadLableColor;
|
|
|
el.style.fontSize = this.addEditForm.uploadLableFontSize;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .upload .el-icon-plus').forEach(el=>{
|
|
|
el.style.color = this.addEditForm.uploadIconFontColor;
|
|
|
el.style.fontSize = this.addEditForm.uploadIconFontSize;
|
|
|
el.style.lineHeight = iconLineHeight;
|
|
|
el.style.display = 'block';
|
|
|
});
|
|
|
|
|
|
// textarea 控件样式
|
|
|
document.querySelectorAll('.addEdit-block .textarea .el-textarea__inner').forEach(el=>{
|
|
|
el.style.height = this.addEditForm.textareaHeight;
|
|
|
el.style.color = this.addEditForm.textareaFontColor;
|
|
|
el.style.fontSize = this.addEditForm.textareaFontSize;
|
|
|
el.style.borderWidth = this.addEditForm.textareaBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.textareaBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.textareaBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.textareaBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.textareaBgColor;
|
|
|
});
|
|
|
document.querySelectorAll('.addEdit-block .textarea .el-form-item__label').forEach(el=>{
|
|
|
el.style.color = this.addEditForm.textareaLableColor;
|
|
|
el.style.fontSize = this.addEditForm.textareaLableFontSize;
|
|
|
});
|
|
|
|
|
|
// 提交按钮样式
|
|
|
document.querySelectorAll('.addEdit-block .btn .btn-success').forEach(el=>{
|
|
|
el.style.width = this.addEditForm.btnSaveWidth;
|
|
|
el.style.height = this.addEditForm.btnSaveHeight;
|
|
|
el.style.color = this.addEditForm.btnSaveFontColor;
|
|
|
el.style.fontSize = this.addEditForm.btnSaveFontSize;
|
|
|
el.style.borderWidth = this.addEditForm.btnSaveBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.btnSaveBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.btnSaveBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.btnSaveBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.btnSaveBgColor;
|
|
|
});
|
|
|
|
|
|
// 返回/取消按钮样式
|
|
|
document.querySelectorAll('.addEdit-block .btn .btn-close').forEach(el=>{
|
|
|
el.style.width = this.addEditForm.btnCancelWidth;
|
|
|
el.style.height = this.addEditForm.btnCancelHeight;
|
|
|
el.style.color = this.addEditForm.btnCancelFontColor;
|
|
|
el.style.fontSize = this.addEditForm.btnCancelFontSize;
|
|
|
el.style.borderWidth = this.addEditForm.btnCancelBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.btnCancelBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.btnCancelBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.btnCancelBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.btnCancelBgColor;
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
|
|
|
// 上传控件额外样式设置
|
|
|
addEditUploadStyleChange() {
|
|
|
this.$nextTick(()=>{
|
|
|
document.querySelectorAll('.addEdit-block .upload .el-upload-list--picture-card .el-upload-list__item').forEach(el=>{
|
|
|
el.style.width = this.addEditForm.uploadHeight;
|
|
|
el.style.height = this.addEditForm.uploadHeight;
|
|
|
el.style.borderWidth = this.addEditForm.uploadBorderWidth;
|
|
|
el.style.borderStyle = this.addEditForm.uploadBorderStyle;
|
|
|
el.style.borderColor = this.addEditForm.uploadBorderColor;
|
|
|
el.style.borderRadius = this.addEditForm.uploadBorderRadius;
|
|
|
el.style.backgroundColor = this.addEditForm.uploadBgColor;
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss">
|
|
|
// 编辑器样式
|
|
|
.editor{
|
|
|
height: 500px;
|
|
|
& /deep/ .ql-container {
|
|
|
height: 310px;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 地图容器样式
|
|
|
.amap-wrapper {
|
|
|
width: 100%;
|
|
|
height: 500px;
|
|
|
}
|
|
|
|
|
|
// 搜索框定位样式
|
|
|
.search-box {
|
|
|
position: absolute;
|
|
|
}
|
|
|
|
|
|
// 主容器样式
|
|
|
.addEdit-block {
|
|
|
margin: -10px;
|
|
|
}
|
|
|
|
|
|
// 表单内容内边距
|
|
|
.detail-form-content {
|
|
|
padding: 12px;
|
|
|
}
|
|
|
|
|
|
// 按钮样式调整
|
|
|
.btn .el-button {
|
|
|
padding: 0;
|
|
|
}
|
|
|
</style>
|