添加业主/租户管理功能,岗位管理功能
main
zxf 2 weeks ago
parent a63b08e3a5
commit 75a4bea6db

@ -61,3 +61,16 @@ export function pmtenantListApi(params) {
})
}
/**
* 根据业主ID获取租户列表
* @param ownerId
* @param params
*/
export function pmtenantListByOwnerIdApi(ownerId, params) {
return request({
url: `autogencode/pmtenant/listByOwnerId/${ownerId}`,
method: 'GET',
params
})
}

@ -0,0 +1,69 @@
/*
* @Author: zxf 1532322479@qq.com
* @Date: 2026-01-04 17:03:25
* @LastEditors: zxf 1532322479@qq.com
* @LastEditTime: 2026-01-04 17:05:28
* @FilePath: \crmebTwo\admin\src\api\pmtentanthouserel.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import request from '@/utils/request'
/**
* 新增pmtenanthouserel
* @param pram
*/
export function pmtentanthouserelCreateApi(data) {
return request({
url: `autogencode/pmtenanthouserel/save`,
method: 'POST',
data
})
}
/**
* pmtenanthouserel更新
* @param pram
*/
export function pmtentanthouserelUpdateApi(data) {
return request({
url: `autogencode/pmtenanthouserel/update`,
method: 'POST',
data
})
}
/**
* pmtenanthouserel详情
* @param pram
*/
export function pmtentanthouserelDetailApi(id) {
return request({
url: `autogencode/pmtenanthouserel/info/${id}`,
method: 'GET'
})
}
/**
* pmtenanthouserel批量删除
* @param ids
*/
export function pmtentanthouserelDeleteApi(ids) {
return request({
url: `autogencode/pmtenanthouserel/delete`,
method: 'POST',
data: ids
})
}
/**
* pmtenanthouserel列表
* @param pram
*/
export function pmtentanthouserelListApi(params) {
return request({
url: `autogencode/pmtenanthouserel/list`,
method: 'GET',
params
})
}

@ -0,0 +1,63 @@
import request from '@/utils/request'
/**
* 新增syspost
* @param pram
*/
export function syspostCreateApi(data) {
return request({
url: `autogencode/syspost/save`,
method: 'POST',
data
})
}
/**
* syspost更新
* @param pram
*/
export function syspostUpdateApi(data) {
return request({
url: `autogencode/syspost/update`,
method: 'POST',
data
})
}
/**
* syspost详情
* @param pram
*/
export function syspostDetailApi(id) {
return request({
url: `autogencode/syspost/info/${id}`,
method: 'GET'
})
}
/**
* syspost批量删除
* @param ids
*/
export function syspostDeleteApi(ids) {
return request({
url: `autogencode/syspost/delete`,
method: 'POST',
data: ids
})
}
/**
* syspost列表
* @param pram
*/
export function syspostListApi(params) {
return request({
url: `autogencode/syspost/list`,
method: 'GET',
params
})
}

@ -56,7 +56,8 @@ export function adminAdd(pram) {
roles: pram.roles.join(','),
status: pram.status,
phone: pram.phone,
depts: pram.depts
depts: pram.depts,
posts: pram.posts
}
return request({
url: '/admin/system/admin/save',
@ -76,7 +77,8 @@ export function adminUpdate(pram) {
id: pram.id,
isDel: pram.isDel,
phone: pram.phone,
depts: pram.depts
depts: pram.depts,
posts: pram.posts
}
return request({
url: '/admin/system/admin/update',

@ -0,0 +1,63 @@
import request from '@/utils/request'
/**
* 新增sysuserpost
* @param pram
*/
export function sysuserpostCreateApi(data) {
return request({
url: `autogencode/sysuserpost/save`,
method: 'POST',
data
})
}
/**
* sysuserpost更新
* @param pram
*/
export function sysuserpostUpdateApi(data) {
return request({
url: `autogencode/sysuserpost/update`,
method: 'POST',
data
})
}
/**
* sysuserpost详情
* @param pram
*/
export function sysuserpostDetailApi(id) {
return request({
url: `autogencode/sysuserpost/info/${id}`,
method: 'GET'
})
}
/**
* sysuserpost批量删除
* @param ids
*/
export function sysuserpostDeleteApi(ids) {
return request({
url: `autogencode/sysuserpost/delete`,
method: 'POST',
data: ids
})
}
/**
* sysuserpost列表
* @param pram
*/
export function sysuserpostListApi(params) {
return request({
url: `autogencode/sysuserpost/list`,
method: 'GET',
params
})
}

@ -1,5 +1,34 @@
<template>
<div class="divBox">
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="deptName"
placeholder="请输入部门名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="deptTreeOptions"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="tree"
node-key="deptId"
default-expand-all
highlight-current
@node-click="handleNodeClick"
/>
</div>
</el-col>
<!--业主数据-->
<el-col :span="20" :xs="24">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="业主姓名">
<el-input v-model="dataForm.ownerName" placeholder="请输入业主姓名" clearable></el-input>
@ -7,27 +36,9 @@
<el-form-item label="业主类型">
<el-input v-model="dataForm.ownerType" placeholder="请输入业主类型" clearable></el-input>
</el-form-item>
<el-form-item label="业主身份证">
<el-input v-model="dataForm.ownerIdcard" placeholder="请输入业主身份证" clearable></el-input>
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="dataForm.phone" placeholder="请输入联系电话" clearable></el-input>
</el-form-item>
<el-form-item label="电子邮箱">
<el-input v-model="dataForm.email" placeholder="请输入电子邮箱" clearable></el-input>
</el-form-item>
<el-form-item label="紧急联系人">
<el-input v-model="dataForm.emergencyContact" placeholder="请输入紧急联系人" clearable></el-input>
</el-form-item>
<el-form-item label="紧急联系电话">
<el-input v-model="dataForm.emergencyPhone" placeholder="请输入紧急联系电话" clearable></el-input>
</el-form-item>
<el-form-item label="业主状态">
<el-input v-model="dataForm.status" placeholder="请输入业主状态" clearable></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="dataForm.remark" placeholder="请输入备注" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()"></el-button>
<el-button @click="resetForm()"></el-button>
@ -47,12 +58,6 @@
align="center"
width="50">
</el-table-column>
<el-table-column
prop="id"
header-align="center"
align="center"
label="id">
</el-table-column>
<el-table-column
prop="ownerName"
header-align="center"
@ -96,58 +101,34 @@
label="紧急联系电话">
</el-table-column>
<el-table-column
prop="status"
header-align="center"
align="center"
label="业主状态">
</el-table-column>
<el-table-column
prop="remark"
header-align="center"
align="center"
label="备注">
</el-table-column>
<el-table-column
prop="delFlag"
header-align="center"
align="center"
label="删除标志0代表存在 2代表删除">
</el-table-column>
<el-table-column
prop="createDept"
header-align="center"
align="center"
label="创建部门">
</el-table-column>
<el-table-column
prop="createBy"
header-align="center"
align="center"
label="创建人">
</el-table-column>
<el-table-column
prop="createTime"
prop="deptId"
header-align="center"
align="center"
label="创建时间">
label="所属部门">
<template slot-scope="scope">
{{ getDeptName(scope.row.deptId) }}
</template>
</el-table-column>
<el-table-column
prop="updateBy"
prop="houseId"
header-align="center"
align="center"
label="修改人">
label="所属房屋">
<template slot-scope="scope">
{{ getHouseName(scope.row.houseId) }}
</template>
</el-table-column>
<el-table-column
prop="updateTime"
prop="status"
header-align="center"
align="center"
label="修改时间">
label="业主状态">
</el-table-column>
<el-table-column
prop="tenantId"
prop="remark"
header-align="center"
align="center"
label="租户ID">
label="备注">
</el-table-column>
<el-table-column
fixed="right"
@ -172,15 +153,27 @@
</el-pagination>
<!-- 表单弹窗, 新增数据和修改数据 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</el-col>
</el-row>
</div>
</template>
<script>
import AddOrUpdate from './pmowner-add-and-update'
import * as api from '@/api/pmowner.js'
import * as deptApi from '@/api/sysdept.js'
import * as houseApi from '@/api/pmhouse.js'
export default {
data () {
return {
deptTreeOptions: [],
deptMap: {},
houseMap: {},
deptName: undefined,
defaultProps: {
children: "children",
label: "deptName"
},
dataForm: {
ownerName: '',
ownerType: '',
@ -215,13 +208,60 @@
addOrUpdateVisible: false
}
},
components: {
AddOrUpdate
components: {
AddOrUpdate
},
watch: {
deptName(val) {
this.$refs.tree.filter(val);
}
},
activated () {
this.getDataList()
},
mounted() {
//
this.getDataList()
this.handleGetDeptList()
this.handleGetHouseList()
},
methods: {
handleGetDeptList() {
deptApi.deptTreeSelect().then(res => {
this.deptTreeOptions = res
this.buildDeptMap(res)
})
},
handleGetHouseList() {
houseApi.pmhouseListApi({ page: 1, limit: 9999 }).then(res => {
const houseList = res.list || []
houseList.forEach(house => {
this.houseMap[house.id] = `${house.unitNo}单元 ${house.floorNo}${house.houseNo}`
})
})
},
filterNode(value, data) {
if (!value) return true;
return data.deptName.indexOf(value) !== -1;
},
handleNodeClick(data) {
this.dataForm.deptId = data.deptId;
this.getDataList();
},
buildDeptMap(depts) {
depts.forEach(dept => {
this.deptMap[dept.deptId] = dept.deptName
if (dept.children && dept.children.length > 0) {
this.buildDeptMap(dept.children)
}
})
},
getDeptName(deptId) {
return this.deptMap[deptId] || '-'
},
getHouseName(houseId) {
return this.houseMap[houseId] || '-'
},
//
getDataList () {
this.dataListLoading = true
@ -240,6 +280,7 @@
if (this.dataForm.emergencyContact) params.emergencyContact = this.dataForm.emergencyContact;
if (this.dataForm.emergencyPhone) params.emergencyPhone = this.dataForm.emergencyPhone;
if (this.dataForm.status) params.status = this.dataForm.status;
if (this.dataForm.deptId) params.deptId = this.dataForm.deptId;
if (this.dataForm.remark) params.remark = this.dataForm.remark;
api.pmownerListApi(params).then(res => {

@ -5,7 +5,7 @@
:close-on-click-modal="false"
:visible.sync="visible">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="80px">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="100px">
<el-form-item label="业主姓名" prop="ownerName">
<el-input v-model="dataForm.ownerName" placeholder="业主姓名"></el-input>
</el-form-item>
@ -27,37 +27,94 @@
<el-form-item label="紧急联系电话" prop="emergencyPhone">
<el-input v-model="dataForm.emergencyPhone" placeholder="紧急联系电话"></el-input>
</el-form-item>
<el-form-item label="所属部门" prop="deptId">
<treeselect
v-model="dataForm.deptId"
:options="deptTreeOptions"
:normalizer="normalizer"
placeholder="选择部门"
style="width: 100%"
></treeselect>
</el-form-item>
<el-form-item label="所属房屋" prop="houseId">
<el-select v-model="dataForm.houseId" placeholder="选择房屋" clearable style="width: 100%">
<el-option
v-for="item in houseList"
:key="item.id"
:label="`${item.unitNo}单元 ${item.floorNo}层 ${item.houseNo}室`"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="业主状态" prop="status">
<el-input v-model="dataForm.status" placeholder="业主状态"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="备注"></el-input>
<el-input v-model="dataForm.remark" placeholder="备注" type="textarea"></el-input>
</el-form-item>
<!-- 显示添加租户按钮 -->
<el-form-item>
<el-button type="success" @click="addTenant"></el-button>
</el-form-item>
</el-form>
<!-- 租户列表 -->
<div class="tenant-list-container">
<el-table :data="tenantList" style="width: 100%">
<el-table-column prop="tenantName" label="租户姓名" width="120"></el-table-column>
<el-table-column prop="phome" label="联系电话" width="120"></el-table-column>
<el-table-column prop="idCard" label="身份证号" width="180"></el-table-column>
<el-table-column prop="company" label="工作单位" width="150"></el-table-column>
<el-table-column prop="status" label="状态" width="100"></el-table-column>
<el-table-column prop="remark" label="备注" width="150"></el-table-column>
<el-table-column label="操作" width="180" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="small" @click="editTenant(scope.row.id)">{{ '' }}</el-button>
<el-button type="text" size="small" @click="deleteTenant(scope.row.id, scope.$index)">{{ '删除' }}</el-button>
</template>
</el-table-column>
</el-table>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataSubmit()"></el-button>
</span>
<!-- 租户弹窗 -->
<tenant-add-and-update ref="tenantAddOrUpdate" :ownerId="dataForm.id" @refreshDataList="getTenantList"></tenant-add-and-update>
</el-dialog>
</template>
<script>
import * as api from '@/api/pmowner.js'
import * as deptApi from '@/api/sysdept.js'
import * as tenantApi from '@/api/pmtenant.js'
import * as houseApi from '@/api/pmhouse.js'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import TenantAddAndUpdate from './tenant-add-and-update.vue'
export default {
components: { Treeselect, TenantAddAndUpdate },
data () {
return {
visible: false,
deptTreeOptions: [],
houseList: [],
tenantList: [],
dataForm: {
id: 0,
ownerName: '' ,
ownerType: '' ,
ownerIdcard: '' ,
phone: '' ,
email: '' ,
emergencyContact: '' ,
emergencyPhone: '' ,
status: '' ,
remark: '' ,
ownerName: '' ,
ownerType: '' ,
ownerIdcard: '' ,
phone: '' ,
email: '' ,
emergencyContact: '' ,
emergencyPhone: '' ,
status: '' ,
deptId: null ,
houseId: null ,
remark: '' ,
},
dataRule: {
ownerName: [
@ -66,31 +123,87 @@
ownerType: [
{ required: true, message: '业主类型 为必填项', trigger: 'blur' }
],
ownerIdcard: [
{ required: true, message: '业主身份证 为必填项', trigger: 'blur' }
],
phone: [
{ required: true, message: '联系电话 为必填项', trigger: 'blur' }
],
email: [
{ required: true, message: '电子邮箱 为必填项', trigger: 'blur' }
],
emergencyContact: [
{ required: true, message: '紧急联系人 为必填项', trigger: 'blur' }
],
emergencyPhone: [
{ required: true, message: '紧急联系电话 为必填项', trigger: 'blur' }
],
status: [
{ required: true, message: '业主状态 为必填项', trigger: 'blur' }
],
remark: [
{ required: true, message: '备注 为必填项', trigger: 'blur' }
],
}
}
},
mounted() {
this.handleGetDeptList()
this.handleGetHouseList()
},
methods: {
handleGetDeptList() {
deptApi.deptTreeSelect().then(res => {
this.deptTreeOptions = res
})
},
handleGetHouseList() {
houseApi.pmhouseListApi({ page: 1, limit: 9999 }).then(res => {
this.houseList = res.list || []
})
},
//
getTenantList() {
if (!this.dataForm.id) return
tenantApi.pmtenantListByOwnerIdApi(this.dataForm.id, { page: 1, limit: 9999 }).then(res => {
try {
this.tenantList = Array.isArray(res) ? res : (res.list || [])
} catch (error) {
this.tenantList = []
}
}).catch(err => {
this.tenantList = []
})
},
//
addTenant() {
if (this.$refs.tenantAddOrUpdate) {
this.$refs.tenantAddOrUpdate.init(0, this.dataForm.id)
}
},
//
editTenant(id) {
if (this.$refs.tenantAddOrUpdate) {
this.$refs.tenantAddOrUpdate.init(id, this.dataForm.id)
}
},
//
deleteTenant(id, index) {
this.$confirm('确定要删除这条租户记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if (id) {
// IDAPI
tenantApi.pmtenantDeleteApi([id]).then(() => {
this.$message.success('删除成功')
//
this.tenantList.splice(index, 1)
}).catch(() => {
this.$message.error('删除失败')
})
} else {
// ID
this.tenantList.splice(index, 1)
this.$message.success('删除成功')
}
}).catch(() => {
this.$message.info('已取消删除')
})
},
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.deptId ? node.deptId : '0',
label: node.deptName ? node.deptName : '顶级部门',
children: node.children
};
},
init (id) { //
this.dataForm.id = id || 0
this.visible = true
@ -99,7 +212,12 @@
if (this.dataForm.id) {
api.pmownerDetailApi(id).then(function(res) {
this.dataForm = res;
//
this.getTenantList()
}.bind(this))
} else {
//
this.tenantList = []
}
}.bind(this))
},
@ -126,3 +244,8 @@
}
}
</script>
<style>
.tenant-list-container {
margin-top: 20px;
}
</style>

@ -0,0 +1,122 @@
<template>
<!-- 基于 Element UI 新增和修改弹窗 -->
<el-dialog
:title="!dataForm.id ? '添加' : '修改'"
:close-on-click-modal="false"
:visible.sync="visible"
:z-index="3000">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="120px">
<el-form-item label="绑定时间" prop="rentBeginTime">
<el-date-picker v-model="dataForm.rentBeginTime" type="datetime" placeholder="选择绑定时间" style="width: 100%"></el-date-picker>
</el-form-item>
<el-form-item label="解绑时间" prop="rentEndTime">
<el-date-picker v-model="dataForm.rentEndTime" type="datetime" placeholder="选择解绑时间" style="width: 100%"></el-date-picker>
</el-form-item>
<el-form-item label="押金金额" prop="depositAmount">
<el-input-number v-model="dataForm.depositAmount" :min="0" :precision="2" placeholder="押金金额" style="width: 100%"></el-input-number>
</el-form-item>
<el-form-item label="月租金" prop="rentAmount">
<el-input-number v-model="dataForm.rentAmount" :min="0" :precision="2" placeholder="月租金" style="width: 100%"></el-input-number>
</el-form-item>
<el-form-item label="授权范围" prop="authScope">
<el-input v-model="dataForm.authScope" placeholder="授权范围"></el-input>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-input v-model="dataForm.status" placeholder="状态"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="备注" type="textarea"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataSubmit()"></el-button>
</span>
</el-dialog>
</template>
<script>
import * as api from '@/api/pmtenanthouse.js'
export default {
props: {
tenantId: {
type: Number,
default: 0
}
},
data () {
return {
visible: false,
dataForm: {
id: 0,
rentId: 0,
rentBeginTime: '',
rentEndTime: '',
depositAmount: 0,
rentAmount: 0,
authScope: '',
status: '',
remark: ''
},
dataRule: {
rentBeginTime: [
{ required: true, message: '绑定时间为必填项', trigger: 'change' }
],
rentEndTime: [
{ required: true, message: '解绑时间为必填项', trigger: 'change' }
],
depositAmount: [
{ required: true, message: '押金金额为必填项', trigger: 'blur' }
],
rentAmount: [
{ required: true, message: '月租金为必填项', trigger: 'blur' }
],
authScope: [
{ required: true, message: '授权范围为必填项', trigger: 'blur' }
],
status: [
{ required: true, message: '状态为必填项', trigger: 'blur' }
],
}
}
},
methods: {
init (id, tenantId) { //
this.dataForm.id = id || 0
this.dataForm.rentId = tenantId || 0
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
api.pmtenanthouseDetailApi(id).then(res => {
this.dataForm = res;
})
}
})
},
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
if (this.dataForm.id) {
api.pmtenanthouseUpdateApi(this.dataForm).then(res => {
this.$message.success('保存成功')
this.visible = false
this.$emit('refreshDataList')
this.$emit('saveRentRecord', res)
})
} else {
api.pmtenanthouseCreateApi(this.dataForm).then(res => {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
this.$emit('saveRentRecord', res)
})
}
}
})
}
}
}
</script>

