YZProjectCloud/yanzhu-ui-app/miniprogram/pages/project_flowable/editTask/index.js

830 lines
24 KiB
JavaScript

import {
complete,
stopProcess,
readDeployNotes,
findCommentByProcInsId
} from '../../../api/flowable'
import {
findMyDeptList,
findAllByCategory,
findProjectApplyData
} from '../../../api/publics'
import {
updateProjectApply
} from '../../../api/projectApply'
import {
syncFileUpload
} from '../../../utils/request'
import config from '../../../config'
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
maxDate: new Date(2088, 1, 1).getTime(),
deptList: [],
deployId: "",
procInsId: "",
procDefName: "",
deptName: "",
nickName: "",
taskId: "",
taskName: "",
category: "",
projectName: "",
businessKey: "",
businessDeptId: "",
projectParName: "",
infoData: {},
active: 100,
stepList: [],
rejectNode: false,
limit: 9,
imgTypes: ["png", "jpg", "jpeg"],
fileTypes: ["pdf", "doc", "docx", "xls", "xlsx"],
fileNames: [],
minImageList: [],
detailDataList: [],
dataList: [],
stopShow: false,
stopBtnShow: false,
activeName: "",
comment: "",
useDeptIdIndex: 0,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let {
deployId,
procInsId,
procDefName,
deptName,
nickName,
taskId,
taskName,
category,
businessKey,
projectName,
businessDeptId,
projectParName,
startUserId
} = options
this.setData({
businessKey,
projectName,
procInsId,
procDefName,
deployId,
deptName,
nickName,
taskId,
taskName,
category,
businessDeptId,
projectParName,
initData: {
id: businessKey,
text: projectName
},
stopShow: startUserId == app.globalData.userData?.userId,
})
debugger
this.initDeptList();
this.findMyDeptAssetsList();
this.findFlowNodes();
this.findCommentByProcInsId();
},
//查询部门资产列表信息
findMyDeptAssetsList() {
findAllByCategory(this.data.category).then(res => {
if (res.code == '200') {
let list = [];
res.data.forEach(item => {
let children = [];
item.childrenAssetsTypeList.forEach(child => {
children.push({
id: child.id,
text: child.name,
units: child.unit,
detailName: item.name + ' > ' + child.name
});
})
list.push({
id: item.id,
text: item.name,
children: children
});
});
this.findApplyDataInfo();
this.setData({
dataList: list
})
}
});
},
/**
* 初始化部门列表
*/
initDeptList() {
findMyDeptList().then(res => {
let list = [];
res.data.forEach(item => {
list.push({
"id": item.deptId,
"text": item.deptName
});
});
this.setData({
deptList: list
})
});
},
//查询工作流节点
findFlowNodes() {
readDeployNotes(this.data.deployId).then(res => {
if (res.code == 200) {
let list = [{
text: '开始'
}];
let index = this.data.active;
res.data.forEach((item, idx) => {
if (this.data.taskName == item.name) {
index = idx + 1;
}
list.push({
text: item.name,
desc: ''
});
});
list.push({
text: '结束'
});
this.setData({
active: index,
stepList: list
})
}
});
},
//查询审批日志
findCommentByProcInsId() {
findCommentByProcInsId({
procInsId: this.data.procInsId
}).then(res => {
this.setData({
flowRecordList: res.data
})
let list = [];
res.data.forEach((item, idx) => {
if (idx == 1 && (item.commentType == "3" || item.commentType == "2")) {
this.setData({
rejectNode: true
})
}
if (item.deleteReason) {
item.deleteReason = this.getDeleteReason(item.deleteReason);
}
if (item.duration) {
item.duration = app.getDurationDate(item.duration);
}
list.push(item);
})
this.setData({
flowRecordList: list
})
});
},
//查询审批表单参数
findApplyDataInfo() {
findProjectApplyData(this.data.businessKey).then(res => {
let imgList = [];
let fileNames = [];
if (res.data.applyFiles) {
res.data.applyFiles.split(',').forEach(files => {
if(files){
let fileType = files.split(".")[files.split(".").length - 1].toLowerCase();
if (this.data.imgTypes.indexOf(fileType) == -1) {
let it = files.split('/');
fileNames.push({
name: it[it.length - 1],
path: files
});
} else {
imgList.push(config.baseUrl + files + '.min.jpg');
}
}
});
}
if (res.data.proProjectApplyDetailList.length > 0) {
let data = [];
res.data.proProjectApplyDetailList.forEach(item => {
let activeId = [];
activeId.push(item.typeId);
let mainActiveIndex = 0;
let useUnitIndex = 0;
let assetsUnits = [];
this.data.dataList.forEach((_it, _itIndex) => {
if (_it.id == item.typeId) {
mainActiveIndex = _itIndex;
_it.children.forEach((_children, _childrenIndex) => {
if (_children.id == item.assetsId && _children.units) {
let unitList = _children.units.split(',');
if (unitList.length > 0) {
unitList.forEach((unit, idx) => {
if (unit == item.assetsUnit) {
useUnitIndex = idx;
}
assetsUnits.push({
id: idx,
text: unit
});
});
}
}
});
}
});
data.push({
detailId: item.assetsId,
detailName: item.assetsName,
showDetailsName: item.typeName + ' > ' + item.assetsName,
showDetailsPopup: false,
mainActiveIndex: mainActiveIndex,
activeId: activeId,
useUnit: item.assetsUnit,
assetsUnits: assetsUnits,
useUnitIndex: useUnitIndex,
applyNumber: item.number,
assetsVersion: item.assetsVersion,
useReason: item.useReason
})
});
this.setData({
detailDataList: data
})
}
this.setData({
infoData: res.data,
fileNames: fileNames,
minImageList: imgList,
})
})
},
/**
* 获取驳回节点
* @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;
}
}
},
//保存申请
onSaveApply() {
let {
procInsId,
initData,
infoData,
detailDataList,
fileNames,
minImageList
} = this.data;
//数据效验
if (!procInsId || !initData.id) {
app.toast("数据异常,请刷新页面重试!")
return false;
}
if (!infoData.deptId) {
app.toast("请选择使用单位!")
return false;
}
if (!infoData.useTime) {
app.toast("请选择使用时间!")
return false;
}
if (!infoData.applyReason) {
app.toast("请填写申请原因!")
return false;
}
if (detailDataList.length > 0) {
for (let i = 0; i < detailDataList.length; i++) {
if (!detailDataList[i].detailId || !detailDataList[i].detailName || detailDataList[i].activeId.length == 0) {
app.toast("请选择申请明细!")
return false;
}
if (!detailDataList[i].applyNumber) {
app.toast("请填写申请数量!")
return false;
}
if (!detailDataList[i].useUnit) {
app.toast("请选择单位名称!")
return false;
}
}
} else {
app.toast("请添加申请明细!")
}
if (fileNames.length > 0) {
for (let i = 0; i < fileNames.length; i++) {
if(fileNames[0]){
let _fileType = fileNames[0].path.split('.');
_fileType = _fileType[_fileType.length - 1].toLowerCase();
if (this.data.fileTypes.indexOf(_fileType) == -1) {
app.toast("申请附件不支持 [ " + _fileType + " ] 格式!请检查第" + (i + 1) + "个附件")
return false;
}
}
}
}
let that = this;
wx.showModal({
title: '提示',
content: '是否确定提交流程申请?',
success: function (sm) {
if (sm.confirm) {
that.submitBefore();
} else if (sm.cancel) {
console.log('用户点击取消');
}
}
})
},
/**
* 提交前数据准备
*/
submitBefore() {
let {
fileNames,
minImageList
} = this.data;
if (fileNames.length > 0) {
fileNames.forEach(item => {
minImageList.push(item.path);
});
}
let fileUrls = [];
if (minImageList.length > 0) {
minImageList.forEach(item => {
//这里复杂的图片上传,改为同步上传,因为小程序只能上传一张图片
if (item.indexOf("/profile/") > -1) {
fileUrls.push(item.replace(config.baseUrl, "").replace(".min.jpg", ""));
if (fileUrls.length == minImageList.length) {
//上传完毕
this.submitApply(fileUrls);
}
} else {
syncFileUpload(item).then(res => {
fileUrls.push(res.fileName);
//验证图片上传完毕
if (fileUrls.length == minImageList.length) {
this.submitApply(fileUrls);
}
});
}
});
} else {
this.submitApply(fileUrls);
}
},
/**
* 提交表单
*/
submitApply(fileData) {
if (this.data.taskName == '提交申请') {
let {
taskId,
procInsId,
infoData,
category,
dataList,
detailDataList
} = this.data;
let applyDetailList = [];
detailDataList.forEach(detail => {
applyDetailList.push({
superTypeKey: category,
typeId: dataList[detail.mainActiveIndex].id,
typeName: dataList[detail.mainActiveIndex].text,
assetsId: detail.detailId,
assetsName: detail.detailName,
number: detail.applyNumber,
assetsUnit: detail.useUnit,
assetsVersion: detail.assetsVersion,
useReason: detail.useReason
});
});
let params = {
taskId,
instanceId: procInsId,
comment:"修改并重新提交申请",
variables: {},
proProjectApply: {
id: infoData.id,
deptId: infoData.deptId,
projId: infoData.projId,
projName: infoData.projName,
applyType: infoData.applyType,
applyStatus: 1,
useTime: infoData.useTime,
applyReason: infoData.applyReason,
applyFiles: fileData.toString(),
proProjectApplyDetailList: applyDetailList
}
}
complete(params).then(res => {
if (res.code == 200) {
app.toast("修改申请信息成功!")
setTimeout(() => {
wx.redirectTo({
url: `../../index/index`,
})
}, 300)
}
});
} else {
this.submitData(fileData);
}
},
/**
* 提交表单
*/
submitData(fileData) {
let {
infoData,
category,
dataList,
detailDataList
} = this.data;
let applyDetailList = [];
detailDataList.forEach(detail => {
applyDetailList.push({
superTypeKey: category,
typeId: dataList[detail.mainActiveIndex].id,
typeName: dataList[detail.mainActiveIndex].text,
assetsId: detail.detailId,
assetsName: detail.detailName,
number: detail.applyNumber,
assetsUnit: detail.useUnit,
assetsVersion: detail.assetsVersion,
useReason: detail.useReason
});
});
let params = {
id: infoData.id,
deptId: infoData.deptId,
projId: infoData.projId,
projName: infoData.projName,
applyType: infoData.applyType,
applyStatus: 1,
useTime: infoData.useTime,
applyReason: infoData.applyReason,
applyFiles: fileData.toString(),
proProjectApplyDetailList: applyDetailList
}
updateProjectApply(params).then(res => {
if (res.code == 200) {
app.toast("修改申请信息成功!")
setTimeout(() => {
wx.redirectTo({
url: `../approveTask/index?deployId=${this.data.deployId}&procInsId=${this.data.procInsId}&nickName=${this.data.nickName}&deptName=${this.data.deptName}&procDefName=${this.data.procDefName}&taskId=${this.data.taskId}&taskName=${this.data.taskName}&category=${this.data.category}&projectName=${this.data.projectName}&businessKey=${this.data.businessKey}&businessKeyParName=${this.data.businessKeyParName}&businessDeptId=${this.data.businessDeptId}&startUserId=${this.data.startUserId}`,
})
}, 300)
}
});
},
//申请说明输入
applyReasonblur: function (options) {
this.data.infoData.applyReason = options.detail.value;
},
//使用单位
onSelectDept(e) {
this.setData({
"infoData.deptId": e.detail.id
})
},
//使用时间
onInputTime(e) {
this.setData({
"infoData.useTime": e.detail
})
},
/**
* 图片上传
* @param {*} options
*/
imgUpload(options) {
let imgs = options.detail;
this.setData({
minImageList: imgs
});
},
/**
* 文件上传
* @param {*} options
*/
fileUpload(options) {
let files = options.detail;
this.setData({
fileNames: files
});
},
// 手风琴
onChange(event) {
this.setData({
activeName: event.detail,
});
},
returnToPage: function () {
/*关闭当前页面,跳转到其它页面。*/
wx.redirectTo({
url: '../await/index',
})
},
/**
* 栏目触发事件
*/
onClickNav(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
list[index].activeId = null;
list[index].mainActiveIndex = e.detail.index;
this.setData({
detailDataList: list
})
console.log(e.detail.index, this.data.dataList);
},
/**
* 选项触发事件
*/
onClickItem(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
list[index].detailId = e.detail.id;
list[index].detailName = e.detail.text;
list[index].showDetailsName = e.detail.detailName;
if (e.detail.units) {
let itemList = [];
e.detail.units.split(',').forEach((item, idx) => {
if (idx == 0) {
list[index].useUnitIndex = idx;
list[index].useUnit = item;
}
itemList.push({
id: idx,
text: item
});
});
list[index].assetsUnits = itemList;
}
list[index].activeId = e.detail.id;
list[index].showDetailsPopup = false;
this.setData({
detailDataList: list
})
},
//新增问题
newApplyDetail() {
var data = this.data.detailDataList
data.push({
detailId: '',
detailName: '',
showDetailsName: '',
showDetailsPopup: false,
mainActiveIndex: 0,
activeId: [],
useUnit: "",
useUnitIndex: "",
assetsUnits: [],
applyNumber: "",
assetsVersion: "",
useReason: ""
})
this.setData({
detailDataList: data
})
},
/**
* 删除申请详情
* @param {*} e
*/
delApplyDetail(e) {
var index = e.currentTarget.dataset.index
var data = this.data.detailDataList
data.splice(index, 1);
this.setData({
detailDataList: data
})
},
//输入申请数量
onInputNumber(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
let value = e.detail.value;
list[index].applyNumber = value;
this.setData({
detailDataList: list
})
},
//选择资产单位
onSelectUnit(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
list[index].useUnit = e.detail.text;
list[index].useUnitIndex = e.detail.id;
this.setData({
detailDataList: list
})
},
//输入规格型号
onInputVersion(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
list[index].assetsVersion = e.detail.value;
this.setData({
detailDataList: list
})
},
//输入使用说明
onInputUseReason(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
list[index].useReason = e.detail.value;
this.setData({
detailDataList: list
})
},
//关闭申请明细选择
onShowPopup(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
list[index].showDetailsPopup = true;
this.setData({
detailDataList: list
})
},
//关闭申请明细选择
onClosePopup(e) {
var index = e.currentTarget.dataset.index
let list = this.data.detailDataList;
list[index].showDetailsPopup = false;
this.setData({
detailDataList: list
})
},
/**
* 切换临建项目
* @param {*} e
*/
onProjectSelect: function (e) {
let projectId = e.detail.id;
let projectName = e.detail.text;
app.globalData.useProjectId = projectId;
app.globalData.useProjectName = projectName;
this.setData({
initData: {
id: app.globalData.useProjectId,
text: app.globalData.useProjectName
}
})
},
//流程退回
onStopApply() {
if (!this.data.stopBtnShow) {
app.toast("请填写终止原因!")
this.setData({
stopBtnShow: true
})
return;
} else {
if (this.data.comment == "") {
app.toast("请填写终止原因!")
this.setData({
stopBtnShow: true
})
return;
}
}
let that = this
//弹出确认
wx.showModal({
title: '提示',
content: '是否终止当前流程申请?',
success: function (sm) {
if (sm.confirm) {
that.submitStopProcess();
}
}
})
},
/**
* 确认撤回
*/
submitStopProcess() {
stopProcess({
instanceId: this.data.procInsId,
comment: this.data.comment
}).then(res => {
if (res.code == 200) {
app.toast("终止流程申请成功!")
setTimeout(() => {
wx.redirectTo({
url: '../../index/index',
})
}, 500)
}
});
},
//终止原因
commentblur: function (options) {
this.data.comment = options.detail.value;
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})