fixedCtrl.js 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103
  1. 'use strict';
  2. /**
  3. * controller for User Profile Example
  4. */
  5. // "$aside", "toaster", "api_bpm_domain", "api_configure_data", "api_cmdb", "api_configure_form",
  6. app.controller('fixedCtrl', ["$rootScope", "$scope", "$http", "$state", "$timeout", "$injector", '$parse', "$interval", "$modal", "$stateParams", "$aside", "SweetAlert", "toaster", "FileUploader", "i18nService", "uiGridConstants", "uiGridGroupingConstants", "Restangular", "api_bpm_domain", "api_configure_data", "api_cmdb", "api_configure_form","api_wechatfile", function($rootScope, $scope, $http, $state, $timeout, $parse, $injector, $interval, $modal, $stateParams, $aside, SweetAlert, toaster, FileUploader, i18nService, uiGridConstants, uiGridGroupingConstants, Restangular, api_bpm_domain, api_configure_data, api_cmdb, api_configure_form,api_wechatfile) {
  7. $scope.langs = i18nService.getAllLangs();
  8. $scope.lang = 'zh-cn';
  9. i18nService.setCurrentLang($scope.lang);
  10. var loginUser = $rootScope.user;
  11. $scope.showdown = false;
  12. $scope.clickshow = function() {
  13. $scope.showdown = !$scope.showdown;
  14. }
  15. $scope.gridOptions = {};
  16. $scope.gridOptions.data = 'myData';
  17. $scope.gridOptions.enableColumnResizing = true;
  18. $scope.gridOptions.enableFiltering = false;
  19. $scope.gridOptions.enableGridMenu = false;
  20. $scope.gridOptions.enableSelectAll = true;
  21. $scope.gridOptions.enableRowSelection = true;
  22. $scope.gridOptions.showGridFooter = true;
  23. $scope.gridOptions.showColumnFooter = false;
  24. $scope.gridOptions.fastWatch = true;
  25. $scope.gridOptions.enableSorting = true;
  26. $scope.gridOptions.useExternalSorting = true;
  27. $scope.gridOptions.useExternalFiltering = true;
  28. $scope.gridOptions.useExternalPagination = true;
  29. $scope.gridOptions.paginationPageSizes = [10, 20, 50, 100];
  30. $scope.gridOptions.paginationPageSize = 10;
  31. $scope.gridOptions.multiSelect = true;
  32. // $scope.gridOptions.enableRowHeaderSelection = true;
  33. // $scope.gridOptions.enableRowSelection = true;
  34. // $scope.gridOptions.enableFullRowSelection = true;
  35. // $scope.gridOptions.enableSelectionBatchEvent = true;
  36. var mun = $scope.gridOptions.paginationPageSize;
  37. $scope.gridOptions.rowTemplate = "<div ng-click=\"onDblClick(row)\" ng-repeat=\"(colRenderIndex, col) in colContainer.renderedColumns track by col.uid\" ui-grid-one-bind-id-grid=\"rowRenderIndex + '-' + col.uid + '-cell'\" class=\"ui-grid-cell\" ng-class=\"{ 'ui-grid-row-header-cell': col.isRowHeader }\" role=\"{{col.isRowHeader ? 'rowheader' : 'gridcell'}}\" ui-grid-cell></div>";
  38. $scope.gridOptions.rowIdentity = function(row) {
  39. return row.id;
  40. };
  41. $scope.gridOptions.getRowIdentity = function(row) {
  42. return row.id;
  43. };
  44. $scope.gridOptions.columnDefs = [{
  45. name: 'item',
  46. enableSorting: false,
  47. displayName: '序号',
  48. width: 49,
  49. enableFiltering: false,
  50. cellTemplate: '<div>' +
  51. '<div class="ui-grid-cell-contents">{{row.entity.item}}</div>' +
  52. '</div>'
  53. },
  54. {
  55. name: '关系图',
  56. enableSorting: false,
  57. displayName: '关系图',
  58. width: 60,
  59. enableFiltering: false,
  60. cellTemplate: '<div class="ui-grid-cell-contents"><a ng-click="grid.appScope.lookmap(row.entity)" tooltip="查看关系图" tooltip-placement="right"><i class="icon iconfontsmall icon-guanxitu1 pointfont"></i></a></div>'
  61. },
  62. {
  63. name: 'uuid',
  64. enableSorting: false,
  65. displayName: '资产编码',
  66. width: 194,
  67. enableFiltering: false,
  68. cellTemplate: '<div>' +
  69. '<div class="ui-grid-cell-contents">{{row.entity.uuid}}</div>' +
  70. '</div>'
  71. },
  72. {
  73. name: 'props.hw_mingcheng',
  74. enableSorting: false,
  75. displayName: '资产名称',
  76. width: 148,
  77. enableFiltering: false,
  78. cellTemplate: '<div>' +
  79. '<div class="ui-grid-cell-contents">{{row.entity.props.hw_mingcheng}}</div>' +
  80. '</div>'
  81. },
  82. {
  83. name: 'props.hw_state',
  84. enableSorting: false,
  85. displayName: '类型',
  86. width: 120,
  87. enableFiltering: false,
  88. cellTemplate: '<div>' +
  89. '<div class="ui-grid-cell-contents">{{row.entity.props.hw_state}}</div>' +
  90. '</div>'
  91. },
  92. // {
  93. // name: 'status',
  94. // enableSorting: false,
  95. // displayName: '资产型号',
  96. // width: 217,
  97. // enableFiltering: false ,
  98. // // cellTemplate: '<div>' +
  99. // // '<div class="ui-grid-cell-contents">{{row.entity.managementUnit.name}}</div>' +
  100. // // '</div>'
  101. // },
  102. // {
  103. // name: 'placeBasehw',
  104. // enableSorting: false,
  105. // displayName: '资产地点',
  106. // width: 88,
  107. // enableFiltering: false ,
  108. // // cellTemplate: '<div>' +
  109. // // '<div class="ui-grid-cell-contents">{{row.entity.managementUnit.name}}</div>' +
  110. // // '</div>'
  111. // },
  112. {
  113. name: 'createtime',
  114. enableSorting: false,
  115. displayName: '入库时间',
  116. width: 175,
  117. enableFiltering: false,
  118. cellTemplate: '<div>' +
  119. '<div class="ui-grid-cell-contents">{{row.entity.createtime}}</div>' +
  120. '</div>'
  121. },
  122. {
  123. name: 'lastupdatetime',
  124. enableSorting: false,
  125. displayName: '最后更新时间',
  126. width: 175,
  127. enableFiltering: false,
  128. cellTemplate: '<div>' +
  129. '<div class="ui-grid-cell-contents">{{row.entity.lastupdatetime}}</div>' +
  130. '</div>'
  131. },
  132. // {
  133. // name: 'props.meansmanager',
  134. // enableSorting: false,
  135. // displayName: '资产所有人',
  136. // width: 98,
  137. // enableFiltering: false ,
  138. // // cellTemplate: '<div>' +
  139. // // '<div class="ui-grid-cell-contents">{{row.entity.managementUnit.name}}</div>' +
  140. // // '</div>'
  141. // },
  142. {
  143. name: 'props.hw_zherenren',
  144. enableSorting: false,
  145. displayName: '责任人',
  146. width: 104,
  147. enableFiltering: false,
  148. cellTemplate: '<div>' +
  149. '<div class="ui-grid-cell-contents">{{row.entity.props.hw_zherenren}}</div>' +
  150. '</div>'
  151. },
  152. {
  153. name: 'props.hwnw_xiangmu',
  154. enableSorting: false,
  155. displayName: '所属项目',
  156. width: 148,
  157. enableFiltering: false,
  158. cellTemplate: '<div>' +
  159. '<div class="ui-grid-cell-contents">{{row.entity.props.hwnw_xiangmu}}</div>' +
  160. '</div>'
  161. },
  162. {
  163. name: 'props.erweima',
  164. enableSorting: false,
  165. displayName: '是否贴过二维码',
  166. width: 132,
  167. enableFiltering: false,
  168. // cellTemplate: '<div>' +
  169. // '<div class="ui-grid-cell-contents">{{row.entity.managementUnit.name}}</div>' +
  170. // '</div>'
  171. },
  172. {
  173. name: '操作',
  174. enableSorting: false,
  175. width: 144,
  176. cellTemplate: '<wttt style="background-color:{{row.entity.colourInfo.rgb}}" item="row.entity" colobject="col">',
  177. enableFiltering: false
  178. },
  179. ];
  180. $scope.gridOptions.rowTemplate = "<div ng-click=\"onview(row)\" ng-repeat=\"(colRenderIndex, col) in colContainer.renderedColumns track by col.uid\" ui-grid-one-bind-id-grid=\"rowRenderIndex + '-' + col.uid + '-cell'\" class=\"ui-grid-cell\" ng-class=\"{ 'ui-grid-row-header-cell': col.isRowHeader }\" role=\"{{col.isRowHeader ? 'rowheader' : 'gridcell'}}\" ui-grid-cell></div>";
  181. //修改
  182. $scope.onClick = function(row) {
  183. // $scope.classify="basehwntwsv";
  184. var data = { "model": row };
  185. $state.go('app.means.bill', { formKey: 'means_edit', service: 'api_cmdb', 'model': JSON.stringify(data) })
  186. };
  187. //双击查看详情
  188. $scope.onDblClick = function(row) {
  189. localStorage.ciclassify = JSON.stringify($scope.my_tree);
  190. $state.go('app.means.fixed_see', { gdzc_label: row.entity.label, gdzc_item: JSON.stringify(row.entity), idd: row.entity.id })
  191. };
  192. //查看
  193. $scope.onview = function(row) {
  194. console.log(row);
  195. var data = { "model": row };
  196. $state.go('app.means.view', { formKey: 'means_edit', service: 'api_cmdb', 'model': JSON.stringify(data) })
  197. };
  198. //查看关系图
  199. $scope.lookmap = function(row) {
  200. var data = { "model": row };
  201. // $state.go('cmdbmap', { 'model': JSON.stringify(data) });
  202. // var data = { "model": row };
  203. // var url = serverurl + '/cmdbmap/' + JSON.stringify(data)
  204. // window.open(url, '_blank');
  205. localStorage.cmdbmap = JSON.stringify(data);
  206. localStorage.ciclassify = JSON.stringify($scope.my_tree);
  207. var url = $state.href('cmdbmap', { basicType: 8 });
  208. window.open(url, '_blank');
  209. }
  210. $scope.gridOptions.onRegisterApi = function(gridApi) {
  211. $scope.gridApi = gridApi;
  212. gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {
  213. var filtersData = $scope.memoryfilterData;
  214. $scope.fenye = newPage - 1;
  215. filtersData.idx = newPage - 1;
  216. filtersData.sum = pageSize;
  217. $scope.refreshData('expand-right', filtersData);
  218. // $scope.refreshData('expand-right', {"assignee":$rootScope.user.id, "candidateGroups":$rootScope.user.group[0].id, "idx":newPage-1,"sum":pageSize});
  219. });
  220. // $scope.sels=[];
  221. gridApi.selection.on.rowSelectionChanged($scope, function(scope, ect) {
  222. if (scope.isSelected) {
  223. scope.grid.appScope.selected.items.push(scope.entity)
  224. } else {
  225. for (var i = 0; i <= scope.grid.appScope.selected.items.length; i++) {
  226. if (scope.grid.appScope.selected.items[i].id == scope.entity.id) {
  227. scope.grid.appScope.selected.items.splice(i, 1);
  228. break;
  229. }
  230. }
  231. }
  232. // var j = 0;
  233. // for (var i = 0; i <= scope.grid.appScope.selected.items.length; i++) {
  234. // if (scope.grid.appScope.selected.items[i] == scope.entity) {
  235. // j++;
  236. // break;
  237. // }
  238. // }
  239. // if (j == 1) {
  240. // scope.grid.appScope.selected.items.splice(i, 1);
  241. // } else {
  242. // scope.grid.appScope.selected.items.push(scope.entity);
  243. // }
  244. $scope.mySelectedRows = $scope.gridApi.selection.getSelectedRows();
  245. });
  246. gridApi.selection.on.rowSelectionChangedBatch($scope, function(rows) {
  247. var selectitem = [];
  248. selectitem = angular.copy($scope.selected.items);
  249. for (var j = 0; j < rows.length; j++) {
  250. if (rows[j].isSelected == true) {
  251. selectitem.push(rows[j].entity);
  252. } else {
  253. delete selectitem[j];
  254. // rows.splice(j, 1);
  255. }
  256. }
  257. $scope.selected.items = [];
  258. for (var i = 0; i < selectitem.length; i++) {
  259. if (selectitem[i]) {
  260. $scope.selected.items.push(selectitem[i]);
  261. }
  262. }
  263. });
  264. };
  265. // 条件搜索下拉框
  266. $scope.lb_tiaojian = {};
  267. $scope.tiaojian = [
  268. { "name": "资产编码", "value": "uuid" },
  269. { "name": "资产名称", "value": "hw_mingcheng" },
  270. { "name": "责任人", "value": "hw_zherenren" },
  271. ]
  272. // 点击搜索
  273. $scope.searchSolution = function(type, key) {
  274. $scope.gridApi.grid.options.paginationCurrentPage = 1;
  275. var memoryfilterData = {
  276. "idx": 0,
  277. "sum": $scope.gridOptions.paginationPageSize
  278. };
  279. angular.extend($scope.memoryfilterData, memoryfilterData);
  280. $scope.memoryfilterData['searchCriteria'] = type;
  281. $scope.memoryfilterData['keys'] = key;
  282. // $scope.memoryfilterData=defaultFilterData;
  283. // api_cmdb.searchkey(defaultFilterData.type,defaultFilterData.key,defaultFilterData.idx,defaultFilterData.sum).then(function(data){
  284. // var myData = Restangular.stripRestangular(data);
  285. // if(myData.data&&myData.status==200){
  286. // $scope.gridOptions.totalItems = myData.total;
  287. // $scope.myData = myData.data;
  288. // }
  289. // });
  290. $scope.refreshData('expand-right', $scope.memoryfilterData);
  291. }
  292. // 资产状态
  293. $scope.lb_state_data = {};
  294. $scope.getStateSelect=function(){
  295. var data={
  296. "key":"cmdb_status",
  297. "type":"list"
  298. }
  299. api_wechatfile.getDictionary(data).then(function(res){
  300. $scope.state_data=res
  301. })
  302. }
  303. $scope.getStateSelect();
  304. // $scope.state_data = [
  305. // { "name": "全部状态", "value": "" },
  306. // { "name": "在库", "value": "1" },
  307. // { "name": "在线", "value": "2" },
  308. // { "name": "借出", "value": "3" },
  309. // { "name": "报修", "value": "4" },
  310. // { "name": "报废", "value": "5" },
  311. // // {"name":"备用","value":"6"},
  312. // ]
  313. $scope.onChangestatus = function(searchType) {
  314. console.log(searchType.value);
  315. if (searchType.value == "") {
  316. var all = {
  317. "idx": 0,
  318. "sum": $scope.gridOptions.paginationPageSize
  319. };
  320. $scope.refreshData('expand-right', all);
  321. } else {
  322. // defaultFilterData['status'] = searchType;
  323. $scope.gridApi.grid.options.paginationCurrentPage = 1;
  324. var memoryfilterData = {
  325. "idx": 0,
  326. "sum": $scope.gridOptions.paginationPageSize
  327. };
  328. angular.extend($scope.memoryfilterData, memoryfilterData);
  329. // $scope.memoryfilterData['state'] = searchType.value;
  330. $scope.memoryfilterData['hw_state'] = searchType.name;
  331. $scope.refreshData('expand-right', $scope.memoryfilterData);
  332. }
  333. }
  334. this.selectRowFunction = function(data) {
  335. $scope.ciId = data.id;
  336. // localStorage.ciclassify = JSON.stringify($scope.my_tree);
  337. // console.log(data);
  338. };
  339. //树形图
  340. var apple_selected, tree, treedata_avm, treedata_geography;
  341. $scope.my_tree_handler = function(branch) {
  342. //var _ref;
  343. var classify = $scope.classify = branch.prefix.toLowerCase() + branch.sign;
  344. api_cmdb.query({ 'sign': classify }).then(function(data) {
  345. var myData = Restangular.stripRestangular(data);
  346. // console.log(myData.data.node);
  347. if (myData.data && myData.status == 200) {
  348. var ret = myData.data;
  349. redrawSvg(myData);
  350. }
  351. });
  352. };
  353. $scope.my_data = [];
  354. function convertListToTree(data, treeMap) {
  355. var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup
  356. var root = null; //Initially set our loop to null
  357. var parentNode = null;
  358. //loop over data
  359. for (var i = 0; i < data.length; i++) {
  360. var datum = data[i];
  361. //each node will have children, so let's give it a "children" poperty
  362. datum.children = [];
  363. //add an entry for this node to the map so that any future children can
  364. //lookup the parent
  365. idToNodeMap[datum.id] = datum;
  366. //Does this node have a parent?
  367. if (typeof datum.parent === "undefined" || datum.parent == null) {
  368. //Doesn't look like it, so this node is the root of the tree
  369. root = datum;
  370. treeMap[datum.id] = root;
  371. } else {
  372. //This node has a parent, so let's look it up using the id
  373. parentNode = idToNodeMap[datum.parent.id];
  374. //We don't need this property, so let's delete it.
  375. delete datum.parent;
  376. //Let's add the current node as a child of the parent node.
  377. parentNode.children.push(datum);
  378. }
  379. }
  380. return root;
  381. }
  382. function convertParentToChildList(data) {
  383. var treeMap = {};
  384. var list = [];
  385. convertListToTree(data, treeMap);
  386. angular.forEach(treeMap, function(item) {
  387. list.push(item);
  388. });
  389. return list;
  390. }
  391. $scope.my_tree = tree = {};
  392. $scope.try_async_load = function() {
  393. $scope.my_data = [];
  394. $scope.select_treedata = [];
  395. $scope.doing_async = true;
  396. api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(result) {
  397. $scope.my_tree = result['list'];
  398. $scope.select_treedata = $scope.my_data = convertParentToChildList(result['list']);
  399. $scope.doing_async = false;
  400. // tree.expand_all();
  401. //console.log(treelist);
  402. });
  403. };
  404. $scope.select_treedata = [];
  405. $scope.propTypeOptions = [];
  406. $scope.try_async_load();
  407. $scope.onFilterremove = function(item) {
  408. console.log(item)
  409. }
  410. // 资产分类
  411. $scope.onFilterCallback = function(item) {
  412. //console.log(item);
  413. if (angular.isDefined(item.children) && item.children.length >= 1) {
  414. //not valid
  415. } else {
  416. var tempclassify = item.prefix.toLowerCase() + item.sign;
  417. $scope.gridApi.grid.options.paginationCurrentPage = 1;
  418. $scope.cifilter_classic = tempclassify;
  419. var memoryfilterData = {
  420. "sign": tempclassify,
  421. "idx": 0,
  422. "sum": $scope.gridOptions.paginationPageSize
  423. }
  424. angular.extend($scope.memoryfilterData, memoryfilterData)
  425. // $scope.memoryfilterData=memoryfilterData;
  426. $scope.refreshData('expand-right', $scope.memoryfilterData);
  427. // 专有属性
  428. api_configure_form.renderTabForm(tempclassify).then(function(data) {
  429. var myData = Restangular.stripRestangular(data);
  430. angular.forEach(myData, function(item, index) {
  431. if (index == 0) {
  432. $scope.propTypeOptions = myData[0].form.fields;
  433. } else {
  434. angular.forEach(item.form.fields, function(itemdata) {
  435. $scope.propTypeOptions.push(itemdata)
  436. })
  437. }
  438. })
  439. // $scope.propTypeOptions = myData[2].form.fields;
  440. console.log($scope.propTypeOptions)
  441. });
  442. }
  443. }
  444. //关系下载模版
  445. api_configure_data.fetchDataList('ciedgetype', { 'idx': 0, 'sum': 100 }).then(function(response) {
  446. if (response) {
  447. $scope.linktypeOptions = response.list;
  448. // angular.forEach($scope.linktypeOptions,function(item){
  449. // if(item.type==$scope.modelData.name){
  450. // $scope.modelData.linkName=item;
  451. // }
  452. // })
  453. }
  454. })
  455. $scope.rela = {};
  456. $scope.onChange = function(rela) {
  457. $scope.rela = rela;
  458. }
  459. //下载关系属性模版
  460. $scope.openmodel = function() {
  461. var modalInstance = $modal.open({
  462. templateUrl: 'assets/views/means/tpl/relationdown.html',
  463. controller: function($scope, scope, $modalInstance) {
  464. $scope.key = {};
  465. $scope.linktypeOptions = scope.linktypeOptions;
  466. $scope.ok = function(key) {
  467. $modalInstance.close(key);
  468. };
  469. $scope.cancel = function() {
  470. $modalInstance.dismiss('cancel');
  471. };
  472. },
  473. size: 'sm',
  474. resolve: {
  475. scope: function() {
  476. return $scope;
  477. }
  478. }
  479. });
  480. modalInstance.result.then(function(selectedItem) {
  481. if (selectedItem && angular.isDefined(selectedItem.type)) {
  482. var type = 2;
  483. $http({
  484. url: api_configure_data.downModels(type, selectedItem.id, selectedItem.label).getRequestedUrl(),
  485. method: 'GET',
  486. headers: {
  487. // 'Content-type' : 'application/xls',
  488. 'Accept': '*/*'
  489. },
  490. responseType: 'arraybuffer'
  491. }).success(function(data, status, headers, config) {
  492. var file = new Blob([data], {
  493. type: 'application/octet-stream'
  494. // type : 'application/vnd.ms-excel'
  495. });
  496. //trick to download store a file having its URL
  497. var fileURL = URL.createObjectURL(file);
  498. var a = document.createElement('a');
  499. a.href = fileURL;
  500. a.target = '_blank';
  501. a.download = "关系属性.xlsx";
  502. document.body.appendChild(a);
  503. a.click();
  504. }).error(function(data, status, headers, config) {
  505. console.log(data);
  506. });
  507. } else {
  508. SweetAlert.swal({
  509. title: "未选择资产关系!",
  510. text: "请选择资产关系",
  511. type: "error"
  512. })
  513. }
  514. });
  515. }
  516. $scope.importopen = function() { //导入触发事件
  517. var modalInstance = $modal.open({
  518. templateUrl: 'assets/views/import.html',
  519. controller: function($scope, $modalInstance, FileUploader) {
  520. var importUploader = $scope.importUploader = new FileUploader({
  521. url: api_cmdb.importData().getRequestedUrl(),
  522. alias: "file",
  523. removeAfterUpload: true
  524. });
  525. importUploader.onWhenAddingFileFailed = function(item /*{File|FileLikeObject}*/ , filter, options) {
  526. console.info('onWhenAddingFileFailed', item, filter, options);
  527. };
  528. importUploader.onAfterAddingFile = function(fileItem) {
  529. console.info('onAfterAddingFile', fileItem);
  530. if ($scope.importUploader.queue.length > 1) {
  531. $scope.importUploader.queue.splice(0, 1);
  532. }
  533. };
  534. importUploader.onAfterAddingAll = function(addedFileItems) {
  535. console.info('onAfterAddingAll', addedFileItems);
  536. };
  537. importUploader.onProgressItem = function(fileItem, progress) {
  538. console.info('onProgressItem', fileItem, progress);
  539. };
  540. importUploader.onProgressAll = function(progress) {
  541. console.info('onProgressAll', progress);
  542. };
  543. importUploader.onSuccessItem = function(fileItem, response, status, headers) {
  544. if (response.status == 200) {
  545. SweetAlert.swal({
  546. title: "导入成功!",
  547. confirmButtonColor: "#007AFF",
  548. type: "success"
  549. }, function() {
  550. $rootScope.isMask = false;
  551. // $scope.ldloading.expand_right = false;
  552. });
  553. console.info('onSuccessItem', fileItem, response, status, headers);
  554. } else {
  555. SweetAlert.swal({
  556. title: "导入失败!",
  557. text: response.error,
  558. type: "error"
  559. }, function() {
  560. $rootScope.isMask = false;
  561. // $scope.ldloading.expand_right = false;
  562. });
  563. }
  564. };
  565. importUploader.onErrorItem = function(fileItem, response, status, headers) {
  566. console.info('onErrorItem', fileItem, response, status, headers);
  567. SweetAlert.swal({
  568. title: "系统错误!",
  569. text: "系统错误,请稍候重试!",
  570. type: "error"
  571. }, function() {
  572. // $scope.ldloading.expand_right = false;
  573. $rootScope.isMask = false;
  574. });
  575. };
  576. importUploader.onCancelItem = function(fileItem, response, status, headers) {
  577. console.info('onCancelItem', fileItem, response, status, headers);
  578. };
  579. importUploader.onCompleteItem = function(fileItem, response, status, headers) {
  580. console.info('onCompleteItem', fileItem, response, status, headers);
  581. };
  582. importUploader.onCompleteAll = function() {
  583. console.info('onCompleteAll');
  584. };
  585. $scope.import = function(style) {
  586. // $scope.ldloading[style.replace('-', '_')] = true;
  587. $rootScope.isMask = true;
  588. importUploader.onBeforeUploadItem = function(item) {
  589. angular.extend(item.headers, $rootScope.getSession());
  590. item.formData.push({ 'filename': item.file.name });
  591. console.info('onBeforeUploadItem', item);
  592. };
  593. importUploader.uploadAll();
  594. }
  595. $scope.cancel = function() {
  596. $modalInstance.dismiss('cancel');
  597. };
  598. },
  599. size: 'sm',
  600. resolve: {
  601. importUploader: function() {
  602. return $scope.importUploader;
  603. }
  604. }
  605. });
  606. modalInstance.result.then(function(selectedItem) {
  607. if (selectedItem) {}
  608. })
  609. }
  610. //添加
  611. $scope.addData = function(size) {
  612. $state.go('app.means.editor', { formKey: 'means_editor', service: 'api_bpm_data' });
  613. }
  614. //下载资产模版
  615. $scope.openmeans = function() {
  616. var modalInstance = $modal.open({
  617. templateUrl: 'assets/views/means/tpl/meansdown.html',
  618. controller: function($scope, scope, $modalInstance) {
  619. $scope.item = {};
  620. $scope.headname = "资产模版下载";
  621. $scope.select_treedata = scope.select_treedata;
  622. $scope.ok = function(item) {
  623. $modalInstance.close(item);
  624. };
  625. $scope.cancel = function() {
  626. $modalInstance.dismiss('cancel');
  627. };
  628. },
  629. size: 'sm',
  630. resolve: {
  631. scope: function() {
  632. return $scope;
  633. }
  634. }
  635. });
  636. modalInstance.result.then(function(selectedItem) {
  637. $rootScope.isMask = true;
  638. if (selectedItem) {
  639. // if (angular.isDefined(classfy)) {
  640. var type = 1;
  641. // api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(data) {
  642. // if (data.status == 200) {
  643. // var myData = Restangular.stripRestangular(data).list;
  644. // for (var i = 0; i < $scope.select_treedata.length; i++) {
  645. // if ((myData[i].prefix.toLowerCase() + myData[i].sign) == classfy) {
  646. $http({
  647. url: api_configure_data.downModels(type, selectedItem.id, selectedItem.label).getRequestedUrl(),
  648. method: 'GET',
  649. headers: {
  650. // 'Content-type' : 'application/xls',
  651. 'Accept': '*/*'
  652. },
  653. responseType: 'arraybuffer'
  654. }).success(function(data, status, headers, config) {
  655. $rootScope.isMask = false;
  656. var file = new Blob([data], {
  657. type: 'application/octet-stream'
  658. // type : 'application/vnd.ms-excel'
  659. });
  660. //trick to download store a file having its URL
  661. var fileURL = URL.createObjectURL(file);
  662. var a = document.createElement('a');
  663. a.href = fileURL;
  664. a.target = '_blank';
  665. a.download = "资产属性.xlsx";
  666. document.body.appendChild(a);
  667. a.click();
  668. }).error(function(data, status, headers, config) {
  669. console.log(data);
  670. $rootScope.isMask = false;
  671. });
  672. // break;
  673. // }
  674. // }
  675. // }
  676. // })
  677. } else {
  678. SweetAlert.swal({
  679. title: "未选择资产分类!",
  680. text: "请选择资产分类",
  681. type: "error"
  682. }, function() {
  683. $rootScope.isMask = false;
  684. });
  685. }
  686. // }
  687. });
  688. }
  689. // 重置按钮
  690. $scope.reset = function() {
  691. $scope.propTypeOptions = [];
  692. $scope.lb_state_data = {};
  693. $scope.lb_tiaojian = {};
  694. $scope.searchSolutionInput = "";
  695. if ($scope.fenye == undefined) {
  696. $scope.fenye = 0
  697. };
  698. $scope.try_async_load();
  699. $scope.memoryfilterData = {
  700. idx: 0,
  701. sum: mun
  702. }
  703. $scope.refreshData('expand-right', { "idx": $scope.fenye, "sum": mun });
  704. // $scope.memoryfilterData={
  705. // "idx": 0,
  706. // "sum": $scope.gridOptions.paginationPageSize,
  707. // }
  708. }
  709. // 新增下拉框
  710. $scope.new_one = [
  711. { "keys": { templateOptions: { label: "选择搜索字段" } }, "vals": "" },
  712. { "keys": { templateOptions: { label: "选择搜索字段" } }, "vals": "" },
  713. { "keys": { templateOptions: { label: "选择搜索字段" } }, "vals": "" }
  714. ];
  715. // var k=1;
  716. // 新增按钮
  717. $scope.new_select = function() {
  718. // k++;
  719. if ($scope.new_one.length >= $scope.propTypeOptions.length) {
  720. SweetAlert.swal({
  721. title: "新增失败",
  722. text: "新增项已达到上限!",
  723. type: "error"
  724. });
  725. return false
  726. } else {
  727. $scope.new_one.push({ "keys": { templateOptions: { label: "选择搜索字段" } }, "vals": "" })
  728. }
  729. }
  730. // 删除搜索框出现的字段
  731. $scope.delet = function(val) {
  732. // console.log($scope.propTypeOptions);
  733. // console.log(val);
  734. $scope.propTypeOptions.splice($scope.propTypeOptions.indexOf(val), 1)
  735. }
  736. $scope.gdzc_edit = "new_top";
  737. // 高级搜索搜索
  738. $scope.gaoji_search = function() {
  739. $scope.key1 = {};
  740. // var sear_data={
  741. // "idx": 0,
  742. // "sum": $scope.gridOptions.paginationPageSize,
  743. // }
  744. // console.log($scope.new_one);
  745. for (var j = 0; j < $scope.new_one.length; j++) {
  746. $scope.memoryfilterData[$scope.new_one[j].keys.key] = $scope.new_one[j].vals;
  747. }
  748. // angular.extend($scope.memoryfilterData, sear_data)
  749. delete($scope.memoryfilterData[undefined]);
  750. $scope.refreshData('expand-right', $scope.memoryfilterData);
  751. $scope.senior_show = false;
  752. $scope.gdzc_edit = "new_top";
  753. }
  754. $scope.senior_show = false;
  755. // 高级搜索按钮
  756. $scope.senior_cli = function() {
  757. if ($scope.propTypeOptions.length == 0) {
  758. SweetAlert.swal({
  759. title: "点开失败",
  760. text: "请先选择资产分类!",
  761. type: "error"
  762. });
  763. } else {
  764. $scope.senior_show = true;
  765. $scope.gdzc_edit = "new_after";
  766. $scope.new_one = [
  767. { "keys": { templateOptions: { label: "选择搜索字段" } }, "vals": "" },
  768. { "keys": { templateOptions: { label: "选择搜索字段" } }, "vals": "" },
  769. { "keys": { templateOptions: { label: "选择搜索字段" } }, "vals": "" },
  770. ];
  771. }
  772. }
  773. // 高级搜索关闭按钮
  774. $scope.close = function() {
  775. $scope.senior_show = false;
  776. $scope.gdzc_edit = "new_top";
  777. }
  778. // 刷新
  779. $scope.new_data = function() {
  780. console.log($scope.memoryfilterData);
  781. $scope.myData = [];
  782. if ($scope.fenye == undefined) {
  783. $scope.fenye = 0
  784. };
  785. $scope.refreshData('expand-right', $scope.memoryfilterData);
  786. }
  787. //导出
  788. $scope.exportopen = function() {
  789. var modalInstance = $modal.open({
  790. templateUrl: 'assets/views/means/tpl/gdzc_meansdown.html',
  791. controller: function($scope, scope, $modalInstance) {
  792. $scope.item = {};
  793. $scope.headname = "资产导出";
  794. $scope.select_treedata = scope.select_treedata;
  795. $scope.ok = function(item) {
  796. $modalInstance.close(item);
  797. };
  798. $scope.cancel = function() {
  799. $modalInstance.dismiss('cancel');
  800. };
  801. },
  802. size: 'sm',
  803. resolve: {
  804. scope: function() {
  805. return $scope;
  806. }
  807. }
  808. });
  809. modalInstance.result.then(function(selectedItem) {
  810. $rootScope.isMask = true;
  811. if (selectedItem) {
  812. // if (angular.isDefined(classfy)) {
  813. var type = 1;
  814. // api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(data) {
  815. // if (data.status == 200) {
  816. // var myData = Restangular.stripRestangular(data).list;
  817. // for (var i = 0; i < $scope.select_treedata.length; i++) {
  818. // if ((myData[i].prefix.toLowerCase() + myData[i].sign) == classfy) {
  819. $http({
  820. url: api_cmdb.exportData(selectedItem.label, selectedItem.id).getRequestedUrl(),
  821. method: 'GET',
  822. headers: {
  823. // 'Content-type' : 'application/xls',
  824. 'Accept': '*/*'
  825. },
  826. responseType: 'arraybuffer'
  827. }).success(function(data, status, headers, config) {
  828. $rootScope.isMask = false;
  829. var file = new Blob([data], {
  830. type: 'application/octet-stream'
  831. // type : 'application/vnd.ms-excel'
  832. });
  833. //trick to download store a file having its URL
  834. var fileURL = URL.createObjectURL(file);
  835. var a = document.createElement('a');
  836. a.href = fileURL;
  837. a.target = '_blank';
  838. a.download = selectedItem.label + '.xlsx';
  839. document.body.appendChild(a);
  840. a.click();
  841. }).error(function(data, status, headers, config) {
  842. $rootScope.isMask = false;
  843. console.log(data);
  844. });
  845. // break;
  846. // }
  847. // }
  848. // }
  849. // })
  850. } else {
  851. SweetAlert.swal({
  852. title: "未选择资产分类!",
  853. text: "请选择资产分类",
  854. type: "error"
  855. }, function() {
  856. $rootScope.isMask = false;
  857. });
  858. }
  859. // }
  860. });
  861. }
  862. //导入
  863. var importUploader = $scope.importUploader = new FileUploader({
  864. url: api_cmdb.importData().getRequestedUrl()
  865. });
  866. importUploader.onWhenAddingFileFailed = function(item /*{File|FileLikeObject}*/ , filter, options) {
  867. console.info('onWhenAddingFileFailed', item, filter, options);
  868. };
  869. importUploader.onAfterAddingFile = function(fileItem) {
  870. console.info('onAfterAddingFile', fileItem);
  871. };
  872. importUploader.onAfterAddingAll = function(addedFileItems) {
  873. console.info('onAfterAddingAll', addedFileItems);
  874. };
  875. importUploader.onProgressItem = function(fileItem, progress) {
  876. console.info('onProgressItem', fileItem, progress);
  877. };
  878. importUploader.onProgressAll = function(progress) {
  879. console.info('onProgressAll', progress);
  880. };
  881. importUploader.onSuccessItem = function(fileItem, response, status, headers) {
  882. if (response.status == 200) {
  883. SweetAlert.swal({
  884. title: "导入成功!",
  885. confirmButtonColor: "#007AFF",
  886. type: "success"
  887. }, function() {
  888. $rootScope.isMask = false;
  889. });
  890. console.info('onSuccessItem', fileItem, response, status, headers);
  891. } else {
  892. SweetAlert.swal({
  893. title: "导入失败!",
  894. text: response.error,
  895. type: "error"
  896. }, function() {
  897. $rootScope.isMask = false;
  898. });
  899. }
  900. };
  901. importUploader.onErrorItem = function(fileItem, response, status, headers) {
  902. console.info('onErrorItem', fileItem, response, status, headers);
  903. SweetAlert.swal({
  904. title: "系统错误!",
  905. text: "系统错误,请稍候重试!",
  906. type: "error"
  907. }, function() {
  908. $rootScope.isMask = false;
  909. });
  910. };
  911. importUploader.onCancelItem = function(fileItem, response, status, headers) {
  912. console.info('onCancelItem', fileItem, response, status, headers);
  913. };
  914. importUploader.onCompleteItem = function(fileItem, response, status, headers) {
  915. console.info('onCompleteItem', fileItem, response, status, headers);
  916. };
  917. importUploader.onCompleteAll = function() {
  918. console.info('onCompleteAll');
  919. };
  920. $scope.import = function(style) {
  921. $rootScope.isMask = true;
  922. importUploader.onBeforeUploadItem = function(item) {
  923. angular.extend(item.headers, $rootScope.getSession());
  924. item.formData.push({ 'filename': item.file.name });
  925. console.info('onBeforeUploadItem', item);
  926. };
  927. importUploader.uploadAll();
  928. }
  929. $scope.removeData = function() {
  930. var rmvList = $scope.selected.items.id;
  931. // angular.forEach($scope.selected.items,function(item){
  932. // rmvList.push(item.id);
  933. // });
  934. // if(rmvList.length>0){
  935. api_cmdb.put($scope.selected.items, rmvList).then(function(response) {
  936. if (response.status == 200) {
  937. SweetAlert.swal({
  938. title: "删除成功!",
  939. type: "success",
  940. confirmButtonColor: "#007AFF"
  941. }, function() {
  942. $scope.myData = _.reject($scope.myData, function(o) { return _.includes(rmvList, o.id); });
  943. $scope.selected = {
  944. items: []
  945. };
  946. });
  947. } else {
  948. SweetAlert.swal({
  949. title: "操作异常!",
  950. text: "系统异常,请稍后重试,或者联系管理员!",
  951. type: "error"
  952. });
  953. }
  954. })
  955. // }
  956. }
  957. $scope.selected = {
  958. items: []
  959. }
  960. $scope.editted = {
  961. items: []
  962. }
  963. var defaultFilterData = {
  964. // "assignee":2,
  965. // "sign":"basehwitndl",
  966. "idx": 0,
  967. "sum": $scope.gridOptions.paginationPageSize
  968. };
  969. $scope.memoryfilterData = {
  970. // "assignee":2,
  971. // "sign":"basehwitndl",
  972. "idx": 0,
  973. "sum": $scope.gridOptions.paginationPageSize
  974. }
  975. $scope.ldloading = {};
  976. var pdKey = $state.current.pdKey;
  977. $scope.refreshData = function(style, filterData) {
  978. if (angular.isUndefined(filterData)) {
  979. filterData = defaultFilterData;
  980. }
  981. $scope.myData = [];
  982. // $scope.gridOptions['sum']=filterData.sum;
  983. api_cmdb.query(filterData).then(function(data) {
  984. // $scope.callsPending--;
  985. var myData = Restangular.stripRestangular(data);
  986. $scope.gridOptions['totalItems'] = data.total;
  987. // angular.forEach(myData.data.node,function(item){
  988. // moment(item.createtime).format('YYYY-MM-DD');
  989. // })
  990. // for (var i = 0; i < myData.data.node.length; i++) {
  991. // myData.data.node[i].createtime = moment(myData.data.node[i].createtime).format('YYYY-MM-DD');
  992. // }
  993. $scope.myData = myData.data.node;
  994. for (var i = 0; i < $scope.myData.length; i++) {
  995. $scope.myData[i]['item'] = i + 1 + filterData.idx * filterData.sum
  996. }
  997. }, function() {});
  998. };
  999. $scope.refreshData('expand-right', defaultFilterData);
  1000. }]);
  1001. app.controller('MeansOperCtrl', ['$rootScope', '$http', '$scope', function($rootScope, $http, $scope) {
  1002. // console.log('$rootScope.user3='+JSON.stringify($scope.item));
  1003. // if( $scope.item.handlerUser!=null){
  1004. // if ($rootScope.user.id==$scope.item.handlerUser.id) {
  1005. // $scope.item.chaozuoPower=true;
  1006. // }
  1007. // }
  1008. $scope.look = function() {
  1009. $scope.colobject.grid.appScope.lookFunction($scope.item);
  1010. // console.log('$scope.item='+JSON.stringify($scope.item));
  1011. }
  1012. $scope.edit = function() {
  1013. $scope.colobject.grid.appScope.selectRowFunction($scope.item);
  1014. console.log('$scope.item=' + JSON.stringify($scope.item));
  1015. // $scope.doEdit($scope.item.id);
  1016. }
  1017. }]);
  1018. //操作按钮权限控制
  1019. app.controller('gdzc_caozuoCtrl', ['$rootScope', '$http', '$scope', '$modal', 'api_cmdb2', 'api_bpm_domain', 'up_down_file', '$state', function($rootScope, $http, $scope, $modal, api_cmdb2, api_bpm_domain, up_down_file, $state) {
  1020. $scope.edit = function() {
  1021. var aaa = { "model": $scope.item };
  1022. localStorage.ciclassify = JSON.stringify($scope.colobject.grid.appScope.my_tree);
  1023. $state.go('app.means.fixed_edit', { formKey: 'means_edit', service: 'api_cmdb', 'model': JSON.stringify(aaa) })
  1024. }
  1025. $scope.watch = function() {
  1026. // console.log($scope.item.id);
  1027. console.log($scope.item);
  1028. $state.go('app.means.fixed_see', { gdzc_label: $scope.item.label, gdzc_item: JSON.stringify($scope.item), idd: $scope.item.id })
  1029. }
  1030. }]);
  1031. app.directive('meansoperator', function() {
  1032. return {
  1033. restrict: 'E',
  1034. scope: {
  1035. item: '=',
  1036. colobject: '='
  1037. },
  1038. controller: 'MeansOperCtrl',
  1039. template: '<div class="links cl-effect-1">' +
  1040. // '<a ng-click="look()" tooltip="查看" tooltip-placement="left"><i class="ti-eye"></i></a>' +
  1041. '<a ng-click="edit()" tooltip="修改" tooltip-placement="left"><i class="fa fa-pencil-square-o"></i></a>' +
  1042. '</div>'
  1043. };
  1044. });
  1045. //操作
  1046. app.directive('wttt', function() {
  1047. return {
  1048. restrict: 'E',
  1049. scope: {
  1050. item: '=',
  1051. colobject: '='
  1052. },
  1053. controller: 'gdzc_caozuoCtrl',
  1054. template: '<div><div class="cl-effect-1 ui-grid-cell-contents pull-left" >' +
  1055. // '<a class="handlefont" ng-click="watch()">查看</a>' +
  1056. // '<a ng-click="edit()" class="handlefont" ui-sref="app.fixed.edit">编辑</a>' +
  1057. '<a ng-click="edit()" class="handlefont">编辑</a>' +
  1058. '</div></div>'
  1059. };
  1060. });