@ -0,0 +1,238 @@
<template>
<!-- 基于 Element UI 新增和修改弹窗 -->
<el-dialog
:title="!dataForm.id ? '添加' : '修改'"
:close-on-click-modal="false"
:visible.sync="visible"
:z-index="2000">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="120px">
<el-form-item label="租户姓名" prop="tenantName">
<el-input v-model="dataForm.tenantName" placeholder="租户姓名"></el-input>
</el-form-item>
<el-form-item label="租户类型" prop="tenantType">
<el-input v-model="dataForm.tenantType" placeholder="租户类型(个人、企业)"></el-input>
</el-form-item>
<el-form-item label="身份证号" prop="idCard">
<el-input v-model="dataForm.idCard" placeholder="身份证号"></el-input>
</el-form-item>
<el-form-item label="联系电话" prop="phome">
<el-input v-model="dataForm.phome" placeholder="联系电话"></el-input>
</el-form-item>
<el-form-item label="工作单位" prop="company">
<el-input v-model="dataForm.company" placeholder="工作单位"></el-input>
</el-form-item>
<el-form-item label="租户ID" prop="tenantId">
<el-input v-model="dataForm.tenantId" placeholder="租户ID"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="备注" type="textarea"></el-input>
</el-form-item>
<!-- 显示添加租赁记录按钮 -->
<el-form-item>
<el-button type="success" @click="addRentRecord"></el-button>
</el-form-item>
</el-form>
<!-- 租赁记录列表 -->
<div class="rent-records-container">
<el-table :data="rentRecords" style="width: 100%">
<el-table-column prop="rentBeginTime" label="绑定时间" width="150"></el-table-column>
<el-table-column prop="rentEndTime" label="解绑时间" width="150"></el-table-column>
<el-table-column prop="depositAmount" label="押金金额" width="120">
<template slot-scope="scope">
{{ scope.row.depositAmount || 0 }}
</template>
</el-table-column>
<el-table-column prop="rentAmount" label="月租金" width="120">
<template slot-scope="scope">
{{ scope.row.rentAmount || 0 }}
</template>
</el-table-column>
<el-table-column prop="authScope" label="授权范围" width="150"></el-table-column>
<el-table-column prop="status" label="状态" width="100"></el-table-column>
<el-table-column prop="remark" label="备注" width="150"></el-table-column>
<el-table-column label="操作" width="180" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="small" @click="editRentRecord(scope.row.id)">{{ '' }}</el-button>
<el-button type="text" size="small" @click="deleteRentRecord(scope.row.id, scope.$index)">{{ '删除' }}</el-button>
</template>
</el-table-column>
</el-table>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataSubmit()"></el-button>
</span>
<!-- 租赁记录弹窗 -->
<rent-record-add-and-update ref="rentRecordAddOrUpdate" :tenantId="dataForm.id" @refreshDataList="getRentRecords" @saveRentRecord="saveRentRecord"></rent-record-add-and-update>
</el-dialog>
</template>
<script>
import * as api from '@/api/pmtenant.js'
import * as relApi from '@/api/pmtentanthouserel.js'
import * as rentRecordApi from '@/api/pmtenanthouse.js'
import RentRecordAddAndUpdate from './rent-record-add-and-update.vue'
export default {
components: { RentRecordAddAndUpdate },
props: {
ownerId: {
type: Number,
default: 0
}
},
data () {
return {
visible: false,
rentRecords: [],
dataForm: {
id: 0,
ownerId: 0,
tenantName: '',
tenantType: '',
idCard: '',
phome: '',
company: '',
status: '',
tenantId: '',
remark: ''
},
dataRule: {
tenantName: [
{ required: true, message: '租户姓名 为必填项', trigger: 'blur' }
],
phome: [
{ required: true, message: '联系电话 为必填项', trigger: 'blur' }
],
idCard: [
{ required: true, message: '身份证号 为必填项', trigger: 'blur' }
],
}
}
},
methods: {
init (id, ownerId) { //
this.dataForm.id = id || 0
this.dataForm.ownerId = ownerId || 0
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
api.pmtenantDetailApi(id).then(res => {
this.dataForm = res;
this.getRentRecords()
})
} else {
this.rentRecords = []
}
})
},
//
getRentRecords() {
if (!this.dataForm.id) return
rentRecordApi.pmtenanthouseListApi({ rentId: this.dataForm.id, page: 1, limit: 9999 }).then(res => {
try {
this.rentRecords = Array.isArray(res) ? res : (res.list || [])
} catch (error) {
this.rentRecords = []
}
}).catch(err => {
this.rentRecords = []
})
},
//
addRentRecord() {
if (this.$refs.rentRecordAddOrUpdate) {
this.$refs.rentRecordAddOrUpdate.init(0, this.dataForm.id)
}
},
//
editRentRecord(id) {
if (this.$refs.rentRecordAddOrUpdate) {
this.$refs.rentRecordAddOrUpdate.init(id, this.dataForm.id)
}
},
//
deleteRentRecord(id, index) {
this.$confirm('确定要删除这条租赁记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if (id) {
rentRecordApi.pmtenanthouseDeleteApi([id]).then(() => {
this.$message.success('删除成功')
this.rentRecords.splice(index, 1)
}).catch(() => {
this.$message.error('删除失败')
})
} else {
this.rentRecords.splice(index, 1)
this.$message.success('删除成功')
}
}).catch(() => {
this.$message.info('已取消删除')
})
},
//
saveRentRecord(recordData) {
if (!recordData) return
const existingIndex = this.rentRecords.findIndex(record => record.id === recordData.id)
if (existingIndex !== -1) {
this.rentRecords.splice(existingIndex, 1, recordData)
} else {
this.rentRecords.push(recordData)
}
},
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
if (this.dataForm.id) {
api.pmtenantUpdateApi(this.dataForm).then(() => {
this.$message.success('保存成功')
this.visible = false
this.$emit('refreshDataList')
})
} else {
api.pmtenantCreateApi(this.dataForm).then(res => {
const tenantId = res.id
if (tenantId && this.ownerId) {
const relData = {
tenantHouseId: tenantId,
ownerId: this.ownerId,
tenantId: this.dataForm.tenantId,
delFlag: '0'
}
relApi.pmtentanthouserelCreateApi(relData).then(() => {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
}).catch(() => {
this.$message.error('关联关系创建失败')
})
} else {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
}
})
}
}
})
}
}
}
</script>
<style>
.rent-records-container {
margin-top: 20px;
}
</style>

@ -0,0 +1,236 @@
<template>
<div class="divBox">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="岗位编码">
<el-input v-model="dataForm.postCode" placeholder="请输入岗位编码" clearable></el-input>
</el-form-item>
<el-form-item label="岗位名称">
<el-input v-model="dataForm.postName" placeholder="请输入岗位名称" clearable></el-input>
</el-form-item>
<el-form-item label="显示顺序">
<el-input v-model="dataForm.postSort" placeholder="请输入显示顺序" clearable></el-input>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="dataForm.status" placeholder="请选择状态" clearable>
<el-option
v-for="dict in dict.type.post_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()"></el-button>
<el-button @click="resetForm()"></el-button>
<el-button v-hasPermi="['autogencode:syspost:save']" type="primary" @click="addOrUpdateHandle()"></el-button>
<el-button v-hasPermi="['autogencode:syspost:delete']" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0"></el-button>
</el-form-item>
</el-form>
<el-table
:data="dataList"
border
v-loading="dataListLoading"
@selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column
type="selection"
header-align="center"
align="center"
width="50">
</el-table-column>
<el-table-column
prop="postCode"
header-align="center"
align="center"
label="岗位编码">
</el-table-column>
<el-table-column
prop="postName"
header-align="center"
align="center"
label="岗位名称">
</el-table-column>
<el-table-column
prop="postSort"
header-align="center"
align="center"
label="显示顺序">
</el-table-column>
<el-table-column
prop="status"
header-align="center"
align="center"
label="状态">
<template slot-scope="scope">
<dict-tag :options="dict.type.post_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column
prop="remark"
header-align="center"
align="center"
label="备注">
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="150"
label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.postId)">{{ '' }}</el-button>
<el-button v-hasPermi="['autogencode:syspost:delete']" type="text" size="small" @click="deleteHandle(scope.row.postId)" style="color: #f56c6c;"></el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 表单弹窗, 新增数据和修改数据 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</template>
<script>
import AddOrUpdate from './syspost-add-and-update'
import * as api from '@/api/syspost.js'
export default {
dicts: ['post_status'],
data () {
return {
dataForm: {
postId: '',
postCode: '',
postName: '',
postSort: '',
status: '',
remark: '',
deptId: '',
updatestamp: '',
syncstamp: '',
},
dataList: [],
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false
}
},
components: {
AddOrUpdate
},
activated () {
this.getDataList()
},
mounted() {
//
this.getDataList()
},
methods: {
//
resetForm() {
this.dataForm = {
postId: '',
postCode: '',
postName: '',
postSort: '',
status: '',
remark: '',
deptId: '',
updatestamp: '',
syncstamp: '',
}
this.getDataList()
},
//
getDataList () {
this.dataListLoading = true
// SysPostControllerPageParamRequest
const params = {
page: this.pageIndex,
limit: this.pageSize
}
//
if (this.dataForm.postId) params.postId = this.dataForm.postId;
if (this.dataForm.postCode) params.postCode = this.dataForm.postCode;
if (this.dataForm.postName) params.postName = this.dataForm.postName;
if (this.dataForm.postSort) params.postSort = this.dataForm.postSort;
if (this.dataForm.status) params.status = this.dataForm.status;
if (this.dataForm.remark) params.remark = this.dataForm.remark;
if (this.dataForm.deptId) params.deptId = this.dataForm.deptId;
if (this.dataForm.updatestamp) params.updatestamp = this.dataForm.updatestamp;
if (this.dataForm.syncstamp) params.syncstamp = this.dataForm.syncstamp;
api.syspostListApi(params).then(res => {
this.dataListLoading = false
this.dataList = res.list || [];
this.totalPage = res.total;
}).catch(e => {
this.dataListLoading = false
})
},
//
sizeChangeHandle (val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
//
currentChangeHandle (val) {
this.pageIndex = val
this.getDataList()
},
//
selectionChangeHandle (val) {
this.dataListSelections = val
},
// /
addOrUpdateHandle (id) {
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id)
})
},
//
deleteHandle (id) {
let ids = []
let idText = ''
// id
if (id) {
ids = [id]
idText = id
} else {
//
ids = this.dataListSelections.map(item => {
return item.postId
})
idText = ids.join(',')
}
this.$confirm(`确定进行删除操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// API
api.syspostDeleteApi(ids).then(res => {
this.$message.success('删除成功')
this.getDataList()
})
})
},
}
}
</script>

@ -0,0 +1,141 @@
<template>
<!-- 基于 Element UI 新增和修改弹窗 -->
<el-dialog
:title="!dataForm.postId ? '添加' : '修改'"
:close-on-click-modal="false"
:visible.sync="visible">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="80px">
<el-form-item label="岗位编码" prop="postCode">
<el-input v-model="dataForm.postCode" placeholder="岗位编码"></el-input>
</el-form-item>
<el-form-item label="岗位名称" prop="postName">
<el-input v-model="dataForm.postName" placeholder="岗位名称"></el-input>
</el-form-item>
<el-form-item label="显示顺序" prop="postSort">
<el-input v-model="dataForm.postSort" placeholder="显示顺序"></el-input>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="dataForm.status" placeholder="请选择状态" clearable style="width: 100%">
<el-option
v-for="dict in dict.type.post_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="部门" prop="deptId">
<treeselect
v-model="dataForm.deptId"
:options="deptTreeOptions"
:normalizer="normalizer"
placeholder="选择部门"
style="width: 100%"
></treeselect>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" type="textarea" placeholder="备注"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataSubmit()"></el-button>
</span>
</el-dialog>
</template>
<script>
import * as api from '@/api/syspost.js'
import * as deptApi from '@/api/sysdept.js'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
components: { Treeselect },
dicts: ['post_status'],
data () {
return {
visible: false,
deptTreeOptions: [],
dataForm: {
postId: 0,
postCode: '' ,
postName: '' ,
postSort: '' ,
status: '' ,
remark: '' ,
deptId: '' ,
updatestamp: '' ,
syncstamp: ''
},
dataRule: {
postCode: [
{ required: true, message: '岗位编码 为必填项', trigger: 'blur' }
],
postName: [
{ required: true, message: '岗位名称 为必填项', trigger: 'blur' }
],
postSort: [
{ required: true, message: '显示顺序 为必填项', trigger: 'blur' }
],
status: [
{ required: true, message: '状态 为必填项', trigger: 'blur' }
],
}
}
},
mounted() {
this.handleGetDeptList()
},
methods: {
handleGetDeptList() {
deptApi.deptTreeSelect().then(res => {
this.deptTreeOptions = res
})
},
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.deptId ? node.deptId : '0',
label: node.deptName ? node.deptName : '顶级部门',
children: node.children
};
},
init (id) { //
this.dataForm.postId = id || 0
this.visible = true
this.$nextTick(function() {
this.$refs['dataForm'].resetFields()
if (this.dataForm.postId) {
api.syspostDetailApi(id).then(function(res) {
this.dataForm = res;
}.bind(this))
}
}.bind(this))
},
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
if (this.dataForm.postId) {
api.syspostUpdateApi(this.dataForm).then(function(res) {
this.$message.success('保存成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
} else {
api.syspostCreateApi(this.dataForm).then(function(res) {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
}
}
})
}
}
}
</script>

@ -0,0 +1,258 @@
<template>
<div class="divBox">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="用户ID">
<el-input v-model="dataForm.userId" placeholder="请输入用户ID" clearable></el-input>
</el-form-item>
<el-form-item label="岗位ID">
<el-input v-model="dataForm.postId" placeholder="请输入岗位ID" clearable></el-input>
</el-form-item>
<el-form-item label="部门id 权限标识">
<el-input v-model="dataForm.deptId" placeholder="请输入部门id 权限标识" clearable></el-input>
</el-form-item>
<el-form-item label="更新时间">
<el-input v-model="dataForm.updatestamp" placeholder="请输入更新时间" clearable></el-input>
</el-form-item>
<el-form-item label="同步时间">
<el-input v-model="dataForm.syncstamp" placeholder="请输入同步时间" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()"></el-button>
<el-button @click="resetForm()"></el-button>
<el-button v-hasPermi="['autogencode:sysuserpost:save']" type="primary" @click="addOrUpdateHandle()"></el-button>
<el-button v-hasPermi="['autogencode:sysuserpost:delete']" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0"></el-button>
</el-form-item>
</el-form>
<el-table
:data="dataList"
border
v-loading="dataListLoading"
@selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column
type="selection"
header-align="center"
align="center"
width="50">
</el-table-column>
<el-table-column
prop="id"
header-align="center"
align="center"
label="主键">
</el-table-column>
<el-table-column
prop="userId"
header-align="center"
align="center"
label="用户ID">
</el-table-column>
<el-table-column
prop="postId"
header-align="center"
align="center"
label="岗位ID">
</el-table-column>
<el-table-column
prop="deptId"
header-align="center"
align="center"
label="部门id 权限标识">
</el-table-column>
<el-table-column
prop="delFlag"
header-align="center"
align="center"
label="删除标示 默认为1 有效数据 ,0为无效已删除">
</el-table-column>
<el-table-column
prop="tenantId"
header-align="center"
align="center"
label="租户id">
</el-table-column>
<el-table-column
prop="updatestamp"
header-align="center"
align="center"
label="更新时间">
</el-table-column>
<el-table-column
prop="syncstamp"
header-align="center"
align="center"
label="同步时间">
</el-table-column>
<el-table-column
prop="createBy"
header-align="center"
align="center"
label="创建人">
</el-table-column>
<el-table-column
prop="createTime"
header-align="center"
align="center"
label="创建时间">
</el-table-column>
<el-table-column
prop="updateBy"
header-align="center"
align="center"
label="修改人">
</el-table-column>
<el-table-column
prop="updateTime"
header-align="center"
align="center"
label="修改时间">
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="150"
label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ '' }}</el-button>
<el-button v-hasPermi="['autogencode:sysuserpost:delete']" type="text" size="small" @click="deleteHandle(scope.row.id)" style="color: #f56c6c;"></el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 表单弹窗, 新增数据和修改数据 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</template>
<script>
import AddOrUpdate from './sysuserpost-add-and-update'
import * as api from '@/api/sysuserpost.js'
export default {
data () {
return {
dataForm: {
userId: '',
postId: '',
deptId: '',
updatestamp: '',
syncstamp: '',
},
dataList: [],
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false
}
},
components: {
AddOrUpdate
},
activated () {
this.getDataList()
},
mounted() {
//
this.getDataList()
},
methods: {
//
resetForm() {
this.dataForm = {
userId: '',
postId: '',
deptId: '',
updatestamp: '',
syncstamp: '',
}
this.getDataList()
},
//
getDataList () {
this.dataListLoading = true
// SysUserPostControllerPageParamRequest
const params = {
page: this.pageIndex,
limit: this.pageSize
}
//
if (this.dataForm.userId) params.userId = this.dataForm.userId;
if (this.dataForm.postId) params.postId = this.dataForm.postId;
if (this.dataForm.deptId) params.deptId = this.dataForm.deptId;
if (this.dataForm.updatestamp) params.updatestamp = this.dataForm.updatestamp;
if (this.dataForm.syncstamp) params.syncstamp = this.dataForm.syncstamp;
api.sysuserpostListApi(params).then(res => {
this.dataListLoading = false
this.dataList = res.list || [];
this.totalPage = res.total;
}).catch(e => {
this.dataListLoading = false
})
},
//
sizeChangeHandle (val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
//
currentChangeHandle (val) {
this.pageIndex = val
this.getDataList()
},
//
selectionChangeHandle (val) {
this.dataListSelections = val
},
// /
addOrUpdateHandle (id) {
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id)
})
},
//
deleteHandle (id) {
let ids = []
let idText = ''
// id
if (id) {
ids = [id]
idText = id
} else {
//
ids = this.dataListSelections.map(item => {
return item.id
})
idText = ids.join(',')
}
this.$confirm(`确定进行删除操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// API
api.sysuserpostDeleteApi(ids).then(res => {
this.$message.success('删除成功')
this.getDataList()
})
})
},
}
}
</script>

@ -0,0 +1,100 @@
<template>
<!-- 基于 Element UI 新增和修改弹窗 -->
<el-dialog
:title="!dataForm.id ? '添加' : '修改'"
:close-on-click-modal="false"
:visible.sync="visible">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="80px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="dataForm.userId" placeholder="用户ID"></el-input>
</el-form-item>
<el-form-item label="岗位ID" prop="postId">
<el-input v-model="dataForm.postId" placeholder="岗位ID"></el-input>
</el-form-item>
<el-form-item label="部门id 权限标识" prop="deptId">
<el-input v-model="dataForm.deptId" placeholder="部门id 权限标识"></el-input>
</el-form-item>
<el-form-item label="更新时间" prop="updatestamp">
<el-input v-model="dataForm.updatestamp" placeholder="更新时间"></el-input>
</el-form-item>
<el-form-item label="同步时间" prop="syncstamp">
<el-input v-model="dataForm.syncstamp" placeholder="同步时间"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataSubmit()"></el-button>
</span>
</el-dialog>
</template>
<script>
import * as api from '@/api/sysuserpost.js'
export default {
data () {
return {
visible: false,
dataForm: {
id: 0,
userId: '' ,
postId: '' ,
deptId: '' ,
updatestamp: '' ,
syncstamp: '' ,
},
dataRule: {
userId: [
{ required: true, message: '用户ID 为必填项', trigger: 'blur' }
],
postId: [
{ required: true, message: '岗位ID 为必填项', trigger: 'blur' }
],
deptId: [
{ required: true, message: '部门id 权限标识 为必填项', trigger: 'blur' }
],
updatestamp: [
{ required: true, message: '更新时间 为必填项', trigger: 'blur' }
],
syncstamp: [
{ required: true, message: '同步时间 为必填项', trigger: 'blur' }
],
}
}
},
methods: {
init (id) { //
this.dataForm.id = id || 0
this.visible = true
this.$nextTick(function() {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
api.sysuserpostDetailApi(id).then(function(res) {
this.dataForm = res;
}.bind(this))
}
}.bind(this))
},
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
if (this.dataForm.id) {
api.sysuserpostUpdateApi(this.dataForm).then(function(res) {
this.$message.success('保存成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
} else {
api.sysuserpostCreateApi(this.dataForm).then(function(res) {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
}
}
})
}
}
}
</script>

