fixedCtrl.js 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083
  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.hwnw_xiangmu',
  147. enableSorting: false,
  148. displayName: '所属项目',
  149. width: 148,
  150. enableFiltering: false ,
  151. cellTemplate: '<div>' +
  152. '<div class="ui-grid-cell-contents">{{row.entity.props.hwnw_xiangmu}}</div>' +
  153. '</div>'
  154. },
  155. {
  156. name: 'props.erweima',
  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: '<wttt 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. // 条件搜索下拉框
  267. $scope.lb_tiaojian={};
  268. $scope.tiaojian=[
  269. {"name":"资产编码","value":"uuid"},
  270. {"name":"资产名称","value":"hw_mingcheng"},
  271. {"name":"责任人","value":"hw_zherenren"},
  272. ]
  273. // 点击搜索
  274. $scope.searchSolution = function(type, key) {
  275. $scope.gridApi.grid.options.paginationCurrentPage = 1;
  276. var memoryfilterData = {
  277. "idx": 0,
  278. "sum": $scope.gridOptions.paginationPageSize
  279. };
  280. angular.extend($scope.memoryfilterData, memoryfilterData);
  281. $scope.memoryfilterData['searchCriteria'] = type;
  282. $scope.memoryfilterData['keys'] = key;
  283. // $scope.memoryfilterData=defaultFilterData;
  284. // api_cmdb.searchkey(defaultFilterData.type,defaultFilterData.key,defaultFilterData.idx,defaultFilterData.sum).then(function(data){
  285. // var myData = Restangular.stripRestangular(data);
  286. // if(myData.data&&myData.status==200){
  287. // $scope.gridOptions.totalItems = myData.total;
  288. // $scope.myData = myData.data;
  289. // }
  290. // });
  291. $scope.refreshData('expand-right', $scope.memoryfilterData);
  292. }
  293. // 资产状态
  294. $scope.lb_state_data={};
  295. $scope.state_data=[
  296. {"name":"全部状态","value":""},
  297. {"name":"在库","value":"1"},
  298. {"name":"在线","value":"2"},
  299. {"name":"借出","value":"3"},
  300. {"name":"报修","value":"4"},
  301. {"name":"报废","value":"5"},
  302. // {"name":"备用","value":"6"},
  303. ]
  304. $scope.onChangestatus = function(searchType) {
  305. console.log(searchType.value);
  306. if(searchType.value==""){
  307. var all={
  308. "idx": 0,
  309. "sum": $scope.gridOptions.paginationPageSize
  310. };
  311. $scope.refreshData('expand-right', all);
  312. }else{
  313. // defaultFilterData['status'] = searchType;
  314. $scope.gridApi.grid.options.paginationCurrentPage = 1;
  315. var memoryfilterData = {
  316. "idx": 0,
  317. "sum": $scope.gridOptions.paginationPageSize
  318. };
  319. angular.extend($scope.memoryfilterData, memoryfilterData);
  320. // $scope.memoryfilterData['state'] = searchType.value;
  321. $scope.memoryfilterData['hw_state'] = searchType.name;
  322. $scope.refreshData('expand-right', $scope.memoryfilterData);
  323. }
  324. }
  325. this.selectRowFunction = function(data) {
  326. $scope.ciId = data.id;
  327. // console.log(data);
  328. };
  329. //树形图
  330. var apple_selected, tree, treedata_avm, treedata_geography;
  331. $scope.my_tree_handler = function(branch) {
  332. //var _ref;
  333. var classify = $scope.classify = branch.prefix.toLowerCase() + branch.sign;
  334. api_cmdb.query({ 'sign': classify }).then(function(data) {
  335. var myData = Restangular.stripRestangular(data);
  336. // console.log(myData.data.node);
  337. if (myData.data && myData.status == 200) {
  338. var ret = myData.data;
  339. redrawSvg(myData);
  340. }
  341. });
  342. };
  343. $scope.my_data = [];
  344. function convertListToTree(data, treeMap) {
  345. var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup
  346. var root = null; //Initially set our loop to null
  347. var parentNode = null;
  348. //loop over data
  349. for (var i = 0; i < data.length; i++) {
  350. var datum = data[i];
  351. //each node will have children, so let's give it a "children" poperty
  352. datum.children = [];
  353. //add an entry for this node to the map so that any future children can
  354. //lookup the parent
  355. idToNodeMap[datum.id] = datum;
  356. //Does this node have a parent?
  357. if (typeof datum.parent === "undefined" || datum.parent == null) {
  358. //Doesn't look like it, so this node is the root of the tree
  359. root = datum;
  360. treeMap[datum.id] = root;
  361. } else {
  362. //This node has a parent, so let's look it up using the id
  363. parentNode = idToNodeMap[datum.parent.id];
  364. //We don't need this property, so let's delete it.
  365. delete datum.parent;
  366. //Let's add the current node as a child of the parent node.
  367. parentNode.children.push(datum);
  368. }
  369. }
  370. return root;
  371. }
  372. function convertParentToChildList(data) {
  373. var treeMap = {};
  374. var list = [];
  375. convertListToTree(data, treeMap);
  376. angular.forEach(treeMap, function(item) {
  377. list.push(item);
  378. });
  379. return list;
  380. }
  381. $scope.my_tree = tree = {};
  382. $scope.try_async_load = function() {
  383. $scope.my_data = [];
  384. $scope.select_treedata = [];
  385. $scope.doing_async = true;
  386. api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(result) {
  387. //console.log(result['list']);
  388. $scope.select_treedata = $scope.my_data = convertParentToChildList(result['list']);
  389. $scope.doing_async = false;
  390. // tree.expand_all();
  391. //console.log(treelist);
  392. });
  393. };
  394. $scope.select_treedata = [];
  395. $scope.propTypeOptions = [];
  396. $scope.try_async_load();
  397. $scope.onFilterremove = function(item) {
  398. console.log(item)
  399. }
  400. // 资产分类
  401. $scope.onFilterCallback = function(item) {
  402. //console.log(item);
  403. if (angular.isDefined(item.children) && item.children.length >= 1) {
  404. //not valid
  405. } else {
  406. var tempclassify = item.prefix.toLowerCase() + item.sign;
  407. $scope.gridApi.grid.options.paginationCurrentPage = 1;
  408. $scope.cifilter_classic = tempclassify;
  409. var memoryfilterData = {
  410. "sign": tempclassify,
  411. "idx": 0,
  412. "sum": $scope.gridOptions.paginationPageSize
  413. }
  414. angular.extend($scope.memoryfilterData, memoryfilterData)
  415. // $scope.memoryfilterData=memoryfilterData;
  416. $scope.refreshData('expand-right', $scope.memoryfilterData);
  417. // 专有属性
  418. api_configure_form.renderTabForm(tempclassify).then(function(data){
  419. var myData = Restangular.stripRestangular(data);
  420. $scope.propTypeOptions = myData[2].form.fields;
  421. // console.log($scope.propTypeOptions)
  422. });
  423. }
  424. }
  425. //关系下载模版
  426. api_configure_data.fetchDataList('ciedgetype', { 'idx': 0, 'sum': 100 }).then(function(response) {
  427. if (response) {
  428. $scope.linktypeOptions = response.list;
  429. // angular.forEach($scope.linktypeOptions,function(item){
  430. // if(item.type==$scope.modelData.name){
  431. // $scope.modelData.linkName=item;
  432. // }
  433. // })
  434. }
  435. })
  436. $scope.rela = {};
  437. $scope.onChange = function(rela) {
  438. $scope.rela = rela;
  439. }
  440. //下载关系属性模版
  441. $scope.openmodel = function() {
  442. var modalInstance = $modal.open({
  443. templateUrl: 'assets/views/means/tpl/relationdown.html',
  444. controller: function($scope, scope, $modalInstance) {
  445. $scope.key = {};
  446. $scope.linktypeOptions = scope.linktypeOptions;
  447. $scope.ok = function(key) {
  448. $modalInstance.close(key);
  449. };
  450. $scope.cancel = function() {
  451. $modalInstance.dismiss('cancel');
  452. };
  453. },
  454. size: 'sm',
  455. resolve: {
  456. scope: function() {
  457. return $scope;
  458. }
  459. }
  460. });
  461. modalInstance.result.then(function(selectedItem) {
  462. if (selectedItem && angular.isDefined(selectedItem.type)) {
  463. var type = 2;
  464. $http({
  465. url: api_configure_data.downModels(type, selectedItem.id, selectedItem.label).getRequestedUrl(),
  466. method: 'GET',
  467. headers: {
  468. // 'Content-type' : 'application/xls',
  469. 'Accept': '*/*'
  470. },
  471. responseType: 'arraybuffer'
  472. }).success(function(data, status, headers, config) {
  473. var file = new Blob([data], {
  474. type: 'application/octet-stream'
  475. // type : 'application/vnd.ms-excel'
  476. });
  477. //trick to download store a file having its URL
  478. var fileURL = URL.createObjectURL(file);
  479. var a = document.createElement('a');
  480. a.href = fileURL;
  481. a.target = '_blank';
  482. a.download = "关系属性.xlsx";
  483. document.body.appendChild(a);
  484. a.click();
  485. }).error(function(data, status, headers, config) {
  486. console.log(data);
  487. });
  488. } else {
  489. SweetAlert.swal({
  490. title: "未选择资产关系!",
  491. text: "请选择资产关系",
  492. type: "error"
  493. })
  494. }
  495. });
  496. }
  497. $scope.importopen = function() { //导入触发事件
  498. var modalInstance = $modal.open({
  499. templateUrl: 'assets/views/import.html',
  500. controller: function($scope, $modalInstance, FileUploader) {
  501. var importUploader = $scope.importUploader = new FileUploader({
  502. url: api_cmdb.importData().getRequestedUrl(),
  503. alias: "file",
  504. removeAfterUpload: true
  505. });
  506. importUploader.onWhenAddingFileFailed = function(item /*{File|FileLikeObject}*/ , filter, options) {
  507. console.info('onWhenAddingFileFailed', item, filter, options);
  508. };
  509. importUploader.onAfterAddingFile = function(fileItem) {
  510. console.info('onAfterAddingFile', fileItem);
  511. if ($scope.importUploader.queue.length > 1) {
  512. $scope.importUploader.queue.splice(0, 1);
  513. }
  514. };
  515. importUploader.onAfterAddingAll = function(addedFileItems) {
  516. console.info('onAfterAddingAll', addedFileItems);
  517. };
  518. importUploader.onProgressItem = function(fileItem, progress) {
  519. console.info('onProgressItem', fileItem, progress);
  520. };
  521. importUploader.onProgressAll = function(progress) {
  522. console.info('onProgressAll', progress);
  523. };
  524. importUploader.onSuccessItem = function(fileItem, response, status, headers) {
  525. if (response.status == 200) {
  526. SweetAlert.swal({
  527. title: "导入成功!",
  528. confirmButtonColor: "#007AFF",
  529. type: "success"
  530. }, function() {
  531. $rootScope.isMask = false;
  532. // $scope.ldloading.expand_right = false;
  533. });
  534. console.info('onSuccessItem', fileItem, response, status, headers);
  535. } else {
  536. SweetAlert.swal({
  537. title: "导入失败!",
  538. text: response.error,
  539. type: "error"
  540. }, function() {
  541. $rootScope.isMask = false;
  542. // $scope.ldloading.expand_right = false;
  543. });
  544. }
  545. };
  546. importUploader.onErrorItem = function(fileItem, response, status, headers) {
  547. console.info('onErrorItem', fileItem, response, status, headers);
  548. SweetAlert.swal({
  549. title: "系统错误!",
  550. text: "系统错误,请稍候重试!",
  551. type: "error"
  552. }, function() {
  553. // $scope.ldloading.expand_right = false;
  554. $rootScope.isMask = false;
  555. });
  556. };
  557. importUploader.onCancelItem = function(fileItem, response, status, headers) {
  558. console.info('onCancelItem', fileItem, response, status, headers);
  559. };
  560. importUploader.onCompleteItem = function(fileItem, response, status, headers) {
  561. console.info('onCompleteItem', fileItem, response, status, headers);
  562. };
  563. importUploader.onCompleteAll = function() {
  564. console.info('onCompleteAll');
  565. };
  566. $scope.import = function(style) {
  567. // $scope.ldloading[style.replace('-', '_')] = true;
  568. $rootScope.isMask = true;
  569. importUploader.onBeforeUploadItem = function(item) {
  570. angular.extend(item.headers, $rootScope.getSession());
  571. item.formData.push({ 'filename': item.file.name });
  572. console.info('onBeforeUploadItem', item);
  573. };
  574. importUploader.uploadAll();
  575. }
  576. $scope.cancel = function() {
  577. $modalInstance.dismiss('cancel');
  578. };
  579. },
  580. size: 'sm',
  581. resolve: {
  582. importUploader: function() {
  583. return $scope.importUploader;
  584. }
  585. }
  586. });
  587. modalInstance.result.then(function(selectedItem) {
  588. if (selectedItem) {}
  589. })
  590. }
  591. //添加
  592. $scope.addData = function(size) {
  593. $state.go('app.means.editor', { formKey: 'means_editor', service: 'api_bpm_data' });
  594. }
  595. //下载资产模版
  596. $scope.openmeans = function() {
  597. var modalInstance = $modal.open({
  598. templateUrl: 'assets/views/means/tpl/meansdown.html',
  599. controller: function($scope, scope, $modalInstance) {
  600. $scope.item = {};
  601. $scope.headname = "资产模版下载";
  602. $scope.select_treedata = scope.select_treedata;
  603. $scope.ok = function(item) {
  604. $modalInstance.close(item);
  605. };
  606. $scope.cancel = function() {
  607. $modalInstance.dismiss('cancel');
  608. };
  609. },
  610. size: 'sm',
  611. resolve: {
  612. scope: function() {
  613. return $scope;
  614. }
  615. }
  616. });
  617. modalInstance.result.then(function(selectedItem) {
  618. $rootScope.isMask = true;
  619. if (selectedItem) {
  620. // if (angular.isDefined(classfy)) {
  621. var type = 1;
  622. // api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(data) {
  623. // if (data.status == 200) {
  624. // var myData = Restangular.stripRestangular(data).list;
  625. // for (var i = 0; i < $scope.select_treedata.length; i++) {
  626. // if ((myData[i].prefix.toLowerCase() + myData[i].sign) == classfy) {
  627. $http({
  628. url: api_configure_data.downModels(type, selectedItem.id, selectedItem.label).getRequestedUrl(),
  629. method: 'GET',
  630. headers: {
  631. // 'Content-type' : 'application/xls',
  632. 'Accept': '*/*'
  633. },
  634. responseType: 'arraybuffer'
  635. }).success(function(data, status, headers, config) {
  636. $rootScope.isMask = false;
  637. var file = new Blob([data], {
  638. type: 'application/octet-stream'
  639. // type : 'application/vnd.ms-excel'
  640. });
  641. //trick to download store a file having its URL
  642. var fileURL = URL.createObjectURL(file);
  643. var a = document.createElement('a');
  644. a.href = fileURL;
  645. a.target = '_blank';
  646. a.download = "资产属性.xlsx";
  647. document.body.appendChild(a);
  648. a.click();
  649. }).error(function(data, status, headers, config) {
  650. console.log(data);
  651. $rootScope.isMask = false;
  652. });
  653. // break;
  654. // }
  655. // }
  656. // }
  657. // })
  658. } else {
  659. SweetAlert.swal({
  660. title: "未选择资产分类!",
  661. text: "请选择资产分类",
  662. type: "error"
  663. }, function() {
  664. $rootScope.isMask = false;
  665. });
  666. }
  667. // }
  668. });
  669. }
  670. // 重置按钮
  671. $scope.reset=function(){
  672. $scope.propTypeOptions=[];
  673. $scope.lb_state_data={};
  674. $scope.lb_tiaojian={};
  675. $scope.searchSolutionInput="";
  676. if($scope.fenye==undefined){
  677. $scope.fenye=0
  678. };
  679. $scope.try_async_load();
  680. $scope.memoryfilterData={
  681. idx:0,
  682. sum:mun
  683. }
  684. $scope.refreshData('expand-right', {"idx": $scope.fenye, "sum": mun});
  685. // $scope.memoryfilterData={
  686. // "idx": 0,
  687. // "sum": $scope.gridOptions.paginationPageSize,
  688. // }
  689. }
  690. // 新增下拉框
  691. $scope.new_one=[
  692. {"keys":{templateOptions:{label:"选择搜索字段"}},"vals":""},
  693. {"keys":{templateOptions:{label:"选择搜索字段"}},"vals":""},
  694. {"keys":{templateOptions:{label:"选择搜索字段"}},"vals":""}
  695. ];
  696. // var k=1;
  697. // 新增按钮
  698. $scope.new_select=function(){
  699. // k++;
  700. if($scope.new_one.length>=$scope.propTypeOptions.length){
  701. SweetAlert.swal({
  702. title: "新增失败",
  703. text: "新增项已达到上限!",
  704. type: "error"
  705. });
  706. return false
  707. }else{
  708. $scope.new_one.push({"keys":{templateOptions:{label:"选择搜索字段"}},"vals":""})
  709. }
  710. }
  711. // 删除搜索框出现的字段
  712. $scope.delet=function(val){
  713. // console.log($scope.propTypeOptions);
  714. // console.log(val);
  715. $scope.propTypeOptions.splice($scope.propTypeOptions.indexOf(val),1)
  716. }
  717. $scope.gdzc_edit="new_top";
  718. // 高级搜索搜索
  719. $scope.gaoji_search=function(){
  720. $scope.key1={};
  721. // var sear_data={
  722. // "idx": 0,
  723. // "sum": $scope.gridOptions.paginationPageSize,
  724. // }
  725. // console.log($scope.new_one);
  726. for(var j=0;j<$scope.new_one.length;j++){
  727. $scope.memoryfilterData[$scope.new_one[j].keys.key]=$scope.new_one[j].vals;
  728. }
  729. // angular.extend($scope.memoryfilterData, sear_data)
  730. delete($scope.memoryfilterData[undefined]);
  731. $scope.refreshData('expand-right', $scope.memoryfilterData);
  732. $scope.senior_show=false;
  733. $scope.gdzc_edit="new_top";
  734. }
  735. $scope.senior_show=false;
  736. // 高级搜索按钮
  737. $scope.senior_cli=function(){
  738. if($scope.propTypeOptions.length==0){
  739. SweetAlert.swal({
  740. title: "点开失败",
  741. text: "请先选择资产分类!",
  742. type: "error"
  743. });
  744. }else{
  745. $scope.senior_show=true;
  746. $scope.gdzc_edit="new_after";
  747. $scope.new_one=[
  748. {"keys":{templateOptions:{label:"选择搜索字段"}},"vals":""},
  749. {"keys":{templateOptions:{label:"选择搜索字段"}},"vals":""},
  750. {"keys":{templateOptions:{label:"选择搜索字段"}},"vals":""},
  751. ];
  752. }
  753. }
  754. // 高级搜索关闭按钮
  755. $scope.close=function(){
  756. $scope.senior_show=false;
  757. $scope.gdzc_edit="new_top";
  758. }
  759. // 刷新
  760. $scope.new_data=function(){
  761. console.log($scope.memoryfilterData);
  762. $scope.myData=[];
  763. if($scope.fenye==undefined){
  764. $scope.fenye=0
  765. };
  766. $scope.refreshData('expand-right', $scope.memoryfilterData);
  767. }
  768. //导出
  769. $scope.exportopen = function() {
  770. var modalInstance = $modal.open({
  771. templateUrl: 'assets/views/means/tpl/gdzc_meansdown.html',
  772. controller: function($scope, scope, $modalInstance) {
  773. $scope.item = {};
  774. $scope.headname = "资产导出";
  775. $scope.select_treedata = scope.select_treedata;
  776. $scope.ok = function(item) {
  777. $modalInstance.close(item);
  778. };
  779. $scope.cancel = function() {
  780. $modalInstance.dismiss('cancel');
  781. };
  782. },
  783. size: 'sm',
  784. resolve: {
  785. scope: function() {
  786. return $scope;
  787. }
  788. }
  789. });
  790. modalInstance.result.then(function(selectedItem) {
  791. $rootScope.isMask = true;
  792. if (selectedItem) {
  793. // if (angular.isDefined(classfy)) {
  794. var type = 1;
  795. // api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(data) {
  796. // if (data.status == 200) {
  797. // var myData = Restangular.stripRestangular(data).list;
  798. // for (var i = 0; i < $scope.select_treedata.length; i++) {
  799. // if ((myData[i].prefix.toLowerCase() + myData[i].sign) == classfy) {
  800. $http({
  801. url: api_cmdb.exportData(selectedItem.label, selectedItem.id).getRequestedUrl(),
  802. method: 'GET',
  803. headers: {
  804. // 'Content-type' : 'application/xls',
  805. 'Accept': '*/*'
  806. },
  807. responseType: 'arraybuffer'
  808. }).success(function(data, status, headers, config) {
  809. $rootScope.isMask = false;
  810. var file = new Blob([data], {
  811. type: 'application/octet-stream'
  812. // type : 'application/vnd.ms-excel'
  813. });
  814. //trick to download store a file having its URL
  815. var fileURL = URL.createObjectURL(file);
  816. var a = document.createElement('a');
  817. a.href = fileURL;
  818. a.target = '_blank';
  819. a.download = selectedItem.label + '.xlsx';
  820. document.body.appendChild(a);
  821. a.click();
  822. }).error(function(data, status, headers, config) {
  823. $rootScope.isMask = false;
  824. console.log(data);
  825. });
  826. // break;
  827. // }
  828. // }
  829. // }
  830. // })
  831. } else {
  832. SweetAlert.swal({
  833. title: "未选择资产分类!",
  834. text: "请选择资产分类",
  835. type: "error"
  836. }, function() {
  837. $rootScope.isMask = false;
  838. });
  839. }
  840. // }
  841. });
  842. }
  843. //导入
  844. var importUploader = $scope.importUploader = new FileUploader({
  845. url: api_cmdb.importData().getRequestedUrl()
  846. });
  847. importUploader.onWhenAddingFileFailed = function(item /*{File|FileLikeObject}*/ , filter, options) {
  848. console.info('onWhenAddingFileFailed', item, filter, options);
  849. };
  850. importUploader.onAfterAddingFile = function(fileItem) {
  851. console.info('onAfterAddingFile', fileItem);
  852. };
  853. importUploader.onAfterAddingAll = function(addedFileItems) {
  854. console.info('onAfterAddingAll', addedFileItems);
  855. };
  856. importUploader.onProgressItem = function(fileItem, progress) {
  857. console.info('onProgressItem', fileItem, progress);
  858. };
  859. importUploader.onProgressAll = function(progress) {
  860. console.info('onProgressAll', progress);
  861. };
  862. importUploader.onSuccessItem = function(fileItem, response, status, headers) {
  863. if (response.status == 200) {
  864. SweetAlert.swal({
  865. title: "导入成功!",
  866. confirmButtonColor: "#007AFF",
  867. type: "success"
  868. }, function() {
  869. $rootScope.isMask = false;
  870. });
  871. console.info('onSuccessItem', fileItem, response, status, headers);
  872. } else {
  873. SweetAlert.swal({
  874. title: "导入失败!",
  875. text: response.error,
  876. type: "error"
  877. }, function() {
  878. $rootScope.isMask = false;
  879. });
  880. }
  881. };
  882. importUploader.onErrorItem = function(fileItem, response, status, headers) {
  883. console.info('onErrorItem', fileItem, response, status, headers);
  884. SweetAlert.swal({
  885. title: "系统错误!",
  886. text: "系统错误,请稍候重试!",
  887. type: "error"
  888. }, function() {
  889. $rootScope.isMask = false;
  890. });
  891. };
  892. importUploader.onCancelItem = function(fileItem, response, status, headers) {
  893. console.info('onCancelItem', fileItem, response, status, headers);
  894. };
  895. importUploader.onCompleteItem = function(fileItem, response, status, headers) {
  896. console.info('onCompleteItem', fileItem, response, status, headers);
  897. };
  898. importUploader.onCompleteAll = function() {
  899. console.info('onCompleteAll');
  900. };
  901. $scope.import = function(style) {
  902. $rootScope.isMask = true;
  903. importUploader.onBeforeUploadItem = function(item) {
  904. angular.extend(item.headers, $rootScope.getSession());
  905. item.formData.push({ 'filename': item.file.name });
  906. console.info('onBeforeUploadItem', item);
  907. };
  908. importUploader.uploadAll();
  909. }
  910. $scope.removeData = function() {
  911. var rmvList = $scope.selected.items.id;
  912. // angular.forEach($scope.selected.items,function(item){
  913. // rmvList.push(item.id);
  914. // });
  915. // if(rmvList.length>0){
  916. api_cmdb.put($scope.selected.items, rmvList).then(function(response) {
  917. if (response.status == 200) {
  918. SweetAlert.swal({
  919. title: "删除成功!",
  920. type: "success",
  921. confirmButtonColor: "#007AFF"
  922. }, function() {
  923. $scope.myData = _.reject($scope.myData, function(o) { return _.includes(rmvList, o.id); });
  924. $scope.selected = {
  925. items: []
  926. };
  927. });
  928. } else {
  929. SweetAlert.swal({
  930. title: "操作异常!",
  931. text: "系统异常,请稍后重试,或者联系管理员!",
  932. type: "error"
  933. });
  934. }
  935. })
  936. // }
  937. }
  938. $scope.selected = {
  939. items: []
  940. }
  941. $scope.editted = {
  942. items: []
  943. }
  944. var defaultFilterData = {
  945. // "assignee":2,
  946. // "sign":"basehwitndl",
  947. "idx": 0,
  948. "sum": $scope.gridOptions.paginationPageSize
  949. };
  950. $scope.memoryfilterData = {
  951. // "assignee":2,
  952. // "sign":"basehwitndl",
  953. "idx": 0,
  954. "sum": $scope.gridOptions.paginationPageSize
  955. }
  956. $scope.ldloading = {};
  957. var pdKey = $state.current.pdKey;
  958. $scope.refreshData = function(style, filterData) {
  959. if (angular.isUndefined(filterData)) {
  960. filterData = defaultFilterData;
  961. }
  962. $scope.myData = [];
  963. // $scope.gridOptions['sum']=filterData.sum;
  964. api_cmdb.query(filterData).then(function(data) {
  965. // $scope.callsPending--;
  966. var myData = Restangular.stripRestangular(data);
  967. $scope.gridOptions['totalItems'] = data.total;
  968. // angular.forEach(myData.data.node,function(item){
  969. // moment(item.createtime).format('YYYY-MM-DD');
  970. // })
  971. for (var i = 0; i < myData.data.node.length; i++) {
  972. myData.data.node[i].createtime = moment(myData.data.node[i].createtime).format('YYYY-MM-DD');
  973. }
  974. $scope.myData = myData.data.node;
  975. for (var i = 0; i < $scope.myData.length; i++) {
  976. $scope.myData[i]['item'] = i + 1 + filterData.idx * filterData.sum
  977. }
  978. }, function() {});
  979. };
  980. $scope.refreshData('expand-right', defaultFilterData);
  981. }]);
  982. app.controller('MeansOperCtrl', ['$rootScope', '$http', '$scope', function($rootScope, $http, $scope) {
  983. // console.log('$rootScope.user3='+JSON.stringify($scope.item));
  984. // if( $scope.item.handlerUser!=null){
  985. // if ($rootScope.user.id==$scope.item.handlerUser.id) {
  986. // $scope.item.chaozuoPower=true;
  987. // }
  988. // }
  989. $scope.look = function() {
  990. $scope.colobject.grid.appScope.lookFunction($scope.item);
  991. // console.log('$scope.item='+JSON.stringify($scope.item));
  992. }
  993. $scope.edit = function() {
  994. $scope.colobject.grid.appScope.selectRowFunction($scope.item);
  995. console.log('$scope.item=' + JSON.stringify($scope.item));
  996. // $scope.doEdit($scope.item.id);
  997. }
  998. }]);
  999. //操作按钮权限控制
  1000. 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) {
  1001. $scope.edit=function(){
  1002. var aaa = { "model": $scope.item };
  1003. console.log(aaa);
  1004. $state.go('app.means.fixed_edit', { formKey: 'means_edit', service: 'api_cmdb', 'model': JSON.stringify(aaa) })
  1005. }
  1006. $scope.watch=function(){
  1007. // console.log($scope.item.id);
  1008. console.log($scope.item);
  1009. $state.go('app.means.fixed_see', { gdzc_label:$scope.item.label,gdzc_item:JSON.stringify($scope.item),idd:$scope.item.id })
  1010. }
  1011. }]);
  1012. app.directive('meansoperator', function() {
  1013. return {
  1014. restrict: 'E',
  1015. scope: {
  1016. item: '=',
  1017. colobject: '='
  1018. },
  1019. controller: 'MeansOperCtrl',
  1020. template: '<div class="links cl-effect-1">' +
  1021. '<a ng-click="look()" tooltip="查看" tooltip-placement="left"><i class="ti-eye"></i></a>' +
  1022. '<a ng-click="edit()" tooltip="修改" tooltip-placement="left"><i class="fa fa-pencil-square-o"></i></a>' +
  1023. '</div>'
  1024. };
  1025. });
  1026. //操作
  1027. app.directive('wttt', function () {
  1028. return {
  1029. restrict: 'E',
  1030. scope: {
  1031. item: '=',
  1032. colobject: '='
  1033. },
  1034. controller: 'gdzc_caozuoCtrl',
  1035. template: '<div><div class="cl-effect-1 ui-grid-cell-contents pull-left" >' +
  1036. '<a class="handlefont" ng-click="watch()">查看</a>'+
  1037. // '<a ng-click="edit()" class="handlefont" ui-sref="app.fixed.edit">编辑</a>' +
  1038. '<a ng-click="edit()" class="handlefont">编辑</a>' +
  1039. '</div></div>'
  1040. };
  1041. });