gdzc_meansformCtrl.js 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384
  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);
  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];
  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.searchstate = JSON.parse(sessionStorage.getItem("searchincident")).searchType;
  386. // $scope.othcode = {};
  387. $scope.parameters = {};
  388. var fildata = {
  389. "assignee": $rootScope.user.id,
  390. "candidateGroups": $rootScope.user.group[0].id,
  391. "searchType": "todo",
  392. idx: 0,
  393. sum: 10
  394. }
  395. // sessionStorage.removeItem("searchincident");
  396. $scope.memoryfilterData = fildata;
  397. $scope.loadData(fildata);
  398. }
  399. $scope.chiceIncident = function(parameters, item, stateid) {
  400. var fildata = { "assignee": $rootScope.user.id, "candidateGroups": 1, "searchType": "todo", "idx": 0, "sum": 10 };
  401. if (item) {
  402. fildata.applicationForm = {};
  403. if (item.alltitle && item.alldata) {
  404. fildata.applicationForm[item.alltitle.value] = item.alldata
  405. }
  406. if (item.linkProposer) {
  407. fildata.applicationForm.linkProposer = item.linkProposer
  408. }
  409. if (item.proposer) {
  410. fildata.applicationForm.proposer = item.proposer
  411. }
  412. if (item.status) {
  413. fildata.applicationForm['status'] = item.status.id;
  414. }
  415. if (item.type) {
  416. fildata.applicationForm['type'] = item.type.id;
  417. }
  418. }
  419. $scope.gridOptions.paginationCurrentPage = 1;
  420. if (parameters && parameters.paramDateFrom && parameters.paramDateTo) {
  421. angular.extend(fildata, { 'idx': 0, 'sum': $scope.gridOptions.paginationPageSize })
  422. 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') })
  423. }
  424. var transitiondata = angular.copy(item);
  425. // angular.extend(fildata.applicationForm, transitiondata)
  426. $scope.loadData(fildata);
  427. }
  428. $scope.key = {};
  429. api_user_data.fetchDataList('user', { "idx": 0, "sum": 1000, "flag": -1 }).then(function(data) {
  430. $scope.handlingPersonnelUser = data.list;
  431. });
  432. $scope.gridOptions.onRegisterApi = function(gridApi) {
  433. $scope.gridApi = gridApi;
  434. gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {
  435. // console.log(newPage);
  436. // console.log(pageSize);
  437. $scope.loadData({ "idx": newPage - 1, "sum": pageSize });
  438. });
  439. gridApi.core.on.filterChanged($scope, function() {
  440. });
  441. gridApi.selection.on.rowSelectionChanged($scope, function(data) {
  442. $scope.selected.item = data.entity;
  443. //console.log(data);
  444. });
  445. };
  446. $scope.loadData = function(filterData) {
  447. api_bpm_data.fetchDataList('applicationForm', filterData).then(function(data) {
  448. var myData = Restangular.stripRestangular(data);
  449. $scope.gridOptions.totalItems = myData.totalNum;
  450. $scope.myData = myData.list;
  451. for (var i = 0; i < $scope.myData.length; i++) {
  452. $scope.myData[i]['item'] = i + 1 + filterData.idx * filterData.sum;
  453. }
  454. });
  455. };
  456. // $scope.title = title;
  457. $scope.loadData({
  458. idx: 0,
  459. sum: 10,
  460. "assignee": $rootScope.user.id,
  461. "candidateGroups": $rootScope.user.group[0].id,
  462. "searchType": "todo",
  463. });
  464. $scope.selected = {
  465. item: {}
  466. };
  467. $scope.ok = function() {
  468. //console.log($scope.selected.item);
  469. $modalInstance.close({ id: 12809, name: "资产" });
  470. };
  471. $scope.cancel = function() {
  472. $modalInstance.dismiss('cancel');
  473. };
  474. },
  475. size: 'lg'
  476. });
  477. modalInstance.result.then(function(selectedItem) {
  478. // $scope.cmdbtype
  479. // var fildata = { "id": -1, "name": "link", "source": 12809, "target": $scope.cmdbtype.id, "left": true, "right": false, "props": {} }
  480. }, function() {
  481. //console.log('Modal dismissed at: ' + new Date());
  482. });
  483. }
  484. $scope.cancel = function() {
  485. $modalInstance.dismiss('cancel');
  486. };
  487. },
  488. size: 'sm',
  489. resolve: {
  490. scope: function() {
  491. return $scope;
  492. }
  493. }
  494. });
  495. modalInstance.result.then(function(selectedItem) {
  496. if (selectedItem) {
  497. var fildata = { "id": -1, "name": selectedItem.name.value, "source": 12809, "target": $scope.cmdbtype.data.id, "left": true, "right": false, "props": {} }
  498. api_cmdb.createRef(fildata).then(function(response) {
  499. if (response && response.status == 200) {
  500. } else {
  501. }
  502. });
  503. } else {
  504. // SweetAlert.swal({
  505. // title: "未选择资产关系!",
  506. // text: "请选择资产关系",
  507. // type: "error"
  508. // })
  509. }
  510. });
  511. }
  512. //关系图end
  513. //用户测试数据,后续从header的auth中获取
  514. var userId = 2;
  515. userId = $rootScope.user.id;
  516. //==============处理表单设计数据 开始====================
  517. //处理组件加载后台数据选项的方法
  518. function refreshSelectOptions(searchVal, field) {
  519. if (field.templateOptions.optionsUrl) {
  520. var process = BpmRestangular.all("");
  521. if (field.templateOptions.ApiService) {
  522. process = UserRestangular.all("");
  523. }
  524. process.customPOST({ "idx": 0, "sum": 1000 }, field.templateOptions.optionsUrl).then(function(result) {
  525. if (!field.templateOptions.options) {
  526. field.templateOptions.options = [];
  527. }
  528. if (field.templateOptions.optionsDataKey) {
  529. field.templateOptions.options = result[field.templateOptions.optionsDataKey];
  530. } else {
  531. field.templateOptions.options = result;
  532. }
  533. });
  534. }
  535. }
  536. function decodeVMTabForm(model, tabs) {
  537. var result = { model: {}, tabs: [] };
  538. var mdata = angular.fromJson(model);
  539. angular.extend(result.model, mdata);
  540. angular.forEach(tabs, function(tab) {
  541. tab.form.model = vm.model;
  542. angular.forEach(tab.form.fields, function(field) {
  543. if (field.key == "") {
  544. delete field.key;
  545. }
  546. if (angular.isDefined(field.extjson) && field.extjson != "") {
  547. var extObj = angular.fromJson(field.extjson);
  548. angular.extend(field.templateOptions, extObj.templateOptions);
  549. delete extObj.templateOptions;
  550. for (var prop in extObj) {
  551. if (new RegExp("Expression").test(prop)) {
  552. //var obj = $scope.$eval(extObj[prop]);
  553. //extObj[prop] = $scope.$eval(extObj[prop]);
  554. if (extObj[prop] != null) {
  555. if (new RegExp("function").test(extObj[prop])) {
  556. var propValue = eval(extObj[prop]);
  557. extObj[prop] = propValue;
  558. } else {
  559. //console.log(extObj[prop]);
  560. var obj = $scope.$eval(extObj[prop]);
  561. extObj[prop] = obj;
  562. //console.log(obj);
  563. }
  564. }
  565. } else if (new RegExp("expressionProperties").test(prop)) {
  566. for (var p in extObj[prop]) {
  567. if (new RegExp("function").test(extObj[prop][p])) {
  568. var propValue = eval(extObj[prop][p]);
  569. extObj[prop][p] = propValue;
  570. } else {
  571. //if(p.indexOf("'")>=0){
  572. // var obj = $scope.$eval(extObj[prop][p]);
  573. // extObj[prop][$scope.$eval(p)]=obj;
  574. //}
  575. }
  576. }
  577. } else if ("watcher" == prop) {
  578. if (angular.isArray(extObj[prop])) {
  579. angular.forEach(extObj[prop], function(item, index) {
  580. for (var p in item) {
  581. if (new RegExp("function").test(item[p])) {
  582. var propValue = eval(item[p]);
  583. extObj[prop][index][p] = propValue;
  584. }
  585. }
  586. });
  587. } else if (angular.isObject(extObj[prop])) {
  588. for (var p in extObj[prop]) {
  589. if (new RegExp("function").test(extObj[prop][p])) {
  590. var propValue = eval(extObj[prop][p]);
  591. extObj[prop][p] = propValue;
  592. }
  593. }
  594. }
  595. }
  596. }
  597. angular.extend(field, extObj);
  598. delete field.extjson;
  599. }
  600. if (field.extjson == "") {
  601. delete field.extjson;
  602. }
  603. if (angular.isDefined(field.templateOptions)) {
  604. var templateOs = field.templateOptions;
  605. for (var property in templateOs) {
  606. //console.log(property);
  607. if (angular.isString(templateOs[property]) && !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))) {
  608. if (new RegExp("function").test(templateOs[property])) {
  609. var propValue = eval(templateOs[property]);
  610. field.templateOptions[property] = propValue;
  611. } else {
  612. if (that.has(templateOs[property])) {
  613. field.templateOptions[property] = that.get(templateOs[property]);
  614. } else {
  615. field.templateOptions[property] = templateOs[property];
  616. }
  617. }
  618. } else if (templateOs[property] == null) {
  619. //delete field.templateOptions[property];
  620. } else {}
  621. }
  622. }
  623. if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) {
  624. var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson);
  625. angular.extend(field.templateOptions, extObj);
  626. delete field.templateOptions.extjson;
  627. }
  628. //...
  629. if (field.templateOptions) {
  630. //处理远程获取数据控件方法调用
  631. if (field.templateOptions.optionsUrl) {
  632. field.templateOptions.refresh = refreshSelectOptions;
  633. }
  634. //处理嵌套属性数据绑定/
  635. if (field.templateOptions.pkey) {
  636. var pmodel, i = 0;
  637. angular.forEach(field.templateOptions.pkey.split("."), function(p) {
  638. if (i == 0) {
  639. if (result.model[p] == null) {
  640. result.model[p] = {};
  641. }
  642. pmodel = result.model[p];
  643. i++;
  644. } else {
  645. if (pmodel[p] == null) {
  646. pmodel[p] = {};
  647. }
  648. pmodel = pmodel[p];
  649. }
  650. });
  651. if (pmodel != null) {
  652. field.model = pmodel;
  653. if (pmodel[field.key] == null) {
  654. pmodel[field.key] = null;
  655. }
  656. }
  657. } else {
  658. if (result.model[field.key] == null) {
  659. result.model[field.key] = null;
  660. }
  661. }
  662. //处理弹出框组件初始化
  663. if (field.type == "ui-input-selectmodal") {
  664. field.templateOptions.modal = $modal;
  665. //field.templateOptions.Restangular = Restangular;
  666. } else if (field.type == "ui-userselect") {
  667. field.templateOptions.modal = $modal;
  668. //field.templateOptions.Restangular = Restangular;
  669. } else if (field.type == "ui-multiuserselect") {
  670. field.templateOptions.modal = $modal;
  671. } else if (field.type == "ui-modelselect") {
  672. field.templateOptions.modal = $modal;
  673. //field.templateOptions.Restangular = Restangular;
  674. } else if (field.type == "ui-dropfile") {
  675. field.templateOptions.fileUploader = new FileUploader({
  676. url: '/uploader'
  677. });
  678. field.templateOptions.taskId = $stateParams.taskId;
  679. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  680. field.templateOptions.userId = $rootScope.user.id;
  681. //field.ApiService=api_bpm_domain;
  682. } else if (field.type == "ui-dropfiletable") {
  683. if (field.templateOptions.processInstanceId) {
  684. } else {
  685. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  686. }
  687. } else if (field.type == "ui-repeatSection") {
  688. var repeatForm = {
  689. model: {
  690. },
  691. fields: field.templateOptions.fields
  692. };
  693. repeatForm.model[field.key] = [];
  694. decodeVMTabForm(repeatForm);
  695. }
  696. }
  697. // console.log(field);
  698. //field
  699. //result.fields.push(field);
  700. })
  701. });
  702. vm.originalTabs = angular.copy(vm.form);
  703. }
  704. //解析自定义表单设计数据
  705. function decodeVMForm(vmForm) {
  706. var result = { model: {}, tabs: [] };
  707. //设置模型实体数据 begin
  708. // var mdata = vmForm.model;
  709. //解析数据实体
  710. var mdata = angular.fromJson(vmForm.model); //JSON.parse(field.extjson);
  711. angular.extend(result.model, mdata);
  712. //设置模型实体数据 end
  713. //解析设计数据生成表单项 begin
  714. var fields = [];
  715. //处理修改设计数据中展示设置
  716. angular.forEach(vmForm.tabs, function(field) {
  717. if (field.key == "") {
  718. delete field.key;
  719. }
  720. if (angular.isDefined(field.extjson)) {
  721. var extObj = angular.fromJson(field.extjson); //JSON.parse(field.extjson);
  722. angular.extend(field.templateOptions, extObj.templateOptions);
  723. delete extObj.templateOptions;
  724. for (var prop in extObj) {
  725. if (new RegExp("Expression").test(prop)) {
  726. //var obj = $scope.$eval(extObj[prop]);
  727. //extObj[prop] = $scope.$eval(extObj[prop]);
  728. if (extObj[prop] != null) {
  729. if (new RegExp("function").test(extObj[prop])) {
  730. var propValue = eval(extObj[prop]);
  731. extObj[prop] = propValue;
  732. } else {
  733. //console.log(extObj[prop]);
  734. var obj = $scope.$eval(extObj[prop]);
  735. extObj[prop] = obj;
  736. //console.log(obj);
  737. }
  738. }
  739. } else if (new RegExp("expressionProperties").test(prop)) {
  740. for (var p in extObj[prop]) {
  741. if (new RegExp("function").test(extObj[prop][p])) {
  742. var propValue = eval(extObj[prop][p]);
  743. extObj[prop][p] = propValue;
  744. } else {
  745. //if(p.indexOf("'")>=0){
  746. // var obj = $scope.$eval(extObj[prop][p]);
  747. // extObj[prop][$scope.$eval(p)]=obj;
  748. //}
  749. }
  750. }
  751. } else if ("watcher" == prop) {
  752. if (angular.isArray(extObj[prop])) {
  753. angular.forEach(extObj[prop], function(item, index) {
  754. for (var p in item) {
  755. if (new RegExp("function").test(item[p])) {
  756. var propValue = eval(item[p]);
  757. extObj[prop][index][p] = propValue;
  758. }
  759. }
  760. });
  761. } else if (angular.isObject(extObj[prop])) {
  762. for (var p in extObj[prop]) {
  763. if (new RegExp("function").test(extObj[prop][p])) {
  764. var propValue = eval(extObj[prop][p]);
  765. extObj[prop][p] = propValue;
  766. }
  767. }
  768. }
  769. }
  770. }
  771. angular.extend(field, extObj);
  772. delete field.extjson;
  773. }
  774. if (angular.isDefined(field.templateOptions)) {
  775. var templateOs = field.templateOptions;
  776. for (var property in templateOs) {
  777. //console.log(property);
  778. if (angular.isString(templateOs[property]) && !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))) {
  779. if (new RegExp("function").test(templateOs[property])) {
  780. var propValue = eval(templateOs[property]);
  781. field.templateOptions[property] = propValue;
  782. } else {
  783. if (that.has(templateOs[property])) {
  784. field.templateOptions[property] = that.get(templateOs[property]);
  785. } else {
  786. field.templateOptions[property] = templateOs[property];
  787. }
  788. }
  789. } else if (templateOs[property] == null) {
  790. //delete field.templateOptions[property];
  791. } else {}
  792. }
  793. }
  794. console.log(field);
  795. if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) {
  796. var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson);
  797. angular.extend(field.templateOptions, extObj);
  798. delete field.templateOptions.extjson;
  799. }
  800. //...
  801. if (field.templateOptions) {
  802. //处理远程获取数据控件方法调用
  803. if (field.templateOptions.optionsUrl) {
  804. field.templateOptions.refresh = refreshSelectOptions;
  805. }
  806. //处理嵌套属性数据绑定/
  807. if (field.templateOptions.pkey) {
  808. var pmodel, i = 0;
  809. angular.forEach(field.templateOptions.pkey.split("."), function(p) {
  810. if (i == 0) {
  811. if (result.model[p] == null) {
  812. result.model[p] = {};
  813. }
  814. pmodel = result.model[p];
  815. i++;
  816. } else {
  817. if (pmodel[p] == null) {
  818. pmodel[p] = {};
  819. }
  820. pmodel = pmodel[p];
  821. }
  822. });
  823. if (pmodel != null) {
  824. field.model = pmodel;
  825. if (pmodel[field.key] == null) {
  826. pmodel[field.key] = null;
  827. }
  828. }
  829. } else {
  830. if (result.model[field.key] == null) {
  831. result.model[field.key] = null;
  832. }
  833. }
  834. //处理弹出框组件初始化
  835. if (field.type == "ui-input-selectmodal") {
  836. field.templateOptions.modal = $modal;
  837. //field.templateOptions.Restangular = Restangular;
  838. } else if (field.type == "ui-userselect") {
  839. field.templateOptions.modal = $modal;
  840. //field.templateOptions.Restangular = Restangular;
  841. } else if (field.type == "ui-multiuserselect") {
  842. field.templateOptions.modal = $modal;
  843. } else if (field.type == "ui-modelselect") {
  844. field.templateOptions.modal = $modal;
  845. //field.templateOptions.Restangular = Restangular;
  846. } else if (field.type == "ui-dropfile") {
  847. field.templateOptions.fileUploader = new FileUploader({
  848. url: '/uploader'
  849. });
  850. field.templateOptions.taskId = $stateParams.taskId;
  851. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  852. field.templateOptions.userId = $rootScope.user.id;
  853. //field.ApiService=api_bpm_domain;
  854. } else if (field.type == "ui-dropfiletable") {
  855. if (field.templateOptions.processInstanceId) {
  856. } else {
  857. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  858. }
  859. } else if (field.type == "ui-repeatSection") {
  860. var repeatForm = {
  861. model: {
  862. },
  863. fields: field.templateOptions.fields
  864. };
  865. repeatForm.model[field.key] = [];
  866. decodeVMForm(repeatForm);
  867. }
  868. }
  869. // console.log(field);
  870. result.fields.push(field);
  871. });
  872. angular.extend($scope.vm.fields, result.fields);
  873. angular.extend($scope.vm.model, result.model);
  874. $scope.formData = vmForm;
  875. //console.log($scope.vm);
  876. //解析设计数据生成表单项 end
  877. return result;
  878. }
  879. //======================处理表单设计数据 结束========================
  880. $scope.ldloading = {};
  881. function filter(obj) {
  882. angular.forEach(obj, function(key, value) {
  883. if (value === "" || value === null) {
  884. delete obj[key];
  885. } else if (Object.prototype.toString.call(value) === '[object Object]') {
  886. filter(value);
  887. } else if (angular.isArray(value)) {
  888. angular.forEach(value, function(item) {
  889. filter(item);
  890. });
  891. }
  892. });
  893. }
  894. function invokeOnAllFormOptions(fn) {
  895. angular.forEach(vm.tabs, function(tab) {
  896. if (tab.form.options && tab.form.options[fn]) {
  897. tab.form.options[fn]();
  898. }
  899. });
  900. }
  901. function encodeCIData(data, ciId) {
  902. /*
  903. create/update state:未审核
  904. create createtime:系统时间
  905. create/update lastupdatetime : 系统时间
  906. label:ci分类
  907. */
  908. if (ciId) {
  909. var baseprop = ['uuid', 'name', 'type', 'label', 'status', 'createtime', 'lastupdatetime', 'props']; //state|audittime//createtime//removeflag|removetime//configperson//lastupdateperson//manager//useradmin
  910. var extraprop = 'props';
  911. data[extraprop] = {};
  912. for (var key in data) {
  913. // console.log(data[key]);
  914. if (_.indexOf(baseprop, key) >= 0) {
  915. continue;
  916. } else {
  917. data[extraprop][key] = data[key];
  918. delete data[key];
  919. }
  920. }
  921. if ($rootScope.user) {
  922. data[extraprop]['lastupdateperson'] = $rootScope.user.name;
  923. data[extraprop]['configperson'] = $rootScope.user.name;
  924. var isCMAdminFlag = false;
  925. angular.forEach($rootScope.user.role, function(roleItem) {
  926. if (roleItem.rolecode == "cmdb charge") {
  927. isCMAdminFlag = true;
  928. }
  929. })
  930. if (!isCMAdminFlag) {
  931. data[extraprop]['state'] = '1';
  932. }
  933. }
  934. if (data.props.id) {
  935. } else {
  936. data.label = ciId;
  937. }
  938. return data;
  939. }
  940. return undefined;
  941. }
  942. function decodeCIModel(data) {
  943. var extraprop = 'props';
  944. if (data[extraprop]) {
  945. for (var key in data[extraprop]) {
  946. data[key] = data[extraprop][key];
  947. }
  948. delete data[extraprop];
  949. }
  950. data['iscmadmin'] = false;
  951. angular.forEach($rootScope.user.role, function(roleItem) {
  952. if (roleItem.rolecode == "cmdb charge") {
  953. data['iscmadmin'] = true;
  954. }
  955. })
  956. return data;
  957. };
  958. vm.remove = function(data, style) {
  959. $scope.ldloading[style.replace('-', '_')] = true;
  960. // var cidata = {
  961. // label: data.label,
  962. // id: data.id,
  963. // uuid: data.uuid,
  964. // name: data.name,
  965. // props: {}
  966. // };
  967. // if (cidata.id) {
  968. // cidata.props['removeflag'] = true;
  969. // cidata.props['lastupdateperson'] = vm.model.loginUser;
  970. //cidata.props['removetime']=new Date();
  971. var modalInstance = $modal.open({
  972. templateUrl: 'assets/views/delete.html',
  973. controller: function($scope, scope, $modalInstance, api_bpm_data) {
  974. var cidata = {
  975. label: data.label,
  976. id: data.id,
  977. uuid: data.uuid,
  978. name: data.name,
  979. props: {}
  980. };
  981. if (cidata.id) {
  982. cidata.props['removeflag'] = true;
  983. cidata.props['lastupdateperson'] = vm.model.loginUser;
  984. $scope.ok = function() {
  985. $modalInstance.close(cidata);
  986. };
  987. $scope.cancel = function() {
  988. $modalInstance.dismiss('cancel');
  989. };
  990. }
  991. },
  992. size: 'sm',
  993. resolve: {
  994. scope: function() {
  995. return $scope;
  996. }
  997. }
  998. });
  999. modalInstance.result.then(function(selectedItem) {
  1000. if (selectedItem) {
  1001. // if (selectedItem.length > 0) {
  1002. api_cmdb.put(selectedItem, selectedItem.id).then(function(response) {
  1003. if (response) {
  1004. var resData = Restangular.stripRestangular(response);
  1005. SweetAlert.swal({
  1006. title: "删除成功!",
  1007. confirmButtonColor: "#007AFF"
  1008. }, function() {
  1009. $state.go("app.means.listd");
  1010. // $state.go("app.means.list");
  1011. // $scope.refreshform();
  1012. // reinitTabForm($scope.classify);
  1013. });
  1014. } else {
  1015. SweetAlert.swal({
  1016. title: "系统错误",
  1017. text: "系统错误,请稍后重试!",
  1018. type: "error",
  1019. confirmButtonColor: "#DD6B55"
  1020. });
  1021. }
  1022. $scope.ldloading[style.replace('-', '_')] = false;
  1023. });
  1024. // } else {
  1025. // SweetAlert.swal({
  1026. // title: "操作异常!",
  1027. // text: "系统异常,请稍后重试,或者联系管理员!",
  1028. // type: "error"
  1029. // });
  1030. // }
  1031. }
  1032. })
  1033. }
  1034. // })
  1035. // api_cmdb.put(cidata,data.id).then(function(response){
  1036. // if(response){
  1037. // var resData = Restangular.stripRestangular(response);
  1038. // SweetAlert.swal({
  1039. // title: "删除成功!",
  1040. // confirmButtonColor: "#007AFF"
  1041. // },function(){
  1042. // $state.go("app.means.list");
  1043. // // $scope.refreshform();
  1044. // // reinitTabForm($scope.classify);
  1045. // });
  1046. // }else{
  1047. // SweetAlert.swal({
  1048. // title: "系统错误",
  1049. // text: "系统错误,请稍后重试!",
  1050. // type: "error",
  1051. // confirmButtonColor: "#DD6B55"
  1052. // });
  1053. // }
  1054. // $scope.ldloading[style.replace('-', '_')] = false;
  1055. // });
  1056. // } else {
  1057. // $timeout(function() {
  1058. // $scope.ldloading[style.replace('-', '_')] = false;
  1059. // }, 2000);
  1060. // }
  1061. // }
  1062. function formValid() {
  1063. angular.forEach(vm.tabs, function(item) {
  1064. //item.
  1065. })
  1066. }
  1067. // 显示对应索引
  1068. $scope.xianshi = 0;
  1069. $scope.toindex = function(res) {
  1070. $scope.xianshi = res;
  1071. }
  1072. $scope.closeModel = function() {
  1073. if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") {
  1074. if ($stateParams.formKey == "means_editor" || $stateParams.formKey == "means_edit") {
  1075. $state.go('app.means.listd', {});
  1076. // $state.go('app.means.list', {});
  1077. }
  1078. event.preventDefault();
  1079. }
  1080. }
  1081. vm.submit = function(data, ciId, templateitem, style) {
  1082. // $scope.ldloading[style.replace('-', '_')] = true;
  1083. // console.log(vm.form.$$parentForm.$valid);
  1084. if (vm.form.$$parentForm.$valid) {
  1085. invokeOnAllFormOptions('updateInitialValue');
  1086. //alert(JSON.stringify(vm.model), null, 2);
  1087. //vm.options.updateInitialValue();
  1088. //console.log(vm.model);
  1089. var cidata = encodeCIData(vm.model, ciId);
  1090. if (cidata) {
  1091. //var cidata = ;
  1092. if (cidata.props.id) {
  1093. //修改
  1094. api_cmdb.put(cidata, ciId).then(function(response) {
  1095. if (response) {
  1096. var resData = Restangular.stripRestangular(response);
  1097. SweetAlert.swal({
  1098. title: "保存成功!",
  1099. confirmButtonColor: "#007AFF",
  1100. type: "success"
  1101. }, function() {
  1102. $scope.ldloading[style.replace('-', '_')] = false;
  1103. // $scope.refreshform();
  1104. $state.go("app.means.listd");
  1105. // $state.go("app.means.list");
  1106. });
  1107. } else {
  1108. SweetAlert.swal({
  1109. title: "系统错误",
  1110. text: "系统错误,请稍后重试!",
  1111. type: "error",
  1112. confirmButtonColor: "#DD6B55"
  1113. });
  1114. }
  1115. $scope.ldloading[style.replace('-', '_')] = false;
  1116. });
  1117. } else {
  1118. //新建
  1119. var type = 2;
  1120. api_sysinfo.getSerialnumber(type, templateitem.id).then(function(data) {
  1121. if (data && data.status == 200) {
  1122. cidata.uuid = data.uuid;
  1123. api_cmdb.create(cidata).then(function(response) {
  1124. if (response) {
  1125. var resData = Restangular.stripRestangular(response);
  1126. SweetAlert.swal({
  1127. title: "保存成功!",
  1128. text: "内部编号:" + cidata.uuid,
  1129. confirmButtonColor: "#007AFF",
  1130. type: "success"
  1131. }, function() {
  1132. $state.go("app.means.listd");
  1133. // $state.go("app.means.list");
  1134. });
  1135. // if(resData.status){
  1136. // resData
  1137. // }
  1138. } else {
  1139. SweetAlert.swal({
  1140. title: "系统错误",
  1141. text: "系统错误,请稍后重试!",
  1142. type: "error",
  1143. confirmButtonColor: "#DD6B55"
  1144. });
  1145. }
  1146. $scope.ldloading[style.replace('-', '_')] = false;
  1147. });
  1148. } else {
  1149. SweetAlert.swal({
  1150. title: "系统错误",
  1151. text: "内部编号生成出错!",
  1152. type: "error",
  1153. confirmButtonColor: "#DD6B55"
  1154. });
  1155. }
  1156. })
  1157. }
  1158. } else {
  1159. SweetAlert.swal({
  1160. title: "错误",
  1161. text: "错误,请选择资产分类!",
  1162. type: "error",
  1163. confirmButtonColor: "#DD6B55"
  1164. });
  1165. }
  1166. //alert(JSON.stringify(cidata), null, 2);
  1167. $scope.ldloading[style.replace('-', '_')] = true;
  1168. return;
  1169. var _ = window._;
  1170. vm.model = (function filter(obj) {
  1171. var filtered = _.pick(obj, function(v) { return angular.isDefined(v) && v !== null && (angular.isArray(v) ? v.length > 0 : true) && (_.isPlainObject(v) ? (!_.isEmpty(v)) : true); });
  1172. return _.cloneDeep(filtered, function(v) { return v !== filtered && _.isPlainObject(v) ? filter(v) : undefined; });
  1173. })(vm.model);
  1174. } else {
  1175. if (vm.form.$$parentForm.$error) {
  1176. SweetAlert.swal({
  1177. title: "校验错误",
  1178. text: "请填写必填项!",
  1179. type: "error",
  1180. confirmButtonColor: "#DD6B55"
  1181. });
  1182. angular.forEach(vm.form.$$parentForm.$error.required, function(item) {
  1183. angular.forEach(vm.tabs, function(tab) {
  1184. angular.forEach(tab.form.fields, function(f) {
  1185. if (f.name == item.$name) {
  1186. f.validation.show = true;
  1187. tab.active = true;
  1188. }
  1189. })
  1190. })
  1191. });
  1192. $scope.ldloading[style.replace('-', '_')] = false;
  1193. }
  1194. }
  1195. };
  1196. $scope.vm = vm;
  1197. //树形图
  1198. var apple_selected, tree, treedata_avm, treedata_geography;
  1199. $scope.my_tree_handler = function(branch) {
  1200. //var _ref;
  1201. // var classify=$scope.classify=branch.prefix.toLowerCase()+branch.sign;
  1202. // api_cmdb.query({'sign':classify}).then(function(data){
  1203. // var myData = Restangular.stripRestangular(data);
  1204. // // console.log(myData.data.node);
  1205. // if(myData.data&&myData.status==200){
  1206. // var ret = myData.data;
  1207. // redrawSvg(myData);
  1208. // }
  1209. // });
  1210. // $scope.ciId = undefined;
  1211. // var classify=$scope.classify=branch.prefix.toLowerCase()+branch.sign;
  1212. // api_configure_form.renderTabForm(classify).then(function(data){
  1213. // var myData = Restangular.stripRestangular(data);
  1214. // //angular.extend($scope.vm.fields,result.fields);
  1215. // //angular.extend($scope.vm.model,result.model);
  1216. // $scope.templateProps = myData;
  1217. // $scope.vm.tabs = myData;
  1218. // vm.model = {};
  1219. // decodeVMTabForm(vm.model, vm.tabs);
  1220. // //$scope.vm.originalTabs = angular.copy($scope.vm.form);
  1221. // //console.log(myData);
  1222. // });
  1223. };
  1224. $scope.my_data = [];
  1225. function convertListToTree(data, treeMap) {
  1226. var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup
  1227. var root = null; //Initially set our loop to null
  1228. var parentNode = null;
  1229. //loop over data
  1230. for (var i = 0; i < data.length; i++) {
  1231. var datum = data[i];
  1232. //each node will have children, so let's give it a "children" poperty
  1233. datum.children = [];
  1234. //add an entry for this node to the map so that any future children can
  1235. //lookup the parent
  1236. idToNodeMap[datum.id] = datum;
  1237. //Does this node have a parent?
  1238. if (typeof datum.parent === "undefined" || datum.parent == null) {
  1239. //Doesn't look like it, so this node is the root of the tree
  1240. root = datum;
  1241. treeMap[datum.id] = root;
  1242. } else {
  1243. //This node has a parent, so let's look it up using the id
  1244. parentNode = idToNodeMap[datum.parent.id];
  1245. //We don't need this property, so let's delete it.
  1246. delete datum.parent;
  1247. //Let's add the current node as a child of the parent node.
  1248. parentNode.children.push(datum);
  1249. }
  1250. }
  1251. return root;
  1252. }
  1253. function convertParentToChildList(data) {
  1254. var treeMap = {};
  1255. var list = [];
  1256. convertListToTree(data, treeMap);
  1257. angular.forEach(treeMap, function(item) {
  1258. list.push(item);
  1259. });
  1260. return list;
  1261. }
  1262. $scope.my_tree = tree = {};
  1263. $scope.try_async_load = function() {
  1264. $scope.my_data = [];
  1265. $scope.select_treedata = [];
  1266. $scope.doing_async = true;
  1267. api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(result) {
  1268. //console.log(result['list']);
  1269. $scope.select_treedata = $scope.my_data = convertParentToChildList(result['list']);
  1270. $scope.doing_async = false;
  1271. // tree.expand_all();
  1272. //console.log(treelist);
  1273. });
  1274. };
  1275. $scope.select_treedata = [];
  1276. $scope.propTypeOptions = [];
  1277. $scope.try_async_load();
  1278. $scope.onFilterCallback = function(item) {
  1279. //console.log(item);
  1280. if (angular.isDefined(item.children) && item.children.length >= 1) {
  1281. //not valid
  1282. } else {
  1283. var tempclassify = item.prefix.toLowerCase() + item.sign;
  1284. $scope.cifilter_classic = tempclassify;
  1285. $scope.templateitem = item;
  1286. api_configure_form.renderTabForm(tempclassify).then(function(data) {
  1287. var myData = Restangular.stripRestangular(data);
  1288. $scope.propTypeOptions = myData;
  1289. $scope.templateProps = myData;
  1290. $scope.vm.tabs = myData;
  1291. vm.model = {};
  1292. decodeVMTabForm(vm.model, vm.tabs);
  1293. });
  1294. }
  1295. }
  1296. $scope.jry_shuxing = JSON.parse($stateParams.model);
  1297. // console.log($scope.jry_shuxing);
  1298. $scope.refreshform = function() {
  1299. if ($stateParams.model) {
  1300. var modeldata = JSON.parse($stateParams.model)
  1301. api_configure_form.renderTabForm(modeldata.model.label).then(function(data) {
  1302. var myData = Restangular.stripRestangular(data);
  1303. $scope.templateProps = myData;
  1304. $scope.vm.tabs = myData;
  1305. vm.model = {};
  1306. vm.model = $scope.vm.model = decodeCIModel(modeldata.model);
  1307. vm.model["loginUser"] = $rootScope.user.name;
  1308. // console.log(vm.model);
  1309. decodeVMTabForm(vm.model, vm.tabs);
  1310. // console.log(myData);
  1311. });
  1312. }
  1313. }
  1314. $scope.refreshform();
  1315. }
  1316. ]);