'use strict'; var cmdbFormly = angular.module('formlyCMDB', [ 'formly', 'formlyBootstrap', 'ui.bootstrap', 'ngSanitize', 'ui.select', 'ui.grid' ]); app.requires.push('formlyCMDB'); 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', 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) { // $scope.haha=true; $scope.langs = i18nService.getAllLangs(); $scope.lang = 'zh-cn'; i18nService.setCurrentLang($scope.lang); $scope.width = { 'width': document.getElementById("mapwidth").offsetWidth - 201 }; $scope.widthonly = document.getElementById("mapwidth").offsetWidth - 201; window.onresize = function() { if (document.getElementById("mapwidth")) { $scope.width = { 'width': document.getElementById("mapwidth").offsetWidth - 201 }; $scope.widthonly = document.getElementById("mapwidth").offsetWidth - 201; } } $scope.widthonly = function() { if (document.getElementById("mapwidth")) { return document.getElementById("mapwidth").offsetWidth - 201; } } var vm = this; vm.options = {}; vm.exampleTitle = ['expressionProperties', 'model property']; vm.fields = []; vm.model = {}; vm.model["loginUser"] = $rootScope.user; var that = $injector; var parse = $parse; var formKey = ""; var pdKey = ""; if (angular.isDefined($state.current.pdKey) && $state.current.pdKey != "") { pdKey = $state.current.pdKey; //console.log("pdKey::"+$state.current.pdKey); } if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") { formKey = $stateParams.formKey; // console.log(formKey); //console.log("formKey::"+$stateParams.formKey); } //查看资产性能-调用外部链接 $scope.lookoutsystem = function(row) { event.preventDefault(); var rowdata = JSON.parse($stateParams.model).model; var outip = "http://192.168.2.138:81"; var url1 = outip + "/omai_base//monitor/hostMonitor?pk_id=17decd342e084c7d992bba8c79f9e3cb_ffdce21f6ad34d6cba22d1dfc6a4e66e"; if (rowdata.props.hw_mingcheng == "db2测试服务器") { url1 = outip + "/omai_base//monitor/hostMonitor?pk_id=17decd342e084c7d992bba8c79f9e3cb_9a4ca17df8d24b66a7f4c22a3e095d9f"; } else if (rowdata.props.hw_mingcheng == "itmdb") { url1 = outip + "/omai_base//monitor/hostMonitor?pk_id=17decd342e084c7d992bba8c79f9e3cb_9c4e6f55ca1e4c32954e84d4d7405174"; } else if (rowdata.props.hw_mingcheng == "poc测试linux服务器") { url1 = outip + "/omai_base//monitor/hostMonitor?pk_id=17decd342e084c7d992bba8c79f9e3cb_ffdce21f6ad34d6cba22d1dfc6a4e66e"; } else if (rowdata.props.hw_mingcheng == "华为S5700交换机") { url1 = outip + "/omai_base//monitorNetwork/openNetworkInfo?&pk_id=17decd342e084c7d992bba8c79f9e3cb_1d746b216a264232b27b5dbd119549dd"; } else if (rowdata.props.hw_mingcheng == "CISCO_N7K") { url1 = outip + "/omai_base//monitorNetwork/openNetworkInfo?&pk_id=17decd342e084c7d992bba8c79f9e3cb_28b8590555a54bfd8015f8b80634417c"; } else if (rowdata.props.hw_mingcheng == "S4503") { url1 = outip + "/omai_base//monitorNetwork/openNetworkInfo?&pk_id=17decd342e084c7d992bba8c79f9e3cb_a06bb8895ef74b3e83bad2fba4d0ea47"; } else if (rowdata.props.hw_mingcheng == "B24-2_光纤交换机") { url1 = outip + "/omai_base//monitorNetwork/openNetworkInfo?&pk_id=17decd342e084c7d992bba8c79f9e3cb_b75106d2572b4abfb95c1b80514ad3c7"; } else if (rowdata.props.hw_mingcheng == "华为CE6800交换机") { url1 = outip + "/omai_base//monitorNetwork/openNetworkInfo?&pk_id=17decd342e084c7d992bba8c79f9e3cb_c732ca1be38c45c194542b25f0c9a241"; } else if (rowdata.props.hw_mingcheng == "B24-1_光纤交换机") { url1 = outip + "/omai_base//monitorNetwork/openNetworkInfo?&pk_id=17decd342e084c7d992bba8c79f9e3cb_eb7377b4531f46aebab25845f1510aa0"; } else if (rowdata.props.hw_mingcheng == "itmdb_MQ") { url1 = outip + "/omai_base//mqMiddLeware/openMqMiddLeware?pk_id=1&host_id=10140"; } else if (rowdata.props.hw_mingcheng == "db2数据库") { url1 = outip + "/omai_base//monitor/dbMonitorInfo4HBNX?pk_id=17decd342e084c7d992bba8c79f9e3cb_161beb80dd024af98bad08b8f9596347&res_name=db2%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1%E5%99%A8&res_type=db2"; } else if (rowdata.props.hw_mingcheng == "netapp存储") { url1 = outip + "/omai_base//monitor/openStorageInfo?&pk_id=17decd342e084c7d992bba8c79f9e3cb_ccf1cf4b95a646d2b8775e8edf08cef6"; } else if (rowdata.props.hw_mingcheng == "poc贷记卡_was") { url1 = outip + "/omai_base//monitor/openWasMiddLeware?pk_id=17decd342e084c7d992bba8c79f9e3cb_58bfb7680ef24aeb88c0452766eef472&host_id=10159&host_ip=192.168.2.174"; } var url = outip + "/omai_base/login/login?username=admin&password=WZ7Qju8oLs%2BeNfz9n7l4og%3D%3D"; var mywin = window.open(url, '_blank'); //将新打的窗口对象,存储在变量mywin中 mywin.close(); window.open(url1, '_blank'); } //查看关系图 $scope.lookmap = function(row) { event.preventDefault(); var data = $stateParams.model; // localStorage.ciclassify = JSON.stringify($scope.my_tree); localStorage.cmdbmap = $stateParams.model; var url = $state.href('cmdbmap', { basicType: 8 }); window.open(url, '_blank'); } //关系图点击事件 $scope.openmap = function() { event.preventDefault(); var modalInstance = $modal.open({ templateUrl: 'assets/views/means/tpl/mapmodal.html', controller: function($scope, $modalInstance) { //关系图 $timeout(function() { $scope.myEditorClick(); }, 300); $scope.myEditorClick = function() { var dom = document.getElementById("meansmap"); var myChart = echarts.init(dom); var app = {}; var option = null; $scope.guanlianable = false; $scope.cmdbtype = {}; myChart.showLoading(); function get_nodes(data) { var nodes = []; var tmp_nodes = []; if (data.children) { for (var nodes_i in data.children) { if (nodes_i.link && nodes_i.link == "link") { nodes.push("#12322") } } } for (var nodes_i in data) { if (nodes_i.link && nodes_i.link == "link") { nodes.push("#12322") } } return nodes; } var startdata = JSON.parse($stateParams.model).model; var data1 = { "id": startdata.id, "name": startdata.props.hw_mingcheng, "uuid": startdata.uuid, "hw_guanliyuan": startdata.props.hw_guanliyuan, "hw_state": startdata.props.hw_state // "name": "data", // "children": [{ // "name": "data", // "children": [{ // "name": "converters", // "children": [ // { "name": "Converters", "value": 721 }, // { "name": "DelimitedTextConverter", "value": 4294 } // ] // }, // { // "name": "DataUtil", // "value": 3322 // } // ] // }, // { // "name": "display", // "children": [ // { "name": "DirtySprite", "value": 8833 }, // { "name": "LineSprite", "value": 1732 }, // { "name": "RectSprite", "value": 3623 } // ] // }, // { // "name": "flex", // "children": [ // { "name": "FlareVis", "value": 4116 } // ] // }, // { // "name": "scale", // "children": [ // { "name": "IScaleMap", "value": 2105 }, // { "name": "LinearScale", "value": 1316 }, // { "name": "LogScale", "value": 3151 }, // { "name": "OrdinalScale", "value": 3770 }, // ] // } // ] }; myChart.hideLoading(); myChart.setOption(option = { tooltip: { trigger: 'item', triggerOn: 'mousemove', "formatter": function(param) { return param.data.name; }, }, legend: { type: 'scroll', scrollDataIndex: 2, top: '2%', left: '3%', // orient: 'vertical', data: [{ name: 'tree1', icon: 'circle' }], borderColor: '#1b51b2' }, series: [{ type: 'tree', data: [data1], top: '5%', left: '10%', bottom: '2%', right: '10%', symbolSize: 7, itemStyle: { normal: { label: { show: true, formatter: "{b}", textStyle: { color: '#fff', fontSize: 12 } }, color: '#fff', borderColor: '#fff', color: '#1b51b2', } }, emphasis: { label: { show: true, } }, lineStyle: { color: "#ccc", label: { show: true, formatter: "{b}", textStyle: { color: '#fff', fontSize: 12 } }, }, symbolSize: [80, 25.0], symbol: 'rect', symbolKeepAspect: true, // roam: true, // expandAndCollapse: true, animationDuration: 550, animationDurationUpdate: 750 }] }, true); if (option && typeof option === "object") { myChart.setOption(option, true); } function getchild(itemone, result, param) { angular.forEach(itemone, function(itemtwo, i) { if (itemtwo.id == param.id) { itemtwo.children = []; if (result && result.length > 0) { angular.forEach(result, function(ite) { itemone[i].children.push({ "id": ite.id, "name": ite.props.hw_mingcheng, "uuid": ite.uuid, "hw_guanliyuan": ite.hw_guanliyuan, "hw_state": ite.hw_state, "link": 'link' }); }) } } else { if (itemtwo.children) { getchild(itemone[i].children, result, param) } } }) // return itemone; } function getinternetAlarm(getmodel) { // console.log($scope); api_cmdb.findRefById(getmodel.id).then(function(result) { getchild(option.series[0].data, result.data.node, getmodel); console.log(option) myChart.setOption(option, true); myChart.hideLoading(); }) } getinternetAlarm(startdata); myChart.on("click", clickFun); function clickFun(param) { if (typeof param.seriesIndex == 'undefined') { return; } if (param.type == 'click') { $scope.guanlianable = true; $scope.cmdbtype = param; $scope.$apply(); if (!param.data.children || param.data.children.length == 0) { getinternetAlarm(param.data); } else { } } } // $scope.changemeans = function() { // var modalInstance = $modal.open({ // templateUrl: 'assets/views/means/tpl/meansmap.html', // controller: function($scope, scope, $modalInstance) { $scope.key = {}; $scope.guanxi = { "cmdbname": {}, "name": '' }; // $scope.linktypeOptions = scope.linktypeOptions; $scope.guanxidata = [ { id: 0, name: '连接', value: 'link' }, { id: 1, name: '安装部署', value: 'installon' }, { id: 2, name: '归属', value: 'blong' }, { id: 3, name: '使用', value: 'use' }, { id: 4, name: '互备', value: 'backupbetw' }, { id: 5, name: '主备', value: 'backupown' } ]; $scope.ok = function(key, cmdbtype) { var fildata = { "id": -1, "name": key.name.value, "source": key.cmdbname.id, "target": cmdbtype.data.id, "left": true, "right": false, "props": {} } api_cmdb.createRef(fildata).then(function(response) { if (response && response.status == 200) { var n = new Notification("新增成功", { body: "新增关联成功", icon: '../bower_components/HTML5-Desktop-Notifications/alert.ico', onclick: function onNotificationClicked() { // console.log('Notification clicked.'); } }); } else { var n = new Notification("新增失败", { body: "新增关联失败", icon: '../bower_components/HTML5-Desktop-Notifications/alert.ico', onclick: function onNotificationClicked() { // console.log('Notification clicked.'); } }); } }); }; $scope.openModal = function(size, options, modal) { var modalInstance = $modal.open({ templateUrl: 'assets/views/customform/tpl/cmdb/add_shebei.html', controller: function($scope, i18nService, $modalInstance, api_configure_data, api_configure_form, api_cmdb) { $scope.langs = i18nService.getAllLangs(); $scope.lang = 'zh-cn'; i18nService.setCurrentLang($scope.lang); $scope.gridOptions = {}; $scope.gridOptions.data = 'myDatatwo'; $scope.gridOptions.enableColumnResizing = true; $scope.gridOptions.enableFiltering = false; $scope.gridOptions.enableGridMenu = false; $scope.gridOptions.showGridFooter = true; $scope.gridOptions.showColumnFooter = false; $scope.gridOptions.fastWatch = true; $scope.gridOptions.useExternalFiltering = true; $scope.gridOptions.useExternalPagination = true; $scope.gridOptions.paginationPageSizes = [10, 20, 50, 100]; $scope.gridOptions.paginationPageSize = 10; $scope.gridOptions.multiSelect = false; $scope.gridOptions.rowIdentity = function(row) { return row.id; }; $scope.gridOptions.getRowIdentity = function(row) { return row.id; }; // $scope.gridOptions.rowTemplate = "
"; $scope.gridOptions.columnDefs = [ { name: 'item', displayName: '序号', width: 80, enableFiltering: false }, { name: 'uuid', displayName: '内部编号', width: 120 }, { name: 'props.hw_mingcheng', displayName: '资产名称', width: 100 }, { name: 'props.hw_cifilterClassic', displayName: '资产类型', width: 80, enableFiltering: false }, // { name: 'type', displayName: '资产型号', width: 100, enableFiltering: false }, { name: 'props.hw_state', displayName: '资产状态', width: 150, enableFiltering: false }, { name: 'props.hwnw_area', displayName: '资产地点', width: 130, enableFiltering: false }, { name: 'createtime', displayName: '申请时间', enableFiltering: false } ]; // $scope.selectButtonClick var defaultFilterData = { // "assignee":2, // "sign":"basehwitndl", // "applicationForm": { "hw_state": "在线" }, "idx": 0, "sum": 10 }; $scope.memoryfilterData = { // "assignee":2, // "sign":"basehwitndl", // "applicationForm": { "hw_state": "在线" }, "idx": 0, "sum": 10 } $scope.refreshData = function(style, filterData) { if (angular.isUndefined(filterData)) { filterData = defaultFilterData; } $scope.myDatatwo = []; // $scope.gridOptions['sum']=filterData.sum; api_cmdb.query(filterData).then(function(data) { // $scope.callsPending--; var filterData = $scope.memoryfilterData; var myDatatwo = Restangular.stripRestangular(data); $scope.gridOptions['totalItems'] = data.total; for (var i = 0; i < myDatatwo.data.node.length; i++) { myDatatwo.data.node[i].createtime = moment(myDatatwo.data.node[i].createtime).format('YYYY-MM-DD'); } $scope.myDatatwo = myDatatwo.data.node; for (var i = 0; i < $scope.myDatatwo.length; i++) { $scope.myDatatwo[i]['item'] = i + 1 + filterData.idx * filterData.sum } }, function() {}); }; $scope.refreshData('expand-right', defaultFilterData); $scope.gridOptions.onRegisterApi = function(gridApi) { $scope.gridApi = gridApi; gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) { var filtersData = $scope.memoryfilterData; filtersData.idx = newPage - 1; filtersData.sum = pageSize; // $scope.loadData(filtersData); $scope.refreshData('expand-right', filtersData); //console.log(pageSize); // $scope.loadData({"idx":newPage-1,"sum":pageSize}); }); // gridApi.selection.on.rowSelectionChanged($scope, function(data) { // $scope.selected.items.push(data.entity); //console.log(data); gridApi.selection.on.rowSelectionChanged($scope, function(scope, ect) { if (scope.isSelected) { scope.grid.appScope.selected.items.push(scope.entity) } else { for (var i = 0; i <= scope.grid.appScope.selected.items.length; i++) { if (scope.grid.appScope.selected.items[i].id == scope.entity.id) { scope.grid.appScope.selected.items.splice(i, 1); break; } } } $scope.mySelectedRows = $scope.gridApi.selection.getSelectedRows(); }); // }); gridApi.selection.on.rowSelectionChangedBatch($scope, function(rows) { // $scope.selected.items = data.entity; //console.log(data); var selectitem = []; selectitem = angular.copy($scope.selected.items); for (var j = 0; j < rows.length; j++) { if (rows[j].isSelected == true) { selectitem.push(rows[j].entity); } else { delete selectitem[j]; // rows.splice(j, 1); } } $scope.selected.items = []; for (var i = 0; i < selectitem.length; i++) { if (selectitem[i]) { $scope.selected.items.push(selectitem[i]); } } }); // gridApi.selection.on.selectAllRows = function(row) { //GridRow // // if (row.entity.age > 45) { // row.grid.api.selection.selectRow(row.entity); // 选中行 // // } // }; gridApi.core.on.filterChanged($scope, function() { var grid = this.grid; var filtersData = { idx: 0, sum: 10, "user": { "roledata": { "rolecode": "roleset" }, "selectType": "1" } }; angular.forEach(grid.columns, function(item) { if (item.enableFiltering) { // console.log("item.filters[0]=" + JSON.stringify(item.filters)); if (angular.isDefined(item.filters[0].term) && item.filters[0].term != '') { if (angular.isUndefined(filtersData['user'])) { filtersData['user'] = {}; } filtersData['user'][item.field] = item.filters[0].term; } } }); $scope.memoryfilterData = filtersData; // $scope.loadData(filtersData); }); }; $scope.onDblClick = function(data, event) { // $scope.selected.items = data.entity; $scope.selectButtonClick(data, event); }; // $scope.loadData = function(filterData) { // // console.log("filtersData=111" + JSON.stringify(filterData)) // items.fetchItems(filterData, APIService).then(function(data) { // var myDatatwo = Restangular.stripRestangular(data); // $scope.gridOptions.totalItems = myDatatwo.totalNum; // $scope.myDatatwo = myDatatwo.list; // }); // }; //树形图 var apple_selected, tree, treedata_avm, treedata_geography; $scope.my_tree_handler = function(branch) { //var _ref; var classify = $scope.classify = branch.prefix.toLowerCase() + branch.sign; api_cmdb.query({ 'sign': classify }).then(function(data) { var myDatalingbei = Restangular.stripRestangular(data); // console.log(myData.data.node); if (myDatalingbei.data && myDatalingbei.status == 200) { var ret = myDatalingbei.data; redrawSvg(myDatalingbei); } }); }; $scope.my_data = []; function convertListToTree(data, treeMap) { var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup var root = null; //Initially set our loop to null var parentNode = null; //loop over data for (var i = 0; i < data.length; i++) { var datum = data[i]; //each node will have children, so let's give it a "children" poperty datum.children = []; //add an entry for this node to the map so that any future children can //lookup the parent idToNodeMap[datum.id] = datum; //Does this node have a parent? if (typeof datum.parent === "undefined" || datum.parent == null) { //Doesn't look like it, so this node is the root of the tree root = datum; treeMap[datum.id] = root; } else { //This node has a parent, so let's look it up using the id parentNode = idToNodeMap[datum.parent.id]; //We don't need this property, so let's delete it. delete datum.parent; //Let's add the current node as a child of the parent node. parentNode.children.push(datum); } } return root; } function convertParentToChildList(data) { var treeMap = {}; var list = []; convertListToTree(data, treeMap); angular.forEach(treeMap, function(item) { list.push(item); }); return list; } $scope.my_tree = tree = {}; $scope.try_async_load = function() { $scope.my_data = []; $scope.select_treedata = []; $scope.doing_async = true; api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(result) { //console.log(result['list']); $scope.select_treedata = $scope.my_data = convertParentToChildList(result['list']); $scope.doing_async = false; // tree.expand_all(); //console.log(treelist); }); }; $scope.select_treedata = []; $scope.propTypeOptions = []; $scope.try_async_load(); $scope.onFilterremove = function(item) { console.log(item) } $scope.searchdata = {}; $scope.clear = function() { $scope.searchdata = {}; $scope.cifilter_classic = {}; $scope.try_async_load(); var fildata = { idx: 0, sum: 10, } $scope.memoryfilterData = fildata; $scope.refreshData('expand-right', fildata); } $scope.cifilter_classic = {}; $scope.chiceIncident = function(item) { var fildata = defaultFilterData; // fildata.applicationForm = {}; // sign: basehwnwswt if (item && item.id) { var classify = item.prefix.toLowerCase() + item.sign; fildata.sign = classify } $scope.gridOptions.paginationCurrentPage = 1; var transitiondata = angular.copy(item); $scope.refreshData('expand-right', fildata); } $scope.applicadata = []; $scope.onFilterCallback = function(item) { var tempclassify = item.prefix.toLowerCase() + item.sign; api_configure_form.renderTabForm(tempclassify).then(function(data) { var myData = Restangular.stripRestangular(data); $scope.applicadata = myData[0].form.fields; }); // } } // $scope.loadData({ // idx: 0, // sum: 10, // "user": { "roledata": { "rolecode": "roleset" }, "selectType": "1" } // }); $scope.selected = { items: [] }; $scope.ok = function() { // if(onDataCallback&&angular.isFunction(onDataCallback)){ // onDataCallback($scope.selected.item, parentScope); // } $modalInstance.close($scope.selected.items); }; $scope.cancel = function() { $modalInstance.dismiss('cancel'); }; }, size: 'lg' }); modalInstance.result.then(function(selectedItem) { $scope.guanxi.cmdbname = selectedItem[0]; }, function() {}); } // $scope.cancel = function() { // $modalInstance.dismiss('cancel'); // }; // }, // size: 'sm', // resolve: { // scope: function() { // return $scope; // } // } // }); // modalInstance.result.then(function(selectedItem) { // if (selectedItem) { // var fildata = { "id": -1, "name": selectedItem.name.value, "source": selectedItem.cmdbname.id, "target": $scope.cmdbtype.data.id, "left": true, "right": false, "props": {} } // api_cmdb.createRef(fildata).then(function(response) { // if (response && response.status == 200) { // } else { // } // }); // } else { // // SweetAlert.swal({ // // title: "未选择资产关系!", // // text: "请选择资产关系", // // type: "error" // // }) // } // }); // } //关系图end } $scope.cancel = function() { $modalInstance.dismiss('cancel'); }; }, size: 'lg' }); } //用户测试数据,后续从header的auth中获取 var userId = 2; userId = $rootScope.user.id; //==============处理表单设计数据 开始==================== //处理组件加载后台数据选项的方法 function refreshSelectOptions(searchVal, field) { if (field.templateOptions.optionsUrl) { var process = BpmRestangular.all(""); if (field.templateOptions.ApiService) { process = UserRestangular.all(""); } process.customPOST({ "idx": 0, "sum": 1000 }, field.templateOptions.optionsUrl).then(function(result) { if (!field.templateOptions.options) { field.templateOptions.options = []; } if (field.templateOptions.optionsDataKey) { field.templateOptions.options = result[field.templateOptions.optionsDataKey]; } else { field.templateOptions.options = result; } }); } } function decodeVMTabForm(model, tabs) { var result = { model: {}, tabs: [] }; var mdata = angular.fromJson(model); angular.extend(result.model, mdata); angular.forEach(tabs, function(tab) { tab.form.model = vm.model; angular.forEach(tab.form.fields, function(field) { if (field.key == "") { delete field.key; } if (angular.isDefined(field.extjson) && field.extjson != "") { var extObj = angular.fromJson(field.extjson); angular.extend(field.templateOptions, extObj.templateOptions); delete extObj.templateOptions; for (var prop in extObj) { if (new RegExp("Expression").test(prop)) { //var obj = $scope.$eval(extObj[prop]); //extObj[prop] = $scope.$eval(extObj[prop]); if (extObj[prop] != null) { if (new RegExp("function").test(extObj[prop])) { var propValue = eval(extObj[prop]); extObj[prop] = propValue; } else { //console.log(extObj[prop]); var obj = $scope.$eval(extObj[prop]); extObj[prop] = obj; //console.log(obj); } } } else if (new RegExp("expressionProperties").test(prop)) { for (var p in extObj[prop]) { if (new RegExp("function").test(extObj[prop][p])) { var propValue = eval(extObj[prop][p]); extObj[prop][p] = propValue; } else { //if(p.indexOf("'")>=0){ // var obj = $scope.$eval(extObj[prop][p]); // extObj[prop][$scope.$eval(p)]=obj; //} } } } else if ("watcher" == prop) { if (angular.isArray(extObj[prop])) { angular.forEach(extObj[prop], function(item, index) { for (var p in item) { if (new RegExp("function").test(item[p])) { var propValue = eval(item[p]); extObj[prop][index][p] = propValue; } } }); } else if (angular.isObject(extObj[prop])) { for (var p in extObj[prop]) { if (new RegExp("function").test(extObj[prop][p])) { var propValue = eval(extObj[prop][p]); extObj[prop][p] = propValue; } } } } } angular.extend(field, extObj); delete field.extjson; } if (field.extjson == "") { delete field.extjson; } if (angular.isDefined(field.templateOptions)) { var templateOs = field.templateOptions; for (var property in templateOs) { //console.log(property); if (angular.isString(templateOs[property]) && !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))) { if (new RegExp("function").test(templateOs[property])) { var propValue = eval(templateOs[property]); field.templateOptions[property] = propValue; } else { if (that.has(templateOs[property])) { field.templateOptions[property] = that.get(templateOs[property]); } else { field.templateOptions[property] = templateOs[property]; } } } else if (templateOs[property] == null) { //delete field.templateOptions[property]; } else {} } } if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) { var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson); angular.extend(field.templateOptions, extObj); delete field.templateOptions.extjson; } //... if (field.templateOptions) { //处理远程获取数据控件方法调用 if (field.templateOptions.optionsUrl) { field.templateOptions.refresh = refreshSelectOptions; } //处理嵌套属性数据绑定/ if (field.templateOptions.pkey) { var pmodel, i = 0; angular.forEach(field.templateOptions.pkey.split("."), function(p) { if (i == 0) { if (result.model[p] == null) { result.model[p] = {}; } pmodel = result.model[p]; i++; } else { if (pmodel[p] == null) { pmodel[p] = {}; } pmodel = pmodel[p]; } }); if (pmodel != null) { field.model = pmodel; if (pmodel[field.key] == null) { pmodel[field.key] = null; } } } else { if (result.model[field.key] == null) { result.model[field.key] = null; } } //处理弹出框组件初始化 if (field.type == "ui-input-selectmodal") { field.templateOptions.modal = $modal; //field.templateOptions.Restangular = Restangular; } else if (field.type == "ui-userselect") { field.templateOptions.modal = $modal; //field.templateOptions.Restangular = Restangular; } else if (field.type == "ui-multiuserselect") { field.templateOptions.modal = $modal; } else if (field.type == "ui-modelselect") { field.templateOptions.modal = $modal; //field.templateOptions.Restangular = Restangular; } else if (field.type == "ui-dropfile") { field.templateOptions.fileUploader = new FileUploader({ url: '/uploader' }); field.templateOptions.taskId = $stateParams.taskId; field.templateOptions.processInstanceId = $stateParams.processInstanceId; field.templateOptions.userId = $rootScope.user.id; //field.ApiService=api_bpm_domain; } else if (field.type == "ui-dropfiletable") { if (field.templateOptions.processInstanceId) { } else { field.templateOptions.processInstanceId = $stateParams.processInstanceId; } }else if (field.type == "ui-dropFiles") { if (field.templateOptions.processInstanceId) { } else { field.templateOptions.processInstanceId = $stateParams.processInstanceId; } }else if (field.type == "ui-showImgs") { if (field.templateOptions.processInstanceId) { } else { field.templateOptions.processInstanceId = $stateParams.processInstanceId; } } else if (field.type == "ui-repeatSection") { var repeatForm = { model: { }, fields: field.templateOptions.fields }; repeatForm.model[field.key] = []; decodeVMTabForm(repeatForm); } } // console.log(field); //field //result.fields.push(field); }) }); vm.originalTabs = angular.copy(vm.form); } //解析自定义表单设计数据 function decodeVMForm(vmForm) { var result = { model: {}, tabs: [] }; //设置模型实体数据 begin // var mdata = vmForm.model; //解析数据实体 var mdata = angular.fromJson(vmForm.model); //JSON.parse(field.extjson); angular.extend(result.model, mdata); //设置模型实体数据 end //解析设计数据生成表单项 begin var fields = []; //处理修改设计数据中展示设置 angular.forEach(vmForm.tabs, function(field) { if (field.key == "") { delete field.key; } if (angular.isDefined(field.extjson)) { var extObj = angular.fromJson(field.extjson); //JSON.parse(field.extjson); angular.extend(field.templateOptions, extObj.templateOptions); delete extObj.templateOptions; for (var prop in extObj) { if (new RegExp("Expression").test(prop)) { //var obj = $scope.$eval(extObj[prop]); //extObj[prop] = $scope.$eval(extObj[prop]); if (extObj[prop] != null) { if (new RegExp("function").test(extObj[prop])) { var propValue = eval(extObj[prop]); extObj[prop] = propValue; } else { //console.log(extObj[prop]); var obj = $scope.$eval(extObj[prop]); extObj[prop] = obj; //console.log(obj); } } } else if (new RegExp("expressionProperties").test(prop)) { for (var p in extObj[prop]) { if (new RegExp("function").test(extObj[prop][p])) { var propValue = eval(extObj[prop][p]); extObj[prop][p] = propValue; } else { //if(p.indexOf("'")>=0){ // var obj = $scope.$eval(extObj[prop][p]); // extObj[prop][$scope.$eval(p)]=obj; //} } } } else if ("watcher" == prop) { if (angular.isArray(extObj[prop])) { angular.forEach(extObj[prop], function(item, index) { for (var p in item) { if (new RegExp("function").test(item[p])) { var propValue = eval(item[p]); extObj[prop][index][p] = propValue; } } }); } else if (angular.isObject(extObj[prop])) { for (var p in extObj[prop]) { if (new RegExp("function").test(extObj[prop][p])) { var propValue = eval(extObj[prop][p]); extObj[prop][p] = propValue; } } } } } angular.extend(field, extObj); delete field.extjson; } if (angular.isDefined(field.templateOptions)) { var templateOs = field.templateOptions; for (var property in templateOs) { //console.log(property); if (angular.isString(templateOs[property]) && !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))) { if (new RegExp("function").test(templateOs[property])) { var propValue = eval(templateOs[property]); field.templateOptions[property] = propValue; } else { if (that.has(templateOs[property])) { field.templateOptions[property] = that.get(templateOs[property]); } else { field.templateOptions[property] = templateOs[property]; } } } else if (templateOs[property] == null) { //delete field.templateOptions[property]; } else {} } } console.log(field); if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) { var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson); angular.extend(field.templateOptions, extObj); delete field.templateOptions.extjson; } //... if (field.templateOptions) { //处理远程获取数据控件方法调用 if (field.templateOptions.optionsUrl) { field.templateOptions.refresh = refreshSelectOptions; } //处理嵌套属性数据绑定/ if (field.templateOptions.pkey) { var pmodel, i = 0; angular.forEach(field.templateOptions.pkey.split("."), function(p) { if (i == 0) { if (result.model[p] == null) { result.model[p] = {}; } pmodel = result.model[p]; i++; } else { if (pmodel[p] == null) { pmodel[p] = {}; } pmodel = pmodel[p]; } }); if (pmodel != null) { field.model = pmodel; if (pmodel[field.key] == null) { pmodel[field.key] = null; } } } else { if (result.model[field.key] == null) { result.model[field.key] = null; } } //处理弹出框组件初始化 if (field.type == "ui-input-selectmodal") { field.templateOptions.modal = $modal; //field.templateOptions.Restangular = Restangular; } else if (field.type == "ui-userselect") { field.templateOptions.modal = $modal; //field.templateOptions.Restangular = Restangular; } else if (field.type == "ui-multiuserselect") { field.templateOptions.modal = $modal; } else if (field.type == "ui-modelselect") { field.templateOptions.modal = $modal; //field.templateOptions.Restangular = Restangular; } else if (field.type == "ui-dropfile") { field.templateOptions.fileUploader = new FileUploader({ url: '/uploader' }); field.templateOptions.taskId = $stateParams.taskId; field.templateOptions.processInstanceId = $stateParams.processInstanceId; field.templateOptions.userId = $rootScope.user.id; //field.ApiService=api_bpm_domain; } else if (field.type == "ui-dropfiletable") { if (field.templateOptions.processInstanceId) { } else { field.templateOptions.processInstanceId = $stateParams.processInstanceId; } } else if (field.type == "ui-dropFiles") { if (field.templateOptions.processInstanceId) { } else { field.templateOptions.processInstanceId = $stateParams.processInstanceId; } }else if (field.type == "ui-showImgs") { if (field.templateOptions.processInstanceId) { } else { field.templateOptions.processInstanceId = $stateParams.processInstanceId; } } else if (field.type == "ui-repeatSection") { var repeatForm = { model: { }, fields: field.templateOptions.fields }; repeatForm.model[field.key] = []; decodeVMForm(repeatForm); } } // console.log(field); result.fields.push(field); }); angular.extend($scope.vm.fields, result.fields); angular.extend($scope.vm.model, result.model); $scope.formData = vmForm; //console.log($scope.vm); //解析设计数据生成表单项 end return result; } //======================处理表单设计数据 结束======================== $scope.ldloading = {}; function filter(obj) { angular.forEach(obj, function(key, value) { if (value === "" || value === null) { delete obj[key]; } else if (Object.prototype.toString.call(value) === '[object Object]') { filter(value); } else if (angular.isArray(value)) { angular.forEach(value, function(item) { filter(item); }); } }); } function invokeOnAllFormOptions(fn) { angular.forEach(vm.tabs, function(tab) { if (tab.form.options && tab.form.options[fn]) { tab.form.options[fn](); } }); } function encodeCIData(data, ciId) { /* create/update state:未审核 create createtime:系统时间 create/update lastupdatetime : 系统时间 label:ci分类 */ if (ciId) { var baseprop = ['uuid', 'name', 'type', 'label', 'status', 'createtime', 'lastupdatetime', 'props']; //state|audittime//createtime//removeflag|removetime//configperson//lastupdateperson//manager//useradmin var extraprop = 'props'; data[extraprop] = {}; for (var key in data) { // console.log(data[key]); if (_.indexOf(baseprop, key) >= 0) { continue; } else { data[extraprop][key] = data[key]; delete data[key]; } } if ($rootScope.user) { data[extraprop]['lastupdateperson'] = $rootScope.user.name; data[extraprop]['configperson'] = $rootScope.user.name; var isCMAdminFlag = false; angular.forEach($rootScope.user.role, function(roleItem) { if (roleItem.rolecode == "cmdb charge") { isCMAdminFlag = true; } }) if (!isCMAdminFlag) { data[extraprop]['state'] = '1'; } } if (data.props.id) { } else { data.label = ciId; } return data; } return undefined; } function decodeCIModel(data) { var extraprop = 'props'; if (data[extraprop]) { for (var key in data[extraprop]) { data[key] = data[extraprop][key]; } delete data[extraprop]; } data['iscmadmin'] = false; angular.forEach($rootScope.user.role, function(roleItem) { if (roleItem.rolecode == "cmdb charge") { data['iscmadmin'] = true; } }) return data; }; vm.remove = function(data, style) { $scope.ldloading[style.replace('-', '_')] = true; // var cidata = { // label: data.label, // id: data.id, // uuid: data.uuid, // name: data.name, // props: {} // }; // if (cidata.id) { // cidata.props['removeflag'] = true; // cidata.props['lastupdateperson'] = vm.model.loginUser; //cidata.props['removetime']=new Date(); var modalInstance = $modal.open({ templateUrl: 'assets/views/delete.html', controller: function($scope, scope, $modalInstance, api_bpm_data) { var cidata = { label: data.label, id: data.id, uuid: data.uuid, name: data.name, props: {} }; if (cidata.id) { cidata.props['removeflag'] = true; cidata.props['lastupdateperson'] = vm.model.loginUser; $scope.ok = function() { $modalInstance.close(cidata); }; $scope.cancel = function() { $modalInstance.dismiss('cancel'); }; } }, size: 'sm', resolve: { scope: function() { return $scope; } } }); modalInstance.result.then(function(selectedItem) { if (selectedItem) { // if (selectedItem.length > 0) { api_cmdb.put(selectedItem, selectedItem.id).then(function(response) { if (response) { var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "删除成功!", confirmButtonColor: "#007AFF" }, function() { $state.go("app.means.listd"); // $state.go("app.means.list"); // $scope.refreshform(); // reinitTabForm($scope.classify); }); } else { SweetAlert.swal({ title: "系统错误", text: "系统错误,请稍后重试!", type: "error", confirmButtonColor: "#DD6B55" }); } $scope.ldloading[style.replace('-', '_')] = false; }); // } else { // SweetAlert.swal({ // title: "操作异常!", // text: "系统异常,请稍后重试,或者联系管理员!", // type: "error" // }); // } } }) } // }) // api_cmdb.put(cidata,data.id).then(function(response){ // if(response){ // var resData = Restangular.stripRestangular(response); // SweetAlert.swal({ // title: "删除成功!", // confirmButtonColor: "#007AFF" // },function(){ // $state.go("app.means.list"); // // $scope.refreshform(); // // reinitTabForm($scope.classify); // }); // }else{ // SweetAlert.swal({ // title: "系统错误", // text: "系统错误,请稍后重试!", // type: "error", // confirmButtonColor: "#DD6B55" // }); // } // $scope.ldloading[style.replace('-', '_')] = false; // }); // } else { // $timeout(function() { // $scope.ldloading[style.replace('-', '_')] = false; // }, 2000); // } // } function formValid() { angular.forEach(vm.tabs, function(item) { //item. }) } // 显示对应索引 $scope.xianshi = 0; $scope.toindex = function(res) { $scope.xianshi = res; } $scope.closeModel = function() { if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") { if ($stateParams.formKey == "means_editor" || $stateParams.formKey == "means_edit") { $state.go('app.means.listd', {}); // $state.go('app.means.list', {}); } event.preventDefault(); } } vm.submit = function(data, ciId, templateitem, style) { // $scope.ldloading[style.replace('-', '_')] = true; // console.log(vm.form.$$parentForm.$valid); if (vm.form.$$parentForm.$valid) { invokeOnAllFormOptions('updateInitialValue'); //alert(JSON.stringify(vm.model), null, 2); //vm.options.updateInitialValue(); //console.log(vm.model); var cidata = encodeCIData(vm.model, ciId); if (cidata) { //var cidata = ; if (cidata.props.id) { //修改 api_cmdb.put(cidata, ciId).then(function(response) { if (response) { var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "保存成功!", confirmButtonColor: "#007AFF", type: "success" }, function() { $scope.ldloading[style.replace('-', '_')] = false; // $scope.refreshform(); $state.go("app.means.listd"); // $state.go("app.means.list"); }); } else { SweetAlert.swal({ title: "系统错误", text: "系统错误,请稍后重试!", type: "error", confirmButtonColor: "#DD6B55" }); } $scope.ldloading[style.replace('-', '_')] = false; }); } else { //新建 var type = 2; api_sysinfo.getSerialnumber(type, templateitem.id).then(function(data) { if (data && data.status == 200) { cidata.uuid = data.uuid; api_cmdb.create(cidata).then(function(response) { if (response) { var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "保存成功!", text: "内部编号:" + cidata.uuid, confirmButtonColor: "#007AFF", type: "success" }, function() { $state.go("app.means.listd"); // $state.go("app.means.list"); }); // if(resData.status){ // resData // } } else { SweetAlert.swal({ title: "系统错误", text: "系统错误,请稍后重试!", type: "error", confirmButtonColor: "#DD6B55" }); } $scope.ldloading[style.replace('-', '_')] = false; }); } else { SweetAlert.swal({ title: "系统错误", text: "内部编号生成出错!", type: "error", confirmButtonColor: "#DD6B55" }); } }) } } else { SweetAlert.swal({ title: "错误", text: "错误,请选择资产分类!", type: "error", confirmButtonColor: "#DD6B55" }); } //alert(JSON.stringify(cidata), null, 2); $scope.ldloading[style.replace('-', '_')] = true; return; var _ = window._; vm.model = (function filter(obj) { var filtered = _.pick(obj, function(v) { return angular.isDefined(v) && v !== null && (angular.isArray(v) ? v.length > 0 : true) && (_.isPlainObject(v) ? (!_.isEmpty(v)) : true); }); return _.cloneDeep(filtered, function(v) { return v !== filtered && _.isPlainObject(v) ? filter(v) : undefined; }); })(vm.model); } else { if (vm.form.$$parentForm.$error) { SweetAlert.swal({ title: "校验错误", text: "请填写必填项!", type: "error", confirmButtonColor: "#DD6B55" }); angular.forEach(vm.form.$$parentForm.$error.required, function(item) { angular.forEach(vm.tabs, function(tab) { angular.forEach(tab.form.fields, function(f) { if (f.name == item.$name) { f.validation.show = true; tab.active = true; } }) }) }); $scope.ldloading[style.replace('-', '_')] = false; } } }; $scope.vm = vm; //树形图 var apple_selected, tree, treedata_avm, treedata_geography; $scope.my_tree_handler = function(branch) { //var _ref; // var classify=$scope.classify=branch.prefix.toLowerCase()+branch.sign; // api_cmdb.query({'sign':classify}).then(function(data){ // var myData = Restangular.stripRestangular(data); // // console.log(myData.data.node); // if(myData.data&&myData.status==200){ // var ret = myData.data; // redrawSvg(myData); // } // }); // $scope.ciId = undefined; // var classify=$scope.classify=branch.prefix.toLowerCase()+branch.sign; // api_configure_form.renderTabForm(classify).then(function(data){ // var myData = Restangular.stripRestangular(data); // //angular.extend($scope.vm.fields,result.fields); // //angular.extend($scope.vm.model,result.model); // $scope.templateProps = myData; // $scope.vm.tabs = myData; // vm.model = {}; // decodeVMTabForm(vm.model, vm.tabs); // //$scope.vm.originalTabs = angular.copy($scope.vm.form); // //console.log(myData); // }); }; $scope.my_data = []; function convertListToTree(data, treeMap) { var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup var root = null; //Initially set our loop to null var parentNode = null; //loop over data for (var i = 0; i < data.length; i++) { var datum = data[i]; //each node will have children, so let's give it a "children" poperty datum.children = []; //add an entry for this node to the map so that any future children can //lookup the parent idToNodeMap[datum.id] = datum; //Does this node have a parent? if (typeof datum.parent === "undefined" || datum.parent == null) { //Doesn't look like it, so this node is the root of the tree root = datum; treeMap[datum.id] = root; } else { //This node has a parent, so let's look it up using the id parentNode = idToNodeMap[datum.parent.id]; //We don't need this property, so let's delete it. delete datum.parent; //Let's add the current node as a child of the parent node. parentNode.children.push(datum); } } return root; } function convertParentToChildList(data) { var treeMap = {}; var list = []; convertListToTree(data, treeMap); angular.forEach(treeMap, function(item) { list.push(item); }); return list; } $scope.my_tree = tree = {}; $scope.try_async_load = function() { $scope.my_data = []; $scope.select_treedata = []; $scope.doing_async = true; api_configure_data.fetchDataList('ciclassify', { 'idx': 0, 'sum': 100 }).then(function(result) { //console.log(result['list']); $scope.select_treedata = $scope.my_data = convertParentToChildList(result['list']); $scope.doing_async = false; // tree.expand_all(); //console.log(treelist); }); }; $scope.select_treedata = []; $scope.propTypeOptions = []; $scope.try_async_load(); $scope.onFilterCallback = function(item) { //console.log(item); if (angular.isDefined(item.children) && item.children.length >= 1) { //not valid } else { var tempclassify = item.prefix.toLowerCase() + item.sign; $scope.cifilter_classic = tempclassify; $scope.templateitem = item; api_configure_form.renderTabForm(tempclassify).then(function(data) { var myData = Restangular.stripRestangular(data); $scope.propTypeOptions = myData; $scope.templateProps = myData; $scope.vm.tabs = myData; vm.model = {}; decodeVMTabForm(vm.model, vm.tabs); }); } } $scope.jry_shuxing = JSON.parse($stateParams.model); // console.log($scope.jry_shuxing); $scope.refreshform = function() { if ($stateParams.model) { var modeldata = JSON.parse($stateParams.model) api_configure_form.renderTabForm(modeldata.model.label).then(function(data) { var myData = Restangular.stripRestangular(data); $scope.templateProps = myData; $scope.vm.tabs = myData; vm.model = {}; vm.model = $scope.vm.model = decodeCIModel(modeldata.model); vm.model["loginUser"] = $rootScope.user.name; // console.log(vm.model); decodeVMTabForm(vm.model, vm.tabs); // console.log(myData); }); } } $scope.refreshform(); } ]);