1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370 |
- app.controller('meansViewCtrl', ["$rootScope","$scope", "$state","$stateParams", "$timeout","$modal",'$parse', '$injector',"$interval", "$aside", "SweetAlert", "toaster", "Restangular", "api_bpm_domain", "api_configure_data", "api_cmdb", "api_configure_form", function ($rootScope, $scope, $state,$stateParams, $timeout,$modal,$parse, $injector,$interval, $aside, SweetAlert, toaster, Restangular, api_bpm_domain, api_configure_data, api_cmdb, api_configure_form) {
- 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;
- }
- });
- }
- }
- // $scope.relationdata=[];
- // $scope.addData = function(model){
- // var modalInstance = $modal.open({
- // templateUrl: 'assets/views/means/tpl/relaform.html',
- // controller: function($scope, $modalInstance, APIService,Alert){
- // $scope.cancel = function() {
- // $modalInstance.dismiss('cancel');
- // };
- // $scope.savercode = function(reladata){
- // $modalInstance.close(reladata);
- // }
- // },
- // resolve: {
- // APIService: function(){
- // return api_configure_data;
- // },
-
- // Alert: function(){
- // return SweetAlert;
- // }
- // }
- // });
- // modalInstance.result.then(function(selectedItem) {
- // $scope.relationdata.push(selectedItem);
- // var fildata={'label':selectedItem.label,'fieldType':2,'cIEdgeType':{'id':model.id}}
- // api_configure_data.addData('ciEdgetypeAttribute',fildata).then(function(data){
- // if(data.status==200){
- // }else{
- // }
- // })
- // });
- // }
- $scope.vm = vm;
- $scope.refreshforms = function(id,fieldata){
- api_configure_data.fetchDataById('cIEdgeType',id).then(function(data){
- if(data.status==200){
- var myData=[];
- var formdataone={fields:[]};
- var formdatatwo={fields:[]};
- for(var i=0;i<data.fields.length;i++){
- if(data.fields[i].templateOptions.fieldType&&data.fields[i].templateOptions.fieldType==1){
- formdataone.fields.push(data.fields[i])
- // myData[0].push(formdata[])
- }else if(data.fields[i].templateOptions.fieldType&&data.fields[i].templateOptions.fieldType==2){
- // myData[1].form.push(data[i]);
- formdatatwo.fields.push(data.fields[i])
- }
- }
- myData[0]={'form':formdataone};
- myData[1]={'form':formdatatwo};
- // myData[0]={'form':Restangular.stripRestangular(data)};
- $scope.templateProps = myData;
- $scope.vm.tabs = myData;
- vm.model = {};
- angular.extend(vm.model,fieldata);
- $scope.vm.tabs[0].form.model={};
- // $scope.vm.tabs[0].form.model=vm.model;
- // angular.forEach($scope.vm.tabs, function(tab){
- angular.forEach($scope.vm.tabs[0].form.fields, function(item){
- $scope.vm.tabs[0].form.model[item.key]=vm.model[item.key];
- });
- var rel=[];
- console.log($scope.vm.tabs[0].form.model)
- for(var i=0;i<$scope.vm.tabs[1].form.fields.length;i++){
- // if(angular.isDefined(vm.model[$scope.vm.tabs[1].form.fields[i].key])){
- rel[i]={'label':$scope.vm.tabs[1].form.fields[i].templateOptions.label,
- 'name':vm.model[$scope.vm.tabs[1].form.fields[i].key],
- 'key':$scope.vm.tabs[1].form.fields[i].key
- };
- }
- angular.forEach(rel,function(item){
- if(angular.isUndefined(item.name)||item.name==null){
- }else{
- $scope.relationdata.push(item)
- }
- })
- // for(var i=0;i<$scope.relationdata.length;i++){
- // if(angular.isUndefined($scope.relationdata[i].name)||$scope.relationdata[i].name==null){
- // $scope.relationdata.splice(i, 1);
- // }
- // }
- console.log($scope.relationdata)
- // var reladatas={label:$scope.vm.tabs[1].form.fields}
- // $scope.relationdata.push()
- // vm.model["loginUser"]= $rootScope.user.name;
- vm.model=$scope.vm.model=decodeCIModel($scope.vm.tabs[0].form.model);
- decodeVMTabForm(vm.model, vm.tabs);
- }else{
- SweetAlert.swal({
- title: "系统错误",
- text: "系统错误,请稍后重试!",
- type: "error",
- confirmButtonColor: "#DD6B55"
- });
- };
- });
- }
- 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';
- // }
- }
- 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:$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.
- })
- }
- $scope.closeModel = function(){
- if(angular.isDefined($stateParams.formKey)&&$stateParams.formKey!=""){
- if($stateParams.formKey=="means_editor"||$stateParams.formKey=="means_edit") {
- $state.go('app.means.list',{});
- }
- event.preventDefault();
- }
- }
- // vm.submit = function(data,ciId,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"
- // },function(){
- // reinitTabForm(ciId);
- // });
- // }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(){
- // $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"
- // });
- // }
- // //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;
- // }
- // }
- // };
- //
- // console.log(document.body.scrollWidth);
- // window.onresize = function () {
- // width=document.body.clientWidth-360;
- // }
- var width= $scope.width = document.body.clientWidth-360;
- // var width = $scope.width ="100%";
- var height = $scope.height = 400;
- 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.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;
- api_configure_form.renderTabForm(tempclassify).then(function(data){
- var myData = Restangular.stripRestangular(data);
- $scope.propTypeOptions[0] = myData[0].form.fields[0];
- $scope.propTypeOptions[1] = myData[0].form.fields[1];
- });
- }
- }
- // $scope.onPropTypeChange = function(form){
- // $scope.propOptions = form.fields;
- // }
- $scope.onPropChange = function(prop){
- $scope.cifilter_prop = prop;
- }
- $scope.searchCI = function(searchKey, propObj, ciclassify){
- //if(searchKey!=null&&searchKey.length>1){
- var searchData = {};
- if(angular.isUndefined(propObj)){
- propObj = $scope.cifilter_prop;
- }
- if(angular.isUndefined(ciclassify)){
- ciclassify = $scope.cifilter_classic;
- }
- searchData['sign']=ciclassify;
- if(angular.isDefined(propObj)){
- searchData[propObj.key] = searchKey;
- }
- api_cmdb.query(searchData).then(function(response){
- var data=Restangular.stripRestangular(response);
- //此处不清空nodes
- var node=data.data.node;
- var tempNode=[];
- //nodes 或者links 要去重
- for(var i=0;i<node.length;i++){
- var tmp=0;
- for(var j=0;j<nodes.length;j++){
- if(node[i].uuid==nodes[j].uuid){
- tmp++;
- break;
- }
- }
- if(tmp==0){
- tempNode.push(node[i]);
- }
- }
- for(var i=0;i<tempNode.length;i++){//nodes 不清空
- nodes.push(tempNode[i]);
- }
-
-
- restart();
- })
- //}
-
- }
- if($stateParams.model){
- var modeldata=JSON.parse($stateParams.model)
- }
- api_cmdb.query({'sign':modeldata.model.label}).then(function(data){
- if(data&&data.status==200){
- var ret={data:{node:[]}};
- var myData = Restangular.stripRestangular(data);
- for(var i=0;i<data.data.node.length;i++){
- if(data.data.node[i].id==modeldata.model.id){
- ret.data.node.push(myData.data.node[i])
- }else{
- // delete myData.data.node[i];
- }
- }
- // var ret = myData;
- redrawSvg(ret);
- }
- // var myData = Restangular.stripRestangular(data);
- // if(myData.data&&myData.status==200){
- // var ret = myData.data;
- // redrawSvg(myData);
- // }
- });
-
- // $scope.my_data = [];
- // window.onresize = function () {
- // width=document.body.clientWidth-360;
- // svg = d3.select('#cmdbSVG').append('svg').attr('width', width).attr('height', height);
- // }
- var svg = d3.select('#cmdbSVG').append('svg').attr('width', width).attr('height', height);
- // set up initial nodes and links
- // - nodes are known by 'id', not by index in array.
- // - reflexive edges are indicated on the node (as a bold black circle).
- // - links are always source < target; edge directions are set by 'left' and 'right'.
- var nodes = [],links = [];
- var treeNodes=[];
- //读取labels (node)
- var labels=[];
- $scope.labels=[];
- // function getlabels(){
- api_configure_data.fetchDataList('ciclassify',{'idx':0,'sum':100}).then(function(result){
- if(result.status==200){
- angular.forEach(result.list,function(item){
- $scope.labels.push(item);
- })
- }
- })
- // }
- // getlabels();
- function hideLinkForm(hide){
- $scope.hideLink=hide;
- }
- function hideFeedForm(hide){
- $scope.hideFeed=hide;
- }
- function redrawSvg(json){
- nodes.length=0;//先清空
- links.length=0;
- var data=json.data;
- for(var i=0;i<data.node.length;i++){
- nodes.push(data.node[i]);
- }
- //TODO
- //hideFeedForm(true);;
- //hideLinkForm(true);
- restart();
- }
- $scope.query = function(){
- //if(d3.event.keyCode=13){
- queryProp("","");
- //}
- }
- var queryProp = function(label, prop){
- var data = {sign:label,q:prop};
- api_cmdb.query(data).then(function(response){
- if(response&&(response.status==200)){
- var data=response.data;
- //此处不清空nodes
- for(var i=0;i<data.node.length;i++){
- nodes.push(data.node[i]);
- }
- restart();
- }else{
- SweetAlert.swal({
- title: "提示!",
- text: "访问服务器出错!",
- type: "error"
- });
- }
- })
- }
- /*
- //查询输入框 回车事件
- d3.select("#query").on('keyup',function(){
- if(d3.event.keyCode==13){
- var q=this.value;
- query("",q);
- }
- });
- //label 查询或者条件查询
- function query(label,q){
- $.ajax({
- type: "GET",
- url: window.basePath +"/api/cmdb/ci",
- data: {lb :label ,q: q},
- dataType: "json",
- success:function(json){
- nodes.length=0;//先清空
- links.length=0;
- var data=json.data;
- for(var i=0;i<data.node.length;i++){
- nodes.push(data.node[i]);
- }
- hideFeedForm(true);;
- hideLinkForm(true);
- restart();
- },
- error:function(){
- SweetAlert.swal({
- title: "提示!",
- text: "访问服务器出错!",
- type: "error"
- });
- }
- });
- }
- */
- //读取status (节点 连线)
- var statuses=[];
- api_configure_data.fetchDataList('cistatus',{'idx':0,'sum':100}).then(function(result){
- if (result&&result.status==200){
- d3.select('#nodeStatus').selectAll('option')
- .data(statuses).enter()
- .append('option')
- .attr('value',function(d){return d.code;})
- .html(function(d){ return d.desc;});
- }else{
- SweetAlert.swal({
- title: "提示!",
- text: "服务器请求异常!",
- type: "error"
- });
- }
- });
- //读取types (node)
- // api_configure_data.fetchDataList('cistatus',{'idx':0,'sum':100}).then(function(result){
- // if (result&&result.status==200){
- // d3.select('#nodeType').selectAll('option')
- // .data(types).enter()
- // .append('option')
- // .attr('value',function(d){return d.source;})
- // .html(function(d){ return d.description;});
- // }else{
- // SweetAlert.swal({
- // title: "提示!",
- // text: "服务器请求异常!",
- // type: "error"
- // });
- // }
- // });
- /*
- //读取所有params
- initParams();
- var params=[];
- //更新加载最新的params
- function initParams(){
- d3.xhr(window.basePath+"/api/cm/dynparams").send("GET", function(error, json) {
- if (!error){
- params=JSON.parse(json.responseText);
- if(selected_node){
- shownode();
- }else if(selected_link){
- showLink();
- }
- }else{
- jAlert("服务器请求异常","提示");
- }
- });
- }
- */
- //查询relationship_type表 name 为表里的type,label为显示值
- var linkType=[];
- function fetchEdgeTypes(){
- api_configure_data.fetchDataList('ciedgetype',{'idx':0,'sum':100}).then(function(response){
- if(response){
- if(response['list']){
- linkType = response['list'];
- d3.select('#linkName').selectAll('option')
- .data(linkType).enter()
- .append('option')
- .attr('value',function(d){return d.type;})
- .html(function(d){ return d.label;});
- }else{
- SweetAlert.swal({
- title: "提示!",
- text: "服务器请求异常!",
- type: "error"
- });
- }
- }else{
- SweetAlert.swal({
- title: "提示!",
- text: "服务器请求异常!",
- type: "error"
- });
- }
- })
- }
- fetchEdgeTypes();
- //设置cost 只能输入整形 最大值为1
- // d3.select('#linkCost').on('keyup',function(){
- // this.value= this.value.replace(/[^\d.]/g,function(){jAlert('只能输入数字!',"提示");return '';});
- // if(this.value>1){
- // jAlert('最大输入值为1','提示');
- // this.value='';
- // return;
- // }
- // });
- //添加属性 属性类型
- var proTypes=[
- {id:1,key:'string',value:'文本类型'},
- {id:2,key:'date',value:'日期类型'},
- {id:3,key:'int',value:'数字类型'},
- {id:4,key:'float',value:'浮点类型'}
- ];
-
- // init D3 force layout
- var force = d3.layout.force()
- .nodes(nodes)
- .links(links)
- .size([width, height])
- .gravity(.05)
- .linkDistance(150)
- .linkStrength(2)
- .charge(-500)
- .on('tick', tick);
- // define arrow markers for graph links
- svg.append('svg:defs').append('svg:marker')
- .attr('id', 'end-arrow')
- .attr('viewBox', '0 -5 10 10')
- .attr('refX', 6)
- .attr('markerWidth', 3)
- .attr('markerHeight', 3)
- .attr('orient', 'auto')
- .append('svg:path')
- .attr('d', 'M0,-5L10,0L0,5')
- .attr('fill', '#000');
- svg.append('svg:defs').append('svg:marker')
- .attr('id', 'start-arrow')
- .attr('viewBox', '0 -5 10 10')
- .attr('refX', 4)
- .attr('markerWidth', 3)
- .attr('markerHeight', 3)
- .attr('orient', 'auto')
- .append('svg:path')
- .attr('d', 'M10,-5L0,0L10,5')
- .attr('fill', '#000');
- // line displayed when dragging new nodes
- var drag_line = svg.append('svg:path')
- .attr('class', 'link dragline hidden')
- .attr('d', 'M0,0L0,0');
- // handles to link and node element groups
- //(1)var path = svg.append('svg:g').selectAll('g')
- var path = svg.append('svg:g').selectAll('g'),
- circle = svg.append('svg:g').selectAll('g');
- // mouse event vars
- var selected_node = null,
- selected_link = null,
- mousedown_link = null,
- mousedown_node = null,
- mouseup_node = null;
- function resetMouseVars() {
- mousedown_node = null;
- mouseup_node = null;
- mousedown_link = null;
- }
- // update force layout (called automatically each iteration)
- function tick() {
- // draw directed edges with proper padding from node centers
- path.selectAll('path').attr('d', function(d) {
- var deltaX = d.target.x - d.source.x,
- deltaY = d.target.y - d.source.y,
- dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY),
- normX = deltaX / dist,
- normY = deltaY / dist,
- sourcePadding = d.left ? 27 : 22,
- targetPadding = d.right ? 27 : 22,
- sourceX = d.source.x + (sourcePadding * normX),
- sourceY = d.source.y + (sourcePadding * normY),
- targetX = d.target.x - (targetPadding * normX),
- targetY = d.target.y - (targetPadding * normY);
-
-
- return 'M' + sourceX + ',' + sourceY + 'L' + targetX + ',' + targetY;
- });
-
-
- circle.attr('transform', function(d) {
- return 'translate(' + d.x + ',' + d.y + ')';
- });
- }
- // update graph (called when needed)
- function restart() {
- //绑定link 数据
- path.datum(links);
- // path (link) group
- path = path.data(links,function(d) { return d.id; });
-
- var p = path.enter().append('svg:g');
-
- //update existing links
- path.selectAll('path').classed('selected', function(d) { return d === selected_link; })
- .style('marker-start', function(d) { return d.left ? 'url(#start-arrow)' : ''; })
- .style('marker-end', function(d) { return d.right ? 'url(#end-arrow)' : ''; });
-
- // add new links
- p.append('svg:path')
- .attr('class', 'link')
- .attr('id', function(d) { return "path_" + d.id; })
- // .attr('startOffset', '0%')
- .classed('selected', function(d) { return d === selected_link; })
- .style('marker-start', function(d) { return d.left ? 'url(#start-arrow)' : ''; })
- .style('marker-end', function(d) { return d.right ? 'url(#end-arrow)' : ''; })
- .on('mousedown', function(d) {
- if(d3.event.ctrlKey) return;
-
- //去除没有提交的连线
- for(var i=0;i<links.length;i++){
- if(links[i].id==-1 && d.id!=-1){
- links.splice(i, 1);
- }
- }
-
- // select link
- mousedown_link = d;
- if(mousedown_link === selected_link) {
- selected_link = $scope.selected_link = null;
- selected_node = $scope.selected_node = null;
- // d3.select("#linkDetail").attr('style','display:none');
- hideLinkForm(true);//return ;
- } else {
- selected_link = $scope.selected_link = mousedown_link;
- selected_node = $scope.selected_node = null;
- //linkName
- d3.select("#linkDetail").attr('style','display:inline-block;width:100%;');
- //showLink();
- //show("linkNamebox");//return ;
- openAside(selected_link, linkType);
- }
- selected_node = $scope.selected_node = null;
- restart();
- });
-
-
- p.append('svg:text')
- .attr('x', 30)
- .attr('y', 20)
- .attr('class','fontM')
- .append('textPath')
- .attr('xlink:xlink:href',function(d, i){ return "#path_" + d.id; })
- .html(function(d){
- for(var i=0;i<linkType.length;i++){
- if(linkType[i].type==d.name){
- return linkType[i].label;
- }
- }
- });
- // remove old links
- path.exit().remove();
- // circle (node) group
- // NB: the function arg is crucial here! nodes are known by id, not by index!
- circle.datum(nodes);
- circle = circle.data(nodes, function(d) { return d.id; });
-
- // update existing nodes (reflexive & selected visual states)
- circle.selectAll('circle')
- .style('fill', function(d) {return (d === selected_node) ?d3.rgb(colors(d.label)).brighter().toString() : colors(d.label); })
- .style('fill-opacity', 0.75) // add by xi
- .classed('reflexive', function(d) { return d.reflexive; });
-
- // add new nodes
- var g = circle.enter().append('svg:g');
- //g.append('svg:circle').attr('r',22).style('fill','rgb(255,255,255)').style('stroke','rgb(255,255,255)').style('stroke-width','2');
- //g.append('svg:circle').attr('r',24).style('fill','rgb(255,255,255)').style('stroke', function(d) { return d3.rgb(colors(d.label)).darker().toString(); }).style('stroke-width','2');
- g.append('svg:circle').attr('r',24).style('fill', function(d){ return (d === selected_node) ? 'rgb(153,153,153)' : 'rgb(255,255,255)';}).style('stroke', function(d) { return d3.rgb(colors(d.label)).darker().toString(); }).style('stroke-width','2');
-
- g.append('svg:circle')
- .attr('class', 'node')
- .attr('r', 18)
- .style('fill', function(d) {
- // for(var i=0;i<$scope.labels.length;i++){
- // var regstring=$scope.labels[i].prefix+$scope.labels[i].sign;
- // if(d.label==regstring.toLocaleLowerCase()){
- // return (d === selected_node) ? d3.rgb(colors($scope.labels[i].la)).brighter().toString() : colors(d.label);
- // }
- // }
- return (d === selected_node) ? d3.rgb(colors(d.label)).brighter().toString() : colors(d.label);
- })
- .style('stroke', function(d) { return d3.rgb(colors(d.label)).darker().toString(); })
- .style('fill-opacity', 0.25) //add by xj
- .style('stroke-opacity', 0.5) //add by xj
- .classed('reflexive', function(d) { return d.reflexive; });
- g.on('mouseover', function(d) {
- // var title = d.name+"-["+d.uuid+"]";
- // if(!d.props.state){d.props.state="空"}
- // else if(d.props.state){
- // if(d.props.state=="1"){d.props.state="未审核"}
- // else if(d.props.state=="2"){d.props.state="已审核"}
- // else if(d.props.state=="3"){d.props.state="不匹配"}
- // else if(d.props.state=="4"){d.props.state="丢失"}
- // };
- // if(!d.name){d.name="空"};
- // if(!d.status){d.statu="空"};
- // if(!d.props.useradmin){d.props.useradmin="空"};
- // toaster.pop({
- // type: 'info',
- // title: title,
- // body: '<br/><p>搜索代码:' + d.uuid + '</p>' +
- // '<p>配置标题:' + d.name + '</p>' +
- // '<p>状态:' + d.status + '</p>' +
- // '<p>审核状态:' + d.props.state + '</p>' +
- // '<p>维护人员:' + d.props.useradmin + '</p>',
- // bodyOutputType: 'trustedHtml',
- // timeout: 500
- // })
- if(!mousedown_node || d === mousedown_node) return;
- // enlarge target node
- d3.select(this).attr('transform', 'scale(1.1)');
- })
- .on('mouseout', function(d) {
- if(!mousedown_node || d === mousedown_node) return;
- // unenlarge target node
- d3.select(this).attr('transform', '');
- })
- .on('mousedown', function(d) {
- if(d3.event.ctrlKey) return;
- hideLinkForm(true);
- //去除没有提交的连线
- for(var i=0;i<links.length;i++){
- if(links[i].id==-1 ){
- links.splice(i, 1);
- }
- }
- // select node
- mousedown_node = d;
- if(mousedown_node === selected_node) {
- selected_node = $scope.selected_node = null;
- hideFeedForm(true);;
- }else {
- selected_node = $scope.selected_node = mousedown_node;
- selected_link = $scope.selected_link = null;
- // 点击节点 查询关系及节点 /traversal/{id}/{relation}
- api_cmdb.findRefById(selected_node.id).then(function(result) {
- var d = result.data;
- var node = d.node;
- var link = d.edge;
- var tempNode = [];
- var tempLink = [];
- //nodes 或者links 要去重
- for (var i = 0; i < node.length; i++) {
- var tmp = 0;
- for (var j = 0; j < nodes.length; j++) {
- if (node[i].id == nodes[j].id) {
- tmp++;
- break;
- }
- }
- if (tmp == 0) {
- tempNode.push(node[i]);
- }
- }
- for (var i = 0; i < link.length; i++) {
- var tmp = 0;
- for (var j = 0; j < links.length; j++) {
- if (link[i].id == links[j].id) {
- tmp++;
- break;
- }
- }
- if (tmp == 0) {
- tempLink.push(link[i]);
- }
- }
- //数据写入页面
- for (var i = 0; i < tempNode.length; i++) { //nodes 不清空
- nodes.push(tempNode[i]);
- }
- for (var i = 0; i < tempLink.length; i++) { //link 不清空
- links.push(tempLink[i]);
- }
- //links转换
- for (var i = 0; i < links.length; i++) {
- for (var j = 0; j < nodes.length; j++) {
- if (links[i].source == nodes[j].id) {
- links[i].source = nodes[j];
- }
- if (links[i].target == nodes[j].id) {
- links[i].target = nodes[j];
- }
- }
- }
- restart();
- });
- /*
- // 点击节点 查询关系及节点 /traversal/{id}/{relation}
- $.ajax({
- type: "GET",
- url: window.basePath+"/api/cmdb/ci/"+selected_node.id+"/refs",
- dataType: "json",
- success:function(json){
- var d=json.data;
- var node=d.node;
- var link=d.edge;
- var tempNode=[];
- var tempLink=[];
- //nodes 或者links 要去重
- for(var i=0;i<node.length;i++){
- var tmp=0;
- for(var j=0;j<nodes.length;j++){
- if(node[i].id==nodes[j].id){
- tmp++;
- break;
- }
- }
- if(tmp==0){
- tempNode.push(node[i]);
- }
- }
-
- for(var i=0;i<link.length;i++){
- var tmp=0;
- for(var j=0;j<links.length;j++){
- if(link[i].id==links[j].id){
- tmp++;
- break;
- }
-
- }
- if(tmp==0){
- tempLink.push(link[i]);
- }
- }
-
-
-
- //数据写入页面
- for(var i=0;i<tempNode.length;i++){//nodes 不清空
- nodes.push(tempNode[i]);
- }
- for(var i=0;i<tempLink.length;i++){//link 不清空
- links.push(tempLink[i]);
- }
- //links转换
- for(var i=0;i<links.length;i++){
- for(var j=0;j<nodes.length;j++){
- if(links[i].source==nodes[j].id){
- links[i].source=nodes[j];
- }
- if(links[i].target==nodes[j].id){
- links[i].target=nodes[j];
- }
- }
- }
-
- restart();
- },
- error:function(){jAlert("访问服务器出错!",'提示');}
- });
- */
- //更改编辑内容
- //shownode();
- }
-
- // reposition drag line
- drag_line
- .style('marker-end', 'url(#end-arrow)')
- .classed('hidden', false)
- .attr('d', 'M' + mousedown_node.x + ',' + mousedown_node.y + 'L' + mousedown_node.x + ',' + mousedown_node.y);
- restart();
- })
- .on('mouseup', function(d) {
- if(!mousedown_node) return;
- // needed by FF
- drag_line
- .classed('hidden', true)
- .style('marker-end', '');
- // check for drag-to-self
- mouseup_node = d;
- if(mouseup_node === mousedown_node) { resetMouseVars(); return; }
- // unenlarge target node
- d3.select(this).attr('transform', '');
- // add link to graph (update if exists)
- // NB: links are strictly source < target; arrows separately specified by booleans
- var source, target, direction;
- if(mousedown_node.id < mouseup_node.id) {
- source = mousedown_node;
- target = mouseup_node;
- direction = 'right';
- } else {
- source = mouseup_node;
- target = mousedown_node;
- direction = 'left';
- }
- var link;
- link = links.filter(function(l) {
- return (l.source === source && l.target === target);
- })[0];
- if(link) {
- //变为双向 direction 方向
- link[direction] = true;
- //更新
- selected_link=link;
- var l= selected_link;
- var idVal=l.id;
- // 连线提交 TODO 双向提交 后台问题
- console.log("put relation type");
- //TODO
- api_cmdb.createRef({'id':l.id,'name':l.name,'source':l.source.id,'target':l.target.id,'left':l.left,'right':l.right}).then(function(resposne){
- if(response&&response.status==200){
- selected_link.name=linkName;
- links.push(selected_link);
- restart();
- }else{
- }
- })
- // $.ajax({
- // type: "PUT",
- // contentType:"application/json; charset=UTF-8",
- // url: window.basePath+"/api/cmdb/edge/"+idVal,
- // data: JSON.stringify({'id':l.id,'name':l.name,'source':l.source.id,'target':l.target.id,'left':l.left,'right':l.right}),
- // dataType: "json",
- // success:function(data){
- // if(data.status==200){
- // console.log(data.data.edge[0]);
-
- // selected_link.name=linkName;
- // //selected_link.status=linkStatus;
- // selected_link.cost=linkCost;
-
- // restart();
- // showLink();
- // }
-
- // },
- // error: function(data){jAlert("服务器请求异常",'提示');}
- // });
-
-
- } else {
- cancel();
- //添加连线
- link = {id:-1,source: source, target: target,name:'', left: false, right: false};
- link[direction] = true;
- selected_link=link;
- links.push(link);
- //d3.select("#linkDetail").attr('style','display:inline-block;width:100%;');
- //showLink();
- openAside(link, linkType);
- //show("linkNamebox");
- }
-
- // select new link
- selected_link = $scope.selected_link = link;
- selected_node = $scope.selected_node = null;
- restart();
- });
- // show node name
- g.append('svg:text')
- .attr('x', 0)
- .attr('y', 34)
- .attr('class', 'id')
- .text(function(d) { return d.name; });//TODO 改为 d.name
- //设置图片
- g.append('svg:foreignObject')
- .attr("width", 32)
- .attr("height", 32)
- .attr('x', "-16px")
- .attr('y', "-14px")
- .html(function(d){
- for(var i=0;i<$scope.labels.length;i++){
- var regstring=$scope.labels[i].prefix+$scope.labels[i].sign;
- if(d.label==regstring.toLocaleLowerCase()){
- return '<i class="icon iconfont">'+$scope.labels[i].iconname+'</i>';
- }
- }
- });
- // remove old nodes
- circle.exit().remove();
- // set the graph in motion
- force.start();
- }
- function mousedown() {
- // prevent I-bar on drag
- //d3.event.preventDefault();
- // because :active only works in WebKit?
- svg.classed('active', true);
- if(mousedown_node){
- viewNode(mousedown_node);
- }
- if(d3.event.ctrlKey || mousedown_node || mousedown_link) return;
- // insert new node at point 点击添加node
- // var point = d3.mouse(this),
- // node = {id: ++lastNodeId, reflexive: false};
- // node.x = point[0];
- // node.y = point[1];
- // nodes.push(node);
-
- restart();
- }
- function viewNode(node){
- if($scope.selected_node.name){
- var title = $scope.selected_node.name+"-["+$scope.selected_node.uuid+"]";
- }
- if(!$scope.selected_node.props.state){$scope.selected_node.props.state="空"}
- else if($scope.selected_node.props.state){
- if($scope.selected_node.props.state=="1"){$scope.selected_node.props.state="未审核"}
- else if($scope.selected_node.props.state=="2"){$scope.selected_node.props.state="已审核"}
- else if($scope.selected_node.props.state=="3"){$scope.selected_node.props.state="不匹配"}
- else if($scope.selected_node.props.state=="4"){$scope.selected_node.props.state="丢失"}
- };
- if(!$scope.selected_node.name){$scope.selected_node.name="空"};
- if(!$scope.selected_node.status){$scope.selected_node.statu="空"};
- if(!$scope.selected_node.props.useradmin){$scope.selected_node.props.useradmin="空"};
- toaster.pop({
- // type: 'info',
- // title: title,
- body: '<br/><p>内部代码:' + $scope.selected_node.uuid + '</p>' +
- '<p>配置标题:' + $scope.selected_node.name + '</p>' +
- '<p>状态:' + $scope.selected_node.status + '</p>' +
- // '<p>审核状态:' + $scope.selected_node.props.state + '</p>' +
- '<p>资产管理员:' + $scope.selected_node.props.meansmanager + '</p>',
- bodyOutputType: 'trustedHtml',
- timeout: 3000
- })
- }
- function mousemove() {
- if(!mousedown_node) return;
- // update drag line
- drag_line.attr('d', 'M' + mousedown_node.x + ',' + mousedown_node.y + 'L' + d3.mouse(this)[0] + ',' + d3.mouse(this)[1]);
- restart();
- }
- function mouseup() {
- if(mousedown_node) {
- // hide drag line
- drag_line
- .classed('hidden', true)
- .style('marker-end', '');
- }
- // because :active only works in WebKit?
- svg.classed('active', false);
- // clear mouse event vars
- resetMouseVars();
- }
- function spliceLinksForNode(node) {
- var toSplice = links.filter(function(l) {
- return (l.source === node || l.target === node);
- });
- toSplice.map(function(l) {
- links.splice(links.indexOf(l), 1);
- });
- }
- // only respond once per keydown
- var lastKeyDown = -1;
- function keydown() {
- //d3.event.preventDefault();
- if(lastKeyDown !== -1) return;
- lastKeyDown = d3.event.keyCode;
- // ctrl
- if(d3.event.keyCode === 17) {
- circle.call(force.drag);
- svg.classed('ctrl', true);
- }
- if(!selected_node && !selected_link) return;
- switch(d3.event.keyCode) {
- case 8: // backspace
- // case 46: // delete
- // if(selected_node) {
- // nodes.splice(nodes.indexOf(selected_node), 1);
- // spliceLinksForNode(selected_node);
- // } else if(selected_link) {
- // links.splice(links.indexOf(selected_link), 1);
- // }
- // selected_link = null;
- // selected_node = null;
- // restart();
- // break;
- case 66: // B
- if(selected_link) {
- // set link direction to both left and right
- selected_link.left = true;
- selected_link.right = true;
- }
- restart();
- break;
- case 76: // L
- if(selected_link) {
- // set link direction to left only
- selected_link.left = true;
- selected_link.right = false;
- }
- restart();
- break;
- case 82: // R
- if(selected_node) {
- // toggle node reflexivity
- selected_node.reflexive = !selected_node.reflexive;
- } else if(selected_link) {
- // set link direction to right only
- selected_link.left = false;
- selected_link.right = true;
- }
- restart();
- break;
- }
- }
- function keyup() {
- lastKeyDown = -1;
- // ctrl
- if(d3.event.keyCode === 17) {
- circle
- .on('mousedown.drag', null)
- .on('touchstart.drag', null);
- svg.classed('ctrl', false);
- }
- }
- // app starts here
- svg.on('mousedown', mousedown)
- .on('mousemove', mousemove)
- .on('mouseup', mouseup);
- d3.select(window)
- .on('keydown', keydown)
- .on('keyup', keyup);
- //restart();
- //GT 颜色与数值对照表
- function colors(sign){
- //num=num>20?num%20:parseInt(num);
- for(var i=0;i<labels.length;i++){
- var entity=labels[i];
- if(sign==entity.sign){
- return entity.color;
- }
- if(i==labels.length-1 && sign!=entity.sign){
- return '#ffeeee';
- }
- }
- }
- function postion(sign){
- for(var i=0;i<labels.length;i++){
- var entity=labels[i];
- if(sign==entity.sign){
- return i;
- }
- }
- return 1;
- }
- //添加设备
- function addnode() {
- //先编辑提交 到数据库添加一条数据得到ID 后显示节点
- var assetNo=d3.select("#nodeAssetNo").property('value');//资产编号
- var name=d3.select("#nodeName").property('value');//资产名称
- var type=d3.select("#nodeType").property('value');//资产类型
- var label=d3.select("#nodeLabel").property('value');//label
- var status=d3.select("#nodeStatus").property('value');//资产状态
-
- $.ajax({
- type: "POST",
- contentType:"application/json; charset=UTF-8",
- url: window.basePath+"/api/cmdb/ci",
- data: JSON.stringify({'name':name,'status':status,'type':type,'label':label,'assetNo':assetNo,props:selected_node.props }),
- dataType: "json",
- success:function(data){
- //成功后得到ID
- if(data.status==200){
- var node=data.data.node[0];
- node.x = 634;
- node.y = 265.5625;
-
- nodes.push(node);
- selected_node=node;
- restart();
- hideFeedForm(true);;
- }
-
- },
- error: function(data){jAlert("服务器请求异常",'提示');}
- });
-
-
-
- }
- //显示节点信息
- function shownode(){
- d3.select("#nodeAssetNo").property('value',selected_node.assetNo==undefined?"":selected_node.assetNo);//资产编号
- d3.select("#nodeName").property('value',selected_node.name==undefined?"":selected_node.name);//资产名称
- d3.select("#nodeType").property('value',selected_node.type==undefined?"":selected_node.type);//资产类型
- d3.select("#nodeLabel").property('value',selected_node.label==undefined?"":selected_node.label);//label
- for(var i=0;i<treeNodes.length;i++){
- if(selected_node.label==treeNodes[i].sign){
- d3.select("#citySel").property('value',treeNodes[i].label);
- break;
- }
- }
- d3.select("#nodeStatus").property('value',selected_node.status==undefined?"":selected_node.status);//资产状态
-
- //先移除div中原来的标签
- d3.select('#nodeTab').selectAll('tr').remove('tr');
-
- if(selected_node.label){
- var label=null;
- }
-
-
-
- }
- //关系列表
- // api_configure_data.fetchDataList('ciedgetype',{'idx':0,'sum':100}).then(function(response){
- // if(response){
- // $scope.linktypeOptions = response.list;
- // }
- // })
- //显示连线信息
- //
- // $scope.onchanges=function(modelData){
- // $scope.modelData=modelData;
- // $scope.refreshforms(modelData.id);
- // }
- $scope.meansrelaname=false;
- var openAside = function (model, linkTypes) {
- $scope.meansrelaname=true;
- $scope.onchanges=function(modelData){
- $scope.modelData=modelData;
- $scope.relationdata=[];
- $scope.refreshforms(modelData.id);
- }
- // api_configure_data.fetchDataList('ciedgetype',{'idx':0,'sum':100}).then(function(response){
- // if(response){
- $scope.linktypeOptions = linkTypes;
- if(model.id==-1){
-
- }else{
- for(var i=0;i<linkTypes.length;i++){
- if(linkTypes[i].type==model.name){
- $scope.refreshforms(linkTypes[i].id,model.props);
- $scope.modelData=linkTypes[i];
- break;
- }
- }
- }
- // }
- // })
- $scope.relationdata=[];
- $scope.addrelation=[];
- $scope.addData = function(model){
- var modalInstance = $modal.open({
- templateUrl: 'assets/views/means/tpl/relaform.html',
- controller: function($scope, $modalInstance, APIService,Alert){
- $scope.cancel = function() {
- $modalInstance.dismiss('cancel');
- };
- $scope.savercode = function(reladata){
- var re=/^([\u4E00-\u9FA5]|\w)*$/;
- if(re.test(reladata.label)){
- $modalInstance.close(reladata);
- }else{
- SweetAlert.swal("名称中含有非法字符", "名称只能为中文,字母及数字,请重新填写", "error");
- }
- }
- },
- resolve: {
- APIService: function(){
- return api_configure_data;
- },
-
- Alert: function(){
- return SweetAlert;
- }
- }
- });
- modalInstance.result.then(function(selectedItem) {
- $scope.relationdata.push(selectedItem);
- var fildata={'ciEdgetypeAttribute':{'fieldType':2,'label':selectedItem.label,'ciEdgeTypeId':model.id}}
- // var fildata={'cIEdgeType':{'label':selectedItem.label,'fieldType':2,'ciEdgeType':{'id':model.id}}};
- api_configure_data.addData('ciEdgetypeAttribute',fildata).then(function(data){
- // var fielddata=selectedItem;
- // angular.extend(fielddata,{'key':1})
- // $scope.addrelation.push(fielddata);
- if(data.status==200){
- var fielddata=selectedItem;
- angular.extend(fielddata,{'key':data.data.labelKey})
- $scope.addrelation.push(fielddata);
- }else{
- }
- })
- });
- }
- $scope.removeopen=false;
- // sessionStorage['removeopen']=false;
- $scope.removeData = function(){
- $scope.removeopen=!$scope.removeopen;
- // vm.tabs[1]['removeopen']=$scope.removeopen;
- console.log(vm.tabs)
- // sessionStorage['removeopen']=$scope.removeopen;
- }
- $scope.cancel=function(item){
- for(var i=0;i<$scope.relationdata.length;i++){
- if($scope.relationdata[i].label==item.label){
- // delete $scope.relationdata[i];
- $scope.relationdata.splice(i, 1);
- console.log($scope.relationdata);
- }
- }
- }
- $scope.closechange=function(){
- $scope.removeopen=false;
- }
- vm.submit = function(data,style){
- console.log($scope.relationdata)
- if (vm.form.$$parentForm.$valid) {
- var tomdata=data;
- var addnews={};
- for(var i=0;i<$scope.addrelation.length;i++){
- addnews[$scope.addrelation[i].key]=$scope.addrelation[i].name;
- }
- angular.extend(tomdata,addnews);
- for(var i=0;i<$scope.relationdata.length;i++){
- tomdata[$scope.relationdata[i].key]=$scope.relationdata[i].name;
- }
- if(model.id==-1){
- api_cmdb.createRef({'id':model.id,'name':$scope.modelData.type,'source':model.source.id,'target':model.target.id,'left':model.left,'right':model.right,'props':tomdata}).then(function(response){
- if(response&&response.status==200){
- // $scope.refreshforms(data.id);
- SweetAlert.swal("新建关系成功!", "数据已经保存", "success");
- }else{
- SweetAlert.swal("新建关系失败!", "数据未保存", "error");
- }
- })
- }else{
- api_cmdb.putRef({'id':model.id,'name':$scope.modelData.type,'source':model.source.id,'target':model.target.id,'left':model.left,'right':model.right,'props':tomdata},model.id).then(function(response){
- if(response&&response.status==200){
- console.log(linkTypes)
- // api_configure_data.fetchDataList('ciedgetype',{'idx':0,'sum':100}).then(function(result){
- // if(result){
- for(var i=0;i<linkTypes.length;i++){
- if(linkTypes[i].type==response.data.edge[0].name){
- // $scope.refreshforms(result.list[i].id,data);
- // model=response.data.edge[0].props;
- console.log(links);
- for(var i=0;i<links.length;i++){
- if(links[i].name==model.name){
- links[i].props=response.data.edge[0].props;
- links[i].id=response.data.edge[0].id;
- break;
- }
- }
- selected_link=response.data.edge[0];
- break;
- }
- }
-
- // }
- // })
- SweetAlert.swal("修改成功!", "数据已经保存", "success");
- }else{
- SweetAlert.swal("修改失败!", "数据未保存", "error");
- }
- })
- }
-
- }
- }
- // var modalInstance = $aside.open({
- // templateUrl: 'assets/views/system/tpl/asideContent.html',
- // placement: 'right',
- // size: 'sm',
- // backdrop: true,
- // controller: function ($scope, $modalInstance, ModelData, optionLinkTypes) {
- // $scope.modelData = ModelData;
-
- // $scope.linktypeOptions = optionLinkTypes;
- // if($scope.modelData.name!=""){
- // angular.forEach($scope.linktypeOptions,function(item){
- // if(item.type==$scope.modelData.name){
- // $scope.modelData.linkName=item;
- // }
- // })
- // }
- // $scope.ok = function (e) {
- // $modalInstance.close($scope.modelData);
- // //e.stopPropagation();
- // };
- // $scope.cancel = function (e) {
- // $modalInstance.dismiss();
- // //e.stopPropagation();
- // };
- // },
- // resolve: {
- // ModelData: function(){
- // return model;
- // },
- // optionLinkTypes: function(){
- // return linkTypes;
- // }
- // }
- // });
- // modalInstance.result.then(function (selectedItem) {
- // //TODO create Edge
- // console.log(selectedItem);
- // if(selectedItem.id==-1){
- // api_cmdb.createRef({'id':selectedItem.id,'name':selectedItem.linkName.type,'source':selectedItem.source.id,'target':selectedItem.target.id,'left':selectedItem.left,'right':selectedItem.right}).then(function(response){
- // if(response&&response.status==200){
- // //model.name=selectedItem.linkName.type;
- // var link = response.data.edge[0];
- // for (var j = 0; j < nodes.length; j++) {
- // if (link.source == nodes[j].id) {
- // link.source = nodes[j];
- // }
- // if (link.target == nodes[j].id) {
- // link.target = nodes[j];
- // }
- // }
- // links.push(link);
- // // selected_link.name=linkName;
- // // selected_link.cost=linkCost;
- // restart();
- // }else{
- // }
- // })
- // }else{
- // api_cmdb.putRef({'id':selectedItem.id,'name':selectedItem.linkName.type,'source':selectedItem.source.id,'target':selectedItem.target.id,'left':selectedItem.left,'right':selectedItem.right}, selectedItem.id).then(function(response){
- // if(response&&response.status==200){
- // //model=selectedItem;
- // angular.forEach(links,function(link,index){
- // if(link.name == model.name){
- // links[index]=response.data.edge[0];
- // for (var j = 0; j < nodes.length; j++) {
- // if (links[index].source == nodes[j].id) {
- // links[index].source = nodes[j];
- // }
- // if (links[index].target == nodes[j].id) {
- // links[index].target = nodes[j];
- // }
- // }
- // }
- // })
- // restart();
- // }else{
- // }
- // })
- // }
-
- // }, function () {
- // //console.log('Modal dismissed at: ' + new Date());
- // });
- };
- //
- //
- function showLink(){
- var linkeName = $scope.linkName = selected_link.name==undefined?"":selected_link.name;
- $scope.linkCost = selected_link.cost==undefined?"":selected_link.cost;
- // d3.select("#linkName").property('value',selected_link.name==undefined?"":selected_link.name);
- // d3.select("#linkCost").property('value',selected_link.cost==undefined?"":selected_link.cost);
-
- //var linkeName=d3.select("#linkName").property('value');
- //先移除div中原来的标签
- d3.select('#linkTab').selectAll('tr').remove('tr');
-
- var linkId;
- //sourceTYpe=2 and sourceId=连线nameId
- //当前选择的连线name Id
- for(var i=0;i<linkType.length;i++){
- if(linkeName==linkType[i].type){
- linkId=linkType[i].id;
- }
- }
- var props=selected_link.props;
- var keys=[];
- for(var key in props){
- keys.push(key);
- }
- // //写入固定属性
- // for(var i=0;i<params.length;i++){
- // var p=params[i];
- // var num=0;
- // for(var j=0;j<keys.length;j++){
- // if(p.sourceType==2 && p.sourceId==linkId && p.key==keys[j]){//连线已有属性
- // num++;
- // break;
- // }
- // }
- // if(p.sourceType==2 && p.sourceId==linkId && p.fix==1 && num==0){//连线 中没有的固定属性
- // selected_link['props'][p.key]='';
- // }
-
- // }
- keys=[];
- for(var key in selected_link.props){
- keys.push(key);
- }
- if(keys){
- d3.select('#linkTab').selectAll('tr')
- .data(keys).enter()
- .append('tr')//.nextSibling
- .attr('id',function(d){
- return 'trLink'+d;
- }).html(function(d){
- var str="";
- if(d==""){//新增后props 属性
- var strS="";
-
- strS='<input type="text" id="inputLink'+d+'" value="'+props[d]+'" disabled/>';
- str+='<td style="padding-left: 0px;width:145px;"><span id="spanLink'
- +d+'" style="width:50px;text-align:right;">未定义:</span><input type="hidden" id="selectLink'+
- d+'" style="width: 90px;margin-left: 52px;"/></td>'+
- '<td style="padding-left: 21px;">'+//111111111111111111111 padding-left: 60px;
- strS +'</td><td>'
- +'<input id="edtBtnLink'+d+'" type="button" name="edtBtn" style="background-image:url(css/img/tup/xiug.jpg);width:22px;height:22px;" onclick="edtBtnLinkClk(\'text\',\''
- +d+'\',\'未定义\',\'0\')" />'
- +' <input type="button" value="" style="background-image:url(css/img/tup/del.jpg);width:22px;height:22px;" onclick=\'delBtnLinkClk("'+d+'")\'/></td>';
- return str;
- }
-
- for(var j=0;j<params.length;j++){
- var p=params[j];
- if((p.sourceType==2 && d==p.key && p.sourceId==linkId)){//新增加行
- var strS="";
- if(p.valueType=="date"){
- strS='<input id="inputLink'+d+'" placeholder="请输入日期" style="width: 151px;" class="laydate-icon" onClick="laydate({istime: true, format: \'YYYY-MM-DD hh:mm:ss\'})" value="'+props[d]+'" disabled>';
- }else{
- strS='<input type="text" id="inputLink'+d+'" value="'+props[d]+'" disabled/>';
-
- }
- if(p.fix==1){//固定属性 不允许编辑显示属性名 不允许删除
- //类型设置 读取JSON string date int float 22222222222222222padding-left: 21px;
- str+='<td style="width:145px;"><span id="spanLink'+d+'">'+p.descName+':</span></td>'+
- '<td style="padding-left: 21px;">'+strS+'</td><td>'+'<input id="edtBtnLink'+d
- +'" type="button" name="edtBtn" style="background-image:url(css/img/tup/xiug.jpg);width:22px;height:22px;" onclick="edtBtnLinkClk(\''
- +p.valueType+'\',\''+d+'\',\''+p.descName+'\',\''+p.fix+'\')" />'
- +' </td>';
- break;
- }else{
- //类型设置 读取JSON string date int float
- str+='<td style="width:145px;"><span id="spanLink'
- +d+'">'+p.descName+':</span><input type="hidden" id="selectLink'+
- d+'" style="width: 90px;margin-left: 52px;"/></td>'+
- '<td style="padding-left: 21px;">'+//333333333333333 padding-left: 21px;
- strS
- +'</td><td>'
- +'<input id="edtBtnLink'+d+'" type="button" name="edtBtn" style="background-image:url(css/img/tup/xiug.jpg);width:22px;height:22px;" onclick="edtBtnLinkClk(\''
- +p.valueType+'\',\''+d+'\',\''+p.descName+'\',\''+p.fix+'\')" />'
- +' <input type="button" value="" style="background-image:url(css/img/tup/del.jpg);width:22px;height:22px;" onclick=\'delBtnLinkClk("'+d+'")\'/></td>';
- break;
- }
-
-
- }
- }
- return str;
- });
- }
- hideLinkForm(false);
- }
- //删除(修改状态为报废)
- function delnode_update(){
- if(selected_node || selected_link){
- jConfirm('确定删除?', '提示', function(r) {
- if(r){
- if(selected_node){//删除配置
- //节点ID(节点删除执行成功,数据库节点未删除 ,删除节点关系时执行失败)
- var id=selected_node.id;
- var name=selected_node.name;
- var type=selected_node.type;//资产类型
- var label=selected_node.label; //资产类型
- var assetNo=selected_node.assetNo;//资产编号
- var props =selected_node.props;
- var status=CMConstants.DISCARDE;
- //删除后,状态变为废弃
- $.ajax({
- type: "PUT",
- contentType:"application/json; charset=UTF-8",
- url: window.basePath+"/api/cmdb/ci/"+id,
- data: JSON.stringify({'id':id,'name':name,'status':status,'type':type,'label':label,'assetNo':assetNo,'props':props}),
- dataType: "json",
- success:function(data){
- if(data.status==200){
-
- jAlert("删除成功!",'提示');
-
- selected_node.type=type;//资产类型
- selected_node.status=status;
- selected_node.label=label; //资产类型
- selected_node.assetNo=assetNo; //资产编号
- selected_node.props=props;
- selected_node.name=name;
- restart();
- query(label,"");
- //shownode();
- }
-
- },
- error: function(data){jAlert("服务器请求异常",'提示');}
- });
-
- }
-
- }else{
- jAlert("请求异常",'提示');
- }
-
- });
-
- }else{
- jAlert('请先选择删除项!','提示');
- }
-
- }
- //删除
- function delnode(){
- if(selected_node || selected_link){
- jConfirm('确定删除?', '提示', function(r) {
- if(r){
- if(selected_node){//删除配置
- //节点ID(节点删除执行成功,数据库节点未删除 ,删除节点关系时执行失败)
- var id=selected_node.id;
- //先删除节点关系
- d3.xhr(window.basePath+"/api/cmdb/ci/"+id+"/refs").send("DELETE", function(error, json) {
- if (!error){
- if(json.status==200){
- var edge=JSON.parse(json.responseText).data.edge;
- for(var i=0;i<edge.length;i++){
- for(var j=0;j<links.length;j++){
- if(edge[i].id==links[j].id){
- links.splice(j, 1);
- break;
- }
- }
-
- }
- //再删除节点
- d3.xhr(window.basePath+"/api/cmdb/ci/"+id).send("DELETE", function(error, json) {
- if (!error){
- if(json.status==200){
- //删除节点
- nodes.splice(nodes.indexOf(selected_node), 1);
- jAlert("删除成功!",'提示');
- hideFeedForm(true);;
- }
- restart();
- }else{
- jAlert("请求异常",'提示');
- }
- });
- }
-
-
- }else{
- jAlert("请求异常",'提示');
- }
- });
-
-
-
- }
- //用户删除关系
- if(selected_link){
- //得到关系ID 删除关系
- var id=selected_link.id;
- d3.xhr(window.basePath+"/api/cmdb/edge/"+id).send("DELETE", function(error, json) {
- if (!error){
- links.splice(links.indexOf(selected_link), 1);
- jAlert("删除成功!",'提示');
- hideLinkForm(true);
- restart();
- }else{
- jAlert("请求异常",'提示');
- }
- });
- }
- }
-
- });
- }else{
- jAlert('请先选择删除项!','提示');
- }
-
- }
- var CI ={};
- CI.add = addnode;
- window.CI = CI;
- d3.select("#traversal").selectAll('a').data([{name:'遍历',id:'traversalBtn'}]).enter()
- .append('a')
- .html(function (d) { return d.name; })
- .on('click', function (d) {
- if(d.id=="traversalBtn"){
- if(selected_node == null){
- alert("没有选择节点。。。");
- }else{
- $.ajax({
- type: "GET",
- url: window.basePath+"/api/cmdb/traversal/"+selected_node.assetNo,
- dataType: "json",
- success:function(json){
- var d=json.data;
- var node=d.node;
- var link=d.edge;
- var tempNode=[];
- var tempLink=[];
- //nodes 或者links 要去重
- for(var i=0;i<node.length;i++){
- var tmp=0;
- for(var j=0;j<nodes.length;j++){
- if(node[i].id==nodes[j].id){
- tmp++;
- break;
- }
- }
- if(tmp==0){
- tempNode.push(node[i]);
- }
- }
-
- for(var i=0;i<link.length;i++){
- var tmp=0;
- for(var j=0;j<links.length;j++){
- if(link[i].id==links[j].id){
- tmp++;
- break;
- }
- }
- if(tmp==0){
- tempLink.push(link[i]);
- }
- }
- //数据写入页面
- for(var i=0;i<tempNode.length;i++){//nodes 不清空
- nodes.push(tempNode[i]);
- }
- for(var i=0;i<tempLink.length;i++){//link 不清空
- links.push(tempLink[i]);
- }
- //links转换
- for(var i=0;i<links.length;i++){
- for(var j=0;j<nodes.length;j++){
- if(links[i].source==nodes[j].id){
- links[i].source=nodes[j];
- }
- if(links[i].target==nodes[j].id){
- links[i].target=nodes[j];
- }
- }
- }
-
- restart();
- },
- error:function(){alert("访问服务器出错!");}
- });
- }
- }
- });
- d3.select("#layout").selectAll('a').data([{name:'布局',id:'layoutBtn'}]).enter()
- .append('a')
- .html(function (d) { return d.name; })
- .on('click', function (d) {
- if(d.id=="layoutBtn"){
- var k = Math.sqrt(nodes.length / (width * height));
- //var len = labels.length;
- // nodes.forEach(function(o, i) {
- // //console.log( "postion:" + postion(o.label) % len);
- // o.x += postion(o.label) & 1 ? 140 : -140;
- // o.y += postion(o.label) & 2 ? 140 : -140;
- // console.log("[" +o.id + "-" + o.name + "]:" + o.label + "(" + o.x + "," + o.y + ");");
- // });
- force.charge((-10/k)*1.5);
- force.gravity(100*k);
- force.resume();
- }
- });
- //添加node 点击事件
- d3.select("#addsss").selectAll('a').data([{name:'添加',id:'addBtn'}]).enter()
- .append('a')
- .html(function (d) { return d.name; })
- .on('click', function (d) {
- if(d.id=="addBtn"){
- selected_node={id:-1};
-
- //内容置空
- d3.select("#nodeAssetNo").property('value','');//资产编号
- d3.select("#nodeName").property('value','');//资产名称
- d3.select("#nodeType").property('value','');//资产类型
- d3.select("#nodeLabel").property('value','');//label
- d3.select("#nodeStatus").property('value','');//资产状态
- d3.select('#nodeTab').selectAll('tr').remove();
-
- show("feedbox");return false;
- }
- });
- //删除
- d3.select("#delsss").selectAll('a').data([{name:'删除',id:'delBtn'}]).enter()
- .append('a')
- .html(function (d) { return d.name; })
- .on('click', function (d) {
- if(d.id=="delBtn"){
- //delnode();
- delnode_update();
- }
- });
- //修改
- d3.select("#uppsss").selectAll('a').data([{name:'修改',id:'edtBtn'}]).enter()
- .append('a')
- .html(function (d) { return d.name; })
- .on('click', function (d) {
- if(d.id=="edtBtn"){
- if(selected_node!=null){
- show("feedbox");
- return false;
- }else{
- jAlert("请选择设备",'提示');
- }
- }
- });
- //节点提交
- d3.select("#subBtn").on('click',function(d){
- var assetNo=d3.select("#nodeAssetNo").property('value');//资产编号
- var label=d3.select("#nodeLabel").property('value');//label
-
- var props =selected_node.props;
- for(var key in props){
- if(key==""){
- jAlert("您有未定义属性,请删除或编辑!",'提示');
- return;
- }
- }
- if(assetNo==""){
- jAlert("请输入资产编号!",'提示');
- return;
- }else if(label==null ||label==""){
- jAlert("请选择资产类型!",'提示');
- return;
- }else{
- //添加或者更新
- if(selected_node.id==-1){//添加
- addnode();
- }else{//更新
- var idVal=selected_node.id;
- var name=d3.select("#nodeName").property('value');//资产名称
- var type=d3.select("#nodeType").property('value');//资产类型
-
- var status=d3.select("#nodeStatus").property('value');//资产状态
- //节点提交
- $.ajax({
- type: "PUT",
- contentType:"application/json; charset=UTF-8",
- url: window.basePath+"/api/cmdb/ci/"+idVal,
- data: JSON.stringify({'id':idVal,'name':name,'status':status,'type':type,'label':label,'assetNo':assetNo,'props':selected_node.props }),
- dataType: "json",
- success:function(data){
- if(data.status==200){
- jAlert("更新成功!",'提示');
- selected_node.assetNo=assetNo;
- selected_node.name=name;
- selected_node.type=type;
- selected_node.label=label;
- selected_node.status=status;
-
- restart();
- //shownode();
- }
-
- },
- error: function(data){jAlert("服务器请求异常",'提示');}
- });
- }
- // restart();
- }
-
- });
- //连线提交
- d3.select("#subBtn1").on('click',function(d){
- var linkName=d3.select("#linkName").property('value');
- var linkCost=d3.select("#linkCost").property('value');
- var idVal=selected_link.id;
-
- var props =selected_link.props;
- for(var key in props){
- if(key==""){
- jAlert("您有未定义属性,请删除或编辑!",'提示');
- return;
- }
- }
-
- if(idVal==-1){//添加
- selected_link.name=linkName;
- //selected_link.status=linkStatus;
- selected_link.cost=linkCost;
- var l=selected_link;
- $.ajax({
- type: "POST",
- contentType:"application/json; charset=UTF-8",
- url: window.basePath+"/api/cmdb/edge",
- data: JSON.stringify({'id':l.id,'name':l.name,'status':l.status,'cost':l.cost,'left':l.left,'right':l.right,'source':l.source.id,'target':l.target.id,'props':l.props}),
- dataType: "json",
- success:function(data){
- if(data.status==200){
- var link=data.data.edge[0];
- jAlert("添加成功!",'提示');
- selected_link.id=link.id;
-
- restart();
- hideLinkForm(true);
- }
-
- },
- error: function(data){jAlert("服务器请求异常",'提示');}
- });
- }else{
- // 连线提交
- $.ajax({
- type: "PUT",
- contentType:"application/json; charset=UTF-8",
- url: window.basePath+"/api/cmdb/edge/"+idVal,
- data: JSON.stringify({'id':idVal,'name':linkName,'cost':linkCost,'props':selected_link.props }),
- dataType: "json",
- success:function(data){
- if(data.status==200){
- jAlert("更新成功!",'提示');
-
- selected_link.name=linkName;
- //selected_link.status=linkStatus;
- selected_link.cost=linkCost;
-
- restart();
- showLink();
- }
-
- },
- error: function(data){jAlert("服务器请求异常",'提示');}
- });
- }
- // restart();
-
- });
- //全局变量 正在编辑的属性ID
- var etdBtnId="";
- //编辑按钮点击事件
- function edtBtnClk(type,etdId,value,fix){
- var v=d3.select('#edtBtn'+etdId).property('name');
- if(v=='edtBtn'){
- d3.select('#input'+etdId).property('disabled','');//可编辑
- if(type=="date"){//加载日期
-
- //$("#input"+etdId).datepicker({dateFormat: 'yy-mm-dd'});$.datepicker.regional[ "zh-cn" ];
- }else if(type=='int'){//只能为整型
- d3.select('#input'+etdId).on('keyup',function(){
- this.value= this.value.replace(/[^\d]/g, '');
- });
- }else if(type=='float'){
- d3.select('#input'+etdId).on('keyup',function(){
- this.value= this.value.replace(/[^\d.]/g,'');
- });
- }
- //span文字隐藏 select2显示
- // d3.select('.addtd').classed('addtds');
- if(fix==0){//动态属性 显示名称隐藏
- d3.select('#span'+etdId).attr('style','display:none');
- }
-
- //d3.select('tr#tr'+etdId + 'td + td').attr('style','padding-left:0px;');
-
- //$('#select'+etdId).select2({ multiple: true, data:selectData});//分号选择
- //根据用户选择的label 和节点类型查询
- var t=d3.select('#nodeLabel').property('value');
- var typeId="";//选中的资源label的ID
- for(var i=0;i<labels.length;i++){
- if(labels[i].sign==t){
- typeId=labels[i].id;
- break;
- }
- }
- var res=[];
-
- //改变属性
- d3.select('#edtBtn'+etdId).property('name','edt');
- d3.select('#edtBtn'+etdId).attr('style','background-image:url(css/img/tup/queding.jpg);width:22px;height:22px;');
-
- $('#select'+etdId).select2({
- ajax: {
- url: window.basePath+'/api/cm/findByPro',//sourceType=1 节点
- type:'GET',
- dataType: 'json',
- data: function(){
- return {
- sourceType : 1,
- sourceId: typeId
- };
- },
- results: function (data) {
- res=data;
-
- var bindData = [];
- for(var i = 0;i < data.length;i++){
- bindData.push({'id':data[i].key,'text':data[i].descName});
- }
-
- return {results: bindData};
- }
- },
- createSearchChoice:function(term, data) { if ($(data).filter(function() { return this.text.localeCompare(term)===0; }).length===0) {return {id:term, text:term};} },
- //multiple: true,//单选 or 多选
-
- }).on("select2-selecting", function(e) {
-
- etdBtnId=this.id.substr('select'.length);
- var result = [];
- for(var i = 0;i < res.length;i++){
- result.push({'id':res[i].key,'text':res[i].descName});
- }
-
- if(result.length==0){
- //置空
- d3.select("#proType").property('value','');
- d3.select("#proNo").property('value','');
-
- d3.select('#overlay').style('display','block');
- d3.select('#win').style('display','block');
- return;
- }
- for(var i=0;i<result.length;i++){
- if(e.choice.id==result[i].id && e.choice.text==result[i].text){//用户选择的是已有的属性
- //写入nodes
- var props=selected_node.props;
- // 用户选择不能重复
- for(var key in props){
- if(e.val==key && e.val!=etdId){
- jAlert("此配置已有此属性,请另外选择!",'提示',function(){
- $('#select'+etdId).select2('data', {id:etdId,text:value});
-
- });
- return;
- }
- }
- //用户选择验证通通过 写入到nodes中
- for(var p in props){
- if(p==etdId){
- var text=props[p];
- delete props[p];
- selected_node.props[e.choice.id]=text;
- shownode();//此处不重新加载(shownode) 会有问题
- return;
- }
- }
-
- }else if((i==result.length-1) && (e.choice!=result[i])){//用户新输入的
-
- //置空
- d3.select("#proType").property('value','');
- d3.select("#proNo").property('value','');
-
- d3.select('#overlay').style('display','block');
- d3.select('#win').style('display','block');
- return;
- }
- }
- });
- //绑定默认值
- $('#select'+etdId).select2('data', {id:etdId,text:value});
- }else{//确定
- d3.select('#edtBtn'+etdId).property('name','edtBtn');
- d3.select('#edtBtn'+etdId).attr('style','background-image:url(css/img/tup/xiug.jpg);width:22px;height:22px;');
-
- //数据写入nodes
- var props=selected_node.props;
- for(var key in props){
- if(key==etdId){
- var text=d3.select('#input'+etdId).property('value');
- var k=null;
- if(fix==0){
- k=d3.select('#select'+etdId).property('value');
- }else{
- k=etdId;
- }
- delete props[etdId];
- props[k]=text;
- shownode();
- return;
- }
- }
- }
- }
- //编辑按钮点击事件
- function edtBtnLinkClk(type,etdId,value,fix){
- var linkeName=d3.select('#linkName').property('value');
- if(linkeName==""){
- jAlert("请先选取连线名称!",'提示');
- return;
- }
- var v=d3.select('#edtBtnLink'+etdId).property('name');
-
- if(type=="date"){//加载日期
- // $("#inputLink"+etdId).datepicker({dateFormat: 'yy-mm-dd'});$.datepicker.regional[ "zh-cn" ];
- }else if(type=='int'){//只能为整型
- d3.select('#inputLink'+etdId).on('keyup',function(){
- this.value= this.value.replace(/[^\d]/g, '');
- });
- }else if(type=='float'){
- d3.select('#inputLink'+etdId).on('keyup',function(){
- this.value= this.value.replace(/[^\d.]/g,'');
- });
- }
-
- if(v=='edtBtn'){
- d3.select('#inputLink'+etdId).property('disabled','');//可编辑
- //改变属性
- d3.select('#edtBtnLink'+etdId).attr('style','background-image:url(css/img/tup/queding.jpg);width:22px;height:22px;');
- d3.select('#edtBtnLink'+etdId).property('name','edt');
- if(fix==0){//动态属性隐藏
- //span文字隐藏 select2显示
- d3.select('#spanLink'+etdId).attr('style','display:none');
- }
-
-
- //根据用户选择的name(连线名称) 查询
-
- var linkId;//选中的name的ID 即属性表里的sourceId
- for(var i=0;i<linkType.length;i++){
- if(linkeName==linkType[i].type){
- linkId=linkType[i].id;
- }
- }
- var res=[];
- $('#selectLink'+etdId).select2({
- ajax: {
- url: window.basePath+'/api/cm/findByPro',//sourceType=2 连线
- type:'GET',
- dataType: 'json',
- data: function(){
- return {
- sourceType : 2,
- sourceId: linkId
- };
- },
- results: function (data) {
- res=data;
-
- var bindData = [];
- for(var i = 0;i < data.length;i++){
- bindData.push({'id':data[i].key,'text':data[i].descName});
- }
-
- return {results: bindData};
- }
- },
- createSearchChoice:function(term, data) { if ($(data).filter(function() { return this.text.localeCompare(term)===0; }).length===0) {return {id:term, text:term};} },
-
- }).on("select2-selecting", function(e) {
-
- etdBtnId=this.id.substr('selectLink'.length);
- var result = [];
- for(var i = 0;i < res.length;i++){
- result.push({'id':res[i].key,'text':res[i].descName});
- }
-
- if(result.length==0){//如果没有属性 弹出添加属性框
- //置空
- d3.select("#proType").property('value','');
- d3.select("#proNo").property('value','');
-
- d3.select('#overlay').style('display','block');
- d3.select('#win').style('display','block');
- return;
- }
-
- //console.log ("selecting val="+ e.val+" choice="+ JSON.stringify(e.choice));
- for(var i=0;i<result.length;i++){
- if(e.choice.id==result[i].id && e.choice.text==result[i].text){//用户选择的是已有的属性
- //nodes props
- var props=selected_link.props;
- // 用户选择不能重复
- for(var key in props){
- if(e.val==key && e.val!=etdId){
-
- jAlert("此配置已有此属性,请另外选择!",'提示',function(){
- //绑定默认值
- $('#selectLink'+etdId).select2('data', {id:etdId,text:value});
- });
-
- return;
- }
- }
- //用户选择验证通过 写入到nodes中
- for(var p in props){
- if(p==etdId){
- delete props[etdId];
- selected_link.props[e.choice.id]=e.choice.text;
-
- showLink();//此处不重新加载(shownode) 会有问题
- return;
- }
- }
-
- }else if((i==result.length-1) && (e.choice!=result[i])){//用户新输入的
-
- //置空
- d3.select("#proType").property('value','');
- d3.select("#proNo").property('value','');
-
- d3.select('#overlay').style('display','block');
- d3.select('#win').style('display','block');
- return;
- }
- }
- });;
-
- //绑定默认值
- $('#selectLink'+etdId).select2('data', {id:etdId,text:value});
-
- }else{//确定
- d3.select('#edtBtnLink'+etdId).property('name','edtBtn');
- d3.select('#edtBtnLink'+etdId).attr('style','background-image:url(css/img/tup/xiug.jpg);width:22px;height:22px;');
- //数据写入links
- var props=selected_link.props;
- for(var key in props){
- if(key==etdId){
- var k=null;
- var text=d3.select('#inputLink'+etdId).property('value');
- if(k==0){
- k=d3.select('#selectLink'+etdId).property('value');
- }else{
- k=etdId;
- }
-
- delete props[etdId];
- props[k]=text;
- showLink();
- return;
- }
- }
- showLink();
- }
- }
- //节点属性删除按钮点击事件
- function delBtnClk(delId){
- jConfirm('确定删除?', '提示', function(r) {
- if(r){
- //提交的时候只删除数据,不删除属性表数据
- //删除表格
- d3.select('#tr'+delId).selectAll('td').remove('td');
- //删除node属性
- var props=selected_node.props;
- for(var key in props){
- if(delId==key){
- delete props[key];//删除node中元素
- return;
- }
- }
- }
- });
-
- }
- //连线属性删除按钮点击事件
- function delBtnLinkClk(delId){
- jConfirm('确定删除?', '提示', function(r) {
- //提交的时候只删除数据,不删除属性表数据
- if(r){
- //删除表格
- d3.select('#trLink'+delId).selectAll('td').remove('td');
- //删除node属性
- var props=selected_link.props;
- for(var key in props){
- if(delId==key){
- delete props[delId];//删除link中元素
- return;
- }
- }
- }
- });
- }
- //连线名 的选择事件 选择后将 值写入到 selected_node
- d3.select('#linkName').on('change',function(){
- var num=0;
- for(var key in selected_link.props){
- num++;
- break;
- }
- var tType=this;
- if(num>0){
- jConfirm('更换名称选项,动态属性将会被删除,是否继续?', '提示', function(r) {
- if(r){
- selected_link.name=tType.value;
- selected_link.props={};
- showLink();
-
- selected_link['props']={};
- fixPro(tType.value);
- }else{
- tType.value=selected_link.name;
- return;
- }
- });
-
-
- }else{
- selected_link.name=tType.value;
- selected_link['props']={};
- fixPro(tType.value);
- }
- });
- //加载固定属性(节点/连线)
- function fixPro(label){
- if(selected_node){//操作节点
- var labelId=null;
- //根据选择‘节点’的label 查询label的ID
- d3.xhr(window.basePath+"/api/cm/findLabel?sign="+label).send("GET",
- function(error, json) {
- if (!error){
- labelId =JSON.parse(json.responseText).id;
- $.ajax({
- type: "GET",
- url: window.basePath+"/api/cm/findByPro",
- data: {sourceType : 1,sourceId: labelId},
- dataType: "json",
- success:function(data){
-
- var keys=[];
- for(var i = 0;i < data.length;i++){
- var entity=data[i];
- if(entity.fix==1){
- var key=entity.key;
- keys.push(key);
- selected_node['props'][key]='';
- }
- }
- //先移除div中原来的标签
- d3.select('#nodeTab').selectAll('tr').remove('tr');
- d3.select('#nodeTab').selectAll('tr')
- .data(keys).enter()
- .append('tr')
- .attr('id',function(d){
- return 'tr'+d;
- })
- .html(function(d){ //undefined
- var str="";
- //新增加行
- var strS="";
- for(var i = 0;i < data.length;i++){
- var entity=data[i];
- if(entity.fix==1 && entity.key==d){//固态属性 并且key相等
-
- if(entity.valueType=="date"){
- strS='<input id="input'+d+'" placeholder="请输入日期" style="width: 151px;" class="laydate-icon" onClick="laydate({istime: true, format: \'YYYY-MM-DD hh:mm:ss\'})" value="'
- +'" disabled>';
- }else{
- strS='<input type="text" id="input'+d+'" value="" disabled/>';
- }
- //类型设置 读取JSON string date int float
- str+='<td style="padding-left: 0px;width:145px;"><span id="span'
- +d+'">'+entity.descName+':</span></td>'+
- '<td style="padding-left: 21px;">'+strS+'</td><td>'+'<input id="edtBtn'+d
- +'" name="edtBtn" type="button" style="background-image:url(css/img/tup/xiug.jpg);width:22px;height:22px;" onclick="edtBtnClk(\''
- +entity.valueType+'\',\''+d+'\',\''+entity.descName+'\',\''+entity.fix+'\')" />'+' </td>';
- break;
- }
- }
-
- return str;
-
- });
- },
- error:function(data){jAlert("服务器访问异常!",'提示');}
- });
- }
- });
- }else if(selected_link){//操作连线
- var sourceId=null;
- for(var i=0;i<linkType.length;i++){
- if(label==linkType[i].type){
- sourceId=linkType[i].id;
- }
- }
- if(sourceId!=null){
- $.ajax({
- type: "GET",
- url: window.basePath+"/api/cm/findByPro",
- data: {sourceType : 2,sourceId: sourceId},
- dataType: "json",
- success:function(data){
-
- var keys=[];
- for(var i = 0;i < data.length;i++){
- var entity=data[i];
- if(entity.fix==1){
- var key=entity.key;
- keys.push(key);
- selected_link['props'][key]='';
- }
- }
- //先移除div中原来的标签
- d3.select('#linkTab').selectAll('tr').remove('tr');
- d3.select('#linkTab').selectAll('tr')
- .data(keys).enter()
- .append('tr')
- .attr('id',function(d){
- return 'tr'+d;
- })
- .html(function(d){ //undefined
- var str="";
- //固态属性
- var strS="";
- for(var i = 0;i < data.length;i++){
- var entity=data[i];
- if(entity.fix==1 && entity.key==d){//固态属性 并且key相等
- if(entity.valueType=="date"){
- strS='<input id="inputLink'+d+'" placeholder="请输入日期" style="width: 151px;" class="laydate-icon" onClick="laydate({istime: true, format: \'YYYY-MM-DD hh:mm:ss\'})" value="" disabled>';
- }else{
- strS='<input type="text" id="inputLink'+d+'" value="" disabled/>';
- }
- //类型设置 读取JSON string date int float
-
- str+='<td style="padding-left: 0px;width:145px;"><span id="spanLink'+d+'">'+entity.descName+':</span></td>'+
- '<td style="padding-left: 21px;">'+strS+'</td><td>'+'<input id="edtBtnLink'+d
- +'" type="button" name="edtBtn" style="background-image:url(css/img/tup/xiug.jpg);width:22px;height:22px;" onclick="edtBtnLinkClk(\''
- +entity.valueType+'\',\''+d+'\',\''+entity.descName+'\',\''+entity.fix+'\')" />'
- +' </td>';
- break;
- }
- }
- return str;
-
- });
- },
- error:function(data){jAlert("服务器访问异常!",'提示');}
- });
- }
- }
-
- }
- //节点'添加属性' 点击事件
- d3.select('#addBtn').on('click',function(){
- var label=d3.select('#nodeLabel').property('value');
-
- if(""!=label){
- addRow();
- }else{
- jAlert('请先选择资产类型!','提示');
- }
-
- });
- //添加属性行
- function addRow(){
- if(selected_node.props){
-
- selected_node.props['']='未定义';
- }else{
-
- selected_node['props']={'':'未定义'};
- }
- //用户写入的记录下来
- updJson();
-
- shownode();
- }
- //刷新时记录用户输入
- function updJson(){
- if(selected_node){
- selected_node.assetNo=d3.select("#nodeAssetNo").property('value');
- selected_node.name=d3.select("#nodeName").property('value');
- selected_node.type=d3.select("#nodeType").property('value');
- selected_node.label=d3.select("#nodeLabel").property('value');
- selected_node.status=d3.select("#nodeStatus").property('value');
- }else if(selected_link){
- selected_link.name=d3.select("#linkName").property('value');
- selected_link.cost=d3.select("#linkCost").property('value');
- }
- }
- //=============弹出层添加属性begin=======================================
- //加载属性类型
- d3.select('#proType').selectAll('option')
- .data(proTypes).enter()
- .append('option')
- .attr('value',function(d){return d.key;})
- .html(function(d){ return d.value;});
- //提交
- d3.select('#addSubBtn').on('click',function(){
- if(selected_node){
- var proType=d3.select("#proType").property('value');
- var proNo=d3.select("#proNo").property('value');
- var desName=d3.select("#select"+etdBtnId).property('value');//正在编辑select2的值
- //插入前先查询节点‘英文编号’的此label 此简称是否存在
- var t=d3.select('#nodeLabel').property('value');
- var labelId="";//选中的资源label的ID
- for(var i=0;i<labels.length;i++){
- if(labels[i].sign==t){
- labelId=labels[i].id;
- break;
- }
- }
- $.ajax({
- type: "GET",
- url: window.basePath+"/api/cm/findByPros",
- data: {sourceType : 1,sourceId: labelId,keyname:proNo},
- dataType: "text",
- success:function(data){
- if(data==0){//数据库中没有此属性 允许插入
- //插入操作 返回实体
- $.ajax({
- type: "POST",
- contentType:"application/json; charset=UTF-8",
- url: window.basePath+"/api/cm/dynparam",
- data: JSON.stringify({ descName:desName, key:proNo, sourceId:labelId, sourceType:1, valueType:proType,fix:0}),//JSON.stringify(entity),fix:0动态属性
- dataType: "json",
- success:function(data){
- //插入成功后改变正在编辑的
- var props=selected_node.props;
- for(var key in props){
- if(key==etdBtnId){
- delete props[key];
- props[proNo]=desName;
-
- //层隐藏
- d3.select('#overlay').style('display','none');
- d3.select('#win').style('display','none');
- //更新属性
- initParams();
- restart();
- return;
- }
- }
-
- },
- error: function(data){jAlert("服务器请求异常",'提示');}
- });
-
- }else{
- jAlert("此属性编号已存在,请重新输入编号!",'提示');
- }
- },
- error:function(data){jAlert("服务器访问异常!",'提示');}
- });
- }else if(selected_link){
- var proType=d3.select("#proType").property('value');
- var proNo=d3.select("#proNo").property('value');
- var desName=d3.select("#selectLink"+etdBtnId).property('value');//正在编辑select2的值
-
- //插入前先查询节点‘英文编号’的此label 此简称是否存在
-
- var linkeName=d3.select('#linkName').property('value');
- var linkId;//选中的name的ID 即属性表里的sourceId
- for(var i=0;i<linkType.length;i++){
- if(linkeName==linkType[i].type){
- linkId=linkType[i].id;
- }
- }
- $.ajax({
- type: "GET",
- url: window.basePath+"/api/cm/findByPros",
- data: {sourceType : 2,sourceId: linkId,keyname:proNo},
- dataType: "text",
- success:function(data){
- if(data==0){//数据库中没有此属性 允许插入
- //插入操作 返回实体
- $.ajax({
- type: "POST",
- contentType:"application/json; charset=UTF-8",
- url: window.basePath+"/api/cm/dynparam",
- data: JSON.stringify({ descName:desName, key:proNo, sourceId:linkId, sourceType:2, valueType:proType,fix:0}),//JSON.stringify(entity),
- dataType: "json",
- success:function(data){
- //插入成功后改变正在编辑的
- //params=JSON.parse(json.responseText);
- var props=selected_link.props;
- for(var key in props){
- if(key==etdBtnId){
- delete props[key];
- props[proNo]=desName;
- //层隐藏
- d3.select('#overlay').style('display','none');
- d3.select('#win').style('display','none');
- //更新属性
- initParams();
- return;
- }
- }
- },
- error: function(data){jAlert("服务器请求异常",'提示');}
- });
-
- }else{
- jAlert("此属性编号已存在,请重新输入编号!",'提示');
- }
- },
- error:function(data){jAlert("服务器访问异常!",'提示');}
- });
-
-
- }
- });
- //取消
- d3.select('#addResBtn').on('click',function(){
- d3.select('#overlay').style('display','none');
- d3.select('#win').style('display','none');
- });
- //关闭
- d3.select('#close').on('click',function(){
- d3.select('#overlay').style('display','none');
- d3.select('#win').style('display','none');
- });
- //=================添加属性end==============================================
- //连线'添加属性' 点击事件
- d3.select('#addBtn1').on('click',function(){
- addRow1();
-
- });
- //添加节点
- function addRow1(){
- if(selected_link){
- if(selected_link.props){
- selected_link.props['']='未定义';
- }else{
- selected_link['props']={'':'未定义'};
- }
- updJson();
- showLink();
- }
- }
- function cancel(){
- for(var i=0;i<links.length;i++){//确保用户不提交的时候不出错
- if(links[i].id==-1){
- // delete links[i];
- links.splice(i, 1);
- break;
- }
- }
- };
- //取消1
- d3.select('#addResBtn1').on('click',function(){
- d3.select('#overlay1').style('display','none');
- d3.select('#win1').style('display','none');
- });
- //数据导入
- d3.select("#importData").on("click",function(){
- d3.select('#overlay1').style('display','block');
- d3.select('#win1').style('display','block');
- });
- //上传
- d3.select("#importBtn").on("click",function(){
- var name=d3.select("#importFile").property('value');
- var suffix=name.substring(name.lastIndexOf(".")+1,name.length);
-
- if(suffix!="xls" && suffix!="xlsx"){
- jAlert("请选择EXCEL文件!",'提示');
- return;
- }else{
- var form=$("#myform")[0];
- form.method="POST";
- form.action=window.basePath +"/api/cm/importFile";
- form.submit();
- jAlert("上传成功!",'提示');
- d3.select('#overlay1').style('display','none');
- d3.select('#win1').style('display','none');
- }
- });
- }]);
|