移交接收管理

This commit is contained in:
cwchen 2025-09-24 16:31:14 +08:00
parent 258e5bc4b6
commit 096dae3c14
7 changed files with 170 additions and 47 deletions

View File

@ -93,6 +93,8 @@
v-model="queryParams[item.f_model]" v-model="queryParams[item.f_model]"
/> />
</el-form-item> </el-form-item>
<!-- 自定义搜索插槽父组件可自行插入 el-form-item -->
<slot name="form" :queryParams="queryParams"></slot>
<el-form-item v-if="showBtnCrews"> <el-form-item v-if="showBtnCrews">
<el-button <el-button
v-if="showQueryButtons" v-if="showQueryButtons"

View File

@ -2,25 +2,22 @@ export const formLabel = [
{ {
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_type: 'ipt', f_type: 'ipt',
f_label: '单项工程名称', f_label: '项目名称',
f_model: 'proName', f_model: 'proName',
f_max: 32, f_max: 32,
}, },
{ {
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_type: 'sel', f_type: 'ipt',
f_label: '项目类型', f_label: '单项工程名称',
f_model: 'proType', f_model: 'singleProName',
f_selList: [], f_max: 32,
f_dict: 'pro_type',
}, },
{ {
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_type: 'sel', f_type: 'date',
f_label: '电压等级', f_label: '移交时间',
f_model: 'voltageLevel', f_model: 'transferDate',
f_selList: [],
f_dict: 'voltage_level',
}, },
] ]

View File

@ -3,7 +3,13 @@
<div class="app-container"> <div class="app-container">
<TableModel :formLabel="formLabel" :showOperation="true" :showRightTools="true" ref="recordTableRef" <TableModel :formLabel="formLabel" :showOperation="true" :showRightTools="true" ref="recordTableRef"
:columnsList="columnsList" :request-api="getTransferApplyListApi"> :columnsList="columnsList" :request-api="getTransferApplyListApi">
<template #form="{ queryParams }">
<el-form-item prop="deptId" style="width: 240px;">
<treeselect v-model="queryParams.deptId" :options="treeDataList" placeholder="请选择接收单位" value-key="id"
:disable-branch-nodes="false" noChildrenText="没有数据了" noOptionsText="没有数据了" noResultsText="没有搜索结果"
/>
</el-form-item>
</template>
<template slot="auditStatus" slot-scope="{ data }"> <template slot="auditStatus" slot-scope="{ data }">
<el-tag size="mini" :type="getStatusType(data.auditStatus)"> <el-tag size="mini" :type="getStatusType(data.auditStatus)">
{{ getStatusText(data.auditStatus) }} {{ getStatusText(data.auditStatus) }}
@ -17,8 +23,8 @@
</template> </template>
<template slot="handle" slot-scope="{ data }"> <template slot="handle" slot-scope="{ data }">
<el-button plain size="mini" type="success" icon="el-icon-warning-outline" v-hasPermi="['transfer:apply:query']" <el-button plain size="mini" type="success" icon="el-icon-warning-outline"
@click="handleDetail(data)"> v-hasPermi="['transfer:apply:query']" @click="handleDetail(data)">
详情 详情
</el-button> </el-button>
</template> </template>
@ -38,14 +44,16 @@ import {
} from '@/api/filesTransfer/record.js' } from '@/api/filesTransfer/record.js'
import RecordList from './components/recordList' import RecordList from './components/recordList'
import { encryptWithSM4 } from '@/utils/sm' import { encryptWithSM4 } from '@/utils/sm'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { getDeptSelectApi } from '@/api/select'
export default { export default {
name: 'Accept', name: 'Accept',
dicts: ['pro_type', 'voltage_level'], dicts: ['pro_type', 'voltage_level'],
components: { components: {
TableModel, TableModel,
RecordList RecordList,
Treeselect
}, },
data() { data() {
return { return {
@ -56,22 +64,21 @@ export default {
isflag: false, isflag: false,
row: {}, row: {},
loading: false, loading: false,
jumpType:'' jumpType: '',
treeDataList:[],
} }
}, },
created() { created() {
// this.initData();
if (Array.isArray(this.formLabel)) {
this.formLabel.forEach((item) => {
if (item.f_dict && this.dict && this.dict.type && this.dict.type[item.f_dict]) {
this.$set(item, 'f_selList', this.dict.type[item.f_dict])
}
})
}
}, },
methods: { methods: {
async initData() {
await getDeptSelectApi().then(res => {
this.treeDataList = this.convertToVueTree(res.data);
});
},
closeDialog() { closeDialog() {
this.isflag = false; this.isflag = false;
}, },
@ -178,6 +185,28 @@ export default {
return '未知状态' return '未知状态'
} }
}, },
// -
convertToVueTree(data, level = 1) {
if (!data || !Array.isArray(data)) {
return []
}
return data.map(item => {
const node = {
id: item.deptId,
label: item.deptName,
}
if (item.children && Array.isArray(item.children) && item.children.length > 0) {
if (level < 3) {
const children = this.convertToVueTree(item.children, level + 1)
if (children.length > 0) node.children = children
}
}
return node
})
},
}, },
} }
</script> </script>