@ -34,12 +34,22 @@
placeholder="请输入手机号" size="large"/>
</el-form-item>
<el-form-item label="所属部门" prop="depts">
<el-select v-model="pram.depts" placeholder="选择所属部门" clearable multiple style="width: 100%">
<treeselect
v-model="pram.depts"
:options="deptTreeOptions"
:normalizer="normalizer"
:multiple="true"
:show-count="true"
placeholder="选择所属部门"
></treeselect>
</el-form-item>
<el-form-item label="岗位" prop="posts">
<el-select v-model="pram.posts" placeholder="选择岗位" clearable multiple style="width: 100%">
<el-option
v-for="item in deptTreeOptions"
:key="item.deptId"
:label="item.deptName"
:value="item.deptId"
v-for="item in postList"
:key="item.postId"
:label="item.postName"
:value="item.postId"
/>
</el-select>
</el-form-item>
@ -58,10 +68,12 @@
import * as roleApi from '@/api/role.js'
import * as systemAdminApi from '@/api/systemadmin.js'
import * as deptApi from '@/api/sysdept.js'
import * as postApi from '@/api/syspost.js'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {Debounce} from '@/utils/validate'
export default {
// name: "edit",
components: { },
components: { Treeselect },
props: {
isCreate: {
type: Number,
@ -109,10 +121,12 @@ export default {
status: null,
id: null,
phone: null,
depts: []
depts: [],
posts: []
},
roleList: [],
deptTreeOptions: [],
postList: [],
savedDepts: null, // editData
rules: {
account: [{ required: true, message: '请填管理员账号', trigger: ['blur', 'change'] }],
@ -128,6 +142,7 @@ export default {
this.initEditData()
this.handleGetRoleList()
this.handleGetDeptList()
this.handleGetPostList()
},
methods: {
close() {
@ -135,7 +150,7 @@ export default {
},
handleGetRoleList() {
const _pram = {
page: 1,
page:1,
limit: this.constants.page.limit[4],
status: 1
}
@ -153,15 +168,37 @@ export default {
handleGetDeptList() {
deptApi.deptTreeSelect().then(res => {
this.deptTree = res
this.deptTreeOptions = this.flattenDeptTree(res)
this.deptTreeOptions = res
// pram.depts
if (this.isCreate === 1 && this.savedDepts) {
this.setDeptData(this.savedDepts)
}
})
},
handleGetPostList() {
const _pram = {
page: 1,
limit: this.constants.page.limit[4],
status: 0
}
postApi.syspostListApi(_pram).then(data => {
this.postList = data.list || []
})
},
// treeselect
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.deptId ? node.deptId : '0',
label: node.deptName ? node.deptName : '顶级部门',
children: node.children
};
},
//
setDeptData(depts) {
const _depts = []
@ -177,22 +214,12 @@ export default {
}
this.pram.depts = _depts
},
flattenDeptTree(tree) {
let result = []
for (let node of tree) {
result.push(node)
if (node.children && node.children.length > 0) {
result = result.concat(this.flattenDeptTree(node.children))
}
}
return result
},
initEditData() {
if (this.isCreate !== 1) return
const { account, realName, roles, level, status, id, phone, depts } = this.editData
const { account, realName, roles, level, status, id, phone, depts, posts } = this.editData
this.pram.account = account
this.pram.realName = realName
//
const _roles = []
if (roles && roles.length > 0 && !roles.includes(',')) {
@ -203,10 +230,29 @@ export default {
_roles.push(...roles.split(',').map(item => Number.parseInt(item)))
}
this.pram.roles = _roles
// pram.depts
this.savedDepts = depts
//
if (posts) {
if (Array.isArray(posts)) {
// posts使
this.pram.posts = posts
} else if (typeof posts === 'string') {
// posts
const _posts = []
if (posts.length > 0 && !posts.includes(',')) {
_posts.push(posts)
} else if (posts) {
_posts.push(...posts.split(','))
}
this.pram.posts = _posts
}
} else {
this.pram.posts = []
}
this.pram.status = status
this.pram.id = id
this.pram.phone = phone
@ -224,9 +270,10 @@ export default {
})
}),
handlerSave() {
//
//
const requestData = {
...this.pram
...this.pram,
posts: this.pram.posts
// depts
}
systemAdminApi.adminAdd(requestData).then(data => {
@ -235,12 +282,14 @@ export default {
})
},
handlerEdit() {
//
//
const requestData = {
...this.pram,
roles: this.pram.roles.join(','), // adminUpdateroles
depts: this.pram.depts // adminUpdatedepts
depts: this.pram.depts, // adminUpdatedepts
posts: this.pram.posts
}
console.log(requestData)
systemAdminApi.adminUpdate(requestData).then(data => {
this.$message.success('更新管理员成功')
this.$emit('hideEditDialog')

@ -1,6 +1,35 @@
<template>
<div class="divBox">
<el-card class="box-card">
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="deptName"
placeholder="请输入部门名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="deptOptions"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="tree"
node-key="deptId"
default-expand-all
highlight-current
@node-click="handleNodeClick"
/>
</div>
</el-col>
<!--管理员数据-->
<el-col :span="20" :xs="24">
<el-card class="box-card">
<el-form inline size="small" @submit.native.prevent>
<el-form-item>
<el-select v-model="listPram.roles" placeholder="身份" clearable class="selWidth">
@ -133,12 +162,15 @@
@hideEditDialog="hideEditDialog"
/>
</el-dialog>
</el-col>
</el-row>
</div>
</template>
<script>
import * as systemAdminApi from '@/api/systemadmin.js'
import * as roleApi from '@/api/role.js'
import * as deptApi from '@/api/sysdept.js'
import edit from './edit'
import { checkPermi } from "@/utils/permission"; //
export default {
@ -147,6 +179,12 @@ export default {
data() {
return {
constants:this.$constants,
deptOptions: [],
deptName: undefined,
defaultProps: {
children: "children",
label: "deptName"
},
listData: { list: [] },
listPram: {
account: null,
@ -170,12 +208,31 @@ export default {
}
}
},
watch: {
deptName(val) {
this.$refs.tree.filter(val);
}
},
mounted() {
this.handleGetAdminList()
this.handleGetRoleList()
this.getDeptTree()
},
methods: {
checkPermi,
getDeptTree() {
deptApi.deptTreeSelect().then(res => {
this.deptOptions = res
})
},
filterNode(value, data) {
if (!value) return true;
return data.deptName.indexOf(value) !== -1;
},
handleNodeClick(data) {
this.listPram.deptId = data.deptId;
this.handleSearch();
},
onchangeIsShow(row) {
systemAdminApi.updateStatusApi({id: row.id, status: row.status})
.then(async () => {

@ -143,6 +143,10 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/api/public/**").anonymous()
// 放行公共文件访问
.antMatchers("/file/public/**").anonymous()
// 放行访客预约保存
.antMatchers("/api/autogencode/dcvisitbook/save").anonymous()
// 放行访客预约列表
.antMatchers("/api/autogencode/dcvisitbook/list").anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
.and()

@ -0,0 +1,188 @@
package com.zbkj.admin.controller;
import java.util.Arrays;
import java.util.Map;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.response.CommonResult;
import com.zbkj.common.page.CommonPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.common.model.system.SysPost;
import com.zbkj.service.service.SysPostService;
/**
*
*/
@RestController
@RequestMapping("api/autogencode/syspost")
public class SysPostController {
@Autowired
private SysPostService sysPostService;
/**
*
*
*/
private void condition(LambdaQueryWrapper<SysPost> queryWrapper, SysPost request) {
if (request == null) {
return;
}
// 根据实体类字段自动生成查询条件
// 岗位ID
if (StrUtil.isNotBlank(request.getPostId())) {
queryWrapper.eq(SysPost::getPostId, request.getPostId());
}
// 岗位编码
if (StrUtil.isNotBlank(request.getPostCode())) {
queryWrapper.eq(SysPost::getPostCode, request.getPostCode());
}
// 岗位名称
if (StrUtil.isNotBlank(request.getPostName())) {
queryWrapper.eq(SysPost::getPostName, request.getPostName());
}
// 显示顺序
if (request.getPostSort() != null) {
queryWrapper.eq(SysPost::getPostSort, request.getPostSort());
}
// 状态0正常 1停用
if (StrUtil.isNotBlank(request.getStatus())) {
queryWrapper.eq(SysPost::getStatus, request.getStatus());
}
// 创建者
if (StrUtil.isNotBlank(request.getCreateBy())) {
queryWrapper.eq(SysPost::getCreateBy, request.getCreateBy());
}
// 创建时间
if (request.getCreateTime() != null) {
queryWrapper.eq(SysPost::getCreateTime, request.getCreateTime());
}
// 更新者
if (StrUtil.isNotBlank(request.getUpdateBy())) {
queryWrapper.eq(SysPost::getUpdateBy, request.getUpdateBy());
}
// 修改时间
if (request.getUpdateTime() != null) {
queryWrapper.eq(SysPost::getUpdateTime, request.getUpdateTime());
}
// 备注
if (StrUtil.isNotBlank(request.getRemark())) {
queryWrapper.eq(SysPost::getRemark, request.getRemark());
}
// 部门id 权限标识
if (StrUtil.isNotBlank(request.getDeptId())) {
queryWrapper.eq(SysPost::getDeptId, request.getDeptId());
}
// 删除标示 默认为1 有效数据 ,0为无效已删除
if (StrUtil.isNotBlank(request.getDelFlag())) {
queryWrapper.eq(SysPost::getDelFlag, request.getDelFlag());
}
// 租户id
if (StrUtil.isNotBlank(request.getTenantId())) {
queryWrapper.eq(SysPost::getTenantId, request.getTenantId());
}
// 更新时间
if (request.getUpdatestamp() != null) {
queryWrapper.eq(SysPost::getUpdatestamp, request.getUpdatestamp());
}
// 同步时间
if (request.getSyncstamp() != null) {
queryWrapper.eq(SysPost::getSyncstamp, request.getSyncstamp());
}
}
/**
*
* @param request
* @param pageParamRequest
*/
@ApiOperation(value = "分页列表")
@RequestMapping(value = "/list", method = RequestMethod.GET)
public CommonResult<CommonPage<SysPost>> getList(@Validated SysPost request, @Validated PageParamRequest pageParamRequest) {
LambdaQueryWrapper<SysPost> queryWrapper = new LambdaQueryWrapper();
// 应用搜索条件
condition(queryWrapper, request);
CommonPage<SysPost> page = CommonPage.restPage(sysPostService.pageList(queryWrapper, pageParamRequest));
return CommonResult.success(page);
}
/**
*
*/
@RequestMapping(value = "/info/{postId}", method = RequestMethod.GET)
public CommonResult<SysPost> info(@PathVariable("postId") String postId){
SysPost sysPost = sysPostService.getById(postId);
return CommonResult.success(sysPost);
}
/**
*
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody SysPost sysPost){
if (sysPostService.save(sysPost)) {
return CommonResult.success();
}
return CommonResult.failed();
}
/**
*
*/
@RequestMapping(value = "/update", method = RequestMethod.POST)
public CommonResult<String> update(@RequestBody SysPost sysPost){
if (sysPostService.updateById(sysPost)) {
return CommonResult.success();
}
return CommonResult.failed();
}
/**
* :id
*/
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public CommonResult<String> delete(@RequestBody String[] postIds){
if (sysPostService.removeByIds(Arrays.asList(postIds))) {
return CommonResult.success();
}
return CommonResult.failed();
}
}

@ -0,0 +1,173 @@
package com.zbkj.admin.controller;
import java.util.Arrays;
import java.util.Map;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.response.CommonResult;
import com.zbkj.common.page.CommonPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.common.model.system.SysUserPost;
import com.zbkj.service.service.SysUserPostService;
/**
*
*/
@RestController
@RequestMapping("api/autogencode/sysuserpost")
public class SysUserPostController {
@Autowired
private SysUserPostService sysUserPostService;
/**
*
*
*/
private void condition(LambdaQueryWrapper<SysUserPost> queryWrapper, SysUserPost request) {
if (request == null) {
return;
}
// 根据实体类字段自动生成查询条件
// 主键
if (StrUtil.isNotBlank(request.getId())) {
queryWrapper.eq(SysUserPost::getId, request.getId());
}
// 用户ID
if (StrUtil.isNotBlank(request.getUserId())) {
queryWrapper.eq(SysUserPost::getUserId, request.getUserId());
}
// 岗位ID
if (StrUtil.isNotBlank(request.getPostId())) {
queryWrapper.eq(SysUserPost::getPostId, request.getPostId());
}
// 部门id 权限标识
if (StrUtil.isNotBlank(request.getDeptId())) {
queryWrapper.eq(SysUserPost::getDeptId, request.getDeptId());
}
// 删除标示 默认为1 有效数据 ,0为无效已删除
if (StrUtil.isNotBlank(request.getDelFlag())) {
queryWrapper.eq(SysUserPost::getDelFlag, request.getDelFlag());
}
// 租户id
if (StrUtil.isNotBlank(request.getTenantId())) {
queryWrapper.eq(SysUserPost::getTenantId, request.getTenantId());
}
// 更新时间
if (request.getUpdatestamp() != null) {
queryWrapper.eq(SysUserPost::getUpdatestamp, request.getUpdatestamp());
}
// 同步时间
if (request.getSyncstamp() != null) {
queryWrapper.eq(SysUserPost::getSyncstamp, request.getSyncstamp());
}
// 创建人
if (StrUtil.isNotBlank(request.getCreateBy())) {
queryWrapper.eq(SysUserPost::getCreateBy, request.getCreateBy());
}
// 创建时间
if (request.getCreateTime() != null) {
queryWrapper.eq(SysUserPost::getCreateTime, request.getCreateTime());
}
// 修改人
if (StrUtil.isNotBlank(request.getUpdateBy())) {
queryWrapper.eq(SysUserPost::getUpdateBy, request.getUpdateBy());
}
// 修改时间
if (request.getUpdateTime() != null) {
queryWrapper.eq(SysUserPost::getUpdateTime, request.getUpdateTime());
}
}
/**
*
* @param request
* @param pageParamRequest
*/
@ApiOperation(value = "分页列表")
@RequestMapping(value = "/list", method = RequestMethod.GET)
public CommonResult<CommonPage<SysUserPost>> getList(@Validated SysUserPost request, @Validated PageParamRequest pageParamRequest) {
LambdaQueryWrapper<SysUserPost> queryWrapper = new LambdaQueryWrapper();
// 应用搜索条件
condition(queryWrapper, request);
CommonPage<SysUserPost> page = CommonPage.restPage(sysUserPostService.pageList(queryWrapper, pageParamRequest));
return CommonResult.success(page);
}
/**
*
*/
@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
public CommonResult<SysUserPost> info(@PathVariable("id") String id){
SysUserPost sysUserPost = sysUserPostService.getById(id);
return CommonResult.success(sysUserPost);
}
/**
*
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody SysUserPost sysUserPost){
if (sysUserPostService.save(sysUserPost)) {
return CommonResult.success();
}
return CommonResult.failed();
}
/**
*
*/
@RequestMapping(value = "/update", method = RequestMethod.POST)
public CommonResult<String> update(@RequestBody SysUserPost sysUserPost){
if (sysUserPostService.updateById(sysUserPost)) {
return CommonResult.success();
}
return CommonResult.failed();
}
/**
* :id
*/
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public CommonResult<String> delete(@RequestBody String[] ids){
if (sysUserPostService.removeByIds(Arrays.asList(ids))) {
return CommonResult.success();
}
return CommonResult.failed();
}
}

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.response.CommonResult;
import com.zbkj.common.page.CommonPage;
import lombok.With;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@ -2,6 +2,8 @@ package com.zbkj.modules.autogencode.controller;
import java.util.Arrays;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -20,6 +22,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.modules.autogencode.entity.PmOwner;
import com.zbkj.modules.autogencode.service.PmOwnerService;
import com.zbkj.common.model.system.SysDept;
import com.zbkj.service.service.SysDeptService;
import com.zbkj.modules.autogencode.entity.PmOwnerHouseRel;
import com.zbkj.modules.autogencode.service.PmOwnerHouseRelService;
@ -33,6 +39,12 @@ public class PmOwnerController {
@Autowired
private PmOwnerService pmOwnerService;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private PmOwnerHouseRelService pmOwnerHouseRelService;
/**
@ -91,6 +103,18 @@ public class PmOwnerController {
queryWrapper.eq(PmOwner::getStatus, request.getStatus());
}
// 部门ID
if (request.getDeptId() != null) {
// 递归获取所有子部门ID
List<Long> allDeptIds = getAllChildDeptIds(request.getDeptId());
queryWrapper.in(PmOwner::getDeptId, allDeptIds);
}
// 房屋ID
if (request.getHouseId() != null) {
queryWrapper.eq(PmOwner::getHouseId, request.getHouseId());
}
// 备注
if (StrUtil.isNotBlank(request.getRemark())) {
queryWrapper.eq(PmOwner::getRemark, request.getRemark());
@ -134,6 +158,30 @@ public class PmOwnerController {
}
/**
* ID
* @param deptId ID
* @return ID
*/
private List<Long> getAllChildDeptIds(Long deptId) {
List<Long> deptIds = new ArrayList<>();
deptIds.add(deptId);
// 查询子部门
LambdaQueryWrapper<SysDept> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysDept::getParentId, deptId);
List<SysDept> childDepts = sysDeptService.list(queryWrapper);
if (childDepts != null && !childDepts.isEmpty()) {
for (SysDept childDept : childDepts) {
deptIds.addAll(getAllChildDeptIds(childDept.getDeptId()));
}
}
return deptIds;
}
/**
*
* @param request
@ -148,6 +196,27 @@ public class PmOwnerController {
condition(queryWrapper, request);
CommonPage<PmOwner> page = CommonPage.restPage(pmOwnerService.pageList(queryWrapper, pageParamRequest));
// 查询业主房屋关联关系
if (page.getList() != null && !page.getList().isEmpty()) {
List<Long> ownerIds = page.getList().stream().map(PmOwner::getId).collect(java.util.stream.Collectors.toList());
LambdaQueryWrapper<PmOwnerHouseRel> relQueryWrapper = new LambdaQueryWrapper<>();
relQueryWrapper.in(PmOwnerHouseRel::getOwnerId, ownerIds);
List<PmOwnerHouseRel> rels = pmOwnerHouseRelService.list(relQueryWrapper);
// 为每个业主设置房屋ID
if (rels != null && !rels.isEmpty()) {
for (PmOwner pmOwner : page.getList()) {
for (PmOwnerHouseRel rel : rels) {
if (rel.getOwnerId().equals(pmOwner.getId())) {
pmOwner.setHouseId(rel.getHouseId());
break;
}
}
}
}
}
return CommonResult.success(page);
}
@ -158,6 +227,17 @@ public class PmOwnerController {
@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
public CommonResult<PmOwner> info(@PathVariable("id") Long id){
PmOwner pmOwner = pmOwnerService.getById(id);
// 查询业主房屋关联关系
if (pmOwner != null) {
LambdaQueryWrapper<PmOwnerHouseRel> relQueryWrapper = new LambdaQueryWrapper<>();
relQueryWrapper.eq(PmOwnerHouseRel::getOwnerId, id);
List<PmOwnerHouseRel> rels = pmOwnerHouseRelService.list(relQueryWrapper);
if (rels != null && !rels.isEmpty()) {
pmOwner.setHouseId(rels.get(0).getHouseId());
}
}
return CommonResult.success(pmOwner);
}
@ -168,6 +248,15 @@ public class PmOwnerController {
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody PmOwner pmOwner){
if (pmOwnerService.save(pmOwner)) {
// 如果选择了房屋,创建业主房屋关联关系
if (pmOwner.getHouseId() != null) {
PmOwnerHouseRel rel = new PmOwnerHouseRel();
rel.setOwnerId(pmOwner.getId());
rel.setHouseId(pmOwner.getHouseId());
rel.setRelType("1");
rel.setBindTime(new java.util.Date());
pmOwnerHouseRelService.save(rel);
}
return CommonResult.success();
}
return CommonResult.failed();
@ -179,6 +268,35 @@ public class PmOwnerController {
@RequestMapping(value = "/update", method = RequestMethod.POST)
public CommonResult<String> update(@RequestBody PmOwner pmOwner){
if (pmOwnerService.updateById(pmOwner)) {
// 处理业主房屋关联关系
LambdaQueryWrapper<PmOwnerHouseRel> relQueryWrapper = new LambdaQueryWrapper<>();
relQueryWrapper.eq(PmOwnerHouseRel::getOwnerId, pmOwner.getId());
List<PmOwnerHouseRel> existingRels = pmOwnerHouseRelService.list(relQueryWrapper);
if (pmOwner.getHouseId() != null) {
// 如果选择了房屋
if (existingRels != null && !existingRels.isEmpty()) {
// 更新现有的关联关系
PmOwnerHouseRel existingRel = existingRels.get(0);
existingRel.setHouseId(pmOwner.getHouseId());
existingRel.setRelType("1");
existingRel.setBindTime(new java.util.Date());
pmOwnerHouseRelService.updateById(existingRel);
} else {
// 创建新的关联关系
PmOwnerHouseRel rel = new PmOwnerHouseRel();
rel.setOwnerId(pmOwner.getId());
rel.setHouseId(pmOwner.getHouseId());
rel.setRelType("1");
rel.setBindTime(new java.util.Date());
pmOwnerHouseRelService.save(rel);
}
} else {
// 如果没有选择房屋,删除现有的关联关系
if (existingRels != null && !existingRels.isEmpty()) {
pmOwnerHouseRelService.removeByIds(existingRels.stream().map(PmOwnerHouseRel::getId).collect(java.util.stream.Collectors.toList()));
}
}
return CommonResult.success();
}
return CommonResult.failed();
@ -190,6 +308,13 @@ public class PmOwnerController {
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public CommonResult<String> delete(@RequestBody Long[] ids){
if (pmOwnerService.removeByIds(Arrays.asList(ids))) {
// 删除业主时,同时删除业主房屋关联关系
LambdaQueryWrapper<PmOwnerHouseRel> relQueryWrapper = new LambdaQueryWrapper<>();
relQueryWrapper.in(PmOwnerHouseRel::getOwnerId, Arrays.asList(ids));
List<PmOwnerHouseRel> rels = pmOwnerHouseRelService.list(relQueryWrapper);
if (rels != null && !rels.isEmpty()) {
pmOwnerHouseRelService.removeByIds(rels.stream().map(PmOwnerHouseRel::getId).collect(java.util.stream.Collectors.toList()));
}
return CommonResult.success();
}
return CommonResult.failed();

@ -1,7 +1,9 @@
package com.zbkj.modules.autogencode.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -19,7 +21,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.modules.autogencode.entity.PmTenant;
import com.zbkj.modules.autogencode.entity.PmTenantHouseRel;
import com.zbkj.modules.autogencode.service.PmTenantService;
import com.zbkj.modules.autogencode.service.PmTenantHouseRelService;
@ -32,6 +36,9 @@ import com.zbkj.modules.autogencode.service.PmTenantService;
public class PmTenantController {
@Autowired
private PmTenantService pmTenantService;
@Autowired
private PmTenantHouseRelService pmTenantHouseRelService;
@ -156,9 +163,9 @@ public class PmTenantController {
*
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody PmTenant pmTenant){
public CommonResult<PmTenant> save(@RequestBody PmTenant pmTenant){
if (pmTenantService.save(pmTenant)) {
return CommonResult.success();
return CommonResult.success(pmTenant);
}
return CommonResult.failed();
}
@ -185,4 +192,28 @@ public class PmTenantController {
return CommonResult.failed();
}
/**
* ID
*/
@ApiOperation(value = "根据业主ID获取租户列表")
@RequestMapping(value = "/listByOwnerId/{ownerId}", method = RequestMethod.GET)
public CommonResult<CommonPage<PmTenant>> getListByOwnerId(@PathVariable("ownerId") Long ownerId, @Validated PageParamRequest pageParamRequest) {
LambdaQueryWrapper<PmTenantHouseRel> relQueryWrapper = new LambdaQueryWrapper<>();
relQueryWrapper.eq(PmTenantHouseRel::getOwnerId, ownerId);
relQueryWrapper.eq(PmTenantHouseRel::getDelFlag, "0");
List<PmTenantHouseRel> rels = pmTenantHouseRelService.list(relQueryWrapper);
List<Long> tenantIds = rels.stream().map(PmTenantHouseRel::getTenantHouseId).collect(Collectors.toList());
LambdaQueryWrapper<PmTenant> queryWrapper = new LambdaQueryWrapper<>();
if (!tenantIds.isEmpty()) {
queryWrapper.in(PmTenant::getId, tenantIds);
} else {
queryWrapper.eq(PmTenant::getId, -1L);
}
CommonPage<PmTenant> page = CommonPage.restPage(pmTenantService.pageList(queryWrapper, pageParamRequest));
return CommonResult.success(page);
}
}

@ -161,9 +161,9 @@ public class PmTenantHouseController {
*
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody PmTenantHouse pmTenantHouse){
public CommonResult<PmTenantHouse> save(@RequestBody PmTenantHouse pmTenantHouse){
if (pmTenantHouseService.save(pmTenantHouse)) {
return CommonResult.success();
return CommonResult.success(pmTenantHouse);
}
return CommonResult.failed();
}

@ -2,6 +2,7 @@ package com.zbkj.modules.autogencode.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@ -74,18 +75,21 @@ public class DcVisitBook implements Serializable {
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
@ApiModelProperty(value = "预约起始时间(时间戳)")
private Long visitStartTime;
private Date visitStartTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
@ApiModelProperty(value = "预约结束时间(时间戳)")
private Long visitEndTime;
private Date visitEndTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
@ApiModelProperty(value = "预约申请时间(时间戳)")
private Long createdTime;
private Date createdTime;
/**
* 访
*/
@ -166,5 +170,10 @@ public class DcVisitBook implements Serializable {
*/
@ApiModelProperty(value = "领导确认")
private String leaderConfirm;
/**
* id
*/
@ApiModelProperty(value = "微信id")
private String openid;
}

@ -1,6 +1,7 @@
package com.zbkj.modules.autogencode.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
@ -16,48 +17,48 @@ public class PmOwner implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
* id
*/
@ApiModelProperty(value = "id")
@TableId(type = IdType.AUTO)
private Long id;
/**
*
*
*/
@ApiModelProperty(value = "业主姓名")
private String ownerName;
/**
*
*
*/
@ApiModelProperty(value = "业主类型")
private String ownerType;
/**
*
*
*/
@ApiModelProperty(value = "业主身份证")
private String ownerIdcard;
/**
*
*
*/
@ApiModelProperty(value = "联系电话")
private String phone;
/**
*
*
*/
@ApiModelProperty(value = "电子邮箱")
private String email;
/**
*
*
*/
@ApiModelProperty(value = "紧急联系人")
private String emergencyContact;
/**
*
*
*/
@ApiModelProperty(value = "紧急联系电话")
private String emergencyPhone;
/**
*
*
*/
@ApiModelProperty(value = "业主状态")
private String status;
@ -68,42 +69,49 @@ public class PmOwner implements Serializable {
private Long deptId;
/**
*
* ID
*/
@TableField(exist = false)
@ApiModelProperty(value = "房屋ID")
private Long houseId;
/**
*
*/
@ApiModelProperty(value = "备注")
private String remark;
/**
* 0 2
* 0 2
*/
@ApiModelProperty(value = "删除标志0代表存在 2代表删除")
private String delFlag;
/**
*
*
*/
@ApiModelProperty(value = "创建部门")
private Long createDept;
/**
*
*
*/
@ApiModelProperty(value = "创建人")
private Long createBy;
/**
*
*
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
*
*
*/
@ApiModelProperty(value = "修改人")
private Long updateBy;
/**
*
*
*/
@ApiModelProperty(value = "修改时间")
private Date updateTime;
/**
* ID
* ID
*/
@ApiModelProperty(value = "租户ID")
private String tenantId;

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zbkj.modules.autogencode.dao.SysPostDao">
<!-- 根据包名 模块名 以及类名 生成Mapper XML 配置文件 -->
<resultMap type="com.zbkj.modules.autogencode.entity.SysPost" id="sysPostMap">
<result property="postId" column="post_id"/>
<result property="postCode" column="post_code"/>
<result property="postName" column="post_name"/>
<result property="postSort" column="post_sort"/>
<result property="status" column="status"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
<result property="deptId" column="dept_id"/>
<result property="delFlag" column="del_flag"/>
<result property="tenantId" column="tenant_id"/>
<result property="updatestamp" column="updatestamp"/>
<result property="syncstamp" column="syncstamp"/>
</resultMap>
</mapper>

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zbkj.modules.autogencode.dao.SysUserPostDao">
<!-- 根据包名 模块名 以及类名 生成Mapper XML 配置文件 -->
<resultMap type="com.zbkj.modules.autogencode.entity.SysUserPost" id="sysUserPostMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="postId" column="post_id"/>
<result property="deptId" column="dept_id"/>
<result property="delFlag" column="del_flag"/>
<result property="tenantId" column="tenant_id"/>
<result property="updatestamp" column="updatestamp"/>
<result property="syncstamp" column="syncstamp"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>

@ -0,0 +1,73 @@
package com.zbkj.common.handler;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* List<String>
* Java List<String>
*/
@MappedTypes({List.class})
public class ListStringTypeHandler implements TypeHandler<List<String>> {
private static final Logger logger = LoggerFactory.getLogger(ListStringTypeHandler.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
@Override
public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null || parameter.isEmpty()) {
ps.setString(i, null);
} else {
try {
ps.setString(i, objectMapper.writeValueAsString(parameter));
} catch (JsonProcessingException e) {
logger.error("List<String> 序列化失败", e);
throw new SQLException("List<String> 序列化失败", e);
}
}
}
@Override
public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
String value = rs.getString(columnName);
return parseStringToList(value);
}
@Override
public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
String value = rs.getString(columnIndex);
return parseStringToList(value);
}
@Override
public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
String value = cs.getString(columnIndex);
return parseStringToList(value);
}
private List<String> parseStringToList(String value) {
if (value == null || value.trim().isEmpty()) {
return null;
}
try {
return objectMapper.readValue(value, List.class);
} catch (JsonProcessingException e) {
logger.error("List<String> 反序列化失败,值: {}", value, e);
return null;
}
}
}

@ -0,0 +1,94 @@
package com.zbkj.common.model.system;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
@TableName("sys_post")
public class SysPost implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ApiModelProperty(value = "岗位ID")
@TableId
private String postId;
/**
*
*/
@ApiModelProperty(value = "岗位编码")
private String postCode;
/**
*
*/
@ApiModelProperty(value = "岗位名称")
private String postName;
/**
*
*/
@ApiModelProperty(value = "显示顺序")
private Integer postSort;
/**
* 0 1
*/
@ApiModelProperty(value = "状态0正常 1停用")
private String status;
/**
*
*/
@ApiModelProperty(value = "创建者")
private String createBy;
/**
*
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
*
*/
@ApiModelProperty(value = "更新者")
private String updateBy;
/**
*
*/
@ApiModelProperty(value = "修改时间")
private Date updateTime;
/**
*
*/
@ApiModelProperty(value = "备注")
private String remark;
/**
* id
*/
@ApiModelProperty(value = "部门id 权限标识")
private String deptId;
/**
* 1 ,0
*/
@ApiModelProperty(value = "删除标示 默认为1 有效数据 ,0为无效已删除")
private String delFlag;
/**
* id
*/
@ApiModelProperty(value = "租户id")
private String tenantId;
/**
*
*/
@ApiModelProperty(value = "更新时间")
private Date updatestamp;
/**
*
*/
@ApiModelProperty(value = "同步时间")
private Date syncstamp;
}

@ -0,0 +1,79 @@
package com.zbkj.common.model.system;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
@TableName("sys_user_post")
public class SysUserPost implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@ApiModelProperty(value = "主键")
@TableId
private String id;
/**
* ID
*/
@ApiModelProperty(value = "用户ID")
private String userId;
/**
* ID
*/
@ApiModelProperty(value = "岗位ID")
private String postId;
/**
* id
*/
@ApiModelProperty(value = "部门id 权限标识")
private String deptId;
/**
* 1 ,0
*/
@ApiModelProperty(value = "删除标示 默认为1 有效数据 ,0为无效已删除")
private String delFlag;
/**
* id
*/
@ApiModelProperty(value = "租户id")
private String tenantId;
/**
*
*/
@ApiModelProperty(value = "更新时间")
private Date updatestamp;
/**
*
*/
@ApiModelProperty(value = "同步时间")
private Date syncstamp;
/**
*
*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**
*
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
*
*/
@ApiModelProperty(value = "修改人")
private String updateBy;
/**
*
*/
@ApiModelProperty(value = "修改时间")
private Date updateTime;
}

@ -1,8 +1,10 @@
package com.zbkj.common.model.system;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zbkj.common.handler.ListStringTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -11,6 +13,7 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
*
@ -75,4 +78,8 @@ public class SystemAdmin implements Serializable {
@ApiModelProperty(value = "是否接收短信")
private Boolean isSms;
@ApiModelProperty(value = "岗位ID")
@TableField(exist = false)
private List<String> posts;
}

@ -70,4 +70,7 @@ public class SystemAdminAddRequest implements Serializable {
@TableField(exist = false)
private List<String> depts;
@TableField(exist = false)
private List<String> posts;
}

@ -40,4 +40,7 @@ public class SystemAdminRequest implements Serializable {
@ApiModelProperty(value = "后台管理员状态 1有效0无效")
private Boolean status;
@ApiModelProperty(value = "部门ID")
private String deptId;
}

@ -71,4 +71,7 @@ public class SystemAdminUpdateRequest implements Serializable {
@TableField(exist = false)
private List<String> depts;
@TableField(exist = false)
private List<String> posts;
}

@ -65,4 +65,10 @@ public class SystemAdminResponse implements Serializable {
@ApiModelProperty(value = "部门名称列表")
private List<String> deptNames;
@ApiModelProperty(value = "岗位ID列表")
private List<String> posts;
@ApiModelProperty(value = "岗位名称列表")
private List<String> postNames;
}

@ -0,0 +1,13 @@
package com.zbkj.service.dao;
import com.zbkj.common.model.system.SysPost;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* DAO
*/
@Mapper
public interface SysPostDao extends BaseMapper<SysPost> {
}

@ -0,0 +1,13 @@
package com.zbkj.service.dao;
import com.zbkj.common.model.system.SysUserPost;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* DAO
*/
@Mapper
public interface SysUserPostDao extends BaseMapper<SysUserPost> {
}

@ -0,0 +1,23 @@
package com.zbkj.service.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zbkj.common.model.system.SysPost;
import com.zbkj.common.request.PageParamRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import java.util.List;
import java.util.Map;
/**
*
* +----------------------------------------------------------------------
*/
public interface SysPostService extends IService<SysPost> {
/**
* SysPost
* @param pageParamRequest
* @return
*/
List<SysPost> pageList(LambdaQueryWrapper<SysPost> queryWrapper, PageParamRequest pageParamRequest);
}

@ -0,0 +1,23 @@
package com.zbkj.service.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zbkj.common.model.system.SysUserPost;
import com.zbkj.common.request.PageParamRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import java.util.List;
import java.util.Map;
/**
*
* +----------------------------------------------------------------------
*/
public interface SysUserPostService extends IService<SysUserPost> {
/**
* SysUserPost
* @param pageParamRequest
* @return
*/
List<SysUserPost> pageList(LambdaQueryWrapper<SysUserPost> queryWrapper, PageParamRequest pageParamRequest);
}

@ -0,0 +1,42 @@
package com.zbkj.service.service.impl;
import com.github.pagehelper.PageHelper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.zbkj.service.dao.SysPostDao;
import com.zbkj.common.model.system.SysPost;
import com.zbkj.service.service.SysPostService;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.request.PageParamRequest;
import javax.annotation.Resource;
import java.util.Map;
import java.util.Arrays;
import java.util.List;
@Service("sysPostService")
public class SysPostServiceImpl extends ServiceImpl<SysPostDao, SysPost> implements SysPostService {
@Resource
private SysPostDao dao;
/**
*
*/
@Override
public List<SysPost> pageList(LambdaQueryWrapper<SysPost> queryWrapper, PageParamRequest pageParamRequest) {
PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
return dao.selectList(queryWrapper);
}
}

@ -0,0 +1,42 @@
package com.zbkj.service.service.impl;
import com.github.pagehelper.PageHelper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.zbkj.service.dao.SysUserPostDao;
import com.zbkj.common.model.system.SysUserPost;
import com.zbkj.service.service.SysUserPostService;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.request.PageParamRequest;
import javax.annotation.Resource;
import java.util.Map;
import java.util.Arrays;
import java.util.List;
@Service("sysUserPostService")
public class SysUserPostServiceImpl extends ServiceImpl<SysUserPostDao, SysUserPost> implements SysUserPostService {
@Resource
private SysUserPostDao dao;
/**
*
*/
@Override
public List<SysUserPost> pageList(LambdaQueryWrapper<SysUserPost> queryWrapper, PageParamRequest pageParamRequest) {
PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
return dao.selectList(queryWrapper);
}
}

@ -7,10 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zbkj.common.exception.CrmebException;
import com.zbkj.common.model.system.SysDept;
import com.zbkj.common.model.system.SysDeptUser;
import com.zbkj.common.model.system.SystemAdmin;
import com.zbkj.common.model.system.SystemRole;
import com.zbkj.common.model.system.*;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.request.SystemAdminAddRequest;
import com.zbkj.common.request.SystemAdminRequest;
@ -43,7 +40,7 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
@Autowired
private SystemRoleService systemRoleService;
@Autowired
private UserService userService;
@ -53,6 +50,12 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
@Autowired
private SysDeptUserService sysDeptUserService;
@Autowired
private SysPostService sysPostService;
@Autowired
private SysUserPostService sysUserPostService;
/**
*
@ -76,12 +79,33 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
lambdaQueryWrapper.and(i -> i.like(SystemAdmin::getRealName, request.getRealName())
.or().like(SystemAdmin::getAccount, request.getRealName()));
}
// 如果指定了部门ID需要先查询该部门及其子部门下的管理员
List<Long> adminIdsByDept = null;
if (StrUtil.isNotBlank(request.getDeptId())) {
// 递归获取所有子部门ID
List<Long> allDeptIds = getAllChildDeptIds(Long.valueOf(request.getDeptId()));
// 查询这些部门下的所有管理员
List<SysDeptUser> sysDeptUsers = sysDeptUserService.list(Wrappers.<SysDeptUser>lambdaQuery()
.in(SysDeptUser::getDeptId, allDeptIds));
if (CollUtil.isNotEmpty(sysDeptUsers)) {
adminIdsByDept = sysDeptUsers.stream().map(SysDeptUser::getUserId).collect(Collectors.toList());
lambdaQueryWrapper.in(SystemAdmin::getId, adminIdsByDept);
} else {
// 如果这些部门下没有管理员,直接返回空列表
return CollUtil.newArrayList();
}
}
List<SystemAdmin> systemAdmins = dao.selectList(lambdaQueryWrapper);
if (CollUtil.isEmpty(systemAdmins)) {
return CollUtil.newArrayList();
}
List<SystemAdminResponse> systemAdminResponses = new ArrayList<>();
List<SystemRole> roleList = systemRoleService.getAllList();
List<SysPost> postList = sysPostService.list();
for (SystemAdmin admin : systemAdmins) {
SystemAdminResponse sar = new SystemAdminResponse();
BeanUtils.copyProperties(admin, sar);
@ -109,12 +133,51 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
sar.setDepts(deptIds.stream().map(String::valueOf).collect(Collectors.toList()));
sar.setDeptNames(deptList.stream().map(SysDept::getDeptName).collect(Collectors.toList()));
}
// 获取岗位信息
List<SysUserPost> sysUserPosts = sysUserPostService.list(Wrappers.<SysUserPost>lambdaQuery()
.eq(SysUserPost::getUserId, String.valueOf(admin.getId())));
if (CollUtil.isNotEmpty(sysUserPosts)) {
List<String> postIds = sysUserPosts.stream().map(SysUserPost::getPostId).collect(Collectors.toList());
List<String> postNames = new ArrayList<>();
for (String postId : postIds) {
List<SysPost> hasPosts = postList.stream().filter(e -> e.getPostId().equals(postId)).collect(Collectors.toList());
if (hasPosts.size() > 0) {
postNames.add(hasPosts.stream().map(SysPost::getPostName).collect(Collectors.joining(",")));
}
}
sar.setPosts(postIds);
sar.setPostNames(postNames);
}
systemAdminResponses.add(sar);
}
return systemAdminResponses;
}
/**
* ID
* @param deptId ID
* @return ID
*/
private List<Long> getAllChildDeptIds(Long deptId) {
List<Long> deptIds = new ArrayList<>();
deptIds.add(deptId);
// 查询子部门
List<SysDept> childDepts = sysDeptService.list(Wrappers.<SysDept>lambdaQuery()
.eq(SysDept::getParentId, deptId));
if (CollUtil.isNotEmpty(childDepts)) {
for (SysDept childDept : childDepts) {
deptIds.addAll(getAllChildDeptIds(childDept.getDeptId()));
}
}
return deptIds;
}
/**
*
* @param systemAdminAddRequest
@ -137,7 +200,7 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
String pwd = CrmebUtil.encryptPassword(systemAdmin.getPwd(), systemAdmin.getAccount());
systemAdmin.setPwd(pwd);
// 保存管理员信息
boolean adminSaved = save(systemAdmin);
@ -160,6 +223,23 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
}
}
// 处理岗位关联
List<String> posts = systemAdminAddRequest.getPosts();
if (CollUtil.isNotEmpty(posts) && systemAdmin.getId() != null) {
List<SysUserPost> sysUserPostList = new ArrayList<>();
for (String postId : posts) {
if (StrUtil.isNotBlank(postId)) {
SysUserPost sysUserPost = new SysUserPost();
sysUserPost.setUserId(String.valueOf(systemAdmin.getId()));
sysUserPost.setPostId(postId);
sysUserPostList.add(sysUserPost);
}
}
if (CollUtil.isNotEmpty(sysUserPostList)) {
sysUserPostService.saveBatch(sysUserPostList);
}
}
// 将相关信息保存到eb_user表
User user = new User();
user.setAccount(systemAdmin.getAccount());
@ -214,7 +294,7 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
String pwd = CrmebUtil.encryptPassword(systemAdminRequest.getPwd(), systemAdminRequest.getAccount());
systemAdmin.setPwd(pwd);
}
// 更新管理员信息
boolean adminUpdated = updateById(systemAdmin);
@ -244,6 +324,29 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
sysDeptUserService.saveBatch(sysDeptUserList);
}
}
// 处理岗位关联
List<String> posts = systemAdminRequest.getPosts();
// 删除原有岗位关联
sysUserPostService.remove(Wrappers.<SysUserPost>lambdaQuery()
.eq(SysUserPost::getUserId, String.valueOf(adminId)));
// 新增岗位关联
if (CollUtil.isNotEmpty(posts)) {
List<SysUserPost> sysUserPostList = new ArrayList<>();
for (String postId : posts) {
if (StrUtil.isNotBlank(postId)) {
SysUserPost sysUserPost = new SysUserPost();
sysUserPost.setUserId(String.valueOf(adminId));
sysUserPost.setPostId(postId);
sysUserPostList.add(sysUserPost);
}
}
if (CollUtil.isNotEmpty(sysUserPostList)) {
sysUserPostService.saveBatch(sysUserPostList);
}
}
// 更新eb_user表
LambdaQueryWrapper<User> userQuery = Wrappers.lambdaQuery();
@ -390,7 +493,25 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
response.setDepts(deptIds.stream().map(String::valueOf).collect(Collectors.toList()));
response.setDeptNames(deptList.stream().map(SysDept::getDeptName).collect(Collectors.toList()));
}
// 获取岗位信息
List<SysPost> postList = sysPostService.list();
List<SysUserPost> sysUserPosts = sysUserPostService.list(Wrappers.<SysUserPost>lambdaQuery()
.eq(SysUserPost::getUserId, String.valueOf(id)));
if (CollUtil.isNotEmpty(sysUserPosts)) {
List<String> postIds = sysUserPosts.stream().map(SysUserPost::getPostId).collect(Collectors.toList());
List<String> postNames = new ArrayList<>();
for (String postId : postIds) {
List<SysPost> hasPosts = postList.stream().filter(e -> e.getPostId().equals(postId)).collect(Collectors.toList());
if (hasPosts.size() > 0) {
postNames.add(hasPosts.stream().map(SysPost::getPostName).collect(Collectors.joining(",")));
}
}
response.setPosts(postIds);
response.setPostNames(postNames);
}
return response;
}

Loading…
Cancel
Save