代码提交
This commit is contained in:
parent
334c84d515
commit
13bde0497e
|
|
@ -0,0 +1,26 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询部门列表
|
||||||
|
export function listDept(query) {
|
||||||
|
return request({
|
||||||
|
url: '/system/dept/audit/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//审核部门
|
||||||
|
export function auditDept(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/dept/audit/' + data.id,
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//修改部门禁用启用
|
||||||
|
export function updateDept(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/dept',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询符合管理列表
|
||||||
|
export function listProjectCompletionReview(query) {
|
||||||
|
return request({
|
||||||
|
url: '/manage/project/completionReview/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog title="审核节点信息" v-model="props.show" @close="handleClose" width="600px">
|
<el-dialog title="审核节点信息" v-model="props.show" @close="handleClose" width="600px">
|
||||||
<div class="Cneter-box">
|
<div class="Cneter-box">
|
||||||
<el-form :model="formData" label-width="120px" class="review-form" label-position="top">
|
<el-form :model="formData" :rules="formRules" ref="formRef" label-width="120px" class="review-form" label-position="top">
|
||||||
<div class="section-title">基础信息</div>
|
<div class="section-title">基础信息</div>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="节点类型">
|
<el-form-item label="节点类型">
|
||||||
<el-tag type="primary" size="large">部门</el-tag>
|
<el-tag type="primary" size="large">{{ getNodeTypeLabel(formData.nodeType) }}</el-tag>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
@ -36,21 +36,21 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="联系方式">
|
<el-form-item label="联系方式">
|
||||||
<el-input v-model="formData.contact" disabled />
|
<el-input v-model="formData.phone" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<div class="section-title">审核操作</div>
|
<div class="section-title">审核操作</div>
|
||||||
<el-form-item label="审核结果">
|
<el-form-item label="审核结果" prop="auditStatus">
|
||||||
<el-radio-group v-model="formData.reviewResult">
|
<el-radio-group v-model="formData.auditStatus">
|
||||||
<el-radio label="通过">通过</el-radio>
|
<el-radio :label="1">审核通过</el-radio>
|
||||||
<el-radio label="退回">退回</el-radio>
|
<el-radio :label="2">退回</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="审核意见">
|
<el-form-item label="审核意见" prop="auditOpinion">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formData.reviewComment"
|
v-model="formData.auditOpinion"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:rows="4"
|
:rows="4"
|
||||||
placeholder="请输入审核意见 (退回时必填)"
|
placeholder="请输入审核意见 (退回时必填)"
|
||||||
|
|
@ -68,7 +68,10 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue'
|
import { ref, watch } from 'vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { auditDept } from '@/api/Logistics/filingReview'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
show: {
|
show: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
|
|
@ -77,32 +80,172 @@ const props = defineProps({
|
||||||
CloseDialog: {
|
CloseDialog: {
|
||||||
type: Function,
|
type: Function,
|
||||||
default: () => { }
|
default: () => { }
|
||||||
|
},
|
||||||
|
rowData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 表单引用
|
||||||
|
const formRef = ref(null)
|
||||||
|
|
||||||
|
// 表单验证规则
|
||||||
|
const formRules = {
|
||||||
|
auditStatus: [
|
||||||
|
{ required: true, message: '请选择审核结果', trigger: 'change' }
|
||||||
|
],
|
||||||
|
auditOpinion: [
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (formData.value.auditStatus === 2 && !value) {
|
||||||
|
callback(new Error('退回时审核意见为必填项'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: ['blur', 'change']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
// 关闭弹窗
|
// 关闭弹窗
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
|
// 重置表单数据
|
||||||
|
formData.value = {
|
||||||
|
nodeName: '',
|
||||||
|
parentNode: '',
|
||||||
|
submitter: '',
|
||||||
|
phone: '',
|
||||||
|
createTime: '',
|
||||||
|
nodeType: '1',
|
||||||
|
auditStatus: 1,
|
||||||
|
auditOpinion: ''
|
||||||
|
}
|
||||||
|
// 清除表单验证
|
||||||
|
if (formRef.value) {
|
||||||
|
formRef.value.clearValidate()
|
||||||
|
}
|
||||||
props.CloseDialog()
|
props.CloseDialog()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
nodeName: '后勤保障部 - 设备科',
|
nodeName: '',
|
||||||
parentNode: '后勤保障部',
|
parentNode: '',
|
||||||
submitter: '李建国',
|
submitter: '',
|
||||||
contact: '138****8888',
|
phone: '',
|
||||||
createTime: '2023-10-15 14:25',
|
createTime: '',
|
||||||
reviewResult: '通过',
|
nodeType: '1',
|
||||||
reviewComment: ''
|
auditStatus: 1,
|
||||||
|
auditOpinion: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
const handleSubmit = () => {
|
// 节点类型映射
|
||||||
// 提交逻辑
|
const nodeTypeMap = {
|
||||||
console.log('提交分配信息', formData.value)
|
'1': '部门',
|
||||||
props.CloseDialog()
|
'2': '楼层',
|
||||||
|
'3': '班组'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取节点类型标签
|
||||||
|
const getNodeTypeLabel = (value) => {
|
||||||
|
return nodeTypeMap[value] || '部门'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化表单数据
|
||||||
|
const initFormData = () => {
|
||||||
|
const rowData = props.rowData
|
||||||
|
if (rowData && Object.keys(rowData).length > 0) {
|
||||||
|
// 根据传入的数据映射到表单字段
|
||||||
|
formData.value = {
|
||||||
|
nodeName: rowData.nodeName || rowData.projectName || rowData.deptName || '',
|
||||||
|
parentNode: rowData.parentNode || rowData.constructionUnit || rowData.parentName || '',
|
||||||
|
submitter: rowData.submitter || rowData.createBy || '',
|
||||||
|
phone: rowData.phone || '',
|
||||||
|
createTime: rowData.createTime || '',
|
||||||
|
nodeType: rowData.nodeType || '1',
|
||||||
|
auditStatus: 1,
|
||||||
|
auditOpinion: rowData.auditOpinion || rowData.remark || ''
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 重置表单
|
||||||
|
formData.value = {
|
||||||
|
nodeName: '',
|
||||||
|
parentNode: '',
|
||||||
|
submitter: '',
|
||||||
|
phone: '',
|
||||||
|
createTime: '',
|
||||||
|
nodeType: '1',
|
||||||
|
auditStatus: 1,
|
||||||
|
auditOpinion: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听 rowData 变化,更新表单数据
|
||||||
|
watch(() => props.rowData, () => {
|
||||||
|
initFormData()
|
||||||
|
}, { immediate: true, deep: true })
|
||||||
|
|
||||||
|
// 监听弹窗显示状态,打开时初始化数据
|
||||||
|
watch(() => props.show, (newVal) => {
|
||||||
|
if (newVal) {
|
||||||
|
initFormData()
|
||||||
|
// 清除表单验证
|
||||||
|
if (formRef.value) {
|
||||||
|
formRef.value.clearValidate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 监听审核状态变化,触发审核意见验证
|
||||||
|
watch(() => formData.value.auditStatus, () => {
|
||||||
|
if (formRef.value) {
|
||||||
|
formRef.value.validateField('auditOpinion')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
// 表单验证
|
||||||
|
if (!formRef.value) return
|
||||||
|
|
||||||
|
try {
|
||||||
|
await formRef.value.validate()
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.warning('请完善表单信息')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证退回时审核意见必填
|
||||||
|
if (formData.value.auditStatus === 2 && !formData.value.auditOpinion) {
|
||||||
|
ElMessage.warning('退回时审核意见为必填项')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 构建提交数据
|
||||||
|
const submitData = {
|
||||||
|
id: props.rowData.id || formData.value.id,
|
||||||
|
auditStatus: formData.value.auditStatus,
|
||||||
|
auditOpinion: formData.value.auditOpinion
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await auditDept(submitData)
|
||||||
|
|
||||||
|
if (response.code === 200) {
|
||||||
|
ElMessage.success('审核成功')
|
||||||
|
handleClose()
|
||||||
|
} else {
|
||||||
|
ElMessage.error(response.msg || '审核失败')
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('审核失败:', error)
|
||||||
|
ElMessage.error('审核失败,请稍后重试')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -4,55 +4,70 @@
|
||||||
<div class="MainBox">
|
<div class="MainBox">
|
||||||
<el-form :model="queryForm" inline class="card-box mb-4">
|
<el-form :model="queryForm" inline class="card-box mb-4">
|
||||||
<el-form-item label="节点名称">
|
<el-form-item label="节点名称">
|
||||||
<el-input v-model="queryForm.nodeName" placeholder="请输入节点名称"></el-input>
|
<el-input v-model="queryForm.deptName" placeholder="请输入节点名称"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="节点类型">
|
<!-- <el-form-item label="节点类型">
|
||||||
<el-select v-model="queryForm.nodeType" placeholder="请选择节点类型" clearable>
|
<el-select v-model="queryForm.nodeType" placeholder="请选择节点类型" clearable>
|
||||||
<el-option v-for="item in nodeTypeList" :key="item.value" :label="item.label"
|
<el-option v-for="item in nodeTypeList" :key="item.value" :label="item.label"
|
||||||
:value="item.value"></el-option>
|
:value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item> -->
|
||||||
<el-form-item label="提交时间">
|
<el-form-item label="提交时间">
|
||||||
<el-date-picker v-model="queryForm.dateRange" type="daterange" value-format="yyyy-MM-dd"
|
<el-date-picker v-model="queryForm.dateRange" type="daterange" value-format="yyyy-MM-dd"
|
||||||
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="审核状态">
|
||||||
|
<el-select v-model="queryForm.auditStatus" placeholder="请选择审核状态" clearable>
|
||||||
|
<el-option label="待审核" value="0"></el-option>
|
||||||
|
<el-option label="已通过" value="1"></el-option>
|
||||||
|
<el-option label="已拒绝" value="2"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button size="default">重置</el-button>
|
<el-button size="default" @click="resetQuery">重置</el-button>
|
||||||
<el-button type="primary" size="default">查询</el-button>
|
<el-button type="primary" size="default" @click="handleQuery">查询</el-button>
|
||||||
<el-button type="primary" plain size="default">导出Excel</el-button>
|
<el-button type="primary" plain size="default">导出Excel</el-button>
|
||||||
<el-button type="primary" plain size="default">打印</el-button>
|
<el-button type="primary" plain size="default">打印</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<div class="card-box">
|
<div class="card-box">
|
||||||
<el-table :data="tableData" class="mt-2">
|
<el-table :data="tableData" v-loading="loading" class="mt-2">
|
||||||
<el-table-column prop="userName" label="节点名称"></el-table-column>
|
<el-table-column prop="deptName" label="节点名称"></el-table-column>
|
||||||
<el-table-column prop="departmentName" label="节点类型"></el-table-column>
|
<el-table-column prop="nodeType" label="节点类型">
|
||||||
<el-table-column prop="roleName" label="所属上级"></el-table-column>
|
|
||||||
<el-table-column prop="projectScope" label="提交人"></el-table-column>
|
|
||||||
<el-table-column prop="phone" label="提交时间"></el-table-column>
|
|
||||||
<el-table-column prop="permissionDesc" label="权限说明"></el-table-column>
|
|
||||||
<el-table-column prop="reviewStatus" label="审核状态">
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag :type="scope.row.reviewStatus === '待审核' ? 'primary' : 'danger'">
|
{{ getNodeTypeLabel(scope.row.nodeType) }}
|
||||||
{{ scope.row.reviewStatus === '待审核' ? '待审核' : '拒绝' }}
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="parentName" label="所属上级"></el-table-column>
|
||||||
|
<el-table-column prop="createBy" label="提交人"></el-table-column>
|
||||||
|
<el-table-column prop="createTime" label="提交时间"></el-table-column>
|
||||||
|
<!-- <el-table-column prop="remark" label="权限说明"></el-table-column> -->
|
||||||
|
<el-table-column prop="auditStatus" label="审核状态">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tag
|
||||||
|
:type="scope.row.auditStatus === '0' ? 'warning' : scope.row.auditStatus === '1' ? 'success' : 'danger'">
|
||||||
|
{{ scope.row.auditStatus === '0' ? '待审核' : scope.row.auditStatus === '1' ? '已通过' : '已拒绝' }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="status" label="状态">
|
<el-table-column prop="status" label="状态">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag :type="scope.row.status === '1' ? 'success' : 'danger'">
|
<el-tag :type="scope.row.status === '0' ? 'success' : 'danger'">
|
||||||
{{ scope.row.status === '1' ? '启用' : '禁用' }}
|
{{ scope.row.status === '0' ? '正常' : '停用' }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="180">
|
<el-table-column label="操作" width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button size="small" type="primary" link @click="handleEdit(scope.row)">审核</el-button>
|
<el-button size="small" type="primary" link @click="handleEdit(scope.row)">审核</el-button>
|
||||||
<el-button size="small" type="primary" link v-if="scope.row.status === '2'">启用</el-button>
|
<el-button size="small" type="primary" link v-if="scope.row.status === '0'"
|
||||||
<el-button size="small" type="primary" link v-else>禁用</el-button>
|
@click="handleStatusChange(scope.row, '1')">禁用</el-button>
|
||||||
|
<el-button size="small" type="primary" link v-else
|
||||||
|
@click="handleStatusChange(scope.row, '0')">启用</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
@ -62,24 +77,29 @@
|
||||||
total }}
|
total }}
|
||||||
条</span>
|
条</span>
|
||||||
<el-pagination v-model:current-page="pageNum" v-model:page-size="pageSize" :page-sizes="[5, 10, 20]"
|
<el-pagination v-model:current-page="pageNum" v-model:page-size="pageSize" :page-sizes="[5, 10, 20]"
|
||||||
:total="total" layout="prev, pager, next"></el-pagination>
|
:total="total" layout="prev, pager, next" @size-change="getList"
|
||||||
|
@current-change="getList"></el-pagination>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 节点审核弹窗 -->
|
<!-- 节点审核弹窗 -->
|
||||||
<DialogBox v-if="dialogShow" ref="dialogRef" :show="dialogShow" :CloseDialog="handleCancel" />
|
<DialogBox v-if="dialogShow" ref="dialogRef" :show="dialogShow" :CloseDialog="handleCancel" :rowData="currentRowData" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup name="Index">
|
<script setup name="Index">
|
||||||
import { ref } from "vue";
|
import { ref, onMounted } from "vue";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
import DialogBox from "./DialogBox.vue";
|
import DialogBox from "./DialogBox.vue";
|
||||||
|
import { listDept, auditDept, updateDept } from "@/api/Logistics/filingReview.js";
|
||||||
|
import { listDept as getAllDeptList } from "@/api/system/dept.js";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 查询表单数据
|
// 查询表单数据
|
||||||
const queryForm = ref({
|
const queryForm = ref({
|
||||||
dateRange: [],
|
dateRange: [],
|
||||||
nodeName: "",
|
deptName: "",
|
||||||
nodeType: ""
|
nodeType: "",
|
||||||
|
auditStatus: ""
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -105,56 +125,158 @@ const nodeTypeList = ref([
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 表格数据
|
// 表格数据
|
||||||
const tableData = ref([
|
const tableData = ref([]);
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
needBallheadNum: "1001",
|
|
||||||
projectName: "项目1",
|
|
||||||
returnStatus: "待审核",
|
|
||||||
returnUserName: "用户1",
|
|
||||||
submitEndTime: "2023-08-01 10:00:00",
|
|
||||||
userName: "张三",
|
|
||||||
departmentName: "工程部",
|
|
||||||
roleName: "工作票签发人",
|
|
||||||
projectScope: "项目1",
|
|
||||||
phone: "13800000000",
|
|
||||||
permissionDesc: "对项目1的工作票进行签发",
|
|
||||||
status: "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
needBallheadNum: "1002",
|
|
||||||
projectName: "项目2",
|
|
||||||
returnStatus: "待审核",
|
|
||||||
returnUserName: "用户2",
|
|
||||||
submitEndTime: "2023-08-02 10:00:00",
|
|
||||||
userName: "李四",
|
|
||||||
departmentName: "安全监督部",
|
|
||||||
roleName: "危险作业票签发人",
|
|
||||||
projectScope: "项目2",
|
|
||||||
phone: "13900000000",
|
|
||||||
permissionDesc: "对项目2的危险作业票进行签发",
|
|
||||||
status: "2"
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
]);
|
|
||||||
const dialogShow = ref(false); // 入库审核弹窗-显示状态
|
const dialogShow = ref(false); // 入库审核弹窗-显示状态
|
||||||
|
const currentRowData = ref({}); // 当前选中的行数据
|
||||||
const pageNum = ref(1); // 当前页码
|
const pageNum = ref(1); // 当前页码
|
||||||
const pageSize = ref(5); // 每页显示条数
|
const pageSize = ref(10); // 每页显示条数
|
||||||
const total = ref(20); // 总记录数
|
const total = ref(0); // 总记录数
|
||||||
|
const loading = ref(false); // 加载状态
|
||||||
|
const allDeptList = ref([]); // 完整的部门列表,用于映射父级名称
|
||||||
|
|
||||||
|
// 获取节点类型标签
|
||||||
|
const getNodeTypeLabel = (value) => {
|
||||||
|
const item = nodeTypeList.value.find(item => item.value === value);
|
||||||
|
return item ? item.label : '部门';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 获取完整的部门列表(用于映射父级名称)
|
||||||
|
const getAllDepts = async () => {
|
||||||
|
try {
|
||||||
|
const response = await getAllDeptList();
|
||||||
|
if (response.code === 200) {
|
||||||
|
allDeptList.value = response.data || response.rows || [];
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// 静默失败,不影响主流程
|
||||||
|
console.warn('获取完整部门列表失败:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 查询列表数据
|
||||||
|
const getList = () => {
|
||||||
|
loading.value = true;
|
||||||
|
const params = {
|
||||||
|
pageNum: pageNum.value,
|
||||||
|
pageSize: pageSize.value
|
||||||
|
};
|
||||||
|
|
||||||
|
// 添加节点名称筛选
|
||||||
|
if (queryForm.value.deptName) {
|
||||||
|
params.deptName = queryForm.value.deptName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加节点类型筛选
|
||||||
|
if (queryForm.value.nodeType) {
|
||||||
|
params.nodeType = queryForm.value.nodeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理日期范围
|
||||||
|
if (queryForm.value.dateRange && queryForm.value.dateRange.length === 2) {
|
||||||
|
params.startDate = queryForm.value.dateRange[0];
|
||||||
|
params.endDate = queryForm.value.dateRange[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加审核状态筛选
|
||||||
|
if (queryForm.value.auditStatus !== "" && queryForm.value.auditStatus !== null && queryForm.value.auditStatus !== undefined) {
|
||||||
|
params.auditStatus = queryForm.value.auditStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
listDept(params).then(response => {
|
||||||
|
if (response.code === 200) {
|
||||||
|
const data = response.rows || response.data || [];
|
||||||
|
// 根据parentId映射所属上级,从完整的部门列表中查找
|
||||||
|
tableData.value = data.map(item => {
|
||||||
|
if (item.parentId) {
|
||||||
|
// 从完整的部门列表中查找父级
|
||||||
|
const parentItem = allDeptList.value.find(d => d.deptId === item.parentId);
|
||||||
|
if (parentItem) {
|
||||||
|
item.parentName = parentItem.deptName;
|
||||||
|
} else {
|
||||||
|
// 如果找不到,尝试从当前页数据中查找(兼容处理)
|
||||||
|
const currentPageParent = data.find(d => d.deptId === item.parentId);
|
||||||
|
if (currentPageParent) {
|
||||||
|
item.parentName = currentPageParent.deptName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
total.value = response.total || 0;
|
||||||
|
}
|
||||||
|
loading.value = false;
|
||||||
|
}).catch(() => {
|
||||||
|
loading.value = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 查询
|
||||||
|
const handleQuery = () => {
|
||||||
|
pageNum.value = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 重置查询
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryForm.value = {
|
||||||
|
dateRange: [],
|
||||||
|
deptName: "",
|
||||||
|
nodeType: "",
|
||||||
|
auditStatus: ""
|
||||||
|
};
|
||||||
|
pageNum.value = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
// 新增签发人
|
// 新增签发人
|
||||||
const handleAdd = (row) => {
|
const handleAdd = (row) => {
|
||||||
dialogShow.value = true
|
dialogShow.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 编辑签发人
|
// 编辑签发人(审核)
|
||||||
const handleEdit = (row) => {
|
const handleEdit = (row) => {
|
||||||
|
// 保存当前行数据,映射到弹窗需要的字段格式
|
||||||
|
currentRowData.value = {
|
||||||
|
id: row.deptId || row.id,
|
||||||
|
deptName: row.deptName || row.deptName,
|
||||||
|
parentNode: row.parentName || row.parentNode,
|
||||||
|
submitter: row.createBy || row.submitter,
|
||||||
|
phone: row.phone || '',
|
||||||
|
createTime: row.createTime || '',
|
||||||
|
nodeType: row.nodeType || '1',
|
||||||
|
auditStatus: row.auditStatus ? parseInt(row.auditStatus) : 1,
|
||||||
|
auditOpinion: row.auditOpinion || row.remark || ''
|
||||||
|
}
|
||||||
dialogShow.value = true
|
dialogShow.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 审核部门
|
||||||
|
const handleAudit = (row, auditStatus) => {
|
||||||
|
auditDept({
|
||||||
|
id: row.id,
|
||||||
|
auditStatus: auditStatus
|
||||||
|
}).then(response => {
|
||||||
|
if (response.code === 200) {
|
||||||
|
ElMessage.success('审核成功');
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 启用/禁用状态变更
|
||||||
|
const handleStatusChange = (row, status) => {
|
||||||
|
updateDept({
|
||||||
|
...row,
|
||||||
|
status: status
|
||||||
|
}).then(response => {
|
||||||
|
if (response.code === 200) {
|
||||||
|
ElMessage.success(status === '1' ? '启用成功' : '禁用成功');
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// 查看详情
|
// 查看详情
|
||||||
const handleDetail = (row) => {
|
const handleDetail = (row) => {
|
||||||
dialogShow.value = true
|
dialogShow.value = true
|
||||||
|
|
@ -164,8 +286,20 @@ const handleDetail = (row) => {
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
console.log('关闭弹窗')
|
console.log('关闭弹窗')
|
||||||
dialogShow.value = false
|
dialogShow.value = false
|
||||||
|
// 清空当前行数据
|
||||||
|
currentRowData.value = {}
|
||||||
|
// 关闭弹窗后刷新列表
|
||||||
|
getList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 组件挂载时获取列表
|
||||||
|
onMounted(async () => {
|
||||||
|
// 先获取完整的部门列表,用于映射父级名称
|
||||||
|
await getAllDepts();
|
||||||
|
// 然后获取分页列表
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.MainBox {
|
.MainBox {
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,20 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-tree>
|
</el-tree>
|
||||||
|
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<!-- <div class="pagination-container">
|
||||||
|
<span class="total-count">显示第 {{ (pageNum - 1) * pageSize + 1 }} 到 {{ Math.min(pageNum * pageSize, total) }} 条记录,共 {{ total }} 条</span>
|
||||||
|
<el-pagination
|
||||||
|
v-model:current-page="pageNum"
|
||||||
|
v-model:page-size="pageSize"
|
||||||
|
:page-sizes="[10, 20, 30, 50]"
|
||||||
|
:total="total"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handlePageChange"
|
||||||
|
/>
|
||||||
|
</div> -->
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 添加或修改层级节点对话框 -->
|
<!-- 添加或修改层级节点对话框 -->
|
||||||
|
|
@ -133,6 +147,11 @@ const queryParams = ref({
|
||||||
deptName: undefined
|
deptName: undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 分页参数
|
||||||
|
const pageNum = ref(1) // 当前页码
|
||||||
|
const pageSize = ref(1000) // 每页显示条数
|
||||||
|
const total = ref(0) // 总记录数
|
||||||
|
|
||||||
// 树形结构数据
|
// 树形结构数据
|
||||||
const treeData = ref([])
|
const treeData = ref([])
|
||||||
|
|
||||||
|
|
@ -172,13 +191,25 @@ const getStatusTagType = (status) => {
|
||||||
/** 查询树形层级列表 */
|
/** 查询树形层级列表 */
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
listDept(queryParams.value).then(response => {
|
// 合并查询参数和分页参数
|
||||||
|
const params = {
|
||||||
|
...queryParams.value,
|
||||||
|
pageNum: pageNum.value,
|
||||||
|
pageSize: pageSize.value
|
||||||
|
}
|
||||||
|
|
||||||
|
listDept(params).then(response => {
|
||||||
// 获取原始数据
|
// 获取原始数据
|
||||||
let rawData = []
|
let rawData = []
|
||||||
if (response.data && Array.isArray(response.data)) {
|
if (response.data && response.data.rows && Array.isArray(response.data.rows)) {
|
||||||
|
rawData = response.data.rows
|
||||||
|
total.value = response.data.total || 0
|
||||||
|
} else if (response.rows && Array.isArray(response.rows)) {
|
||||||
|
rawData = response.rows
|
||||||
|
total.value = response.total || 0
|
||||||
|
} else if (Array.isArray(response.data)) {
|
||||||
rawData = response.data
|
rawData = response.data
|
||||||
} else if (Array.isArray(response)) {
|
total.value = response.total || rawData.length
|
||||||
rawData = response
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果数据是扁平结构(有 parentId),使用 handleTree 转换为树形结构
|
// 如果数据是扁平结构(有 parentId),使用 handleTree 转换为树形结构
|
||||||
|
|
@ -252,8 +283,12 @@ function reset() {
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
function handleAdd(row) {
|
function handleAdd(row) {
|
||||||
reset()
|
reset()
|
||||||
listDept().then(response => {
|
let params = {
|
||||||
deptOptions.value = proxy.handleTree(response.data, "deptId")
|
pageNum: pageNum.value,
|
||||||
|
pageSize: 1000
|
||||||
|
}
|
||||||
|
listDept(params).then(response => {
|
||||||
|
deptOptions.value = proxy.handleTree(response.rows, "deptId")
|
||||||
})
|
})
|
||||||
if (row != undefined) {
|
if (row != undefined) {
|
||||||
form.value.parentId = row.deptId
|
form.value.parentId = row.deptId
|
||||||
|
|
@ -316,6 +351,7 @@ function handleDelete(row) {
|
||||||
|
|
||||||
/** 搜索按钮操作 */
|
/** 搜索按钮操作 */
|
||||||
function handleQuery() {
|
function handleQuery() {
|
||||||
|
pageNum.value = 1
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -324,9 +360,23 @@ function resetQuery() {
|
||||||
queryParams.value = {
|
queryParams.value = {
|
||||||
deptName: undefined
|
deptName: undefined
|
||||||
}
|
}
|
||||||
|
pageNum.value = 1
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 分页大小改变 */
|
||||||
|
function handleSizeChange(val) {
|
||||||
|
pageSize.value = val
|
||||||
|
pageNum.value = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 页码改变 */
|
||||||
|
function handlePageChange(val) {
|
||||||
|
pageNum.value = val
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
// 组件挂载时获取数据
|
// 组件挂载时获取数据
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList()
|
getList()
|
||||||
|
|
@ -398,8 +448,8 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-card__header) {
|
:deep(.el-card__header) {
|
||||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
// background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||||
color: #ffffff;
|
color: #000;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding: 16px 20px;
|
padding: 16px 20px;
|
||||||
|
|
@ -408,6 +458,9 @@ onMounted(() => {
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: calc(100% - 60px);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自定义滚动条样式
|
// 自定义滚动条样式
|
||||||
|
|
@ -553,6 +606,29 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 分页容器样式
|
||||||
|
.pagination-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 16px 20px;
|
||||||
|
background: #f8f9fa;
|
||||||
|
border-radius: 8px;
|
||||||
|
border-top: 1px solid #e4e7ed;
|
||||||
|
|
||||||
|
.total-count {
|
||||||
|
color: #606266;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-pagination) {
|
||||||
|
.el-pagination__total {
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 优化对话框样式
|
// 优化对话框样式
|
||||||
:deep(.el-dialog) {
|
:deep(.el-dialog) {
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,13 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button size="default">重置</el-button>
|
<el-button size="default" @click="resetQuery">重置</el-button>
|
||||||
<el-button type="primary" size="default">查询</el-button>
|
<el-button type="primary" size="default" @click="handleQuery">查询</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<div class="card-box">
|
<div class="card-box">
|
||||||
<el-table :data="tableData" class="mt-2">
|
<el-table :data="tableData" v-loading="loading" class="mt-2">
|
||||||
<el-table-column prop="projectName" label="项目名称"></el-table-column>
|
<el-table-column prop="projectName" label="项目名称"></el-table-column>
|
||||||
<el-table-column prop="constructionUnit" label="施工单位"></el-table-column>
|
<el-table-column prop="constructionUnit" label="施工单位"></el-table-column>
|
||||||
<el-table-column prop="workLocation" label="作业地点"></el-table-column>
|
<el-table-column prop="workLocation" label="作业地点"></el-table-column>
|
||||||
|
|
@ -61,15 +61,17 @@
|
||||||
total }}
|
total }}
|
||||||
条</span>
|
条</span>
|
||||||
<el-pagination v-model:current-page="pageNum" v-model:page-size="pageSize" :page-sizes="[5, 10, 20]"
|
<el-pagination v-model:current-page="pageNum" v-model:page-size="pageSize" :page-sizes="[5, 10, 20]"
|
||||||
:total="total" layout="prev, pager, next"></el-pagination>
|
:total="total" layout="prev, pager, next" @size-change="handleQuery" @current-change="handleQuery"></el-pagination>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup name="Index">
|
<script setup name="Index">
|
||||||
import { ref } from "vue";
|
import { ref, onMounted } from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
|
import { listProjectCompletionReview } from "@/api/tenement/tenement";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -98,45 +100,46 @@ const StatusList = ref([
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 表格数据
|
// 表格数据
|
||||||
const tableData = ref([
|
const tableData = ref([]);
|
||||||
{
|
const loading = ref(false);
|
||||||
id: 1,
|
|
||||||
projectName: "项目1",
|
|
||||||
constructionUnit: "施工单位1",
|
|
||||||
workLocation: "作业地点1",
|
|
||||||
supervisorReviewStatus: "已完成",
|
|
||||||
ballheadStatus: "已入库",
|
|
||||||
reviewStatus: "已完成复核",
|
|
||||||
submitEndTime: "2023-08-01 10:00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
projectName: "项目2",
|
|
||||||
constructionUnit: "施工单位2",
|
|
||||||
workLocation: "作业地点2",
|
|
||||||
supervisorReviewStatus: "待完成",
|
|
||||||
ballheadStatus: "待入库",
|
|
||||||
reviewStatus: "待复核",
|
|
||||||
submitEndTime: "2023-08-02 10:00:00",
|
|
||||||
returnStatus: "待回收"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 3,
|
|
||||||
projectName: "项目3",
|
|
||||||
constructionUnit: "施工单位3",
|
|
||||||
workLocation: "作业地点3",
|
|
||||||
supervisorReviewStatus: "待完成",
|
|
||||||
ballheadStatus: "待入库",
|
|
||||||
reviewStatus: "待复核",
|
|
||||||
submitEndTime: "2023-08-03 10:00:00",
|
|
||||||
returnStatus: "已回收待入库"
|
|
||||||
},
|
|
||||||
|
|
||||||
]);
|
|
||||||
|
|
||||||
const pageNum = ref(1); // 当前页码
|
const pageNum = ref(1); // 当前页码
|
||||||
const pageSize = ref(5); // 每页显示条数
|
const pageSize = ref(5); // 每页显示条数
|
||||||
const total = ref(20); // 总记录数
|
const total = ref(0); // 总记录数
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
function getList() {
|
||||||
|
loading.value = true;
|
||||||
|
const params = {
|
||||||
|
pageNum: pageNum.value,
|
||||||
|
pageSize: pageSize.value,
|
||||||
|
projectName: queryForm.value.projectName,
|
||||||
|
constructionUnit: queryForm.value.constructionUnit,
|
||||||
|
reviewStatus: queryForm.value.reviewStatus
|
||||||
|
};
|
||||||
|
listProjectCompletionReview(params).then(response => {
|
||||||
|
tableData.value = response.rows || response.data || [];
|
||||||
|
total.value = response.total || 0;
|
||||||
|
loading.value = false;
|
||||||
|
}).catch(() => {
|
||||||
|
loading.value = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
function handleQuery() {
|
||||||
|
pageNum.value = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
function resetQuery() {
|
||||||
|
queryForm.value = {
|
||||||
|
projectName: "",
|
||||||
|
constructionUnit: "",
|
||||||
|
reviewStatus: ""
|
||||||
|
};
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
// 现场复核施工结果弹窗-打开
|
// 现场复核施工结果弹窗-打开
|
||||||
const handleReview = (row) => {
|
const handleReview = (row) => {
|
||||||
|
|
@ -148,6 +151,11 @@ const handleReview = (row) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 组件挂载时获取数据
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,9 @@ const data = reactive({
|
||||||
form: {},
|
form: {},
|
||||||
queryParams: {
|
queryParams: {
|
||||||
deptName: undefined,
|
deptName: undefined,
|
||||||
status: undefined
|
status: undefined,
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 1000
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
parentId: [{ required: true, message: "上级部门不能为空", trigger: "blur" }],
|
parentId: [{ required: true, message: "上级部门不能为空", trigger: "blur" }],
|
||||||
|
|
@ -176,7 +178,7 @@ const { queryParams, form, rules } = toRefs(data)
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
listDept(queryParams.value).then(response => {
|
listDept(queryParams.value).then(response => {
|
||||||
deptList.value = proxy.handleTree(response.data, "deptId")
|
deptList.value = proxy.handleTree(response.rows, "deptId")
|
||||||
loading.value = false
|
loading.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue