提交代码

main
姜玉琦 2023-09-17 02:08:35 +08:00
parent 20ea41c983
commit 3f0641164d
51 changed files with 6584 additions and 264 deletions

View File

@ -1,187 +0,0 @@
// pages/components/curve-echarts/index.js
import * as echarts from '../../../ec-canvas/echarts'
Component({
/**
* 组件的属性列表
*/
properties: {
chartId:{
type: String
},
chartData:{
type: Object
},
height:{
type:String
}
},
observers: {
chartData: function (val) {
this.initChart()
},
},
/**
* 组件的初始数据
*/
data: {
ec: {
lazyLoad: true
},
chart:undefined,
},
lifetimes: {
created: function(){
//在组件实例刚刚被创建时执行,注意此时不能调用 setData
},
attached: function () {
//在组件实例进入页面节点树时执行
},
ready: function () {
// 在组件在视图层布局完成后执行
this.initChart();
},
detached: function () {
// 在组件实例被从页面节点树移除时执行
},
},
/**
* 组件的方法列表
*/
methods: {
initChart(){
var id ='#' + this.data.chartId;
this.component = this.selectComponent(id);
this.component.init((canvas, width, height, dpr) => {
let chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
})
chart.setOption(this.getData());
return chart;
})
},
getData() {
let that=this
var data = this.data.chartData
var legend={}
var xAxis={}
var series=[]
if(data.lineData != undefined) {
for(let i=0;i<data.lineData.length;i++) {
series.push({
name: data.legend[i] ,
type: 'line',
smooth: true ,// 将折线图变为波浪线图展示
symbol: "circle",
symbolSize: 5,
showSymbol: false,
lineStyle: {
normal: {
width: 2,
},
},
itemStyle: {
normal: {
color: data.color[i],
borderWidth: 5,
},
},
data: data.lineData[i]
})
}
}
var unit = ''
if(data.unit){
unit = '单位:'+data.unit
}
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
lineStyle: {
color: "#ccc",
},
},
},
legend: {
// type: 'plain', // 设置为plain
icon:'rect',
itemWidth: 10,
itemHeight: 10,
itemGap: 6,
data: data.legend,
top: -5,
textStyle: {
fontSize: 10,
color: "#6d82bd",
},
},
grid: {
// top: '10%', // 可以设置为百分比或像素值
bottom: '40%',
left: '18%',
// right: '10%'
},
xAxis: {
type: 'category',
data: data.date,
axisTick: {
show: false
},
axisLine: {
//坐标轴轴线相关设置。数学上的x轴
show: false,
lineStyle: {
color: "#23283e",
type: "dashed",
},
},
axisLabel: {
color: '#6d82bd',
rotate: 60, // 旋转角度
margin: 5 // 偏移量
}
},
yAxis: {
name: unit, // 设置y轴的单位
type: "value",
axisLine: {
//坐标轴轴线相关设置。数学上的x轴
show: false,
lineStyle: {
color: "#23283e",
type: "dashed",
},
},
axisTick: {
show: false
},
axisLabel: {
color: '#008ffd', // y轴文字颜色为蓝色
},
nameTextStyle: {
fontSize: 10, // 设置单位文字的大小
fontWeight: 'bold', // 设置单位文字的粗细
color:'#fff'
},
splitLine: {
show: true,
lineStyle: {
color: "#3d414e",
type: "solid",
},
},
},
series,
};
return option;
}
}
})

View File

@ -1,4 +0,0 @@
{
"component": true,
"usingComponents": {}
}

View File

@ -1,5 +0,0 @@
<!--pages/components/curve-echarts/index.wxml-->
<!-- curve-echarts数据图 -->
<view style="width: 100%;height: 600rpx;">
<ec-canvas id="{{ chartId }}" ec="{{ ec }} " ></ec-canvas>
</view>

View File

@ -1 +0,0 @@
/* pages/components/curve-echarts/index.wxss */

View File

@ -56,7 +56,7 @@
position: relative;
}
.in-delete{
position: absolute;
float: right;
z-index: 5;
height: 50rpx;
background: rgba(0,0,0,0.7);
@ -65,8 +65,8 @@
border-radius: 50%;
text-align: center;
line-height: 50rpx;
right: -15rpx;
top: -20rpx;
margin-right: -15rpx;
margin-top: 0rpx;
}
@ -115,6 +115,11 @@
background: #ff0000;
color: #ffffff;
}
.files{
word-break: break-all;
margin-bottom: 30rpx;
}

View File

@ -35,34 +35,18 @@
</view>
</van-col>
</van-row>
<!--<view class="left_manage_max">
<view class="left_manage_min">
<view class="left_manage">
<image src="/images/set.png" class="left_icon"></image>
<text class="left_pro">账号管理</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
<view class="left_manage_min">
<view class="left_manage">
<image src="/images/set.png" class="left_icon"></image>
<text class="left_pro">账号管理</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
</view>-->
<view class="left_manage_min">
<view class="left_manage" bindtap="XGMM">
<view class="left_password">
修改密码
</view>
<image src="/images/set.png" class="left_icon"></image>
<text class="left_password">修改密码</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
<view class="left_manage_min">
<view class="left_manage" bindtap="TCDL">
<view class="left_sign">
退出登录
</view>
<image src="/images/set.png" class="left_icon"></image>
<text class="left_sign">退出登录</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
</view>

View File

