|
|
@@ -0,0 +1,268 @@
|
|
|
+<template>
|
|
|
+ <el-dialog
|
|
|
+ v-model="dialogVisible"
|
|
|
+ title="未填报详情"
|
|
|
+ width="80%"
|
|
|
+ top="5vh"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ @closed="handleClosed"
|
|
|
+ >
|
|
|
+ <!-- 搜索条件区域 -->
|
|
|
+ <ContentWrap class="mb-15px">
|
|
|
+ <el-form
|
|
|
+ :model="searchParams"
|
|
|
+ ref="searchFormRef"
|
|
|
+ :inline="true"
|
|
|
+ label-width="100px"
|
|
|
+ >
|
|
|
+ <el-form-item label="创建时间" prop="createTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="searchParams.createTime"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ type="daterange"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
|
|
+ class="!w-320px"
|
|
|
+ @change="handleSearch"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button @click="handleSearch">
|
|
|
+ <Icon icon="ep:search" class="mr-5px" /> 搜索
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="resetSearch">
|
|
|
+ <Icon icon="ep:refresh" class="mr-5px" /> 重置
|
|
|
+ </el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </ContentWrap>
|
|
|
+
|
|
|
+ <!-- 列表区域 -->
|
|
|
+ <ContentWrap>
|
|
|
+ <div class="table-container">
|
|
|
+ <el-table
|
|
|
+ v-loading="loading"
|
|
|
+ :data="list"
|
|
|
+ :stripe="true"
|
|
|
+ style="width: 100%"
|
|
|
+ :cell-style="cellStyle"
|
|
|
+ empty-text="暂无未填报数据"
|
|
|
+ table-layout="fixed"
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ label="日期"
|
|
|
+ align="center"
|
|
|
+ prop="reportDate"
|
|
|
+ width="120"
|
|
|
+ >
|
|
|
+ <template #default="scope">
|
|
|
+ <span class="date-content">{{ scope.row.reportDate }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="部门名称"
|
|
|
+ prop="deptNames"
|
|
|
+ min-width="300"
|
|
|
+ >
|
|
|
+ <template #default="scope">
|
|
|
+ <div class="dept-names-content">
|
|
|
+ {{ scope.row.deptNames || '-' }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 分页
|
|
|
+ <Pagination
|
|
|
+ :total="total"
|
|
|
+ v-model:page="searchParams.pageNo"
|
|
|
+ v-model:limit="searchParams.pageSize"
|
|
|
+ @pagination="getList"
|
|
|
+ /> -->
|
|
|
+ </ContentWrap>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import { ref, reactive, watch, nextTick } from 'vue'
|
|
|
+import {IotRhDailyReportApi} from "@/api/pms/iotrhdailyreport";
|
|
|
+
|
|
|
+const { t } = useI18n()
|
|
|
+const message = useMessage()
|
|
|
+
|
|
|
+// 弹窗显示控制
|
|
|
+const dialogVisible = ref(false)
|
|
|
+
|
|
|
+// 搜索参数
|
|
|
+const searchParams = reactive({
|
|
|
+ pageNo: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ createTime: []
|
|
|
+})
|
|
|
+
|
|
|
+// 列表数据
|
|
|
+const list = ref<any[]>([])
|
|
|
+const total = ref(0)
|
|
|
+const loading = ref(false)
|
|
|
+
|
|
|
+// 接收父组件传递的查询参数
|
|
|
+const props = defineProps<{
|
|
|
+ queryParams: any
|
|
|
+}>()
|
|
|
+
|
|
|
+// 搜索表单引用
|
|
|
+const searchFormRef = ref()
|
|
|
+
|
|
|
+// 打开弹窗
|
|
|
+const open = () => {
|
|
|
+ // 复制父组件的查询参数
|
|
|
+ if (props.queryParams.createTime && props.queryParams.createTime.length > 0) {
|
|
|
+ searchParams.createTime = [...props.queryParams.createTime]
|
|
|
+ }
|
|
|
+
|
|
|
+ dialogVisible.value = true
|
|
|
+ // 获取数据
|
|
|
+ nextTick(() => {
|
|
|
+ getList()
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+// 获取列表数据
|
|
|
+const getList = async () => {
|
|
|
+ // 检查时间范围
|
|
|
+ if (!searchParams.createTime || searchParams.createTime.length === 0) {
|
|
|
+ list.value = []
|
|
|
+ total.value = 0
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ loading.value = true
|
|
|
+ try {
|
|
|
+ const res = await IotRhDailyReportApi.rhUnReportDetails({
|
|
|
+ createTime: searchParams.createTime
|
|
|
+ })
|
|
|
+
|
|
|
+ // 处理返回数据
|
|
|
+ if (res && Array.isArray(res)) {
|
|
|
+ list.value = res
|
|
|
+ total.value = res.length
|
|
|
+ } else {
|
|
|
+ list.value = []
|
|
|
+ total.value = 0
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取未填报数据失败', error)
|
|
|
+ message.error('获取未填报数据失败')
|
|
|
+ list.value = []
|
|
|
+ total.value = 0
|
|
|
+ } finally {
|
|
|
+ loading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 搜索
|
|
|
+const handleSearch = () => {
|
|
|
+ searchParams.pageNo = 1
|
|
|
+ getList()
|
|
|
+}
|
|
|
+
|
|
|
+// 重置搜索
|
|
|
+const resetSearch = () => {
|
|
|
+ searchFormRef.value?.resetFields()
|
|
|
+ handleSearch()
|
|
|
+}
|
|
|
+
|
|
|
+// 单元格样式
|
|
|
+const cellStyle = ({ row, column, rowIndex, columnIndex }: any) => {
|
|
|
+ // 为所有列设置基本样式
|
|
|
+ const baseStyle = {
|
|
|
+ padding: '8px 4px'
|
|
|
+ }
|
|
|
+
|
|
|
+ if (column.property === 'deptNames') {
|
|
|
+ return {
|
|
|
+ ...baseStyle,
|
|
|
+ whiteSpace: 'normal',
|
|
|
+ wordBreak: 'break-all',
|
|
|
+ lineHeight: '1.5'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return baseStyle
|
|
|
+}
|
|
|
+
|
|
|
+// 弹窗关闭处理
|
|
|
+const handleClosed = () => {
|
|
|
+ list.value = []
|
|
|
+ total.value = 0
|
|
|
+ searchParams.pageNo = 1
|
|
|
+}
|
|
|
+
|
|
|
+// 暴露方法给父组件
|
|
|
+defineExpose({
|
|
|
+ open
|
|
|
+})
|
|
|
+
|
|
|
+// 监听父组件查询参数变化
|
|
|
+watch(() => props.queryParams.createTime, (newVal) => {
|
|
|
+ if (newVal && newVal.length > 0) {
|
|
|
+ searchParams.createTime = [...newVal]
|
|
|
+ }
|
|
|
+}, { deep: true })
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+/* 表格容器确保正确布局 */
|
|
|
+.table-container {
|
|
|
+ width: 100%;
|
|
|
+ overflow-x: auto;
|
|
|
+}
|
|
|
+
|
|
|
+.date-content {
|
|
|
+ white-space: nowrap;
|
|
|
+}
|
|
|
+
|
|
|
+.dept-names-content {
|
|
|
+ white-space: normal;
|
|
|
+ word-break: break-all;
|
|
|
+ line-height: 1.5;
|
|
|
+ padding: 8px 4px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 深度样式修改确保表格正确显示 */
|
|
|
+:deep(.el-table) {
|
|
|
+ table-layout: fixed;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-table .el-table__cell) {
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-table .cell) {
|
|
|
+ white-space: normal;
|
|
|
+ word-break: break-all;
|
|
|
+ line-height: 1.5;
|
|
|
+ padding: 8px 4px;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-table td.el-table__cell) {
|
|
|
+ padding: 8px 4px;
|
|
|
+ border-bottom: 1px solid var(--el-table-border-color);
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-table th.el-table__cell) {
|
|
|
+ padding: 8px 4px;
|
|
|
+ background-color: var(--el-table-header-bg-color);
|
|
|
+}
|
|
|
+
|
|
|
+/* 确保列宽正确分配 */
|
|
|
+:deep(.el-table__body colgroup col:nth-child(1)) {
|
|
|
+ width: 120px;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-table__body colgroup col:nth-child(2)) {
|
|
|
+ width: auto;
|
|
|
+}
|
|
|
+</style>
|