devCondition.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. angular.module('app')
  2. .directive('devCondition', ['$rootScope', '$http', 'toaster', function ($rootScope, $http, toaster) {
  3. return {
  4. restrict: 'AC',
  5. templateUrl: 'js/directives/tpl/devCondition.html',
  6. // 当前scope=false 为共享作用域
  7. link: function (scope, el, attrs) {
  8. var $scope = scope;
  9. //代理商 数据初始化
  10. $http.get('/agent/getAgentsDetailList', {}).then(function (data) {
  11. $scope.conditionFun.agentList = data.data.payload.dataList;
  12. });
  13. //根据经销商列表获取分组列表
  14. function getDealerList(agentIds, callback) {
  15. $http.post('/dealer/getDealerListByAgent', {
  16. agentIds: agentIds, pageSize: 100000
  17. }).then(function (data) {
  18. var dealerList = data.data.payload.dataList;
  19. if (callback) {
  20. callback(dealerList);
  21. }
  22. });
  23. }
  24. //根据经销商列表获取分组列表
  25. function getGroupList(dealerIds, callback) {
  26. $http.post('/device/getGroupListByDealer', {
  27. dealerIds: dealerIds, pageSize: 100000
  28. }).then(function (data) {
  29. var groupList = data.data.payload.dataList;
  30. if (callback) {
  31. callback(groupList);
  32. }
  33. });
  34. }
  35. //获取当前行的选中代理商id列表
  36. function getSelectAgentIdList(devConditionItem) {
  37. var list = [];
  38. for (var i in devConditionItem.selectAgents) {
  39. var item = devConditionItem.selectAgents[i];
  40. list.push(item.id);//代理商接口过来的是id
  41. }
  42. return list
  43. }
  44. //编辑广告时候,根据选中的经销商获取经销商id
  45. function getSelectDealerIdList(devConditionItem) {
  46. var list = [];
  47. for (var i in devConditionItem.selectDealers) {
  48. var item = devConditionItem.selectDealers[i];
  49. list.push(item.dealerId);
  50. }
  51. return list
  52. }
  53. // 获取当前组合条件的选中组id列表
  54. function getSelectGroupIdList(devConditionItem) {
  55. var list = [];
  56. for (var i in devConditionItem.selectGroups) {
  57. var item = devConditionItem.selectGroups[i];
  58. list.push(item.groupId);
  59. }
  60. return list
  61. }
  62. $scope.conditionFun = {
  63. agentList: [],
  64. //是否清楚下拉框标记
  65. noClearSelect: false,
  66. //如果用户能点击了,则判定编辑窗口已经加载完成,释放编辑窗口标记、onchange事件防重复加载标记
  67. editPanelLoaded: function () {
  68. this.noClearSelect = false;
  69. var devConditionList = $scope.dialogData.devCondition;
  70. for (var index in devConditionList) {
  71. var item = devConditionList[index];
  72. item.initDealerEnd = false
  73. item.initGroupEnd = false
  74. }
  75. },
  76. /**
  77. * 暂定为只去重代理商,经销商按正常操作不会有重复
  78. * */
  79. // 初始化该组合条件的可选代理商列表,如果传了devConditionIndex,则跳过该index组合条件的对比
  80. initAgent: function (devConditionItem) {
  81. console.log('正在初始化可选代理商列表')
  82. var devConditionList = $scope.dialogData.devCondition;
  83. var agentList = devConditionItem.agentList = [];
  84. //遍历全量的代理商,如果被其他组合条件选中的代理商,则不在初始化这部分代理商
  85. for (var agentIndex in this.agentList) {
  86. var hasCheckedFlag = false;
  87. var agent = this.agentList[agentIndex];
  88. agentLabel:
  89. for (var conIndex in devConditionList) {
  90. var conItem = devConditionList[conIndex];
  91. var selectAgents = conItem.selectAgents;
  92. for (var selectIndex in selectAgents) {
  93. var selectItem = selectAgents[selectIndex];
  94. if (agent.id == selectItem.id) {
  95. //如果发现代理商被选中,则直接跳到最外层循环内,开始对比下个代理商;只有全量对比后没发现选中,才将该代理商加入列表
  96. hasCheckedFlag = true;
  97. break agentLabel
  98. }
  99. }
  100. }
  101. if (!hasCheckedFlag) {
  102. //克隆代理商,避免其他组合条件相互污染
  103. var tempAgent = $.extend(true, {}, agent)
  104. agentList.push(tempAgent);
  105. }
  106. }
  107. return agentList;
  108. },
  109. //代理商change事件
  110. changeAgent: function (devConditionItem) {
  111. if (devConditionItem.initDealerEnd) {
  112. //由于编辑时,dealer的数据变动,导致angular会自动多次触发onchange,需要标记控制,然后手动点击时释放
  113. return;
  114. } else {
  115. devConditionItem.initDealerEnd = true;
  116. }
  117. console.log('触发changeAgent')
  118. //因为angular会自动触发change事件,如果是编辑且是首次change,不清空下拉框
  119. if (this.noClearSelect) {
  120. } else {
  121. devConditionItem.dealerList = [];//清空经销商列表
  122. devConditionItem.groupList = [];//清空分组列表
  123. devConditionItem.selectDealers = [];//清空已选中的经销商
  124. devConditionItem.selectGroups = [];//清空已选中的分组
  125. }
  126. this.initDealer(devConditionItem)
  127. },
  128. //根据代理商初始化经销商列表
  129. initDealer: function (devConditionItem) {
  130. console.log('正在初始化经销商列表')
  131. var idList = getSelectAgentIdList(devConditionItem)
  132. if (idList.length > 0) {
  133. getDealerList(idList, function (dealerList) {
  134. devConditionItem.dealerList = dealerList
  135. // 由于ui-select 是对比引用地址,需要选中的对象和列表对象完全相等,才不会出现重复选项
  136. if (devConditionItem.selectDealers && devConditionItem.selectDealers.length > 0) {
  137. var temSel = [];
  138. for (var index in devConditionItem.selectDealers) {
  139. var item = devConditionItem.selectDealers[index]
  140. for (var dealerIndex in dealerList) {
  141. var dealer = dealerList[dealerIndex]
  142. if (item.dealerId == dealer.dealerId) {
  143. temSel.push(dealer);
  144. }
  145. }
  146. }
  147. devConditionItem.selectDealers = temSel
  148. }
  149. });
  150. }
  151. },
  152. // 经销商change事件:根据经销商列表获取设备列表
  153. changeDealer: function (devConditionItem) {
  154. if (devConditionItem.initGroupEnd) {
  155. return;
  156. } else {
  157. devConditionItem.initGroupEnd = true;
  158. }
  159. console.log('触发changeDealer')
  160. if (this.noClearSelect) {
  161. } else {
  162. devConditionItem.groupList = [];//清空分组列表
  163. devConditionItem.selectGroups = [];//清空已选中的分组
  164. }
  165. this.initGroup(devConditionItem);
  166. },
  167. //根据经销商初始化分组
  168. initGroup: function (devConditionItem) {
  169. console.log('正在初始化分组列表')
  170. var idList = getSelectDealerIdList(devConditionItem)
  171. if (idList.length > 0) {
  172. getGroupList(idList, function (groupList) {
  173. devConditionItem.groupList = groupList
  174. // 由于ui-select 是对比引用地址,需要选中的对象和列表对象完全相等,才不会出现重复选项
  175. if (devConditionItem.selectGroups && devConditionItem.selectGroups.length > 0) {
  176. var temSel = [];
  177. for (var index in devConditionItem.selectGroups) {
  178. var item = devConditionItem.selectGroups[index]
  179. for (var groupIndex in groupList) {
  180. var group = groupList[groupIndex]
  181. if (item.groupId == group.groupId) {
  182. temSel.push(group);
  183. }
  184. }
  185. }
  186. devConditionItem.selectGroups = temSel
  187. }
  188. });
  189. }
  190. },
  191. // 改变设备地址后,加载设备
  192. changeGroup: function () {
  193. // console.log('触发changeGroup')
  194. },
  195. //全选|全不选代理商
  196. selectAllAgent: function (devConditionItem) {
  197. if (devConditionItem.selectAgentAll) {
  198. // 如果是全选,则必须再次刷新可选代理商列表
  199. this.initAgent(devConditionItem);
  200. devConditionItem.selectAgents = devConditionItem.agentList;
  201. } else {
  202. devConditionItem.selectAgents = [];
  203. }
  204. },
  205. selectAllDealer: function (devConditionItem) {
  206. if (devConditionItem.selectDealerAll) {
  207. devConditionItem.selectDealers = devConditionItem.dealerList;
  208. } else {
  209. devConditionItem.selectDealers = [];
  210. }
  211. },
  212. selectAllGroup: function (devConditionItem) {
  213. if (devConditionItem.selectGroupAll) {
  214. devConditionItem.selectGroups = devConditionItem.groupList;
  215. } else {
  216. devConditionItem.selectGroups = [];
  217. }
  218. },
  219. // 添加一行空的设备查询添加
  220. addDevCondition: function () {
  221. var devCondition = $scope.dialogData.devCondition;
  222. if (devCondition.length >= 5) {
  223. toaster.pop("warning", "最多5个组合条件,不能再添加");
  224. return
  225. }
  226. //如果有空的组合条件,则不允许添加,避免出现bug
  227. for (var index in devCondition) {
  228. var devConItem = devCondition[index];
  229. if (!devConItem.selectAgents || devConItem.selectAgents.length == 0) {
  230. toaster.pop("warning", "还有空的组合条件没填,请先填写");
  231. return
  232. }
  233. }
  234. var item = {
  235. selectAgents: [],
  236. selectDealers: [],
  237. selectGroups: []
  238. };
  239. //初始化该组合条件的代理商列表
  240. var agentList = this.initAgent(item);
  241. if (agentList.length == 0) {
  242. toaster.pop("warning", "代理商已经选完了,不能再添加组合条件!");
  243. } else {
  244. devCondition.push(item);
  245. }
  246. },
  247. // 删除一行查询条件
  248. deleteDevCondition: function (index) {
  249. var devCondition = $scope.dialogData.devCondition;
  250. if (devCondition.length == 1) {
  251. toaster.pop("warning", "至少需要一个条件,不能删除");
  252. return
  253. }
  254. if (devCondition[index]) {
  255. devCondition.splice(index, 1);
  256. }
  257. },
  258. //下拉框分组方法
  259. groupByAgent: function (item) {
  260. return "代理商-" + item.agentName
  261. },
  262. groupByDealer: function (item) {
  263. return "经销商-" + item.dealerName
  264. },
  265. // 获取初始化条件渲染
  266. getRenderingCondition: function (devConditionSrc) {
  267. // 数据适配
  268. var devCondition = [];
  269. //避免空条件时界面不渲染条件框
  270. if (devConditionSrc.length == 0) {
  271. devConditionSrc = [{
  272. selectAgents: [],
  273. selectDealers: [],
  274. selectGroups: []
  275. }]
  276. }
  277. for (var index in devConditionSrc) {
  278. var conSrc = devConditionSrc[index];
  279. var selectAgents = conSrc.selectAgents
  280. var selectDealers = conSrc.selectDealers;
  281. var selectGroups = conSrc.selectGroups;
  282. devCondition.push({
  283. selectAgents: selectAgents,
  284. selectDealers: selectDealers,
  285. selectGroups: selectGroups,
  286. agentList: selectAgents,
  287. dealerList: selectDealers,
  288. groupList: selectGroups,
  289. });
  290. }
  291. return devCondition
  292. },
  293. // 获得条件的 精简数据
  294. getCondition: function (dialogData) {
  295. var devConditionTemp = []
  296. for (var index2 in dialogData.devCondition) {
  297. var item2 = dialogData.devCondition[index2];
  298. var conTemp = {
  299. selectAgents: [],
  300. selectDealers: [],
  301. selectGroups: [],
  302. };
  303. for (var index3 in item2.selectAgents) {
  304. var item3 = item2.selectAgents[index3]
  305. conTemp.selectAgents.push({
  306. id: item3.id,
  307. nickname: item3.nickname,
  308. })
  309. }
  310. for (var index3 in item2.selectDealers) {
  311. var item3 = item2.selectDealers[index3]
  312. conTemp.selectDealers.push({
  313. dealerId: item3.dealerId,
  314. dealerName: item3.dealerName,
  315. })
  316. }
  317. for (var index3 in item2.selectGroups) {
  318. var item3 = item2.selectGroups[index3]
  319. conTemp.selectGroups.push({
  320. groupId: item3.groupId,
  321. groupName: item3.groupName,
  322. })
  323. }
  324. devConditionTemp.push(conTemp)
  325. }
  326. return devConditionTemp;
  327. },
  328. };
  329. /**end***/
  330. }
  331. };
  332. }]);