'use strict'; var cmdbFormly = angular.module('formlyCMDB', [ 'formly', 'formlyBootstrap', 'ui.bootstrap', 'ngSanitize','ui.select','ui.grid']); app.requires.push('formlyCMDB'); cmdbFormly.controller('cmdbListCtrl', ['$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', 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) { $scope.langs=i18nService.getAllLangs(); $scope.lang = 'zh-cn'; i18nService.setCurrentLang($scope.lang); 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::"+$stateParams.formKey); } //用户测试数据,后续从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){ /* create/update state:未审核 create createtime:系统时间 create/update lastupdatetime : 系统时间 label:ci分类 */ if($scope.classify){ 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'; } } data.label=$scope.classify; 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:$scope.ciId, uuid:data.uuid, name:data.name, props:{} }; if($scope.ciId){ cidata.props['removeflag']=true; //cidata.props['removetime']=new Date(); api_cmdb.put(cidata,$scope.ciId).then(function(response){ if(response){ var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "保存成功!", confirmButtonColor: "#007AFF" },function(){ refreshData($scope.classify); 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. }) } vm.submit = function(data, 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); if(cidata){ //var cidata = ; if($scope.ciId){ api_cmdb.put(cidata,$scope.ciId).then(function(response){ if(response){ var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "保存成功!", confirmButtonColor: "#007AFF" },function(){ refreshData($scope.classify); reinitTabForm($scope.classify); }); }else{ SweetAlert.swal({ title: "系统错误", text: "系统错误,请稍后重试!", type: "error", confirmButtonColor: "#DD6B55" }); } $scope.ldloading[style.replace('-', '_')] = false; }); }else{ api_cmdb.create(cidata).then(function(response){ if(response){ var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "保存成功!", confirmButtonColor: "#007AFF" },function(){ refreshData($scope.classify); reinitTabForm($scope.classify); }); // 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" }); } //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); if(pdKey!=""){ if($scope.oprcode=="save"){//保存 api_bpm_domain.save(taskId, vm.model).then(function(response){ if(response){ var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "保存成功!", confirmButtonColor: "#007AFF" },function(){ $state.go($scope.formData.cancelUri); }); // if(resData.status){ // resData // } }else{ SweetAlert.swal({ title: "系统错误", text: "系统错误,请稍后重试!", type: "error", confirmButtonColor: "#DD6B55" }); } $scope.ldloading[style.replace('-', '_')] = false; }); }else{ switch($scope.formData.url){ case "start" : vm.model["initUser"]=$rootScope.user.id; if(vm.model["assignee"]||vm.model["candidateGroups"]){ }else{ vm.model["assignee"]=$rootScope.user.id; } api_bpm_domain.start(pdKey,vm.model).then(function(response){ if(response){ var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "提交成功!", confirmButtonColor: "#007AFF" },function(){ $state.go($scope.formData.cancelUrl); }); }else{ SweetAlert.swal({ title: "系统错误", text: "系统错误,请稍后重试!", type: "error", confirmButtonColor: "#DD6B55" }); } $scope.ldloading[style.replace('-', '_')] = false; }); break; case "complete" : // api_bpm_domain.complete(pdKey, userId, vm.model).then(function(response){ console.log("complete taskId::"+$stateParams.taskId); api_bpm_domain.complete($stateParams.taskId, userId, vm.model).then(function(response){ if(response){ var resData = Restangular.stripRestangular(response); SweetAlert.swal({ title: "提交成功!", confirmButtonColor: "#007AFF" },function(){ // if($scope.uploader.getNotUploadedItems().length>0&&response.data.processInstanceId){ // // $scope.uploader.options.url(); // $scope.uploader.onBeforeUploadItem = function(item) { // item.url = api_bpm_domain.saveAttachments($stateParams.processInstanceId,$stateParams.taskId,$scope.user.id).getRequestedUrl(); // console.info('onBeforeUploadItem', item); // }; // $scope.uploader.uploadAll(); // } $state.go($scope.formData.cancelUrl); }); }else{ SweetAlert.swal({ title: "系统错误", text: "系统错误,请稍后重试!", type: "error", confirmButtonColor: "#DD6B55" }); } $scope.ldloading[style.replace('-', '_')] = false; }); break; default: $scope.ldloading[style.replace('-', '_')] = false; break; } } // var submitFunc = api_bpm_domain[$scope.formData.url] // if(anuglar.isFunction(submitFunc)){ // submitFunc.apply(null, pdKey) // } } }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; //cmdb list $scope.gridOptions = {}; $scope.gridOptions.data = 'myData'; $scope.gridOptions.enableColumnResizing = true; $scope.gridOptions.enableFiltering = true; $scope.gridOptions.enableGridMenu = true; $scope.gridOptions.enableRowSelection = true; $scope.gridOptions.enableRowHeaderSelection=false; $scope.gridOptions.showGridFooter = true; $scope.gridOptions.showColumnFooter = true; $scope.gridOptions.fastWatch = true; $scope.gridOptions.useExternalPagination = false; $scope.gridOptions.paginationPageSizes = [10]; $scope.gridOptions.paginationPageSize = 10; $scope.gridOptions.multiSelect = false; $scope.gridOptions.modifierKeysToMultiSelect = false; //$scope.gridOptions.noUnselect = true; //$scope.gridOptions.rowTemplate = "
"; // $scope.gridOptions.rowIdentity = function(row) { return row.id; }; $scope.gridOptions.getRowIdentity = function(row) { return row.id; }; $scope.transferstate = function(state){ if(state=="1"){return state="未审核"} else if(state=="2"){return state="已审核"} else if(state=="3"){return state="不匹配"} else if(state=="4"){return state="丢失"} } $scope.transferremoveflag = function(removeflag){ if(removeflag==true){return removeflag="已删除"} else if(removeflag==false){return removeflag="正常"} } $scope.gridOptions.columnDefs = [ { name: 'uuid', displayName: '搜索代码', width: 100 }, { name: 'name', displayName: '资产名称', width: 100 },{ name: 'status', displayName: '资产状态', width: 140 }, { name: 'props.state', displayName: '资产审批状态', width: 100, cellTemplate:'