# Conflicts: # src/app/routes/data-v/navigation/navigation.component.ts # src/app/routes/data-v/routes.ts # src/app/routes/data-v/s1/s1.component.html # src/app/routes/data-v/s1/s1.component.ts # src/app/routes/data-v/workstation/workstation.component.ts # yarn.lockmaster
@@ -62,6 +62,58 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |||
OTHER DEALINGS IN THE SOFTWARE. | |||
-------------------------------------------------------------------------------- | |||
Package: three | |||
License: "MIT" | |||
The MIT License | |||
Copyright © 2010-2016 three.js authors | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
THE SOFTWARE. | |||
-------------------------------------------------------------------------------- | |||
Package: three-orbitcontrols-ts | |||
License: "MIT" | |||
MIT License | |||
Copyright (c) 2017 Nicolas Panel | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in all | |||
copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
SOFTWARE. | |||
-------------------------------------------------------------------------------- | |||
Package: tslib | |||
License: "0BSD" | |||
@@ -338,6 +390,32 @@ The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause: | |||
`/src/util/number.ts` | |||
See `/licenses/LICENSE-d3` for details of the license. | |||
-------------------------------------------------------------------------------- | |||
Package: three | |||
License: "MIT" | |||
The MIT License | |||
Copyright © 2010-2024 three.js authors | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
THE SOFTWARE. | |||
-------------------------------------------------------------------------------- | |||
Package: mqtt-browser | |||
License: "MIT" | |||
@@ -1 +1 @@ | |||
import{D as u,E as n,F as i,G as s,H as a,I as o,J as c,K as m,L as v}from"./chunk-XXGLJ63T.js";var C=class{static num(r){return u(r.value)?null:{num:!0}}static int(r){return n(r.value)?null:{int:!0}}static decimal(r){return i(r.value)?null:{decimal:!0}}static idCard(r){return s(r.value)?null:{idCard:!0}}static mobile(r){return a(r.value)?null:{mobile:!0}}static url(r){return o(r.value)?null:{url:!0}}static ip(r){return c(r.value)?null:{ip:!0}}static color(r){return m(r.value)?null:{color:!0}}static chinese(r){return v(r.value)?null:{chinese:!0}}};function p(e,r){return l=>{let d=l.get(e),t=l.get(r);return t.errors&&!t.errors.matchControl||(d.value!==t.value?t.setErrors({matchControl:!0}):t.setErrors(null)),null}}export{C as a,p as b}; | |||
import{D as u,E as n,F as i,G as s,H as a,I as o,J as c,K as m,L as v}from"./chunk-OOUNO2UZ.js";var C=class{static num(r){return u(r.value)?null:{num:!0}}static int(r){return n(r.value)?null:{int:!0}}static decimal(r){return i(r.value)?null:{decimal:!0}}static idCard(r){return s(r.value)?null:{idCard:!0}}static mobile(r){return a(r.value)?null:{mobile:!0}}static url(r){return o(r.value)?null:{url:!0}}static ip(r){return c(r.value)?null:{ip:!0}}static color(r){return m(r.value)?null:{color:!0}}static chinese(r){return v(r.value)?null:{chinese:!0}}};function p(e,r){return l=>{let d=l.get(e),t=l.get(r);return t.errors&&!t.errors.matchControl||(d.value!==t.value?t.setErrors({matchControl:!0}):t.setErrors(null)),null}}export{C as a,p as b}; |
@@ -1 +1 @@ | |||
import{F as b,H as C,Hc as m,Uc as u,X as p,Zb as v,a as y,fa as l,ha as g,ia as A,ja as c,k as d,m as w,n as S,oc as T,rc as x,xa as I,y as O}from"./chunk-TV7RDLL7.js";var U={store_key:"_token",token_invalid_redirect:!0,token_exp_offset:10,token_send_key:"token",token_send_template:"${token}",token_send_place:"header",login_url:"/login",refreshTime:3e3,refreshOffset:6e3};function E(e){return e.merge("auth",U)}function j(){return new h}var h=class{get(t){return JSON.parse(localStorage.getItem(t)||"{}")||{}}set(t,i){return localStorage.setItem(t,JSON.stringify(i)),!0}remove(t){localStorage.removeItem(t)}},D=new g("AUTH_STORE_TOKEN",{providedIn:"root",factory:j});function L(){return new F(c(u))}var F=(()=>{let t=class t{constructor(n){this.store=c(D),this.refresh$=new w,this.change$=new S(null),this._referrer={},this._options=E(n)}get refresh(){return this.builderRefresh(),this.refresh$.pipe(p())}get login_url(){return this._options.login_url}get referrer(){return this._referrer}get options(){return this._options}set(n){let r=this.store.set(this._options.store_key,n);return this.change$.next(n),r}get(n){let r=this.store.get(this._options.store_key);return n?Object.assign(new n,r):r}clear(n={onlyToken:!1}){let r=null;n.onlyToken===!0?(r=this.get(),r.token="",this.set(r)):this.store.remove(this._options.store_key),this.change$.next(r)}change(){return this.change$.pipe(p())}builderRefresh(){let{refreshTime:n,refreshOffset:r}=this._options;this.cleanRefresh(),this.interval$=b(n).pipe(O(()=>{let o=this.get(),s=o.expired||o.exp||0;if(s<=0)return null;let a=new Date().valueOf()+r;return s<=a?o:null}),C(o=>o!=null)).subscribe(o=>this.refresh$.next(o))}cleanRefresh(){this.interval$&&!this.interval$.closed&&this.interval$.unsubscribe()}ngOnDestroy(){this.cleanRefresh()}};t.\u0275fac=function(r){return new(r||t)(A(u))},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})(),f=new g("DA_SERVICE_TOKEN",{providedIn:"root",factory:L}),_="_delonAuthSocialType",k="_delonAuthSocialCallbackByHref",te=(()=>{let t=class t{constructor(){this.tokenService=c(f),this.doc=c(v),this.router=c(m),this._win=null}login(n,r="/",o={}){if(o=y({type:"window",windowFeatures:"location=yes,height=570,width=520,scrollbars=yes,status=yes"},o),localStorage.setItem(_,o.type),localStorage.setItem(k,r),o.type==="href"){this.doc.location.href=n;return}return this._win=window.open(n,"_blank",o.windowFeatures),this._winTime=setInterval(()=>{if(this._win&&this._win.closed){this.ngOnDestroy();let s=this.tokenService.get();s&&!s.token&&(s=null),s&&this.tokenService.set(s),this.observer.next(s),this.observer.complete()}},100),new d(s=>{this.observer=s})}callback(n){if(!n&&this.router.url.indexOf("?")===-1)throw new Error("url muse contain a ?");let r={token:""};if(typeof n=="string"){let a=n.split("?")[1].split("#")[0];r=this.router.parseUrl(`./?${a}`).queryParams}else r=n;if(!r||!r.token)throw new Error("invalide token data");this.tokenService.set(r);let o=localStorage.getItem(k)||"/";localStorage.removeItem(k);let s=localStorage.getItem(_);return localStorage.removeItem(_),s==="window"?window.close():this.router.navigateByUrl(o),r}ngOnDestroy(){clearInterval(this._winTime),this._winTime=null}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})();function N(e){return e!=null&&typeof e.token=="string"&&e.token.length>0}function R(e,t){let i=c(m),n=c(f),r=c(v);n.referrer.url=t||i.url,e.token_invalid_redirect===!0&&setTimeout(()=>{/^https?:\/\//g.test(e.login_url)?r.location.href=e.login_url:i.navigate([e.login_url])})}var J=new T(()=>!1);function H(e,t){if(e.context.get(J))return!0;if(Array.isArray(t.ignores)){for(let i of t.ignores)if(i.test(e.url))return!0}return!1}function P(e,t){return R(t),new d(i=>{let n="",r=new x({url:e.url,headers:e.headers,status:401,statusText:n});i.error(r)})}var $=(()=>{let t=class t{constructor(){this.srv=c(f)}process(n){let r=N(this.srv.get());return r||R(this.srv.options,n),r}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac,providedIn:"root"});let e=t;return e})(),re=(e,t)=>c($).process(t.url),ne=(e,t)=>c($).process(t.url);function B(e,t,i){let{token_send_template:n,token_send_key:r}=i,o=n.replace(/\$\{([\w]+)\}/g,(s,a)=>t[a]);switch(i.token_send_place){case"header":let s={};s[r]=o,e=e.clone({setHeaders:s});break;case"body":let a=e.body||{};a[r]=o,e=e.clone({body:a});break;case"url":e=e.clone({params:e.params.append(r,o)});break}return e}var oe=(e,t)=>{let i=E(c(u));if(H(e,i))return t(e);let n=c(f).get();return N(n)?t(B(e,n,i)):P(e,i)};var M=function(e){return e[e.Store=0]="Store",e}(M||{});function K(e,t){return{\u0275kind:e,\u0275providers:t}}function se(e){return I([(e??W()).\u0275providers])}function W(){return K(M.Store,[{provide:D,useClass:h}])}export{f as a,te as b,J as c,re as d,ne as e,oe as f,se as g}; | |||
import{$b as v,A as O,H as b,J as C,Jc as m,Wc as u,Z as p,a as y,ha as l,ja as g,ka as A,la as c,m as d,o as w,p as S,qc as T,tc as x,za as I}from"./chunk-VDRVUQCF.js";var U={store_key:"_token",token_invalid_redirect:!0,token_exp_offset:10,token_send_key:"token",token_send_template:"${token}",token_send_place:"header",login_url:"/login",refreshTime:3e3,refreshOffset:6e3};function E(e){return e.merge("auth",U)}function j(){return new h}var h=class{get(t){return JSON.parse(localStorage.getItem(t)||"{}")||{}}set(t,i){return localStorage.setItem(t,JSON.stringify(i)),!0}remove(t){localStorage.removeItem(t)}},D=new g("AUTH_STORE_TOKEN",{providedIn:"root",factory:j});function L(){return new F(c(u))}var F=(()=>{let t=class t{constructor(n){this.store=c(D),this.refresh$=new w,this.change$=new S(null),this._referrer={},this._options=E(n)}get refresh(){return this.builderRefresh(),this.refresh$.pipe(p())}get login_url(){return this._options.login_url}get referrer(){return this._referrer}get options(){return this._options}set(n){let r=this.store.set(this._options.store_key,n);return this.change$.next(n),r}get(n){let r=this.store.get(this._options.store_key);return n?Object.assign(new n,r):r}clear(n={onlyToken:!1}){let r=null;n.onlyToken===!0?(r=this.get(),r.token="",this.set(r)):this.store.remove(this._options.store_key),this.change$.next(r)}change(){return this.change$.pipe(p())}builderRefresh(){let{refreshTime:n,refreshOffset:r}=this._options;this.cleanRefresh(),this.interval$=b(n).pipe(O(()=>{let o=this.get(),s=o.expired||o.exp||0;if(s<=0)return null;let a=new Date().valueOf()+r;return s<=a?o:null}),C(o=>o!=null)).subscribe(o=>this.refresh$.next(o))}cleanRefresh(){this.interval$&&!this.interval$.closed&&this.interval$.unsubscribe()}ngOnDestroy(){this.cleanRefresh()}};t.\u0275fac=function(r){return new(r||t)(A(u))},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})(),f=new g("DA_SERVICE_TOKEN",{providedIn:"root",factory:L}),_="_delonAuthSocialType",k="_delonAuthSocialCallbackByHref",te=(()=>{let t=class t{constructor(){this.tokenService=c(f),this.doc=c(v),this.router=c(m),this._win=null}login(n,r="/",o={}){if(o=y({type:"window",windowFeatures:"location=yes,height=570,width=520,scrollbars=yes,status=yes"},o),localStorage.setItem(_,o.type),localStorage.setItem(k,r),o.type==="href"){this.doc.location.href=n;return}return this._win=window.open(n,"_blank",o.windowFeatures),this._winTime=setInterval(()=>{if(this._win&&this._win.closed){this.ngOnDestroy();let s=this.tokenService.get();s&&!s.token&&(s=null),s&&this.tokenService.set(s),this.observer.next(s),this.observer.complete()}},100),new d(s=>{this.observer=s})}callback(n){if(!n&&this.router.url.indexOf("?")===-1)throw new Error("url muse contain a ?");let r={token:""};if(typeof n=="string"){let a=n.split("?")[1].split("#")[0];r=this.router.parseUrl(`./?${a}`).queryParams}else r=n;if(!r||!r.token)throw new Error("invalide token data");this.tokenService.set(r);let o=localStorage.getItem(k)||"/";localStorage.removeItem(k);let s=localStorage.getItem(_);return localStorage.removeItem(_),s==="window"?window.close():this.router.navigateByUrl(o),r}ngOnDestroy(){clearInterval(this._winTime),this._winTime=null}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})();function N(e){return e!=null&&typeof e.token=="string"&&e.token.length>0}function R(e,t){let i=c(m),n=c(f),r=c(v);n.referrer.url=t||i.url,e.token_invalid_redirect===!0&&setTimeout(()=>{/^https?:\/\//g.test(e.login_url)?r.location.href=e.login_url:i.navigate([e.login_url])})}var J=new T(()=>!1);function H(e,t){if(e.context.get(J))return!0;if(Array.isArray(t.ignores)){for(let i of t.ignores)if(i.test(e.url))return!0}return!1}function P(e,t){return R(t),new d(i=>{let n="",r=new x({url:e.url,headers:e.headers,status:401,statusText:n});i.error(r)})}var $=(()=>{let t=class t{constructor(){this.srv=c(f)}process(n){let r=N(this.srv.get());return r||R(this.srv.options,n),r}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac,providedIn:"root"});let e=t;return e})(),re=(e,t)=>c($).process(t.url),ne=(e,t)=>c($).process(t.url);function B(e,t,i){let{token_send_template:n,token_send_key:r}=i,o=n.replace(/\$\{([\w]+)\}/g,(s,a)=>t[a]);switch(i.token_send_place){case"header":let s={};s[r]=o,e=e.clone({setHeaders:s});break;case"body":let a=e.body||{};a[r]=o,e=e.clone({body:a});break;case"url":e=e.clone({params:e.params.append(r,o)});break}return e}var oe=(e,t)=>{let i=E(c(u));if(H(e,i))return t(e);let n=c(f).get();return N(n)?t(B(e,n,i)):P(e,i)};var M=function(e){return e[e.Store=0]="Store",e}(M||{});function K(e,t){return{\u0275kind:e,\u0275providers:t}}function se(e){return I([(e??W()).\u0275providers])}function W(){return K(M.Store,[{provide:D,useClass:h}])}export{f as a,te as b,J as c,re as d,ne as e,oe as f,se as g}; |
@@ -103,7 +103,7 @@ | |||
} | |||
</style> | |||
<style>html,body{width:100%;height:100%}*,*:before,*:after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}body{margin:0;color:#ffffffd9;font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-variant:tabular-nums;line-height:1.5715;background-color:#000;font-feature-settings:"tnum"}label{touch-action:manipulation}html{--antd-wave-shadow-color: #13C2C2;--scroll-bar: 0}body{scrollbar-color:rgba(0,0,0,.3) #6e6e6e;scrollbar-width:thin}body::-webkit-scrollbar{width:6px;height:6px}body::-webkit-scrollbar-track{box-shadow:inset 0 0 6px #0000004d}body::-webkit-scrollbar-thumb{background-color:#6e6e6e;outline:1px solid #333}html{touch-action:manipulation;direction:ltr;height:100%}html,body,app-root{height:100%}body{color:#ffffffd9;background-color:#000} | |||
</style><link rel="stylesheet" href="styles-JTMVGPO6.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-JTMVGPO6.css"></noscript><link rel="modulepreload" href="chunk-4YNSMQCN.js"><link rel="modulepreload" href="chunk-T3OMXG5T.js"><link rel="modulepreload" href="chunk-XXGLJ63T.js"><link rel="modulepreload" href="chunk-ZRW2SW2G.js"><link rel="modulepreload" href="chunk-TV7RDLL7.js"></head> | |||
</style><link rel="stylesheet" href="styles-JTMVGPO6.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-JTMVGPO6.css"></noscript><link rel="modulepreload" href="chunk-2D265ORJ.js"><link rel="modulepreload" href="chunk-HCPW2OGS.js"><link rel="modulepreload" href="chunk-OOUNO2UZ.js"><link rel="modulepreload" href="chunk-4FFPI7ZP.js"><link rel="modulepreload" href="chunk-VDRVUQCF.js"></head> | |||
<body> | |||
<app-root></app-root> | |||
@@ -113,6 +113,6 @@ | |||
●</label><label> ●</label></div> | |||
</div> | |||
</div> | |||
<script src="polyfills-RX4V3J3S.js" type="module"></script><script src="scripts-XEF6VACQ.js" defer></script><script src="main-XJNA5CYE.js" type="module"></script></body> | |||
<script src="polyfills-RX4V3J3S.js" type="module"></script><script src="scripts-XEF6VACQ.js" defer></script><script src="main-3JB53C7N.js" type="module"></script></body> | |||
</html> |
@@ -42,6 +42,7 @@ | |||
"@microsoft/signalr": "^8.0.0", | |||
"@microsoft/signalr-protocol-msgpack": "^8.0.0", | |||
"@types/signalr": "^2.4.3", | |||
"@types/three": "^0.162.0", | |||
"ag-grid-angular": "^31.0.2", | |||
"echarts": "^5.5.0", | |||
"moment": "^2.30.1", | |||
@@ -51,6 +52,8 @@ | |||
"ngx-mqtt": "^17.0.0", | |||
"rxjs": "~7.8.0", | |||
"screenfull": "^6.0.2", | |||
"three": "^0.162.0", | |||
"three-orbitcontrols-ts": "^0.1.2", | |||
"tslib": "^2.3.0", | |||
"zone.js": "~0.14.3" | |||
}, | |||
@@ -7,6 +7,7 @@ import { DataVSecond1Component } from './second1/second1.component'; | |||
import { DataVThreejsComponent } from './threejs/threejs.component'; | |||
import { DataVUserComponent } from './user/user.component'; | |||
import { DataVWorkstationComponent } from './workstation/workstation.component'; | |||
import { DataVT1Component } from './t1/t1.component'; | |||
export const routes: Routes = [ | |||
{ | |||
@@ -19,5 +20,6 @@ export const routes: Routes = [ | |||
component: DataVSecond1Component, | |||
data: { menu: null } | |||
}, | |||
{ path: 'threejs/:id', component: DataVThreejsComponent } | |||
{ path: 'threejs/:id', component: DataVThreejsComponent }, | |||
{ path: 't1/:id', component: DataVT1Component } | |||
]; |
@@ -46,46 +46,57 @@ | |||
<div style="height: 34.6rem"> | |||
<img src="assets/dashboard/dashboard_ws_demo1.png" style="width: 100%" /> | |||
<div nz-row style="justify-content: center; align-items: center; margin-top: 0.5rem"> | |||
<div nz-col nzSpan="12" class="sys-status-title"> 机器人 </div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> 全硫仪 </div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> 全水分析仪 </div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> 挥发分仪 </div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> 量热仪 </div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> 谈情氮元素 </div> | |||
<div nz-row style="justify-content: center;align-items: center;margin-top: 0.5rem;"> | |||
<div nz-col nzSpan="12" class="sys-status-title"> | |||
机器人 | |||
</div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> | |||
全硫仪 | |||
</div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> | |||
全水分析仪 | |||
</div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> | |||
挥发分仪 | |||
</div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> | |||
量热仪 | |||
</div> | |||
<div nz-col nzSpan="12" class="sys-status-title"> | |||
碳氢氮元素 | |||
</div> | |||
</div> | |||
</div> | |||
</data-v-card> | |||
</div> | |||
<div nz-col nzSpan="8"> | |||
<data-v-card | |||
title="化验结果" | |||
[showSetting]="true" | |||
[optionsList]="chartConfig.optionsCheckList" | |||
(onCheckedItemsChange)="handleCheckedItems($event)" | |||
> | |||
<data-v-card title="化验结果" [showSetting]="true" [optionsList]="chartConfig.optionsCheckList" | |||
(onCheckedItemsChange)="handleCheckedItems($event)"> | |||
<div nz-row class="scrollable-container"> | |||
@for (item of chartConfig.optionsCheckList; track item) { | |||
@for(item of chartConfig.optionsCheckList; track item) { | |||
<div nz-col [nzSpan]="24 / chartConfig.rowNumber" *ngIf="item.checked" class="centered-element"> | |||
<!-- 添加上下外边距 --> | |||
<app-chart-component | |||
[options]="item.options" | |||
<app-chart-component [options]="item.options" | |||
[style]="{ margin: '20px ' + 20 / chartConfig.rowNumber + 'px', width: '100%', height: '16rem' }" | |||
*ngIf="item.checked" | |||
/> | |||
*ngIf="item.checked" /> | |||
</div> | |||
} | |||
} | |||
</div> | |||
<div nz-row> | |||
@for (item of chartConfig.optionBottomList; track item) { | |||
@for(item of chartConfig.optionBottomList; track item) { | |||
<div nz-col nzSpan="12"> | |||
<div class="centered-element" style="margin: 2px"> | |||
<app-chart-component [options]="item" style="width: 26rem; height: 11rem; margin-left: 0.4rem" /> | |||
</div> | |||
</div> | |||
} | |||
} | |||
</div> | |||
</data-v-card> | |||
</div> | |||
</div> | |||
<!-- <data-v-card> | |||
<div class="sys-status-title">煤样超差率:超差样量/总样量 03/16</div> | |||
<div class="sys-status-title">煤样合格率:合格样量/总样量 15/16</div> | |||
</data-v-card> --> |
@@ -15,6 +15,8 @@ import { Subscription, finalize } from 'rxjs'; | |||
import { IMqttMessage, MqttService } from 'ngx-mqtt'; | |||
import { ChartComponentComponent } from './chart-component/chart-component.component'; | |||
import { NzListModule } from 'ng-zorro-antd/list'; | |||
import { TitleService } from '@delon/theme'; | |||
@Component({ | |||
selector: 'app-data-v-s1', | |||
standalone: true, | |||
@@ -0,0 +1,6 @@ | |||
<!-- <div #Three style="background-color: red;"></div> --> | |||
<div style="display: flex; flex-direction: column; height: 100vh;"> | |||
<div #Three style="flex-grow: 1;"></div> | |||
</div> |
@@ -0,0 +1,121 @@ | |||
import { Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core'; | |||
import { STColumn, STComponent } from '@delon/abc/st'; | |||
import { SFSchema } from '@delon/form'; | |||
import { ModalHelper, _HttpClient } from '@delon/theme'; | |||
import { SHARED_IMPORTS } from '@shared'; | |||
import * as THREE from 'three'; | |||
import { OrbitControls } from 'three-orbitcontrols-ts'; | |||
import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; | |||
import { TitleService } from '@delon/theme'; | |||
const clock = new THREE.Clock(); | |||
let mixer: { update: (arg0: number) => void }; | |||
@Component({ | |||
selector: 'app-data-v-t1', | |||
standalone: true, | |||
imports: [...SHARED_IMPORTS], | |||
templateUrl: './t1.component.html' | |||
}) | |||
export class DataVT1Component implements OnInit { | |||
private readonly http = inject(_HttpClient); | |||
private readonly modal = inject(ModalHelper); | |||
private readonly titleService = inject(TitleService); | |||
@ViewChild('Three', { static: true }) container!: ElementRef; | |||
public scene!: THREE.Scene; | |||
public camera!: THREE.PerspectiveCamera; | |||
public renderer!: THREE.WebGLRenderer; | |||
public cube!: THREE.Mesh; | |||
ngOnInit(): void { | |||
this.titleService.setTitle('重磅3D'); | |||
this.initThreeJs(); | |||
this.animate(); | |||
} | |||
private initThreeJs(): void { | |||
// 创建相机 | |||
this.camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 1, 20000); | |||
this.camera.position.set(2200, 300, -3100); | |||
//创建场景 | |||
this.scene = new THREE.Scene(); | |||
this.scene.background = new THREE.Color(0x040516); | |||
const hemiLight = new THREE.HemisphereLight(0xffffff, 0x444444, 5); | |||
hemiLight.position.set(0, 200, 0); | |||
this.scene.add(hemiLight); | |||
const dirLight = new THREE.DirectionalLight(0xffffff, 5); | |||
dirLight.position.set(0, 200, 100); | |||
dirLight.castShadow = true; | |||
dirLight.shadow.camera.top = 180; | |||
dirLight.shadow.camera.bottom = -100; | |||
dirLight.shadow.camera.left = -120; | |||
dirLight.shadow.camera.right = 120; | |||
this.scene.add(dirLight); | |||
const that = this; | |||
const loader = new FBXLoader(); | |||
loader.load( | |||
'assets/fbx/bb.fbx', | |||
function (object) { | |||
object.traverse(function (child) { | |||
// if (child.isMesh) { | |||
// child.castShadow = true; | |||
// child.receiveShadow = true; | |||
// } | |||
}); | |||
that.scene.add(object); | |||
}, | |||
xhr => { | |||
// loading progress | |||
}, | |||
err => { | |||
console.error('An error happened', err); | |||
} | |||
); | |||
this.renderer = new THREE.WebGLRenderer({ antialias: true }); | |||
this.renderer.setPixelRatio(window.devicePixelRatio); | |||
this.renderer.setSize(window.innerWidth, window.innerHeight); | |||
this.renderer.shadowMap.enabled = true; | |||
this.container.nativeElement.appendChild(this.renderer.domElement); | |||
const radius = 5; // 圆的半径 | |||
const segments = 32; // 圆的分段数 | |||
const geometry = new THREE.CircleGeometry(radius, segments); | |||
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 }); // 红色材质,你可以根据需要调整颜色 | |||
const circle = new THREE.Mesh(geometry, material); | |||
circle.position.set(850, 100, -2000); // 设置圆的位置 | |||
this.scene.add(circle); | |||
const controls = new OrbitControls(this.camera, this.renderer.domElement); | |||
controls.target.set(850, 100, -2000); | |||
controls.update(); | |||
//const axesHelper = new THREE.AxesHelper(1000); | |||
//this.scene.add(axesHelper); | |||
window.addEventListener('resize', this.onWindowResize); | |||
} | |||
public render(): void { | |||
this.cube.rotation.x += 0.01; | |||
this.cube.rotation.y += 0.01; | |||
this.renderer.render(this.scene, this.camera); | |||
} | |||
onWindowResize() { | |||
this.camera.aspect = window.innerWidth / window.innerHeight; | |||
this.camera.updateProjectionMatrix(); | |||
this.renderer.setSize(window.innerWidth, window.innerHeight); | |||
} | |||
animate = () => { | |||
requestAnimationFrame(this.animate); | |||
const delta = clock.getDelta(); | |||
if (mixer) mixer.update(delta); | |||
this.renderer.render(this.scene, this.camera); | |||
}; | |||
} |
@@ -1,5 +1,5 @@ | |||
import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core'; | |||
import { ModalHelper, _HttpClient } from '@delon/theme'; | |||
import { ModalHelper, TitleService, _HttpClient } from '@delon/theme'; | |||
import { SHARED_IMPORTS } from '@shared'; | |||
import { AgGridAngular } from 'ag-grid-angular'; | |||
import { ColDef, GridApi } from 'ag-grid-community'; | |||
@@ -32,6 +32,7 @@ export class DataVWorkstationComponent implements OnInit, AfterViewInit { | |||
private readonly http = inject(_HttpClient); | |||
private readonly modal = inject(ModalHelper); | |||
private readonly elementRef = inject(ElementRef); | |||
private readonly titleService = inject(TitleService); | |||
@ViewChild('myGrid') grid!: AgGridAngular; | |||
public defaultColDef: ColDef = { | |||
@@ -129,7 +130,7 @@ export class DataVWorkstationComponent implements OnInit, AfterViewInit { | |||
} | |||
ngOnInit(): void { | |||
console.log(`ngOnInit${this.rowData.length}`); | |||
this.titleService.setTitle('我的工作站'); | |||
for (var i = 1; i < 30; i++) { | |||
this.rowData.push({ | |||
@@ -29,8 +29,6 @@ | |||
</div> | |||
</div> | |||
<ng-template #coverTemplate> | |||
<img style="height: 100px;" alt="example" src="assets/bg2.jpg" /> | |||
</ng-template> | |||
@@ -91,15 +91,20 @@ | |||
color: #515151; | |||
vertical-align: middle; | |||
} | |||
} | |||
.color-515151 { | |||
color: #515151; | |||
} | |||
.color-515151 { | |||
color: #515151; | |||
} | |||
} | |||
[data-theme='dark'] { | |||
:host ::ng-deep { | |||
display: block; | |||
width: 538px; | |||
margin: 0 auto; | |||
.icon { | |||
color: rgb(255 255 255 / 20%); | |||
@@ -36,7 +36,9 @@ | |||
], | |||
"@_mock": [ | |||
"_mock/index" | |||
] | |||
], | |||
"three": ["./node_modules/three/src/Three"], | |||
"three/*": ["./node_modules/three/*"] | |||
} | |||
}, | |||
"angularCompilerOptions": { | |||
@@ -2277,6 +2277,11 @@ | |||
"@tufjs/canonical-json" "2.0.0" | |||
minimatch "^9.0.3" | |||
"@tweenjs/tween.js@~23.1.1": | |||
version "23.1.1" | |||
resolved "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-23.1.1.tgz#0ae28ed9c635805557f78c2626464018d5f1b5e2" | |||
integrity sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw== | |||
"@types/body-parser@*": | |||
version "1.19.5" | |||
resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz" | |||
@@ -2509,6 +2514,11 @@ | |||
dependencies: | |||
"@types/node" "*" | |||
"@types/stats.js@*": | |||
version "0.17.3" | |||
resolved "https://registry.npmmirror.com/@types/stats.js/-/stats.js-0.17.3.tgz#705446e12ce0fad618557dd88236f51148b7a935" | |||
integrity sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ== | |||
"@types/swagger-schema-official@2.0.22": | |||
version "2.0.22" | |||
resolved "https://registry.npmmirror.com/@types/swagger-schema-official/-/swagger-schema-official-2.0.22.tgz" | |||
@@ -2519,6 +2529,22 @@ | |||
resolved "https://registry.npmmirror.com/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz" | |||
integrity sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg== | |||
"@types/three@^0.162.0": | |||
version "0.162.0" | |||
resolved "https://registry.npmmirror.com/@types/three/-/three-0.162.0.tgz#79d170c88f14b2eaee6b76af00fc4016a533e586" | |||
integrity sha512-0j5yZcVukVIhrhSIC7+LmBPkkMoMuEJ1AfYBZfgNytdYqYREMuiyXWhYOMeZLBElTEAlJIZn7r2W3vqTIgjWlg== | |||
dependencies: | |||
"@tweenjs/tween.js" "~23.1.1" | |||
"@types/stats.js" "*" | |||
"@types/webxr" "*" | |||
fflate "~0.6.10" | |||
meshoptimizer "~0.18.1" | |||
"@types/webxr@*": | |||
version "0.5.14" | |||
resolved "https://registry.npmmirror.com/@types/webxr/-/webxr-0.5.14.tgz#9a03121a4912ea113b31e5c9c17f164d4fff8a1f" | |||
integrity sha512-UEMMm/Xn3DtEa+gpzUrOcDj+SJS1tk5YodjwOxcqStNhCfPcwgyC5Srg2ToVKyg2Fhq16Ffpb0UWUQHqoT9AMA== | |||
"@types/ws@^8.5.5", "@types/ws@^8.5.9": | |||
version "8.5.10" | |||
resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.10.tgz" | |||
@@ -4948,6 +4974,11 @@ fetch-cookie@^2.0.3: | |||
set-cookie-parser "^2.4.8" | |||
tough-cookie "^4.0.0" | |||
fflate@~0.6.10: | |||
version "0.6.10" | |||
resolved "https://registry.npmmirror.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" | |||
integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== | |||
figures@3.2.0: | |||
version "3.2.0" | |||
resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz" | |||
@@ -6769,6 +6800,11 @@ merge2@^1.3.0, merge2@^1.4.1: | |||
resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" | |||
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== | |||
meshoptimizer@~0.18.1: | |||
version "0.18.1" | |||
resolved "https://registry.npmmirror.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz#cdb90907f30a7b5b1190facd3b7ee6b7087797d8" | |||
integrity sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw== | |||
methods@~1.1.2: | |||
version "1.1.2" | |||
resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz" | |||
@@ -9494,6 +9530,23 @@ text-table@0.2.0, text-table@^0.2.0: | |||
resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz" | |||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== | |||
three-orbitcontrols-ts@^0.1.2: | |||
version "0.1.2" | |||
resolved "https://registry.npmmirror.com/three-orbitcontrols-ts/-/three-orbitcontrols-ts-0.1.2.tgz#2040955904022ae19c2e9c52ffdff43168658abd" | |||
integrity sha512-HG45dhJX4010lt/Ohk2d2K0kBaxCS6NLO3+wG9BDfMM5ddH7zMPuF3fhcn8vI4eqcSITtid0OoHEttHhjkIKEQ== | |||
dependencies: | |||
three "^0.83.0" | |||
three@^0.162.0: | |||
version "0.162.0" | |||
resolved "https://registry.npmmirror.com/three/-/three-0.162.0.tgz" | |||
integrity sha512-xfCYj4RnlozReCmUd+XQzj6/5OjDNHBy5nT6rVwrOKGENAvpXe2z1jL+DZYaMu4/9pNsjH/4Os/VvS9IrH7IOQ== | |||
three@^0.83.0: | |||
version "0.83.0" | |||
resolved "https://registry.npmmirror.com/three/-/three-0.83.0.tgz#3b7f94790af3e021dac1f44a2617569ca2032b0b" | |||
integrity sha512-x9TqsmvhHG/Lw16Zi9zbJ0ho+kP8SgIfsz8dJYZbeWaFWoVwdXKolQQAftkUlpuKDys1+6SZIBHoA2QdoZKByQ== | |||
through@^2.3.4: | |||
version "2.3.8" | |||
resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz" | |||