安全隐患整改审批流程处理

dev_xd
haha 2025-03-05 23:20:06 +08:00
parent 411a84e564
commit 9a41479bec
6 changed files with 259 additions and 219 deletions

View File

@ -274,6 +274,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.smark_url, a.smark_url,
a.isDel, a.isDel,
CONCAT(c.nick_name,'【',c.phonenumber,'】') as createUser, CONCAT(c.nick_name,'【',c.phonenumber,'】') as createUser,
a.createUser as updateUser,
a.createTime, a.createTime,
a.updateUser, a.updateUser,
a.updateTime, a.updateTime,

View File

@ -114,7 +114,6 @@ function initMap(opt) {
// //
myGeo.getPoint('经河新城', function (point) { myGeo.getPoint('经河新城', function (point) {
if (point) { if (point) {
console.log("--->",point)
map.value.centerAndZoom(point, 16); map.value.centerAndZoom(point, 16);
map.value.addOverlay(new BMapGL.Marker(point, { title: '经河新城' })) map.value.addOverlay(new BMapGL.Marker(point, { title: '经河新城' }))
map.value.enableScrollWheelZoom(true); map.value.enableScrollWheelZoom(true);
@ -151,6 +150,7 @@ defineExpose({
.el-dialog__body { .el-dialog__body {
position: relative; position: relative;
padding: 0px; padding: 0px;
.div-info { .div-info {
position: absolute; position: absolute;
top: 0px; top: 0px;

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="navbar"> <div class="navbar">
<hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> <hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container"
@toggleClick="toggleSideBar" />
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!settingsStore.topNav" /> <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!settingsStore.topNav" />
<top-nav id="topmenu-container" class="topmenu-container" v-if="settingsStore.topNav" /> <top-nav id="topmenu-container" class="topmenu-container" v-if="settingsStore.topNav" />
@ -96,7 +97,6 @@ function setLayout() {
emits('setLayout'); emits('setLayout');
} }
data.comName = userStore.currentComName data.comName = userStore.currentComName
console.log("---->",userStore)
</script> </script>
<style lang='scss' scoped> <style lang='scss' scoped>
@ -113,6 +113,7 @@ console.log("---->",userStore)
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
} }
.hamburger-container { .hamburger-container {
line-height: 46px; line-height: 46px;
height: 100%; height: 100%;

View File

@ -1,17 +1,15 @@
import { login, logout, getInfo } from '@/api/login' import { login, logout, getInfo } from "@/api/login";
import { findMyTasks } from '@/api/flowable/businessKey' import { findMyTasks } from "@/api/flowable/businessKey";
import { getToken, setToken, removeToken } from '@/utils/auth' import { getToken, setToken, removeToken } from "@/utils/auth";
import defAva from '@/assets/images/profile.jpg' import defAva from "@/assets/images/profile.jpg";
const useUserStore = defineStore( const useUserStore = defineStore("user", {
'user',
{
state: () => ({ state: () => ({
token: getToken(), token: getToken(),
uid: '', uid: "",
name: '', name: "",
nickName: '', nickName: "",
avatar: '', avatar: "",
compInfo: {}, compInfo: {},
roles: [], roles: [],
permissions: [], permissions: [],
@ -19,37 +17,43 @@ const useUserStore = defineStore(
currentComName: null, currentComName: null,
currentPrjId: null, currentPrjId: null,
currentProName: null, currentProName: null,
isAdmin: false,
}), }),
actions: { actions: {
// 登录 // 登录
login(userInfo) { login(userInfo) {
const username = userInfo.username.trim() const username = userInfo.username.trim();
const password = userInfo.password const password = userInfo.password;
const code = userInfo.code const code = userInfo.code;
const uuid = userInfo.uuid const uuid = userInfo.uuid;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => { login(username, password, code, uuid)
let data = res.data .then((res) => {
setToken(data.access_token) let data = res.data;
this.token = data.access_token setToken(data.access_token);
resolve() this.token = data.access_token;
}).catch(error => { resolve();
reject(error)
})
}) })
.catch((error) => {
reject(error);
});
});
}, },
// 获取用户信息 // 获取用户信息
getInfo() { getInfo() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getInfo().then(res => { getInfo()
const user = res.user .then((res) => {
const avatar = (user.avatar == "" || user.avatar == null) ? defAva : user.avatar; const user = res.user;
const avatar =
user.avatar == "" || user.avatar == null ? defAva : user.avatar;
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 if (res.roles && res.roles.length > 0) {
this.roles = res.roles // 验证返回的roles是否是一个非空数组
this.permissions = res.permissions this.roles = res.roles;
this.permissions = res.permissions;
} else { } else {
this.roles = ['ROLE_DEFAULT'] this.roles = ["ROLE_DEFAULT"];
} }
this.uid = user.userId; this.uid = user.userId;
this.name = user.userName; this.name = user.userName;
@ -60,20 +64,27 @@ const useUserStore = defineStore(
this.currentComName = user.activeComName; this.currentComName = user.activeComName;
this.currentPrjId = user.activeProjectId; this.currentPrjId = user.activeProjectId;
this.currentProName = user.activeProjectName; this.currentProName = user.activeProjectName;
resolve(res) this.isAdmin = user.roles.some(
}).catch(error => { (item) =>
reject(error) item.roleKey.includes("admin") ||
}) item.roleKey.includes("gsAdmin")
);
resolve(res);
}) })
.catch((error) => {
reject(error);
});
});
}, },
// 获取用户代办 // 获取用户代办
getTasks() { getTasks() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
findMyTasks().then(response => { findMyTasks()
.then((response) => {
let todos = document.querySelectorAll(".tips_Todo"); let todos = document.querySelectorAll(".tips_Todo");
let tasks = document.querySelectorAll(".tips_Task"); let tasks = document.querySelectorAll(".tips_Task");
if (todos.length > 0) { if (todos.length > 0) {
todos.forEach(el => { todos.forEach((el) => {
el.innerHTML = response.data.todo; el.innerHTML = response.data.todo;
if (response.data.todo > 0) { if (response.data.todo > 0) {
el.style.display = "inline"; el.style.display = "inline";
@ -83,7 +94,7 @@ const useUserStore = defineStore(
}); });
} }
if (tasks.length > 0) { if (tasks.length > 0) {
tasks.forEach(el => { tasks.forEach((el) => {
el.innerHTML = response.data.todo; el.innerHTML = response.data.todo;
if (response.data.todo > 0) { if (response.data.todo > 0) {
el.style.display = "inline"; el.style.display = "inline";
@ -92,27 +103,30 @@ const useUserStore = defineStore(
} }
}); });
} }
resolve(response) resolve(response);
}).catch(error => {
reject(error)
})
}) })
.catch((error) => {
reject(error);
});
});
}, },
// 退出系统 // 退出系统
logOut() { logOut() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout(this.token).then(() => { logout(this.token)
this.token = '' .then(() => {
this.roles = [] this.token = "";
this.permissions = [] this.roles = [];
removeToken() this.permissions = [];
resolve() removeToken();
}).catch(error => { resolve();
reject(error)
})
})
}
}
}) })
.catch((error) => {
reject(error);
});
});
},
},
});
export default useUserStore export default useUserStore;

