安全例会模块开发

dev
WenShiJun 2024-03-05 18:13:32 +08:00
parent c36e88fba1
commit 0f75d87d73
4 changed files with 614 additions and 13 deletions

View File

@ -48,6 +48,14 @@
"path": "pages/basics/documentation/documentation",
"style": {}
},
{
"path": "pages/application/safetymeeting/home",
"style": {}
},
{
"path": "pages/application/safetymeeting/safetymeeting-detail",
"style": {}
},
{
"path": "pages/basics/risk-distribution/risk-distribution",
"style": {}

View File

@ -0,0 +1,297 @@
<template>
<view>
<cu-custom bgColor="bg-gradual-blueness" :isBack="true" :isRingt="true">
<block slot="backText">返回</block>
<block slot="content">安全例会</block>
<block slot="right">
<view @click="showDrawer('showRight')"></view>
</block>
</cu-custom>
<view class="select-fixed top-fixed">
<view class="cu-bar search bg-white">
<view class="search-form radius">
<text class="cuIcon-search"></text>
<input @input="InputBlur" placeholder="请输入关键字" confirm-type="search"></input>
</view>
<view class="action">
<button class="cu-btn bg-green shadow-blur radius" @click="getQuery"></button>
</view>
</view>
<view class="line"></view>
</view>
<scroll-view class="dy-scroll" @scrolltolower="scrolltolower" scroll-y
:style="'top:'+sTop+'px;height:calc(100vh - '+totalHeight+'px)'">
<view v-if="list.length>0">
<view class="dy-list">
<view class="dy-list-item p201 arrow" v-for="i in list" @click="goToDetail(i)">
<view class="dy-subtitle">
<text>会议标题{{i.MEETING_TITLE}}</text>
</view>
<view class="dy-subtitle">
<text>会议类型</text>
<text>{{i.MEETING_TYPE === '1' ? '安全生产例会' : i.MEETING_TYPE === '2' ? '安全生产委员会会议' : ''}}</text>
</view>
<view class="dy-subtitle">
<text>会议时间{{i.MEETING_DATE_START}}</text>
</view>
<view class="dy-subtitle">
<text>会议状态{{i.MEETING_STATUS}}</text>
</view>
<!-- <view class="dy-subtitle">-->
<!-- <text>会议内容</text>-->
<!-- <rich-text :nodes="i.MEETING_CONTENT"></rich-text>-->
<!-- </view>-->
</view>
</view>
</view>
<view v-else-if="dataFlag=='noData'" class="dy-null">
<view class="dy-null-img">
<image :src="background[dataFlag].url" mode=""></image>
</view>
<view class="dy-null-title">
{{background[dataFlag].msg}}
</view>
</view>
<view class="cu-tabbar-height"></view>
</scroll-view>
</view>
</template>
<script>
import {
basePath,
corpinfoId,
loginSession,
} from '@/common/tool.js';
import tkiTree from "@/components/select-tree/select-tree.vue"
export default {
components: {
tkiTree
},
data() {
return {
showRight: false,
dataFlag: 'noData',
sTop: 0,
totalHeight: 0,
list: [], //
page: 1, //--
rows: 10, //--
totalCount: 0, //--
isEnd: false, //
totalPage: 0, //--
NameLikes: '',
}
},
onReady() {
let that = this;
let CustomBar = this.CustomBar;
uni.getSystemInfo({ //uni-app
success(res) { //
let titleH = uni.createSelectorQuery().select(".top-fixed"); //class/id
titleH.boundingClientRect(data => {
that._data.sTop = data.height //=-data.top
that.totalHeight = data.height + CustomBar
}).exec()
}
})
},
onLoad() { //
var _this = this;
_this.background = require('@/common/background.json');
_this.showCount = -1;
_this.currentPage = 1;
_this.list = [];
_this.isEnd = false;
_this.getDate();
loginSession();
},
methods: {
//
goToDetail(e) {
uni.navigateTo({
url: '/pages/application/safetymeeting/safetymeeting-detail?id=' + e
.SAFETY_MEETING_ID
});
},
getQuery() { //
var _this = this;
_this.showCount = -1;
_this.currentPage = 1;
_this.list = [];
_this.isEnd = false;
_this.getDate();
},
InputBlur(e) {
this.NameLikes = e.detail.value
},
//
depttreeConfirm(e) {
// this.isUps=false;
this.DEPT = e[0].id;
this.DEPTNAME = e[0].name;
this.uindex = -1;
this.RISK_UNIT_ID = ''; //
this.RISK_UNIT_NAME = ''; //
this.$forceUpdate(); //
this.getUnitList();
this.getQuery();
},
//
depttreeCancel(e) {
// this.isUps=false;
},
PickerUnit(e) {
this.uindex = e.detail.value;
this.RISK_UNIT_ID = this.unitList[this.uindex].RISKUNIT_ID;
this.RISK_UNIT_NAME = this.unitList[this.uindex].RISKUNITNAME;
this.$forceUpdate(); //
this.getQuery();
},
changeLevel(e) {
var _this = this;
_this.LEVELID = e
_this.getQuery();
},
reset() {
var _this = this;
_this.DEPT = '';
_this.DEPTNAME = '请选择';
_this.unitList = [];
_this.RISK_UNIT_ID = ''; //
_this.RISK_UNIT_NAME = ''; //
_this.uindex = -1;
_this.LEVELID = '';
_this.getQuery();
},
//
showDeptTree() {
// this.isUps=true
this.$refs.tkiTree._show();
},
//
showDrawer(e) {
this.$refs[e].open()
},
//
closeDrawer(e) {
this.$refs[e].close()
},
//
change(e, type) {
this[type] = e
},
//
scrolltolower() {
var _this = this;
_this.showCount = -1;
_this.currentPage = _this.currentPage + 1;
_this.isEnd = false;
if (_this.totalPage >= _this.currentPage) {
_this.getDate(); //
}
},
getDate() {
var _this = this;
if (_this.isEnd) {
return
} else {
this.isEnd = true;
}
uni.showLoading({
title: "加载中..."
}); //
uni.request({
url: basePath + 'app/safetymeeting/listForSafetyMeeting?showCount=' + _this.showCount + '&currentPage=' + _this
.currentPage,
method: 'POST',
dataType: 'json',
header: {
'Content-type': 'application/x-www-form-urlencoded'
},
data: {
CORPINFOID: corpinfoId,
KEYWORDS: _this.NameLikes, //
},
success: (res) => {
uni.hideLoading(); //
if (res.data != null) {
_this.totalPage = res.data.page.totalPage;
if (_this.list.length == 0) {
_this.list = res.data.varList;
} else {
if (res.data.varList != null) {
_this.list2 = res.data.varList;
_this.list = _this.list.concat(_this.list2);
}
}
}
}
})
},
}
}
</script>
<style>
.dy-card {
background-color: #fff;
border-radius: 10upx;
margin: 30upx
}
.dy-card-title {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #eee;
min-height: 80upx;
line-height: 80upx;
padding: 0 30upx;
}
.dy-card-content {
padding: 0upx 30upx 30upx;
}
.dy-card-content-item {
margin-top: 20upx;
}
.dy-card-content-item .title {
display: flex;
align-items: center;
}
.dy-card-content-item .title .l {
width: 10upx;
height: 30upx;
border-radius: 20upx;
background-color: #666;
margin-right: 10upx;
}
.dy-card-content-item .content {
background-color: #F1F1F1;
padding: 10upx 14upx;
margin-top: 14upx;
line-height: 1.6;
}
.dy-card-content-item .name text {
background-color: #F1F1F1;
padding: 10upx 14upx;
margin-top: 14upx;
line-height: 1.6;
display: inline-block;
}
.dy-card-foot {
border-top: 1px solid #eee;
padding: 30upx;
}
.picker-tree{
padding-right: 0;
}
</style>

View File

@ -0,0 +1,287 @@
<template>
<view>
<cu-custom bgColor="bg-gradual-blueness" :isBack="true">
<block slot="backText">返回</block>
<block slot="content">安全例会详情</block>
</cu-custom>
<scroll-view scroll-y>
<view class="dy-card">
<view class="dy-card-title">
<text>{{pd.MEETING_TITLE}}</text>
</view>
<view class="dy-card-content">
<view class="dy-card-content-item">
<text>主持人</text>
<text>{{pd.HOST_PERSON}}</text>
</view>
<view class="dy-card-content-item">
<text>记录人</text>
<text>{{pd.RECORDER}}</text>
</view>
<view class="dy-card-content-item">
<text>会议开始时间</text>
<text>{{pd.MEETING_DATE_START}}</text>
</view>
<view class="dy-card-content-item">
<text>会议结束时间</text>
<text>{{pd.MEETING_DATE_END}}</text>
</view>
<view class="dy-card-content-item">
<text>会议类型</text>
<text>{{pd.MEETING_TYPE === '1' ? '安全生产例会' : pd.MEETING_TYPE === '2' ? '安全生产委员会会议' : ''}}</text>
</view>
<view class="dy-card-content-item">
<text>会议内容</text>
<rich-text :nodes="pd.MEETING_CONTENT"></rich-text>
</view>
</view>
</view>
<view class="cu-tabbar-height"></view>
</scroll-view>
<uni-drawer ref="showHiddenWindow" mode="right" :mask-click="true">
<scroll-view scroll-y="true" style="height: 100vh;">
<!-- 实时照片部分 -->
<view class="cu-form-group image-upload-container">
<view class="title">实时照片</view>
<view class="icon-upload" v-if="!livePhotos.length" @click="chooseImage('LIVEPHOTOS')">
<text class='cuIcon-cameraadd'></text>
</view>
<!-- 图片预览区 -->
<view class="image-preview" v-for="(photo, index) in livePhotos" :key="index">
<image :src="photo" mode="aspectFill" class="upload-image"></image>
<!-- 删除按钮 -->
<view class="delete-icon" @tap.stop="removeImage(index, 'LIVEPHOTOS')">
<text class='cuIcon-close'></text>
</view>
</view>
</view>
<!-- 签字照片部分 -->
<view class="cu-form-group image-upload-container">
<view class="title">签字照片</view>
<view class="icon-upload" v-if="!signaturePicture" @click="chooseImage('SIGNATUREPICTURE')">
<text class='cuIcon-edit'></text>
</view>
<!-- 图片预览区 -->
<view class="image-preview" v-if="signaturePicture">
<image :src="signaturePicture" mode="aspectFill" class="upload-image"></image>
</view>
<!-- 删除按钮 -->
<view>
<view class="delete-icon" @tap.stop="removeImage('SIGNATUREPICTURE')">
<text class='cuIcon-close'></text>
</view>
</view>
</view>
</scroll-view>
<button @click="saveAndCloseDrawer"></button>
</uni-drawer>
<view class="cu-form-group">
<view class="title">是否参会</view>
<button class="cu-btn round bg-blue" @click="addHidden"></button>
</view>
<yk-authpup ref="authpup" type="top" @changeAuth="$noMultipleClicks(editLocation)" :permissionID="permissionID"></yk-authpup>
</view>
</template>
<script>
import {
basePath,loginUser
} from '@/common/tool.js';
import ykAuthpup from "@/components/yk-authpup/yk-authpup"
export default {
components: {
ykAuthpup
},
data() {
return {
permissionID:'',
SAFETY_MEETING_ID : '',
varList:[],
pd:[],
noClick:true,
ACCIDENTS_NAME:"",
MEETING_TITLE:"",
MEETING_TYPE:"",
MEETING_ADDRESS:"",
HOST_PERSON:"",
MEETING_CONTENT:"",
RECORDER:"",
MEETING_DATE_START:"",
MEETING_DATE_END:"",
livePhotos: [],
signaturePicture: [],
}
},
onLoad(e){
var _this = this;
_this.SAFETY_MEETING_ID=e.id;
_this.getData();
},
methods: {
//
goToEdit(e) {
uni.navigateTo({
url: '/pages/application/basic-info-manage/basic-information/basic-information-edit'
});
},
getData() {
var _this = this;
uni.showLoading({
title: '请稍候'
})
uni.request({
url: basePath + '/app/safetymeeting/goEdit',
method: 'POST',
dataType: 'json',
header:{
'Content-type':'application/x-www-form-urlencoded'
},
data: {
SAFETY_MEETING_ID: _this.SAFETY_MEETING_ID,
CORPINFO_ID:loginUser.CORPINFO_ID,
USER_ID:loginUser.USER_ID,
},
success: (res) => {
if (res.data != null) {
uni.hideLoading();
_this.pd = res.data.pd;
} else {
uni.showToast({
title: res.data.message,
duration: 2000
});
}
}
});
},
addHidden() {
if (this.$refs.showHiddenWindow) {
this.$refs.showHiddenWindow.open();
}
this.creatorList = [{
NAME: loginUser.NAME,
USER_ID: loginUser.USER_ID
}]
this.$refs['showHiddenWindow'].open()
this.showHiddenWindow = true
this.hiddenIsEdit = true
},
chooseImage(type) {
uni.chooseImage({
count: 1, //
success: (res) => {
if (type === 'LIVEPHOTOS' && res.tempFilePaths.length) {
this.livePhotos = res.tempFilePaths[0]; //
} else if (type === 'SIGNATUREPICTURE' && res.tempFilePaths.length) {
this.signaturePicture = res.tempFilePaths[0]; //
}
},
});
},
removeImage(type) {
if (type === 'LIVEPHOTOS') {
this.livePhotos = []; //
} else {
this.signaturePicture = null; // null
}
},
openAuth(permissionID){
this.permissionID = permissionID;
setTimeout(()=>{
this.$refs['authpup'].open();
},200)
},
}
}
</script>
<style>
.dy-card {
background-color: #fff;
border-radius: 10upx;
margin: 30upx;
}
.dy-card-title {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #eee;
min-height: 80upx;
line-height: 80upx;
padding: 0 30upx;
}
.dy-card-content {
padding: 0upx 30upx 30upx;
}
.dy-card-content-item {
margin-top: 20upx;
}
.dy-card-content-item .title {
display: flex;
align-items: center;
}
/* 注释掉未使用的样式 */
/* .dy-card-content-item .title .l {
width: 10upx;
height: 30upx;
border-radius: 20upx;
background-color: #666;
margin-right: 10upx;
} */
.dy-card-content-item .content,
.dy-card-content-item .name text {
background-color: #F1F1F1;
padding: 10upx 14upx;
margin-top: 14upx;
line-height: 1.6;
display: inline-block; /* 如果需要显示为inline-block */
}
.image-upload-container {
position: relative;
padding: 10px;
}
.upload-image {
width: 100%; /* 宽度占满容器,根据需要调整 */
height: auto; /* 高度自适应 */
border-radius: 4px; /* 轻微圆角 */
}
.image-preview {
position: relative;
width: 90px; /* 根据需要调整 */
height: 90px; /* 根据需要调整 */
margin-right: 10px; /* 与下一张图片的间距 */
display: inline-block; /* 使图片并排显示 */
}
.delete-icon {
position: absolute;
top: -10px; /* 超出图片范围的一部分,根据需要调整 */
right: -10px; /* 超出图片范围的一部分,根据需要调整 */
background-color: #ff4949; /* 您的红色背景 */
width: 20px; /* 删除图标的大小,根据实际情况调整 */
height: 20px;
border-radius: 10px; /* 圆形 */
display: flex;
align-items: center;
justify-content: center;
}
.delete-icon text {
color: white; /* 图标颜色为白色 */
font-size: 14px; /* 图标大小,根据需要调整 */
}
</style>

View File

@ -80,6 +80,7 @@
<text>工作安排</text>
</view>
</navigator>
<navigator class="home-apps-item" hover-class="none"
url="/pages/basics/risk-distribution/risk-distribution">
<view class="home-apps-item-img">
@ -109,7 +110,6 @@
<text>高危作业</text>
</view>
</navigator>
<navigator class="home-apps-item" hover-class="none" url="/pages/application/key-project-management/index/index">
<view class="home-apps-item-img">
<image src="../../static/icon-apps/home-zdgcgl.jpg" mode=""></image>
@ -119,8 +119,7 @@
</view>
<view v-if="keyProjectManagement" class="cu-tag badge">{{ keyProjectManagement }}</view>
</navigator>
<navigator class="home-apps-item" hover-class="none" url="/pages/application/commitment"
v-show="premission.commitment">
<navigator class="home-apps-item" hover-class="none" url="/pages/application/commitment">
<view class="home-apps-item-img">
<image src="../../static/icon-apps/home-cns.png" mode=""></image>
</view>
@ -137,7 +136,8 @@
<text>学习园地</text>
</view>
</navigator>
</view>
<view class="home-apps-list">
<navigator class="home-apps-item" hover-class="none" url="/pages/application/safety-environmental-inspection/home">
<view class="home-apps-item-img">
@ -158,6 +158,15 @@
<text>设备巡检</text>
</view>
</navigator>
<navigator class="home-apps-item" hover-class="none"
url="/pages/application/safetymeeting/home">
<view class="home-apps-item-img">
<image src="../../static/icon-apps/home-risk.png" mode=""></image>
</view>
<view class="text">
<text>安全例会</text>
</view>
</navigator>
<!-- <navigator class="home-apps-item" hover-class="none" url="/pages/application/onlinexxks/face/index">
<view class="home-apps-item-img">
<image src="../../static/icon-apps/home-study.png" mode=""></image>