@ -0,0 +1,556 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
deptName:"",
userId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
procInsId:"",
infoData:{},
procDefName:"",
deployId:"",
activeName:"",
flowNodeList:[],
flowNodes:[],
comment:"",
taskId:"",
procInsId:"",
backShow:false,
targetKey:"",
targetKeyList:[],
taskName:"",
passState:true,
backName:"",
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {deployId,procInsId,procDefName,deptName,nickName,taskId,taskName,projectName} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName,
procInsId,
procDefName,
deployId,
deptName,
nickName,
taskId,
taskName,
userId:res.data.userId,
loginName:res.data.loginName,
})
this.initTargetKeyList();
this.getFlowNodes();
this.getFlowRecordList();
this.getFormDatasList();
}
})
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
if(this.data.passState){
if(flowNodeList[i].name==this.data.taskName){
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'transact'});
this.setData({
passState:false
})
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'pass'});
}
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'none'});
}
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+that.data.deployId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name,state:'pass'});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//查询审批日志
getFlowRecordList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findCommentByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowRecordList:res.data
})
let list=[];
res.data.forEach(item=>{
if(item.deleteReason){
item.deleteReason=that.getDeleteReason(item.deleteReason);
}
if(item.duration){
item.duration=that.getDurationDate(item.duration);
}
list.push(item);
})
that.setData({
flowRecordList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//查询审批表单参数
getFormDatasList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findFormDatasByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
infoData:res.data
})
}else{
app.toast(res.msg);
}
}
})
},
//初始化退回节点
initTargetKeyList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/returnList',
method:"post",
data:{
taskId:that.data.taskId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
let list = [{id:'',text:''}];
res.data.forEach(item=>{
list.push({id:item.id,text:item.name})
})
that.setData({
targetKeyList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//退回
onBack(){
if(!this.data.backShow){
this.setData({
backShow:true
})
app.toast("请选择退回节点!");
return
}
this.setData({
loadShow:true
})
let that = this
let {taskId,procInsId,projectId,userId,loginName,comment,targetKey} = that.data;
//数据效验
if(projectId==""||loginName==""||taskId==""||userId==""||procInsId==""){
app.toast("数据异常,请刷新页面重试!")
that.setData({
loadShow:false
})
return;
}
if(comment==""){
app.toast("请填写审批意见!")
that.setData({
loadShow:false
})
return;
}
if(targetKey==""){
app.toast("请选择退回节点!")
that.setData({
loadShow:false
});
return;
}
let params = {
taskId,
targetKey,
comment,
userId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认审批退回至'+that.data.backName+'',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/return',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("退回申请成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//通过
onPass(){
this.setData({
loadShow:true
})
let that = this
let {taskId,procInsId,projectId,userId,loginName,comment} = that.data;
//数据效验
if(projectId==""||loginName==""||taskId==""||userId==""||procInsId==""){
app.toast("数据异常,请刷新页面重试!")
that.setData({
loadShow:false
})
return;
}
if(comment==""){
app.toast("请填写审批意见!")
that.setData({
loadShow:false
})
return;
}
let params = {
taskId,
instanceId:procInsId,
comment,
userId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认审批通过?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/complete',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("审批通过成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//通过
onReject(){
this.setData({
loadShow:true
})
let that = this
let {taskId,procInsId,projectId,userId,loginName,comment} = that.data;
//数据效验
if(projectId==""||loginName==""||taskId==""||userId==""||procInsId==""){
app.toast("数据异常,请刷新页面重试!")
that.setData({
loadShow:false
})
return;
}
if(comment==""){
app.toast("请填写审批意见!")
that.setData({
loadShow:false
})
return;
}
let params = {
taskId,
instanceId:procInsId,
comment,
userId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认审批驳回?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/reject',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("驳回申请成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//申请说明
commentInput: function (options) {
this.data.comment = options.detail.value;
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
getDeleteReason(val){
val = val.replace("Change activity to ","");
let flowRecordList = this.data.flowRecordList;
for(let i=0;i<flowRecordList.length;i++){
if(flowRecordList[i].taskDefKey==val){
return "驳回至"+flowRecordList[i].taskName;
}
}
},
getDurationDate(val){
// 计算出相差天数
let days = Math.floor(val / (24 * 3600 * 1000))
// 计算出小时数
let leave1 = val % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000))
// 计算相差分钟数
let leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000))
// 计算相差秒数
let leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
let seconds = Math.round(leave3 / 1000)
if(days>0){
if(days<10) days = "0"+days;
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(hours>0){
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(minutes>0){
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return minutes + '分钟' + seconds + '秒';
}
if(seconds>0){
if(seconds<10) seconds = "0"+seconds;
return seconds + '秒';
}
},
//选择退回节点
onSelectTargetKey(e){
this.setData({
targetKey:e.detail.id,
backName:e.detail.text
})
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../await/index',
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,167 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">审批流程申请</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number {{item.state}}">{{item.name}}</text>
</view>
</van-collapse-item>
<van-collapse-item title="审批日志" name="2">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{flowRecordList}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{(flowRecordList.length-index) < 9 ?'0'+(flowRecordList.length-index):(flowRecordList.length-index)}}</view>
<view class="module_title module_title_flex inspect_list_title_text">{{item.taskName}}{{item.commentResult}}
<text wx:if="{{item.commentResult=='通过'}}" class="timeline_for_state_1 color_green">{{item.commentResult}}</text>
<text wx:if="{{item.commentResult=='驳回'}}" class="timeline_for_state_2 color_purple">{{item.commentResult}}</text>
</view>
</view>
</view>
<view class="inspect_list_info gk_open_con">
<view wx:if="{{item.assigneeName}}"><image src="/images/lw_3.png"></image>办理用户:<text>{{item.assigneeName}}</text></view>
<view wx:if="{{item.assigneeName}}"><image src="/images/s_1.png"></image>办理单位:<text class="color_blue">{{item.deptName}}</text></view>
<view wx:if="{{item.candidate}}"><image src="/images/s_2.png"></image>候选办理:<text>{{item.candidate}}</text></view>
<view wx:if="{{item.deleteReason}}"><image src="/images/s_18.png"></image>驳回节点:<text>{{item.deleteReason}}</text></view>
<view><image src="/images/s_6.png"></image>接收时间:<text>{{item.startTime}}</text></view>
<view wx:if="{{item.endTime}}"><image src="/images/lw_8.png"></image>处理时间:<text>{{item.endTime}}</text></view>
<view wx:if="{{item.duration}}"><image src="/images/img_11.png"></image>处理耗时:<text>{{item.duration}}</text></view>
<view wx:if="{{item.message}}"><image src="/images/s_7.png"></image>处理意见:<text>{{item.message}}</text></view>
</view>
</view>
</view>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content color_blue">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起用户</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{procDefName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">申请日期</view>
<view class="inspect_info_content">
{{infoData.date}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假时间</view>
<view class="problem_list_info_con color_blue">
{{infoData.beginDate}}<text style="padding: 0 20rpx;">至</text>{{infoData.endDate}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假事由</view>
<view class="inspect_info_content">
{{infoData.remark}}
</view>
</view>
<view class="safety_inspect_title module_title_flex">
<text class="color_orange">共请假{{' '+infoData.day+' '}}天</text>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批意见</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写审批意见500字内"
placeholder-style="color:#6777aa;" maxlength="500" bindinput="commentInput"/>
</view>
</view>
<view class="inspect_info_list" wx:if="{{backShow}}">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">退回节点</view>
<view class="inspect_info_content">
<voucher-select columns="{{targetKeyList}}" placeholder="请选择退回节点" bindchange="onSelectTargetKey"></voucher-select>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_warning" bindtap="onBack">审批退回</view>
<view class="problem_submit_to_btn problem_submit_to_delete" bindtap="onReject">审批驳回</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="onPass">审批通过</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,89 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}
.gk_open_con view{
padding: 10rpx 0;
width: 100%;
}
.gk_open_con image{
width: 30rpx;
height: 30rpx;
margin-right: 5rpx;
position: relative;
top: 5rpx;
}
.pass{
background-color: #388a38;
}
.transact{
background-color: #8e6424;
}

View File

@ -0,0 +1,572 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
deptName:"",
userId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
procInsId:"",
infoData:{},
procDefName:"",
deployId:"",
activeName:"",
flowNodeList:[],
flowNodes:[],
fileNames:[],
fileUrls:[],
comment:"",
taskId:"",
procInsId:"",
backShow:false,
targetKey:"",
targetKeyList:[],
taskName:"",
passState:true,
backName:"",
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {deployId,procInsId,procDefName,deptName,nickName,taskId,taskName,projectName} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName,
procInsId,
procDefName,
deployId,
deptName,
nickName,
taskId,
taskName,
userId:res.data.userId,
loginName:res.data.loginName,
})
this.initTargetKeyList();
this.getFlowNodes();
this.getFlowRecordList();
this.getFormDatasList();
}
})
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
if(this.data.passState){
if(flowNodeList[i].name==this.data.taskName){
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'transact'});
this.setData({
passState:false
})
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'pass'});
}
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'none'});
}
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+that.data.deployId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name,state:'pass'});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//查询审批日志
getFlowRecordList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findCommentByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowRecordList:res.data
})
let list=[];
res.data.forEach(item=>{
if(item.deleteReason){
item.deleteReason=that.getDeleteReason(item.deleteReason);
}
if(item.duration){
item.duration=that.getDurationDate(item.duration);
}
list.push(item);
})
that.setData({
flowRecordList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//查询审批表单参数
getFormDatasList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findFormDatasByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
infoData:res.data
})
let fileNames = [];
let fileUrls = [];
//判断附件
if(res.data.files){
res.data.files.split(',').forEach(element => {
let it = element.split('/');
fileNames.push(it[it.length-1]);
fileUrls.push(element);
});
}
that.setData({
fileNames,
fileUrls
})
}else{
app.toast(res.msg);
}
}
})
},
//初始化退回节点
initTargetKeyList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/returnList',
method:"post",
data:{
taskId:that.data.taskId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
let list = [{id:'',text:''}];
res.data.forEach(item=>{
list.push({id:item.id,text:item.name})
})
that.setData({
targetKeyList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//退回
onBack(){
if(!this.data.backShow){
this.setData({
backShow:true
})
app.toast("请选择退回节点!");
return
}
this.setData({
loadShow:true
})
let that = this
let {taskId,procInsId,projectId,userId,loginName,comment,targetKey} = that.data;
//数据效验
if(projectId==""||loginName==""||taskId==""||userId==""||procInsId==""){
app.toast("数据异常,请刷新页面重试!")
that.setData({
loadShow:false
})
return;
}
if(comment==""){
app.toast("请填写审批意见!")
that.setData({
loadShow:false
})
return;
}
if(targetKey==""){
app.toast("请选择退回节点!")
that.setData({
loadShow:false
});
return;
}
let params = {
taskId,
targetKey,
comment,
userId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认审批退回至'+that.data.backName+'',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/return',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("退回申请成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//通过
onPass(){
this.setData({
loadShow:true
})
let that = this
let {taskId,procInsId,projectId,userId,loginName,comment} = that.data;
//数据效验
if(projectId==""||loginName==""||taskId==""||userId==""||procInsId==""){
app.toast("数据异常,请刷新页面重试!")
that.setData({
loadShow:false
})
return;
}
if(comment==""){
app.toast("请填写审批意见!")
that.setData({
loadShow:false
})
return;
}
let params = {
taskId,
instanceId:procInsId,
comment,
userId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认审批通过?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/complete',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("审批通过成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//通过
onReject(){
this.setData({
loadShow:true
})
let that = this
let {taskId,procInsId,projectId,userId,loginName,comment} = that.data;
//数据效验
if(projectId==""||loginName==""||taskId==""||userId==""||procInsId==""){
app.toast("数据异常,请刷新页面重试!")
that.setData({
loadShow:false
})
return;
}
if(comment==""){
app.toast("请填写审批意见!")
that.setData({
loadShow:false
})
return;
}
let params = {
taskId,
instanceId:procInsId,
comment,
userId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认审批驳回?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/reject',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("驳回申请成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//申请说明
commentInput: function (options) {
this.data.comment = options.detail.value;
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
getDeleteReason(val){
val = val.replace("Change activity to ","");
let flowRecordList = this.data.flowRecordList;
for(let i=0;i<flowRecordList.length;i++){
if(flowRecordList[i].taskDefKey==val){
return "驳回至"+flowRecordList[i].taskName;
}
}
},
getDurationDate(val){
// 计算出相差天数
let days = Math.floor(val / (24 * 3600 * 1000))
// 计算出小时数
let leave1 = val % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000))
// 计算相差分钟数
let leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000))
// 计算相差秒数
let leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
let seconds = Math.round(leave3 / 1000)
if(days>0){
if(days<10) days = "0"+days;
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(hours>0){
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(minutes>0){
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return minutes + '分钟' + seconds + '秒';
}
if(seconds>0){
if(seconds<10) seconds = "0"+seconds;
return seconds + '秒';
}
},
//选择退回节点
onSelectTargetKey(e){
this.setData({
targetKey:e.detail.id,
backName:e.detail.text
})
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../await/index',
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,160 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">审批流程申请</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number {{item.state}}">{{item.name}}</text>
</view>
</van-collapse-item>
<van-collapse-item title="审批日志" name="2">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{flowRecordList}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{(flowRecordList.length-index) < 9 ?'0'+(flowRecordList.length-index):(flowRecordList.length-index)}}</view>
<view class="module_title module_title_flex inspect_list_title_text">{{item.taskName}}{{item.commentResult}}
<text wx:if="{{item.commentResult=='通过'}}" class="timeline_for_state_1 color_green">{{item.commentResult}}</text>
<text wx:if="{{item.commentResult=='驳回'}}" class="timeline_for_state_2 color_purple">{{item.commentResult}}</text>
</view>
</view>
</view>
<view class="inspect_list_info gk_open_con">
<view wx:if="{{item.assigneeName}}"><image src="/images/lw_3.png"></image>办理用户:<text>{{item.assigneeName}}</text></view>
<view wx:if="{{item.assigneeName}}"><image src="/images/s_1.png"></image>办理单位:<text class="color_blue">{{item.deptName}}</text></view>
<view wx:if="{{item.candidate}}"><image src="/images/s_2.png"></image>候选办理:<text>{{item.candidate}}</text></view>
<view wx:if="{{item.deleteReason}}"><image src="/images/s_18.png"></image>驳回节点:<text>{{item.deleteReason}}</text></view>
<view><image src="/images/s_6.png"></image>接收时间:<text>{{item.startTime}}</text></view>
<view wx:if="{{item.endTime}}"><image src="/images/lw_8.png"></image>处理时间:<text>{{item.endTime}}</text></view>
<view wx:if="{{item.duration}}"><image src="/images/img_11.png"></image>处理耗时:<text>{{item.duration}}</text></view>
<view wx:if="{{item.message}}"><image src="/images/s_7.png"></image>处理意见:<text>{{item.message}}</text></view>
</view>
</view>
</view>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content color_blue">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起用户</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{procDefName}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批内容</view>
<view class="problem_list_info_con color_blue">
<view class="files" wx:for="{{fileNames}}" wx:key="index">
<text data-index="{{index}}" style="word-wrap: break-word;">{{item}}</text>
</view>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">申请说明</view>
<view class="inspect_info_content">
{{infoData.remark}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批意见</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写审批意见500字内"
placeholder-style="color:#6777aa;" maxlength="500" bindinput="commentInput"/>
</view>
</view>
<view class="inspect_info_list" wx:if="{{backShow}}">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">退回节点</view>
<view class="inspect_info_content">
<voucher-select columns="{{targetKeyList}}" placeholder="请选择退回节点" bindchange="onSelectTargetKey"></voucher-select>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_warning" bindtap="onBack">审批退回</view>
<view class="problem_submit_to_btn problem_submit_to_delete" bindtap="onReject">审批驳回</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="onPass">审批通过</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,89 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}
.gk_open_con view{
padding: 10rpx 0;
width: 100%;
}
.gk_open_con image{
width: 30rpx;
height: 30rpx;
margin-right: 5rpx;
position: relative;
top: 5rpx;
}
.pass{
background-color: #388a38;
}
.transact{
background-color: #8e6424;
}

View File

@ -0,0 +1,180 @@
// pageage/safetyManagement/securityCheckGR/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
deptId:"",
userId:"",
loginName:"",
projectId:"",
minRoleId:"",
projectData:{},
initData: {},
show:false,
listData:[],
request:app.globalData.reqUrl
},
getInfo(e){
let {deployId,procInsId,taskId,taskName,procDefKey,startDeptName,startUserName,procDefName,businessKeyName} = e.currentTarget.dataset.set
if(taskName=="提交申请"){
if(procDefKey=="flow_xmglzdl_qjspb"){
wx.redirectTo({
url: `../editLeaveTask/index?deployId=${deployId}&procInsId=${procInsId}&nickName=${startUserName}&deptName=${startDeptName}&procDefName=${procDefName}&taskId=${taskId}&taskName=${taskName}&projectName=${businessKeyName}&ret=await`,
})
}else{
wx.redirectTo({
url: `../editTask/index?deployId=${deployId}&procInsId=${procInsId}&nickName=${startUserName}&deptName=${startDeptName}&procDefName=${procDefName}&taskId=${taskId}&taskName=${taskName}&projectName=${businessKeyName}&ret=await`,
})
}
}else{
//根据不同业务跳转不同表单
if(procDefKey=="flow_xmglzdl_qjspb"){
wx.redirectTo({
url: `../approveLeaveTask/index?deployId=${deployId}&procInsId=${procInsId}&nickName=${startUserName}&deptName=${startDeptName}&procDefName=${procDefName}&taskId=${taskId}&taskName=${taskName}&projectName=${businessKeyName}`,
})
}else{
wx.redirectTo({
url: `../approveTask/index?deployId=${deployId}&procInsId=${procInsId}&nickName=${startUserName}&deptName=${startDeptName}&procDefName=${procDefName}&taskId=${taskId}&taskName=${taskName}&projectName=${businessKeyName}`,
})
}
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
loginName:res.data.loginName,
userId:res.data.userId,
projectId:app.globalData.projectId,
minRoleId:res.data.minRoleId,
deptId:res.data.deptId,
initData:{text:app.globalData.projectName,id:app.globalData.projectId}
})
this.getListData(res.data.loginName,res.data.userId,res.data.deptId,res.data.minRoleId);
}
})
},
/**
* 查询项目举牌验收数据
*/
getListData(loginName,userId,deptId,minRoleId) {
var that = this;
//businessKey注解掉可以跨项目审批
let param = {
//"businessKey":this.data.projectId,
"nowRole":minRoleId,
"nowDept":deptId,
"nowUserName":loginName,
"nowUser":userId
}
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/myAwaitFlowTaskList',
data:param,
method: "post",
success: function (res) {
res = res.data;
if(res.code=="200"){
that.setData({
listData:res.rows
})
}else{
app.toast(res.msg);
}
}
});
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../../gengduogongneng/gengduogongneng',
})
},
goFQLC:function(){
wx.redirectTo({
url: '../myFlowDefinition/index',
})
},
goWDLC:function(){
wx.redirectTo({
url: '../myProcessIns/index',
})
},
goBLWC:function(){
wx.redirectTo({
url: '../finished/index',
})
},
//项目切换 返回值
onProjectSelect(e){
let projectId = e.detail.id;
let projectName = e.detail.text;
app.globalData.projectId = projectId;
app.globalData.projectName = projectName;
this.onLoad();
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,7 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index" ,
"van-popup": "@vant/weapp/popup/index"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,72 @@
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">工程审批管理</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<project-select init="{{initData}}" bindchange="onProjectSelect"></project-select>
<view class="gd_max" style="margin-top: 20rpx;">
<van-row class="demo clearfix">
<van-col span="8">
<view class="gd_min" bindtap="goFQLC">
<image src="http://fileimg.makalu.cc/7e859556435e41ecb48664347c4b9c86.png"></image>
<view>发起流程</view>
</view>
</van-col>
<van-col span="8">
<view class="gd_min" bindtap="goWDSQ">
<image src="http://fileimg.makalu.cc/1b250521a8a848dcb9a6fdd511ac908d.png"></image>
<view>我发起的</view>
</view>
</van-col>
<van-col span="8">
<view class="gd_min" bindtap="goBLWC">
<image src="http://fileimg.makalu.cc/9ffe8962c0e24693b337bc0bdf0ab71c.png"></image>
<view>办理完成</view>
</view>
</van-col>
</van-row>
</view>
<view class="inspect_max">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{listData}}" wx:key="index" data-set="{{item}}" bindtap="getInfo">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{index < 9 ?'0'+(index+1):(index+1)}}</view>
<view class="module_title module_title_flex inspect_list_title_text"><text class="color_orange">{{item.taskName}}</text>
<text wx:if="{{item.taskName!='提交申请'}}" class="timeline_for_state_1 color_green" style="font-weight: 800;">待审批</text>
<text wx:if="{{item.taskName=='提交申请'}}" class="timeline_for_state_2">审批驳回</text>
</view>
</view>
</view>
<view class="inspect_list_info">
<view class="inspect_list_info_data_prop color_blue">审批事项:{{item.procDefName}}</view>
<view class="inspect_list_info_data_prop color_purple">接收时间:{{item.createTime}}</view>
<view class="inspect_list_info_data_prop">申请用户:{{item.startUserName}}</view>
<view class="inspect_list_info_data_prop">申请单位:{{item.startDeptName}}</view>
</view>
</view>
</view>
</view>
<view wx:if="{{listData.length==0}}">
<view style="padding-top: 70px;text-align: -webkit-center;">
<image src="../../../images/nodata.png" style="width: 130px;height: 105px;"></image>
<view style="color: #a5abbb;">暂无数据</view>
</view>
</view>
</view>
</view>