View File

@ -6,10 +6,10 @@
<el-steps style="max-width: 600px" :active="data.stepActive" finish-status="success" simple> <el-steps style="max-width: 600px" :active="data.stepActive" finish-status="success" simple>
<el-step title="待整改" /> <el-step title="待整改" />
<el-step title="待复检" /> <el-step title="待复检" />
<el-step title="复检驳回" /> <el-step title="复检驳回" v-if="!data.simple" />
<el-step title="复检通过" /> <el-step title="复检通过" />
</el-steps> </el-steps>
<div class="step-list">
<div v-for="(it, idx) in data.auditinfoList" :key="idx"> <div v-for="(it, idx) in data.auditinfoList" :key="idx">
<div class="step-header" :class="data.row.checkState >= 0 ? 'is-active' : ''"> <div class="step-header" :class="data.row.checkState >= 0 ? 'is-active' : ''">
<el-icon> <el-icon>
@ -39,7 +39,8 @@
</el-icon></td> </el-icon></td>
<td> <td>
<div class="step-img"><el-image :src="file.fileUrl" <div class="step-img"><el-image :src="file.fileUrl"
v-for="(file, index) in it.files" :key="index" :preview-teleported="true" v-for="(file, index) in it.files" :key="index"
:preview-teleported="true"
:preview-src-list="[file.fileUrl]"></el-image></div> :preview-src-list="[file.fileUrl]"></el-image></div>
</td> </td>
</tr> </tr>
@ -72,13 +73,13 @@
<Picture /> <Picture />
</el-icon></td> </el-icon></td>
<td> <td>
<el-image :src="data.row.smarkUrlPic" style="height:80px;" :preview-teleported="true" <el-image :src="data.row.smarkUrlPic" style="height:80px;"
:preview-src-list="data.row.smarkUrlPics"></el-image> :preview-teleported="true" :preview-src-list="data.row.smarkUrlPics"></el-image>
</td> </td>
</tr> </tr>
</table> </table>
</el-card> </el-card>
</div>
</el-col> </el-col>
<el-col :span="14" class="detail-right" :class="'is-' + data.mode"> <el-col :span="14" class="detail-right" :class="'is-' + data.mode">
@ -211,6 +212,7 @@
<script setup name="Problemmodify"> <script setup name="Problemmodify">
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import { listAuditinfo, addAuditinfo } from '@/api/trouble/auditinfo' import { listAuditinfo, addAuditinfo } from '@/api/trouble/auditinfo'
import { fa } from 'element-plus/es/locales.mjs';
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { ssp_proble_type, ssp_proble_sub_type } = proxy.useDict('ssp_proble_type', 'ssp_proble_sub_type'); const { ssp_proble_type, ssp_proble_sub_type } = proxy.useDict('ssp_proble_type', 'ssp_proble_sub_type');
const formStep2Ref = ref(); const formStep2Ref = ref();
@ -218,6 +220,7 @@ const formStep3Ref = ref();
const userStore = useUserStore() const userStore = useUserStore()
const emit = defineEmits(["success"]); const emit = defineEmits(["success"]);
let data = reactive({ let data = reactive({
simple: false,
mode: '', mode: '',
loading: false, loading: false,
visible: false, visible: false,
@ -264,6 +267,7 @@ function validateStep2Images(rule, value, callback) {
function showDrawer(row, mode) { function showDrawer(row, mode) {
data.mode = mode; data.mode = mode;
data.row = row; data.row = row;
step2Form.value.images = []; step2Form.value.images = [];
step2Form.value.opinion = ""; step2Form.value.opinion = "";
step3Form.value.opinion = ""; step3Form.value.opinion = "";
@ -288,6 +292,15 @@ function getListAuditinfo() {
tmps[i].index = idx < 10 ? '0' + idx : idx; tmps[i].index = idx < 10 ? '0' + idx : idx;
} }
data.auditinfoList = tmps; data.auditinfoList = tmps;
if (data.row.checkState == 3) {
if (tmps.length == 2) {
data.simple = true;
data.stepActive = 3;
} else {
data.simple = false;
data.stepActive = 4;
}
}
}) })
} }
@ -394,6 +407,11 @@ defineExpose({
} }
} }
.step-list {
overflow-y: auto;
height: calc(100vh - 128px);
}
.el-card__body { .el-card__body {
padding: 8px !important; padding: 8px !important;
} }
@ -427,7 +445,7 @@ defineExpose({
.step-img { .step-img {
.el-image { .el-image {
width: 95px; width: 90px;
height: 80px; height: 80px;
margin-left: 3px; margin-left: 3px;
} }

View File

@ -180,6 +180,12 @@ function handleDetail(row) {
detailDrawerRef.value.showDrawer(row, 'show'); detailDrawerRef.value.showDrawer(row, 'show');
} }
function getIsVdel(row) { function getIsVdel(row) {
let isAdmin = userStore.isAdmin;
if (isAdmin) {
return true;
} else if (row.updateUser == userStore.uid && row.checkState != 3) {
return true;
}
return false; return false;
} }
function getIsModify(row) { function getIsModify(row) {