From 19d173ea725300ee6422ec6ef9573433da94d052 Mon Sep 17 00:00:00 2001 From: 叶松 <2217086471@qq.com> Date: 星期一, 13 十一月 2023 14:17:21 +0800 Subject: [PATCH] 隐患举报小程序完成 --- web/src/views/SecureManage/NipCheck/NipTips.vue | 366 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 364 insertions(+), 2 deletions(-) diff --git a/web/src/views/SecureManage/NipCheck/NipTips.vue b/web/src/views/SecureManage/NipCheck/NipTips.vue index c4b634a..e064a47 100644 --- a/web/src/views/SecureManage/NipCheck/NipTips.vue +++ b/web/src/views/SecureManage/NipCheck/NipTips.vue @@ -1,3 +1,365 @@ <template> - <div>防患举报</div> -</template> \ No newline at end of file + <div class="main"> + <div class="main_header"> + <div class="header_item"> + <span class="header_label">举报时间:</span> + <el-date-picker + v-model="search.time" + type="daterange" + value-format="yyyy-MM-dd HH:mm:ss" + :default-time="['00:00:00','23:59:59']" + range-separator="-" + start-placeholder="起始时间" + end-placeholder="结束时间"> + </el-date-picker> + </div> + <div class="header_item"> + <el-button icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button> + <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('insert')" @click="exportFiles">导出Excel</el-button> + </div> + </div> + <div class="main_content"> + <el-table + v-loading="loading" + :data="dataList" + height="100%"> + <el-table-column align="center" label="序号" width="60"> + <template #default="scope"> + <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span> + </template> + </el-table-column> + <el-table-column prop="createTime" label="举报时间" align="center" width="150"></el-table-column> + <el-table-column prop="dangerLocation" label="隐患地点" align="center" ></el-table-column> + <el-table-column prop="title" label="隐患标题" align="center" show-overflow-tooltip></el-table-column> + <el-table-column prop="reporter" label="提交人" align="center" show-overflow-tooltip></el-table-column> + <el-table-column prop="levelName" label="隐患等级" align="center" show-overflow-tooltip></el-table-column> + <el-table-column prop="auditStatusName" label="审核状态" align="center" width="150"></el-table-column> + <el-table-column prop="integral" label="积分" align="center" ></el-table-column> + <el-table-column label="操作" align="center" width="250"> + <template #default="{ row }"> + <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="updateProp(row)">修改</el-button> + <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteInfo(row)">删除</el-button> + <el-button class="table_btn" size="mini" v-if="showButton('update')&&row.auditStatus!==1" @click="checkHidden(row)">审核</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="main_footer"> + <el-pagination + background + @current-change="changePageNum" + @size-change="changePageSize" + :current-page="pageNum" + :page-sizes="[10, 20, 50, 100]" + :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total"> + </el-pagination> + </div> + <el-dialog + class="prop_dialog" + :title="asyncTitle? '隐患审核' :'修改隐患'" + :close-on-click-modal="false" + :visible.sync="asyncVisible" + width="45%"> + <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="rule_form"> + <el-form-item label="举报时间:" prop="createTime"> + <el-date-picker + v-model="ruleForm.createTime" + type="date" + :disabled="disabled" + format="yyyy-MM-dd HH:mm:ss" + value-format="yyyy-MM-dd HH:mm:ss" + placeholder="请选择举报时间"> + </el-date-picker> + </el-form-item> + <el-form-item label="隐患地点:" prop="dangerLocation"> + <el-input v-model="ruleForm.dangerLocation" :size="size" clearable placeholder="请输入隐患地点" :disabled="disabled"></el-input> + </el-form-item> + <el-form-item label="隐患标题" prop="title"> + <el-input v-model="ruleForm.title" :size="size" type="textarea" :rows="5" clearable placeholder="请输入隐患标题" :disabled="disabled"></el-input> + </el-form-item> + <el-form-item label="问题照片:" prop="imageList"> + <upload-image :file-list="imageList" @delectImage="delectImage" :disabled="disabled" style="overflow:auto"> + <template #info> + <span>支持jpg、png、gif格式文件</span> + </template> + </upload-image> + </el-form-item> + <el-form-item label="提交人:" prop="reporter" v-if="asyncTitle"> + <el-input v-model="ruleForm.reporter" :size="size" clearable placeholder="请输入提交人" :disabled="true"></el-input> + </el-form-item> + <el-form-item label="隐患等级:" prop="level" v-if="asyncTitle"> + <el-select v-model="ruleForm.level" placeholder="请选择隐患等级" clearable> + <el-option + v-for="item in optionsLevel" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="积分值:" prop="integral" v-if="asyncTitle"> + <el-input v-model="ruleForm.integral" :size="size" clearable placeholder="请输入积分值" ></el-input> + </el-form-item> + </el-form> + <div slot="footer"> + <el-button @click="asyncVisible = false">取 消</el-button> + <el-button class="submit_btn" @click="asyncTitle ? submitInsert() : submitUpdate()">提 交</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { buttonPinia } from '../../../pinia/index'; +import UploadImage from '../../../components/uploadImage.vue' +import { throttle, changeSize } from '../../../plugins/public'; // 导入节流、动态切换组件尺寸方法 + export default { + components:{ + UploadImage, + }, + data() { + return { + size: changeSize(), // 组件尺寸 + pageNum: 1, + pageSize: 10, + search:{},//查询条件 + total: 0, + disabled:false, + loading: false, + dataList: [], //举报隐患信息列表 + imageList:[], + asyncTitle: true, // 对话框title 新增:true 修改:false + asyncVisible: false, // 添加 修改对话框 + optionsLevel:[ + { + label:'一般隐患', + value:1 + }, + { + label:'重大隐患', + value:2 + }, + { + label:'不存在', + value:3 + } + ], + ruleForm: { + }, // 按钮表单 + rules: { + dangerLocation: [{ + required: true, + message: '请输入隐患地点', + trigger: 'blur' + }], + title: [{ + required: true, + message: '请输入隐患标题', + trigger: 'blur' + }], + reporter: [{ + required: true, + message: '请输入提交人', + trigger: 'blur' + }], + createTime: [{ + required: true, + message: '请选择举报时间', + trigger: 'change' + }], + level: [{ + required: true, + message: '请选择隐患等级', + trigger: 'blur' + }], + integral:[{ + required: true, + message: '请输入积分', + trigger: 'blur' + }], + }, + optionsType:[],//设备类型 + optionsDevice:[],//设备名称 + optionsUser:[],//负责人 + } + }, + watch: { + asyncVisible(bol) { + if(!bol) { + this.ruleForm = {}; + this.$refs.ruleForm.resetFields(); + } + } + }, + mounted() { + const that = this; + // 根据窗口大小动态修改组件尺寸 + window.onresize = () => { + that.size = changeSize(); + } + that.searchButtonInfo(true); + }, + methods: { + // 查询按钮列表信息 + searchButtonInfo(bol) { + if(bol) { + this.pageNum = 1; + } + let params = Object.assign({},this.search,{ + pageNum: this.pageNum, + pageSize: this.pageSize + }) + params.startTime = this.search.time&&this.search.time[0] + params.endTime = this.search.time&&this.search.time[1] + delete params.time + this.loading = true; + this.$api.Safety.searchHiddenLists(params).then((res) => { + if(res.statusMsg === 'ok') { + this.total = res.data.total; + this.dataList = res.data.list; + } + this.loading = false; + }) + }, + //删除上传图片 + delectImage(item){ + let uploadId = item.id + this.imageList.splice(this.imageList.findIndex(itm => itm.id === uploadId),1) + this.$message.success("删除成功!") + }, + // 审核按钮 + checkHidden(row) { + this.asyncTitle = true; + this.imageList = [] + this.asyncVisible = true; + this.disabled = true + this.$api.Safety.detailsHiddenInfo({id: row.id}).then(res=>{ + if(res.statusMsg === 'ok'){ + this.ruleForm = res.data + res.data.imgEntities.map(item=>{ + this.imageList.push({ + id: this.imageList.length + 1, + url:`https://pipe.thhy-tj.com/${item.imgPath}`, + name:item.imgPath, + nameImg:item.imgName + }) + }) + }else{ + this.$message.warning(res.statusMsg) + } + }) + }, + //导出excel + exportFiles(){}, + // 修改按钮信息 + updateProp(row) { + this.imageList = [] + this.asyncTitle = false; + this.asyncVisible = true; + this.disabled = false + this.$api.Safety.detailsHiddenInfo({id: row.id}).then(res=>{ + if(res.statusMsg === 'ok'){ + this.ruleForm = res.data + res.data.imgEntities.map(item=>{ + this.imageList.push({ + id: this.imageList.length + 1, + url:`https://pipe.thhy-tj.com/${item.imgPath}`, + name:item.imgPath, + nameImg:item.imgName + }) + }) + }else{ + this.$message.warning(res.statusMsg) + } + }) + }, + // 删除按钮信息 + deleteInfo(row) { + this.$confirm("该操作将删除该信息,是否继续删除?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(() => { + this.$api.Safety.deleteHiddenInfo({id: row.id}) + .then(res => { + if(res.statusMsg === 'ok') { + this.searchButtonInfo(true); + this.$message.success("删除成功!"); + } else { + this.$message.warning(res.statusMsg); + } + }) + }) + .catch(() => { + this.$message.warning("您已取消"); + }) + }, + // 提交审核按钮信息 + submitInsert: throttle(function() { + this.$refs.ruleForm.validate((valid) => { + if(valid) { + const params = Object.assign({}, this.ruleForm); + let arrTitle = [] + this.imageList&&this.imageList.forEach(item=>{ + arrTitle.push({imgPath:item.name}) + }) + params.imgEntities = arrTitle + this.$api.Safety.checkHiddenInfo(params).then((res) => { + if(res.statusMsg === 'ok') { + this.asyncVisible = false; + this.searchButtonInfo(true); + this.$message.success('审核成功!'); + } else { + this.$message.warning(res.statusMsg); + } + }) + } + }) + }, 3000), + // 提交修改按钮信息 + submitUpdate: throttle(function() { + this.$refs.ruleForm.validate((valid) => { + if(valid) { + const params = Object.assign({}, this.ruleForm); + let arrTitle = [] + this.imageList&&this.imageList.forEach(item=>{ + arrTitle.push({imgPath:item.name}) + }) + params.imgEntities = arrTitle + this.$api.Safety.updateHiddenInfo(params).then((res) => { + if(res.statusMsg === 'ok') { + this.asyncVisible = false; + this.searchButtonInfo(true); + this.$message.success('修改成功!'); + } else { + this.$message.warning(res.statusMsg); + } + }) + } + }) + }, 3000), + // 判断按钮权限信息 + showButton(str) { + const pinia = buttonPinia(); + return pinia.$state.buttonInfo.includes(str); + }, + // 切换页数 + changePageNum(page) { + this.pageNum = page; + this.searchButtonInfo(); + }, + // 切换每页条数 + changePageSize(size) { + this.pageSize = size; + this.searchButtonInfo(); + } + } + } +</script> + +<style lang="sass" scoped> +@import '../../../style/layout-main.scss'; +</style> \ No newline at end of file -- Gitblit v1.9.3