Compare commits
4 Commits
d5c01162f6
...
Chinese
| Author | SHA1 | Date | |
|---|---|---|---|
| 57253e2e55 | |||
| e6026f8646 | |||
| 3df5592082 | |||
| 37047b7e70 |
@ -1,10 +1,10 @@
|
|||||||
# just a flag
|
# just a flag
|
||||||
ENV = 'development'
|
ENV = 'development'
|
||||||
|
|
||||||
# base api //http://192.168.1.181:8000/api 192.168.1.199:8000/api // http://124.71.192.230:8000/api // http://127.0.0.1:4523/m1/1450402-0-default
|
# base api //http://1.95.170.86:8002/api 192.168.1.199:8000/api // https://zzkj-cloud.com/api // http://127.0.0.1:4523/m1/1450402-0-default
|
||||||
|
|
||||||
|
|
||||||
VUE_APP_BASE_API = 'https://zetatech.zzkj-cloud.com/api'
|
VUE_APP_BASE_API = 'https://zzkj-cloud.com/api'
|
||||||
VUE_APP_VISUALE_API = http://192.168.0.82:9527
|
VUE_APP_VISUALE_API = http://192.168.0.82:9527
|
||||||
VUE_APP_ZUTAI_API = http://192.168.100.83:8001
|
VUE_APP_ZUTAI_API = http://192.168.100.83:8001
|
||||||
|
|
||||||
|
|||||||
@ -2,5 +2,5 @@
|
|||||||
ENV = 'production'
|
ENV = 'production'
|
||||||
|
|
||||||
# base api
|
# base api
|
||||||
VUE_APP_BASE_API = 'https://zetatech.zzkj-cloud.com/api'
|
VUE_APP_BASE_API = 'https://zzkj-cloud.com/api'
|
||||||
|
|
||||||
|
|||||||
@ -125,4 +125,4 @@ Modern browsers and Internet Explorer 10+.
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright (c) 2022-present Hoenergy
|
Copyright (c) 2025-present Sinocat
|
||||||
|
|||||||
@ -1,161 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Privacy Policy</title>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
font-family: Arial, sans-serif;
|
|
||||||
line-height: 1.6;
|
|
||||||
margin: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
color: blue;
|
|
||||||
text-align: center; /* 标题居中 */
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
color: blue;
|
|
||||||
border-bottom: 1px solid #ccc;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
list-style-type: disc;
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol {
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.section {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<h1>Privacy Policy</h1>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>Introduction</h2>
|
|
||||||
<p>ZETATECH HONG KONG INVESTMENT LIMITED (hereinafter referred to as "we") highly values the protection of personal information and strictly complies with applicable data protection laws and regulations. We sincerely appreciate your trust in this application.</p>
|
|
||||||
<p>As a service provider dedicated to [application business areas such as energy storage project display], we fully understand the importance of protecting user privacy globally. This Privacy Policy aims to clearly explain how we collect, use, store, share, and protect your personal information, ensuring our practices meet international data protection standards and comply with legal requirements in each region where we operate, including but not limited to the EU General Data Protection Regulation (GDPR), California Consumer Privacy Act (CCPA), the Cybersecurity Law of the People's Republic of China, the Personal Information Protection Law of the People's Republic of China, and the Data Security Law of the People's Republic of China.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>1. Scope and Methods of Information Collection</h2>
|
|
||||||
<p>When you use this application (including accessing features within the app, registering an account, using services, etc.), we may directly collect the following personal information:</p>
|
|
||||||
|
|
||||||
<h3>(1) Basic Business Required Information</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Basic identification information: phone number/email address (for verification), username, password, IP address (security risk control);</li>
|
|
||||||
<li>Device and network information: IP address, device model, operating system version, device identifier (such as IMEI/Android ID/OpenUDID, OAID, device model, etc.), network type (Wi-Fi/mobile network), browser type, etc. (to ensure service stability, security risk control, and functional adaptation);</li>
|
|
||||||
<li>Log information: access records, operation logs, error logs (to optimize service);</li>
|
|
||||||
<li>Location services: real-time location information (requires enabling location permissions for querying nearby energy storage sites);</li>
|
|
||||||
<li>Permission descriptions: reading device status (to ensure login security and obtain OAID information), network access (data transmission).</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>(2) Optional Feature Additional Information</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Location services: real-time location information (requires enabling location permissions for querying nearby energy storage sites)</li>
|
|
||||||
<li>Storage permissions: read/write external storage (caching map data to reduce data consumption)</li>
|
|
||||||
<li>All additional functions require separate authorization; refusal does not affect basic services.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>2. Purpose of Information Usage</h2>
|
|
||||||
<p>The collected personal information will be used for the following reasonable and necessary purposes:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Providing basic services: implementing account registration/login, energy storage project display and interaction, business process handling (e.g., order/service applications), customer service responses, and other core functionalities;</li>
|
|
||||||
<li>Ensuring security and compliance: performing security risk control through device/network information (identifying abnormal logins, preventing malicious attacks), complying with legal requirements (such as retaining data for regulatory inspection);</li>
|
|
||||||
<li>Business operations and improvements: internal data analysis (e.g., analyzing user needs, evaluating service effectiveness) to drive product iteration and service upgrades;</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>3. Cross-border Data Transfer</h2>
|
|
||||||
<p>Normally, your personal information will be stored in [the regions where the application servers are located, e.g., domestic Huawei Cloud server (Amazon Web Services server in Paris, France)].</p>
|
|
||||||
<p>To ensure data security, we take the following measures:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Compliance assessment and authorization: conducting legality assessments on cross-border data transfers to ensure compliance with domestic and target region data protection regulations;</li>
|
|
||||||
<li>Technical protection: adopting encryption during transmission, access controls, and other technical measures to reduce the risk of data leakage;</li>
|
|
||||||
<li>Contractual constraints: signing strict data protection agreements with overseas recipients, clarifying both parties' responsibilities and obligations, requiring them to safeguard data security.</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>4. Sharing and Disclosure of Information</h2>
|
|
||||||
<p>We commit to strictly keeping your personal information confidential and will not share or disclose it to any unrelated third parties except under the following circumstances:</p>
|
|
||||||
|
|
||||||
<h3>(1) Necessary Business Collaboration</h3>
|
|
||||||
<p>We delegate third-party providers such as Alibaba Cloud, Huawei Cloud, and Amazon Web Services to provide technical support, authorizing them to process information only within necessary limits and having signed strict confidentiality agreements.</p>
|
|
||||||
<p>We share necessary information with carefully selected third-party service providers (e.g., cloud service providers, data analytics companies) to support application functionality implementation (e.g., server hosting, data statistics and analysis). We will only share the minimum scope of information required to complete the collaboration and require partners to sign confidentiality agreements to constrain their data processing activities.</p>
|
|
||||||
|
|
||||||
<h3>(2) Legal Requirements</h3>
|
|
||||||
<p>In cases of mandatory legal requirements (e.g., court subpoenas, administrative investigations) or fulfilling statutory obligations (e.g., cooperating with regulatory compliance checks), we may legally disclose necessary personal information.</p>
|
|
||||||
|
|
||||||
<h3>(3) Corporate Restructuring/Mergers & Acquisitions</h3>
|
|
||||||
<p>If there is a significant change such as corporate merger, division, or asset transfer, we will follow the principles of "legality, necessity, minimization" when transferring personal information and notify you in advance through prominent means (e.g., in-app announcements, emails).</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>5. Information Security and Protection</h2>
|
|
||||||
<p>We are committed to protecting your personal information through both technical and management measures:</p>
|
|
||||||
|
|
||||||
<h3>(1) Technical Protection</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Implementing data encryption (e.g., transmission encryption, storage encryption), access control (e.g., account password verification, tiered permission management), security audits (regularly checking system logs), etc., to prevent data leakage, tampering, and unauthorized access;</li>
|
|
||||||
<li>Real-time monitoring of important systems and services to promptly detect and address security vulnerabilities and abnormal access behaviors.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>(2) Management Safeguards</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Establishing strict data security management systems, clearly defining employee data access rights and operational guidelines;</li>
|
|
||||||
<li>Regularly conducting employee data security training to enhance overall privacy protection awareness;</li>
|
|
||||||
<li>Conducting compliance audits on data processing procedures to ensure adherence to policy requirements.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>6. Your Rights Regarding Personal Information and How to Exercise Them</h2>
|
|
||||||
<p>Based on applicable laws and regulations, you have the following rights regarding your personal information:</p>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Query and Correction:</strong> Within the app path → My → Settings → Personal Information Management</li>
|
|
||||||
<li><strong>Delete Request:</strong> Supports account cancellation and scenarios of non-compliant information processing</li>
|
|
||||||
<li><strong>Permission Management:</strong> Phone settings → App Management → “STORA SMART” → disable corresponding permissions</li>
|
|
||||||
<li><strong>Account Deactivation:</strong> Within the app path → My → Settings → Account Security → Deactivate Account</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>7. Changes and Notifications to This Privacy Policy</h2>
|
|
||||||
<p>We will periodically update this Privacy Policy to reflect business adjustments and regulatory changes. After updates, we will notify you via the following methods:</p>
|
|
||||||
<ul>
|
|
||||||
<li>In-app pop-ups, push notifications;</li>
|
|
||||||
<li>Email;</li>
|
|
||||||
<li>Prominent prompts on the “Settings - Privacy Policy” page within the app.</li>
|
|
||||||
</ul>
|
|
||||||
<p>Please review this policy regularly. Continuing to use the application constitutes acceptance of the updated terms.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h2>8. Protection of Minors and Contact Information</h2>
|
|
||||||
<p>We do not actively collect personal information from minors under the age of 14. If the guardian discovers that personal information of minors under the age of 14 has been collected, or if you have any questions, suggestions, or need to exercise your personal information rights regarding this privacy policy, you can contact us through the following methods:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Customer Service Email: <a href="mailto:info@zetatech-energy.com">info@zetatech-energy.com</a> (We will respond within 48 hours);</li>
|
|
||||||
<li>Mailing Address: No. 88 Gunan Street, Pidu District, Chengdu City, Sichuan Province (Postal Code: 611730).</li>
|
|
||||||
</ul>
|
|
||||||
<p>This policy is interpreted by ZETATECH HONG KONG INVESTMENT LIMITED. In case of conflicts with laws and regulations, laws and regulations shall prevail; if conflicting with other rules within the app, this policy (updated version) shall prevail.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<p><strong>[Release Date: July 15, 2025]</strong></p>
|
|
||||||
<p><strong>[Effective Date: July 15, 2025]</strong></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
161
public/app-privacy-zh.html
Normal file
161
public/app-privacy-zh.html
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>隐私政策</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: blue;
|
||||||
|
text-align: center; /* 标题居中 */
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
color: blue;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-type: disc;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>隐私政策</h1>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>前言</h2>
|
||||||
|
<p>中自科技股份有限公司(以下简称 “我们”)高度重视对个人信息的保护,严格遵守适用的数据保护法律法规,衷心感谢您对本应用的信任。</p>
|
||||||
|
<p>作为专注于 [应用业务领域,如储能项目展示等] 的服务提供者,我们深知在全球范围内保护用户隐私的重要性。本隐私政策旨在向您清晰说明我们收集、使用、存储、分享及保护您个人信息的方式,并确保我们的做法符合国际数据保护标准及各运营所在地的法律法规要求,包括但不限于欧盟《通用数据保护条例》(GDPR)、美国《加利福尼亚州消费者隐私法案》(CCPA)、《中华人民共和国网络安全法》《中华人民共和国个人信息保护法》及《中华人民共和国数据安全法》等。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>一、信息收集范围与方式</h2>
|
||||||
|
<p>在您使用本应用(包括访问应用内功能、注册账号、使用服务等过程中),我们可能直接收集以下个人信息:</p>
|
||||||
|
|
||||||
|
<h3>(一)基础业务必需信息</h3>
|
||||||
|
<ul>
|
||||||
|
<li>基本身份信息:手机号码/邮箱地址(用于验证)、用户名、密码、IP地址(安全风控);</li>
|
||||||
|
<li>设备与网络信息:IP 地址、设备型号、操作系统版本、设备标识符(如 IMEI/Android ID/OpenUDID、OAID、设备型号等)、网络类型(Wi-Fi/移动网络)、浏览器类型等(用于保障服务稳定性、安全风控、功能适配);</li>
|
||||||
|
<li>日志信息:访问记录、操作日志、错误日志(优化服务);</li>
|
||||||
|
<li>位置服务:实时位置信息(需开启位置权限,用于附近储能站点查询);</li>
|
||||||
|
<li>权限说明:读取设备状态(保障登录安全,获取OAID等信息)、网络访问(数据传输)。</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>(二)可选功能附加信息</h3>
|
||||||
|
<ul>
|
||||||
|
<li>位置服务:实时位置信息(需开启位置权限,用于附近储能站点查询)</li>
|
||||||
|
<li>存储权限:读写外部存储(缓存地图数据,减少流量消耗)</li>
|
||||||
|
<li>所有附加功能均需单独授权,拒绝不影响基础服务</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>二、信息使用目的</h2>
|
||||||
|
<p>收集的个人信息将用于以下合理、必要目的:</p>
|
||||||
|
<ol>
|
||||||
|
<li>提供基础服务:实现账号注册 / 登录、储能项目展示与交互、业务流程办理(如订单 / 服务申请 )、客服响应等核心功能;</li>
|
||||||
|
<li>保障安全合规:通过设备 / 网络信息进行安全风控(识别异常登录、防范恶意攻击 ),符合法律法规要求(如数据留存以备监管查询 );</li>
|
||||||
|
<li>业务运营与改进:用于内部数据分析(如统计用户需求、评估服务效果 ),推动产品迭代、服务升级;</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>三、跨境数据传输</h2>
|
||||||
|
<p>通常情况下,您的个人信息会存储在 [应用服务器所在地区,如国内华为云服务器(法国巴黎亚马逊云服务器)等]。</p>
|
||||||
|
<p>为保障数据安全,我们会采取以下措施:</p>
|
||||||
|
<ol>
|
||||||
|
<li>合规评估与授权:对跨境传输行为进行合法性评估,确保符合国内及目标地区数据保护法规;</li>
|
||||||
|
<li>技术防护:采用加密传输、访问控制等技术手段,降低数据泄露风险;</li>
|
||||||
|
<li>合同约束:与境外接收方签订严格的数据保护协议,明确双方责任与义务,要求其保障数据安全。</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>四、信息共享与披露</h2>
|
||||||
|
<p>我们承诺对您的个人信息严格保密,除以下情形外,不会向任何无关第三方共享 /披露:</p>
|
||||||
|
|
||||||
|
<h3>(一)必要业务合作</h3>
|
||||||
|
<p>我们委托阿里云、华为云、亚马逊云等第三方提供技术支持,仅授权其在必要范围内处理信息,并签署严格保密协议。</p>
|
||||||
|
<p>与经严格筛选的第三方服务提供商(如云服务提供商、数据分析公司)共享必要信息,以支持应用功能实现(如服务器托管、数据统计分析)。我们仅会共享完成合作所需的最小范围信息,并要求合作方签署保密协议,约束其数据处理行为。</p>
|
||||||
|
|
||||||
|
<h3>(二)法律法规要求</h3>
|
||||||
|
<p>在法律强制要求(如法院传票、行政机关调查)、履行法定义务(如配合监管合规检查)等情形下,我们可能依法披露必要的个人信息。</p>
|
||||||
|
|
||||||
|
<h3>(三)企业重组/并购</h3>
|
||||||
|
<p>若发生企业合并、分立、资产转让等重大变更,我们会遵循 “合法、必要、最小化” 原则转移个人信息,并提前以显著方式(如应用内公告、邮件 )通知您。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>五、信息安全与保护</h2>
|
||||||
|
<p>我们致力于通过技术、管理双重措施保障您的个人信息安全:</p>
|
||||||
|
|
||||||
|
<h3>(一)技术防护</h3>
|
||||||
|
<ul>
|
||||||
|
<li>采用数据加密(如传输加密、存储加密)、访问控制(如账号密码验证、权限分级管理)、安全审计(定期检查系统日志)等技术手段,防范数据泄露、篡改、非法访问;</li>
|
||||||
|
<li>对重要系统、服务进行实时监控,及时发现并处置安全漏洞、异常访问行为。</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>(二)管理保障</h3>
|
||||||
|
<ul>
|
||||||
|
<li>制定严格的数据安全管理制度,明确员工数据访问权限与操作规范;</li>
|
||||||
|
<li>定期开展员工数据安全培训,提升全员隐私保护意识;</li>
|
||||||
|
<li>对数据处理流程进行合规审计,确保符合政策要求。</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>六、您的个人信息权利及行使方式</h2>
|
||||||
|
<p>依据适用法律法规,您享有以下个人信息相关权利:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>查询与更正:</strong>APP内路径 → 我的 → 设置 → 个人信息管理</li>
|
||||||
|
<li><strong>删除请求:</strong>支持账号注销、信息处理违规等场景</li>
|
||||||
|
<li><strong>权限管理:</strong>手机设置 → 应用管理 → “中自储能” → 关闭对应权限</li>
|
||||||
|
<li><strong>账号注销:</strong>APP内路径 → 我的 → 设置 → 账号安全 → 注销账号</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>七、隐私政策的变更与通知</h2>
|
||||||
|
<p>我们会适时更新本隐私政策,以反映业务调整、法规变化。更新后,我们将通过以下方式通知您:</p>
|
||||||
|
<ul>
|
||||||
|
<li>应用内弹窗、消息推送;</li>
|
||||||
|
<li>邮件;</li>
|
||||||
|
<li>应用内“设置 - 隐私政策”页面显著提示。</li>
|
||||||
|
</ul>
|
||||||
|
<p>请定期查阅本政策,您继续使用应用即视为接受变更后的条款。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>八、未成年人保护及联系方式</h2>
|
||||||
|
<p>我们不主动收集未满14周岁未成年人的个人信息。若监护人发现未满 14 周岁未成年人个人信息被收集,或您对本隐私政策有疑问、建议、需行使个人信息权利,均可通过以下方式联系我们:</p>
|
||||||
|
<ul>
|
||||||
|
<li>客服邮箱:<a href="mailto:info@zetatech-energy.com">info@zetatech-energy.com</a>(我们将在 48小时内回复);</li>
|
||||||
|
<li>邮寄地址:四川省成都市郫都区古南街88号(邮编:611730)</li>
|
||||||
|
</ul>
|
||||||
|
<p>本政策由中自科技股份有限公司负责解释,若与法律法规冲突,以法律法规为准;若与应用内其他规则冲突,以本政策(更新后版本 )为准。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<p><strong>[发布日期:2025 年 7 月 15 日]</strong></p>
|
||||||
|
<p><strong>[生效日期:2025 年 7 月 15 日]</strong></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 86 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 7.1 KiB |
@ -202,20 +202,20 @@ export function kgFormat(num, digits) {
|
|||||||
export function moneyUnitFormat(num) {
|
export function moneyUnitFormat(num) {
|
||||||
if (sessionStorage.getItem('language') === 'en') {
|
if (sessionStorage.getItem('language') === 'en') {
|
||||||
if (!num) {
|
if (!num) {
|
||||||
return 'EUR'
|
return 'RMB'
|
||||||
}
|
}
|
||||||
if (Number(num) >= 1E4) {
|
if (Number(num) >= 1E4) {
|
||||||
return 'EUR10K'
|
return 'M RMB'
|
||||||
}
|
}
|
||||||
return 'EUR'
|
return 'RMB'
|
||||||
} else {
|
} else {
|
||||||
if (!num) {
|
if (!num) {
|
||||||
return 'EUR'
|
return '元'
|
||||||
}
|
}
|
||||||
if (Number(num) >= 1E4) {
|
if (Number(num) >= 1E4) {
|
||||||
return 'EUR10K'
|
return '万元'
|
||||||
}
|
}
|
||||||
return 'EUR'
|
return '元'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -231,7 +231,7 @@ export function KgUnitFormat(num) {
|
|||||||
return 'kg'
|
return 'kg'
|
||||||
}
|
}
|
||||||
if (Number(num) >= 1E3) {
|
if (Number(num) >= 1E3) {
|
||||||
return 't'
|
return 'T'
|
||||||
}
|
}
|
||||||
return 'kg'
|
return 'kg'
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -32,13 +32,13 @@ export default {
|
|||||||
stationRunPlan: 'The actual operation plan curve of the power station',
|
stationRunPlan: 'The actual operation plan curve of the power station',
|
||||||
runEarning: 'Actual operating earnings',
|
runEarning: 'Actual operating earnings',
|
||||||
recommend: 'Referral strategy earnings',
|
recommend: 'Referral strategy earnings',
|
||||||
valley: '谷(0.1kWh/EUR)',
|
valley: '谷(0.1kWh/元)',
|
||||||
flat: '平(0.3kWh/EUR)',
|
flat: '平(0.3kWh/元)',
|
||||||
peak: '峰(0.6kWh/EUR)',
|
peak: '峰(0.6kWh/元)',
|
||||||
earningForecast: 'Revenue forecasts',
|
earningForecast: 'Revenue forecasts',
|
||||||
defaultEarning: 'Default policy earnings',
|
defaultEarning: 'Default policy earnings',
|
||||||
estimateEarning: 'Estimated earnings increase',
|
estimateEarning: 'Estimated earnings increase',
|
||||||
rmb: 'EUR',
|
rmb: 'RMB',
|
||||||
stts: 'Earnings budgeting',
|
stts: 'Earnings budgeting',
|
||||||
sjsyje: 'Amount of actual earnings',
|
sjsyje: 'Amount of actual earnings',
|
||||||
mrjhqx: 'Default plan curve earnings',
|
mrjhqx: 'Default plan curve earnings',
|
||||||
|
|||||||
@ -32,13 +32,13 @@ export default {
|
|||||||
stationRunPlan: '电站实际运行计划曲线',
|
stationRunPlan: '电站实际运行计划曲线',
|
||||||
runEarning: '实际运行收益',
|
runEarning: '实际运行收益',
|
||||||
recommend: '推荐策略收益',
|
recommend: '推荐策略收益',
|
||||||
valley: '谷(0.1kWh/EUR)',
|
valley: '谷(0.1kWh/元)',
|
||||||
flat: '平(0.3kWh/EUR)',
|
flat: '平(0.3kWh/元)',
|
||||||
peak: '峰(0.6kWh/EUR)',
|
peak: '峰(0.6kWh/元)',
|
||||||
earningForecast: '收益预测',
|
earningForecast: '收益预测',
|
||||||
defaultEarning: '默认策略收益',
|
defaultEarning: '默认策略收益',
|
||||||
estimateEarning: '预估收益提升',
|
estimateEarning: '预估收益提升',
|
||||||
rmb: 'EUR',
|
rmb: '元',
|
||||||
stts: '收益预算',
|
stts: '收益预算',
|
||||||
sjsyje: '实际收益金额',
|
sjsyje: '实际收益金额',
|
||||||
mrjhqx: '默认计划曲线收益',
|
mrjhqx: '默认计划曲线收益',
|
||||||
|
|||||||
@ -89,7 +89,7 @@ export default {
|
|||||||
sure: 'Sure',
|
sure: 'Sure',
|
||||||
cancel: 'Cancel',
|
cancel: 'Cancel',
|
||||||
more: 'More',
|
more: 'More',
|
||||||
tem: 'TEMP',
|
tem: 'Temperature',
|
||||||
xxxq: 'Message details',
|
xxxq: 'Message details',
|
||||||
pleaseInput: 'Please input',
|
pleaseInput: 'Please input',
|
||||||
sureRead: 'Confirm has been read',
|
sureRead: 'Confirm has been read',
|
||||||
@ -106,7 +106,7 @@ export default {
|
|||||||
noPagePermiss: 'There is no permission for this page'
|
noPagePermiss: 'There is no permission for this page'
|
||||||
},
|
},
|
||||||
login: {
|
login: {
|
||||||
title: 'Zetatech smart energy storage management platform',
|
title: 'Sinotech smart energy storage management platform',
|
||||||
logIn: 'Login',
|
logIn: 'Login',
|
||||||
username: 'Username',
|
username: 'Username',
|
||||||
password: 'Password',
|
password: 'Password',
|
||||||
|
|||||||
@ -80,11 +80,9 @@ export function getLanguage() {
|
|||||||
// if has not choose language
|
// if has not choose language
|
||||||
const language = (navigator.language || navigator.browserLanguage).toLowerCase()
|
const language = (navigator.language || navigator.browserLanguage).toLowerCase()
|
||||||
const locales = Object.keys(messages)
|
const locales = Object.keys(messages)
|
||||||
console.log(JSON.stringify('语言:' + language, locales))
|
|
||||||
|
|
||||||
for (const locale of locales) {
|
for (const locale of locales) {
|
||||||
if (language.indexOf(locale) > -1) {
|
if (language.indexOf(locale) > -1) {
|
||||||
return locale !== 'en' ? 'en' : locale
|
return locale
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 'en'
|
return 'en'
|
||||||
|
|||||||
@ -34,7 +34,7 @@ export default {
|
|||||||
selectTemValid: 'Please select template validity',
|
selectTemValid: 'Please select template validity',
|
||||||
type: 'Type',
|
type: 'Type',
|
||||||
selectType: 'Please select type',
|
selectType: 'Please select type',
|
||||||
electrovalency: 'Electricity(EUR)',
|
electrovalency: 'Electricity(RMB)',
|
||||||
sure: 'Sure',
|
sure: 'Sure',
|
||||||
cancel: 'Cancel',
|
cancel: 'Cancel',
|
||||||
noSelectData: 'No data is selected',
|
noSelectData: 'No data is selected',
|
||||||
@ -121,7 +121,7 @@ export default {
|
|||||||
img: 'Image',
|
img: 'Image',
|
||||||
eleLevel: 'Electricity Price Level',
|
eleLevel: 'Electricity Price Level',
|
||||||
fsdd: 'The price of time-of-use electricity',
|
fsdd: 'The price of time-of-use electricity',
|
||||||
dietailUnit: 'EUR/kWh',
|
dietailUnit: 'RMB/kWh',
|
||||||
eleprice: 'The price of electricity and electricity',
|
eleprice: 'The price of electricity and electricity',
|
||||||
historytrend: 'Historical trends',
|
historytrend: 'Historical trends',
|
||||||
curve: 'Curve',
|
curve: 'Curve',
|
||||||
@ -154,11 +154,11 @@ export default {
|
|||||||
charge: 'Charge',
|
charge: 'Charge',
|
||||||
time: 'Time',
|
time: 'Time',
|
||||||
ele: 'Electricity(kWh)',
|
ele: 'Electricity(kWh)',
|
||||||
expend: 'expenditures(EUR)',
|
expend: 'expenditures(RMB)',
|
||||||
disCharge: 'Discharge',
|
disCharge: 'Discharge',
|
||||||
projectRevenue: 'Project Revenue',
|
projectRevenue: 'Project Revenue',
|
||||||
monthTotalChargePrice: 'Total Charging Price Monthly',
|
monthTotalChargePrice: 'Total Charging Price Monthly',
|
||||||
rmb: 'EUR',
|
rmb: 'RMB',
|
||||||
monthTotalDisChargePrice: 'Total Discharging Price Monthly',
|
monthTotalDisChargePrice: 'Total Discharging Price Monthly',
|
||||||
earnings: 'Revenue',
|
earnings: 'Revenue',
|
||||||
earningsRecalculation: 'Revenue Recalculation',
|
earningsRecalculation: 'Revenue Recalculation',
|
||||||
@ -204,7 +204,7 @@ export default {
|
|||||||
},
|
},
|
||||||
glance: {
|
glance: {
|
||||||
day: 'day',
|
day: 'day',
|
||||||
wRMB: 'EUR10K',
|
wRMB: 'Million RMB',
|
||||||
safeDays: 'Safe Operation Days',
|
safeDays: 'Safe Operation Days',
|
||||||
totalCapacity: 'Total Installed Capacity',
|
totalCapacity: 'Total Installed Capacity',
|
||||||
totalCharge: 'Total Charging Volume',
|
totalCharge: 'Total Charging Volume',
|
||||||
@ -232,7 +232,7 @@ export default {
|
|||||||
setRevenue: 'Settlement Revenue',
|
setRevenue: 'Settlement Revenue',
|
||||||
chargeCost: 'Charging Cost',
|
chargeCost: 'Charging Cost',
|
||||||
dischargeRev: 'Discharge Revenue',
|
dischargeRev: 'Discharge Revenue',
|
||||||
rmb: 'EUR',
|
rmb: 'RMB',
|
||||||
setRatio: 'Settlement Ratio',
|
setRatio: 'Settlement Ratio',
|
||||||
selectSetRatio: 'Please select settlement ratio',
|
selectSetRatio: 'Please select settlement ratio',
|
||||||
priceCurve: 'Real-Time Electricity Price Curve',
|
priceCurve: 'Real-Time Electricity Price Curve',
|
||||||
@ -243,9 +243,9 @@ export default {
|
|||||||
noData: 'No Data',
|
noData: 'No Data',
|
||||||
inputNumber: 'Please input a number from 0-100',
|
inputNumber: 'Please input a number from 0-100',
|
||||||
earningGlance: 'Revenue Glance',
|
earningGlance: 'Revenue Glance',
|
||||||
unit: 'Unit:EUR/kWh',
|
unit: 'Unit:RMB/kWh',
|
||||||
unitKw: 'Unit:kW',
|
unitKw: 'Unit:kW',
|
||||||
planCurve: 'Plan Curve',
|
planCurve: 'Plan Curve',
|
||||||
unitRMB: 'Unit:EUR'
|
unitRMB: 'Unit:RMB'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,7 @@ export default {
|
|||||||
selectTemValid: '请选择模板有效期',
|
selectTemValid: '请选择模板有效期',
|
||||||
type: '类型',
|
type: '类型',
|
||||||
selectType: '请选择类型',
|
selectType: '请选择类型',
|
||||||
electrovalency: '电价(EUR)',
|
electrovalency: '电价(元)',
|
||||||
sure: '确认',
|
sure: '确认',
|
||||||
cancel: '取消',
|
cancel: '取消',
|
||||||
noSelectData: '未选择数据',
|
noSelectData: '未选择数据',
|
||||||
@ -123,7 +123,7 @@ export default {
|
|||||||
img: '图片',
|
img: '图片',
|
||||||
eleLevel: '电价水平',
|
eleLevel: '电价水平',
|
||||||
fsdd: '分时电度用电价格',
|
fsdd: '分时电度用电价格',
|
||||||
dietailUnit: 'EUR/千瓦时',
|
dietailUnit: '元/千瓦时',
|
||||||
eleprice: '电度用电价格',
|
eleprice: '电度用电价格',
|
||||||
historytrend: '历史趋势',
|
historytrend: '历史趋势',
|
||||||
curve: '曲线',
|
curve: '曲线',
|
||||||
@ -153,11 +153,11 @@ export default {
|
|||||||
charge: '充电',
|
charge: '充电',
|
||||||
time: '时段',
|
time: '时段',
|
||||||
ele: '电量(kWh)',
|
ele: '电量(kWh)',
|
||||||
expend: '支出(EUR)',
|
expend: '支出(元)',
|
||||||
disCharge: '放电',
|
disCharge: '放电',
|
||||||
projectRevenue: '项目收益情况',
|
projectRevenue: '项目收益情况',
|
||||||
monthTotalChargePrice: '本月总充电量总价',
|
monthTotalChargePrice: '本月总充电量总价',
|
||||||
rmb: 'EUR',
|
rmb: '元',
|
||||||
monthTotalDisChargePrice: '本月总放电量总价',
|
monthTotalDisChargePrice: '本月总放电量总价',
|
||||||
earnings: '收益',
|
earnings: '收益',
|
||||||
earningsRecalculation: '收益重算',
|
earningsRecalculation: '收益重算',
|
||||||
@ -174,6 +174,7 @@ export default {
|
|||||||
laterQuery: '%,请稍后查询。',
|
laterQuery: '%,请稍后查询。',
|
||||||
earningReport: '收益报表',
|
earningReport: '收益报表',
|
||||||
bill: '账单'
|
bill: '账单'
|
||||||
|
|
||||||
},
|
},
|
||||||
region: {
|
region: {
|
||||||
regionName: '区域名称',
|
regionName: '区域名称',
|
||||||
@ -203,7 +204,7 @@ export default {
|
|||||||
},
|
},
|
||||||
glance: {
|
glance: {
|
||||||
day: '天',
|
day: '天',
|
||||||
wRMB: 'EUR10K',
|
wRMB: '万元',
|
||||||
safeDays: '安全运行天数',
|
safeDays: '安全运行天数',
|
||||||
totalCapacity: '装机总容量',
|
totalCapacity: '装机总容量',
|
||||||
totalCharge: '总充电量',
|
totalCharge: '总充电量',
|
||||||
@ -231,7 +232,7 @@ export default {
|
|||||||
setRevenue: '结算收益',
|
setRevenue: '结算收益',
|
||||||
chargeCost: '充电成本',
|
chargeCost: '充电成本',
|
||||||
dischargeRev: '放电收益',
|
dischargeRev: '放电收益',
|
||||||
rmb: 'EUR',
|
rmb: '元',
|
||||||
setRatio: '计算比例',
|
setRatio: '计算比例',
|
||||||
selectSetRatio: '请选择结算比例',
|
selectSetRatio: '请选择结算比例',
|
||||||
priceCurve: '实时电价曲线',
|
priceCurve: '实时电价曲线',
|
||||||
@ -242,9 +243,9 @@ export default {
|
|||||||
noData: '暂无数据',
|
noData: '暂无数据',
|
||||||
inputNumber: '请输入0-100的数字',
|
inputNumber: '请输入0-100的数字',
|
||||||
earningGlance: '收益概览',
|
earningGlance: '收益概览',
|
||||||
unit: '单位:EUR/kWh',
|
unit: '单位:元/kWh',
|
||||||
unitKw: '单位:kW',
|
unitKw: '单位:kW',
|
||||||
planCurve: '计划曲线',
|
planCurve: '计划曲线',
|
||||||
unitRMB: '单位:EUR'
|
unitRMB: '单位:元'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,19 +9,19 @@ export default {
|
|||||||
totalCharge: 'Total charge',
|
totalCharge: 'Total charge',
|
||||||
totalDisCharge: 'Total discharge',
|
totalDisCharge: 'Total discharge',
|
||||||
regionStation: 'Regional distribution of power stations',
|
regionStation: 'Regional distribution of power stations',
|
||||||
totalStation: 'Total Stations',
|
totalStation: 'Total Station',
|
||||||
noData: 'No Data',
|
noData: 'No Data',
|
||||||
energySaving: 'Energy Conservation',
|
energySaving: 'Energy Conservation',
|
||||||
planted: 'Equivalent tree plantings',
|
planted: 'Equivalent tree plantings',
|
||||||
co2: 'Equivalent CO2 reduction',
|
co2: 'Equivalent CO2 reduction',
|
||||||
coal: 'Equivalent coal savings',
|
coal: 'Equivalent coal savings',
|
||||||
income: 'Equivalent economic income',
|
income: 'Equivalent economic income',
|
||||||
tree: 'Trees',
|
tree: 'Tree',
|
||||||
yesEarning: "Yesterday's Earnings",
|
yesEarning: "Yesterday's Earnings",
|
||||||
annualEarning: 'Annual Income',
|
annualEarning: 'Annual Income',
|
||||||
totalEarning: 'Total Revenue',
|
totalEarning: 'Total Revenue',
|
||||||
groupEarning: 'Group Income',
|
groupEarning: 'Group Income',
|
||||||
mRMB: 'EUR10K',
|
mRMB: 'Million RMB',
|
||||||
high: 'High',
|
high: 'High',
|
||||||
low: 'Low',
|
low: 'Low',
|
||||||
comTime: 'Commission Time',
|
comTime: 'Commission Time',
|
||||||
@ -37,8 +37,7 @@ export default {
|
|||||||
stationName: 'Station Name',
|
stationName: 'Station Name',
|
||||||
cap: 'Capacity(kWh)',
|
cap: 'Capacity(kWh)',
|
||||||
Eff: 'Efficiency(%)',
|
Eff: 'Efficiency(%)',
|
||||||
groupData: 'Group statistics',
|
groupData: 'Group Income',
|
||||||
ztscreenTitle: 'Zetatech Smart energy storage management and control platform',
|
|
||||||
screenTitle: 'Smart energy storage management and control platform',
|
screenTitle: 'Smart energy storage management and control platform',
|
||||||
xjpScreenTitle: 'FAVFAM Microgrid Al Monitor Platform',
|
xjpScreenTitle: 'FAVFAM Microgrid Al Monitor Platform',
|
||||||
cncharge: 'Energy Storage power',
|
cncharge: 'Energy Storage power',
|
||||||
|
|||||||
@ -2,8 +2,8 @@ export default {
|
|||||||
screen: {
|
screen: {
|
||||||
capacity: '装机容量',
|
capacity: '装机容量',
|
||||||
stationNum: '电站个数',
|
stationNum: '电站个数',
|
||||||
dailyCharge: '日充电量',
|
dayCharge: '日充电量',
|
||||||
dailyDischarge: '日放电量',
|
dayDisCharge: '日放电量',
|
||||||
yearCharge: '年充电量',
|
yearCharge: '年充电量',
|
||||||
yearDisCharge: '年放电量',
|
yearDisCharge: '年放电量',
|
||||||
totalCharge: '总充电量',
|
totalCharge: '总充电量',
|
||||||
@ -21,7 +21,7 @@ export default {
|
|||||||
annualEarning: '年收益',
|
annualEarning: '年收益',
|
||||||
totalEarning: '总收益',
|
totalEarning: '总收益',
|
||||||
groupEarning: '集团收益',
|
groupEarning: '集团收益',
|
||||||
mRMB: 'EUR10K',
|
mRMB: '万元',
|
||||||
high: '高',
|
high: '高',
|
||||||
low: '低',
|
low: '低',
|
||||||
comTime: '投运时间',
|
comTime: '投运时间',
|
||||||
@ -38,7 +38,6 @@ export default {
|
|||||||
cap: '容量(kWh)',
|
cap: '容量(kWh)',
|
||||||
Eff: '转换效率(%)',
|
Eff: '转换效率(%)',
|
||||||
groupData: '集团数据',
|
groupData: '集团数据',
|
||||||
ztscreenTitle: '智慧储能管控平台',
|
|
||||||
screenTitle: '智慧储能管控平台',
|
screenTitle: '智慧储能管控平台',
|
||||||
xjpScreenTitle: '新加坡微电网平台',
|
xjpScreenTitle: '新加坡微电网平台',
|
||||||
cncharge: '储能发电量',
|
cncharge: '储能发电量',
|
||||||
|
|||||||
@ -280,7 +280,7 @@ export default {
|
|||||||
safeLowerError: 'The minimum security capacity cannot be greater than the maximum security capacity',
|
safeLowerError: 'The minimum security capacity cannot be greater than the maximum security capacity',
|
||||||
saveSuccess: 'Save succeeded',
|
saveSuccess: 'Save succeeded',
|
||||||
buildSuccess: 'Generate succeeded',
|
buildSuccess: 'Generate succeeded',
|
||||||
unit: 'Unit: EUR/kWh',
|
unit: 'Unit: RMB/kWh',
|
||||||
loadCurve: 'Load curve',
|
loadCurve: 'Load curve',
|
||||||
importSuccess: 'Import succeeded',
|
importSuccess: 'Import succeeded',
|
||||||
newUnit: 'Unit:kWh'
|
newUnit: 'Unit:kWh'
|
||||||
|
|||||||
@ -277,7 +277,7 @@ export default {
|
|||||||
safeLowerError: '安全容量下限不能大于安全容量上限',
|
safeLowerError: '安全容量下限不能大于安全容量上限',
|
||||||
saveSuccess: '保存成功',
|
saveSuccess: '保存成功',
|
||||||
buildSuccess: '生成成功',
|
buildSuccess: '生成成功',
|
||||||
unit: '单位:EUR/kWh',
|
unit: '单位:元/kWh',
|
||||||
loadCurve: '负荷曲线',
|
loadCurve: '负荷曲线',
|
||||||
importSuccess: '导入成功',
|
importSuccess: '导入成功',
|
||||||
newUnit: '单位:kW'
|
newUnit: '单位:kW'
|
||||||
|
|||||||
@ -889,7 +889,7 @@ export default {
|
|||||||
day: '日',
|
day: '日',
|
||||||
power: '发电量',
|
power: '发电量',
|
||||||
benefit: '收益',
|
benefit: '收益',
|
||||||
wanji: 'EUR10K'
|
wanji: '万元'
|
||||||
},
|
},
|
||||||
sophCharging: { // 智慧充电
|
sophCharging: { // 智慧充电
|
||||||
station: '电站',
|
station: '电站',
|
||||||
@ -905,7 +905,7 @@ export default {
|
|||||||
online: '在线',
|
online: '在线',
|
||||||
offline: '离线',
|
offline: '离线',
|
||||||
accruedIncome: '累计收益',
|
accruedIncome: '累计收益',
|
||||||
tenThousand: 'EUR10K',
|
tenThousand: '万元',
|
||||||
faultNum: '故障个数',
|
faultNum: '故障个数',
|
||||||
acAuto: '交流汽车',
|
acAuto: '交流汽车',
|
||||||
chargeBenefit: '充电桩日充电量/收益',
|
chargeBenefit: '充电桩日充电量/收益',
|
||||||
@ -920,9 +920,9 @@ export default {
|
|||||||
peak: '峰',
|
peak: '峰',
|
||||||
currentPos: '当前位置',
|
currentPos: '当前位置',
|
||||||
chargeFees: '充电收费',
|
chargeFees: '充电收费',
|
||||||
chargeFeesUnit: 'EUR/kWh',
|
chargeFeesUnit: '元/kWh',
|
||||||
serviceFee: '服务费',
|
serviceFee: '服务费',
|
||||||
servecrFeeUnit: 'EUR/次',
|
servecrFeeUnit: '元/次',
|
||||||
pileType: '充电桩类型',
|
pileType: '充电桩类型',
|
||||||
chargeNum: '今日充电次数',
|
chargeNum: '今日充电次数',
|
||||||
free: '空闲',
|
free: '空闲',
|
||||||
|
|||||||
@ -88,9 +88,9 @@
|
|||||||
class="others-wrapper"
|
class="others-wrapper"
|
||||||
:style="{ 'min-width': clientWidth > 800 && language === 'zh' ? '520px' : '200px' }"
|
:style="{ 'min-width': clientWidth > 800 && language === 'zh' ? '520px' : '200px' }"
|
||||||
>
|
>
|
||||||
<div v-if="weatherData && clientWidth > 600" class="weather">
|
<div v-if="weatherData && clientWidth > 600 && language === 'zh'" class="weather">
|
||||||
<div v-if="+stationId !== 1069" class="item">
|
<div v-if="+stationId !== 1069" class="item">
|
||||||
<img :src="weatheren[weatherData.code]" alt>
|
<img :src="weather[weatherData.skyCon]" alt>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="weatherData && +stationId !== 1069"
|
v-if="weatherData && +stationId !== 1069"
|
||||||
@ -104,7 +104,7 @@
|
|||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="weather-text">{{ weatherData.skyCon }}</div>
|
<div class="weather-text">{{ weatherData.skyCon }}</div>
|
||||||
<div class="weather-text">
|
<div class="weather-text">
|
||||||
{{ $t('navbar.tem') }} {{ fixNumber(weatherData.minTemperature) }}℃-{{
|
{{ $t('navbar.tem') }}{{ fixNumber(weatherData.minTemperature) }}℃-{{
|
||||||
fixNumber(weatherData.maxTemperature)
|
fixNumber(weatherData.maxTemperature)
|
||||||
}}℃
|
}}℃
|
||||||
</div>
|
</div>
|
||||||
@ -401,56 +401,6 @@ export default {
|
|||||||
yuzhuanqing,
|
yuzhuanqing,
|
||||||
zhongxue,
|
zhongxue,
|
||||||
zhongyu,
|
zhongyu,
|
||||||
weatheren: {
|
|
||||||
1000: qing,
|
|
||||||
1003: duoyun,
|
|
||||||
1006: duoyun,
|
|
||||||
1009: yintian,
|
|
||||||
1030: wu,
|
|
||||||
1063: xiaoyu,
|
|
||||||
1066: xiaoxue,
|
|
||||||
1069: yujiaxue,
|
|
||||||
1072: yujiaxue,
|
|
||||||
1087: leiyu,
|
|
||||||
1114: daxue,
|
|
||||||
1117: daxue,
|
|
||||||
1135: wu,
|
|
||||||
1147: wu,
|
|
||||||
1150: xiaoyu,
|
|
||||||
1153: xiaoyu,
|
|
||||||
1168: yujiaxue,
|
|
||||||
1171: yujiaxue,
|
|
||||||
1180: xiaoyu,
|
|
||||||
1183: xiaoyu,
|
|
||||||
1186: zhongyu,
|
|
||||||
1189: zhongyu,
|
|
||||||
1192: dayu,
|
|
||||||
1195: dayu,
|
|
||||||
1198: yujiaxue,
|
|
||||||
1201: yujiaxue,
|
|
||||||
1204: leiyu,
|
|
||||||
1207: leiyu,
|
|
||||||
1210: xiaoxue,
|
|
||||||
1213: xiaoxue,
|
|
||||||
1216: zhongxue,
|
|
||||||
1219: zhongxue,
|
|
||||||
1222: daxue,
|
|
||||||
1225: daxue,
|
|
||||||
1237: yujiaxue,
|
|
||||||
1240: xiaoyu,
|
|
||||||
1243: dayu,
|
|
||||||
1246: baoyu,
|
|
||||||
1249: yujiaxue,
|
|
||||||
1252: yujiaxue,
|
|
||||||
1255: zhongxue,
|
|
||||||
1258: daxue,
|
|
||||||
1261: yujiaxue,
|
|
||||||
1264: yujiaxue,
|
|
||||||
1273: leiyu,
|
|
||||||
1276: leiyu,
|
|
||||||
1279: yujiaxue,
|
|
||||||
1282: yujiaxue
|
|
||||||
},
|
|
||||||
weather: {
|
weather: {
|
||||||
晴: qing,
|
晴: qing,
|
||||||
少云: duoyun,
|
少云: duoyun,
|
||||||
@ -1044,7 +994,7 @@ export default {
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
font-size: 18px !important;
|
font-size: 18px !important;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
// min-width: 100px;
|
min-width: 100px;
|
||||||
|
|
||||||
i {
|
i {
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@ -1099,7 +1049,7 @@ export default {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex-wrap: wrap;
|
|
||||||
// padding-right: 15px;
|
// padding-right: 15px;
|
||||||
.iconfont {
|
.iconfont {
|
||||||
font-size: 40px;
|
font-size: 40px;
|
||||||
|
|||||||
@ -26,18 +26,13 @@
|
|||||||
:collapse-transition="false"
|
:collapse-transition="false"
|
||||||
mode="vertical"
|
mode="vertical"
|
||||||
>
|
>
|
||||||
<el-tooltip
|
<sidebar-item
|
||||||
v-for="route in menuList"
|
v-for="route in menuList"
|
||||||
:key="route.id"
|
:key="route.id"
|
||||||
:content="route.title"
|
|
||||||
placement="top-start"
|
|
||||||
>
|
|
||||||
<sidebar-item
|
|
||||||
:item="route"
|
:item="route"
|
||||||
:base-path="route.url"
|
:base-path="route.url"
|
||||||
:active-path="activePath"
|
:active-path="activePath"
|
||||||
/>
|
/>
|
||||||
</el-tooltip>
|
|
||||||
</el-menu>
|
</el-menu>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
<div class="open-btn" @click="handleClickOutside">
|
<div class="open-btn" @click="handleClickOutside">
|
||||||
|
|||||||
@ -15,7 +15,7 @@ const whiteList = [
|
|||||||
'/new-screen',
|
'/new-screen',
|
||||||
'/new-screen-zz',
|
'/new-screen-zz',
|
||||||
'/common-screen',
|
'/common-screen',
|
||||||
'/app-privacy-en.html'
|
'/app-privacy-zh.html'
|
||||||
] // no redirect whitelist
|
] // no redirect whitelist
|
||||||
|
|
||||||
router.beforeEach(async(to, from, next) => {
|
router.beforeEach(async(to, from, next) => {
|
||||||
|
|||||||
@ -13,7 +13,7 @@ const service = axios.create({
|
|||||||
// request interceptor
|
// request interceptor
|
||||||
service.interceptors.request.use(
|
service.interceptors.request.use(
|
||||||
config => {
|
config => {
|
||||||
config.headers['lang'] = sessionStorage.getItem('language') === 'zh' ? 'zh_CN' : 'en_US'
|
config.headers['lang'] = sessionStorage.getItem('language') === 'en' ? 'en_US' : 'zh_CN'
|
||||||
// do something before request is sent
|
// do something before request is sent
|
||||||
if (config.headers.isScreen) {
|
if (config.headers.isScreen) {
|
||||||
config.headers['authorization'] = getScreenToken()
|
config.headers['authorization'] = getScreenToken()
|
||||||
|
|||||||
@ -160,7 +160,6 @@ import { queryElecMeterConfig } from '@/api/home-page/index'
|
|||||||
|
|
||||||
import pv1AndStorage_261 from './components/top-center/pv1storage261.vue'
|
import pv1AndStorage_261 from './components/top-center/pv1storage261.vue'
|
||||||
import pv2AndStorage_261 from './components/top-center/pv2storage261.vue'
|
import pv2AndStorage_261 from './components/top-center/pv2storage261.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Index',
|
name: 'Index',
|
||||||
components: {
|
components: {
|
||||||
@ -206,6 +205,7 @@ export default {
|
|||||||
tenthTopCenter,
|
tenthTopCenter,
|
||||||
pv1AndStorage_261,
|
pv1AndStorage_261,
|
||||||
pv2AndStorage_261
|
pv2AndStorage_261
|
||||||
|
|
||||||
},
|
},
|
||||||
props: {},
|
props: {},
|
||||||
data() {
|
data() {
|
||||||
|
|||||||
@ -6,7 +6,9 @@
|
|||||||
<img :src="logo">
|
<img :src="logo">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="title">Zetatech smart energy storage management platform</div>
|
<div class="title">
|
||||||
|
智慧储能管控平台
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-form
|
<el-form
|
||||||
ref="loginForm"
|
ref="loginForm"
|
||||||
@ -23,7 +25,7 @@
|
|||||||
<el-input
|
<el-input
|
||||||
ref="username"
|
ref="username"
|
||||||
v-model="loginForm.username"
|
v-model="loginForm.username"
|
||||||
placeholder="username"
|
placeholder="账号"
|
||||||
name="username"
|
name="username"
|
||||||
type="text"
|
type="text"
|
||||||
tabindex="1"
|
tabindex="1"
|
||||||
@ -46,7 +48,7 @@
|
|||||||
ref="password"
|
ref="password"
|
||||||
v-model="loginForm.password"
|
v-model="loginForm.password"
|
||||||
:type="passwordType"
|
:type="passwordType"
|
||||||
placeholder="password"
|
placeholder="密码"
|
||||||
name="password"
|
name="password"
|
||||||
tabindex="2"
|
tabindex="2"
|
||||||
autocomplete="on"
|
autocomplete="on"
|
||||||
@ -68,7 +70,7 @@
|
|||||||
class="login-btn"
|
class="login-btn"
|
||||||
@click.native.prevent="handleLogin"
|
@click.native.prevent="handleLogin"
|
||||||
>
|
>
|
||||||
Login
|
登录
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- <div class="forget-psd">
|
<!-- <div class="forget-psd">
|
||||||
<lang-select class="set-language" />
|
<lang-select class="set-language" />
|
||||||
@ -104,7 +106,7 @@
|
|||||||
<script>
|
<script>
|
||||||
// import LangSelect from '@/components/LangSelect'
|
// import LangSelect from '@/components/LangSelect'
|
||||||
import SocialSign from './components/SocialSignin'
|
import SocialSign from './components/SocialSignin'
|
||||||
import logo from '@/assets/login_images/zetatechlogo.png'
|
import logo from '@/assets/login_images/zhongzilogo.png'
|
||||||
|
|
||||||
// import { validURL } from '@/utils/validate'
|
// import { validURL } from '@/utils/validate'
|
||||||
export default {
|
export default {
|
||||||
@ -335,7 +337,7 @@ $light_gray: #eee;
|
|||||||
|
|
||||||
.login-content {
|
.login-content {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
max-width: 355px;
|
max-width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
@ -344,7 +346,7 @@ $light_gray: #eee;
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
// box-shadow: rgba(0, 0, 0, 0.15) 0px 15px 25px, rgba(0, 0, 0, 0.05) 0px 5px 10px;
|
// box-shadow: rgba(0, 0, 0, 0.15) 0px 15px 25px, rgba(0, 0, 0, 0.05) 0px 5px 10px;
|
||||||
.title-container {
|
.title-container {
|
||||||
// width: 100%;
|
width: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
.logo {
|
.logo {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -356,9 +358,9 @@ $light_gray: #eee;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 1.5rem;
|
font-size: 2rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin: 30px 0 40px;
|
margin: 30px 20px 40px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
letter-spacing: 5px;
|
letter-spacing: 5px;
|
||||||
}
|
}
|
||||||
@ -380,7 +382,7 @@ $light_gray: #eee;
|
|||||||
.login-form-item {
|
.login-form-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
margin-bottom: 25px;
|
margin-bottom: 20px;
|
||||||
::v-deep .el-form-item__content {
|
::v-deep .el-form-item__content {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="center-bottom-warp">
|
<div class="center-bottom-warp">
|
||||||
<item :title="$t('screen.chargeDischargeComparison')">
|
<item :title="'日充放电对比'">
|
||||||
<dv-loading v-if="Loading">Loading...</dv-loading>
|
<dv-loading v-if="Loading">Loading...</dv-loading>
|
||||||
<Chart v-else :options="options" />
|
<Chart v-else :options="options" />
|
||||||
</item>
|
</item>
|
||||||
@ -20,11 +20,6 @@ export default {
|
|||||||
Loading: true
|
Loading: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
|
||||||
lang() {
|
|
||||||
return this.$store.getters.language
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
created() {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -67,8 +62,8 @@ export default {
|
|||||||
right: 30,
|
right: 30,
|
||||||
itemWidth: 14,
|
itemWidth: 14,
|
||||||
data: [
|
data: [
|
||||||
{ icon: 'image://' + dayChargeIcon, name: this.$t('screen.charge') },
|
{ icon: 'image://' + dayChargeIcon, name: '充电' },
|
||||||
{ icon: 'image://' + dayDischargeIcon, name: this.$t('screen.discharge') }
|
{ icon: 'image://' + dayDischargeIcon, name: '放电' }
|
||||||
]
|
]
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -134,7 +129,7 @@ export default {
|
|||||||
|
|
||||||
// 柱体
|
// 柱体
|
||||||
{
|
{
|
||||||
name: this.$t('screen.charge'),
|
name: '充电',
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
|
|
||||||
barGap: '20%',
|
barGap: '20%',
|
||||||
@ -162,7 +157,7 @@ export default {
|
|||||||
data: dayCharge
|
data: dayCharge
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: this.$t('screen.discharge'),
|
name: '放电',
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
barGap: '20%',
|
barGap: '20%',
|
||||||
barCategoryGap: '50%', /* 多个并排柱子设置柱子之间的间距*/
|
barCategoryGap: '50%', /* 多个并排柱子设置柱子之间的间距*/
|
||||||
@ -194,7 +189,7 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.options = {
|
this.options = {
|
||||||
title: {
|
title: {
|
||||||
text: this.$t('screen.noData'),
|
text: '暂无数据',
|
||||||
x: 'center',
|
x: 'center',
|
||||||
y: 'center',
|
y: 'center',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
|
|||||||
@ -3,40 +3,53 @@
|
|||||||
<div class="income">
|
<div class="income">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span class="square" />
|
<span class="square" />
|
||||||
<span>{{ $t('screen.yesEarning') }}</span>
|
<span>昨日收益</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<template v-for="(item,index) in info.yestProfit">
|
<template v-for="(item,index) in info.yestProfit">
|
||||||
<div :key="index" class="number">{{ item }}</div>
|
<div :key="index" class="number">{{ item }}</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="unit">{{ $t('screen.mRMB') }}</div>
|
<div class="unit">万元</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="income">
|
<div class="income">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span class="square" />
|
<span class="square" />
|
||||||
<span>{{ $t('screen.annualEarning') }}</span>
|
<span>年收益</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<template v-for="(item,index) in info.yearProfit">
|
<template v-for="(item,index) in info.yearProfit">
|
||||||
<div :key="index" class="number">{{ item }}</div>
|
<div :key="index" class="number">{{ item }}</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="unit">{{ $t('screen.mRMB') }}</div>
|
<div class="unit">万元</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="income">
|
<div class="income">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span class="square" />
|
<span class="square" />
|
||||||
<span>{{ $t('screen.totalEarning') }}</span>
|
<span>总收益</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<template v-for="(item,index) in info.totalProfit">
|
<template v-for="(item,index) in info.totalProfit">
|
||||||
<div :key="index" class="number">{{ item }}</div>
|
<div :key="index" class="number">{{ item }}</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="unit">{{ $t('screen.mRMB') }}</div>
|
<div class="unit">万元</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="income today-income">
|
||||||
|
<div class="title">
|
||||||
|
<span class="square" />
|
||||||
|
<span>今日实时收益</span>
|
||||||
|
</div>
|
||||||
|
<div class="value">
|
||||||
|
<template v-for="(item,index) in info.todayProfit">
|
||||||
|
<div :key="index" class="number">{{ item }}</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<div class="unit">元</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -73,10 +86,12 @@ export default {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
.today-income{
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
.income {
|
.income {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding-top: 15px;
|
|
||||||
z-index: 99999;
|
z-index: 99999;
|
||||||
.title {
|
.title {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="left-bottom-warp">
|
<div class="left-bottom-warp">
|
||||||
<item :title="$t('screen.energySaving')">
|
<item title="节能减排">
|
||||||
<dv-loading v-if="loading">Loading...</dv-loading>
|
<dv-loading v-if="loading">Loading...</dv-loading>
|
||||||
<div v-else class="top-all-box">
|
<div v-else class="top-all-box">
|
||||||
<div class="top-con-box">
|
<div class="top-con-box">
|
||||||
<div class="top-item-box">
|
<div class="top-item-box">
|
||||||
<div class="data">{{ info.treePlanting }}<span class="unit">{{ $t('screen.tree') }}</span></div>
|
<div class="data">{{ info.treePlanting }}<span class="unit">棵</span></div>
|
||||||
<div class="title">{{ $t('screen.planted') }}</div>
|
<div class="title">等效植树量</div>
|
||||||
<img :src="screenItemBg" class="item-bg-img">
|
<img :src="screenItemBg" class="item-bg-img">
|
||||||
</div>
|
</div>
|
||||||
<div class="top-item-box">
|
<div class="top-item-box">
|
||||||
<div class="data">{{ info.reductionCO2 | kgFormat }}<span class="unit">{{ info.reductionCO2 | KgUnitFormat }}</span></div>
|
<div class="data">{{ info.reductionCO2 | kgFormat }}<span class="unit">{{ info.reductionCO2 | KgUnitFormat }}</span></div>
|
||||||
<div class="title">{{ $t('screen.co2') }}</div>
|
<div class="title">等效CO2减排</div>
|
||||||
<img :src="screenItemBg" class="item-bg-img">
|
<img :src="screenItemBg" class="item-bg-img">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -19,12 +19,12 @@
|
|||||||
<div class="top-con-box">
|
<div class="top-con-box">
|
||||||
<div class="top-item-box">
|
<div class="top-item-box">
|
||||||
<div class="data">{{ info.equivalentCoal | kgFormat }}<span class="unit">{{ info.equivalentCoal | KgUnitFormat }}</span></div>
|
<div class="data">{{ info.equivalentCoal | kgFormat }}<span class="unit">{{ info.equivalentCoal | KgUnitFormat }}</span></div>
|
||||||
<div class="title">{{ $t('screen.coal') }}</div>
|
<div class="title">等效节约煤</div>
|
||||||
<img :src="screenItemBg" class="item-bg-img">
|
<img :src="screenItemBg" class="item-bg-img">
|
||||||
</div>
|
</div>
|
||||||
<div class="top-item-box">
|
<div class="top-item-box">
|
||||||
<div class="data">{{ info.income | moneyFormat }}<span class="unit">{{ info.income | moneyUnitFormat }}</span></div>
|
<div class="data">{{ info.income | moneyFormat }}<span class="unit">{{ info.income | moneyUnitFormat }}</span></div>
|
||||||
<div class="title">{{ $t('screen.income') }}</div>
|
<div class="title">等效经济收入</div>
|
||||||
<img :src="screenItemBg" class="item-bg-img">
|
<img :src="screenItemBg" class="item-bg-img">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -57,7 +57,9 @@ export default {
|
|||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
|
||||||
async getData(deptId) {
|
async getData(deptId) {
|
||||||
try {
|
try {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="left-center-warp">
|
<div class="left-center-warp">
|
||||||
|
|
||||||
<item :title="$t('screen.regionStation')">
|
<item :title="'电站区域分布'">
|
||||||
<dv-loading v-if="loading">Loading...</dv-loading>
|
<dv-loading v-if="loading">Loading...</dv-loading>
|
||||||
<div v-else class="chart-box">
|
<div v-else class="chart-box">
|
||||||
<Chart :options="options" :class-name="'chart'" />
|
<Chart :options="options" :class-name="'chart'" />
|
||||||
@ -54,7 +54,7 @@ export default {
|
|||||||
const count = this.arrCount(ydata)
|
const count = this.arrCount(ydata)
|
||||||
this.options = {
|
this.options = {
|
||||||
title: [{
|
title: [{
|
||||||
text: this.$t('screen.totalStation'),
|
text: '电站总数',
|
||||||
subtext: count,
|
subtext: count,
|
||||||
|
|
||||||
subtextStyle: {
|
subtextStyle: {
|
||||||
|
|||||||
@ -1,78 +1,46 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="left-top-warp">
|
<div class="left-top-warp">
|
||||||
<item :title="$t('screen.groupData')">
|
<item>
|
||||||
<dv-loading v-if="loading">Loading...</dv-loading>
|
<dv-loading v-if="loading">Loading...</dv-loading>
|
||||||
<div v-else class="top-all-box">
|
<div v-else class="top-all-box">
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.capacity')" placement="top">
|
<div class="title">装机容量</div>
|
||||||
<div class="title">{{ $t('screen.capacity') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.capacity |kwhFormat" placement="top">
|
|
||||||
<div class="value">{{ info.capacity |kwhFormat }}</div>
|
<div class="value">{{ info.capacity |kwhFormat }}</div>
|
||||||
</el-tooltip>
|
|
||||||
<div class="unit">{{ info.capacity | kwhUnitFormat }}</div>
|
<div class="unit">{{ info.capacity | kwhUnitFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.stationNum')" placement="top">
|
<div class="title">电站个数</div>
|
||||||
<div class="title">{{ $t('screen.stationNum') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.stationNumber" placement="top">
|
|
||||||
<div class="value">{{ info.stationNumber }}</div>
|
<div class="value">{{ info.stationNumber }}</div>
|
||||||
</el-tooltip>
|
<div class="unit">个</div>
|
||||||
<div class="unit">{{ lang === 'zh'? '个':'' }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.dailyCharge')" placement="top">
|
<div class="title">{{ $t('dashboard.dailyCharge') }}</div>
|
||||||
<div class="title">{{ $t('screen.dailyCharge') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.dayCharge |kwhFormat" placement="top">
|
|
||||||
<div class="value">{{ info.dayCharge |kwhFormat }}</div>
|
<div class="value">{{ info.dayCharge |kwhFormat }}</div>
|
||||||
</el-tooltip>
|
|
||||||
<div class="unit">{{ info.dayCharge |kwhUnitFormat }}</div>
|
<div class="unit">{{ info.dayCharge |kwhUnitFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.dailyDischarge')" placement="top">
|
<div class="title">{{ $t('dashboard.dailyDischarge') }}</div>
|
||||||
<div class="title">{{ $t('screen.dailyDischarge') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.dayDischarge |kwhFormat" placement="top">
|
|
||||||
<div class="value">{{ info.dayDischarge |kwhFormat }}</div>
|
<div class="value">{{ info.dayDischarge |kwhFormat }}</div>
|
||||||
</el-tooltip>
|
|
||||||
<div class="unit">{{ info.dayDischarge |kwhUnitFormat }}</div>
|
<div class="unit">{{ info.dayDischarge |kwhUnitFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.yearCharge')" placement="top">
|
<div class="title">年充电量</div>
|
||||||
<div class="title">{{ $t('screen.yearCharge') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.yearCharge |kwhFormat" placement="top">
|
|
||||||
<div class="value">{{ info.yearCharge |kwhFormat }}</div>
|
<div class="value">{{ info.yearCharge |kwhFormat }}</div>
|
||||||
</el-tooltip>
|
|
||||||
<div class="unit">{{ info.yearCharge |kwhUnitFormat }}</div>
|
<div class="unit">{{ info.yearCharge |kwhUnitFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.yearDisCharge')" placement="top">
|
<div class="title">年放电量</div>
|
||||||
<div class="title">{{ $t('screen.yearDisCharge') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.yearDischarge |kwhFormat" placement="top">
|
|
||||||
<div class="value">{{ info.yearDischarge |kwhFormat }}</div>
|
<div class="value">{{ info.yearDischarge |kwhFormat }}</div>
|
||||||
</el-tooltip>
|
|
||||||
<div class="unit">{{ info.yearDischarge |kwhUnitFormat }}</div>
|
<div class="unit">{{ info.yearDischarge |kwhUnitFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.totalCharge')" placement="top">
|
<div class="title">总充电量</div>
|
||||||
<div class="title">{{ $t('screen.totalCharge') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.totalCharge |kwhFormat" placement="top">
|
|
||||||
<div class="value">{{ info.totalCharge |kwhFormat }}</div>
|
<div class="value">{{ info.totalCharge |kwhFormat }}</div>
|
||||||
</el-tooltip>
|
|
||||||
<div class="unit">{{ info.totalCharge |kwhUnitFormat }}</div>
|
<div class="unit">{{ info.totalCharge |kwhUnitFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-box">
|
<div class="value-box">
|
||||||
<el-tooltip class="item" effect="dark" :content="$t('screen.totalDisCharge')" placement="top">
|
<div class="title">{{ $t('dashboard.totalDischarge') }}</div>
|
||||||
<div class="title">{{ $t('screen.totalDisCharge') }}</div>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip class="item" effect="dark" :content="info.totalDischarge |kwhFormat" placement="top">
|
|
||||||
<div class="value">{{ info.totalDischarge |kwhFormat }}</div>
|
<div class="value">{{ info.totalDischarge |kwhFormat }}</div>
|
||||||
</el-tooltip>
|
|
||||||
<div class="unit">{{ info.totalDischarge |kwhUnitFormat }}</div>
|
<div class="unit">{{ info.totalDischarge |kwhUnitFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -96,14 +64,10 @@ export default {
|
|||||||
loading: true
|
loading: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
|
||||||
lang() {
|
|
||||||
return this.$store.getters.language
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
watch: {
|
||||||
info: {
|
info: {
|
||||||
handler(val) {
|
handler(val) {
|
||||||
|
console.log(1111, val)
|
||||||
if (val) {
|
if (val) {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
} else {
|
} else {
|
||||||
@ -151,10 +115,6 @@ export default {
|
|||||||
|
|
||||||
.title{
|
.title{
|
||||||
color: rgba(179, 221, 253, 1);
|
color: rgba(179, 221, 253, 1);
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
min-width: 90px;
|
|
||||||
max-width: 90px;
|
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,9 +14,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
// import chinaMap from '@/assets/mapJson/chinaMap.json'
|
import chinaMap from '@/assets/mapJson/chinaMap.json'
|
||||||
import worldJson from 'echarts/map/json/world.json'
|
import { chinaMapOutline } from '@/assets/mapJson/chinaMapOut.js'
|
||||||
// import { chinaMapOutline } from '@/assets/mapJson/chinaMapOut.js'
|
|
||||||
import blue from '../../../assets/new-screen/map-blue.png'
|
import blue from '../../../assets/new-screen/map-blue.png'
|
||||||
import { GetStationInfo, GetCapacity, GetRegionalDistribution } from '@/api/screen/zzScreen'
|
import { GetStationInfo, GetCapacity, GetRegionalDistribution } from '@/api/screen/zzScreen'
|
||||||
export default {
|
export default {
|
||||||
@ -81,14 +80,14 @@ export default {
|
|||||||
const province = []
|
const province = []
|
||||||
if (data.length) {
|
if (data.length) {
|
||||||
data.forEach((el) => {
|
data.forEach((el) => {
|
||||||
el.value = [el.longitude, el.latitude]
|
el.value = [el.latitude, el.longitude]
|
||||||
el.symbol = 'image://' + blue
|
el.symbol = 'image://' + blue
|
||||||
el.cityCode = 1000
|
el.cityCode = 1000
|
||||||
province.push(el)
|
province.push(el)
|
||||||
})
|
})
|
||||||
this.pointData = province
|
this.pointData = province
|
||||||
} else {
|
} else {
|
||||||
this.pointData = [{ symbol: 'image://' + blue, cityCode: 1000, value: [30.787045, 103.923008], name: 'Sichuan' }]
|
this.pointData = [{ symbol: 'image://' + blue, cityCode: 1000, value: [118.8062, 31.9208], name: '江苏' }]
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
@ -96,14 +95,15 @@ export default {
|
|||||||
this.getInitMap()
|
this.getInitMap()
|
||||||
},
|
},
|
||||||
getInitMap() {
|
getInitMap() {
|
||||||
this.$echarts.registerMap('world', worldJson)
|
this.$echarts.registerMap('china', chinaMap)
|
||||||
|
this.$echarts.registerMap('chinaMapOutline', chinaMapOutline)
|
||||||
|
|
||||||
var series = [
|
var series = [
|
||||||
{
|
{
|
||||||
name: '国家',
|
map: 'china',
|
||||||
map: 'world',
|
|
||||||
type: 'map',
|
type: 'map',
|
||||||
roam: false,
|
roam: false,
|
||||||
zoom: 1.1,
|
zoom: 1.65,
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
show: false,
|
show: false,
|
||||||
@ -117,7 +117,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
top: '10%',
|
top: '29%',
|
||||||
tooltip: {
|
tooltip: {
|
||||||
show: false
|
show: false
|
||||||
},
|
},
|
||||||
@ -150,14 +150,14 @@ export default {
|
|||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#F4E925',
|
color: '#F4E925',
|
||||||
|
|
||||||
shadowColor: '#333'
|
shadowColor: '#333'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
symbolSize: 24,
|
symbolSize: 50,
|
||||||
symbolOffset: [0, '-50%'], // 或 [0, -12] 更精确
|
data: [this.pointData[this.pointIndex]]
|
||||||
data: [this.pointData[this.pointIndex]],
|
|
||||||
|
|
||||||
showEffectOn: 'render' // 加载完毕显示特效
|
// showEffectOn: 'render' // 加载完毕显示特效
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ export default {
|
|||||||
max: Math.max(...this.stationNum),
|
max: Math.max(...this.stationNum),
|
||||||
right: 'right',
|
right: 'right',
|
||||||
top: 'bottom',
|
top: 'bottom',
|
||||||
text: [this.$t('screen.high') + '(' + this.$t('screen.stationNum') + ')', this.$t('screen.low') + '(' + this.$t('screen.stationNum') + ')'],
|
text: ['高(电站个数)', '低(电站个数)'],
|
||||||
calculable: true,
|
calculable: true,
|
||||||
inRange: {
|
inRange: {
|
||||||
// color: ['#5edfd6', '#37d4cf', '#14c9c9', '#0da5aa', '#07828b']
|
// color: ['#5edfd6', '#37d4cf', '#14c9c9', '#0da5aa', '#07828b']
|
||||||
@ -187,25 +187,25 @@ export default {
|
|||||||
trigger: 'item',
|
trigger: 'item',
|
||||||
alwaysShowContent: true,
|
alwaysShowContent: true,
|
||||||
backgroundColor: 'transparent',
|
backgroundColor: 'transparent',
|
||||||
position: 'bottom',
|
position: 'top',
|
||||||
triggerOn: 'click',
|
triggerOn: 'click',
|
||||||
enterable: true,
|
enterable: true,
|
||||||
formatter: params => {
|
formatter: params => {
|
||||||
// 获取xAxis data中的数据
|
// 获取xAxis data中的数据
|
||||||
let dataStr = `<div></div>`
|
let dataStr = `<div></div>`
|
||||||
dataStr += `<div>
|
dataStr += `<div>
|
||||||
<span style="padding-left:20px;font-weight:bold;margin-left:20px;margin-top:5px;font-size="14px">${params.name}</span>
|
<span style="padding-left:10px;font-weight:bold;margin-left:20px;margin-top:5px;font-size="14px">${params.name}</span>
|
||||||
</div>`
|
</div>`
|
||||||
dataStr += `<div style="margin-top:15px">
|
dataStr += `<div style="margin-top:15px">
|
||||||
<span style="padding-left:10px;">${this.$t('screen.comTime')}</span>
|
<span style="padding-left:10px;">投运时间</span>
|
||||||
<span style="margin-left:5px;margin-right:10px;color:rgba(245, 221, 0, 1);font-family:DIN;">${params.data.createTime}</span>
|
<span style="margin-left:5px;margin-right:10px;color:rgba(245, 221, 0, 1);font-family:DIN;">${params.data.createTime}</span>
|
||||||
</div>`
|
</div>`
|
||||||
dataStr += `<div style="margin-top:2px;">
|
dataStr += `<div style="margin-top:2px;">
|
||||||
<span style="padding-left:10px;">${this.$t('screen.capacity')}</span>
|
<span style="padding-left:10px;">装机容量</span>
|
||||||
<span style="margin-left:5px;margin-right:5px;color:rgba(245, 221, 0, 1);font-family:DIN;">${params.data.capacity}</span>
|
<span style="margin-left:5px;margin-right:5px;color:rgba(245, 221, 0, 1);font-family:DIN;">${params.data.capacity}</span>
|
||||||
<span style="color:rgba(245, 221, 0, 1);">kWh</span>
|
<span style="color:rgba(245, 221, 0, 1);">kWh</span>
|
||||||
</div>`
|
</div>`
|
||||||
const div = `<div style='height:85px;
|
const div = `<div style='max-width:220px;height:85px;
|
||||||
background-image:url(${require('../../../assets/new-screen/tooltip-bg.png')});background-repeat: no-repeat;background-size:100% 100%;' >${dataStr}</div>`
|
background-image:url(${require('../../../assets/new-screen/tooltip-bg.png')});background-repeat: no-repeat;background-size:100% 100%;' >${dataStr}</div>`
|
||||||
return div
|
return div
|
||||||
}
|
}
|
||||||
@ -214,8 +214,10 @@ export default {
|
|||||||
geo: [
|
geo: [
|
||||||
{
|
{
|
||||||
silent: true,
|
silent: true,
|
||||||
map: 'world',
|
map: 'chinaMapOutline',
|
||||||
|
|
||||||
zoom: 1.1,
|
zoom: 1.1,
|
||||||
|
top: '10%',
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
show: false,
|
show: false,
|
||||||
@ -253,7 +255,8 @@ export default {
|
|||||||
{
|
{
|
||||||
silent: true,
|
silent: true,
|
||||||
map: 'chinaMapOutline',
|
map: 'chinaMapOutline',
|
||||||
zoom: 1.2,
|
|
||||||
|
zoom: 1.1,
|
||||||
top: '7%',
|
top: '7%',
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="left-bottom-warp">
|
<div class="left-bottom-warp">
|
||||||
|
|
||||||
<item :title="$t('screen.sysEff')">
|
<item title="系统转换效率">
|
||||||
<dv-loading v-if="tableLoading">Loading...</dv-loading>
|
<dv-loading v-if="tableLoading">Loading...</dv-loading>
|
||||||
<div v-else class="con-box">
|
<div v-else class="con-box">
|
||||||
<SwiperTable
|
<SwiperTable
|
||||||
@ -27,9 +27,9 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tableLoading: false,
|
tableLoading: false,
|
||||||
tableTitles: [this.$t('screen.stationName'), this.$t('screen.cap'), this.$t('screen.Eff')],
|
tableTitles: ['电站名称', '容量(kWh)', '转换效率(%)'],
|
||||||
tableData: [],
|
tableData: [],
|
||||||
widths: ['auto', 'auto', 'auto', 'auto'],
|
widths: ['200', 'auto', 'auto', 'auto'],
|
||||||
contentHeight: 200,
|
contentHeight: 200,
|
||||||
tableColumns: [
|
tableColumns: [
|
||||||
'stationName',
|
'stationName',
|
||||||
@ -66,8 +66,5 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.class1{
|
|
||||||
color: #F4E925;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="right-top-warp">
|
<div class="right-top-warp">
|
||||||
<item :title="$t('screen.earningRanking')">
|
<item :title="'充放收益排名'">
|
||||||
<dv-loading v-if="tableLoading">Loading...</dv-loading>
|
<dv-loading v-if="tableLoading">Loading...</dv-loading>
|
||||||
<div v-else class="con-box">
|
<div v-else class="con-box">
|
||||||
<SwiperTableCenter
|
<SwiperTableCenter
|
||||||
@ -47,7 +47,7 @@ export default {
|
|||||||
})
|
})
|
||||||
this.tableData = res.data
|
this.tableData = res.data
|
||||||
this.tableData.map((el) => {
|
this.tableData.map((el) => {
|
||||||
el.incomeValue = el.incomeValue + ' ' + this.$t('screen.mRMB')
|
el.incomeValue = el.incomeValue + '万元'
|
||||||
})
|
})
|
||||||
} finally {
|
} finally {
|
||||||
this.tableLoading = false
|
this.tableLoading = false
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="right-top-warp">
|
<div class="right-top-warp">
|
||||||
<item :title="$t('screen.groupEarning')">
|
<item title="集团收益">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="button-box">
|
<div class="button-box">
|
||||||
<el-tabs
|
<el-tabs
|
||||||
@ -8,9 +8,9 @@
|
|||||||
tab-position="top"
|
tab-position="top"
|
||||||
@tab-click="handleClick"
|
@tab-click="handleClick"
|
||||||
>
|
>
|
||||||
<el-tab-pane :label="$t('screen.daily30')" name="day" />
|
<el-tab-pane label="近30天" name="day" />
|
||||||
<el-tab-pane :label="$t('screen.monthly')" name="month" />
|
<el-tab-pane label="月度" name="month" />
|
||||||
<el-tab-pane :label="$t('screen.yearly')" name="year" />
|
<el-tab-pane label="年度" name="year" />
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
<div class="chart-box">
|
<div class="chart-box">
|
||||||
@ -108,7 +108,7 @@ export default {
|
|||||||
yAxis: [
|
yAxis: [
|
||||||
{
|
{
|
||||||
type: 'value',
|
type: 'value',
|
||||||
name: this.$t('screen.mRMB'),
|
name: '万元',
|
||||||
nameTextStyle: {
|
nameTextStyle: {
|
||||||
color: '#6E7174',
|
color: '#6E7174',
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
@ -137,7 +137,7 @@ export default {
|
|||||||
],
|
],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: this.$t('screen.earning'),
|
name: '收益',
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: profit_data,
|
data: profit_data,
|
||||||
smooth: true,
|
smooth: true,
|
||||||
@ -176,7 +176,7 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.options = {
|
this.options = {
|
||||||
title: {
|
title: {
|
||||||
text: this.$t('screen.noData'),
|
text: '暂无数据',
|
||||||
x: 'center',
|
x: 'center',
|
||||||
y: 'center',
|
y: 'center',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
|
|||||||
@ -6,14 +6,17 @@
|
|||||||
<!-- 头部 s -->
|
<!-- 头部 s -->
|
||||||
<div class="title_wrap">
|
<div class="title_wrap">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span :class="lang === 'zh'? 'left-title' : 'left-title-en'" />
|
<span class="left-title" />
|
||||||
<span :class="lang === 'zh'? 'title-text' : 'en-eitle-text'">{{ $t('screen.ztscreenTitle') }}</span>
|
<span class="title-text">中自智慧储能管控平台</span>
|
||||||
<div class="right-title">
|
<div class="right-title">
|
||||||
<span>{{ time }}</span>
|
<span>{{ time }}</span>
|
||||||
<!-- <span class="weather">{{ weatherInfo ? weatherInfo.skyCon : '' }} {{ weatherInfo? weatherInfo.minTemperature :'' }}℃ ~ {{ weatherInfo ? weatherInfo.maxTemperature : '' }}℃</span> -->
|
<span class="weather">{{ weatherInfo ? weatherInfo.skyCon : '' }} {{ weatherInfo? weatherInfo.minTemperature :'' }}℃ ~ {{ weatherInfo ? weatherInfo.maxTemperature : '' }}℃</span>
|
||||||
</div>
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="left-top">
|
<div class="left-top">
|
||||||
@ -82,10 +85,12 @@ export default {
|
|||||||
leftBottomInfo: null,
|
leftBottomInfo: null,
|
||||||
deptId: null,
|
deptId: null,
|
||||||
interval: null,
|
interval: null,
|
||||||
|
intervalTodayIncome: null,
|
||||||
centerTopInfo: {
|
centerTopInfo: {
|
||||||
totalProfit: 0,
|
totalProfit: 0,
|
||||||
yearProfit: 0,
|
yearProfit: 0,
|
||||||
yestProfit: 0
|
yestProfit: 0,
|
||||||
|
todayProfit: 0
|
||||||
},
|
},
|
||||||
weatherInfo: {
|
weatherInfo: {
|
||||||
skyCon: '',
|
skyCon: '',
|
||||||
@ -94,11 +99,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
|
||||||
lang() {
|
|
||||||
return this.$store.getters.language
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
created() {
|
||||||
this.changeFavicon(`./zhongzi.ico`)
|
this.changeFavicon(`./zhongzi.ico`)
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
@ -110,7 +110,9 @@ export default {
|
|||||||
},
|
},
|
||||||
destroyed() {
|
destroyed() {
|
||||||
clearInterval(this.interval)
|
clearInterval(this.interval)
|
||||||
|
clearInterval(this.intervalTodayIncome)
|
||||||
this.interval = null
|
this.interval = null
|
||||||
|
this.intervalTodayIncome = null
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 修改Favicon的方法
|
// 修改Favicon的方法
|
||||||
@ -144,12 +146,53 @@ export default {
|
|||||||
this.$refs.RightTopRef.getData(this.deptId)
|
this.$refs.RightTopRef.getData(this.deptId)
|
||||||
this.$refs.RightCenterRef.getData(this.deptId)
|
this.$refs.RightCenterRef.getData(this.deptId)
|
||||||
this.$refs.RightRightRef.getData(this.deptId)
|
this.$refs.RightRightRef.getData(this.deptId)
|
||||||
// this.getWeatherInfo() 国外大屏不展示天气
|
this.getWeatherInfo()
|
||||||
this.$refs.MapCenterRef.getStationNum(this.deptId)
|
this.$refs.MapCenterRef.getStationNum(this.deptId)
|
||||||
this.$refs.MapCenterRef.getData(this.deptId)
|
this.$refs.MapCenterRef.getData(this.deptId)
|
||||||
this.$refs.MapCenterRef.getLeftData(this.deptId)
|
this.$refs.MapCenterRef.getLeftData(this.deptId)
|
||||||
|
|
||||||
this.$refs.CenterBottomRef.getData(this.deptId)
|
this.$refs.CenterBottomRef.getData(this.deptId)
|
||||||
|
// const res = await GetOverviewData({
|
||||||
|
// deptId: this.deptId
|
||||||
|
// })
|
||||||
|
// this.leftTopInfo = {
|
||||||
|
// capacity: res.data.capacity,
|
||||||
|
// stationNumber: res.data.stationNumber,
|
||||||
|
// yearCharge: res.data.yearCharge,
|
||||||
|
// yearDischarge: res.data.yearDischarge,
|
||||||
|
// totalCharge: res.data.totalCharge,
|
||||||
|
// totalDischarge: res.data.totalDischarge,
|
||||||
|
// dayCharge: res.data.dayCharge,
|
||||||
|
// dayDischarge: res.data.dayDischarge
|
||||||
|
// }
|
||||||
|
// this.centerTopInfo = {
|
||||||
|
// totalProfit: (Number(res.data.totalProfit) / 1E4).toFixed(2),
|
||||||
|
// yearProfit: (Number(res.data.yearProfit) / 1E4).toFixed(2),
|
||||||
|
// yestProfit: (Number(res.data.yestProfit) / 1E4).toFixed(2),
|
||||||
|
// todayProfit: Number(res.data.todayProfit).toFixed(2)
|
||||||
|
// }
|
||||||
|
} catch (err) {
|
||||||
|
// this.leftTopInfo = {
|
||||||
|
// capacity: 0,
|
||||||
|
// stationNumber: 0,
|
||||||
|
// yearCharge: 0,
|
||||||
|
// yearDischarge: 0,
|
||||||
|
// totalCharge: 0,
|
||||||
|
// totalDischarge: 0,
|
||||||
|
// dayCharge: 0,
|
||||||
|
// dayDischarge: 0
|
||||||
|
// }
|
||||||
|
// this.centerTopInfo = {
|
||||||
|
// totalProfit: 0,
|
||||||
|
// yearProfit: 0,
|
||||||
|
// yestProfit: 0,
|
||||||
|
// todayProfit: 0
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async getDataIncome() {
|
||||||
|
try {
|
||||||
const res = await GetOverviewData({
|
const res = await GetOverviewData({
|
||||||
deptId: this.deptId
|
deptId: this.deptId
|
||||||
})
|
})
|
||||||
@ -163,11 +206,11 @@ export default {
|
|||||||
dayCharge: res.data.dayCharge,
|
dayCharge: res.data.dayCharge,
|
||||||
dayDischarge: res.data.dayDischarge
|
dayDischarge: res.data.dayDischarge
|
||||||
}
|
}
|
||||||
|
|
||||||
this.centerTopInfo = {
|
this.centerTopInfo = {
|
||||||
totalProfit: (Number(res.data.totalProfit) / 1E4).toFixed(2),
|
totalProfit: (Number(res.data.totalProfit) / 1E4).toFixed(2),
|
||||||
yearProfit: (Number(res.data.yearProfit) / 1E4).toFixed(2),
|
yearProfit: (Number(res.data.yearProfit) / 1E4).toFixed(2),
|
||||||
yestProfit: (Number(res.data.yestProfit) / 1E4).toFixed(2)
|
yestProfit: (Number(res.data.yestProfit) / 1E4).toFixed(2),
|
||||||
|
todayProfit: Number(res.data.todayProfit).toFixed(2)
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.leftTopInfo = {
|
this.leftTopInfo = {
|
||||||
@ -183,7 +226,8 @@ export default {
|
|||||||
this.centerTopInfo = {
|
this.centerTopInfo = {
|
||||||
totalProfit: 0,
|
totalProfit: 0,
|
||||||
yearProfit: 0,
|
yearProfit: 0,
|
||||||
yestProfit: 0
|
yestProfit: 0,
|
||||||
|
todayProfit: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -198,9 +242,13 @@ export default {
|
|||||||
}).then(res => {
|
}).then(res => {
|
||||||
this.deptId = res.data?.deptId
|
this.deptId = res.data?.deptId
|
||||||
this.getData()
|
this.getData()
|
||||||
|
this.getDataIncome()
|
||||||
this.interval = setInterval(() => {
|
this.interval = setInterval(() => {
|
||||||
this.getData()
|
this.getData()
|
||||||
}, 600000)
|
}, 600000)
|
||||||
|
this.intervalTodayIncome = setInterval(() => {
|
||||||
|
this.getDataIncome()
|
||||||
|
}, 10000)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -339,17 +387,7 @@ $margin: 16px;
|
|||||||
left: $margin;
|
left: $margin;
|
||||||
top: 30px;
|
top: 30px;
|
||||||
}
|
}
|
||||||
.left-title-en {
|
|
||||||
width: 200px;
|
|
||||||
height: 52px;
|
|
||||||
background: url(../../assets/new-screen/zhongzien.png) no-repeat;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
color: #fff;
|
|
||||||
font-size: 16px;
|
|
||||||
position: absolute;
|
|
||||||
left: $margin;
|
|
||||||
top: 30px;
|
|
||||||
}
|
|
||||||
.right-title {
|
.right-title {
|
||||||
font-family: LCD;
|
font-family: LCD;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
@ -361,16 +399,7 @@ $margin: 16px;
|
|||||||
margin-left: 16px;
|
margin-left: 16px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.en-eitle-text{
|
|
||||||
font-size: 18px;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
font-weight: 900;
|
|
||||||
width: 100%;
|
|
||||||
background: linear-gradient(92deg, #fff, #fff 48.85254%, #fff);
|
|
||||||
font-family: PangMenNumber;
|
|
||||||
-webkit-background-clip: text;
|
|
||||||
-webkit-text-fill-color: transparent;
|
|
||||||
}
|
|
||||||
.title-text {
|
.title-text {
|
||||||
font-size: 38px;
|
font-size: 38px;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
|
|||||||
@ -77,7 +77,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column width="150" :label="$t('remote.yhxgz')">
|
<el-table-column width="150" :label="$t('remote.yhxgz')">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-input v-model="scope.row.modifyValue" type="number" :placeholder="$t('remote.pleaseInput')" />
|
<el-input v-model="scope.row.modifyValue" type="number" placeholder="请输入" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- <el-table-column width="180" label="站内接入点">
|
<!-- <el-table-column width="180" label="站内接入点">
|
||||||
|
|||||||
@ -1901,12 +1901,12 @@ box-shadow: inset 0px 2px 16px 0px rgba(0, 148, 255, 0.4);' >${dataStr}</div>`
|
|||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
flex: 1;
|
width: 110px;
|
||||||
color: rgba(255, 255, 255, 1);
|
color: rgba(255, 255, 255, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
flex: 0.5;
|
flex: 1;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
color: rgba(0, 148, 255, 1);
|
color: rgba(0, 148, 255, 1);
|
||||||
|
|||||||
@ -41,8 +41,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
|
||||||
<el-form-item :label="$t('surveillance.chargeType') + ':'">
|
<el-form-item :label="$t('surveillance.chargeType') + ':'" label-width="100px">
|
||||||
<el-select v-model="filter.segmentType" placeholder="请选择" @change="changeType">
|
<el-select v-model="filter.segmentType" style="width: 100%;" placeholder="请选择" @change="changeType">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in dateTypeList"
|
v-for="item in dateTypeList"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="realtime-wrapper">
|
<div class="realtime-wrapper">
|
||||||
<el-row class="card-total-box" :gutter="10">
|
<el-row :gutter="10">
|
||||||
<el-col class="card-box" :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<div class="card-total station">
|
<div class="card-total station">
|
||||||
<div class="station-name">{{ panel_data.stationName }}</div>
|
<div class="station-name">{{ panel_data.stationName }}</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="card-box" :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<div class="card-total charge">
|
<div class="card-total charge">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="name">
|
<div class="name">
|
||||||
@ -39,7 +39,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="card-box" :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<div class="card-total discharge">
|
<div class="card-total discharge">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="name">
|
<div class="name">
|
||||||
@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="card-box" :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<div class="card-total earnings">
|
<div class="card-total earnings">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="name">
|
<div class="name">
|
||||||
@ -1055,25 +1055,15 @@ box-shadow: inset 0px 2px 16px 0px rgba(0, 148, 255, 0.4);' >${dataStr}</div>`
|
|||||||
.search-row {
|
.search-row {
|
||||||
margin-top: 10px
|
margin-top: 10px
|
||||||
}
|
}
|
||||||
/* 父容器 el-row 改为 flex 布局,确保列等高 */
|
|
||||||
.card-total-box {
|
|
||||||
display: flex;
|
|
||||||
align-items: stretch; /* 关键:让所有列拉伸至相同高度 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 确保每个 el-col 占满行高 */
|
|
||||||
.card-box {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
.card-total {
|
.card-total {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 138px;
|
height: 138px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
display: flex;
|
display: flex;
|
||||||
position: relative;
|
position: relative;
|
||||||
/* 确保卡片内容撑满高度 */
|
|
||||||
flex-direction: column;
|
|
||||||
.content {
|
.content {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|||||||
@ -6,7 +6,7 @@ function resolve(dir) {
|
|||||||
return path.join(__dirname, dir)
|
return path.join(__dirname, dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
const name = defaultSettings.title || '中自新能源' // page title
|
const name = defaultSettings.title || '弘正新能源' // page title
|
||||||
|
|
||||||
// If your port is set to 80,
|
// If your port is set to 80,
|
||||||
// use administrator privileges to execute the command line.
|
// use administrator privileges to execute the command line.
|
||||||
@ -14,7 +14,7 @@ const name = defaultSettings.title || '中自新能源' // page title
|
|||||||
// You can change the port by the following method:
|
// You can change the port by the following method:
|
||||||
// port = 9527 npm run dev OR npm run dev --port = 9527
|
// port = 9527 npm run dev OR npm run dev --port = 9527
|
||||||
|
|
||||||
const port = process.env.port || process.env.npm_config_port || 9527 // dev port
|
const port = process.env.port || process.env.npm_config_port || 10324 // dev port
|
||||||
|
|
||||||
// All configuration item explanations can be find in https://cli.vuejs.org/config/
|
// All configuration item explanations can be find in https://cli.vuejs.org/config/
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
Reference in New Issue
Block a user