import { readNotes, readDeployNotes, startProcessInstance } from '../../../api/flowable' import { findMyDeptList, findAllByCategory } from '../../../api/publics' import config from '../../../config' import { getToken } from '../../../utils/auth' const app = getApp() Page({ /** * 页面的初始数据 */ data: { maxDate: new Date(2088, 1, 1).getTime(), options: {}, initData: {}, deptList: [], dataList: [], useDeptId: "", useTime: "", applyReason: "", limit: 9, detailDataList: [], filesData: [], fileType: ["png", "jpg", "jpeg"], flowNodeList: [], flowNodes: [], stepList: [], active: "", }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { this.setData({ options: options, initData: { id: app.globalData.useProjectId, text: app.globalData.useProjectName } }) this.initDeptList(); this.findMyDeptAssetsList(); this.findFlowNodes(); this.newApplyDetail(); }, /** * 栏目触发事件 */ 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 }) }, /** * 初始化部门列表 */ initDeptList() { findMyDeptList().then(res => { let list = []; res.data.forEach(item => { list.push({ "id": item.deptId, "text": item.deptName }); }); this.setData({ deptList: list, useDeptId: app.globalData.userData?.deptId, }) }); }, //查询工作流节点 findFlowNodes() { //readNotes readDeployNotes(this.data.options.deploymentId).then(res => { if (res.code == 200) { let list = [{ text: '开始' }]; res.data.forEach(item => { list.push({ text: item.name, desc: '' }); }); list.push({ text: '结束' }); this.setData({ stepList: 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 }) }, //保存 onSave() { let { options, initData, useDeptId, useTime, applyReason, detailDataList, filesData } = this.data; //数据效验 if (!initData.id || !options.procDefId || !options.category || !options.deploymentId) { app.toast("数据异常,请刷新页面重试!") return false; } if (useDeptId == "") { app.toast("请选择使用单位!") return false; } if (useTime == "") { app.toast("请选择使用时间!") return false; } if (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 (filesData.length > 0) { for (let i = 0; i < filesData.length; i++) { let _fileType = filesData[0].split('.'); _fileType = _fileType[_fileType.length - 1].toLowerCase(); if (this.data.fileType.indexOf(_fileType) == -1) { app.toast("申请附件不支持 [ " + _fileType + " ] 格式!请检查第" + (i + 1) + "个附件") return false; } } } let that = this; wx.showModal({ title: '提示', content: '是否确定提交流程申请?', success: function (sm) { if (sm.confirm) { that.submit() } else if (sm.cancel) { console.log('用户点击取消'); } } }) }, /** * 表单确认提交 */ submit() { let { filesData, } = this.data; let fileUrls = []; if (filesData.length > 0) { filesData.forEach(async (item) => { //这里复杂的图片上传,改为同步上传,因为小程序只能上传一张图片 let ajaxResult = await this.syncUploadImage(item); fileUrls.push(ajaxResult.data.fileName); //验证图片上传完毕 if (fileUrls.length == filesData.length) { this.sbm(fileUrls.toString()); } }) } else { this.sbm(""); } }, sbm(fileUrls) { let { options, initData, useDeptId, useTime, applyReason, detailDataList, dataList } = this.data; let applyDetailList = []; detailDataList.forEach(detail => { applyDetailList.push({ superTypeKey: options.category, typeId: dataList[detail.mainActiveIndex].id, typeName: dataList[detail.mainActiveIndex].name, assetsId: detail.detailId, assetsName: detail.detailName, number: detail.applyNumber, assetsUnit: detail.useUnit, assetsVersion: detail.assetsVersion, useReason: detail.useReason }); }); let params = { procDefId: options.procDefId, proProjectApply: { deptId: useDeptId, projId: initData.id, projName: initData.text, applyType: options.category, applyStatus: 1, useTime, applyReason, applyFiles: fileUrls, proProjectApplyDetailList: applyDetailList } } startProcessInstance(params).then(res => { if (res.code == '200') { app.toast("提交流程申请成功!", 'success'); //跳转页面 wx.redirectTo({ url: '../../index/index', }) } }); }, /** * 这里考虑上传图片异步问题,封装为同步 */ syncUploadImage(file) { let url = config.baseUrl + "/common/upload"; let name = "file"; return new Promise((resolve, reject) => { wx.uploadFile({ url, // 上传的服务器接口地址 filePath: file, header: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", 'Authorization': 'Bearer ' + getToken(), }, name, //上传的所需字段,后端提供 formData: null, 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) } }); }) }, //申请说明输入 applyReasonblur: function (options) { this.data.applyReason = options.detail.value; }, //申请附件上传 fileUpload(options) { let files = options.detail; this.setData({ filesData: files }); }, //使用单位 onSelectDept(e) { this.setData({ useDeptId: e.detail.id }) }, //使用时间 onInputTime(e) { this.setData({ useTime: e.detail }) }, //查询部门资产列表信息 findMyDeptAssetsList() { findAllByCategory(this.data.options.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.setData({ dataList: list }) } }); }, //输入申请数量 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 } }) }, returnToPage: function () { /*关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/ wx.redirectTo({ url: '../myFlowDefinition/index', }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { }, /** * 用户点击右上角分享 */ onShareAppMessage() { } })