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.

320 lines
10 KiB

<template>
<el-dialog :title="title" :visible.sync="open" width="700px">
<el-form ref="form" v-loading="loadingChange" :model="form" :rules="rules" label-width="100px">
<div class="title top">
<div class="title-content">租户基本信息</div>
</div>
<el-row>
<el-col :span="12">
<el-form-item label="租户名称:" prop="tenantName">
<el-input v-model="form.tenantName" placeholder="请输入租户名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人:" prop="contactName">
<el-input v-model="form.contactName" placeholder="请输入联系人" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话:" prop="contactPhone">
<el-input v-model="form.contactPhone" placeholder="请输入联系电话" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="地址:" prop="contactAddress">
<el-input v-model="form.contactAddress" placeholder="请输入租户地址" />
</el-form-item>
</el-col>
<el-col :span="24" style="text-align: left;">
<el-form-item label="状态:" prop="inUse">
<el-radio-group v-model="form.inUse">
<el-radio
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictValue"
>{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24" style="text-align: left;">
<el-form-item label="生失效时间:" prop="useDateRange">
<el-date-picker
v-model="form.useDateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="生效日期(00:00:00)"
end-placeholder="结束日期(23:59:59)"
:picker-options="useDateRangeOptions"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注:" prop="memo">
<el-input v-model="form.memo" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-col>
</el-row>
<div v-if="form.tenantId === undefined" class="title top">
<div class="title-content">管理账号</div>
</div>
<el-row v-if="form.tenantId === undefined">
<el-col :span="12">
<el-form-item label="邮箱:" prop="emailAddress">
<el-input v-model="form.emailAddress" placeholder="请输入邮箱" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别:" prop="sex">
<el-select v-model="form.sex" placeholder="请选择性别">
<el-option
v-for="dict in sexOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户名:" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="密码:" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" show-password />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="确认密码:" prop="checkPass" show-password>
<el-input v-model="form.checkPass" placeholder="请输入密码" show-password />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" :loading="loadingChange" @click="submitForm">确 定</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { addTenant, updateTenant } from '@/api/system/tenant'
import { isPass, isSerialNumber, isUsername } from '@/utils/validate'
export default {
data() {
const validatePass = (rule, value, callback) => {
if (value === undefined || value === '') {
callback(new Error('请输入密码'))
} else if (!isPass(value)) {
callback(new Error('最少6位,包含大小写字母和特殊字符'))
} else {
if (this.form.checkPass !== '' && this.form.checkPass !== undefined) {
this.$refs.form.validateField('checkPass')
}
callback()
}
}
const validateCheckPass = (rule, value, callback) => {
if (value === undefined || value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.form.password) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
const validateNumber = (rule, value, callback) => {
if (!isSerialNumber(value)) {
callback(new Error('请输入正确的手机号码'))
} else {
callback()
}
}
const validateUsername = (rule, value, callback) => {
if (!isUsername(value)) {
callback(new Error('4到16位(字母,数字,下划线)'))
} else {
callback()
}
}
return {
// 弹出层标题
title: '',
// 是否显示弹出层
open: false,
loadingChange: false,
// 表单参数
form: {},
// 表单校验
rules: {
tenantName: [
{ required: true, message: '租户名称不能为空', trigger: 'blur' }
],
contactName: [
{ required: true, message: '联系人不能为空', trigger: 'blur' }
],
contactPhone: [
{ required: true, message: '联系电话不能为空', trigger: 'blur' },
{ validator: validateNumber, trigger: 'blur' }
],
useDateRange: [
{ required: true, message: '生失效时间不能为空', trigger: 'blur' }
],
emailAddress: [
{ required: true, message: '邮箱不能为空', trigger: 'blur' }
],
sex: [
{ required: true, message: '性别不能为空', trigger: 'blur' }
],
username: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ validator: validateUsername, trigger: 'blur' }
],
password: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ validator: validatePass, trigger: 'blur' }
],
checkPass: [
{ validator: validateCheckPass, trigger: 'blur' }
]
},
useDateRangeOptions: {
shortcuts: [{
text: '1年',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setFullYear(end.getFullYear() + 1)
end.setDate(end.getDate() - 1)
picker.$emit('pick', [start, end])
}
}, {
text: '2年',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setFullYear(end.getFullYear() + 2)
end.setDate(end.getDate() - 1)
picker.$emit('pick', [start, end])
}
}, {
text: '3年',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setFullYear(end.getFullYear() + 3)
end.setDate(end.getDate() - 1)
picker.$emit('pick', [start, end])
}
}, {
text: '5年',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setFullYear(end.getFullYear() + 5)
end.setDate(end.getDate() - 1)
picker.$emit('pick', [start, end])
}
}]
},
// 状态数据租户
inUseOptions: [],
sexOptions: []
}
},
created() {
this.getDictListByDictType('sys_normal_disable').then(response => {
this.inUseOptions = response.data
})
this.getDictListByDictType('sys_user_sex').then(response => {
this.sexOptions = response.data
})
},
methods: {
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.tenantId !== undefined) {
this.loadingChange = true
const formData = this.getTime(this.form, this.form.useDateRange)
updateTenant(formData).then(response => {
this.loadingChange = false
if (response.success ) {
this.msgSuccess('修改成功')
this.open = false
this.$emit('ok')
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
} else {
this.loadingChange = true
const formData = this.getTime(this.form, this.form.useDateRange)
addTenant(formData).then(response => {
this.loadingChange = false
if (response.success) {
this.msgSuccess('新增成功')
this.open = false
this.$emit('ok')
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
}
}
})
},
// 取消按钮
cancel() {
this.open = false
this.reset()
},
// 表单重置
reset() {
this.form = {
tenantName: undefined,
contactName: undefined,
inUse: '1'
}
this.resetForm('form')
},
getTime(params, dateRange) {
var search = params
search.beginTime = ''
search.endTime = ''
if (dateRange != null && dateRange !== '') {
search.beginTime = dateRange[0]
search.endTime = dateRange[1]
}
return search
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.title {
padding: 15px 0px;
color: rgba(0,0,0,.85);
font-weight: 500;
font-size: 16px;
&.top {
padding-top: 0px;
}
.title-content{
border-left: 3px solid #409EFF;
padding-left: 10px;
}
}
</style>