fmode-ng 0.0.79 → 0.0.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/core/agent/index.mjs
7
7
  */
8
- export*from"./prompt";export*from"./story";export*from"./task";export*from"./chat";
8
+ export*from"./prompt";export*from"./story";export*from"./task";export*from"./chat";export*from"./waiting";
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9jb3JlL2FnZW50L2luZGV4Lm1qcw==`
10
10
 
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/core/agent/prompt/agent.prompt.mjs
7
7
  */
8
- import{FmodeChatCompletion}from"../chat";import{finalize}from"rxjs";export class AgentPrompt{constructor(){}jsonCompletion(e,t){let o,r=new FmodeChatCompletion([{role:"user",content:e}]);return r.model=t||"fmode-4.0-cn-256k",r.sendCompletion({isDirect:!0,onComplete:e=>{console.log("finalMessage",e);e?.content;e.complete=!0}}).pipe(finalize((()=>{let e;console.log(o);try{o.json=this.extractAndParseJson(e)}catch(e){}o.complete=!0})))}extractAndParseJson(e){let t=e.indexOf("{");if(-1===t)return{};let o=0,r=t;for(let n=t;n<e.length;n++)if("{"===e[n]?o++:"}"===e[n]&&o--,0===o){r=n;break}if(0!==o)return{};const n=e.slice(t,r+1);try{return JSON.parse(n)}catch(e){return console.error("Failed to parse JSON:",e),{}}}extractMarkdownToMultiArray(e){let t=e.split("\n"),o=[],r=o,n=[o];for(let e of t){if(!e.trim())continue;if(e.startsWith("#")){let t=e.replace(/^#+\s*/,"");r.push([t]);continue}let t=e.search(/\S/)/2,o=e.trim().replace(/^-+\s*/,"");for(;t<n.length-1;)n.pop();for(;t>n.length-1;){let e=[];n[n.length-1].push(e),n.push(e)}r=n[n.length-1],r.push(o)}return o}getTokens(e){return e=e||"",2*e?.length}}
8
+ import{PromptTemplate}from"@langchain/core/prompts";import{FmodeChatCompletion}from"../chat";import Parse from"parse";import{finalize}from"rxjs";export class AgentPrompt{constructor(){}jsonCompletion(e,t){let r,o=new FmodeChatCompletion([{role:"user",content:e}]);return o.model=t||"fmode-4.0-cn-256k",o.sendCompletion({isDirect:!0,onComplete:e=>{console.log("finalMessage",e);e?.content;e.complete=!0}}).pipe(finalize((()=>{let e;try{r.json=this.extractAndParseJson(e)}catch(e){}r.complete=!0})))}extractAndParseJson(e){let t=e.indexOf("{");if(-1===t)return{};let r=0,o=t;for(let n=t;n<e.length;n++)if("{"===e[n]?r++:"}"===e[n]&&r--,0===r){o=n;break}if(0!==r)return{};const n=e.slice(t,o+1);try{return JSON.parse(n)}catch(e){return console.error("Failed to parse JSON:",e),{}}}extractMarkdownToMultiArray(e){let t=e.split("\n"),r=[],o=r,n=[r];for(let e of t){if(!e.trim())continue;if(e.startsWith("#")){let t=e.replace(/^#+\s*/,"");o.push([t]);continue}let t=e.search(/\S/)/2,r=e.trim().replace(/^-+\s*/,"");for(;t<n.length-1;)n.pop();for(;t>n.length-1;){let e=[];n[n.length-1].push(e),n.push(e)}o=n[n.length-1],o.push(r)}return r}async getFormatTpl(e,t){let r=await this.getPromptTpl(e);return await r.format(t)}async getPromptTpl(e){let t=new Parse.Query("PromptTemplate");t.equalTo("code",e);let r=await t.first();return PromptTemplate.fromTemplate(r?.get("template"),{templateFormat:"mustache"})}getTokens(e){return e=e||"",2*e?.length}}
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9jb3JlL2FnZW50L3Byb21wdC9hZ2VudC5wcm9tcHQubWpz`
10
10
 
@@ -0,0 +1,10 @@
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/core/agent/waiting/index.mjs
7
+ */
8
+ export*from"./tips/tips.ctrl";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9jb3JlL2FnZW50L3dhaXRpbmcvaW5kZXgubWpz`
10
+
@@ -0,0 +1,10 @@
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs
7
+ */
8
+ export class TipsController{constructor(t){this.duration=5,this.container=null,this.currentIndex=0,this.intervalId=null,this.position="top",this.isVisible=!1,this.tipsList=t?.tipsList.length>0?t?.tipsList:this.getDefaultTips(),t?.random&&(this.tipsList=this.tipsList.sort((()=>Math.random()-.5))),this.position=t.position||"top"}getDefaultTips(){return["请耐心等待,精彩内容即将呈现...","生活就像一盒巧克力,你永远不知道下一颗是什么味道。","山重水复疑无路,柳暗花明又一村。","好的开始是成功的一半。","时间是最好的老师,但遗憾的是,它杀死了所有的学生。","不积跬步,无以至千里;不积小流,无以成江海。","代码如诗,简洁为美。"]}addTip(t){this.tipsList.push(t)}setTips(t){this.tipsList=t.length>0?t:this.getDefaultTips()}present(){if(this.isVisible)return;this.container=document.createElement("div"),this.container.id="tips-container",Object.assign(this.container.style,{position:"fixed",[this.position]:"20vh",left:"50%",transform:"translateX(-50%)",zIndex:"9999",backgroundColor:"rgba(255, 255, 255, 0.9)",color:"#333",padding:"12px 24px",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",maxWidth:"92vw",minWidth:"92vw",textAlign:"center",fontSize:"16px",lineHeight:"1.5",transition:"opacity 0.3s ease",border:"1px solid rgba(0, 0, 0, 0.1)",backdropFilter:"blur(4px)",animation:"fadeIn 0.5s ease"});const t=document.createElement("div");t.id="tip-content",t.textContent=this.tipsList[this.currentIndex],Object.assign(t.style,{margin:"0",whiteSpace:"pre-wrap",wordBreak:"break-word"});const i=document.createElement("div");i.id="tip-progress",Object.assign(i.style,{height:"3px",backgroundColor:"rgba(0, 150, 255, 0.5)",width:"100%",borderRadius:"3px",marginTop:"10px",overflow:"hidden"});const e=document.createElement("div");Object.assign(e.style,{height:"100%",width:"100%",backgroundColor:"#0096ff",animation:`progress ${this.duration}s linear forwards`}),i.appendChild(e),this.container.appendChild(t),this.container.appendChild(i),document.body.appendChild(this.container),this.addAnimationStyles(),this.startRotation(),this.isVisible=!0}dismiss(){this.isVisible&&this.container&&(this.container.style.opacity="0",setTimeout((()=>{this.container&&this.container.parentNode&&(document.body.removeChild(this.container),this.container=null),this.stopRotation(),this.isVisible=!1}),300))}startRotation(){this.stopRotation(),this.intervalId=window.setInterval((()=>{this.nextTip()}),1e3*this.duration)}stopRotation(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}nextTip(){if(!this.container)return;this.currentIndex=(this.currentIndex+1)%this.tipsList.length;let t=this.container.querySelector("#tip-content"),i=this.container.querySelector("#tip-progress > div");t&&(t.style.opacity="0",setTimeout((()=>{t.textContent=this.tipsList[this.currentIndex],i&&(i.style.animation="none",i.offsetWidth,i.style.animation=`progress ${this.duration}s linear forwards`),t.style.opacity="1"}),50))}addAnimationStyles(){const t=document.createElement("style");t.textContent="\n @keyframes fadeIn {\n from { opacity: 0; transform: translateX(-50%) translateY(-10px); }\n to { opacity: 1; transform: translateX(-50%) translateY(0); }\n }\n @keyframes progress {\n from { width: 100%; }\n to { width: 0%; }\n }\n ",document.head.appendChild(t)}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9jb3JlL2FnZW50L3dhaXRpbmcvdGlwcy90aXBzLmN0cmwubWpz`
10
+
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs
7
7
  */
