fixedCtrl.js 50 KB

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