Widget.ts 189 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777
  1. import BaseWidget = require('core/BaseWidget.class');
  2. import Functions = require('core/Functions.module');
  3. import Extent = require('esri/geometry/Extent');
  4. import SpatialReference = require('esri/SpatialReference');
  5. import Point = require("esri/geometry/Point");
  6. import GraphicsLayer = require("esri/layers/GraphicsLayer");
  7. import Graphic = require("esri/graphic");
  8. import PictureMarkerSymbol = require("esri/symbols/PictureMarkerSymbol");
  9. import TextSymbol = require("esri/symbols/TextSymbol");
  10. import Font = require("esri/symbols/Font");
  11. import Draw = require('esri/toolbars/draw');
  12. import SimpleMarkerSymbol = require('esri/symbols/SimpleMarkerSymbol');
  13. import Color = require("esri/Color");
  14. import Polygon = require('esri/geometry/Polygon');
  15. import SimpleLineSymbol = require('esri/symbols/SimpleLineSymbol');
  16. import SimpleFillSymbol = require('esri/symbols/SimpleFillSymbol');
  17. import arrayUtils = require('dojo/_base/array');
  18. import ClassBreaksRenderer = require('esri/renderers/ClassBreaksRenderer');
  19. import PopupTemplate = require('esri/dijit/PopupTemplate');
  20. import Geoprocessor = require("esri/tasks/Geoprocessor");
  21. import Polyline = require('esri/geometry/Polyline');
  22. import geometryEngine = require("esri/geometry/geometryEngine");
  23. import graphicsUtils = require("esri/graphicsUtils");
  24. import AjaxSend = require("common/AjaxSend.class")
  25. import ArcGISDynamicMapServiceLayer = require('esri/layers/ArcGISDynamicMapServiceLayer');
  26. enum selectType {
  27. all, single
  28. }
  29. export = MissionSchedule;
  30. declare var Date;//use date.js
  31. class MissionSchedule extends BaseWidget {
  32. baseClass = "widget-missionschedule";
  33. /**根据这个图层id前缀来控制图层模块切换时展示和隐藏,展示本模块图层,隐藏其它模块的图层*/
  34. preLayerId = 'HalfPanel' + this.baseClass;
  35. map = null;
  36. toast = null;
  37. popup = null;
  38. loadWait = null;
  39. plan_addpontype_layer: GraphicsLayer;//巡检任务计划片区图层
  40. plan_addptype_layer: GraphicsLayer;//显示具体巡检任务包含的巡检设备信息图层
  41. missionschedule_plandetail_polylinelayer: GraphicsLayer;
  42. regionInfoGraphicLayer: GraphicsLayer;
  43. dynamicMapServer: ArcGISDynamicMapServiceLayer
  44. ajaxSend = null;
  45. distanceInfo = 50;
  46. companyid = "";//公司id
  47. missionschedule_planpoint_clusterLayer = null;//巡检点
  48. regionid = "";
  49. regionname = "";
  50. realName = "";//巡检责任人参数
  51. //修改计划参数
  52. copyPopup = null;//复制弹出窗
  53. devices_selected = [];//存储已选择设备
  54. devices_selected_layers: GraphicsLayer;
  55. currentRegionPolygon = null;//当前选中片区
  56. drawToolbar = null;//地图框选数据
  57. dataTable_r = null;
  58. dataTable_User = null;//责任人表格
  59. dataTable_current = null;//已选择的管线的datatable对象
  60. dataTable_current_list = {};
  61. objectIdsStr = {};//id集合
  62. gisUrlList = {};//多选时的gpurl集合
  63. private deviceTypes = null;//记录巡检类型配置集合
  64. gp = null;
  65. analyzeUrl = "";
  66. datalength = 0;
  67. mapServerUrl = "";
  68. objectids = [];
  69. jobid = "";
  70. dataTable_all = null//巡检查询列表
  71. dataTable_all_searchInfo = {};//巡检查询条件
  72. xunjianSelectVal = null;//巡检片区或巡检责任人
  73. addData = {
  74. companyid: undefined,//公司唯一编码
  75. deviceTypeIds: undefined,//设备类型唯一编码
  76. deviceTypeIdsTemp:undefined,//存储最初始选择的设备类型
  77. intervalDays: undefined,//自定义间隔天数
  78. periodId: undefined,//巡检周期编码
  79. planBegindate: undefined,//开始时间
  80. planEnddate: undefined,//结束时间
  81. planMode: undefined,//车巡、人巡
  82. pointInfo: undefined,
  83. regionId: undefined,//巡检片区编码
  84. userId: undefined,//用户id
  85. synergyUserIds: undefined,//协同处理人ids
  86. description: undefined,//计划名称
  87. planRate: undefined,//计划完成率,
  88. geoType: undefined,//下发计划图形的样式类型
  89. gisInfo: undefined,//巡检点、巡检线的内容
  90. gisInfoList: [
  91. ],//新计划字段
  92. gisUrl: undefined,//管线设备信息的请求地址
  93. objectIds: undefined,//选中管线设备的objectid集合,
  94. plan_tolerance: undefined//设备容差
  95. }
  96. /**
  97. * @function 启动初始化
  98. */
  99. startup() {
  100. this.configure();
  101. this.initHtml();
  102. this.getDistanceInfo();
  103. this.getPlanLayers();
  104. this.initEvent();
  105. }
  106. /**
  107. * @function 配置初始化
  108. */
  109. configure() {
  110. this.toast = this.AppX.runtimeConfig.toast;
  111. this.popup = this.AppX.runtimeConfig.popup;
  112. this.map = this.AppX.runtimeConfig.map;
  113. this.ajaxSend = new AjaxSend();
  114. this.loadWait = this.AppX.runtimeConfig.loadWait;
  115. if (this.AppX.appConfig.gisResource.filterMapRQ.config.length > 0) {
  116. this.analyzeUrl = this.AppX.appConfig.gisResource.filterMapRQ.config[0].url;
  117. this.mapServerUrl = this.AppX.appConfig.gisResource.filterMapRQ.config[1].url;
  118. } else {
  119. this.toast.show("图层过滤服务未配置");
  120. }
  121. if (!this.regionInfoGraphicLayer) {
  122. this.regionInfoGraphicLayer = new GraphicsLayer();
  123. this.regionInfoGraphicLayer.id = this.preLayerId + "regionInfoGraphicLayer";
  124. this.map.addLayer(this.regionInfoGraphicLayer);
  125. }
  126. if (!this.plan_addpontype_layer) {
  127. this.plan_addpontype_layer = new GraphicsLayer();
  128. this.plan_addpontype_layer.id = this.preLayerId + "plan_addpontype_layer";
  129. this.map.addLayer(this.plan_addpontype_layer);
  130. }
  131. if (!this.devices_selected_layers) {
  132. this.devices_selected_layers = new GraphicsLayer();
  133. this.devices_selected_layers.id = this.preLayerId + "devices_selected_layers";
  134. this.map.addLayer(this.devices_selected_layers);
  135. }
  136. if (!this.missionschedule_plandetail_polylinelayer) {
  137. this.missionschedule_plandetail_polylinelayer = new GraphicsLayer();
  138. this.missionschedule_plandetail_polylinelayer.id = this.preLayerId + "missionschedule_plandetail_polylinelayer";
  139. this.map.addLayer(this.missionschedule_plandetail_polylinelayer);
  140. }
  141. if (!this.plan_addptype_layer) {
  142. this.plan_addptype_layer = new GraphicsLayer();
  143. this.plan_addptype_layer.id = this.preLayerId + "plan_addptype_layer";
  144. this.map.addLayer(this.plan_addptype_layer);
  145. }
  146. }
  147. /**
  148. * @function 初始化页面
  149. */
  150. initHtml() {
  151. var html = _.template(this.template.split('$$')[0] + "</div>")();
  152. this.setHtml(html);
  153. this.ready();
  154. }
  155. /**
  156. * @function 根据登录账号(集团公司账号、子公司账号、部门账号)初始化
  157. */
  158. initLoginUser() {
  159. this.configTimes();
  160. this.domObj.find(".planslist-title").empty().append(this.template.split('$$')[10]);
  161. this.companyid = this.AppX.appConfig.deptId
  162. this.getGroup(selectType.all);
  163. }
  164. planEnddate = {
  165. format: 'YYYY-MM-DD', //日期格式
  166. isinitVal: false,
  167. okfun: function (obj) {
  168. var period_id = this.domObj.find(".periodid option:selected").val();
  169. var dt = new Date(obj.val.replace(/-/g, "/"));
  170. if (period_id == "1") {
  171. this.endDate.minDate = obj.val;
  172. } else if (period_id == "2") {
  173. // this.endDate.minDate = Functions.DateFormat(new Date(dt.getTime() + 24 * 3600000), "yyyy-MM-dd");
  174. this.endDate.minDate = obj.val;
  175. }
  176. if (parseInt(this.domObj.find(".plan_enddate").val().replace(/-/g, "")) < parseInt(this.endDate.minDate.replace(/-/g, ""))) {
  177. this.domObj.find(".plan_enddate").val(this.endDate.minDate);
  178. }
  179. }.bind(this)
  180. }
  181. planBegindate = {
  182. format: 'YYYY-MM-DD', //日期格式
  183. isinitVal: false,
  184. okfun: function (obj) {
  185. var period_id = this.domObj.find(".periodid option:selected").val();
  186. if (period_id == "3") {
  187. this.endDate.minDate = obj.val;
  188. }
  189. var dt = new Date(obj.val.replace(/-/g, "/"));
  190. this.planEnddate.minDate = Functions.DateFormat(dt, "yyyy-MM-dd");
  191. this.domObj.find(".plan_enddate").val(this.planEnddate.minDate);
  192. }.bind(this)
  193. }
  194. /**
  195. * @function 配置时间控件
  196. */
  197. configTimes() {
  198. $.jeDate("." + this.baseClass + " .plan_begindate", this.planBegindate);
  199. $.jeDate("." + this.baseClass + " .plan_enddate", this.planEnddate);
  200. }
  201. /**
  202. * @function 初始化相关事件
  203. * 时间控件、部门与人员列表、部门变化事件
  204. */
  205. initEvent() {
  206. this.regionInfoGraphicLayer.clear();
  207. this.initLoginUser();
  208. this.getMissionSchedule();
  209. var that = this;
  210. //部门列表
  211. this.domObj.find('.department').on("change", function () {
  212. this.getUser(selectType.all, this.domObj.find(".department").val());
  213. }.bind(this));
  214. //查询计划
  215. this.domObj.find(".btn-search").off("click").on("click", function () {
  216. this.clearCurrentTr();
  217. this.getMissionSchedule();
  218. }.bind(this));
  219. //增加计划
  220. this.domObj.find('.btn_addplans').off("click").on("click", function () {
  221. this.clearCurrentTr();
  222. this.domObj.empty().append(this.template.split('$$')[1]);
  223. this.addDataReset();
  224. this.initEvent2();
  225. }.bind(this));
  226. this.domObj.find('.btn_transplans').off().on('click', e => {
  227. let data = that.dataTable_all.aExtentData.checkCurrentData;
  228. if (!data || data.length <= 0) {
  229. this.toast.Show("请勾选需要转移的计划!");
  230. return;
  231. } else {
  232. for (var i = 0; i < data.length; i++) {
  233. if (data[i].childPlanState != 1 && data[i].childPlanState! != 2) {
  234. this.toast.Show("只能转移未开始和正在执行的任务!");
  235. return;
  236. }
  237. }
  238. this.popup.setSize(500, 330);
  239. var Obj = this.popup.Show("转移", this.template.split('$$')[11]);
  240. Obj.submitObj.off("click").on("click", function () {
  241. //添加巡检线
  242. let dataInfo = that.dataTable_all.aExtentData.checkCurrentData;
  243. var notes = Obj.conObj.find(".notes");
  244. if (notes.val().trim() == "") {
  245. notes.addClass('has-error');
  246. notes.attr("placeholder", "任务转移说明不能为空!");
  247. this.toast.show("任务转移说明不能为空!");
  248. return;
  249. }
  250. let ids = _.join(dataInfo.map(item => {
  251. return item.id
  252. }), ",")
  253. let data = {
  254. "ids": ids,
  255. "applyNote": notes.val(),
  256. };
  257. this.ajaxSend.sendAjax(this, data, this.config.planTransfer, this.ajaxSend.type.post, function (result) {
  258. this.popup.close();
  259. if (this.ajaxSend.checkResults(this, result)) {
  260. this.toast.show('计划转移申请成功!');
  261. this.getMissionSchedule();
  262. }
  263. }.bind(this));
  264. }.bind(this));
  265. }
  266. })
  267. //计划删除---删除单个
  268. this.domObj.find('.btn_deleteplans').off("click").on("click", function () {
  269. let data = that.dataTable_all.aExtentData.checkCurrentData;
  270. if (!data || data.length <= 0) {
  271. this.toast.Show("请勾选需删除的计划!");
  272. return;
  273. } else {
  274. var ids = [];
  275. for (var n = 0; n < data.length; n++) {
  276. var item = data[n];
  277. ids.push(item.id);
  278. // if (item.childPlanState != 1) {
  279. // this.toast.Show("只能删除未开始的计划!");
  280. // return;
  281. // }
  282. }
  283. this.popup.setSize(300, 250);
  284. var Obj = this.popup.ShowMessage("提示", "是否删除选择计划数据?");
  285. Obj.submitObj.off("click").on("click", function () {
  286. this.popup.Close();
  287. this.ajaxSend.sendAjax(this, ids, this.config.deleteMissionSchedule, this.ajaxSend.type.delete, this.deleteMissionScheduleCallback.bind(this));
  288. }.bind(this));
  289. }
  290. }.bind(this));
  291. }
  292. /**
  293. * 新增内容置空
  294. */
  295. addDataReset() {
  296. this.addData = {
  297. companyid: undefined,//公司唯一编码
  298. deviceTypeIds: undefined,//设备类型唯一编码
  299. intervalDays: undefined,//自定义间隔天数
  300. periodId: undefined,//巡检周期编码
  301. planBegindate: undefined,//开始时间
  302. planEnddate: undefined,//结束时间
  303. planMode: undefined,//车巡、人巡
  304. pointInfo: undefined,//
  305. regionId: undefined,//巡检片区编码
  306. userId: undefined,//用户id
  307. synergyUserIds: undefined,
  308. description: undefined,//计划名称
  309. planRate: undefined,//计划完成率
  310. geoType: undefined,//图形样式类型
  311. gisInfo: undefined,//巡检点、巡检线的内容
  312. gisInfoList: [],
  313. gisUrl: undefined,//管线设备信息的请求地址
  314. objectIds: undefined,//选中管线设备的objectid集合
  315. plan_tolerance: undefined//设备容差
  316. }
  317. this.dataTable_current_list = {};
  318. this.objectIdsStr = {};//id集合
  319. this.gisUrlList = {};//多选时的gpurl集合
  320. }
  321. /**
  322. * @function 初始化巡检计划列页面值
  323. */
  324. initEventVal() {
  325. this.config.pagenumber = 1;
  326. this.config.pagesize = 25;
  327. this.config.pagetotal = 0;
  328. this.devices_selected = [];
  329. this.devices_selected_layers.clear();
  330. this.regionInfoGraphicLayer.clear();
  331. this.domObj.empty().append(this.template.split('$$')[0] + "</div>");
  332. this.initEvent();
  333. }
  334. //计划新增
  335. initEvent2() {
  336. this.planClear();
  337. this.domObj.find(".department_btn").show();
  338. this.getPlanType();
  339. this.getPeriod();//巡检周期
  340. this.initTimes();//初始化周期时间
  341. //部门列表
  342. this.domObj.find('.department').off("change").on("change", function () {
  343. this.getUser(selectType.single, this.domObj.find(".department").val());
  344. // $('option', $('.planpointtype')).each(function(element) {
  345. // $(this).removeAttr('selected').prop('selected', false);
  346. // });
  347. $('option', $('.subUsers')).each(function (element) {
  348. $(this).removeAttr('selected').prop('selected', false);
  349. });
  350. }.bind(this));
  351. this.domObj.find(".users").off("change").on("change", function () {
  352. // var subUsersOptions =this.domObj.find(".users option:not(:selected)");
  353. // this.domObj.find(".subUsers").empty().append(subUsersOptions);
  354. // this.domObj.find(".users").multiselect("destroy").multiselect({
  355. // maxHeight:200,
  356. // inheritClass: false
  357. // });
  358. $('option', $('.subUsers')).each(function (element) {
  359. $(this).prop('selected', false);
  360. });
  361. var selectedUserVal = this.domObj.find(".users option:selected").val();
  362. var subUsersOptions = this.domObj.find(".subUsers option");
  363. for (var i = 0; i < subUsersOptions.length; i++) {
  364. if ($(subUsersOptions[i]).val() == selectedUserVal) {
  365. subUsersOptions[i].disabled = true;
  366. } else {
  367. subUsersOptions[i].disabled = false;
  368. }
  369. }
  370. var selectedTypeVal = this.domObj.find(".planpointtype option:selected").val();
  371. if (selectedTypeVal == "1" || selectedTypeVal == "2") {
  372. this.domObj.find(".subUsers").multiselect("destroy").multiselect({
  373. maxHeight: 200,
  374. inheritClass: false
  375. }).multiselect("disable");
  376. } else {
  377. this.domObj.find(".subUsers").multiselect("destroy").multiselect({
  378. maxHeight: 200,
  379. inheritClass: false
  380. });
  381. }
  382. // var userId = this.domObj.find(".users option:selected").val();
  383. // var input = $('.subUsers input[value="'+userId+'"]');
  384. // var option = $('.subUsers option[value="'+userId+'"]');
  385. // input.prop('disabled', true);
  386. // option.prop('disabled', true);
  387. // input.parent('label').parent('a').parent('li').addClass('disabled');
  388. }.bind(this))
  389. this.domObj.find('.planpointtype').off("change").on("change", function () {
  390. var pointType = this.domObj.find(".planpointtype option:selected").attr("data-type");
  391. var pointVal = this.domObj.find(".planpointtype option:selected").val();
  392. if (pointType == "0" && pointVal != "1" && pointVal != "2") {//排除巡检点和巡检线多选
  393. //this.domObj.find(".subUsers").attr("multiple","multiple");
  394. $('option', $('.subUsers')).each(function (element) {
  395. $(this).prop('selected', false);
  396. });
  397. this.domObj.find(".subUsers").multiselect("destroy").multiselect({
  398. maxHeight: 200,
  399. inheritClass: false
  400. }).multiselect("enable");
  401. this.domObj.find(".xunjianUser").attr("disabled", false)
  402. //this.domObj.find(".subUsers").multiselect("enable");
  403. } else {
  404. //this.domObj.find(".subUsers").removeAttr("multiple");
  405. $('option', $('.subUsers')).each(function (element) {
  406. $(this).prop('selected', false);
  407. });
  408. this.domObj.find(".subUsers").multiselect("destroy").multiselect({
  409. maxHeight: 200,
  410. inheritClass: false
  411. }).multiselect("disable");
  412. this.domObj.find(".xunjianUser").attr("disabled", true)
  413. //this.domObj.find(".subUsers").multiselect("disable");
  414. }
  415. // $('option', $('.subUsers')).each(function(element) {
  416. // $(this).removeAttr('selected').prop('selected', false);
  417. // });
  418. //this.domObj.find("span .multiselect-native-select").remove();
  419. this.domObj.find(".users").multiselect("destroy").multiselect({
  420. maxHeight: 200,
  421. inheritClass: false
  422. });
  423. }.bind(this));
  424. this.domObj.find('.planlinetype').off("change").on("change", function () {
  425. //this.domObj.find(".users").removeAttr("multiple");
  426. this.domObj.find(".subUsers").multiselect("disable");
  427. $('option', $('.users')).each(function (element) {
  428. $(this).removeAttr('selected').prop('selected', false);
  429. });
  430. //this.domObj.find("span .multiselect-native-select").remove();
  431. // this.domObj.find(".users").multiselect("destroy").multiselect({
  432. // maxHeight:200,
  433. // inheritClass: false
  434. // });
  435. }.bind(this));
  436. this.domObj.find('input[type=radio][name=typeSelect]').off("change").on("change", function () {
  437. if ($("input:radio[name='typeSelect']:checked").val() == "0") {//判断选中的是点类型还是线类型
  438. // this.domObj.find(".planpointtype").removeAttr("disabled")
  439. // this.domObj.find(".planlinetype").attr("disabled","disabled")
  440. // $('.planlinetype').multiselect('disable');
  441. // $('.planpointtype').multiselect('enable');
  442. // $('option', $('.planlinetype')).each(function(element) {
  443. // $(this).removeAttr('selected').prop('selected', false);
  444. // });
  445. $('option', $('.subUsers')).each(function (element) {
  446. $(this).removeAttr('selected').prop('selected', false);
  447. });
  448. $('option', $('.planpointtype')).each(function (element) {
  449. $(this).removeAttr('selected').prop('selected', false);
  450. });
  451. $('option', $('.planlinetype')).each(function (element) {
  452. $(this).removeAttr('selected').prop('selected', false);
  453. });
  454. this.domObj.find(".planpointtype").multiselect("destroy").multiselect({
  455. maxHeight: 200,
  456. inheritClass: false
  457. }).multiselect("enable");
  458. this.domObj.find(".planlinetype").multiselect("destroy").multiselect({
  459. maxHeight: 200,
  460. inheritClass: false
  461. }).multiselect("disable");
  462. } else if ($("input:radio[name='typeSelect']:checked").val() == "1") {
  463. // this.domObj.find(".planlinetype").removeAttr("disabled")
  464. // this.domObj.find(".planpointtype").attr("disabled","disabled")
  465. // $('.planlinetype').multiselect('enable');
  466. // $('.planpointtype').multiselect('disable');
  467. $('option', $('.planpointtype')).each(function (element) {
  468. $(this).removeAttr('selected').prop('selected', false);
  469. });
  470. $('option', $('.planlinetype')).each(function (element) {
  471. $(this).removeAttr('selected').prop('selected', false);
  472. });
  473. this.domObj.find(".planlinetype").multiselect("destroy").multiselect({
  474. maxHeight: 200,
  475. inheritClass: false
  476. }).multiselect("enable");
  477. this.domObj.find(".planpointtype").multiselect("destroy").multiselect({
  478. maxHeight: 200,
  479. inheritClass: false
  480. }).multiselect("disable");
  481. $('option', $('.subUsers')).each(function (element) {
  482. $(this).removeAttr('selected').prop('selected', false);
  483. });
  484. this.domObj.find(".subUsers").multiselect("destroy").multiselect({
  485. maxHeight: 200,
  486. inheritClass: false
  487. }).multiselect("disable");
  488. //this.domObj.find(".subUsers").multiselect("disable");
  489. }
  490. }.bind(this))
  491. //设置常量-巡检周期、 日期区间
  492. if (this.addData.planBegindate) {
  493. this.domObj.find('.plan_begindate').val(this.addData.planBegindate.split(" ")[0]);
  494. }
  495. if (this.addData.planEnddate) {
  496. this.domObj.find('.plan_enddate').val(this.addData.planEnddate.split(" ")[0])
  497. }
  498. if (this.addData.planMode) {
  499. this.domObj.find(".radio[value='" + this.addData.planMode + "']").prop('checked', true);
  500. }
  501. if (this.addData.description) {
  502. this.domObj.find('.plan_name').val(this.addData.description);
  503. }
  504. if (this.addData.planRate) {
  505. this.domObj.find('.plan_rate').val(this.addData.planRate);
  506. }
  507. //巡检周期变化
  508. this.domObj.find(".periodid").off("change").on("change", function () {
  509. this.initTimes();
  510. }.bind(this));
  511. //上一步 返回巡检计划列表页面
  512. this.domObj.find('.btn_previous_step').off("click").on("click", function () {
  513. this.initEventVal();
  514. }.bind(this));
  515. //返回巡检计划列表页面
  516. this.domObj.find('.btn_return').off("click").on("click", function () {
  517. this.initEventVal();
  518. }.bind(this));
  519. //下一步 片区选择设备
  520. this.domObj.find('.btn_next_step').off("click").on("click", function () {
  521. //设置常量-巡检周期、 日期区间
  522. var pointAndLineId = [];
  523. this.addData.companyid = this.AppX.appConfig.companyId;
  524. this.addData.deptId = this.domObj.find(".department option:selected").val();
  525. debugger
  526. if ($("input:radio[name='typeSelect']:checked").val() == "0") {//选中的是点类型
  527. var brands = $('.planpointtype option:selected');
  528. $(brands).each(function (index, brand) {
  529. pointAndLineId.push(Number(($(brand).attr("data-device_type_id"))));
  530. this.addData.geoType = $(brand).attr("data-type");
  531. }.bind(this));
  532. } else if ($("input:radio[name='typeSelect']:checked").val() == "1") {
  533. var brands = $('.planlinetype option:selected');
  534. this.addData.geoType = "1";
  535. $(brands).each(function (index, brand) {
  536. pointAndLineId.push(Number($(brand).attr("data-device_type_id")));
  537. }.bind(this));
  538. }
  539. // if(pointAndLineId.length > 1){
  540. // this.toast.Show("暂不支持巡检类型多选");
  541. // return;
  542. // }
  543. this.addData.deviceTypeIds = pointAndLineId.join(",");
  544. this.addData.deviceTypeIdsTemp = pointAndLineId.join(",");
  545. this.addData.periodId = parseInt(this.domObj.find('.periodid option:selected').val());
  546. this.addData.intervalDays = this.domObj.find(".periodid option:selected").attr("data-days");
  547. this.addData.intervalDays = parseInt((this.addData.intervalDays == "null" ? "0" : this.addData.intervalDays));
  548. this.addData.planBegindate = this.ajaxSend.conductAddTime(this.domObj.find('.plan_begindate').val());
  549. this.addData.planEnddate = this.ajaxSend.conductAddEndTime(this.domObj.find('.plan_enddate').val());
  550. this.addData.planMode = this.domObj.find(".radio[name='radio']:checked").val();
  551. this.addData.plan_tolerance = this.domObj.find(".plan_tolerance").val();
  552. //获取多选用户id
  553. var synergyUserIdsVal = [];
  554. let checkContent = this.domObj.find(".users option:selected").val();
  555. let synergyUser = this.domObj.find(".subUsers option:selected");
  556. $(synergyUser).each(function (index, brand) {
  557. synergyUserIdsVal.push($(this).val());
  558. });
  559. // for(var i=0;i<checkContent.length;i++){
  560. // //checkContent[i].find("input[type=checkbox]");
  561. // checkContentVal.push(checkContent[i].getAttribute("value"));
  562. // }
  563. this.addData.userId = checkContent//parseInt(this.domObj.find('.users option:selected ').val());
  564. //if(checkContentVal.length >1){
  565. this.addData.synergyUserIds = synergyUserIdsVal.join(",")
  566. //}
  567. this.addData.description = this.domObj.find('.plan_name').val();
  568. this.addData.planRate = parseFloat(this.domObj.find('.plan_rate').val());
  569. this.xunjianSelectVal = $("input:radio[name='xunjianSelect']:checked").val();//巡检片区或责任人
  570. //this.addData.geoType = $("input:radio[name='typeSelect']:checked").val()//点是0,线是1 this.domObj.find(".plantype option:selected").attr("data-type");
  571. if (new Date(this.addData.planEnddate).getTime() - new Date(this.addData.planBegindate).getTime() < 0) {
  572. this.toast.Show("计划结束时间应大于计划开始时间!");
  573. return;
  574. }
  575. if (this.addData.periodId == "") {
  576. this.toast.Show("请选择巡检类型");
  577. return;
  578. }
  579. if (this.addData.planBegindate == "") {
  580. this.toast.Show("请选择开始时间");
  581. return;
  582. }
  583. if (this.addData.planEnddate == "") {
  584. this.toast.Show("请选择结束时间");
  585. return;
  586. }
  587. if (this.addData.userId + "" == "NaN" || this.addData.userId == "") {
  588. this.toast.Show("请选择巡检人员");
  589. return;
  590. }
  591. if (this.addData.description == "") {
  592. this.toast.Show("请输入巡检任务名称");
  593. return;
  594. }
  595. if (isNaN(this.addData.planRate)||this.addData.planRate== "") {
  596. this.toast.Show("请输入本次巡检完成率");
  597. return;
  598. } else {
  599. if (this.addData.planRate > 100 || this.addData.planRate < 0) {
  600. this.toast.Show("巡检完成率在0~100之间");
  601. return;
  602. }
  603. }
  604. if (this.addData.deviceTypeIds == 1 || this.addData.deviceTypeIds == 2) {
  605. this.domObj.empty().append(this.template.split('$$')[4]);
  606. this.initEvent4();
  607. //this.addData.deviceTypeIds = Number(this.addData.deviceTypeIds)
  608. this.getRegionInfo(this.regionid, this.addData.deviceTypeIds);
  609. } else {
  610. if (this.xunjianSelectVal == "巡检区域") {
  611. this.domObj.empty().append(this.template.split('$$')[2]);//片区选择
  612. this.initEvent3();
  613. } else {
  614. this.domObj.empty().append(this.template.split('$$')[13]);//人员选择
  615. this.initEvent3_1();
  616. }
  617. }
  618. }.bind(this));
  619. }
  620. /**
  621. * 获取设备类型
  622. * */
  623. getPlanLayers() {
  624. let data = {
  625. current: 1,
  626. size: 1000
  627. }
  628. this.ajaxSend.sendAjax(this, data, this.config.getLayerId, this.ajaxSend.type.get, function (results) {
  629. if (results.code != -1) {
  630. this.deviceTypes = results.result.records
  631. }
  632. }.bind(this));
  633. }
  634. //片区选择初始化
  635. initEvent3() {
  636. var that = this;
  637. this.config.pagenumber = 1;
  638. this.config.pagesize = 25;
  639. this.config.pagetotal = 0;
  640. this.devices_selected = [];
  641. this.devices_selected_layers.clear();
  642. this.missionschedule_plandetail_polylinelayer.clear();
  643. this.regionInfoGraphicLayer.clear();
  644. if (this.missionschedule_planpoint_clusterLayer != null) {
  645. this.map.removeLayer(this.missionschedule_planpoint_clusterLayer);
  646. this.missionschedule_planpoint_clusterLayer = null;
  647. }
  648. this.getAllPlanRegion();
  649. //查询
  650. this.domObj.find('.btn_search').off("click").on("click", function () {
  651. this.getAllPlanRegion();
  652. }.bind(this));
  653. //上一步 新增任务
  654. this.domObj.find('.btn_previous_step').off("click").on("click", function () {
  655. this.domObj.empty().append(this.template.split('$$')[1]);
  656. this.initEvent2();
  657. }.bind(this));
  658. //返回计划列表
  659. this.domObj.find('.btn_return').off("click").on("click", function () {
  660. this.initEventVal();
  661. }.bind(this));
  662. }
  663. //巡检责任人选择初始化
  664. initEvent3_1() {
  665. var that = this;
  666. this.config.pagenumber = 1;
  667. this.config.pagesize = 25;
  668. this.config.pagetotal = 0;
  669. this.devices_selected = [];
  670. this.devices_selected_layers.clear();
  671. this.missionschedule_plandetail_polylinelayer.clear();
  672. this.regionInfoGraphicLayer.clear();
  673. if (this.missionschedule_planpoint_clusterLayer != null) {
  674. this.map.removeLayer(this.missionschedule_planpoint_clusterLayer);
  675. this.missionschedule_planpoint_clusterLayer = null;
  676. }
  677. //this.getAllUserList();
  678. //查询
  679. this.domObj.find('.btn_search').off("click").on("click", function () {
  680. this.getAllUserList();
  681. }.bind(this));
  682. //上一步 新增任务
  683. this.domObj.find('.btn_previous_step').off("click").on("click", function () {
  684. this.domObj.empty().append(this.template.split('$$')[1]);
  685. this.initEvent2();
  686. }.bind(this));
  687. //返回计划列表
  688. this.domObj.find('.btn_return').off("click").on("click", function () {
  689. this.initEventVal();
  690. }.bind(this));
  691. }
  692. //设备选择 完成新增计划
  693. initEvent4() {
  694. if (this.addData.geoType == 1) {
  695. this.domObj.find('.pipeType').attr('style', '');
  696. }
  697. if (this.addData.deviceTypeIds != 1 && this.addData.deviceTypeIds != 2 && this.addData.deviceTypeIds.split(",").length == 1) {
  698. this.getFieldUniqueValueByAjax()
  699. }
  700. var that = this;
  701. this.domObj.find('.widget-planregion_deviceselect .btn_search').hide();
  702. if (this.xunjianSelectVal != "巡检区域") {
  703. this.domObj.find('.btn_removeall').hide();
  704. this.domObj.find('.btn_select').hide();
  705. this.domObj.find('.btn_part_removeall').hide();
  706. }
  707. this.addData.objectIds = undefined;
  708. this.addData.gisUrl = undefined;
  709. this.addData.gisInfo = undefined;
  710. //筛选出管线的点装置
  711. if (this.addData.geoType == '0' && this.addData.deviceTypeIds != '1') {
  712. //this.domObj.find('.setTime').attr("style", "");
  713. //this.domObj.find('.widget-planregion_deviceselect .btn_search').show();
  714. let date = new Date();
  715. let setTimebegindate = {
  716. format: 'YYYY-MM-DD', //日期格式
  717. isinitVal: false,
  718. maxDate: date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
  719. };
  720. let setTimeenddate = {
  721. format: 'YYYY-MM-DD', //日期格式
  722. isinitVal: false,
  723. maxDate: date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
  724. okfun: function (obj) {
  725. var dt = new Date(obj.val.replace(/-/g, "/"));
  726. let endDate = parseInt(obj.val.replace(/-/g, ""));
  727. let beginDate = parseInt(this.domObj.find(".setTimebegindate").val().replace(/-/g, ""));
  728. if (endDate < beginDate) {
  729. this.domObj.find(".setTimebegindate").val(obj.val);
  730. }
  731. setTimebegindate.maxDate = Functions.DateFormat(dt, "yyyy-MM-dd");
  732. }.bind(this)
  733. };
  734. $.jeDate("." + this.baseClass + " .setTimebegindate", setTimebegindate);
  735. $.jeDate("." + this.baseClass + " .setTimeenddate", setTimeenddate);
  736. }
  737. this.objectids = [];
  738. //完成新增计划
  739. this.domObj.find('.btn_confirm').off("click").on("click", function () {
  740. if (this.addData.deviceTypeIds.split(",").length > 1) {
  741. var device_Type_Ids = this.addData.deviceTypeIds.split(",");
  742. var sendData_ids = [];
  743. for (let i = 0; i < device_Type_Ids.length; i++) {
  744. var deviceTypeId = device_Type_Ids[i];
  745. var cfg = this.getDeviceType(deviceTypeId);
  746. if (this.objectIdsStr[cfg.cnContactLayerName]) {
  747. this.addData.gisInfoList.push({
  748. "gisInfo": [],
  749. "gisUrl": this.gisUrlList[cfg.cnContactLayerName],
  750. "objectIds": this.objectIdsStr[cfg.cnContactLayerName],
  751. "regionId": this.addData.regionId,
  752. "typeId": Number(deviceTypeId)
  753. });
  754. sendData_ids.push(deviceTypeId)
  755. }
  756. }
  757. var sendData = {
  758. companyId: this.AppX.appConfig.companyId,
  759. deptId: this.addData.deptId,
  760. description: this.addData.description,
  761. deviceTypeIds: sendData_ids.join(","),
  762. gisInfoList: this.addData.gisInfoList,
  763. intervalDays: this.addData.intervalDays,
  764. periodId: this.addData.periodId,
  765. planBegindate: this.addData.planBegindate,
  766. planEnddate: this.addData.planEnddate,
  767. planMode: this.addData.planMode,
  768. planRate: JSON.stringify(this.addData.planRate),
  769. synergyUserIds: this.addData.synergyUserIds || "",
  770. userId: Number(this.addData.userId),
  771. tolerance: this.addData.plan_tolerance
  772. }
  773. this.ajaxSend.sendAjax(this, sendData, this.config.addMissionScheduleInfo, this.ajaxSend.type.post, this.addMissionScheduleInfoCallback.bind(this));
  774. } else {
  775. var xjlist = [];
  776. if (this.devices_selected.length > 0) {//巡检设备
  777. for (var j = 0; j < this.devices_selected.length; j++) {
  778. var sobj = this.devices_selected[j];
  779. var content = (sobj.mapitem == null ? sobj.currentTarget.data("content") : sobj.mapitem.attributes);//mapitem.content
  780. var strContent = "";
  781. if (typeof (content) != 'string') {
  782. strContent = JSON.stringify(content);
  783. }
  784. if (_.findIndex(xjlist, function (o: any) { return o.sid == sobj.sid }) > -1) continue;
  785. var itemselect = {
  786. "sid": parseInt(sobj.sid),
  787. "geometry": sobj.geometry,
  788. "name": "",
  789. "code": content.OBJECTID,
  790. "device_type_id": (sobj.mapitem == null ? sobj.currentTarget.data("device_type_id") : sobj.mapitem.device_type_id),
  791. "regionname": (sobj.mapitem == null ? sobj.currentTarget.data("regionname") : sobj.mapitem.regionname),
  792. "address": "",
  793. "content": "'" + strContent + "'",
  794. "pipe_length": content[this.config.lengthfield] == undefined ? 0 : content[this.config.lengthfield].toFixed(2)//(obj.pipelength != undefined ? (sobj.mapitem == null ? sobj.currentTarget.data(obj.pipelength.toLowerCase()) : sobj.mapitem.attributes[obj.pipelength]) : 0)
  795. };
  796. xjlist.push(itemselect);
  797. }
  798. }
  799. if (this.addData.deviceTypeIds == "1" || this.addData.deviceTypeIds == "2") {
  800. this.domObj.find(".pointlist-select").each(function () {//巡检点、巡检线选择
  801. if ($(this).prop('checked') == true && _.findIndex(xjlist, function (o: any) { return o.sid == this.id }.bind(this)) == -1) {
  802. let geoData = $(this).data('geometry');
  803. let pipeArray = [];
  804. if (geoData.hasOwnProperty("paths")) {
  805. let line = new Polyline($(this).data('geometry'));
  806. line.setSpatialReference(new SpatialReference({ wkid: 4326 }));
  807. let line2 = geometryEngine.geodesicDensify(line, 10);
  808. geoData = line2.setSpatialReference(new SpatialReference({ wkid: 4490 })).toJson();
  809. // let pipe = line2.paths[0];
  810. let pipe = line2['paths'][0];
  811. for (var i = 0; i < pipe.length - 1; i++) {
  812. let polylineJson = {
  813. paths: [[pipe[i], pipe[i + 1]]],
  814. spatialReference: new SpatialReference(4326)
  815. }
  816. var measure_p = new Polyline(polylineJson);
  817. let length = geometryEngine.geodesicLength(measure_p, 'meters');
  818. measure_p.spatialReference = new SpatialReference(4490);
  819. pipeArray.push({
  820. geometry: measure_p.toJson(),
  821. length: length
  822. })
  823. }
  824. }
  825. xjlist.push({
  826. "sid": parseInt(this.id),
  827. "geometry": geoData,
  828. "address": $(this).data('address') + "",
  829. "device_type_id": $(this).data('device_type_id'),
  830. "name": $(this).data('name') + "",
  831. "code": $(this).data('name') + "",
  832. "content": "'" + JSON.stringify($(this).data("content")) + "'",
  833. "pipe_length": $(this).data('pipe_length'),
  834. "pipe": pipeArray
  835. });
  836. }
  837. });
  838. if (xjlist.length == 0) {
  839. this.toast.Show("请选择巡检内容!");
  840. return;
  841. } else {
  842. this.addData.gisInfo = xjlist;
  843. }
  844. } else {
  845. if (this.regionid == "" && this.xunjianSelectVal == "巡检区域") {
  846. this.toast.Show("请选择片区!");
  847. return;
  848. }
  849. }
  850. if (this.addData && this.objectids.length == 0 && this.addData.objectIds == "") {
  851. this.toast.Show("请选择巡检内容!");
  852. return;
  853. }
  854. if (!this.addData.objectIds && !this.addData.gisInfo) {
  855. this.toast.Show("请选择巡检内容!");
  856. return;
  857. }
  858. this.loadWait.show("正在新增巡检计划,请等待...", this.domObj);
  859. //this.addData.deptId=this.addData.companyid;
  860. this.addData.gisInfoList.push({
  861. "gisInfo": this.addData.gisInfo || [],
  862. "gisUrl": this.addData.gisUrl,
  863. "objectIds": this.addData.objectIds,
  864. "regionId": this.addData.regionId,
  865. "typeId": Number(this.addData.deviceTypeIds)
  866. });
  867. var sendData2 = {
  868. companyId: this.AppX.appConfig.companyId,
  869. deptId: this.addData.deptId,
  870. description: this.addData.description,
  871. deviceTypeIds: this.addData.deviceTypeIds,
  872. gisInfoList: this.addData.gisInfoList,
  873. intervalDays: this.addData.intervalDays,
  874. periodId: this.addData.periodId,
  875. planBegindate: this.addData.planBegindate,
  876. planEnddate: this.addData.planEnddate,
  877. planMode: this.addData.planMode,
  878. planRate: JSON.stringify(this.addData.planRate),
  879. synergyUserIds: this.addData.synergyUserIds || "",
  880. userId: Number(this.addData.userId),
  881. tolerance: this.addData.plan_tolerance
  882. }
  883. this.ajaxSend.sendAjax(this, sendData2, this.config.addMissionScheduleInfo, this.ajaxSend.type.post, this.addMissionScheduleInfoCallback.bind(this));
  884. }
  885. }.bind(this));
  886. //清除所有选择
  887. this.domObj.find('.btn_removeall').off("click").on("click", function () {
  888. this.devices_selected_layers.clear();
  889. if (this.dynamicMapServer) {
  890. this.map.removeLayer(this.dynamicMapServer);
  891. this.dynamicMapServer = null;
  892. }
  893. if (this.addData.deviceTypeIds.split(",").length > 1) {
  894. this.objectids = [];
  895. this.dataTable_current_list = {};
  896. this.objectIdsStr = {};//id集合
  897. this.gisUrlList = {};//多选时的gpurl集合
  898. this.addSelectItems_more(this);
  899. } else {
  900. this.objectids = [];
  901. this.addSelectItems(this);
  902. }
  903. this.addData.objectIds = "";
  904. this.domObj.find(".pipeTypeLength").text('0');
  905. this.devices_selected = [];//设备归为0
  906. }.bind(this));
  907. //地图上选择
  908. this.domObj.find('.btn_select').off("click").on("click", function () {
  909. if (this.drawToolbar != null) {
  910. this.map.setMapCursor('default');
  911. this.drawToolbar.deactivate();
  912. this.drawToolbar = null;
  913. }
  914. this.map.setMapCursor('crosshair');
  915. this.drawToolbar = new Draw(this.AppX.runtimeConfig.map);
  916. this.drawToolbar.activate(Draw.POLYGON);
  917. this.drawToolbar.on("draw-end", function (evt) {
  918. this.map.setMapCursor('default');
  919. var geometry = evt.geometry;
  920. if (geometry == null) {
  921. return;
  922. }
  923. if (!geometryEngine.contains(this.currentRegionPolygon, evt.geometry) && !geometryEngine.intersects(this.currentRegionPolygon, evt.geometry)) {
  924. this.toast.Show("选择范围在当前片区外,请选择当前片区内的信息!");
  925. return;
  926. }
  927. geometry = geometryEngine.intersect(this.currentRegionPolygon, evt.geometry);
  928. this.drawToolbar.deactivate();
  929. var url = this.AppX.appConfig.gisResource.pipe.config[this.config.mapindex].url;//pipe
  930. if (this.addData.deviceTypeIds.split(",").length > 1) {
  931. var device_Type_Ids = this.addData.deviceTypeIds.split(",");
  932. var forCounter = 0;//for循环计数
  933. var forGpCounter = 0;
  934. var layernameStr = [];
  935. //var objectIdsStr = {};
  936. var outfields = null;
  937. this.objectIdsStr = {};
  938. this.loadWait.show("正在查询选择" + this.current_device_type_name + "信息,请等待...", this.domObj);
  939. for (let i = 0; i < device_Type_Ids.length; i++) {
  940. var obj = this.getDeviceType(device_Type_Ids[i]);
  941. var fields = this.getLayerShowFieldNames(obj.cnContactLayerName);
  942. var where = obj.sqlfilter;
  943. var param = { "where": where, "spatialRel": "esriSpatialRelIntersects", "returnGeometry": false, "geometryType": "esriGeometryPolygon", "geometry": JSON.stringify(geometry), "returnIdsOnly": true, "f": "json" };
  944. $.ajax({
  945. type: "POST",
  946. url: url + "/" + obj.contactLayerId + "/query",
  947. cache: false,
  948. async: false,//用同步请求来解决返回数据顺序问题
  949. data: param,
  950. dataType: "json",
  951. success: function (response) {
  952. forCounter++;
  953. if (response.error !== undefined) {
  954. this.AppX.runtimeConfig.toast.Show("查询失败,请联系管理员");
  955. return;
  956. }
  957. outfields = fields.map(e => { return e.name });
  958. if (!response.objectIds) {
  959. //this.loadWait.hide();
  960. //objectIdsStr[forCounter-1] = "无objectid"
  961. //return;
  962. } else {
  963. var objid = this.getDeviceType(device_Type_Ids[forCounter - 1]);
  964. layernameStr.push(objid.cnContactLayerName);
  965. //let data = _.union(response.objectIds, this.objectids);
  966. this.objectIdsStr[objid.cnContactLayerName] = response.objectIds.join();
  967. }
  968. //let layerName = "";
  969. if (forCounter == device_Type_Ids.length) {
  970. this.gp = new Geoprocessor(this.analyzeUrl);
  971. var objStr = "";
  972. for (var i in this.objectIdsStr) {
  973. objStr += this.objectIdsStr[i] + ";"
  974. }
  975. //this.objectids = data;
  976. this.addData.objectIds = objStr;
  977. //此次gp服务,管线图层查询是传入图层名称必须是管线
  978. // if (obj.cnContactLayerName.indexOf('管线') == -1) {
  979. //
  980. // } else {
  981. // layerName = '管线';
  982. // }
  983. var options = {
  984. "layername": layernameStr.join(","),
  985. "objectids": objStr,
  986. "outfields": outfields.join(","),
  987. usertoken: this.AppX.appConfig.gisToken
  988. };
  989. var delayResult = this.gp.submitJob(
  990. options,
  991. function (jobinfo) {
  992. //forGpCounter++;
  993. if (this.dynamicMapServer) {
  994. this.map.removeLayer(this.dynamicMapServer);
  995. this.dynamicMapServer = null;
  996. }
  997. let mapServerUrl = this.mapServerUrl + "/jobs/" + jobinfo.jobId;
  998. for (let k = 0; k < device_Type_Ids.length; k++) {
  999. var gpCounterId = this.getDeviceType(device_Type_Ids[k]);
  1000. this.gisUrlList[gpCounterId.cnContactLayerName] = url + "/" + gpCounterId.contactLayerId + "/query";
  1001. }
  1002. //this.addData.gisUrl = url + "/" + obj.contactLayerId + "/query";
  1003. $.ajax({
  1004. type: "get",
  1005. dataType: "json",
  1006. url: this.analyzeUrl + "/jobs/" + jobinfo.jobId + "/" + jobinfo.results.summary.paramUrl + "?f=pjson",
  1007. success: function (result) {
  1008. var pipeTypeLength = "";
  1009. if (result.value.result) {
  1010. for (let j = 0; j < result.value.result.summary.layersummary.length; j++) {
  1011. pipeTypeLength += result.value.result.summary.layersummary[j].layername + ":" + result.value.result.summary.layersummary[j].length + "米;"
  1012. }
  1013. this.domObj.find(".pipeTypeLength").text(pipeTypeLength);
  1014. } else {
  1015. this.domObj.find(".pipeTypeLength").text(result.value.message);
  1016. }
  1017. }.bind(this)
  1018. })
  1019. this.dynamicMapServer = new ArcGISDynamicMapServiceLayer(mapServerUrl);
  1020. this.dynamicMapServer.id = this.preLayerId + "dynamicMapServer";
  1021. this.map.addLayer(this.dynamicMapServer);
  1022. this.addSelectItems_more(this);
  1023. this.loadWait.hide();
  1024. }.bind(this),
  1025. function (jobinfo) {
  1026. this.jobid = jobinfo.jobId;
  1027. }.bind(this),
  1028. function (jobinfo) {
  1029. this.AppX.runtimeConfig.toast.show("分析失败,请联系管理员");
  1030. this.loadWait.hide();
  1031. console.error(jobinfo);
  1032. }.bind(this)
  1033. );
  1034. }
  1035. }.bind(this),
  1036. error: function (results) {
  1037. forCounter++;
  1038. this.loadWait.hide();
  1039. this.toast.Show("查询片区巡检信息出错!");
  1040. return;
  1041. // forCounter++;
  1042. // //this.loadWait.hide();
  1043. // this.toast.Show("查询片区巡检信息出错!");
  1044. // var objid = this.getDeviceType(device_Type_Ids[forCounter-1]);
  1045. // if(forCounter == device_Type_Ids.length){
  1046. // this.gp = new Geoprocessor(this.analyzeUrl);
  1047. // for(var i in this.objectIdsStr){
  1048. // this.objectids += this.objectIdsStr[i]+";"
  1049. // }
  1050. // //this.objectids = data;
  1051. // this.addData.objectIds = this.objectids;
  1052. // //此次gp服务,管线图层查询是传入图层名称必须是管线
  1053. // // if (obj.cnContactLayerName.indexOf('管线') == -1) {
  1054. // //
  1055. // // } else {
  1056. // // layerName = '管线';
  1057. // // }
  1058. // var options = {
  1059. // "layername": layernameStr.join(","),
  1060. // "objectids": this.objectids,
  1061. // "outfields": outfields.join(","),
  1062. // usertoken: this.AppX.appConfig.gisToken
  1063. // };
  1064. // var delayResult = this.gp.submitJob(
  1065. // options,
  1066. // function (jobinfo) {
  1067. // if (this.dynamicMapServer) {
  1068. // this.map.removeLayer(this.dynamicMapServer);
  1069. // this.dynamicMapServer = null;
  1070. // }
  1071. // let mapServerUrl = this.mapServerUrl + "/jobs/" + jobinfo.jobId;
  1072. // //this.addData.gisUrl = url + "/" + obj.contactLayerId + "/query";
  1073. // for(let k =0;k<device_Type_Ids.length;k++){
  1074. // var gpCounterId = this.getDeviceType(device_Type_Ids[k]);
  1075. // this.gisUrlList[gpCounterId.cnContactLayerName] = url + "/" + gpCounterId.contactLayerId + "/query";
  1076. // }
  1077. // //this.gisUrlList[objid.cnContactLayerName] = url + "/" + objid.contactLayerId + "/query";
  1078. // $.ajax({
  1079. // type: "get",
  1080. // dataType: "json",
  1081. // url: this.analyzeUrl + "/jobs/" + jobinfo.jobId + "/" + jobinfo.results.summary.paramUrl + "?f=pjson",
  1082. // success: function (result) {
  1083. // this.domObj.find(".pipeTypeLength").text(result.value.result.summary.layersummary[0].length);
  1084. // }.bind(this)
  1085. // })
  1086. // this.dynamicMapServer = new ArcGISDynamicMapServiceLayer(mapServerUrl);
  1087. // this.dynamicMapServer.id = this.preLayerId + "dynamicMapServer";
  1088. // this.map.addLayer(this.dynamicMapServer);
  1089. // this.addSelectItems_more(this);
  1090. // this.loadWait.hide();
  1091. // }.bind(this),
  1092. // function (jobinfo) {
  1093. // this.jobid = jobinfo.jobId;
  1094. // }.bind(this),
  1095. // function (jobinfo) {
  1096. // this.AppX.runtimeConfig.toast.show("分析失败,请联系管理员");
  1097. // this.loadWait.hide();
  1098. // console.error(jobinfo);
  1099. // }.bind(this)
  1100. // );
  1101. // }
  1102. }.bind(this)
  1103. });
  1104. }
  1105. } else {
  1106. var Material = this.domObj.find(".MATERIAL option:selected").val()
  1107. var obj = this.getDeviceType(this.addData.deviceTypeIds);
  1108. var fields = this.getLayerShowFieldNames(obj.cnContactLayerName);
  1109. this.loadWait.show("正在查询选择" + this.current_device_type_name + "信息,请等待...", this.domObj);
  1110. var where;
  1111. if(obj.sqlfilter) {
  1112. where = '('+obj.sqlfilter+')';
  1113. if(Material != '') where += ` and MATERIAL='${Material}'`
  1114. }else{
  1115. if(Material != '') where = `MATERIAL='${Material}'`
  1116. }
  1117. var param = { "where": where, "spatialRel": "esriSpatialRelIntersects", "returnGeometry": false, "geometryType": "esriGeometryPolygon", "geometry": JSON.stringify(geometry), "returnIdsOnly": true, "f": "json" };
  1118. $.ajax({
  1119. type: "POST",
  1120. url: url + "/" + obj.contactLayerId + "/query",
  1121. cache: false,
  1122. data: param,
  1123. dataType: "json",
  1124. success: function (response) {
  1125. if (response.error !== undefined) {
  1126. this.AppX.runtimeConfig.toast.Show("查询失败,请联系管理员");
  1127. return;
  1128. }
  1129. let outfields = fields.map(e => { return e.name })
  1130. if (!response.objectIds) {
  1131. this.loadWait.hide();
  1132. return;
  1133. }
  1134. this.gp = new Geoprocessor(this.analyzeUrl);
  1135. let data = _.union(response.objectIds, this.objectids);
  1136. this.objectids = data;
  1137. this.addData.objectIds = _.join(this.objectids, ",");
  1138. //此次gp服务,管线图层查询是传入图层名称必须是管线
  1139. let layerName = "";
  1140. layerName = obj.cnContactLayerName;
  1141. // if (obj.cnContactLayerName.indexOf('管线') == -1) {
  1142. //
  1143. // } else {
  1144. // layerName = '管线';
  1145. // }
  1146. var options = {
  1147. "layername": layerName,
  1148. "objectids": this.objectids.join(","),
  1149. "outfields": outfields.join(","),
  1150. usertoken: this.AppX.appConfig.gisToken
  1151. };
  1152. var delayResult = this.gp.submitJob(
  1153. options,
  1154. function (jobinfo) {
  1155. if (this.dynamicMapServer) {
  1156. this.map.removeLayer(this.dynamicMapServer);
  1157. this.dynamicMapServer = null;
  1158. }
  1159. let mapServerUrl = this.mapServerUrl + "/jobs/" + jobinfo.jobId;
  1160. this.addData.gisUrl = url + "/" + obj.contactLayerId + "/query";
  1161. $.ajax({
  1162. type: "get",
  1163. dataType: "json",
  1164. url: this.analyzeUrl + "/jobs/" + jobinfo.jobId + "/" + jobinfo.results.summary.paramUrl + "?f=pjson",
  1165. success: function (result) {
  1166. this.domObj.find(".pipeTypeLength").text(result.value.result.summary.layersummary[0].length);
  1167. }.bind(this)
  1168. })
  1169. this.dynamicMapServer = new ArcGISDynamicMapServiceLayer(mapServerUrl);
  1170. this.dynamicMapServer.id = this.preLayerId + "dynamicMapServer";
  1171. this.map.addLayer(this.dynamicMapServer);
  1172. this.addSelectItems(this);
  1173. this.loadWait.hide();
  1174. }.bind(this),
  1175. function (jobinfo) {
  1176. this.jobid = jobinfo.jobId;
  1177. }.bind(this),
  1178. function (jobinfo) {
  1179. this.AppX.runtimeConfig.toast.show("分析失败,请联系管理员");
  1180. this.loadWait.hide();
  1181. console.error(jobinfo);
  1182. }.bind(this)
  1183. );
  1184. }.bind(this),
  1185. error: function (results) {
  1186. this.loadWait.hide();
  1187. this.toast.Show("查询片区巡检信息出错!");
  1188. }.bind(this)
  1189. });
  1190. }
  1191. }.bind(this));
  1192. }.bind(this));
  1193. //清除部分选择
  1194. this.domObj.find('.btn_part_removeall').off("click").on("click", function () {
  1195. if (this.drawToolbar != null) {
  1196. this.map.setMapCursor('default');
  1197. this.drawToolbar.deactivate();
  1198. this.drawToolbar = null;
  1199. }
  1200. this.map.setMapCursor('crosshair');
  1201. this.drawToolbar = new Draw(this.AppX.runtimeConfig.map);
  1202. this.drawToolbar.activate(Draw.POLYGON);
  1203. this.drawToolbar.on("draw-end", function (evt) {
  1204. this.map.setMapCursor('default');
  1205. var geometry = evt.geometry;
  1206. if (geometry == null) {
  1207. return;
  1208. }
  1209. this.drawToolbar.deactivate();
  1210. var url = this.AppX.appConfig.gisResource.pipe.config[this.config.mapindex].url;
  1211. var obj = this.getDeviceType(this.addData.deviceTypeIds);
  1212. var fields = this.getLayerShowFieldNames(obj.cnContactLayerName);
  1213. this.loadWait.show("正在查询删除的选择" + this.current_device_type_name + "信息,请等待...", this.domObj);
  1214. var where = obj.sqlfilter;
  1215. var param = { "where": where, "spatialRel": "esriSpatialRelIntersects", "returnGeometry": false, "geometryType": "esriGeometryPolygon", "geometry": JSON.stringify(geometry), "returnIdsOnly": true, "f": "json" };
  1216. $.ajax({
  1217. type: "POST",
  1218. url: url + "/" + obj.contactLayerId + "/query",
  1219. cache: false,
  1220. data: param,
  1221. dataType: "json",
  1222. success: function (response) {
  1223. if (response.error !== undefined) {
  1224. this.AppX.runtimeConfig.toast.Show("查询失败,请联系管理员");
  1225. return;
  1226. }
  1227. let outfields = fields.map(e => { return e.name })
  1228. if (!response.objectIds) {
  1229. this.loadWait.hide();
  1230. return;
  1231. }
  1232. this.gp = new Geoprocessor(this.analyzeUrl);
  1233. let data = _.difference(this.objectids, response.objectIds);
  1234. this.objectids = data;
  1235. this.addData.objectIds = _.join(this.objectids, ",");
  1236. //此次gp服务,管线图层查询是传入图层名称必须是管线
  1237. let layerName = "";
  1238. layerName = obj.cnContactLayerName;
  1239. // if (obj.cnContactLayerName.indexOf('管线') == -1) {
  1240. //
  1241. // } else {
  1242. // layerName = '管线';
  1243. // }
  1244. var options = {
  1245. "layername": layerName,
  1246. "objectids": this.objectids.join(","),
  1247. "outfields": outfields.join(","),
  1248. usertoken: this.AppX.appConfig.gisToken
  1249. };
  1250. var delayResult = this.gp.submitJob(
  1251. options,
  1252. function (jobinfo) {
  1253. if (this.dynamicMapServer) {
  1254. this.map.removeLayer(this.dynamicMapServer);
  1255. this.dynamicMapServer = null;
  1256. }
  1257. $.ajax({
  1258. type: "get",
  1259. dataType: "json",
  1260. url: this.analyzeUrl + "/jobs/" + jobinfo.jobId + "/" + jobinfo.results.summary.paramUrl + "?f=pjson",
  1261. success: function (result) {
  1262. this.domObj.find(".pipeTypeLength").text(result.value.result.summary.layersummary[0].length);
  1263. }.bind(this)
  1264. })
  1265. this.dynamicMapServer = new ArcGISDynamicMapServiceLayer(this.mapServerUrl + "/jobs/" + jobinfo.jobId);
  1266. this.dynamicMapServer.id = this.preLayerId + "dynamicMapServer";
  1267. this.map.addLayer(this.dynamicMapServer);
  1268. this.dynamicMapServer.refresh();
  1269. this.addSelectItems(this);
  1270. }.bind(this),
  1271. function (jobinfo) {
  1272. this.jobid = jobinfo.jobId;
  1273. }.bind(this),
  1274. function (jobinfo) {
  1275. this.loadWait.hide();
  1276. this.AppX.runtimeConfig.toast.show("分析失败,请联系管理员");
  1277. console.error(jobinfo);
  1278. }.bind(this)
  1279. );
  1280. }.bind(this),
  1281. error: function (results) {
  1282. this.loadWait.hide();
  1283. this.toast.Show("查询片区巡检信息出错!");
  1284. }.bind(this)
  1285. });
  1286. }.bind(this));
  1287. }.bind(this));
  1288. //直接返回到计划列表
  1289. this.domObj.find('.btn_return').off("click").on("click", function () {
  1290. this.initEventVal();
  1291. if (this.dynamicMapServer) {
  1292. this.map.removeLayer(this.dynamicMapServer);
  1293. this.dynamicMapServer = null;
  1294. }
  1295. }.bind(this));
  1296. //上一步 片区列表
  1297. this.domObj.find('.btn_previous_step').off("click").on("click", function () {
  1298. if (this.addData.deviceTypeIds == 1 || this.addData.deviceTypeIds == 2) {
  1299. this.domObj.empty().append(this.template.split('$$')[1]);
  1300. this.initEvent2();
  1301. } else {
  1302. if (this.addData.deviceTypeIds.split(",").length > 1) {
  1303. //this.addDataReset();
  1304. this.dataTable_current_list = {};
  1305. this.objectIdsStr = {};//id集合
  1306. this.gisUrlList = {};//多选时的gpurl集合
  1307. }
  1308. if (this.xunjianSelectVal == "巡检区域") {
  1309. this.domObj.empty().append(this.template.split('$$')[2]);
  1310. this.initEvent3();
  1311. } else {
  1312. this.domObj.empty().append(this.template.split('$$')[13]);
  1313. this.initEvent3_1();
  1314. }
  1315. }
  1316. if (this.dynamicMapServer) {
  1317. this.map.removeLayer(this.dynamicMapServer);
  1318. this.dynamicMapServer = null;
  1319. }
  1320. }.bind(this));
  1321. }
  1322. //通过ajax根据指定的图层和字段,结果放入公共变量fieldUniqueValue中
  1323. getFieldUniqueValueByAjax() {
  1324. var url = this.AppX.appConfig.gisResource.pipe.config[this.config.mapindex].url + this.config.getUniqueValue;
  1325. var obj = this.getDeviceType(this.addData.deviceTypeIds);
  1326. $.ajax({
  1327. type: "post",
  1328. url: esri.config.defaults.io.alwaysUseProxy ? esri.config.defaults.io.proxyUrl + "?" + url : url,
  1329. data: {
  1330. usertoken: this.AppX.appConfig.gisToken2,
  1331. layerid: obj.contactLayerId,
  1332. field_name: "MATERIAL",
  1333. f: "pjson"
  1334. },
  1335. success: function(res){
  1336. var strplanpointtype = "<option value=''>全部</option>";
  1337. var strplanlinetype = "";
  1338. $.each(res.result.rows, function (index, item) {
  1339. strplanpointtype += "<option value='" + item + "'>" + item + "</option>";
  1340. }.bind(this));
  1341. this.domObj.find(".MATERIAL").empty().append(strplanpointtype);
  1342. }.bind(this),
  1343. dataType: "json"
  1344. });
  1345. }
  1346. //计划添加完成
  1347. addMissionScheduleInfoCallback(results) {
  1348. var that = this;
  1349. this.loadWait.hide();
  1350. if (results.code != 1) {
  1351. that.toast.Show(results.message);
  1352. console.log(results.message);
  1353. return;
  1354. } else {
  1355. this.devices_selected = [];
  1356. if (this.dynamicMapServer) {
  1357. this.map.removeLayer(this.dynamicMapServer);
  1358. }
  1359. this.missionschedule_plandetail_polylinelayer.clear();
  1360. this.devices_selected_layers.clear();
  1361. that.toast.Show("添加巡检计划成功!");
  1362. this.addDataReset();
  1363. this.initEventVal();
  1364. }
  1365. }
  1366. //删除计划完成
  1367. deleteMissionScheduleCallback(results) {
  1368. var that = this;
  1369. if (results.code != 1) {
  1370. that.toast.Show(results.message);
  1371. return;
  1372. } else {
  1373. that.toast.Show("删除巡检计划成功!");
  1374. this.getMissionSchedule();
  1375. }
  1376. }
  1377. //设置点、线或多边形的样式
  1378. setGraphSymbol(type, size?) {
  1379. var symbol = {
  1380. "SimpleMarkerSymbol": null,
  1381. "SimpleLineSymbol": null,
  1382. "SimpleFillSymbol": null,
  1383. };
  1384. switch (type) {
  1385. case "point":
  1386. symbol.SimpleMarkerSymbol = new SimpleMarkerSymbol(
  1387. {
  1388. color: new Color(this.config.color),
  1389. style: "diamond", //点样式solid\cross\square|diamond|circle|x
  1390. outline: {
  1391. color: new Color(this.config.color),
  1392. width: 0.2
  1393. }
  1394. }
  1395. );
  1396. break;
  1397. case "polyline":
  1398. symbol.SimpleLineSymbol = new SimpleLineSymbol({
  1399. color: new Color(this.config.color),
  1400. style: "solid", //线的样式 dash|dash-dot|solid等
  1401. width: size ? size : 3
  1402. });
  1403. break;
  1404. case "polygon":
  1405. symbol.SimpleFillSymbol = new SimpleFillSymbol({
  1406. color: new Color([0, 0, 255, 0.5]),
  1407. style: "solid",
  1408. outline: {
  1409. color: new Color(this.config.color),
  1410. width: 1
  1411. }
  1412. });
  1413. break;
  1414. }
  1415. if (symbol.SimpleMarkerSymbol != null) {
  1416. return symbol.SimpleMarkerSymbol;
  1417. } else if (symbol.SimpleLineSymbol != null) {
  1418. return symbol.SimpleLineSymbol;
  1419. } else {
  1420. return symbol.SimpleFillSymbol;
  1421. }
  1422. }
  1423. /**
  1424. * @function 设置渲染符号
  1425. * @param type(point,polyline,polygon)
  1426. * @param color颜色([0,0,0,1])
  1427. * @param size
  1428. */
  1429. setGraphSymbolByType(type, color, size) {
  1430. var symbol = {
  1431. "SimpleMarkerSymbol": null,
  1432. "SimpleLineSymbol": null,
  1433. "SimpleFillSymbol": null,
  1434. };
  1435. switch (type) {
  1436. case "point":
  1437. symbol.SimpleMarkerSymbol = new SimpleMarkerSymbol(
  1438. {
  1439. color: new Color(color),
  1440. style: "diamond", //点样式solid\cross\square|diamond|circle|x
  1441. outline: {
  1442. color: new Color(color),
  1443. width: size
  1444. }
  1445. }
  1446. );
  1447. break;
  1448. case "polyline":
  1449. symbol.SimpleLineSymbol = new SimpleLineSymbol({
  1450. color: new Color(color),
  1451. style: "solid", //线的样式 dash|dash-dot|solid等
  1452. width: size
  1453. });
  1454. break;
  1455. case "polygon":
  1456. symbol.SimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
  1457. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
  1458. new Color(color), size), new Color([0, 0, 0, 0.1]));
  1459. break;
  1460. }
  1461. if (symbol.SimpleMarkerSymbol != null) {
  1462. return symbol.SimpleMarkerSymbol.setSize(size);
  1463. } else if (symbol.SimpleLineSymbol != null) {
  1464. return symbol.SimpleLineSymbol;
  1465. } else {
  1466. return symbol.SimpleFillSymbol;
  1467. }
  1468. }
  1469. //设置点的样式
  1470. setSymbol(txt?) {
  1471. var symbol = [];
  1472. var fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT, new Color([255, 0, 0]), 2), new Color([0, 0, 0, 0.1]));
  1473. var fillSymbol2 = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 255, 0]), 2), new Color([255, 255, 255, 0.3]));
  1474. var peopleSymbol = new PictureMarkerSymbol(this.config.MarkPictureSymbol, 24, 24);
  1475. //根据字长度设置背景图片宽度
  1476. var peopletextSymbol = new PictureMarkerSymbol(this.config.TextbgSymbol, txt == null ? 0 : txt.length * 90 / 6, 18);
  1477. var warnSymbol = new PictureMarkerSymbol(this.config.WarnMarkPictureSymbol, 24, 24);
  1478. var lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 3);
  1479. symbol.push(peopleSymbol);
  1480. symbol.push(peopletextSymbol);
  1481. symbol.push(fillSymbol);
  1482. symbol.push(fillSymbol2);
  1483. symbol.push(warnSymbol);
  1484. symbol.push(lineSymbol);
  1485. return symbol;
  1486. }
  1487. /**--------------------第一页 计划查询显示、新增、复制、提交------------------- */
  1488. /**
  1489. * @function 查询所有计划信息
  1490. */
  1491. getMissionSchedule() {
  1492. this.loadWait.show("正在查询数据,请耐心等待...", this.domObj);
  1493. this.clearCurrentTr();
  1494. this.plan_addpontype_layer.clear()
  1495. let that = this;
  1496. let dom = this.domObj.find('#planslist_table .dataTables_scroll');
  1497. let startTime = this.domObj.find("#plan_begindate").val();
  1498. let endTime = this.domObj.find("#plan_enddate").val();
  1499. that.dataTable_all_searchInfo = {
  1500. deptId: this.domObj.find(".department option:selected").val(),
  1501. userId: this.domObj.find(".users option:selected").val(),
  1502. createUser: this.domObj.find(".createUser").val(),
  1503. isResultPoint:"1",
  1504. "orders[0].asc": false,
  1505. "orders[0].column": 'CREATE_TIME',
  1506. childBeginDate: startTime == "" ? "" : this.ajaxSend.conductAddTime(startTime),
  1507. childEndDate: endTime == "" ? "" : this.ajaxSend.conductAddEndTime(endTime)
  1508. }
  1509. if (dom.length > 0) {
  1510. if (that.dataTable_all) {
  1511. that.dataTable_all.ajax.reload();
  1512. return;
  1513. };
  1514. } else {
  1515. if (that.dataTable_all) {
  1516. that.dataTable_all.destroy();
  1517. that.dataTable_all = null;
  1518. };
  1519. }
  1520. let option = {
  1521. that: this,
  1522. dataTable: that.dataTable_all,
  1523. elementId: "planslist_table",
  1524. url: that.config.getMissionScheduleList,
  1525. searchInfo: that.dataTable_all_searchInfo,//条件在不断变化,故需要有全局的条件监听
  1526. // displayTitle: ["部门", "姓名", "巡检名称", "巡检周期", "巡检类型", "所属片区", "计划开始时间", "计划结束时间", "创建人", "创建时间", "状态"],
  1527. // displayField: ["deptName", "userIdName", "description", "preiodName", "deviceTypeName", "regionName", "childBeginDate", "childEndDate", "createUserName", "createTime", "chilePlanStateName"],
  1528. displayTitle: ["部门", "姓名", "巡检名称", "巡检周期", "巡检类型", "计划开始时间", "计划结束时间", "计划完成率(%)", "巡检模式", "创建人", "创建时间", "状态"],
  1529. displayField: ["deptName", "userIdName", "description", "preiodName", "deviceTypeName", "childBeginDate", "childEndDate", "planRate", "modeName", "createUserName", "createTime", "chilePlanStateName"],
  1530. extentDisplayTitle: ['定位查看'],
  1531. extentDisplayContent: [{
  1532. field: "planInfoLook",
  1533. fieldContent: "<a class='planInfoLook'>定位查看</a>"
  1534. }],
  1535. beforeTrClickEvent: undefined,
  1536. afterTrClickEvent: function () {
  1537. },
  1538. drawEvent: function () {
  1539. $.each(that.domObj.find("#planslist_table tr[class]"), function (index, item) {
  1540. $($(item).find('td')[8]).text(that.dataTable_all.aExtentData.currentAllData[index].planRate + "%");
  1541. })
  1542. that.domObj.off('click', '.planInfoLook').on('click', ".planInfoLook", e => {
  1543. let dataInfo = that.dataTable_all.aExtentData.currentTableData;
  1544. that.ajaxSend.sendAjax(that, {id:dataInfo.id}, that.config.getMissionScheduleById+dataInfo.id, that.ajaxSend.type.get, that.showPlanInfoMap.bind(that));
  1545. });
  1546. that.loadWait.hide()
  1547. },
  1548. errmassage: "巡检计划查询失败",
  1549. nullmessage: undefined,
  1550. exportTitle: "巡检计划导出"
  1551. }
  1552. that.dataTable_all = this.ajaxSend.DataTables_check(option);
  1553. }
  1554. showPlanInfoMap(res){
  1555. if(res&&res.result){
  1556. let dataInfo=res.result;
  1557. let that=this;
  1558. if (that.dynamicMapServer) {
  1559. that.map.removeLayer(that.dynamicMapServer);
  1560. that.dynamicMapServer = null;
  1561. }
  1562. that.plan_addptype_layer.clear();
  1563. if (dataInfo.deviceTypeId == 1 || dataInfo.deviceTypeId == 2) {
  1564. if (dataInfo.pointInfo) {
  1565. let datageo = JSON.parse(dataInfo.pointInfo);
  1566. that.showMissionScheduleListPlans(datageo);
  1567. } else {
  1568. that.toast.Show("暂无坐标信息!");
  1569. return;
  1570. }
  1571. } else {
  1572. that.loadWait.show("正在查询任务范围,请等待...", that.domObj);
  1573. let url = that.AppX.appConfig.gisResource.pipe.config[that.config.mapindex].url;//pipe
  1574. let obj = that.getDeviceType(dataInfo.deviceTypeId);
  1575. that.gp = new Geoprocessor(that.analyzeUrl);
  1576. let fields = that.getLayerShowFieldNames(obj.cnContactLayerName);
  1577. let outfields = fields.map(e => { return e.name })
  1578. //此次gp服务,管线图层查询是传入图层名称必须是管线
  1579. let layerName = "";
  1580. layerName = obj.cnContactLayerName;
  1581. var options = {
  1582. "layername": layerName,
  1583. "objectids": dataInfo.objectIds,
  1584. "outfields": outfields.join(","),
  1585. usertoken: that.AppX.appConfig.gisToken
  1586. };
  1587. var delayResult = that.gp.submitJob(
  1588. options,
  1589. function (jobinfo) {
  1590. let mapServerUrl = that.mapServerUrl + "/jobs/" + jobinfo.jobId;
  1591. that.addData.gisUrl = url + "/" + obj.contactLayerId + "/query";
  1592. that.dynamicMapServer = new ArcGISDynamicMapServiceLayer(mapServerUrl);
  1593. that.dynamicMapServer.id = that.preLayerId + "dynamicMapServer";
  1594. that.map.addLayer(that.dynamicMapServer);
  1595. $.ajax({
  1596. type: "get",
  1597. dataType: "json",
  1598. url: that.analyzeUrl + "/jobs/" + jobinfo.jobId + "/" + jobinfo.results.summary.paramUrl + "?f=pjson",
  1599. success: function (result) {
  1600. let data = result.value.result.summary;
  1601. // let pointMax=that.ajaxSend.mercator2lonlat({x:data.xmax,y:data.ymax});
  1602. // let pointMin=that.ajaxSend.mercator2lonlat({x:data.xmin,y:data.ymin});
  1603. // that.map.setExtent(new Extent(pointMin.x, pointMin.y,pointMax.x,pointMax.y, that.map.spatialReference))
  1604. that.map.setExtent(new Extent(data.xmin, data.ymin, data.xmax, data.ymax, that.map.spatialReference))
  1605. }.bind(that)
  1606. })
  1607. that.loadWait.hide();
  1608. }.bind(this),
  1609. function (jobinfo) {
  1610. that.jobid = jobinfo.jobId;
  1611. }.bind(this),
  1612. function (jobinfo) {
  1613. that.AppX.runtimeConfig.toast.show("分析失败,请联系管理员");
  1614. that.loadWait.hide();
  1615. console.error(jobinfo);
  1616. }.bind(this)
  1617. );
  1618. }
  1619. }
  1620. }
  1621. /**
  1622. * @function 清除当前选中列表图层信息
  1623. */
  1624. clearCurrentTr() {
  1625. if (this.dynamicMapServer) {
  1626. this.map.removeLayer(this.dynamicMapServer);
  1627. this.dynamicMapServer = null;
  1628. }
  1629. if (this.plan_addptype_layer) {
  1630. this.plan_addptype_layer.clear();
  1631. }
  1632. }
  1633. /**
  1634. * @function 显示计划所有内容
  1635. * @param infos
  1636. */
  1637. showMissionScheduleListPlans(infos) {
  1638. if (infos != null) {
  1639. var gxs = {
  1640. "polygon": [],
  1641. "polyline": [],
  1642. "point": []
  1643. };
  1644. let geometrys = [];
  1645. for (var i = 0; i < infos.length; i++) {
  1646. var info = infos[i];
  1647. if (info) {
  1648. var device_type_id = info.device_type_id, color = [0, 255, 255, 1];
  1649. if (device_type_id != "")
  1650. color = this.config.DeviceSymbol[device_type_id];
  1651. var pobj = null, sym = null, graphic = null;
  1652. if (info.geometry == undefined) {
  1653. return;
  1654. }
  1655. if (info.geometry.hasOwnProperty("paths")) {//线
  1656. pobj = new Polyline(info.geometry);
  1657. sym = this.setGraphSymbolByType("polyline", color, 2);
  1658. graphic = new Graphic(pobj, sym);
  1659. gxs.polyline.push(graphic);
  1660. } else if (info.geometry.hasOwnProperty("rings")) {//面
  1661. pobj = new Polygon(info.geometry);
  1662. sym = this.setGraphSymbolByType("polygon", color, 1);
  1663. graphic = new Graphic(pobj, sym);
  1664. gxs.polygon.push(graphic);
  1665. } else {
  1666. pobj = new Point(info.geometry);
  1667. sym = this.setGraphSymbolByType("point", color, 6);
  1668. graphic = new Graphic(pobj, sym);
  1669. gxs.point.push(graphic);
  1670. }
  1671. geometrys.push(pobj)
  1672. }
  1673. }
  1674. gxs.polygon.forEach((p, index) => {
  1675. this.plan_addptype_layer.add(p);
  1676. });
  1677. gxs.polyline.forEach((p, index) => {
  1678. this.plan_addptype_layer.add(p);
  1679. });
  1680. gxs.point.forEach((p, index) => {
  1681. this.plan_addptype_layer.add(p);
  1682. })
  1683. var geometry = geometryEngine.union(geometrys);
  1684. if (geometry.type && geometry.type == "point") {
  1685. this.map.centerAt(geometry)
  1686. } else {
  1687. this.map.setExtent(geometry.getExtent());
  1688. }
  1689. }
  1690. }
  1691. /**
  1692. * @function 获取部门列表
  1693. */
  1694. getGroup(selectType: selectType) {
  1695. let data = {
  1696. // id: this.AppX.appConfig.deptId
  1697. current: 1,
  1698. size: 10000
  1699. }
  1700. this.ajaxSend.sendAjax(this, data, this.config.getGroupList, this.ajaxSend.type.get, this.getGroupListCallback.bind(this, selectType));
  1701. }
  1702. getGroupListCallback(optionType, results) {
  1703. if (results.code != 1) {
  1704. this.toast.Show(results.message);
  1705. return;
  1706. }
  1707. let strdepartment = "";
  1708. if (optionType == selectType.all) {
  1709. strdepartment = ("<option selected value=''>全部</option>");
  1710. }
  1711. $.each(results.result.records, function (index, item) {
  1712. if (optionType == selectType.single && this.addData.companyid) {
  1713. if (this.addData.companyid == item.id) {
  1714. strdepartment += "<option selected='selected' value='" + item.id + "'>" + item.name + "</option>";
  1715. } else {
  1716. strdepartment += "<option value='" + item.id + "'>" + item.name + "</option>";
  1717. }
  1718. } else {
  1719. strdepartment += "<option value='" + item.id + "'>" + item.name + "</option>";
  1720. }
  1721. }.bind(this));
  1722. this.domObj.find(".department").empty().append(strdepartment);
  1723. this.getUser(optionType, this.domObj.find(".department").val());
  1724. }
  1725. /**
  1726. * @function 根据部门id获取用户列表,空代表查询全部
  1727. * @param isall 是否全部
  1728. */
  1729. getUser(optionType: selectType, companyid) {
  1730. let data = {
  1731. "current": 1,
  1732. "size": this.config.pagemaxsize,
  1733. // "sfbd": 1,
  1734. "departmentId": companyid
  1735. }
  1736. this.ajaxSend.sendAjax(this, data, this.config.getUserList, this.ajaxSend.type.get, function (results) {
  1737. var that = this;
  1738. if (results.code != 1) {
  1739. that.toast.Show(results.message);
  1740. return;
  1741. }
  1742. let strusers = "";
  1743. if (optionType == selectType.all) {
  1744. strusers = "<option selected value=''>全部</option>";
  1745. }
  1746. if (results.result.records.length == 0) {
  1747. strusers = "<option selected value=''>暂无巡检人员</option>"
  1748. } else {
  1749. $.each(results.result.records, function (index, item) {
  1750. // if (this.addData.userId) {
  1751. // for(var i = 0;i<this.addData.userId.split(",").length;i++){
  1752. // var id = this.addData.userId.split(",")[i];
  1753. // if(item.id==id){
  1754. // strusers+="<option value='"+item.id+"' selected='selected'>"+item.realName+"</option>";
  1755. // break;
  1756. // }else if(i == this.addData.userId.split(",").length-1){
  1757. // strusers+="<option value='"+item.id+"'>"+item.realName+"</option>";
  1758. // break;
  1759. // }else{
  1760. // //html+="<option value='"+item.id+"'>"+item.name+"</option>";
  1761. // //break;
  1762. // }
  1763. // }
  1764. // // if (optionType == selectType.single && this.addData.userId == item.id) {
  1765. // // strusers += "<option value='" + item.id + "'>" + item.realName + "</option>";
  1766. // // } else {
  1767. // // strusers += "<option value='" + item.id + "'>" + item.realName + "</option>";
  1768. // // }
  1769. // } else {
  1770. strusers += "<option value='" + item.id + "'>" + item.realName + "</option>";
  1771. // if (optionType == selectType.single) {
  1772. // strusers += "<option value='" + item.id + "'>" + item.realName + "</option>";
  1773. // } else {
  1774. // strusers += "<option value='" + item.id + "'>" + item.realName + "</option>";
  1775. // }
  1776. //}
  1777. }.bind(this));
  1778. }
  1779. this.domObj.find(".users").empty().append(strusers);
  1780. // if(optionType == selectType.single){
  1781. // var pointType = this.domObj.find(".plantype option:selected").attr("data-type");
  1782. // var pointTxt = this.domObj.find(".plantype option:selected").html();
  1783. // if(pointType == "0" && pointTxt != "巡检点"){
  1784. // this.domObj.find(".users").attr("multiple","multiple");
  1785. // }else{
  1786. // this.domObj.find(".users").removeAttr("multiple");
  1787. // }
  1788. if (optionType == selectType.single) {
  1789. this.domObj.find(".subUsers").empty().append(strusers);
  1790. var selectedUserVal = this.domObj.find(".users option:selected").val();
  1791. var subUsersOptions = this.domObj.find(".subUsers option");
  1792. for (var i = 0; i < subUsersOptions.length; i++) {
  1793. if ($(subUsersOptions[i]).val() == selectedUserVal) {
  1794. subUsersOptions[i].disabled = true;
  1795. } else {
  1796. subUsersOptions[i].disabled = false;
  1797. }
  1798. }
  1799. //var subUsersOptions = this.domObj.find(".users option:not(:selected)");
  1800. //this.domObj.find(".users").append(subUsersOptions);
  1801. //this.domObj.find(".subUsers").empty().append(subUsersOptions);
  1802. var selectedTypeVal = this.domObj.find(".planpointtype option:selected").val();
  1803. this.domObj.find(".users").multiselect("destroy").multiselect({
  1804. maxHeight: 200,
  1805. inheritClass: false
  1806. });
  1807. if (selectedTypeVal == "1") {
  1808. this.domObj.find(".subUsers").multiselect("destroy").multiselect({
  1809. maxHeight: 200,
  1810. inheritClass: false
  1811. }).multiselect("disable");
  1812. } else {
  1813. this.domObj.find(".subUsers").multiselect("destroy").multiselect({
  1814. maxHeight: 200,
  1815. inheritClass: false
  1816. });
  1817. }
  1818. }
  1819. }.bind(this));
  1820. }
  1821. /**
  1822. * @function 获取巡检类型
  1823. */
  1824. getPlanType() {
  1825. let data = {
  1826. current: 1,
  1827. size: 10000
  1828. }
  1829. this.ajaxSend.sendAjax(this, data, this.config.getPlanType, this.ajaxSend.type.get, this.getPlanTypeListCallback.bind(this));
  1830. }
  1831. getPlanTypeListCallback(results) {
  1832. if (results.code != 1) {
  1833. this.toast.Show(results.message);
  1834. return;
  1835. }
  1836. var strplanpointtype = "";
  1837. var strplanlinetype = "";
  1838. $.each(results.result.records, function (index, item) {
  1839. if (item.type == "0") {
  1840. strplanpointtype += "<option value='" + item.id + "' data-type='" + item.type + "' data-device_type_id='" + item.id + "'>" + item.name + "</option>";
  1841. } else if (item.type == "1") {
  1842. if (item.id == 2) {//巡检线为单选类型,加入到单选类型中去
  1843. strplanpointtype += "<option value='" + item.id + "' data-type='" + item.type + "' data-device_type_id='" + item.id + "'>" + item.name + "</option>";
  1844. } else {
  1845. if (item.id != 15) {//去除预埋管线
  1846. strplanlinetype += "<option value='" + item.id + "' data-type='" + item.type + "' data-device_type_id='" + item.id + "'>" + item.name + "</option>";
  1847. }
  1848. }
  1849. }
  1850. }.bind(this));
  1851. this.domObj.find(".planpointtype").empty().append(strplanpointtype);
  1852. this.domObj.find(".planlinetype").empty().append(strplanlinetype);
  1853. this.domObj.find(".planpointtype").multiselect({
  1854. maxHeight: 200,
  1855. minwidth: 238,
  1856. inheritClass: false
  1857. });
  1858. this.domObj.find(".planlinetype").multiselect({
  1859. maxHeight: 200,
  1860. minwidth: 238,
  1861. inheritClass: false
  1862. });
  1863. this.getGroup(selectType.single);
  1864. }
  1865. /**
  1866. * @function 获取巡检周期
  1867. */
  1868. getPeriod() {
  1869. let data = {
  1870. current: 1,
  1871. size: 10000
  1872. }
  1873. this.ajaxSend.sendAjax(this, data, this.config.getPeriod, this.ajaxSend.type.get, this.getPeriodListCallback.bind(this));
  1874. }
  1875. getPeriodListCallback(results) {
  1876. var that = this;
  1877. if (results.code != 1) {
  1878. that.toast.Show(results.message);
  1879. return;
  1880. }
  1881. var strperiod = "";
  1882. $.each(results.result.records, function (index, item) {
  1883. if (this.addData.periodId) {
  1884. if (this.addData.periodId == item.id) {
  1885. strperiod += "<option selected='selected' value='" + item.id + "' data-days='" + item.intervalDays + "'>" + item.periodName + "</option>";
  1886. } else {
  1887. strperiod += "<option value='" + item.id + "' data-days='" + item.intervalDays + "'>" + item.periodName + "</option>";
  1888. }
  1889. } else {
  1890. strperiod += "<option value='" + item.id + "' data-days='" + item.intervalDays + "'>" + item.periodName + "</option>";
  1891. }
  1892. }.bind(this));
  1893. this.domObj.find(".periodid").empty().append(strperiod);
  1894. }
  1895. /**--------------------计划周期时间控制--------------------- */
  1896. endDate = {
  1897. format: 'YYYY-MM-DD', //日期格式
  1898. isinitVal: false,
  1899. minDate: "",
  1900. maxDate: "",
  1901. isClear: false,
  1902. isToday: false,
  1903. okfun: function (obj) {
  1904. var period_id = this.domObj.find(".periodid option:selected").val() + "";
  1905. if (period_id == "3") {//一周一巡
  1906. var startDate = this.domObj.find(".plan_begindate").val();
  1907. var start = new Date(startDate.replace(/-/g, "/"));
  1908. var end = new Date(obj.val.replace(/-/g, "/"));
  1909. var res = (end - start) % (24 * 3600 * 1000 * 8);
  1910. if (res != 0) {
  1911. let newEnd = end - res + (24 * 3600 * 1000 * 9);
  1912. let newEndDate = Functions.DateFormat(new Date(newEnd), "yyyy-MM-dd");
  1913. this.domObj.find(".plan_enddate").val(newEndDate);
  1914. this.toast.Show("当前日期不是当前周期的倍数,已自动选择当前周期结束时间");
  1915. }
  1916. }
  1917. if (period_id == "4") {//半月一巡
  1918. if (new Date(obj.val).getDate() > 15) {
  1919. let day = new Date(obj.val).moveToLastDayOfMonth().toString("yyyy-MM-dd");
  1920. this.domObj.find(".plan_enddate").val(day);
  1921. this.toast.Show("已自动选择当前周期结束时间");
  1922. } else if (new Date(obj.val).getDate() < 15) {
  1923. let day = new Date(obj.val).setDate(15);
  1924. day = Functions.DateFormat(new Date(day), "yyyy-MM-dd")
  1925. this.domObj.find(".plan_enddate").val(day);
  1926. this.toast.Show("已自动选择当前周期结束时间");
  1927. } else {
  1928. this.domObj.find(".plan_enddate").val(new Date(obj.val).toString("yyyy-MM-dd"));
  1929. }
  1930. }
  1931. if (period_id == "5") {//一月一巡
  1932. let day = new Date(obj.val).moveToLastDayOfMonth().toString("yyyy-MM-dd");
  1933. this.domObj.find(".plan_enddate").val(day);
  1934. this.toast.Show("已自动选择当前周期结束时间");
  1935. }
  1936. if (period_id == "6") {//二月一巡
  1937. let beginMonth = new Date(this.domObj.find(".plan_begindate").val()).getMonth();//一月=0
  1938. let endMonth = new Date(obj.val).getMonth() + 1;//二月=1
  1939. let totalMonth = endMonth - beginMonth;
  1940. if (totalMonth % 2 == 0) {//一月初到二月底为一个周期,如果选择的是二月的中的日期,则直接定位到二月底;三月=2,endMonth = 2+1;3/2有余数
  1941. let tt = new Date(obj.val).moveToLastDayOfMonth()
  1942. this.domObj.find(".plan_enddate").val(new Date(obj.val).moveToLastDayOfMonth().toString("yyyy-MM-dd"));
  1943. this.toast.Show("已自动选择当前周期结束时间");
  1944. } else {//3月初到四月底为一个周期,如果选择的是3月,则直接定位到下一个月的月底
  1945. let tt = new Date(obj.val).next().month().moveToLastDayOfMonth();
  1946. this.domObj.find(".plan_enddate").val(new Date(obj.val).next().month().moveToLastDayOfMonth().toString("yyyy-MM-dd"));
  1947. this.toast.Show("已自动选择当前周期结束时间");
  1948. }
  1949. //let day = new Date(obj.val).moveToLastDayOfMonth().toString("yyyy-MM-dd");
  1950. //this.domObj.find(".plan_enddate").val(day);
  1951. }
  1952. if (period_id == "7") {//三月一巡
  1953. let beginMonth = new Date(this.domObj.find(".plan_begindate").val()).getMonth();//一月=0
  1954. let endMonth = new Date(obj.val).getMonth() + 1;//三月=2
  1955. let totalMonth = endMonth - beginMonth;
  1956. if (totalMonth % 3 == 0) {//
  1957. let tt = new Date(obj.val).moveToLastDayOfMonth()
  1958. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1959. this.toast.Show("已自动选择当前周期结束时间");
  1960. } else if (totalMonth % 3 == 1) {//余数为1
  1961. let tt = new Date(obj.val).next().month().next().month().moveToLastDayOfMonth();
  1962. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1963. this.toast.Show("已自动选择当前周期结束时间");
  1964. } else if (totalMonth % 3 == 2) {//余数为2
  1965. let tt = new Date(obj.val).next().month().moveToLastDayOfMonth();
  1966. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1967. this.toast.Show("已自动选择当前周期结束时间");
  1968. }
  1969. //let day = new Date(obj.val).moveToLastDayOfMonth().toString("yyyy-MM-dd");
  1970. //this.domObj.find(".plan_enddate").val(day);
  1971. }
  1972. if (period_id == "8") {//半年一巡
  1973. let beginMonth = new Date(this.domObj.find(".plan_begindate").val()).getMonth();//一月=0
  1974. let endMonth = new Date(obj.val).getMonth() + 1;//三6月=5
  1975. let totalMonth = endMonth - beginMonth;
  1976. if (totalMonth % 6 == 0) {//
  1977. let tt = new Date(obj.val).moveToLastDayOfMonth()
  1978. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1979. this.toast.Show("已自动选择当前周期结束时间");
  1980. } else if (totalMonth % 3 == 1) {//余数为1
  1981. let tt = new Date(obj.val).next().month().next().month().next().month().next().month().next().month().moveToLastDayOfMonth();
  1982. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1983. this.toast.Show("已自动选择当前周期结束时间");
  1984. } else if (totalMonth % 3 == 2) {//余数为2
  1985. let tt = new Date(obj.val).next().month().next().month().next().month().next().month().moveToLastDayOfMonth();
  1986. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1987. this.toast.Show("已自动选择当前周期结束时间");
  1988. } else if (totalMonth % 3 == 3) {
  1989. let tt = new Date(obj.val).next().month().next().month().next().month().moveToLastDayOfMonth();
  1990. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1991. this.toast.Show("已自动选择当前周期结束时间");
  1992. } else if (totalMonth % 3 == 4) {
  1993. let tt = new Date(obj.val).next().month().next().month().moveToLastDayOfMonth();
  1994. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1995. this.toast.Show("已自动选择当前周期结束时间");
  1996. } else if (totalMonth % 3 == 5) {
  1997. let tt = new Date(obj.val).next().month().moveToLastDayOfMonth();
  1998. this.domObj.find(".plan_enddate").val(tt.toString("yyyy-MM-dd"));
  1999. this.toast.Show("已自动选择当前周期结束时间");
  2000. }
  2001. //let day = new Date(obj.val).moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2002. //this.domObj.find(".plan_enddate").val(day);
  2003. }
  2004. }.bind(this)
  2005. }
  2006. startDate = {
  2007. format: 'YYYY-MM-DD', //日期格式
  2008. isinitVal: false,
  2009. minDate: "",
  2010. maxDate: "",
  2011. isClear: false,
  2012. isToday: false,
  2013. okfun: function (obj) {
  2014. var period_id = this.domObj.find(".periodid option:selected").val() + "";
  2015. var dt = new Date(obj.val.replace(/-/g, "/"));
  2016. if (period_id == "1") {
  2017. this.endDate.minDate = obj.val;
  2018. } else if (period_id == "2") {
  2019. // this.endDate.minDate = Functions.DateFormat(new Date(dt.getTime() + 24 * 3600000), "yyyy-MM-dd");
  2020. this.endDate.minDate = obj.val;
  2021. }
  2022. else if (period_id == "3") {
  2023. this.endDate.minDate = Functions.DateFormat(new Date(dt.getTime() + 24 * 3600000 * 8), "yyyy-MM-dd");
  2024. }
  2025. if (parseInt(this.domObj.find(".plan_enddate").val().replace(/-/g, "")) < parseInt(this.endDate.minDate.replace(/-/g, ""))) {
  2026. this.domObj.find(".plan_enddate").val(this.endDate.minDate);
  2027. }
  2028. $.jeDate("." + this.baseClass + " .plan_enddate", this.endDate);
  2029. }.bind(this)
  2030. }
  2031. /**
  2032. * @function 控制时间
  2033. */
  2034. initTimes() {
  2035. var period_id = this.domObj.find(".periodid option:selected").val() + "";
  2036. if (this.addData.periodId && (period_id == "undefined" || !period_id)) {
  2037. period_id = this.addData.periodId;
  2038. }
  2039. if (!period_id || period_id == "undefined") {
  2040. period_id = "1";
  2041. }
  2042. if (period_id != "") {
  2043. switch (period_id) {
  2044. case "1"://自定义1
  2045. this.domObj.find(".period_sign").attr("title", "");
  2046. // this.endDate.format = this.startDate.format = 'YYYY-MM-DD hh:mm:ss';
  2047. // this.startDate.minDate = new Date().toString("yyyy-MM-dd HH:mm:ss");
  2048. // this.endDate.minDate = new Date().toString("yyyy-MM-dd 18:00:00");
  2049. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2050. this.startDate.minDate = new Date().toString("yyyy-MM-dd");
  2051. this.endDate.minDate = new Date().toString("yyyy-MM-dd");
  2052. this.endDate.maxDate = this.startDate.maxDate = undefined;
  2053. break;
  2054. case "2"://一天一巡
  2055. // this.domObj.find(".period_sign").attr("title", "从明天开始计算,只允许安排一周内计划,在起止时间内每天重复执行");
  2056. this.domObj.find(".period_sign").attr("title", "从明天开始计算,在起止时间内每天重复执行");
  2057. this.endDate.minDate = this.startDate.minDate = new Date().add(1).day().toString("yyyy-MM-dd");
  2058. /*this.endDate.maxDate = this.startDate.maxDate = new Date().add(7).day().toString("yyyy-MM-dd");*/
  2059. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2060. break;
  2061. case "3"://一周一巡
  2062. // this.domObj.find(".period_sign").attr("title", "从每周星期一开始计算,结束日期每周日,只允许安排一个周期计划");
  2063. this.domObj.find(".period_sign").attr("title", "一个周期计划为实际9天时间");
  2064. /*this.startDate.minDate = this.startDate.maxDate = new Date().next().monday().toString("yyyy-MM-dd");
  2065. this.endDate.minDate = this.endDate.maxDate = new Date().next().monday().next().sunday().toString("yyyy-MM-dd");
  2066. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';*/
  2067. // this.startDate.minDate = this.startDate.maxDate = new Date().next().monday().toString("yyyy-MM-dd");
  2068. this.endDate.minDate = new Date().add(8).day().toString("yyyy-MM-dd");
  2069. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2070. break;
  2071. case "4"://半月一巡
  2072. this.domObj.find(".period_sign").attr("title", "从每月1日或16日开始计算,结束日期15日或月底,只允许安排一个周期计划");
  2073. if (new Date().getDate() > 15)//当前日期在下半月,只能安排下月初的半月计划
  2074. {
  2075. this.startDate.minDate = this.startDate.maxDate = new Date().next().month().toString("yyyy-MM-01");
  2076. //this.endDate.minDate = this.endDate.maxDate = new Date().next().month().toString("yyyy-MM-15");
  2077. this.endDate.minDate = new Date().next().month().toString("yyyy-MM-15");
  2078. }
  2079. else {
  2080. this.startDate.minDate = this.startDate.maxDate = new Date().toString("yyyy-MM-16");
  2081. //this.endDate.minDate = this.endDate.maxDate = new Date().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2082. this.endDate.minDate = new Date().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2083. }
  2084. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2085. break;
  2086. case "5"://一月一巡
  2087. this.domObj.find(".period_sign").attr("title", "从每月1日开始计算,结束日期月底,只允许安排一个周期计划");
  2088. this.startDate.minDate = this.startDate.maxDate = new Date().next().month().toString("yyyy-MM-01");
  2089. //this.endDate.minDate = this.endDate.maxDate = new Date().next().month().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2090. this.endDate.minDate = new Date().next().month().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2091. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2092. break;
  2093. case "6"://二月一巡
  2094. this.domObj.find(".period_sign").attr("title", "从每月1日开始计算,结束日期月底,只允许安排一个周期计划");
  2095. this.startDate.minDate = this.startDate.maxDate = new Date().next().month().toString("yyyy-MM-01");
  2096. this.endDate.minDate = new Date(this.startDate.minDate).next().month().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2097. //this.endDate.minDate = new Date(end).next().month().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2098. //this.endDate.minDate = new Date(this.startDate.minDate).add(59).day().toString("yyyy-MM-dd");
  2099. //this.endDate.maxDate = new Date(this.startDate.minDate).add(65).day().toString("yyyy-MM-dd");
  2100. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2101. break;
  2102. case "7"://三月一巡
  2103. this.domObj.find(".period_sign").attr("title", "从每月1日开始计算,结束日期月底,只允许安排一个周期计划");
  2104. this.startDate.minDate = this.startDate.maxDate = new Date().next().month().toString("yyyy-MM-01");
  2105. this.endDate.minDate = new Date(this.startDate.minDate).next().month().next().month().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2106. //this.endDate.maxDate = new Date(this.startDate.minDate).add(95).day().toString("yyyy-MM-dd");
  2107. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2108. break;
  2109. case "8"://半年一巡
  2110. this.domObj.find(".period_sign").attr("title", "从每月1日开始计算,结束日期月底,只允许安排一个周期计划");
  2111. this.startDate.minDate = this.startDate.maxDate = new Date().next().month().toString("yyyy-MM-01");
  2112. this.endDate.minDate = new Date(this.startDate.minDate).next().month().next().month().next().month().next().month().next().month().moveToLastDayOfMonth().toString("yyyy-MM-dd");
  2113. //this.endDate.maxDate = new Date(this.startDate.minDate).add(185).day().toString("yyyy-MM-dd");
  2114. this.endDate.format = this.startDate.format = 'YYYY-MM-DD';
  2115. break;
  2116. }
  2117. $.jeDate("." + this.baseClass + " .plan_begindate", this.startDate);
  2118. this.domObj.find(".plan_begindate").val(this.startDate.minDate);
  2119. $.jeDate("." + this.baseClass + " .plan_enddate", this.endDate);
  2120. this.domObj.find(".plan_enddate").val(this.endDate.minDate);
  2121. }
  2122. }
  2123. /**
  2124. * @function 获取起止时间---临时用
  2125. * @param dtype 3一周一巡、4半月一巡、5,8一月一巡、6两月一巡、7,9半年一巡、10两年一巡
  2126. */
  2127. getFirstDate(dtype) {
  2128. var dt = new Date((new Date()).getTime());//+24*3600000
  2129. return dt;
  2130. }
  2131. /**
  2132. * @function 获取累计天数
  2133. * @param sdt
  2134. * @param mouthNum
  2135. */
  2136. getDays(sdt, mouthNum) {
  2137. var days = 0;
  2138. var year = sdt.getFullYear();
  2139. var mouth = sdt.getMonth() + 1;
  2140. for (var i = 1; i <= mouthNum; i++) {
  2141. if (mouth > 12) {
  2142. year = year + 1;
  2143. mouth = 1
  2144. }
  2145. days += this.getMouthTotalDays(year, mouth);
  2146. mouth = mouth + 1;
  2147. }
  2148. return days;
  2149. }
  2150. /**
  2151. * @function 获取每月总天数
  2152. * @param year
  2153. * @param mouth
  2154. */
  2155. getMouthTotalDays(year, mouth) {
  2156. var days = 0;
  2157. if (mouth == 2) {
  2158. days = year % 4 == 0 ? 29 : 28;
  2159. } else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
  2160. days = 31;
  2161. } else {
  2162. days = 30;
  2163. }
  2164. return days;
  2165. }
  2166. getLastDate(dtype, sdate) {//正式使用
  2167. var sdt = new Date(sdate);
  2168. var year = sdt.getFullYear();
  2169. var mouth = sdt.getMonth() + 1;
  2170. switch (dtype + "") {
  2171. case "3"://一周一巡
  2172. sdt = new Date(sdt.getTime() + 24 * 6 * 60 * 60 * 1000);
  2173. break;
  2174. case "4"://半月一巡
  2175. if (sdt.getDate() == 1) {
  2176. sdt.setDate(15);
  2177. } else {
  2178. sdt.setDate(this.getMouthTotalDays(year, mouth));
  2179. }
  2180. break;
  2181. case "5"://一月一巡
  2182. case "8":
  2183. sdt = new Date(sdt.getTime() + 24 * (this.getDays(sdt, 1) - 1) * 60 * 60 * 1000);
  2184. break;
  2185. case "6"://两月一巡
  2186. sdt = new Date(sdt.getTime() + 24 * (this.getDays(sdt, 2) - 1) * 60 * 60 * 1000);
  2187. break;
  2188. case "7"://半年一巡
  2189. case "9":
  2190. sdt = new Date(sdt.getTime() + 24 * (this.getDays(sdt, 6) - 1) * 60 * 60 * 1000);
  2191. break;
  2192. case "10"://两年一巡
  2193. sdt = new Date(sdt.getTime() + 24 * (this.getDays(sdt, 24) - 1) * 60 * 60 * 1000);
  2194. break;
  2195. }
  2196. return sdt;
  2197. }
  2198. /**--------------------巡检类型内容是否存在检查--------------- */
  2199. current_device_type_name = "";
  2200. // /**
  2201. // * @function 巡检片区是否存在检查巡检点、巡检线、隐患点
  2202. // * @param current_region_id 检查片区
  2203. // * @param device_type_id 巡检类型
  2204. // * @param device_type_name 巡检类型名称
  2205. // */
  2206. // checkExistPlanDevice(current_region_id, device_type_id, device_type_name) {
  2207. // if (current_region_id != "") {
  2208. // this.getPlanDeviceList();
  2209. // } else {
  2210. // this.toast.Show("请选择片区!");
  2211. // }
  2212. // }
  2213. /**
  2214. * @function 检查巡检片区中是否存在该巡检类型信息(从图层检查)
  2215. * @param region_geometry 检查片区
  2216. * @param device_type_id 检查类型id
  2217. * @param device_type_name 检查类型名称
  2218. */
  2219. checkExistPlanDeviceByLayer(region_geometry, device_type_id, device_type_name) {
  2220. var data = {
  2221. current: 1,
  2222. size: 1000,
  2223. pointTypeIds: device_type_id
  2224. };
  2225. this.ajaxSend.sendAjax(this, data, this.config.getLayerId, this.ajaxSend.type.get, function (results) {
  2226. if (results.code != 1) {
  2227. this.toast.Show(results.message);
  2228. return;
  2229. }
  2230. if (results.result.records.length == 0) {
  2231. this.toast.show("巡检类型未绑定巡检图层!");
  2232. return;
  2233. } else {
  2234. results.result.records.forEach(e => {
  2235. let ff = 1;
  2236. })
  2237. }
  2238. }.bind(this));
  2239. if (region_geometry == "") {
  2240. this.toast.Show("片区图形为空,请选择片区!");
  2241. return;
  2242. }
  2243. var polygon;
  2244. if (typeof (region_geometry) == "string") {
  2245. polygon = new Polygon(JSON.parse(region_geometry));
  2246. } else {
  2247. polygon = new Polygon(region_geometry);
  2248. }
  2249. var url = this.AppX.appConfig.gisResource.pipe.config[this.config.mapindex].url;
  2250. if (this.deviceTypes == null)
  2251. return;
  2252. var devicetype = this.getDeviceType(device_type_id);
  2253. if (devicetype == null) return;
  2254. this.loadWait.show("正在检查片区中是否有" + device_type_name + "信息,请等待...", this.domObj);
  2255. var where = "1=1";
  2256. if (devicetype.sqlfilter != null && devicetype.sqlfilter.length > 0)
  2257. where += " and " + devicetype.sqlfilter;
  2258. var param = { "where": where, "spatialRel": "esriSpatialRelContains", "returnGeometry": true, "geometryType": "esriGeometryPolygon", "geometry": JSON.stringify(polygon), "returnCountOnly": true, "returnIdsOnly": false, "f": "json" };
  2259. $.ajax({
  2260. type: "POST",
  2261. url: url + "/" + devicetype.contactLayerId + "/query",
  2262. cache: false,
  2263. data: param,
  2264. dataType: "json",
  2265. success: function (response) {
  2266. if (response.error !== undefined) {
  2267. this.AppX.runtimeConfig.toast.Show("查询失败,请联系管理员");
  2268. this.loadWait.hide();
  2269. return;
  2270. }
  2271. var count = response.count;
  2272. this.loadWait.hide();
  2273. if (count > 0) {//下一步、设备选择
  2274. this.getPlanDeviceList(polygon);
  2275. this.plan_addpontype_layer.clear();
  2276. var graphic = new Graphic(polygon, this.setSymbol("")[2], "");
  2277. this.plan_addpontype_layer.add(graphic);
  2278. } else {
  2279. this.toast.Show(" 抱歉,该片区内没有" + device_type_name + "信息!");
  2280. }
  2281. }.bind(this),
  2282. error: function (results) {
  2283. this.loadWait.hide();
  2284. this.toast.Show("查询片区巡检信息出错!");
  2285. }.bind(this)
  2286. });
  2287. }
  2288. /**
  2289. * @function 检查巡检片区中是否存在该巡检类型信息(从图层检查)多图层检查
  2290. * @param region_geometry
  2291. * @param device_type_id
  2292. * @param device_type_name
  2293. * @returns
  2294. */
  2295. checkExistPlanDeviceByLayer_more(region_geometry, device_type_id, device_type_name) {
  2296. var data = {
  2297. current: 1,
  2298. size: 1000,
  2299. pointTypeIds: device_type_id
  2300. };
  2301. this.ajaxSend.sendAjax(this, data, this.config.getLayerId, this.ajaxSend.type.get, function (results) {
  2302. if (results.code != 1) {
  2303. this.toast.Show(results.message);
  2304. return;
  2305. }
  2306. if (results.result.records.length == 0) {
  2307. this.toast.show("巡检类型未绑定巡检图层!");
  2308. return;
  2309. } else {
  2310. results.result.records.forEach(e => {
  2311. let ff = 1;
  2312. })
  2313. }
  2314. }.bind(this));
  2315. if (region_geometry == "") {
  2316. this.toast.Show("片区图形为空,请选择片区!");
  2317. return;
  2318. }
  2319. var polygon;
  2320. if (typeof (region_geometry) == "string") {
  2321. polygon = new Polygon(JSON.parse(region_geometry));
  2322. } else {
  2323. polygon = new Polygon(region_geometry);
  2324. }
  2325. var url = this.AppX.appConfig.gisResource.pipe.config[this.config.mapindex].url;
  2326. if (this.deviceTypes == null)
  2327. return;
  2328. var totalCount = 0;
  2329. var forCounter = 0;//for循环次数
  2330. var device_Type_Ids = device_type_id.split(",");
  2331. for (var i = 0; i < device_Type_Ids.length; i++) {
  2332. var devicetype = this.getDeviceType(device_Type_Ids[i]);
  2333. if (devicetype == null) continue;
  2334. this.loadWait.show("正在检查片区中是否有" + device_type_name + "信息,请等待...", this.domObj);
  2335. var where = "1=1";
  2336. if (devicetype.sqlfilter != null && devicetype.sqlfilter.length > 0)
  2337. where += " and " + devicetype.sqlfilter;
  2338. var param = { "where": where, "spatialRel": "esriSpatialRelContains", "returnGeometry": true, "geometryType": "esriGeometryPolygon", "geometry": JSON.stringify(polygon), "returnCountOnly": true, "returnIdsOnly": false, "f": "json" };
  2339. $.ajax({
  2340. type: "POST",
  2341. url: url + "/" + devicetype.contactLayerId + "/query",
  2342. cache: false,
  2343. data: param,
  2344. dataType: "json",
  2345. success: function (response) {
  2346. forCounter++;
  2347. if (response.error !== undefined) {
  2348. this.AppX.runtimeConfig.toast.Show("查询失败,请联系管理员");
  2349. this.loadWait.hide();
  2350. return;
  2351. }
  2352. var count = response.count;
  2353. this.loadWait.hide();
  2354. if (count > 0) {//下一步、设备选择
  2355. totalCount += count;
  2356. } else {
  2357. //对于区域内没有feature的类型,直接删除掉,后续不再去查询
  2358. var data = this.addData.deviceTypeIdsTemp.split(",");
  2359. var index = data.indexOf(device_Type_Ids[forCounter - 1]);
  2360. if (index != -1) {
  2361. var devicetype = this.getDeviceType(data[index]);
  2362. this.toast.Show(" 抱歉,该片区内没有" + devicetype.cnContactLayerName + "信息!");
  2363. data.splice(index, 1);
  2364. this.addData.deviceTypeIds = data.join(",")
  2365. }
  2366. }
  2367. if (forCounter == device_Type_Ids.length) {
  2368. if (totalCount > 0) {
  2369. this.getPlanDeviceList(polygon);
  2370. this.plan_addpontype_layer.clear();
  2371. var graphic = new Graphic(polygon, this.setSymbol("")[2], "");
  2372. this.plan_addpontype_layer.add(graphic);
  2373. } else {
  2374. this.toast.Show(" 抱歉,该片区内没有" + device_type_name + "信息!");
  2375. }
  2376. }
  2377. }.bind(this),
  2378. error: function (results) {
  2379. forCounter++;
  2380. this.loadWait.hide();
  2381. this.toast.Show("查询片区巡检信息出错!");
  2382. if (forCounter == device_Type_Ids.length) {
  2383. if (totalCount > 0) {
  2384. this.getPlanDeviceList(polygon);
  2385. this.plan_addpontype_layer.clear();
  2386. var graphic = new Graphic(polygon, this.setSymbol("")[2], "");
  2387. this.plan_addpontype_layer.add(graphic);
  2388. } else {
  2389. this.toast.Show(" 抱歉,该片区内没有" + device_type_name + "信息!");
  2390. }
  2391. }
  2392. }.bind(this)
  2393. });
  2394. };
  2395. // var devicetype = this.getDeviceType(device_type_id);
  2396. // if (devicetype == null) return;
  2397. // this.loadWait.show("正在检查片区中是否有" + device_type_name + "信息,请等待...", this.domObj);
  2398. // var where = "1=1";
  2399. // if (devicetype.sqlfilter != null && devicetype.sqlfilter.length > 0)
  2400. // where += " and " + devicetype.sqlfilter;
  2401. // var param = { "where": where, "spatialRel": "esriSpatialRelContains", "returnGeometry": true, "geometryType": "esriGeometryPolygon", "geometry": JSON.stringify(polygon), "returnCountOnly": true, "returnIdsOnly": false, "f": "json" };
  2402. // $.ajax({
  2403. // type: "POST",
  2404. // url: url + "/" + devicetype.contactLayerId + "/query",
  2405. // cache: false,
  2406. // data: param,
  2407. // dataType: "json",
  2408. // success: function (response) {
  2409. // if (response.error !== undefined) {
  2410. // this.AppX.runtimeConfig.toast.Show("查询失败,请联系管理员");
  2411. // this.loadWait.hide();
  2412. // return;
  2413. // }
  2414. // var count = response.count;
  2415. // this.loadWait.hide();
  2416. // if (count > 0) {//下一步、设备选择
  2417. // this.getPlanDeviceList(polygon);
  2418. // this.plan_addpontype_layer.clear();
  2419. // var graphic = new Graphic(polygon, this.setSymbol("")[2], "");
  2420. // this.plan_addpontype_layer.add(graphic);
  2421. // } else {
  2422. // this.toast.Show(" 抱歉,该片区内没有" + device_type_name + "信息!");
  2423. // }
  2424. // }.bind(this),
  2425. // error: function (results) {
  2426. // this.loadWait.hide();
  2427. // this.toast.Show("查询片区巡检信息出错!");
  2428. // }.bind(this)
  2429. // });
  2430. }
  2431. /**
  2432. * @function 获取巡检片区内巡检信息
  2433. * @param region_polygon 片区面
  2434. */
  2435. getPlanDeviceList(region_polygon?) {
  2436. // var url = this.AppX.appConfig.gisResource.pipe.config[this.config.mapindex].url;
  2437. // var where = "", cfg = null;
  2438. // if (this.addData.deviceTypeIds != 1 && this.addData.deviceTypeIds != 2) {
  2439. // cfg = this.getDeviceType(this.addData.deviceTypeIds);
  2440. // where = cfg.where;
  2441. // }
  2442. if (this.addData.deviceTypeIds.split(",").length > 1) {
  2443. this.domObj.empty().append(this.template.split('$$')[12]);
  2444. this.initEvent4();
  2445. this.addSelectItems_more(this);
  2446. } else {
  2447. this.domObj.empty().append(this.template.split('$$')[7]);
  2448. this.initEvent4();
  2449. this.addSelectItems(this);
  2450. }
  2451. // switch (this.addData.deviceTypeIds) {
  2452. // default://设备巡查
  2453. // // var fields = this.getLayerShowFieldNames(cfg.cnContactLayerName);
  2454. // // this.domObj.empty().append(this.template.split('$$')[7]);
  2455. // // this.domObj.find(".serch_names").text(fields[0].alias);
  2456. // this.initEvent4();
  2457. // this.addSelectItems(this);
  2458. // break;
  2459. // }
  2460. }
  2461. /**
  2462. * @function 获取存在该类型的片区列表
  2463. */
  2464. getAllPlanRegion() {
  2465. this.getAllPlanRegionToMap();
  2466. this.loadWait.show("正在查询片区,请等待...", this.domObj);
  2467. let that = this;
  2468. if (that.dataTable_r) {
  2469. that.dataTable_r.destroy();
  2470. }
  2471. that.dataTable_r = $(that.domObj.find("#planregionslist_table")[0]).DataTable({
  2472. dom: 't' +
  2473. ' <"row"' +
  2474. ' <" information"ri>' +
  2475. ' <" length-changing"l>' +
  2476. ' <" pull-right pagination"p>' +
  2477. ' <" turnToolbar">' +
  2478. ' >',
  2479. language: {
  2480. "lengthMenu": "每页_MENU_条",
  2481. "zeroRecords": "未查询到任何记录",
  2482. "info": "共 _TOTAL_ 条",
  2483. "infoEmpty": "",
  2484. "infoFiltered": "",
  2485. "processing": "查询中,请稍等...",
  2486. "paginate": {
  2487. "first": "首页",
  2488. "last": "尾页",
  2489. "next": ">",
  2490. "previous": "<"
  2491. },
  2492. "search": "搜索: ",
  2493. },
  2494. pagingType: "simple",
  2495. paging: true,
  2496. scrollCollapse: false,
  2497. processing: true,
  2498. scrollX: true,
  2499. scrollY: "calc(100% - 50px)",
  2500. ordering: false,
  2501. lengthMenu: [10, 20, 50], //更改显示记录数选项
  2502. drawCallback: function (settings) {
  2503. $(settings.nTable).find("tbody tr").off().click(function (e) {
  2504. debugger
  2505. that.devices_selected = [];//设备归为0
  2506. that.devices_selected_layers.clear();
  2507. let dom = $(e.currentTarget).find(".getInfo");
  2508. if (dom.data("regionid") == null) {
  2509. return;
  2510. } else {
  2511. var mapPolygon = new Polygon(dom.data("geometry"));
  2512. that.zoom2MapHalf(mapPolygon);
  2513. that.regionid = dom.data("regionid");
  2514. that.regionname = dom.data("regionname");
  2515. that.currentRegionPolygon = mapPolygon;
  2516. that.addData.regionId = parseInt(that.regionid);
  2517. // if (that.addData.deviceTypeId == 1 || that.addData.deviceTypeId == 5 || that.addData.deviceTypeId == 6) {
  2518. // that.checkExistPlanDevice(that.regionid, that.addData.deviceTypeId + "", that.current_device_type_name);
  2519. // } else {
  2520. // }
  2521. if (that.addData.deviceTypeIdsTemp.split(",").length > 1) {
  2522. that.checkExistPlanDeviceByLayer_more(dom.data("geometry"), that.addData.deviceTypeIdsTemp + "", that.current_device_type_name);
  2523. } else {
  2524. that.checkExistPlanDeviceByLayer(dom.data("geometry"), that.addData.deviceTypeIdsTemp + "", that.current_device_type_name);
  2525. }
  2526. }
  2527. })
  2528. $(settings.nTable).find("tbody").on("mouseover", "tr", function (e) {
  2529. $(settings.nTable).find("tbody tr.active").removeClass("active");
  2530. $(e.currentTarget).addClass("active");
  2531. });
  2532. //添加当前第几页,共几页
  2533. let dom = $(settings.nTableWrapper);
  2534. let pageInfo = that.dataTable_r.page.info();
  2535. let addPosi = dom.find(".previous");
  2536. let pagehtml = '<li class="addPageInfo"><span>第' + (parseInt(pageInfo.page) + 1) + '页/共' + pageInfo.pages + '页</span></li>';
  2537. addPosi.after(pagehtml);
  2538. //添加自动跳转
  2539. let turnAddPosi = dom.find('.turnToolbar');
  2540. let turnpagehtml = '<input type="number" class="addPageIndexInput" value="' + (parseInt(pageInfo.page) + 1) + '" /> <button type="button" class="btn btn-sm btn-default addPageIndexButton">跳转</button>'
  2541. turnAddPosi.empty().append(turnpagehtml);
  2542. turnAddPosi.find('.addPageIndexButton').off().click(e => {
  2543. let pageIndex = (turnAddPosi.find('.addPageIndexInput').val());
  2544. if (pageIndex > 0 && pageIndex <= pageInfo.pages) {
  2545. that.dataTable_r.deafultPageIndex = pageIndex;
  2546. that.dataTable_r.ajax.reload();
  2547. } else {
  2548. that.dataTable_r.deafultPageIndex = -10;
  2549. that.toast.show("跳转页数超过查询范围请重新设置!");
  2550. }
  2551. })
  2552. }.bind(that),
  2553. serverSide: true,
  2554. ajax: {
  2555. headers: that.header,
  2556. type: "GET",
  2557. data: function (e) {
  2558. let start = (e['start'] / e['length']) + 1;
  2559. if (that.dataTable_r && that.dataTable_r.deafultPageIndex && that.dataTable_r.deafultPageIndex != -10) {
  2560. start = parseInt(that.dataTable_r.deafultPageIndex);
  2561. that.dataTable_r.context[0]._iDisplayStart = (start - 1) * that.dataTable_r.context[0]._iDisplayLength
  2562. that.dataTable_r.deafultPageIndex = -10;
  2563. }
  2564. return {
  2565. "current": start || that.config.pagenumber,
  2566. "size": e['length'] || that.config.pagesize,
  2567. "regionname": that.domObj.find(".serchcontent").val(),
  2568. }
  2569. },
  2570. url: that.apiRoot + that.config.getPlanRegionList,
  2571. dataType: "json",
  2572. async: true,
  2573. error: function (e) {
  2574. that.loadWait.hide();
  2575. that.toast.show("巡检片区查询失败");
  2576. console.error(e);
  2577. },
  2578. dataSrc: function (results) {
  2579. if (results.code == 1) {
  2580. var value = results;
  2581. results = {};
  2582. //这里除了把数据处理后返回给DataTables,还需要把另外三个参数处理为顶级的属性(加入另外两个参数过会会有问题只需要recordsFiltered)
  2583. value.recordsFiltered = value.result.total;
  2584. results.data = [];
  2585. if (value.result.records.length == 0) {
  2586. // that.toast.Show("抱歉,当前未划分片区!");
  2587. that.loadWait.hide();
  2588. return results.data;
  2589. };
  2590. $.each(value.result.records, function (i, item) {
  2591. results.data.push({
  2592. regionname: "<span class='getInfo' data-user_id='" + that.ajaxSend.setNullAndUndefined(item.user_id)
  2593. + "' data-regionid='" + that.ajaxSend.setNullAndUndefined(item.id)
  2594. + "' data-regionname='" + that.ajaxSend.setNullAndUndefined(item.regionname)
  2595. + "' data-geometry='" + that.ajaxSend.setNullAndUndefined(item.geometry)
  2596. + "' title='" + that.ajaxSend.setNullAndUndefined(item.regionname) + "'>" + that.ajaxSend.setNullAndUndefined(item.regionname) + "</span>",
  2597. address: "<span title='" + that.ajaxSend.setNullAndUndefined(item.address) + "'>" + that.ajaxSend.setNullAndUndefined(item.address) + "</span>",
  2598. notes: "<span title='" + that.ajaxSend.setNullAndUndefined(item.notes) + "'>" + that.ajaxSend.setNullAndUndefined(item.notes) + "</span>",
  2599. });
  2600. });
  2601. that.loadWait.hide();
  2602. return results.data;
  2603. } else {
  2604. that.toast.show(results.message);
  2605. console.error(results.message);
  2606. }
  2607. }
  2608. },
  2609. columns: [
  2610. { "data": "regionname" },
  2611. { "data": "address" },
  2612. { "data": "notes" },
  2613. ],
  2614. });
  2615. }
  2616. getAllUserList() {
  2617. //this.getAllPlanRegionToMap();
  2618. this.loadWait.show("正在查询人员,请等待...", this.domObj);
  2619. let that = this;
  2620. if (that.dataTable_User) {
  2621. that.dataTable_User.destroy();
  2622. }
  2623. that.dataTable_User = $(that.domObj.find("#planuserlist_table")[0]).DataTable({
  2624. dom: 't' +
  2625. ' <"row"' +
  2626. ' <" information"ri>' +
  2627. ' <" length-changing"l>' +
  2628. ' <" pull-right pagination"p>' +
  2629. ' <" turnToolbar">' +
  2630. ' >',
  2631. language: {
  2632. "lengthMenu": "每页_MENU_条",
  2633. "zeroRecords": "未查询到任何记录",
  2634. "info": "共 _TOTAL_ 条",
  2635. "infoEmpty": "",
  2636. "infoFiltered": "",
  2637. "processing": "查询中,请稍等...",
  2638. "paginate": {
  2639. "first": "首页",
  2640. "last": "尾页",
  2641. "next": ">",
  2642. "previous": "<"
  2643. },
  2644. "search": "搜索: ",
  2645. },
  2646. pagingType: "simple",
  2647. paging: true,
  2648. scrollCollapse: false,
  2649. processing: true,
  2650. scrollX: true,
  2651. scrollY: "calc(100% - 50px)",
  2652. ordering: false,
  2653. lengthMenu: [10, 20, 50], //更改显示记录数选项
  2654. drawCallback: function (settings) {
  2655. $(settings.nTable).find("tbody tr").off().click(function (e) {
  2656. that.devices_selected = [];//设备归为0
  2657. that.devices_selected_layers.clear();
  2658. let dom = $(e.currentTarget).find(".getInfo");
  2659. if (dom.data("realname") == null) {
  2660. return;
  2661. } else {
  2662. //var mapPolygon = new Polygon(dom.data("geometry"));
  2663. //that.zoom2MapHalf(mapPolygon);
  2664. that.realName = dom.data("realname");
  2665. //that.currentRegionPolygon = mapPolygon;
  2666. //that.addData.regionId = parseInt(that.regionid);
  2667. // if (that.addData.deviceTypeId == 1 || that.addData.deviceTypeId == 5 || that.addData.deviceTypeId == 6) {
  2668. // that.checkExistPlanDevice(that.regionid, that.addData.deviceTypeId + "", that.current_device_type_name);
  2669. // } else {
  2670. //var devicetype = this.getDeviceType(that.addData.deviceTypeIds);
  2671. // }
  2672. that.serachEquipmentByUser(that.addData.deviceTypeIds, that.realName)
  2673. // if(that.addData.deviceTypeIds.split(",").length > 1){
  2674. // that.checkExistPlanDeviceByLayer_more(dom.data("geometry"), that.addData.deviceTypeIds + "", that.current_device_type_name);
  2675. // }else{
  2676. // that.checkExistPlanDeviceByLayer(dom.data("geometry"), that.addData.deviceTypeIds + "", that.current_device_type_name);
  2677. // }
  2678. }
  2679. })
  2680. $(settings.nTable).find("tbody").on("mouseover", "tr", function (e) {
  2681. $(settings.nTable).find("tbody tr.active").removeClass("active");
  2682. $(e.currentTarget).addClass("active");
  2683. });
  2684. //添加当前第几页,共几页
  2685. let dom = $(settings.nTableWrapper);
  2686. let pageInfo = that.dataTable_User.page.info();
  2687. let addPosi = dom.find(".previous");
  2688. let pagehtml = '<li class="addPageInfo"><span>第' + (parseInt(pageInfo.page) + 1) + '页/共' + pageInfo.pages + '页</span></li>';
  2689. addPosi.after(pagehtml);
  2690. //添加自动跳转
  2691. let turnAddPosi = dom.find('.turnToolbar');
  2692. let turnpagehtml = '<input type="number" class="addPageIndexInput" value="' + (parseInt(pageInfo.page) + 1) + '" /> <button type="button" class="btn btn-sm btn-default addPageIndexButton">跳转</button>'
  2693. turnAddPosi.empty().append(turnpagehtml);
  2694. turnAddPosi.find('.addPageIndexButton').off().click(e => {
  2695. let pageIndex = (turnAddPosi.find('.addPageIndexInput').val());
  2696. if (pageIndex > 0 && pageIndex <= pageInfo.pages) {
  2697. that.dataTable_User.deafultPageIndex = pageIndex;
  2698. that.dataTable_User.ajax.reload();
  2699. } else {
  2700. that.dataTable_User.deafultPageIndex = -10;
  2701. that.toast.show("跳转页数超过查询范围请重新设置!");
  2702. }
  2703. })
  2704. }.bind(that),
  2705. serverSide: true,
  2706. ajax: {
  2707. headers: that.header,
  2708. type: "GET",
  2709. data: function (e) {
  2710. let start = (e['start'] / e['length']) + 1;
  2711. if (that.dataTable_User && that.dataTable_User.deafultPageIndex && that.dataTable_User.deafultPageIndex != -10) {
  2712. start = parseInt(that.dataTable_User.deafultPageIndex);
  2713. that.dataTable_User.context[0]._iDisplayStart = (start - 1) * that.dataTable_User.context[0]._iDisplayLength
  2714. that.dataTable_User.deafultPageIndex = -10;
  2715. }
  2716. return {
  2717. "current": start || that.config.pagenumber,
  2718. "size": e['length'] || that.config.pagesize,
  2719. "realName": that.domObj.find(".serchcontent").val(),
  2720. }
  2721. },
  2722. url: that.apiRoot + that.config.getAllUserList,
  2723. dataType: "json",
  2724. async: true,
  2725. error: function (e) {
  2726. that.loadWait.hide();
  2727. that.toast.show("人员查询失败");
  2728. console.error(e);
  2729. },
  2730. dataSrc: function (results) {
  2731. if (results.code == 1) {
  2732. var value = results;
  2733. results = {};
  2734. //这里除了把数据处理后返回给DataTables,还需要把另外三个参数处理为顶级的属性(加入另外两个参数过会会有问题只需要recordsFiltered)
  2735. value.recordsFiltered = value.result.total;
  2736. results.data = [];
  2737. if (value.result.records.length == 0) {
  2738. // that.toast.Show("抱歉,当前未划分片区!");
  2739. that.loadWait.hide();
  2740. return results.data;
  2741. };
  2742. $.each(value.result.records, function (i, item) {
  2743. results.data.push({
  2744. realName: "<span class='getInfo' data-user_id='" + that.ajaxSend.setNullAndUndefined(item.id)
  2745. + "' data-realName='" + that.ajaxSend.setNullAndUndefined(item.realName)
  2746. + "' title='" + that.ajaxSend.setNullAndUndefined(item.realName) + "'>" + that.ajaxSend.setNullAndUndefined(item.realName) + "</span>",
  2747. roleName: "<span title='" + that.ajaxSend.setNullAndUndefined(item.roleName) + "'>" + that.ajaxSend.setNullAndUndefined(item.roleName) + "</span>",
  2748. lockFlagName: "<span title='" + that.ajaxSend.setNullAndUndefined(item.lockFlagName) + "'>" + that.ajaxSend.setNullAndUndefined(item.lockFlagName) + "</span>",
  2749. });
  2750. });
  2751. that.loadWait.hide();
  2752. return results.data;
  2753. } else {
  2754. that.toast.show(results.message);
  2755. console.error(results.message);
  2756. }
  2757. }
  2758. },
  2759. columns: [
  2760. { "data": "realName" },
  2761. { "data": "roleName" },
  2762. { "data": "lockFlagName" },
  2763. ],
  2764. });
  2765. }
  2766. serachEquipmentByUser(device_type_id, userName) {
  2767. var url = this.AppX.appConfig.gisResource.pipe.config[this.config.mapindex].url;
  2768. var devicetype = this.getDeviceType(device_type_id);
  2769. var fields = this.getLayerShowFieldNames(devicetype.cnContactLayerName);
  2770. if (devicetype == null) return;
  2771. this.loadWait.show("正在检查信息,请等待...", this.domObj);
  2772. var where = "PROCENSOR like '%" + userName + "%'";
  2773. if (devicetype.sqlfilter != null && devicetype.sqlfilter.length > 0)
  2774. where += " and " + devicetype.sqlfilter;
  2775. var param = { "where": where, "spatialRel": "esriSpatialRelIntersects", "returnGeometry": false, "returnIdsOnly": true, "f": "json" };
  2776. $.ajax({
  2777. type: "POST",
  2778. url: url + "/" + devicetype.contactLayerId + "/query",
  2779. cache: false,
  2780. data: param,
  2781. dataType: "json",
  2782. success: function (response) {
  2783. if (response.error !== undefined) {
  2784. this.AppX.runtimeConfig.toast.Show("查询失败,请联系管理员");
  2785. this.loadWait.hide();
  2786. return;
  2787. }
  2788. let outfields = fields.map(e => { return e.name })
  2789. if (!response.objectIds) {
  2790. this.loadWait.hide();
  2791. this.AppX.runtimeConfig.toast.Show("查询无果,该巡检人员没有绑定的设备");
  2792. return;
  2793. }
  2794. this.getPlanDeviceList();
  2795. this.gp = new Geoprocessor(this.analyzeUrl);
  2796. let data = _.union(response.objectIds, this.objectids);
  2797. this.objectids = data;
  2798. this.addData.objectIds = _.join(this.objectids, ",");
  2799. let layerName = "";
  2800. layerName = devicetype.cnContactLayerName;
  2801. var options = {
  2802. "layername": layerName,
  2803. "objectids": this.objectids.join(","),
  2804. "outfields": outfields.join(","),
  2805. usertoken: this.AppX.appConfig.gisToken
  2806. };
  2807. var delayResult = this.gp.submitJob(
  2808. options,
  2809. function (jobinfo) {
  2810. if (this.dynamicMapServer) {
  2811. this.map.removeLayer(this.dynamicMapServer);
  2812. this.dynamicMapServer = null;
  2813. }
  2814. let mapServerUrl = this.mapServerUrl + "/jobs/" + jobinfo.jobId;
  2815. this.addData.gisUrl = url + "/" + devicetype.contactLayerId + "/query";
  2816. $.ajax({
  2817. type: "get",
  2818. dataType: "json",
  2819. url: this.analyzeUrl + "/jobs/" + jobinfo.jobId + "/" + jobinfo.results.summary.paramUrl + "?f=pjson",
  2820. success: function (result) {
  2821. this.domObj.find(".pipeTypeLength").text(result.value.result.summary.layersummary[0].length);
  2822. }.bind(this)
  2823. })
  2824. this.dynamicMapServer = new ArcGISDynamicMapServiceLayer(mapServerUrl);
  2825. this.dynamicMapServer.id = this.preLayerId + "dynamicMapServer";
  2826. this.map.addLayer(this.dynamicMapServer);
  2827. this.addSelectItems(this);
  2828. this.loadWait.hide();
  2829. }.bind(this),
  2830. function (jobinfo) {
  2831. this.jobid = jobinfo.jobId;
  2832. }.bind(this),
  2833. function (jobinfo) {
  2834. this.AppX.runtimeConfig.toast.show("分析失败,请联系管理员");
  2835. this.loadWait.hide();
  2836. console.error(jobinfo);
  2837. }.bind(this)
  2838. );
  2839. // var count = response.count;
  2840. // this.loadWait.hide();
  2841. // if (count > 0) {//下一步、设备选择
  2842. // this.getPlanDeviceList(polygon);
  2843. // this.plan_addpontype_layer.clear();
  2844. // var graphic = new Graphic(polygon, this.setSymbol("")[2], "");
  2845. // this.plan_addpontype_layer.add(graphic);
  2846. // } else {
  2847. // this.toast.Show(" 抱歉,该片区内没有" + device_type_name + "信息!");
  2848. // }
  2849. }.bind(this),
  2850. error: function (results) {
  2851. this.loadWait.hide();
  2852. this.toast.Show("查询巡检信息出错!");
  2853. }.bind(this)
  2854. });
  2855. }
  2856. /**
  2857. * @function 获取存在该类型的片区,加载到地图上
  2858. */
  2859. getAllPlanRegionToMap() {
  2860. let data = {
  2861. "current": 1,
  2862. "size": this.config.pagemaxsize,
  2863. };
  2864. this.ajaxSend.sendAjax(this, data, this.config.getPlanRegionList, this.ajaxSend.type.get, function (results) {
  2865. var that = this;
  2866. if (results.code != 1) {
  2867. that.toast.Show(results.message);
  2868. return;
  2869. }
  2870. this.addPolygonGraphic(results);
  2871. }.bind(this));
  2872. }
  2873. /**
  2874. * 添加片区结果在地图上展示
  2875. */
  2876. addPolygonGraphic(queryResult) {
  2877. if (this.plan_addpontype_layer) {
  2878. this.plan_addpontype_layer.clear();
  2879. }
  2880. for (var i = 0, length = queryResult.result.records.length; i < length; i++) {
  2881. var row = queryResult.result.records[i];
  2882. if (row.geometry == undefined || row.geometry == "") { continue; }
  2883. var polygon = new Polygon(JSON.parse(row.geometry));
  2884. var graphic = new Graphic(polygon, this.setSymbol(row.regionname)[2], "");
  2885. graphic.attr("id", "graphic" + i);
  2886. this.plan_addpontype_layer.add(graphic);
  2887. if (row.regionname != null && row.regionname != "") {
  2888. //添加背景
  2889. var point = polygon.getExtent().getCenter();
  2890. var graphictextbg = new Graphic(point, this.setSymbol(row.regionname)[1].setOffset(0, -20), "");
  2891. this.plan_addpontype_layer.add(graphictextbg);
  2892. //添加文字
  2893. var peopleTextSymbol = new TextSymbol(row.regionname);
  2894. peopleTextSymbol.setOffset(0, -25);
  2895. var font = new Font();
  2896. font.setSize("10pt");
  2897. font.setWeight(Font.WEIGHT_BOLD);
  2898. peopleTextSymbol.setFont(font);
  2899. var graphicText = new Graphic(point, peopleTextSymbol, "");
  2900. this.plan_addpontype_layer.add(graphicText);
  2901. }
  2902. }
  2903. }
  2904. /**
  2905. * @function 添加选择项
  2906. */
  2907. addSelectItems(that) {
  2908. // that.devices_selected_layers.clear();
  2909. this.missionschedule_plandetail_polylinelayer.clear();
  2910. //选中更新
  2911. var cfg = this.getDeviceType(this.addData.deviceTypeIds);
  2912. var layerid = cfg.contactLayerId;
  2913. var fields = this.getLayerShowFieldNames(cfg.cnContactLayerName);
  2914. let columns = [];
  2915. var html_trs_data = "";
  2916. for (var i = 0; i < fields.length; i++) {
  2917. columns.push({ "data": fields[i].name })
  2918. html_trs_data += "<th title='" + fields[i].alias + "'>" + fields[i].alias + "</th>";
  2919. }
  2920. this.domObj.find(".deviceslist-title").empty().append("<tr>" + html_trs_data + "</tr>");
  2921. that.loadWait.show("正在查询选择" + that.current_device_type_name + "信息,请等待...", that.domObj);
  2922. if (this.dataTable_current) {
  2923. this.dataTable_current.destroy();
  2924. }
  2925. let layerInforUrl = this.AppX.appConfig.gisResource.pipe.config[0].url + "/" + cfg.contactLayerId + "/query";
  2926. that.dataTable_current = $(that.domObj.find("#deviceslist_table")[0]).DataTable({
  2927. dom: 't' +
  2928. ' <"row"' +
  2929. ' <" information"ri>' +
  2930. ' <" length-changing"l>' +
  2931. ' <" pull-right pagination"p>' +
  2932. ' <" turnToolbar">' +
  2933. ' >',
  2934. language: {
  2935. "lengthMenu": "每页_MENU_条",
  2936. "zeroRecords": "未查询到任何记录",
  2937. "info": "共 _TOTAL_ 条",
  2938. "infoEmpty": "",
  2939. "infoFiltered": "",
  2940. "processing": "查询中,请稍等...",
  2941. "paginate": {
  2942. "first": "首页",
  2943. "last": "尾页",
  2944. "next": ">",
  2945. "previous": "<"
  2946. },
  2947. "search": "搜索: ",
  2948. },
  2949. pagingType: "simple",
  2950. paging: true,
  2951. scrollCollapse: false,
  2952. processing: true,
  2953. scrollX: true,
  2954. scrollY: "calc(100% - 50px)",
  2955. ordering: false,
  2956. lengthMenu: [10, 20, 50], //更改显示记录数选项
  2957. drawCallback: function (settings) {
  2958. $(settings.nTable).find("tbody tr").off().click(function (e) {
  2959. $(this).siblings('tr').removeClass('active'); // 删除其兄弟元素的样式
  2960. $(this).addClass('active');
  2961. let dom = $(e.currentTarget).find(".getInfo");
  2962. let data = that.dataTable_current.currentData[parseInt(dom.attr("index"))];
  2963. let currentData = that.dataTable_current.currentTableData;
  2964. if (currentData && currentData.attributes.OBJECTID == data.attributes.OBJECTID && currentData.attributes.OBJECTID) {
  2965. return;
  2966. } else {
  2967. that.dataTable_current.currentTableData = data;
  2968. let geometryobj = null;
  2969. let mapPolygon = null;
  2970. let GraphSymbol = null;
  2971. that.missionschedule_plandetail_polylinelayer.clear();
  2972. if (data.geometry.hasOwnProperty("paths")) {
  2973. geometryobj = {
  2974. "paths": data.geometry.paths,
  2975. "spatialReference": { "wkid": that.map.spatialReference.wkid }
  2976. };
  2977. mapPolygon = new Polyline(geometryobj);
  2978. that.zoom2MapHalf(mapPolygon);
  2979. GraphSymbol = that.setGraphSymbol("polyline", 2);
  2980. } else if (data.geometry.hasOwnProperty("rings")) {
  2981. geometryobj = {
  2982. "rings": data.geometry.rings,
  2983. "spatialReference": { "wkid": that.map.spatialReference.wkid }
  2984. };
  2985. mapPolygon = new Polygon(geometryobj);
  2986. that.zoom2MapHalf(mapPolygon);
  2987. GraphSymbol = that.setGraphSymbol("polygon");
  2988. } else {
  2989. geometryobj = { "x": data.geometry.x, "y": data.geometry.y, "spatialReference": { "wkid": that.map.spatialReference.wkid } };
  2990. mapPolygon = new Point(geometryobj);
  2991. GraphSymbol = that.setGraphSymbol("point");
  2992. }
  2993. that.missionschedule_plandetail_polylinelayer.add(new Graphic(mapPolygon, GraphSymbol));
  2994. }
  2995. })
  2996. //添加当前第几页,共几页
  2997. let dom = $(settings.nTableWrapper);
  2998. let pageInfo = that.dataTable_current.page.info();
  2999. let addPosi = dom.find(".previous");
  3000. let pagehtml = '<li class="addPageInfo"><span>第' + (parseInt(pageInfo.page) + 1) + '页/共' + pageInfo.pages + '页</span></li>';
  3001. addPosi.after(pagehtml);
  3002. //添加自动跳转
  3003. let turnAddPosi = dom.find('.turnToolbar');
  3004. let turnpagehtml = '<input type="number" class="addPageIndexInput" value="' + (parseInt(pageInfo.page) + 1) + '" /> <button type="button" class="btn btn-sm btn-default addPageIndexButton">跳转</button>'
  3005. turnAddPosi.empty().append(turnpagehtml);
  3006. turnAddPosi.find('.addPageIndexButton').off().click(e => {
  3007. let pageIndex = (turnAddPosi.find('.addPageIndexInput').val());
  3008. if (pageIndex > 0 && pageIndex <= pageInfo.pages) {
  3009. that.dataTable_current.deafultPageIndex = pageIndex;
  3010. that.dataTable_current.ajax.reload();
  3011. } else {
  3012. that.dataTable_current.deafultPageIndex = -10;
  3013. that.toast.show("跳转页数超过查询范围请重新设置!");
  3014. }
  3015. })
  3016. }.bind(that),
  3017. serverSide: true,
  3018. ajax: {
  3019. url: esri.config.defaults.io.alwaysUseProxy ? esri.config.defaults.io.proxyUrl + "?" + layerInforUrl : layerInforUrl,
  3020. dataType: "json",
  3021. cache: false,
  3022. type: "POST",
  3023. data: function (e) {
  3024. let start = (e['start'] / e['length']) + 1;
  3025. if (that.dataTable_current && that.dataTable_current.deafultPageIndex && that.dataTable_current.deafultPageIndex != -10) {
  3026. start = parseInt(that.dataTable_current.deafultPageIndex);
  3027. that.dataTable_current.context[0]._iDisplayStart = (start - 1) * that.dataTable_current.context[0]._iDisplayLength
  3028. that.dataTable_current.deafultPageIndex = -10;
  3029. }
  3030. let data = _.slice(that.objectids, (start - 1) * e["length"], start * e["length"]);
  3031. if (data.length == 0) {
  3032. data.push("无objectId");
  3033. }
  3034. var obj = that.getDeviceType(that.addData.deviceTypeIds);
  3035. var fields = that.getLayerShowFieldNames(obj.cnContactLayerName);
  3036. var where = obj.sqlfilter;
  3037. let fieldDate = fields.map(e => e.name);
  3038. var param = { "where": "", "outFields": fieldDate.join(","), "objectIds": data.join(","), "spatialRel": "esriSpatialRelIntersects", "returnGeometry": true, "geometryType": "esriGeometryPolygon", "geometry": "", "returnIdsOnly": false, "f": "json" };
  3039. return param
  3040. },
  3041. error: function (e) {
  3042. that.loadWait.hide();
  3043. that.toast.show("巡检片区查询失败");
  3044. console.error(e);
  3045. },
  3046. dataSrc: function (results) {
  3047. if (results.error) {
  3048. that.loadWait.hide();
  3049. that.toast.show(results.message);
  3050. console.error(results.message);
  3051. results.recordsFiltered = 1;
  3052. results.data = [];
  3053. return results.data;
  3054. }
  3055. if (results.features.length > 0) {
  3056. var value = results;
  3057. results = {};
  3058. value.recordsFiltered = that.objectids.length;
  3059. results.data = [];
  3060. that.dataTable_current.currentData = value.features;
  3061. $.each(value.features, function (i, item) {
  3062. var obj = that.getDeviceType(that.addData.deviceTypeIds);
  3063. var fields = that.getLayerShowFieldNames(obj.cnContactLayerName);
  3064. let itemdata = {};
  3065. for (let el of fields) {
  3066. let dataInfo = that.ajaxSend.verificationHelper.setNullAndUndefined(item.attributes[el.name]);
  3067. //判断是否是数字
  3068. if (typeof (dataInfo) == "number") {
  3069. //判断是否是小数
  3070. if (dataInfo % 1 != 0) {
  3071. dataInfo = dataInfo.toFixed(2);
  3072. }
  3073. }
  3074. itemdata[el.name] = "<span class='getInfo' index='" + i + "' title='" + dataInfo + "'>" + dataInfo + "</span>";
  3075. }
  3076. results.data.push(itemdata);
  3077. });
  3078. that.loadWait.hide();
  3079. return results.data;
  3080. } else {
  3081. that.loadWait.hide();
  3082. results.recordsFiltered = 1;
  3083. results.data = [];
  3084. return results.data;
  3085. }
  3086. }
  3087. },
  3088. columns: columns,
  3089. });
  3090. }
  3091. /**
  3092. * @function 添加选择项
  3093. */
  3094. addSelectItems_more(that) {
  3095. // that.devices_selected_layers.clear();
  3096. this.missionschedule_plandetail_polylinelayer.clear();
  3097. var device_Type_Ids = this.addData.deviceTypeIds.split(",");
  3098. // var tabUlStr = "";
  3099. // tabUlStr +="<ul id='myTab' class='nav nav-tabs' role='tablist'></ul>";
  3100. // tabUlStr +="<div id='myTabContent' class='tab-content'></div>"
  3101. // this.domObj.find(".deviceslist-table").empty().append(tabUlStr);
  3102. //选中更新
  3103. this.domObj.find("#myTabUl").empty();
  3104. this.domObj.find("#myTabContent").empty();
  3105. var forCounter = 0;//构造table参数时的计数
  3106. var forDataSrcCounter = 0;//table返回时的计数
  3107. for (let i = 0; i < device_Type_Ids.length; i++) {
  3108. var cfg = this.getDeviceType(device_Type_Ids[i]);
  3109. var layerid = cfg.contactLayerId;
  3110. var fields = this.getLayerShowFieldNames(cfg.cnContactLayerName);
  3111. var tabListr = "";
  3112. var tabBody = "";
  3113. if (i == 0) {
  3114. tabListr += "<li class='nav-item active'>";
  3115. tabListr += "<a href='#deviceslist_table_div_" + i + "' data-toggle='tab' class='nav-link active show'>" + cfg.cnContactLayerName + "</a>";
  3116. tabListr += "</li>";
  3117. tabBody += "<div id='deviceslist_table_div_" + i + "' class='tab-pane fade in active show'><table class='table table-bordered table-striped' id='deviceslist_table_" + i + "' cellspacing='0'>"
  3118. tabBody += "<thead class='deviceslist-title_" + i + "'>"
  3119. tabBody += "</thead>"
  3120. tabBody += "</table></div>"
  3121. } else {
  3122. tabListr += "<li class='nav-item'>";
  3123. tabListr += "<a href='#deviceslist_table_div_" + i + "' data-toggle='tab' class='nav-link'>" + cfg.cnContactLayerName + "</a>";
  3124. tabListr += "</li>";
  3125. tabBody += "<div id='deviceslist_table_div_" + i + "' class='tab-pane fade'><table class='table table-bordered table-striped' id='deviceslist_table_" + i + "' cellspacing='0'>"
  3126. tabBody += "<thead class='deviceslist-title_" + i + "'>"
  3127. tabBody += "</thead>"
  3128. tabBody += "</table></div>"
  3129. }
  3130. this.domObj.find("#myTabUl").append(tabListr);
  3131. this.domObj.find("#myTabContent").append(tabBody);
  3132. let columns = [];
  3133. var html_trs_data = "";
  3134. for (var j = 0; j < fields.length; j++) {
  3135. columns.push({ "data": fields[j].name })
  3136. html_trs_data += "<th title='" + fields[j].alias + "'>" + fields[j].alias + "</th>";
  3137. }
  3138. this.domObj.find('.deviceslist-title_' + i + '').empty().append("<tr>" + html_trs_data + "</tr>");
  3139. //that.loadWait.show("正在查询选择" + that.current_device_type_name + "信息,请等待...", that.domObj);
  3140. let layerInforUrl = this.AppX.appConfig.gisResource.pipe.config[0].url + "/" + cfg.contactLayerId + "/query";
  3141. if (this.dataTable_current_list[i]) {
  3142. this.dataTable_current_list[i].destroy(false);
  3143. this.dataTable_current_list[i] = null;
  3144. }
  3145. that.dataTable_current_list[i] = $(that.domObj.find('#deviceslist_table_' + i + '')[0]).DataTable({
  3146. dom: 't' +
  3147. ' <"row"' +
  3148. ' <" information"ri>' +
  3149. ' <" length-changing"l>' +
  3150. ' <" pull-right pagination"p>' +
  3151. ' <" turnToolbar">' +
  3152. ' >',
  3153. language: {
  3154. "lengthMenu": "每页_MENU_条",
  3155. "zeroRecords": "未查询到任何记录",
  3156. "info": "共 _TOTAL_ 条",
  3157. "infoEmpty": "",
  3158. "infoFiltered": "",
  3159. "processing": "查询中,请稍等...",
  3160. "paginate": {
  3161. "first": "首页",
  3162. "last": "尾页",
  3163. "next": ">",
  3164. "previous": "<"
  3165. },
  3166. "search": "搜索: ",
  3167. },
  3168. pagingType: "simple",
  3169. paging: true,
  3170. scrollCollapse: false,
  3171. processing: true,
  3172. scrollX: true,
  3173. scrollY: "calc(100% - 50px)",
  3174. ordering: false,
  3175. lengthMenu: [10, 20, 50], //更改显示记录数选项
  3176. drawCallback: function (settings) {
  3177. $(settings.nTable).find("tbody tr").off().click(function (e) {
  3178. let dom = $(e.currentTarget).find(".getInfo");
  3179. let tabIndex = dom.attr("tabIndex");
  3180. let data = that.dataTable_current_list[tabIndex].currentData[parseInt(dom.attr("index"))];
  3181. let currentData = that.dataTable_current_list[tabIndex].currentTableData;
  3182. if (currentData && currentData.attributes.OBJECTID == data.attributes.OBJECTID && currentData.attributes.OBJECTID) {
  3183. return;
  3184. } else {
  3185. that.dataTable_current_list[tabIndex].currentTableData = data;
  3186. let geometryobj = null;
  3187. let mapPolygon = null;
  3188. let GraphSymbol = null;
  3189. that.missionschedule_plandetail_polylinelayer.clear();
  3190. if (data.geometry.hasOwnProperty("paths")) {
  3191. geometryobj = {
  3192. "paths": data.geometry.paths,
  3193. "spatialReference": { "wkid": that.map.spatialReference.wkid }
  3194. };
  3195. mapPolygon = new Polyline(geometryobj);
  3196. that.zoom2MapHalf(mapPolygon);
  3197. GraphSymbol = that.setGraphSymbol("polyline", 2);
  3198. } else if (data.geometry.hasOwnProperty("rings")) {
  3199. geometryobj = {
  3200. "rings": data.geometry.rings,
  3201. "spatialReference": { "wkid": that.map.spatialReference.wkid }
  3202. };
  3203. mapPolygon = new Polygon(geometryobj);
  3204. that.zoom2MapHalf(mapPolygon);
  3205. GraphSymbol = that.setGraphSymbol("polygon");
  3206. } else {
  3207. geometryobj = { "x": data.geometry.x, "y": data.geometry.y, "spatialReference": { "wkid": that.map.spatialReference.wkid } };
  3208. mapPolygon = new Point(geometryobj);
  3209. GraphSymbol = that.setGraphSymbol("point");
  3210. }
  3211. that.missionschedule_plandetail_polylinelayer.add(new Graphic(mapPolygon, GraphSymbol));
  3212. }
  3213. })
  3214. //添加当前第几页,共几页
  3215. let dom = $(settings.nTableWrapper);
  3216. var tabindex = dom[0].id.split("_")[2];
  3217. //for()
  3218. let pageInfo = that.dataTable_current_list[tabindex].page.info();
  3219. let addPosi = dom.find(".previous");
  3220. let pagehtml = '<li class="addPageInfo"><span>第' + (parseInt(pageInfo.page) + 1) + '页/共' + pageInfo.pages + '页</span></li>';
  3221. addPosi.after(pagehtml);
  3222. //添加自动跳转
  3223. let turnAddPosi = dom.find('.turnToolbar');
  3224. let turnpagehtml = '<input type="number" class="addPageIndexInput" value="' + (parseInt(pageInfo.page) + 1) + '" /> <button type="button" class="btn btn-sm btn-default addPageIndexButton">跳转</button>'
  3225. turnAddPosi.empty().append(turnpagehtml);
  3226. turnAddPosi.find('.addPageIndexButton').off().click(e => {
  3227. let pageIndex = (turnAddPosi.find('.addPageIndexInput').val());
  3228. if (pageIndex > 0 && pageIndex <= pageInfo.pages) {
  3229. that.dataTable_current_list[tabindex].deafultPageIndex = pageIndex;
  3230. that.dataTable_current_list[tabindex].ajax.reload();
  3231. } else {
  3232. that.dataTable_current_list[tabindex].deafultPageIndex = -10;
  3233. that.toast.show("跳转页数超过查询范围请重新设置!");
  3234. }
  3235. })
  3236. }.bind(that),
  3237. serverSide: true,
  3238. ajax: {
  3239. url: esri.config.defaults.io.alwaysUseProxy ? esri.config.defaults.io.proxyUrl + "?" + layerInforUrl : layerInforUrl,
  3240. dataType: "json",
  3241. cache: false,
  3242. type: "POST",
  3243. data: function (e) {
  3244. forCounter++;
  3245. let start = (e['start'] / e['length']) + 1;
  3246. let data = [];
  3247. let objectIdsData = null;
  3248. if (forCounter > device_Type_Ids.length) {
  3249. var activeLi = that.domObj.find("li .active");
  3250. var tabindex = activeLi.attr("href").split("_")[3];
  3251. var cnContactLayerName = activeLi.html();
  3252. if (that.dataTable_current_list[tabindex] && that.dataTable_current_list[tabindex].deafultPageIndex && that.dataTable_current_list[tabindex].deafultPageIndex != -10) {
  3253. start = parseInt(that.dataTable_current_list[tabindex].deafultPageIndex);
  3254. that.dataTable_current_list[tabindex].context[0]._iDisplayStart = (start - 1) * that.dataTable_current_list[tabindex].context[0]._iDisplayLength
  3255. that.dataTable_current_list[tabindex].deafultPageIndex = -10;
  3256. }
  3257. objectIdsData = that.objectIdsStr[cnContactLayerName];
  3258. }
  3259. else {
  3260. if (that.dataTable_current_list[forCounter - 1] && that.dataTable_current_list[forCounter - 1].deafultPageIndex && that.dataTable_current_list[forCounter - 1].deafultPageIndex != -10) {
  3261. start = parseInt(that.dataTable_current_list[forCounter - 1].deafultPageIndex);
  3262. that.dataTable_current_list[forCounter - 1].context[0]._iDisplayStart = (start - 1) * that.dataTable_current_list[forCounter - 1].context[0]._iDisplayLength
  3263. that.dataTable_current_list[forCounter - 1].deafultPageIndex = -10;
  3264. }
  3265. //objectIdsData = that.objectIdsStr[cfg.cnContactLayerName];
  3266. var dataId = that.getDeviceType(device_Type_Ids[forCounter - 1]);
  3267. objectIdsData = that.objectIdsStr[dataId.cnContactLayerName];
  3268. }
  3269. if (objectIdsData) {
  3270. objectIdsData = objectIdsData.split(",");
  3271. data = _.slice(objectIdsData, (start - 1) * e["length"], start * e["length"]);
  3272. } else {
  3273. data.push("无objectId");
  3274. }
  3275. // if (data.length == 0) {
  3276. // }
  3277. var obj = that.getDeviceType(that.addData.deviceTypeIds.split(",")[0]);
  3278. var fields = that.getLayerShowFieldNames(obj.cnContactLayerName);
  3279. var where = obj.sqlfilter;
  3280. let fieldDate = fields.map(e => e.name);
  3281. var param = { "where": "", "outFields": fieldDate.join(","), "objectIds": data.join(","), "spatialRel": "esriSpatialRelIntersects", "returnGeometry": true, "geometryType": "esriGeometryPolygon", "geometry": "", "returnIdsOnly": false, "f": "json" };
  3282. console.log(param);
  3283. return param
  3284. },
  3285. error: function (e) {
  3286. that.loadWait.hide();
  3287. that.toast.show("巡检片区查询失败");
  3288. console.error(e);
  3289. },
  3290. dataSrc: function (results) {
  3291. forDataSrcCounter++;
  3292. if (forDataSrcCounter > device_Type_Ids.length) {
  3293. if (results.error) {
  3294. that.loadWait.hide();
  3295. that.toast.show(results.message);
  3296. console.error(results.message);
  3297. results.recordsFiltered = 1;
  3298. results.data = [];
  3299. return results.data;
  3300. }
  3301. if (results.features.length > 0) {
  3302. var value = results;
  3303. results = {};
  3304. var activeLi = that.domObj.find("li .active");
  3305. var tabindex = activeLi.attr("href").split("_")[3];
  3306. var cnContactLayerName = activeLi.html();
  3307. value.recordsFiltered = (that.objectIdsStr[cnContactLayerName].split(",")).length;
  3308. results.data = [];
  3309. that.dataTable_current_list[tabindex].currentData = value.features;
  3310. $.each(value.features, function (j, item) {
  3311. var obj = that.getDeviceType(that.addData.deviceTypeIds.split(",")[0]);
  3312. var fields = that.getLayerShowFieldNames(obj.cnContactLayerName);
  3313. let itemdata = {};
  3314. for (let el of fields) {
  3315. let dataInfo = that.ajaxSend.verificationHelper.setNullAndUndefined(item.attributes[el.name]);
  3316. //判断是否是数字
  3317. if (typeof (dataInfo) == "number") {
  3318. //判断是否是小数
  3319. if (dataInfo % 1 != 0) {
  3320. dataInfo = dataInfo.toFixed(2);
  3321. }
  3322. }
  3323. itemdata[el.name] = "<span class='getInfo' tabIndex='" + tabindex + "' index='" + j + "' title='" + dataInfo + "'>" + dataInfo + "</span>";
  3324. }
  3325. results.data.push(itemdata);
  3326. });
  3327. that.loadWait.hide();
  3328. return results.data;
  3329. }
  3330. } else {
  3331. if (results.error) {
  3332. that.loadWait.hide();
  3333. that.toast.show(results.message);
  3334. console.error(results.message);
  3335. results.recordsFiltered = 1;
  3336. results.data = [];
  3337. return results.data;
  3338. }
  3339. if (results.features.length > 0) {
  3340. var value = results;
  3341. results = {};
  3342. var objid = that.getDeviceType(that.addData.deviceTypeIds.split(",")[forDataSrcCounter - 1]);
  3343. value.recordsFiltered = (that.objectIdsStr[objid.cnContactLayerName].split(",")).length;
  3344. results.data = [];
  3345. that.dataTable_current_list[forDataSrcCounter - 1].currentData = value.features;
  3346. $.each(value.features, function (j, item) {
  3347. var obj = that.getDeviceType(that.addData.deviceTypeIds.split(",")[0]);
  3348. var fields = that.getLayerShowFieldNames(obj.cnContactLayerName);
  3349. let itemdata = {};
  3350. for (let el of fields) {
  3351. let dataInfo = that.ajaxSend.verificationHelper.setNullAndUndefined(item.attributes[el.name]);
  3352. //判断是否是数字
  3353. if (typeof (dataInfo) == "number") {
  3354. //判断是否是小数
  3355. if (dataInfo % 1 != 0) {
  3356. dataInfo = dataInfo.toFixed(2);
  3357. }
  3358. }
  3359. itemdata[el.name] = "<span class='getInfo' tabIndex='" + (forDataSrcCounter - 1) + "' index='" + j + "' title='" + dataInfo + "'>" + dataInfo + "</span>";
  3360. }
  3361. results.data.push(itemdata);
  3362. });
  3363. that.loadWait.hide();
  3364. return results.data;
  3365. } else {
  3366. that.loadWait.hide();
  3367. results.recordsFiltered = 1;
  3368. results.data = [];
  3369. return results.data;
  3370. }
  3371. }
  3372. }
  3373. },
  3374. columns: columns,
  3375. });
  3376. }
  3377. }
  3378. /**
  3379. * @function 根据片区、巡检类型获取巡检信息
  3380. * @param id 部门id
  3381. * @param device_type_id 巡检类型id
  3382. */
  3383. getRegionInfo(id, device_type_id) {
  3384. let data = {
  3385. "current": 1,
  3386. "size": this.config.pagemaxsize,
  3387. "deviceTypeId": device_type_id
  3388. };
  3389. this.ajaxSend.sendAjax(this, data, this.config.getRegionInfo, this.ajaxSend.type.get, this.getRegionInfoCallback.bind(this).bind(this));
  3390. }
  3391. getRegionInfoCallback(results) {
  3392. var that = this;
  3393. if (results.code != 1) {
  3394. that.toast.Show(results.message);
  3395. return;
  3396. }
  3397. if (results.result.records.length == 0) {
  3398. this.toast.show(this.toast.Show(" 抱歉,该片区内没有可以安排的巡检类型"));
  3399. return;
  3400. }
  3401. var html_trs_data = "";
  3402. var confobj = this.config.deviceForOther[this.addData.deviceTypeIds];
  3403. var content = null;
  3404. switch (Number(this.addData.deviceTypeIds)) {
  3405. case 1:
  3406. case 2://巡检线
  3407. results.result.records.forEach((p, itemindx) => {
  3408. content = new Object();
  3409. // for (var k = 0; k < confobj.showfields.length; k++) {
  3410. // content[confobj.showfields[k]] = p[confobj.showfields[k]];
  3411. // }
  3412. // JSON.stringify
  3413. html_trs_data += "<tr class=goto data-id='" + p.id
  3414. + "' data-geometry='" + p.geometry
  3415. + "' ><td class='checkwidth'><input type='checkbox' name='pointlist-select' class='pointlist-select' id='" + p.id
  3416. + "' data-geometry='" + p.geometry
  3417. + "' data-x='" + p.x
  3418. + "' data-y='" + p.y
  3419. + "' data-pipe_length='" + p.pipeLength
  3420. + "' data-address='" + p.address
  3421. + "' data-content='" + JSON.stringify(content)
  3422. + "' data-name='" + p.pointName
  3423. + "' data-device_type_id='" + this.addData.deviceTypeIds
  3424. + "' data-regionname='" + p.regionName
  3425. + "' /></td><td title='" + p.deviceTypeName + "'>" + p.deviceTypeName
  3426. + "</td><td title='" + this.ajaxSend.verificationHelper.setNullAndUndefined(p.pointName) + "'>" + this.ajaxSend.verificationHelper.setNullAndUndefined(p.pointName)
  3427. + "</td><td title='" + this.ajaxSend.verificationHelper.setNullAndUndefined(p.address) + "'>" + this.ajaxSend.verificationHelper.setNullAndUndefined(p.address)
  3428. // + "</td><td title='" + p.regionName + "'>" + p.regionName
  3429. + "</td><td title='" + p.createTime + "'>" + p.createTime
  3430. + "</td></tr>";
  3431. });
  3432. break;
  3433. }
  3434. this.addRegionInfoGraphic(results, this.addData.deviceTypeIds);//加载到地图
  3435. this.domObj.find(".pointlist").empty().append(html_trs_data);
  3436. // 选中行高亮------------------符号需修改--------------
  3437. this.domObj.off("click").on('click', '.pointlist tr', (e) => {
  3438. this.domObj.find('tr.active').removeClass('active');
  3439. $(e.currentTarget).addClass('active');
  3440. var device_type_id = $(e.currentTarget).data("device_type_id");
  3441. this.missionschedule_plandetail_polylinelayer.clear();
  3442. if ($(e.currentTarget).data("geometry").hasOwnProperty("paths")) {
  3443. var mappolyline = new Polyline($(e.currentTarget).data("geometry"));
  3444. this.zoom2MapHalf(mappolyline);
  3445. this.missionschedule_plandetail_polylinelayer.add(new Graphic(mappolyline, this.setGraphSymbol("polyline", 2)));
  3446. } else {
  3447. var mapPoint = new Point($(e.currentTarget).data("geometry").x, $(e.currentTarget).data("geometry").y, new SpatialReference({ wkid: this.map.spatialReference.wkid }));
  3448. this.missionschedule_plandetail_polylinelayer.add(new Graphic(mapPoint, this.setGraphSymbol("point")));
  3449. }
  3450. });
  3451. //全选
  3452. this.domObj.find('.pointlist-selected').off("change").on("change", function () {
  3453. if (this.domObj.find(".pointlist-selected").prop('checked') == true) {
  3454. this.domObj.find(".pointlist-select").each(function () {
  3455. $(this).prop('checked', true);
  3456. });
  3457. } else {
  3458. this.domObj.find(".pointlist-select").each(function () {
  3459. $(this).prop('checked', false);
  3460. });
  3461. }
  3462. this.getTypeLength();
  3463. }.bind(this));
  3464. //单选
  3465. this.domObj.find('.pointlist-select').off("change").on("change", function () {
  3466. if (this.domObj.find(".pointlist-select:checked").length == this.domObj.find(".pointlist-select").length) {
  3467. this.domObj.find('.pointlist-selected').prop('checked', true);
  3468. } else {
  3469. this.domObj.find('.pointlist-selected').prop('checked', false);
  3470. }
  3471. this.getTypeLength();
  3472. }.bind(this));
  3473. }
  3474. //计算选中的长度
  3475. getTypeLength() {
  3476. let data = this.domObj.find(".pointlist-select:checked");
  3477. if (data.length == 0) {
  3478. this.domObj.find(".pipeTypeLength").text("0");
  3479. } else {
  3480. let length = 0;
  3481. $.each(data, function (i, item) {
  3482. length += parseFloat($(item).data('pipe_length'));
  3483. });
  3484. this.domObj.find(".pipeTypeLength").text(length.toFixed(2) + "");
  3485. }
  3486. }
  3487. /**
  3488. * @function 添加所有巡检线、巡检点、隐患点在地图上
  3489. * @param queryResult 查询结果
  3490. * @param device_type_id 当前巡检内容
  3491. */
  3492. addRegionInfoGraphic(queryResult, device_type_id) {
  3493. this.regionInfoGraphicLayer.clear();
  3494. for (var i = 0, length = queryResult.result.records.length; i < length; i++) {
  3495. var row = queryResult.result.records[i];
  3496. if (row.geometry == undefined || row.geometry == "") { continue; }
  3497. var point, graphic, name = "";
  3498. switch (Number(device_type_id)) {
  3499. case 1:
  3500. point = new Point(JSON.parse(row.geometry));
  3501. graphic = new Graphic(point, this.setSymbol(row.point_name)[0], { "id": row.id });
  3502. name = row.pointName;
  3503. break;
  3504. // case 5:
  3505. // point = new Point(JSON.parse(row.geometry));
  3506. // graphic = new Graphic(point, this.setSymbol("")[4], { "id": row.id });
  3507. // break;
  3508. case 2:
  3509. var polyline = new Polyline(JSON.parse(row.geometry));
  3510. point = polyline.getExtent().getCenter();
  3511. graphic = new Graphic(polyline, this.setSymbol(row.point_name)[5], { "id": row.id });
  3512. name = row.point_name;
  3513. break;
  3514. }
  3515. this.regionInfoGraphicLayer.add(graphic);
  3516. if (name != "") {
  3517. var graphictextbg = new Graphic(point, this.setSymbol(name)[1].setOffset(0, -20), "");
  3518. this.regionInfoGraphicLayer.add(graphictextbg);
  3519. //添加文字
  3520. var peopleTextSymbol = new TextSymbol(name);
  3521. peopleTextSymbol.setOffset(0, -25);
  3522. var font = new Font();
  3523. font.setSize("10pt");
  3524. font.setWeight(Font.WEIGHT_BOLD);
  3525. peopleTextSymbol.setFont(font);
  3526. var graphicText = new Graphic(point, peopleTextSymbol, "");
  3527. this.regionInfoGraphicLayer.add(graphicText);
  3528. }
  3529. }
  3530. if (length > 0) {
  3531. var extent = graphicsUtils.graphicsExtent(this.regionInfoGraphicLayer.graphics);
  3532. if (extent != null) {
  3533. this.zoom2MapHalf(extent);
  3534. }
  3535. }
  3536. }
  3537. /***
  3538. * 获取容差距离,用来对巡检线进行插值
  3539. * */
  3540. getDistanceInfo() {
  3541. let data = {
  3542. }
  3543. this.ajaxSend.sendAjax(this, data, this.config.getDistanceInfo, this.ajaxSend.type.get, function (results) {
  3544. if (results.code != -1 && results.result.minDistanceInPlace) {
  3545. this.distanceInfo = results.result.minDistanceInPlace
  3546. }
  3547. }.bind(this));
  3548. }
  3549. /**
  3550. * 销毁对象
  3551. */
  3552. destroy() {
  3553. if (this.jobid) {
  3554. this.gp.cancelJob(this.jobid);
  3555. }
  3556. if (this.missionschedule_plandetail_polylinelayer) {
  3557. this.map.removeLayer(this.missionschedule_plandetail_polylinelayer);
  3558. this.missionschedule_plandetail_polylinelayer.clear();
  3559. }
  3560. if (this.regionInfoGraphicLayer) {
  3561. this.map.removeLayer(this.regionInfoGraphicLayer);
  3562. this.regionInfoGraphicLayer.clear();
  3563. }
  3564. if (this.missionschedule_planpoint_clusterLayer) {
  3565. this.map.removeLayer(this.missionschedule_planpoint_clusterLayer);
  3566. }
  3567. if (this.plan_addptype_layer) {
  3568. this.map.removeLayer(this.plan_addptype_layer);
  3569. }
  3570. if (this.plan_addpontype_layer) {
  3571. this.map.removeLayer(this.plan_addpontype_layer);
  3572. }
  3573. if (this.devices_selected_layers) {
  3574. this.map.removeLayer(this.devices_selected_layers);
  3575. }
  3576. if (this.drawToolbar != null) {
  3577. this.map.setMapCursor('default');
  3578. this.drawToolbar.deactivate();
  3579. this.drawToolbar = null;
  3580. }
  3581. if (this.dynamicMapServer) {
  3582. this.map.removeLayer(this.dynamicMapServer);
  3583. }
  3584. this.domObj.remove();
  3585. this.afterDestroy();
  3586. }
  3587. /**
  3588. * @function 清空地图上图层元素
  3589. */
  3590. planClear() {
  3591. this.plan_addpontype_layer.clear();//计划涉及片区删除
  3592. this.plan_addptype_layer.clear();//个人计划涉及的巡检信息
  3593. this.missionschedule_plandetail_polylinelayer.clear();
  3594. this.devices_selected_layers.clear();
  3595. this.regionInfoGraphicLayer.clear();
  3596. if (this.missionschedule_planpoint_clusterLayer != null) {
  3597. this.map.removeLayer(this.missionschedule_planpoint_clusterLayer);
  3598. this.missionschedule_planpoint_clusterLayer = null;
  3599. }
  3600. }
  3601. /**
  3602. * (方法说明)通过设备类型编号获取设备类型详情
  3603. * @method (方法名)
  3604. * @for (所属类名)
  3605. * @param {(参数类型)} (参数名) (参数说明)
  3606. * @return {(返回值类型)} (返回值说明)
  3607. */
  3608. private getDeviceType(devicetypeID) {
  3609. var index = _.findIndex(this.deviceTypes, function (o) { return (o["pointTypeId"] + "") == devicetypeID; });
  3610. if (index == -1) return null;
  3611. var devicetype = this.deviceTypes[index];
  3612. return devicetype;
  3613. }
  3614. /**
  3615. * (方法说明)用于halfpanel的缩放地图到几何图形
  3616. * @method (方法名)
  3617. * @for (所属类名)
  3618. * @param {(参数类型)} (参数名) (参数说明)
  3619. * @return {(返回值类型)} (返回值说明)
  3620. */
  3621. private zoom2MapHalf(geo) {
  3622. var extent = geo.getExtent();
  3623. this.map.setExtent(extent);
  3624. }
  3625. private getLayerShowFieldNames(cn_layerName) {
  3626. var layerfields = this.AppX.runtimeConfig.fieldConfig.GetLayerFields(cn_layerName);
  3627. var showFields = layerfields.slice(0, 5);//默认显示前4个属性
  3628. //从配置中查找4个可用属性
  3629. for (var i = 0; i < 5; i++) {
  3630. var index = _.findIndex(this.config.showfieldnames, function (o: any) { return o == showFields[i].alias });
  3631. if (index == -1) {
  3632. var index2 = _.findIndex(layerfields, function (o: any) { return this.config.showfieldnames[i] == o.alias }.bind(this));
  3633. if (index2 != -1)
  3634. showFields[i] = layerfields[index2];
  3635. }
  3636. }
  3637. return showFields;
  3638. }
  3639. }