View File

@ -3,6 +3,7 @@
<div class="app-container"> <div class="app-container">
<TableModel :formLabel="formLabel" :showOperation="true" :showRightTools="true" ref="issueTableRef" <TableModel :formLabel="formLabel" :showOperation="true" :showRightTools="true" ref="issueTableRef"
:columnsList="columnsList" :request-api="getTransferApplyListApi"> :columnsList="columnsList" :request-api="getTransferApplyListApi">
<template slot="btn"> <template slot="btn">
<el-button plain size="mini" type="primary" icon="el-icon-plus" v-hasPermi="['transfer:apply:add']" <el-button plain size="mini" type="primary" icon="el-icon-plus" v-hasPermi="['transfer:apply:add']"
@click="handleAdd"> @click="handleAdd">
@ -39,7 +40,6 @@ import {
getTransferApplyListApi, getTransferApplyListApi,
} from '@/api/filesTransfer/apply.js' } from '@/api/filesTransfer/apply.js'
import IssueForm from './prop/issueForm' import IssueForm from './prop/issueForm'
import { encryptWithSM4 } from '@/utils/sm'
export default { export default {
@ -59,6 +59,7 @@ export default {
isAdd: '', isAdd: '',
row: {}, row: {},
loading: false, loading: false,
} }
}, },
@ -71,9 +72,11 @@ export default {
} }
}) })
} }
}, },
methods: { methods: {
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.title = "新增"; this.title = "新增";

View File

@ -20,7 +20,7 @@
<!-- 文件详情表格 --> <!-- 文件详情表格 -->
<div class="table-section"> <div class="table-section">
<el-table :data="fileList" border style="width: 100%" class="detail-table"> <el-table :data="fileList" border style="width: 100%" class="detail-table" v-if="viewStatus === 'record'">
<el-table-column prop="index" label="序号" width="80" align="center"> <el-table-column prop="index" label="序号" width="80" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.$index + 1 }} {{ scope.$index + 1 }}
@ -51,6 +51,33 @@
<div class="archive-name-cell">{{ scope.row.archiveName }}</div> <div class="archive-name-cell">{{ scope.row.archiveName }}</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table>
<el-table :data="fileList" border style="width: 100%" class="detail-table" v-if="viewStatus === 'accept'">
<el-table-column prop="index" label="序号" width="80" align="center">
<template slot-scope="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="proName" label="移交时间" min-width="150">
<template slot-scope="scope">
{{ scope.row.proName || '--'}}
</template>
</el-table-column>
<el-table-column prop="archiveName" label="档案名称" min-width="300">
<template slot-scope="scope">
<div class="archive-name-cell">{{ scope.row.archiveName }}</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="接收状态" min-width="120">
<template slot-scope="scope">
<el-tag v-if="scope.row.integrityStatus === '1'" :type="scope.row.integrityStatus === '1' ? 'success' : 'danger'">
{{ scope.row.integrityStatus === '1' ? '已接收' : '未接收' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="archiveName" label="操作" min-width="100" v-if="viewStatus === 'accept'"> <el-table-column prop="archiveName" label="操作" min-width="100" v-if="viewStatus === 'accept'">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button plain icon="el-icon-check" type="primary" size="mini" @click="handleAccept(scope.row)">确认接收</el-button> <el-button plain icon="el-icon-check" type="primary" size="mini" @click="handleAccept(scope.row)">确认接收</el-button>
@ -285,5 +312,35 @@ export default {
.back-btn{ .back-btn{
height: 50px; height: 50px;
} }
/* 确认弹框样式 */
.confirm-content {
display: flex;
align-items: flex-start;
padding: 20px 0;
}
.confirm-icon {
font-size: 48px;
color: #E6A23C;
margin-right: 16px;
flex-shrink: 0;
}
.confirm-text {
flex: 1;
}
.main-message {
margin: 0 0 8px 0;
font-size: 16px;
color: #303133;
line-height: 1.5;
}
.sub-message {
margin: 0;
font-size: 14px;
color: #909399;
line-height: 1.4;
}
</style> </style>

View File

@ -2,25 +2,22 @@ export const formLabel = [
{ {
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_type: 'ipt', f_type: 'ipt',
f_label: '单项工程名称', f_label: '项目名称',
f_model: 'proName', f_model: 'proName',
f_max: 32, f_max: 32,
}, },
{ {
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_type: 'sel', f_type: 'ipt',
f_label: '项目类型', f_label: '单项工程名称',
f_model: 'proType', f_model: 'singleProName',
f_selList: [], f_max: 32,
f_dict: 'pro_type',
}, },
{ {
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_type: 'sel', f_type: 'date',
f_label: '电压等级', f_label: '移交时间',
f_model: 'voltageLevel', f_model: 'transferDate',
f_selList: [],
f_dict: 'voltage_level',
}, },
] ]

View File

@ -3,7 +3,13 @@
<div class="app-container"> <div class="app-container">
<TableModel :formLabel="formLabel" :showOperation="true" :showRightTools="true" ref="recordTableRef" <TableModel :formLabel="formLabel" :showOperation="true" :showRightTools="true" ref="recordTableRef"
:columnsList="columnsList" :request-api="getTransferApplyListApi"> :columnsList="columnsList" :request-api="getTransferApplyListApi">
<template #form="{ queryParams }">
<el-form-item prop="deptId" style="width: 240px;">
<treeselect v-model="queryParams.deptId" :options="treeDataList" placeholder="请选择接收单位" value-key="id"
:disable-branch-nodes="false" noChildrenText="没有数据了" noOptionsText="没有数据了" noResultsText="没有搜索结果"
/>
</el-form-item>
</template>
<template slot="auditStatus" slot-scope="{ data }"> <template slot="auditStatus" slot-scope="{ data }">
<el-tag size="mini" :type="getStatusType(data.auditStatus)"> <el-tag size="mini" :type="getStatusType(data.auditStatus)">
{{ getStatusText(data.auditStatus) }} {{ getStatusText(data.auditStatus) }}
@ -38,14 +44,17 @@ import {
} from '@/api/filesTransfer/record.js' } from '@/api/filesTransfer/record.js'
import RecordList from './components/recordList' import RecordList from './components/recordList'
import { encryptWithSM4 } from '@/utils/sm' import { encryptWithSM4 } from '@/utils/sm'
import { getDeptSelectApi } from '@/api/select'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default { export default {
name: 'Record', name: 'Record',
dicts: ['pro_type', 'voltage_level'], dicts: ['pro_type', 'voltage_level'],
components: { components: {
TableModel, TableModel,
RecordList RecordList,
Treeselect
}, },
data() { data() {
return { return {
@ -56,22 +65,29 @@ export default {
isflag: false, isflag: false,
row: {}, row: {},
loading: false, loading: false,
jumpType:'' jumpType:'',
treeDataList:[],
} }
}, },
created() { created() {
// //
if (Array.isArray(this.formLabel)) { /* if (Array.isArray(this.formLabel)) {
this.formLabel.forEach((item) => { this.formLabel.forEach((item) => {
if (item.f_dict && this.dict && this.dict.type && this.dict.type[item.f_dict]) { if (item.f_dict && this.dict && this.dict.type && this.dict.type[item.f_dict]) {
this.$set(item, 'f_selList', this.dict.type[item.f_dict]) this.$set(item, 'f_selList', this.dict.type[item.f_dict])
} }
}) })
} } */
this.initData();
}, },
methods: { methods: {
async initData() {
await getDeptSelectApi().then(res => {
this.treeDataList = this.convertToVueTree(res.data);
});
},
closeDialog() { closeDialog() {
this.isflag = false; this.isflag = false;
}, },
@ -178,6 +194,28 @@ export default {
return '未知状态' return '未知状态'
} }
}, },
// -
convertToVueTree(data, level = 1) {
if (!data || !Array.isArray(data)) {
return []
}
return data.map(item => {
const node = {
id: item.deptId,
label: item.deptName,
}
if (item.children && Array.isArray(item.children) && item.children.length > 0) {
if (level < 3) {
const children = this.convertToVueTree(item.children, level + 1)
if (children.length > 0) node.children = children
}
}
return node
})
},
}, },
} }
</script> </script>