安全隐患功能

dev_xd
haha 2025-02-28 00:27:10 +08:00
parent 2fbf85a62b
commit bc4d6e14ca
9 changed files with 362 additions and 445 deletions

View File

@ -58,4 +58,5 @@ public interface SmzSspProblemmodifyMapper
* @return
*/
public int deleteSmzSspProblemmodifyByIds(Long[] ids);
}

View File

@ -1,6 +1,7 @@
package com.yanzhu.manage.service.impl;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import com.yanzhu.common.core.context.SecurityContextHolder;
import com.yanzhu.common.core.utils.DateUtils;
@ -100,10 +101,14 @@ public class SmzSspProblemmodifyServiceImpl implements ISmzSspProblemmodifyServi
@Override
public int insertSmzSspProblemmodifies(List<SmzSspProblemmodify> list) {
AtomicInteger count = new AtomicInteger();
list.stream().forEach(it->{
it.setCheckState(0L);
it.setIsDel(0L);
it.setCreateTime(DateUtils.getNowDate());
it.setCreateBy(SecurityContextHolder.getUserName());
count.addAndGet(smzSspProblemmodifyMapper.insertSmzSspProblemmodify(it));
});
return 0;
return count.get();
}
}

View File

@ -1,44 +1,52 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 查询安全隐患整改列表
export function listProblemmodify(query) {
return request({
url: '/trouble/problemmodify/list',
method: 'get',
params: query
})
url: "/manage/problemmodify/list",
method: "get",
params: query,
});
}
// 查询安全隐患整改详细
export function getProblemmodify(id) {
return request({
url: '/trouble/problemmodify/' + id,
method: 'get'
})
url: "/manage/problemmodify/" + id,
method: "get",
});
}
// 新增安全隐患整改
export function addProblemmodify(data) {
return request({
url: '/trouble/problemmodify',
method: 'post',
data: data
})
url: "/manage/problemmodify",
method: "post",
data: data,
});
}
// 修改安全隐患整改
export function updateProblemmodify(data) {
return request({
url: '/trouble/problemmodify',
method: 'put',
data: data
})
url: "/manage/problemmodify",
method: "put",
data: data,
});
}
// 删除安全隐患整改
export function delProblemmodify(id) {
return request({
url: '/trouble/problemmodify/' + id,
method: 'delete'
})
url: "/manage/problemmodify/" + id,
method: "delete",
});
}
export function batchAddProblemmodify(datas) {
return request({
url: "/manage/problemmodify/batchAdd",
method: "post",
data: datas,
});
}

View File

@ -1,44 +1,44 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 查询安全问题草稿列表
export function listProblemmodifyDraft(query) {
return request({
url: '/trouble/problemmodifyDraft/list',
method: 'get',
params: query
})
url: "/manage/problemmodifyDraft/list",
method: "get",
params: query,
});
}
// 查询安全问题草稿详细
export function getProblemmodifyDraft(id) {
return request({
url: '/trouble/problemmodifyDraft/' + id,
method: 'get'
})
url: "/manage/problemmodifyDraft/" + id,
method: "get",
});
}
// 新增安全问题草稿
export function addProblemmodifyDraft(data) {
return request({
url: '/trouble/problemmodifyDraft',
method: 'post',
data: data
})
url: "/manage/problemmodifyDraft",
method: "post",
data: data,
});
}
// 修改安全问题草稿
export function updateProblemmodifyDraft(data) {
return request({
url: '/trouble/problemmodifyDraft',
method: 'put',
data: data
})
url: "/manage/problemmodifyDraft",
method: "put",
data: data,
});
}
// 删除安全问题草稿
export function delProblemmodifyDraft(id) {
return request({
url: '/trouble/problemmodifyDraft/' + id,
method: 'delete'
})
url: "/manage/problemmodifyDraft/" + id,
method: "delete",
});
}

View File

