import config from '../../../config' import { getDictCache } from '../../../api/publics' 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: "", filesData: [], limit: 30, fileType: ["pdf"], imageType: ["png", "jpg", "jpeg"], imageInfoData: [], isFiles: null, active: 100, rejectNode: false, fbAptitude: false, subDeptTypes: [], subDeptScopes: [], }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { let { deployId, procInsId, procDefName, deptName, nickName, taskId, taskName, projectName, ret, procDefKey } = options if (procDefKey == "flow_fbzzsp_fbszzsp") { this.getDicts(); this.setData({ fbAptitude: true }) } //获取缓存数据 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.getFlowRecordList(); this.getFlowNodes(); this.getFormDatasList(); //this.initTargetKeyList(); } }) }, //获取字典信息 getDicts() { let that = this; /*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/ getDictCache('flow_sub_dept_type').then(res => { if (res.code == 200) { let typeList = []; res.data.forEach(item => { typeList.push({ "id": item.dictValue, "text": item.dictLabel }); }) that.setData({ subDeptTypes: typeList }) } }); getDictCache('flow_sub_dept_scope').then(res => { if (res.code == 200) { let scopeList = []; res.data.forEach(item => { scopeList.push({ "id": item.dictValue, "text": item.dictLabel, "type": false }); }) that.setData({ subDeptScopes: scopeList }) } }); }, //选择分包类型 onSelectSubDeptTypes(e) { this.setData({ "infoData.subDeptType": e.detail.id }) }, //选择分包范围 onSelectSubDeptScopes(e) { let list = []; e.detail.forEach(it =>{ if(it.id){ list.push(it.id) } }) this.setData({ "infoData.subDeptScope": list.toString() }) }, //输入分包单位名称 inputSubDeptName(e) { this.setData({ "infoData.subDeptName": e.detail.value }) }, //输入分包单位资质 inputSubDeptAptitude(e) { this.setData({ "infoData.subDeptAptitude": e.detail.value }) }, //输入分包单位法人代表 inputSubDeptChairman(e) { this.setData({ "infoData.subDeptChairman": e.detail.value }) }, //输入分包单位安全证书 inputSubDeptSafetyCertificate(e) { this.setData({ "infoData.subDeptSafetyCertificate": e.detail.value }) }, //输入分包单位项目经理 inputSubDeptCustodian(e) { this.setData({ "infoData.subDeptCustodian": e.detail.value }) }, //输入分包单位名称 inputSubDeptCustodianCardId(e) { this.setData({ "infoData.subDeptCustodianCardId": e.detail.value }) }, //选择分包进场时间 inputSubDeptApproachDate(e) { this.setData({ "infoData.subDeptApproachDate": e.detail }) }, 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; let actNv = this.data.active; if (flowNodeList[i].name == this.data.taskName) { actNv = list.length; } list.push({ id: flowNodeList[i].id, name: flowNodeList[i].name, text: flowNodeList[i].name.length > 4 ? flowNodeList[i].name.substring(0, 4) : flowNodeList[i].name }); this.setData({ active: actNv, 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, text: res.data[0].name }); 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, idx) => { if (idx == 1 && (item.commentType == "3" || item.commentType == "2")) { that.setData({ rejectNode: true }) } 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 filesData = []; let imageList = []; /** * 分包范围 */ if(res.data.subDeptScope){ let list = that.data.subDeptScopes; list.forEach(it =>{ if(res.data.subDeptScope.split(',').indexOf(it.id)>-1){ it.type = true; } }); that.setData({ subDeptScopes: list, }) } //判断附件 if (res.data.files) { res.data.files.split(',').forEach(element => { let ft = element.split('.'); if (that.data.imageType.indexOf(ft[ft.length - 1].toLowerCase()) > -1) { imageList.push(config.baseUrl + element); } else { let it = element.split('/'); filesData.push({ name: it[it.length - 1], path: element }); } }); } that.setData({ filesData, imageInfoData: imageList, isFiles: filesData.length > 0 ? true : false, remark: res.data.remark }) } 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, fbAptitude, infoData } = this.data; //数据效验 if (projectId == "" || loginName == "" || userId == "" || procDefId == "") { app.toast("数据异常,请刷新页面重试!") this.setData({ loadShow: false }) return; } //分包资质审批数据效验 if (fbAptitude) { if (infoData.subDeptType == "") { app.toast("请选择分包类型!") this.setData({ loadShow: false }) return; } if (infoData.subDeptScope == "") { app.toast("请选择分包范围!") this.setData({ loadShow: false }) return; } if (infoData.subDeptName == "") { app.toast("请填写分包单位名称!") this.setData({ loadShow: false }) return; } if (infoData.subDeptAptitude == "") { app.toast("请填写分包单位资质!") this.setData({ loadShow: false }) return; } if (infoData.subDeptChairman == "") { app.toast("请填写分包单位法人代表!") this.setData({ loadShow: false }) return; } if (infoData.subDeptSafetyCertificate == "") { app.toast("请填写分包单位安全生产许可证!") this.setData({ loadShow: false }) return; } if (infoData.subDeptCustodian == "") { app.toast("请填写分包单位项目经理!") this.setData({ loadShow: false }) return; } if (infoData.subDeptCustodianCardId == "") { app.toast("请填写分包单位项目经理身份证号!") this.setData({ loadShow: false }) return; } if (infoData.subDeptApproachDate == "") { app.toast("请选择分包单位进场时间!") this.setData({ loadShow: false }) return; } } if (filesData.length == 0 && this.data.imageInfoData.length == 0) { app.toast("请上传审批内容!") this.setData({ loadShow: false }); return; } if (remark == "") { 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 + " ] 格式!请上传PDF文件。") 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, imageInfoData, fbAptitude, infoData } = that.data; let fileUrls = []; filesData.forEach(f => { imageInfoData.push(f.path); }); imageInfoData.forEach(async (item) => { let uploadUrl = app.globalData.uploadUrl + '/common/upload' let name = "file" //这里复杂的图片上传,改为同步上传,因为小程序只能上传一张图片 if (item.indexOf(config.baseUrl) > -1) { fileUrls.push(item.replace(config.baseUrl, '')); } else if (item.indexOf("/profile/") > -1) { fileUrls.push(item); } else { let obj = await that.syncUploadImage(uploadUrl, item, name); fileUrls.push(obj.data.fileName); } //验证图片上传完毕 if (fileUrls.length == imageInfoData.length) { //分包单位资质审批参数 let fbAptitudeParams = {}; if (fbAptitude) { fbAptitudeParams = { subDeptType:infoData.subDeptType, subDeptScope:infoData.subDeptScope, subDeptName:infoData.subDeptName, subDeptAptitude:infoData.subDeptAptitude, subDeptChairman:infoData.subDeptChairman, subDeptSafetyCertificate:infoData.subDeptSafetyCertificate, subDeptCustodian:infoData.subDeptCustodian, subDeptCustodianCardId:infoData.subDeptCustodianCardId, subDeptApproachDate:infoData.subDeptApproachDate } } let params = { taskId, instanceId: procInsId, userId, assignee: nickName, variables: { businessKey: projectId, projectName, files: fileUrls.toString(), remark, INITIATOR: that.data.infoData.INITIATOR, ...fbAptitudeParams } } 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; }, // list 上传图片 onImagesArr(e) { var data = this.data.imageInfoData data = e.detail this.setData({ imageInfoData: data }) }, /** * 上传文件 * @param {*} options */ fileUpload(options) { let file = options.detail; this.setData({ filesData: file }); }, // 手风琴 onChange(event) { this.setData({ activeName: event.detail, }); }, /** * 计算驳回节点 * @param {*} val */ 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: '../myProcessIns/index' }) } }, /** * 切换上传文件类型 * @param {*} e */ switchFiles(e) { this.setData({ isFiles: !this.data.isFiles, }); if (this.data.isFiles) { if (this.data.filesData.length == 0) { let myImages = this.selectComponent("#myImage"); myImages.upload(); } } else { if (this.data.imageInfoData.length == 0) { let myFiles = this.selectComponent("#myFiles"); myFiles.upload(); } } }, //取消页面 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() { } })