gdzc_meansformCtrl.js 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382
  1. 'use strict';
  2. var cmdbFormly = angular.module('formlyCMDB', [
  3. 'formly', 'formlyBootstrap', 'ui.bootstrap',
  4. 'ngSanitize', 'ui.select', 'ui.grid'
  5. ]);
  6. app.requires.push('formlyCMDB');
  7. cmdbFormly.controller('gdzc_meansformCtrl', ['$rootScope', '$scope', '$parse', '$injector', '$http', '$q', '$state', '$stateParams', '$modal', '$timeout', '$interval', 'i18nService', 'SweetAlert', 'FileUploader', 'Restangular', 'UserRestangular', 'BpmRestangular', 'api_configure_form', 'api_configure_data', 'api_bpm_domain', 'api_bpm_data', 'api_user_data', 'api_cmdb', 'api_sysinfo',
  8. function($rootScope, $scope, $parse, $injector, $http, $q, $state, $stateParams, $modal, $timeout, $interval, i18nService, SweetAlert, FileUploader, Restangular, UserRestangular, BpmRestangular, api_configure_form, api_configure_data, api_bpm_domain, api_bpm_data, api_user_data, api_cmdb, api_sysinfo) {
  9. // $scope.haha=true;
  10. $scope.langs = i18nService.getAllLangs();
  11. $scope.lang = 'zh-cn';
  12. i18nService.setCurrentLang($scope.lang);
  13. $scope.width = { 'width': document.getElementById("mapwidth").offsetWidth - 201 };
  14. window.onresize = function() {
  15. if (document.getElementById("mapwidth")) {
  16. $scope.width = { 'width': document.getElementById("mapwidth").offsetWidth - 201 };
  17. }
  18. }
  19. var vm = this;
  20. vm.options = {};
  21. vm.exampleTitle = ['expressionProperties', 'model property'];
  22. vm.fields = [];
  23. vm.model = {};
  24. vm.model["loginUser"] = $rootScope.user;
  25. var that = $injector;
  26. var parse = $parse;
  27. var formKey = "";
  28. var pdKey = "";
  29. if (angular.isDefined($state.current.pdKey) && $state.current.pdKey != "") {
  30. pdKey = $state.current.pdKey;
  31. //console.log("pdKey::"+$state.current.pdKey);
  32. }
  33. if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") {
  34. formKey = $stateParams.formKey;
  35. // console.log(formKey);
  36. //console.log("formKey::"+$stateParams.formKey);
  37. }
  38. //关系图
  39. var dom = document.getElementById("meansmap");
  40. var myChart = echarts.init(dom);
  41. var app = {};
  42. var option = null;
  43. $scope.guanlianable = false;
  44. $scope.cmdbtype = {};
  45. myChart.showLoading();
  46. var data2 = [{
  47. name: "治安管理工作",
  48. label: {
  49. normal: {
  50. backgroundColor: '#725bb8'
  51. }
  52. },
  53. children: [{
  54. id: 1,
  55. name: "娱乐场所治安管理",
  56. children: [{
  57. id: 2,
  58. name: "娱乐场所治安管理工作"
  59. }]
  60. }, {
  61. id: 2,
  62. name: "安保工作",
  63. children: [{
  64. id: 4,
  65. name: "输油气管道安保工作"
  66. }, {
  67. id: 5,
  68. name: "校园安保工作"
  69. }, {
  70. id: 6,
  71. name: "节假日、重大活动、大型群众性活动"
  72. }]
  73. }, {
  74. id: 7,
  75. name: "精神病人管控工作",
  76. children: [{
  77. id: 8,
  78. name: "精神病人肇事肇祸案事件"
  79. }]
  80. }, {
  81. id: 9,
  82. name: "物流寄递业",
  83. children: [{
  84. id: 10,
  85. name: "物流寄递业治安管理工作"
  86. }]
  87. }, {
  88. id: 11,
  89. name: "推进基层基础工作创新",
  90. children: [{
  91. id: 12,
  92. name: "加强派出所建设"
  93. }]
  94. }, {
  95. id: 13,
  96. name: "地网建设工作",
  97. children: [{
  98. id: 14,
  99. name: "加强二轮电动车防盗登记备案装置安装工作"
  100. }]
  101. }, {
  102. id: 15,
  103. name: "无人机管理",
  104. children: [{
  105. id: 16,
  106. name: "加强无人机管理"
  107. }]
  108. }, {
  109. id: 17,
  110. name: "加强社会面巡逻防控",
  111. children: [{
  112. id: 18,
  113. name: "武装联勤巡逻"
  114. }]
  115. }]
  116. }];
  117. myChart.hideLoading();
  118. // echarts.util.each(data2.children, function(datum, index) {
  119. // index % 2 === 0 && (datum.collapsed = true);
  120. // });
  121. option = {
  122. backgroundColor: '#fff',
  123. tooltip: {
  124. trigger: 'item',
  125. triggerOn: 'mousemove'
  126. },
  127. legend: {
  128. top: '2%',
  129. left: '3%',
  130. orient: 'vertical',
  131. data: [{
  132. name: 'tree1',
  133. icon: 'rectangle'
  134. }],
  135. borderColor: '#c23531'
  136. },
  137. series: [{
  138. type: 'tree',
  139. name: '资产关系图',
  140. data: data2,
  141. top: '5%',
  142. left: '7%',
  143. bottom: '2%',
  144. right: '60%',
  145. symbolSize: 7,
  146. // label: {
  147. // normal: {
  148. // position: 'left',
  149. // verticalAlign: 'middle',
  150. // align: 'right'
  151. // }
  152. // },
  153. label: {
  154. normal: {
  155. position: 'center',
  156. verticalAlign: 'middle',
  157. align: 'left',
  158. backgroundColor: '#7049f0',
  159. color: '#fff',
  160. padding: 2,
  161. formatter: [
  162. '{box|{b}}'
  163. ].join('\n'),
  164. rich: {
  165. box: {
  166. top: 5,
  167. height: 30,
  168. color: '#fff',
  169. padding: [0, 2],
  170. align: 'center'
  171. }
  172. },
  173. lineStyle: {
  174. color: '#ccc',
  175. type: 'curve' // 'curve'|'broken'|'solid'|'dotted'|'dashed'
  176. }
  177. }
  178. },
  179. leaves: {
  180. label: {
  181. normal: {
  182. position: 'center',
  183. verticalAlign: 'middle',
  184. align: 'left',
  185. backgroundColor: '#c44eff',
  186. formatter: [
  187. '{box|{b}}'
  188. ].join('\n'),
  189. rich: {
  190. box: {
  191. height: 18,
  192. color: '#fff',
  193. padding: [0, 5],
  194. align: 'center'
  195. }
  196. }
  197. }
  198. }
  199. },
  200. expandAndCollapse: true,
  201. animationDuration: 550,
  202. animationDurationUpdate: 750
  203. }]
  204. };
  205. myChart.on('legendselectchanged', function(params) {
  206. // 获取点击图例的选中状态
  207. var isSelected = params.selected[params.name];
  208. // 在控制台中打印
  209. console.log((isSelected ? '选中了' : '取消选中了') + '图例' + params.name);
  210. // 打印所有图例的状态
  211. console.log(params.selected);
  212. })
  213. if (option && typeof option === "object") {
  214. myChart.setOption(option, true);
  215. }
  216. function getinternetAlarm() {
  217. api_bpm_data.fetchDataList('applicationForm', { "idx": 0, "sum": 100 }).then(function(data) {
  218. // if (data.status == 200) {
  219. option.series[0].data[0] = {
  220. name: "治安管理工作",
  221. label: {
  222. normal: {
  223. backgroundColor: '#725bb8'
  224. }
  225. },
  226. children: [{
  227. name: "娱乐场所治安管理",
  228. children: [{
  229. name: "娱乐场所治安管理工作"
  230. }]
  231. }, {
  232. name: "加强社会面巡逻防控",
  233. children: [{
  234. name: "武装联勤巡逻"
  235. }]
  236. }]
  237. }
  238. myChart.setOption(option, true);
  239. myChart.hideLoading();
  240. // }
  241. })
  242. }
  243. // getinternetAlarm();
  244. setInterval(function() {
  245. // getinternetAlarm();
  246. }, 10000);
  247. myChart.on("click", clickFun);
  248. function clickFun(param) {
  249. // if (typeof param.seriesIndex == 'undefined') {
  250. // return;
  251. // }
  252. if (param.type == 'click') {
  253. $scope.guanlianable = true;
  254. $scope.cmdbtype = param;
  255. }
  256. }
  257. $scope.changemeans = function() {
  258. var modalInstance = $modal.open({
  259. templateUrl: 'assets/views/means/tpl/meansmap.html',
  260. controller: function($scope, scope, $modalInstance) {
  261. $scope.key = {};
  262. $scope.linktypeOptions = scope.linktypeOptions;
  263. $scope.guanxidata = [
  264. { id: 0, name: '连接', value: 'link' },
  265. { id: 1, name: '安装部署', value: 'link' },
  266. { id: 2, name: '归属', value: 'link' },
  267. { id: 3, name: '使用', value: 'link' },
  268. { id: 4, name: '互备', value: 'link' },
  269. { id: 5, name: '主备', value: 'link' }
  270. ];
  271. $scope.ok = function(key) {
  272. $modalInstance.close(key);
  273. };
  274. $scope.openModal = function(size, options, modal) {
  275. var modalInstance = $modal.open({
  276. templateUrl: 'assets/views/customform/tpl/cmdb/guanlian.html',
  277. controller: function($scope, $rootScope, $modalInstance, api_user_data, i18nService) {
  278. $scope.langs = i18nService.getAllLangs();
  279. $scope.lang = 'zh-cn';
  280. i18nService.setCurrentLang($scope.lang);
  281. $scope.gridOptions = {};
  282. $scope.gridOptions.data = 'myData';
  283. $scope.gridOptions.enableColumnResizing = true;
  284. $scope.gridOptions.enableFiltering = false;
  285. $scope.gridOptions.enableGridMenu = false;
  286. $scope.gridOptions.showGridFooter = true;
  287. $scope.gridOptions.showColumnFooter = false;
  288. $scope.gridOptions.fastWatch = true;
  289. $scope.gridOptions.useExternalFiltering = false;
  290. $scope.gridOptions.useExternalPagination = true;
  291. $scope.gridOptions.paginationPageSizes = [10, 20, 50, 100];
  292. $scope.gridOptions.paginationPageSize = 10;
  293. $scope.gridOptions.multiSelect = false;
  294. $scope.gridOptions.rowIdentity = function(row) {
  295. return row.id;
  296. };
  297. $scope.gridOptions.getRowIdentity = function(row) {
  298. return row.id;
  299. };
  300. $scope.gridOptions.columnDefs = [
  301. { name: 'item', displayName: '序号', width: 80 },
  302. { name: 'serialNumbe', displayName: '申请单编号', width: 120 },
  303. { name: 'proposer.name', displayName: '申请人', width: 80, enableFiltering: false },
  304. { name: 'time', displayName: '申请时间', width: 100, enableFiltering: false },
  305. { name: 'type', displayName: '类型', width: 120, enableFiltering: false, cellTemplate: "<div><div class='ui-grid-cell-contents'>{{grid.appScope.typedata(row.entity)}}</div></div>" },
  306. { name: 'status', displayName: '状态', width: 120, enableFiltering: false, cellTemplate: "<div><div class='ui-grid-cell-contents'>{{grid.appScope.statedata(row.entity)}}</div></div>" },
  307. { name: 'linkProposer.name', displayName: '优先级', width: 80, enableFiltering: false },
  308. ];
  309. $scope.states = [
  310. { id: 0, name: '待批准' },
  311. { id: 1, name: '已驳回' },
  312. { id: 2, name: '待出库' },
  313. { id: 3, name: '信息更新' },
  314. { id: 4, name: '信息确认' },
  315. { id: 5, name: '已关闭' }
  316. ];
  317. $scope.type = [
  318. { id: 1, name: '资产入库' },
  319. { id: 2, name: '资产归还' },
  320. { id: 3, name: '资产领用' },
  321. { id: 4, name: '资产更换' }
  322. ];
  323. $scope.typedata = function(row) {
  324. if (row.type == 0) {
  325. return "资产入库";
  326. } else if (row.type == 2) {
  327. return "资产归还";
  328. } else if (row.type == 1) {
  329. return "资产领用";
  330. } else if (row.type == 4) {
  331. return "资产更换";
  332. }
  333. };
  334. $scope.statedata = function(row) {
  335. if (row.status == 0) {
  336. return "待批准";
  337. } else if (row.status == 1) {
  338. return "已驳回";
  339. } else if (row.status == 2) {
  340. return "待出库";
  341. } else if (row.status == 3) {
  342. return "信息更新";
  343. } else if (row.status == 4) {
  344. return "信息确认";
  345. } else if (row.status == 5) {
  346. return "已关闭";
  347. }
  348. };
  349. $scope.application = [
  350. { value: "serialNumbe", name: '申请单编号' },
  351. // { value: "proposer", name: '申请人' },
  352. { value: "purpose", name: '领用用途' },
  353. // { value: "cmdbsign", name: '设备编号' }
  354. ];
  355. $scope.parameters = null;
  356. $scope.open = function($event) {
  357. $event.preventDefault();
  358. $event.stopPropagation();
  359. $scope.opened = !$scope.opened;
  360. };
  361. $scope.endOpen = function($event) {
  362. $event.preventDefault();
  363. $event.stopPropagation();
  364. $scope.startOpened = false;
  365. $scope.endOpened = !$scope.endOpened;
  366. };
  367. $scope.startOpen = function($event) {
  368. $event.preventDefault();
  369. $event.stopPropagation();
  370. $scope.endOpened = false;
  371. $scope.startOpened = !$scope.startOpened;
  372. };
  373. $scope.othcode = {};
  374. $scope.searchkeys = {};
  375. $scope.parameters = {};
  376. $scope.memoryfilterData = {
  377. "assignee": $rootScope.user.id,
  378. "candidateGroups": $rootScope.user.group[0].id,
  379. "searchType": "todo",
  380. idx: 0,
  381. sum: 10
  382. }
  383. $scope.clear = function() {
  384. $scope.searchkeys = {};
  385. // $scope.othcode = {};
  386. $scope.parameters = {};
  387. var fildata = {
  388. "assignee": $rootScope.user.id,
  389. "candidateGroups": $rootScope.user.group[0].id,
  390. "searchType": "todo",
  391. idx: 0,
  392. sum: 10
  393. }
  394. $scope.memoryfilterData = fildata;
  395. $scope.loadData(fildata);
  396. }
  397. $scope.chiceIncident = function(parameters, item, stateid) {
  398. var fildata = { "assignee": $rootScope.user.id, "candidateGroups": 1, "searchType": "todo", "idx": 0, "sum": 10 };
  399. if (item) {
  400. fildata.applicationForm = {};
  401. if (item.alltitle && item.alldata) {
  402. fildata.applicationForm[item.alltitle.value] = item.alldata
  403. }
  404. if (item.linkProposer) {
  405. fildata.applicationForm.linkProposer = item.linkProposer
  406. }
  407. if (item.proposer) {
  408. fildata.applicationForm.proposer = item.proposer
  409. }
  410. if (item.status) {
  411. fildata.applicationForm['status'] = item.status.id;
  412. }
  413. if (item.type) {
  414. fildata.applicationForm['type'] = item.type.id;
  415. }
  416. }
  417. $scope.gridOptions.paginationCurrentPage = 1;
  418. if (parameters && parameters.paramDateFrom && parameters.paramDateTo) {
  419. angular.extend(fildata, { 'idx': 0, 'sum': $scope.gridOptions.paginationPageSize })
  420. angular.extend(fildata.applicationForm, { 'startDate': moment(parameters.paramDateFrom).format('YYYY-MM-DD HH:mm:ss'), 'endDate': moment(parameters.paramDateTo).format('YYYY-MM-DD 23:59:59') })
  421. }
  422. var transitiondata = angular.copy(item);
  423. // angular.extend(fildata.applicationForm, transitiondata)
  424. $scope.loadData(fildata);
  425. }
  426. $scope.key = {};
  427. api_user_data.fetchDataList('user', { "idx": 0, "sum": 1000, "flag": -1,user: {engineer: 1,} }).then(function(data) {
  428. $scope.handlingPersonnelUser = data.list;
  429. });
  430. $scope.gridOptions.onRegisterApi = function(gridApi) {
  431. $scope.gridApi = gridApi;
  432. gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {
  433. // console.log(newPage);
  434. // console.log(pageSize);
  435. $scope.loadData({ "idx": newPage - 1, "sum": pageSize });
  436. });
  437. gridApi.core.on.filterChanged($scope, function() {
  438. });
  439. gridApi.selection.on.rowSelectionChanged($scope, function(data) {
  440. $scope.selected.item = data.entity;
  441. //console.log(data);
  442. });
  443. };
  444. $scope.loadData = function(filterData) {
  445. api_bpm_data.fetchDataList('applicationForm', filterData).then(function(data) {
  446. var myData = Restangular.stripRestangular(data);
  447. $scope.gridOptions.totalItems = myData.totalNum;
  448. $scope.myData = myData.list;
  449. for (var i = 0; i < $scope.myData.length; i++) {
  450. $scope.myData[i]['item'] = i + 1 + filterData.idx * filterData.sum;
  451. }
  452. });
  453. };
  454. // $scope.title = title;
  455. $scope.loadData({
  456. idx: 0,
  457. sum: 10,
  458. "assignee": $rootScope.user.id,
  459. "candidateGroups": $rootScope.user.group[0].id,
  460. "searchType": "todo",
  461. });
  462. $scope.selected = {
  463. item: {}
  464. };
  465. $scope.ok = function() {
  466. //console.log($scope.selected.item);
  467. $modalInstance.close({ id: 12809, name: "资产" });
  468. };
  469. $scope.cancel = function() {
  470. $modalInstance.dismiss('cancel');
  471. };
  472. },
  473. size: 'lg'
  474. });
  475. modalInstance.result.then(function(selectedItem) {
  476. // $scope.cmdbtype
  477. // var fildata = { "id": -1, "name": "link", "source": 12809, "target": $scope.cmdbtype.id, "left": true, "right": false, "props": {} }
  478. }, function() {
  479. //console.log('Modal dismissed at: ' + new Date());
  480. });
  481. }
  482. $scope.cancel = function() {
  483. $modalInstance.dismiss('cancel');
  484. };
  485. },
  486. size: 'sm',
  487. resolve: {
  488. scope: function() {
  489. return $scope;
  490. }
  491. }
  492. });
  493. modalInstance.result.then(function(selectedItem) {
  494. if (selectedItem) {
  495. var fildata = { "id": -1, "name": selectedItem.name.value, "source": 12809, "target": $scope.cmdbtype.data.id, "left": true, "right": false, "props": {} }
  496. api_cmdb.createRef(fildata).then(function(response) {
  497. if (response && response.status == 200) {
  498. } else {
  499. }
  500. });
  501. } else {
  502. // SweetAlert.swal({
  503. // title: "未选择资产关系!",
  504. // text: "请选择资产关系",
  505. // type: "error"
  506. // })
  507. }
  508. });
  509. }
  510. //关系图end
  511. //用户测试数据,后续从header的auth中获取
  512. var userId = 2;
  513. userId = $rootScope.user.id;
  514. //==============处理表单设计数据 开始====================
  515. //处理组件加载后台数据选项的方法
  516. function refreshSelectOptions(searchVal, field) {
  517. if (field.templateOptions.optionsUrl) {
  518. var process = BpmRestangular.all("");
  519. if (field.templateOptions.ApiService) {
  520. process = UserRestangular.all("");
  521. }
  522. process.customPOST({ "idx": 0, "sum": 1000 }, field.templateOptions.optionsUrl).then(function(result) {
  523. if (!field.templateOptions.options) {
  524. field.templateOptions.options = [];
  525. }
  526. if (field.templateOptions.optionsDataKey) {
  527. field.templateOptions.options = result[field.templateOptions.optionsDataKey];
  528. } else {
  529. field.templateOptions.options = result;
  530. }
  531. });
  532. }
  533. }
  534. function decodeVMTabForm(model, tabs) {
  535. var result = { model: {}, tabs: [] };
  536. var mdata = angular.fromJson(model);
  537. angular.extend(result.model, mdata);
  538. angular.forEach(tabs, function(tab) {
  539. tab.form.model = vm.model;
  540. angular.forEach(tab.form.fields, function(field) {
  541. if (field.key == "") {
  542. delete field.key;
  543. }
  544. if (angular.isDefined(field.extjson) && field.extjson != "") {
  545. var extObj = angular.fromJson(field.extjson);
  546. angular.extend(field.templateOptions, extObj.templateOptions);
  547. delete extObj.templateOptions;
  548. for (var prop in extObj) {
  549. if (new RegExp("Expression").test(prop)) {
  550. //var obj = $scope.$eval(extObj[prop]);
  551. //extObj[prop] = $scope.$eval(extObj[prop]);
  552. if (extObj[prop] != null) {
  553. if (new RegExp("function").test(extObj[prop])) {
  554. var propValue = eval(extObj[prop]);
  555. extObj[prop] = propValue;
  556. } else {
  557. //console.log(extObj[prop]);
  558. var obj = $scope.$eval(extObj[prop]);
  559. extObj[prop] = obj;
  560. //console.log(obj);
  561. }
  562. }
  563. } else if (new RegExp("expressionProperties").test(prop)) {
  564. for (var p in extObj[prop]) {
  565. if (new RegExp("function").test(extObj[prop][p])) {
  566. var propValue = eval(extObj[prop][p]);
  567. extObj[prop][p] = propValue;
  568. } else {
  569. //if(p.indexOf("'")>=0){
  570. // var obj = $scope.$eval(extObj[prop][p]);
  571. // extObj[prop][$scope.$eval(p)]=obj;
  572. //}
  573. }
  574. }
  575. } else if ("watcher" == prop) {
  576. if (angular.isArray(extObj[prop])) {
  577. angular.forEach(extObj[prop], function(item, index) {
  578. for (var p in item) {
  579. if (new RegExp("function").test(item[p])) {
  580. var propValue = eval(item[p]);
  581. extObj[prop][index][p] = propValue;
  582. }
  583. }
  584. });
  585. } else if (angular.isObject(extObj[prop])) {
  586. for (var p in extObj[prop]) {
  587. if (new RegExp("function").test(extObj[prop][p])) {
  588. var propValue = eval(extObj[prop][p]);
  589. extObj[prop][p] = propValue;
  590. }
  591. }
  592. }
  593. }
  594. }
  595. angular.extend(field, extObj);
  596. delete field.extjson;
  597. }
  598. if (field.extjson == "") {
  599. delete field.extjson;
  600. }
  601. if (angular.isDefined(field.templateOptions)) {
  602. var templateOs = field.templateOptions;
  603. for (var property in templateOs) {
  604. //console.log(property);
  605. if (angular.isString(templateOs[property]) && !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))) {
  606. if (new RegExp("function").test(templateOs[property])) {
  607. var propValue = eval(templateOs[property]);
  608. field.templateOptions[property] = propValue;
  609. } else {
  610. if (that.has(templateOs[property])) {
  611. field.templateOptions[property] = that.get(templateOs[property]);
  612. } else {
  613. field.templateOptions[property] = templateOs[property];
  614. }
  615. }
  616. } else if (templateOs[property] == null) {
  617. //delete field.templateOptions[property];
  618. } else {}
  619. }
  620. }
  621. if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) {
  622. var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson);
  623. angular.extend(field.templateOptions, extObj);
  624. delete field.templateOptions.extjson;
  625. }
  626. //...
  627. if (field.templateOptions) {
  628. //处理远程获取数据控件方法调用
  629. if (field.templateOptions.optionsUrl) {
  630. field.templateOptions.refresh = refreshSelectOptions;
  631. }
  632. //处理嵌套属性数据绑定/
  633. if (field.templateOptions.pkey) {
  634. var pmodel, i = 0;
  635. angular.forEach(field.templateOptions.pkey.split("."), function(p) {
  636. if (i == 0) {
  637. if (result.model[p] == null) {
  638. result.model[p] = {};
  639. }
  640. pmodel = result.model[p];
  641. i++;
  642. } else {
  643. if (pmodel[p] == null) {
  644. pmodel[p] = {};
  645. }
  646. pmodel = pmodel[p];
  647. }
  648. });
  649. if (pmodel != null) {
  650. field.model = pmodel;
  651. if (pmodel[field.key] == null) {
  652. pmodel[field.key] = null;
  653. }
  654. }
  655. } else {
  656. if (result.model[field.key] == null) {
  657. result.model[field.key] = null;
  658. }
  659. }
  660. //处理弹出框组件初始化
  661. if (field.type == "ui-input-selectmodal") {
  662. field.templateOptions.modal = $modal;
  663. //field.templateOptions.Restangular = Restangular;
  664. } else if (field.type == "ui-userselect") {
  665. field.templateOptions.modal = $modal;
  666. //field.templateOptions.Restangular = Restangular;
  667. } else if (field.type == "ui-multiuserselect") {
  668. field.templateOptions.modal = $modal;
  669. } else if (field.type == "ui-modelselect") {
  670. field.templateOptions.modal = $modal;
  671. //field.templateOptions.Restangular = Restangular;
  672. } else if (field.type == "ui-dropfile") {
  673. field.templateOptions.fileUploader = new FileUploader({
  674. url: '/uploader'
  675. });
  676. field.templateOptions.taskId = $stateParams.taskId;
  677. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  678. field.templateOptions.userId = $rootScope.user.id;
  679. //field.ApiService=api_bpm_domain;
  680. } else if (field.type == "ui-dropfiletable") {
  681. if (field.templateOptions.processInstanceId) {
  682. } else {
  683. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  684. }
  685. } else if (field.type == "ui-repeatSection") {
  686. var repeatForm = {
  687. model: {
  688. },
  689. fields: field.templateOptions.fields
  690. };
  691. repeatForm.model[field.key] = [];
  692. decodeVMTabForm(repeatForm);
  693. }
  694. }
  695. // console.log(field);
  696. //field
  697. //result.fields.push(field);
  698. })
  699. });
  700. vm.originalTabs = angular.copy(vm.form);
  701. }
  702. //解析自定义表单设计数据
  703. function decodeVMForm(vmForm) {
  704. var result = { model: {}, tabs: [] };
  705. //设置模型实体数据 begin
  706. // var mdata = vmForm.model;
  707. //解析数据实体
  708. var mdata = angular.fromJson(vmForm.model); //JSON.parse(field.extjson);
  709. angular.extend(result.model, mdata);
  710. //设置模型实体数据 end
  711. //解析设计数据生成表单项 begin
  712. var fields = [];
  713. //处理修改设计数据中展示设置
  714. angular.forEach(vmForm.tabs, function(field) {
  715. if (field.key == "") {
  716. delete field.key;
  717. }
  718. if (angular.isDefined(field.extjson)) {
  719. var extObj = angular.fromJson(field.extjson); //JSON.parse(field.extjson);
  720. angular.extend(field.templateOptions, extObj.templateOptions);
  721. delete extObj.templateOptions;
  722. for (var prop in extObj) {
  723. if (new RegExp("Expression").test(prop)) {
  724. //var obj = $scope.$eval(extObj[prop]);
  725. //extObj[prop] = $scope.$eval(extObj[prop]);
  726. if (extObj[prop] != null) {
  727. if (new RegExp("function").test(extObj[prop])) {
  728. var propValue = eval(extObj[prop]);
  729. extObj[prop] = propValue;
  730. } else {
  731. //console.log(extObj[prop]);
  732. var obj = $scope.$eval(extObj[prop]);
  733. extObj[prop] = obj;
  734. //console.log(obj);
  735. }
  736. }
  737. } else if (new RegExp("expressionProperties").test(prop)) {
  738. for (var p in extObj[prop]) {
  739. if (new RegExp("function").test(extObj[prop][p])) {
  740. var propValue = eval(extObj[prop][p]);
  741. extObj[prop][p] = propValue;
  742. } else {
  743. //if(p.indexOf("'")>=0){
  744. // var obj = $scope.$eval(extObj[prop][p]);
  745. // extObj[prop][$scope.$eval(p)]=obj;
  746. //}
  747. }
  748. }
  749. } else if ("watcher" == prop) {
  750. if (angular.isArray(extObj[prop])) {
  751. angular.forEach(extObj[prop], function(item, index) {
  752. for (var p in item) {
  753. if (new RegExp("function").test(item[p])) {
  754. var propValue = eval(item[p]);
  755. extObj[prop][index][p] = propValue;
  756. }
  757. }
  758. });
  759. } else if (angular.isObject(extObj[prop])) {
  760. for (var p in extObj[prop]) {
  761. if (new RegExp("function").test(extObj[prop][p])) {
  762. var propValue = eval(extObj[prop][p]);
  763. extObj[prop][p] = propValue;
  764. }
  765. }
  766. }
  767. }
  768. }
  769. angular.extend(field, extObj);
  770. delete field.extjson;
  771. }
  772. if (angular.isDefined(field.templateOptions)) {
  773. var templateOs = field.templateOptions;
  774. for (var property in templateOs) {
  775. //console.log(property);
  776. if (angular.isString(templateOs[property]) && !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))) {
  777. if (new RegExp("function").test(templateOs[property])) {
  778. var propValue = eval(templateOs[property]);
  779. field.templateOptions[property] = propValue;
  780. } else {
  781. if (that.has(templateOs[property])) {
  782. field.templateOptions[property] = that.get(templateOs[property]);
  783. } else {
  784. field.templateOptions[property] = templateOs[property];
  785. }
  786. }
  787. } else if (templateOs[property] == null) {
  788. //delete field.templateOptions[property];
  789. } else {}
  790. }
  791. }
  792. console.log(field);
  793. if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) {
  794. var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson);
  795. angular.extend(field.templateOptions, extObj);
  796. delete field.templateOptions.extjson;
  797. }
  798. //...
  799. if (field.templateOptions) {
  800. //处理远程获取数据控件方法调用
  801. if (field.templateOptions.optionsUrl) {
  802. field.templateOptions.refresh = refreshSelectOptions;
  803. }
  804. //处理嵌套属性数据绑定/
  805. if (field.templateOptions.pkey) {
  806. var pmodel, i = 0;
  807. angular.forEach(field.templateOptions.pkey.split("."), function(p) {
  808. if (i == 0) {
  809. if (result.model[p] == null) {
  810. result.model[p] = {};
  811. }
  812. pmodel = result.model[p];
  813. i++;
  814. } else {
  815. if (pmodel[p] == null) {
  816. pmodel[p] = {};
  817. }
  818. pmodel = pmodel[p];
  819. }
  820. });
  821. if (pmodel != null) {
  822. field.model = pmodel;
  823. if (pmodel[field.key] == null) {
  824. pmodel[field.key] = null;
  825. }
  826. }
  827. } else {
  828. if (result.model[field.key] == null) {
  829. result.model[field.key] = null;
  830. }
  831. }
  832. //处理弹出框组件初始化
  833. if (field.type == "ui-input-selectmodal") {
  834. field.templateOptions.modal = $modal;
  835. //field.templateOptions.Restangular = Restangular;
  836. } else if (field.type == "ui-userselect") {
  837. field.templateOptions.modal = $modal;
  838. //field.templateOptions.Restangular = Restangular;
  839. } else if (field.type == "ui-multiuserselect") {
  840. field.templateOptions.modal = $modal;
  841. } else if (field.type == "ui-modelselect") {
  842. field.templateOptions.modal = $modal;
  843. //field.templateOptions.Restangular = Restangular;
  844. } else if (field.type == "ui-dropfile") {
  845. field.templateOptions.fileUploader = new FileUploader({
  846. url: '/uploader'
  847. });
  848. field.templateOptions.taskId = $stateParams.taskId;
  849. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  850. field.templateOptions.userId = $rootScope.user.id;
  851. //field.ApiService=api_bpm_domain;
  852. } else if (field.type == "ui-dropfiletable") {
  853. if (field.templateOptions.processInstanceId) {
  854. } else {
  855. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  856. }
  857. } else if (field.type == "ui-repeatSection") {
  858. var repeatForm = {
  859. model: {
  860. },
  861. fields: field.templateOptions.fields
  862. };
  863. repeatForm.model[field.key] = [];
  864. decodeVMForm(repeatForm);
  865. }
  866. }
  867. // console.log(field);
  868. result.fields.push(field);
  869. });
  870. angular.extend($scope.vm.fields, result.fields);
  871. angular.extend($scope.vm.model, result.model);
  872. $scope.formData = vmForm;
  873. //console.log($scope.vm);
  874. //解析设计数据生成表单项 end
  875. return result;
  876. }
  877. //======================处理表单设计数据 结束========================
  878. $scope.ldloading = {};
  879. function filter(obj) {
  880. angular.forEach(obj, function(key, value) {
  881. if (value === "" || value === null) {
  882. delete obj[key];
  883. } else if (Object.prototype.toString.call(value) === '[object Object]') {
  884. filter(value);
  885. } else if (angular.isArray(value)) {
  886. angular.forEach(value, function(item) {
  887. filter(item);
  888. });
  889. }
  890. });
  891. }
  892. function invokeOnAllFormOptions(fn) {
  893. angular.forEach(vm.tabs, function(tab) {
  894. if (tab.form.options && tab.form.options[fn]) {
  895. tab.form.options[fn]();
  896. }
  897. });
  898. }
  899. function encodeCIData(data, ciId) {
  900. /*
  901. create/update state:未审核
  902. create createtime:系统时间
  903. create/update lastupdatetime : 系统时间
  904. label:ci分类
  905. */
  906. if (ciId) {
  907. var baseprop = ['uuid', 'name', 'type', 'label', 'status', 'createtime', 'lastupdatetime', 'props']; //state|audittime//createtime//removeflag|removetime//configperson//lastupdateperson//manager//useradmin
  908. var extraprop = 'props';
  909. data[extraprop] = {};
  910. for (var key in data) {
  911. // console.log(data[key]);
  912. if (_.indexOf(baseprop, key) >= 0) {
  913. continue;
  914. } else {
  915. data[extraprop][key] = data[key];
  916. delete data[key];
  917. }
  918. }
  919. if ($rootScope.user) {
  920. data[extraprop]['lastupdateperson'] = $rootScope.user.name;
  921. data[extraprop]['configperson'] = $rootScope.user.name;
  922. var isCMAdminFlag = false;
  923. angular.forEach($rootScope.user.role, function(roleItem) {
  924. if (roleItem.rolecode == "cmdb charge") {
  925. isCMAdminFlag = true;
  926. }
  927. })
  928. if (!isCMAdminFlag) {
  929. data[extraprop]['state'] = '1';
  930. }
  931. }
  932. if (data.props.id) {
  933. } else {
  934. data.label = ciId;
  935. }
  936. return data;
  937. }
  938. return undefined;
  939. }
  940. function decodeCIModel(data) {
  941. var extraprop = 'props';
  942. if (data[extraprop]) {
  943. for (var key in data[extraprop]) {
  944. data[key] = data[extraprop][key];
  945. }
  946. delete data[extraprop];
  947. }
  948. data['iscmadmin'] = false;
  949. angular.forEach($rootScope.user.role, function(roleItem) {
  950. if (roleItem.rolecode == "cmdb charge") {
  951. data['iscmadmin'] = true;
  952. }
  953. })
  954. return data;
  955. };
  956. vm.remove = function(data, style) {
  957. $scope.ldloading[style.replace('-', '_')] = true;
  958. // var cidata = {
  959. // label: data.label,
  960. // id: data.id,
  961. // uuid: data.uuid,
  962. // name: data.name,
  963. // props: {}
  964. // };
  965. // if (cidata.id) {
  966. // cidata.props['removeflag'] = true;
  967. // cidata.props['lastupdateperson'] = vm.model.loginUser;
  968. //cidata.props['removetime']=new Date();
  969. var modalInstance = $modal.open({
  970. templateUrl: 'assets/views/delete.html',
  971. controller: function($scope, scope, $modalInstance, api_bpm_data) {
  972. var cidata = {
  973. label: data.label,
  974. id: data.id,
  975. uuid: data.uuid,
  976. name: data.name,
  977. props: {}
  978. };
  979. if (cidata.id) {
  980. cidata.props['removeflag'] = true;
  981. cidata.props['lastupdateperson'] = vm.model.loginUser;
  982. $scope.ok = function() {
  983. $modalInstance.close(cidata);
  984. };
  985. $scope.cancel = function() {
  986. $modalInstance.dismiss('cancel');
  987. };
  988. }
  989. },
  990. size: 'sm',
  991. resolve: {
  992. scope: function() {
  993. return $scope;
  994. }
  995. }
  996. });
  997. modalInstance.result.then(function(selectedItem) {
  998. if (selectedItem) {
  999. // if (selectedItem.length > 0) {
  1000. api_cmdb.put(selectedItem, selectedItem.id).then(function(response) {
  1001. if (response) {
  1002. var resData = Restangular.stripRestangular(response);
  1003. SweetAlert.swal({
  1004. title: "删除成功!",
  1005. confirmButtonColor: "#007AFF"
  1006. }, function() {
  1007. $state.go("app.means.listd");
  1008. // $state.go("app.means.list");
  1009. // $scope.refreshform();
  1010. // reinitTabForm($scope.classify);
  1011. });
  1012. } else {
  1013. SweetAlert.swal({
  1014. title: "系统错误",
  1015. text: "系统错误,请稍后重试!",
  1016. type: "error",
  1017. confirmButtonColor: "#DD6B55"
  1018. });
  1019. }
  1020. $scope.ldloading[style.replace('-', '_')] = false;
  1021. });
  1022. // } else {
  1023. // SweetAlert.swal({
  1024. // title: "操作异常!",
  1025. // text: "系统异常,请稍后重试,或者联系管理员!",
  1026. // type: "error"
  1027. // });
  1028. // }
  1029. }
  1030. })
  1031. }
  1032. // })
  1033. // api_cmdb.put(cidata,data.id).then(function(response){
  1034. // if(response){
  1035. // var resData = Restangular.stripRestangular(response);
  1036. // SweetAlert.swal({
  1037. // title: "删除成功!",
  1038. // confirmButtonColor: "#007AFF"
  1039. // },function(){
  1040. // $state.go("app.means.list");
  1041. // // $scope.refreshform();
  1042. // // reinitTabForm($scope.classify);
  1043. // });
  1044. // }else{
  1045. // SweetAlert.swal({
  1046. // title: "系统错误",
  1047. // text: "系统错误,请稍后重试!",
  1048. // type: "error",
  1049. // confirmButtonColor: "#DD6B55"
  1050. // });
  1051. // }
  1052. // $scope.ldloading[style.replace('-', '_')] = false;
  1053. // });
  1054. // } else {
  1055. // $timeout(function() {
  1056. // $scope.ldloading[style.replace('-', '_')] = false;
  1057. // }, 2000);
  1058. // }
  1059. // }
  1060. function formValid() {
  1061. angular.forEach(vm.tabs, function(item) {
  1062. //item.
  1063. })
  1064. }
  1065. // 显示对应索引
  1066. $scope.xianshi = 0;
  1067. $scope.toindex = function(res) {
  1068. $scope.xianshi = res;
  1069. }
  1070. $scope.closeModel = function() {
  1071. if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") {
  1072. if ($stateParams.formKey == "means_editor" || $stateParams.formKey == "means_edit") {
  1073. $state.go('app.means.listd', {});
  1074. // $state.go('app.means.list', {});
  1075. }
  1076. event.preventDefault();
  1077. }
  1078. }
  1079. vm.submit = function(data, ciId, templateitem, style) {
  1080. // $scope.ldloading[style.replace('-', '_')] = true;
  1081. // console.log(vm.form.$$parentForm.$valid);
  1082. if (vm.form.$$parentForm.$valid) {
  1083. invokeOnAllFormOptions('updateInitialValue');
  1084. //alert(JSON.stringify(vm.model), null, 2);
  1085. //vm.options.updateInitialValue();
  1086. //console.log(vm.model);
  1087. var cidata = encodeCIData(vm.model, ciId);
  1088. if (cidata) {
  1089. //var cidata = ;
  1090. if (cidata.props.id) {
  1091. //修改
  1092. api_cmdb.put(cidata, ciId).then(function(response) {
  1093. if (response) {
  1094. var resData = Restangular.stripRestangular(response);
  1095. SweetAlert.swal({
  1096. title: "保存成功!",
  1097. confirmButtonColor: "#007AFF",
  1098. type: "success"
  1099. }, function() {
  1100. $scope.ldloading[style.replace('-', '_')] = false;
  1101. // $scope.refreshform();
  1102. $state.go("app.means.listd");
  1103. // $state.go("app.means.list");
  1104. });
  1105. } else {
  1106. SweetAlert.swal({
  1107. title: "系统错误",
  1108. text: "系统错误,请稍后重试!",
  1109. type: "error",
  1110. confirmButtonColor: "#DD6B55"
  1111. });
  1112. }
  1113. $scope.ldloading[style.replace('-', '_')] = false;
  1114. });
  1115. } else {
  1116. //新建
  1117. var type = 2;
  1118. api_sysinfo.getSerialnumber(type, templateitem.id).then(function(data) {
  1119. if (data && data.status == 200) {
  1120. cidata.uuid = data.uuid;
  1121. api_cmdb.create(cidata).then(function(response) {
  1122. if (response) {
  1123. var resData = Restangular.stripRestangular(response);
  1124. SweetAlert.swal({
  1125. title: "保存成功!",
  1126. text: "内部编号:" + cidata.uuid,
  1127. confirmButtonColor: "#007AFF",
  1128. type: "success"
  1129. }, function() {
  1130. $state.go("app.means.listd");
  1131. // $state.go("app.means.list");
  1132. });
  1133. // if(resData.status){
  1134. // resData
  1135. // }
  1136. } else {
  1137. SweetAlert.swal({
  1138. title: "系统错误",
  1139. text: "系统错误,请稍后重试!",
  1140. type: "error",
  1141. confirmButtonColor: "#DD6B55"
  1142. });
  1143. }
  1144. $scope.ldloading[style.replace('-', '_')] = false;
  1145. });
  1146. } else {
  1147. SweetAlert.swal({
  1148. title: "系统错误",
  1149. text: "内部编号生成出错!",
  1150. type: "error",
  1151. confirmButtonColor: "#DD6B55"
  1152. });
  1153. }
  1154. })
  1155. }
  1156. } else {
  1157. SweetAlert.swal({
  1158. title: "错误",
  1159. text: "错误,请选择资产分类!",
  1160. type: "error",
  1161. confirmButtonColor: "#DD6B55"
  1162. });
  1163. }
  1164. //alert(JSON.stringify(cidata), null, 2);
  1165. $scope.ldloading[style.replace('-', '_')] = true;
  1166. return;
  1167. var _ = window._;
  1168. vm.model = (function filter(obj) {
  1169. var filtered = _.pick(obj, function(v) { return angular.isDefined(v) && v !== null && (angular.isArray(v) ? v.length > 0 : true) && (_.isPlainObject(v) ? (!_.isEmpty(v)) : true); });
  1170. return _.cloneDeep(filtered, function(v) { return v !== filtered && _.isPlainObject(v) ? filter(v) : undefined; });
  1171. })(vm.model);
  1172. } else {
  1173. if (vm.form.$$parentForm.$error) {
  1174. SweetAlert.swal({
  1175. title: "校验错误",
  1176. text: "请填写必填项!",
  1177. type: "error",
  1178. confirmButtonColor: "#DD6B55"
  1179. });
  1180. angular.forEach(vm.form.$$parentForm.$error.required, function(item) {
  1181. angular.forEach(vm.tabs, function(tab) {
  1182. angular.forEach(tab.form.fields, function(f) {
  1183. if (f.name == item.$name) {
  1184. f.validation.show = true;
  1185. tab.active = true;
  1186. }
  1187. })
  1188. })
  1189. });
  1190. $scope.ldloading[style.replace('-', '_')] = false;
  1191. }
  1192. }
  1193. };
  1194. $scope.vm = vm;
  1195. //树形图
  1196. var apple_selected, tree, treedata_avm, treedata_geography;
  1197. $scope.my_tree_handler = function(branch) {
  1198. //var _ref;
  1199. // var classify=$scope.classify=branch.prefix.toLowerCase()+branch.sign;
  1200. // api_cmdb.query({'sign':classify}).then(function(data){
  1201. // var myData = Restangular.stripRestangular(data);
  1202. // // console.log(myData.data.node);
  1203. // if(myData.data&&myData.status==200){
  1204. // var ret = myData.data;
  1205. // redrawSvg(myData);
  1206. // }
  1207. // });
  1208. // $scope.ciId = undefined;
  1209. // var classify=$scope.classify=branch.prefix.toLowerCase()+branch.sign;
  1210. // api_configure_form.renderTabForm(classify).then(function(data){
  1211. // var myData = Restangular.stripRestangular(data);
  1212. // //angular.extend($scope.vm.fields,result.fields);
  1213. // //angular.extend($scope.vm.model,result.model);
  1214. // $scope.templateProps = myData;
  1215. // $scope.vm.tabs = myData;
  1216. // vm.model = {};
  1217. // decodeVMTabForm(vm.model, vm.tabs);
  1218. // //$scope.vm.originalTabs = angular.copy($scope.vm.form);
  1219. // //console.log(myData);
  1220. // });
  1221. };
  1222. $scope.my_data = [];
  1223. function convertListToTree(data, treeMap) {
  1224. var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup
  1225. var root = null; //Initially set our loop to null
  1226. var parentNode = null;
  1227. //loop over data
  1228. for (var i = 0; i < data.length; i++) {
  1229. var datum = data[i];
  1230. //each node will have children, so let's give it a "children" poperty
  1231. datum.children = [];
  1232. //add an entry for this node to the map so that any future children can
  1233. //lookup the parent
  1234. idToNodeMap[datum.id] = datum;
  1235. //Does this node have a parent?
  1236. if (typeof datum.parent === "undefined" || datum.parent == null) {
  1237. //Doesn't look like it, so this node is the root of the tree
  1238. root = datum;
  1239. treeMap[datum.id] = root;
  1240. } else {
  1241. //This node has a parent, so let's look it up using the id
  1242. parentNode = idToNodeMap[datum.parent.id];
  1243. //We don't need this property, so let's delete it.
  1244. delete datum.parent;
  1245. //Let's add the current node as a child of the parent node.
  1246. parentNode.children.push(datum);
  1247. }
  1248. }
  1249. return root;
  1250. }
  1251. function convertParentToChildList(data) {
  1252. var treeMap = {};
  1253. var list = [];
  1254. convertListToTree(data, treeMap);
  1255. angular.forEach(treeMap, function(item) {
  1256. list.push(item);
  1257. });
  1258. return list;
  1259. }
  1260. $scope.my_tree = tree = {};
  1261. $scope.try_async_load = function() {
  1262. $scope.my_data = [];
  1263. $scope.select_treedata = [];
  1264. $scope.doing_async = true;
  1265. api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(result) {
  1266. //console.log(result['list']);
  1267. $scope.select_treedata = $scope.my_data = convertParentToChildList(result['list']);
  1268. $scope.doing_async = false;
  1269. // tree.expand_all();
  1270. //console.log(treelist);
  1271. });
  1272. };
  1273. $scope.select_treedata = [];
  1274. $scope.propTypeOptions = [];
  1275. $scope.try_async_load();
  1276. $scope.onFilterCallback = function(item) {
  1277. //console.log(item);
  1278. if (angular.isDefined(item.children) && item.children.length >= 1) {
  1279. //not valid
  1280. } else {
  1281. var tempclassify = item.prefix.toLowerCase() + item.sign;
  1282. $scope.cifilter_classic = tempclassify;
  1283. $scope.templateitem = item;
  1284. api_configure_form.renderTabForm(tempclassify).then(function(data) {
  1285. var myData = Restangular.stripRestangular(data);
  1286. $scope.propTypeOptions = myData;
  1287. $scope.templateProps = myData;
  1288. $scope.vm.tabs = myData;
  1289. vm.model = {};
  1290. decodeVMTabForm(vm.model, vm.tabs);
  1291. });
  1292. }
  1293. }
  1294. $scope.jry_shuxing = JSON.parse($stateParams.model);
  1295. // console.log($scope.jry_shuxing);
  1296. $scope.refreshform = function() {
  1297. if ($stateParams.model) {
  1298. var modeldata = JSON.parse($stateParams.model)
  1299. api_configure_form.renderTabForm(modeldata.model.label).then(function(data) {
  1300. var myData = Restangular.stripRestangular(data);
  1301. $scope.templateProps = myData;
  1302. $scope.vm.tabs = myData;
  1303. vm.model = {};
  1304. vm.model = $scope.vm.model = decodeCIModel(modeldata.model);
  1305. vm.model["loginUser"] = $rootScope.user.name;
  1306. // console.log(vm.model);
  1307. decodeVMTabForm(vm.model, vm.tabs);
  1308. // console.log(myData);
  1309. });
  1310. }
  1311. }
  1312. $scope.refreshform();
  1313. }
  1314. ]);