'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 data2 = [{ // name: "治安管理工作", // label: { // normal: { // backgroundColor: '#725bb8' // } // }, // children: [{ // id: 1, // name: "娱乐场所治安管理", // children: [{ // id: 2, // name: "娱乐场所治安管理工作" // }] // }, { // id: 2, // name: "安保工作", // children: [{ // id: 4, // name: "输油气管道安保工作" // }, { // id: 5, // name: "校园安保工作" // }, { // id: 6, // name: "节假日、重大活动、大型群众性活动" // }] // }, { // id: 7, // name: "精神病人管控工作", // children: [{ // id: 8, // name: "精神病人肇事肇祸案事件" // }] // }, { // id: 9, // name: "物流寄递业", // children: [{ // id: 10, // name: "物流寄递业治安管理工作" // }] // }, { // id: 11, // name: "推进基层基础工作创新", // children: [{ // id: 12, // name: "加强派出所建设" // }] // }, { // id: 13, // name: "地网建设工作", // children: [{ // id: 14, // name: "加强二轮电动车防盗登记备案装置安装工作" // }] // }, { // id: 15, // name: "无人机管理", // children: [{ // id: 16, // name: "加强无人机管理" // }] // }, { // id: 17, // name: "加强社会面巡逻防控", // children: [{ // id: 18, // name: "武装联勤巡逻" // }] // }] // }]; // // var startdata = JSON.parse($stateParams.model).model; // // var data2 = { // // "id": startdata.id, // // "name": startdata.props.hw_mingcheng, // // "uuid": startdata.uuid // // } // myChart.hideLoading(); // // echarts.util.each(data2.children, function(datum, index) { // // index % 2 === 0 && (datum.collapsed = true); // // }); // option = { // backgroundColor: '#fff', // tooltip: { // trigger: 'item', // triggerOn: 'mousemove' // }, // legend: { // top: '2%', // left: '3%', // orient: 'vertical', // data: [{ // name: 'tree1', // icon: 'rectangle' // }], // // borderColor: '#c23531' // }, // series: [{ // type: 'tree', // name: '资产关系图', // data: data2, // top: '5%', // left: '7%', // bottom: '2%', // right: '60%', // symbolSize: 5, // // symbolSize: [100, 32], // focusNodeAdjacency: true, // symbol: 'rect', // label: { // normal: { // // top: 30, // position: 'center', // verticalAlign: 'middle', // align: 'left', // backgroundColor: '#7049f0', // clickable: true, // color: '#fff', // padding: 2, // formatter: [ // '{box|{b}}' // ].join('\n'), // rich: { // box: { // height: 18, // color: '#fff', // padding: [0, 10], // align: 'center', // } // }, // lineStyle: { // color: '#ccc', // type: 'broken' // 'curve'|'broken'|'solid'|'dotted'|'dashed' // } // } // }, // leaves: { // label: { // normal: { // // top: 30, // position: 'center', // verticalAlign: 'middle', // clickable: true, // align: 'left', // backgroundColor: '#c44eff', // formatter: [ // '{box|{b}}' // ].join('\n'), // rich: { // box: { // top: 18, // height: 18, // color: '#fff', // padding: [0, 5], // align: 'center' // } // } // } // } // }, // symbolKeepAspect: true, // roam: true, // expandAndCollapse: true, // animationDuration: 550, // animationDurationUpdate: 750 // }] // }; var startdata = JSON.parse($stateParams.model).model; var data1 = [{ "id": startdata.id, "name": startdata.props.hw_mingcheng, "uuid": startdata.uuid }] myChart.hideLoading(); option = { title: { text: '资产图' }, toolbox: { show: true, feature: { // mark: { show: true }, // dataView: { show: true, readOnly: false }, // restore: { show: true }, // saveAsImage: { show: true } } }, series: [{ name: '树图', type: 'tree', orient: 'horizontal', // vertical horizontal // rootLocation: { x: 100, y: 230 }, // 根节点位置 {x: 100, y: 'center'} nodePadding: 8, layerPadding: 200, hoverable: false, roam: true, symbolSize: 6, itemStyle: { normal: { color: '#4883b4', label: { show: true, position: [-10, -20], formatter: "{b}", textStyle: { color: '#000', fontSize: 12 } }, lineStyle: { color: '#ccc', type: 'solid' // 'curve'|'broken'|'solid'|'dotted'|'dashed' } }, emphasis: { color: '#4883b4', label: { show: false }, borderWidth: 0 } }, data: data1 }] }; // myChart.showLoading(); // var startdata = JSON.parse($stateParams.model).model; // var data1 = { // "id": startdata.id, // "name": startdata.props.hw_mingcheng, // "uuid": startdata.uuid // // "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: '7%', // bottom: '2%', // right: '10%', // symbolSize: 7, // itemStyle: { // normal: { // color: '#fff', // borderColor: '#1b51b2' // } // }, // symbolSize: [150, 32], // symbol: 'roundRect', // symbolKeepAspect: true, // roam: true, // // expandAndCollapse: true, // animationDuration: 550, // animationDurationUpdate: 750 // }] // }); 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(); }) // api_bpm_data.fetchDataList('applicationForm', { "idx": 0, "sum": 100 }).then(function(data) { // // if (data.status == 200) { // option.series[0].data[0] = { // name: "治安管理工作", // label: { // normal: { // backgroundColor: '#725bb8' // } // }, // children: [{ // name: "娱乐场所治安管理", // children: [{ // name: "娱乐场所治安管理工作" // }] // }, { // name: "加强社会面巡逻防控", // children: [{ // name: "武装联勤巡逻" // }] // }] // } // myChart.setOption(option); // myChart.hideLoading(); // // } // }) } getinternetAlarm(startdata); // setInterval(function() { // // getinternetAlarm(); // }, 10000); 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: '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(); } ]);