You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
house/fount/views/modules/fangwuleixing/add-or-update.vue

500 lines
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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