8
- import{Component,Input,Output,EventEmitter,ViewChild,ElementRef}from"@angular/core";import Parse from"parse";import{IonModal}from"@ionic/angular";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i0 from"@angular/core";import*as i1 from"@angular/common";import*as i2 from"@angular/forms";import*as i3 from"@ionic/angular";window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};export class CompPoiPickerComponent{get name(){return this._name}set name(e){this._name=e,this.nameChange.emit(e)}get address(){return this._address}set address(e){this._address=e,this.addressChange.emit(e)}get location(){return this._location}set location(e){this._location=e,this.locationChange.emit(e)}constructor(){this.nameChange=new EventEmitter,this.addressChange=new EventEmitter,this.locationChange=new EventEmitter,this.isModalOpen=!1}cancel(){this.isModalOpen=!1,this.modal.dismiss(null,"cancel")}confirm(){this.isModalOpen=!1,this.modal.dismiss(this.address,"confirm")}onWillDismiss(e){"confirm"===e.detail.role&&console.log("确认")}openModal(){this.isModalOpen=!0,setTimeout((()=>{this.initMap()}),800)}ngAfterViewInit(){}initMap(){this.createMap()}async createMap(){this.AMap=await AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"});let e=this.container.nativeElement;this.map=new this.AMap.Map(e),this.goCurrentCenter()}goCurrentCenter(){this.AMap.plugin(["AMap.Geolocation"],(()=>{let e=new this.AMap.Geolocation({enableHighAccuracy:!0,timeout:1e4,maximumAge:0,convert:!0,showButton:!0,buttonPosition:"RB",buttonOffset:new this.AMap.Pixel(10,10),showMarker:!1,showCircle:!1,panToLocation:!0,zoomToAccuracy:!1});this.map.addControl(e),e.getCurrentPosition((function(e,n){"complete"===e?(console.log("当前位置经度:"+n.position.getLng()),console.log("当前位置纬度:"+n.position.getLat())):console.log("定位失败:"+n.message)}))}))}searchByAddress(){let e=this.panel.nativeElement;this.AMap.plugin(["AMap.PlaceSearch"],(()=>{let n=new this.AMap.PlaceSearch({pageSize:3,pageIndex:1,map:this.map,panel:e,autoFitView:!0});n.on("selectChanged",(e=>{this.name=e.selected.data.name,this.address=e.selected.data.address,this.location=new Parse.GeoPoint({latitude:e.selected.data.location.lat,longitude:e.selected.data.location.lng}),this.createCenterMarker()})),n.search(this.address)}))}createCenterMarker(){this.centerMarker||(this.centerMarker=new this.AMap.Marker({position:this.map.getCenter(),offset:new this.AMap.Pixel(-15,-15)}),this.map.add(this.centerMarker),this.map.on("dragging",(()=>{this.centerMarker.setPosition(this.map.getCenter())})),this.map.on("dragend",(()=>{let e=this.centerMarker.getPosition();this.location=new Parse.GeoPoint({latitude:e.lat,longitude:e.lng})})))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompPoiPickerComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:{_name:["name","_name"],_address:["address","_address"],_location:["location","_location"]},outputs:{nameChange:"nameChange",addressChange:"addressChange",locationChange:"locationChange"},viewQueries:[{propertyName:"container",first:!0,predicate:["container"],descendants:!0},{propertyName:"panel",first:!0,predicate:["panel"],descendants:!0},{propertyName:"modal",first:!0,predicate:IonModal,descendants:!0}],ngImport:i0,template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"],dependencies:[{kind:"directive",type:i1.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:i3.IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:i3.IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:i3.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i3.IonInput,selector:"ion-input",inputs:["autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearInputIcon","clearOnEdit","color","counter","counterFormatter","debounce","disabled","enterkeyhint","errorText","fill","helperText","inputmode","label","labelPlacement","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","shape","spellcheck","step","type","value"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i3.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i3.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:i3.IonModal,selector:"ion-modal"},{kind:"directive",type:i3.TextValueAccessor,selector:"ion-input:not([type=number]),ion-textarea,ion-searchbar"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompPoiPickerComponent,decorators:[{type:Component,args:[{selector:"fm-map-poi-picker",template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"]}]}],ctorParameters:()=>[],propDecorators:{container:[{type:ViewChild,args:["container"]}],panel:[{type:ViewChild,args:["panel"]}],_name:[{type:Input,args:["name"]}],nameChange:[{type:Output}],_address:[{type:Input,args:["address"]}],addressChange:[{type:Output}],_location:[{type:Input,args:["location"]}],locationChange:[{type:Output}],modal:[{type:ViewChild,args:[IonModal]}]}});
8
+ import{Component,Input,Output,EventEmitter,ViewChild,ElementRef}from"@angular/core";import Parse from"parse";import{IonModal}from"@ionic/angular";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i0 from"@angular/core";import*as i1 from"@angular/common";import*as i2 from"@angular/forms";import*as i3 from"@ionic/angular";export class CompPoiPickerComponent{get name(){return this._name}set name(e){this._name=e,this.nameChange.emit(e)}get address(){return this._address}set address(e){this._address=e,this.addressChange.emit(e)}get location(){return this._location}set location(e){this._location=e,this.locationChange.emit(e)}constructor(){this.nameChange=new EventEmitter,this.addressChange=new EventEmitter,this.locationChange=new EventEmitter,this.amap={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a",key:"473b52010df7d3a32db0a2f5db245c8e"},this.isModalOpen=!1,this.initaMapConfig()}async initaMapConfig(){let e=localStorage.getItem("company");if(e){let n=new Parse.Query("Company");n.select("config");let t=await n.get(e);t?.get("config")?.amap&&(this.amap=t.get("config").amap)}window._AMapSecurityConfig={securityJsCode:this.amap.securityJsCode}}cancel(){this.isModalOpen=!1,this.modal.dismiss(null,"cancel")}confirm(){this.isModalOpen=!1,this.modal.dismiss(this.address,"confirm")}onWillDismiss(e){"confirm"===e.detail.role&&console.log("确认")}openModal(){this.isModalOpen=!0,setTimeout((()=>{this.initMap()}),800)}ngAfterViewInit(){}initMap(){this.createMap()}async createMap(){this.AMap=await AMapLoader.load({key:this.amap.key,version:"2.0"});let e=this.container.nativeElement;this.map=new this.AMap.Map(e),this.goCurrentCenter()}goCurrentCenter(){this.AMap.plugin(["AMap.Geolocation"],(()=>{let e=new this.AMap.Geolocation({enableHighAccuracy:!0,timeout:1e4,maximumAge:0,convert:!0,showButton:!0,buttonPosition:"RB",buttonOffset:new this.AMap.Pixel(10,10),showMarker:!1,showCircle:!1,panToLocation:!0,zoomToAccuracy:!1});this.map.addControl(e),e.getCurrentPosition((function(e,n){"complete"===e?(console.log("当前位置经度:"+n.position.getLng()),console.log("当前位置纬度:"+n.position.getLat())):console.log("定位失败:"+n.message)}))}))}searchByAddress(){let e=this.panel.nativeElement;this.AMap.plugin(["AMap.PlaceSearch"],(()=>{let n=new this.AMap.PlaceSearch({pageSize:3,pageIndex:1,map:this.map,panel:e,autoFitView:!0});n.on("selectChanged",(e=>{this.name=e.selected.data.name,this.address=e.selected.data.address,this.location=new Parse.GeoPoint({latitude:e.selected.data.location.lat,longitude:e.selected.data.location.lng}),this.createCenterMarker()})),n.search(this.address)}))}createCenterMarker(){this.centerMarker||(this.centerMarker=new this.AMap.Marker({position:this.map.getCenter(),offset:new this.AMap.Pixel(-15,-15)}),this.map.add(this.centerMarker),this.map.on("dragging",(()=>{this.centerMarker.setPosition(this.map.getCenter())})),this.map.on("dragend",(()=>{let e=this.centerMarker.getPosition();this.location=new Parse.GeoPoint({latitude:e.lat,longitude:e.lng})})))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompPoiPickerComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:{_name:["name","_name"],_address:["address","_address"],_location:["location","_location"]},outputs:{nameChange:"nameChange",addressChange:"addressChange",locationChange:"locationChange"},viewQueries:[{propertyName:"container",first:!0,predicate:["container"],descendants:!0},{propertyName:"panel",first:!0,predicate:["panel"],descendants:!0},{propertyName:"modal",first:!0,predicate:IonModal,descendants:!0}],ngImport:i0,template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"],dependencies:[{kind:"directive",type:i1.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:i3.IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:i3.IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:i3.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i3.IonInput,selector:"ion-input",inputs:["autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearInputIcon","clearOnEdit","color","counter","counterFormatter","debounce","disabled","enterkeyhint","errorText","fill","helperText","inputmode","label","labelPlacement","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","shape","spellcheck","step","type","value"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i3.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i3.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:i3.IonModal,selector:"ion-modal"},{kind:"directive",type:i3.TextValueAccessor,selector:"ion-input:not([type=number]),ion-textarea,ion-searchbar"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompPoiPickerComponent,decorators:[{type:Component,args:[{selector:"fm-map-poi-picker",template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"]}]}],ctorParameters:()=>[],propDecorators:{container:[{type:ViewChild,args:["container"]}],panel:[{type:ViewChild,args:["panel"]}],_name:[{type:Input,args:["name"]}],nameChange:[{type:Output}],_address:[{type:Input,args:["address"]}],addressChange:[{type:Output}],_location:[{type:Input,args:["location"]}],locationChange:[{type:Output}],modal:[{type:ViewChild,args:[IonModal]}]}});
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9tYXAvY29tcC1wb2ktcGlja2VyL2NvbXAtcG9pLXBpY2tlci5jb21wb25lbnQubWpz`
10
10
 
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs
7
7
  */
8
- import{Component}from"@angular/core";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i0 from"@angular/core";window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};export class PageLocaScatterComponent{ngAfterViewInit(){this.initMap()}async initMap(){await this.createMap(),await this.createLoca()}async createLoca(){let a=window.loca=new Loca.Container({map:this.map}),e=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road.json"}),t=new Loca.ScatterLayer({zIndex:111,opacity:1,visible:!0,zooms:[2,22]});t.setSource(e),t.setStyle({color:"rgba(43,156,75,1)",unit:"meter",size:[150,150],borderWidth:0}),a.add(t);let o=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json"}),i=new Loca.ScatterLayer({loca:a,zIndex:113,opacity:1,visible:!0,zooms:[2,22]});i.setSource(o),i.setStyle({unit:"meter",size:[2600,2600],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png",duration:500,animate:!0});let r=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_E.json"}),c=new Loca.ScatterLayer({loca:a,zIndex:112,opacity:1,visible:!0,zooms:[2,22]});c.setSource(r),c.setStyle({unit:"meter",size:[1e3,1e3],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_yellow.png",duration:1e3,animate:!0}),a.animate.start();let n=new Loca.Dat;n.addLayer(t," 贴地"),n.addLayer(i,"红色"),n.addLayer(c,"黄色")}async createMap(){this.AMap=await AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0",Loca:{version:"2.0.0"}}),this.map=new this.AMap.Map("container",{zoom:11.7,center:[113.97199630737305,22.5807295363949],pitch:40,showLabel:!1,mapStyle:"amap://styles/dark",viewMode:"3D"})}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageLocaScatterComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:PageLocaScatterComponent,selector:"app-page-loca-scatter",ngImport:i0,template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageLocaScatterComponent,decorators:[{type:Component,args:[{selector:"app-page-loca-scatter",template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]}]}]});
8
+ import{Component}from"@angular/core";import*as AMapLoader from"@amap/amap-jsapi-loader";import Parse from"parse";import*as i0 from"@angular/core";export class PageLocaScatterComponent{constructor(){this.amap={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a",key:"473b52010df7d3a32db0a2f5db245c8e"},this.initaMapConfig()}async initaMapConfig(){let a=localStorage.getItem("company");if(a){let e=new Parse.Query("Company");e.select("config");let t=await e.get(a);t?.get("config")?.amap&&(this.amap=t.get("config").amap)}window._AMapSecurityConfig={securityJsCode:this.amap.securityJsCode}}ngAfterViewInit(){this.initMap()}async initMap(){await this.createMap(),await this.createLoca()}async createLoca(){let a=window.loca=new Loca.Container({map:this.map}),e=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road.json"}),t=new Loca.ScatterLayer({zIndex:111,opacity:1,visible:!0,zooms:[2,22]});t.setSource(e),t.setStyle({color:"rgba(43,156,75,1)",unit:"meter",size:[150,150],borderWidth:0}),a.add(t);let o=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json"}),i=new Loca.ScatterLayer({loca:a,zIndex:113,opacity:1,visible:!0,zooms:[2,22]});i.setSource(o),i.setStyle({unit:"meter",size:[2600,2600],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png",duration:500,animate:!0});let r=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_E.json"}),c=new Loca.ScatterLayer({loca:a,zIndex:112,opacity:1,visible:!0,zooms:[2,22]});c.setSource(r),c.setStyle({unit:"meter",size:[1e3,1e3],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_yellow.png",duration:1e3,animate:!0}),a.animate.start();let s=new Loca.Dat;s.addLayer(t," 贴地"),s.addLayer(i,"红色"),s.addLayer(c,"黄色")}async createMap(){this.AMap=await AMapLoader.load({key:this.amap.key,version:"2.0",Loca:{version:"2.0.0"}}),this.map=new this.AMap.Map("container",{zoom:11.7,center:[113.97199630737305,22.5807295363949],pitch:40,showLabel:!1,mapStyle:"amap://styles/dark",viewMode:"3D"})}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageLocaScatterComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:PageLocaScatterComponent,selector:"app-page-loca-scatter",ngImport:i0,template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageLocaScatterComponent,decorators:[{type:Component,args:[{selector:"app-page-loca-scatter",template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]}]}],ctorParameters:()=>[]});
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9tYXAvcGFnZS1sb2NhLXNjYXR0ZXIvcGFnZS1sb2NhLXNjYXR0ZXIuY29tcG9uZW50Lm1qcw==`
10
10
 
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/map/page-map.start/page-map.start.component.mjs
7
7
  */
8
- import{Component}from"@angular/core";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i0 from"@angular/core";import*as i1 from"@angular/common";window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};export class PageMapStartComponent{constructor(){this.placeList=[{name:"江财蛟桥校区",location:[115.855125,28.744335]},{name:"江财枫林校区",location:[115.835639,28.734119]},{name:"江财麦庐校区",location:[115.816717,28.728899]}]}ngAfterViewInit(){this.initMap()}async initMap(){await this.createMap(),this.goAndMarkPlace(this.placeList[1])}async createMap(){this.AMap=await AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"}),this.map=new this.AMap.Map("container")}async addMarks(){let e=new this.AMap.Marker({position:[115.835639,28.734119]});this.map.add(e)}goAndMarkPlace(e){this.map.setCenter(e.location),this.map.setZoom(18),console.log(this.placeList),e.marker||(e.marker=new this.AMap.Marker({position:e.location}),this.map.add(e.marker))}clearMark(e){e?.marker?.remove()}planRoute(e,a){let t;this.map.plugin(["AMap.Transfer"],(()=>{let n={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};console.log(this.AMap),console.log(this.AMap.TransferPolicy),t=new this.AMap.Transfer(n),t.search(new this.AMap.LngLat(e.location[0],e.location[1]),new this.AMap.LngLat(a.location[0],a.location[1]),((e,a)=>{"complete"===e?(console.log("绘制公交路线完成:"),console.log(a)):console.error("公交路线数据查询失败"+a)}))}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageMapStartComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:PageMapStartComponent,selector:"app-page-map.start",ngImport:i0,template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"],dependencies:[{kind:"directive",type:i1.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageMapStartComponent,decorators:[{type:Component,args:[{selector:"app-page-map.start",template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"]}]}]});
8
+ import{Component}from"@angular/core";import*as AMapLoader from"@amap/amap-jsapi-loader";import Parse from"parse";import*as i0 from"@angular/core";import*as i1 from"@angular/common";export class PageMapStartComponent{constructor(){this.placeList=[{name:"江财蛟桥校区",location:[115.855125,28.744335]},{name:"江财枫林校区",location:[115.835639,28.734119]},{name:"江财麦庐校区",location:[115.816717,28.728899]}],this.amap={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a",key:"473b52010df7d3a32db0a2f5db245c8e"},this.initaMapConfig()}async initaMapConfig(){let a=localStorage.getItem("company");if(a){let e=new Parse.Query("Company");e.select("config");let t=await e.get(a);t?.get("config")?.amap&&(this.amap=t.get("config").amap)}window._AMapSecurityConfig={securityJsCode:this.amap.securityJsCode}}ngAfterViewInit(){this.initMap()}async initMap(){await this.createMap(),this.goAndMarkPlace(this.placeList[1])}async createMap(){this.AMap=await AMapLoader.load({key:this.amap.key,version:"2.0"}),this.map=new this.AMap.Map("container")}async addMarks(){let a=new this.AMap.Marker({position:[115.835639,28.734119]});this.map.add(a)}goAndMarkPlace(a){this.map.setCenter(a.location),this.map.setZoom(18),console.log(this.placeList),a.marker||(a.marker=new this.AMap.Marker({position:a.location}),this.map.add(a.marker))}clearMark(a){a?.marker?.remove()}planRoute(a,e){let t;this.map.plugin(["AMap.Transfer"],(()=>{let n={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};console.log(this.AMap),console.log(this.AMap.TransferPolicy),t=new this.AMap.Transfer(n),t.search(new this.AMap.LngLat(a.location[0],a.location[1]),new this.AMap.LngLat(e.location[0],e.location[1]),((a,e)=>{"complete"===a?(console.log("绘制公交路线完成:"),console.log(e)):console.error("公交路线数据查询失败"+e)}))}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageMapStartComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:PageMapStartComponent,selector:"app-page-map.start",ngImport:i0,template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"],dependencies:[{kind:"directive",type:i1.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PageMapStartComponent,decorators:[{type:Component,args:[{selector:"app-page-map.start",template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"]}]}],ctorParameters:()=>[]});
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9tYXAvcGFnZS1tYXAuc3RhcnQvcGFnZS1tYXAuc3RhcnQuY29tcG9uZW50Lm1qcw==`
10
10
 
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs
7
7
  */
8
- import{Component}from"@angular/core";import Parse from"parse";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i0 from"@angular/core";import*as i1 from"@angular/common";import*as i2 from"@ionic/angular";import*as i3 from"../comp-poi-picker/comp-poi-picker.component";window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};export class PagePlanRouteComponent{constructor(){this.placeList=[],this.currentTab="place",this.addNewPlace(),this.addNewPlace(),this.currentTab="plan"}addNewPlace(){this.placeList?.length>=1?this.placeList.push({name:"秋水广场",address:"南昌市秋水广场",location:new Parse.GeoPoint({latitude:28.682634,longitude:115.86273})}):this.placeList.push({name:"八一广场",address:"南昌市八一广场",location:new Parse.GeoPoint({latitude:28.673856,longitude:115.904477})})}ngAfterViewInit(){}async initMap(){await this.createMap(),this.goAndMarkPlace(this.placeList[0])}async createMap(){this.AMap=await AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"}),this.map=new this.AMap.Map("container-plan")}goAndMarkPlace(n){this.map.setCenter([n.location.latitude,n.location.longitude]),this.map.setZoom(18),n.marker||(n.marker=new this.AMap.Marker({position:[n.location.latitude,n.location.longitude]}),this.map.add(n.marker))}clearMark(n){n?.marker?.remove()}planRoute(n,e){let a;this.map.plugin(["AMap.Transfer"],(()=>{let t={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};a=new this.AMap.Transfer(t);let o=new this.AMap.LngLat(n.location.longitude,n.location.latitude),i=new this.AMap.LngLat(e.location.longitude,e.location.latitude);a.search(o,i,((n,e)=>{"complete"===n?(console.log("绘制公交路线完成:"),console.log(e)):console.error("公交路线数据查询失败"+e)}))}))}async createPlan(){await this.initMap(),this.planRoute(this.placeList[0],this.placeList[1])}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PagePlanRouteComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:PagePlanRouteComponent,selector:"app-page-plan-route",ngImport:i0,template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"],dependencies:[{kind:"directive",type:i1.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i1.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:i2.IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:i2.IonCard,selector:"ion-card",inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i2.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i2.IonSegment,selector:"ion-segment",inputs:["color","disabled","mode","scrollable","selectOnFocus","swipeGesture","value"]},{kind:"component",type:i2.IonSegmentButton,selector:"ion-segment-button",inputs:["disabled","layout","mode","type","value"]},{kind:"directive",type:i2.SelectValueAccessor,selector:"ion-select, ion-radio-group, ion-segment, ion-datetime"},{kind:"component",type:i3.CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:["name","address","location"],outputs:["nameChange","addressChange","locationChange"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PagePlanRouteComponent,decorators:[{type:Component,args:[{selector:"app-page-plan-route",template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"]}]}],ctorParameters:()=>[]});
8
+ import{Component}from"@angular/core";import Parse from"parse";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i0 from"@angular/core";import*as i1 from"@angular/common";import*as i2 from"@ionic/angular";import*as i3 from"../comp-poi-picker/comp-poi-picker.component";export class PagePlanRouteComponent{constructor(){this.placeList=[],this.currentTab="place",this.amap={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a",key:"473b52010df7d3a32db0a2f5db245c8e"},this.initaMapConfig(),this.addNewPlace(),this.currentTab="plan"}async initaMapConfig(){let n=localStorage.getItem("company");if(n){let e=new Parse.Query("Company");e.select("config");let a=await e.get(n);a?.get("config")?.amap&&(this.amap=a.get("config").amap)}window._AMapSecurityConfig={securityJsCode:this.amap.securityJsCode}}addNewPlace(){this.placeList?.length>=1?this.placeList.push({name:"秋水广场",address:"南昌市秋水广场",location:new Parse.GeoPoint({latitude:28.682634,longitude:115.86273})}):this.placeList.push({name:"八一广场",address:"南昌市八一广场",location:new Parse.GeoPoint({latitude:28.673856,longitude:115.904477})})}ngAfterViewInit(){}async initMap(){await this.createMap(),this.goAndMarkPlace(this.placeList[0])}async createMap(){this.AMap=await AMapLoader.load({key:this.amap.key,version:"2.0"}),this.map=new this.AMap.Map("container-plan")}goAndMarkPlace(n){this.map.setCenter([n.location.latitude,n.location.longitude]),this.map.setZoom(18),n.marker||(n.marker=new this.AMap.Marker({position:[n.location.latitude,n.location.longitude]}),this.map.add(n.marker))}clearMark(n){n?.marker?.remove()}planRoute(n,e){let a;this.map.plugin(["AMap.Transfer"],(()=>{let t={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};a=new this.AMap.Transfer(t);let o=new this.AMap.LngLat(n.location.longitude,n.location.latitude),i=new this.AMap.LngLat(e.location.longitude,e.location.latitude);a.search(o,i,((n,e)=>{"complete"===n?(console.log("绘制公交路线完成:"),console.log(e)):console.error("公交路线数据查询失败"+e)}))}))}async createPlan(){await this.initMap(),this.planRoute(this.placeList[0],this.placeList[1])}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PagePlanRouteComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:PagePlanRouteComponent,selector:"app-page-plan-route",ngImport:i0,template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"],dependencies:[{kind:"directive",type:i1.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i1.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:i2.IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:i2.IonCard,selector:"ion-card",inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i2.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i2.IonSegment,selector:"ion-segment",inputs:["color","disabled","mode","scrollable","selectOnFocus","swipeGesture","value"]},{kind:"component",type:i2.IonSegmentButton,selector:"ion-segment-button",inputs:["contentId","disabled","layout","mode","type","value"]},{kind:"directive",type:i2.SelectValueAccessor,selector:"ion-select, ion-radio-group, ion-segment, ion-datetime"},{kind:"component",type:i3.CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:["name","address","location"],outputs:["nameChange","addressChange","locationChange"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PagePlanRouteComponent,decorators:[{type:Component,args:[{selector:"app-page-plan-route",template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"]}]}],ctorParameters:()=>[]});
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9tYXAvcGFnZS1wbGFuLXJvdXRlL3BhZ2UtcGxhbi1yb3V0ZS5jb21wb25lbnQubWpz`
10
10
 
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-upload/nova-upload.service.mjs
7
7
  */
8
- import{DatePipe}from"@angular/common";import{Injectable}from"@angular/core";import{Platform}from"@ionic/angular";import{Camera,CameraResultType,CameraSource}from"@capacitor/camera";import{Capacitor}from"@capacitor/core";import{Filesystem}from"@capacitor/filesystem";import{FilesystemWeb}from"@capacitor/filesystem/dist/esm/web.js";import*as qiniu from"qiniu-js";import Parse from"parse";import{Diagnostic}from"@awesome-cordova-plugins/diagnostic/ngx";import CryptoJS from"crypto-js";import{MediaCapture}from"@awesome-cordova-plugins/media-capture/ngx";import{calcFileMd5}from"./util-file-md5";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";import*as i2 from"@awesome-cordova-plugins/diagnostic/ngx";export class NovaUploadService{constructor(e,t){this.platform=e,this.diagnostic=t,this.maxSize=5242880,this.getUptoken(!0),this.requestPermission(),this.queryDomain()}async upload(e,t){let i,a=e.type,o=e.name?.split("."),s=o[o.length-1],n={id:"",name:"",type:"",size:0,key:"",url:""},r=await this.getFileMd5(e),l=await this.getAttachByMd5(r);if(l?.id)n.url=l?.get("url"),n.name=l?.get("name"),n.type=l?.get("type"),n.size=l?.get("size"),t&&t({total:{loaded:n.size,size:n.size,percent:100}});else{let i=this.fileToBlob(e);n=a.indexOf("image")>-1?await this.saveQiniuImageFile(i,s,null,t):await this.saveQiniuMediaFile(e,i,null,t)}return n?.url?.indexOf("undefined")>-1&&(n.url=(this.qiniuDomain||"https://file-cloud.fmode.cn/")+n.url.replace("undefined/","")),n?.url&&(i=await this.saveAttachment(n,this.qiniuDomain,null,this.getCompanyId(),e)),i?.id&&(n.id=i?.id),n.attachment=i,n}async getAttachByMd5(e){if(!e)return null;let t=new Parse.Query("Attachment");return t.equalTo("md5",e),t.addDescending("createdAt"),await t.first()}isCapacitor(){return this.platform.is("capacitor")||this.platform.is("cordova")}async getFileMd5(e){let t;try{t=await calcFileMd5(e),console.log("md5File",t)}catch(e){console.error(e)}return t}async requestPermission(){this.isCapacitor()&&(await this.requestStoagePermission(),await this.requestCameraPermission())}async requestStoagePermission(){let e=await this.diagnostic.isExternalStorageAuthorized();if(console.log("permisson_STORAGE:",e),!e){await this.diagnostic.requestExternalStorageAuthorization()}}async requestCameraPermission(){let e=await this.diagnostic.isCameraAuthorized();if(console.log("permisson_Camera:",e),!e){await this.diagnostic.requestCameraAuthorization()}}async getUptoken(e=!1){if(console.log("getUptoken"),this.qiniuConf||e)try{console.log(this.getCompanyId());let e=await Parse.Cloud.run("qiniu_uptoken",{company:this.getCompanyId()});console.log(e),this.qiniuConf=e}catch(e){console.error(e)}}genFileKey(e,t){let i=new Date,a=new DatePipe("en");t||(t=this.getCompanyId());let o="storage/company/"+t+"/";return this.store?.id&&this.store?.id,o+""+(a.transform(i,"yMMdd")+"/"+String(e.id).substr(20,6)+a.transform(i,"hhmmssSSS")+/\.[^\.]+/.exec(e.name))}getCompanyId(){if(this.company)return this.company;return localStorage.getItem("company")}async queryDomain(){let e=new Parse.Query("Company"),t=await e.get(this.getCompanyId());t.get("configQiniu")&&t.get("configQiniu").domain?(console.log(t.get("configQiniu").domain),this.qiniuDomain=t.get("configQiniu").domain):this.qiniuDomain="https://file-cloud.fmode.cn"}async saveAttachment(e,t,i,a,o){e.md5=await this.getFileMd5(o);let s=e.url;s.startsWith("http")||(s=t+s),s=s.replace(/undefined\//,""),a||(a=localStorage.getItem("company"));let n,r=Parse.User.current();if(n?.id)return console.log("fast upload"),n;return n=new(Parse.Object.extend("Attachment")),n.set("size",e.size),n.set("url",s),n.set("name",e.name),n.set("mime",e.type),n.set("md5",e?.md5),this.store?.id&&n.set("store",this.store.toPointer()),r?.id&&n.set("user",r.toPointer()),a&&n.set("company",{__type:"Pointer",className:"Company",objectId:localStorage.getItem("company")}),i&&n.set("category",{__type:"Pointer",className:"Category",objectId:i}),await n.save()}async captureVideo(e){if(this.qiniuConf=e,!this.isCapacitor())return;let t=await this.cameraCaptureVideoFile(),i=await this.getMediaFileDataString(t);return await this.saveQiniuMediaFile(t,i)}async cameraCaptureVideoFile(){let e=MediaCapture,t=await e.captureVideo({limit:1});return t?.length>0?t[0]:null}async getMediaFileDataString(e){new FilesystemWeb,e.fullPath.replaceAll("///","//");let t=await Filesystem.stat({path:e.fullPath}),i=Capacitor.convertFileSrc(t.uri),a=await fetch(i),o=await a.blob();if(console.log(o.size),console.log(JSON.stringify(t)),console.log(JSON.stringify(a)),console.log(JSON.stringify(Object.keys(a))),o)return o;throw"读取文件失败"}async takePicture(e){if(this.qiniuConf=e,!this.isCapacitor())return;await this.getUptoken();let t=await this.cameraTakePictureDataUrl();if(!t?.dataUrl)return;let i=await this.base64ToBlob(t?.dataUrl),a=await this.saveQiniuImageFile(i,t?.format);return console.log(JSON.stringify(a)),a}async cameraTakePictureDataUrl(){if(!this.isCapacitor())return;return await Camera.getPhoto({quality:90,allowEditing:!1,source:CameraSource.Camera,resultType:CameraResultType.DataUrl})}async saveQiniuImageFile(e,t,i,a){let o=this.maxSize;if(e.size>o)throw await console.log("照片过大,超出限制5MB"),"超出文件大小";let s=new DatePipe("en").transform(new Date,"yyyyMMddHHmmss"),n=`${s}.${t}`,r=e.type,l={fname:n,params:{},mimeType:e.type},c={useCdnDomain:!0,forceDirect:!0};console.log(this.qiniuConf);let m=this.genFileKey({id:s,name:n});return console.log("图片上传前"),console.log(m,e,t),new Promise(((t,i)=>{console.log("进入了上传"),qiniu.upload(e,m,this.qiniuConf?.uptoken,l,c).subscribe({next:e=>{console.log(e),a&&a(e)},error:async e=>{console.log(e)},complete:i=>{console.log("上传完成"),console.log(`${this.qiniuConf?.domain}${i.key}`),i.url=`${this.qiniuConf?.domain}${i.key}`,i.name=n,i.type=r,i.size=e.size,t(i)}})}))}async saveQiniuMediaFile(e,t,i,a){let o=e.name,s=e.type;if(e.size>(this.maxSize||104857600))throw console.log("视频过大,超出限制100MB"),"超出文件大小";let n=new DatePipe("en").transform(new Date,"yyyyMMddHHmmss"),r={fname:o,params:{},mimeType:s},l={useCdnDomain:!0,forceDirect:!0},c=this.genFileKey({id:n,name:o});return console.log("图片上传前"),console.log(e.name,t.size),console.log(t.size),console.log(t.size/1024/1024),new Promise(((i,o)=>{console.log("进入了上传"),qiniu.upload(t,c,this.qiniuConf?.uptoken,r,l).subscribe({next:e=>{console.log("主要用来展示进度"),a&&a(e),console.log(JSON.stringify(e))},error:async e=>{console.log("上传失败"),console.log(JSON.stringify(e))},complete:t=>{console.log("上传完成"),console.log(JSON.stringify(t)),e.key=t.key,console.log(e.type),e.url=`${this.qiniuConf?.domain}${t.key}`,console.log(e.url),i(e)}})}))}async base64ToBlobType(e,t){let i=await fetch(`data:${t};base64,${e}`);return await i.blob()}async base64ToBlob(e){let t=await fetch(e);return await t.blob()}fileToBlob(e){const t=e.slice(0,e.size,e.type);return new Blob([t],{type:e.type})}genMd5(e){return CryptoJS.MD5(e).toString()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,deps:[{token:i1.Platform},{token:i2.Diagnostic}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.Platform},{type:i2.Diagnostic}]});
8
+ import{DatePipe}from"@angular/common";import{Injectable}from"@angular/core";import{Platform}from"@ionic/angular";import{Camera,CameraResultType,CameraSource}from"@capacitor/camera";import{Capacitor}from"@capacitor/core";import{Filesystem}from"@capacitor/filesystem";import{FilesystemWeb}from"@capacitor/filesystem/dist/esm/web.js";import*as qiniu from"qiniu-js";import Parse from"parse";import{Diagnostic}from"@awesome-cordova-plugins/diagnostic/ngx";import CryptoJS from"crypto-js";import{MediaCapture}from"@awesome-cordova-plugins/media-capture/ngx";import{calcFileMd5}from"./util-file-md5";import{getFileMetadata}from"./util-file-metadata";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";import*as i2 from"@awesome-cordova-plugins/diagnostic/ngx";export class NovaUploadService{constructor(e,t){this.platform=e,this.diagnostic=t,this.maxSize=5242880,this.getUptoken(!0),this.requestPermission(),this.queryDomain()}async upload(e,t){let i=e.type,a=e.name?.split("."),o=a[a.length-1],s={id:"",name:"",type:"",size:0,key:"",url:""},r=await this.getFileMd5(e),n=await this.getAttachByMd5(r);if(n?.id)s.url=n?.get("url"),s.name=n?.get("name"),s.type=n?.get("mime"),s.size=n?.get("size"),s.metadata=n?.get("metadata"),t&&t({total:{loaded:s.size,size:s.size,percent:100}});else{let a=this.fileToBlob(e);s=i.indexOf("image")>-1?await this.saveQiniuImageFile(a,o,null,t):await this.saveQiniuMediaFile(e,a,null,t)}s?.url?.indexOf("undefined")>-1&&(s.url=(this.qiniuDomain||"https://file-cloud.fmode.cn/")+s.url.replace("undefined/",""));let l,c=(await getFileMetadata(e)).metadata;return s.metadata||(s.metadata={}),Object.keys(c).forEach((e=>{s.metadata[e]=c[e]})),console.log("metadata",c,s),s?.url&&(l=await this.saveAttachment(s,this.qiniuDomain,null,this.getCompanyId(),e)),l?.id&&(s.id=l?.id),s.attachment=l,s}async getAttachByMd5(e){if(!e)return null;let t=new Parse.Query("Attachment");return t.equalTo("md5",e),t.addDescending("createdAt"),await t.first()}isCapacitor(){return this.platform.is("capacitor")||this.platform.is("cordova")}async getFileMd5(e){let t;try{t=await calcFileMd5(e),console.log("md5File",t)}catch(e){console.error(e)}return t}async requestPermission(){this.isCapacitor()&&(await this.requestStoagePermission(),await this.requestCameraPermission())}async requestStoagePermission(){let e=await this.diagnostic.isExternalStorageAuthorized();if(console.log("permisson_STORAGE:",e),!e){await this.diagnostic.requestExternalStorageAuthorization()}}async requestCameraPermission(){let e=await this.diagnostic.isCameraAuthorized();if(console.log("permisson_Camera:",e),!e){await this.diagnostic.requestCameraAuthorization()}}async getUptoken(e=!1){if(console.log("getUptoken"),this.qiniuConf||e)try{console.log(this.getCompanyId());let e=await Parse.Cloud.run("qiniu_uptoken",{company:this.getCompanyId()});console.log(e),this.qiniuConf=e}catch(e){console.error(e)}}genFileKey(e,t){let i=new Date,a=new DatePipe("en");t||(t=this.getCompanyId());let o="storage/company/"+t+"/";return this.store?.id&&this.store?.id,o+""+(a.transform(i,"yMMdd")+"/"+String(e.id).substr(20,6)+a.transform(i,"hhmmssSSS")+/\.[^\.]+/.exec(e.name))}getCompanyId(){if(this.company)return this.company;return localStorage.getItem("company")}async queryDomain(){let e=new Parse.Query("Company"),t=await e.get(this.getCompanyId());t.get("configQiniu")&&t.get("configQiniu").domain?(console.log(t.get("configQiniu").domain),this.qiniuDomain=t.get("configQiniu").domain):this.qiniuDomain="https://file-cloud.fmode.cn"}async saveAttachment(e,t,i,a,o){e.md5=await this.getFileMd5(o);let s=e.url;s.startsWith("http")||(s=t+s),s=s.replace(/undefined\//,""),a||(a=localStorage.getItem("company"));let r,n=Parse.User.current();if(r?.id)return console.log("fast upload"),r;return r=new(Parse.Object.extend("Attachment")),r.set("size",e.size),r.set("url",s),r.set("name",e.name),r.set("mime",e.type),r.set("md5",e?.md5),r.set("metadata",e?.metadata),this.store?.id&&r.set("store",this.store.toPointer()),n?.id&&r.set("user",n.toPointer()),a&&r.set("company",{__type:"Pointer",className:"Company",objectId:localStorage.getItem("company")}),i&&r.set("category",{__type:"Pointer",className:"Category",objectId:i}),await r.save()}async captureVideo(e){if(this.qiniuConf=e,!this.isCapacitor())return;let t=await this.cameraCaptureVideoFile(),i=await this.getMediaFileDataString(t);return await this.saveQiniuMediaFile(t,i)}async cameraCaptureVideoFile(){let e=MediaCapture,t=await e.captureVideo({limit:1});return t?.length>0?t[0]:null}async getMediaFileDataString(e){new FilesystemWeb,e.fullPath.replaceAll("///","//");let t=await Filesystem.stat({path:e.fullPath}),i=Capacitor.convertFileSrc(t.uri),a=await fetch(i),o=await a.blob();if(console.log(o.size),console.log(JSON.stringify(t)),console.log(JSON.stringify(a)),console.log(JSON.stringify(Object.keys(a))),o)return o;throw"读取文件失败"}async takePicture(e){if(this.qiniuConf=e,!this.isCapacitor())return;await this.getUptoken();let t=await this.cameraTakePictureDataUrl();if(!t?.dataUrl)return;let i=await this.base64ToBlob(t?.dataUrl),a=await this.saveQiniuImageFile(i,t?.format);return console.log(JSON.stringify(a)),a}async cameraTakePictureDataUrl(){if(!this.isCapacitor())return;return await Camera.getPhoto({quality:90,allowEditing:!1,source:CameraSource.Camera,resultType:CameraResultType.DataUrl})}async saveQiniuImageFile(e,t,i,a){let o=this.maxSize;if(e.size>o)throw await console.log("照片过大,超出限制5MB"),"超出文件大小";let s=new DatePipe("en").transform(new Date,"yyyyMMddHHmmss"),r=`${s}.${t}`,n=e.type,l={fname:r,params:{},mimeType:e.type},c={useCdnDomain:!0,forceDirect:!0};console.log(this.qiniuConf);let m=this.genFileKey({id:s,name:r});return console.log("图片上传前"),console.log(m,e,t),new Promise(((t,i)=>{console.log("进入了上传"),qiniu.upload(e,m,this.qiniuConf?.uptoken,l,c).subscribe({next:e=>{console.log(e),a&&a(e)},error:async e=>{console.log(e)},complete:i=>{console.log("上传完成"),console.log(`${this.qiniuConf?.domain}${i.key}`),i.url=`${this.qiniuConf?.domain}${i.key}`,i.name=r,i.type=n,i.size=e.size,t(i)}})}))}async saveQiniuMediaFile(e,t,i,a){let o=e.name,s=e.type;if(e.size>(this.maxSize||104857600))throw console.log("视频过大,超出限制100MB"),"超出文件大小";let r=new DatePipe("en").transform(new Date,"yyyyMMddHHmmss"),n={fname:o,params:{},mimeType:s},l={useCdnDomain:!0,forceDirect:!0},c=this.genFileKey({id:r,name:o});return console.log("图片上传前"),console.log(e.name,t.size),console.log(t.size),console.log(t.size/1024/1024),new Promise(((i,o)=>{console.log("进入了上传"),qiniu.upload(t,c,this.qiniuConf?.uptoken,n,l).subscribe({next:e=>{console.log("主要用来展示进度"),a&&a(e),console.log(JSON.stringify(e))},error:async e=>{console.log("上传失败"),console.log(JSON.stringify(e))},complete:t=>{console.log("上传完成"),console.log(JSON.stringify(t)),e.key=t.key,console.log(e.type),e.url=`${this.qiniuConf?.domain}${t.key}`,console.log(e.url),i(e)}})}))}async base64ToBlobType(e,t){let i=await fetch(`data:${t};base64,${e}`);return await i.blob()}async base64ToBlob(e){let t=await fetch(e);return await t.blob()}fileToBlob(e){const t=e.slice(0,e.size,e.type);return new Blob([t],{type:e.type})}genMd5(e){return CryptoJS.MD5(e).toString()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,deps:[{token:i1.Platform},{token:i2.Diagnostic}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.Platform},{type:i2.Diagnostic}]});
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL25vdmEtdXBsb2FkLnNlcnZpY2UubWpz`
10
10
 
@@ -0,0 +1,10 @@
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-upload/util-file-metadata.mjs
7
+ */
8
+ export async function getFileMetadata(t){const a={name:t.name,size:t.size,type:t.type,lastModified:t.lastModified,metadata:{}};return a.metadata.lastModified=t.lastModified,t.type.startsWith("image/")?await extractImageMetadata(t,a.metadata):(t.type.startsWith("audio/")||t.type.startsWith("video/"))&&await extractMediaMetadata(t,a.metadata),a}async function extractImageMetadata(t,a){try{const e=new Image,i=URL.createObjectURL(t);await new Promise(((t,a)=>{e.onload=()=>t(),e.onerror=a,e.src=i})),a.width=e.naturalWidth,a.height=e.naturalHeight;try{const e=await t.arrayBuffer(),i=await parseExifData(e);i&&Object.assign(a,i)}catch(t){console.warn("无法解析EXIF数据:",t)}URL.revokeObjectURL(i)}catch(t){console.error("提取图片元数据失败:",t)}}async function extractMediaMetadata(t,a){try{const e=t.type.startsWith("audio/")?new Audio:document.createElement("video"),i=URL.createObjectURL(t);await new Promise(((t,a)=>{e.onloadedmetadata=()=>t(),e.onerror=a,e.src=i})),a.duration=e.duration,"videoWidth"in e&&(a.width=e.videoWidth),"videoHeight"in e&&(a.height=e.videoHeight),URL.revokeObjectURL(i)}catch(t){console.error("提取媒体元数据失败:",t)}}async function parseExifData(t){const a=new DataView(t);return 65496!==a.getUint16(0)?null:{colorDepth:24,orientation:a.getUint16(16,!1)||1}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL3V0aWwtZmlsZS1tZXRhZGF0YS5tanM=`
10
+