@ -13,14 +13,14 @@
<!--表单信息-->
<el-tab-pane label="表单信息" name="1">
<el-col :span="16" :offset="4">
<v-form-render ref="vFormRef"/>
<v-form-render ref="vFormRef" />
<div style="margin-left:15%;margin-bottom: 20px;font-size: 14px;">
<el-button icon="Check" type="primary" @click="handleComplete"> </el-button>
<!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate"></el-button>-->
<!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleAssign"></el-button>-->
<!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate"></el-button>-->
<!-- <el-button icon="el-icon-edit-outline" type="primary" size="small" @click="handleDelegate"></el-button>-->
<!-- <el-button icon="el-icon-edit-outline" type="primary" size="small" @click="handleAssign"></el-button>-->
<!-- <el-button icon="el-icon-edit-outline" type="primary" size="small" @click="handleDelegate"></el-button>-->
<!-- <el-button icon="el-icon-refresh-left" type="warning" @click="handleReturn">退</el-button>-->
<!-- <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleReject"></el-button>-->
<!-- <el-button icon="el-icon-circle-close" type="danger" size="small" @click="handleReject"></el-button>-->
</div>
</el-col>
</el-tab-pane>
@ -31,69 +31,77 @@
<el-col :span="16" :offset="4">
<div class="block">
<el-timeline>
<el-timeline-item
v-for="(item,index ) in flowRecordList"
:key="index"
:icon="setIcon(item.finishTime)"
:color="setColor(item.finishTime)"
>
<el-timeline-item v-for="(item, index) in flowRecordList" :key="index" :icon="setIcon(item.finishTime)"
:color="setColor(item.finishTime)">
<p style="font-weight: 700">{{ item.taskName }}</p>
<el-card :body-style="{ padding: '10px' }">
<el-descriptions class="margin-top" :column="1" size="small" border>
<el-descriptions-item v-if="item.assigneeName" >
<el-descriptions-item v-if="item.assigneeName">
<template #label>
<div class="cell-item">
<el-icon :style="iconStyle"><User /></el-icon>
<el-icon :style="iconStyle">
<User />
</el-icon>
办理人
</div>
</template>
{{item.assigneeName}}
<el-tag type="info" size="small">{{item.deptName}}</el-tag>
{{ item.assigneeName }}
<el-tag type="info" size="small">{{ item.deptName }}</el-tag>
</el-descriptions-item>
<el-descriptions-item v-if="item.candidate" >
<el-descriptions-item v-if="item.candidate">
<template #label>
<div class="cell-item">
<el-icon :style="iconStyle"><User /></el-icon>
<el-icon :style="iconStyle">
<User />
</el-icon>
候选办理
</div>
</template>
{{item.candidate}}
{{ item.candidate }}
</el-descriptions-item>
<el-descriptions-item >
<el-descriptions-item>
<template #label>
<div class="cell-item">
<el-icon :style="iconStyle"><Calendar /></el-icon>
<el-icon :style="iconStyle">
<Calendar />
</el-icon>
接收时间
</div>
</template>
{{item.createTime}}
{{ item.createTime }}
</el-descriptions-item>
<el-descriptions-item v-if="item.finishTime" >
<el-descriptions-item v-if="item.finishTime">
<template #label>
<div class="cell-item">
<el-icon :style="iconStyle"><Calendar /></el-icon>
<el-icon :style="iconStyle">
<Calendar />
</el-icon>
处理时间
</div>
</template>
{{item.finishTime}}
{{ item.finishTime }}
</el-descriptions-item>
<el-descriptions-item v-if="item.duration" >
<el-descriptions-item v-if="item.duration">
<template #label>
<div class="cell-item">
<el-icon :style="iconStyle"><Timer /></el-icon>
<el-icon :style="iconStyle">
<Timer />
</el-icon>
耗时
</div>
</template>
{{item.duration}}
{{ item.duration }}
</el-descriptions-item>
<el-descriptions-item v-if="item.comment" >
<el-descriptions-item v-if="item.comment">
<template #label>
<div class="cell-item">
<el-icon :style="iconStyle"><ChatDotSquare /></el-icon>
<el-icon :style="iconStyle">
<ChatDotSquare />
</el-icon>
处理意见
</div>
</template>
{{item.comment.comment}}
{{ item.comment.comment }}
</el-descriptions-item>
</el-descriptions>
</el-card>
@ -105,7 +113,7 @@
<!--流程图-->
<el-tab-pane label="流程图" name="3">
<bpmn-viewer :flowData="flowData" :procInsId="taskForm.procInsId"/>
<bpmn-viewer :flowData="flowData" :procInsId="taskForm.procInsId" />
</el-tab-pane>
</el-tabs>
@ -117,15 +125,15 @@
<flow-role v-if="checkSendRole" @handleRoleSelect="roleSelect"></flow-role>
</el-form-item>
<el-form-item label="处理意见" label-width="80px" prop="comment"
:rules="[{ required: true, message: '请输入处理意见', trigger: 'blur' }]">
<el-input type="textarea" v-model="taskForm.comment" placeholder="请输入处理意见"/>
:rules="[{ required: true, message: '请输入处理意见', trigger: 'blur' }]">
<el-input type="textarea" v-model="taskForm.comment" placeholder="请输入处理意见" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="completeOpen = false"> </el-button>
<el-button type="primary" @click="taskComplete"> </el-button>
</span>
<el-button @click="completeOpen = false"> </el-button>
<el-button type="primary" @click="taskComplete"> </el-button>
</span>
</template>
</el-dialog>
@ -134,23 +142,18 @@
<el-form ref="taskFormRef" :model="taskForm" label-width="80px">
<el-form-item label="退回节点" prop="targetKey">
<el-radio-group v-model="taskForm.targetKey">
<el-radio-button
v-for="item in returnTaskList"
:key="item.id"
:label="item.id"
>{{ item.name }}
<el-radio-button v-for="item in returnTaskList" :key="item.id" :label="item.id">{{ item.name }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="退回意见" prop="comment"
:rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
<el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见"/>
<el-form-item label="退回意见" prop="comment" :rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
<el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="returnOpen = false"> </el-button>
<el-button type="primary" @click="taskReturn"> </el-button>
<el-button @click="returnOpen = false"> </el-button>
<el-button type="primary" @click="taskReturn"> </el-button>
</span>
</template>
</el-dialog>
@ -158,9 +161,8 @@
<!--驳回流程-->
<el-dialog :title="rejectTitle" v-model="rejectOpen" width="40%" append-to-body>
<el-form ref="taskFormRef" :model="taskForm" label-width="80px">
<el-form-item label="驳回意见" prop="comment"
:rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
<el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见"/>
<el-form-item label="驳回意见" prop="comment" :rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
<el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见" />
</el-form-item>
</el-form>
<template #footer>
@ -176,11 +178,11 @@
<script setup name="TodoDetail">
import {flowRecord} from "@/api/flowable/finished";
import { flowRecord } from "@/api/flowable/finished";
import FlowUser from '@/components/flow/User';
import FlowRole from '@/components/flow/Role';
import BpmnViewer from '@/components/Process/viewer';
import {flowXmlAndNode} from "@/api/flowable/definition";
import { flowXmlAndNode } from "@/api/flowable/definition";
import {
complete,
rejectTask,
@ -237,14 +239,14 @@ const vFormRef = ref(null);
const iconStyle = computed(() => {
const marginMap = {
large: '8px',
default: '6px',
small: '4px',
}
return {
marginRight: marginMap.small,
}
const marginMap = {
large: '8px',
default: '6px',
small: '4px',
}
return {
marginRight: marginMap.small,
}
})
const data = reactive({
@ -285,7 +287,7 @@ if (route.query) {
/** tab点击 */
function handleClick(tab, event) {
if (tab.props.name === '3') {
flowXmlAndNode({procInsId: taskForm.value.procInsId, deployId: taskForm.value.deployId}).then(res => {
flowXmlAndNode({ procInsId: taskForm.value.procInsId, deployId: taskForm.value.deployId }).then(res => {
flowData.value = res.data;
})
}
@ -339,7 +341,7 @@ const roleSelect = (selection, name) => {
/** 流程流转记录 */
function getFlowRecordList(procInsId, deployId) {
const params = {procInsId: procInsId, deployId: deployId}
const params = { procInsId: procInsId, deployId: deployId }
flowRecord(params).then(res => {
flowRecordList.value = res.data.flowList;
}).catch(res => {
@ -351,7 +353,7 @@ function getFlowRecordList(procInsId, deployId) {
function getFlowTaskForm(taskId) {
if (taskId) {
//
flowTaskForm({taskId: taskId}).then(res => {
flowTaskForm({ taskId: taskId }).then(res => {
//
vFormRef.value.setFormJson(res.data.formJson);
formJson.value = res.data.formJson;
@ -481,7 +483,7 @@ function taskComplete() {
/** 申请流程表单数据提交 */
function submitForm() {
// todo
getNextFlowNode({taskId: taskForm.value.taskId}).then(res => {
getNextFlowNode({ taskId: taskForm.value.taskId }).then(res => {
const data = res.data;
if (data) {
vFormRef.value.getFormData().then(formData => {
@ -516,7 +518,7 @@ function goBack() {
checkSendUser.value = false;
completeOpen.value = false;
checkSendRole.value = false;
const obj = {path: "/task/todo", query: { t: Date.now()}};
const obj = { path: "/task/todo", query: { t: Date.now() } };
proxy.$tab.closeOpenPage(obj);
}
</script>
@ -543,7 +545,7 @@ function goBack() {
margin-bottom: 20px;
}
.el-tag + .el-tag {
.el-tag+.el-tag {
margin-left: 10px;
}

View File

@ -3,38 +3,40 @@
<el-popover placement="top" :visible="data.showPop2" ref="pop" width="300px">
<p>选择年份</p>
<div style="margin-bottom: 12px;">
<el-date-picker v-model="data.selYear" type="year" placeholder="选择年份" style="width:100%"
<el-date-picker v-model="data.selYear" type="year" placeholder="选择年份" style="width:100%"
:picker-options="{ disabledDate: doPick }">
</el-date-picker>
</div>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="data.showPop2 = false">取消</el-button>
<el-button type="primary" size="mini" @click="doAddYear"></el-button>
<el-button size="small" type="text" @click="data.showPop2 = false">取消</el-button>
<el-button type="primary" size="small" @click="doAddYear"></el-button>
</div>
<template #reference>
<el-button size="mini" type="success" @click="data.showPop2=true" style="margin-right: 12px;" class="btn-add-year" round>增加年份</el-button>
<el-button size="small" type="success" @click="data.showPop2 = true" style="margin-right: 12px;"
class="btn-add-year" round>增加年份</el-button>
</template>
</el-popover>
<el-tabs type="card" v-model="data.activeName">
<el-tab-pane v-for="(it, idx) in data.monthInv" :label="'' + it.year" :name="'' + it.year" :key="idx">
<el-row>
<el-col v-for="(item, idxx) in it.value" :key="idxx" :span="12">
<el-form-item :label="data.names[item.month]" class="w200" :class="item.money * 1 < 0 ? 'txt-error' : ''">
<el-input-number :precision="2" v-model="item.money" placeholder="年度投资">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
</el-row>
<el-col v-for="(item, idxx) in it.value" :key="idxx" :span="12">
<el-form-item :label="data.names[item.month]" class="w200"
:class="item.money * 1 < 0 ? 'txt-error' : ''">
<el-input-number :precision="2" v-model="item.money" placeholder="年度投资">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup>
import {addMonthInvestment} from '@/api/manage/costOutput.js'
import { addMonthInvestment } from '@/api/manage/costOutput.js'
const { proxy } = getCurrentInstance();
const $emit=defineEmits(["success"])
const $emit = defineEmits(["success"])
const data = reactive({
prj: null,
selYear: '',
@ -47,13 +49,14 @@ function doPick(a, b) {
return data.monthInv.filter(d => d.year == a.getFullYear()).length > 0;
}
function doAddYear() {
addMonthInvestment({comId:data.prj.comId,
year:proxy.$dt(data.selYear).$y,
projectId:data.prj.id,
costType:9
}).then(d=>{
addMonthInvestment({
comId: data.prj.comId,
year: proxy.$dt(data.selYear).$y,
projectId: data.prj.id,
costType: 9
}).then(d => {
$emit("success");
data.showPop2=false;
data.showPop2 = false;
});
}
function init(d, prj) {
@ -73,11 +76,11 @@ defineExpose({
})
</script>
<style lang="scss">
.cost-month{
.btn-add-year{
.cost-month {
.btn-add-year {
position: absolute;
right: 0px;
z-index: 9;
}
}
}
</style>

View File

@ -9,11 +9,12 @@
</el-date-picker>
</div>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="doCancel"></el-button>
<el-button type="primary" size="mini" @click="doAddYear"></el-button>
<el-button size="small" type="text" @click="doCancel"></el-button>
<el-button type="primary" size="small" @click="doAddYear"></el-button>
</div>
<template #reference>
<el-button class="btn-add-year" size="mini" @click="data.showPop2=true" type="success" style="margin-right: 12px;" round>增加年份</el-button>
<el-button class="btn-add-year" size="small" @click="data.showPop2 = true" type="success"
style="margin-right: 12px;" round>增加年份</el-button>
</template>
</el-popover>
@ -32,9 +33,9 @@
</template>
<script setup>
import {addYearInvestment} from '@/api/manage/costOutput.js'
import { addYearInvestment } from '@/api/manage/costOutput.js'
const { proxy } = getCurrentInstance();
const $emit=defineEmits(["success"])
const $emit = defineEmits(["success"])
const data = reactive({
selYear: '',
activeName: '',
@ -43,21 +44,21 @@ const data = reactive({
prj: null
})
function doCancel(){
data.showPop2=false;
function doCancel() {
data.showPop2 = false;
}
function doPick(a, b) {
return data.yearInv.filter(d => d.year == a.getFullYear()).length > 0;
}
function doAddYear() {
addYearInvestment({
comId:data.prj.comId,
year:proxy.$dt(data.selYear).$y,
projectId:data.prj.id,
costType:2
}).then(d=>{
comId: data.prj.comId,
year: proxy.$dt(data.selYear).$y,
projectId: data.prj.id,
costType: 2
}).then(d => {
$emit("success");
data.showPop2=false;
data.showPop2 = false;
})
}
function init(d, prj) {
@ -76,11 +77,11 @@ defineExpose({
})
</script>
<style lang="scss">
.cost-year{
.btn-add-year{
.cost-year {
.btn-add-year {
position: absolute;
right: 0px;
z-index: 9;
}
}
}
</style>

View File

@ -2,220 +2,91 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="租户ID" prop="comId">
<el-input
v-model="queryParams.comId"
placeholder="请输入租户ID"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.comId" placeholder="请输入租户ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="项目id" prop="projectId">
<el-input
v-model="queryParams.projectId"
placeholder="请输入项目id"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.projectId" placeholder="请输入项目id" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="留痕图片" prop="marksPicture">
<el-input
v-model="queryParams.marksPicture"
placeholder="请输入留痕图片"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.marksPicture" placeholder="请输入留痕图片" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="留痕视频" prop="marksVideo">
<el-input
v-model="queryParams.marksVideo"
placeholder="请输入留痕视频"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.marksVideo" placeholder="请输入留痕视频" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="整改图片" prop="correctionPicture">
<el-input
v-model="queryParams.correctionPicture"
placeholder="请输入整改图片"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.correctionPicture" placeholder="请输入整改图片" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="拍摄位置" prop="problemArea">
<el-input
v-model="queryParams.problemArea"
placeholder="请输入拍摄位置"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.problemArea" placeholder="请输入拍摄位置" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="施工部位" prop="workParts">
<el-input
v-model="queryParams.workParts"
placeholder="请输入施工部位"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.workParts" placeholder="请输入施工部位" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="整改要求" prop="changeInfo">
<el-input
v-model="queryParams.changeInfo"
placeholder="请输入整改要求"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.changeInfo" placeholder="请输入整改要求" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="主送人姓名" prop="lordSent">
<el-input
v-model="queryParams.lordSent"
placeholder="请输入主送人姓名"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.lordSent" placeholder="请输入主送人姓名" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="主送人手机号" prop="lordSentUser">
<el-input
v-model="queryParams.lordSentUser"
placeholder="请输入主送人手机号"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.lordSentUser" placeholder="请输入主送人手机号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="抄送人姓名" prop="copySend">
<el-input
v-model="queryParams.copySend"
placeholder="请输入抄送人姓名"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.copySend" placeholder="请输入抄送人姓名" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="抄送人手机号" prop="copySendUser">
<el-input
v-model="queryParams.copySendUser"
placeholder="请输入抄送人手机号"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.copySendUser" placeholder="请输入抄送人手机号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="流程状态" prop="checkState">
<el-input
v-model="queryParams.checkState"
placeholder="请输入流程状态"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.checkState" placeholder="请输入流程状态" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="整改定位" prop="nickedArea">
<el-input
v-model="queryParams.nickedArea"
placeholder="请输入整改定位"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.nickedArea" placeholder="请输入整改定位" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="整改截至时间" prop="nickedTime">
<el-date-picker clearable
v-model="queryParams.nickedTime"
type="date"
value-format="YYYY-MM-DD"
<el-date-picker clearable v-model="queryParams.nickedTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择整改截至时间">
</el-date-picker>
</el-form-item>
<el-form-item label="工序名称" prop="processName">
<el-input
v-model="queryParams.processName"
placeholder="请输入工序名称"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.processName" placeholder="请输入工序名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工程名称" prop="projectName">
<el-input
v-model="queryParams.projectName"
placeholder="请输入工程名称"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.projectName" placeholder="请输入工程名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="留痕说明" prop="nickedInfo">
<el-input
v-model="queryParams.nickedInfo"
placeholder="请输入留痕说明"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.nickedInfo" placeholder="请输入留痕说明" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="审核人" prop="checkUser">
<el-input
v-model="queryParams.checkUser"
placeholder="请输入审核人"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.checkUser" placeholder="请输入审核人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="审核人手机号" prop="checkUserPhone">
<el-input
v-model="queryParams.checkUserPhone"
placeholder="请输入审核人手机号"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.checkUserPhone" placeholder="请输入审核人手机号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="删除状态" prop="isDel">
<el-input
v-model="queryParams.isDel"
placeholder="请输入删除状态"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.isDel" placeholder="请输入删除状态" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="创建人" prop="createUser">
<el-input
v-model="queryParams.createUser"
placeholder="请输入创建人"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.createUser" placeholder="请输入创建人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker clearable
v-model="queryParams.createTime"
type="date"
value-format="YYYY-MM-DD"
<el-date-picker clearable v-model="queryParams.createTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择创建时间">
</el-date-picker>
</el-form-item>
<el-form-item label="修改人" prop="updateUser">
<el-input
v-model="queryParams.updateUser"
placeholder="请输入修改人"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.updateUser" placeholder="请输入修改人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime">
<el-date-picker clearable
v-model="queryParams.updateTime"
type="date"
value-format="YYYY-MM-DD"
<el-date-picker clearable v-model="queryParams.updateTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择修改时间">
</el-date-picker>
</el-form-item>
<el-form-item label="复检人" prop="recheckSend">
<el-input
v-model="queryParams.recheckSend"
placeholder="请输入复检人"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.recheckSend" placeholder="请输入复检人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="复检人手机号" prop="recheckSendUser">
<el-input
v-model="queryParams.recheckSendUser"
placeholder="请输入复检人手机号"
clearable
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.recheckSendUser" placeholder="请输入复检人手机号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
@ -225,42 +96,20 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['trouble:problemmodify:add']"
>新增</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['trouble:problemmodify:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['trouble:problemmodify:edit']"
>修改</el-button>
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
v-hasPermi="['trouble:problemmodify:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['trouble:problemmodify:remove']"
>删除</el-button>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
v-hasPermi="['trouble:problemmodify:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['trouble:problemmodify:export']"
>导出</el-button>
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['trouble:problemmodify:export']">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -315,19 +164,16 @@
<el-table-column label="问题类型" align="center" prop="problemType" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['trouble:problemmodify:edit']"></el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['trouble:problemmodify:remove']"></el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['trouble:problemmodify:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['trouble:problemmodify:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改安全隐患整改对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
@ -375,10 +221,7 @@
<el-input v-model="form.nickedArea" placeholder="请输入整改定位" />
</el-form-item>
<el-form-item label="整改截至时间" prop="nickedTime">
<el-date-picker clearable
v-model="form.nickedTime"
type="date"
value-format="YYYY-MM-DD"
<el-date-picker clearable v-model="form.nickedTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择整改截至时间">
</el-date-picker>
</el-form-item>
@ -427,7 +270,7 @@
</template>
<script setup name="Problemmodify">
import { listProblemmodify, getProblemmodify, delProblemmodify, addProblemmodify, updateProblemmodify } from "@/api/trouble/problemmodify";
import { listProblemmodify, getProblemmodify, delProblemmodify, addProblemmodify, updateProblemmodify } from "@/api/manage/problemmodify";
const { proxy } = getCurrentInstance();
@ -607,12 +450,12 @@ function submitForm() {
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value;
proxy.$modal.confirm('是否确认删除安全隐患整改编号为"' + _ids + '"的数据项?').then(function() {
proxy.$modal.confirm('是否确认删除安全隐患整改编号为"' + _ids + '"的数据项?').then(function () {
return delProblemmodify(_ids);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => {});
}).catch(() => { });
}
/** 导出按钮操作 */

View File

@ -20,14 +20,14 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain size="mini" @click="handleAdd"
<el-button type="primary" plain size="small" @click="handleAdd"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']">
<el-icon>
<Plus />
</el-icon></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain size="mini" @click="dataSynchronization" :disabled="single"
<el-button type="warning" plain size="small" @click="dataSynchronization" :disabled="single"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']">
<el-icon>
<CopyDocument />
@ -36,7 +36,7 @@
</el-col>
<el-col :span="1.5">
<el-tooltip content="批量提交选择的数据!" placement="bottom">
<el-button type="success" plain size="mini" @click="batchSubmitForm" :disabled="multiple"
<el-button type="success" plain size="small" @click="batchSubmitForm" :disabled="multiple"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']">
<el-icon>
<Check />
@ -59,71 +59,83 @@
<el-table-column align="center" width="180" class-name="td-up-img" label="问题图片">
<template #default="scope">
<div :class="scope.row.errSmarkUrl?'is-err':''">
<image-upload v-model="scope.row.smarkUrl" previewAll :limit="5" :isShowTip="false" @change="scope.row.errSmarkUrl=scope.row.smarkUrl?false:true"/>
</div>
<div :class="scope.row.errSmarkUrl ? 'is-err' : ''">
<image-upload v-model="scope.row.smarkUrl" previewAll :limit="5" :isShowTip="false"
@change="scope.row.errSmarkUrl = scope.row.smarkUrl ? false : true" />
</div>
</template>
</el-table-column>
<el-table-column align="center" width="180" class-name="td-proble-type" label="隐患类型">
<template #default="scope">
<div :class="scope.row.errProblemType?'is-err':''">
<el-select v-model="scope.row.problemType" placeholder="请选择检查类型" clearable @change="scope.row.errProblemType=scope.row.problemType?false:true">
<el-option v-for="dict in ssp_proble_type" :key="dict.value" :label="dict.label" :value="dict.value">
</el-option>
</el-select>
<div :class="scope.row.errProblemType ? 'is-err' : ''">
<el-select v-model="scope.row.problemType" placeholder="请选择检查类型" clearable
@change="scope.row.errProblemType = scope.row.problemType ? false : true">
<el-option v-for="dict in ssp_proble_type" :key="dict.value" :label="dict.label" :value="dict.value">
</el-option>
</el-select>
</div>
<div :class="scope.row.errDangerType?'is-err':''">
<el-select v-model="scope.row.dangerType" placeholder="请选择隐患类型" clearable style="margin-top:80px;" @change="scope.row.errDangerType=scope.row.dangerType?false:true">
<el-option v-for="dict in ssp_proble_sub_type" :key="dict.value" :label="dict.label" :value="dict.value">
</el-option>
</el-select>
<div :class="scope.row.errDangerType ? 'is-err' : ''">
<el-select v-model="scope.row.dangerType" placeholder="请选择隐患类型" clearable style="margin-top:80px;"
@change="scope.row.errDangerType = scope.row.dangerType ? false : true">
<el-option v-for="dict in ssp_proble_sub_type" :key="dict.value" :label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</div>
</template>
</el-table-column>
<el-table-column label="施工部位" align="center" prop="workParts" min-width="240" class-name="td-textarea">
<template #default="scope">
<div :class="scope.row.errWorkParts?'is-err':''">
<el-input v-model="scope.row.workParts" placeholder="请输入施工部位" type="textarea" :rows="3" @change="scope.row.errWorkParts=scope.row.workParts?false:true" />
<div :class="scope.row.errWorkParts ? 'is-err' : ''">
<el-input v-model="scope.row.workParts" placeholder="请输入施工部位" type="textarea" :rows="3"
@change="scope.row.errWorkParts = scope.row.workParts ? false : true" />
</div>
</template>
</el-table-column>
<el-table-column label="整改要求" align="center" prop="changeInfo" min-width="240" class-name="td-textarea">
<template #default="scope">
<div :class="scope.row.errChangeInfo?'is-err':''">
<el-input v-model="scope.row.changeInfo" placeholder="请输入整改要求" type="textarea" :rows="3" @change="scope.row.errChangeInfo=scope.row.changeInfo?false:true" />
<div :class="scope.row.errChangeInfo ? 'is-err' : ''">
<el-input v-model="scope.row.changeInfo" placeholder="请输入整改要求" type="textarea" :rows="3"
@change="scope.row.errChangeInfo = scope.row.changeInfo ? false : true" />
</div>
</template>
</el-table-column>
<el-table-column label="问题人员" align="center" width="300" class-name="td-select">
<template #default="scope">
<el-form-item label="整改人">
<div :class="scope.row.errLordSent?'is-err':''" style="width: 100%;">
<el-select v-model="scope.row.lordSent" placeholder="请选择人员" clearable @change="scope.row.errLordSent=scope.row.lordSent?false:true"
popper-class="select-popper-group-pd">
<el-option-group v-for="group in data.modUserList" :key="group.label" :label="group.label">
<el-option v-for="item in group.options" :key="item.value" :label="item.label" :value="item.value" />
</el-option-group>
</el-select>
<div :class="scope.row.errLordSent ? 'is-err' : ''" style="width: 100%;">
<el-select v-model="scope.row.lordSent" placeholder="请选择人员" clearable
@change="scope.row.errLordSent = scope.row.lordSent ? false : true"
popper-class="select-popper-group-pd">
<el-option-group v-for="group in data.modUserList" :key="group.label" :label="group.label">
<el-option v-for="item in group.options" :key="item.value" :label="item.label"
:value="item.value" />
</el-option-group>
</el-select>
</div>
</el-form-item>
<el-form-item label="抄送人">
<div :class="scope.row.errCopySend?'is-err':''" style="width: 100%;">
<el-select v-model="scope.row.copySend" placeholder="请选择人员" clearable multiple collapse-tags @change="scope.row.errCopySend=scope.row.copySend?false:true"
popper-class="select-popper-group-pd" collapse-tags-tooltip>
<el-option-group v-for="group in data.ccUserList" :key="group.label" :label="group.label">
<el-option v-for="item in group.options" :key="item.value" :label="item.label" :value="item.value" />
</el-option-group>
</el-select>
<div :class="scope.row.errCopySend ? 'is-err' : ''" style="width: 100%;">
<el-select v-model="scope.row.copySend" placeholder="请选择人员" clearable multiple collapse-tags
@change="scope.row.errCopySend = scope.row.copySend ? false : true"
popper-class="select-popper-group-pd" collapse-tags-tooltip>
<el-option-group v-for="group in data.ccUserList" :key="group.label" :label="group.label">
<el-option v-for="item in group.options" :key="item.value" :label="item.label"
:value="item.value" />
</el-option-group>
</el-select>
</div>
</el-form-item>
<el-form-item label="复检人">
<div :class="scope.row.errRecheckSend?'is-err':''" style="width: 100%;">
<el-select v-model="scope.row.recheckSend" placeholder="请选择人员" clearable @change="scope.row.errRecheckSend=scope.row.recheckSend?false:true"
popper-class="select-popper-group-pd" collapse-tags-tooltip>
<el-option-group v-for="group in data.recheckUserList" :key="group.label" :label="group.label">
<el-option v-for="item in group.options" :key="item.value" :label="item.label" :value="item.value" />
</el-option-group>
</el-select>
<div :class="scope.row.errRecheckSend ? 'is-err' : ''" style="width: 100%;">
<el-select v-model="scope.row.recheckSend" placeholder="请选择人员" clearable
@change="scope.row.errRecheckSend = scope.row.recheckSend ? false : true"
popper-class="select-popper-group-pd" collapse-tags-tooltip>
<el-option-group v-for="group in data.recheckUserList" :key="group.label" :label="group.label">
<el-option v-for="item in group.options" :key="item.value" :label="item.label"
:value="item.value" />
</el-option-group>
</el-select>
</div>
</el-form-item>
</template>
@ -132,10 +144,10 @@
<el-table-column label="整改截至时间" align="center" prop="nickedTime" width="180" class-name="td-select">
<template #default="scope">
<el-form-item label="">
<div :class="scope.row.errNickedTime?'is-err':''" style="width: 100%;">
<el-date-picker v-model="scope.row.nickedTime" type="date" placeholder="选择日期" value-format="yyyy-MM-dd" @change="scope.row.errNickedTime=scope.row.nickedTime?false:true"
style="width: 100%" />
</div>
<div :class="scope.row.errNickedTime ? 'is-err' : ''" style="width: 100%;">
<el-date-picker v-model="scope.row.nickedTime" type="date" placeholder="选择日期" value-format="YYYY-MM-DD"
@change="scope.row.errNickedTime = scope.row.nickedTime ? false : true" style="width: 100%" />
</div>
</el-form-item>
</template>
</el-table-column>
@ -160,6 +172,8 @@ import {
addProblemmodifyDraft,
updateProblemmodifyDraft,
} from "@/api/trouble/problemmodifyDraft";
import { batchAddProblemmodify } from '@/api/trouble/problemmodify'
import useUserStore from '@/store/modules/user'
import { listProProjectInfoSubdeptsUsers } from "@/api/manage/proProjectInfoSubdeptsUsers";
const userStore = useUserStore()
@ -188,6 +202,7 @@ const data = reactive({
},
selData: [],
users: [],
modUserList: [],//
ccUserList: [],//
recheckUserList: [],//
@ -263,63 +278,94 @@ function dataSynchronization() {
}
function submitRow(row) {
if (checkRow(row)) {
doBatchAdd([row]);
}
}
function batchSubmitForm(){
function batchSubmitForm() {
let cnt = 0;
data.selData.forEach(it => {
if (checkRow(it)) {
data.showList.splice(it,1);
data.dataList.splice(it,1);
if (!checkRow(it)) {
cnt++;
//data.showList.splice(it, 1);
//data.dataList.splice(it, 1);
}
});
if (cnt > 0) {
return;
}
doBatchAdd(data.selData);
}
function doBatchAdd(datas) {
datas.forEach(it => {
it.projectId = userStore.currentPrjId;
it.comId = userStore.currentComId;
it.infoType = 0;
let users = data.users.filter(u => u.userId == it.lordSent);
it.lordSent = users.map(u => u.userName).join(",");
it.lordSentUser = users.map(u => u.userPhone).join(",");
users = data.users.filter(u => it.copySend.includes(u.userId));
it.copySend = users.map(u => u.userName).join(",");
it.copySendUser = users.map(u => u.userPhone).join(",");
users = data.users.filter(u => u.userId == it.recheckSend);
it.recheckSend = users.map(u => u.userName).join(",");
it.recheckSendUser = users.map(u => u.userPhone).join(",");
});
batchAddProblemmodify(datas).then(res => {
if (res.code == 200) {
proxy.$modal.msgSuccess("提交成功!");
datas.forEach(it => {
data.showList.splice(it, 1);
data.dataList.splice(it, 1);
});
}
});
}
function checkRow(row) {
row.errSmarkUrl=false;
row.errProblemType=false;
row.errDangerType=false;
row.errWorkParts=false;
row.errChangeInfo=false;
row.errLordSent=false;
row.errCopySend=false;
row.errRecheckSend=false;
row.errNickedTime=false;
row.errSmarkUrl = false;
row.errProblemType = false;
row.errDangerType = false;
row.errWorkParts = false;
row.errChangeInfo = false;
row.errLordSent = false;
row.errCopySend = false;
row.errRecheckSend = false;
row.errNickedTime = false;
let ret = true;
if (!row.smarkUrl) {
row.errSmarkUrl=true;
ret= false;
row.errSmarkUrl = true;
ret = false;
}
if (!row.problemType) {
row.errProblemType=true;
ret= false;
row.errProblemType = true;
ret = false;
}
if (!row.dangerType ) {
row.errDangerType=true;
ret= false;
if (!row.dangerType) {
row.errDangerType = true;
ret = false;
}
if (!row.workParts ) {
row.errWorkParts=true;
ret= false;
if (!row.workParts) {
row.errWorkParts = true;
ret = false;
}
if (!row.changeInfo ) {
row.errChangeInfo=true;
ret= false;
if (!row.changeInfo) {
row.errChangeInfo = true;
ret = false;
}
if (!row.lordSent ) {
row.errLordSent=true;
ret= false;
if (!row.lordSent) {
row.errLordSent = true;
ret = false;
}
if (!row.copySend ) {
row.errCopySend=true;
ret= false;
if (!row.copySend) {
row.errCopySend = true;
ret = false;
}
if (!row.recheckSend ) {
row.errRecheckSend=true;
ret= false;
if (!row.recheckSend) {
row.errRecheckSend = true;
ret = false;
}
if (!row.nickedTime ) {
row.errNickedTime=true;
ret= false;
if (!row.nickedTime) {
row.errNickedTime = true;
ret = false;
}
return ret;
}
@ -418,6 +464,7 @@ function getUserTree() {
data.showList.push(row);
listProProjectInfoSubdeptsUsers({ projectId: userStore.currentPrjId, pageNum: 1, pageSize: 1000 }).then(d => {
let users = d.rows || [];
data.users = users;
data.modUserList = makeSelectData(users.filter(it => it.subDeptType == 4 || it.subDeptType == 5).filter(it => it.userPost == 2 || it.userPost == 3), true);
data.ccUserList = makeSelectData(users.filter(it => it.userPost != 4 && it.userPost != 5));
data.recheckUserList = makeSelectData(users.filter(it => it.subDeptType == 1));
@ -459,27 +506,34 @@ getUserTree();
.el-select {
width: 100%;
}
.is-err{
&::after{
bottom:-15px;
.is-err {
&::after {
bottom: -15px;
}
}
}
.is-err{
.is-err {
position: relative;
padding-bottom:12px;
.el-upload--picture-card{
padding-bottom: 12px;
.el-upload--picture-card {
border-color: red;
}
&::after{
&::after {
content: "不为空";
color: red;
left: 0px;
font-size:12px;
position:absolute;
font-size: 12px;
position: absolute;
bottom: -7px;
}
.el-select__wrapper,.el-textarea__inner,.el-input__wrapper{
.el-select__wrapper,
.el-textarea__inner,
.el-input__wrapper {
box-shadow: inset 0 0 0 1px red;
}
}