Commit e7e8d28a authored by p-wanping.song's avatar p-wanping.song

新增签到和固有风险模板

parent 3b09dd00
...@@ -26,7 +26,7 @@ import tabBar from "@/components/TabBar"; ...@@ -26,7 +26,7 @@ import tabBar from "@/components/TabBar";
export default { export default {
components: { components: {
tabBar tabBar,
}, },
data() { data() {
return { return {
...@@ -64,7 +64,11 @@ export default { ...@@ -64,7 +64,11 @@ export default {
"riskApprove", "riskApprove",
"taskList", "taskList",
"taskDetail", "taskDetail",
"modelResult" "modelResult",
"inherent-template-detail",
"inherent-template",
"my-sign",
"sign-recode",
], ],
// cachePage预先定义的缓存页面 // cachePage预先定义的缓存页面
otherCache: [], otherCache: [],
...@@ -80,8 +84,8 @@ export default { ...@@ -80,8 +84,8 @@ export default {
"my-delay", "my-delay",
"risk-account", "risk-account",
"risk-confirme", "risk-confirme",
"my-delay" "my-delay",
] ],
// 'report-return', 'risk-return', 风险和隐患的上报退回不需要缓存 // 'report-return', 'risk-return', 风险和隐患的上报退回不需要缓存
}; };
}, },
...@@ -104,26 +108,26 @@ export default { ...@@ -104,26 +108,26 @@ export default {
computed: { computed: {
showTab() { showTab() {
return !this.noTab.includes(this.$route.name); return !this.noTab.includes(this.$route.name);
} },
}, },
methods: { methods: {
// 处理缓存的方法 // 处理缓存的方法
handleCache(roterFromName, roterToName, markRoterName) { handleCache(roterFromName, roterToName, markRoterName) {
if (roterToName == markRoterName) { if (roterToName == markRoterName) {
// 从定义缓存列表中移除 // 从定义缓存列表中移除
if (this.cachePage.findIndex(item => item == roterFromName) != -1) { if (this.cachePage.findIndex((item) => item == roterFromName) != -1) {
this.cachePage.splice( this.cachePage.splice(
this.cachePage.findIndex(item => item == roterFromName), this.cachePage.findIndex((item) => item == roterFromName),
1 1
); );
} }
} else { } else {
// 判断有无路由 加入缓存 // 判断有无路由 加入缓存
if (this.cachePage.findIndex(item => item == roterFromName) == -1) { if (this.cachePage.findIndex((item) => item == roterFromName) == -1) {
this.cachePage.push(roterFromName); this.cachePage.push(roterFromName);
} }
} }
} },
}, },
watch: { watch: {
$route(to, from) { $route(to, from) {
...@@ -169,8 +173,8 @@ export default { ...@@ -169,8 +173,8 @@ export default {
} else { } else {
this.transitionName = ""; //同级无过渡效果 this.transitionName = ""; //同级无过渡效果
} }
} },
} },
}; };
</script> </script>
......
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
<div> <div>
<van-sticky> <van-sticky>
<header class="header"> <header class="header">
<van-icon @click="to" name="arrow-left" class="iconColorLeft"/> <van-icon @click="to" name="arrow-left" class="iconColorLeft" />
<span>{{text}}</span> <span>{{ text }}</span>
<!-- <van-icon name="bars" class="iconColorRight"/> --> <!-- <van-icon name="bars" class="iconColorRight" /> -->
<div class="iconColorRight">
<slot name="right"></slot>
</div>
</header> </header>
</van-sticky> </van-sticky>
</div> </div>
...@@ -22,63 +25,59 @@ ...@@ -22,63 +25,59 @@
<script> <script>
export default { export default {
props:{ props: {
text:{ text: {
default:"未知", default: "未知",
type:String type: String,
}, },
customBack:{ customBack: {
type:Function, type: Function,
}
}, },
data() {
return {
}
}, },
mounted() { data() {
return {};
}, },
mounted() {},
methods: { methods: {
/* 左侧图标跳转方法 */ /* 左侧图标跳转方法 */
to(){ to() {
if(this.customBack){ if (this.customBack) {
this.customBack() this.customBack();
}else{ } else {
history.go(-1) history.go(-1);
}
}
} }
} },
},
};
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.header{ .header {
width:100%; width: 100%;
height:1.5rem; height: 1.5rem;
background:#2980F7; background: #2980f7;
text-align: center; text-align: center;
line-height: 1.5rem; line-height: 1.5rem;
} }
.iconColorLeft{ .iconColorLeft {
color: white; color: white;
transform: scale(2); transform: scale(2);
float: left; float: left;
position: relative; position: relative;
top: 40%; top: 40%;
left: 5%; left: 5%;
} }
.header span{ .header span {
color: white; color: white;
font-size: 16px; font-size: 16px;
margin: auto; margin: auto;
font-family: 'Microsoft YaHei'; font-family: "Microsoft YaHei";
} }
.header .iconColorRight{ .header .iconColorRight {
color: white; color: white;
float: right; float: right;
position: relative; position: relative;
top: 40%;
right: 5%; right: 5%;
transform: scale(2); font-size: 13px;
} vertical-align: middle;
}
</style> </style>
...@@ -35,6 +35,22 @@ const routes = [ ...@@ -35,6 +35,22 @@ const routes = [
}, },
component: () => import("@/views/my/resetPas"), component: () => import("@/views/my/resetPas"),
}, },
{
path: "/my-sign",
name: "my-sign",
meta: {
title: "我的签到",
},
component: () => import("@/views/my/sign"),
},
{
path: "/sign-recode",
name: "sign-recode",
meta: {
title: "我的签到",
},
component: () => import("@/views/my/signRecode"),
},
// 安全工作台页面 // 安全工作台页面
{ {
path: "/save-workbench", path: "/save-workbench",
...@@ -150,6 +166,18 @@ const routes = [ ...@@ -150,6 +166,18 @@ const routes = [
name: "riskInherent", name: "riskInherent",
component: () => import("../views/riskProject/add/inherentRisks.vue"), component: () => import("../views/riskProject/add/inherentRisks.vue"),
}, },
//固有风险模板详情
{
path: "/inherent/template/detail",
name: "inherent-template-detail",
component: () => import("../views/riskProject/add/inherentTemplate/detail.vue"),
},
//固有风险模板列表
{
path: "/inherent/template",
name: "inherent-template",
component: () => import("../views/riskProject/add/inherentTemplate/list.vue"),
},
//新增固有风险 //新增固有风险
{ {
path: "/addInherent", path: "/addInherent",
......
...@@ -35,4 +35,10 @@ export default { ...@@ -35,4 +35,10 @@ export default {
SET_ASSESS_RESULT(state, data) { SET_ASSESS_RESULT(state, data) {
state.assessModel.result = data; state.assessModel.result = data;
}, },
// 固有风险模板
SET_INHERENT_TEMPLATE(state, data) {
state.inherentTemplate.id = data;
}
}; };
...@@ -11,5 +11,9 @@ export default { ...@@ -11,5 +11,9 @@ export default {
level: "", level: "",
score: "", score: "",
}, },
// 固有风险模板
inherentTemplate: {
id: ''
}
}, },
}; };
...@@ -2,9 +2,7 @@ ...@@ -2,9 +2,7 @@
<div> <div>
<!-- 头部标签 --> <!-- 头部标签 -->
<van-sticky> <van-sticky>
<header class="header-wrap"> <header class="header-wrap">我的</header>
我的
</header>
</van-sticky> </van-sticky>
<!-- 内容 --> <!-- 内容 -->
...@@ -64,8 +62,6 @@ ...@@ -64,8 +62,6 @@
<span>{{ item["title"] }}</span> <span>{{ item["title"] }}</span>
</div> </div>
</van-cell-group> </van-cell-group>
</div> </div>
<!-- 退出系统 --> <!-- 退出系统 -->
<footer class="sign-out"> <footer class="sign-out">
...@@ -79,11 +75,15 @@ ...@@ -79,11 +75,15 @@
<script> <script>
import tabBar from "@/components/TabBar"; import tabBar from "@/components/TabBar";
import { removeToken } from '@/utils/auth' // get token from cookie import { removeToken } from "@/utils/auth"; // get token from cookie
import { getUserInfo,removeLocalUserInfo,removeUserInfo} from '@/utils/userInfo' import {
getUserInfo,
removeLocalUserInfo,
removeUserInfo,
} from "@/utils/userInfo";
export default { export default {
components: { components: {
tabBar tabBar,
}, },
data() { data() {
return { return {
...@@ -91,7 +91,7 @@ export default { ...@@ -91,7 +91,7 @@ export default {
// 菜单 // 菜单
{ {
title: "我的权限", title: "我的权限",
img:require("@/assets/myTerritory/role.png"), img: require("@/assets/myTerritory/role.png"),
name: "my-role", name: "my-role",
}, },
{ {
...@@ -99,25 +99,30 @@ export default { ...@@ -99,25 +99,30 @@ export default {
img: require("@/assets/myTerritory/set.png"), img: require("@/assets/myTerritory/set.png"),
name: "my-reset-pas", name: "my-reset-pas",
}, },
{
title: "签到",
img: require("@/assets/myTerritory/set.png"),
name: "my-sign",
},
], ],
userInfo: { userInfo: {
portrait: require("@/assets/myTerritory/touxiang.png"), portrait: require("@/assets/myTerritory/touxiang.png"),
name: getUserInfo()?getUserInfo().userName:"xxx", name: getUserInfo() ? getUserInfo().userName : "xxx",
position: getUserInfo()?getUserInfo().deptName:"xxx部", position: getUserInfo() ? getUserInfo().deptName : "xxx部",
} },
}; };
}, },
mounted() {}, mounted() {},
methods: { methods: {
logout() { logout() {
removeToken() removeToken();
// removeLocalUserInfo() // removeLocalUserInfo()
removeUserInfo() removeUserInfo();
sessionStorage.clear() sessionStorage.clear();
this.$router.push("/login"); this.$router.push("/login");
// location.reload(); // location.reload();
} },
} },
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
...@@ -136,7 +141,7 @@ export default { ...@@ -136,7 +141,7 @@ export default {
padding: 10px 0 50px 0; padding: 10px 0 50px 0;
background-color: #f0f1f5; background-color: #f0f1f5;
position: relative; position: relative;
.user-box{ .user-box {
display: flex; display: flex;
align-items: center; align-items: center;
} }
......
<template>
<div>
<LHeader :text="$route.meta.title">
<span slot="right" @click="() => this.$router.push('sign-recode')"
>签到记录</span
>
</LHeader>
<van-form
ref="signForm"
label-width="4em"
validate-trigger="onSubmit"
:colon="true"
>
<van-field
readonly
name="projectName"
:value="form.projectName"
label="用户名"
placeholder="请输入"
:rules="[{ required: true, message: '用户名不能为空' }]"
>
</van-field>
<van-field
required
name="remark"
:value="form.remark"
label="备注"
placeholder="请输入"
type="textarea"
:rules="[{ required: true, message: '备注不能为空' }]"
>
</van-field>
<van-field
readonly
required
name="photo"
label="照片"
:rules="[{ required: true, message: '照片不能为空' }]"
>
<template #input>
<van-uploader
v-model="form.photo"
:after-read="afterRead"
:max-count="1"
>
</van-uploader>
</template>
</van-field>
<div class="submit-btns">
<van-button round block type="info" @click="toSign(1)">签到</van-button>
<van-button round block type="info" @click="toSign(0)">签退</van-button>
</div>
</van-form>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
components: {
LHeader,
},
data() {
return {
form: {
photo: [],
},
};
},
methods: {
afterRead(file) {
this.form.photo = file.file;
},
toSign(type) {
this.$refs.signForm.validate();
},
},
};
</script>
<style lang="less" scoped>
.submit-btns {
display: flex;
padding: 20px 0 20px 20px;
> .van-button {
margin-right: 20px;
}
}
</style>
<template>
<div>
<LHeader text="签到记录"> </LHeader>
<div>
<van-cell title="签到" value="2023/08/30 ">
<template #label>
<div>备注:123</div>
<div>照片:<img src="" alt="" /></div>
</template>
</van-cell>
<van-cell title="签退" value="2023/08/30 " />
</div>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default { components: { LHeader } };
</script>
<style lang="scss" scoped></style>
This diff is collapsed.
<!-- 导入固有风险模板详情 -->
<template>
<div>
<LHeader text="固有风险信息"></LHeader>
<van-form>
<van-field
required
clickable
name="name"
v-model="form.name"
label="危险源名称"
placeholder="请输入"
:rules="[{ required: true, message: '危险源名称不能为空' }]"
/>
<!-- 单选 -->
<van-field
readonly
required
clickable
name="pointType"
v-model="form.pointType"
label="风险点类型"
placeholder="请选择"
:rules="[{ required: true, message: '风险点类型不能为空' }]"
/>
<van-field
required
label="是否为特种设备"
v-show="form.pointType == '设备设施类'"
>
<template #input>
<span style="margin-right: 10px; color: red"></span>
<van-switch
v-model="form.specialEquipment"
size="20"
name="specialEquipment"
/>
<span style="margin-left: 10px; color: green"></span>
</template>
</van-field>
<!-- 多选 -->
<van-field
v-model="form.safetyWarningSigns"
readonly
required
name="safetyWarningSigns"
label="安全警示标志"
placeholder="请选择"
:rules="[{ required: true, message: '安全警示标志不能为空' }]"
/>
<van-field
v-model="form.factor"
readonly
required
name="factor"
label="风险因素"
placeholder="请选择"
:rules="[{ required: true, message: '风险因素不能为空' }]"
/>
<van-field
readonly
v-model="form.type"
required
name="type"
label="准事故类型"
placeholder="请选择"
:rules="[{ required: true, message: '准事故类型不能为空' }]"
/>
<van-field
readonly
v-model="form.level"
required
name="level"
label="风险等级"
placeholder="请选择"
:rules="[{ required: true, message: '风险等级不能为空' }]"
/>
<van-field
required
name="presenceLocation"
v-model="form.presenceLocation"
label="存在部位"
placeholder="请输入"
:rules="[{ required: true, message: '存在部位不能为空' }]"
/>
<div
style="
height: 1rem;
font-family: '微软雅黑 Bold', '微软雅黑 Regular', '微软雅黑';
font-weight: 700;
line-height: 1rem;
"
>
<img
src="@/assets/accidentIcon/bookmark.svg"
alt=""
style="position: relative; top: 32%; transform: translateY(-50%)"
/>
应采取的管控措施
</div>
<van-field label="技术措施">
<template #input>
<van-field
v-model="form.measuresProject"
name="measuresProject"
label=""
type="textarea"
rows="3"
autosize
placeholder="请输入"
style="padding-left: 0; padding-top: 0"
/>
</template>
</van-field>
<van-field label="管理措施">
<template #input>
<van-field
v-model="form.measuresAdministration"
name="measuresAdministration"
label=""
type="textarea"
rows="3"
autosize
placeholder="请输入"
style="padding-left: 0; padding-top: 0"
/>
</template>
</van-field>
<van-field label="应急措施">
<template #input>
<van-field
v-model="form.measuresEmergency"
name="measuresEmergency"
label=""
type="textarea"
rows="3"
autosize
placeholder="请输入"
style="padding-left: 0; padding-top: 0"
/>
</template>
</van-field>
<van-field
v-model="form.measuresDeptName"
name="measuresDeptName"
label="管控责任单位 "
type="input"
rows="1"
autosize
placeholder="请输入"
list="measure-deptname"
@input="measuresDeptNameChange"
/>
<van-field
v-model="form.measuresUserName"
name="measuresUserName"
label="管控责任人 "
type="input"
rows="1"
autosize
placeholder="请输入"
list="measure-name"
@input="measuresUserNameChange"
/>
<van-field
v-model="form.measuresUserPhone"
name="measuresUserPhone"
label="管控责任人联系方式"
type="input"
rows="1"
autosize
placeholder="请输入"
maxlength="11"
/>
<div
style="
height: 1rem;
font-family: '微软雅黑 Bold', '微软雅黑 Regular', '微软雅黑';
font-weight: 700;
line-height: 1rem;
"
>
<img
src="@/assets/accidentIcon/bookmark.svg"
alt=""
style="position: relative; top: 32%; transform: translateY(-50%)"
/>
重大危险源管理
</div>
<van-field name="majorHazardSource" label="是否为重大危险源">
<template #input>
<span style="margin-right: 10px; color: red"></span>
<van-switch v-model="form.majorHazardSource" size="20" />
<span style="margin-left: 10px; color: green"></span>
</template>
</van-field>
<van-field
:disabled="!form.majorHazardSource"
v-model="form.hazardSourceName"
:required="form.majorHazardSource"
name="hazardSourceName"
label="危险源名称 "
type="textarea"
rows="1"
autosize
placeholder="请输入"
:key="form.majorHazardSource + '123'"
:rules="
form.majorHazardSource
? [{ required: true, message: '危险源名称不能为空' }]
: []
"
/>
<van-field
label="重大危险源描述"
:disabled="!form.majorHazardSource"
:required="form.majorHazardSource"
>
<template #input>
<van-field
:disabled="!form.majorHazardSource"
v-model="form.majorHazardSourceDescription"
name="majorHazardSourceDescription"
type="textarea"
rows="3"
autosize
placeholder="请输入"
:key="form.majorHazardSource + '456'"
:rules="
form.majorHazardSource
? [{ required: true, message: '重大危险源描述不能为空' }]
: []
"
style="padding-left: 0; padding-top: 0"
/>
</template>
</van-field>
<van-field
:disabled="!form.majorHazardSource"
:required="form.majorHazardSource"
readonly
clickable
name="referenceBasis"
:value="form.referenceBasis == 'null' ? '' : form.referenceBasis"
label="判断依据"
placeholder="请选择"
:key="form.majorHazardSource + '789'"
:rules="
form.majorHazardSource
? [{ required: true, message: '判断依据不能为空' }]
: []
"
/>
<van-button round block type="info" @click="toImport">导入</van-button>
</van-form>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
import { getFun, postFun } from "@/service/table.js";
export default {
components: { LHeader },
data() {
return {
form: {},
};
},
mounted() {
this.postReturnEcho();
},
methods: {
// 请求详情数据
postReturnEcho() {
getFun(`/risk/plan/inherent/details/135`)
.then((res) => {
this.form = res.data;
})
.catch(() => {
this.$toast.clear();
});
},
toImport() {
this.$router.go(-2);
},
},
};
</script>
<style lang="scss" scoped></style>
<!-- 导入固有风险模板列表 -->
<template>
<div class="inherent-template">
<LHeader text="固有风险模板"></LHeader>
<div class="con-list">
<van-cell-group
inset
v-for="(item, index) in messageList"
:key="index"
@click="touchstart(index, item)"
>
<div style="font-size: 0.45rem; padding: 5px 0">
{{ item.name }}
</div>
<van-row gutter="">
<van-col span="17">
<van-row gutter="">
<van-col span="9">发起时间:</van-col>
<van-col span="15">{{
timestampToTimes(item.createTime)
}}</van-col>
</van-row>
<van-row gutter="">
<van-col span="9">楼层:</van-col>
<van-col span="15">{{ item.floorName }}</van-col>
</van-row>
<van-row gutter="">
<van-col span="9">房间:</van-col>
<van-col span="15">{{ item.roomName }}</van-col>
</van-row>
</van-col>
<!-- <van-col span="7" :style="{ color: item.state == 1 ? '#0069e5' : '#03b615' }">
{{ "●待审批" }}
</van-col> -->
</van-row>
<van-overlay :show="showIndex == index">
<div class="wrapper" @click.stop="showIndex = null">
<van-button round type="info" @click="toImport(item)"
>导入</van-button
>
<van-button round type="primary" @click="toDetail(item)"
>详情</van-button
>
</div>
</van-overlay>
</van-cell-group>
<div
style="
width: 100%;
text-align: center;
font-size: 0.48rem;
position: fixed;
top: 30%;
"
v-if="messageList['length'] == 0"
>
暂无数据
</div>
</div>
</div>
</template>
<script>
import { getFun, postFun } from "@/service/table.js";
import LHeader from "@/components/header.vue";
import { timestampToTime, generateId } from "@/utils/format";
export default {
components: { LHeader },
data() {
return {
messageList: [],
showIndex: null,
item: null,
};
},
mounted() {
this.getList();
},
methods: {
toDetail(item) {
this.$router.push({
path: "/inherent/template/detail",
query: {
id: item.id,
},
});
},
toImport() {
this.$router.go(-1);
},
touchstart(index, item) {
this.showIndex = index;
this.item = item;
},
getList() {
getFun(`/risk/plan/inherent/list/137/1`)
.then((res) => {
this.messageList = res.data;
})
.catch(() => {
this.$toast.fail("加载失败,请稍后再试");
});
},
timestampToTimes(time) {
return timestampToTime(new Date(time), "DT2", true);
},
},
};
</script>
<style lang="less" scoped>
.inherent-template {
.con-list {
padding: 0;
min-height: 10rem;
background-color: #f0f1f5;
.van-cell-group--inset {
margin: 0;
margin-bottom: 0.26667rem;
padding: 0.25rem;
font-size: 0.4rem;
position: relative;
border-radius: 4%;
box-shadow: 0px 0px 10px 2px #f3f3f3;
width: 90%;
margin: 0.4rem auto;
.van-row {
font-size: 0.4rem;
line-height: 0.8rem;
margin-bottom: 0;
}
.van-overlay {
position: absolute;
.wrapper {
display: flex;
align-items: center;
justify-content: space-evenly;
height: 100%;
}
}
}
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment