修改流程,部门相关代码
dev
zxf 2 months ago
parent d1c381bdd2
commit 72f95018ed

@ -7,3 +7,64 @@ export function deptTreeSelect() {
method: 'get'
})
}
/**
* 新增sysdept
* @param pram
*/
export function sysdeptCreateApi(data) {
return request({
url: `autogencode/sysdept/save`,
method: 'POST',
data
})
}
/**
* sysdept更新
* @param pram
*/
export function sysdeptUpdateApi(data) {
return request({
url: `autogencode/sysdept/update`,
method: 'POST',
data
})
}
/**
* sysdept详情
* @param pram
*/
export function sysdeptDetailApi(id) {
return request({
url: `autogencode/sysdept/info/${id}`,
method: 'GET'
})
}
/**
* sysdept批量删除
* @param ids
*/
export function sysdeptDeleteApi(ids) {
return request({
url: `autogencode/sysdept/delete`,
method: 'POST',
data: ids
})
}
/**
* sysdept列表
* @param pram
*/
export function sysdeptListApi(params) {
return request({
url: `autogencode/sysdept/list`,
method: 'GET',
params
})
}

@ -1,16 +1,25 @@
import request from '@/utils/request'
// 查询部门树
export function deptTreeSelect(params) {
return request({
url: '/autogencode/sysdept/tree',
method: 'get',
params
})
}
/**
* 新增sysdept
* @param pram
*/
export function sysdeptCreateApi(data) {
return request({
url: `autogencode/sysdept/save`,
method: 'POST',
data
})
return request({
url: `autogencode/sysdept/save`,
method: 'POST',
data
})
}
/**
@ -18,11 +27,11 @@ export function sysdeptCreateApi(data) {
* @param pram
*/
export function sysdeptUpdateApi(data) {
return request({
url: `autogencode/sysdept/update`,
method: 'POST',
data
})
return request({
url: `autogencode/sysdept/update`,
method: 'POST',
data
})
}
/**
@ -30,10 +39,10 @@ export function sysdeptUpdateApi(data) {
* @param pram
*/
export function sysdeptDetailApi(id) {
return request({
url: `autogencode/sysdept/info/${id}`,
method: 'GET'
})
return request({
url: `autogencode/sysdept/info/${id}`,
method: 'GET'
})
}
/**
@ -41,11 +50,11 @@ export function sysdeptDetailApi(id) {
* @param ids
*/
export function sysdeptDeleteApi(ids) {
return request({
url: `autogencode/sysdept/delete`,
method: 'POST',
data: ids
})
return request({
url: `autogencode/sysdept/delete`,
method: 'POST',
data: ids
})
}
@ -54,10 +63,10 @@ export function sysdeptDeleteApi(ids) {
* @param pram
*/
export function sysdeptListApi(params) {
return request({
url: `autogencode/sysdept/list`,
method: 'GET',
params
})
return request({
url: `autogencode/sysdept/list`,
method: 'GET',
params
})
}

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

@ -1,165 +1,85 @@
<template>
<div class="divBox">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="部门id">
<el-input v-model="dataForm.deptId" placeholder="请输入部门id" clearable></el-input>
<el-card class="box-card">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
<el-form-item label="部门名称" prop="deptName">
<el-input
v-model="queryParams.deptName"
placeholder="请输入部门名称"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="父部门id">
<el-input v-model="dataForm.parentId" placeholder="请输入父部门id" clearable></el-input>
</el-form-item>
<el-form-item label="祖级列表">
<el-input v-model="dataForm.ancestors" placeholder="请输入祖级列表" clearable></el-input>
</el-form-item>
<el-form-item label="部门名称">
<el-input v-model="dataForm.deptName" placeholder="请输入部门名称" clearable></el-input>
</el-form-item>
<el-form-item label="显示顺序">
<el-input v-model="dataForm.orderNum" placeholder="请输入显示顺序" clearable></el-input>
</el-form-item>
<el-form-item label="负责人">
<el-input v-model="dataForm.leader" 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.isWorkArea" placeholder="请输入是否作业区" clearable></el-input>
</el-form-item>
<el-form-item label="部门状态0正常 1停用">
<el-input v-model="dataForm.status" placeholder="请输入部门状态0正常 1停用" clearable></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="dataForm.remark" placeholder="请输入备注" clearable></el-input>
<el-form-item label="部门状态" prop="status">
<el-select v-model="queryParams.status" placeholder="部门状态" clearable size="small">
<el-option
v-for="item in statusOptions"
:key="item.value"
:label="item.label"
:value="item.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:sysdept:save']" type="primary" @click="addOrUpdateHandle()"></el-button>
<el-button v-hasPermi="['autogencode:sysdept:delete']" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0"></el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['autogencode:sysdept:save']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠</el-button>
</el-col>
</el-row>
<el-table
:data="dataList"
border
v-loading="dataListLoading"
@selection-change="selectionChangeHandle"
v-if="refreshTable"
v-loading="listLoading"
:data="deptList"
row-key="deptId"
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
:header-cell-style=" {fontWeight:'bold'}"
style="width: 100%;">
<el-table-column
type="selection"
header-align="center"
align="center"
width="50">
</el-table-column>
<el-table-column
prop="deptId"
header-align="center"
align="center"
label="部门id">
</el-table-column>
<el-table-column
prop="parentId"
header-align="center"
align="center"
label="父部门id">
</el-table-column>
<el-table-column
prop="ancestors"
header-align="center"
align="center"
label="祖级列表">
</el-table-column>
<el-table-column
prop="deptName"
header-align="center"
align="center"
label="部门名称">
</el-table-column>
<el-table-column
prop="orderNum"
header-align="center"
align="center"
label="显示顺序">
</el-table-column>
<el-table-column
prop="leader"
header-align="center"
align="center"
label="负责人">
</el-table-column>
<el-table-column
prop="phone"
header-align="center"
align="center"
label="联系电话">
</el-table-column>
<el-table-column
prop="email"
header-align="center"
align="center"
label="邮箱">
</el-table-column>
<el-table-column
prop="isWorkArea"
header-align="center"
align="center"
label="是否作业区">
</el-table-column>
<el-table-column
prop="status"
header-align="center"
align="center"
label="部门状态0正常 1停用">
</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"
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
prop="remark"
header-align="center"
align="center"
label="备注">
label="部门名称"
:show-overflow-tooltip="true"
width="160"
></el-table-column>
<el-table-column prop="orderNum" label="显示顺序" width="100" align="center"></el-table-column>
<el-table-column prop="status" label="状态" width="100" align="center">
<template slot-scope="scope">
<el-tag :type="scope.row.status == 0 ? '' : 'danger'">
{{ scope.row.status == 0 ? '正常' : '停用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column
prop="delFlag"
header-align="center"
align="center"
label="删除标志0代表存在 2代表删除">
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
prop="tenantId"
header-align="center"
align="center"
label="">
<el-table-column prop="isWorkArea" label="是否作业区" width="120" align="center">
<template slot-scope="scope">
<span>{{ scope.row.isWorkArea ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
@ -168,57 +88,63 @@
width="150"
label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.deptId)">{{ '' }}</el-button>
<el-button v-hasPermi="['autogencode:sysdept:delete']" type="text" size="small" @click="deleteHandle(scope.row.deptId)" style="color: #f56c6c;"></el-button>
<el-button type="text" size="small" @click="handleUpdate(scope.row.deptId)">{{ '' }}</el-button>
<el-button v-hasPermi="['autogencode:sysdept:delete']" type="text" size="small" @click="handleDelete(scope.row.deptId)" 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>
</el-card>
</div>
</template>
<script>
import AddOrUpdate from './sysdept-add-and-update'
import * as api from '@/api/sysdept.js'
import {Debounce} from '@/utils/validate'
export default {
name: "Dept",
components: {
AddOrUpdate
},
data () {
return {
dataForm: {
deptId: '',
parentId: '',
ancestors: '',
//
listLoading: true,
//
showSearch: true,
//
deptList: [],
//
title: "",
//
open: false,
//
isExpandAll: false,
//
refreshTable: true,
//
queryParams: {
deptName: '',
orderNum: '',
leader: '',
phone: '',
email: '',
isWorkArea: '',
status: '',
remark: '',
status: ''
},
dataList: [],
//
deptDataList: [],
//
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false
//
addOrUpdateVisible: false,
//
statusOptions: [
{value: 0, label: '正常'},
{value: 1, label: '停用'}
]
}
},
components: {
AddOrUpdate
},
activated () {
this.getDataList()
},
@ -227,104 +153,66 @@
this.getDataList()
},
methods: {
//
resetForm() {
this.dataForm = {
deptId: '',
parentId: '',
ancestors: '',
deptName: '',
orderNum: '',
leader: '',
phone: '',
email: '',
isWorkArea: '',
status: '',
remark: '',
}
this.getDataList()
},
//
getDataList () {
this.dataListLoading = true
// SysDeptControllerPageParamRequest
const params = {
page: this.pageIndex,
limit: this.pageSize
}
//
if (this.dataForm.deptId) params.deptId = this.dataForm.deptId;
if (this.dataForm.parentId) params.parentId = this.dataForm.parentId;
if (this.dataForm.ancestors) params.ancestors = this.dataForm.ancestors;
if (this.dataForm.deptName) params.deptName = this.dataForm.deptName;
if (this.dataForm.orderNum) params.orderNum = this.dataForm.orderNum;
if (this.dataForm.leader) params.leader = this.dataForm.leader;
if (this.dataForm.phone) params.phone = this.dataForm.phone;
if (this.dataForm.email) params.email = this.dataForm.email;
if (this.dataForm.isWorkArea) params.isWorkArea = this.dataForm.isWorkArea;
if (this.dataForm.status) params.status = this.dataForm.status;
if (this.dataForm.remark) params.remark = this.dataForm.remark;
api.sysdeptListApi(params).then(res => {
this.dataListLoading = false
this.dataList = res.list || [];
this.totalPage = res.total;
/** 查询部门列表 */
getDataList() {
this.listLoading = true;
//
api.deptTreeSelect(this.queryParams).then(res => {
this.deptList = res;
this.listLoading = false;
}).catch(e => {
this.dataListLoading = false
this.listLoading = false;
this.$message.error('获取部门列表失败');
})
},
//
sizeChangeHandle (val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
/** 搜索按钮操作 */
handleQuery() {
this.getDataList();
},
//
currentChangeHandle (val) {
this.pageIndex = val
this.getDataList()
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
deptName: '',
status: ''
};
this.handleQuery();
},
//
selectionChangeHandle (val) {
this.dataListSelections = val
/** 新增按钮操作 */
handleAdd() {
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(null);
});
},
// /
addOrUpdateHandle (id) {
this.addOrUpdateVisible = true
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id)
})
this.refreshTable = true;
});
},
//
deleteHandle (id) {
let ids = []
let idText = ''
// id
if (id) {
ids = [id]
idText = id
} else {
//
ids = this.dataListSelections.map(item => {
return item.deptId
})
idText = ids.join(',')
}
this.$confirm(`确定进行删除操作?`, '提示', {
/** 修改按钮操作 */
handleUpdate(id) {
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id);
});
},
/** 删除按钮操作 */
handleDelete(id) {
this.$confirm(`确定删除部门吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// API
api.sysdeptDeleteApi(ids).then(res => {
this.$message.success('删除成功')
this.getDataList()
})
})
},
// API
api.sysdeptDeleteApi([id]).then(res => {
this.$message.success('删除成功');
this.getDataList();
});
}).catch(() => {});
}
}
}
</script>

@ -3,39 +3,71 @@
<el-dialog
:title="!dataForm.deptId ? '添加' : '修改'"
:close-on-click-modal="false"
:visible.sync="visible">
:visible.sync="visible"
width="600px">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="80px">
<el-form-item label="父部门id" prop="parentId">
<el-input v-model="dataForm.parentId" placeholder="父部门id"></el-input>
</el-form-item>
<el-form-item label="祖级列表" prop="ancestors">
<el-input v-model="dataForm.ancestors" placeholder="祖级列表"></el-input>
</el-form-item>
<el-form-item label="部门名称" prop="deptName">
<el-input v-model="dataForm.deptName" placeholder="部门名称"></el-input>
</el-form-item>
<el-form-item label="显示顺序" prop="orderNum">
<el-input v-model="dataForm.orderNum" placeholder="显示顺序"></el-input>
</el-form-item>
<el-form-item label="负责人" prop="leader">
<el-input v-model="dataForm.leader" placeholder="负责人"></el-input>
</el-form-item>
<el-form-item label="联系电话" prop="phone">
<el-input v-model="dataForm.phone" placeholder="联系电话"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="dataForm.email" placeholder="邮箱"></el-input>
</el-form-item>
<el-form-item label="是否作业区" prop="isWorkArea">
<el-input v-model="dataForm.isWorkArea" placeholder="是否作业区"></el-input>
</el-form-item>
<el-form-item label="部门状态0正常 1停用" prop="status">
<el-input v-model="dataForm.status" placeholder="部门状态0正常 1停用"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="备注"></el-input>
</el-form-item>
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="100px">
<!-- 父部门选择 -->
<el-form-item label="父部门" prop="parentId">
<el-select
v-model="dataForm.parentId"
placeholder="请选择父部门"
style="width: 100%;"
filterable
allow-create
default-first-option
>
<el-option
v-for="item in deptTreeOptions"
:key="item.deptId"
:label="item.deptName"
:value="item.deptId"
style="padding-left: 20px;"
>
<template slot="default">
<span>{{ '└ ' + item.deptName }}</span>
</template>
</el-option>
</el-select>
</el-form-item>
<!-- 部门名称 -->
<el-form-item label="部门名称" prop="deptName">
<el-input v-model="dataForm.deptName" placeholder="请输入部门名称"></el-input>
</el-form-item>
<!-- 显示顺序 -->
<el-form-item label="显示顺序" prop="orderNum">
<el-input-number
v-model="dataForm.orderNum"
:min="0"
:step="1"
placeholder="请输入显示顺序"
style="width: 100%;"
></el-input-number>
</el-form-item>
<!-- 部门状态 -->
<el-form-item label="部门状态" prop="status">
<el-radio-group v-model="dataForm.status">
<el-radio :label="'0'">正常</el-radio>
<el-radio :label="'1'">停用</el-radio>
</el-radio-group>
</el-form-item>
<!-- 备注 -->
<el-form-item label="备注" prop="remark">
<el-input
v-model="dataForm.remark"
type="textarea"
placeholder="请输入备注信息"
:rows="3"
></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
@ -50,85 +82,199 @@
data () {
return {
visible: false,
//
deptTreeOptions: [],
//
originalDeptTree: [],
//
statusMap: {
'0': '正常',
'1': '停用'
},
dataForm: {
deptId: 0,
parentId: '' ,
ancestors: '' ,
parentId: '0' , //
ancestors: '0' , //
deptName: '' ,
orderNum: '' ,
orderNum: 0 , // 0
leader: '' ,
phone: '' ,
email: '' ,
isWorkArea: '' ,
status: '' ,
isWorkArea: 0 , //
status: '0' , //
remark: '' ,
},
dataRule: {
parentId: [
{ required: true, message: '父部门id 为必填项', trigger: 'blur' }
],
ancestors: [
{ required: true, message: '祖级列表 为必填项', trigger: 'blur' }
],
deptName: [
{ required: true, message: '部门名称 为必填项', trigger: 'blur' }
],
orderNum: [
{ required: true, message: '显示顺序 为必填项', trigger: 'blur' }
],
leader: [
{ required: true, message: '负责人 为必填项', trigger: 'blur' }
],
phone: [
{ required: true, message: '联系电话 为必填项', trigger: 'blur' }
],
email: [
{ required: true, message: '邮箱 为必填项', trigger: 'blur' }
],
isWorkArea: [
{ required: true, message: '是否作业区 为必填项', trigger: 'blur' }
{ required: true, message: '部门名称为必填项', trigger: 'blur' },
],
status: [
{ required: true, message: '部门状态0正常 1停用 为必填项', trigger: 'blur' }
],
remark: [
{ required: true, message: '备注 为必填项', trigger: 'blur' }
],
{ required: true, message: '部门状态为必填项', trigger: 'change' }
]
}
}
},
created() {
//
this.loadDeptTree()
},
methods: {
init (id) { //
//
async loadDeptTree() {
try {
const res = await api.deptTreeSelect()
this.originalDeptTree = res
//
this.deptTreeOptions = this.flattenDeptTree(res)
} catch (error) {
this.$message.error('加载部门树失败')
console.error('加载部门树失败:', error)
}
},
//
flattenDeptTree(tree, level = 0, prefix = '') {
let result = []
for (let i = 0; i < tree.length; i++) {
const node = { ...tree[i] }
//
let nodePrefix = prefix
if (level > 0) {
//
if (i === tree.length - 1) {
nodePrefix += '└ '
} else {
nodePrefix += '├ '
}
}
//
result.push({
...node,
displayName: nodePrefix + node.deptName,
level: level
})
//
if (node.children && node.children.length > 0) {
const childPrefix = level > 0 ? (i === tree.length - 1 ? ' ' : '│ ') : ''
result = result.concat(this.flattenDeptTree(node.children, level + 1, nodePrefix + childPrefix))
}
}
return result
},
//
async init(id) {
this.dataForm.deptId = id || 0
this.visible = true
this.$nextTick(function() {
this.$refs['dataForm'].resetFields()
if (this.dataForm.deptId) {
api.sysdeptDetailApi(id).then(function(res) {
this.dataForm = res;
}.bind(this))
//
await this.$nextTick()
this.$refs['dataForm'].resetFields()
//
if (this.dataForm.deptId) {
try {
const res = await api.sysdeptDetailApi(id)
this.dataForm = res
//
this.initParentSelection(res)
} catch (error) {
this.$message.error('加载部门详情失败')
console.error('加载部门详情失败:', error)
}
}.bind(this))
} else {
//
this.parentIdPath = []
}
},
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
if (this.dataForm.deptId) {
api.sysdeptUpdateApi(this.dataForm).then(function(res) {
this.$message.success('保存成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
} else {
api.sysdeptCreateApi(this.dataForm).then(function(res) {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
//
initParentSelection(deptData) {
// IDdataForm
this.updateAncestorsByParentId()
},
// ID
updateAncestorsByParentId() {
if (this.dataForm.parentId === '0') {
//
this.dataForm.ancestors = '0'
return
}
//
const parentNode = this.findNodeById(this.originalDeptTree, this.dataForm.parentId)
if (parentNode) {
// 使 + ID
if (parentNode.parentId === '0') {
this.dataForm.ancestors = '0,' + this.dataForm.parentId
} else {
this.dataForm.ancestors = parentNode.ancestors + ',' + this.dataForm.parentId
}
} else {
// 使
this.dataForm.ancestors = '0'
}
},
// ID
findNodeById(tree, id) {
for (const node of tree) {
if (node.deptId === id) {
return node
}
if (node.children && node.children.length > 0) {
const found = this.findNodeById(node.children, id)
if (found) {
return found
}
}
})
}
return null
},
// ID
watch: {
'dataForm.parentId': {
handler(newVal) {
this.updateAncestorsByParentId()
},
immediate: true
}
},
//
async dataSubmit() {
try {
//
await this.$refs['dataForm'].validate()
//
this.updateAncestorsByParentId()
if (this.dataForm.deptId) {
//
await api.sysdeptUpdateApi(this.dataForm)
this.$message.success('保存成功')
} else {
//
await api.sysdeptCreateApi(this.dataForm)
this.$message.success('新增成功')
}
this.visible = false
this.$emit('refreshDataList')
} catch (error) {
if (error !== false) { //
this.$message.error('操作失败,请重试')
console.error('部门操作失败:', error)
}
}
}
}
}

@ -201,7 +201,7 @@ export default {
/** 查询流程定义列表 */
getList() {
this.loading = true;
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange).params).then(response => {
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.ownProcessList = response.list;
this.total = response.total;
this.loading = false;

@ -1,13 +1,17 @@
package com.zbkj.modules.autogencode.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.common.model.system.SysDept;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.response.CommonResult;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.vo.SysDeptTreeVo;
import com.zbkj.service.service.SysDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -18,8 +22,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.modules.autogencode.entity.SysDept;
import com.zbkj.modules.autogencode.service.SysDeptService;
@ -200,4 +202,18 @@ public class SysDeptController {
return CommonResult.failed();
}
/**
*
* @param deptName
* @param status
* @return List<SysDeptTreeVo>
*/
@ApiOperation(value = "获取部门树形结构")
@RequestMapping(value = "/tree", method = RequestMethod.GET)
public CommonResult<List<SysDeptTreeVo>> getDeptTree(
@RequestParam(required = false) String deptName,
@RequestParam(required = false) String status) {
return CommonResult.success(sysDeptService.getDeptTree(deptName, status));
}
}

@ -5,9 +5,11 @@ import java.util.Map;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.common.model.system.SysDeptUser;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.response.CommonResult;
import com.zbkj.common.page.CommonPage;
import com.zbkj.service.service.SysDeptUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -18,8 +20,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zbkj.modules.autogencode.entity.SysDeptUser;
import com.zbkj.modules.autogencode.service.SysDeptUserService;

@ -26,7 +26,7 @@ import com.zbkj.modules.autogencode.service.IWfCategoryService;
* @createTime 2022/3/10 00:12
*/
@RestController
@RequestMapping("/workflow/category")
@RequestMapping("api/workflow/category")
public class WfCategoryController {
@Autowired
private IWfCategoryService categoryService;
@ -100,6 +100,18 @@ public class WfCategoryController {
return CommonResult.success(wfCategoryVoCommonPage);
}
/**
*
* @param request
* @param pageParamRequest
*/
@ApiOperation(value = "分页列表")
@RequestMapping(value = "/listAll", method = RequestMethod.GET)
public CommonResult<List<WfCategoryVo>> listAll(@Validated WfCategory request, @Validated PageParamRequest pageParamRequest) {
List<WfCategoryVo> wfCategoryVos = categoryService.queryList(request);
return CommonResult.success(wfCategoryVos);
}
/**
*

@ -29,7 +29,7 @@ import com.zbkj.modules.autogencode.service.IWfDeployService;
* @createTime 2022/3/24 20:57
*/
@RestController
@RequestMapping("/workflow/deploy")
@RequestMapping("api/workflow/deploy")
public class WfDeployController {
@Autowired
private IWfDeployService deployService;
@ -77,7 +77,7 @@ public class WfDeployController {
@ApiOperation(value = "获取BPMN XML")
@RequestMapping(value = "/bpmnXml/{definitionId}", method = RequestMethod.GET)
public CommonResult<String> getBpmnXml(@PathVariable(value = "definitionId") String definitionId) {
return CommonResult.success(deployService.queryBpmnXmlById(definitionId));
return CommonResult.success(deployService.queryBpmnXmlById(definitionId), true);
}
/**

@ -26,7 +26,7 @@ import com.zbkj.modules.autogencode.service.IWfFormService;
* @createTime 2022/3/7 22:07
*/
@RestController
@RequestMapping("/workflow/form")
@RequestMapping("api/workflow/form")
public class WfFormController {
@Autowired
private IWfFormService formService;

@ -17,7 +17,7 @@ import com.zbkj.modules.autogencode.service.IWfInstanceService;
* @createTime 2022/3/10 00:12
*/
@RestController
@RequestMapping("/workflow/instance")
@RequestMapping("api/workflow/instance")
public class WfInstanceController {
@Autowired
private IWfInstanceService instanceService;

@ -31,7 +31,7 @@ import com.zbkj.modules.autogencode.service.IWfModelService;
* @createTime 2022/6/21 9:09
*/
@RestController
@RequestMapping("/workflow/model")
@RequestMapping("api/workflow/model")
public class WfModelController {
@Autowired
private IWfModelService modelService;
@ -88,7 +88,8 @@ public class WfModelController {
@ApiOperation(value = "获取BPMN XML")
@RequestMapping(value = "/bpmnXml/{modelId}", method = RequestMethod.GET)
public CommonResult<String> getBpmnXml(@PathVariable("modelId") String modelId) {
return CommonResult.success(modelService.queryBpmnXmlById(modelId));
String s = modelService.queryBpmnXmlById(modelId);
return CommonResult.success(modelService.queryBpmnXmlById(modelId), true);
}
/**

@ -28,7 +28,7 @@ import com.zbkj.modules.autogencode.service.IWfProcessService;
* @createTime 2022/3/24 18:54
*/
@RestController
@RequestMapping("/workflow/process")
@RequestMapping("api/workflow/process")
public class WfProcessController {
@Autowired
private IWfProcessService processService;
@ -199,7 +199,7 @@ public class WfProcessController {
*/
@ApiOperation(value = "启动流程")
@RequestMapping(value = "/start/{processDefId}", method = RequestMethod.POST)
public CommonResult<String> start(@PathVariable(value = "processDefId") String processDefId, @RequestBody Map<String, Object> variables) {
public CommonResult<String> start(@PathVariable(value = "processDefId") String processDefId, @RequestParam Map<String, Object> variables) {
processService.startProcessByDefId(processDefId, variables);
return CommonResult.success("流程启动成功");
}
@ -223,18 +223,19 @@ public class WfProcessController {
@ApiOperation(value = "获取BPMN XML")
@RequestMapping(value = "/bpmnXml/{processDefId}", method = RequestMethod.GET)
public CommonResult<String> getBpmnXml(@PathVariable(value = "processDefId") String processDefId) {
return CommonResult.success(processService.queryBpmnXmlById(processDefId));
String bpmnXmlById = processService.queryBpmnXmlById(processDefId);
return CommonResult.success(bpmnXmlById, true);
}
/**
*
*
* @param procInsId ID
* @param taskId ID
* @param taskId ID
*/
@ApiOperation(value = "详情数据")
@RequestMapping(value = "/info", method = RequestMethod.GET)
public CommonResult<?> detail(@RequestParam String procInsId, @RequestParam String taskId) {
public CommonResult<?> detail(@RequestParam String procInsId, @RequestParam(required = false) String taskId) {
return CommonResult.success(processService.queryProcessDetail(procInsId, taskId));
}
}

@ -26,7 +26,7 @@ import javax.servlet.http.HttpServletResponse;
* @createTime 2022/3/10 00:12
*/
@RestController
@RequestMapping("/workflow/task")
@RequestMapping("api/workflow/task")
public class WfTaskController {
@Autowired
private IWfTaskService flowTaskService;

@ -1,13 +0,0 @@
package com.zbkj.modules.autogencode.dao;
import com.zbkj.modules.autogencode.entity.SysDept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* DAO
*/
@Mapper
public interface SysDeptDao extends BaseMapper<SysDept> {
}

@ -1,13 +0,0 @@
package com.zbkj.modules.autogencode.dao;
import com.zbkj.modules.autogencode.entity.SysDeptUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* DAO
*/
@Mapper
public interface SysDeptUserDao extends BaseMapper<SysDeptUser> {
}

@ -61,6 +61,12 @@ public class PmOwner implements Serializable {
*/
@ApiModelProperty(value = "业主状态")
private String status;
/**
* ID
*/
@ApiModelProperty(value = "部门ID")
private Long deptId;
/**
*
*/

@ -1,109 +0,0 @@
package com.zbkj.modules.autogencode.entity;
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_dept")
public class SysDept implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@ApiModelProperty(value = "部门id")
@TableId
private Long deptId;
/**
* id
*/
@ApiModelProperty(value = "父部门id")
private Long parentId;
/**
*
*/
@ApiModelProperty(value = "祖级列表")
private String ancestors;
/**
*
*/
@ApiModelProperty(value = "部门名称")
private String deptName;
/**
*
*/
@ApiModelProperty(value = "显示顺序")
private Integer orderNum;
/**
*
*/
@ApiModelProperty(value = "负责人")
private String leader;
/**
*
*/
@ApiModelProperty(value = "联系电话")
private String phone;
/**
*
*/
@ApiModelProperty(value = "邮箱")
private String email;
/**
*
*/
@ApiModelProperty(value = "是否作业区")
private String isWorkArea;
/**
* 0 1
*/
@ApiModelProperty(value = "部门状态0正常 1停用")
private String status;
/**
*
*/
@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;
/**
*
*/
@ApiModelProperty(value = "备注")
private String remark;
/**
* 0 2
*/
@ApiModelProperty(value = "删除标志0代表存在 2代表删除")
private String delFlag;
/**
*
*/
@ApiModelProperty(value = "")
private String tenantId;
}

@ -1,29 +0,0 @@
package com.zbkj.modules.autogencode.entity;
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_dept_user")
public class SysDeptUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ApiModelProperty(value = "用户ID")
@TableId
private Long userId;
/**
* ID
*/
@ApiModelProperty(value = "部门ID")
private Long deptId;
}

@ -31,12 +31,10 @@ public class WfCategory implements Serializable {
/**
*
*/
@NotBlank(message = "分类名称不能为空")
private String categoryName;
/**
*
*/
@NotBlank(message = "分类编码不能为空")
private String code;
/**
*

@ -48,29 +48,4 @@ public class WfDeployForm implements Serializable {
*/
private String content;
/**
*
*/
@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;
}

@ -5,10 +5,10 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zbkj.common.model.system.SystemAdmin;
import com.zbkj.modules.autogencode.entity.SysDeptUser;
import com.zbkj.common.model.system.SysDeptUser;
import com.zbkj.flowable.common.constant.ProcessConstants;
import com.zbkj.service.service.SystemAdminService;
import com.zbkj.modules.autogencode.service.SysDeptUserService;
import com.zbkj.service.service.SysDeptUserService;
import lombok.AllArgsConstructor;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.UserTask;

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

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

@ -1,42 +0,0 @@
package com.zbkj.modules.autogencode.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.modules.autogencode.dao.SysDeptDao;
import com.zbkj.modules.autogencode.entity.SysDept;
import com.zbkj.modules.autogencode.service.SysDeptService;
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("sysDeptService")
public class SysDeptServiceImpl extends ServiceImpl<SysDeptDao, SysDept> implements SysDeptService {
@Resource
private SysDeptDao dao;
/**
*
*/
@Override
public List<SysDept> pageList(LambdaQueryWrapper<SysDept> queryWrapper, PageParamRequest pageParamRequest) {
PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
return dao.selectList(queryWrapper);
}
}

@ -1,42 +0,0 @@
package com.zbkj.modules.autogencode.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.modules.autogencode.dao.SysDeptUserDao;
import com.zbkj.modules.autogencode.entity.SysDeptUser;
import com.zbkj.modules.autogencode.service.SysDeptUserService;
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("sysDeptUserService")
public class SysDeptUserServiceImpl extends ServiceImpl<SysDeptUserDao, SysDeptUser> implements SysDeptUserService {
@Resource
private SysDeptUserDao dao;
/**
*
*/
@Override
public List<SysDeptUser> pageList(LambdaQueryWrapper<SysDeptUser> queryWrapper, PageParamRequest pageParamRequest) {
PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
return dao.selectList(queryWrapper);
}
}

@ -117,9 +117,21 @@ public class WfDeployServiceImpl implements IWfDeployService {
@Override
public String queryBpmnXmlById(String definitionId) {
// 检查流程定义是否存在
ProcessDefinition processDefinition = repositoryService.getProcessDefinition(definitionId);
if (processDefinition == null) {
return null;
}
// 获取流程模型
InputStream inputStream = repositoryService.getProcessModel(definitionId);
if (inputStream == null) {
return null;
}
try {
return IoUtil.read(inputStream, "UTF-8");
String bpmnXml = IoUtil.read(inputStream, "UTF-8");
return bpmnXml;
} catch (IORuntimeException exception) {
throw new RuntimeException("加载xml文件异常");
}
@ -133,4 +145,4 @@ public class WfDeployServiceImpl implements IWfDeployService {
deployFormMapper.delete(new LambdaQueryWrapper<WfDeployForm>().eq(WfDeployForm::getDeployId, deployId));
}
}
}
}

@ -2,17 +2,16 @@ package com.zbkj.modules.autogencode.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.zbkj.common.exception.CrmebException;
import com.zbkj.modules.autogencode.entity.SysDept;
import com.zbkj.common.model.system.SysDept;
import com.zbkj.common.model.system.SystemRole;
import com.zbkj.service.service.SysDeptService;
import com.zbkj.service.service.SystemAdminService;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import com.zbkj.flowable.common.constant.TaskConstants;
import com.zbkj.flowable.factory.FlowServiceFactory;
import com.zbkj.modules.autogencode.service.SysDeptService;
import com.zbkj.service.service.SystemRoleService;
import com.zbkj.modules.autogencode.entity.bo.WfTaskBo;
import com.zbkj.modules.autogencode.entity.vo.WfFormVo;

@ -190,8 +190,14 @@ public class WfModelServiceImpl extends FlowServiceFactory implements IWfModelSe
@Override
public String queryBpmnXmlById(String modelId) {
// 检查模型是否存在
Model model = repositoryService.getModel(modelId);
// 获取模型的编辑源数据
byte[] bpmnBytes = repositoryService.getModelEditorSource(modelId);
return StrUtil.utf8Str(bpmnBytes);
// 转换为字符串
String bpmnXml = StrUtil.utf8Str(bpmnBytes);
return bpmnXml;
}
@Override
@ -204,6 +210,12 @@ public class WfModelServiceImpl extends FlowServiceFactory implements IWfModelSe
model.setMetaInfo(metaInfo);
// 保存流程模型
repositoryService.saveModel(model);
// 如果有BPMN XML内容则保存
if (StrUtil.isNotBlank(modelBo.getBpmnXml())) {
byte[] bpmnXmlBytes = modelBo.getBpmnXml().getBytes(StandardCharsets.UTF_8);
repositoryService.addModelEditorSource(model.getId(), bpmnXmlBytes);
}
}
@Override
@ -352,4 +364,43 @@ public class WfModelServiceImpl extends FlowServiceFactory implements IWfModelSe
}
return JSONObject.toJSONString(metaInfo);
}
/**
* BPMN XML
* @param model
* @return BPMN XML
*/
private String generateDefaultBpmnXml(Model model) {
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
sb.append("<definitions xmlns=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" ");
sb.append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
sb.append("xmlns:flowable=\"http://flowable.org/bpmn\" ");
sb.append("targetNamespace=\"http://www.flowable.org/processdef\">\n");
sb.append(" <process id=\"").append(model.getKey()).append("\" name=\"").append(model.getName()).append("\" isExecutable=\"true\">\n");
sb.append(" <startEvent id=\"startEvent1\" name=\"开始\"></startEvent>\n");
sb.append(" <userTask id=\"userTask1\" name=\"审批\" flowable:assignee=\"${assignee}\"></userTask>\n");
sb.append(" <sequenceFlow id=\"sid-1\" sourceRef=\"startEvent1\" targetRef=\"userTask1\"></sequenceFlow>\n");
sb.append(" <endEvent id=\"endEvent1\" name=\"结束\"></endEvent>\n");
sb.append(" <sequenceFlow id=\"sid-2\" sourceRef=\"userTask1\" targetRef=\"endEvent1\"></sequenceFlow>\n");
sb.append(" </process>\n");
sb.append(" <bpmndi:BPMNDiagram id=\"BPMNDiagram_\">");
sb.append(" <bpmndi:BPMNPlane id=\"BPMNPlane_\" bpmnElement=\"").append(model.getKey()).append("\">\n");
sb.append(" <bpmndi:BPMNShape id=\"shape-startEvent1\" bpmnElement=\"startEvent1\">\n");
sb.append(" <omgdc:Bounds x=\"100\" y=\"100\" width=\"35\" height=\"35\" />\n");
sb.append(" </bpmndi:BPMNShape>\n");
sb.append(" <bpmndi:BPMNShape id=\"shape-userTask1\" bpmnElement=\"userTask1\">\n");
sb.append(" <omgdc:Bounds x=\"200\" y=\"100\" width=\"80\" height=\"55\" />\n");
sb.append(" </bpmndi:BPMNShape>\n");
sb.append(" <bpmndi:BPMNShape id=\"shape-endEvent1\" bpmnElement=\"endEvent1\">\n");
sb.append(" <omgdc:Bounds x=\"350\" y=\"100\" width=\"35\" height=\"35\" />\n");
sb.append(" </bpmndi:BPMNShape>\n");
sb.append(" </bpmndi:BPMNPlane>\n");
sb.append(" </bpmndi:BPMNDiagram>\n");
sb.append("</definitions>");
return sb.toString();
}
}

@ -2,19 +2,18 @@ package com.zbkj.modules.autogencode.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageHelper;
import com.zbkj.common.model.system.SysDept;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.modules.autogencode.dao.WfDeployFormMapper;
import com.zbkj.modules.autogencode.entity.SysDept;
import com.zbkj.common.model.system.SystemRole;
import com.zbkj.service.service.SysDeptService;
import com.zbkj.service.service.SystemAdminService;
import com.zbkj.common.exception.CrmebException;
// import com.zbkj.common.utils.DateUtils; // 该类不存在
@ -31,7 +30,6 @@ import com.zbkj.flowable.utils.ModelUtils;
import com.zbkj.flowable.utils.ProcessFormUtils;
import com.zbkj.flowable.utils.ProcessUtils;
import com.zbkj.flowable.utils.TaskUtils;
import com.zbkj.modules.autogencode.service.SysDeptService;
import com.zbkj.service.service.SystemRoleService;
import com.zbkj.modules.autogencode.entity.WfDeployForm;
import com.zbkj.modules.autogencode.entity.vo.*;
@ -624,9 +622,21 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
*/
@Override
public String queryBpmnXmlById(String processDefId) {
// 检查流程定义是否存在
ProcessDefinition processDefinition = repositoryService.getProcessDefinition(processDefId);
if (processDefinition == null) {
return null;
}
// 获取流程模型
InputStream inputStream = repositoryService.getProcessModel(processDefId);
if (inputStream == null) {
return null;
}
try {
return IoUtil.read(inputStream, "UTF-8");
String bpmnXml = IoUtil.read(inputStream, "UTF-8");
return bpmnXml;
} catch (IORuntimeException exception) {
throw new RuntimeException("加载xml文件异常");
}

@ -1,5 +1,6 @@
package com.zbkj.common.request;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zbkj.common.constants.RegularConstants;
import com.zbkj.common.utils.ValidateFormUtil;
@ -13,6 +14,7 @@ import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.List;
/**
*
@ -30,10 +32,10 @@ import java.io.Serializable;
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("eb_system_admin")
@ApiModel(value="SystemAdminAddRequest对象", description="后台管理员表")
@ApiModel(value = "SystemAdminAddRequest对象", description = "后台管理员表")
public class SystemAdminAddRequest implements Serializable {
private static final long serialVersionUID=1L;
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "后台管理员账号", required = true)
@NotNull(message = "后台管理员账号不能为空")
@ -65,5 +67,7 @@ public class SystemAdminAddRequest implements Serializable {
@Pattern(regexp = RegularConstants.PHONE_TWO, message = "请填写正确的手机号")
private String phone;
// 添加部门Id是list类型。
@TableField(exist = false)
private List<String> depts;
}

@ -1,5 +1,6 @@
package com.zbkj.common.request;
import com.baomidou.mybatisplus.annotation.TableField;
import com.zbkj.common.constants.RegularConstants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -12,6 +13,7 @@ import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
*
@ -66,4 +68,7 @@ public class SystemAdminUpdateRequest implements Serializable {
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = RegularConstants.PHONE_TWO, message = "请填写正确的手机号")
private String phone;
@TableField(exist = false)
private List<String> depts;
}

@ -89,6 +89,20 @@ public class CommonResult<T> {
return new CommonResult<T>(ExceptionCodeEnum.SUCCESS.getCode(), message, data);
}
/**
*
*
* @param data
* @param putInData data
*/
public static CommonResult<String> success(String data, boolean putInData) {
if (putInData) {
return new CommonResult<String>(ExceptionCodeEnum.SUCCESS.getCode(), ExceptionCodeEnum.SUCCESS.getMessage(), data);
} else {
return new CommonResult<String>(ExceptionCodeEnum.SUCCESS.getCode(), data, null);
}
}
/**
*
* @param errorCode

@ -41,7 +41,7 @@ public class MenuCheckTree {
// 排序
private List<MenuCheckVo> sortList(List<MenuCheckVo> treeMenus) {
treeMenus = treeMenus.stream().sorted(Comparator.comparing(MenuCheckVo::getSort).reversed()).collect(Collectors.toList());
treeMenus = treeMenus.stream().sorted(Comparator.comparing(MenuCheckVo::getSort)).collect(Collectors.toList());
treeMenus.forEach(e -> {
if (CollUtil.isNotEmpty(e.getChildList())) {
e.setChildList(sortList(e.getChildList()));

@ -41,7 +41,7 @@ public class MenuTree {
// 排序
private List<MenusResponse> sortList(List<MenusResponse> treeMenus) {
treeMenus = treeMenus.stream().sorted(Comparator.comparing(MenusResponse::getSort).reversed()).collect(Collectors.toList());
treeMenus = treeMenus.stream().sorted(Comparator.comparing(MenusResponse::getSort)).collect(Collectors.toList());
treeMenus.forEach(e -> {
if (CollUtil.isNotEmpty(e.getChildList())) {
e.setChildList(sortList(e.getChildList()));

@ -0,0 +1,62 @@
package com.zbkj.common.vo;
import cn.hutool.core.collection.CollUtil;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class SysDeptTree {
private List<SysDeptTreeVo> deptList = new ArrayList<>();
public SysDeptTree(List<SysDeptTreeVo> deptList) {
this.deptList = deptList;
}
//建立树形结构
public List<SysDeptTreeVo> buildTree(){
List<SysDeptTreeVo> treeDepts = new ArrayList<>();
for(SysDeptTreeVo deptNode : getRootNode()) {
deptNode = buildChildTree(deptNode);
treeDepts.add(deptNode);
}
return sortList(treeDepts);
}
// 排序
private List<SysDeptTreeVo> sortList(List<SysDeptTreeVo> treeDepts) {
treeDepts = treeDepts.stream().sorted(Comparator.comparing(SysDeptTreeVo::getOrderNum)).collect(Collectors.toList());
treeDepts.forEach(e -> {
if (CollUtil.isNotEmpty(e.getChildren())) {
e.setChildren(sortList(e.getChildren()));
}
});
return treeDepts;
}
//递归,建立子树形结构
private SysDeptTreeVo buildChildTree(SysDeptTreeVo pNode){
List<SysDeptTreeVo> childDepts = new ArrayList<>();
for(SysDeptTreeVo deptNode : deptList) {
if(deptNode.getParentId() != null && deptNode.getParentId().equals(pNode.getDeptId())) {
childDepts.add(buildChildTree(deptNode));
}
}
pNode.setChildren(childDepts);
return pNode;
}
//获取根节点
private List<SysDeptTreeVo> getRootNode() {
List<SysDeptTreeVo> rootDeptLists = new ArrayList<>();
for(SysDeptTreeVo deptNode : deptList) {
if(deptNode.getParentId() == null || deptNode.getParentId() == 0) {
rootDeptLists.add(deptNode);
}
}
return rootDeptLists;
}
}

@ -0,0 +1,52 @@
package com.zbkj.common.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Data
public class SysDeptTreeVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "部门id")
private Long deptId;
@ApiModelProperty(value = "父部门id")
private Long parentId;
@ApiModelProperty(value = "祖级列表")
private String ancestors;
@ApiModelProperty(value = "部门名称")
private String deptName;
@ApiModelProperty(value = "显示顺序")
private Integer orderNum;
@ApiModelProperty(value = "负责人")
private String leader;
@ApiModelProperty(value = "联系电话")
private String phone;
@ApiModelProperty(value = "邮箱")
private String email;
@ApiModelProperty(value = "是否作业区")
private String isWorkArea;
@ApiModelProperty(value = "部门状态0正常 1停用")
private String status;
@ApiModelProperty(value = "备注")
private String remark;
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<SysDeptTreeVo> children = new ArrayList<>();
}

@ -7,6 +7,8 @@ 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.request.PageParamRequest;
@ -18,9 +20,7 @@ import com.zbkj.common.utils.CrmebUtil;
import com.zbkj.common.utils.ValidateFormUtil;
import com.github.pagehelper.PageHelper;
import com.zbkj.service.dao.SystemAdminDao;
import com.zbkj.service.service.SystemAdminService;
import com.zbkj.service.service.SystemRoleService;
import com.zbkj.service.service.UserService;
import com.zbkj.service.service.*;
import com.zbkj.common.model.user.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@ -34,18 +34,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* SystemAdminServiceImpl
* +----------------------------------------------------------------------
* | CRMEB [ CRMEB ]
* +----------------------------------------------------------------------
* | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
* +----------------------------------------------------------------------
* | Licensed CRMEBCRMEB
* +----------------------------------------------------------------------
* | Author: CRMEB Team <admin@crmeb.com>
* +----------------------------------------------------------------------
*/
@Service
public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAdmin> implements SystemAdminService {
@ -57,7 +46,12 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
@Autowired
private UserService userService;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private SysDeptUserService sysDeptUserService;
/**
@ -134,10 +128,24 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
boolean adminSaved = save(systemAdmin);
if (adminSaved) {
// 处理部门关联
// 注意这里假设SystemAdminAddRequest已经添加了deptIds字段List<Long>类型)
// 如果没有需要先在SystemAdminAddRequest中添加该字段
// 处理部门关联 将systemAdminAddRequest中的depts放入到 SysDeptUser中
List<String> depts = systemAdminAddRequest.getDepts();
if (CollUtil.isNotEmpty(depts) && systemAdmin.getId() != null) {
List<SysDeptUser> sysDeptUserList = new ArrayList<>();
for (String deptIdStr : depts) {
if (StrUtil.isNotBlank(deptIdStr)) {
Long deptId = Long.parseLong(deptIdStr);
SysDeptUser sysDeptUser = new SysDeptUser();
sysDeptUser.setUserId(Long.valueOf(systemAdmin.getId()));
sysDeptUser.setDeptId(deptId);
sysDeptUserList.add(sysDeptUser);
}
}
if (CollUtil.isNotEmpty(sysDeptUserList)) {
sysDeptUserService.saveBatch(sysDeptUserList);
}
}
// 将相关信息保存到eb_user表
User user = new User();
user.setAccount(systemAdmin.getAccount());
@ -153,7 +161,9 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
user.setUpdateTime(nowDate);
user.setLastLoginTime(nowDate);
user.setStatus(true); // 默认启用
userService.save(user);
}
@ -190,7 +200,58 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
String pwd = CrmebUtil.encryptPassword(systemAdminRequest.getPwd(), systemAdminRequest.getAccount());
systemAdmin.setPwd(pwd);
}
return updateById(systemAdmin);
// 更新管理员信息
boolean adminUpdated = updateById(systemAdmin);
if (adminUpdated) {
// 处理部门关联
List<String> depts = systemAdminRequest.getDepts();
Integer adminId = systemAdminRequest.getId();
if (adminId != null) {
// 删除原有部门关联
sysDeptUserService.remove(Wrappers.<SysDeptUser>lambdaQuery()
.eq(SysDeptUser::getUserId, Long.valueOf(adminId)));
// 新增部门关联
if (CollUtil.isNotEmpty(depts)) {
List<SysDeptUser> sysDeptUserList = new ArrayList<>();
for (String deptIdStr : depts) {
if (StrUtil.isNotBlank(deptIdStr)) {
Long deptId = Long.parseLong(deptIdStr);
SysDeptUser sysDeptUser = new SysDeptUser();
sysDeptUser.setUserId(Long.valueOf(adminId));
sysDeptUser.setDeptId(deptId);
sysDeptUserList.add(sysDeptUser);
}
}
if (CollUtil.isNotEmpty(sysDeptUserList)) {
sysDeptUserService.saveBatch(sysDeptUserList);
}
}
// 更新eb_user表
LambdaQueryWrapper<User> userQuery = Wrappers.lambdaQuery();
userQuery.eq(User::getAdminid, adminId);
User user = userService.getOne(userQuery);
if (user != null) {
// 更新用户信息
user.setAccount(systemAdmin.getAccount());
if (StrUtil.isNotBlank(systemAdmin.getPwd())) {
user.setPwd(systemAdmin.getPwd());
}
user.setRealName(systemAdmin.getRealName());
user.setPhone(systemAdmin.getPhone());
user.setUpdateTime(new Date());
userService.updateById(user);
}
}
}
return adminUpdated;
}
/**

@ -71,6 +71,8 @@ public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuDao, SystemMenu
lqw.eq(SystemMenu::getIsDelte, false);
lqw.eq(SystemMenu::getIsShow, true);
lqw.ne(SystemMenu::getMenuType, "A");
lqw.orderByAsc(SystemMenu::getSort);
lqw.orderByAsc(SystemMenu::getId);
return dao.selectList(lqw);
}
@ -88,9 +90,10 @@ public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuDao, SystemMenu
lqw.eq(SystemMenu::getName, request.getMenuType());
}
lqw.eq(SystemMenu::getIsDelte, false);
lqw.orderByDesc(SystemMenu::getSort);
lqw.orderByAsc(SystemMenu::getSort);
lqw.orderByAsc(SystemMenu::getId);
return dao.selectList(lqw);
}
/**

@ -10,6 +10,7 @@
right join eb_system_admin a on FIND_IN_SET(r.id, a.roles)
where m.is_delte = 0 and r.`status` = 1 and a.id = #{userId}
GROUP BY m.id
ORDER BY m.sort ASC, m.id ASC
</select>
<select id="getMenusByUserId" resultType="com.zbkj.common.model.system.SystemMenu" parameterType="Integer" >
@ -20,6 +21,7 @@
right join eb_system_admin a on FIND_IN_SET(r.id, a.roles)
where m.is_delte = 0 and r.`status` = 1 and m.menu_type != 'A' and m.is_show = 1 and a.id = #{userId}
GROUP BY m.id
ORDER BY m.sort ASC, m.id ASC
</select>
</mapper>

Loading…
Cancel
Save