View File

@ -0,0 +1,16 @@
/* pageage/project_checking_list/project_checking_list.wxss */
.gd_max{
padding:10rpx 50rpx 0;
}
.gd_min{
padding: 30rpx 0;
text-align: center;
}
.gd_min image{
width: 150rpx;
height: 150rpx;
}
.gd_min view{
padding: 10rpx;
color: #89a4eb;
}

View File

@ -0,0 +1,514 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
deptName:"",
userId:"",
myUserId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
procInsId:"",
infoData:{},
procDefName:"",
deployId:"",
activeName:"",
flowNodeList:[],
flowNodes:[],
taskId:"",
procInsId:"",
taskName:"",
passState:true,
backName:"",
stopShow:false,
deleteShow:false,
revocationShow:false,
finishTime:"",
ret:"",
comment:"",
stopBtnShow:false
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {deployId,procInsId,procDefName,deptName,nickName,taskId,taskName,projectName,userId,finishTime,ret} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName,
procInsId,
procDefName,
deployId,
deptName,
nickName,
taskId,
taskName,
userId,
finishTime,
ret,
myUserId:res.data.userId,
loginName:res.data.loginName,
})
this.getFlowNodes();
this.getFlowRecordList();
this.getFormDatasList();
}
})
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
if(this.data.passState){
if(flowNodeList[i].name==this.data.taskName){
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'transact'});
this.setData({
passState:false
})
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'pass'});
}
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'none'});
}
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+that.data.deployId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name,state:'pass'});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//查询审批日志
getFlowRecordList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findCommentByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowRecordList:res.data
})
let list=[];
res.data.forEach(item=>{
if(item.deleteReason){
item.deleteReason=that.getDeleteReason(item.deleteReason);
}
if(item.duration){
item.duration=that.getDurationDate(item.duration);
}
list.push(item);
})
that.setData({
flowRecordList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//查询审批表单参数
getFormDatasList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findFormDatasByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
infoData:res.data,
stopShow:!that.data.finishTime && that.data.userId==that.myUserId,
deleteShow:!that.data.finishTime && that.data.userId==that.myUserId,
revocationShow:!that.data.finishTime
})
}else{
app.toast(res.msg);
}
}
})
},
//退回
onStop(){
if(!this.data.stopBtnShow){
app.toast("请填写终止原因!")
this.setData({
stopBtnShow:true
})
return;
}else{
if(this.data.comment==""){
app.toast("请填写终止原因!")
this.setData({
stopBtnShow:true
})
return;
}
}
this.setData({
loadShow:true
})
let that = this
let params = {
instanceId:this.data.procInsId,
comment:this.data.comment,
userId:this.data.myUserId,
taskId:this.data.taskId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否终止当前流程申请?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/stopProcess',
method:"POST",
data:params,
header: {
"Username": that.data.loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res = res.data
if(res.code == 200){
app.toast("终止流程申请成功!")
if(that.data.ret=="finished"){
setTimeout(()=>{
wx.redirectTo({
url: '../finished/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//通过
onDelete(){
this.setData({
loadShow:true
})
let that = this
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认删除流程申请?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/delete/'+that.data.procInsId,
method:"delete",
data:{},
header: {
"Username": that.data.loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res = res.data
if(res.code == 200){
app.toast("删除流程申请成功!")
if(that.data.ret=="finished"){
setTimeout(()=>{
wx.redirectTo({
url: '../finished/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//撤回
onRevocation(){
this.setData({
loadShow:true
})
let that = this
let params = {
procInsId: this.data.procInsId,
instanceId: this.data.procInsId,
taskId:this.data.taskId,
userId:this.data.startUserId,
assignee:this.data.nickName
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认撤回当前任务流程?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/revokeProcess',
method:"POST",
data:params,
header: {
"Username": that.data.loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("撤回流程申请成功!")
if(that.data.ret=="finished"){
setTimeout(()=>{
wx.redirectTo({
url: '../finished/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
getDeleteReason(val){
val = val.replace("Change activity to ","");
let flowRecordList = this.data.flowRecordList;
for(let i=0;i<flowRecordList.length;i++){
if(flowRecordList[i].taskDefKey==val){
return "驳回至"+flowRecordList[i].taskName;
}
}
},
//终止原因
commentblur: function (options) {
this.data.comment = options.detail.value;
},
getDurationDate(val){
// 计算出相差天数
let days = Math.floor(val / (24 * 3600 * 1000))
// 计算出小时数
let leave1 = val % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000))
// 计算相差分钟数
let leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000))
// 计算相差秒数
let leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
let seconds = Math.round(leave3 / 1000)
if(days>0){
if(days<10) days = "0"+days;
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(hours>0){
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(minutes>0){
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return minutes + '分钟' + seconds + '秒';
}
if(seconds>0){
if(seconds<10) seconds = "0"+seconds;
return seconds + '秒';
}
},
//选择退回节点
onSelectTargetKey(e){
this.setData({
targetKey:e.detail.id,
backName:e.detail.name
})
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
if(this.data.ret=="finished"){
wx.redirectTo({
url: '../finished/index',
})
}else{
wx.redirectTo({
url: '../myProcessIns/index',
})
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,161 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">流程申请详情</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number {{item.state}}">{{item.name}}</text>
</view>
</van-collapse-item>
<van-collapse-item title="审批日志" name="2">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{flowRecordList}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{(flowRecordList.length-index) < 9 ?'0'+(flowRecordList.length-index):(flowRecordList.length-index)}}</view>
<view class="module_title module_title_flex inspect_list_title_text">{{item.taskName}}{{item.commentResult}}
<text wx:if="{{item.commentResult=='通过'}}" class="timeline_for_state_1 color_green">{{item.commentResult}}</text>
<text wx:if="{{item.commentResult=='驳回'}}" class="timeline_for_state_2 color_purple">{{item.commentResult}}</text>
</view>
</view>
</view>
<view class="inspect_list_info gk_open_con">
<view wx:if="{{item.assigneeName}}"><image src="/images/lw_3.png"></image>办理用户:<text>{{item.assigneeName}}</text></view>
<view wx:if="{{item.assigneeName}}"><image src="/images/s_1.png"></image>办理单位:<text class="color_blue">{{item.deptName}}</text></view>
<view wx:if="{{item.candidate}}"><image src="/images/s_2.png"></image>候选办理:<text>{{item.candidate}}</text></view>
<view wx:if="{{item.deleteReason}}"><image src="/images/s_18.png"></image>驳回节点:<text>{{item.deleteReason}}</text></view>
<view><image src="/images/s_6.png"></image>接收时间:<text>{{item.startTime}}</text></view>
<view wx:if="{{item.endTime}}"><image src="/images/lw_8.png"></image>处理时间:<text>{{item.endTime}}</text></view>
<view wx:if="{{item.duration}}"><image src="/images/img_11.png"></image>处理耗时:<text>{{item.duration}}</text></view>
<view wx:if="{{item.message}}"><image src="/images/s_7.png"></image>处理意见:<text>{{item.message}}</text></view>
</view>
</view>
</view>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content color_blue">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起用户</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{procDefName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">申请日期</view>
<view class="inspect_info_content">
{{infoData.date}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假时间</view>
<view class="problem_list_info_con color_blue">
{{infoData.beginDate}}<text style="padding: 0 20rpx;">至</text>{{infoData.endDate}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假事由</view>
<view class="inspect_info_content">
{{infoData.remark}}
</view>
</view>
<view class="safety_inspect_title module_title_flex">
<text class="color_orange">共请假{{' '+infoData.day+' '}}天</text>
</view>
<view class="inspect_info_list" wx:if="{{stopBtnShow}}">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">终止原因</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写终止原因500字内"
placeholder-style="color:#6777aa;" maxlength="500" bindinput="commentblur"/>
</view>
</view>
</view>
<view class="problem_submit_to">
<view wx:if="{{stopShow}}" class="problem_submit_to_btn problem_submit_to_warning" bindtap="onStop">终止</view>
<view wx:if="{{false}}" class="problem_submit_to_btn problem_submit_to_delete" bindtap="onDelete">删除</view>
<view wx:if="{{revocationShow}}" class="problem_submit_to_btn problem_submit_to_save" bindtap="onRevocation">撤回</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,89 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}
.gk_open_con view{
padding: 10rpx 0;
width: 100%;
}
.gk_open_con image{
width: 30rpx;
height: 30rpx;
margin-right: 5rpx;
position: relative;
top: 5rpx;
}
.pass{
background-color: #388a38;
}
.transact{
background-color: #8e6424;
}

View File

@ -0,0 +1,530 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
deptName:"",
userId:"",
myUserId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
procInsId:"",
infoData:{},
procDefName:"",
deployId:"",
activeName:"",
flowNodeList:[],
flowNodes:[],
fileNames:[],
fileUrls:[],
taskId:"",
procInsId:"",
taskName:"",
passState:true,
backName:"",
stopShow:false,
deleteShow:false,
revocationShow:false,
finishTime:"",
ret:"",
comment:"",
stopBtnShow:false
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {deployId,procInsId,procDefName,deptName,nickName,taskId,taskName,projectName,userId,finishTime,ret} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName,
procInsId,
procDefName,
deployId,
deptName,
nickName,
taskId,
taskName,
userId,
finishTime,
ret,
myUserId:res.data.userId,
loginName:res.data.loginName,
})
this.getFlowNodes();
this.getFlowRecordList();
this.getFormDatasList();
}
})
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
if(this.data.passState){
if(flowNodeList[i].name==this.data.taskName){
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'transact'});
this.setData({
passState:false
})
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'pass'});
}
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'none'});
}
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+that.data.deployId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name,state:'pass'});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//查询审批日志
getFlowRecordList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findCommentByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowRecordList:res.data
})
let list=[];
res.data.forEach(item=>{
if(item.deleteReason){
item.deleteReason=that.getDeleteReason(item.deleteReason);
}
if(item.duration){
item.duration=that.getDurationDate(item.duration);
}
list.push(item);
})
that.setData({
flowRecordList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//查询审批表单参数
getFormDatasList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findFormDatasByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
infoData:res.data
})
let fileNames = [];
let fileUrls = [];
//判断附件
if(res.data.files){
res.data.files.split(',').forEach(element => {
let it = element.split('/');
fileNames.push(it[it.length-1]);
fileUrls.push(element);
});
}
that.setData({
fileNames,
fileUrls,
stopShow:!that.data.finishTime && that.data.userId==that.myUserId,
deleteShow:!that.data.finishTime && that.data.userId==that.myUserId,
revocationShow:!that.data.finishTime
})
}else{
app.toast(res.msg);
}
}
})
},
//退回
onStop(){
if(!this.data.stopBtnShow){
app.toast("请填写终止原因!")
this.setData({
stopBtnShow:true
})
return;
}else{
if(this.data.comment==""){
app.toast("请填写终止原因!")
this.setData({
stopBtnShow:true
})
return;
}
}
this.setData({
loadShow:true
})
let that = this
let params = {
instanceId:this.data.procInsId,
comment:this.data.comment,
userId:this.data.myUserId,
taskId:this.data.taskId
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否终止当前流程申请?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/stopProcess',
method:"POST",
data:params,
header: {
"Username": that.data.loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res = res.data
if(res.code == 200){
app.toast("终止流程申请成功!")
if(that.data.ret=="finished"){
setTimeout(()=>{
wx.redirectTo({
url: '../finished/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//通过
onDelete(){
this.setData({
loadShow:true
})
let that = this
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认删除流程申请?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/delete/'+that.data.procInsId,
method:"delete",
data:{},
header: {
"Username": that.data.loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res = res.data
if(res.code == 200){
app.toast("删除流程申请成功!")
if(that.data.ret=="finished"){
setTimeout(()=>{
wx.redirectTo({
url: '../finished/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//撤回
onRevocation(){
this.setData({
loadShow:true
})
let that = this
let params = {
procInsId: this.data.procInsId,
instanceId: this.data.procInsId,
taskId:this.data.taskId,
userId:this.data.startUserId,
assignee:this.data.nickName
}
//弹出确认
wx.showModal({
title: '提示',
content: '是否确认撤回当前任务流程?',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/revokeProcess',
method:"POST",
data:params,
header: {
"Username": that.data.loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("撤回流程申请成功!")
if(that.data.ret=="finished"){
setTimeout(()=>{
wx.redirectTo({
url: '../finished/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
getDeleteReason(val){
val = val.replace("Change activity to ","");
let flowRecordList = this.data.flowRecordList;
for(let i=0;i<flowRecordList.length;i++){
if(flowRecordList[i].taskDefKey==val){
return "驳回至"+flowRecordList[i].taskName;
}
}
},
getDurationDate(val){
// 计算出相差天数
let days = Math.floor(val / (24 * 3600 * 1000))
// 计算出小时数
let leave1 = val % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000))
// 计算相差分钟数
let leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000))
// 计算相差秒数
let leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
let seconds = Math.round(leave3 / 1000)
if(days>0){
if(days<10) days = "0"+days;
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(hours>0){
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(minutes>0){
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return minutes + '分钟' + seconds + '秒';
}
if(seconds>0){
if(seconds<10) seconds = "0"+seconds;
return seconds + '秒';
}
},
//选择退回节点
onSelectTargetKey(e){
this.setData({
targetKey:e.detail.id,
backName:e.detail.name
})
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
if(this.data.ret=="finished"){
wx.redirectTo({
url: '../finished/index',
})
}else{
wx.redirectTo({
url: '../myProcessIns/index',
})
}
},
//终止原因
commentblur: function (options) {
this.data.comment = options.detail.value;
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,154 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">流程申请详情</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number {{item.state}}">{{item.name}}</text>
</view>
</van-collapse-item>
<van-collapse-item title="审批日志" name="2">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{flowRecordList}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{(flowRecordList.length-index) < 9 ?'0'+(flowRecordList.length-index):(flowRecordList.length-index)}}</view>
<view class="module_title module_title_flex inspect_list_title_text">{{item.taskName}}{{item.commentResult}}
<text wx:if="{{item.commentResult=='通过'}}" class="timeline_for_state_1 color_green">{{item.commentResult}}</text>
<text wx:if="{{item.commentResult=='驳回'}}" class="timeline_for_state_2 color_purple">{{item.commentResult}}</text>
</view>
</view>
</view>
<view class="inspect_list_info gk_open_con">
<view wx:if="{{item.assigneeName}}"><image src="/images/lw_3.png"></image>办理用户:<text>{{item.assigneeName}}</text></view>
<view wx:if="{{item.assigneeName}}"><image src="/images/s_1.png"></image>办理单位:<text class="color_blue">{{item.deptName}}</text></view>
<view wx:if="{{item.candidate}}"><image src="/images/s_2.png"></image>候选办理:<text>{{item.candidate}}</text></view>
<view wx:if="{{item.deleteReason}}"><image src="/images/s_18.png"></image>驳回节点:<text>{{item.deleteReason}}</text></view>
<view><image src="/images/s_6.png"></image>接收时间:<text>{{item.startTime}}</text></view>
<view wx:if="{{item.endTime}}"><image src="/images/lw_8.png"></image>处理时间:<text>{{item.endTime}}</text></view>
<view wx:if="{{item.duration}}"><image src="/images/img_11.png"></image>处理耗时:<text>{{item.duration}}</text></view>
<view wx:if="{{item.message}}"><image src="/images/s_7.png"></image>处理意见:<text>{{item.message}}</text></view>
</view>
</view>
</view>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content color_blue">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起用户</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{procDefName}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批内容</view>
<view class="problem_list_info_con color_blue">
<view class="files" wx:for="{{fileNames}}" wx:key="index">
<text data-index="{{index}}" style="word-wrap: break-word;">{{item}}</text>
</view>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">申请说明</view>
<view class="inspect_info_content">
{{infoData.remark}}
</view>
</view>
<view class="inspect_info_list" wx:if="{{stopBtnShow}}">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">终止原因</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写终止原因500字内"
placeholder-style="color:#6777aa;" maxlength="500" bindinput="commentblur"/>
</view>
</view>
</view>
<view class="problem_submit_to">
<view wx:if="{{stopShow}}" class="problem_submit_to_btn problem_submit_to_warning" bindtap="onStop">终止</view>
<view wx:if="{{false}}" class="problem_submit_to_btn problem_submit_to_delete" bindtap="onDelete">删除</view>
<view wx:if="{{revocationShow}}" class="problem_submit_to_btn problem_submit_to_save" bindtap="onRevocation">撤回</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,89 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}
.gk_open_con view{
padding: 10rpx 0;
width: 100%;
}
.gk_open_con image{
width: 30rpx;
height: 30rpx;
margin-right: 5rpx;
position: relative;
top: 5rpx;
}
.pass{
background-color: #388a38;
}
.transact{
background-color: #8e6424;
}

View File

@ -0,0 +1,530 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
deptName:"",
userId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
procInsId:"",
infoData:{},
procDefName:"",
deployId:"",
activeName:"",
flowNodeList:[],
flowNodes:[],
comment:"",
taskId:"",
procInsId:"",
backShow:false,
targetKey:"",
targetKeyList:[],
taskName:"",
passState:true,
backName:"",
ret:"",
remark:"",
beginDate:"",
endDate:"",
day:0,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {deployId,procInsId,procDefName,deptName,nickName,taskId,taskName,projectName,ret} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName,
procInsId,
procDefName,
deployId,
deptName,
nickName,
taskId,
taskName,
ret,
userId:res.data.userId,
loginName:res.data.loginName,
})
this.initTargetKeyList();
this.getFlowNodes();
this.getFlowRecordList();
this.getFormDatasList();
}
})
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
if(this.data.passState){
if(flowNodeList[i].name==this.data.taskName){
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'transact'});
this.setData({
passState:false
})
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'pass'});
}
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'none'});
}
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+that.data.deployId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name,state:'pass'});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//查询审批日志
getFlowRecordList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findCommentByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowRecordList:res.data
})
let list=[];
res.data.forEach(item=>{
if(item.deleteReason){
item.deleteReason=that.getDeleteReason(item.deleteReason);
}
if(item.duration){
item.duration=that.getDurationDate(item.duration);
}
list.push(item);
})
that.setData({
flowRecordList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//查询审批表单参数
getFormDatasList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findFormDatasByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
infoData:res.data,
beginDate:res.data.beginDate,
endDate:res.data.endDate,
day:res.data.day
})
}else{
app.toast(res.msg);
}
}
})
},
//初始化退回节点
initTargetKeyList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/returnList',
method:"post",
data:{
taskId:that.data.taskId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
let list = [{id:'',text:''}];
res.data.forEach(item=>{
list.push({id:item.id,text:item.name})
})
that.setData({
targetKeyList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//保存
onSave(){
this.setData({
loadShow:true
})
let {procDefId,projectId,userId,loginName,remark,beginDate,endDate} = this.data;
//数据效验
if(projectId==""||loginName==""||userId==""||procDefId==""){
app.toast("数据异常,请刷新页面重试!")
this.setData({
loadShow:false
})
return;
}
if(beginDate==""){
app.toast("请选择请假开始时间!")
that.setData({
loadShow:false
})
return;
}
if(endDate==""){
app.toast("请选择请假结束时间!")
that.setData({
loadShow:false
})
return;
}
if(remark==""){
app.toast("请填写请假事由!")
that.setData({
loadShow:false
})
return;
}
let that = this;
wx.showModal({
title: '提示',
content: '是否确定提交'+this.data.procDefName+'',
success: function (sm) {
if (sm.confirm) {
// 用户点击了确定 可以调用了
that.submit()
} else if (sm.cancel) {
that.setData({
loadShow:false
});
console.log('用户点击取消');
}
}
})
},
submit(){
let that = this
let {taskId,procInsId,projectId,projectName,userId,loginName,nickName,remark,beginDate,endDate,day} = that.data;
let date = new Date();
let params = {
taskId,
instanceId:procInsId,
userId,
assignee:nickName,
variables:{
businessKey:projectId,
projectName,
date:that.dateFormat("yyyy-MM-dd HH:ss",date),
beginDate,
endDate,
day,
remark,
INITIATOR:that.data.infoData.INITIATOR
}
}
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/complete',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res = res.data
if(res.code == 200){
app.toast("提交申请成功!")
if(that.data.ret=="await"){
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myFlowDefinition/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
},
//申请说明
remarkblur: function (options) {
this.data.remark = options.detail.value;
},
//开始时间
onbeginDate(e){
this.setData({
beginDate:e.detail
})
if(this.data.endDate==""){
this.setData({
endDate:e.detail
})
}
this.setDay();
},
//结束时间
onendDate(e){
this.setData({
endDate:e.detail
})
this.setDay();
},
setDay(){
if(this.data.beginDate && this.data.endDate){
let time = (new Date(this.data.endDate).getTime())-(new Date(this.data.beginDate).getTime());
if(time<0){
this.setData({
day:0
})
}else{
let hours = time/(3600000);
let day = (hours/24)+1;//这里默认加1天PS:2023-09-10 2023-09-11实际请假应该为2天而不是一天
if(hours%24>0) day++;
this.setData({
day
})
}
}
},
dateFormat(fmt, date) {
let ret;
const opt = {
'y+': date.getFullYear().toString(), // 年
'M+': (date.getMonth() + 1).toString(), // 月
'd+': date.getDate().toString(), // 日
'H+': date.getHours().toString(), // 时
'm+': date.getMinutes().toString(), // 分
's+': date.getSeconds().toString(), // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp('(' + k + ')').exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'));
}
}
return fmt;
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
getDeleteReason(val){
val = val.replace("Change activity to ","");
let flowRecordList = this.data.flowRecordList;
for(let i=0;i<flowRecordList.length;i++){
if(flowRecordList[i].taskDefKey==val){
return "驳回至"+flowRecordList[i].taskName;
}
}
},
getDurationDate(val){
// 计算出相差天数
let days = Math.floor(val / (24 * 3600 * 1000))
// 计算出小时数
let leave1 = val % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000))
// 计算相差分钟数
let leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000))
// 计算相差秒数
let leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
let seconds = Math.round(leave3 / 1000)
if(days>0){
if(days<10) days = "0"+days;
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(hours>0){
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(minutes>0){
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return minutes + '分钟' + seconds + '秒';
}
if(seconds>0){
if(seconds<10) seconds = "0"+seconds;
return seconds + '秒';
}
},
//选择退回节点
onSelectTargetKey(e){
this.setData({
targetKey:e.detail.id,
backName:e.detail.name
})
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
if(this.data.ret=="await"){
wx.redirectTo({
url: '../await/index',
})
}else{
wx.redirectTo({
url: '../myFlowDefinition/index'
})
}
},
//取消页面
cancelSaveView(){
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
if(this.data.ret=="await"){
wx.redirectTo({
url: '../await/index',
})
}else{
wx.redirectTo({
url: '../myFlowDefinition/index'
})
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,158 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">修改流程申请</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number {{item.state}}">{{item.name}}</text>
</view>
</van-collapse-item>
<van-collapse-item title="审批日志" name="2">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{flowRecordList}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{(flowRecordList.length-index) < 9 ?'0'+(flowRecordList.length-index):(flowRecordList.length-index)}}</view>
<view class="module_title module_title_flex inspect_list_title_text">{{item.taskName}}{{item.commentResult}}
<text wx:if="{{item.commentResult=='通过'}}" class="timeline_for_state_1 color_green">{{item.commentResult}}</text>
<text wx:if="{{item.commentResult=='驳回'}}" class="timeline_for_state_2 color_purple">{{item.commentResult}}</text>
</view>
</view>
</view>
<view class="inspect_list_info gk_open_con">
<view wx:if="{{item.assigneeName}}"><image src="/images/lw_3.png"></image>办理用户:<text>{{item.assigneeName}}</text></view>
<view wx:if="{{item.assigneeName}}"><image src="/images/s_1.png"></image>办理单位:<text class="color_blue">{{item.deptName}}</text></view>
<view wx:if="{{item.candidate}}"><image src="/images/s_2.png"></image>候选办理:<text>{{item.candidate}}</text></view>
<view wx:if="{{item.deleteReason}}"><image src="/images/s_18.png"></image>驳回节点:<text>{{item.deleteReason}}</text></view>
<view><image src="/images/s_6.png"></image>接收时间:<text>{{item.startTime}}</text></view>
<view wx:if="{{item.endTime}}"><image src="/images/lw_8.png"></image>处理时间:<text>{{item.endTime}}</text></view>
<view wx:if="{{item.duration}}"><image src="/images/img_11.png"></image>处理耗时:<text>{{item.duration}}</text></view>
<view wx:if="{{item.message}}"><image src="/images/s_7.png"></image>处理意见:<text>{{item.message}}</text></view>
</view>
</view>
</view>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content color_blue">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起用户</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{procDefName}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假时间</view>
<view class="problem_list_info_con">
<van-row>
<van-col span="10">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="开始时间" bindchange="onbeginDate" time="{{beginDate}}"></voucher-date>
</van-col>
<van-col span="4">
<view style="text-align: center;line-height: 90rpx;">至</view>
</van-col>
<van-col span="10">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="结束时间" bindchange="onendDate" time="{{endDate}}"></voucher-date>
</van-col>
</van-row>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假事由</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写请假事由500字内"
placeholder-style="color:#6777aa;" model:value="{{infoData.remark}}" maxlength="500" bindinput="remarkblur"/>
</view>
</view>
<view class="safety_inspect_title module_title_flex" wx:if="{{day>0}}">
<text class="color_orange">共请假{{' '+day+' '}}天</text>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn" bindtap="cancelSaveView">取消</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="onSave">提交申请</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,89 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}
.gk_open_con view{
padding: 10rpx 0;
width: 100%;
}
.gk_open_con image{
width: 30rpx;
height: 30rpx;
margin-right: 5rpx;
position: relative;
top: 5rpx;
}
.pass{
background-color: #388a38;
}
.transact{
background-color: #8e6424;
}

View File

@ -0,0 +1,546 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
deptName:"",
userId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
procInsId:"",
infoData:{},
procDefName:"",
deployId:"",
activeName:"",
flowNodeList:[],
flowNodes:[],
fileNames:[],
fileUrls:[],
comment:"",
taskId:"",
procInsId:"",
backShow:false,
targetKey:"",
targetKeyList:[],
taskName:"",
passState:true,
backName:"",
fileUrlArray:[],
ret:"",
remark:"",
filesData:[],
limit:9,
fileType:["doc","docx","xls","xlsx","ppt","pptx","txt","pdf","png","jpg","jpeg","mp4"],
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {deployId,procInsId,procDefName,deptName,nickName,taskId,taskName,projectName,ret} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName,
procInsId,
procDefName,
deployId,
deptName,
nickName,
taskId,
taskName,
ret,
userId:res.data.userId,
loginName:res.data.loginName,
})
this.initTargetKeyList();
this.getFlowNodes();
this.getFlowRecordList();
this.getFormDatasList();
}
})
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
if(this.data.passState){
if(flowNodeList[i].name==this.data.taskName){
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'transact'});
this.setData({
passState:false
})
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'pass'});
}
}else{
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name,state:'none'});
}
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+that.data.deployId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name,state:'pass'});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//查询审批日志
getFlowRecordList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findCommentByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowRecordList:res.data
})
let list=[];
res.data.forEach(item=>{
if(item.deleteReason){
item.deleteReason=that.getDeleteReason(item.deleteReason);
}
if(item.duration){
item.duration=that.getDurationDate(item.duration);
}
list.push(item);
})
that.setData({
flowRecordList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//查询审批表单参数
getFormDatasList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/findFormDatasByProcInsId',
method:"get",
data:{
procInsId:this.data.procInsId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
infoData:res.data
})
let fileNames = [];
let fileUrls = [];
let fileUrlArray = [];
//判断附件
if(res.data.files){
res.data.files.split(',').forEach(element => {
let it = element.split('/');
fileNames.push(it[it.length-1]);
fileUrls.push(element);
fileUrlArray.push({name:it[it.length-1],path:element});
});
}
that.setData({
fileNames,
fileUrls,
fileUrlArray
})
}else{
app.toast(res.msg);
}
}
})
},
//初始化退回节点
initTargetKeyList(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/returnList',
method:"post",
data:{
taskId:that.data.taskId
},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
let list = [{id:'',text:''}];
res.data.forEach(item=>{
list.push({id:item.id,text:item.name})
})
that.setData({
targetKeyList:list
})
}else{
app.toast(res.msg);
}
}
})
},
//保存
onSave(){
this.setData({
loadShow:true
})
let {procDefId,projectId,userId,loginName,remark,filesData} = this.data;
//数据效验
if(projectId==""||loginName==""||userId==""||procDefId==""){
app.toast("数据异常,请刷新页面重试!")
this.setData({
loadShow:false
})
return;
}
if(remark==""){
app.toast("请填写申请说明!")
this.setData({
loadShow:false
})
return;
}
if(filesData.length==0){
app.toast("请上传审批内容!")
this.setData({
loadShow:false
});
return;
}
for(let i=0;i<filesData.length;i++){
let _fileType = filesData[0].path.split('.');
_fileType = _fileType[_fileType.length-1].toLowerCase();
//判断附件类型,如果是图片直接展示,非图片则显示附件
if(this.data.fileType.indexOf(_fileType)==-1){
app.toast("申批内容不支持 [ "+_fileType+" ] 格式!请检查第"+(i+1)+"个附件")
this.setData({
loadShow:false
});
return;
}
}
let that = this;
wx.showModal({
title: '提示',
content: '是否确定提交'+this.data.procDefName+'',
success: function (sm) {
if (sm.confirm) {
// 用户点击了确定 可以调用了
that.submit()
} else if (sm.cancel) {
that.setData({
loadShow:false
});
console.log('用户点击取消');
}
}
})
},
submit(){
let that = this
let {taskId,procInsId,projectId,projectName,userId,loginName,nickName,remark,filesData} = that.data;
let fileUrls = [];
filesData.forEach(async (item)=>{
let uploadUrl = app.globalData.uploadUrl+'/common/upload'
let name = "file"
//这里复杂的图片上传,改为同步上传,因为小程序只能上传一张图片
if(item.path.indexOf("/profile/")>-1){
fileUrls.push(item.path);
}else{
let obj = await that.syncUploadImage(uploadUrl,item.path,name);
fileUrls.push(obj.data.fileName);
}
//验证图片上传完毕
if(fileUrls.length == filesData.length){
let params = {
taskId,
instanceId:procInsId,
userId,
assignee:nickName,
variables:{
businessKey:projectId,
projectName,
files:fileUrls.toString(),
remark,
INITIATOR:that.data.infoData.INITIATOR
}
}
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/complete',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res = res.data
if(res.code == 200){
app.toast("提交申请成功!")
if(that.data.ret=="await"){
setTimeout(()=>{
wx.redirectTo({
url: '../await/index',
})
},200)
}else{
setTimeout(()=>{
wx.redirectTo({
url: '../myFlowDefinition/index',
})
},200)
}
}else{
app.toast(res.msg);
}
}
})
}
})
},
/**
* 这里考虑上传图片异步问题封装为同步
*/
syncUploadImage(url,uploadFile,name) {
return new Promise((resolve, reject) => {
wx.uploadFile({
url, // 上传的服务器接口地址
filePath: uploadFile,
header: {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
},
name, //上传的所需字段,后端提供
formData: { user: 'test' },
success: (res) => {
// 上传完成操作
const data = JSON.parse(res.data)
resolve({
data: data
})
},
fail: (err) => {
//上传失败修改pedding为reject
console.log("访问接口失败", err);
wx.showToast({
title: "网络出错,上传失败",
icon: 'none',
duration: 1000
});
reject(err)
}
});
})
},
//申请说明
remarkblur: function (options) {
this.data.remark = options.detail.value;
},
fileUpload(options){
let file=options.detail;
this.setData({
filesData: file
});
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
getDeleteReason(val){
val = val.replace("Change activity to ","");
let flowRecordList = this.data.flowRecordList;
for(let i=0;i<flowRecordList.length;i++){
if(flowRecordList[i].taskDefKey==val){
return "驳回至"+flowRecordList[i].taskName;
}
}
},
getDurationDate(val){
// 计算出相差天数
let days = Math.floor(val / (24 * 3600 * 1000))
// 计算出小时数
let leave1 = val % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000))
// 计算相差分钟数
let leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000))
// 计算相差秒数
let leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
let seconds = Math.round(leave3 / 1000)
if(days>0){
if(days<10) days = "0"+days;
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(hours>0){
if(hours<10) hours = "0"+hours;
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return hours + '小时' + minutes + '分钟' + seconds + '秒';
}
if(minutes>0){
if(minutes<10) minutes = "0"+minutes;
if(seconds<10) seconds = "0"+seconds;
return minutes + '分钟' + seconds + '秒';
}
if(seconds>0){
if(seconds<10) seconds = "0"+seconds;
return seconds + '秒';
}
},
//选择退回节点
onSelectTargetKey(e){
this.setData({
targetKey:e.detail.id,
backName:e.detail.name
})
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
if(this.data.ret=="await"){
wx.redirectTo({
url: '../await/index',
})
}else{
wx.redirectTo({
url: '../myFlowDefinition/index'
})
}
},
//取消页面
cancelSaveView(){
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
if(this.data.ret=="await"){
wx.redirectTo({
url: '../await/index',
})
}else{
wx.redirectTo({
url: '../myFlowDefinition/index'
})
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,149 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">修改流程申请</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number {{item.state}}">{{item.name}}</text>
</view>
</van-collapse-item>
<van-collapse-item title="审批日志" name="2">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{flowRecordList}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{(flowRecordList.length-index) < 9 ?'0'+(flowRecordList.length-index):(flowRecordList.length-index)}}</view>
<view class="module_title module_title_flex inspect_list_title_text">{{item.taskName}}{{item.commentResult}}
<text wx:if="{{item.commentResult=='通过'}}" class="timeline_for_state_1 color_green">{{item.commentResult}}</text>
<text wx:if="{{item.commentResult=='驳回'}}" class="timeline_for_state_2 color_purple">{{item.commentResult}}</text>
</view>
</view>
</view>
<view class="inspect_list_info gk_open_con">
<view wx:if="{{item.assigneeName}}"><image src="/images/lw_3.png"></image>办理用户:<text>{{item.assigneeName}}</text></view>
<view wx:if="{{item.assigneeName}}"><image src="/images/s_1.png"></image>办理单位:<text class="color_blue">{{item.deptName}}</text></view>
<view wx:if="{{item.candidate}}"><image src="/images/s_2.png"></image>候选办理:<text>{{item.candidate}}</text></view>
<view wx:if="{{item.deleteReason}}"><image src="/images/s_18.png"></image>驳回节点:<text>{{item.deleteReason}}</text></view>
<view><image src="/images/s_6.png"></image>接收时间:<text>{{item.startTime}}</text></view>
<view wx:if="{{item.endTime}}"><image src="/images/lw_8.png"></image>处理时间:<text>{{item.endTime}}</text></view>
<view wx:if="{{item.duration}}"><image src="/images/img_11.png"></image>处理耗时:<text>{{item.duration}}</text></view>
<view wx:if="{{item.message}}"><image src="/images/s_7.png"></image>处理意见:<text>{{item.message}}</text></view>
</view>
</view>
</view>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content color_blue">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起用户</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{procDefName}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批内容
<text style="font-size: small;">[可上传PDF/图片/WORD/PPT/XLS格式]</text>
</view>
<view class="problem_list_info_con color_blue">
<view class="problem_list_info_con">
<file-uploader-all bindfiles="fileUpload" limit="{{limit}}" fileUrlArray="{{fileUrlArray}}"></file-uploader-all>
</view>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">申请说明</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写申请说明500字内"
placeholder-style="color:#6777aa;" model:value="{{infoData.remark}}" maxlength="500" bindinput="remarkblur"/>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn" bindtap="cancelSaveView">取消</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="onSave">提交申请</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,89 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}
.gk_open_con view{
padding: 10rpx 0;
width: 100%;
}
.gk_open_con image{
width: 30rpx;
height: 30rpx;
margin-right: 5rpx;
position: relative;
top: 5rpx;
}
.pass{
background-color: #388a38;
}
.transact{
background-color: #8e6424;
}

View File

@ -0,0 +1,168 @@
// pageage/safetyManagement/securityCheckGR/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
userId:"",
projectId:"",
projectData:{},
initData: {},
show:false,
list:[],
listData:[],
pageNum:1,
pageSize:10,
lastDataSize:10,
},
getInfo(e){
let {deployId,procInsId,taskId,taskName,procDefKey,startDeptName,startUserName,procDefName,businessKeyName,finishTime} = e.currentTarget.dataset.set
if(!finishTime){
finishTime="";
}
//根据不同业务跳转不同表单
if(procDefKey=="flow_xmglzdl_qjspb"){
wx.redirectTo({
url: `../detailLeaveTask/index?deployId=${deployId}&procInsId=${procInsId}&nickName=${startUserName}&deptName=${startDeptName}&procDefName=${procDefName}&taskId=${taskId}&taskName=${taskName}&projectName=${businessKeyName}&finishTime=${finishTime}&ret=finished`,
})
}else{
wx.redirectTo({
url: `../detailTask/index?deployId=${deployId}&procInsId=${procInsId}&nickName=${startUserName}&deptName=${startDeptName}&procDefName=${procDefName}&taskId=${taskId}&taskName=${taskName}&projectName=${businessKeyName}&finishTime=${finishTime}&ret=finished`,
})
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
userId:res.data.userId,
projectId:app.globalData.projectId,
initData:{text:app.globalData.projectName,id:app.globalData.projectId}
})
this.getListData(res.data.userId);
}
})
},
/**
* 查询项目举牌验收数据
*/
getListData(userId) {
//进入这里说明数据加载完毕
if(this.data.lastDataSize<this.data.pageSize){
//app.toast("已经到底了,暂无可继续加载数据!")
return;
}
var that = this;
//businessKey注解掉可以跨项目审批
let param = {
"nowUser":userId
}
param.pageNum=that.data.pageNum;
param.pageSize=that.data.pageSize;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/myFinishedFlowTaskList',
data:param,
method: "get",
success: function (res) {
res = res.data;
if(res.code=="200"){
//这里处理this.data.lastDataSize=this.data.pageSize
if(that.data.list.length>0 && that.data.list[0].taskId==res.rows[0].taskId){
that.setData({
lastDataSize:0,
})
}else{
that.setData({
pageNum:that.data.pageNum+1,
lastDataSize:res.rows.length,
list:res.rows,
listData:that.data.listData.concat(res.rows)
})
}
}else{
app.toast(res.msg);
}
}
});
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../await/index',
})
},
onScrollToLower(){
console.log("滚动条到底了,开始加载新数据");
this.getListData(this.data.userId);
},
//项目切换 返回值
onProjectSelect(e){
let projectId = e.detail.id;
let projectName = e.detail.text;
app.globalData.projectId = projectId;
app.globalData.projectName = projectName;
this.onLoad();
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,7 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index" ,
"van-popup": "@vant/weapp/popup/index"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,53 @@
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">申请办理完成</view>
</van-col>
</van-row>
</view>
</view>
<scroll-view class="max_content_scroll" type="list" scroll-y bindscrolltolower="onScrollToLower">
<project-select init="{{initData}}" bindchange="onProjectSelect"></project-select>
<view class="inspect_max_scroll_1">
<view class="inspect_for_scroll" wx:for="{{listData}}" wx:key="index" data-set="{{item}}" bindtap="getInfo">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{index < 9 ?'0'+(index+1):(index+1)}}</view>
<view class="module_title module_title_flex inspect_list_title_text"><text>{{item.endTime}}</text>
<text wx:if="{{item.finishTime==null}}" class="timeline_for_state_1 color_green" style="font-weight: 800;">进行中</text>
<text wx:if="{{item.finishTime != null && scope.row.ASSIGNEE_ != null}}" class="timeline_for_state_1">已完成</text>
<text wx:if="{{item.finishTime != null && scope.row.ASSIGNEE_ == null}}" class="timeline_for_state_2">已终止</text>
</view>
</view>
</view>
<view class="inspect_list_info">
<view class="inspect_list_info_data_prop color_orange">项目名称:{{item.businessKeyName}}</view>
<view class="inspect_list_info_data_prop color_blue">审批事项:{{item.procDefName}}</view>
<view class="inspect_list_info_data_prop">当前节点:<text wx:if="{{item.finishTime == null}}">{{item.taskName}}</text>
<text wx:if="{{item.finishTime != null}}">流程结束</text>
</view>
<view class="inspect_list_info_data_prop">接收时间:{{item.createTime}}</view>
<view class="inspect_list_info_data_prop">申请用户:{{item.startUserName}}</view>
<view class="inspect_list_info_data_prop">申请单位:{{item.startDeptName}}</view>
</view>
</view>
</view>
<view wx:if="{{listData.length==0}}">
<view style="padding-top: 70px;text-align: -webkit-center;">
<image src="../../../images/nodata.png" style="width: 130px;height: 105px;"></image>
<view style="color: #a5abbb;">暂无数据</view>
</view>
</view>
</view>
</scroll-view>

