12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368 |
- 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');
- }
- });
- }]);
|