安全隐患功能

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 * @return
*/ */
public int deleteSmzSspProblemmodifyByIds(Long[] ids); public int deleteSmzSspProblemmodifyByIds(Long[] ids);
} }

View File

@ -1,6 +1,7 @@
package com.yanzhu.manage.service.impl; package com.yanzhu.manage.service.impl;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import com.yanzhu.common.core.context.SecurityContextHolder; import com.yanzhu.common.core.context.SecurityContextHolder;
import com.yanzhu.common.core.utils.DateUtils; import com.yanzhu.common.core.utils.DateUtils;
@ -100,10 +101,14 @@ public class SmzSspProblemmodifyServiceImpl implements ISmzSspProblemmodifyServi
@Override @Override
public int insertSmzSspProblemmodifies(List<SmzSspProblemmodify> list) { public int insertSmzSspProblemmodifies(List<SmzSspProblemmodify> list) {
AtomicInteger count = new AtomicInteger();
list.stream().forEach(it->{ list.stream().forEach(it->{
it.setCheckState(0L);
it.setIsDel(0L);
it.setCreateTime(DateUtils.getNowDate()); it.setCreateTime(DateUtils.getNowDate());
it.setCreateBy(SecurityContextHolder.getUserName()); 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) { export function listProblemmodify(query) {
return request({ return request({
url: '/trouble/problemmodify/list', url: "/manage/problemmodify/list",
method: 'get', method: "get",
params: query params: query,
}) });
} }
// 查询安全隐患整改详细 // 查询安全隐患整改详细
export function getProblemmodify(id) { export function getProblemmodify(id) {
return request({ return request({
url: '/trouble/problemmodify/' + id, url: "/manage/problemmodify/" + id,
method: 'get' method: "get",
}) });
} }
// 新增安全隐患整改 // 新增安全隐患整改
export function addProblemmodify(data) { export function addProblemmodify(data) {
return request({ return request({
url: '/trouble/problemmodify', url: "/manage/problemmodify",
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 修改安全隐患整改 // 修改安全隐患整改
export function updateProblemmodify(data) { export function updateProblemmodify(data) {
return request({ return request({
url: '/trouble/problemmodify', url: "/manage/problemmodify",
method: 'put', method: "put",
data: data data: data,
}) });
} }
// 删除安全隐患整改 // 删除安全隐患整改
export function delProblemmodify(id) { export function delProblemmodify(id) {
return request({ return request({
url: '/trouble/problemmodify/' + id, url: "/manage/problemmodify/" + id,
method: 'delete' 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) { export function listProblemmodifyDraft(query) {
return request({ return request({
url: '/trouble/problemmodifyDraft/list', url: "/manage/problemmodifyDraft/list",
method: 'get', method: "get",
params: query params: query,
}) });
} }
// 查询安全问题草稿详细 // 查询安全问题草稿详细
export function getProblemmodifyDraft(id) { export function getProblemmodifyDraft(id) {
return request({ return request({
url: '/trouble/problemmodifyDraft/' + id, url: "/manage/problemmodifyDraft/" + id,
method: 'get' method: "get",
}) });
} }
// 新增安全问题草稿 // 新增安全问题草稿
export function addProblemmodifyDraft(data) { export function addProblemmodifyDraft(data) {
return request({ return request({
url: '/trouble/problemmodifyDraft', url: "/manage/problemmodifyDraft",
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 修改安全问题草稿 // 修改安全问题草稿
export function updateProblemmodifyDraft(data) { export function updateProblemmodifyDraft(data) {
return request({ return request({
url: '/trouble/problemmodifyDraft', url: "/manage/problemmodifyDraft",
method: 'put', method: "put",
data: data data: data,
}) });
} }
// 删除安全问题草稿 // 删除安全问题草稿
export function delProblemmodifyDraft(id) { export function delProblemmodifyDraft(id) {
return request({ return request({
url: '/trouble/problemmodifyDraft/' + id, url: "/manage/problemmodifyDraft/" + id,
method: 'delete' method: "delete",
}) });
} }

View File

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

View File

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

View File

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

View File

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

View File

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