'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); } //关系图 var dom = document.getElementById("meansmap"); var myChart = echarts.init(dom); var app = {}; var option = null; $scope.guanlianable = false; $scope.cmdbtype = {}; myChart.showLoading(); var startdata = JSON.parse($stateParams.model).model; var data = [{ // "node": startdata.props.hw_mingcheng, // "id": startdata.id, // "uuid": startdata.uuid, // "endpoint": [ // // "节点6", // // "节点8" // ], // "service": [ // // "java.local.name_1", // // "java.local.name_11" // ] // }, { // "node": "测试", // "id": 1, // "uuid": 1, // "endpoint": [ // { "node": "节点6", "link": "连接" } // ], // "service": [ // "java.local.name_1", // // "java.local.name_11" // ] // }, { // "node": "节点6", // "id": 2, // "uuid": 2, // "endpoint": [ // { "node": "测试", "link": "连接" } // ], // "service": [ // // "java.local.name_1", // "java.local.name_11" // ] // } // { "node": "节点2", "endpoint": [ "节点6", "节点7" ], "service": [ "java.local.name_2", "java.local.name_22" ] }, { "node": "节点4", "endpoint": [ "节点6" ], "service": [ "java.local.name_4", "java.local.name_44" ] }, { "node": "节点5", "endpoint": [ "节点6" ], "service": [ "java.local.name_5", ] } // }, { // "node": "节点6", // "endpoint": [ // "节点1", // ], // "service": [ // "java.local.name_6", // "java.local.name_66" // ] // }, { // "node": "节点7", // "endpoint": [ // "节点6", // "节点2" // ], // "service": [ // "java.local.name_7", // "java.local.name_77" // ] // } ]; function get_nodes(data) { var nodes = []; var tmp_nodes = []; for (var nodes_i in data) { tmp_nodes.push(data[nodes_i].node); nodes.push({ 'name': data[nodes_i].node, "id": data[nodes_i].id, "uuid": data[nodes_i].uuid }); } return nodes; } function get_links(data) { var links = []; for (var nodes_i in data) { var node = data[nodes_i].node; var endpoint = data[nodes_i].endpoint; var service = data[nodes_i].service; // console.log(service); for (var service_i in endpoint) { links.push({ 'source': node, 'target': endpoint[service_i], 'label': { 'normal': { 'show': false, 'textStyle': { 'fontSize': 5 }, 'formatter': service } }, 'lineStyle': { 'normal': { 'curveness': 0.1 } } }) } } for (var i = 0, len1 = links.length; i < len1; i++) { for (var j = i, len2 = len1 - 1; j < len2; j++) { if (links[i].source == links[j].target) { links[j].lineStyle.normal.curveness = -0.1; } } } // console.log(links); return links; } myChart.hideLoading(); var option = { title: { text: '调用关系demo' }, // tooltip: { //formatter: '调用方法' // }, animationDurationUpdate: 1500, animationEasing: 'cubicOut', animationEasingUpdate: 'quinticInOut', series: [{ type: 'graph', layout: 'circular', // layout:'none', focusNodeAdjacency: true, legendHoverLink: true, hoverAnimation: true, symbolSize: 50, //edgeSymbolSize: 50, roam: true, symbol: "roundRect", label: { normal: { show: true, } }, edgeSymbol: ['circle', 'arrow'], edgeSymbolSize: [4, 15], edgeLabel: { normal: { textStyle: { fontSize: 20 } } }, data: get_nodes(data), links: get_links(data), lineStyle: { normal: { opacity: 0.9, width: 2, curveness: 0, type: 'dashed' } } }, ] }; // //添加点击事件 // myChart.on('click', function(params) { // // 弹窗打印数据的名称 // console.log(params); // if (params.dataType == "node") { // alert("机器属性:" + params.name); // } else if (params.dataType == "edge") { // alert("调用方法:" + params.data.label.normal.formatter); // } // }); 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 }); }) } } 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(); getinternetAlarm(param.data); // 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: 'link' }, { id: 2, name: '归属', value: 'link' }, { id: 3, name: '使用', value: 'link' }, { id: 4, name: '互备', value: 'link' }, { id: 5, name: '主备', value: 'link' } ]; $scope.ok = function(key) { $modalInstance.close(key); }; $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 //用户测试数据,后续从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-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-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(); } ]);