From d91fd1557ebed3e9bcb8c051c71b9d41c0e36eef Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期二, 02 四月 2024 16:50:07 +0800 Subject: [PATCH] Default Changelist --- src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 898 ++++++++++++++++++++++++++++------------------------------- 1 files changed, 423 insertions(+), 475 deletions(-) diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue index 340b902..7cfecd0 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue @@ -4,57 +4,103 @@ <!-- <el-tab-pane label="申请中" name="1">--> <div style="height: 100%"> <el-row class="homeCard"> + <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px"> + <span>时间筛选:</span> + <el-date-picker v-model="timeRange" value-format="YYYY-MM-DD" type="daterange" @change="giveTime" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" /> + </div> + <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px"> + <span>负责人:</span> + <el-input v-model="searPara.headUserName" placeholder="负责人"/> + </div> + <div class="basic-line"> + <span>事业部:</span> + <el-select v-model="searPara.secondDepId"> + <el-option + v-for="item in dep4List" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </div> + <div class="basic-line"> <span>作业类型:</span> - <el-col :span="10"> - <div class="grid-content topInfo"> - <el-select v-model="searchWord"> - <el-option - v-for="item in workType" - :key="item.id" - :label="item.name" - :value="item.id" - /> - </el-select> - - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> + <el-select v-model="searPara.workType"> + <el-option + v-for="item in workType" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </div> + <div style="margin-left: 20px"> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> </el-row> <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="toApply()">申请</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default">删除</el-button>--> - <!-- <el-button type="success" size="default">设置分类</el-button>--> + <el-button type="primary" :icon="Download" size="default" @click="exportSheet()">导出记录</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> </el-row> <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column property="workPermitNo" label="作业申请单号" width="180" /> - <el-table-column property="applyUname" label="申请人" /> - <el-table-column property="depName" label="部门名称" /> - <el-table-column property="operators" label="作业人" /> - <el-table-column property="workTypeDesc" label="作业类型" /> - <el-table-column property="workLevelDesc" label="作业等级" /> - <el-table-column property="materialStatus" label="物资状态" align="center" width="180"> + <el-table-column property="seDepName" label="事业部" align="center"/> + <el-table-column property="applyDepName" label="作业所在车间" align="center"/> + <el-table-column property="workContent" label="作业内容" align="center"/> + <el-table-column property="workTypeDesc" label="作业类型" align="center"/> + <el-table-column property="workDepName" label="作业单位" align="center"/> + <el-table-column property="headList" label="负责人及电话" align="center"> <template #default="scope"> - <span>{{ scope.row.materialStatus==0?'未关联物资':(scope.row.materialStatus==1?'必选物资配备不足':(scope.row.materialStatus==2?'必选物资配备齐全':(scope.row.materialStatus==3?'物资配置专业':(scope.row.materialStatus==4?'物资配置高端':'-')))) }}</span> + {{scope.row.headList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} </template> </el-table-column> - <el-table-column property="applyTime" label="申请时间" width="180" /> - <el-table-column label="申请状态" align="center" width="180"> + <el-table-column property="operatorList" label="作业人及电话" align="center"> + <template #default="scope"> + {{scope.row.operatorList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} + </template> + </el-table-column> + <el-table-column property="guardianList" label="监护人及电话" align="center"> + <template #default="scope"> + {{scope.row.guardianList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} + </template> + </el-table-column> + <el-table-column property="expStartTime" label="作业开始时间" align="center"/> + <el-table-column property="expEndTime" label="预计完成时间" align="center"/> + <el-table-column label="执法仪编号" align="center"> + <template #default="scope"> + {{scope.row.workApprovalDeviceList.map(i=>i.deviceNo).join(',')}} + </template> + </el-table-column> + <el-table-column label="作业人数" align="center"> + <template #default="scope"> + {{scope.row.operatorList.length}} + </template> + </el-table-column> + <el-table-column label="监护人数" align="center"> + <template #default="scope"> + {{scope.row.guardianList.length}} + </template> + </el-table-column> + <el-table-column label="风险研判" align="center"> <template #default="scope"> - <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag> + <el-button v-if="scope.row.status == 0" link type="primary" size="small" @click="openReport('上传', scope.row)">上传研判报告</el-button> + <el-tag type="danger" v-else-if="scope.row.status == -1">已废止</el-tag> + <el-button v-else link type="primary" size="small" @click="openReport('查看', scope.row)">查看研判报告</el-button> </template> </el-table-column> - <el-table-column fixed="right" label="操作" align="center" width="300"> + <el-table-column fixed="right" label="操作" align="center" width="150"> <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button> - <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">取消</el-button> - <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button> + <span v-if="scope.row.status == -1">已废止</span> + <el-button v-if="scope.row.status == 0 || scope.row.status == 1" link type="danger" size="small" :icon="Delete" @click="abortRecordBtn(scope.row)">作废</el-button> + <el-button v-if="scope.row.status !== -1" link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" v-throttle :icon="Edit" @click="openEdit(scope.row)">修改</el-button> + <el-button link type="success" v-throttle v-if="scope.row.status == 0 || scope.row.status == 1" size="small" :icon="Download" @click="checkTicket(scope.row)">正式办票</el-button> +<!-- <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>--> </template> </el-table-column> </el-table> @@ -65,143 +111,30 @@ </div> </div> <el-dialog v-model="dialogDetails" title="作业申请详情" center> - <fire v-if="dialogType == 1" :details = details></fire> - <space v-else-if="dialogType == 2" :details = details></space> - <hoist v-else-if="dialogType == 3" :details = details></hoist> - <ground v-else-if="dialogType == 4" :details = details></ground> - <broken v-else-if="dialogType == 5" :details = details></broken> - <height v-else-if="dialogType == 6" :details = details></height> - <power v-else-if="dialogType == 7" :details = details></power> - <plate v-else :details = details></plate> +<!-- <fire v-if="dialogType == 1" :details = details></fire>--> +<!-- <space v-else-if="dialogType == 2" :details = details></space>--> +<!-- <hoist v-else-if="dialogType == 3" :details = details></hoist>--> +<!-- <ground v-else-if="dialogType == 4" :details = details></ground>--> +<!-- <broken v-else-if="dialogType == 5" :details = details></broken>--> +<!-- <height v-else-if="dialogType == 6" :details = details></height>--> +<!-- <power v-else-if="dialogType == 7" :details = details></power>--> +<!-- <plate v-else :details = details></plate>--> + <detail-log :type=dialogType :statusList=statusList :details = details></detail-log> <template #footer> <span class="dialog-footer"> - <el-button type="primary" @click="dialogDetails = false" - >确认</el-button - > + <el-button type="primary" @click="dialogDetails = false">确认</el-button> </span> </template> </el-dialog> - <el-dialog v-model="dialogStatus" title="作业申请进度" width="60%"> - <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px"> - <el-form-item label="申请作业人"> - <el-input v-model="approveInfo.operators" readonly type="textarea" /> - </el-form-item> - </el-form> - <div style="display: flex; flex-direction: column-reverse"> - <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem"> - <div class="stepNum">{{ item.stepSerial }}</div> - <div class="stepCard"> - <el-card class="box-card" shadow="always"> - <div class="text"> - 审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span> - </div> - <div class="text"> - 审批类型:<span class="bold-text">{{ item.typeDesc }}</span> - </div> - <div class="text" v-if="item.auditTypeDesc"> - 审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span> - </div> - <div class="text" v-show="item.startApprovalTime != null"> - 开始时间:<span>{{ item.startApprovalTime }}</span> - </div> - <div class="approveUnit"> - <div class="item-tit"><span>审批人</span><span>审批状态</span></div> - <div class="item-cont" v-for="i in item.stepUnits"> - <span>{{ i.approvalUname }}</span - ><span>{{ i.resultDesc }}</span> - </div> - </div> - <div class="approveItem"> - <div class="item-tit"> - <span>审批项目</span> -<!-- <span>类型</span>--> - <div>措施标准</div> - </div> - <div class="item-cont" v-for="i in item.stepItems"> - <span>{{ i.itemName }}</span> -<!-- <span>{{ i.typeDesc }}</span>--> - <div v-if="i.measure !== null"> - <div> - <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span> - </div> - <div> - <span>措施内容:</span><span>{{ i.measure.context }}</span> - </div> - </div> - <div v-if="i.stand !== null"> - <div> - <span>标题名称:</span><span>{{ i.stand.title }}</span> - </div> - <div> - <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span> - </div> - </div> - </div> - </div> - <div class="text" v-show="item.expFinishApprovalTime && item.expFinishApprovalTime != null"> - 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span> - </div> - <div class="text" v-show="item.finishApprovalTime != null"> - 结束时间:<span>{{ item.finishApprovalTime }}</span> - </div> - </el-card> - </div> - </div> - </div> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center> - <span>您确定要取消该条申请吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="downLoadDialog" title="提示" width="30%" center> - <span>您确定要导出该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="downLoadDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button> - </span> - </template> - </el-dialog> -<!-- </el-tab-pane>--> -<!-- <el-tab-pane label="已通过" name="2">--> -<!-- <div style="height: 100%">--> -<!-- <el-row class="homeCard">--> -<!-- <el-col :span="8">--> -<!-- <div class="grid-content topInfo">--> -<!-- <el-input v-model="searchWord" placeholder="作业证名称"></el-input>--> -<!-- <el-button type="primary">查询</el-button>--> -<!-- <el-button plain>重置</el-button>--> -<!-- </div>--> -<!-- </el-col>--> -<!-- </el-row>--> -<!-- <div class="homeCard">--> -<!-- <div class="main-card">--> -<!-- <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">--> -<!-- <el-table-column type="selection" width="55" />--> -<!-- <el-table-column type="index" label="编号" width="200" />--> -<!-- <el-table-column property="level" label="作业证等级" width="180" sortable />--> -<!-- <el-table-column property="applyDate" label="申请日期" sortable />--> -<!-- <el-table-column property="name" label="申请人" width="180" />--> -<!-- <el-table-column property="department" label="申请部门" width="180" />--> -<!-- <el-table-column label="申请状态" width="180">--> -<!-- <template #default="scope">--> -<!-- <el-tag type="success">{{ scope.row.status }}</el-tag>--> -<!-- </template>--> -<!-- </el-table-column>--> -<!-- </el-table>--> -<!-- <div class="pageBtn">--> -<!-- <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />--> -<!-- </div>--> -<!-- </div>--> -<!-- </div>--> -<!-- </div>--> -<!-- </el-tab-pane>--> -<!-- </el-tabs>--> + <report-log ref="reportDialogRef" @refresh="getListByPage"></report-log> + <fire-dialog ref="fireRef" :lists="lists" @refresh="getListByPage"></fire-dialog> + <plate-dialog ref="plateRef" :lists="lists" @refresh="getListByPage"></plate-dialog> + <space-dialog ref="spaceRef" :lists="lists" @refresh="getListByPage"></space-dialog> + <hoist-dialog ref="hoistRef" :lists="lists" @refresh="getListByPage"></hoist-dialog> + <ground-dialog ref="groundRef" :lists="lists" @refresh="getListByPage"></ground-dialog> + <broken-dialog ref="brokenRef" :lists="lists" @refresh="getListByPage"></broken-dialog> + <height-dialog ref="heightRef" :lists="lists" @refresh="getListByPage"></height-dialog> + <power-dialog ref="powerRef" :lists="lists" @refresh="getListByPage"></power-dialog> </div> </template> @@ -214,7 +147,7 @@ import { useRouter } from 'vue-router'; import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download } from '@element-plus/icons-vue'; import { ElTable } from 'element-plus'; -import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { FormInstance, FormRules, ElMessage, ElMessageBox } from 'element-plus'; import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; import type { TabsPaneContext } from 'element-plus'; import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage"; @@ -230,15 +163,11 @@ approveInfo: Object; dialogDetails: boolean; dialogStatus: boolean; - deleteDialog: boolean; - downLoadDialog: boolean; pageIndex1: number; pageSize1: number; chosenIndex: null | number; - deleteId: null | number; downLoadId: null | number; downLoadName: string; - searchWord: string; totalSize1: number; activeName: string; addRecord: {}; @@ -248,6 +177,11 @@ dialogType: number | null; departmentList: Array<any>; departmentRecursionList: Array<DepartmentState>; + statusList: Array<any>; + searPara: {} + timeRange: Array<string>; + dep4List: Array<type>; + lists: {} } interface type { id: number; @@ -260,19 +194,30 @@ export default defineComponent({ name: 'myApply', components: { - fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')), - space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')), - hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')), - ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')), - broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')), - height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')), - power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')), - plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue')) + detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')), + reportLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue')), + fireDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue')), + plateDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue')), + spaceDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue')), + hoistDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue')), + groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')), + brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')), + heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')), + powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')) }, setup() { const userInfo = useUserInfo(); const { userInfos } = storeToRefs(userInfo); const router = useRouter(); + const reportDialogRef = ref(); + const fireRef = ref() + const plateRef = ref() + const spaceRef = ref() + const hoistRef = ref() + const groundRef = ref() + const brokenRef = ref() + const heightRef = ref() + const powerRef = ref() const state = reactive<stateType>({ pageIndex1: 1, pageSize1: 10, @@ -282,7 +227,14 @@ departmentList: [], departmentRecursionList: [], chosenIndex: null, - searchWord: '', + searPara:{ + startTime: '', + endTime: '', + workType: null, + headUserName: '', + secondDepId: null + }, + timeRange: [], applyData: [], workTimeList: [], multipleSelection: [], @@ -292,12 +244,9 @@ }, dialogDetails: false, dialogStatus: false, - deleteDialog: false, - downLoadDialog: false, addRecord: {}, details: {}, statusInfo: {}, - deleteId: null, downLoadId: null, downLoadName: '', deleteArr: [], @@ -310,13 +259,193 @@ { id: 6, name: '高处作业' }, { id: 7, name: '临时用电作业' }, { id: 8, name: '盲板抽堵作业' } - ] + ], + lists: { + workerList: [], + departList: [], + departList2: [], + deviceList: [], + otherWorks: [], + spList: [], + riskList: [] + }, + dep4List: [ + {id:49,name:'电石事业部'}, + {id:50,name:'电力事业部'}, + {id:48,name:'有机化工事业部'}, + {id:32,name:'甲醇事业部'} + ], + statusList: [ + { + value: -1, + label: '废止' + }, + { + value: 0, + label: '风险研判中' + }, + { + value: 1, + label: '票证办理中' + }, + { + value: 2, + label: '安全措施确认中' + }, + { + value: 3, + label: '培训交底中' + }, + { + value: 4, + label: '气体分析中' + }, + { + value: 5, + label: '作业开始' + }, + { + value: 6, + label: '作业监护' + }, + { + value: 7, + label: '作业结束' + }, + { + value: 8, + label: '作业验收' + }, + { + value: 9, + label: '安全措施确认,培训交底中' + } + ] }); - interface User { - name: string; - list: []; - info: string; + + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllDepartment() + spWorker() + getAll() + getAllDevice() + getAllRisks() + getOtherWork() + }); + + const openEdit = (row)=>{ + if(row.workType == 1){ + fireRef.value.openDialog(row) + } + if(row.workType == 2){ + spaceRef.value.openDialog(row) + } + if(row.workType == 3){ + hoistRef.value.openDialog(row) + } + if(row.workType == 4){ + groundRef.value.openDialog(row) + } + if(row.workType == 5){ + brokenRef.value.openDialog(row) + } + if(row.workType == 6){ + heightRef.value.openDialog(row) + } + if(row.workType == 7){ + powerRef.value.openDialog(row) + } + if(row.workType == 8){ + plateRef.value.openDialog(row) + } } + + const spWorker = async ()=>{ + for(let id of ['17','18','19']){ + const res = await workApplyApi().getSpList({roleId: id}) + if(id == '17'){ + if (res.data.code === '200') { + state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + if(id == '18'){ + if (res.data.code === '200') { + state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + if(id == '19'){ + if (res.data.code === '200') { + state.lists.spList.sfList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + } + } + + // 获取用户列表 + const getAll = async ()=>{ + const res = await workApplyApi().getAllUsers() + if (res.data.code === '200') { + state.lists.workerList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取设备列表 + const getAllDevice = async ()=>{ + const res = await workApplyApi().getAllDevices() + if (res.data.code === '200') { + state.lists.deviceList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + // 获取设备列表 + const getAllRisks = async ()=>{ + const res = await workApplyApi().getAllRiskIdentity() + if (res.data.code === '200') { + // state.allDevices = JSON.parse(JSON.stringify(res.data.data)) + state.lists.riskList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const giveTime = () => { + if (state.timeRange && state.timeRange !== null) { + state.searPara.startTime = state.timeRange[0]; + state.searPara.endTime = state.timeRange[1] + } else { + state.searPara.startTime = ''; + state.searPara.endTime = ''; + } + }; // 刷新 const reLoadData = async () => { @@ -339,12 +468,25 @@ if (res.data.code === '200') { state.departmentList = JSON.parse(JSON.stringify(res.data.data)) recursion(state.departmentList); + state.lists.departList = JSON.parse(JSON.stringify(res.data.data)) + state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50) } else { ElMessage({ type: 'warning', message: res.data.msg }); } + }; + const getOtherWork = async () => { + let res = await workApplyApi().getOtherWork({workPermitNo: '',workType: null}); + if (res.data.code === '200') { + state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } }; const recursion = (value: any) => { @@ -360,11 +502,10 @@ // 分页获取 const getListByPage = async () => { - const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } }; - let res = await workApplyApi().getApplyListPage(data); + const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: state.searPara }; + let res = await workApplyApi().getNewApplyListPage(data); if (res.data.code === '200') { state.applyData = JSON.parse(JSON.stringify(res.data.data)); - console.log(state.applyData,'applyData') state.applyData = state.applyData.map((item) => { if (item.operators == null || item.operators == []) { item.operators = []; @@ -401,19 +542,20 @@ // 关键词查询记录 const searchRecord = async () => { - if (state.searchWord == '') { - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - } else { - getListByPage(); - } + state.pageIndex1 = 1 + getListByPage(); }; // 重置搜索 const clearSearch = async () => { - state.searchWord = ''; - getListByPage(); + state.timeRange = [] + state.searPara = { + startTime: '', + endTime: '', + workType: null, + headUserName: '', + secondDepId: null + }; + getListByPage(); }; // 查看进度 @@ -436,50 +578,85 @@ } }; - const deleteRecordBtn = (row) => { - state.deleteId = row.workApplyId; - state.deleteDialog = true; - }; - - // 取消申请方法 - const deleteRecord = async (data: any) => { - let res = await workApplyApi().cancelApply(data); - if (res.data.code === '200') { - ElMessage({ + const abortRecordBtn = (row:object) => { + ElMessageBox.confirm( + '是否作废该项申报?', + '申报作废', + { + confirmButtonText: '确认', + cancelButtonText: '取消' + } + ) + .then(async () => { + let res = await workApplyApi().abolishTicket({id: row.id}); + if (res.data.code === '200') { + ElMessage({ type: 'success', - message: '删除成功!' - }); - getListByPage(); - } else { - ElMessage({ + message: '作废成功!' + }); + getListByPage(); + } else { + ElMessage({ type: 'warning', message: res.data.msg - }); - } + }); + } + }) + .catch(() => { + console.log('取消废票') + }) }; - const conFirmDelete = () => { - deleteRecord({ workApplyId: state.deleteId }); - state.deleteDialog = false; - }; + // 正式办票 + const checkTicket = (row:object) =>{ + ElMessageBox.confirm( + '是否进行正式办票操作?', + '正式办票', + { + confirmButtonText: '确认', + cancelButtonText: '取消' + } + ) + .then(async () => { + let res = await workApplyApi().checkTicket({id: row.id}); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '办票成功!' + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => { + console.log('取消办票') + }) + } // 导出图表 const downLoadBtn = (row:any) =>{ state.downLoadId = row.workApplyId; state.downLoadName = row.workTypeDesc + row.workPermitNo - state.downLoadDialog = true; } // 导出方法 - const downLoadRecord = async (data: any) => { + const exportSheet = async () => { // let res = await workApplyApi().postPrinting(data); - axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ + axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/export/excel`,{startTime: state.searPara.startTime,endTime: state.searPara.endTime,secondDepId: state.searPara.secondDepId},{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'}) + let blob = new Blob([res.data],{type: 'application/excel'}) link.style.display = "none"; link.href = URL.createObjectURL(blob); // 创建URL - link.setAttribute("download", state.downLoadName + "作业证.pdf"); + if(state.searPara.startTime !== '' && state.searPara.endTime !==''){ + link.setAttribute("download", state.searPara.startTime + '—' + state.searPara.endTime +"作业申报记录.xlsx") + }else{ + link.setAttribute("download", "作业申报记录.xlsx") + } document.body.appendChild(link); link.click(); document.body.removeChild(link); @@ -493,11 +670,6 @@ }; - const conFirmDownLoad = () => { - downLoadRecord({ applyWorkId: state.downLoadId }); - state.downLoadDialog = false; - }; - const handleSizeChange1 = (val: number) => { state.pageSize1 = val; getListByPage(); @@ -507,43 +679,14 @@ getListByPage(); }; + const openReport = (type: string, value: {}) => { + reportDialogRef.value.showReportDialog(type, value); + }; + // 查看记录 const viewRecord = (row: any) => { state.dialogType = row.workType state.details = JSON.parse(JSON.stringify(row)); - if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){ - state.details.workDetail.otherSpecialWork=[] - } - else { - const a = state.details.workDetail.otherSpecialWork - state.details.workDetail.otherSpecialWork = a.split(',').map((item) => { - return state.workType.find((i: { id: number }) => i.id === Number(item))?.name; - }); - } - if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){ - state.details.workDetail.involvedDepIds=[] - } - else { - const a = state.details.workDetail.involvedDepIds - state.details.workDetail.involvedDepIds = a.split(',').map((item) => { - return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName; - }); - } - if(state.details.workDetail.csDepId){ - state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName; - } - if(state.details.workDetail.operationDepId){ - state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName; - } - if(state.details.workDetail.gbPath){ - state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',') - } - if(state.details.workDetail.bcPath){ - state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',') - } - if(state.details.workDetail.bpLocationMapPath){ - state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',') - } state.dialogDetails = true; }; @@ -554,12 +697,6 @@ await initBackEndControlRoutes(); }; - // 页面载入时执行方法 - onMounted(() => { - getListByPage(); - getAllDepartment() - }); - return { View, Edit, @@ -568,18 +705,31 @@ Plus, Finished, Download, + reportDialogRef, + fireRef, + plateRef, + spaceRef, + hoistRef, + groundRef, + brokenRef, + heightRef, + powerRef, + openEdit, + getAllDepartment, + checkTicket, + giveTime, reLoadData, toApply, handleClick, toNames, searchRecord, clearSearch, + openReport, viewRecord, viewStatus, - deleteRecordBtn, + abortRecordBtn, downLoadBtn, - conFirmDelete, - conFirmDownLoad, + exportSheet, getListByPage, handleSizeChange1, handleCurrentChange1, @@ -642,208 +792,6 @@ } &:last-of-type { height: calc(100% - 100px); - } - } - .stepItem { - display: flex; - align-items: flex-start; - margin-top: 30px; - margin-left: 30px; - padding-bottom: 30px; - padding-left: 40px; - border-left: 1px solid #a0cfff; - position: relative; - &:first-of-type { - margin-top: 30px; - } - &:first-of-type { - margin-bottom: 0; - border-left: none; - } - .stepNum { - position: absolute; - width: 40px; - height: 40px; - border-radius: 20px; - box-sizing: border-box; - font-size: 18px; - color: #333; - border: 1px solid #a0cfff; - line-height: 38px; - text-align: center; - left: -20px; - top: -30px; - background: #d9ecff; - } - .stepCard { - width: 100%; - margin-top: -30px; - - .box-card { - width: 100%; - - .card-header { - display: flex; - justify-content: space-between; - align-items: center; - - span { - font-weight: bold; - margin-left: 10px; - } - } - - .text { - width: 100%; - font-size: 14px; - margin-bottom: 10px; - padding-left: 10px; - - span { - color: #409eff; - } - - .bold-text{ - font-weight: bolder; - } - - &:last-of-type { - margin-bottom: 0; - } - } - .approveUnit { - width: 100%; - font-size: 14px; - margin-bottom: 20px; - padding: 10px 15px; - border: 1px solid #fff; - background: #ecf8ff; - border-radius: 6px; - .item-tit { - width: 100%; - display: flex; - color: #409eff; - align-items: flex-start; - justify-content: space-between; - padding-bottom: 10px; - border-bottom: 1px solid #a0cfff; - - & > span { - flex: 1; - &:last-of-type{ - text-align: center; - } - } - & > div { - flex: 1; - text-align: center; - } - } - .item-cont { - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - padding: 10px 0; - border-bottom: 1px solid #c6e2ff; - - & > span { - flex: 1; - &:last-of-type{ - text-align: center; - } - } - & > div { - flex: 1; - text-align: center; - - & > div { - text-align: left; - width: 100%; - display: flex; - justify-content: center; - align-items: center; - span { - width: 45%; - &:first-of-type { - width: 30%; - } - } - } - } - &:last-of-type { - border-bottom: 0; - } - } - } - .approveItem { - width: 100%; - font-size: 14px; - margin-bottom: 20px; - padding: 10px 15px; - background: #ecf8ff; - border: 1px solid #fff; - border-radius: 6px; - .item-tit { - width: 100%; - display: flex; - color: #409eff; - align-items: flex-start; - justify-content: space-between; - padding-bottom: 10px; - border-bottom: 1px solid #a0cfff; - - & > span { - flex: 1; - } - & > div { - flex: 2; - text-align: center; - } - } - .item-cont { - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - padding: 10px 0; - border-bottom: 1px solid #c6e2ff; - - & > span { - flex: 1; - } - & > div { - flex: 2; - text-align: center; - - & > div { - text-align: left; - width: 100%; - display: flex; - justify-content: center; - align-items: flex-start; - margin-bottom: 10px; - span { - width: 50%; - &:first-of-type { - width: 25%; - } - } - } - } - &:last-of-type { - border-bottom: 0; - } - } - } - } - } - &:hover .card-header { - color: #0098f5; - } - &:hover .stepNum { - border: 2px solid #0098f5; - color: #0098f5; } } .el-row { -- Gitblit v1.9.2