angular.module('app') .directive('devCondition', ['$rootScope', '$http', 'toaster', function ($rootScope, $http, toaster) { return { restrict: 'AC', templateUrl: 'js/directives/tpl/devCondition.html', // 当前scope=false 为共享作用域 link: function (scope, el, attrs) { var $scope = scope; //代理商 数据初始化 $http.get('/agent/getAgentsDetailList', {}).then(function (data) { $scope.conditionFun.agentList = data.data.payload.dataList; }); //根据经销商列表获取分组列表 function getDealerList(agentIds, callback) { $http.post('/dealer/getDealerListByAgent', { agentIds: agentIds, pageSize: 100000 }).then(function (data) { var dealerList = data.data.payload.dataList; if (callback) { callback(dealerList); } }); } //根据经销商列表获取分组列表 function getGroupList(dealerIds, callback) { $http.post('/device/getGroupListByDealer', { dealerIds: dealerIds, pageSize: 100000 }).then(function (data) { var groupList = data.data.payload.dataList; if (callback) { callback(groupList); } }); } //获取当前行的选中代理商id列表 function getSelectAgentIdList(devConditionItem) { var list = []; for (var i in devConditionItem.selectAgents) { var item = devConditionItem.selectAgents[i]; list.push(item.id);//代理商接口过来的是id } return list } //编辑广告时候,根据选中的经销商获取经销商id function getSelectDealerIdList(devConditionItem) { var list = []; for (var i in devConditionItem.selectDealers) { var item = devConditionItem.selectDealers[i]; list.push(item.dealerId); } return list } // 获取当前组合条件的选中组id列表 function getSelectGroupIdList(devConditionItem) { var list = []; for (var i in devConditionItem.selectGroups) { var item = devConditionItem.selectGroups[i]; list.push(item.groupId); } return list } $scope.conditionFun = { agentList: [], //是否清楚下拉框标记 noClearSelect: false, //如果用户能点击了,则判定编辑窗口已经加载完成,释放编辑窗口标记、onchange事件防重复加载标记 editPanelLoaded: function () { this.noClearSelect = false; var devConditionList = $scope.dialogData.devCondition; for (var index in devConditionList) { var item = devConditionList[index]; item.initDealerEnd = false item.initGroupEnd = false } }, /** * 暂定为只去重代理商,经销商按正常操作不会有重复 * */ // 初始化该组合条件的可选代理商列表,如果传了devConditionIndex,则跳过该index组合条件的对比 initAgent: function (devConditionItem) { console.log('正在初始化可选代理商列表') var devConditionList = $scope.dialogData.devCondition; var agentList = devConditionItem.agentList = []; //遍历全量的代理商,如果被其他组合条件选中的代理商,则不在初始化这部分代理商 for (var agentIndex in this.agentList) { var hasCheckedFlag = false; var agent = this.agentList[agentIndex]; agentLabel: for (var conIndex in devConditionList) { var conItem = devConditionList[conIndex]; var selectAgents = conItem.selectAgents; for (var selectIndex in selectAgents) { var selectItem = selectAgents[selectIndex]; if (agent.id == selectItem.id) { //如果发现代理商被选中,则直接跳到最外层循环内,开始对比下个代理商;只有全量对比后没发现选中,才将该代理商加入列表 hasCheckedFlag = true; break agentLabel } } } if (!hasCheckedFlag) { //克隆代理商,避免其他组合条件相互污染 var tempAgent = $.extend(true, {}, agent) agentList.push(tempAgent); } } return agentList; }, //代理商change事件 changeAgent: function (devConditionItem) { if (devConditionItem.initDealerEnd) { //由于编辑时,dealer的数据变动,导致angular会自动多次触发onchange,需要标记控制,然后手动点击时释放 return; } else { devConditionItem.initDealerEnd = true; } console.log('触发changeAgent') //因为angular会自动触发change事件,如果是编辑且是首次change,不清空下拉框 if (this.noClearSelect) { } else { devConditionItem.dealerList = [];//清空经销商列表 devConditionItem.groupList = [];//清空分组列表 devConditionItem.selectDealers = [];//清空已选中的经销商 devConditionItem.selectGroups = [];//清空已选中的分组 } this.initDealer(devConditionItem) }, //根据代理商初始化经销商列表 initDealer: function (devConditionItem) { console.log('正在初始化经销商列表') var idList = getSelectAgentIdList(devConditionItem) if (idList.length > 0) { getDealerList(idList, function (dealerList) { devConditionItem.dealerList = dealerList // 由于ui-select 是对比引用地址,需要选中的对象和列表对象完全相等,才不会出现重复选项 if (devConditionItem.selectDealers && devConditionItem.selectDealers.length > 0) { var temSel = []; for (var index in devConditionItem.selectDealers) { var item = devConditionItem.selectDealers[index] for (var dealerIndex in dealerList) { var dealer = dealerList[dealerIndex] if (item.dealerId == dealer.dealerId) { temSel.push(dealer); } } } devConditionItem.selectDealers = temSel } }); } }, // 经销商change事件:根据经销商列表获取设备列表 changeDealer: function (devConditionItem) { if (devConditionItem.initGroupEnd) { return; } else { devConditionItem.initGroupEnd = true; } console.log('触发changeDealer') if (this.noClearSelect) { } else { devConditionItem.groupList = [];//清空分组列表 devConditionItem.selectGroups = [];//清空已选中的分组 } this.initGroup(devConditionItem); }, //根据经销商初始化分组 initGroup: function (devConditionItem) { console.log('正在初始化分组列表') var idList = getSelectDealerIdList(devConditionItem) if (idList.length > 0) { getGroupList(idList, function (groupList) { devConditionItem.groupList = groupList // 由于ui-select 是对比引用地址,需要选中的对象和列表对象完全相等,才不会出现重复选项 if (devConditionItem.selectGroups && devConditionItem.selectGroups.length > 0) { var temSel = []; for (var index in devConditionItem.selectGroups) { var item = devConditionItem.selectGroups[index] for (var groupIndex in groupList) { var group = groupList[groupIndex] if (item.groupId == group.groupId) { temSel.push(group); } } } devConditionItem.selectGroups = temSel } }); } }, // 改变设备地址后,加载设备 changeGroup: function () { // console.log('触发changeGroup') }, //全选|全不选代理商 selectAllAgent: function (devConditionItem) { if (devConditionItem.selectAgentAll) { // 如果是全选,则必须再次刷新可选代理商列表 this.initAgent(devConditionItem); devConditionItem.selectAgents = devConditionItem.agentList; } else { devConditionItem.selectAgents = []; } }, selectAllDealer: function (devConditionItem) { if (devConditionItem.selectDealerAll) { devConditionItem.selectDealers = devConditionItem.dealerList; } else { devConditionItem.selectDealers = []; } }, selectAllGroup: function (devConditionItem) { if (devConditionItem.selectGroupAll) { devConditionItem.selectGroups = devConditionItem.groupList; } else { devConditionItem.selectGroups = []; } }, // 添加一行空的设备查询添加 addDevCondition: function () { var devCondition = $scope.dialogData.devCondition; if (devCondition.length >= 5) { toaster.pop("warning", "最多5个组合条件,不能再添加"); return } //如果有空的组合条件,则不允许添加,避免出现bug for (var index in devCondition) { var devConItem = devCondition[index]; if (!devConItem.selectAgents || devConItem.selectAgents.length == 0) { toaster.pop("warning", "还有空的组合条件没填,请先填写"); return } } var item = { selectAgents: [], selectDealers: [], selectGroups: [] }; //初始化该组合条件的代理商列表 var agentList = this.initAgent(item); if (agentList.length == 0) { toaster.pop("warning", "代理商已经选完了,不能再添加组合条件!"); } else { devCondition.push(item); } }, // 删除一行查询条件 deleteDevCondition: function (index) { var devCondition = $scope.dialogData.devCondition; if (devCondition.length == 1) { toaster.pop("warning", "至少需要一个条件,不能删除"); return } if (devCondition[index]) { devCondition.splice(index, 1); } }, //下拉框分组方法 groupByAgent: function (item) { return "代理商-" + item.agentName }, groupByDealer: function (item) { return "经销商-" + item.dealerName }, // 获取初始化条件渲染 getRenderingCondition: function (devConditionSrc) { // 数据适配 var devCondition = []; //避免空条件时界面不渲染条件框 if (devConditionSrc.length == 0) { devConditionSrc = [{ selectAgents: [], selectDealers: [], selectGroups: [] }] } for (var index in devConditionSrc) { var conSrc = devConditionSrc[index]; var selectAgents = conSrc.selectAgents var selectDealers = conSrc.selectDealers; var selectGroups = conSrc.selectGroups; devCondition.push({ selectAgents: selectAgents, selectDealers: selectDealers, selectGroups: selectGroups, agentList: selectAgents, dealerList: selectDealers, groupList: selectGroups, }); } return devCondition }, // 获得条件的 精简数据 getCondition: function (dialogData) { var devConditionTemp = [] for (var index2 in dialogData.devCondition) { var item2 = dialogData.devCondition[index2]; var conTemp = { selectAgents: [], selectDealers: [], selectGroups: [], }; for (var index3 in item2.selectAgents) { var item3 = item2.selectAgents[index3] conTemp.selectAgents.push({ id: item3.id, nickname: item3.nickname, }) } for (var index3 in item2.selectDealers) { var item3 = item2.selectDealers[index3] conTemp.selectDealers.push({ dealerId: item3.dealerId, dealerName: item3.dealerName, }) } for (var index3 in item2.selectGroups) { var item3 = item2.selectGroups[index3] conTemp.selectGroups.push({ groupId: item3.groupId, groupName: item3.groupName, }) } devConditionTemp.push(conTemp) } return devConditionTemp; }, }; /**end***/ } }; }]);