From 9cbd3ec7007bac8b7ae5d49d2e521889fda28822 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Thu, 19 Dec 2024 14:22:30 +0800
Subject: [PATCH] 修改数据上报
---
src/views/dataUpload/peopleLocate/components/addReport.vue | 6
src/api/dataUpload/educateTrain/index.ts | 21
src/views/dataUpload/saftyBaseInfo/saftyFiles/index.vue | 284 ++++++++++
src/api/dataUpload/saftyBaseInfo/judgeReport.ts | 42 +
src/views/dataUpload/educateTrain/trainPlan/components/addReport.vue | 281 ++++++++++
src/views/dataUpload/saftyBaseInfo/productionAbility/components/addReport.vue | 248 ++++++++
src/views/dataUpload/saftyBaseInfo/saftyFiles/components/addReport.vue | 236 ++++++++
src/views/dataUpload/educateTrain/trainPlan/index.vue | 271 +++++++++
src/views/dataUpload/saftyBaseInfo/productionAbility/index.vue | 265 +++++++++
9 files changed, 1,651 insertions(+), 3 deletions(-)
diff --git a/src/api/dataUpload/educateTrain/index.ts b/src/api/dataUpload/educateTrain/index.ts
index 02cae8c..42f3fe5 100644
--- a/src/api/dataUpload/educateTrain/index.ts
+++ b/src/api/dataUpload/educateTrain/index.ts
@@ -43,6 +43,27 @@
method: 'post',
data: data
});
+ },
+ getTrainPlanList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/plan/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addTrainPlan: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/plan`,
+ method: 'post',
+ data: data
+ });
+ },
+ delTrainPlan: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/plan/del`,
+ method: 'post',
+ data: data
+ });
}
};
}
diff --git a/src/api/dataUpload/saftyBaseInfo/judgeReport.ts b/src/api/dataUpload/saftyBaseInfo/judgeReport.ts
index adfbc48..08a87db 100644
--- a/src/api/dataUpload/saftyBaseInfo/judgeReport.ts
+++ b/src/api/dataUpload/saftyBaseInfo/judgeReport.ts
@@ -148,6 +148,48 @@
method: 'post',
data: data
});
+ },
+ getCapacityList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/craft/capacity/manage/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addCapacity: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/craft/capacity/manage`,
+ method: 'post',
+ data: data
+ });
+ },
+ delCapacity: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/craft/capacity/manage/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getSafeFileList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/safe/manage/file/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addSafeFile: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/safe/manage/file`,
+ method: 'post',
+ data: data
+ });
+ },
+ delSafeFile: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/safe/manage/file/del`,
+ method: 'post',
+ data: data
+ });
}
};
}
diff --git a/src/views/dataUpload/educateTrain/trainPlan/components/addReport.vue b/src/views/dataUpload/educateTrain/trainPlan/components/addReport.vue
new file mode 100644
index 0000000..61d4651
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/trainPlan/components/addReport.vue
@@ -0,0 +1,281 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="160px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="培训计划名称" prop="planName">
+ <el-input v-model.trim="form.planName" placeholder="培训计划名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="培训形式" prop="planMode">
+ <el-radio-group v-model="form.planMode">
+ <el-radio :label="1">线上</el-radio>
+ <el-radio :label="2">线下</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="线下培训印证照片">
+ <el-upload accept="image/*" multiple list-type="picture-card" :action="uploadUrl" :headers="header"
+ method="post" :on-exceed="showTip" :on-preview="handlePictureCardPreview"
+ :on-success="handleAvatarSuccess" :limit='2' v-model:file-list="fileList"
+ :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+ <el-icon>
+ <Plus/>
+ </el-icon>
+ <template #tip>
+ <div class="el-upload__tip">上传图片尺寸小于5M,最多可上传5张</div>
+ </template>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="培训时间" prop="planBeginTime">
+ <el-date-picker
+ v-model="timeRange"
+ @change="changeRange"
+ type="datetimerange"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+ <el-form-item label="删除状态" prop="deleted">
+ <el-radio-group v-model="form.deleted">
+ <el-radio :label="0">未删除</el-radio>
+ <el-radio :label="1">已删除</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-dialog v-model="imgDialog">
+ <img width="100%" :src="imageUrl" alt="Preview Image"/>
+ </el-dialog>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import {reactive, toRefs, onMounted, defineComponent, ref} from 'vue';
+import {ElMessageBox, ElMessage} from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ planName: string
+ planMode: number | null
+ offlineFile: string
+ planBeginTime: string
+ planEndTime: string
+ deleted: number | null
+ }
+ timeRange: [],
+ rules: {},
+ fileList: [],
+ uploadUrl: string,
+ header: {},
+ imgDialog: boolean,
+ imageUrl: string
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ planName: '',
+ planMode: null,
+ offlineFile: '',
+ planBeginTime: '',
+ planEndTime: '',
+ deleted: 0,
+ },
+ rules: {
+ planName: [{required: true, message: '请填写培训计划名称', trigger: 'blur'}],
+ planMode: [{required: true, message: '请选择培训形式', trigger: 'blur'}],
+ planBeginTime: [{required: true, message: '请选择培训开始结束时间', trigger: 'blur'}]
+ },
+ timeRange: [],
+ fileList: [],
+ uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+ header: {
+ uid: Cookies.get('uid'),
+ Authorization: Cookies.get('token')
+ },
+ imgDialog: false,
+ imageUrl: ''
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报'
+ state.form = {
+ uuid: '',
+ planName: '',
+ planMode: null,
+ offlineFile: '',
+ planBeginTime: '',
+ planEndTime: '',
+ deleted: 0,
+ }
+ state.fileList = []
+ } else {
+ state.title = '重新上报'
+ Object.keys(state.form).forEach(key => {
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
+ state.form[key] = JSON.parse(JSON.stringify(data))[key];
+ }
+ })
+ state.timeRange = [state.form.planBeginTime,state.form.planEndTime]
+ if (data.offlineFile !== '') {
+ state.fileList = data.offlineFile.split(',').map((i, index) => {
+ return {
+ url: i,
+ name: i
+ }
+ })
+ } else {
+ state.fileList = []
+ }
+
+ // state.form = {
+ // uuid: data.uuid,
+ // planName: '',
+ // craftContent: '',
+ // mainProdEquip: '',
+ // keyParts: '',
+ // hazardCode: '',
+ // msds: '',
+ // hazardCharacter: '',
+ // parameterIndex: '',
+ // controlMean: '',
+ // offlineFile: '',
+ // reactionType: '',
+ // keyMonitorUnit: ''
+ // }
+ }
+ };
+
+ const changeRange=(value)=>{
+ if(!value){
+ state.form.planBeginTime = ""
+ state.form.planEndTime = ""
+ }else {
+ state.form.planBeginTime = state.timeRange[0]
+ state.form.planEndTime = state.timeRange[1]
+ }
+ }
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid: Boolean) => {
+ if (valid) {
+ state.form.offlineFile = state.fileList.map(i => i.name).join(',')
+ const res = await educateTrainApi().addTrainPlan([state.form])
+ if (res.data.code == '200') {
+ ElMessage({
+ type: 'success',
+ message: '数据上报成功'
+ })
+ state.isShowDialog = false
+ state.fileList = []
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: '请完善基本信息'
+ })
+ }
+ })
+ }
+
+ // 图片上传
+ const showTip = () => {
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ }
+
+ const picSize = async (rawFile: any) => {
+ if (rawFile.size / 1024 / 1024 > 5) {
+ ElMessage({
+ type: 'warning',
+ message: '文件大小不能超过5M'
+ });
+ return false
+ }
+ }
+
+ const handleAvatarSuccess = (res: any, uploadFile: any) => {
+ if (res) {
+ uploadFile.name = res
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: '文件上传失败'
+ })
+ }
+ }
+
+ const handlePictureCardPreview = (uploadFile) => {
+ state.imageUrl = uploadFile.url
+ state.imgDialog = true;
+ }
+
+ const handleRemove = (file, uploadFiles, type) => {
+ state.fileList = uploadFiles
+ }
+
+
+ return {
+ formRef,
+ showTip,
+ picSize,
+ changeRange,
+ handleAvatarSuccess,
+ handlePictureCardPreview,
+ handleRemove,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/educateTrain/trainPlan/index.vue b/src/views/dataUpload/educateTrain/trainPlan/index.vue
new file mode 100644
index 0000000..fbc7046
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/trainPlan/index.vue
@@ -0,0 +1,271 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="planName" label="培训计划名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="planMode" label="培训形式" show-overflow-tooltip>
+ <template #default="scope">
+ {{ scope.row.planMode == 1? '线上':scope.row.planMode == 2? '线下':'--' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="offlineFile" label="印证照片" show-overflow-tooltip>
+ <template #default="scope">
+ <div v-if="scope.row.offlineFile && scope.row.offlineFile !== ''">
+ <el-image
+ v-for="(item,index) in scope.row.offlineFile.split(',')"
+ style="width: 50px; height: 50px"
+ :src="item"
+ fit="cover"
+ :preview-teleported= true
+ />
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column prop="planBeginTime" label="培训开始时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="planEndTime" label="培训结束时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+ id: number|null
+ updateDate: string
+ createDate: string
+ planName: string
+ planMode: number|null
+ offlineFile: string
+ planBeginTime: string
+ planEndTime: string
+}
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+ baseUrl: string
+}
+
+export default defineComponent({
+ name: 'trainPlan',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null,
+ baseUrl: import.meta.env.VITE_API_URL
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ console.log(state.baseUrl)
+ });
+
+ const getData = async ()=>{
+ const res = await educateTrainApi().getTrainPlanList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: TableDataRow) => {
+ ElMessageBox.confirm(`此操作将永久删除计划名称:“${row.planName}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await educateTrainApi().delTrainPlan({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ const openFile=(file: string)=>{
+ axios.get(import.meta.env.VITE_API_URL + file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+ if (res) {
+ const link = document.createElement('a')
+ let blob = new Blob([res.data],{type: res.data.type})
+ link.style.display = "none";
+ link.href = URL.createObjectURL(blob); // 创建URL
+ window.open(link.href)
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: '文件读取失败'
+ });
+ }
+ })
+ }
+
+ return {
+ reportRef,
+ openDialog,
+ openFile,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/peopleLocate/components/addReport.vue b/src/views/dataUpload/peopleLocate/components/addReport.vue
index 4eb5c4c..bef28f2 100644
--- a/src/views/dataUpload/peopleLocate/components/addReport.vue
+++ b/src/views/dataUpload/peopleLocate/components/addReport.vue
@@ -167,7 +167,7 @@
floorNo: '',
handleTime: '',
handleInfo: '',
- thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+ thirdAddress: 'http://117.190.40.54:8081/location_system_5.4.9/login/login.html?company=GUOTAI&version=5.4.9'
},
rules:{
serialNumber: [{ required: true, message: '请填写序号', trigger: 'blur' }],
@@ -218,7 +218,7 @@
floorNo: '',
handleTime: '',
handleInfo: '',
- thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+ thirdAddress: 'http://117.190.40.54:8081/location_system_5.4.9/login/login.html?company=GUOTAI&version=5.4.9'
}
}else{
state.title = '重新上报';
@@ -237,7 +237,7 @@
floorNo: '',
handleTime: '',
handleInfo: '',
- thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+ thirdAddress: 'http://117.190.40.54:8081/location_system_5.4.9/login/login.html?company=GUOTAI&version=5.4.9'
}
}
};
diff --git a/src/views/dataUpload/saftyBaseInfo/productionAbility/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/productionAbility/components/addReport.vue
new file mode 100644
index 0000000..988e0ba
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/productionAbility/components/addReport.vue
@@ -0,0 +1,248 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="20">
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="生产工艺" prop="craftId">
+ <el-select v-model="form.craftId" filterable placeholder="请选择生产工艺" clearable style="width: 100%">
+ <el-option v-for="(item,index) in craftList" :key="index" :label="item.craftName" :value="item.uuid"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="年份" prop="theYear">
+ <el-date-picker
+ v-model="form.theYear"
+ type="year"
+ style="width: 100%"
+ value-format="YYYY"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="一月产能" prop="janCapacity">
+ <el-input v-model.number.trim="form.janCapacity" placeholder="一月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="二月产能" prop="febCapacity">
+ <el-input v-model.number.trim="form.febCapacity" placeholder="二月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="三月产能" prop="marCapacity">
+ <el-input v-model.number.trim="form.marCapacity" placeholder="三月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="四月产能" prop="aprCapacity">
+ <el-input v-model.number.trim="form.aprCapacity" placeholder="四月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="五月产能" prop="mayCapacity">
+ <el-input v-model.number.trim="form.mayCapacity" placeholder="五月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="六月产能" prop="juneCapacity">
+ <el-input v-model.number.trim="form.juneCapacity" placeholder="六月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="七月产能" prop="julyCapacity">
+ <el-input v-model.number.trim="form.julyCapacity" placeholder="七月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="八月产能" prop="augCapacity">
+ <el-input v-model.number.trim="form.augCapacity" placeholder="八月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="九月产能" prop="sepCapacity">
+ <el-input v-model.number.trim="form.sepCapacity" placeholder="九月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="十月产能" prop="octCapacity">
+ <el-input v-model.number.trim="form.octCapacity" placeholder="十月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="十一月产能" prop="noveCapacity">
+ <el-input v-model.number.trim="form.noveCapacity" placeholder="十一月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="十二月产能" prop="decCapacity">
+ <el-input v-model.number.trim="form.decCapacity" placeholder="十二月产能" type="number"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+ <el-form-item label="删除状态" prop="deleted">
+ <el-radio-group v-model="form.deleted">
+ <el-radio :label="0">未删除</el-radio>
+ <el-radio :label="1">已删除</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import {ElMessageBox, ElMessage, FormRules, FormInstance} from 'element-plus';
+import axios from "axios";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ craftId: string
+ theYear: string
+ janCapacity: number | null
+ febCapacity: number | null
+ marCapacity: number | null
+ aprCapacity: number | null
+ mayCapacity: number | null
+ juneCapacity: number | null
+ julyCapacity: number | null
+ augCapacity: number | null
+ sepCapacity: number | null
+ octCapacity: number | null
+ noveCapacity: number | null
+ decCapacity: number | null
+ deleted: number | null
+ }
+ rules:{}
+ craftList: []
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ props: [],
+ setup(props, context) {
+ const formRef = ref()
+ const addFormRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ craftId: '',
+ theYear: '',
+ janCapacity: null,
+ febCapacity: null,
+ marCapacity: null,
+ aprCapacity: null,
+ mayCapacity: null,
+ juneCapacity: null,
+ julyCapacity: null,
+ augCapacity: null,
+ sepCapacity: null,
+ octCapacity: null,
+ noveCapacity: null,
+ decCapacity: null,
+ deleted: 0
+ },
+ rules:{
+ craftId: [{ required: true, message: '请选择生产工艺', trigger: 'blur' }],
+ theYear: [{ required: true, message: '请输入所属年份', trigger: 'blur' }]
+ },
+ craftList: []
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object, list: []) => {
+ state.isShowDialog = true
+ state.craftList = list
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid: '',
+ craftId: '',
+ theYear: '',
+ janCapacity: null,
+ febCapacity: null,
+ marCapacity: null,
+ aprCapacity: null,
+ mayCapacity: null,
+ juneCapacity: null,
+ julyCapacity: null,
+ augCapacity: null,
+ sepCapacity: null,
+ octCapacity: null,
+ noveCapacity: null,
+ decCapacity: null,
+ deleted: 0
+ }
+ }else{
+ state.title = '重新上报';
+ Object.keys(state.form).forEach(key => {
+ if (Object.prototype.hasOwnProperty.call(data,key)) {
+ state.form[key] = JSON.parse(JSON.stringify(data))[key];
+ }
+ })
+ state.form.theYear = state.form.theYear.toString()
+ state.form.deleted = 0
+ }
+ }
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addCapacity([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+
+ return {
+ formRef,
+ addFormRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/productionAbility/index.vue b/src/views/dataUpload/saftyBaseInfo/productionAbility/index.vue
new file mode 100644
index 0000000..7690e7d
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/productionAbility/index.vue
@@ -0,0 +1,265 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="craftId" label="生产工艺id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="theYear" label="所属年份" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="janCapacity" label="一月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="febCapacity" label="二月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="marCapacity" label="三月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="aprCapacity" label="四月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="mayCapacity" label="五月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="juneCapacity" label="六月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="julyCapacity" label="七月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="augCapacity" label="八月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="sepCapacity" label="九月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="octCapacity" label="十月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="noveCapacity" label="十一月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="decCapacity" label="十二月" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateUser" label="修改人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+import Cookies from "js-cookie";
+import axios from "axios";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+ reportData: []
+ craftList: []
+ listQuery: {
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+ userTypeList: Array<any>
+}
+
+export default defineComponent({
+ name: 'productionAbility',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ craftList: [],
+ listQuery: {
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null,
+ userTypeList: [
+ {
+ name: '主要负责人',
+ value: 1
+ },
+ {
+ name: '安全管理人员',
+ value: 2
+ },
+ {
+ name: '特殊作业人员',
+ value: 3
+ }
+ ]
+ });
+
+ // 页面加载时
+ onMounted(async() => {
+ await getData()
+ await getCraftList()
+ })
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getCapacityList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const getCraftList = async ()=>{
+ const res = await judgeReportApi().getProductList({searchParams: {}, pageIndex: 1, pageSize: 999})
+ if(res.data.code == 200){
+ state.craftList = res.data.data
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data,state.craftList)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delCapacity({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ const viewPdf=(item: Object)=>{
+ console.log(item.filePath,555)
+ window.open(item.filePath)
+ }
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ viewPdf,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/saftyFiles/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/saftyFiles/components/addReport.vue
new file mode 100644
index 0000000..44be539
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/saftyFiles/components/addReport.vue
@@ -0,0 +1,236 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="150px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="文件名称" prop="fileName">
+ <el-input v-model.trim="form.fileName" placeholder="文件名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="文件类型" prop="fileType">
+ <el-select v-model="form.fileType" style="width: 100%">
+ <el-option
+ v-for="item in typeList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="附件" prop="filePath">
+ <el-upload accept=".pdf" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+ <el-button type="primary">点击上传</el-button>
+ <template #tip>
+ <div class="el-upload__tip">仅支持上传pdf文件,尺寸小于5M,最多可上传1张</div>
+ </template>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+ <el-form-item label="删除状态" prop="deleted">
+ <el-radio-group v-model="form.deleted">
+ <el-radio :label="0">未删除</el-radio>
+ <el-radio :label="1">已删除</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {userApi} from '/@/api/systemManage/user'
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string;
+ isShowDialog: boolean;
+ form: {
+ uuid: string
+ fileName: string
+ filePath: string
+ deleted: number | null
+ fileType: number | null
+ }
+ rules:{},
+ fileList: [],
+ typeList: Array<any>
+ uploadUrl: string,
+ header: {}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const checkFile = (rule: any, value: any, callback: any) => {
+ if(state.fileList.length == 0){
+ callback(new Error("请上传文件"))
+ } else {
+ callback();
+ }
+ }
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ fileName: '',
+ filePath: '',
+ deleted: 0,
+ fileType: null
+ },
+ rules:{
+ fileName: [{ required: true, message: '请填写文件名称', trigger: 'blur'}],
+ fileType: [{ required: true, message: '请选择文件类型', trigger: 'blur'}],
+ filePath: [{ required: true, validator: checkFile, trigger: 'blur'}],
+ },
+ fileList: [],
+ typeList: [],
+ uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+ header: {
+ uid: Cookies.get('uid'),
+ Authorization: Cookies.get('token')
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object,typeList: Array<any>) => {
+ state.isShowDialog = true;
+ state.typeList = typeList
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid: '',
+ fileName: '',
+ filePath: '',
+ deleted: 0,
+ fileType: null
+ }
+ state.fileList = []
+ }else{
+ state.title = '重新上报';
+ Object.keys(state.form).forEach(key => {
+ if (Object.prototype.hasOwnProperty.call(data,key)) {
+ state.form[key] = JSON.parse(JSON.stringify(data))[key];
+ }
+ })
+ if(data.filePath !== ''){
+ state.fileList = state.form.filePath.split(',').map((i,index) => {
+ return {
+ url: i,
+ name: '文件' + (index+1)
+ }
+ })
+ }else{
+ state.fileList = []
+ }
+ // state.form = {
+ // type: 1,
+ // uuid: data.uuid,
+ // fileName: '',
+ // remarks: '',
+ // evaluateTime: '',
+ // files: '',
+ // deleted: '0'
+ // }
+ }
+ };
+
+ // 图片上传
+ const showTip =()=>{
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ }
+
+ const picSize = async(rawFile: any) => {
+ if(rawFile.size / 1024 / 1024 > 5){
+ ElMessage({
+ type: 'warning',
+ message: '文件大小不能超过5M'
+ });
+ return false
+ }
+ }
+
+ const handleAvatarSuccess = (res:any, uploadFile: any) => {
+ if(res){
+ uploadFile.name = res
+ state.form.filePath = res
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: '文件上传失败'
+ })
+ }
+ }
+
+ const handleRemove = (file, uploadFiles,type) => {
+ state.form.filePath = ''
+ }
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addSafeFile([state.form])
+ if(res.data.code == '200'){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ state.fileList = []
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ return {
+ formRef,
+ showTip,
+ picSize,
+ handleAvatarSuccess,
+ handleRemove,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/saftyFiles/index.vue b/src/views/dataUpload/saftyBaseInfo/saftyFiles/index.vue
new file mode 100644
index 0000000..0fcd1ba
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/saftyFiles/index.vue
@@ -0,0 +1,284 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)"
+ :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="fileName" label="文件名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="fileType" label="文件类型" show-overflow-tooltip>
+ <template #default="scope">
+ {{ typeList.find(i => i.value == scope.row.fileType)?.label }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="updateUser" label="修改人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="uploadDate" label="上传时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button size="small" v-if="scope.row.filePath !== ''" text type="primary" @click="openFile(scope.row.filePath)">查看</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange"
+ class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]"
+ v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize"
+ layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import {toRefs, reactive, onMounted, ref, defineComponent} from 'vue'
+import {ElMessageBox, ElMessage} from 'element-plus'
+import {Plus} from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+ id: number | null
+ fileType: number | null
+ fileName: string
+ updateUser: string
+ uploadDate: string
+ filePath: string
+}
+
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+ typeList: Array<object>
+}
+
+export default defineComponent({
+ name: 'saftyFile',
+ components: {addReport},
+ setup() {
+ const reportRef = ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null,
+ typeList: [
+ {
+ value: 1,
+ label: '安全管理制度'
+ },
+ {
+ value: 2,
+ label: '安全操作规程',
+ },
+ {
+ value: 3,
+ label: '全员安全生产责任制'
+ }
+ ]
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async () => {
+ const res = await judgeReportApi().getSafeFileList(state.listQuery)
+ if (res.data.code == 200) {
+ state.reportData = res.data.data
+ state.total = res.data.total
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog = (type: string, data: object) => {
+ reportRef.value.open(type, data, state.typeList)
+ }
+
+ const openFile = (file: string) => {
+ // axios.get(file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+ // if (res) {
+ // const link = document.createElement('a')
+ // let blob = new Blob([res.data],{type: 'application/pdf'})
+ // link.style.display = "none";
+ // link.href = URL.createObjectURL(blob); // 创建URL
+ // window.open(link.href)
+ // } else {
+ // ElMessage({
+ // type: 'warning',
+ // message: '文件读取失败'
+ // });
+ // }
+ // })
+ window.open(file)
+ }
+
+ // 删除用户
+ const onRowDel = (row: TableDataRow) => {
+ ElMessageBox.confirm(`此操作将永久删除文件名称:“${row.fileName}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delSafeFile({ids: [row.id]})
+ if (res.data.code == '200') {
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {
+ });
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openFile,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+
+ .el-card {
+ border: 0;
+ }
+}
+</style>
--
Gitblit v1.9.2