From 8f03059619b5a5e9574b71d2ada27b76db2ffd7a Mon Sep 17 00:00:00 2001 From: Admin <978517621@qq.com> Date: 星期五, 18 十一月 2022 16:48:28 +0800 Subject: [PATCH] 新增 --- src/views/supervision/index.vue | 141 ++ src/api/selfCheck.js | 110 ++ src/views/selfCheck/components/repair.vue | 152 +- src/views/specialCheck/components/sumSheet.vue | 361 ++++++ src/views/specialCheck/components/feedbackDetails.vue | 761 ++++++++++--- /dev/null | 240 ---- src/api/specialCheck.js | 98 + src/views/specialCheck/components/wholesaleForm.vue | 260 ++- src/views/selfCheck/components/selfReport.vue | 114 + src/views/specialCheck/index.vue | 96 + src/views/specialCheck/components/reportDetails.vue | 63 src/views/specialCheck/components/sendWork.vue | 177 +- src/views/selfCheck/index.vue | 115 - src/views/supervision/components/supervisionDetails.vue | 318 +++++ src/views/selfCheck/components/checkDetails.vue | 253 ++++ 15 files changed, 2,439 insertions(+), 820 deletions(-) diff --git a/src/api/selfCheck.js b/src/api/selfCheck.js new file mode 100644 index 0000000..b368b96 --- /dev/null +++ b/src/api/selfCheck.js @@ -0,0 +1,110 @@ +import request from '@/utils/request' +import { getToken } from '@/utils/auth' + +// 查询未完成专项任务 +export function getUnDoneCheckTask(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/checkTask/select/selectUnDoneCheckTaskByPage', + method:'post', + data + }) +} + +// 上报自查情况 +export function saveSelfCheckReport(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/insert/saveSelfCheckReport', + method:'post', + data + }) +} + +// 根据上传任务id查询任务基础信息 +export function getSelfBaseInfo(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/select/getSelfCheckReportBaseInfo', + method:'post', + data + }) +} + +// 根据上传任务id查询关联的隐患基本信息 +export function getSelfRectifyInfo(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/select/getSelfCheckRectifyBaseInfo', + method:'post', + data + }) +} + +// 根据隐患id反馈隐患报告 +export function saveSelfRectifyInfo(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/insert/saveSelfCheckRectifyReport', + method:'post', + data + }) +} + +// 根据记录上传id查询所有的报送信息 +export function getEnterpriseInfo(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/select/getEnterpriseSubmitInfo', + method:'post', + data + }) +} + +// 获取所有被监管机构抽查记录 +export function getSpotCheckTask(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/select/listCompletedSpotCheckTaskByPage', + method:'post', + data + }) +} + +// 根据抽查记录和监管层级查询抽查报告 +export function getSpotCheckRecorder(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/select/getSpotCheckRecorderByUnitType', + method:'post', + data + }) +} + +// 根据监管机构的抽查记录进行整改反馈 +export function updateSpotCheckRectifyInfo(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/enterpriseTaskReport/update/updateSpotCheckRectifyInfo', + method:'post', + data + }) +} diff --git a/src/api/specialCheck.js b/src/api/specialCheck.js new file mode 100644 index 0000000..822313e --- /dev/null +++ b/src/api/specialCheck.js @@ -0,0 +1,98 @@ +import request from '@/utils/request' +import { getToken } from '@/utils/auth' + +// 监管机构所属层级 +export function getCheckUnitType(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/checkUnit/select/getCheckUnitType', + method:'post', + data + }) +} + +// 查询需要执行的专项任务 +export function getSpecialCheckTask(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/checkTask/select/listSpecialCheckTask', + method:'post', + data + }) +} + +// 监管机构下发任务(省级) +export function sendCheckTask(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/checkTask/insert/saveCheckTask', + method:'post', + data + }) +} + +// 查询所辖企业专项任务完成情况 +export function getEnterpriseCompleteInfoList(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/checkTask/select/listEnterpriseCompletionInfo', + method:'post', + data + }) +} + +// 抽查企业自查记录并反馈 +export function saveSpotCheckReport(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/taskSpotCheck/insert/saveSpotCheckReport', + method:'post', + data + }) +} + +// 查询所有层级的抽查报告 +export function getSpotCheckReportInfo(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/taskSpotCheck/select/getSpotCheckReportInfo', + method:'post', + data + }) +} + +// 对抽查报告进行修改 +export function updateSpotCheckReport(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/taskSpotCheck/update/updateSpotCheckReport', + method:'post', + data + }) +} + +// 数据统计接口 +export function getDataStatistics(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/checkDataStatistics/select/getDataStatistics', + method:'post', + data + }) +} diff --git a/src/views/selfCheck/components/checkDetails.vue b/src/views/selfCheck/components/checkDetails.vue new file mode 100644 index 0000000..6d073fe --- /dev/null +++ b/src/views/selfCheck/components/checkDetails.vue @@ -0,0 +1,253 @@ +<template> + <el-dialog + :visible.sync="dialogVisible" + append-to-body + :close-on-click-modal="false" + width="75%" + center + > + <div slot="title" class="dialog-title"> + 烟花爆竹批发企业自查情况信息报送表 + </div> + <div class="table-tit"> + <div>企业名称: <span class="m-color">{{corpInfo.enterpriseName}}</span></div> + <div>所属省市县: <span class="m-color">{{corpInfo.enterpriseProvince + corpInfo.enterpriseCity + corpInfo.enterpriseArea}}</span></div> + </div> + <div class="corp-list" v-if="corpInfo.selfcheckStatus==1"> + <table class="corp-table"> + <th class="m-color b-font">企业基本情况</th> + <tr> + <td class="m-color w-33">批发许可证状态</td> + <td class="m-color w-33">库存(万箱)</td> + <td class="m-color w-33">库容(万箱)</td> + </tr> + <tr> + <td class="w-33">{{corpInfo.licenceValidStatus==0 ? '有效期内' : '失效'}}</td> + <td class="w-33">{{corpInfo.stockNum}}</td> + <td class="w-33">{{corpInfo.storageCapacity}}</td> + </tr> + <tr class="m-color b-font" style="text-align: center" v-if="corpInfo.hiddendangerStatus == 1">自查与整改情况</tr> + <tr v-if="corpInfo.hiddendangerStatus == 1"> + <td class="m-color w-5">序号</td> + <td class="m-color w-15">自查隐患问题描述</td> + <td class="m-color w-12">检查时间</td> + <td class="m-color w-10">隐患等级</td> + <td class="m-color w-23">整改措施</td> + <td class="m-color w-10">整改资金(元)</td> + <td class="m-color w-5">责任人</td> + <td class="m-color w-20">隐患状态</td> + </tr> + <tr v-for="(item,index) in corpInfo.hiddendangerInfos" :key="index" v-if="corpInfo.hiddendangerStatus == 1"> + <td class="w-5">{{index}}</td> + <td class="w-15 overText">{{item.hiddendangerRemark}}</td> + <td class="w-12 overText">{{item.checkTime}}</td> + <td class="w-10">{{item.hiddendangerLevel == 1 ? '一般隐患' : '重大隐患'}}</td> + <td class="w-23 overText">{{item.rectifyMeasure}}</td> + <td class="w-10">{{item.rectifyPrice}}</td> + <td class="w-5 overText">{{item.chargePerson}}</td> + <td class="w-20 overText">{{item.rectifyStatus == 0 ? '整改完成期限:' + item.rectifyDeadlineTime : item.completeRectifyTime + '整改完成'}}</td> + </tr> + <tr> + <td class="m-color w-50">隐患问题情况</td> + <td class="m-color w-50">整改情况</td> + </tr> + <tr> + <td class="m-color w-25">隐患总数</td> + <td class="m-color w-25">重大隐患数量</td> + <td class="m-color w-25">已整改隐患总数</td> + <td class="m-color w-25">已整改重大隐患数量</td> + </tr> + <tr> + <td class="w-25">{{corpInfo.hiddendangerSum?corpInfo.hiddendangerSum:0}}</td> + <td class="w-25">{{corpInfo.majorHiddendangerNum?corpInfo.majorHiddendangerNum:0}}</td> + <td class="w-25">{{corpInfo.completedRectifyHiddendangerSum?corpInfo.completedRectifyHiddendangerSum:0}}</td> + <td class="w-25">{{corpInfo.completedRectifyMajorHiddendangerNum?corpInfo.completedRectifyMajorHiddendangerNum:0}}</td> + </tr> + </table> + <div class="table-bottom"> + <div v-if="corpInfo.selfcheckReportUserName">填报人: <span class="m-color">{{corpInfo.selfcheckReportUserName}}</span></div> + </div> + <div class="table-bottom"> + <div v-if="corpInfo.selfcheckReportUserMobile">填报人联系电话: <span class="m-color">{{corpInfo.selfcheckReportUserMobile}}</span></div> + <div v-if="corpInfo.reportModifyTime">填报时间: <span class="m-color">{{corpInfo.reportModifyTime}}</span></div> + </div> + </div> + <div v-else style="font-size: 18px;margin-top: 20px;color: #034EA2;font-weight: bolder"> + 该企业未上报自查信息 + </div> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="confirmBack()">返回</el-button> + </span> + </el-dialog> +</template> + +<script> + import {computePageCount} from "@/utils"; + import { getEnterpriseInfo } from "@/api/selfCheck"; + + export default { + name: "reportDetails", + data(){ + return{ + dialogVisible:false, + id: null, + corpInfo:{ + enterpriseName: '', + enterpriseProvince: '', + enterpriseCity: '', + enterpriseArea: '', + licenceValidStatus: 0, + stockNum: 0, + store: 0, + hiddendangerInfos: [], + hiddendangerSum: 0, + majorHiddendangerNum: 0, + completedRectifyHiddendangerSum: 0, + completedRectifyMajorHiddendangerNum: 0, + selfcheckReportUserName: '', + selfcheckReportUserMobile: '', + reportModifyTime: '' + } + } + }, + watch: { + }, + methods:{ + async getEnterpriseInfo(){ + const t = this + let res = await getEnterpriseInfo({id: t.id}) + if(res.data.code === "200"){ + t.corpInfo = res.data.result + console.log(t.corpInfo,'t.corpInfo') + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + + confirmBack(){ + this.dialogVisible = false + } + }, + } +</script> + +<style lang="scss" scoped> + .input-with-select .el-select { + width: 120px; + } + + .el-date-editor.el-input{ + width: 100%; + } + .dialog-title{ + font-size: 22px; + font-weight: bolder; + } + .table-tit{ + display: flex; + align-items: center; + margin-bottom: 10px; + div:first-of-type{ + margin-right: 100px; + } + } + .corp-list{ + .corp-table{ + width: 100%; + border-collapse: collapse; + border: 1px solid #79bbff; + margin: 10px 0; + th{ + padding: 10px 0; + border: 1px solid #79bbff; + border-bottom: 1px solid #ccc; + } + tr{ + width: 100%; + height: 44px; + line-height: 42px; + border-bottom: 1px solid #ccc; + + &:last-of-type{ + border-bottom: none; + } + td{ + border-right: 1px solid #ccc; + display: inline-block; + height: 44px; + vertical-align: middle; + text-align: center; + line-height: 42px; + + &:last-of-type{ + border-right: none; + } + ::v-deep.el-textarea{ + .el-textarea__inner{ + min-height: 40px !important; + background-color: #ecf5ff; + border: 1px solid #d9ecff; + } + } + + &.w-5{ + width: 5%; + } + &.w-10{ + width: 10%; + } + &.w-12{ + width: 12%; + } + &.w-15{ + width: 15%; + } + &.w-20{ + width: 20%; + } + &.w-23{ + width: 23%; + } + &.w-50{ + width: 50%; + } + &.w-25{ + width: 25%; + } + &.w-75{ + width: 75%; + } + &.w-33{ + width: 33.33%; + } + &.overText{ + overflow: auto; + line-height: 1.5; + text-align: left; + padding: 10px; + } + } + } + .b-font{ + font-size: 16px; + font-weight: bolder; + } + ::v-deep.mid{ + .el-input__inner{ + text-align: center; + background-color: #ecf5ff; + border: 1px solid #d9ecff; + } + } + } + .table-bottom{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; + } + } +</style> diff --git a/src/views/selfCheck/components/repair.vue b/src/views/selfCheck/components/repair.vue index deafa3f..8f1e622 100644 --- a/src/views/selfCheck/components/repair.vue +++ b/src/views/selfCheck/components/repair.vue @@ -19,64 +19,26 @@ > <el-table-column type="index" label="序号" align="center" width="80"/> - - <el-table-column label="检查出的隐患问题" prop="info" align="center" width="180"> + <el-table-column label="检查出的隐患问题" prop="hiddendangerRemark" align="center" width="180"></el-table-column> + <el-table-column label="检查时间" prop="checkTime" align="center"></el-table-column> + <el-table-column label="最后整改期限" prop="rectifyDeadlineTime" align="center"></el-table-column> + <el-table-column label="整改资金(元)" prop="rectifyPrice" align="center"></el-table-column> + <el-table-column label="整改措施" prop="rectifyMeasure" width="130" align="center" sortable></el-table-column> + <el-table-column label="负责人" prop="chargePerson" align="center"></el-table-column> + <el-table-column label="整改状态" prop="rectifyStatus" align="center"> <template slot-scope="scope"> - <span>{{ scope.row.info }}</span> + <span>{{ scope.row.rectifyStatus ==0?'未整改':'已整改' }}</span> </template> </el-table-column> - - <el-table-column label="检查时间" prop="checkTime" align="center"> + <el-table-column label="完成整改时间" prop="completeRectifyTime " align="center"></el-table-column> + <el-table-column label="隐患等级" prop="hiddendangerLevel" align="center"> <template slot-scope="scope"> - <span>{{scope.row.checkTime}}</span> + <span>{{ scope.row.hiddendangerLevel==1 ? '一般隐患' : '重大隐患' }}</span> </template> </el-table-column> - - <el-table-column label="最后整改期限" prop="deadline" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.deadline }}</span> - </template> - </el-table-column> - - <el-table-column label="整改资金(元)" prop="money" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.money }}</span> - </template> - </el-table-column> - - <el-table-column label="整改措施" prop="action" width="130" align="center" sortable> - <template slot-scope="scope"> - <span>{{ scope.row.action }}</span> - </template> - </el-table-column> - - <el-table-column label="负责人" prop="principal" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.principal }}</span> - </template> - </el-table-column> - - <el-table-column label="整改状态" prop="fixStatus" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.fixStatus ==0?'未整改':'已整改' }}</span> - </template> - </el-table-column> - - <el-table-column label="完成整改时间" prop="finishTime" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.finishTime }}</span> - </template> - </el-table-column> - - <el-table-column label="隐患等级" prop="level" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.level==0 ? '一般隐患' : '重大隐患' }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> - <el-button v-if="scope.row.fixStatus==0" type="text" @click="toFix(scope.row)">整改填报</el-button> + <el-button v-if="scope.row.rectifyStatus==0" type="text" @click="toFix(scope.row)">整改填报</el-button> <el-button v-else type="text">--</el-button> </template> </el-table-column> @@ -114,19 +76,19 @@ <el-form-item label="当前完成整改日期:"> <el-date-picker - v-model="fixForm.finishDate" + v-model="fixForm.completeRectifyTime" type="date" placeholder="请选择整改日期"> </el-date-picker> </el-form-item> <el-form-item label="整改资金:"> - <el-input v-model="fixForm.money"></el-input> + <el-input v-model="fixForm.rectifyPrice"></el-input> </el-form-item> <el-form-item label="整改措施:"> - <el-input type="textarea" autosize v-model="fixForm.actions"></el-input> + <el-input type="textarea" autosize v-model="fixForm.rectifyMeasure"></el-input> </el-form-item> <el-form-item label="负责人:"> - <el-input v-model="fixForm.name"></el-input> + <el-input v-model="fixForm.chargePerson"></el-input> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> @@ -140,11 +102,13 @@ <script> import {computePageCount} from "@/utils"; + import { getSelfRectifyInfo, saveSelfRectifyInfo } from "@/api/selfCheck"; export default { name: "repair", data(){ return{ + id: null, listLoading: false, dialogFix: false, recordTotal: 0, @@ -153,38 +117,20 @@ currentPage: 1, tableKey: 0, dialogVisible:false, - checkList:[ - { - info: '虫吃鼠咬', - checkTime: '2022-10-31', - deadline: '2022-11-01', - money: '30', - action: '补充灭虫药', - principal: '叼毛', - fixStatus: 1, - finishTime: '2022-11-01', - level: 1 - }, - { - info: '虫吃鼠咬', - checkTime: '2022-10-31', - deadline: '2022-11-01', - money: '3000', - action: '补充灭虫药', - principal: '叼毛', - fixStatus: 0, - finishTime: '2022-11-01', - level: 0 - } - ], + checkList:[], fixForm:{ + id: null, + enterpriseSubmitId: null, info: '', - finishDate: '', - money: '', - actions: '', - name: '' + completeRectifyTime: '', + rectifyPrice: 0, + rectifyMeasure: '', + chargePerson: '' } } + }, + created() { + this.getSelfRectifyInfo() }, watch: { }, @@ -199,17 +145,51 @@ // this.getDataList() }, + async getSelfRectifyInfo(){ + const t = this + t.listLoading = true + let res = await getSelfRectifyInfo(t.id) + if(res.data.code === "200"){ + t.checkList = res.data.result.hiddendangerBaseInfos + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false + }, confirm(){ this.dialogVisible = false }, - confirmFix(){ - this.dialogFix = false + toFix(row){ + const t= this + t.fixForm.info = row.hiddendangerRemark + t.fixForm.id = row.id + t.dialogFix = true }, - toFix(){ - this.dialogFix = true + async confirmFix(){ + const t = this + t.listLoading = true + t.fixForm.enterpriseSubmitId = t.id + let {info,...data} = t.fixForm + let res = await saveSelfRectifyInfo(data) + if(res.data.code === "200"){ + t.$message({ + type:'success', + message:res.data.message + }) + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false + t.dialogFix = false } }, } diff --git a/src/views/selfCheck/components/selfReport.vue b/src/views/selfCheck/components/selfReport.vue index 6f9f9c6..19a4b0a 100644 --- a/src/views/selfCheck/components/selfReport.vue +++ b/src/views/selfCheck/components/selfReport.vue @@ -8,12 +8,16 @@ > <div class="company-info"> <div>企业基本信息</div> - <div><span>企业名称:</span><span>XXXXXXXXXX有限公司</span></div> - <div><span>许可证:</span><span>在有效期(有效期至:XXXXX)</span></div> - <div><span>库存:</span><span>100(万箱)</span></div> + <div><span>企业名称:</span><span>{{enterpriseName}}</span></div> + <div> + <span>许可证:</span> + <span v-if="licenceValidStatus == 0">在有效期(有效期至:{{licenceValidDeadline}})</span> + <span v-else>已过期</span> + </div> + <div><span>库存:</span><span>{{stockNum}}</span></div> <div><span>库容:</span> <span> - <el-input placeholder="请输入库容量" v-model="checkForm.store"></el-input> + <el-input placeholder="请输入库容量" v-model="checkForm.storageCapacity"></el-input> </span> </div> </div> @@ -22,22 +26,22 @@ <div>自查自改填报</div> <div> <span>自查是否有隐患:</span> - <el-radio-group v-model="checkForm.isRisky"> + <el-radio-group v-model="checkForm.hiddendangerStatus"> <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> + <el-radio :label="0">否</el-radio> </el-radio-group> </div> </div> - <div class="risk-list" v-if="checkForm.isRisky==1"> + <div class="risk-list" v-if="checkForm.hiddendangerStatus==1"> <table class="risk-table"> <th><span>序号</span><span>检查出的隐患问题</span><span>检查时间</span><span>最后整改期限</span><span>隐患等级</span><span>操作</span></th> - <tr v-for="(item,index) in checkForm.riskList"> + <tr v-for="(item,index) in checkForm.submitHiddendangers"> <td class="num">{{index + 1}}</td> - <td class="info"><el-input type="textarea" :rows="1" placeholder="请输入内容" v-model="item.info"></el-input></td> - <td class="date"><el-date-picker v-model="item.time" type="datetime" placeholder="选择检查时间"></el-date-picker></td> - <td class="deadline"><el-date-picker v-model="item.deadline" type="datetime" placeholder="选择整改期限"></el-date-picker></td> + <td class="info"><el-input type="textarea" :rows="1" placeholder="请输入内容" v-model="item.hiddendangerRemark"></el-input></td> + <td class="date"><el-date-picker v-model="item.checkTime" type="datetime" placeholder="选择检查时间"></el-date-picker></td> + <td class="deadline"><el-date-picker v-model="item.rectifyDeadlineTime" type="datetime" placeholder="选择整改期限"></el-date-picker></td> <td class="level"> - <el-radio-group v-model="item.level"> + <el-radio-group v-model="item.hiddendangerLevel"> <el-radio :label="1">一般隐患</el-radio> <el-radio :label="2">重大隐患</el-radio> </el-radio-group> @@ -55,11 +59,11 @@ <div style="display: flex;align-items: center;margin-top: 20px"> <span>填报人:</span> <span style="margin-right: 40px"> - <el-input v-model="checkForm.reporter"></el-input> + <el-input v-model="checkForm.selfcheckReportUserName"></el-input> </span> <span>电话号码:</span> <span> - <el-input v-model="checkForm.reportPhone"></el-input> + <el-input v-model="checkForm.selfcheckReportUserMobile"></el-input> </span> </div> <span slot="footer" class="dialog-footer"> @@ -71,25 +75,31 @@ <script> import {computePageCount} from "@/utils"; - + import { saveSelfCheckReport, getSelfBaseInfo } from '@/api/selfCheck' export default { name: "selfReport", data(){ return{ - dialogVisible:false, + dialogVisible: false, + id: null, + enterpriseName: '', + licenceValidStatus: 0, + licenceValidDeadline: '', + stockNum: 0, checkForm:{ - store: '', - isRisky: 2, - riskList: [ + storageCapacity: 0, + hiddendangerStatus: 0, + submitHiddendangers: [ { - info: '', - time: '', - deadline: '', - level: '' + id: null, + hiddendangerRemark: '', + checkTime: '', + rectifyDeadlineTime: '', + hiddendangerLevel: 1 } ], - reporter: '', - reportPhone: '' + selfcheckReportUserName: '', + selfcheckReportUserMobile: '' }, } }, @@ -98,18 +108,58 @@ methods:{ addItem(){ const newItem = { - info: '', - time: '', - level: '' + hiddendangerRemark: '', + checkTime: '', + rectifyDeadlineTime: '', + hiddendangerLevel: 1 } - this.checkForm.riskList.push(newItem) + this.checkForm.submitHiddendangers.push(newItem) }, deleteItem(i){ console.log(i) - this.checkForm.riskList.splice(i,1) + this.checkForm.submitHiddendangers.splice(i,1) }, - confirmSend(){ - this.dialogVisible = false + + async getUncheckList(){ + const t = this + let res = await getSelfBaseInfo(t.id) + if(res.data.code === "200"){ + t.recordTotal = res.data.result.enterpriseName + t.licenceValidStatus = res.data.result.licenceValidStatus + t.licenceValidDeadline = res.data.result.licenceValidDeadline + t.stockNum = res.data.result.stockNum + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + + async confirmSend(){ + const t = this + let data = t.checkForm + data.id = t.id + if(data.storageCapacity.toString()=='' || data.submitHiddendangers.hiddendangerRemark == '' || data.submitHiddendangers.checkTime == '' || data.submitHiddendangers.rectifyDeadlineTime==''||data.submitHiddendangers.hiddendangerLevel.toString()==''){ + t.$message({ + type:'warning', + message:'请完善表单信息' + }) + return + } + let res = await saveSelfCheckReport(data) + if(res.data.code === "200"){ + t.$message({ + type:'success', + message:res.data.message + }) + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.dialogVisible = false } }, } diff --git a/src/views/selfCheck/index.vue b/src/views/selfCheck/index.vue index 2fc585c..516e47f 100644 --- a/src/views/selfCheck/index.vue +++ b/src/views/selfCheck/index.vue @@ -11,59 +11,37 @@ style="width: 100%;" > - <el-table-column label="下发日期" prop="sendDate" align="center" width="180"> + <el-table-column label="下发日期" prop="gmtCreate" align="center" width="180"></el-table-column> + <el-table-column label="任务名称" prop="taskName" align="center"></el-table-column> + <el-table-column label="下发部门" prop="createUnit" align="center"></el-table-column> + <el-table-column label="自查期限(之前)" prop="enterpriseSelfCheckDeadline" align="center"></el-table-column> + <el-table-column label="是否自查" prop="selfcheckStatus" width="130" align="center" sortable> <template slot-scope="scope"> - <span>{{ scope.row.sendDate }}</span> + <span>{{ scope.row.selfcheckStatus == 0 ? '未自查' : '已自查' }}</span> </template> </el-table-column> - <el-table-column label="任务名称" prop="name" align="center"> + <el-table-column label="自查时间" prop="selfcheckTime" align="center"></el-table-column> + <el-table-column label="是否隐患" prop="hiddendangerStatus" align="center"> <template slot-scope="scope"> - <span>{{scope.row.name}}</span> + <span>{{ scope.row.hiddendangerStatus == 0 ? '否' : '是' }}</span> </template> </el-table-column> - - <el-table-column label="下发部门" prop="department" align="center"> + <el-table-column label="整改情况" prop="rectifyStatus" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> - <span>{{ scope.row.department }}</span> - </template> - </el-table-column> - - <el-table-column label="自查期限(之前)" prop="deadline" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.deadline }}</span> - </template> - </el-table-column> - <el-table-column label="是否自查" prop="isCheck" width="130" align="center" sortable> - <template slot-scope="scope"> - <span>{{ scope.row.isCheck }}</span> - </template> - </el-table-column> - <el-table-column label="自查时间" prop="selfCheckTime" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.selfCheckTime }}</span> - </template> - </el-table-column> - <el-table-column label="是否隐患" prop="isRisky" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.isRisky }}</span> - </template> - </el-table-column> - <el-table-column label="整改情况" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button type="text" @click="toRepair(scope.row)">去整改</el-button> + <el-button v-if="scope.row.rectifyStatus == 1" type="text" @click="toRepair(scope.row)">去整改</el-button> + <span v-else>已完成</span> </template> </el-table-column> <el-table-column label="详情" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> - <el-button v-if="scope.row.isCheck == 1" type="text">查看详情</el-button> - <el-button v-else type="text" @click="toReport(scope.row)">自查填报</el-button> + <el-button v-if="scope.row.selfcheckStatus == 0" type="text" @click="toReport(scope.row)">自查填报</el-button> + <el-button v-else type="text" @click="toDetail(scope.row)">查看详情</el-button> </template> </el-table-column> </el-table> <el-pagination - v-show="recordTotal>0" :current-page="currentPage" - :page-sizes="[10, 20, 30, 50]" + :page-sizes="[10, 15]" :page-size="pageSize" :total="recordTotal" layout="total, sizes, prev, pager, next, jumper" @@ -75,6 +53,7 @@ </div> <self-report ref="report"></self-report> <repair ref="repair"></repair> + <check-details ref="details"></check-details> </div> </template> @@ -84,14 +63,17 @@ import {mapGetters} from "vuex"; import {MessageBox} from 'element-ui' import { getToken } from '@/utils/auth' - import selfReport from "./components/selfReport"; - import repair from "./components/repair"; + import selfReport from "./components/selfReport" + import repair from "./components/repair" + import checkDetails from "./components/repair" + import { getUnDoneCheckTask } from '@/api/selfCheck' export default { name: "selfCheck", components:{ selfReport, - repair + repair, + checkDetails }, data() { return { @@ -101,30 +83,12 @@ pageTotal: 0, currentPage: 1, tableKey: 0, - checkData: [ - { - sendDate: '2022-10-29', - name: '2023年上半年……', - department: '新疆维吾尔应急管理厅', - deadline: '2022-10-30', - isCheck: 1, - selfCheckTime: '2022-10-31', - isRisky: 1 - }, - { - sendDate: '2022-10-29', - name: '2023年上半年……', - department: '新疆维吾尔应急管理厅', - deadline: '2022-10-30', - isCheck: 0, - selfCheckTime: '2022-10-31', - isRisky: 0 - } - ] + checkData: [] } }, created() { - + const t = this + t.getUncheckList() }, mounted() { @@ -139,21 +103,46 @@ handleSizeChange: function (val) { this.pageSize = val this.currentPage = 1 - // this.getDataList() + this.getUncheckList() }, handleCurrentChange: function (val) { this.currentPage = val - // this.getDataList() + this.getUncheckList() }, toReport(row){ const t = this t.$refs.report.dialogVisible = true + t.$refs.report.id = row.id + }, + + toDetail(row){ + const t = this + t.$refs.details.dialogVisible = true + t.$refs.details.id = row.id }, toRepair(row){ const t = this t.$refs.repair.dialogVisible = true + t.$refs.repair.id = row.id + }, + + async getUncheckList(){ + const t = this + t.listLoading = true + let data = {pageIndex: t.currentPage,pageSize: t.pageSize} + let res = await getUnDoneCheckTask(data) + if(res.data.code === "200"){ + t.recordTotal = res.data.result.total + t.checkData = res.data.result.records + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false }, } } diff --git a/src/views/specialCheck/components/feedbackDetails.vue b/src/views/specialCheck/components/feedbackDetails.vue index 46bfba4..bd6ee74 100644 --- a/src/views/specialCheck/components/feedbackDetails.vue +++ b/src/views/specialCheck/components/feedbackDetails.vue @@ -10,42 +10,51 @@ <span></span> <div class="">烟花爆竹批发企业检查情况反馈表</div> <span> - <el-button type="primary">查看企业自查表</el-button> + <el-button type="primary" @click="openSelfCheck()">查看企业自查表</el-button> </span> </div> <div class="feed-report"> <div class="feed-tit"> - <div>企业名称: <span class="m-color">沙湾市国华商贸有限公司</span></div> - <div>所属省市县: <span class="m-color">新疆维吾尔自治区塔城地区沙湾县</span></div> - <div>检查层级: <span class="m-color">省级</span></div> - <div>检查单位: <span class="m-color">新疆维吾尔自治区应急管理厅</span></div> + <div>企业名称: <span class="m-color">{{ corpInfo.enterpriseName }}</span></div> + <div>所属省市县: <span class="m-color">{{ corpInfo.enterpriseProvince + corpInfo.enterpriseCity + corpInfo.enterpriseArea }}</span></div> + <div>检查层级: <span class="m-color">{{ corpInfo.checkUnitType == 1 ? '省级':(corpInfo.checkUnitType == 2 ? '市级' : '区县级') }}</span></div> + <div>检查单位: <span class="m-color">{{ corpInfo.checkUnit }}</span></div> </div> + <div v-if="(unitType==1 && checkData.provinceCheckStatus==0)||(unitType==2 && checkData.cityCheckStatus==0)||(unitType==3 && checkData.areaCheckStatus==0)"> + <el-form :model="feedbackForm" :rules="rules" ref="feedbackForm" class="demo-ruleForm"> <el-row :gutter="40" type="flex" align="middle" style="margin: 20px 0"> - <el-col :span="8" style="display: flex;align-items: center"> - <span style="white-space: nowrap">检查时间:</span> + <el-col :span="8"> + <el-form-item label="检查时间:" prop="checkTime" style="display: flex;align-items: center"> +<!-- <span style="white-space: nowrap">检查时间:</span>--> <el-date-picker v-model="feedbackForm.checkTime" type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间"> </el-date-picker> + </el-form-item> </el-col> <el-col :span="12" style="display: flex;align-items: center"> - <span style="white-space: nowrap">是否检查出隐患:</span> - <el-radio-group v-model="feedbackForm.isRisky"> + <el-form-item label="是否检查出隐患:" prop="hiddendangerStatus" style="display: flex;align-items: center"> +<!-- <span style="white-space: nowrap">是否检查出隐患:</span>--> + <el-radio-group v-model="feedbackForm.hiddendangerStatus"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> + </el-form-item> </el-col> </el-row> - <div class="report-list" v-show="feedbackForm.isRisky == 1"> + <div class="report-list" v-if="feedbackForm.hiddendangerStatus == 1"> <table class="report-table"> <th class="m-color b-font" style="background: #337ecc;color: #fff">检查情况</th> <tr><td class="m-color">序号</td><td class="m-color">检查出的隐患问题</td><td class="m-color">隐患等级</td><td class="m-color">操作</td></tr> - <tr v-for="(item,index) in feedbackForm.riskList"> + <tr v-for="(item,index) in feedbackForm.hiddendangerInfos"> <td>{{index + 1}}</td> - <td><el-input type="textarea" :rows="1" placeholder="请输入内容" v-model="item.info"></el-input></td> <td> - <el-radio-group v-model="item.level"> + <el-input type="textarea" :rows="1" placeholder="请输入内容" v-model="item.spotCheckHiddendanger"></el-input> + </td> + <td> + <el-radio-group v-model="item.hiddendangerLevel"> <el-radio :label="1">一般隐患</el-radio> <el-radio :label="2">重大隐患</el-radio> </el-radio-group> @@ -55,73 +64,72 @@ </td> </tr> <tr style="text-align: center"><el-button icon="el-icon-plus" type="primary" plain round @click="addItem()">添加行</el-button></tr> - <tr class="m-color b-font" style="text-align: center">合计</tr> - <tr> - <td class="m-color w-50">隐患总数</td> - <td class="m-color w-50">重大隐患数量</td> - </tr> - <tr> - <td class="w-50 mid"><el-input v-model="feedbackForm.totalRisk"></el-input></td> - <td class="w-50 mid"><el-input v-model="feedbackForm.majorNum"></el-input></td> - </tr> <tr class="m-color b-font" style="text-align: center">执法处罚情况</tr> <tr> <td class="m-color w-25 mid">罚款金额(万元)</td> - <td class="w-25 mid"><el-input v-model="feedbackForm.fine"></el-input></td> + <td class="w-25 mid"> + <el-form-item prop="amerceMoney"> + <el-input v-model="feedbackForm.amerceMoney" type="number" placeholder="请输入罚款金额,未罚款则填“0”"></el-input> + </el-form-item> + </td> <td class="m-color w-25 mid">是否责令停产整顿</td> <td class="w-25 mid"> - <el-radio-group v-model="feedbackForm.isRectify"> - <el-radio :label="1">是</el-radio> - <el-radio :label="0">否</el-radio> - </el-radio-group> + <el-form-item prop="stopProductionStatus"> + <el-radio-group v-model="feedbackForm.stopProductionStatus"> + <el-radio :label="1">是</el-radio> + <el-radio :label="0">否</el-radio> + </el-radio-group> + </el-form-item> </td> </tr> <tr> <td class="m-color w-25 mid">是否吊销许可证</td> <td class="w-25 mid"> - <el-radio-group v-model="feedbackForm.isRevoke"> + <el-form-item prop="revokeLicenseStatus"> + <el-radio-group v-model="feedbackForm.revokeLicenseStatus"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> + </el-form-item> </td> <td class="m-color w-25 mid">是否暂扣许可证</td> <td class="w-25 mid"> - <el-radio-group v-model="feedbackForm.isSuspended"> + <el-form-item prop="detainLicenseStatus"> + <el-radio-group v-model="feedbackForm.detainLicenseStatus"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> + </el-form-item> </td> </tr> </table> </div> - <div> - 注:重大隐患判定标准:<el-link href="https://www.mem.gov.cn/gk/zcjd/201802/t20180202233295.shtml" target="_blank" type="primary">https://www.mem.gov.cn/gk/zcjd/201802/t20180202 233295.shtml</el-link> - </div> + </el-form> <div style="display: flex;justify-content: center;margin: 20px 0"> <el-button @click="confirmBack()">返回列表</el-button> - <el-button type="primary">提交</el-button> + <el-button type="primary" @click="confirmSubmit('feedbackForm')">提交</el-button> + </div> </div> </div> +<!-- <div style="margin-top: 20px;text-align: center">--> +<!-- 重大隐患判定标准:<el-link href="https://www.mem.gov.cn/gk/zcjd/201802/t20180202233295.shtml" target="_blank" type="primary">https://www.mem.gov.cn/gk/zcjd/201802/t20180202 233295.shtml</el-link>--> +<!-- </div>--> + <el-divider/> <div class="feed-data"> - <div class="m-color data-time">2022年04月07日</div> + <div class="m-color data-time">{{tabCheckTime}}</div> <el-tabs v-model="activeTab" type="border-card" @tab-click="handleSwitch"> - <el-tab-pane label="本级" name="1"> - <div class="record-list"> - <div class="record-item" v-for="(item,index) in recordList" :key="index"> + <el-tab-pane :label="unitType==1 ? '本级': '省级'" name="1"> + <div v-if="checkData.provinceCheckStatus == 1" class="record-list"> + <div class="record-item"> <table class="record-table"> - <tr> - <td class="w-75 m-color b-font dark-bg">烟花爆竹批发企业检查情况反馈表</td> - <td class="w-25"> - <el-button type="primary" icon="el-icon-edit" plain @click="editRecord(index)">编辑</el-button> - </td> - </tr> + <tr class="m-color b-font" style="background: #409EFF;color: #fff;text-align: center">烟花爆竹批发企业检查情况反馈表</tr> <tr> <td class="m-color w-50">被检查企业名称</td> <td class="m-color w-50">所属省市县</td> </tr> <tr> - <td class="w-50">沙湾市国华商贸有限公司</td> - <td class="w-50">新疆维吾尔自治区乌鲁木齐市米东区</td> + <td class="w-50">{{ checkData.enterpriseName }}</td> + <td class="w-50">{{ checkData.enterpriseProvince + checkData.enterpriseCity + checkData.enterpriseArea }}</td> </tr> <tr> <td class="m-color w-25">检查层级</td> @@ -131,15 +139,28 @@ </tr> <tr> <td class="w-25">省级</td> - <td class="w-25">新疆维吾尔自治区应急管理厅</td> - <td class="w-25">{{ item.checkTime }}</td> - <td class="w-25">{{ item.isRisky }}</td> + <td class="w-25">{{ checkData.provinceCheckName }}</td> + <td class="w-25">{{ checkData.provinceCheckTime }}</td> + <td class="w-25">{{ checkData.provinceHiddendangerStatus == 1 ? '是' : '否' }}</td> </tr> - <tr v-if="item.isRisky=='1'"><td class="m-color">序号</td><td class="m-color">检查出的隐患问题</td><td class="m-color">隐患等级</td></tr> - <tr v-if="item.isRisky=='1'" v-for="(x,i) in item.riskList"> - <td>{{ i + 1 }}</td> - <td class="overText">{{ x.info }}</td> - <td>{{ x.level }}</td> + <tr class="m-color b-font" style="text-align: center" v-if="checkData.areaHiddendangerStatus == 1">检查情况</tr> + <tr v-if="checkData.provinceHiddendangerStatus == 1"> + <td class="m-color w-5">序号</td> + <td class="m-color w-25">检查出的隐患问题</td> + <td class="m-color w-10">隐患等级</td> + <td class="m-color w-25">整改措施</td> + <td class="m-color w-10">整改资金(元)</td> + <td class="m-color w-10">责任人</td> + <td class="m-color w-15">隐患状态</td> + </tr> + <tr v-if="checkData.provinceHiddendangerStatus == 1" v-for="(x,i) in checkData.provinceHiddendangerInfos"> + <td class="w-5">{{ i + 1 }}</td> + <td class="overText w-25">{{ x.spotCheckHiddendanger }}</td> + <td class="w-10">{{ x.hiddendangerLevel==1?'一般隐患':'重大隐患' }}</td> + <td class="overText w-25">{{ x.rectifyMeasure }}</td> + <td class="w-10">{{ x.rectifyPrice }}</td> + <td class="overText w-10">{{ x.chargePerson }}</td> + <td class="w-15">{{ x.rectifyStatus==1?'已整改完成':'未整改完成' }}</td> </tr> <tr class="m-color b-font" style="text-align: center">合计</tr> <tr> @@ -147,35 +168,202 @@ <td class="m-color w-50">重大隐患数量</td> </tr> <tr> - <td class="w-50">{{ item.totalRisk }}</td> - <td class="w-50">{{ item.majorNum }}</td> + <td class="w-50">{{ checkData.provinceHiddendangerSum ? checkData.provinceHiddendangerSum : 0}}</td> + <td class="w-50">{{ checkData.provinceMajorHiddendangerNum ? checkData.provinceMajorHiddendangerNum : 0}}</td> </tr> - <tr v-if="item.isRisky=='1'" class="m-color b-font" style="text-align: center">执法处罚情况</tr> - <tr v-if="item.isRisky=='1'"> + <tr v-if="checkData.provinceHiddendangerStatus== 1" class="m-color b-font" style="text-align: center">执法处罚情况</tr> + <tr v-if="checkData.provinceHiddendangerStatus== 1"> <td class="m-color w-25">罚款金额(万元)</td> - <td class="w-25">{{ item.fine }}</td> + <td class="w-25">{{ checkData.provinceAmerceMoney }}</td> <td class="m-color w-25">是否责令停产整顿</td> <td class="w-25"> - {{ item.isRectify }} + {{ checkData.provinceStopProductionStatus == 1 ? '是': '否' }} </td> </tr> - <tr v-if="item.isRisky=='1'"> + <tr v-if="checkData.provinceHiddendangerStatus== 1"> <td class="m-color w-25">是否吊销许可证</td> <td class="w-25"> - {{ item.isRevoke }} + {{ checkData.provinceRevokeLicenseStatus == 1 ? '是': '否' }} </td> <td class="m-color w-25">是否暂扣许可证</td> <td class="w-25"> - {{ item.isSuspended }} + {{ checkData.provinceDetainLicenseStatus == 1 ? '是': '否' }} </td> </tr> + <tr style="text-align: center" v-if="unitType == 1"> + <el-button type="primary" icon="el-icon-edit" plain @click="editRecord(1)">修改</el-button> + </tr> </table> - <el-divider/> </div> </div> + <div v-else style="font-size: 20px;font-weight: bolder;text-align: center"> + 暂无本级检查反馈 + </div> </el-tab-pane> - <el-tab-pane label="市级" name="2">市级</el-tab-pane> - <el-tab-pane label="县级" name="3">县级</el-tab-pane> + <el-tab-pane :label="unitType==2 ? '本级': '市级'" name="2"> + <div v-if="checkData.cityCheckStatus == 1" class="record-list"> + <div class="record-item"> + <table class="record-table"> + <tr class="m-color b-font" style="background: #409EFF;color: #fff;text-align: center">烟花爆竹批发企业检查情况反馈表</tr> + <tr> + <td class="m-color w-50">被检查企业名称</td> + <td class="m-color w-50">所属省市县</td> + </tr> + <tr> + <td class="w-50">{{ checkData.enterpriseName }}</td> + <td class="w-50">{{ checkData.enterpriseProvince + checkData.enterpriseCity + checkData.enterpriseArea }}</td> + </tr> + <tr> + <td class="m-color w-25">检查层级</td> + <td class="m-color w-25">检查单位</td> + <td class="m-color w-25">检查时间</td> + <td class="m-color w-25">是否检查出隐患问题</td> + </tr> + <tr> + <td class="w-25">市级</td> + <td class="w-25">{{ checkData.cityCheckName }}</td> + <td class="w-25">{{ checkData.cityCheckTime }}</td> + <td class="w-25">{{ checkData.cityHiddendangerStatus == 1 ? '是' : '否' }}</td> + </tr> + <tr class="m-color b-font" style="text-align: center" v-if="checkData.areaHiddendangerStatus == 1">检查情况</tr> + <tr v-if="checkData.cityHiddendangerStatus == 1"> + <td class="m-color w-5">序号</td> + <td class="m-color w-25">检查出的隐患问题</td> + <td class="m-color w-10">隐患等级</td> + <td class="m-color w-25">整改措施</td> + <td class="m-color w-10">整改资金(元)</td> + <td class="m-color w-10">责任人</td> + <td class="m-color w-15">隐患状态</td> + </tr> + <tr v-if="checkData.cityHiddendangerStatus == 1" v-for="(x,i) in checkData.cityHiddendangerInfos"> + <td class="w-5">{{ i + 1 }}</td> + <td class="overText w-25">{{ x.spotCheckHiddendanger }}</td> + <td class="w-10">{{ x.hiddendangerLevel==1?'一般隐患':'重大隐患' }}</td> + <td class="overText w-25">{{ x.rectifyMeasure }}</td> + <td class="w-10">{{ x.rectifyPrice }}</td> + <td class="overText w-10">{{ x.chargePerson }}</td> + <td class="w-15">{{ x.rectifyStatus==1?'已整改完成':'未整改完成' }}</td> + </tr> + <tr class="m-color b-font" style="text-align: center">合计</tr> + <tr> + <td class="m-color w-50">隐患总数</td> + <td class="m-color w-50">重大隐患数量</td> + </tr> + <tr> + <td class="w-50">{{ checkData.cityHiddendangerSum ? checkData.cityHiddendangerSum : 0}}</td> + <td class="w-50">{{ checkData.cityMajorHiddendangerNum ? checkData.cityMajorHiddendangerNum : 0}}</td> + </tr> + <tr v-if="checkData.cityHiddendangerStatus== 1" class="m-color b-font" style="text-align: center">执法处罚情况</tr> + <tr v-if="checkData.cityHiddendangerStatus== 1"> + <td class="m-color w-25">罚款金额(万元)</td> + <td class="w-25">{{ checkData.cityAmerceMoney }}</td> + <td class="m-color w-25">是否责令停产整顿</td> + <td class="w-25"> + {{ checkData.cityStopProductionStatus == 1 ? '是': '否' }} + </td> + </tr> + <tr v-if="checkData.cityHiddendangerStatus== 1"> + <td class="m-color w-25">是否吊销许可证</td> + <td class="w-25"> + {{ checkData.cityRevokeLicenseStatus == 1 ? '是': '否' }} + </td> + <td class="m-color w-25">是否暂扣许可证</td> + <td class="w-25"> + {{ checkData.cityDetainLicenseStatus == 1 ? '是': '否' }} + </td> + </tr> + <tr style="text-align: center" v-if="unitType == 2"> + <el-button type="primary" icon="el-icon-edit" plain @click="editRecord(2)">修改</el-button> + </tr> + </table> + </div> + </div> + <div v-else style="font-size: 20px;font-weight: bolder;text-align: center"> + 暂无本级检查反馈 + </div> + </el-tab-pane> + <el-tab-pane :label="unitType==3 ? '本级': '区县级'" name="3"> + <div v-if="checkData.areaCheckStatus == 1" class="record-list"> + <div class="record-item"> + <table class="record-table"> + <tr class="m-color b-font" style="background: #409EFF;color: #fff;text-align: center">烟花爆竹批发企业检查情况反馈表</tr> + <tr> + <td class="m-color w-50">被检查企业名称</td> + <td class="m-color w-50">所属省市县</td> + </tr> + <tr> + <td class="w-50">{{ checkData.enterpriseName }}</td> + <td class="w-50">{{ checkData.enterpriseProvince + checkData.enterpriseCity + checkData.enterpriseArea }}</td> + </tr> + <tr> + <td class="m-color w-25">检查层级</td> + <td class="m-color w-25">检查单位</td> + <td class="m-color w-25">检查时间</td> + <td class="m-color w-25">是否检查出隐患问题</td> + </tr> + <tr> + <td class="w-25">区县级</td> + <td class="w-25">{{ checkData.areaCheckName }}</td> + <td class="w-25">{{ checkData.areaCheckTime }}</td> + <td class="w-25">{{ checkData.areaHiddendangerStatus == 1 ? '是' : '否' }}</td> + </tr> + <tr class="m-color b-font" style="text-align: center" v-if="checkData.areaHiddendangerStatus == 1">检查情况</tr> + <tr v-if="checkData.areaHiddendangerStatus == 1"> + <td class="m-color w-5">序号</td> + <td class="m-color w-25">检查出的隐患问题</td> + <td class="m-color w-10">隐患等级</td> + <td class="m-color w-25">整改措施</td> + <td class="m-color w-10">整改资金(元)</td> + <td class="m-color w-10">责任人</td> + <td class="m-color w-15">隐患状态</td> + </tr> + <tr v-if="checkData.areaHiddendangerStatus == 1" v-for="(x,i) in checkData.areaHiddendangerInfos"> + <td class="w-5">{{ i + 1 }}</td> + <td class="overText w-25">{{ x.spotCheckHiddendanger }}</td> + <td class="w-10">{{ x.hiddendangerLevel==1?'一般隐患':'重大隐患' }}</td> + <td class="overText w-25">{{ x.rectifyMeasure }}</td> + <td class="w-10">{{ x.rectifyPrice }}</td> + <td class="overText w-10">{{ x.chargePerson }}</td> + <td class="w-15">{{ x.rectifyStatus==1?'已整改完成':'未整改完成' }}</td> + </tr> + <tr class="m-color b-font" style="text-align: center">合计</tr> + <tr> + <td class="m-color w-50">隐患总数</td> + <td class="m-color w-50">重大隐患数量</td> + </tr> + <tr> + <td class="w-50">{{ checkData.areaHiddendangerSum ? checkData.areaHiddendangerSum : 0}}</td> + <td class="w-50">{{ checkData.areaMajorHiddendangerNum ? checkData.areaMajorHiddendangerNum : 0 }}</td> + </tr> + <tr v-if="checkData.areaHiddendangerStatus== 1" class="m-color b-font" style="text-align: center">执法处罚情况</tr> + <tr v-if="checkData.areaHiddendangerStatus== 1"> + <td class="m-color w-25">罚款金额(万元)</td> + <td class="w-25">{{ checkData.areaAmerceMoney }}</td> + <td class="m-color w-25">是否责令停产整顿</td> + <td class="w-25"> + {{ checkData.areaStopProductionStatus == 1 ? '是': '否' }} + </td> + </tr> + <tr v-if="checkData.areaHiddendangerStatus== 1"> + <td class="m-color w-25">是否吊销许可证</td> + <td class="w-25"> + {{ checkData.areaRevokeLicenseStatus == 1 ? '是': '否' }} + </td> + <td class="m-color w-25">是否暂扣许可证</td> + <td class="w-25"> + {{ checkData.areaDetainLicenseStatus == 1 ? '是': '否' }} + </td> + </tr> + <tr style="text-align: center" v-if="unitType == 3"> + <el-button type="primary" icon="el-icon-edit" plain @click="editRecord(3)">修改</el-button> + </tr> + </table> + </div> + </div> + <div v-else style="font-size: 20px;font-weight: bolder;text-align: center"> + 暂无本级检查反馈 + </div> + </el-tab-pane> </el-tabs> </div> @@ -186,21 +374,23 @@ :close-on-click-modal="false" width="50%" center + @close="resetEdit()" > - <el-form ref="editFormRef" :model="editForm" label-width="160px" class="edit-form"> - <el-row gutter="80"> + <el-form ref="editForm" :rule="rules" :model="editForm" label-width="160px" class="edit-form"> + <el-row :gutter="80"> <el-col :span="12"> - <el-form-item label="检查时间:"> + <el-form-item label="检查时间:" prop="checkTime"> <el-date-picker v-model="editForm.checkTime" type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间"> </el-date-picker> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="是否检查出隐患问题:"> - <el-radio-group v-model="editForm.isRisky"> + <el-form-item label="是否检查出隐患问题:" prop="hiddendangerStatus"> + <el-radio-group v-model="editForm.hiddendangerStatus"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> @@ -208,14 +398,16 @@ </el-col> </el-row> - <div class="form-list" v-if="editForm.isRisky==1"> + <div class="form-list" v-if="editForm.hiddendangerStatus==1"> <table class="form-table"> <th><span>序号</span><span>检查出的隐患问题</span><span>隐患等级</span><span>操作</span></th> - <tr v-for="(item,index) in editForm.riskList"> + <tr v-for="(item,index) in editForm.hiddendangerInfos"> <td class="num">{{index + 1}}</td> - <td class="info"><el-input type="textarea" :rows="1" placeholder="请输入内容" v-model="item.info"></el-input></td> + <td class="info"> + <el-input type="textarea" :rows="1" placeholder="请输入内容" v-model="item.spotCheckHiddendanger"></el-input> + </td> <td class="level"> - <el-radio-group v-model="item.level"> + <el-radio-group v-model="item.hiddendangerLevel"> <el-radio :label="1">一般隐患</el-radio> <el-radio :label="2">重大隐患</el-radio> </el-radio-group> @@ -227,45 +419,33 @@ <tr style="text-align: center"><el-button type="primary" plain icon="el-icon-plus" @click="addEditItem()">添加行</el-button></tr> </table> </div> - <el-row gutter="80" v-if="editForm.isRisky==1"> + <el-row :gutter="80" v-if="editForm.hiddendangerStatus==1"> <el-col :span="12"> - <el-form-item label="隐患总数:"> - <el-input v-model="editForm.totalRisk"></el-input> + <el-form-item label="罚款金额(万元):" prop="amerceMoney"> + <el-input v-model="editForm.amerceMoney" type="number" placeholder="请输入罚款金额,未罚款则填“0”"></el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="是否责令停产整顿:"> - <el-radio-group v-model="editForm.isRectify"> + <el-form-item label="是否责令停产整顿:" prop="stopProductionStatus"> + <el-radio-group v-model="editForm.stopProductionStatus"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> </el-form-item> </el-col> </el-row> - <el-row gutter="80" v-if="editForm.isRisky==1"> + <el-row :gutter="80" v-if="editForm.hiddendangerStatus==1"> <el-col :span="12"> - <el-form-item label="重大隐患数量:"> - <el-input v-model="editForm.majorNum"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="是否吊销许可证:"> - <el-radio-group v-model="editForm.isRevoke"> + <el-form-item label="是否吊销许可证:" prop="revokeLicenseStatus"> + <el-radio-group v-model="editForm.revokeLicenseStatus"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> </el-form-item> </el-col> - </el-row> - <el-row gutter="80" v-if="editForm.isRisky==1"> <el-col :span="12"> - <el-form-item label="罚款金额(万元):"> - <el-input v-model="editForm.fine"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="是否暂扣许可证:"> - <el-radio-group v-model="editForm.isSuspended"> + <el-form-item label="是否暂扣许可证:" prop="detainLicenseStatus"> + <el-radio-group v-model="editForm.detainLicenseStatus"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> @@ -274,82 +454,70 @@ </el-row> </el-form> <span slot="footer" class="dialog-footer"> - <el-button>取消</el-button> - <el-button type="primary">提交</el-button> + <el-button @click="editDialog = false">取消</el-button> + <el-button type="primary" @click="postEdit('editForm')">提交</el-button> </span> </el-dialog> + <check-details ref="report"></check-details> </el-dialog> </template> <script> import {computePageCount} from "@/utils"; - + import { saveSpotCheckReport, getSpotCheckReportInfo, updateSpotCheckReport } from "@/api/specialCheck" + import checkDetails from "../../selfCheck/components/checkDetails" export default { - name: "reportDetails", + name: "feedbackDetails", + components: {checkDetails}, data(){ return{ + id: null, + unitType: null, dialogVisible:false, editDialog: false, activeTab: '1', + corpInfo: {}, feedbackForm:{ + id: null, checkTime: '', - isRisky: '', - riskList: [ + hiddendangerStatus: null, + hiddendangerInfos: [ { - info: '', - level: '' + spotCheckHiddendanger: '', + hiddendangerLevel: null } ], - totalRisk: '', - majorNum: '', - fine: '', - isRectify: '', - isRevoke: '', - isSuspended: '' + amerceStatus: null, + amerceMoney: null, + stopProductionStatus: null, + revokeLicenseStatus: null, + detainLicenseStatus: null }, - recordList:[ - { - checkTime: '2022-11-02', - isRisky: 1, - riskList: [ - { - info: '测试数据一', - level: 1 - }, - { - info: '测试数据二', - level: 0 - } - ], - totalRisk: 1, - majorNum: 0, - fine: '2500', - isRectify: 0, - isRevoke: 0, - isSuspended: 1 - }, - { - checkTime: '2022-11-02', - isRisky: 0, - riskList: [], - totalRisk: 0, - majorNum: 0, - fine: '', - isRectify: 0, - isRevoke: 0, - isSuspended: 0 - } - ], + rules: { + checkTime: [{ required: true, message: '请选择检查时间', trigger: 'blur' }], + hiddendangerStatus: [{ required: true, message: '请选择是否查出隐患', trigger: 'blur' }], + amerceMoney: [{ required: true, message: '请输入罚款金额(未罚款则填0)', trigger: 'blur' }], + stopProductionStatus: [{ required: true, message: '请选择是否责令停产整顿', trigger: 'blur' }], + revokeLicenseStatus: [{ required: true, message: '请选择是否吊销许可证', trigger: 'blur' }], + detainLicenseStatus: [{ required: true, message: '请选择是否查出暂扣许可证', trigger: 'blur' }] + }, + checkData:{}, + tabCheckTime: '', editForm:{ + id: null, checkTime: '', - isRisky: '', - riskList: [], - totalRisk: '', - majorNum: '', - fine: '', - isRectify: '', - isRevoke: '', - isSuspended: '' + hiddendangerStatus: null, + hiddendangerInfos: [ + { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + ], + amerceStatus: null, + amerceMoney: null, + stopProductionStatus: null, + revokeLicenseStatus: null, + detainLicenseStatus: null } } }, @@ -359,35 +527,276 @@ confirmBack(){ this.dialogVisible = false }, + openSelfCheck(){ + const t = this + t.$refs.report.id = t.id + t.$refs.report.getEnterpriseInfo() + t.$refs.report.dialogVisible = true + }, handleSwitch(tab, event) { - console.log(tab, event); + const t = this + if(tab.index == 0){ + t.tabCheckTime = t.checkData.provinceCheckTime + }else if(tab.index == 1){ + t.tabCheckTime = t.checkData.cityCheckTime + }else{ + t.tabCheckTime = t.checkData.areaCheckTime + } + }, + + async getSpotCheckReportInfo(){ + const t = this + let res = await getSpotCheckReportInfo({id: t.id}) + if(res.data.code === "200"){ + if(res.data.result == null){ + t.checkData.provinceCheckStatus = 0 + t.checkData.cityCheckStatus = 0 + t.checkData.areaCheckStatus = 0 + t.checkData.provinceCheckTime = '' + t.checkData.cityCheckTime = '' + t.checkData.areaCheckTime = '' + }else{ + t.checkData = res.data.result + t.tabCheckTime = res.data.result.provinceCheckTime + } + + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } }, addItem(){ const newItem = { - info: '', - level: '' + spotCheckHiddendanger: '', + hiddendangerLevel: null } - this.feedbackForm.riskList.push(newItem) + this.feedbackForm.hiddendangerInfos.push(newItem) }, deleteItem(i){ - console.log(i) - this.feedbackForm.riskList.splice(i,1) - }, - editRecord(index){ const t = this + if(t.feedbackForm.hiddendangerInfos.length == 1){ + t.$message({ + type:'warning', + message: '检查的隐患信息不可为空' + }) + }else{ + t.feedbackForm.hiddendangerInfos.splice(i,1) + } + }, + + confirmSubmit(formName){ + const t = this + t.$refs[formName].validate(async (valid) => { + if(t.feedbackForm.hiddendangerStatus == 0){ + t.feedbackForm.hiddendangerInfos = [] + t.feedbackForm.amerceStatus = null + t.feedbackForm.amerceMoney = null + t.feedbackForm.stopProductionStatus = null + t.feedbackForm.revokeLicenseStatus = null + t.feedbackForm.detainLicenseStatus = null + } + if(t.feedbackForm.hiddendangerStatus == 1){ + if(t.feedbackForm.hiddendangerInfos.find((e) => e.spotCheckHiddendanger == '') || t.feedbackForm.hiddendangerInfos.find((e) => e.hiddendangerLevel == null)){ + t.$message({ + type:'warning', + message: '请完善检查的隐患信息' + }) + return + } + } + if (valid) { + if(t.feedbackForm.amerceMoney>0){t.feedbackForm.amerceStatus = 1} + else{t.feedbackForm.amerceStatus = 0} + let res = await saveSpotCheckReport(t.feedbackForm) + if(res.data.code === "200"){ + t.$message({ + type:'success', + message:'提交成功' + }) + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.feedbackForm = { + id: null, + checkTime: '', + hiddendangerStatus: null, + hiddendangerInfos: [ + { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + ], + amerceStatus: null, + amerceMoney: null, + stopProductionStatus: null, + revokeLicenseStatus: null, + detainLicenseStatus: null + }, + t.dialogVisible = false + } else { + console.log('error submit!!'); + return false; + } + }); + }, + + editRecord(type){ + const t = this + t.editForm.id = t.checkData.id + if(type == 1){ + t.editForm.checkTime = t.checkData.provinceCheckTime + t.editForm.hiddendangerStatus = t.checkData.provinceHiddendangerStatus + if(t.checkData.provinceHiddendangerInfos == null || t.checkData.provinceHiddendangerInfos.length==0){ + t.editForm.hiddendangerInfos = [ + { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + ] + }else{t.editForm.hiddendangerInfos = t.checkData.provinceHiddendangerInfos} + t.editForm.amerceMoney = t.checkData.provinceAmerceMoney + t.editForm.stopProductionStatus = t.checkData.provinceStopProductionStatus + t.editForm.revokeLicenseStatus = t.checkData.provinceRevokeLicenseStatus + t.editForm.detainLicenseStatus = t.checkData.provinceDetainLicenseStatus + } else if(type == 2){ + t.editForm.checkTime = t.checkData.cityCheckTime + t.editForm.hiddendangerStatus = t.checkData.cityHiddendangerStatus + if(t.checkData.cityHiddendangerInfos == null || t.checkData.cityHiddendangerInfos.length==0){ + t.editForm.hiddendangerInfos = [ + { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + ] + }else{t.editForm.hiddendangerInfos = t.checkData.cityHiddendangerInfos} + t.editForm.amerceMoney = t.checkData.cityAmerceMoney + t.editForm.stopProductionStatus = t.checkData.cityStopProductionStatus + t.editForm.revokeLicenseStatus = t.checkData.cityRevokeLicenseStatus + t.editForm.detainLicenseStatus = t.checkData.cityDetainLicenseStatus + } else{ + t.editForm.checkTime = t.checkData.areaCheckTime + t.editForm.hiddendangerStatus = t.checkData.areaHiddendangerStatus + if(t.checkData.areaHiddendangerInfos == null || t.checkData.areaHiddendangerInfos.length==0){ + t.editForm.hiddendangerInfos = [ + { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + ] + }else{t.editForm.hiddendangerInfos = t.checkData.areaHiddendangerInfos} + t.editForm.amerceMoney = t.checkData.areaAmerceMoney + t.editForm.stopProductionStatus = t.checkData.areaStopProductionStatus + t.editForm.revokeLicenseStatus = t.checkData.areaRevokeLicenseStatus + t.editForm.detainLicenseStatus = t.checkData.areaDetainLicenseStatus + } t.editDialog = true }, - addEditItem(){ - const newItem = { - info: '', - level: '' + + postEdit(formName){ + const t = this + t.$refs[formName].validate(async (valid) => { + if(t.editForm.hiddendangerStatus == 0){ + t.editForm.hiddendangerInfos = [] + t.editForm.amerceStatus = null + t.editForm.amerceMoney = null + t.editForm.stopProductionStatus = null + t.editForm.revokeLicenseStatus = null + t.editForm.detainLicenseStatus = null + } + if(t.editForm.hiddendangerStatus == 1){ + if(t.editForm.hiddendangerInfos.find((e) => e.spotCheckHiddendanger == '') || t.editForm.hiddendangerInfos.find((e) => e.hiddendangerLevel == null)){ + t.$message({ + type:'warning', + message: '请完善检查的隐患信息' + }) + return + } + } + t.editForm.hiddendangerInfos = Array.from(t.editForm.hiddendangerInfos,item=>{ + return {spotCheckHiddendanger: item.spotCheckHiddendanger, hiddendangerLevel: item.hiddendangerLevel, spotCheckUnitType: t.unitType, spotCheckId: t.checkData.id} + }) + if (valid) { + if(t.editForm.amerceMoney>0){t.editForm.amerceStatus = 1} + else{t.editForm.amerceStatus = 0} + t.editForm.amerceMoney = Number(t.editForm.amerceMoney) + let res = await updateSpotCheckReport(t.editForm) + if(res.data.code === "200"){ + t.$message({ + type:'success', + message:'提交成功' + }) + t.getSpotCheckReportInfo() + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.editForm = { + id: null, + checkTime: '', + hiddendangerStatus: null, + hiddendangerInfos: [ + { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + ], + amerceStatus: null, + amerceMoney: null, + stopProductionStatus: null, + revokeLicenseStatus: null, + detainLicenseStatus: null + }, + t.editDialog = false + } else { + console.log('error submit!!'); + return false; + } + }); + }, + resetEdit(){ + this.editForm = { + id: null, + checkTime: '', + hiddendangerStatus: null, + hiddendangerInfos: [ + { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + ], + amerceStatus: null, + amerceMoney: null, + stopProductionStatus: null, + revokeLicenseStatus: null, + detainLicenseStatus: null } - this.editForm.riskList.push(newItem) + }, + addEditItem(){ + const t = this + const newItem = { + spotCheckHiddendanger: '', + hiddendangerLevel: null + } + t.editForm.hiddendangerInfos.push(newItem) }, deleteEditItem(i){ - console.log(i) - this.editForm.riskList.splice(i,1) + const t = this + if(t.editForm.hiddendangerInfos.length == 1){ + t.$message({ + type:'warning', + message: '检查的隐患信息不可为空' + }) + }else{ + t.editForm.hiddendangerInfos.splice(i,1) + } }, }, } @@ -440,8 +849,9 @@ position: absolute; height: 40px; line-height: 40px; - right: 10px; + right: 20px; top: 0; + z-index: 99999; } } @@ -569,21 +979,24 @@ } } - &:nth-of-type(1){ + &.w-5{ width: 5%; } - &:nth-of-type(2){ - width: 60% + &.w-10{ + width: 10%; } - &:nth-of-type(3){ - width: 35%; + &.w-15{ + width: 15%; } - &.w-50{ - width: 50%; + &.w-20{ + width: 20%; } &.w-25{ width: 25%; } + &.w-50{ + width: 50%; + } &.w-75{ width: 75%; } diff --git a/src/views/specialCheck/components/reportDetails.vue b/src/views/specialCheck/components/reportDetails.vue index 92df9d2..ff1f72e 100644 --- a/src/views/specialCheck/components/reportDetails.vue +++ b/src/views/specialCheck/components/reportDetails.vue @@ -81,51 +81,48 @@ <script> import {computePageCount} from "@/utils"; - + import { getEnterpriseInfo } from "@/api/selfCheck"; export default { name: "reportDetails", data(){ return{ dialogVisible:false, + id: null, corpInfo:{ - name: '沙湾市国华商贸有限公司', - location: '新疆维吾尔自治区塔城地区沙湾县', - isInDate: true, - stock: '0.7321', - store: '3', - measures: [ - { - desc: '未及时设防未及时设防未及时设防未及时设防未及时设防未及时设防未及时设防未及时设防未及时设防未及时设防未及时设防', - checkTime: '2022年12月13日', - level: '一般隐患', - action: '及时设防', - money: '30', - name: '田维云', - status: '整改完成期限:2022年10月13日' - }, - { - desc: '未及时设防', - checkTime: '2022年12月13日', - level: '一般隐患', - action: '及时设防', - money: '0', - name: '刘海亮', - status: '整改完成期限:2022年10月13日' - } - ], - totalRisks: 2, - majorRisk: 0, - fixRisks: 2, - fixMajorRisk: 0, - reporter: '张建路', - reportPhone: '15699336111', - reportTime: '2022-10-13' + enterpriseName: '', + enterpriseProvince: '', + enterpriseCity: '', + enterpriseArea: '', + licenceValidStatus: 0, + stockNum: 0, + store: 0, + hiddendangerInfos: [], + hiddendangerSum: 0, + majorHiddendangerNum: 0, + completedRectifyHiddendangerSum: 0, + completedRectifyMajorHiddendangerNum: 0, + selfcheckReportUserName: '', + selfcheckReportUserMobile: '', + reportModifyTime: '' } } }, watch: { }, methods:{ + async getEnterpriseInfo(){ + const t = this + let res = await getEnterpriseInfo({id: t.id}) + if(res.data.code === "200"){ + t.corpInfo = res.data.result + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + confirmBack(){ this.dialogVisible = false } diff --git a/src/views/specialCheck/components/retailForm.vue b/src/views/specialCheck/components/retailForm.vue deleted file mode 100644 index 85939a2..0000000 --- a/src/views/specialCheck/components/retailForm.vue +++ /dev/null @@ -1,240 +0,0 @@ -<template> - <div class="table"> - <div class="filter-container"> - <div class="table-tit"> - <h2>2023年上半年烟花爆竹生产经营安全检查(零售)</h2> - <span>(检查一家反馈一家,没有检查出隐患问题的也要登记反馈)</span> - </div> - <div class="control-bar"> - <div> - 批发企业共计<span>416</span>家,其中:已自查<span>115</span>家,未自查<span class="undone">301</span>家;本级已经抽查<span>51</span>家,未检查<span class="undone">365</span>家,完成率<span>100%</span>。 - </div> - <el-button class="filter-item" style="margin-left: 10px;" type="primary" - icon="el-icon-search">自定义查询 - </el-button> - </div> - </div> - <div class="table_content"> - <el-table - v-loading="listLoading" - :key="tableKey" - :data="checkData" - border - fit - highlight-current-row - style="width: 100%;" - > - - <el-table-column type="index" label="序号" align="center" width="80"/> - <el-table-column label="单位名称" prop="owner" align="center" width="180"> - <template slot-scope="scope"> - <span>{{ scope.row.owner }}</span> - </template> - </el-table-column> - <el-table-column label="联系电话" prop="phone" align="center"> - <template slot-scope="scope"> - <span>{{scope.row.phone}}</span> - </template> - </el-table-column> - - <el-table-column label="库存数量/万箱" prop="stock" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.stock }}</span> - </template> - </el-table-column> - - <el-table-column label="是否查出隐患" prop="isRisk" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.isRisk == 0 ? '否' : '是' }}</span> - </template> - </el-table-column> - <el-table-column label="自查填报时间" prop="selfCheckTime" width="130" align="center" sortable> - <template slot-scope="scope"> - <span>{{ scope.row.selfCheckTime }}</span> - </template> - </el-table-column> - <el-table-column label="填报状态" prop="fillStatus" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.fillStatus == 0 ? '未填报' : '已填报' }}</span> - </template> - </el-table-column> - <el-table-column label="详情" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button type="text" @click="viewDetails(scope.row)">查看</el-button> - </template> - </el-table-column> - <el-table-column label="反馈状态" prop="feedback" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.feedback == 0 ? '未反馈' : '已反馈' }}</span> - </template> - </el-table-column> - <el-table-column label="执法抽查" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button type="text" @click="toFeedback(scope.row)">情况反馈</el-button> - </template> - </el-table-column> - </el-table> - - - <el-pagination - v-show="recordTotal>0" - :current-page="currentPage" - :page-sizes="[10, 20, 30, 50]" - :page-size="pageSize" - :total="recordTotal" - layout="total, sizes, prev, pager, next, jumper" - background - style="float:right;margin:3px" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> -</template> - -<script> -import {mapGetters} from "vuex"; -import Cookies from "_js-cookie@2.2.0@js-cookie"; -import {paramList} from "../../../api/contract"; -import {computePageCount} from "../../../utils"; -import {parseError} from "../../../utils/messageDialog"; - -export default { -name: "retailForm", - data(){ - return{ - recordTotal: 0, - pageSize: 10, - pageTotal: 0, - currentPage: 1, - listLoading: false, - tableKey: 0, - checkData: [ - { - owner: '单位一', - phone: '88888888', - stock: 266, - isRisk: 0, - selfCheckTime: '2022-10-27 15:16:00', - fillStatus: 1, - feedback: 0, - }, - { - owner: '单位二', - phone: '66666666', - stock: 288, - isRisk: 1, - selfCheckTime: '2022-10-27 15:16:00', - fillStatus: 0, - feedback: 1, - } - ], - } - }, - created() { - // this.getDataList(); - }, - computed: { - ...mapGetters([ - 'userType', - 'name' - ]) - }, - methods:{ - // getDataList() { - // const t = this; - // const params = {}; - // params['pageIndex'] = t.currentPage; - // params['pageSize'] = t.pageSize; - // params['sort'] = t.sort; - // params['order'] = t.order; - // const userName = Cookies.get('userName'); - // const name = Cookies.get('name'); - // params['operator'] = name + '(' + userName + ')'; - // for (const i in t.queryForm) { - // if (t.queryForm[i] != undefined && t.queryForm[i].toString() != '') { - // params[i] = t.queryForm[i] - // } - // } - // t.listLoading = true - // paramList(params).then(response => { - // const res = response.data; - // if (res.code === "200") { - // const result = res.result; - // t.recordTotal = result.totalCount; - // t.pageSize = result.pageSize; - // t.pageTotal = computePageCount(result.totalCount, result.pageSize); - // t.currentPage = result.pageIndex; - // t.checkData = result.result - // } else { - // parseError({error: res.message, vm: t}) - // } - // t.listLoading = false - // }).catch(error => { - // t.listLoading = false - // parseError({error: error, vm: t}) - // }) - // }, - - handleSizeChange: function (val) { - this.pageSize = val - this.currentPage = 1 - // this.getDataList() - }, - handleCurrentChange: function (val) { - this.currentPage = val - // this.getDataList() - }, - - viewDetails(row){ - console.log(row) - }, - - toFeedback(row){ - console.log(row) - } - } -} -</script> - -<style lang="scss" scoped> - .table{ - width: 100%; - height: 100%; - .filter-container{ - .table-tit{ - text-align: center; - margin-bottom: 10px; - h2{ - margin: 0; - } - span{ - display: block; - margin-top: 6px; - color: #ff0000; - } - } - .control-bar{ - display: flex; - justify-content: space-between; - align-items: center; - - div{ - span{ - font-size: 22px; - margin: 0 6px; - color: #034EA2; - font-weight: bolder; - } - - .undone{ - color: #ff0000; - } - } - } - } - .filter-item{ - margin-bottom: 0; - } - } -</style> diff --git a/src/views/specialCheck/components/sendWork.vue b/src/views/specialCheck/components/sendWork.vue index 5812319..211bb81 100644 --- a/src/views/specialCheck/components/sendWork.vue +++ b/src/views/specialCheck/components/sendWork.vue @@ -7,9 +7,9 @@ width="60%" center > - <el-form ref="form" :model="workForm" label-width="80px"> - <el-form-item label="专项检查任务名称:" label-width="140px"> - <el-input type="textarea" v-model="workForm.name"></el-input> + <el-form :model="workForm" :rules="rules" ref="ruleForm" label-width="80px"> + <el-form-item label="专项检查任务名称:" label-width="180px" prop="taskName"> + <el-input type="textarea" v-model="workForm.taskName"></el-input> </el-form-item> <div class="form-part"> <h3>省级检查指标</h3> @@ -17,20 +17,21 @@ <el-divider content-position="left">批发企业</el-divider> <el-row> <el-col :span="12"> - <el-form-item label="完成检查不低于:" label-width="140px"> - <el-input v-model="workForm.pro.whole" class="input-with-select"> - <el-select v-model="workForm.pro.wholeUnit" slot="append"> - <el-option label="家" value="1"></el-option> - <el-option label="%" value="2"></el-option> + <el-form-item label="完成检查不低于:" label-width="140px" prop="provinceWholesaleCheckTarget"> + <el-input v-model="workForm.provinceWholesaleCheckTarget" class="input-with-select"> + <el-select v-model="workForm.provinceWholesaleCheckTargetUnit" slot="append"> + <el-option label="家" :value="1"></el-option> + <el-option label="%" :value="2"></el-option> </el-select> </el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="完成期限:" label-width="140px"> + <el-form-item label="完成期限:" label-width="140px" prop="provinceWholesaleCheckDeadline"> <el-date-picker - v-model="workForm.pro.wholeDate" - type="date" + v-model="workForm.provinceWholesaleCheckDeadline" + type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期"> </el-date-picker> </el-form-item> @@ -40,20 +41,21 @@ <el-divider content-position="left">零售企业</el-divider> <el-row> <el-col :span="12"> - <el-form-item label="完成检查不低于:" label-width="140px"> - <el-input v-model="workForm.pro.retail" class="input-with-select"> - <el-select v-model="workForm.pro.retailUnit" slot="append"> - <el-option label="家" value="1"></el-option> - <el-option label="%" value="2"></el-option> + <el-form-item label="完成检查不低于:" label-width="140px" prop="provinceRetailCheckTarget"> + <el-input v-model="workForm.provinceRetailCheckTarget" class="input-with-select"> + <el-select v-model="workForm.provinceRetailCheckTargetUnit" slot="append"> + <el-option label="家" :value="1"></el-option> + <el-option label="%" :value="2"></el-option> </el-select> </el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="完成期限:" label-width="140px"> + <el-form-item label="完成期限:" label-width="140px" prop="provinceRetailCheckDeadline"> <el-date-picker - v-model="workForm.pro.retailDate" - type="date" + v-model="workForm.provinceRetailCheckDeadline" + type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期"> </el-date-picker> </el-form-item> @@ -66,17 +68,18 @@ <el-divider content-position="left">批发企业</el-divider> <el-row> <el-col :span="12"> - <el-form-item label="完成检查不低于:" label-width="140px"> - <el-input v-model="workForm.city.whole" class="input-with-select"> + <el-form-item label="完成检查不低于:" label-width="140px" prop="cityWholesaleCheckTarget"> + <el-input v-model="workForm.cityWholesaleCheckTarget" class="input-with-select"> <template slot="append">%</template> </el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="完成期限:" label-width="140px"> + <el-form-item label="完成期限:" label-width="140px" prop="cityWholesaleCheckDeadline"> <el-date-picker - v-model="workForm.city.wholeDate" - type="date" + v-model="workForm.cityWholesaleCheckDeadline" + type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期"> </el-date-picker> </el-form-item> @@ -86,17 +89,18 @@ <el-divider content-position="left">零售企业</el-divider> <el-row> <el-col :span="12"> - <el-form-item label="完成检查不低于:" label-width="140px"> - <el-input v-model="workForm.city.retail" class="input-with-select"> + <el-form-item label="完成检查不低于:" label-width="140px" prop="cityRetailCheckTarget"> + <el-input v-model="workForm.cityRetailCheckTarget" class="input-with-select"> <template slot="append">%</template> </el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="完成期限:" label-width="140px"> + <el-form-item label="完成期限:" label-width="140px" prop="cityRetailCheckDeadline"> <el-date-picker - v-model="workForm.city.retailDate" - type="date" + v-model="workForm.cityRetailCheckDeadline" + type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期"> </el-date-picker> </el-form-item> @@ -109,17 +113,18 @@ <el-divider content-position="left">批发企业</el-divider> <el-row> <el-col :span="12"> - <el-form-item label="完成检查不低于:" label-width="140px"> - <el-input v-model="workForm.county.whole" class="input-with-select"> + <el-form-item label="完成检查不低于:" label-width="140px" prop="areaWholesaleCheckTarget"> + <el-input v-model="workForm.areaWholesaleCheckTarget" class="input-with-select"> <template slot="append">%</template> </el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="完成期限:" label-width="140px"> + <el-form-item label="完成期限:" label-width="140px" prop="areaWholesaleCheckDeadline"> <el-date-picker - v-model="workForm.county.wholeDate" - type="date" + v-model="workForm.areaWholesaleCheckDeadline" + type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期"> </el-date-picker> </el-form-item> @@ -129,76 +134,112 @@ <el-divider content-position="left">零售企业</el-divider> <el-row> <el-col :span="12"> - <el-form-item label="完成检查不低于:" label-width="140px"> - <el-input v-model="workForm.county.retail" class="input-with-select"> + <el-form-item label="完成检查不低于:" label-width="140px" prop="areaRetailCheckTarget"> + <el-input v-model="workForm.areaRetailCheckTarget" class="input-with-select"> <template slot="append">%</template> </el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="完成期限:" label-width="140px"> + <el-form-item label="完成期限:" label-width="140px" prop="areaRetailCheckDeadline"> <el-date-picker - v-model="workForm.county.retailDate" - type="date" + v-model="workForm.areaRetailCheckDeadline" + type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期"> </el-date-picker> </el-form-item> </el-col> </el-row> </div> - <el-form-item label="企业自查期限:" label-width="140px"> + <el-form-item label="企业自查期限:" label-width="140px" prop="enterpriseSelfCheckDeadline"> <el-date-picker - v-model="workForm.corpDate" - type="date" + v-model="workForm.enterpriseSelfCheckDeadline" + type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"> </el-date-picker> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> - <el-button @click="dialogVisible = false">重置</el-button> - <el-button type="primary" @click="confirmSend()">确认下发</el-button> + <el-button @click="resetForm('ruleForm')">重置</el-button> + <el-button type="primary" @click="confirmSend('ruleForm')">确认下发</el-button> </span> </el-dialog> </template> <script> import {computePageCount} from "@/utils"; - + import{sendCheckTask} from "@/api/specialCheck" export default { name: "sendWork", data(){ return{ dialogVisible:false, workForm: { - name: '', - pro:{ - whole: '', - wholeUnit: '1', - wholeDate: '', - retail: '', - retailUnit: '1', - retailDate: '' - }, - city:{ - whole: '', - wholeDate: '', - retail: '', - retailDate: '' - }, - county:{ - whole: '', - wholeDate: '', - retail: '', - retailDate: '' - } + taskName: '', + provinceWholesaleCheckTarget: null, + provinceWholesaleCheckTargetUnit: 1, + provinceWholesaleCheckDeadline: '', + provinceRetailCheckTarget: null, + provinceRetailCheckTargetUnit: 1, + provinceRetailCheckDeadline: '', + cityWholesaleCheckTarget: null, + cityWholesaleCheckDeadline: '', + cityRetailCheckTarget: null, + cityRetailCheckDeadline: '', + areaWholesaleCheckTarget: null, + areaWholesaleCheckDeadline: '', + areaRetailCheckTarget: null, + areaRetailCheckDeadline: '', + enterpriseSelfCheckDeadline: '' + }, + rules: { + taskName: [{ required: true, message: '请输入任务名称', trigger: 'blur' }], + provinceWholesaleCheckTarget: [{ required: true, message: '请输入指标', trigger: 'blur' }], + provinceWholesaleCheckDeadline: [{ required: true, message: '请选择日期', trigger: 'blur' }], + provinceRetailCheckTarget: [{ required: true, message: '请输入指标', trigger: 'blur' }], + provinceRetailCheckDeadline: [{ required: true, message: '请选择日期', trigger: 'blur' }], + cityWholesaleCheckTarget: [{ required: true, message: '请输入指标', trigger: 'blur' }], + cityWholesaleCheckDeadline: [{ required: true, message: '请选择日期', trigger: 'blur' }], + cityRetailCheckTarget: [{ required: true, message: '请输入指标', trigger: 'blur' }], + cityRetailCheckDeadline: [{ required: true, message: '请选择日期', trigger: 'blur' }], + areaWholesaleCheckTarget: [{ required: true, message: '请输入指标', trigger: 'blur' }], + areaWholesaleCheckDeadline: [{ required: true, message: '请选择日期', trigger: 'blur' }], + areaRetailCheckTarget: [{ required: true, message: '请输入指标', trigger: 'blur' }], + areaRetailCheckDeadline: [{ required: true, message: '请选择日期', trigger: 'blur' }], + enterpriseSelfCheckDeadline: [{ required: true, message: '请选择日期', trigger: 'blur' }] } } }, watch: { }, methods:{ - confirmSend(){ - this.dialogVisible = false + confirmSend(formName){ + const t = this + t.$refs[formName].validate(async (valid) => { + if (valid) { + let res = await sendCheckTask(t.workForm) + if(res.data.code === "200"){ + t.$message({ + type:'success', + message:res.data.message + }) + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.dialogVisible = false + t.resetForm(formName) + } else { + return false; + } + }); + }, + resetForm(formName) { + this.$refs[formName].resetFields(); } }, } diff --git a/src/views/specialCheck/components/sumSheet.vue b/src/views/specialCheck/components/sumSheet.vue new file mode 100644 index 0000000..76bdd82 --- /dev/null +++ b/src/views/specialCheck/components/sumSheet.vue @@ -0,0 +1,361 @@ +<template> + <div class="table"> + <div class="table_content"> + <el-tabs type="border-card" v-model="activeTab" @tab-click="switchSheet"> + <el-tab-pane label="批发" name="1" style="display: flex;flex-direction: column;align-items: flex-start"> + <h2 style="text-align: center">2023年上半年烟花爆竹生产经营安全检查批发环节信息报送汇总表(省级层面)</h2> + <table class="data-table"> + <tr> + <th rowspan="3">序号</th> + <th rowspan="3">地市</th> + <th colspan="2">企业基本情况</th> + <th colspan="11">企业自查及整改</th> + <th colspan="9">检查及整改情况</th> + <th colspan="4">执法处罚情况</th> + </tr> + <tr> + <th rowspan="2">企业总数</th> + <th rowspan="2">任务下发时有效期内企业总数</th> + <th rowspan="2">自查企业数量</th> + <th rowspan="2">自查覆盖率要求</th> + <th rowspan="2">已完成覆盖率</th> + <th rowspan="2">当前有效期内企业数量</th> + <th rowspan="2">企业库存数量/万箱</th> + <th rowspan="2">企业库容量/万箱</th> + <th colspan="2">隐患问题情况</th> + <th colspan="3">整改情况</th> + <th rowspan="2">检查层级</th> + <th rowspan="2">检查企业数量</th> + <th rowspan="2">检查覆盖率要求</th> + <th rowspan="2">已完成覆盖率</th> + <th colspan="2">隐患问题情况</th> + <th colspan="3">整改情况</th> + <th rowspan="2">吊销许可证数量</th> + <th rowspan="2">暂扣许可证数量</th> + <th rowspan="2">罚款企业数量</th> + <th rowspan="2">罚款金额</th> + </tr> + <tr> + <th>隐患总数</th> + <th>重大隐患数量</th> + <th>整改总数</th> + <th>重大隐患整改数量</th> + <th>隐患整改率</th> + <th>隐患总数</th> + <th>重大隐患数量</th> + <th>整改隐患总数</th> + <th>整改重大隐患数量</th> + <th>隐患整改率</th> + </tr> + <tr> + <td colspan="2">合计</td> + <td>{{sum.enterpriseSum}}</td> + <td>{{sum.validEnterpriseNum}}</td> + <td>{{sum.selfCheckEnterpriseNum}}</td> + <td>{{sum.selfCheckRateRequire + '%'}}</td> + <td :class="(sum.selfCheckEnterpriseNum / sum.validEnterpriseNum) * 100<sum.selfCheckRateRequire?'warning':''"> + {{(sum.selfCheckEnterpriseNum / sum.validEnterpriseNum) * 100 + '%'}} + </td> + <td>{{sum.validSelfCheckEnterpriseNum}}</td> + <td>{{sum.stockNum}}</td> + <td>{{sum.storageCapacity}}</td> + <td>{{sum.selfhiddendangerSum}}</td> + <td>{{sum.selfmajorHiddendangerNum}}</td> + <td>{{sum.selfcompletedRectifyHiddendangerSum}}</td> + <td>{{sum.selfcompletedRectifyMajorHiddendangerNum}}</td> + <td>{{(sum.selfcompletedRectifyHiddendangerSum / sum.selfhiddendangerSum) * 100 + '%'}}</td> + <td>--</td> + <td>{{sum.spotCheckEnterpriseNum}}</td> + <td>{{sum.spotCheckRateRequire + '%'}}</td> + <td :class="(sum.spotCheckEnterpriseNum / sum.validEnterpriseNum) * 100<sum.spotCheckRateRequire?'warning':''"> + {{(sum.spotCheckEnterpriseNum / sum.validEnterpriseNum) * 100 + '%'}} + </td> + <td>{{sum.spotCheckHiddendangerSum}}</td> + <td>{{sum.spotCheckMajorHiddendangerNum}}</td> + <td>{{sum.spotCheckCompletedRectifyHiddendangerSum}}</td> + <td>{{sum.spotCheckCompletedRectifyMajorHiddendangerNum}}</td> + <td>{{(sum.spotCheckCompletedRectifyHiddendangerSum / sum.spotCheckHiddendangerSum) * 100 + '%'}}</td> + <td>{{sum.revokeLicenseEnterpriseSum}}</td> + <td>{{sum.detainLicenseSum}}</td> + <td>{{sum.amerceEnterpriseNum}}</td> + <td>{{sum.amerceMoneySum}}</td> + </tr> + <tr> + <td colspan="2">{{ unitType==1?'省本级':(unitType==2?'市本级':'县本级') }}</td> + <td>{{thisLevelStatistic.enterpriseSum?thisLevelStatistic.enterpriseSum: '--'}}</td> + <td>{{thisLevelStatistic.validEnterpriseNum?thisLevelStatistic.validEnterpriseNum: '--'}}</td> + <td>{{thisLevelStatistic.selfCheckEnterpriseNum?thisLevelStatistic.selfCheckEnterpriseNum: '--'}}</td> + <td>{{thisLevelStatistic.selfCheckRateRequire?thisLevelStatistic.selfCheckRateRequire: '--'}}</td> + <td>{{thisLevelStatistic.selfCheckCompleteRate?thisLevelStatistic.selfCheckCompleteRate: '--'}}</td> + <td>{{thisLevelStatistic.validSelfCheckEnterpriseNum?thisLevelStatistic.validSelfCheckEnterpriseNum: '--'}}</td> + <td>{{thisLevelStatistic.stockNum?thisLevelStatistic.stockNum:'--'}}</td> + <td>{{thisLevelStatistic.storageCapacity?thisLevelStatistic.storageCapacity: '--'}}</td> + <td>{{thisLevelStatistic.hiddendangerSum?thisLevelStatistic.hiddendangerSum:'--'}}</td> + <td>{{thisLevelStatistic.majorHiddendangerNum?thisLevelStatistic.majorHiddendangerNum:'--'}}</td> + <td>{{thisLevelStatistic.completedRectifyHiddendangerSum?thisLevelStatistic.completedRectifyHiddendangerSum:'--'}}</td> + <td>{{thisLevelStatistic.completedRectifyMajorHiddendangerNum?thisLevelStatistic.completedRectifyMajorHiddendangerNum:'--'}}</td> + <td>{{thisLevelStatistic.hiddendangerRectifyRate?thisLevelStatistic.hiddendangerRectifyRate:'--'}}</td> + <td>省级</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckEnterpriseNum}}</td> + <td>{{typeof thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckRateRequire=="string"?thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckRateRequire:thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckRateRequire + '%'}}</td> + <td>{{typeof thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckCompleteRate=="string"?thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckCompleteRate:thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckCompleteRate + '%'}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckHiddendangerinfo.spotCheckHiddendangerSum}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate + '%'}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.revokeLicenseEnterpriseSum}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.detainLicenseSum}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.amerceEnterpriseNum}}</td> + <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.amerceMoneySum}}</td> + </tr> + <template v-for="(item,index) in institutionalData"> + <tr> + <td rowspan="2">{{ index + 1}}</td> + <td rowspan="2" @click="toDownSide()">{{item.enterpriseProvince?item.enterpriseProvince:'' + item.enterpriseCity?item.enterpriseCity:'' + item.enterpriseArea?item.enterpriseArea:''}}</td> + <td rowspan="2">{{item.enterpriseSum}}</td> + <td rowspan="2">{{item.validEnterpriseNum}}</td> + <td rowspan="2">{{item.selfCheckEnterpriseNum}}</td> + <td rowspan="2">{{item.selfCheckRateRequire + '%'}}</td> + <td rowspan="2" :class="item.selfCheckCompleteRate<item.selfCheckRateRequire?'warning':''">{{item.selfCheckCompleteRate + '%'}}</td> + <td rowspan="2">{{ item.validSelfCheckEnterpriseNum }}</td> + <td rowspan="2">{{ item.stockNum }}</td> + <td rowspan="2">{{ item.storageCapacity }}</td> + <td rowspan="2">{{ item.hiddendangerSum }}</td> + <td rowspan="2">{{ item.majorHiddendangerNum }}</td> + <td rowspan="2">{{ item.completedRectifyHiddendangerSum }}</td> + <td rowspan="2">{{ item.completedRectifyMajorHiddendangerNum }}</td> + <td rowspan="2">{{ item.hiddendangerRectifyRate }}</td> + <td>设区市级</td> + <td>{{item.citySpotCheckinfo.spotCheckEnterpriseNum}}</td> + <td>{{item.citySpotCheckinfo.spotCheckRateRequire + '%'}}</td> + <td :class="item.citySpotCheckinfo.spotCheckCompleteRate<item.citySpotCheckinfo.spotCheckRateRequire?'warning':''">{{item.citySpotCheckinfo.spotCheckCompleteRate + '%'}}</td> + <td>{{item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerSum}}</td> + <td>{{item.citySpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum}}</td> + <td>{{item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum}}</td> + <td>{{item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum}}</td> + <td>{{item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate + '%'}}</td> + <td>{{item.citySpotCheckinfo.revokeLicenseEnterpriseSum}}</td> + <td>{{item.citySpotCheckinfo.detainLicenseSum}}</td> + <td>{{item.citySpotCheckinfo.amerceEnterpriseNum}}</td> + <td>{{item.citySpotCheckinfo.amerceMoneySum}}</td> + </tr> + <tr> + <td>县级</td> + <td>{{item.areaSpotCheckinfo.spotCheckEnterpriseNum}}</td> + <td>{{item.areaSpotCheckinfo.spotCheckRateRequire + '%'}}</td> + <td :class="item.areaSpotCheckinfo.spotCheckCompleteRate<item.areaSpotCheckinfo.spotCheckRateRequire?'warning':''">{{item.areaSpotCheckinfo.spotCheckCompleteRate + '%'}}</td> + <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerSum}}</td> + <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum}}</td> + <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum}}</td> + <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum}}</td> + <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate + '%'}}</td> + <td>{{item.areaSpotCheckinfo.revokeLicenseEnterpriseSum}}</td> + <td>{{item.areaSpotCheckinfo.detainLicenseSum}}</td> + <td>{{item.areaSpotCheckinfo.amerceEnterpriseNum}}</td> + <td>{{item.areaSpotCheckinfo.amerceMoneySum}}</td> + </tr> + </template> + </table> + </el-tab-pane> + <el-tab-pane label="零售" name="2"> + <h2 style="text-align: center">2023年上半年烟花爆竹生产经营安全检查零售环节信息报送汇总表(省级层面)</h2> + </el-tab-pane> + </el-tabs> + </div> + </div> +</template> + +<script> +import {mapGetters} from "vuex"; +import Cookies from "_js-cookie@2.2.0@js-cookie"; +import {paramList} from "../../../api/contract"; +import {computePageCount} from "../../../utils"; +import {parseError} from "../../../utils/messageDialog"; +import { getCheckUnitType,getDataStatistics, getSpecialCheckTask } from "@/api/specialCheck" + +export default { +name: "sumSheet", + components: {}, + data(){ + return{ + taskId: null, + unitType: null, + recordTotal: 0, + pageSize: 10, + currentPage: 1, + listLoading: false, + activeTab: '1', + enterpriseCity: null, + enterpriseArea: null, + sum:{ + enterpriseSum: null, + validEnterpriseNum: null, + selfCheckEnterpriseNum: null, + selfCheckRateRequire: 100, + validSelfCheckEnterpriseNum: null, + stockNum: null, + storageCapacity: null, + selfhiddendangerSum: null, + selfmajorHiddendangerNum: null, + selfcompletedRectifyHiddendangerSum: null, + selfcompletedRectifyMajorHiddendangerNum: null, + spotCheckEnterpriseNum: null, + spotCheckRateRequire: 100, + spotCheckHiddendangerSum: null, + spotCheckMajorHiddendangerNum: null, + spotCheckCompletedRectifyHiddendangerSum:null, + spotCheckCompletedRectifyMajorHiddendangerNum:null, + revokeLicenseEnterpriseSum:null, + detainLicenseSum:null, + amerceEnterpriseNum:null, + amerceMoneySum:null + }, + thisLevelStatistic: { + thisLevelSpotCheckinfo:{}, + thisLevelSpotCheckHiddendangerinfo:{} + }, + institutionalData: [] + } + }, + created() { + const t = this + if(t.taskId){t.getDataStatistics()} + else{t.getCheckTask()} + t.getCheckUnitType() + }, + computed: { + ...mapGetters([ + 'userType', + 'name' + ]) + }, + methods:{ + async getCheckUnitType(){ + const t = this + t.listLoading = true + let res = await getCheckUnitType() + if(res.data.code === "200"){ + t.unitType = res.data.result.checkUnitType + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false + }, + async getCheckTask(){ + const t = this + const res = await getSpecialCheckTask() + if(res.data.code === "200"){ + t.taskId = res.data.result.specialCheckTaskSimplifyInfos[0].id + t.getDataStatistics() + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + getSum(arr){ + return arr.reduce((prev,curr)=>prev+curr) + }, + async getDataStatistics(){ + const t = this + const data = {id: t.taskId,enterpriseType: Number(t.activeTab),enterpriseCity: t.enterpriseCity,enterpriseArea: t.enterpriseArea,pageIndex: t.currentPage,pageSize: t.pageSize} + const res = await getDataStatistics(data) + if(res.data.code === "200"){ + t.thisLevelStatistic = res.data.result.thisLevelInstitutionalDataInfo + t.institutionalData = res.data.result.institutionalDataInfo + t.sum.enterpriseSum = t.getSum(Array.from(t.institutionalData, ({ enterpriseSum }) => enterpriseSum)) + t.sum.validEnterpriseNum = t.getSum(Array.from(t.institutionalData, ({ validEnterpriseNum }) => validEnterpriseNum)) + t.sum.selfCheckEnterpriseNum = t.getSum(Array.from(t.institutionalData, ({ selfCheckEnterpriseNum }) => selfCheckEnterpriseNum)) + t.sum.validSelfCheckEnterpriseNum = t.getSum(Array.from(t.institutionalData, ({ validSelfCheckEnterpriseNum }) => validSelfCheckEnterpriseNum)) + t.sum.stockNum = t.getSum(Array.from(t.institutionalData, ({ stockNum }) => stockNum)) + console.log(Array.from(t.institutionalData, ({ stockNum }) => stockNum),'666666666666') + t.sum.storageCapacity = t.getSum(Array.from(t.institutionalData, ({ storageCapacity }) => storageCapacity)) + t.sum.selfhiddendangerSum = t.getSum(Array.from(t.institutionalData, ({ hiddendangerSum }) => hiddendangerSum)) + t.sum.selfmajorHiddendangerNum = t.getSum(Array.from(t.institutionalData, ({ majorHiddendangerNum }) => majorHiddendangerNum)) + t.sum.selfcompletedRectifyHiddendangerSum = t.getSum(Array.from(t.institutionalData, ({ completedRectifyHiddendangerSum }) => completedRectifyHiddendangerSum)) + t.sum.selfcompletedRectifyMajorHiddendangerNum = t.getSum(Array.from(t.institutionalData, ({ completedRectifyMajorHiddendangerNum }) => completedRectifyMajorHiddendangerNum)) + t.sum.spotCheckEnterpriseNum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckinfo.spotCheckEnterpriseNum})) + t.sum.spotCheckHiddendangerSum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerSum})) + t.sum.spotCheckMajorHiddendangerNum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum})) + t.sum.spotCheckCompletedRectifyHiddendangerSum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum})) + t.sum.spotCheckCompletedRectifyMajorHiddendangerNum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum})) + t.sum.revokeLicenseEnterpriseSum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckinfo.revokeLicenseEnterpriseSum})) + t.sum.detainLicenseSum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckinfo.detainLicenseSum})) + t.sum.amerceEnterpriseNum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckinfo.amerceEnterpriseNum})) + t.sum.amerceMoneySum = t.getSum(t.institutionalData.map(item=>{return item.citySpotCheckinfo.amerceMoneySum})) + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + switchSheet(tab, event) { + const t = this + t.getDataStatistics() + }, + } +} +</script> + +<style lang="scss" scoped> +::v-deep.el-tabs--border-card .el-tabs__content{ + height: calc(100vh - 200px); + overflow: scroll !important; +} +.data-table{ + border-collapse: collapse; + border: 1px solid #ccc; + margin: 0 0 20px; + background: #fff; + box-shadow: 0 3px 12px rgba(0,0,0,.2); + tr{ + border-bottom: 1px solid #ccc; + white-space: nowrap; + font-size: 12px; + &:last-of-type{ + border-bottom: none; + } + + th{ + padding: 6px 4px; + border: 1px solid #ccc; + border-left: none; + font-weight: bolder; + text-align: center; + color: #409EFF; + + &:first-of-type{ + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + } + &.dark-bg{ + background: #409EFF; + color: #fff; + } + } + + td{ + padding: 6px 4px; + border-right: 1px solid #ccc; + text-align: center; + + &:last-of-type{ + border-right: none; + } + } + .warning{ + color: red; + } + } + .b-font{ + font-size: 16px; + font-weight: bolder; + } +} +</style> diff --git a/src/views/specialCheck/components/wholesaleForm.vue b/src/views/specialCheck/components/wholesaleForm.vue index 070551e..be125b7 100644 --- a/src/views/specialCheck/components/wholesaleForm.vue +++ b/src/views/specialCheck/components/wholesaleForm.vue @@ -2,12 +2,16 @@ <div class="table"> <div class="filter-container"> <div class="table-tit"> - <h2>2023年上半年烟花爆竹生产经营安全检查(批发)</h2> + <h2 v-show="enterpriseType == 1">2023年上半年烟花爆竹生产经营安全检查(批发)</h2> + <h2 v-show="enterpriseType == 2">2023年上半年烟花爆竹生产经营安全检查(零售)</h2> <span>(检查一家反馈一家,没有检查出隐患问题的也要登记反馈)</span> </div> <div class="control-bar"> - <div> - 批发企业共计<span>17</span>家,其中:已自查<span>15</span>家,未自查<span class="undone">2</span>家;本级已经抽查<span>5</span>家,未检查<span class="undone">12</span>家,完成率<span>100%</span>。 + <div v-show="enterpriseType == 1"> + 批发企业共计<span class="point-data" @click="getEnterpriseCompleteInfoList">{{enterpriseCount}}</span>家,其中:已自查<span class="point-data" @click="toSelfEnterprise(1)">{{ selfCheckEnterpriseCount }}</span>家,未自查<span @click="toSelfEnterprise(0)" class="undone point-data">{{ noSelfCheckEnterpriseCount }}</span>家;本级已经抽查<span class="point-data" @click="toLevelEnterprise(1)">{{ thislevelAlreadyCheckCount }}</span>家,未检查<span @click="toLevelEnterprise(0)" class="undone point-data">{{ thislevelNoCheckCount }}</span>家,完成率<span>{{ thislevelCompletionRate + '%' }}</span>。 + </div> + <div v-show="enterpriseType == 2"> + 零售企业共计<span class="point-data" @click="getEnterpriseCompleteInfoList">{{enterpriseCount}}</span>家,其中:已自查<span class="point-data" @click="toSelfEnterprise(1)">{{ selfCheckEnterpriseCount }}</span>家,未自查<span @click="toSelfEnterprise(0)" class="undone point-data">{{ noSelfCheckEnterpriseCount }}</span>家;本级已经抽查<span class="point-data" @click="toLevelEnterprise(1)">{{ thislevelAlreadyCheckCount }}</span>家,未检查<span @click="toLevelEnterprise(0)" class="undone point-data">{{ thislevelNoCheckCount }}</span>家,完成率<span>{{ thislevelCompletionRate + '%' }}</span>。 </div> <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="showFilter = !showFilter">{{showFilter?'关闭查询':'自定义查询'}}</el-button> </div> @@ -22,21 +26,21 @@ <el-cascader :options="options" v-model="selectedOptions" - :props="{ checkStrictly: true,expandTrigger: 'hover'}" + :props="{ checkStrictly: true,expandTrigger: 'hover',value: 'label'}" separator="-" @change="locationChange"> </el-cascader> </el-col> <el-col :span="6"> <span>自查是否有隐患:</span> - <el-radio-group v-model="search.isRisky"> + <el-radio-group v-model="search.isRisky" @input="changeRadio()"> <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> + <el-radio :label="0">否</el-radio> </el-radio-group> </el-col> <el-col :span="4"> - <el-button style="margin-right: 10px;" type="primary">查询</el-button> - <el-button class="resetBtn" type="primary" plain>重置</el-button> + <el-button style="margin-right: 10px;" type="primary" @click="searchData()">查询</el-button> + <el-button class="resetBtn" type="primary" plain @click="resetSearch()">重置</el-button> </el-col> </el-row> </transition> @@ -53,36 +57,18 @@ > <el-table-column type="index" label="序号" align="center" width="80"/> - <el-table-column label="单位名称" prop="owner" align="center" width="180"> + <el-table-column label="单位名称" prop="enterpriseName" align="center" width="180"></el-table-column> + <el-table-column label="联系电话" prop="enterpriseOfficephone" align="center"></el-table-column> + <el-table-column label="库存数量/万箱" prop="stockNum" align="center"></el-table-column> + <el-table-column label="是否查出隐患" prop="hiddendangerStatus" align="center"> <template slot-scope="scope"> - <span>{{ scope.row.owner }}</span> + <span>{{ scope.row.hiddendangerStatus == 1 ? '是' : '否' }}</span> </template> </el-table-column> - <el-table-column label="联系电话" prop="phone" align="center"> + <el-table-column label="自查填报时间" prop="selfcheckReportTime" width="130" align="center" sortable></el-table-column> + <el-table-column label="填报状态" prop="selfcheckStatus" align="center"> <template slot-scope="scope"> - <span>{{scope.row.phone}}</span> - </template> - </el-table-column> - - <el-table-column label="库存数量/万箱" prop="stock" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.stock }}</span> - </template> - </el-table-column> - - <el-table-column label="是否查出隐患" prop="isRisk" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.isRisk == 0 ? '否' : '是' }}</span> - </template> - </el-table-column> - <el-table-column label="自查填报时间" prop="selfCheckTime" width="130" align="center" sortable> - <template slot-scope="scope"> - <span>{{ scope.row.selfCheckTime }}</span> - </template> - </el-table-column> - <el-table-column label="填报状态" prop="fillStatus" align="center"> - <template slot-scope="scope"> - <span>{{ scope.row.fillStatus == 0 ? '未填报' : '已填报' }}</span> + <span>{{ scope.row.selfcheckStatus == 1 ? '已填报' : '未填报' }}</span> </template> </el-table-column> <el-table-column label="详情" align="center" class-name="small-padding fixed-width"> @@ -90,12 +76,12 @@ <el-button type="text" @click="viewDetails(scope.row)">查看</el-button> </template> </el-table-column> - <el-table-column label="反馈状态" prop="feedback" align="center"> + <el-table-column label="反馈状态" prop="thislevelCheckStatus" align="center"> <template slot-scope="scope"> - <span>{{ scope.row.feedback == 0 ? '未反馈' : '已反馈' }}</span> + <span>{{ scope.row.thislevelCheckStatus == 1 ? '已反馈' : '未反馈' }}</span> </template> </el-table-column> - <el-table-column label="执法抽查" align="center" class-name="small-padding fixed-width"> + <el-table-column fixed="right" :label="unitType==1?'执法抽查':'执法检查'" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button type="text" @click="toFeedback(scope.row)">情况反馈</el-button> </template> @@ -106,7 +92,7 @@ <el-pagination v-show="recordTotal>0" :current-page="currentPage" - :page-sizes="[10, 20, 30, 50]" + :page-sizes="[10, 15]" :page-size="pageSize" :total="recordTotal" layout="total, sizes, prev, pager, next, jumper" @@ -116,7 +102,7 @@ @current-change="handleCurrentChange" /> </div> - <report-details ref="report"></report-details> + <check-details ref="report"></check-details> <feedback-details ref="feedback"></feedback-details> </div> </template> @@ -127,53 +113,54 @@ import {paramList} from "../../../api/contract"; import {computePageCount} from "../../../utils"; import {parseError} from "../../../utils/messageDialog"; -import ReportDetails from "./reportDetails"; +import checkDetails from "../../selfCheck/components/checkDetails" import feedbackDetails from "./feedbackDetails"; import { regionData } from 'element-china-area-data' +import { getCheckUnitType, getEnterpriseCompleteInfoList, getSpecialCheckTask } from "@/api/specialCheck" export default { name: "wholesaleForm", - components: {ReportDetails,feedbackDetails}, + components: {checkDetails,feedbackDetails}, data(){ return{ recordTotal: 0, pageSize: 10, pageTotal: 0, currentPage: 1, + unitType: null, + taskId: null, + enterpriseType: null, + selfcheckStatus: null, + thislevelCheckStatus: null, listLoading: false, showFilter: false, search:{ name: '', - location: '', - isRisky: '' + province: '', + city: '', + area: '', + isRisky: null }, tableKey: 0, options: regionData, selectedOptions: [], - checkData: [ - { - owner: '单位一', - phone: '88888888', - stock: 266, - isRisk: 0, - selfCheckTime: '2022-10-27 15:16:00', - fillStatus: 1, - feedback: 0, - }, - { - owner: '单位二', - phone: '66666666', - stock: 288, - isRisk: 1, - selfCheckTime: '2022-10-27 15:16:00', - fillStatus: 0, - feedback: 1, - } - ] + enterpriseCount: null, + selfCheckEnterpriseCount: null, + noSelfCheckEnterpriseCount: null, + thislevelAlreadyCheckCount: null, + thislevelNoCheckCount: null, + thislevelCompletionRate: null, + checkData: [] } }, created() { - // this.getDataList(); + const t = this + t.getCheckUnitType() + if(t.taskId && t.enterpriseType){ + t.getEnterpriseCompleteInfoList() + }else{ + t.getCheckTask() + } }, computed: { ...mapGetters([ @@ -182,63 +169,120 @@ ]) }, methods:{ - // getDataList() { - // const t = this; - // const params = {}; - // params['pageIndex'] = t.currentPage; - // params['pageSize'] = t.pageSize; - // params['sort'] = t.sort; - // params['order'] = t.order; - // const userName = Cookies.get('userName'); - // const name = Cookies.get('name'); - // params['operator'] = name + '(' + userName + ')'; - // for (const i in t.queryForm) { - // if (t.queryForm[i] != undefined && t.queryForm[i].toString() != '') { - // params[i] = t.queryForm[i] - // } - // } - // t.listLoading = true - // paramList(params).then(response => { - // const res = response.data; - // if (res.code === "200") { - // const result = res.result; - // t.recordTotal = result.totalCount; - // t.pageSize = result.pageSize; - // t.pageTotal = computePageCount(result.totalCount, result.pageSize); - // t.currentPage = result.pageIndex; - // t.checkData = result.result - // } else { - // parseError({error: res.message, vm: t}) - // } - // t.listLoading = false - // }).catch(error => { - // t.listLoading = false - // parseError({error: error, vm: t}) - // }) - // }, + async getCheckUnitType(){ + const t = this + t.listLoading = true + let res = await getCheckUnitType() + if(res.data.code === "200"){ + t.unitType = res.data.result.checkUnitType + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false + }, + async getCheckTask(){ + const t = this + const res = await getSpecialCheckTask() + if(res.data.code === "200"){ + t.taskId = res.data.result.specialCheckTaskSimplifyInfos[0].id + t.enterpriseType = 1 + t.getEnterpriseCompleteInfoList() + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + async getEnterpriseCompleteInfoList(){ + const t = this + t.listLoading = true + let data = {pageIndex: t.currentPage,pageSize: t.pageSize,taskId: t.taskId,enterpriseType: t.enterpriseType,selfcheckStatus:t.selfcheckStatus,thislevelCheckStatus: t.thislevelCheckStatus,enterpriseName: t.search.name, enterpriseProvince: t.search.province, enterpriseCity: t.search.city, enterpriseArea: t.search.area, hiddendangerStatus: t.search.isRisky} + let res = await getEnterpriseCompleteInfoList(data) + if(res.data.code === "200"){ + t.enterpriseCount = res.data.result.enterpriseCount + t.selfCheckEnterpriseCount = res.data.result.selfCheckEnterpriseCount + t.noSelfCheckEnterpriseCount = res.data.result.noSelfCheckEnterpriseCount + t.thislevelAlreadyCheckCount = res.data.result.thislevelAlreadyCheckCount + t.thislevelNoCheckCount = res.data.result.thislevelNoCheckCount + t.thislevelCompletionRate = res.data.result.thislevelCompletionRate + t.checkData = res.data.result.iPage.records + t.recordTotal = res.data.result.iPage.total + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false + }, handleSizeChange: function (val) { this.pageSize = val this.currentPage = 1 - // this.getDataList() + this.getEnterpriseCompleteInfoList() }, handleCurrentChange: function (val) { this.currentPage = val - // this.getDataList() + this.getEnterpriseCompleteInfoList() }, locationChange(value) { - console.log(value) + const t = this + t.search.province = value[0] + t.search.city = value[1] ? value[1] : '' + t.search.area = value[2] ? value[2] : '' + t.getEnterpriseCompleteInfoList() }, - viewDetails(row){ - console.log(row) + changeRadio(){ + this.getEnterpriseCompleteInfoList() + }, + + searchData(){ + this.getEnterpriseCompleteInfoList() + }, + + resetSearch(){ + this.search = { + name: '', + province: '', + city: '', + area: '', + isRisky: null + } + this.selectedOptions = [] + this.getEnterpriseCompleteInfoList() + }, + + toSelfEnterprise(value){ const t = this + t.thislevelCheckStatus = null + t.selfcheckStatus = value + t.getEnterpriseCompleteInfoList() + }, + toLevelEnterprise(value){ + const t = this + t.thislevelCheckStatus = value + t.selfcheckStatus = null + t.getEnterpriseCompleteInfoList() + }, + viewDetails(row){ + const t = this + t.$refs.report.id = row.id + t.$refs.report.getEnterpriseInfo() t.$refs.report.dialogVisible = true }, toFeedback(row){ - console.log(row) const t = this + t.$refs.feedback.corpInfo = row + t.$refs.feedback.id = row.id + t.$refs.feedback.feedbackForm.id = row.id + t.$refs.feedback.getSpotCheckReportInfo() + t.$refs.feedback.unitType = t.unitType t.$refs.feedback.dialogVisible = true } } @@ -279,6 +323,14 @@ .undone{ color: #ff0000; } + + .point-data{ + cursor: pointer; + + &:hover{ + text-decoration: underline; + } + } } .filter-item{ margin-bottom: 0; diff --git a/src/views/specialCheck/index.vue b/src/views/specialCheck/index.vue index ee63d9f..135ca32 100644 --- a/src/views/specialCheck/index.vue +++ b/src/views/specialCheck/index.vue @@ -1,19 +1,19 @@ <template> <div class="app-container" style="padding-bottom:40px"> <div class="menu-area"> - <el-button class="add-btn" type="primary" icon="el-icon-plus" @click="sendJob()">新任务下发</el-button> -<!-- <div class="menu-tit">2023年上半年安全检查</div>--> + <el-button v-if="unitType==1" class="add-btn" type="primary" icon="el-icon-plus" @click="sendJob()">新任务下发</el-button> <el-menu default-active="1" class="el-menu-vertical-demo" background-color="#eeeeee" text-color="#333" + unique-opened active-text-color="#034EA2" @select="menuSelect"> - <el-submenu index="1"> + <el-submenu v-for="(item,i) in taskMenu" :key="i" :index="item.id + ''"> <template slot="title"> <i class="el-icon-s-order"></i> - <span>2023年上半年安全检查</span> + <span>{{item.taskName}}</span> </template> <el-menu-item index="1"> <span slot="title">安全检查反馈情况(批发)</span> @@ -21,15 +21,15 @@ <el-menu-item index="2"> <span slot="title">安全检查反馈情况(零售)</span> </el-menu-item> - <el-menu-item index="3"> + <el-menu-item index="3" v-if="unitType==1||unitType==2"> <span slot="title">安全检查情况汇总</span> </el-menu-item> </el-submenu> </el-menu> </div> <div class="table-area"> - <wholesale-form v-show="curTab == 1"></wholesale-form> - <retail-form v-show="curTab == 2"></retail-form> + <wholesale-form v-show="curTab == 1 || curTab == 2" ref="wholesale"></wholesale-form> + <sum-sheet v-show="curTab == 3" ref="sumSheet"></sum-sheet> </div> <send-work ref="send"></send-work> </div> @@ -42,23 +42,29 @@ import {MessageBox} from 'element-ui' import { getToken } from '@/utils/auth' import wholesaleForm from './components/wholesaleForm' - import retailForm from "./components/retailForm" + import sumSheet from "./components/sumSheet" import sendWork from "./components/sendWork" + import { getCheckUnitType, getSpecialCheckTask } from "@/api/specialCheck" export default { name: "specialCheck", components:{ wholesaleForm, - retailForm, + sumSheet, sendWork }, data() { return { - curTab: 1 + curTab: 1, + unitType: 1, + taskMenu: [], + taskId: null } }, created() { - + const t = this + t.getCheckUnitType() + t.getSpecialCheckTask() }, mounted() { @@ -70,9 +76,51 @@ ]) }, methods: { - menuSelect(key, keyPath) { - this.curTab = key + async getCheckUnitType(){ + const t = this + t.listLoading = true + let res = await getCheckUnitType() + if(res.data.code === "200"){ + t.unitType = res.data.result.checkUnitType + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false }, + + async getSpecialCheckTask(){ + const t = this + const res = await getSpecialCheckTask() + if(res.data.code === "200"){ + t.taskMenu = res.data.result.specialCheckTaskSimplifyInfos + t.$refs.wholesale.taskId = t.taskMenu[0].id + t.$refs.wholesale.enterpriseType = 1 + t.$refs.wholesale.getEnterpriseCompleteInfoList() + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + + menuSelect(key, keyPath) { + const t = this + console.log(key, keyPath,'切换') + if(key == 1 || key == 2){ + t.$refs.wholesale.taskId = Number(keyPath[0]) + t.$refs.wholesale.enterpriseType = Number(key) + t.$refs.wholesale.getEnterpriseCompleteInfoList() + }else{ + t.$refs.sumSheet.taskId = Number(keyPath[0]) + t.$refs.sumSheet.getDataStatistics() + } + t.curTab = key + }, + sendJob(){ this.$refs.send.dialogVisible = true } @@ -88,22 +136,30 @@ align-items: flex-start; .menu-area{ - width: 20%; + width: 18%; .add-btn{ width: 100%; margin-bottom: 20px; background: #034EA2; } - .menu-tit{ + ::v-deep.el-submenu__title{ + height: auto; + line-height: 1.5; + padding: 20px 24px 20px 0; + white-space: pre-wrap; + } + ::v-deep.el-menu-item{ width: 100%; - background: #eee; - padding: 20px 20px 10px; - font-size: 18px; - font-weight: bolder; + box-sizing: border-box; + height: auto; + line-height: 1.5; + padding: 20px 24px 20px 0; + min-width: 100px; + white-space: pre-wrap; } } .table-area{ - width: calc(80% - 20px); + width: calc(82% - 20px); } } </style> diff --git a/src/views/supervision/components/supervisionDetails.vue b/src/views/supervision/components/supervisionDetails.vue new file mode 100644 index 0000000..e90bc37 --- /dev/null +++ b/src/views/supervision/components/supervisionDetails.vue @@ -0,0 +1,318 @@ +<template> + <el-dialog + :visible.sync="dialogVisible" + append-to-body + :close-on-click-modal="false" + width="75%" + center + > + <div slot="title" class="dialog-title"> + 烟花爆竹批发企业自查情况信息报送表 + </div> + <div class="table-tit"> + <div>企业名称: <span class="m-color">{{corpInfo.enterpriseName}}</span></div> + <div>所属省市县: <span class="m-color">{{corpInfo.enterpriseProvince + corpInfo.enterpriseCity + corpInfo.enterpriseArea}}</span></div> + <div>检查层级: <span class="m-color">{{ corpInfo.checkUnitType == 1 ? '省级' : (corpInfo.checkUnitType == 2 ? '市级' : '县级') }}</span></div> + <div>检查单位: <span class="m-color">{{corpInfo.checkName}}</span></div> + </div> + <div class="corp-list"> + <table class="corp-table"> + <tr> + <td class="m-color w-25">检查时间</td> + <td class="m-color w-25">{{corpInfo.checkTime}}</td> + <td class="m-color w-25">是否检查出隐患问题</td> + <td class="m-color w-25">{{corpInfo.hiddendangerStatus==1?'是':'否'}}</td> + </tr> + <tr class="m-color b-font" style="text-align: center" v-if="corpInfo.hiddendangerStatus == 1">自查与整改情况</tr> + <tr v-if="corpInfo.hiddendangerStatus == 1"> + <td class="m-color w-5">序号</td> + <td class="m-color w-15">检查出的隐患问题</td> + <td class="m-color w-10">隐患等级</td> + <td class="m-color w-30">整改措施</td> + <td class="m-color w-10">整改资金(元)</td> + <td class="m-color w-10">责任人</td> + <td class="m-color w-20">隐患状态</td> + </tr> + <tr v-for="(item,index) in corpInfo.hiddendangerInfos" :key="index" v-if="corpInfo.hiddendangerStatus == 1"> + <td class="w-5">{{index}}</td> + <td class="w-15 overText">{{item.spotCheckHiddendanger}}</td> + <td class="w-10">{{item.hiddendangerLevel == 1 ? '一般隐患' : '重大隐患'}}</td> + <td class="w-30 overText">{{item.rectifyMeasure}}</td> + <td class="w-10">{{item.rectifyPrice}}</td> + <td class="w-10">{{item.chargePerson}}</td> + <td class="w-20"> + <span v-if="item.rectifyStatus == 0"> + 未整改 + <el-button type="text" @click="toRectify(item)">去整改</el-button> + </span> + <span v-else> + {{item.completeRectifyTime + '整改完成'}} + </span> + </td> + </tr> + <tr class="m-color b-font" style="text-align: center">合计</tr> + <tr> + <td class="m-color w-50">隐患总数</td> + <td class="m-color w-50">重大隐患数量</td> + </tr> + <tr> + <td class="w-50">{{corpInfo.hiddendangerSum}}</td> + <td class="w-50">{{corpInfo.majorHiddendangerNum}}</td> + </tr> + </table> +<!-- <div class="table-bottom">--> +<!-- <div>填报人: <span class="m-color">{{corpInfo.selfcheckReportUserName}}</span></div>--> +<!-- </div>--> +<!-- <div class="table-bottom">--> +<!-- <div>填报人联系电话: <span class="m-color">{{corpInfo.selfcheckReportUserMobile}}</span></div>--> +<!-- <div>填报时间: <span class="m-color">{{corpInfo.reportModifyTime}}</span></div>--> +<!-- </div>--> + </div> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="confirmBack()">返回</el-button> + </span> + <el-dialog + :visible.sync="dialogReport" + title="整改填报" + append-to-body + :close-on-click-modal="false" + width="40%" + center + > + <el-form ref="reportFormRef" :model="reportForm" label-width="140px"> + <el-form-item label="当前隐患:"> + <el-input type="textarea" v-model="reportForm.info"></el-input> + </el-form-item> + + <el-form-item label="当前完成整改日期:"> + <el-date-picker + v-model="reportForm.completeRectifyTime" + type="date" + placeholder="请选择整改日期"> + </el-date-picker> + </el-form-item> + <el-form-item label="整改资金:"> + <el-input v-model="reportForm.rectifyPrice"></el-input> + </el-form-item> + <el-form-item label="整改措施:"> + <el-input type="textarea" autosize v-model="reportForm.rectifyMeasure"></el-input> + </el-form-item> + <el-form-item label="负责人:"> + <el-input v-model="reportForm.chargePerson"></el-input> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogReport = false">取消</el-button> + <el-button type="primary" @click="confirmReport()">提交</el-button> + </span> + </el-dialog> + </el-dialog> +</template> + +<script> + import {computePageCount} from "@/utils"; + import { getSpotCheckRecorder, updateSpotCheckRectifyInfo } from "@/api/selfCheck"; + + export default { + name: "supervisionDetails", + data(){ + return{ + dialogVisible:false, + dialogReport: false, + id: null, + unitType: 1, + corpInfo:{ + enterpriseName: '', + enterpriseProvince: '', + enterpriseCity: '', + enterpriseArea: '', + checkUnitType: 1, + checkName: '', + checkTime: '', + hiddendangerStatus: 0, + hiddendangerInfos: [], + hiddendangerSum: 0, + majorHiddendangerNum: 0 + }, + reportForm:{ + id: null, + info: '', + completeRectifyTime: '', + rectifyPrice: 0, + rectifyMeasure: '', + chargePerson: '' + } + } + }, + created() { + const t = this + t.getEnterpriseInfo() + }, + watch: { + }, + methods:{ + async getEnterpriseInfo(){ + const t = this + const data = {id: t.id,unitType:t.unitType} + let res = await getSpotCheckRecorder(data) + if(res.data.code === "200"){ + t.corpInfo = res.data.result + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + }, + toRectify(item){ + const t = this + t.reportForm.info = item.spotCheckHiddendanger + t.reportForm.id = item.id + t.dialogReport = true + }, + + async confirmReport(){ + const t = this + let {info,...data} = t.reportForm + let res = await updateSpotCheckRectifyInfo(data) + if(res.data.code === "200"){ + t.$message({ + type:'success', + message:res.data.message + }) + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.dialogReport = false + }, + confirmBack(){ + this.dialogVisible = false + } + }, + } +</script> + +<style lang="scss" scoped> + .input-with-select .el-select { + width: 120px; + } + + .el-date-editor.el-input{ + width: 100%; + } + .dialog-title{ + font-size: 22px; + font-weight: bolder; + } + .table-tit{ + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + flex-flow: wrap; + background: #ecf5ff; + padding: 10px; + border-radius: 4px; + + &>div{ + width: 50%; + margin-bottom: 10px; + &:nth-of-type(3),&:nth-of-type(4){ + margin-bottom: 0; + } + } + } + .corp-list{ + .corp-table{ + width: 100%; + border-collapse: collapse; + border: 1px solid #79bbff; + margin: 10px 0; + th{ + padding: 10px 0; + border: 1px solid #79bbff; + border-bottom: 1px solid #ccc; + } + tr{ + width: 100%; + height: 44px; + line-height: 42px; + border-bottom: 1px solid #ccc; + + &:last-of-type{ + border-bottom: none; + } + td{ + border-right: 1px solid #ccc; + display: inline-block; + height: 44px; + vertical-align: middle; + text-align: center; + line-height: 42px; + + &:last-of-type{ + border-right: none; + } + ::v-deep.el-textarea{ + .el-textarea__inner{ + min-height: 40px !important; + background-color: #ecf5ff; + border: 1px solid #d9ecff; + } + } + + &.w-5{ + width: 5%; + } + &.w-10{ + width: 10%; + } + &.w-15{ + width: 15%; + } + &.w-20{ + width: 20%; + } + &.w-50{ + width: 50%; + } + &.w-25{ + width: 25%; + } + &.w-75{ + width: 75%; + } + &.w-33{ + width: 33.33%; + } + &.overText{ + overflow: auto; + line-height: 1.5; + text-align: left; + padding: 10px; + } + } + } + .b-font{ + font-size: 16px; + font-weight: bolder; + } + ::v-deep.mid{ + .el-input__inner{ + text-align: center; + background-color: #ecf5ff; + border: 1px solid #d9ecff; + } + } + } + .table-bottom{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; + } + } +</style> diff --git a/src/views/supervision/index.vue b/src/views/supervision/index.vue new file mode 100644 index 0000000..e6b7564 --- /dev/null +++ b/src/views/supervision/index.vue @@ -0,0 +1,141 @@ +<template> + <div class="app-container" style="padding-bottom:40px"> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="checkData" + border + fit + highlight-current-row + style="width: 100%;" + > + + <el-table-column label="下发日期" prop="gmtCreate" align="center" width="180"></el-table-column> + <el-table-column label="任务名称" prop="taskName" align="center"></el-table-column> + <el-table-column label="下发部门" prop="createUnit" align="center"></el-table-column> + <el-table-column label="检查部门" prop="checkName" align="center"></el-table-column> + <el-table-column label="被检查日期" prop="checkTime" align="center"></el-table-column> + <el-table-column label="是否隐患" prop="hiddendangerStatus" align="center"> + <template slot-scope="scope"> + <span>{{ scope.row.hiddendangerStatus == 0 ? '否' : '是' }}</span> + </template> + </el-table-column> + <el-table-column label="一般隐患" prop="countHiddendangerCommon" align="center"></el-table-column> + <el-table-column label="重大隐患" prop="countHiddendangerMajor" align="center"></el-table-column> + <el-table-column label="总数" prop="hiddendangerSum" align="center"></el-table-column> + <el-table-column label="整改情况" prop="rectifyStatus" align="center" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <span>{{ scope.row.rectifyStatus == 0?'存在未整改':'已完成' }}</span> + </template> + </el-table-column> + <el-table-column label="详情" align="center" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="toDetail(scope.row)">查看详情</el-button> + </template> + </el-table-column> + </el-table> + <el-pagination + :current-page="currentPage" + :page-sizes="[10, 15]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;margin:3px" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <supervision-details ref="details"></supervision-details> + </div> +</template> + +<script> + import Cookies from 'js-cookie' + import {computePageCount} from "../../utils"; + import {mapGetters} from "vuex"; + import {MessageBox} from 'element-ui' + import { getToken } from '@/utils/auth' + import supervisionDetails from "./components/supervisionDetails" + import { getSpotCheckTask } from '@/api/selfCheck' + + export default { + name: "supervision", + components:{ + supervisionDetails + }, + data() { + return { + listLoading: false, + recordTotal: 0, + pageSize: 10, + pageTotal: 0, + currentPage: 1, + tableKey: 0, + checkData: [] + } + }, + created() { + const t = this + t.getSpotCheckList() + }, + mounted() { + + }, + computed: { + ...mapGetters([ + 'userType', + 'name' + ]) + }, + methods: { + handleSizeChange: function (val) { + this.pageSize = val + this.currentPage = 1 + this.getSpotCheckList() + }, + handleCurrentChange: function (val) { + this.currentPage = val + this.getSpotCheckList() + }, + + toDetail(row){ + const t = this + t.$refs.details.dialogVisible = true + t.$refs.details.id = row.id + t.$refs.details.unitType = row.checkUnitType + }, + + async getSpotCheckList(){ + const t = this + t.listLoading = true + let data = {pageIndex: t.currentPage,pageSize: t.pageSize} + let res = await getSpotCheckTask(data) + if(res.data.code === "200"){ + t.recordTotal = res.data.result.total + t.checkData = res.data.result.records + }else{ + t.$message({ + type:'warning', + message:res.data.message + }) + } + t.listLoading = false + }, + } + } +</script> + +<style lang="scss" scoped> + .app-container{ + width: 100%; + display: flex; + justify-content: space-between; + align-items: flex-start; + + .table_content{ + width: 100%; + } + } +</style> -- Gitblit v1.9.2