apiready = function () { var ctrl = { init: {}, bind: {}, backCallback: {}, firstLoadUsual: !$api.getStorage('usualIns') ? 'yes' : 'no', // yes:当前 日常检查项 页面是从异常巡检项填写页保存跳转来,no:当前页面是首次渲染 firstLoadReview: !$api.getStorage('reviewIns') ? 'yes' : 'no', // yes:当前 复检检查项 页面是从异常巡检项填写页保存跳转来,no:当前页面是首次渲染 firstLoadNew: !$api.getStorage('newIns') ? 'yes' : 'no', // yes:当前 新增检查项 页面是从异常巡检项填写页保存跳转来,no:当前页面是首次渲染 // 当前展示的tab 页类型,1:日常检查项 2:突发项 3:复检项 tabType: 1, date: '', prId: null, prName: '', taskId: null, problems: null, // 设备缺陷信息字符串 problemsObj: null, // 设备缺陷信息对象 emptyType: { // 对应的tab是否需要展示无数据提示 usual: false, review: false, new: false }, newTflen: 0, // 新增突发项个数 serverPicUrls: [], } ctrl.init = function () { // 适配安卓状态栏 CommonModel.fitInStatusBar(); api.showProgress({ title: '载入中...', text: '请稍后', modal: false }); ctrl.prId = api.pageParam.id; ctrl.prName = api.pageParam.name; ctrl.taskId = api.pageParam.taskid; // 获取保存的设备缺陷信息 if ($api.getStorage('problems')) { ctrl.problems = $api.getStorage('problems'); ctrl.problemsObj = JSON.parse($api.getStorage('problems')) } var dateUtil = new DateUtils(); ctrl.date = dateUtil.getFormattedDate('yyyy-MM-dd'); // 将title改成配电室名 $api.html($api.dom('#title-prname'), ctrl.prName); ctrl.initUsualTab() ctrl.initReviewTab() ctrl.renderNewTasks() ctrl.bind(); } ctrl.bind = function () { var height = $(window).height() - $("header").height() - $(".tabs").height(); $(".content-container").css("height", height); //绑定返回按钮 $api.addEvt($api.dom("#back"), "touchend", function () { ctrl.backCallback(); }) //点击系统返回按钮 api.addEventListener({ name: 'keyback' }, function (ret, err) { ctrl.backCallback(); }); //点击 日常检查项 tab按钮 $api.addEvt($api.dom("#usual-task-tab"), "touchend", function () { if (ctrl.tabType == 1) { return } if (ctrl.emptyType.usual) { $api.css($api.dom('#inspectionitem-empty-tips'), "display:block"); } else { $api.css($api.dom('#inspectionitem-empty-tips'), "display:none"); } $api.addCls(this, "active"); $api.removeCls($api.dom("#review-task-tab"), "active"); $api.removeCls($api.dom("#new-task-tab"), "active"); $api.css($api.dom("#usual-task-panel"), 'display:block'); $api.css($api.dom("#review-task-panel"), 'display:none'); $api.css($api.dom("#new-task-panel"), 'display:none'); ctrl.tabType = 1 // ctrl.initPrMsgTab() }, false); //点击 复查检查项 tab按钮 $api.addEvt($api.dom("#review-task-tab"), "touchend", function () { if (ctrl.tabType == 3) { return } if (ctrl.emptyType.review) { $api.css($api.dom('#inspectionitem-empty-tips'), "display:block"); } else { $api.css($api.dom('#inspectionitem-empty-tips'), "display:none"); } $api.addCls(this, "active"); $api.removeCls($api.dom("#usual-task-tab"), "active"); $api.removeCls($api.dom("#new-task-tab"), "active"); $api.css($api.dom("#review-task-panel"), 'display:block'); $api.css($api.dom("#usual-task-panel"), 'display:none'); $api.css($api.dom("#new-task-panel"), 'display:none'); ctrl.tabType = 3 // 初始化复检检查项 tab // ctrl.initReviewTab() }, false); //点击 新增检查项 tab按钮 $api.addEvt($api.dom("#new-task-tab"), "touchend", function () { if (ctrl.tabType == 2) { return } if (ctrl.emptyType.new) { $api.css($api.dom('#inspectionitem-empty-tips'), "display:block"); } else { $api.css($api.dom('#inspectionitem-empty-tips'), "display:none"); } $api.addCls(this, "active"); $api.removeCls($api.dom("#review-task-tab"), "active"); $api.removeCls($api.dom("#usual-task-tab"), "active"); $api.css($api.dom("#new-task-panel"), 'display:block'); $api.css($api.dom("#review-task-panel"), 'display:none'); $api.css($api.dom("#usual-task-panel"), 'display:none'); ctrl.tabType = 2 // ctrl.getRepairLogs(); }, false); // radio选择框改变事件 /* ====================日常检查项 事件====================== */ // 点击任意地方,关闭task-item-status-ok弹框 $api.addEvt($api.dom("body"), "touchend", function () { // var domLis = $('.task-item-status-ok.display') // // var domLis = $api.dom(".task-item-status-ok.display") // var length = domLis.length // for (var i = 0; i < length; i++) { // $api.removeCls(domLis[i], 'display'); // } }, false); /* ====================复查检查项 事件====================== */ /* ====================新增检查项 事件====================== */ // 新增突发检查项 按钮 点击事件 $('#new-add-btn').on("touchend", function () { api.prompt({ title: '巡检项描述:' }, function (ret, err) { var text = ret.text; if (ret.buttonIndex == 2) { // 点击确定按钮 ctrl.addNewInspItem(text); } }) }) /* * =====================自动勾选、巡检完成=================== */ // 自动勾选剩余项按钮 点击事件 $('#auto-checked-all').on("touchend", function () { api.showProgress({ title: '处理中...', text: '请稍后', modal: true }); // 1、将剩余未勾选的 √ 状态改为选中状态 var domList = $(".task-item[data-status='']") var len = domList.length for (var i = 0; i < len; i++) { var dom = $($(domList[i]).find('.task-item-img-success')[0]) if (!dom.hasClass('light')) { dom.addClass('light') } } // 2、将剩余未选项的父元素 .task-item 上的 data-status 属性值填充为0,并更新localStorage var usualIns = $api.getStorage('usualIns'); var reviewIns = $api.getStorage('reviewIns'); var newIns = $api.getStorage('newIns'); var usualInsObj = usualIns? JSON.parse(usualIns) : null; var reviewInsObj = reviewIns? JSON.parse(reviewIns) : null; var newInsObj = newIns? JSON.parse(newIns) : null; var taskItemDomList = $('.task-item') var length = taskItemDomList.length for (var j = 0; j < length; j++) { var dom = $(taskItemDomList[j]) var status = dom.data('status') var itemId; if (status === '') { dom.data('status', 0) // 更新 localStorage var id = $(dom.parents('.task-panel')[0]).attr('id') switch (id) { case 'usual-task-panel': itemId = dom.data('itemid') usualInsObj[itemId] = 0; $api.rmStorage('usualIns'); $api.setStorage('usualIns', JSON.stringify(usualInsObj)); break; case 'review-task-panel': itemId = dom.data('itemid') reviewInsObj[itemId] = 0; $api.rmStorage('reviewIns'); $api.setStorage('reviewIns', JSON.stringify(reviewInsObj)); break; case 'new-task-panel': itemId = dom.data('index') newInsObj[itemId]['s'] = 0; $api.rmStorage('newIns'); $api.setStorage('newIns', JSON.stringify(newInsObj)); break; } } } api.hideProgress(); }) // 巡检完成 $('#inspection-finished').on("touchend", function () { //1、检查是否存在未勾选的巡检项 var emptyItemList = $(".task-item[data-status='']"); if (emptyItemList.length) { api.confirm({ title: '', msg: '有未勾选的巡检项', buttons: ['确定', '取消'] }, function(ret, err) { }); return; } api.showProgress({ title: '提交中...', text: '请稍后', modal: false }); //2、从localStorage中获取设备缺陷信息(pics路径、desc描述) // 存在新增突发项时,提交新增突发项 var newItemDoms = $('#new-task-panel .task-item') ctrl.newTflen = newItemDoms.length; if (ctrl.newTflen) { newItemDoms.forEach(function (newItemDom, newItemDomIndex) { var checkItem = $($(newItemDom).find('.task-item-desc')[0]).text(); var status = $(newItemDom).data('status'); (function () { ctrl.submitTfItem(checkItem, status, $(newItemDom), newItemDomIndex); })() }) } else { if (ctrl.problems) { // 没有突发项提交,但有设备缺陷 ctrl.handleUploadPic(); } else { // 没有突发项提交,也没有设备缺陷 ctrl.comitUsual(); } } //3、先将每一条设备缺陷中的图片上传,再将当前设备缺陷提交;循环提交全部设备缺陷 //4、调用巡检完成接口,完成当前配电室的巡检 //5、将 localStorage 中保存的巡检项状态信息 和 设备缺陷信息清空 }) } /* 日常检查项 tab 中的事件绑定 */ ctrl.usualBind = function () { // 点击设备分类,自动折叠当前分类的巡检项 $("#usual-task-panel").on("touchend", ".category-name", function () { // 隐藏 当前分类的巡检项 $api.toggleCls($(this).next()[0], 'hide'); // 分类名前的箭头旋转90度 $api.toggleCls($api.dom(this, 'img'), 'transform'); }) // 点击√ $("#usual-task-panel .task-item-img-success").on("touchend", "img", function (e) { e.stopPropagation(); //切换√选中状态 $api.addCls($(this).parent()[0], 'light'); // 将同一项的x选中状态取消 $api.removeCls($($(this).parents()[0]).siblings('.task-item-img-error')[0], 'light'); // 切换弹框显示状态 $api.toggleCls($(this).siblings('.task-item-status-ok')[0], 'display') // 更新 父元素 .task-item 上的 data-status 属性值 // 1、获取 当前巡检项选择的状态值 var val = $($(this).siblings('.task-item-status-ok')[0]).children("input:checked")[0].value // 2、将状态值 更新到父元素 .task-item 上的 data-status 属性 var itemDom = $($(this).parents('.task-item')[0]) itemDom.data('status', val) // 保存在 localStorage 中的设备缺陷,判断是否含有当前巡检项的问题,若有则删除,并更新设备缺陷 storage var itemId = itemDom.data('itemid') var problems = $api.getStorage('problems'); if (!problems) { return } var problemsObj = JSON.parse(problems); var probArr = problemsObj.arr; var len = probArr.length; if (len) { var _probArr = problemsObj.arr; probArr.forEach(function (t, i) { if (t.itemId == itemId) { _probArr.splice(i, 1) } }) problemsObj.arr = _probArr; $api.rmStorage('problems'); $api.setStorage('problems', JSON.stringify(problemsObj)); } }) // 单选框 选中事件 $('#usual-task-panel input[type=radio]').change(function () { // 将 value 值 更新到父元素 .task-item 上的 data-status 属性值 var value = this.value $(this).parents('.task-item').data('status', value) }) // 点击×,切换×选中状态 $("#usual-task-panel .task-item-img-error").on("touchend", "img", function () { // 切换x选中状态 // $api.addCls($(this).parent()[0], 'light'); // 将同一项的√选中状态取消 // $api.removeCls($($(this).parents()[0]).siblings('.task-item-img-success')[0], 'light'); /** * 将当前item的勾选状态更新到localStorage中的 usualIns 中 * */ var usualInsObj = JSON.parse($api.getStorage('usualIns')) // 日常检查项domList var usualItems = $('#usual-task-panel li.task-item'); usualItems.forEach(function (uItem, uI) { var itemId = $(uItem).attr('data-itemid') usualInsObj[itemId] = $(uItem).attr('data-status') }) $api.rmStorage('usualIns'); $api.setStorage('usualIns', JSON.stringify(usualInsObj)) // 将状态值 更新到父元素 .task-item 上的 data-status 属性 // $(this).parents('.task-item').data('status', 2); var itemId = $($(this).parents('.task-item')[0]).data('itemid'); // 跳转到设备缺陷页 api.openWin({ name: 'inspectionProblem', url: './inspectionProblem.html', reload: true, pageParam: { prid: ctrl.prId, taskid: ctrl.taskId, itemid: itemId, source: ctrl.tabType, prname: ctrl.prName, tabtype: 'usual' } }); }) } /** * 复查检查项 tab 中的事件绑定 */ ctrl.reviewBind = function () { // 点击√ $("#review-task-panel .task-item-img-success").on("touchend", "img", function (e) { e.stopPropagation(); //切换√选中状态 $api.addCls($(this).parent()[0], 'light'); // 将同一项的x选中状态取消 $api.removeCls($($(this).parents()[0]).siblings('.task-item-img-error')[0], 'light'); // 切换弹框显示状态 $api.toggleCls($(this).siblings('.task-item-status-ok')[0], 'display') // 更新 父元素 .task-item 上的 data-status 属性值 // 1、获取 当前巡检项选择的状态值 var val = $($(this).siblings('.task-item-status-ok')[0]).children("input:checked")[0].value // 2、将状态值 更新到父元素 .task-item 上的 data-status 属性 var itemDom = $($(this).parents('.task-item')[0]) itemDom.data('status', val) // 保存在 localStorage 中的设备缺陷,判断是否含有当前巡检项的问题,若有则删除,并更新设备缺陷 storage var itemId = itemDom.data('itemid') var problems = $api.getStorage('problems'); if (!problems) { return } var problemsObj = JSON.parse(problems); var probArr = problemsObj.arr; var len = probArr.length; if (len) { var _probArr = problemsObj.arr; probArr.forEach(function (t, i) { if (t.itemId == itemId) { _probArr.splice(i, 1) } }) problemsObj.arr = _probArr; $api.rmStorage('problems'); $api.setStorage('problems', JSON.stringify(problemsObj)); } }) // 单选框 选中事件 $('#review-task-panel input[type=radio]').change(function () { // 将 value 值 更新到父元素 .task-item 上的 data-status 属性值 var value = this.value $(this).parents('.task-item').data('status', value) }) // 点击×,切换×选中状态 $("#review-task-panel .task-item-img-error").on("touchend", "img", function () { // 切换x选中状态 // $api.addCls($(this).parent()[0], 'light'); // 将同一项的√选中状态取消 // $api.removeCls($($(this).parents()[0]).siblings('.task-item-img-success')[0], 'light'); /** * 将当前item的勾选状态更新到localStorage中的 reviewIns 中 * */ var reviewInsObj = JSON.parse($api.getStorage('reviewIns')) // 日常检查项domList var reviewItems = $('#review-task-panel li.task-item'); reviewItems.forEach(function (vItem, vI) { var itemId = $(vItem).attr('data-itemid') reviewInsObj[itemId] = $(vItem).attr('data-status') }) $api.rmStorage('reviewIns'); $api.setStorage('reviewIns', JSON.stringify(reviewInsObj)) // 将状态值 更新到父元素 .task-item 上的 data-status 属性 // $(this).parents('.task-item').data('status', 2); var itemId = $($(this).parents('.task-item')[0]).data('itemid'); // 跳转到设备缺陷页 api.openWin({ name: 'inspectionProblem', url: './inspectionProblem.html', reload: true, pageParam: { prid: ctrl.prId, taskid: ctrl.taskId, itemid: itemId, source: ctrl.tabType, prname: ctrl.prName, tabtype: 'review' } }); }) } /** * 新增检查项 tab 中的事件绑定 */ ctrl.newBind = function () { // 点击√ $($("#new-task-panel .task-item-img-success").last()[0]).on("touchend", "img", function (e) { e.stopPropagation(); //切换√选中状态 $api.addCls($(this).parent()[0], 'light'); // 将同一项的x选中状态取消 $api.removeCls($($(this).parents()[0]).siblings('.task-item-img-error')[0], 'light'); // 切换弹框显示状态 $api.toggleCls($(this).siblings('.task-item-status-ok')[0], 'display') // 更新 父元素 .task-item 上的 data-status 属性值 // 1、获取 当前巡检项选择的状态值 var val = $($(this).siblings('.task-item-status-ok')[0]).children("input:checked")[0].value // 2、将状态值 更新到父元素 .task-item 上的 data-status 属性 var itemDom = $($(this).parents('.task-item')[0]) itemDom.data('status', val) // 保存在 localStorage 中的设备缺陷,判断是否含有当前巡检项的问题,若有则删除,并更新设备缺陷 storage var index = itemDom.data('index') var problems = $api.getStorage('problems'); if (!problems) { return } var problemsObj = JSON.parse(problems); var newProbArr = problemsObj.newArr; var len = newProbArr.length; if (len) { var _newProbArr = problemsObj.newArr; newProbArr.forEach(function (t, i) { if (t.index == index) { _newProbArr.splice(i, 1) } }) problemsObj.newArr = _newProbArr; $api.rmStorage('problems'); $api.setStorage('problems', JSON.stringify(problemsObj)); } }) // 单选框 选中事件 $('#new-task-panel input[type=radio]').change(function () { // 将 value 值 更新到父元素 .task-item 上的 data-status 属性值 var value = this.value $(this).parents('.task-item').data('status', value) }) // 点击×,切换×选中状态 $($("#new-task-panel .task-item-img-error").last()[0]).on("touchend", "img", function () { // 切换x选中状态 // $api.addCls($(this).parent()[0], 'light'); // 将同一项的√选中状态取消 // $api.removeCls($($(this).parents()[0]).siblings('.task-item-img-success')[0], 'light'); /** * 将当前item的勾选状态更新到localStorage中的 newIns 中 * */ var newInsObj = JSON.parse($api.getStorage('newIns')) // 日常检查项domList var newItems = $('#new-task-panel li.task-item'); newItems.forEach(function (vItem, vI) { var index = $(vItem).data('index') newInsObj[index]['s'] = $(vItem).data('status') }) $api.rmStorage('newIns'); $api.setStorage('newIns', JSON.stringify(newInsObj)) // 将状态值 更新到父元素 .task-item 上的 data-status 属性 // $(this).parents('.task-item').data('status', 2); var index = $($(this).parents('.task-item')[0]).data('index'); // 跳转到设备缺陷页 api.openWin({ name: 'inspectionProblem', url: './inspectionProblem.html', reload: true, pageParam: { prid: ctrl.prId, taskid: ctrl.taskId, itemid: index, source: ctrl.tabType, prname: ctrl.prName, tabtype: 'new' } }); }) } /** * 弹出提示框 */ ctrl.toast = function (msg) { api.toast({ msg: msg, duration: 3000, locaiton: 'top' }); } ctrl.backCallback = function () { //关闭首页正在加载的提示框 api.execScript({ name: 'index', frameName: 'featureFrame', script: "api.hideProgress();" }); api.setScreenOrientation({ orientation: 'auto_portrait' }); api.setFullScreen({ fullScreen: false }); api.closeWin({}); } /* ====================日常检查项====================== */ // 初始化 日常检查项 tab ctrl.initUsualTab = function () { ctrl.getUsualTasks() } // 获取日常检查项 ctrl.getUsualTasks = function () { api.showProgress({ title: '载入中...', text: '请稍后', modal: false }); var url = "/ems/rest/xj/routine/item/list"; var data = { prId: ctrl.prId, xjDate: ctrl.date } $api.get(url, data, function (res, err) { api.hideProgress(); if (err) { ctrl.toast("网络请求失败"); } else { if (res.code == 200) { if (res.body && res.body.length > 0) { ctrl.renderUsualTasks(res.body) ctrl.usualBind() ctrl.emptyType.usual = false; $api.css($api.dom('#inspectionitem-empty-tips'), "display:none"); } else { ctrl.emptyType.usual = true; $api.css($api.dom('#inspectionitem-empty-tips'), "display:block"); } } else { ctrl.toast("服务器响应错误" + (res.code ? (",错误码:" + res.code) : "")); } } }) } // 渲染日常巡检项 ctrl.renderUsualTasks = function (data) { /** * 将当前日常检查项的每项的勾选状态保存到localStorage中 * 结构: * usualIns: { * itemId: val // 勾选状态值 * } * */ var type = false; var usualInsObj; if (ctrl.firstLoadUsual == 'yes') { // 当前日常检查项DOM是首次渲染,不是从异常检查项页面中保存后跳转而来 type = true; var usualIns = '' // 将日常检查项信息初始化到localStorage中 $api.setStorage('usualIns', JSON.stringify(usualIns)) } else { // 当前日常检查项页面是从异常检查项页面中保存后跳转而来 // 获取 localStorage 中保存的巡检项状态信息 var usualIns = $api.getStorage('usualIns'); usualInsObj = JSON.parse(usualIns); } // 处理DOM $('#usual-task-panel>ul').empty(); var tpl = ''; var len = data.length for (var i = 0; i < len; i++) { var categoryItem = data[i] var itemList = categoryItem.routineItems var categoryDom = '' categoryDom += '