View File

@ -0,0 +1,19 @@
/* pageage/project_checking_list/project_checking_list.wxss */
.gd_max{
padding:10rpx 50rpx 0;
}
.gd_min{
padding: 30rpx 0;
text-align: center;
}
.gd_min image{
width: 150rpx;
height: 150rpx;
}
.gd_min view{
padding: 10rpx;
color: #89a4eb;
}
.inspect_max_scroll_1 {
height: 82vh;
}

View File

@ -0,0 +1,328 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
currentDate:new Date().getTime(),
deptId:"",
deptName:"",
userId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
remark:"",
procDefId:"",
approveTitle:"",
deploymentId:"",
activeName:"",
flowNodeList:[],
flowNodes:[],
beginDate:"",
endDate:"",
day:0,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {procDefId,approveTitle,deploymentId} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName:app.globalData.projectName,
procDefId,
approveTitle,
deploymentId,
deptId:res.data.deptId,
deptName:res.data.deptName,
userId:res.data.userId,
nickName:res.data.nickName,
loginName:res.data.loginName
})
this.getFlowNodes();
}
})
},
//取消页面
cancelSaveView(){
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../myFlowDefinition/index'
})
},
dateFormat(fmt, date) {
let ret;
const opt = {
'y+': date.getFullYear().toString(), // 年
'M+': (date.getMonth() + 1).toString(), // 月
'd+': date.getDate().toString(), // 日
'H+': date.getHours().toString(), // 时
'm+': date.getMinutes().toString(), // 分
's+': date.getSeconds().toString(), // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp('(' + k + ')').exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'));
}
}
return fmt;
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name});
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+this.data.deploymentId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//保存
onSave(){
this.setData({
loadShow:true
})
let that = this
let {procDefId,projectId,projectName,deptId,userId,loginName,nickName,beginDate,endDate,remark,day} = that.data;
//数据效验
if(projectId==""||loginName==""||deptId==""||userId==""||procDefId==""){
app.toast("数据异常,请刷新页面重试!")
that.setData({
loadShow:false
})
return;
}
if(beginDate==""){
app.toast("请选择请假开始时间!")
that.setData({
loadShow:false
})
return;
}
if(endDate==""){
app.toast("请选择请假结束时间!")
that.setData({
loadShow:false
})
return;
}
if(remark==""){
app.toast("请填写请假事由!")
that.setData({
loadShow:false
})
return;
}
let date = new Date()
let params = {
procDefId,
userId,
userName:loginName,
nickName,
variables:{
businessKey:projectId,
projectName,
date:that.dateFormat("yyyy-MM-dd HH:ss",date),
beginDate,
endDate,
day,
remark
}
}
wx.showModal({
title: '提示',
content: '是否确定提交'+this.data.approveTitle+'',
success: function (sm) {
if (sm.confirm) {
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/startProcessInstance',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("提交申请成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
} else if (sm.cancel) {
that.setData({
loadShow:false
})
console.log('用户点击取消');
}
}
})
},
//申请说明
remarkblur: function (options) {
this.data.remark = options.detail.value;
},
//开始时间
onbeginDate(e){
this.setData({
beginDate:e.detail
})
if(this.data.endDate==""){
this.setData({
endDate:e.detail
})
}
this.setDay();
},
//结束时间
onendDate(e){
this.setData({
endDate:e.detail
})
this.setDay();
},
setDay(){
if(this.data.beginDate && this.data.endDate){
let time = (new Date(this.data.endDate).getTime())-(new Date(this.data.beginDate).getTime());
if(time<0){
this.setData({
day:0
})
}else{
let hours = time/(3600000);
let day = (hours/24)+1;//这里默认加1天PS:2023-09-10 2023-09-11实际请假应该为2天而不是一天
if(hours%24>0) day++;
this.setData({
day
})
}
}
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../myFlowDefinition/index',
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,131 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">发起流程申请</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number">{{item.name}}</text>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起人</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{approveTitle}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假时间</view>
<view class="problem_list_info_con">
<van-row>
<van-col span="10">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="开始时间" bindchange="onbeginDate"></voucher-date>
</van-col>
<van-col span="4">
<view style="text-align: center;line-height: 90rpx;">至</view>
</van-col>
<van-col span="10">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="结束时间" bindchange="onendDate" time="{{endDate}}"></voucher-date>
</van-col>
</van-row>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">请假事由</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写请假事由500字内"
placeholder-style="color:#6777aa;" maxlength="500" bindinput="remarkblur"/>
</view>
</view>
<view class="safety_inspect_title module_title_flex" wx:if="{{day>0}}">
<text class="color_orange">共请假{{' '+day+' '}}天</text>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn" bindtap="cancelSaveView">取消</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="onSave">提交申请</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,72 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}

View File

@ -0,0 +1,330 @@
// pageage/safetyManagement/addSafetyInspect/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate:new Date(2088,1,1).getTime(),
deptId:"",
deptName:"",
userId:"",
nickName:"",
loginName:"",
projectId:"",
projectName:"",
remark:"",
filesData:[],
limit:9,
fileType:["doc","docx","xls","xlsx","ppt","pptx","txt","pdf","png","jpg","jpeg","mp4"],
procDefId:"",
approveTitle:"",
deploymentId:"",
activeName:"",
flowNodeList:[],
flowNodes:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {procDefId,approveTitle,deploymentId} = options
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
projectId:app.globalData.projectId,
projectName:app.globalData.projectName,
procDefId,
approveTitle,
deploymentId,
deptId:res.data.deptId,
deptName:res.data.deptName,
userId:res.data.userId,
nickName:res.data.nickName,
loginName:res.data.loginName
})
this.getFlowNodes();
}
})
},
//取消页面
cancelSaveView(){
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../myFlowDefinition/index'
})
},
getFlowNode(val){
let flowNodeList = this.data.flowNodeList;
for(let i=0;i<flowNodeList.length;i++){
if(flowNodeList[i].id==val){
let list = this.data.flowNodes;
list.push({id:flowNodeList[i].id,name:flowNodeList[i].name});
this.setData({
flowNodes:list
})
if(flowNodeList[i].outgoingFlows && flowNodeList[i].outgoingFlows.length>0){
return this.getFlowNode(flowNodeList[i].outgoingFlows[0].targetRef);
}
}
}
},
//查询工作流节点
getFlowNodes(){
let that = this;
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/readNotes/'+this.data.deploymentId,
method:"get",
data:{},
header: {
"Content-Type": "application/json"
},
success(res){
res = res.data
if(res.code == 200){
that.setData({
flowNodeList:res.data
})
if(res.data.length>0){
let list = that.data.flowNodes;
list.push({id:res.data[0].id,name:res.data[0].name});
that.setData({
flowNodes:list
})
return that.getFlowNode(res.data[0].outgoingFlows[0].targetRef);
}
}else{
app.toast(res.msg);
}
}
})
},
//保存
onSave(){
this.setData({
loadShow:true
})
let {procDefId,projectId,userId,loginName,remark,filesData} = this.data;
//数据效验
if(projectId==""||loginName==""||userId==""||procDefId==""){
app.toast("数据异常,请刷新页面重试!")
this.setData({
loadShow:false
})
return;
}
if(remark==""){
app.toast("请填写申请说明!")
this.setData({
loadShow:false
})
return;
}
if(filesData.length==0){
app.toast("请上传审批内容!")
this.setData({
loadShow:false
});
return;
}
for(let i=0;i<filesData.length;i++){
let _fileType = filesData[0].path.split('.');
_fileType = _fileType[_fileType.length-1].toLowerCase();
//判断附件类型,如果是图片直接展示,非图片则显示附件
if(this.data.fileType.indexOf(_fileType)==-1){
app.toast("申批内容不支持 [ "+_fileType+" ] 格式!请检查第"+(i+1)+"个附件")
this.setData({
loadShow:false
});
return;
}
}
let that = this;
wx.showModal({
title: '提示',
content: '是否确定提交'+this.data.approveTitle+'',
success: function (sm) {
if (sm.confirm) {
// 用户点击了确定 可以调用了
that.submit()
} else if (sm.cancel) {
that.setData({
loadShow:false
});
console.log('用户点击取消');
}
}
})
},
submit(){
let that = this
let {procDefId,projectId,projectName,userId,loginName,nickName,remark,filesData} = that.data;
let fileUrls = [];
filesData.forEach(async (item)=>{
let uploadUrl = app.globalData.uploadUrl+'/common/upload'
let name = "file"
//这里复杂的图片上传,改为同步上传,因为小程序只能上传一张图片
let obj = await that.syncUploadImage(uploadUrl,item.path,name);
fileUrls.push(obj.data.fileName);
//验证图片上传完毕
if(fileUrls.length == filesData.length){
let params = {
procDefId,
userId,
userName:loginName,
nickName,
variables:{
businessKey:projectId,
projectName,
files:fileUrls.toString(),
remark,
}
}
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/startProcessInstance',
method:"POST",
data:params,
header: {
"Username": loginName,
"Content-Type": "application/json"
},
success(res){
that.setData({
loadShow:false
})
res =res.data
if(res.code == 200){
app.toast("提交申请成功!")
setTimeout(()=>{
wx.redirectTo({
url: '../myProcessIns/index',
})
},200)
}else{
app.toast(res.msg);
}
}
})
}
})
},
/**
* 这里考虑上传图片异步问题封装为同步
*/
syncUploadImage(url,uploadFile,name) {
return new Promise((resolve, reject) => {
wx.uploadFile({
url, // 上传的服务器接口地址
filePath: uploadFile,
header: {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
},
name, //上传的所需字段,后端提供
formData: { user: 'test' },
success: (res) => {
// 上传完成操作
const data = JSON.parse(res.data)
resolve({
data: data
})
},
fail: (err) => {
//上传失败修改pedding为reject
console.log("访问接口失败", err);
wx.showToast({
title: "网络出错,上传失败",
icon: 'none',
duration: 1000
});
reject(err)
}
});
})
},
//申请说明
remarkblur: function (options) {
this.data.remark = options.detail.value;
},
fileUpload(options){
let file=options.detail;
this.setData({
filesData: file
});
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../myFlowDefinition/index',
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,8 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index",
"van-collapse": "@vant/weapp/collapse",
"van-collapse-item": "@vant/weapp/collapse-item"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,120 @@
<!--pageage/safetyManagement/addSafetyInspect/index.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">发起流程申请</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<view class="inspect_info">
<view class="module_title module_title_flex">
<view>{{projectName}}</view>
</view>
<view class="gk_open" style="margin-top: 20rpx;border: 1px solid transparent;">
<van-collapse value="{{activeName}}" bind:change="onChange">
<van-collapse-item title="申请流程" name="1">
<view class="left_manage2" wx:for="{{flowNodes}}" wx:key="index">
<text class="safety_issue_number">{{item.name}}</text>
</view>
</van-collapse-item>
</van-collapse>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起单位</view>
<view class="inspect_info_content">
{{deptName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">发起人</view>
<view class="inspect_info_content">
{{nickName}}
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批事项</view>
<view class="inspect_info_content">
{{approveTitle}}
</view>
</view>
<view class="inspect_info_list" style="width: 100%;">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">审批内容
<text style="font-size: small;">[可上传PDF/图片/WORD/PPT/XLS格式]</text>
</view>
<view class="problem_list_info_con">
<file-uploader-all bindfiles="fileUpload" limit="{{limit}}"></file-uploader-all>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">申请说明</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写申请说明500字内"
placeholder-style="color:#6777aa;" maxlength="500" bindinput="remarkblur"/>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn" bindtap="cancelSaveView">取消</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="onSave">提交申请</view>
</view>
</view>
<van-overlay show="{{loadShow}}">
<view class="gif">
<image src="../../../images/loding2.gif"></image>
<view>数据加载中!请稍后...</view>
</view>
</van-overlay>

View File

@ -0,0 +1,72 @@
/* pageage/safetyManagement/addSafetyInspect/index.wxss */
.van-popup{
background: none !important;
}
.van-image__img{
border-radius: 10rpx !important;
}
.radio_custom_class{
padding: 10rpx 100rpx 10rpx 0;
}
.radio_label_class{
color: #ffffff !important;
}
.max_tab_name{
padding: 0 40rpx;
font-size:30rpx;
height: 460rpx;
overflow: auto;
margin-top: 20rpx;
text-align: center;
}
.van-popup.van-popup--bottom{
background: #232a44;
}
.van-popup {
background-color: var(--popup-background-color,#232a44) !important;
}
.font_color{
padding: 15rpx 0;
color: #157dd2;
}
.active{
font-size:30rpx;
font-weight: 600;
color: #14feff
}
.van-collapse.van-hairline--top-bottom:after{
border-width: 0px 0;
}
.van-cell.van-cell--borderless{
background-color: #2b345b;
color: #fff;
margin-top: 30rpx;
border-radius: 5rpx;
}
.van-cell.van-cell--borderless:active{
background-color: #2b345b;
}
.van-collapse-item__title.van-collapse-item__title--expanded:active{
background-color: #2b345b;
}
.van-collapse-item .van-cell:after{
border-bottom: 0;
}
.van-collapse-item.van-hairline--top:after{
border-top-width:0
}
.van-cell.van-cell--clickable{
background-color: #2b345b;
margin-top: 30rpx;
color: #fff;
border-radius: 15rpx;
}
.van-cell.van-cell--clickable:active{
background-color: #2b345b;
}
.van-collapse-item__wrapper .van-collapse-item__content{
background-color: #1e2336;
color:#8ca4ec ;
border-width: 0px 0;
}

View File

@ -0,0 +1,140 @@
// pageage/safetyManagement/securityCheckGR/index.js
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
deptId:"",
loginName:"",
projectId:"",
minRoleId:"",
projectData:{},
initData: {},
show:false,
listData:[],
request:app.globalData.reqUrl
},
addInfo(e){
let {id,name,deploymentId,flowKey} = e.currentTarget.dataset.set
if(flowKey=="flow_xmglzdl_qjspb"){
wx.redirectTo({
url: `../initLeaveTask/index?procDefId=${id}&approveTitle=${name}&deploymentId=${deploymentId}`,
})
}else{
wx.redirectTo({
url: `../initTask/index?procDefId=${id}&approveTitle=${name}&deploymentId=${deploymentId}`,
})
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
//获取缓存数据
wx.getStorage({
key: 'userinfo',
success:res=>{
this.setData({
loginName:res.data.loginName,
projectId:app.globalData.projectId,
initData:{text:app.globalData.projectName,id:app.globalData.projectId}
})
this.getListData(res.data.loginName);
}
})
},
/**
* 查询项目举牌验收数据
*/
getListData(loginName) {
var that = this;
let param = {
"username": loginName
}
wx.request({
url: app.globalData.reqUrl + '/wechat/flowTask/myFlowDefinitionList',
data:param,
method: "get",
success: function (res) {
res = res.data;
if(res.code=="200" && res.data.records){
that.setData({
listData:res.data.records
})
}else{
app.toast(res.msg);
}
}
});
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
returnToPage: function () {
/*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
wx.redirectTo({
url: '../await/index',
})
},
//项目切换 返回值
onProjectSelect(e){
let projectId = e.detail.id;
let projectName = e.detail.text;
app.globalData.projectId = projectId;
app.globalData.projectName = projectName;
this.onLoad();
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -0,0 +1,7 @@
{
"usingComponents": {
"van-overlay": "@vant/weapp/overlay/index" ,
"van-popup": "@vant/weapp/popup/index"
},
"navigationStyle":"custom"
}

View File

@ -0,0 +1,46 @@
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="returnToPage"><image src="/images/left.png"></image></view>
</van-col>
<van-col span="15">
<view class="header_name">发起流程申请</view>
</van-col>
</van-row>
</view>
</view>
<view class="max_content">
<project-select init="{{initData}}" bindchange="onProjectSelect"></project-select>
<view class="inspect_max">
<view class="inspect_list">
<view class="inspect_for" wx:for="{{listData}}" wx:key="index" data-set="{{item}}" bindtap="addInfo">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{index < 9 ?'0'+(index+1):(index+1)}}</view>
<view class="module_title module_title_flex inspect_list_title_text">{{item.categoryName}}<text class="timeline_for_state_1">{{' v '+item.version}}</text></view>
</view>
</view>
<view class="inspect_list_info">
<view class="inspect_list_info_details">
<view class="safety_issue_number color_blue">{{item.name}}</view>
</view>
</view>
</view>
</view>
</view>
<view wx:if="{{listData.length==0}}">
<view style="padding-top: 70px;text-align: -webkit-center;">
<image src="../../../images/nodata.png" style="width: 130px;height: 105px;"></image>
<view style="color: #a5abbb;">暂无数据</view>
</view>
</view>
</view>
</view>

View File

@ -0,0 +1 @@
/* pageage/project_checking_list/project_checking_list.wxss */

View File

@ -35,34 +35,18 @@
</view>
</van-col>
</van-row>
<!--<view class="left_manage_max">
<view class="left_manage_min">
<view class="left_manage">
<image src="/images/set.png" class="left_icon"></image>
<text class="left_pro">账号管理</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
<view class="left_manage_min">
<view class="left_manage">
<image src="/images/set.png" class="left_icon"></image>
<text class="left_pro">账号管理</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
</view>-->
<view class="left_manage_min">
<view class="left_manage" bindtap="XGMM">
<view class="left_password">
修改密码
</view>
<image src="/images/set.png" class="left_icon"></image>
<text class="left_password">修改密码</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
<view class="left_manage_min">
<view class="left_manage" bindtap="TCDL">
<view class="left_sign">
退出登录
</view>
<image src="/images/set.png" class="left_icon"></image>
<text class="left_sign">退出登录</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
</view>
@ -163,26 +147,6 @@
</view>
</view>
<view class="echarts_max">
<view class="echarts_min">
<view class="eharts_title">机械设备</view>
<van-row>
<van-col span="12">
<view class="eharts_head">接入数:<text>{{machineryNum}}</text></view>
</van-col>
<van-col span="12">
<view class="eharts_head">正常运行数:<text>{{machineryOnline}}</text></view>
</van-col>
</van-row>
<view class="eharts_con">
<ec-canvas ec="{{ ec_2 }}" id="mychart-two"></ec-canvas>
</view>
</view>
</view>
</view>