Compare commits

...

14 Commits

Author SHA1 Message Date
a46c4d23bf 解决冲突文件 2025-12-26 13:56:31 +08:00
cbb1d7a8a9 光伏功能逻辑代码及BUG修改 2025-12-26 11:26:40 +08:00
caef804c14 测试 2025-11-07 18:14:05 +08:00
b3608320a8 svg测试演示 2025-11-07 17:21:39 +08:00
c6ea4a8c52 光伏功能 2025-11-07 15:23:08 +08:00
6b4e5cd036 feat: 拓扑图 2025-11-03 13:45:18 +08:00
a1830ec4bf feat: 详情提交 2025-10-30 09:16:28 +08:00
9258bcc0a9 feat: 提交首页 2025-10-29 17:31:26 +08:00
4199ceee48 feat: 测试 2025-10-24 10:53:59 +08:00
d07d6e7ff2 feat: 测试提交 2025-10-24 10:52:27 +08:00
59954beeca 207版本:canvas电流流向功能,海外自定义电价功能 2025-10-10 09:27:34 +08:00
de8e81a5e2 英文版本配置,部分报错问题修复 2025-08-14 14:41:36 +08:00
79d755fbad 海外版本代码,相关配置变更 2025-08-06 16:10:07 +08:00
c9c793e1e3 新建法国巴黎分支 2025-07-11 16:58:37 +08:00
86 changed files with 24285 additions and 2249 deletions

View File

@ -33,6 +33,7 @@ export default {
};
</script>
<style lang="scss">
@import "@/static/scss/init.scss";
@import "uview-ui/index.scss";
page{
background: #f8f8f8;

View File

@ -52,3 +52,6 @@
* <a href="https://uviewui.com/js/intro.html" target="blank">uView JS 文档</a>
####
测试提交11

View File

@ -1,17 +1,17 @@
{
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://ecloud.hoenergypower.cn/app-privacy-zh.html\">《服务协议》</a>和<a href=\"https://ecloud.hoenergypower.cn/app-privacy-zh.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "暂不同意",
"title" : "Service Agreement and Privacy Policy",
"message" : "  Please carefully read and fully understand the terms of the 'Service Agreement' and 'Privacy Policy', including but not limited to: In order to better provide services to you, we need to collect information such as your device identifier and operation logs for analyzing and optimizing application performance.<br/> You can read the <a href=\"https://zetatech.zzkj-cloud.com/app-privacy-en.html\">《Service Agreement》</a> and <a href=\"https://zetatech.zzkj-cloud.com/app-privacy-en.html\">《Privacy Policy》</a> to learn detailed information. If you agree, please click the button below to start accepting our services.",
"buttonAccept" : "Agree and accept",
"buttonRefuse" : "Disagree",
"hrefLoader" : "system",
"backToExit" : "false",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://ecloud.hoenergypower.cn/app-privacy-zh.html\">《服务协议》</a><a href=\"https://ecloud.hoenergypower.cn/app-privacy-zh.html\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
"title" : "confirmation prompt",
"message" : "  Before entering the application, you need to agree to the <a href=\"https://zetatech.zzkj-cloud.com/app-privacy-en.html\">《Service Agreement》</a>and<a href=\"https://zetatech.zzkj-cloud.com/app-privacy-en.html\">《Privacy Policy》</a>, otherwise you will be logged out of the application.",
"buttonAccept" : "Agree and continue",
"buttonRefuse" : "Exit the application"
},
"disagreeMode" : {
"support" : false,

View File

@ -2,7 +2,7 @@
const config = {
// 产品名称
productName: 'Zetatech',
productName: 'Zeta Cloud',
// 公司名称
companyName: 'Zetatech',
@ -22,5 +22,6 @@ const config = {
}
// 设置后台接口服务的基础地址
config.baseUrl = "https://zzkj-cloud.com/api"
config.baseUrl = "https://zetatech.zzkj-cloud.com/api"
// config.baseUrl = 'http://1.95.170.86:8002/api'
export default config

View File

@ -71,8 +71,8 @@ const install = (Vue, vm) => {
vm.$u.post("/business/messageInfo/selectMessageInfo", params),
UpdateMessageStatus: (params = {}) =>
vm.$u.post("/business/messageInfo/updateMessageReadStatus", params),
GetLanguageConfig:(params = {}) =>
GetLanguageConfig: (params = {}) =>
vm.$u.post("/business/station/getTermDictionary", params),
// 个人信息修改
@ -293,7 +293,7 @@ const install = (Vue, vm) => {
// 获取电站配置信息
GetHomePageComponents: (id = {}) =>
vm.$u.post(config.adminPath + `/business/homeConfig/${id}`),
// 充放电量
GetElecData: (params = {}) =>
vm.$u.post(config.adminPath + "/business/openStation/elecData", params),
@ -433,9 +433,9 @@ const install = (Vue, vm) => {
//获取电站下的设备
// GetPageDevice: (params = {}) =>
// vm.$u.post(config.adminPath + "/business/device/appHomePageDevices", params),
//获取光伏发电功率
GetPvCurve: (params = {}) =>
vm.$u.post(config.adminPath + "/business/pcs/pvCurve", params),
GetPageDevice: (params = {}) =>
@ -455,6 +455,9 @@ const install = (Vue, vm) => {
enrnings: {
GetTotal: (params = {}) =>
vm.$u.post(config.adminPath + "/business/earningsCalculate/getTotal", params),
GetPvMonthData: (params = {}) =>
vm.$u.post(config.adminPath + "/business/earningsCalculate/getPvMonthData", params),
},
@ -462,6 +465,9 @@ const install = (Vue, vm) => {
// 查询区域
GetIndustrialElecRegionList: (params = {}) => vm.$u.post(config.adminPath +
"/business/industrialElecRegion/list", params),
/** 查询自定义电价*/
GetCustomElecPricePage: (params = {}) => vm.$u.post(config.adminPath +
"/business/elecPriceCurve/all", params),
/** 查询所有代理电价-分页*/
GetIndustrialElecPricePage: (params = {}) => vm.$u.post(config.adminPath +
"/business/industrialElecPrice/page", params),

View File

@ -1,35 +1,104 @@
export default {
home: {
login: 'Login',
account: 'Account',
password: 'Password',
placeAccount: "Place input account",
placePassword: 'Place input password',
noLogin: 'The feature is not available yet',
loadAmmeter: 'Load Meter',
dieselGeneratorMeter: 'Diesel Meter',
energyStorageMeter: 'Cabinet Meter',
alarmTypeList: [{
name: 'Real-Time Alarm'
}, {
name: 'History Alarm'
}],
lang: 'Switch languages',
ydty: 'Read and agree',
yhxy: 'User Agreement',
and: 'and',
yszc: 'Privacy Policy',
yhxyhyszc: 'User Agreement and Privacy Policy',
msgf: 'Welcome to the "Small Savings and Great Energy" APP, we attach great importance to the protection of your personal information and privacy. Please read this app carefully before you use it',
msgs: 'When you use this application, it means that you have read, understood and agreed to accept all the terms of this agreement. If you do not agree with any of the contents of this Agreement, please stop using this Application immediately.',
agree: 'Agree',
quit: 'Disagree',
guestLogin: 'Guest Login',
checkFirst: 'Please check the box to agree to the User Agreement and Privacy Policy',
stationType:[{
name:'China Station'
},{
name:'Overseas Station'
}]
},
home: {
login: 'Login',
account: 'Account',
password: 'Password',
placeAccount: "Place input account",
placePassword: 'Place input password',
noLogin: 'The feature is not available yet',
loadAmmeter: 'Load Meter',
dieselGeneratorMeter: 'Diesel Meter',
energyStorageMeter: 'Cabinet Meter',
alarmTypeList: [{
name: 'Real-Time Alarm'
}, {
name: 'History Alarm'
}],
lang: 'Switch languages',
ydty: 'Read and agree',
yhxy: 'User Agreement',
and: 'and',
yszc: 'Privacy Policy',
yhxyhyszc: 'User Agreement and Privacy Policy',
msgf: 'Welcome to the "Zeta Cloud" APP, we attach great importance to the protection of your personal information and privacy. Please read this app carefully before you use it',
msgs: 'When you use this application, it means that you have read, understood and agreed to accept all the terms of this agreement. If you do not agree with any of the contents of this Agreement, please stop using this Application immediately.',
agree: 'Agree',
quit: 'Disagree',
guestLogin: 'Guest Login',
checkFirst: 'Please check the box to agree to the User Agreement and Privacy Policy',
stationType: [{
name: 'China Station'
}, {
name: 'Overseas Station'
}],
useElecPrice: 'Electricity prices',
workStatus: 'Working Status',
standing:'standing',
activePowerpcs:'Active Power:',
operatingPower:'Operating Power',
accumulatedElectricityConsumption:'Total power',
pvKpi: 'PV KPI',
saveStandardCoal: 'Save standard coal (t)',
equivalentCo2Reduction: "CO2 emission reduction (kg)",
equivalentTreePlantings: "Equivalent tree plantings (Trees)",
dailyPowerGeneration: 'Daily Power Generation',
cumulativePowerGeneration: 'Cumulative Power Generation',
socialContribution: 'Social Contribution',
energyStorageRevenueReport:'Energy Storage Revenue Report',
pvStorageRevenueReport:'PV Revenue Report',
projectMonthlyPower:'Monthly power generation of the project',
powerGeneration:'power generation',
mpptTopu:'MPPT topology diagram',
powerGenerationCapacity: 'Output power',
batVoltage: 'BAT voltage',
batCurrent: 'BAT current',
busVoltage: 'BUS voltage',
busCurrent: 'BUS current',
dc: 'DC',
dcVoltage: 'DC voltage',
operatingPower: 'operating power',
pvPower:'power',
enmonthTotalChargePrice: 'Total Charging Price Monthly(EUR)',
enmonthTotalDisChargePrice: 'Total Discharging Price Monthly(EUR)',
enearnings: 'Revenue(EUR)',
pvSwitch:'PV switch',
stationDatacom: 'Station Data',
sevenDaycom:'Week',
todayEarning: 'Today Earning(EUR)',
totalRevenue: 'Cumulative Earnings(EUR)',
ratedPower: 'Rated Power(kW)',
currentMonthlyPowerGeneration: 'Current monthly power generation',
cumulativePowerGeneration: 'cumulative power generation',
ratedPowernokw: 'Rated Power',
powerGenerationStatus: 'power Generation Status',
monthlyIncome: 'Monthly income(EUR)',
lowV: 'low-side voltage',
lowI: 'low-side current',
highV: 'high-side voltage',
timesArr: [{
text: '1 Minutes',
value: 1
},
{
text: '5 Minutes',
value: 5
},
{
text: '10 Minutes',
value: 10
},
{
text: '15 Minutes',
value: 15
},
{
text: '20 Minutes',
value: 20
},
{
text: '30 Minutes',
value: 30
}
]
}
}

View File

@ -14,22 +14,91 @@ export default {
}, {
name: '历史告警'
}],
lang:'切换语言',
ydty:'阅读并同意',
yhxy:'用户协议',
and:'和',
yszc:'隐私政策',
yhxyhyszc:'用户协议和隐私政策',
msgf:'欢迎使用“小储大能”APP我们非常重视您的个人信息和隐私保护。在您使用本应用前请仔细阅读',
msgs:'您在使用本应用时,即表示您已阅读、理解并同意接受本协议的所有条款。如果您不同意本协议的任何内容,请立即停止使用本应用。',
agree:'同意',
quit:'不同意',
lang: '切换语言',
ydty: '阅读并同意',
yhxy: '用户协议',
and: '和',
yszc: '隐私政策',
yhxyhyszc: '用户协议和隐私政策',
msgf: '欢迎使用“澤泰云”APP我们非常重视您的个人信息和隐私保护。在您使用本应用前请仔细阅读',
msgs: '您在使用本应用时,即表示您已阅读、理解并同意接受本协议的所有条款。如果您不同意本协议的任何内容,请立即停止使用本应用。',
agree: '同意',
quit: '不同意',
guestLogin: '游客登录',
checkFirst:'请先勾选同意用户协议和隐私政策',
stationType:[{
name:'中国站'
},{
name:'海外站'
}]
checkFirst: '请先勾选同意用户协议和隐私政策',
stationType: [{
name: '中国站'
}, {
name: '海外站'
}],
useElecPrice: '用电价格',
workStatus: '工作状态:',
standing:'静置',
activePowerpcs:'有功功率:',
operatingPower:'运行功率',
accumulatedElectricityConsumption:'累计电量',
pvKpi: '光伏KPI',
saveStandardCoal: '节约标准煤(吨)',
equivalentCo2Reduction: 'CO2减排(吨)',
equivalentTreePlantings: '等效植树(棵)',
dailyPowerGeneration: '日发电量',
cumulativePowerGeneration: '累计发电量',
socialContribution: '社会贡献',
energyStorageRevenueReport:'储能收益报表',
pvStorageRevenueReport:'光伏收益报表',
projectMonthlyPower:'项目月发电量',
powerGeneration:'发电量',
mpptTopu:'MPPT拓扑图',
powerGenerationCapacity: '发电功率',
batVoltage: 'BAT电压',
batCurrent: 'BAT电流',
busVoltage: 'BAT电压',
busCurrent: 'BAT电流',
dc: '直流电流',
dcVoltage: '直流电压',
operatingPower: '运行功率',
pvPower:'功率',
enmonthTotalChargePrice: '本月总充电量总价(元)',
enmonthTotalDisChargePrice: '本月总放电量总价(元)',
enearnings: '收益(元)',
pvSwitch:'PV开关',
stationDatacom: '电站数据',
sevenDaycom:'近七天',
todayEarning: '今日收益(元)',
totalRevenue: '累计收益(元)',
ratedPower: '额定功率(kW)',
currentMonthlyPowerGeneration: '本月发电量',
cumulativePowerGeneration: '累计发电量',
ratedPowernokw: '额定功率',
powerGenerationStatus: '项目发电情况',
monthlyIncome: '本月收益(元)',
lowV:'低压侧电压',
lowI:'低压侧电流',
highV:'高压侧电压',
timesArr: [{
text: '1分钟',
value: 1
},
{
text: '5分钟',
value: 5
},
{
text: '10分钟',
value: 10
},
{
text: '15分钟',
value: 15
},
{
text: '20分钟',
value: 20
},
{
text: '30分钟',
value: 30
}
]
}
};

View File

@ -1,6 +1,6 @@
<template>
<view class="search">
<img src="/static/aidex/images/search.png" class="filterImg">
<image src="/static/aidex/images/search.png" class="filterImg"></image>
<u-input v-model="dec" style="width: 100%" type="text" :placeholder="placeholder" :clearable="false" @blur="blur" />
<view class="shaixuan" @click="open" id="search">
<text style="white-space: nowrap">{{ $t('homePage.alarm.sift') }}</text>

View File

@ -16,7 +16,7 @@
<view class="chart-box">
<zero-loading v-if="chartLoading"></zero-loading>
<charts v-else-if="!chartLoading && valData.length" :id="'historyChart'" :options="history_option"></charts>
<view v-else-if="!chartLoading && !valData.length" class="empty">{{this.$t('homePage.home.noData')}}</view>
<view v-else-if="!chartLoading && !valData.length" class="empty">{{$t('homePage.home.noData')}}</view>
</view>
</view>
</view>
@ -123,7 +123,7 @@ export default {
resolve();
})
.catch((err) => {
reject("错误");
reject("error");
});
});
},

View File

@ -50,12 +50,18 @@
watch: {
canvasData: {
handler(val) {
if (val && val.length) {
this.getSystemInfo()
// 等待 windowWidth 初始化完成后再绘制
if (this.windowWidth) {
this.draw(null); // 直接绘制
} else {
// 若 windowWidth 未获取,先获取再绘制
this.getSystemInfo().then(() => {
this.draw(null);
});
}
},
deep: true,
immediate: true
immediate: false
}
},
mounted() {
@ -64,14 +70,10 @@
methods: {
getSystemInfo() {
const self = this
// 获取屏幕尺寸
uni.getSystemInfo({
success: (res) => {
this.windowWidth = res.windowWidth
},
})
uni.getSystemInfo({
success: function(res) {
// 获取屏幕尺寸
self.windowWidth = res.windowWidth
// const platform = res.hostName.toLowerCase()
if (res.uniPlatform || res.uniPlatform === 'app') {
self.type = 'app'
@ -87,20 +89,25 @@
})
},
clear() {
// if (this.type === 'wx') {
// this.ctx.globalCompositeOperation = 'destination-out';
// this.ctx.beginPath();
// this.ctx.fillStyle = 'red';
// this.ctx.fillRect(0, 0, 8000, 80000);
// this.ctx.fill();
// this.ctx.globalCompositeOperation = 'source-over';
// // this.ctx.draw();
// } else {
// // this.ctx.clearRect(2000, 2000, 2000, 2000);
// // this.ctx.fillStyle = '#ffffff'
// // this.ctx.draw(true);
// }
if (this.type === 'wx') {
this.ctx.globalCompositeOperation = 'destination-out';
this.ctx.beginPath();
this.ctx.fillStyle = 'red';
this.ctx.fillRect(0, 0, 8000, 80000);
this.ctx.fill();
this.ctx.globalCompositeOperation = 'source-over';
// this.ctx.draw();
this.ctx.clearRect(0, 0, this.canvasWidth, this.canvasHeight);
} else {
// this.ctx.clearRect(2000, 2000, 2000, 2000);
// this.ctx.fillStyle = '#ffffff'
// this.ctx.draw(true);
// App 平台
this.ctx.clearRect(0, 0, 8000, 8000);
}
},
//获取app的canvas DOM
getAppDom() {
@ -215,56 +222,73 @@
})
},
countChineseAndEnglishCharacters(str, x) {
var chineseCount = str.match(/[\u4e00-\u9fa5]/g)
? str.match(/[\u4e00-\u9fa5]/g).length
: 0;
var englishCount = str.match(/[a-zA-Z]/g)
? str.match(/[a-zA-Z]/g).length
: 0;
var otherCount = str.length - chineseCount - englishCount;
const obj = {
otherCount: otherCount,
chineseCount: chineseCount,
englishCount: englishCount,
};
return (
obj.englishCount * 6 + obj.chineseCount * 12 + obj.otherCount * 7.5 + x
);
},
// countChineseAndEnglishCharacters(str, x) {
// var chineseCount = str.match(/[\u4e00-\u9fa5]/g) ?
// str.match(/[\u4e00-\u9fa5]/g).length :
// 0;
// var englishCount = str.match(/[a-zA-Z]/g) ?
// str.match(/[a-zA-Z]/g).length :
// 0;
// var otherCount = str.length - chineseCount - englishCount;
// const obj = {
// otherCount: otherCount,
// chineseCount: chineseCount,
// englishCount: englishCount,
// };
// return (
// obj.englishCount * 6 + obj.chineseCount * 12 + obj.otherCount * 7.5 + x
// );
// },
drawText(draw) {
draw.forEach((item, index) => {
if (item.font.length) {
if (item.font.length > 1) {
item.font.forEach((item2, index2) => {
if (this.type === 'app') {
this.ctx.setFontSize(item2.size)
} else {
this.ctx.fontSize = item2.size
}
this.ctx.fillStyle = item2.color
const x = this.countChineseAndEnglishCharacters(item.font[0].text,item.coord[0][0])
this.ctx.fillText(item2.text, this.fitSize( index2 === 1 ? x : item.coord[0][0]), this.fitSize(item.coord[0][1]))
this.ctx.closePath()
})
} else {
if (this.type === 'app') {
this.ctx.setFontSize(item.font[0].size)
} else {
this.ctx.fontSize = item.font[0].size
}
this.ctx.fillStyle = item.font[0].color
this.ctx.fillText(item.font[0].text, this.fitSize(item.coord[0][0]), this.fitSize(item
.coord[0][1]))
this.ctx.closePath()
}
}
})
draw.forEach((item, index) => {
if (item.font.length) {
// 记录前一个文本的结束位置(用于后续文本偏移)
let prevTextEndX = this.fitSize(item.coord[0][0]);
item.font.forEach((item2, index2) => {
// 设置字体大小和颜色
if (this.type === 'app') {
this.ctx.setFontSize(item2.size);
} else {
this.ctx.font = `${item2.size}px sans-serif`; // 小程序端补全font属性
}
this.ctx.fillStyle = item2.color;
// 计算当前文本的绘制X坐标
let currentX = prevTextEndX;
// 非第一个文本加上配置的偏移量默认8px
if (index2 > 0) {
const offsetX = item2.offsetX || 6;
currentX += this.fitSize(offsetX); // 适配设备尺寸的偏移量
}
// 绘制文本
this.ctx.fillText(
item2.text,
currentX,
this.fitSize(item.coord[0][1])
);
// 更新前一个文本的结束位置当前文本的X + 文本宽度)
const textWidth = this.getTextWidth(item2.text, item2.size);
prevTextEndX = currentX + textWidth;
this.ctx.closePath();
});
}
});
},
// 新增计算文本的实际绘制宽度适配app/小程序)
getTextWidth(text, fontSize) {
if (this.type === 'app') {
// App端通过measureText计算
return this.ctx.measureText(text).width;
} else {
// 小程序端手动计算(更稳定)
this.ctx.font = `${fontSize}px sans-serif`;
return this.ctx.measureText(text).width;
}
},
drawImages(draw, canvas) {
let x,
@ -347,9 +371,12 @@
})
},
fitSize(coordinate) {
let newWindowWidth = this.windowWidth //这个windowWidth指的是该设备宽度可以onLoad监听页面加载中获取
let v = 375 / newWindowWidth //375是设计稿的大小得到的v值是设计稿和设备宽度的比例关系也可理解成在设计稿的大小基础上放大或缩小的倍数
return coordinate / v //返回的是当前坐标值或者大小与v的比例
let newWindowWidth = this.windowWidth;
const designWidth = 375; // 设计稿宽度
// 修正比例计算:设备宽度 / 设计稿宽度 = 缩放比例
const scale = newWindowWidth / designWidth;
// 设计稿的坐标 * 缩放比例 = 设备实际坐标
return coordinate * scale;
}
},

View File

@ -1,10 +1,10 @@
<template>
<view class="search" >
<img src="/static/aidex/images/search.png" class="filterImg">
<image src="/static/aidex/images/search.png" class="filterImg"></image>
<u-input v-model="dec" style="width:100%;" type="text" :placeholder="this.$t('homePage.device.inputNameQuery')" :clearable='false'/>
<u-input v-model="dec" style="width:100%;" type="text" :placeholder="$t('homePage.device.inputNameQuery')" :clearable='false'/>
<view class="shaixuan" id="search">
<u-button @click="search" size="mini" shape="circle" :custom-style="{backgroundColor:'#009458',color:'#FFFFFF'}">{{this.$t('homePage.device.query')}}</u-button>
<u-button @click="search" size="mini" shape="circle" :custom-style="{backgroundColor:'#009458',color:'#FFFFFF'}">{{$t('homePage.device.query')}}</u-button>
</view>
<!-- <input type="text" :value="dec" :input-align="right" placeholder="请输入告警内容筛选"/> -->
<!-- <view class="proper" v-if="show_" id="popup">

View File

@ -11,7 +11,7 @@
export default {
data () {
return {
stationName: '所有电站',
stationName: '',
selectStaion: false,
StationShow: [],
defaultArr: [],
@ -98,6 +98,7 @@ export default {
// val[2].StationShow = this.StationShow
this.$u.vuex("vuex_currentStation", val[2])
this.$u.vuex("vuex_StationShow", this.StationShow)
this.$u.vuex("vuex_inverterFlag", value.list[valIndex].list[newValIndex].inverterFlag)
this.$emit('openPop', false)
}
}

281
hybrid/html/demo.html Normal file
View File

@ -0,0 +1,281 @@
<<<<<<< .mine
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="PoweredByAidex"/>
<meta name="description" content="PoweredByAidex"/>
</head>
<body>
<svg width="128" height="128"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<style>path {fill-opacity:1; stroke:none;}</style>
<path d="M 42,0L 0,0L 0,128L 62,128L 62,126L 60.7072,125.2928L 58.146,123.854L 55.6451,122.3549L 53.2063,120.7937L 52,120L 50.6822,119.3178L 48.0777,117.9223L 45.5826,116.4174L 43.3111,114.6889L 41.3966,112.6034L 39.9425,110.0575L 38.9719,107.0281L 38.4156,103.5844L 38.148,99.852L 38.0423,95.9577L 38.0079,91.9921L 38,90L 35.5885,88.4115L 33.1929,86.8071L 32,86L 29.3498,84.6502L 26.7241,83.2759L 24.1496,81.8504L 21.6456,80.3544L 19.2063,78.7937L 18,78L 16.6822,77.3178L 14.0777,75.9223L 11.5826,74.4174L 9.3111,72.6889L 7.3966,70.6034L 5.9425,68.0575L 4.9719,65.0281L 4.4156,61.5844L 4.2818,59.7182L 4.0952,55.9048L 4.0607,53.9395L 4.0386,51.9623L 4.0124,47.9936L 4.0168,44.0132L 4.0578,40.0573L 4.1791,36.179L 4.3221,34.3221L 4.7484,30.7484L 5.1291,29.129L 6.0983,26.0983L 7.4879,23.4879L 8.3791,22.3791L 10.3181,20.3181L 12.5253,18.5253L 14.9196,16.9196L 17.4387,15.4387L 20.0358,14.0358L 22.6744,12.6744L 24,12L 26.4247,10.4247L 27.6601,9.6601L 30.165,8.165L 32.7351,6.7351L 35.3557,5.3557L 38.0055,4.0055L 40.6675,2.6675L 42,2Z" style="fill:rgb(254,254,254);"/>
<path d="M 58,62L 59.3709,62.6291L 62.0751,63.9249L 64.7042,65.2958L 66,66L 70,66L 70,62L 68,60L 65.6634,58.3366L 63.3818,56.6182L 61.182,54.818L 59.0518,52.9482L 58,52L 55.6723,50.3277L 53.488,48.512L 51.5906,46.4094L 50.1002,43.8998L 49.071,40.929L 48.4623,37.5377L 48.1554,33.8446L 48,30L 47.2582,26.7418L 46.5916,23.4084L 46,20L 44,20L 42,22L 41.9814,23.9814L 41.917,27.917L 41.7622,31.7622L 41.4385,35.4385L 40.8635,38.8635L 39.9723,41.9723L 38.7311,44.7311L 37.1392,47.1392L 35.2342,49.2342L 33.1055,51.1055L 32,52L 29.793,53.793L 27.5268,55.5268L 25.1866,57.1866L 24,58L 22,60L 20,62L 20,66L 26,66L 28.6926,64.6926L 31.4189,63.4189L 34.2096,62.2096L 37.0777,61.0777L 38.4931,60.5638L 41.2382,59.6271L 43.8451,58.9301L 46.3927,58.5947L 48.9354,58.717L 50.2132,59.0062L 52.7823,59.7624L 55.3802,60.8068Z" style="fill:rgb(254,254,254);"/>
<path d="M 85.2331,17.2701L 86.4837,16.5847L 87.7563,15.9652L 90.3475,14.8965L 93.0246,14.2314L 95.7591,14.0611L 98.5014,14.3992L 101.2011,15.1859L 103.8206,16.3207L 106.3454,17.6971L 108.792,19.2165L 110,20L 111.3178,20.6822L 113.9223,22.0777L 116.4174,23.5826L 118.6889,25.3111L 120.6034,27.3966L 121.3304,28.6696L 122.5428,31.4572L 123.3061,34.6936L 123.7166,38.2802L 123.8055,40.1826L 123.9106,44.0318L 123.8774,47.9088L 123.6792,51.6854L 123.2186,55.2195L 122.37,58.3701L 121.046,61.046L 120.151,62.151L 119.1695,63.1695L 118.1211,64.1211L 115.922,65.922L 113.5629,67.5629L 111.1037,69.1037L 108.5654,70.5654L 105.9647,71.9647L 103.3257,73.3257L 102,74L 99.3198,75.3198L 96.5065,76.5065L 93.5268,77.5268L 92,78L 92,80L 92.3524,81.6476L 92.6727,83.3272L 92.9526,85.0465L 93.4244,88.5695L 93.7174,92.2526L 93.7775,94.15L 93.8123,97.9511L 93.6565,101.699L 93.2447,105.2551L 92.4795,108.4814L 91.2758,111.2761L 89.6104,113.6105L 87.5449,115.5449L 85.2126,117.2126L 84,118L 81.5753,119.5753L 79.1045,121.1045L 76.5654,122.5654L 73.9647,123.9647L 71.3257,125.3257L 70,126L 70,128L 128,128L 128,0L 50,0L 50,2L 52,4L 54.6502,5.3498L 57.2759,6.7241L 59.8504,8.1496L 62.3544,9.6456L 64.7937,11.2063L 66,12L 67.3333,12.6667L 70,14L 71.3333,14.6667L 74,16L 75.3333,16.6667L 78,18L 84,18Z" style="fill:rgb(254,254,254);"/>
<path d="M 84,74L 84,76L 88,76L 88,74Z" style="fill:rgb(254,254,254);"/>
<path d="M 88,76L 88,78L 92,78L 92,76Z" style="fill:rgb(254,254,254);"/>
<path d="M 82,20L 80,18L 78,18L 75.3333,19.3333L 74,20L 74,22L 82,22Z" style="fill:rgb(212,228,213);"/>
<path d="M 84,72L 80,72L 80,74L 84,74Z" style="fill:rgb(212,228,213);"/>
<path d="M 70,18L 68,16L 66.7072,15.2928L 64.146,13.854L 61.6451,12.3549L 59.2063,10.7937L 58,10L 56.6667,9.3333L 54,8L 50.998,7.002L 48,6L 42,6L 39.5753,7.5753L 38.3399,8.3399L 35.835,9.835L 33.2649,11.2649L 30.6443,12.6443L 27.9945,13.9945L 25.3325,15.3325L 24,16L 22.7944,16.7944L 20.3566,18.3566L 17.8559,19.8559L 15.2937,21.2937L 14,22L 12,24L 10,26L 10,68L 12,70L 14,72L 16.6502,73.3498L 19.2759,74.7241L 21.8504,76.1496L 24.3544,77.6456L 26.7937,79.2063L 28,80L 29.3333,80.6667L 32,82L 36,82L 38,80L 38.7389,78.9578L 40.3681,77.0458L 42.366,75.5475L 43.5513,75.0035L 46.1174,73.9788L 48.998,72.998L 52,72L 52.5916,70.5916L 53.2207,69.2207L 54.5415,66.5832L 55.9374,64.1874L 57.3208,62.0292L 58,61L 58,60L 56.6667,59.3333L 54,58L 52.6667,57.3333L 50,56L 44,56L 42.608,56.608L 39.7965,57.7965L 36.9233,58.9233L 34.0999,59.953L 32.7929,60.281L 31.5625,60.2742L 30.5423,59.7222L 29.5169,58.149L 30.4488,56.2218L 32.5088,54.4707L 34.8159,52.8129L 36,52L 38,50L 40,48L 40.1183,44.1183L 40.3327,40.3327L 40.5256,38.5268L 40.7716,36.7769L 41.3801,33.4141L 41.8269,31.9259L 42.4253,30.6286L 43.2715,29.6633L 45.1308,28.6799L 46.7589,29.7437L 47.5856,32.5325L 47.8986,36.1197L 48,38L 48.7418,41.2582L 49.4084,44.5916L 50,48L 52,50L 54,52L 55.3333,52.6667L 58,54L 60,54L 60.0024,52.0028L 60.0175,48.0198L 60.0826,44.0909L 60.2949,40.3144L 60.5551,38.5801L 60.9297,36.9578L 61.9123,33.9411L 63.3325,31.3529L 64.2076,30.2225L 66.0465,28.0526L 67.0259,27.0296L 69.0026,25.0034L 71,23.0001L 72,22L 72,20Z" style="fill:rgb(254,220,188);"/>
<path d="M 64,78L 60,78L 60,80L 64,80Z" style="fill:rgb(94,170,125);"/>
<path d="M 64,68L 64,70L 72,70L 72,68Z" style="fill:rgb(94,170,125);"/>
<path d="M 70,58L 68,58L 68,62L 70,62Z" style="fill:rgb(94,170,125);"/>
<path d="M 42,86L 36,86L 36,90L 38,92L 40,92L 42,90Z" style="fill:rgb(227,236,224);"/>
<path d="M 68,76L 66,74L 60,74L 57.3198,75.3198L 54.5065,76.5065L 51.5268,77.5268L 50,78L 48.4115,80.4115L 46.8071,82.8071L 46,84L 46,86L 54,86L 56.0945,84.0945L 58.3099,82.3099L 60.7558,80.7558L 63.4888,79.4888L 66.4645,78.4645L 68,78Z" style="fill:rgb(33,149,100);"/>
<path d="M 80,64L 80,26L 76,26L 73.3333,27.3333L 72,28L 72,58L 73.6143,60.3857L 75.2088,62.7912L 76,64Z" style="fill:rgb(33,149,100);"/>
<path d="M 70,24L 71,25L 72,25L 74.998,24.499L 78,24L 78,22L 70,22Z" style="fill:rgb(148,187,146);"/>
<path d="M 42,72L 38,72L 38,80L 40,80L 42,78Z" style="fill:rgb(240,215,182);"/>
<path d="M 56,64L 52,64L 52,68L 56,68Z" style="fill:rgb(240,215,182);"/>
<path d="M 58,61L 57,61L 56,62L 56,66L 60,66L 60,62Z" style="fill:rgb(240,215,182);"/>
<path d="M 62,24L 60,24L 60,56L 62,56Z" style="fill:rgb(240,215,182);"/>
<path d="M 42,88L 40,90L 40,92L 52,92L 52,90L 50,88Z" style="fill:rgb(166,213,193);"/>
<path d="M 54,86L 50,86L 50,90L 54,90Z" style="fill:rgb(166,213,193);"/>
<path d="M 59.2582,87.2582L 61.8498,85.8498L 64.5916,84.5916L 66,84L 66,82L 64,80L 60,80L 57.3333,81.3333L 56,82L 54,84L 54,88L 58,88Z" style="fill:rgb(166,213,193);"/>
<path d="M 68,78L 64,78L 64,82L 68,82Z" style="fill:rgb(166,213,193);"/>
<path d="M 74.6667,78.6667L 76,78L 78.6667,76.6667L 80,76L 80,74L 70,74L 68,76L 68,80L 72,80Z" style="fill:rgb(166,213,193);"/>
<path d="M 84,24L 82,24L 82,66L 84,66Z" style="fill:rgb(166,213,193);"/>
<path d="M 86,24L 84,24L 84,72L 86,72Z" style="fill:rgb(106,189,160);"/>
<path d="M 94,114L 94,80L 92,78L 90.6667,77.3333L 88,76L 86.6667,75.3333L 84,74L 80,74L 77.3333,75.3333L 76,76L 73.3333,77.3333L 72,78L 69.3333,79.3333L 68,80L 65.5753,81.5753L 63.1045,83.1045L 60.5654,84.5654L 57.9647,85.9647L 55.3257,87.3257L 54,88L 51.636,89.3995L 49.2489,90.5836L 48.0432,90.9921L 45.5777,91.6132L 42.8616,91.8992L 39.7026,91.9863L 38,92L 38,114L 40,116L 42.6502,117.3498L 45.2759,118.7241L 47.8504,120.1496L 50.3544,121.6456L 52.7937,123.2063L 54,124L 55.3333,124.6667L 58,126L 59.3333,126.6667L 62,128L 70,128L 72.6667,126.6667L 74,126L 76.6667,124.6667L 78,124L 80.6667,122.6667L 82,122L 83.2056,121.2056L 85.6434,119.6434L 88.1441,118.1441L 90.7063,116.7063L 92,116Z" style="fill:rgb(6,150,109);"/>
<path d="M 85.8729,57.8729L 85.6659,61.6659L 85.2814,65.2814L 84.7048,68.7048L 84,72L 84,74L 85.3333,74.6667L 88,76L 89.3333,76.6667L 92,78L 100,78L 102.4247,76.4247L 104.8955,74.8955L 107.4346,73.4346L 110.0353,72.0353L 112.6743,70.6743L 114,70L 115.2056,69.2056L 117.6434,67.6434L 120.1441,66.1441L 122.7063,64.7063L 124,64L 124,26L 122,24L 119.3498,22.6502L 116.7241,21.2759L 114.1496,19.8504L 111.6456,18.3544L 109.2063,16.7937L 108,16L 106.6667,15.3333L 104,14L 102.6667,13.3333L 100,12L 98.6667,11.3333L 96,10L 94,10L 91.3333,11.3333L 90,12L 87.3333,13.3333L 86,14L 83.6143,15.6143L 81.2088,17.2088L 80,18L 80,20L 80.8396,21.2073L 82.4279,23.6946L 83.7665,26.3869L 84.7608,29.3767L 85.4016,32.6928L 85.7538,36.2964L 85.9157,40.1046L 85.9759,44.0286L 85.9899,48.0011L 85.9756,51.9773L 85.9171,55.9173Z" style="fill:rgb(6,150,109);"/>
<path d="M 62,84L 58,84L 58,86L 62,86Z" style="fill:rgb(132,196,168);"/>
<path d="M 42,30L 40,30L 40,36L 42,36Z" style="fill:rgb(255,232,210);"/>
<path d="M 42,4L 42,6L 46,6L 46,4Z" style="fill:rgb(255,232,210);"/>
<path d="M 50,38L 48,38L 48,44L 50,44Z" style="fill:rgb(255,232,210);"/>
<path d="M 48,92L 42,92L 42,94L 48,94Z" style="fill:rgb(94,180,147);"/>
<path d="M 82,26L 80,26L 80,68L 82,68Z" style="fill:rgb(94,180,147);"/>
<path d="M 40.6667,84.6667L 42,82L 42,78L 40,78L 38,80L 38,86L 40,86Z" style="fill:rgb(174,195,156);"/>
<path d="M 50,76L 42,76L 42,82L 44,82L 45.1868,81.5847L 47.5787,80.7752L 50,80Z" style="fill:rgb(174,195,156);"/>
<path d="M 56,74L 54.6667,73.3333L 52,72L 48,72L 48,76L 50,78L 54,78L 56,76Z" style="fill:rgb(174,195,156);"/>
<path d="M 62,72L 62,71L 61,70L 52,70L 52,74L 54,74L 55.3333,74L 58,74L 60,74Z" style="fill:rgb(174,195,156);"/>
<path d="M 64,68L 56,68L 56,70L 58.501,70.499L 61,71L 62,71L 64,70Z" style="fill:rgb(174,195,156);"/>
<path d="M 64,66L 60,66L 60,68L 64,68Z" style="fill:rgb(174,195,156);"/>
<path d="M 66,30L 64,30L 64,60L 66,60Z" style="fill:rgb(174,195,156);"/>
<path d="M 72,25L 71,24L 68,24L 66,26L 66,30L 68,30L 70,30L 72,30Z" style="fill:rgb(174,195,156);"/>
<path d="M 42,2L 38,2L 35.3333,3.3333L 34,4L 31.3333,5.3333L 30,6L 27.3333,7.3333L 26,8L 23.5753,9.5753L 21.1045,11.1045L 18.5654,12.5654L 15.9647,13.9647L 13.3257,15.3257L 12,16L 9.6143,17.6143L 7.2088,19.2088L 6,20L 4,22L 4,24L 14,24L 16.6667,22.6667L 18,22L 20.6667,20.6667L 22,20L 24.4247,18.4247L 25.6601,17.6601L 28.165,16.165L 30.7351,14.7351L 33.3557,13.3557L 36.0055,12.0055L 38.6675,10.6675L 40,10L 42,8Z" style="fill:rgb(254,244,234);"/>
<path d="M 32,80L 29.5885,78.4115L 27.1929,76.8071L 26,76L 24.6667,75.3333L 22,74L 20.6667,73.3333L 18,72L 16.6667,71.3333L 14,70L 12.3857,69.6143L 9.1769,68.8231L 6,68L 4,68L 4,72L 6,74L 8.6502,75.3498L 11.2759,76.7241L 13.8504,78.1496L 16.3544,79.6456L 18.7937,81.2063L 20,82L 21.3333,82.6667L 24,84L 25.3333,84.6667L 28,86L 32,86Z" style="fill:rgb(254,244,234);"/>
<path d="M 50,0L 42,0L 42,2L 50,2Z" style="fill:rgb(254,244,234);"/>
<path d="M 74,18L 74,14L 72.7072,13.2928L 70.146,11.854L 67.6451,10.3549L 65.2063,8.7937L 64,8L 62.6667,7.3333L 60,6L 58.6667,5.3333L 56,4L 54.6667,3.3333L 52,2L 48,2L 48,4L 49.3333,6.6667L 50,8L 51.2928,8.7072L 53.854,10.146L 56.3549,11.6451L 58.7937,13.2063L 60,14L 61.3333,14.6667L 64,16L 65.3333,16.6667L 68,18Z" style="fill:rgb(254,244,234);"/>
<path d="M 74,72L 74,74L 80,74L 82.6667,72.6667L 84,72L 84,66L 82,66L 79.6143,67.6143L 77.2088,69.2088L 76,70Z" style="fill:rgb(190,220,203);"/>
<path d="M 84,24L 84,22L 78,22L 78,24L 80,26L 82,26Z" style="fill:rgb(190,220,203);"/>
<path d="M 38,84L 34,84L 34,90L 36,90L 36.6667,88.6667L 38,86Z" style="fill:rgb(242,239,228);"/>
<path d="M 64,62L 60,62L 60,64L 64,64Z" style="fill:rgb(242,239,228);"/>
<path d="M 76.6667,20.6667L 78,20L 78,16L 74,16L 71.3333,17.3333L 70,18L 70,20L 72,22L 74,22Z" style="fill:rgb(242,239,228);"/>
<path d="M 42,82L 40,82L 40,86L 42,86Z" style="fill:rgb(114,176,133);"/>
<path d="M 48,80L 48,79L 46,78L 44,78L 44,82L 46,82Z" style="fill:rgb(114,176,133);"/>
<path d="M 58,73L 56,72L 54,72L 54,74L 58,74Z" style="fill:rgb(114,176,133);"/>
<path d="M 69,32L 69,30L 66,30L 66,60L 68,60L 68.0007,58.0013L 68.0044,54.0088L 68.0192,50.0384L 68.0636,46.1271L 68.1671,42.3341L 68.3593,38.7186L 68.6476,35.2952Z" style="fill:rgb(114,176,133);"/>
<path d="M 70,28L 68,28L 68,30L 69,32L 70,32Z" style="fill:rgb(114,176,133);"/>
<path d="M 70,64L 67.002,65.002L 64,66L 64,68L 65.3198,68.5767L 67.8263,69.8336L 70.0333,71.3234L 72,73L 74,73L 76,72L 78.6667,70.6667L 80,70L 80,64Z" style="fill:rgb(114,176,133);"/>
<path d="M 72,24L 72,28L 76,28L 78.6667,26.6667L 80,26L 80,24Z" style="fill:rgb(114,176,133);"/>
<path d="M 38,80L 36,80L 36,84L 38,84Z" style="fill:rgb(208,206,169);"/>
<path d="M 47,76L 47,74L 42,74L 42,76Z" style="fill:rgb(208,206,169);"/>
<path d="M 48,72L 46,72L 46,74L 47,76L 48,76Z" style="fill:rgb(208,206,169);"/>
<path d="M 52,68L 52,70L 56,70L 56,68Z" style="fill:rgb(208,206,169);"/>
<path d="M 56,66L 56,68L 60,68L 60,66Z" style="fill:rgb(208,206,169);"/>
<path d="M 66,64L 60,64L 60,66L 66,66Z" style="fill:rgb(208,206,169);"/>
<path d="M 64,30L 62,30L 62,58L 64,58Z" style="fill:rgb(208,206,169);"/>
<path d="M 66,26L 64,26L 64,30L 66,30Z" style="fill:rgb(208,206,169);"/>
<path d="M 47.5885,85.5885L 49.1929,83.1929L 50,82L 50,80L 46,80L 44,82L 44,88L 46,88Z" style="fill:rgb(49,155,107);"/>
<path d="M 54,76L 54,78L 58,78L 60,76L 60,74L 56,74Z" style="fill:rgb(49,155,107);"/>
<path d="M 70,72L 60,72L 60,74L 63.002,74.998L 66,76L 70,76Z" style="fill:rgb(49,155,107);"/>
<path d="M 72,30L 70,30L 70,58L 72,58Z" style="fill:rgb(49,155,107);"/>
<path d="M 74,58L 72,58L 72,62L 76,62L 76,60Z" style="fill:rgb(49,155,107);"/>
<path d="M 44,82L 42,82L 42,88L 44,88Z" style="fill:rgb(73,163,117);"/>
<path d="M 50,86L 46,86L 46,88L 50,88Z" style="fill:rgb(73,163,117);"/>
<path d="M 60,80L 56,80L 56,82L 60,82Z" style="fill:rgb(73,163,117);"/>
<path d="M 74,73L 72.6667,71L 72,70L 62,70L 62,72L 63.6143,72.3857L 66.8231,73.1769L 70,74L 74,74Z" style="fill:rgb(73,163,117);"/>
<path d="M 70,32L 68,32L 68,58L 70,58Z" style="fill:rgb(73,163,117);"/>
<path d="M 74.998,61.002L 72.998,59.002L 72,58L 70,58L 70,64L 76,64L 76,62Z" style="fill:rgb(73,163,117);"/>
<path d="M 10,26L 8,26L 8,68L 10,68Z" style="fill:rgb(254,223,194);"/>
<path d="M 46,18L 42,18L 42,22L 44,22L 46,20Z" style="fill:rgb(254,223,194);"/>
<path d="M 12,24L 4,24L 4,68L 6,70L 12,70L 12,68L 11.2952,66.7048L 10.0138,63.9862L 9.5332,62.4668L 8.757,59.243L 8.3136,55.6867L 8.108,51.8952L 8.0391,47.9815L 8.0532,44.0413L 8.1664,40.1647L 8.4614,36.4612L 9.0527,33.0527L 10.0138,30.0138L 11.2952,27.2952L 12,26Z" style="fill:rgb(254,240,227);"/>
<path d="M 36,82L 32,82L 32,88L 34,88L 34.6667,86.6667L 36,84Z" style="fill:rgb(254,240,227);"/>
<path d="M 42,36L 40,36L 40,44L 42,44Z" style="fill:rgb(254,240,227);"/>
<path d="M 50,4L 48,2L 42,2L 42,4L 44.4115,5.5885L 46.8071,7.1929L 48,8L 50,8Z" style="fill:rgb(254,240,227);"/>
<path d="M 48,22L 46,22L 46,30L 48,30Z" style="fill:rgb(254,240,227);"/>
<path d="M 50,44L 48,44L 48,48L 50,48Z" style="fill:rgb(254,240,227);"/>
</svg>
</body>
</html>
=======
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="PoweredByAidex" />
<meta name="description" content="PoweredByAidex" />
</head>
<body>
11111111
<!-- <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" version="1.1">
<path
d="M 42,0L 0,0L 0,128L 62,128L 62,126L 60.7072,125.2928L 58.146,123.854L 55.6451,122.3549L 53.2063,120.7937L 52,120L 50.6822,119.3178L 48.0777,117.9223L 45.5826,116.4174L 43.3111,114.6889L 41.3966,112.6034L 39.9425,110.0575L 38.9719,107.0281L 38.4156,103.5844L 38.148,99.852L 38.0423,95.9577L 38.0079,91.9921L 38,90L 35.5885,88.4115L 33.1929,86.8071L 32,86L 29.3498,84.6502L 26.7241,83.2759L 24.1496,81.8504L 21.6456,80.3544L 19.2063,78.7937L 18,78L 16.6822,77.3178L 14.0777,75.9223L 11.5826,74.4174L 9.3111,72.6889L 7.3966,70.6034L 5.9425,68.0575L 4.9719,65.0281L 4.4156,61.5844L 4.2818,59.7182L 4.0952,55.9048L 4.0607,53.9395L 4.0386,51.9623L 4.0124,47.9936L 4.0168,44.0132L 4.0578,40.0573L 4.1791,36.179L 4.3221,34.3221L 4.7484,30.7484L 5.1291,29.129L 6.0983,26.0983L 7.4879,23.4879L 8.3791,22.3791L 10.3181,20.3181L 12.5253,18.5253L 14.9196,16.9196L 17.4387,15.4387L 20.0358,14.0358L 22.6744,12.6744L 24,12L 26.4247,10.4247L 27.6601,9.6601L 30.165,8.165L 32.7351,6.7351L 35.3557,5.3557L 38.0055,4.0055L 40.6675,2.6675L 42,2Z"
style="fill:rgb(254,254,254);" />
<path
d="M 58,62L 59.3709,62.6291L 62.0751,63.9249L 64.7042,65.2958L 66,66L 70,66L 70,62L 68,60L 65.6634,58.3366L 63.3818,56.6182L 61.182,54.818L 59.0518,52.9482L 58,52L 55.6723,50.3277L 53.488,48.512L 51.5906,46.4094L 50.1002,43.8998L 49.071,40.929L 48.4623,37.5377L 48.1554,33.8446L 48,30L 47.2582,26.7418L 46.5916,23.4084L 46,20L 44,20L 42,22L 41.9814,23.9814L 41.917,27.917L 41.7622,31.7622L 41.4385,35.4385L 40.8635,38.8635L 39.9723,41.9723L 38.7311,44.7311L 37.1392,47.1392L 35.2342,49.2342L 33.1055,51.1055L 32,52L 29.793,53.793L 27.5268,55.5268L 25.1866,57.1866L 24,58L 22,60L 20,62L 20,66L 26,66L 28.6926,64.6926L 31.4189,63.4189L 34.2096,62.2096L 37.0777,61.0777L 38.4931,60.5638L 41.2382,59.6271L 43.8451,58.9301L 46.3927,58.5947L 48.9354,58.717L 50.2132,59.0062L 52.7823,59.7624L 55.3802,60.8068Z"
style="fill:rgb(254,254,254);" />
<path
d="M 85.2331,17.2701L 86.4837,16.5847L 87.7563,15.9652L 90.3475,14.8965L 93.0246,14.2314L 95.7591,14.0611L 98.5014,14.3992L 101.2011,15.1859L 103.8206,16.3207L 106.3454,17.6971L 108.792,19.2165L 110,20L 111.3178,20.6822L 113.9223,22.0777L 116.4174,23.5826L 118.6889,25.3111L 120.6034,27.3966L 121.3304,28.6696L 122.5428,31.4572L 123.3061,34.6936L 123.7166,38.2802L 123.8055,40.1826L 123.9106,44.0318L 123.8774,47.9088L 123.6792,51.6854L 123.2186,55.2195L 122.37,58.3701L 121.046,61.046L 120.151,62.151L 119.1695,63.1695L 118.1211,64.1211L 115.922,65.922L 113.5629,67.5629L 111.1037,69.1037L 108.5654,70.5654L 105.9647,71.9647L 103.3257,73.3257L 102,74L 99.3198,75.3198L 96.5065,76.5065L 93.5268,77.5268L 92,78L 92,80L 92.3524,81.6476L 92.6727,83.3272L 92.9526,85.0465L 93.4244,88.5695L 93.7174,92.2526L 93.7775,94.15L 93.8123,97.9511L 93.6565,101.699L 93.2447,105.2551L 92.4795,108.4814L 91.2758,111.2761L 89.6104,113.6105L 87.5449,115.5449L 85.2126,117.2126L 84,118L 81.5753,119.5753L 79.1045,121.1045L 76.5654,122.5654L 73.9647,123.9647L 71.3257,125.3257L 70,126L 70,128L 128,128L 128,0L 50,0L 50,2L 52,4L 54.6502,5.3498L 57.2759,6.7241L 59.8504,8.1496L 62.3544,9.6456L 64.7937,11.2063L 66,12L 67.3333,12.6667L 70,14L 71.3333,14.6667L 74,16L 75.3333,16.6667L 78,18L 84,18Z"
style="fill:rgb(254,254,254);" />
<path d="M 84,74L 84,76L 88,76L 88,74Z" style="fill:rgb(254,254,254);" />
<path d="M 88,76L 88,78L 92,78L 92,76Z" style="fill:rgb(254,254,254);" />
<path d="M 82,20L 80,18L 78,18L 75.3333,19.3333L 74,20L 74,22L 82,22Z" style="fill:rgb(212,228,213);" />
<path d="M 84,72L 80,72L 80,74L 84,74Z" style="fill:rgb(212,228,213);" />
<path
d="M 70,18L 68,16L 66.7072,15.2928L 64.146,13.854L 61.6451,12.3549L 59.2063,10.7937L 58,10L 56.6667,9.3333L 54,8L 50.998,7.002L 48,6L 42,6L 39.5753,7.5753L 38.3399,8.3399L 35.835,9.835L 33.2649,11.2649L 30.6443,12.6443L 27.9945,13.9945L 25.3325,15.3325L 24,16L 22.7944,16.7944L 20.3566,18.3566L 17.8559,19.8559L 15.2937,21.2937L 14,22L 12,24L 10,26L 10,68L 12,70L 14,72L 16.6502,73.3498L 19.2759,74.7241L 21.8504,76.1496L 24.3544,77.6456L 26.7937,79.2063L 28,80L 29.3333,80.6667L 32,82L 36,82L 38,80L 38.7389,78.9578L 40.3681,77.0458L 42.366,75.5475L 43.5513,75.0035L 46.1174,73.9788L 48.998,72.998L 52,72L 52.5916,70.5916L 53.2207,69.2207L 54.5415,66.5832L 55.9374,64.1874L 57.3208,62.0292L 58,61L 58,60L 56.6667,59.3333L 54,58L 52.6667,57.3333L 50,56L 44,56L 42.608,56.608L 39.7965,57.7965L 36.9233,58.9233L 34.0999,59.953L 32.7929,60.281L 31.5625,60.2742L 30.5423,59.7222L 29.5169,58.149L 30.4488,56.2218L 32.5088,54.4707L 34.8159,52.8129L 36,52L 38,50L 40,48L 40.1183,44.1183L 40.3327,40.3327L 40.5256,38.5268L 40.7716,36.7769L 41.3801,33.4141L 41.8269,31.9259L 42.4253,30.6286L 43.2715,29.6633L 45.1308,28.6799L 46.7589,29.7437L 47.5856,32.5325L 47.8986,36.1197L 48,38L 48.7418,41.2582L 49.4084,44.5916L 50,48L 52,50L 54,52L 55.3333,52.6667L 58,54L 60,54L 60.0024,52.0028L 60.0175,48.0198L 60.0826,44.0909L 60.2949,40.3144L 60.5551,38.5801L 60.9297,36.9578L 61.9123,33.9411L 63.3325,31.3529L 64.2076,30.2225L 66.0465,28.0526L 67.0259,27.0296L 69.0026,25.0034L 71,23.0001L 72,22L 72,20Z"
style="fill:rgb(254,220,188);" />
<path d="M 64,78L 60,78L 60,80L 64,80Z" style="fill:rgb(94,170,125);" />
<path d="M 64,68L 64,70L 72,70L 72,68Z" style="fill:rgb(94,170,125);" />
<path d="M 70,58L 68,58L 68,62L 70,62Z" style="fill:rgb(94,170,125);" />
<path d="M 42,86L 36,86L 36,90L 38,92L 40,92L 42,90Z" style="fill:rgb(227,236,224);" />
<path
d="M 68,76L 66,74L 60,74L 57.3198,75.3198L 54.5065,76.5065L 51.5268,77.5268L 50,78L 48.4115,80.4115L 46.8071,82.8071L 46,84L 46,86L 54,86L 56.0945,84.0945L 58.3099,82.3099L 60.7558,80.7558L 63.4888,79.4888L 66.4645,78.4645L 68,78Z"
style="fill:rgb(33,149,100);" />
<path d="M 80,64L 80,26L 76,26L 73.3333,27.3333L 72,28L 72,58L 73.6143,60.3857L 75.2088,62.7912L 76,64Z"
style="fill:rgb(33,149,100);" />
<path d="M 70,24L 71,25L 72,25L 74.998,24.499L 78,24L 78,22L 70,22Z" style="fill:rgb(148,187,146);" />
<path d="M 42,72L 38,72L 38,80L 40,80L 42,78Z" style="fill:rgb(240,215,182);" />
<path d="M 56,64L 52,64L 52,68L 56,68Z" style="fill:rgb(240,215,182);" />
<path d="M 58,61L 57,61L 56,62L 56,66L 60,66L 60,62Z" style="fill:rgb(240,215,182);" />
<path d="M 62,24L 60,24L 60,56L 62,56Z" style="fill:rgb(240,215,182);" />
<path d="M 42,88L 40,90L 40,92L 52,92L 52,90L 50,88Z" style="fill:rgb(166,213,193);" />
<path d="M 54,86L 50,86L 50,90L 54,90Z" style="fill:rgb(166,213,193);" />
<path
d="M 59.2582,87.2582L 61.8498,85.8498L 64.5916,84.5916L 66,84L 66,82L 64,80L 60,80L 57.3333,81.3333L 56,82L 54,84L 54,88L 58,88Z"
style="fill:rgb(166,213,193);" />
<path d="M 68,78L 64,78L 64,82L 68,82Z" style="fill:rgb(166,213,193);" />
<path d="M 74.6667,78.6667L 76,78L 78.6667,76.6667L 80,76L 80,74L 70,74L 68,76L 68,80L 72,80Z"
style="fill:rgb(166,213,193);" />
<path d="M 84,24L 82,24L 82,66L 84,66Z" style="fill:rgb(166,213,193);" />
<path d="M 86,24L 84,24L 84,72L 86,72Z" style="fill:rgb(106,189,160);" />
<path
d="M 94,114L 94,80L 92,78L 90.6667,77.3333L 88,76L 86.6667,75.3333L 84,74L 80,74L 77.3333,75.3333L 76,76L 73.3333,77.3333L 72,78L 69.3333,79.3333L 68,80L 65.5753,81.5753L 63.1045,83.1045L 60.5654,84.5654L 57.9647,85.9647L 55.3257,87.3257L 54,88L 51.636,89.3995L 49.2489,90.5836L 48.0432,90.9921L 45.5777,91.6132L 42.8616,91.8992L 39.7026,91.9863L 38,92L 38,114L 40,116L 42.6502,117.3498L 45.2759,118.7241L 47.8504,120.1496L 50.3544,121.6456L 52.7937,123.2063L 54,124L 55.3333,124.6667L 58,126L 59.3333,126.6667L 62,128L 70,128L 72.6667,126.6667L 74,126L 76.6667,124.6667L 78,124L 80.6667,122.6667L 82,122L 83.2056,121.2056L 85.6434,119.6434L 88.1441,118.1441L 90.7063,116.7063L 92,116Z"
style="fill:rgb(6,150,109);" />
<path
d="M 85.8729,57.8729L 85.6659,61.6659L 85.2814,65.2814L 84.7048,68.7048L 84,72L 84,74L 85.3333,74.6667L 88,76L 89.3333,76.6667L 92,78L 100,78L 102.4247,76.4247L 104.8955,74.8955L 107.4346,73.4346L 110.0353,72.0353L 112.6743,70.6743L 114,70L 115.2056,69.2056L 117.6434,67.6434L 120.1441,66.1441L 122.7063,64.7063L 124,64L 124,26L 122,24L 119.3498,22.6502L 116.7241,21.2759L 114.1496,19.8504L 111.6456,18.3544L 109.2063,16.7937L 108,16L 106.6667,15.3333L 104,14L 102.6667,13.3333L 100,12L 98.6667,11.3333L 96,10L 94,10L 91.3333,11.3333L 90,12L 87.3333,13.3333L 86,14L 83.6143,15.6143L 81.2088,17.2088L 80,18L 80,20L 80.8396,21.2073L 82.4279,23.6946L 83.7665,26.3869L 84.7608,29.3767L 85.4016,32.6928L 85.7538,36.2964L 85.9157,40.1046L 85.9759,44.0286L 85.9899,48.0011L 85.9756,51.9773L 85.9171,55.9173Z"
style="fill:rgb(6,150,109);" />
<path d="M 62,84L 58,84L 58,86L 62,86Z" style="fill:rgb(132,196,168);" />
<path d="M 42,30L 40,30L 40,36L 42,36Z" style="fill:rgb(255,232,210);" />
<path d="M 42,4L 42,6L 46,6L 46,4Z" style="fill:rgb(255,232,210);" />
<path d="M 50,38L 48,38L 48,44L 50,44Z" style="fill:rgb(255,232,210);" />
<path d="M 48,92L 42,92L 42,94L 48,94Z" style="fill:rgb(94,180,147);" />
<path d="M 82,26L 80,26L 80,68L 82,68Z" style="fill:rgb(94,180,147);" />
<path d="M 40.6667,84.6667L 42,82L 42,78L 40,78L 38,80L 38,86L 40,86Z" style="fill:rgb(174,195,156);" />
<path d="M 50,76L 42,76L 42,82L 44,82L 45.1868,81.5847L 47.5787,80.7752L 50,80Z"
style="fill:rgb(174,195,156);" />
<path d="M 56,74L 54.6667,73.3333L 52,72L 48,72L 48,76L 50,78L 54,78L 56,76Z"
style="fill:rgb(174,195,156);" />
<path d="M 62,72L 62,71L 61,70L 52,70L 52,74L 54,74L 55.3333,74L 58,74L 60,74Z"
style="fill:rgb(174,195,156);" />
<path d="M 64,68L 56,68L 56,70L 58.501,70.499L 61,71L 62,71L 64,70Z" style="fill:rgb(174,195,156);" />
<path d="M 64,66L 60,66L 60,68L 64,68Z" style="fill:rgb(174,195,156);" />
<path d="M 66,30L 64,30L 64,60L 66,60Z" style="fill:rgb(174,195,156);" />
<path d="M 72,25L 71,24L 68,24L 66,26L 66,30L 68,30L 70,30L 72,30Z" style="fill:rgb(174,195,156);" />
<path
d="M 42,2L 38,2L 35.3333,3.3333L 34,4L 31.3333,5.3333L 30,6L 27.3333,7.3333L 26,8L 23.5753,9.5753L 21.1045,11.1045L 18.5654,12.5654L 15.9647,13.9647L 13.3257,15.3257L 12,16L 9.6143,17.6143L 7.2088,19.2088L 6,20L 4,22L 4,24L 14,24L 16.6667,22.6667L 18,22L 20.6667,20.6667L 22,20L 24.4247,18.4247L 25.6601,17.6601L 28.165,16.165L 30.7351,14.7351L 33.3557,13.3557L 36.0055,12.0055L 38.6675,10.6675L 40,10L 42,8Z"
style="fill:rgb(254,244,234);" />
<path
d="M 32,80L 29.5885,78.4115L 27.1929,76.8071L 26,76L 24.6667,75.3333L 22,74L 20.6667,73.3333L 18,72L 16.6667,71.3333L 14,70L 12.3857,69.6143L 9.1769,68.8231L 6,68L 4,68L 4,72L 6,74L 8.6502,75.3498L 11.2759,76.7241L 13.8504,78.1496L 16.3544,79.6456L 18.7937,81.2063L 20,82L 21.3333,82.6667L 24,84L 25.3333,84.6667L 28,86L 32,86Z"
style="fill:rgb(254,244,234);" />
<path d="M 50,0L 42,0L 42,2L 50,2Z" style="fill:rgb(254,244,234);" />
<path
d="M 74,18L 74,14L 72.7072,13.2928L 70.146,11.854L 67.6451,10.3549L 65.2063,8.7937L 64,8L 62.6667,7.3333L 60,6L 58.6667,5.3333L 56,4L 54.6667,3.3333L 52,2L 48,2L 48,4L 49.3333,6.6667L 50,8L 51.2928,8.7072L 53.854,10.146L 56.3549,11.6451L 58.7937,13.2063L 60,14L 61.3333,14.6667L 64,16L 65.3333,16.6667L 68,18Z"
style="fill:rgb(254,244,234);" />
<path
d="M 74,72L 74,74L 80,74L 82.6667,72.6667L 84,72L 84,66L 82,66L 79.6143,67.6143L 77.2088,69.2088L 76,70Z"
style="fill:rgb(190,220,203);" />
<path d="M 84,24L 84,22L 78,22L 78,24L 80,26L 82,26Z" style="fill:rgb(190,220,203);" />
<path d="M 38,84L 34,84L 34,90L 36,90L 36.6667,88.6667L 38,86Z" style="fill:rgb(242,239,228);" />
<path d="M 64,62L 60,62L 60,64L 64,64Z" style="fill:rgb(242,239,228);" />
<path d="M 76.6667,20.6667L 78,20L 78,16L 74,16L 71.3333,17.3333L 70,18L 70,20L 72,22L 74,22Z"
style="fill:rgb(242,239,228);" />
<path d="M 42,82L 40,82L 40,86L 42,86Z" style="fill:rgb(114,176,133);" />
<path d="M 48,80L 48,79L 46,78L 44,78L 44,82L 46,82Z" style="fill:rgb(114,176,133);" />
<path d="M 58,73L 56,72L 54,72L 54,74L 58,74Z" style="fill:rgb(114,176,133);" />
<path
d="M 69,32L 69,30L 66,30L 66,60L 68,60L 68.0007,58.0013L 68.0044,54.0088L 68.0192,50.0384L 68.0636,46.1271L 68.1671,42.3341L 68.3593,38.7186L 68.6476,35.2952Z"
style="fill:rgb(114,176,133);" />
<path d="M 70,28L 68,28L 68,30L 69,32L 70,32Z" style="fill:rgb(114,176,133);" />
<path
d="M 70,64L 67.002,65.002L 64,66L 64,68L 65.3198,68.5767L 67.8263,69.8336L 70.0333,71.3234L 72,73L 74,73L 76,72L 78.6667,70.6667L 80,70L 80,64Z"
style="fill:rgb(114,176,133);" />
<path d="M 72,24L 72,28L 76,28L 78.6667,26.6667L 80,26L 80,24Z" style="fill:rgb(114,176,133);" />
<path d="M 38,80L 36,80L 36,84L 38,84Z" style="fill:rgb(208,206,169);" />
<path d="M 47,76L 47,74L 42,74L 42,76Z" style="fill:rgb(208,206,169);" />
<path d="M 48,72L 46,72L 46,74L 47,76L 48,76Z" style="fill:rgb(208,206,169);" />
<path d="M 52,68L 52,70L 56,70L 56,68Z" style="fill:rgb(208,206,169);" />
<path d="M 56,66L 56,68L 60,68L 60,66Z" style="fill:rgb(208,206,169);" />
<path d="M 66,64L 60,64L 60,66L 66,66Z" style="fill:rgb(208,206,169);" />
<path d="M 64,30L 62,30L 62,58L 64,58Z" style="fill:rgb(208,206,169);" />
<path d="M 66,26L 64,26L 64,30L 66,30Z" style="fill:rgb(208,206,169);" />
<path d="M 47.5885,85.5885L 49.1929,83.1929L 50,82L 50,80L 46,80L 44,82L 44,88L 46,88Z"
style="fill:rgb(49,155,107);" />
<path d="M 54,76L 54,78L 58,78L 60,76L 60,74L 56,74Z" style="fill:rgb(49,155,107);" />
<path d="M 70,72L 60,72L 60,74L 63.002,74.998L 66,76L 70,76Z" style="fill:rgb(49,155,107);" />
<path d="M 72,30L 70,30L 70,58L 72,58Z" style="fill:rgb(49,155,107);" />
<path d="M 74,58L 72,58L 72,62L 76,62L 76,60Z" style="fill:rgb(49,155,107);" />
<path d="M 44,82L 42,82L 42,88L 44,88Z" style="fill:rgb(73,163,117);" />
<path d="M 50,86L 46,86L 46,88L 50,88Z" style="fill:rgb(73,163,117);" />
<path d="M 60,80L 56,80L 56,82L 60,82Z" style="fill:rgb(73,163,117);" />
<path d="M 74,73L 72.6667,71L 72,70L 62,70L 62,72L 63.6143,72.3857L 66.8231,73.1769L 70,74L 74,74Z"
style="fill:rgb(73,163,117);" />
<path d="M 70,32L 68,32L 68,58L 70,58Z" style="fill:rgb(73,163,117);" />
<path d="M 74.998,61.002L 72.998,59.002L 72,58L 70,58L 70,64L 76,64L 76,62Z"
style="fill:rgb(73,163,117);" />
<path d="M 10,26L 8,26L 8,68L 10,68Z" style="fill:rgb(254,223,194);" />
<path d="M 46,18L 42,18L 42,22L 44,22L 46,20Z" style="fill:rgb(254,223,194);" />
<path
d="M 12,24L 4,24L 4,68L 6,70L 12,70L 12,68L 11.2952,66.7048L 10.0138,63.9862L 9.5332,62.4668L 8.757,59.243L 8.3136,55.6867L 8.108,51.8952L 8.0391,47.9815L 8.0532,44.0413L 8.1664,40.1647L 8.4614,36.4612L 9.0527,33.0527L 10.0138,30.0138L 11.2952,27.2952L 12,26Z"
style="fill:rgb(254,240,227);" />
<path d="M 36,82L 32,82L 32,88L 34,88L 34.6667,86.6667L 36,84Z" style="fill:rgb(254,240,227);" />
<path d="M 42,36L 40,36L 40,44L 42,44Z" style="fill:rgb(254,240,227);" />
<path d="M 50,4L 48,2L 42,2L 42,4L 44.4115,5.5885L 46.8071,7.1929L 48,8L 50,8Z"
style="fill:rgb(254,240,227);" />
<path d="M 48,22L 46,22L 46,30L 48,30Z" style="fill:rgb(254,240,227);" />
<path d="M 50,44L 48,44L 48,48L 50,48Z" style="fill:rgb(254,240,227);" />
</svg> -->
</body>
</html>
>>>>>>> .theirs

View File

@ -42,7 +42,7 @@ export default {
deviceMonitor: 'Device Monitor',
runCurve: 'Run Time Curve',
chargeDisData: 'Charge/Discharge Data',
stationData: 'stationData',
stationData: 'Station Data',
environmentalData: 'Environmental Control Data',
sevenDay: 'Seven',
monthDay: 'Month',
@ -83,6 +83,7 @@ export default {
elePriceQuery: 'Electricity Price Query',
queryCriteria: 'Query criteria',
sift: 'sift',
station: 'Station',
provinceRegion: 'Province Region',
selectProvinceRegion: 'Please select province region',
customerType: 'Electricity Customer',
@ -96,6 +97,7 @@ export default {
noData: 'No Data',
eleLevel: 'Electricity Price Level',
fsdd: 'The price of time-of-use electricity',
useElecPrice: 'Electricity prices',
dietailUnit: '(RMB/kWh)',
eleprice: 'The price of electricity and electricity',
nonTime: 'Non-time-of-use Electricity Price',
@ -160,7 +162,7 @@ export default {
// tip: 'Tip',
// updateSuccess: 'The password is successfully changed, please log in again.',
// inputError: 'The information you filled in is incorrect, please correct it according to the prompts.',
// hoenergypower: 'Hoenergy',
// hoenergypower: 'Zetatech',
// companyHomepage: 'Company homepage',
// technicalServices: 'Technical services',
// termsOfService: 'Terms of Service',
@ -351,9 +353,9 @@ export default {
dischargeVol: 'Cumulative Discharging Volume',
totalEff: 'Cumulative Conversion Efficiency',
projectRevenue: 'Project Revenue',
monthTotalChargePrice: 'Total Charging Price Monthly(RMB)',
monthTotalDisChargePrice: 'Total Discharging Price Monthly(RMB)',
earnings: 'Revenue(RMB)',
monthTotalChargePrice: 'Total Charging Price Monthly(EUR)',
monthTotalDisChargePrice: 'Total Discharging Price Monthly(EUR)',
earnings: 'Revenue(EUR)',
earningsDetail: 'Revenue Detail',
charge: 'Charge',
ele: 'Electricity(kWh)',

View File

@ -83,6 +83,8 @@ export default {
elePriceQuery: '电价查询',
queryCriteria: '查询条件',
sift: '筛选',
station: '电站',
selectStation: '请选择电站',
provinceRegion: '省市区域',
selectProvinceRegion: '请选择省市区域',
customerType: '用电客户',
@ -96,6 +98,7 @@ export default {
noData: '数据为空',
eleLevel: '电价水平',
fsdd: '分时电度用电价格',
useElecPrice:'用电价格',
dietailUnit: '(元/千瓦时)',
eleprice: '电度用电价格',
nonTime: '非分时电价',
@ -160,7 +163,7 @@ export default {
// tip: '提示',
// updateSuccess: '密码修改成功,请重新登录。',
// inputError: '您填写的信息有误,请根据提示修正。',
// hoenergypower: '弘正储能',
// hoenergypower: '中自储能',
// companyHomepage: '公司首页',
// technicalServices: '技术服务',
// termsOfService: '服务条款',

View File

@ -1,17 +1,22 @@
{
"name" : "StoraSmart",
"name" : "Zeta Cloud",
"appid" : "__UNI__86592F3",
"description" : "Zetatech",
"versionName" : "2.0.0",
"versionCode" : 200,
"versionName" : "2.0.13",
"versionCode" : 218,
"transformPx" : false,
"sassImplementationName" : "node-sass",
"app-plus" : {
"compatible" : {
"ignoreVersion" : true //true表示忽略版本检查提示框HBuilderX1.9.0及以上版本支持
},
// APP-VUE分包可提APP升启动速度2.7.12开始支持,兼容微信小程序分包方案,默认关闭
"optimization" : {
"subPackages" : true
},
"safearea" : {
"bottom" : {
"bottom" : "auto",
"offset" : "none"
}
},
@ -28,7 +33,14 @@
"distribute" : {
"android" : {
"permissions" : [],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
"useAutoPermissions" : false,
"minSdkVersion" : 32,
"targetSdkVersion" : 36,
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
"excludePermissions" : [
"<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />",
"<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />"
]
},
"ios" : {
"dSYMs" : false
@ -50,33 +62,33 @@
},
"icons" : {
"android" : {
"hdpi" : "C:/Users/46254/Desktop/mipmap-hdpi/组 7 拷贝 4.png",
"xhdpi" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝 4.png",
"xxhdpi" : "C:/Users/46254/Desktop/mipmap-xxhdpi/组 7 拷贝 4.png",
"xxxhdpi" : "C:/Users/46254/Desktop/mipmap-xxxhdpi/组 7 拷贝 4.png"
"hdpi" : "D:/zhuomian/mipmap-hdpi/72x72.png",
"xhdpi" : "D:/zhuomian/mipmap-xhdpi/96x96.png",
"xxhdpi" : "D:/zhuomian/mipmap-xxhdpi/144x144.png",
"xxxhdpi" : "D:/zhuomian/mipmap-xxxhdpi/1024x1024.png"
},
"ios" : {
"appstore" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝.png",
"appstore" : "D:/zhuomian/1/1024x1024.png",
"ipad" : {
"app" : "C:/Users/46254/Desktop/mipmap-hdpi/组 7 拷贝 4.png",
"app@2x" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝 3.png",
"notification" : "C:/Users/46254/Desktop/mipmap-mdpi/组 7 拷贝 11.png",
"notification@2x" : "C:/Users/46254/Desktop/mipmap-mdpi/组 7 拷贝 9.png",
"proapp@2x" : "C:/Users/46254/Desktop/mipmap-xxxhdpi/组 7 拷贝 9.png",
"settings" : "C:/Users/46254/Desktop/mipmap-mdpi/组 7 拷贝 10.png",
"settings@2x" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝 10.png",
"spotlight" : "C:/Users/46254/Desktop/mipmap-mdpi/组 7 拷贝 9.png",
"spotlight@2x" : "C:/Users/46254/Desktop/mipmap-xxxhdpi/组 7 拷贝 11.png"
"app" : "D:/zhuomian/申请邓白氏编码资料表/mipmap-mdpi/76x76.png",
"app@2x" : "D:/zhuomian/申请邓白氏编码资料表/mipmap-xhdpi/152x152.png",
"notification" : "D:/zhuomian/mipmap-mdpi/20x20.png",
"notification@2x" : "D:/zhuomian/mipmap-mdpi/40x40.png",
"proapp@2x" : "D:/zhuomian/申请邓白氏编码资料表/mipmap-xhdpi/167x167.png",
"settings" : "D:/zhuomian/mipmap-mdpi/29x29.png",
"settings@2x" : "D:/zhuomian/mipmap-xhdpi/58x58.png",
"spotlight" : "D:/zhuomian/mipmap-mdpi/40x40.png",
"spotlight@2x" : "D:/zhuomian/mipmap-xxxhdpi/80x80.png"
},
"iphone" : {
"app@2x" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝 8.png",
"app@3x" : "C:/Users/46254/Desktop/mipmap-xxhdpi/组 7 拷贝 8.png",
"notification@2x" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝 11.png",
"notification@3x" : "C:/Users/46254/Desktop/mipmap-xxhdpi/组 7 拷贝 11.png",
"settings@2x" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝 10.png",
"settings@3x" : "C:/Users/46254/Desktop/mipmap-xxhdpi/组 7 拷贝 10.png",
"spotlight@2x" : "C:/Users/46254/Desktop/mipmap-xxxhdpi/组 7 拷贝 11.png",
"spotlight@3x" : "C:/Users/46254/Desktop/mipmap-xhdpi/组 7 拷贝 8.png"
"app@2x" : "D:/zhuomian/mipmap-xhdpi/120x120.png",
"app@3x" : "D:/zhuomian/mipmap-xxhdpi/180x180.png",
"notification@2x" : "D:/zhuomian/mipmap-xhdpi/40x40.png",
"notification@3x" : "D:/zhuomian/mipmap-xxhdpi/60x60.png",
"settings@2x" : "D:/zhuomian/mipmap-xhdpi/58x58.png",
"settings@3x" : "D:/zhuomian/mipmap-xxhdpi/87x87.png",
"spotlight@2x" : "D:/zhuomian/mipmap-xxxhdpi/80x80.png",
"spotlight@3x" : "D:/zhuomian/mipmap-xhdpi/120x120.png"
}
}
},
@ -84,9 +96,9 @@
"androidStyle" : "default",
"androidTranslucent" : true,
"android" : {
"hdpi" : "",
"xhdpi" : "",
"xxhdpi" : ""
"hdpi" : "D:/zhuomian/3.png",
"xhdpi" : "D:/zhuomian/2.png",
"xxhdpi" : "D:/zhuomian/1.png"
},
"iosStyle" : "common",
"ios" : {
@ -140,6 +152,13 @@
"enable" : false
}
},
"title" : "uView UI"
}
"title" : "uView UI",
"devServer" : {
"host" : "0.0.0.0",
"port" : 8080,
"useLocalIp" : true,
"disableHostCheck" : true
}
},
"locale" : "en"
}

3917
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "honenery",
"name": "zetatech",
"version": "2.3.2",
"description": "Honenery 移动端快速开发框架",
"description": "Zetatech Mobile rapid development framework",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"

View File

@ -74,10 +74,24 @@
"navigationBarTitleText": "策略",
"navigationStyle": "custom"
}
},
{
"path": "earningSelect/index",
"style": {
"navigationBarTitleText": "收益分类",
"navigationStyle": "custom"
}
},
{
"path" : "lights/index",
"style" :
{
"navigationStyle": "custom"
}
}
]
},
{
"root": "pages/sys/user",
"pages": [{

View File

@ -112,7 +112,8 @@
</u-popup>
</view>
<view class="subsection-alarm">
<u-subsection :list="alarmTypeList" :current="currentType" :animation="true" @change="sectionChange" :active-color="'#009458'">
<u-subsection :list="alarmTypeList" :current="currentType" :animation="true" @change="sectionChange"
:active-color="'#009458'">
</u-subsection>
</view>
@ -227,7 +228,7 @@
},
language: {
immediate: true,
deep:true,
deep: true,
handler(val) {
if (this.language === 'zh_CN') {
this.alarmTypeList = [{
@ -262,8 +263,8 @@
},
mounted() {},
computed: {
language(){
return this.vuex_language
language() {
return this.vuex_language
},
currentStation() {
return this.vuex_currentStation;

View File

@ -70,7 +70,7 @@
<view class="item-num">{{panelData.Ua | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.avol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.avol')}}(V)</view>
</view>
</view>
@ -86,7 +86,7 @@
<view class="item-num">{{ panelData.Ia | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.acur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.acur')}}(A)</view>
</view>
</view>
@ -102,7 +102,7 @@
<view class="item-num">{{panelData.Ub | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.bvol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.bvol')}}(V)</view>
</view>
</view>
@ -118,7 +118,7 @@
<view class="item-num">{{panelData.Ib | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.bcur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.bcur')}}(A)</view>
</view>
</view>
@ -134,7 +134,7 @@
<view class="item-num">{{ panelData.Uc | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.cvol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.cvol')}}(V)</view>
</view>
</view>
@ -150,7 +150,7 @@
<view class="item-num">{{panelData.Ic | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.ccur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.ccur')}}(A)</view>
</view>
</view>
@ -166,7 +166,7 @@
<view class="item-num">{{panelData.Uab | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.abLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.abLineVol')}}(V)</view>
</view>
</view>
@ -182,7 +182,7 @@
<view class="item-num">{{ panelData.Ubc | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.bcLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.bcLineVol')}}(V)</view>
</view>
</view>
@ -217,7 +217,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.zxygzdl')}}
{{$t('homePage.device.zxygzdl')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -228,18 +228,18 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.dlj')}}{{ panelData.forwardActE1 | isNull}}
{{$t('homePage.device.dlj')}}{{ panelData.forwardActE1 | isNull}}
</view>
<view>
{{this.$t('homePage.device.dlf')}}{{ panelData.forwardActE2 | isNull}}
{{$t('homePage.device.dlf')}}{{ panelData.forwardActE2 | isNull}}
</view>
<view>
{{this.$t('homePage.device.dlp')}}{{ panelData.forwardActE3 | isNull}}
{{$t('homePage.device.dlp')}}{{ panelData.forwardActE3 | isNull}}
</view>
<view>
{{this.$t('homePage.device.dlg')}}{{ panelData.forwardActE4 | isNull}}
{{$t('homePage.device.dlg')}}{{ panelData.forwardActE4 | isNull}}
</view>
</view>
@ -252,7 +252,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.fxygzdl')}}
{{$t('homePage.device.fxygzdl')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -263,18 +263,18 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.dlj')}}{{ panelData.backwardActE1 | isNull}}
{{$t('homePage.device.dlj')}}{{ panelData.backwardActE1 | isNull}}
</view>
<view>
{{this.$t('homePage.device.dlf')}}{{ panelData.backwardActE2 | isNull}}
{{$t('homePage.device.dlf')}}{{ panelData.backwardActE2 | isNull}}
</view>
<view>
{{this.$t('homePage.device.dlp')}}{{ panelData.backwardActE3 | isNull}}
{{$t('homePage.device.dlp')}}{{ panelData.backwardActE3 | isNull}}
</view>
<view>
{{this.$t('homePage.device.dlg')}}{{ panelData.backwardActE4 | isNull}}
{{$t('homePage.device.dlg')}}{{ panelData.backwardActE4 | isNull}}
</view>
</view>
@ -288,7 +288,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.hxyggl')}}
{{$t('homePage.device.hxyggl')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -299,15 +299,15 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.a')}}{{ panelData.activePowerA}}
{{$t('homePage.device.a')}}{{ panelData.activePowerA}}
</view>
<view>
{{this.$t('homePage.device.b')}}{{ panelData.activePowerB}}
{{$t('homePage.device.b')}}{{ panelData.activePowerB}}
</view>
<view>
{{this.$t('homePage.device.c')}}{{ panelData.activePowerC}}
{{$t('homePage.device.c')}}{{ panelData.activePowerC}}
</view>
</view>
@ -320,7 +320,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.hxwggl')}}
{{$t('homePage.device.hxwggl')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -331,15 +331,15 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.a')}}{{ panelData.reactivePowerA}}
{{$t('homePage.device.a')}}{{ panelData.reactivePowerA}}
</view>
<view>
{{this.$t('homePage.device.b')}}{{ panelData.reactivePowerB}}
{{$t('homePage.device.b')}}{{ panelData.reactivePowerB}}
</view>
<view>
{{this.$t('homePage.device.c')}}{{ panelData.reactivePowerC}}
{{$t('homePage.device.c')}}{{ panelData.reactivePowerC}}
</view>
</view>
@ -352,7 +352,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.hxglys')}}
{{$t('homePage.device.hxglys')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -363,15 +363,15 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.a')}}{{ panelData.PFactorA}}
{{$t('homePage.device.a')}}{{ panelData.PFactorA}}
</view>
<view>
{{this.$t('homePage.device.b')}}{{ panelData.PFactorB}}
{{$t('homePage.device.b')}}{{ panelData.PFactorB}}
</view>
<view>
{{this.$t('homePage.device.c')}}{{ panelData.PFactorC}}
{{$t('homePage.device.c')}}{{ panelData.PFactorC}}
</view>
</view>

View File

@ -31,7 +31,7 @@
</view>
<view class="item-title">
{{this.$t('homePage.device.cumCharge')}}({{ totalPanelData.cTotalChargePower | kwhUnitFormat }})
{{$t('homePage.device.cumCharge')}}({{ totalPanelData.cTotalChargePower | kwhUnitFormat }})
</view>
</view>
</view>
@ -50,7 +50,7 @@
</view>
<view class="item-title">
{{this.$t('homePage.device.cumDischarge'),}}({{ totalPanelData.cTotalDisChargePower | kwhUnitFormat }})
{{$t('homePage.device.cumDischarge'),}}({{ totalPanelData.cTotalDisChargePower | kwhUnitFormat }})
</view>
</view>
</view>
@ -66,11 +66,11 @@
<view class="item-num">{{totalPanelData.cageT | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.avgTem')}}()</view>
<view class="item-title">{{$t('homePage.device.avgTem')}}()</view>
</view>
</view>
<view class="group-item "
@click="showHistory(this.$t('homePage.device.avgVol'), 'csingleAgeV', 'bms','V','')">
@click="showHistory($t('homePage.device.avgVol'), 'csingleAgeV', 'bms','V','')">
<view class="history-icon">
<image src="/static/aidex/images/history-icon.png"></image>
</view>
@ -81,7 +81,7 @@
<view class="item-num">{{ totalPanelData.csingleAgeV | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.avgVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.avgVol')}}(V)</view>
</view>
</view>
@ -129,7 +129,7 @@
<view class="item-num">{{panelData.csingleMaxVolData | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.maxCellVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.maxCellVol')}}(V)</view>
</view>
</view>
@ -145,7 +145,7 @@
<view class="item-num">{{panelData.csingleMinVolData | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.minCellVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.minCellVol')}}(V)</view>
</view>
</view>
<view class="group-item "
@ -158,7 +158,7 @@
</view>
<view class="item-con">
<view class="item-num">{{panelData.csingleMaxTemData | isNull}}</view>
<view class="item-title">{{this.$t('homePage.device.maxCellTem')}}()</view>
<view class="item-title">{{$t('homePage.device.maxCellTem')}}()</view>
</view>
</view>
@ -174,7 +174,7 @@
<view class="item-num">{{panelData.csingleMinTemData | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.minCellTem')}}()</view>
<view class="item-title">{{$t('homePage.device.minCellTem')}}()</view>
</view>
</view>
</view>
@ -188,7 +188,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxvolDiff')}}
{{$t('homePage.device.maxvolDiff')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -198,7 +198,7 @@
</view>
</view>
<view class="bottom-value">
{{this.$t('homePage.device.avgVol')}}{{totalPanelData.csingleAgeV | isNull}}V
{{$t('homePage.device.avgVol')}}{{totalPanelData.csingleAgeV | isNull}}V
</view>
</view>
@ -209,7 +209,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxTemDiff')}}
{{$t('homePage.device.maxTemDiff')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -219,7 +219,7 @@
</view>
</view>
<view class="bottom-value">
{{this.$t('homePage.device.avgTem')}}{{totalPanelData.cageT | isNull}}
{{$t('homePage.device.avgTem')}}{{totalPanelData.cageT | isNull}}
</view>
</view>
@ -230,7 +230,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxCellVol')}}
{{$t('homePage.device.maxCellVol')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -243,11 +243,11 @@
<view>
{{this.$t('homePage.device.batteryGroupNum')}}{{panelData.csingleMaxVolBMUNum | isNull}}
{{$t('homePage.device.batteryGroupNum')}}{{panelData.csingleMaxVolBMUNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.cellPostion')}}{{panelData.csingleMaxVolBoxNum | isNull}}
{{$t('homePage.device.cellPostion')}}{{panelData.csingleMaxVolBoxNum | isNull}}
</view>
</view>
@ -261,7 +261,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.minCellVol')}}
{{$t('homePage.device.minCellVol')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -274,11 +274,11 @@
<view>
{{this.$t('homePage.device.batteryGroupNum')}}{{panelData.csingleMinVolBMUNum | isNull}}
{{$t('homePage.device.batteryGroupNum')}}{{panelData.csingleMinVolBMUNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.cellPostion')}}{{panelData.csingleMinVolBoxNum | isNull}}
{{$t('homePage.device.cellPostion')}}{{panelData.csingleMinVolBoxNum | isNull}}
</view>
</view>
@ -291,7 +291,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxCellTem')}}
{{$t('homePage.device.maxCellTem')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -304,11 +304,11 @@
<view>
{{ this.$t('homePage.device.batteryGroupNum') }}{{panelData.csingleMaxTemBMUNum | isNull}}
{{ $t('homePage.device.batteryGroupNum') }}{{panelData.csingleMaxTemBMUNum | isNull}}
</view>
<view>
{{ this.$t('homePage.device.cellPostion') }}{{panelData.csingleMaxTemBoxNum | isNull}}
{{ $t('homePage.device.cellPostion') }}{{panelData.csingleMaxTemBoxNum | isNull}}
</view>
</view>
@ -317,11 +317,11 @@
</view>
<view class="group-box padding-top-30 "
@click="showHistory(this.$t('homePage.device.minCellTem'), 'csingleMinTemData', 'bms','℃','')">
@click="showHistory($t('homePage.device.minCellTem'), 'csingleMinTemData', 'bms','℃','')">
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.minCellTem')}}
{{$t('homePage.device.minCellTem')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -332,11 +332,11 @@
</view>
<view class="bottom-value">
<view>
{{ this.$t('homePage.device.batteryGroupNum') }}{{panelData.csingleMinTemBMUNum | isNull}}
{{ $t('homePage.device.batteryGroupNum') }}{{panelData.csingleMinTemBMUNum | isNull}}
</view>
<view>
{{ this.$t('homePage.device.cellPostion') }}{{panelData.csingleMinTemBoxNum | isNull}}
{{ $t('homePage.device.cellPostion') }}{{panelData.csingleMinTemBoxNum | isNull}}
</view>
</view>

View File

@ -15,9 +15,9 @@
<view class="item-con">
<view class="item-num"
:class="panelData.EMURingMainCabinetSwitchClosed ? 'success' : 'warning'">
{{panelData.EMURingMainCabinetSwitchClosed ? this.$t('homePage.device.on') : this.$t('homePage.device.off')}}
{{panelData.EMURingMainCabinetSwitchClosed ? $t('homePage.device.on') : $t('homePage.device.off')}}
</view>
<view class="item-title">{{this.$t('homePage.device.emuSwitchPosition')}}</view>
<view class="item-title">{{$t('homePage.device.emuSwitchPosition')}}</view>
</view>
</view>
@ -28,9 +28,9 @@
<view class="item-con">
<view class="item-num"
:class="panelData.EMURemoteNetworkCabinet ? 'success' : 'warning'">
{{panelData.EMURemoteNetworkCabinet ? this.$t('homePage.device.distance') : this.$t('homePage.device.local')}}
{{panelData.EMURemoteNetworkCabinet ? $t('homePage.device.distance') : $t('homePage.device.local')}}
</view>
<view class="item-title">{{this.$t('homePage.device.emuRemoteOperation')}}</view>
<view class="item-title">{{$t('homePage.device.emuRemoteOperation')}}</view>
</view>
</view>
@ -42,7 +42,7 @@
<view class="item-con">
<view class="item-num"
:class="panelData.EMUCabinetSwitchClosingPosition ? 'success' : 'warning'">
{{panelData.EMUCabinetSwitchClosingPosition ? this.$t('homePage.device.on') : $t('homePage.device.off')}}
{{panelData.EMUCabinetSwitchClosingPosition ? $t('homePage.device.on') : $t('homePage.device.off')}}
</view>
<view class="item-title">并网柜地刀位置</view>
@ -56,9 +56,9 @@
<view class="item-con">
<view class="item-num"
:class="panelData.EMURingMainCabinetSwitchClosed ? 'success' : 'warning'">
{{panelData.EMURingMainCabinetSwitchClosed ? this.$t('homePage.device.online') : this.$t('homePage.device.offline')}}
{{panelData.EMURingMainCabinetSwitchClosed ? $t('homePage.device.online') : $t('homePage.device.offline')}}
</view>
<view class="item-title">{{ this.$t('homePage.device.runState') }}</view>
<view class="item-title">{{ $t('homePage.device.runState') }}</view>
</view>
</view>
</view>
@ -79,7 +79,7 @@
<view class="item-num">{{panelData.EMUBoxPhaseATemperature | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.aTem')}}()</view>
<view class="item-title">{{$t('homePage.device.aTem')}}()</view>
</view>
</view>
@ -92,7 +92,7 @@
<view class="item-num">{{panelData.EMUBoxPhaseBTemperature | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.bTem')}}()</view>
<view class="item-title">{{$t('homePage.device.bTem')}}()</view>
</view>
</view>
@ -105,7 +105,7 @@
<view class="item-num">{{panelData.EMUBoxPhaseCTemperature | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.cTem')}}()</view>
<view class="item-title">{{$t('homePage.device.cTem')}}()</view>
</view>
</view>
<view class="group-item">
@ -116,9 +116,9 @@
<view class="item-con">
<view class="item-num"
:class="panelData.EMUDeviceOnlineStatus ? 'success' : 'warning'">
{{panelData.EMUDeviceOnlineStatus ? this.$t('homePage.device.online') : this.$t('homePage.device.offline')}}
{{panelData.EMUDeviceOnlineStatus ? $t('homePage.device.online') : $t('homePage.device.offline')}}
</view>
<view class="item-title">{{ this.$t('homePage.device.runState') }}</view>
<view class="item-title">{{ $t('homePage.device.runState') }}</view>
</view>
</view>
@ -142,7 +142,7 @@
<view class="item-num">{{panelData.EMUDehumidifier1Temperature | isNull}}
</view>
<view class="item-title">{{ this.$t('homePage.device.tem') }}()</view>
<view class="item-title">{{ $t('homePage.device.tem') }}()</view>
</view>
</view>
@ -155,7 +155,7 @@
<view class="item-num">{{panelData.EMUDehumidifier1Humidity | isNull}}
</view>
<view class="item-title">{{ this.$t('homePage.device.hum') }}(%)</view>
<view class="item-title">{{ $t('homePage.device.hum') }}(%)</view>
</view>
</view>
@ -168,7 +168,7 @@
<view class="item-num">{{panelData.EMUDehumidifier1HumidityStartValue | isNull}}
</view>
<view class="item-title">{{ this.$t('homePage.device.humStartValue') }}(%)</view>
<view class="item-title">{{ $t('homePage.device.humStartValue') }}(%)</view>
</view>
</view>
@ -181,7 +181,7 @@
<view class="item-num">{{panelData.EMUDehumidifier1HumidityStopValue | isNull}}
</view>
<view class="item-title">{{ this.$t('homePage.device.humStopValue') }}(%)</view>
<view class="item-title">{{ $t('homePage.device.humStopValue') }}(%)</view>
</view>
</view>
@ -193,9 +193,9 @@
<view class="item-con">
<view class="item-num"
:class="panelData.EMUDeviceOnlineStatus ? 'success' : 'warning'">
{{panelData.EMUDeviceOnlineStatus ? this.$t('homePage.device.online') : this.$t('homePage.device.offline')}}
{{panelData.EMUDeviceOnlineStatus ? $t('homePage.device.online') : $t('homePage.device.offline')}}
</view>
<view class="item-title">{{ this.$t('homePage.device.runState') }}</view>
<view class="item-title">{{ $t('homePage.device.runState') }}</view>
</view>
</view>
@ -218,7 +218,7 @@
<view class="item-num">{{panelData.EMUPhaseVoltageUA | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.avol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.avol')}}(V)</view>
</view>
</view>
@ -231,7 +231,7 @@
<view class="item-num">{{panelData.EMUIA | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.acur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.acur')}}(A)</view>
</view>
</view>
@ -244,7 +244,7 @@
<view class="item-num">{{panelData.EMUPhaseVoltageUB | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.bvol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.bvol')}}(V)</view>
</view>
</view>
<view class="group-item">
@ -256,7 +256,7 @@
<view class="item-num">{{panelData.EMUIB | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.bcur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.bcur')}}(A)</view>
</view>
</view>
@ -269,7 +269,7 @@
<view class="item-num">{{panelData.EMUPhaseVoltageUC | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.cvol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.cvol')}}(V)</view>
</view>
</view>
@ -282,7 +282,7 @@
<view class="item-num">{{panelData.EMUIC | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.ccur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.ccur')}}(A)</view>
</view>
</view>
@ -295,7 +295,7 @@
<view class="item-num">{{panelData.EMULineVoltageUAB | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.abLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.abLineVol')}}(V)</view>
</view>
</view>
@ -308,7 +308,7 @@
<view class="item-num">{{panelData.EMULineVoltageUBC | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.bcLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.bcLineVol')}}(V)</view>
</view>
</view>
@ -321,7 +321,7 @@
<view class="item-num">{{panelData.EMULineVoltageUAC | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.caLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.caLineVol')}}(V)</view>
</view>
</view>
@ -334,7 +334,7 @@
<view class="item-num">{{panelData.EMUFrequency | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.frequency')}}(Hz)</view>
<view class="item-title">{{$t('homePage.device.frequency')}}(Hz)</view>
</view>
</view>
@ -348,7 +348,7 @@
</view>
<view class="item-title">
{{this.$t('homePage.device.zxygzdl')}}({{panelData.EMUAbsorbingActiveElectricalEnergy | kwhUnitFormat}})</view>
{{$t('homePage.device.zxygzdl')}}({{panelData.EMUAbsorbingActiveElectricalEnergy | kwhUnitFormat}})</view>
</view>
</view>
@ -362,7 +362,7 @@
</view>
<view class="item-title">
{{this.$t('homePage.device.fxygzdl')}}({{panelData.EMUReleaseActiveElectricalEnergy | kwhUnitFormat}})</view>
{{$t('homePage.device.fxygzdl')}}({{panelData.EMUReleaseActiveElectricalEnergy | kwhUnitFormat}})</view>
</view>
</view>
<view class="group-item">
@ -374,7 +374,7 @@
<view class="item-num">{{panelData.EMUInductiveEnergy | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.perceptualPower')}}(kVarh)</view>
<view class="item-title">{{$t('homePage.device.perceptualPower')}}(kVarh)</view>
</view>
</view>
@ -387,7 +387,7 @@
<view class="item-num">{{panelData.EMUCapacitiveEnergy | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.CapacitivePower')}}(kVarh)</view>
<view class="item-title">{{$t('homePage.device.CapacitivePower')}}(kVarh)</view>
</view>
</view>
@ -399,9 +399,9 @@
<view class="item-con">
<view class="item-num"
:class="panelData.EMUOnlineStatusOfElectricityMeter ? 'success' : 'warning'">
{{panelData.EMUOnlineStatusOfElectricityMeter ? this.$t('homePage.device.online') : this.$t('homePage.device.offline')}}
{{panelData.EMUOnlineStatusOfElectricityMeter ? $t('homePage.device.online') : $t('homePage.device.offline')}}
</view>
<view class="item-title">{{this.$t('homePage.device.runState')}}</view>
<view class="item-title">{{$t('homePage.device.runState')}}</view>
</view>
</view>
</view>
@ -414,7 +414,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{ this.$t('homePage.device.totalActivePower')}}
{{ $t('homePage.device.totalActivePower')}}
</view>
<view class="value">
@ -422,9 +422,9 @@
</view>
</view>
<view class="bottom-value">
<view>{{ this.$t('homePage.device.a')}}{{panelData.EMUPA | isNull}}</view>
<view>{{ this.$t('homePage.device.b')}}{{panelData.EMUPB | isNull}}</view>
<view>{{ this.$t('homePage.device.c')}}{{panelData.EMUPC | isNull}}</view>
<view>{{ $t('homePage.device.a')}}{{panelData.EMUPA | isNull}}</view>
<view>{{ $t('homePage.device.b')}}{{panelData.EMUPB | isNull}}</view>
<view>{{ $t('homePage.device.c')}}{{panelData.EMUPC | isNull}}</view>
</view>
@ -436,7 +436,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{ this.$t('homePage.device.totalReactivePower')}}
{{ $t('homePage.device.totalReactivePower')}}
</view>
<view class="value">
@ -444,9 +444,9 @@
</view>
</view>
<view class="bottom-value">
<view>{{ this.$t('homePage.device.a')}}{{panelData.EMUQA | isNull}}</view>
<view>{{ this.$t('homePage.device.b')}}{{panelData.EMUQB | isNull}}</view>
<view>{{ this.$t('homePage.device.c')}}{{panelData.EMUQC | isNull}}</view>
<view>{{ $t('homePage.device.a')}}{{panelData.EMUQA | isNull}}</view>
<view>{{ $t('homePage.device.b')}}{{panelData.EMUQB | isNull}}</view>
<view>{{ $t('homePage.device.c')}}{{panelData.EMUQC | isNull}}</view>
</view>
</view>

View File

@ -0,0 +1,755 @@
<template>
<view class="pcs-warp">
<view class="box">
<view class="topology-box">
<Section :title="$t('homePage.home.mpptTopu')" />
<topoCanvas cId="canvas" :width="'100%'" :height="'100%'" :canvas-data="canvasData" />
</view>
</view>
<view class="box">
<Section :title="$t('homePage.home.powerGenerationCapacity')">
<view slot="right" style="flex: 1">
<view class="top-right-box">
<span class="time">{{$t('homePage.device.timeGranularity')}}:</span>
<span @click="openTimeAction" class="value">{{sampleTime}}</span>
</view>
</view>
</Section>
<view class="chart-box">
<zero-loading v-if="chartLoading" position="absolute"></zero-loading>
<charts v-else id="pcsChart" :options="curve_option"></charts>
</view>
</view>
<!-- <view class="box" style="margin-bottom: 0;">
<Section :title="$t('homePage.device.deviceData')" />
<zero-loading v-if="stationLoading" position="absolute"></zero-loading>
<view v-else class="group-box">
<view class="group-item" @click="showHistory($t('homePage.home.batVoltage'), 'outputPower', 'pcs', 'kW', '')">
<view class="history-icon">
<image src="/static/aidex/images/history-icon.png"></image>
</view>
<view class="item-icon">
<image src="/static/aidex/images/zjrl.png"></image>
</view>
<view class="item-con">
<view class="item-num">{{ panelData.pvActivePower | kWFormat }}
</view>
<view class="item-title">{{$t('homePage.home.batVoltage')}}(V)</view>
</view>
</view>
<view class="group-item border-right"
@click="showHistory($t('homePage.home.batCurrent'), 'reactivePowerPCS', 'pcs', 'V', '')">
<view class="history-icon">
<image src="/static/aidex/images/history-icon.png"></image>
</view>
<view class="item-icon">
<image src="/static/aidex/images/zjrl.png"></image>
</view>
<view class="item-con">
<view class="item-num">{{ panelData.lowV }}
</view>
<view class="item-title">{{$t('homePage.home.batCurrent')}}(A)</view>
</view>
</view>
<view class="group-item" @click="showHistory($t('homePage.home.busVoltage'), 'grid', 'pcs', 'Hz', '')">
<view class="history-icon">
<image src="/static/aidex/images/history-icon.png"></image>
</view>
<view class="item-icon">
<image src="/static/aidex/images/dqgl.png"></image>
</view>
<view class="item-con">
<view class="item-num">{{ panelData.lowI | isNull }}
</view>
<view class="item-title">{{$t('homePage.home.busVoltage')}}(V)</view>
</view>
</view>
<view class="group-item border-right" @click="showHistory($t('homePage.home.busCurrent'), 'volA', 'pcs', 'V', '')">
<view class="history-icon">
<image src="/static/aidex/images/history-icon.png"></image>
</view>
<view class="item-icon">
<image src="/static/aidex/images/zfdl.png"></image>
</view>
<view class="item-con">
<view class="item-num">{{ panelData.highV | isNull }}
</view>
<view class="item-title">{{$t('homePage.home.busCurrent')}}(A)</view>
</view>
</view>
</view>
</view> -->
<historyModal :is-show.sync="histroyShow" :title="chartTitle" :params="hisParams" />
<u-action-sheet :list="actionSheetList" v-model="timeShow" @click="actionSheetCallback" @close="closeTimeAction"
:mask-close-able="false"></u-action-sheet>
</view>
</template>
<script>
import topoCanvas from '@/components/new-canvas/index.vue'
import historyModal from '@/components/history-modal/index.vue'
import Section from '@/components/section/index.vue'
import charts from "@/components/charts/index";
export default {
components: {
historyModal,
Section,
charts,
topoCanvas
},
data() {
return {
curve_option: {},
panelData: {},
histroyShow: false,
chartTitle: null,
chartLoading: false,
stationLoading: false,
hisParams: {},
timeShow: false,
time: "1",
stationId: null,
srcId: null,
hnStationId: [417, 398, 416, 415, 405, 485],
actionSheetList: Object.values(this.$t('homePage.home.timesArr')),
sampleTime:this.$t('homePage.home.timesArr')[0].text,
canvasData: [],
textCanvasData: [
{
type: "text",
coord: [
[144, 240]
],
font: [{
text:this.$t('homePage.home.activePowerpcs'),
size: 12,
color: "#999",
},
{
text: "",
size: 12,
color: "#000",
offsetX: 0
},
],
},
{
type: "text",
coord: [
[144, 260]
],
font: [{
text:this.$t('homePage.home.highV') + ':',
size: 12,
color: "#999",
},
{
text: "",
size: 12,
color: "#000",
offsetX: 0
},
],
},
//2
{
type: "text",
coord: [
[144, 280]
],
font: [{
text:this.$t('homePage.home.lowV') + ':',
size: 12,
color: "#999",
},
{
text: "",
size: 12,
color: "#000",
offsetX: 0
},
],
},
{
type: "text",
coord: [
[144, 300]
],
font: [{
text:this.$t('homePage.home.lowI') + ':',
size: 12,
color: "#999",
},
{
text: "",
size: 12,
color: "#000",
offsetX: 0
},
],
},
//5
{
type: "text",
coord: [
[3, 120]
],
font: [{
text: this.$t('homePage.device.gridMode') + ':',
size: 14,
color: "#999999",
width: 50,
},
{
text: "",
size: 14,
color: "#000",
left: 80
},
],
},
//6
{
type: "text",
coord: [
[3, 140]
],
font: [{
text: this.$t('homePage.device.runState') + ':',
size: 14,
color: "#999999",
width: 50,
},
{
text: "",
size: 14,
color: "#000",
offsetX: 0
},
],
}
],
imageCanvasData: [
{
//AC/DC
type: "image",
url: "/static/topology/DCDC.png",
coord: [
[155, 80],
[30, 30],
],
},
{
//电池
type: "image",
url: "/static/topology/pv.png",
coord: [
[144, 180],
[50, 50],
],
},
],
lineCanvasData: [{
type: "line",
coord: [
[60, 30],
[280, 30],
],
color: "#19875c",
width: 2,
},
{
type: "line",
coord: [
[170, 30],
[170, 180],
],
color: "#19875c",
width: 2,
},
]
}
},
computed: {
currentStation() {
return this.vuex_currentStation;
},
},
watch: {
currentStation: {
handler(val) {
this.stationId = val.id;
},
deep: true,
immediate: true,
},
},
methods: {
getData(srcId) {
this.srcId = srcId
this.getChart()
this.getStatus()
},
getChart() {
const self = this
self.chartLoading = true;
return new Promise((resolve, reject) => {
self.$u.api.deviceList
.GetPvCurve({
stationId: this.stationId,
sampleTime: this.time,
srcId: this.srcId,
})
.then((res) => {
self.chartLoading = false;
self.initChargeChart(res.data);
// this.getStatus();
resolve(res);
})
.catch((err) => {
reject("错误");
})
.finally(() => {
self.chartLoading = false;
});
});
},
initChargeChart(val) {
const gonglv = [];
// const soc = [];
const xAxis = [];
val.forEach((v) => {
xAxis.push(v.data);
gonglv.push(v.planCurve);
// soc.push(v.inCoreDataCurve);
});
this.curve_option = {
color: ["#BFE49F"],
animationDuration: 500,
animationEasing: "cubicInOut",
tooltip: {
trigger: "axis",
axisPointer: {},
confine: true,
textStyle: {
textShadowBlur: 10, // 重点
textShadowColor: 'transparent', // 重点
},
position: function(point, params, dom, rect, size) {
// 鼠标坐标和提示框位置的参考坐标系是以外层div的左上角那一点为原点x轴向右y轴向下
// 提示框位置
var x = 0; // x坐标位置
var y = 0; // y坐标位置
// 当前鼠标位置
var pointX = point[0];
var pointY = point[1];
// 外层div大小
// var viewWidth = size.viewSize[0];
// var viewHeight = size.viewSize[1];
// 提示框大小
var boxWidth = size.contentSize[0];
var boxHeight = size.contentSize[1];
// boxWidth > pointX 说明鼠标左边放不下提示框
if (boxWidth > pointX) {
x = 5; // 自己定个x坐标值以防出屏
y -= 15; // 防止点被覆盖住,可根据情况自行调节
} else {
// 左边放的下
x = pointX - boxWidth - 15;
}
// boxHeight > pointY 说明鼠标上边放不下提示框
if (boxHeight + 20 > pointY) {
y = pointY + 15;
} else if (boxHeight > pointY) {
y = 5;
} else {
// 上边放得下
y += pointY - boxHeight;
}
return [x, y];
},
},
grid: {
top: "15%",
left: "5%",
right: "3%",
bottom: "10%",
containLabel: true,
},
xAxis: {
type: "category",
data: xAxis,
splitLine: {
show: false,
},
axisLabel: {
show: true,
color: "#A3A3A3",
formatter: function(params) {
let newParamsName = "";
const paramsNameNumber = params.length; // 文字总长度
const provideNumber = 11; //一行显示几个字
const rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (let p = 0; p < rowNumber; p++) {
const start = p * provideNumber;
const end = start + provideNumber;
const tempStr =
p === rowNumber - 1 ?
params.substring(start, paramsNameNumber) :
params.substring(start, end) + "\n";
newParamsName += tempStr;
}
} else {
newParamsName = params;
}
return newParamsName;
},
},
},
yAxis: [{
type: "value",
name: this.$t('homePage.home.powerGenerationCapacity') + "(kW)",
axisLabel: {
color: "#A3A3A3",
},
nameTextStyle: {
color: "#A3A3A3",
},
min: function(value) {
return Math.floor(
(Math.abs(value.min) < value.max ?
-value.max * 1.05 :
value.min * 1.05
).toFixed(2)
);
},
max: function(value) {
return Math.ceil(
(Math.abs(value.min) < value.max ?
value.max * 1.05 :
-value.min * 1.05
).toFixed(2)
);
},
nameTextStyle: {
fontSize: 12,
padding: [0, 0, 0, 30],
},
}
],
dataZoom: {
type: "inside",
},
series: [{
name: this.$t('homePage.home.powerGenerationCapacity'),
type: "line",
smooth: true,
symbol: "none",
areaStyle: {
opacity: 0,
},
data: gonglv,
}
],
};
},
openTimeAction() {
this.timeShow = true;
},
getStatus() {
this.stationLoading = true
const self = this;
this.$u.api.deviceList
.GetNewValue({
stationId: this.stationId,
srcId: this.srcId,
colList: ["lowV", "highV", "lowI",
"pvActivePower","runState","remoteInPlace",
"onGrid","offGrid","stateCharging",
"stateDischarging","deviceStateStand","deviceStateFault",
"deviceStateFull","deviceStateEmpty","dcBreaker",
"eStop","soc","grid",
"outputPower",
// "reactivePowerPCS",
// ,
// "volA",
// "volB",
// "volC",
// "currentA",
// "currentB",
// "currentC",
// "dcPower",
// "dcInputVol",
// "dcCurrent",
],
})
.then((res) => {
const battery = self.updateBattery(res.data.soc?.value ? res.data.soc.value : 0);
this.panelData = {
lowV: res.data.lowV?.value ? res.data.lowV?.value : 0,
highV: res.data.highV?.value ? res.data.highV?.value : 0,
lowI: res.data.lowI?.value ? res.data.lowI?.value : 0,
pvActivePower: res.data.pvActivePower?.value ? res.data.pvActivePower?.value : 0
};
this.textCanvasData[0].font[1].text = res.data.pvActivePower?.value ? res.data.pvActivePower.value + " kW" : 0 + " kW";
this.textCanvasData[1].font[1].text = res.data.highV?.value ? res.data.highV.value + " V" : 0 + " V";
this.textCanvasData[2].font[1].text = res.data.lowV?.value ? res.data.lowV.value + " V" : 0 + " V";
this.textCanvasData[3].font[1].text = res.data.lowI?.value ? res.data.lowI.value + " A" : 0 + " A";
this.textCanvasData[5].font[1].text = res.data.onGrid?.value ?
this.$t('homePage.device.grid') :
this.$t('homePage.device.offGrid');
if(res.data.outputPower?.value){
this.textCanvasData[6].font[1].text = this.getFlowDirection(res.data.outputPower?.value, res
.data.flowDirection)
}
this.canvasData = [...this.textCanvasData, ...this.imageCanvasData, ...this.lineCanvasData]
})
.finally((res) => {
this.stationLoading = false;
});
},
updateBattery(value) {
//电池电量 value 为0~100
const batteryHeight = 0.35 * value;
const battery = {
type: "rect",
background: "#19875c",
coord: [
[156, 285 - batteryHeight],
[25.5, batteryHeight],
],
};
return battery;
},
getRunState(value, value2) {
if (value) {
return this.$t('homePage.device.standby');
} else if (value2) {
return this.$t('homePage.device.fault');
} else {
return "";
}
},
// 设备工作状态
workStatus(val) {
if (val === 0) {
return this.$t('homePage.device.shutdown')
} else if (val === 1) {
return this.$t('homePage.device.run')
} else if (val === 2) {
return this.$t('homePage.device.standby')
} else {
return ''
}
},
// 充放电状态
getFlowDirection(val, flowDirection) {
if (flowDirection === 2) {
if (+val > +1) {
return this.$t('homePage.device.discharge')
}
if (+val < -1) {
return this.$t('homePage.device.charge')
}
if (val < 1 || +val.abs < 1 || !val) {
return this.$t('homePage.device.standing')
}
} else {
if (+val > +1) {
return this.$t('homePage.device.charge')
}
if (+val < -1) {
return this.$t('homePage.device.discharge')
}
if (val < 1 || +val.abs < 1 || !val) {
return this.$t('homePage.device.standing')
}
}
},
// 电池信息
updateBattery(value) {
//电池电量 value 为0~100
const batteryHeight = 0.35 * value;
const battery = {
type: "rect",
background: "#19875c",
coord: [
[156, 285 - batteryHeight],
[25.5, batteryHeight],
],
};
return battery;
},
// 历史曲线
showHistory(name, modelCol, modelType, unit) {
this.hisParams = {
modelCol: modelCol,
modelType: modelType,
unit: unit
}
this.chartTitle = name
this.histroyShow = true
},
actionSheetCallback(index) {
this.sampleTime = this.actionSheetList[index].text;
this.time = this.actionSheetList[index].value;
this.getChart()
},
closeTimeAction() {
this.timeShow = false;
},
}
}
</script>
<style lang="scss" scoped>
.pcs-warp {
background-color: #f5f5f5;
height: 100%;
.box {
background: #ffffff;
border-radius: 16rpx;
padding: 20rpx;
width: 100%;
border: 16rpx;
box-shadow: 0px 4rpx 16rpx rgba(0, 0, 0, 0.08);
margin-bottom: 20rpx;
position: relative;
.topology-box {
width: 100%;
height: 640rpx;
position: relative;
}
.top-right-box {
display: flex;
flex-direction: row;
align-items: center;
flex: 1;
justify-content: flex-end;
.time {
padding-right: 10rpx;
display: inline-block;
height: 40rpx;
}
.value {
background-color: #f5f5f5;
border-radius: 8rpx;
padding: 10rpx 20rpx 10rpx 20rpx;
height: 40rpx;
}
.top-right-item {
padding: 5rpx 10rpx;
border: 1rpx solid #4c9ee6;
font-size: 24rpx;
color: #4c9ee6;
cursor: pointer;
margin-right: 10rpx;
border-radius: 8rpx;
&.active {
background: #4c9ee6;
color: #ffffff;
}
}
}
.chart-box {
width: 650rpx;
height: 460rpx;
margin-top: 20rpx;
position: relative;
}
.group-box {
width: 100%;
display: flex;
flex-wrap: wrap;
position: relative;
.group-item {
display: flex;
flex-direction: column;
align-items: center;
width: 199rpx;
justify-content: center;
background: #d7e9e548;
border-radius: 10rpx;
margin: 10rpx 10rpx;
position: relative;
padding: 10rpx 0;
.history-icon {
position: absolute;
right: 0rpx;
top: 0rpx;
}
image {
width: 40rpx;
height: 40rpx;
}
.item-con {
display: flex;
flex-direction: column;
align-items: center;
// margin-left: 15rpx;
width: 100%;
.item-title {
width: 100%;
font-size: 24rpx;
color: #2a2a2a;
margin-top: 10rpx;
text-align: center;
}
.item-num {
font-size: 36rpx;
color: #282828;
font-weight: bold;
max-width: 90%;
text-align: center;
}
.item-unit {
color: #cccccc;
font-size: 16rpx;
padding-left: 10rpx;
}
}
}
}
}
}
</style>

View File

@ -36,14 +36,14 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{ this.$t('homePage.device.maxVol') }}
{{ $t('homePage.device.maxVol') }}
</view>
<view class="value">
{{panelData.csingleMaxVolData | isNull}}V
</view>
</view>
<view class="bottom-value">
{{ this.$t('homePage.device.cellPostion') }}{{panelData.csingleMaxVolPosition | isNull}}
{{ $t('homePage.device.cellPostion') }}{{panelData.csingleMaxVolPosition | isNull}}
</view>
</view>
</view>
@ -52,14 +52,14 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{ this.$t('homePage.device.minVol') }}
{{ $t('homePage.device.minVol') }}
</view>
<view class="value">
{{panelData.csingleMinVolData | isNull}}V
</view>
</view>
<view class="bottom-value">
{{ this.$t('homePage.device.cellPostion') }}{{panelData.csingleMinVolPosition | isNull}}
{{ $t('homePage.device.cellPostion') }}{{panelData.csingleMinVolPosition | isNull}}
</view>
</view>
</view>
@ -68,14 +68,14 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{ this.$t('homePage.device.maxTem') }}
{{ $t('homePage.device.maxTem') }}
</view>
<view class="value">
{{panelData.csingleMaxTemData | isNull}}
</view>
</view>
<view class="bottom-value">
{{ this.$t('homePage.device.cellPostion') }}{{panelData.csingleMaxTemPosition | isNull}}
{{ $t('homePage.device.cellPostion') }}{{panelData.csingleMaxTemPosition | isNull}}
</view>
</view>
</view>
@ -84,14 +84,14 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{ this.$t('homePage.device.minTem') }}
{{ $t('homePage.device.minTem') }}
</view>
<view class="value">
{{panelData.csingleMinTemData | isNull}}
</view>
</view>
<view class="bottom-value">
{{ this.$t('homePage.device.cellPostion') }}{{panelData.csingleMinTemPosition | isNull}}
{{ $t('homePage.device.cellPostion') }}{{panelData.csingleMinTemPosition | isNull}}
</view>
</view>
</view>
@ -190,10 +190,10 @@
.then((res) => {
self.panelData = res.data?.packData
self.initVolChart(res.data?.voltageList);
this.VolNumber = res.data.voltageList.length ? this.VolNumber + `(${res.data.voltageList.length})` : '单体电压柱状图'
this.VolNumber = res.data.voltageList.length ? this.VolNumber + `(${res.data.voltageList.length})` : this.VolNumber
self.initTemChart(res.data?.temperatureList)
this.TemNumber = res.data.temperatureList.length ? this.TemNumber + `(${res.data.temperatureList.length})` : '单体温度柱状图'
this.TemNumber = res.data.temperatureList.length ? this.TemNumber + `(${res.data.temperatureList.length})` : this.TemNumber
resolve(res);
})
.finally((err) => {
@ -481,6 +481,7 @@
const categories2 = []
const data = []
const data2 = []
let _that = this
if (val) {
val.voltageList.forEach(i => {
@ -509,10 +510,10 @@
var relNameT = ''
var relValT = ''
relNameV += params[0].name + 'V'
relValV += params[0].value + this.$t('homePage.device.num')
relValV += params[0].value + _that.$t('homePage.device.num')
relNameT += params[1].name + '℃'
relValT += params[1].value + this.$t('homePage.device.num')
return `${params[0].marker}${this.$t('homePage.device.tem')}(${relNameV})` + '\n' + relValV + '\n' + `${ params[1].marker}${this.$t('homePage.device.vol')}(${relNameT})` + '\n' + relValT
relValT += params[1].value + _that.$t('homePage.device.num')
return `${params[0].marker}${_that.$t('homePage.device.tem')}(${relNameV})` + '\n' + relValV + '\n' + `${ params[1].marker}${_that.$t('homePage.device.vol')}(${relNameT})` + '\n' + relValT
},
position: function(point, params, dom, rect, size) {
// 鼠标坐标和提示框位置的参考坐标系是以外层div的左上角那一点为原点x轴向右y轴向下

View File

@ -10,7 +10,7 @@
<Section :title="$t('homePage.device.totalAcReaPower')">
<view slot="right" style="flex: 1">
<view class="top-right-box">
<span class="time">{{this.$t('homePage.device.timeGranularity')}}:</span>
<span class="time">{{$t('homePage.device.timeGranularity')}}:</span>
<span @click="openTimeAction" class="value">{{sampleTime}}</span>
</view>
</view>
@ -35,7 +35,7 @@
<view class="item-con">
<view class="item-num">{{ panelData.outputPower | kWFormat }}
</view>
<view class="item-title">{{this.$t('homePage.device.acPower')}}({{panelData.outputPower | kwUnitFormat }})</view>
<view class="item-title">{{$t('homePage.device.acPower')}}({{panelData.outputPower | kwUnitFormat }})</view>
</view>
</view>
@ -51,7 +51,7 @@
<view class="item-num">{{ panelData.reactivePowerPCS }}
</view>
<view class="item-title">{{this.$t('homePage.device.acRecPower')}}(kVar)</view>
<view class="item-title">{{$t('homePage.device.acRecPower')}}(kVar)</view>
</view>
</view>
@ -66,7 +66,7 @@
<view class="item-num">{{ panelData.grid | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.gridFrequency')}}(Hz)</view>
<view class="item-title">{{$t('homePage.device.gridFrequency')}}(Hz)</view>
</view>
</view>
@ -81,7 +81,7 @@
<view class="item-num">{{ panelData.volA | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.abLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.abLineVol')}}(V)</view>
</view>
</view>
@ -96,7 +96,7 @@
<view class="item-num">{{ panelData.volB | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.bcLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.bcLineVol')}}(V)</view>
</view>
</view>
@ -111,7 +111,7 @@
<view class="item-num">{{ panelData.volC | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.caLineVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.caLineVol')}}(V)</view>
</view>
</view>
@ -126,7 +126,7 @@
<view class="item-num">{{ panelData.currentA | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.acur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.acur')}}(A)</view>
</view>
</view>
@ -141,7 +141,7 @@
<view class="item-num">{{ panelData.currentB | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.bcur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.bcur')}}(A)</view>
</view>
</view>
@ -156,7 +156,7 @@
<view class="item-num">{{ panelData.currentC | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.ccur')}}(A)</view>
<view class="item-title">{{$t('homePage.device.ccur')}}(A)</view>
</view>
</view>
@ -169,7 +169,7 @@
</view>
<view class="item-con">
<view class="item-num">{{ panelData.dcPower | kWFormat }}</view>
<view class="item-title">{{this.$t('homePage.device.DCPower')}}({{ panelData.dcPower | kwUnitFormat}})</view>
<view class="item-title">{{$t('homePage.device.DCPower')}}({{ panelData.dcPower | kwUnitFormat}})</view>
</view>
</view>
@ -183,7 +183,7 @@
<view class="item-con">
<view class="item-num">{{ panelData.dcInputVol | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.DCVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.DCVol')}}(V)</view>
</view>
</view>
@ -197,7 +197,7 @@
<view class="item-con">
<view class="item-num">{{ panelData.dcCurrent | isNull }}
</view>
<view class="item-title">{{this.$t('homePage.device.DCCurrent')}}(A)</view>
<view class="item-title">{{$t('homePage.device.DCCurrent')}}(A)</view>
</view>
</view>
@ -236,8 +236,8 @@
stationId: null,
srcId: null,
hnStationId: [417, 398, 416, 415, 405, 485],
actionSheetList: this.$t('homePage.device.timesArr'),
sampleTime:this.$t('homePage.device.timesArr')[0].label,
actionSheetList: Object.values(this.$t('homePage.home.timesArr')),
sampleTime:this.$t('homePage.home.timesArr')[0].text,
canvasData: [],
textCanvasData: [
//0

View File

@ -28,7 +28,7 @@
<view class="item-num">{{panelData.cabinetTemperatureLeft | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.leftTemCabin')}}()</view>
<view class="item-title">{{$t('homePage.device.leftTemCabin')}}()</view>
</view>
</view>
@ -43,7 +43,7 @@
<view class="item-num">{{panelData.cabinetHumidityLeft | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.leftHubCabin')}}(%)</view>
<view class="item-title">{{$t('homePage.device.leftHubCabin')}}(%)</view>
</view>
</view>
@ -58,7 +58,7 @@
<view class="item-num">{{panelData.cabinetTemperatureRight | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.rightTemCabin')}}()</view>
<view class="item-title">{{$t('homePage.device.rightTemCabin')}}()</view>
</view>
</view>
<view class="group-item " @click="showHistory($t('homePage.device.rightHubCabin'), 'wet', 'transmitter','%','','右')">
@ -72,7 +72,7 @@
<view class="item-num">{{panelData.cabinetHumidityRight | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.rightHubCabin')}}(%)</view>
<view class="item-title">{{$t('homePage.device.rightHubCabin')}}(%)</view>
</view>
</view>
@ -88,7 +88,7 @@
<view class="item-num">{{panelData.outputPower | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.stackCurrent')}}(A)</view>
<view class="item-title">{{$t('homePage.device.stackCurrent')}}(A)</view>
</view>
</view>
@ -103,7 +103,7 @@
<view class="item-num">{{panelData.stackTotalVol | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.stackTotalVol')}}(V)</view>
<view class="item-title">{{$t('homePage.device.stackTotalVol')}}(V)</view>
</view>
</view>
<view class="group-item " @click="showHistory($t('homePage.device.stackTotalCurrent'), 'stackTotalCurrent', 'bms','A','')">
@ -117,7 +117,7 @@
<view class="item-num">{{panelData.stackTotalCurrent | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.stackTotalCurrent')}}(A)</view>
<view class="item-title">{{$t('homePage.device.stackTotalCurrent')}}(A)</view>
</view>
</view>
@ -132,7 +132,7 @@
<view class="item-num">{{panelData.soc | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.stackSoc')}}(%)</view>
<view class="item-title">{{$t('homePage.device.stackSoc')}}(%)</view>
</view>
</view>
@ -147,7 +147,7 @@
<view class="item-num">{{(panelData.totalCharge / 1000).toFixed(2) | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.CumulativeCharge')}}(MWh)</view>
<view class="item-title">{{$t('homePage.device.CumulativeCharge')}}(MWh)</view>
</view>
</view>
<view class="group-item" @click="showHistory($t('homePage.device.CumulativeDischarge'), 'totalDischarge', 'bms','kWh','')">
@ -161,7 +161,7 @@
<view class="item-num">{{(panelData.totalDischarge / 1000).toFixed(2) | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.CumulativeDischarge')}}(MWh)</view>
<view class="item-title">{{$t('homePage.device.CumulativeDischarge')}}(MWh)</view>
</view>
</view>
@ -177,7 +177,7 @@
<view class="item-num">{{panelData.stackInsulationPositiveResistance | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.zdz')}}()</view>
<view class="item-title">{{$t('homePage.device.zdz')}}()</view>
</view>
</view>
@ -193,7 +193,7 @@
<view class="item-num">{{panelData.stackInsulationNegativeResistance | isNull}}
</view>
<view class="item-title">{{this.$t('homePage.device.fdz')}}()</view>
<view class="item-title">{{$t('homePage.device.fdz')}}()</view>
</view>
</view>
@ -208,7 +208,7 @@
<view class="item-num">{{panelData.rechargeCapacity | kwhFormat}}
</view>
<view class="item-title">{{this.$t('homePage.device.rechargeCapacity')}}({{panelData.rechargeCapacity | kwhUnitFormat}})</view>
<view class="item-title">{{$t('homePage.device.rechargeCapacity')}}({{panelData.rechargeCapacity | kwhUnitFormat}})</view>
</view>
</view>
@ -222,7 +222,7 @@
<view class="item-con">
<view class="item-num">{{panelData.dischargeCapacity | kwhFormat}}
</view>
<view class="item-title">{{this.$t('homePage.device.dischargeCapacity')}}({{panelData.dischargeCapacity | kwhUnitFormat}})</view>
<view class="item-title">{{$t('homePage.device.dischargeCapacity')}}({{panelData.dischargeCapacity | kwhUnitFormat}})</view>
</view>
</view>
</view>
@ -238,7 +238,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.totalMaxVolData')}}
{{$t('homePage.device.totalMaxVolData')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -248,7 +248,7 @@
</view>
</view>
<view class="bottom-value">
{{this.$t('homePage.device.stackCell')}}{{panelData.totalMaxVolNum | isNull}}
{{$t('homePage.device.stackCell')}}{{panelData.totalMaxVolNum | isNull}}
</view>
</view>
@ -259,7 +259,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.totalMinVolData')}}
{{$t('homePage.device.totalMinVolData')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -269,7 +269,7 @@
</view>
</view>
<view class="bottom-value">
{{this.$t('homePage.device.stackCell')}}{{panelData.totalMinVolNum | isNull}}
{{$t('homePage.device.stackCell')}}{{panelData.totalMinVolNum | isNull}}
</view>
</view>
@ -280,7 +280,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxvolDiff')}}
{{$t('homePage.device.maxvolDiff')}}
</view>
<view class="value">
{{(panelData.singleMaxVolData - panelData.singleMinVolData).toFixed(3) | isNull }}V
@ -296,7 +296,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxCellVol')}}
{{$t('homePage.device.maxCellVol')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -307,15 +307,15 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.stackNum')}}{{panelData.singleMaxVolNum | isNull}}
{{$t('homePage.device.stackNum')}}{{panelData.singleMaxVolNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.groupNum')}}{{panelData.singleMaxVolBMUNum | isNull}}
{{$t('homePage.device.groupNum')}}{{panelData.singleMaxVolBMUNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.cellLocation')}}{{panelData.singleMaxVolBoxNum | isNull}}
{{$t('homePage.device.cellLocation')}}{{panelData.singleMaxVolBoxNum | isNull}}
</view>
</view>
@ -328,7 +328,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.minCellVol')}}
{{$t('homePage.device.minCellVol')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -339,15 +339,15 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.stackNum')}}{{panelData.singleMinVolNum | isNull}}
{{$t('homePage.device.stackNum')}}{{panelData.singleMinVolNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.groupNum')}}{{panelData.singleMinVolBMUNum | isNull}}
{{$t('homePage.device.groupNum')}}{{panelData.singleMinVolBMUNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.cellLocation')}}{{panelData.singleMinVolBoxNum | isNull}}
{{$t('homePage.device.cellLocation')}}{{panelData.singleMinVolBoxNum | isNull}}
</view>
</view>
@ -359,7 +359,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxTemDiff')}}
{{$t('homePage.device.maxTemDiff')}}
</view>
<view class="value">
{{ panelData.singleMaxTemData - panelData.singleMinTemData | isNull}}
@ -375,7 +375,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.maxCellTem')}}
{{$t('homePage.device.maxCellTem')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -386,15 +386,15 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.stackNum')}}{{ panelData.singleMaxTemNum | isNull}}
{{$t('homePage.device.stackNum')}}{{ panelData.singleMaxTemNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.groupNum')}}{{ panelData.singleMaxTemBMUNum | isNull}}
{{$t('homePage.device.groupNum')}}{{ panelData.singleMaxTemBMUNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.cellLocation')}}{{ panelData.singleMaxTemBoxNum | isNull}}
{{$t('homePage.device.cellLocation')}}{{ panelData.singleMaxTemBoxNum | isNull}}
</view>
</view>
@ -406,7 +406,7 @@
<view class="other-value">
<view class="top-value">
<view class="title">
{{this.$t('homePage.device.minCellTem')}}
{{$t('homePage.device.minCellTem')}}
</view>
<view class="zhexian-icon">
<image src="/static/aidex/images/zhexian.png"></image>
@ -417,15 +417,15 @@
</view>
<view class="bottom-value">
<view>
{{this.$t('homePage.device.stackNum')}}{{ panelData.singleMinTemNum | isNull}}
{{$t('homePage.device.stackNum')}}{{ panelData.singleMinTemNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.groupNum')}}{{ panelData.singleMinTemBMUNum | isNull}}
{{$t('homePage.device.groupNum')}}{{ panelData.singleMinTemBMUNum | isNull}}
</view>
<view>
{{this.$t('homePage.device.cellLocation')}}{{ panelData.singleMinTemBoxNum | isNull }}
{{$t('homePage.device.cellLocation')}}{{ panelData.singleMinTemBoxNum | isNull }}
</view>
</view>

View File

@ -21,9 +21,8 @@
<!-- </view> -->
</scroll-view>
<view v-else style="height: 100%;">
<u-empty :text="this.$t('homePage.device.noData')" mode="list"></u-empty>
<u-empty :text="$t('homePage.device.noData')" mode="list"></u-empty>
</view>
</template >
</view>

View File

@ -22,7 +22,7 @@
</scroll-view>
<view v-else style="height: 100%;">
<u-empty :text="this.$t('homePage.device.noData')" mode="list"></u-empty>
<u-empty :text="$t('homePage.device.noData')" mode="list"></u-empty>
</view>
</template >

View File

@ -23,6 +23,7 @@
<view class="components-box" :style="{height:`calc(100% - ${safeHeight}rpx)`}">
<JKPCS ref="PCS" v-if="type === 0 && Devicetype === 'pcs' && stationId === 484" />
<PCS ref="PCS" v-if="type === 0 && Devicetype === 'pcs' && stationId !== 484" />
<MPPT ref="MPPT" v-if="type === 0 && Devicetype === 'mttp' && stationId !== 484" />
<Cluster ref="Cluster" v-if="type === 0 && Devicetype === 'cluster'" />
<Pack ref="Pack" v-if="type === 0 && Devicetype === 'pack'" />
<Stack ref="Stack" v-if="type === 0 && Devicetype === 'stack' && stationId !== 484 " />
@ -44,6 +45,7 @@
import JKPCS from './components/jingke-pcs.vue'
import JKStack from './components/jingke-stack.vue'
import PCS from './components/pcs.vue'
import MPPT from './components/mppt.vue'
import Cluster from './components/cluster.vue'
import Stack from './components/stack.vue'
import Pack from './components/pack.vue'
@ -85,7 +87,6 @@
}
},
onLoad(options) {
this.Devicetype = options.type
if (this.Devicetype === 'storage' || this.Devicetype === 'anything') {
this.list = [{
@ -108,6 +109,10 @@
if (this.$refs.PCS) {
this.$refs.PCS.getData(this.srcId)
}
// 新增mppt
if (this.$refs.MPPT) {
this.$refs.MPPT.getData(this.srcId)
}
if (this.$refs.Stack) {
this.$refs.Stack.getData(this.srcId)
}
@ -137,6 +142,7 @@
components: {
JKPCS,
PCS,
MPPT,
DeviceYC,
DeviceYX,
Cluster,
@ -187,6 +193,7 @@
methods: {
device(val) {
console.log(val);
this.Devicetype = val
},
changeTab(type) {
@ -202,6 +209,9 @@
if (this.$refs.PCS) {
this.$refs.PCS.getData(this.srcId)
}
if (this.$refs.MPPT) {
this.$refs.MPPT.getData(this.srcId)
}
if (this.$refs.Stack) {
this.$refs.Stack.getData(this.srcId)
}

View File

@ -66,25 +66,28 @@
},
toDetail(item) {
let type = ""
if (item.deviceType.includes("pcs")) {
if (item.deviceType?.includes("pcs")) {
type = "pcs";
} else if (item.deviceType.includes("stack") ) {
} else if (item.deviceType?.includes("stack") ) {
type = "cluster";
} else if (item.deviceType.includes("bms") && this.stationId === 349 ) {
} else if (item.deviceType?.includes("bms") && this.stationId === 349 ) {
type = "stack";
} else if (item.deviceType.includes("pack")) {
} else if (item.deviceType?.includes("pack")) {
type = "pack";
} else if (item.deviceType.includes("air_condition")) {
} else if (item.deviceType?.includes("air_condition")) {
type = "air";
} else if (item.deviceType.includes("ele_meter") ) {
} else if (item.deviceType?.includes("ele_meter") ) {
type = "ammeter";
} else if (item.deviceType.includes("emu" )) {
} else if (item.deviceType?.includes("emu" )) {
type = "emu";
} else if (item.deviceType.includes("storage_fire") ) {
} else if (item.deviceType?.includes("storage_fire") ) {
type = "storage";
} else if (item.deviceType.includes("basic") ) {
} else if (item.deviceType?.includes("basic") ) {
type = "anything"
} else if (item.deviceType?.includes("mttp") || item.deviceType?.includes("mppt")) {
type = "mttp"
}
if (type) {
uni.setStorage({
key: 'deviceName', //本地缓存中的指定的 key

View File

@ -0,0 +1,120 @@
<template>
<view class="p_container">
<u-navbar :is-back="true" :background="background" :border-bottom="false">
<!-- <u-navbar :is-back="true" :background="background" :border-bottom="false" :custom-back="toback"> -->
<view class="slot-wrap">
<stationDropdow disabled style="width: 100%" ref="dropdow" />
</view>
</u-navbar>
<!-- <zero-loading v-if="loading"></zero-loading> -->
<!-- <view v-else style="height: calc(100% - 100rpx);"> -->
<view style="height: calc(100% - 100rpx);">
<!-- <view class="search">
<luyj-tree-search :placeholder="$t('homePage.home.revenue')">
</luyj-tree-search>
</view> -->
<view class="p_content">
<view class="selectContent">
<view class="p_box selectItem" @click="toUrl(labeArr[0])">
<view >
<image :src="labeArr[0].icon" mode="" style="height: 48rpx; width: 48rpx;" class="selectIcon"></image>
</view>
<view class="">
{{ labeArr[0].label}}
</view>
</view>
<view class="p_box selectItem" v-if="inverterFlag === 1" @click="toUrl(labeArr[1])">
<view >
<image :src="labeArr[1].icon" mode="" style="height: 48rpx; width: 48rpx;" class="selectIcon"></image>
</view>
<view class="">
{{ labeArr[1].label}}
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import stationDropdow from "@/components/station-dropdow/index.vue";
export default {
components: {
stationDropdow
},
data() {
return {
background: {
backgroundColor: "#0ea17e",
},
labeArr: [
{
label: this.$t("homePage.home.energyStorageRevenueReport"),
icon: require('@/static/aidex/images/earningSelect.png'),
url: '/pages/home-page/earnings/index'
},
{
label: this.$t("homePage.home.pvStorageRevenueReport"),
icon: require('@/static/aidex/images/earningSelect.png'),
url: '/pages/home-page/lights/index'
},
]
};
},
computed: {
currentStation() {
return this.vuex_currentStation;
},
inverterFlag(){
return this.vuex_inverterFlag;
}
},
methods: {
toUrl(val) {
uni.navigateTo({
url:val.url
})
}
},
};
</script>
<style lang="scss" scoped>
.slot-wrap {
display: flex;
align-items: center;
/* 如果您想让slot内容占满整个导航栏的宽度 */
flex: 1;
/* 如果您想让slot内容与导航栏左右有空隙 */
/* padding: 0 30rpx; */
/deep/ .u-input__input {
color: #fff !important;
}
}
.selectContent {
display: flex;
flex-direction: column;
gap: 25rpx;
margin-top: 40rpx;
.selectItem {
padding: 30rpx 33rpx;
display: flex;
justify-content: flex-start;
align-items: center;
color: #666666;
border-radius: 10rpx;
.selectIcon {
height: 48rpx;
width: 48rpx;
margin-top: 10rpx;
margin-right: 32rpx;
}
}
}
</style>

View File

@ -97,7 +97,7 @@
</view>
<view class="title">
{{ this.$t('homePage.earning.chargeVol') }}
{{ $t('homePage.earning.chargeVol') }}
</view>
<view class="value">
{{ totalData.totalCharge | isNull }}
@ -111,7 +111,7 @@
</view>
<view class="title">
{{ this.$t('homePage.earning.dischargeVol') }}
{{ $t('homePage.earning.dischargeVol') }}
</view>
<view class="value">
{{ totalData.totalDischarge | isNull }}
@ -149,7 +149,7 @@
{{ totalData.totalChargePrice | isNull }}
</view>
<view class="title">
{{ $t('homePage.earning.monthTotalChargePrice') }}
{{ $t('homePage.home.enmonthTotalChargePrice') }}
</view>
</view>
@ -164,7 +164,7 @@
{{ totalData.totalDisChargePrice | isNull }}
</view>
<view class="title">
{{ $t('homePage.earning.monthTotalDisChargePrice') }}
{{ $t('homePage.home.enmonthTotalDisChargePrice') }}
</view>
</view>
@ -179,7 +179,7 @@
{{ totalData.income | isNull }}
</view>
<view class="title">
{{ $t('homePage.earning.earnings') }}
{{ $t('homePage.home.enearnings') }}
</view>
<view class="bg">
@ -198,7 +198,7 @@
<view class="power-report" v-if="chargeArr.length">
<view class="title">
{{this.$t('homePage.earning.charge')}}
{{$t('homePage.earning.charge')}}
</view>
<view v-for="(item, index) in chargeArr" :key="index">
<view class="value-box">
@ -234,7 +234,7 @@
<view class="power-report" v-if="dischargeArr.length">
<view class="title">
{{this.$t('homePage.earning.disCharge')}}
{{$t('homePage.earning.disCharge')}}
</view>
<view v-for="(item, index) in dischargeArr" :key="index">
<view class="value-box">

View File

@ -0,0 +1,111 @@
<template>
<view class="charts-box">
<qiun-data-charts type="column" :opts="opts" :chartData="chartData" />
</view>
</template>
<script>
export default {
props: {
time: {
type: String,
default: "",
},
},
data() {
return {
stationId:'',
chartData: {},
//您可以通过修改 config-ucharts.js 文件中下标为 ['column'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
opts: {
color: ["#0DA17D"],
padding: [30, 15, 100, 25],
enableScroll: false,
fonSize: 12,
fontColor: '#8C8C8C',
legend: {
show: false
},
xAxis: {
disableGrid: true,
rotateLabel: true,
rotateAngle: 30,
titleOffsetY: 20,
titleOffsetX: 5,
marginTop: 5,
labelCount: 7
},
yAxis: {
data: [{
min: 0
}],
showTitle: false
},
extra: {
column: {
width: '10',
}
},
}
};
},
created() {
this.GetPvMonthData();
},
computed: {
currentStation() {
return this.vuex_currentStation;
},
},
watch: {
currentStation: {
handler(val) {
this.stationId = val.id;
},
deep: true,
immediate: true,
},
},
methods: {
async GetPvMonthData(){
try {
const res = await this.$u.api.enrnings.GetPvMonthData({
stationId: this.stationId,
time: this.time,
});
let resdata = {
categories:[],
series:[{
name:this.$t('homePage.home.powerGeneration'),
textColor: "#FFFFFF",
data: []
}]
}
if (res.data.length) {
res.data.forEach((el) => {
resdata.categories.push(el.date)
resdata.series[0].data.push(el.powerGenerate)
});
console.log(JSON.parse(JSON.stringify(resdata)));
this.chartData = JSON.parse(JSON.stringify(resdata));
} else {
this.chargeArr = [];
}
} catch (e) {
//TODO handle the exception
} finally {
this.loading = false;
}
}
}
};
</script>
<style scoped>
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
height: 300px;
}
</style>

View File

@ -0,0 +1,773 @@
<template>
<view>
<zero-loading v-if="loading"></zero-loading>
<view v-else class="earnings-warp">
<view class="head-bg">
<view class="back" @click="toback">
<u-icon name="nav-back" color="#009C7F" size="44"></u-icon>
</view>
<view class="report-title">
<view class="value">
{{ totalData.stationName }}
</view>
</view>
<view class="time-select" @click="changeMonth">
<image
src="/static/aidex/images/time.png"
style="width: 120rpx; height: 108rpx"
>
</image>
<view class="month">
{{ month }}
</view>
<view class="year">
{{ year }}
</view>
</view>
</view>
<view class="power-generation">
<Section :title="$t('homePage.home.powerGenerationStatus')" />
<view class="power-generation-detail">
<view class="value-box">
<view class="icon zjry">
</view>
<view class="title">
{{ $t('homePage.home.currentMonthlyPowerGeneration') }}
</view>
<view class="value">
{{ totalData.monthReleaseElec | isNull }}
</view>
<view class="unit">
kWh
</view>
</view>
<view class="value-box">
<view class="icon byzc">
</view>
<view class="title">
{{ $t('homePage.home.cumulativePowerGeneration') }}
</view>
<view class="value">
{{ totalData.totalReleaseElec | isNull }}
</view>
<view class="unit">
kWh
</view>
</view>
<view class="value-box">
<view class="icon byzf">
</view>
<view class="title">
{{ $t('homePage.home.ratedPowernokw') }}
</view>
<view class="value">
{{ totalData.pvPower | isNull }}
</view>
<view class="unit">
kW
</view>
</view>
<!-- <view class="value-box">
<view class="icon yxtzhl"> </view>
<view class="title">
{{ $t("homePage.earning.monthEff") }}
</view>
<view class="value">
{{ totalData.monConvRate | isNull }}
</view>
<view class="unit"> % </view>
</view>
<view class="value-box">
<view class="icon ljcd"> </view>
<view class="title">
{{ $t("homePage.earning.chargeVol") }}
</view>
<view class="value">
{{ totalData.totalCharge | isNull }}
</view>
<view class="unit"> kWh </view>
</view>
<view class="value-box">
<view class="icon ljcf"> </view>
<view class="title">
{{ $t("homePage.earning.dischargeVol") }}
</view>
<view class="value">
{{ totalData.totalDischarge | isNull }}
</view>
<view class="unit"> kWh </view>
</view>
<view class="value-box">
<view class="icon zxtzhl"> </view>
<view class="title">
{{ $t("homePage.earning.totalEff") }}
</view>
<view class="value">
{{ totalData.totalConvRate | isNull }}
</view>
<view class="unit"> % </view>
</view> -->
</view>
</view>
<view class="month-power">
<Section :title="$t('homePage.home.projectMonthlyPower')" />
<view class="power-generation-detail">
<run-chart :time="time" />
</view>
</view>
<view class="month-power">
<Section
:title="$t('homePage.earning.projectRevenue')"
style="margin-bottom: 25rpx"
/>
<view class="value-box">
<view class="left">
<view class="power-detail">
<view class="left-value">
<view class="value">
{{ totalData.monthIncone | isNull }}
</view>
<view class="title">
{{ $t("homePage.home.monthlyIncome") }}
</view>
</view>
<view class="right-value t-fdzl"> </view>
</view>
<!-- <view class="power-detail"
style="margin: 0 !important; padding-bottom: 0 !important" >
<view class="left-value">
<view class="value">
{{ totalData.totalDisChargePrice | isNull }}
</view>
<view class="title">
{{ $t("homePage.home.enmonthTotalDisChargePrice") }}
</view>
</view>
<view class="right-value t-swdl"> </view>
</view> -->
</view>
<view class="left">
<view class="power-detail">
<view class="left-value">
<view class="value">
{{ totalData.income | isNull }}
</view>
<view class="title">
{{ $t("homePage.home.totalRevenue") }}
</view>
</view>
<!-- <view class="right-value t-fdzl"> </view> -->
<view class="right-value bg"> </view>
<!-- <view class="value">
{{ totalData.income | isNull }}
</view>
<view class="title">
{{ $t("homePage.home.totalRevenue") }}
</view>
<view class="bg"> </view> -->
</view>
</view>
</view>
</view>
<!-- <view class="report-detail">
<Section
:title="$t('homePage.earning.earningsDetail')"
style="margin-bottom: 30rpx"
/>
<view class="power-report" v-if="chargeArr.length">
<view class="title">
{{ $t("homePage.earning.charge") }}
</view>
<view v-for="(item, index) in chargeArr" :key="index">
<view class="value-box">
<view class="checked">
<view class="name">
{{ item.rateType | isNull }}
</view>
</view>
</view>
<view class="box">
<view class="value">
<text class="name">{{ $t("homePage.earning.ele") }}</text>
<text class="num">{{ item.elec | isNull }}</text>
</view>
<view class="value">
<text class="name">{{ $t("homePage.earning.expend") }}:</text>
<text class="num">{{ item.digital | isNull }}</text>
</view>
</view>
</view>
</view>
<view class="power-report" v-else>
<view style="font-size: 24rpx; width: 100%; text-align: center">
{{ $t("homePage.earning.noChargeData") }}
</view>
</view>
<view class="power-report" v-if="dischargeArr.length">
<view class="title">
{{ $t("homePage.earning.disCharge") }}
</view>
<view v-for="(item, index) in dischargeArr" :key="index">
<view class="value-box">
<view class="checked">
<view class="name">
{{ item.rateType | isNull }}
</view>
</view>
</view>
<view class="box">
<view class="value">
<text class="name">{{ $t("homePage.earning.ele") }}:</text>
<text class="num">{{ item.elec | isNull }}</text>
</view>
<view class="value">
<text class="name">{{ $t("homePage.earning.earnings") }}:</text>
<text class="num">{{ item.digital | isNull }}</text>
</view>
</view>
</view>
</view>
<view class="power-report" v-else>
<view style="font-size: 24rpx; width: 100%; text-align: center">
{{ $t("homePage.earning.noDisChargeData") }}
</view>
</view>
</view> -->
<u-picker
v-model="TimeShow"
mode="time"
:params="Timeparams"
@confirm="confirmMonth"
></u-picker>
</view>
</view>
</template>
<script>
import Section from "@/components/section/index.vue";
import runChart from "./components/runChart/index.vue";
export default {
components: {
Section,
runChart,
},
data() {
return {
active1: 0,
active2: 1,
TimeShow: false,
Timeparams: {
year: true,
month: true,
day: false,
hour: false,
minute: false,
second: false,
},
year: null,
month: null,
stationId: null,
time: null,
totalData: {},
chargeArr: [],
dischargeArr: [],
loading: false,
};
},
computed: {
currentStation() {
return this.vuex_currentStation;
},
},
watch: {
currentStation: {
handler(val) {
this.stationId = val.id;
},
deep: true,
immediate: true,
},
},
created() {
var myDate = new Date();
var tYear = myDate.getFullYear();
var tMonth = myDate.getMonth() + 1;
if (tMonth.toString().length == 1) {
tMonth = "0" + tMonth;
}
this.year = tYear;
this.month = tMonth;
this.time = this.year + "-" + this.month + "";
this.getData();
},
methods: {
toback() {
uni.navigateBack({
delta: 1,
});
},
async getData() {
try {
this.loading = true;
const res = await this.$u.api.enrnings.GetTotal({
stationId: this.stationId,
time: this.time,
});
this.totalData = res.data;
this.chargeArr = [];
this.dischargeArr = [];
if (res.data.list.length) {
res.data.list.forEach((el) => {
if (+el.type === 0) {
this.chargeArr.push(el);
}
if (+el.type === 1) {
this.dischargeArr.push(el);
}
});
} else {
this.chargeArr = [];
this.dischargeArr = [];
}
} catch (e) {
//TODO handle the exception
} finally {
this.loading = false;
}
},
changeActive1(val) {
this.active1 = val;
},
changeActive2(val) {
this.active2 = val;
},
changeMonth() {
this.TimeShow = true;
},
confirmMonth(val) {
this.time = val.year + "-" + val.month + "";
this.year = val.year;
this.month = val.month;
this.getData();
},
},
};
</script>
<style lang="scss" scoped>
.earnings-warp {
// height: calc(120% + 210rpx)!important;
height: 100% !important;
background-color: #f5f5f5;
overflow: auto;
.cell-box {
width: 100%;
height: 35rpx;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16rpx;
.title {
color: rgba(102, 102, 102, 1) !important;
font-size: 24rpx;
}
.value {
color: rgba(44, 50, 49, 1) !important;
font-size: 24rpx;
}
}
.head-bg {
height: 360rpx;
background: linear-gradient(45deg, #ffe3c8, #07976e);
display: flex;
.back {
padding-top: 100rpx;
padding-left: 30rpx;
}
.report-title {
padding-top: 100rpx;
padding-left: 20rpx;
width: 464rpx;
font-weight: 700;
color: rgba(0, 156, 119, 1);
font-size: 36rpx;
display: flex;
}
.time-select {
margin-right: 30rpx;
margin-left: auto;
margin-top: 140rpx;
position: relative;
width: 120rpx;
height: 108rpx;
image {
width: 120rpx;
height: 108rpx;
}
.month {
position: absolute;
top: 10rpx;
left: 38rpx;
right: 38rpx;
padding-top: 10rpx;
font-size: 40rpx;
font-weight: 500;
color: rgba(255, 255, 255, 1);
}
.year {
position: absolute;
bottom: 10rpx;
left: 38rpx;
right: 38rpx;
font-size: 24rpx;
font-weight: 700;
color: rgba(255, 255, 255, 1);
}
}
}
.power-generation {
height: 380rpx;
background-color: #ffffff;
box-shadow: 0px 4rpx 16rpx rgba(0, 0, 0, 0.1);
margin-left: 30rpx;
margin-right: 30rpx;
border-radius: 8rpx;
margin-top: -40rpx;
padding: 20rpx;
.power-generation-detail {
width: 100%;
.value-box {
padding: 20rpx;
margin-top: 16rpx;
border-radius: 8rpx;
background: linear-gradient(
45deg,
rgba(178, 223, 138, 0.2),
rgba(0, 156, 119, 0.3)
);
width: 100%;
height: 80rpx;
display: flex;
align-items: center;
.icon {
width: 48rpx;
height: 48rpx;
border-radius: 8rpx;
background-color: rgba(255, 255, 255, 1);
box-shadow: 0px 0rpx 10rpx rgba(0, 0, 10, 0.1);
}
.zjry {
background-image: url("/static/aidex/images/sy-zjrl.png");
background-size: cover;
}
.byzc {
background-image: url("/static/aidex/images/sy-byzc.png");
background-size: cover;
}
.byzf {
background-image: url("/static/aidex/images/sy-byzf.png");
background-size: cover;
}
.yxtzhl {
background-image: url("/static/aidex/images/sy-yxtzhl.png");
background-size: cover;
}
.ljcd {
background-image: url("/static/aidex/images/sy-ljc.png");
background-size: cover;
}
.ljcf {
background-image: url("/static/aidex/images/sy-ljf.png");
background-size: cover;
}
.zxtzhl {
background-image: url("/static/aidex/images/sy-zxtzhl.png");
background-size: cover;
}
.title {
font-size: 28rpx;
color: rgba(44, 50, 49, 1);
padding-left: 10rpx;
}
.value {
margin-left: auto;
font-size: 36rpx;
font-weight: 700;
padding-right: 10rpx;
color: rgba(0, 156, 119, 1);
}
.unit {
min-width: 36rpx;
font-size: 18rpx;
color: rgba(102, 102, 102, 1);
}
}
}
}
.report-detail {
padding: 20rpx;
margin-left: 30rpx;
margin-right: 30rpx;
background-color: #ffffff;
margin-top: 30rpx;
box-shadow: 0px 4rpx 16rpx rgba(0, 0, 0, 0.1);
border-radius: 8rpx;
.value-box {
width: 100%;
height: 35rpx;
display: flex;
.checked {
background-image: url("/static/aidex/images/checked.png");
background-size: cover;
width: 100rpx;
height: 35rpx;
margin-bottom: 2rpx;
.name {
text-align: center;
font-weight: 400;
font-size: 20rpx;
color: rgba(255, 255, 255, 1);
}
}
}
.box {
width: 100%;
display: flex;
margin-bottom: 5rpx;
.value {
display: inline-block;
flex: 1;
color: #000;
.name {
font-size: 24rpx;
color: rgba(102, 102, 102, 1);
}
.num {
padding-left: 10rpx;
}
.value {
font-size: 24rpx;
color: rgba(44, 50, 49, 1);
}
}
}
.power-report {
width: 100%;
border-top: 1px solid #93d5c5;
margin-top: 30rpx;
background: linear-gradient(
rgba(0, 156, 119, 0.05),
rgba(0, 156, 119, 0)
);
margin-bottom: 34rpx;
padding-top: 12rpx;
padding-left: 20rpx;
padding-right: 20rpx;
.title {
color: rgba(0, 0, 0, 1);
font-size: 24rpx;
}
.botton {
width: 100%;
height: 36rpx;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 16rpx;
margin-bottom: 16rpx;
.check {
background-image: url("/static/aidex/images/check.png");
background-size: cover;
width: 100rpx;
height: 35rpx;
.name {
text-align: center;
font-weight: 400;
font-size: 20rpx;
color: rgba(255, 255, 255, 1);
}
}
}
}
}
.month-power {
height: 500rpx;
background-color: #ffffff;
box-shadow: 0px 4rpx 16rpx rgba(0, 0, 0, 0.1);
margin-left: 30rpx;
margin-right: 30rpx;
border-radius: 8rpx;
margin-top: 30rpx;
padding: 20rpx;
.value-box {
width: 100%;
height: 380rpx;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.left {
width: 50%;
height: 100%;
padding: 20rpx;
padding-top: 0rpx;
padding-bottom: 0rpx;
padding-right: 10rpx;
.power-detail {
background-color: rgba(254, 131, 15, 0.05);
width: 100%;
height: 100%;
border-radius: 8rpx;
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
padding: 20rpx;
.left-value {
.value {
font-weight: 500;
font-size: 36rpx;
white-space: nowrap;
color: rgba(0, 156, 119, 1);
}
.title {
font-size: 24rpx;
// white-space: nowrap;
color: rgba(44, 50, 49, 1);
}
}
.right-value {
min-width: 121rpx;
height: 119rpx;
position: absolute;
right: 20rpx;
}
.bg {
width: 194rpx;
height: 188rpx;
background-image: url("/static/aidex/images/total-sy.png");
background-size: 100% 100%;
}
.t-fdzl {
width: 121rpx;
height: 119rpx;
background-image: url("/static/aidex/images/total-zfdl.png");
background-size: 100% 100%;
}
.t-swdl {
width: 97rpx;
height: 140rpx;
background-image: url("/static/aidex/images/total-swdl.png");
background-size: 100% 100%;
}
}
}
.right {
width: 50%;
height: 100%;
padding: 0 20rpx 0 10rpx;
.value-box {
width: 100%;
height: 100%;
background-color: rgba(254, 131, 15, 0.05);
display: flex;
flex-direction: column;
align-items: center;
padding-left: 30rpx;
padding-right: 30rpx;
border-radius: 8rpx;
}
.value {
margin-top: 49rpx;
width: 100%;
text-align: center;
font-weight: 500;
color: rgba(0, 156, 119, 1);
font-size: 48rpx;
}
.title {
width: 100%;
text-align: left;
font-size: 24rpx;
color: rgba(44, 50, 49, 1);
}
.bg {
width: 194rpx;
height: 188rpx;
background-image: url("/static/aidex/images/total-sy.png");
background-size: 100% 100%;
}
}
}
}
}
</style>

View File

@ -6,7 +6,7 @@
<stationDropdow disabled style="width: 100%" ref="dropdow" />
</view>
</u-navbar>
<view class="subTab">
<view class="subTab">
<u-subsection :list="policyTypeList" :current="currentType" v-show="inputDataBox.length" :animation="true"
@change="sectionChange" :active-color="'#3D9F7F'">
</u-subsection>
@ -23,9 +23,9 @@
<view v-if="!loading" class="detail-box">
<u-form :model="formInfo" ref="uForm" :label-width="200">
<u-form-item :label="$t('homePage.policy.planCurveTem')"><u-input v-model="formInfo.temName" type="select"
<u-form-item :label="$t('homePage.policy.planCurveTem')"><u-input :placeholder="$t('homePage.policy.selectPlanCurveTem')" v-model="formInfo.temName" type="select"
@click="openSelectTemplate" input-align="right" /></u-form-item>
<u-form-item :label="$t('homePage.policy.IssueDevice')"><u-input v-model="formInfo.srcName" type="select"
<u-form-item :label="$t('homePage.policy.IssueDevice')"><u-input :placeholder="$t('homePage.policy.selectIssueDevice')" v-model="formInfo.srcName" type="select"
@click="openSelectDevice" input-align="right" /></u-form-item>
<u-form-item :label="$t('homePage.policy.operateOrNot')"><u-radio-group active-color="#009458"
@ -36,9 +36,9 @@
</u-radio-group>
</u-form-item>
<u-form-item :label="$t('homePage.policy.socUplimit')"><u-input v-model="formInfo.socUpper" disabled
<u-form-item :label="$t('homePage.policy.socUplimit')"><u-input :placeholder="$t('homePage.policy.pleaseInputValue')" v-model="formInfo.socUpper" disabled
type="text" input-align="right" /></u-form-item>
<u-form-item :label="$t('homePage.policy.socDownlimit')"><u-input v-model="formInfo.socLower" disabled
<u-form-item :label="$t('homePage.policy.socDownlimit')"><u-input :placeholder="$t('homePage.policy.pleaseInputValue')" v-model="formInfo.socLower" disabled
type="text" input-align="right" /></u-form-item>
<u-form-item :label="$t('homePage.policy.effectiveTime')">
<u-input v-model="formInfo.effectiveTime" type="select" @click="timeShow = true" input-align="right"
@ -54,17 +54,22 @@
</u-form>
<view style="display: flex;">
<button type="success" size="mini" @click="handleIssue" style="background-color: #009458;color: #fff"
<view style="display: flex;flex-wrap:wrap;justify-content: space-between;">
<button type="success" size="mini" @click="handleIssue" style="background-color: #009458;color: #fff;width: 40%;"
:loading="isMoreLoading" :disabled="deliveryLoading"
v-show="vuex_permissions.includes('strategy:planCurveDis:commandIssuance')">
{{ $t('homePage.policy.commandDistribution') }}
</button>
<button type="success" size="mini" @click="handleControlDelivery"
style="background-color: #009458; color: #fff" :loading="deliveryLoading" :disabled="isMoreLoading"
style="background-color: #009458; color: #fff;width: 40%;" :loading="deliveryLoading" :disabled="isMoreLoading"
v-show="vuex_permissions.includes('strategy:planCurveDis:commandIssuanceData')">
{{ $t('homePage.policy.controlDistribution') }}
</button>
<button type="success" size="mini"
style="background-color: #009458; color: #fff;margin-top: 10px;width: 90%;" :disabled="isMoreLoading"
v-show="vuex_permissions.includes('strategy:planCurveDis:commandIssuanceData')">
{{ $t('homePage.home.pvSwitch') }}
</button>
</view>
</view>
@ -162,7 +167,7 @@ export default {
this.stationId = val.id;
this.getTemplate();
this.getIssueDevices();
this.getValueLiist()
// this.getValueLiist()
setTimeout(() => {
this.getIssueStatus();
}, 200);
@ -314,7 +319,7 @@ export default {
sectionChange (val) {
this.currentType = val
if (val === 1) {
this.getValueLiist()
// this.getValueLiist()
}
},
async getValueLiist () {
@ -515,7 +520,7 @@ export default {
type: "warning",
});
} finally {
this.getValueLiist()
// this.getValueLiist()
}
}

View File

@ -7,7 +7,7 @@
</view>
<view class="content-msg">
{{ $t('homePage.home.msgf')}}
<span class="xieyi" @click="toDetail"><u-link color="#009458" href="https://ecloud.hoenergypower.cn/app-privacy-zh.html">{{ $t('homePage.home.yhxy')}}</u-link></span>{{ $t('homePage.home.and')}}<span class="xieyi" @click="toDetail"><u-link color="#009458" href="https://ecloud.hoenergypower.cn/app-privacy-zh.html">{{ $t('homePage.home.yszc')}}</u-link></span>
<span class="xieyi" @click="toDetail"><u-link color="#009458" href="https://zetatech.zzkj-cloud.com/app-privacy-en.html">{{ $t('homePage.home.yhxy')}}</u-link></span>{{ $t('homePage.home.and')}}<span class="xieyi" @click="toDetail"><u-link color="#009458" href="https://zetatech.zzkj-cloud.com/app-privacy-en.html">{{ $t('homePage.home.yszc')}}</u-link></span>
{{ $t('homePage.home.msgs')}}
</view>
<view class="content-icon">

View File

@ -4,7 +4,7 @@
<!-- <image src="/static/aidex/login/login-bg.png" class="logo"></image> -->
<view class="logo">
<view class="EnglishFont">
STORASMART
ZETA CLOUD
</view>
</view>
<image src="/static/aidex/login/bg-logo2.png" class="center-logo"></image>
@ -17,11 +17,11 @@
<u-select v-model="langShow" :list="Langlist" @confirm="changeLanguage"></u-select>
<u-radio-group v-model="StationValue" @change="radioGroupChange" active-color="#009C77">
<!-- <u-radio-group v-model="StationValue" @change="radioGroupChange" active-color="#009C77">
<u-radio @change="radioChange" v-for="(item, index) in $t('homePage.home.stationType')" :key="index" :name="item.name">
{{ item.name }}
</u-radio>
</u-radio-group>
</u-radio-group> -->
<view class="user-card">
<view class="list">
@ -139,7 +139,7 @@ export default {
showMsg: false,
Stationlist: this.$t('homePage.home.stationType'),
// u-radio-group的v-model绑定的值如果设置为某个radio的name就会被默认选中
StationValue: '',
StationValue: 'en_US',
}
},
onLoad () {
@ -189,13 +189,14 @@ export default {
// this.$u.vuex("vuex_stationValue", val);
if (val === '海外站' || val === 'Overseas Station') {
this.$u.http.setConfig({
// baseUrl: 'https://ecloud.hoenergypower.cn/api'
baseUrl: 'https://zzkj-cloud.com/api'
// baseUrl: 'http://1.95.170.86:8002/api',
baseUrl: 'https://zetatech.zzkj-cloud.com/api'
});
} else if (val === '中国站' || val === 'China Station') {
this.$u.http.setConfig({
// baseUrl: 'https://ecloud.hoenergypower.cn/api'
baseUrl: 'https://zzkj-cloud.com/api'
// baseUrl: 'http://1.95.170.86:8002/api'
baseUrl: 'https://zetatech.zzkj-cloud.com/api'
// baseUrl: 'https://zzkj-cloud.com/api'
});
}
const res = await this.$u.api.GetLanguageConfig('zh')
@ -432,6 +433,7 @@ export default {
this.$u.api.alarm.GetNewStationlist().then((res) => {
this.$u.vuex("vuex_provinceStation", res.data.list)
this.$u.vuex("vuex_currentStation", res.data.list[0].list[0].list[0])
this.$u.vuex("vuex_inverterFlag", res.data.list[0].list[0].list[0].inverterFlag)
})
},
wxLogin (res) {

View File

@ -9,7 +9,7 @@
</view>
<u-cell-group class="form" :border="false">
<navigator url="" open-type="navigate">
<u-cell-item :title="$t('homePage.mine.companyHomepage')">https://www.hoenergypower.cn</u-cell-item>
<u-cell-item :title="$t('homePage.mine.companyHomepage')">https://www.zetatech-energy.com</u-cell-item>
</navigator>
<navigator>
<u-cell-item :arrow="false" :title="$t('homePage.mine.technicalServices')">15389457063</u-cell-item>
@ -23,7 +23,7 @@
</u-row>
<view class="copyright">
<view> 版权所有</view>
<view>Copyright &copy; 2021 hoenergy.com</view>
<view>Copyright &copy; 2025 zzkj-cloud.com</view>
</view>
</view>
</template>

View File

@ -27,7 +27,6 @@
currentStation() {
return this.vuex_currentStation;
},
},
watch: {
currentStation: {

View File

@ -0,0 +1,83 @@
<template>
<view class="grid" :style="{'grid-template-columns': `repeat(${col}, 1fr)`}">
<zero-loading v-if="loading"></zero-loading>
<template v-else>
<view class="item" v-for="(item,index) in list" :key="index">
<image v-if="item.showMark" src="/static/aidex/images/history-icon.png" mode="" class="rightMark"></image>
<view>
<image :src="item.image" mode="" :style="{height:imgHeight,width:imgWidth}"></image>
</view>
<view class="num">
{{item.value}}
</view>
<view class="label">
{{item.label}}
</view>
</view>
</template>
</view>
</template>
<script>
export default {
props: {
loading:{
type: Boolean,
default:false
},
list: {
type: Array,
default: () => []
},
col: {
type: Number,
default: 2
},
imgHeight: {
type: String,
default: '40rpx'
},
imgWidth: {
type: String,
default: '40rpx'
}
}
}
</script>
<style lang="scss">
.grid {
display: grid;
gap: 22rpx;
background-color: #fff;
border-radius: 30rpx;
margin-top: 26rpx;
.item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: #F4F8F7;
padding: 24rpx 0;
border-radius: 10rpx;
position: relative;
.num {
font-size: 36rpx;
color: #5A5A5A;
}
.label {
font-size: 24rpx;
color: #5A5A5A;
text-align: center;
white-space: pre-wrap;
}
.rightMark {
position: absolute;
right: 0;
top: 0;
height: 40rpx;
width: 40rpx;
}
}
}
</style>

View File

@ -21,9 +21,7 @@
<view class="item-num">{{ panelData.totalCapacity | kwhFormat }}
</view>
<view class="item-title">{{ this.$t('homePage.home.totalCapacity') }}({{
panelData.totalCapacity | kwhUnitFormat
}})</view>
<view class="item-title">{{ this.$t('homePage.home.totalCapacity') }}({{ panelData.totalCapacity | kwhUnitFormat }})</view>
</view>
</view>
<view class="group-item">

View File

@ -87,8 +87,7 @@
<image src="/static/aidex/images/rfdl.png"></image>
</view>
<view class="item-con">
<view class="item-num">{{ panelData.dailyDischargeElec | kwhFormat
}}</view>
<view class="item-num">{{ panelData.dailyDischargeElec | kwhFormat }}</view>
<view class="item-title">{{ this.$t('homePage.home.dailyDischarge') }}({{ panelData.dailyDischargeElec | kwhUnitFormat }})</view>
</view>
</view>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
<template>
<view class="warp">
<topoCanvas cId="secondcanvas" :width="'100%'" :height="'100%'" :canvas-data="canvasData" :noloading="noloading"/>
<topoCanvas ref="topoCanvasRef" cId="secondcanvas" :width="'100%'" :height="'100%'" :canvas-data="canvasData" :noloading="noloading"/>
</view>
</template>
<script>
@ -266,7 +266,175 @@
isMove: false,
r: 3,
},
]
],
animationId: null, // requestAnimationFrame ID
movingPoints: [
// 点1左上角 → 向右移动
{
x: 60,
y: 30,
path: [{
x: 60,
y: 30
}, // 起点
{
x: 240,
y: 30
} // 终点
],
currentStep: 0, // 当前在路径的哪一步
isActive: false, // 标识动画是否激活
id: 'point-1'
},
// 点2左上角 → 向右 → 向下
{
x: 60,
y: 30,
path: [{
x: 60,
y: 30
},
{
x: 110,
y: 30
},
{
x: 110,
y: 85
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-2'
},
// 点3中间下 → 向下 → 向左 → 向下
{
x: 110,
y: 127,
path: [{
x: 110,
y: 127
},
{
x: 110,
y: 150
},
{
x: 60,
y: 150
},
{
x: 60,
y: 190
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-3'
},
// 点5中间下 → 向下 → 向右 → 向下
{
x: 110,
y: 127,
path: [{
x: 110,
y: 127
},
{
x: 110,
y: 150
},
{
x: 270,
y: 150
},
{
x: 270,
y: 190
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-5'
},
// 点6中间上 → 向上 → 向右
{
x: 110,
y: 85,
path: [{
x: 110,
y: 85
},
{
x: 110,
y: 30
},
{
x: 240,
y: 30
} // 终点
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-6'
},
// 点7左下角 → 向上 → 向右 → 向上
{
x: 60,
y: 190,
path: [{
x: 60,
y: 190
},
{
x: 60,
y: 150
},
{
x: 110,
y: 150
},
{
x: 110,
y: 127
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-7'
},
// 点9右下角 → 向上 → 向左 → 向上
{
x: 270,
y: 190,
path: [{
x: 270,
y: 190
},
{
x: 270,
y: 150
},
{
x: 110,
y: 150
},
{
x: 110,
y: 127
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-9'
}
],
pointSpeed: 1.5, // 移动速度(像素/帧)
kWValues: {
left: null, // 存储 getLeftPcs 的 kW 值
right: null // 存储 getRightPcs 的 kW 值
}
}
},
computed: {
@ -274,8 +442,117 @@
return this.vuex_currentStation;
},
},
beforeDestroy() {
// 强制取消动画帧
if (this.animationId) {
if (typeof requestAnimationFrame !== 'undefined') {
cancelAnimationFrame(this.animationId);
} else {
clearTimeout(this.animationId);
}
this.animationId = null; // 重置ID
}
// 重置所有动态点状态
this.movingPoints.forEach(point => {
point.isActive = false;
point.currentStep = 0;
point.x = point.path[0].x;
point.y = point.path[0].y;
});
// 清空canvasData
this.canvasData = [];
},
watch:{
stationId(newVal,oldVal){
if (newVal) {
this.getData(newVal);
}
}
},
methods: {
// 启动动画
startAnimation() {
const canvasRef = this.$refs.topoCanvasRef;
if (!canvasRef) return;
// 清除旧动画
if (this.animationId !== null) {
if (requestAnimationFrame && this.animationId) {
cancelAnimationFrame(this.animationId);
} else {
clearTimeout(this.animationId);
}
this.animationId = null;
}
// 直接启动新动画
this.animate();
},
animate() {
const canvasRef = this.$refs.topoCanvasRef;
if (!canvasRef) return;
const animateFrame = () => {
// 1. 更新移动点的位置
this.movingPoints.forEach(point => {
if (!point.isActive) return;
const currentIndex = point.currentStep;
const nextTarget = point.path[currentIndex + 1];
if (!nextTarget) {
point.x = point.path[0].x;
point.y = point.path[0].y;
point.currentStep = 0;
return;
}
const dx = nextTarget.x - point.x;
const dy = nextTarget.y - point.y;
const distance = Math.sqrt(dx * dx + dy * dy);
if (distance < this.pointSpeed) {
point.x = nextTarget.x;
point.y = nextTarget.y;
point.currentStep++;
} else {
point.x += (dx / distance) * this.pointSpeed;
point.y += (dy / distance) * this.pointSpeed;
}
});
// 2. 更新 canvasData 中的动态点
this.updateMovingPoints();
// 3. 清除并重绘
canvasRef.clear();
canvasRef.draw(null);
// 4. 继续下一帧(✅ 安全判断)
if (typeof requestAnimationFrame !== 'undefined') {
this.animationId = requestAnimationFrame(animateFrame);
} else {
this.animationId = setTimeout(animateFrame, 16);
}
};
// 启动第一帧(✅ 安全判断)
if (typeof requestAnimationFrame !== 'undefined') {
requestAnimationFrame(animateFrame);
} else {
setTimeout(animateFrame, 16);
}
},
updateMovingPoints() {
this.movingPoints.forEach(point => {
const dataIndex = this.canvasData.findIndex(item => item.id === point.id);
if (dataIndex !== -1) {
this.canvasData[dataIndex].coord = [
[point.x, point.y]
];
}
});
},
changeEnglish(){
this.textCanvasData = [
{
@ -332,14 +609,66 @@
},
getData(val){
// 彻底重置画布数据
this.canvasData = [];
// 重置所有点状态
this.movingPoints.forEach(point => (point.isActive = false,point.isMove = false,point.currentStep = 0,point.x = point.path[0].x,point.y = point.path[0].y));
this.stationId = val
this.textCanvasData.splice(3)
const api = [this.getLeftPcs(),this.getRightPcs(),this.getAmmeter()]
Promise.all(api).finally((result) => {
// 获取三个 kW 值
const {
left,
right
} = this.kWValues;
const values = [left, right];
const allZero = values.every(v => v === 0);
const anyPositive = values.some(v => v > 0);
const anyNegative = values.some(v => v < 0);
// 重置所有点(确保干净)
this.movingPoints.forEach(p => (p.isActive = false));
// 条件3全部为0 → 只显示点1
if (allZero) {
this.movingPoints.find(p => p.id === 'point-1').isActive = true;
}
// 否则按原逻辑处理
else {
// 条件1任一大于0 → 点6运动
if (anyPositive) {
this.movingPoints.find(p => p.id === 'point-1').isActive = true;
this.movingPoints.find(p => p.id === 'point-2').isActive = true;
}
// 条件2任一小于0 → 点1和点2运动
if (anyNegative) {
this.movingPoints.find(p => p.id === 'point-6').isActive = true;
}
// 再设置点3~9的显示逻辑
this.updatePcsPoints();
}
this.canvasData = [...this.textCanvasData, ...this.imageCanvasData, ...this
.lineCanvasData, ...this.circleCanvasData
]
// 动态添加 movingPoints
this.movingPoints.forEach(point => {
this.canvasData.push({
type: "circle",
id: point.id,
coord: [
[point.x, point.y]
],
color: "#3AECA1",
r: 3,
isMove: true
});
});
this.noloading = true
this.$nextTick(() => {
this.startAnimation();
});
});
},
countChineseAndEnglishCharacters(str, x) {
@ -406,7 +735,10 @@
.then((res) => {
if(res.data && res.data.length){
res.data.forEach((item,index) => {
if (item.name.includes('kW')) { // 检查是否包含'kW'
const value = parseFloat(item.value);
this.kWValues.left = value; // 只记录
}
this.textCanvasData.push(
{
type: "text",
@ -435,9 +767,13 @@
)
})
} else {
this.kWValues.left = 0; // 没数据视为 0
}
resolve()
}).catch(() => {
this.kWValues.left = 0; // 出错也视为 0
resolve();
})
})
@ -453,7 +789,10 @@
.then((res) => {
if(res.data && res.data.length){
res.data.forEach((item,index) => {
if (item.name.includes('kW')) { // 检查是否包含'kW'
const value = parseFloat(item.value);
this.kWValues.right = value;
}
this.textCanvasData.push(
{
type: "text",
@ -482,12 +821,49 @@
)
})
} else {
this.kWValues.right = 0;
}
resolve()
})
}).catch(() => {
this.kWValues.right = 0;
resolve();
})
})
},
updatePcsPoints() {
const { left, right } = this.kWValues;
// 处理左边点3 和 点7
const point3 = this.movingPoints.find(p => p.id === 'point-3');
const point7 = this.movingPoints.find(p => p.id === 'point-7');
if (left === 0) {
point3.isActive = false;
point7.isActive = false;
} else if (left > 0) {
point3.isActive = true;
point7.isActive = false;
} else if (left < 0) {
point3.isActive = false;
point7.isActive = true;
}
// 处理右边点5 和 点9
const point5 = this.movingPoints.find(p => p.id === 'point-5');
const point9 = this.movingPoints.find(p => p.id === 'point-9');
if (right === 0) {
point5.isActive = false;
point9.isActive = false;
} else if (right > 0) {
point5.isActive = true;
point9.isActive = false;
} else if (right < 0) {
point5.isActive = false;
point9.isActive = true;
}
}
}

View File

@ -1,6 +1,6 @@
<template>
<view class="warp">
<topoCanvas :cId="canvasId" :width="'100%'" :height="'100%'" :canvas-data="canvasData" :noloading="noloading" />
<topoCanvas ref="topoCanvasRef" :cId="canvasId" :width="'100%'" :height="'100%'" :canvas-data="canvasData" :noloading="noloading" />
</view>
</template>
<script>
@ -214,7 +214,65 @@
r: 3
},
]
],
animationId: null, // requestAnimationFrame ID
movingPoints: [
// 点1左上角 → 向右移动
{
x: 50,
y: 110,
path: [{
x: 50,
y: 110
}, // 起点
{
x: 140,
y: 110
} // 终点
],
currentStep: 0, // 当前在路径的哪一步
isActive: false, // 标识动画是否激活
id: 'point-1'
},
// 点2左上角 → 向右移动
{
x: 185,
y: 110,
path: [{
x: 185,
y: 110
}, // 起点
{
x: 260,
y: 110
} // 终点
],
currentStep: 0, // 当前在路径的哪一步
isActive: false, // 标识动画是否激活
id: 'point-2'
},
// 点3左上角 → 向右移动
{
x: 260,
y: 110,
path: [{
x: 260,
y: 110
}, // 起点
{
x: 185,
y: 110
} // 终点
],
currentStep: 0, // 当前在路径的哪一步
isActive: false, // 标识动画是否激活
id: 'point-3'
}
],
pointSpeed: 1.5, // 移动速度(像素/帧)
kWValues: {
right: null // 存储 getRightPcs 的 kW 值
}
}
},
computed: {
@ -222,8 +280,119 @@
return this.vuex_currentStation;
},
},
beforeDestroy() {
// 强制取消动画帧
if (this.animationId) {
if (typeof requestAnimationFrame !== 'undefined') {
cancelAnimationFrame(this.animationId);
} else {
clearTimeout(this.animationId);
}
this.animationId = null; // 重置ID
}
// 重置所有动态点状态
this.movingPoints.forEach(point => {
point.isActive = false;
point.currentStep = 0;
point.x = point.path[0].x;
point.y = point.path[0].y;
});
// 清空canvasData
this.canvasData = [];
},
watch:{
stationId(newVal,oldVal){
console.log(newVal,oldVal);
if (newVal) {
this.getData(newVal);
}
}
},
methods: {
// 启动动画
startAnimation() {
const canvasRef = this.$refs.topoCanvasRef;
if (!canvasRef) return;
// 清除旧动画
if (this.animationId !== null) {
if (requestAnimationFrame && this.animationId) {
cancelAnimationFrame(this.animationId);
} else {
clearTimeout(this.animationId);
}
this.animationId = null;
}
// 直接启动新动画
this.animate();
},
animate() {
const canvasRef = this.$refs.topoCanvasRef;
if (!canvasRef) return;
const animateFrame = () => {
// 1. 更新移动点的位置
this.movingPoints.forEach(point => {
if (!point.isActive) return;
const currentIndex = point.currentStep;
const nextTarget = point.path[currentIndex + 1];
if (!nextTarget) {
point.x = point.path[0].x;
point.y = point.path[0].y;
point.currentStep = 0;
return;
}
const dx = nextTarget.x - point.x;
const dy = nextTarget.y - point.y;
const distance = Math.sqrt(dx * dx + dy * dy);
if (distance < this.pointSpeed) {
point.x = nextTarget.x;
point.y = nextTarget.y;
point.currentStep++;
} else {
point.x += (dx / distance) * this.pointSpeed;
point.y += (dy / distance) * this.pointSpeed;
}
});
// 2. 更新 canvasData 中的动态点
this.updateMovingPoints();
// 3. 清除并重绘
canvasRef.clear();
canvasRef.draw(null);
// 4. 继续下一帧(✅ 安全判断)
if (typeof requestAnimationFrame !== 'undefined') {
this.animationId = requestAnimationFrame(animateFrame);
} else {
this.animationId = setTimeout(animateFrame, 16);
}
};
// 启动第一帧(✅ 安全判断)
if (typeof requestAnimationFrame !== 'undefined') {
requestAnimationFrame(animateFrame);
} else {
setTimeout(animateFrame, 16);
}
},
updateMovingPoints() {
this.movingPoints.forEach(point => {
const dataIndex = this.canvasData.findIndex(item => item.id === point.id);
if (dataIndex !== -1) {
this.canvasData[dataIndex].coord = [
[point.x, point.y]
];
}
});
},
changeEnglish() {
this.textCanvasData = [
// 并网柜--0
@ -351,17 +520,42 @@
]
},
getData(val) {
// 彻底重置画布数据
this.canvasData = [];
// 重置所有点状态
this.movingPoints.forEach(point => (point.isActive = false,point.isMove = false,point.currentStep = 0,point.x = point.path[0].x,point.y = point.path[0].y));
this.stationId = val
this.clearData()
const api = [
this.getMiddleData()
];
Promise.all(api).finally((result) => {
// 重置所有点(确保干净)
this.movingPoints.forEach(p => (p.isActive = false));
this.movingPoints.find(p => p.id === 'point-1').isActive = true;
// 再设置点2-3的显示逻辑
this.updatePcsPoints();
this.canvasData = [...this.textCanvasData, ...this.imageCanvasData, ...this
.lineCanvasData, ...this.circleCanvasData
]
// 动态添加 movingPoints
this.movingPoints.forEach(point => {
this.canvasData.push({
type: "circle",
id: point.id,
coord: [
[point.x, point.y]
],
color: "#3AECA1",
r: 3,
isMove: true
});
});
this.noloading = true
this.$nextTick(() => {
this.startAnimation();
});
});
},
workStatus(val, data) {
@ -401,18 +595,45 @@
stationId: this.stationId
})
.then(res => {
this.textCanvasData[3].font[1].text = this.workStatus(res.data.activePowerPCS, res
.data.flowDirection)
this.textCanvasData[4].font[1].text = res.data.activePowerPCS !== null ? res.data
.activePowerPCS + '' : ''
this.textCanvasData[5].font[1].text = res.data.soc !== null ? res.data.soc + '' :
''
this.textCanvasData[6].font[1].text = res.data.soh !== null ? res.data.soh + '' :
''
if (res.data) {
const value = parseFloat(res.data.activePowerPCS);
this.kWValues.right = value;
this.textCanvasData[3].font[1].text = this.workStatus(res.data.activePowerPCS, res
.data.flowDirection)
this.textCanvasData[4].font[1].text = res.data.activePowerPCS !== null ? res.data
.activePowerPCS + '' : ''
this.textCanvasData[5].font[1].text = res.data.soc !== null ? res.data.soc + '' :
''
this.textCanvasData[6].font[1].text = res.data.soh !== null ? res.data.soh + '' :
''
} else {
this.kWValues.right = 0;
}
resolve()
}).catch(() => {
this.kWValues.right = 0;
resolve();
})
})
}
},
updatePcsPoints() {
const { right } = this.kWValues;
// 处理右边点5 和 点9
const point2 = this.movingPoints.find(p => p.id === 'point-2');
const point3 = this.movingPoints.find(p => p.id === 'point-3');
if (right === 0) {
point2.isActive = false;
point3.isActive = false;
} else if (right > 0) {
point2.isActive = true;
point3.isActive = false;
} else if (right < 0) {
point2.isActive = false;
point3.isActive = true;
}
}
}
}

View File

@ -1,6 +1,7 @@
<template>
<view class="warp">
<topoCanvas cId="thirdcanvas" :width="'100%'" :height="'100%'" :canvas-data="canvasData" :noloading="noloading"/>
<topoCanvas ref="topoCanvasRef" cId="thirdcanvas" :width="'100%'" :height="'100%'" :canvas-data="canvasData"
:noloading="noloading" />
</view>
</template>
<script>
@ -13,10 +14,9 @@
return {
canvasData: [],
partList: {},
noloading:false,
noloading: false,
// 文字
textCanvasData: [
{
textCanvasData: [{
type: "text",
coord: [
[260, 65]
@ -81,8 +81,7 @@
],
// 图片
imageCanvasData: [
{
imageCanvasData: [{
//负载
type: "image",
url: "/static/topology/load.png",
@ -92,65 +91,64 @@
],
},
{
//电网
type: "image",
url: "/static/topology/dianwang.png",
coord: [
[15, 10],
[40, 40],
],
//电网
type: "image",
url: "/static/topology/dianwang.png",
coord: [
[15, 10],
[40, 40],
],
},
{
//一体舱
type: "image",
url: "/static/topology/yiticang.png",
coord: [
[45, 195],
[30, 40],
],
//一体舱
type: "image",
url: "/static/topology/yiticang.png",
coord: [
[45, 195],
[30, 40],
],
},
{
//一体舱
type: "image",
url: "/static/topology/yiticang.png",
coord: [
[145, 195],
[30, 40],
],
//一体舱
type: "image",
url: "/static/topology/yiticang.png",
coord: [
[145, 195],
[30, 40],
],
},
{
//一体舱
type: "image",
url: "/static/topology/yiticang.png",
coord: [
[255, 195],
[30, 40],
],
//一体舱
type: "image",
url: "/static/topology/yiticang.png",
coord: [
[255, 195],
[30, 40],
],
},
{
//电表
type: "image",
url: "/static/topology/ammeter.png",
coord: [
[170, 35],
[30, 30],
],
//电表
type: "image",
url: "/static/topology/ammeter.png",
coord: [
[170, 35],
[30, 30],
],
},
{
//sts
type: "image",
url: "/static/topology/yitigui.png",
coord: [
[95, 85],
[30, 40],
],
//sts
type: "image",
url: "/static/topology/yitigui.png",
coord: [
[95, 85],
[30, 40],
],
},
],
// 线
lineCanvasData: [
{
lineCanvasData: [{
type: "line",
coord: [
[60, 30],
@ -233,8 +231,7 @@
],
// 点
circleCanvasData: [
{
circleCanvasData: [{
type: "circle",
coord: [
[60, 30]
@ -306,8 +303,227 @@
color: "#3AECA1",
isMove: false,
r: 3,
}
],
animationId: null, // requestAnimationFrame ID
movingPoints: [
// 点1左上角 → 向右移动
{
x: 60,
y: 30,
path: [{
x: 60,
y: 30
}, // 起点
{
x: 240,
y: 30
} // 终点
],
currentStep: 0, // 当前在路径的哪一步
isActive: false, // 标识动画是否激活
id: 'point-1'
},
]
// 点2左上角 → 向右 → 向下
{
x: 60,
y: 30,
path: [{
x: 60,
y: 30
},
{
x: 110,
y: 30
},
{
x: 110,
y: 85
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-2'
},
// 点3中间下 → 向下 → 向左 → 向下
{
x: 110,
y: 127,
path: [{
x: 110,
y: 127
},
{
x: 110,
y: 150
},
{
x: 60,
y: 150
},
{
x: 60,
y: 190
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-3'
},
// 点4中间下 → 向下 → 向右 → 向下
{
x: 110,
y: 127,
path: [{
x: 110,
y: 127
},
{
x: 110,
y: 150
},
{
x: 160,
y: 150
},
{
x: 160,
y: 190
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-4'
},
// 点5中间下 → 向下 → 向右 → 向下
{
x: 110,
y: 127,
path: [{
x: 110,
y: 127
},
{
x: 110,
y: 150
},
{
x: 270,
y: 150
},
{
x: 270,
y: 190
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-5'
},
// 点6中间上 → 向上 → 向右
{
x: 110,
y: 85,
path: [{
x: 110,
y: 85
},
{
x: 110,
y: 30
},
{
x: 240,
y: 30
} // 终点
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-6'
},
// 点7左下角 → 向上 → 向右 → 向上
{
x: 60,
y: 190,
path: [{
x: 60,
y: 190
},
{
x: 60,
y: 150
},
{
x: 110,
y: 150
},
{
x: 110,
y: 127
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-7'
},
// 点8底部中间 → 向上 → 向左 → 向上
{
x: 160,
y: 190,
path: [{
x: 160,
y: 190
},
{
x: 160,
y: 150
},
{
x: 110,
y: 150
},
{
x: 110,
y: 127
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-8'
},
// 点9右下角 → 向上 → 向左 → 向上
{
x: 270,
y: 190,
path: [{
x: 270,
y: 190
},
{
x: 270,
y: 150
},
{
x: 110,
y: 150
},
{
x: 110,
y: 127
}
],
currentStep: 0,
isActive: false, // 标识动画是否激活
id: 'point-9'
}
],
pointSpeed: 1.5, // 移动速度(像素/帧)
kWValues: {
left: null, // 存储 getLeftPcs 的 kW 值
center: null, // 存储 getCenterPcs 的 kW 值
right: null // 存储 getRightPcs 的 kW 值
}
}
},
computed: {
@ -315,11 +531,119 @@
return this.vuex_currentStation;
},
},
beforeDestroy() {
// 强制取消动画帧
if (this.animationId) {
if (typeof requestAnimationFrame !== 'undefined') {
cancelAnimationFrame(this.animationId);
} else {
clearTimeout(this.animationId);
}
this.animationId = null; // 重置ID
}
// 重置所有动态点状态
this.movingPoints.forEach(point => {
point.isActive = false;
point.currentStep = 0;
point.x = point.path[0].x;
point.y = point.path[0].y;
});
// 清空canvasData
this.canvasData = [];
},
watch: {
stationId(newVal, oldVal) {
if (newVal) {
this.getData(newVal);
}
}
},
methods: {
changeEnglish(){
this.textCanvasData = [
{
// 启动动画
startAnimation() {
const canvasRef = this.$refs.topoCanvasRef;
if (!canvasRef) return;
// 清除旧动画
if (this.animationId !== null) {
if (requestAnimationFrame && this.animationId) {
cancelAnimationFrame(this.animationId);
} else {
clearTimeout(this.animationId);
}
this.animationId = null;
}
// 直接启动新动画
this.animate();
},
animate() {
const canvasRef = this.$refs.topoCanvasRef;
if (!canvasRef) return;
const animateFrame = () => {
// 1. 更新移动点的位置
this.movingPoints.forEach(point => {
if (!point.isActive) return;
const currentIndex = point.currentStep;
const nextTarget = point.path[currentIndex + 1];
if (!nextTarget) {
point.x = point.path[0].x;
point.y = point.path[0].y;
point.currentStep = 0;
return;
}
const dx = nextTarget.x - point.x;
const dy = nextTarget.y - point.y;
const distance = Math.sqrt(dx * dx + dy * dy);
if (distance < this.pointSpeed) {
point.x = nextTarget.x;
point.y = nextTarget.y;
point.currentStep++;
} else {
point.x += (dx / distance) * this.pointSpeed;
point.y += (dy / distance) * this.pointSpeed;
}
});
// 2. 更新 canvasData 中的动态点
this.updateMovingPoints();
// 3. 清除并重绘
canvasRef.clear();
canvasRef.draw(null);
// 4. 继续下一帧(✅ 安全判断)
if (typeof requestAnimationFrame !== 'undefined') {
this.animationId = requestAnimationFrame(animateFrame);
} else {
this.animationId = setTimeout(animateFrame, 16);
}
};
// 启动第一帧(✅ 安全判断)
if (typeof requestAnimationFrame !== 'undefined') {
requestAnimationFrame(animateFrame);
} else {
setTimeout(animateFrame, 16);
}
},
updateMovingPoints() {
this.movingPoints.forEach(point => {
const dataIndex = this.canvasData.findIndex(item => item.id === point.id);
if (dataIndex !== -1) {
this.canvasData[dataIndex].coord = [
[point.x, point.y]
];
}
});
},
changeEnglish() {
this.textCanvasData = [{
type: "text",
coord: [
[260, 65]
@ -383,37 +707,104 @@
]
},
getData(val){
this.stationId = val
this.textCanvasData.splice(5)
const api = [this.getLeftPcs(),this.getRightPcs(),this.getCenterPcs(),this.getAmmeter()]
Promise.all(api).finally((result) => {
this.canvasData = [...this.textCanvasData, ...this.imageCanvasData, ...this
.lineCanvasData, ...this.circleCanvasData
]
this.noloading = true
getData(val) {
// 彻底重置画布数据
this.canvasData = [];
// 重置所有点状态
this.movingPoints.forEach(point => (point.isActive = false, point.isMove = false, point.currentStep = 0,
point.x = point.path[0].x, point.y = point.path[0].y));
this.stationId = val;
this.textCanvasData.splice(5); // 清除文本数据
const api = [this.getLeftPcs(), this.getCenterPcs(), this.getRightPcs(), this.getAmmeter()];
Promise.all(api).finally(() => {
// 获取三个 kW 值
const {
left,
center,
right
} = this.kWValues;
const values = [left, center, right];
const allZero = values.every(v => v === 0);
const anyPositive = values.some(v => v > 0);
const anyNegative = values.some(v => v < 0);
// 重置所有点(确保干净)
this.movingPoints.forEach(p => (p.isActive = false));
// 条件3全部为0 → 只显示点1
if (allZero) {
this.movingPoints.find(p => p.id === 'point-1').isActive = true;
}
// 否则按原逻辑处理
else {
// 条件1任一大于0 → 点6运动
if (anyPositive) {
this.movingPoints.find(p => p.id === 'point-1').isActive = true;
this.movingPoints.find(p => p.id === 'point-2').isActive = true;
}
// 条件2任一小于0 → 点1和点2运动
if (anyNegative) {
this.movingPoints.find(p => p.id === 'point-6').isActive = true;
}
// 再设置点3~9的显示逻辑
this.updatePcsPoints();
}
// 重新构建 canvasData
this.canvasData = [
...this.textCanvasData,
...this.imageCanvasData,
...this.lineCanvasData,
...this.circleCanvasData
];
// 动态添加 movingPoints
this.movingPoints.forEach(point => {
this.canvasData.push({
type: "circle",
id: point.id,
coord: [
[point.x, point.y]
],
color: "#3AECA1",
r: 3,
isMove: true
});
});
this.noloading = true;
this.$nextTick(() => {
this.startAnimation();
});
});
},
countChineseAndEnglishCharacters(str, x) {
var chineseCount = str.match(/[\u4e00-\u9fa5]/g) ? str.match(/[\u4e00-\u9fa5]/g).length : 0
var englishCount = str.match(/[a-zA-Z]/g) ? str.match(/[a-zA-Z]/g).length : 0
var otherCount = str.length - chineseCount - englishCount
const obj = { otherCount: otherCount, chineseCount: chineseCount, englishCount: englishCount }
return (obj.englishCount * 4) + (obj.chineseCount * 10 ) + (obj.otherCount * 8) + x
},
getAmmeter(){
var chineseCount = str.match(/[\u4e00-\u9fa5]/g) ? str.match(/[\u4e00-\u9fa5]/g).length : 0
var englishCount = str.match(/[a-zA-Z]/g) ? str.match(/[a-zA-Z]/g).length : 0
var otherCount = str.length - chineseCount - englishCount
const obj = {
otherCount: otherCount,
chineseCount: chineseCount,
englishCount: englishCount
}
return (obj.englishCount * 4) + (obj.chineseCount * 10) + (obj.otherCount * 8) + x
},
getAmmeter() {
let self = this;
return new Promise((resolve, reject) => {
self.$u.api.homePageData
.GetDynamicConfig({
stationId: this.stationId,
pageLocation:'triad-ammeter'
pageLocation: 'triad-ammeter'
})
.then((res) => {
if(res.data && res.data.length){
res.data.forEach((item,index) => {
this.textCanvasData.push(
{
if (res.data && res.data.length) {
res.data.forEach((item, index) => {
this.textCanvasData.push({
type: "text",
coord: [
[120, 80 + index * 15]
@ -424,11 +815,11 @@
color: "#666666",
width: 50,
}]
},
{
}, {
type: "text",
coord: [
[this.countChineseAndEnglishCharacters(item.name,130), 80 + index * 15]
[this.countChineseAndEnglishCharacters(item
.name, 130), 80 + index * 15]
],
font: [{
text: `${item.value}`,
@ -436,60 +827,62 @@
color: "#666666",
width: 50,
}]
},
)
}, )
})
}
resolve()
})
})
})
},
getLeftPcs() {
let self = this;
return new Promise((resolve, reject) => {
self.$u.api.homePageData
.GetDynamicConfig({
stationId: this.stationId,
pageLocation:'triad-pcs-left'
})
.then((res) => {
if(res.data && res.data.length){
res.data.forEach((item,index) => {
this.textCanvasData.push(
{
type: "text",
coord: [
[0, 265 + index * 15]
],
font: [{
text: `${item.name}`,
size: 12,
color: "#666666",
width: 50,
}]
},
{
type: "text",
coord: [
[this.countChineseAndEnglishCharacters(item.name,0), 265 + index * 15]
],
font: [{
text: `${item.value}`,
size: 12,
color: "#666666",
width: 50,
}]
},
)
})
}
resolve()
self.$u.api.homePageData.GetDynamicConfig({
stationId: this.stationId,
pageLocation: 'triad-pcs-left'
}).then((res) => {
if (res.data && res.data.length) {
res.data.forEach((item, index) => {
if (item.name.includes('kW')) { // 检查是否包含'kW'
const value = parseFloat(item.value);
this.kWValues.left = value; // 只记录
}
this.textCanvasData.push({
type: "text",
coord: [
[0, 265 + index * 15]
],
font: [{
text: `${item.name}`,
size: 12,
color: "#666666",
width: 50,
}]
}, {
type: "text",
coord: [
[this.countChineseAndEnglishCharacters(item
.name, 0), 265 + index * 15]
],
font: [{
text: `${item.value}`,
size: 12,
color: "#666666",
width: 50,
}]
}, )
})
} else {
this.kWValues.left = 0; // 没数据视为 0
}
resolve()
}).catch(() => {
this.kWValues.left = 0; // 出错也视为 0
resolve();
})
})
@ -500,14 +893,16 @@
self.$u.api.homePageData
.GetDynamicConfig({
stationId: this.stationId,
pageLocation:'triad-pcs-center'
pageLocation: 'triad-pcs-center'
})
.then((res) => {
if(res.data && res.data.length){
res.data.forEach((item,index) => {
this.textCanvasData.push(
{
if (res.data && res.data.length) {
res.data.forEach((item, index) => {
if (item.name.includes('kW')) { // 检查是否包含'kW'
const value = parseFloat(item.value);
this.kWValues.center = value;
}
this.textCanvasData.push({
type: "text",
coord: [
[110, 265 + index * 15]
@ -518,11 +913,11 @@
color: "#666666",
width: 50,
}]
},
{
}, {
type: "text",
coord: [
[this.countChineseAndEnglishCharacters(item.name,110), 265 + index * 15]
[this.countChineseAndEnglishCharacters(item
.name, 110), 265 + index * 15]
],
font: [{
text: `${item.value}`,
@ -530,16 +925,20 @@
color: "#666666",
width: 50,
}]
},
)
}, )
})
} else {
this.kWValues.center = 0;
}
resolve()
})
}).catch(() => {
this.kWValues.center = 0;
resolve();
})
})
},
getRightPcs() {
let self = this;
@ -547,14 +946,16 @@
self.$u.api.homePageData
.GetDynamicConfig({
stationId: this.stationId,
pageLocation:'triad-pcs-right'
pageLocation: 'triad-pcs-right'
})
.then((res) => {
if(res.data && res.data.length){
res.data.forEach((item,index) => {
this.textCanvasData.push(
{
if (res.data && res.data.length) {
res.data.forEach((item, index) => {
if (item.name.includes('kW')) { // 检查是否包含'kW'
const value = parseFloat(item.value);
this.kWValues.right = value;
}
this.textCanvasData.push({
type: "text",
coord: [
[220, 265 + index * 15]
@ -565,11 +966,11 @@
color: "#666666",
width: 50,
}]
},
{
}, {
type: "text",
coord: [
[this.countChineseAndEnglishCharacters(item.name,220), 265 + index * 15]
[this.countChineseAndEnglishCharacters(item
.name, 220), 265 + index * 15]
],
font: [{
text: `${item.value}`,
@ -577,17 +978,74 @@
color: "#666666",
width: 50,
}]
},
)
}, )
})
} else {
this.kWValues.right = 0;
}
resolve()
})
}).catch(() => {
this.kWValues.right = 0;
resolve();
})
})
},
updatePcsPoints() {
const {
left,
center,
right
} = this.kWValues;
// 处理左边点3 和 点7
const point3 = this.movingPoints.find(p => p.id === 'point-3');
const point7 = this.movingPoints.find(p => p.id === 'point-7');
if (left === 0) {
point3.isActive = false;
point7.isActive = false;
} else if (left > 0) {
point3.isActive = true;
point7.isActive = false;
} else if (left < 0) {
point3.isActive = false;
point7.isActive = true;
}
// 处理中间点4 和 点8
const point4 = this.movingPoints.find(p => p.id === 'point-4');
const point8 = this.movingPoints.find(p => p.id === 'point-8');
if (center === 0) {
point4.isActive = false;
point8.isActive = false;
} else if (center > 0) {
point4.isActive = true;
point8.isActive = false;
} else if (center < 0) {
point4.isActive = false;
point8.isActive = true;
}
// 处理右边点5 和 点9
const point5 = this.movingPoints.find(p => p.id === 'point-5');
const point9 = this.movingPoints.find(p => p.id === 'point-9');
if (right === 0) {
point5.isActive = false;
point9.isActive = false;
} else if (right > 0) {
point5.isActive = true;
point9.isActive = false;
} else if (right < 0) {
point5.isActive = false;
point9.isActive = true;
}
}
}
}
@ -598,4 +1056,4 @@
height: 650rpx;
position: relative;
}
</style>
</style>

View File

@ -17,7 +17,7 @@
<view class="icon device" />
<view class="title"> {{ this.$t("homePage.home.device") }} </view>
</view>
<view class="box" @click="changeMenu('earnings')">
<view class="box" @click="changeMenu('earningSelect')">
<view class="icon earning" />
<view class="title"> {{ this.$t("homePage.home.earning") }} </view>
</view>
@ -32,26 +32,29 @@
</view>
<!-- 内容 -->
<view class="content-box">
<view class="box">
<Section :title="$t('homePage.home.stationTopo')" />
<cixi v-if="topologyType === 0" ref="tuopu" />
<kejiyuan v-else-if="topologyType === 2" ref="tuopu" />
<lingchao v-else-if="topologyType === 3" ref="tuopu" />
<jingke v-else-if="topologyType === 4" ref="tuopu" />
<weishanhu v-else-if="topologyType === 5" ref="tuopu" />
<zhongzihuanbao v-else-if="topologyType === 6" ref="tuopu" />
<sanmenxia v-else-if="topologyType === 7" ref="tuopu" />
<second v-else-if="topologyType === 8" ref="tuopu" />
<fire v-else-if="topologyType === 9" ref="tuopu" />
<runda100 v-else-if="topologyType === 10" ref="tuopu" />
<runda230 v-else-if="topologyType === 11" ref="tuopu" />
<runda215 v-else-if="topologyType === 12" ref="tuopu" />
<third v-else-if="topologyType === 13" ref="tuopu" />
<mdPviese v-else-if="topologyType === 14" ref="tuopu" />
<standard v-else ref="tuopu" />
</view>
<!-- 加载中占位可选 -->
<view v-else class="loading-tip">
<zero-loading v-if="tuopoloading"></zero-loading>
<cixi v-if="topologyType === 0" ref="tuopu" />
<kejiyuan v-else-if="topologyType === 2" ref="tuopu" />
<lingchao v-else-if="topologyType === 3" ref="tuopu" />
<jingke v-else-if="topologyType === 4" ref="tuopu" />
<weishanhu v-else-if="topologyType === 5" ref="tuopu" />
<zhongzihuanbao v-else-if="topologyType === 6" ref="tuopu" />
<sanmenxia v-else-if="topologyType === 7" ref="tuopu" />
<second v-else-if="topologyType === 8" ref="tuopu" />
<fire v-else-if="topologyType === 9" ref="tuopu" />
<runda100 v-else-if="topologyType === 10" ref="tuopu" />
<runda230 v-else-if="topologyType === 11" ref="tuopu" />
<runda215 v-else-if="topologyType === 12" ref="tuopu" />
<third v-else-if="topologyType === 13" ref="tuopu" />
<mdPviese v-else-if="topologyType === 14" ref="tuopu" />
<pv2first v-else-if="topologyType === 1 && inverterFlag === 1 && pvTopologyType === 2" ref="tuopu" />
<standard v-else ref="tuopu" />
</view>
<view v-if="topologyType === 9" class="box">
<Section :title="$t('homePage.home.deviceMonitor')" />
<devicemonitoring ref="deviceFire" />
@ -67,7 +70,7 @@
<view slot="right" style="flex: 1">
<view class="top-right-box">
<view class="top-right-item" :class="{ active: activeTime === 'day' }"
@click="changeTime('day')">{{this.$t('homePage.home.sevenDay')}}
@click="changeTime('day')">{{this.$t('homePage.home.sevenDaycom')}}
</view>
<view class="top-right-item" :class="{ active: activeTime === 'month' }"
@click="changeTime('month')">{{this.$t('homePage.home.monthDay')}}
@ -82,17 +85,28 @@
</view>
<view class="box">
<Section :title="$t('homePage.home.stationData')" />
<Section :title="$t('homePage.home.stationDatacom')" />
<wshStationData v-if="topologyType === 5" />
<zzhbStationData v-else-if="topologyType === 6" />
<commonStationData v-else />
</view>
<view class="box" v-if="topologyType !== 9">
<view class="box" v-if="inverterFlag === 1">
<Section :title="$t('homePage.home.pvKpi')" />
<view class="">
<my-grid :loading="loading" :col="language !== 'zh_CN'? 2:3" imgHeight="40rpx" imgWidth="40rpx" :list="lightArr"/>
</view>
</view>
<view class="box" v-if="topologyType === 1">
<Section :title="$t('homePage.home.environmentalData')" />
<environmentalControlPosition v-if="rightCenter === 'dispositionRightCenter'" />
<environmentalControl v-else />
</view>
<!-- <view class="box" v-if="inverterFlag === 1">
<Section :title="$t('homePage.home.socialContribution')" />
<view class="">
<my-grid :col="3" imgHeight="72rpx" imgWidth="82rpx" :list="society" />
</view>
</view> -->
</view>
@ -101,10 +115,17 @@
</template>
<script>
import myGrid from './components/grid/index.vue'
import stationDropdow from '@/components/station-dropdow/index'
import Section from "@/components/section/index";
import charts from "@/components/charts/index";
import cixi from './components/topology/cixi'
import ceshiT from './components/topology/ceshiT.vue'
import ceshiL from './components/topology/ceshiL.vue'
import ceshiS from './components/topology/ceshiS.vue'
import pv2first from './components/topology/pv2first.vue'
import weishanhu from './components/topology/weishanhu.vue'
import sanmenxia from './components/topology/sanmenxia.vue'
import lingchao from './components/topology/lingchao.vue'
@ -130,6 +151,11 @@
export default {
components: {
ceshiT,
ceshiL,
ceshiS,
pv2first,
myGrid,
stationDropdow,
Section,
environmentalControlPosition,
@ -159,6 +185,12 @@
},
data() {
return {
// #ifdef APP
src: '/static/html/demo.html',
// #endif
// #ifdef H5
src: '/static/html/demo.html',
// #endif
loading: false,
curve_option: {},
charge_option: {},
@ -168,7 +200,38 @@
messageList: [],
timer: null,
tuopuTimer: null,
rightCenter: null
rightCenter: null,
componentsLoaded: false,
tuopoloading:false,
topCenterPvArr:[
{name:'pv1AndStorage_261',value:1},
{name:'pv2AndStorage_261',value:2}
],
pvTopologyType:0,
society: [{
label: this.$t('homePage.home.saveStandardCoal'),
value: '15.00',
image: require('@/static/aidex/images/ll01.png'),
},
{
label: this.$t('homePage.home.equivalentCo2Reduction'),
value: '20.50',
image: require('@/static/aidex/images/ll02.png'),
},
{
label: this.$t('homePage.home.equivalentTreePlantings'),
value: '1.50',
image: require('@/static/aidex/images/ll03.png'),
},
],
panelData: {
pvCurrentPower: 0, // 对应 lightArr[0].value
dailyReleaseElec: 0, // 对应 lightArr[1].value
totalReleaseElec: 0, // 对应 lightArr[2].value
todayIncone: 0, // 对应 lightArr[3].value
totalIncome: 0, // 对应 lightArr[4].value
pvPower: 0 // 对应 lightArr[5].value
}
};
},
computed: {
@ -180,7 +243,44 @@
},
language() {
return this.vuex_language
}
},
inverterFlag(){
return this.vuex_inverterFlag;
},
lightArr() {
return [
{
label: this.$t('homePage.home.currentPower') + '(kW)',
value: this.panelData.pvCurrentPower,
image: require('@/static/aidex/images/ll06.png')
},
{
label: this.$t('homePage.home.dailyPowerGeneration') + '(kWh)',
value: this.panelData.dailyReleaseElec,
image: require('@/static/aidex/images/ll07.png')
},
{
label: this.$t('homePage.home.cumulativePowerGeneration') + '(kWh)',
value: this.panelData.totalReleaseElec,
image: require('@/static/aidex/images/ll07.png')
},
{
label: this.$t('homePage.home.todayEarning'),
value: this.panelData.todayIncone,
image: require('@/static/aidex/images/yxts.png')
},
{
label: this.$t('homePage.home.totalRevenue'),
value: this.panelData.totalIncome,
image: require('@/static/aidex/images/yxts.png')
},
{
label: this.$t('homePage.home.ratedPower'),
value: this.panelData.pvPower,
image: require('@/static/aidex/images/ll06.png')
}
];
}
},
onHide() {
if (this.timer) {
@ -192,28 +292,30 @@
},
watch: {
currentStation: {
handler(val) {
if (val && val.id) {
this.stationId = val.id
this.userId = this.userData.userId
this.topologyType = val.topologyType
this.getComponents()
this.$nextTick(() => {
if (this.$refs.tuopu) {
this.$refs.tuopu.getData(val.id)
}
if (this.$refs.deviceFire) {
this.$refs.deviceFire.getData(this.stationId)
}
})
}
},
deep: true,
immediate: true,
},
handler(val) {
if (val && val.id) {
this.stationId = val.id
this.userId = this.userData.userId
this.topologyType = val.topologyType
// 重置加载状态,避免复用旧状态
this.componentsLoaded = false
this.tuopoloading = true
this.getComponents().then(() => {
this.GetPcsTotalData();
this.$nextTick(() => {
if (this.$refs.tuopu) {
this.$refs.tuopu.getData(val.id)
}
if (this.$refs.deviceFire) {
this.$refs.deviceFire.getData(this.stationId)
}
});
});
}
},
deep: true,
immediate: true,
}
},
created() {
@ -234,25 +336,27 @@
})
},
onShow() {
this.getComponents()
this.getMessage()
if (this.$refs.runChart && this.stationId) {
this.$refs.runChart.getData()
}
if (this.$refs.dischargeChart && this.stationId) {
this.$refs.dischargeChart.getData()
}
this.$nextTick(() => {
if (this.$refs.tuopu) {
// 重置加载状态
this.componentsLoaded = false
this.tuopoloading = true
this.getComponents().then(() => {
this.getMessage()
if (this.$refs.runChart && this.stationId) {
this.$refs.runChart.getData()
}
if (this.$refs.dischargeChart && this.stationId) {
this.$refs.dischargeChart.getData()
}
this.$nextTick(() => {
if (this.$refs.tuopu) {
this.$refs.tuopu.changeEnglish()
this.$refs.tuopu.getData(this.stationId)
}
if (this.$refs.deviceFire) {
}
if (this.$refs.deviceFire) {
this.$refs.deviceFire.getData(this.stationId)
}
})
}
})
});
this.timer = setInterval(() => {
this.getMessage()
}, 5000)
@ -269,14 +373,39 @@
},
methods: {
async GetPcsTotalData() {
let self = this;
return new Promise((resolve, reject) => {
self.$u.api.homePageData
.GetPcsTotalData({
stationId: this.stationId,
})
.then((res) => {
this.panelData = Object.assign(this.panelData, res.data);
resolve(res);
})
.catch((err) => {
reject("error");
});
});
},
async getComponents() {
const {
data
} = await this.$u.api.homePageData.GetHomePageComponents(this.stationId)
if(data && data.length > 0){
this.rightCenter = data[0]?.rightCenter
}
try {
const { data } = await this.$u.api.homePageData.GetHomePageComponents(this.stationId);
if (data && data.length > 0) {
this.rightCenter = data[0]?.rightCenter;
const matchedItem = this.topCenterPvArr.find(item => item.name === data[0]?.topCenter);
this.pvTopologyType = matchedItem ? matchedItem.value : this.pvTopologyType;
}
// 接口完成标记加载状态为true
this.componentsLoaded = true
this.tuopoloading = false
} catch (e) {
console.error('获取组件配置失败:', e);
// 即使接口失败,也标记完成,避免组件一直不渲染
this.componentsLoaded = true
this.tuopoloading = false
}
},
openTimer() {
@ -442,7 +571,12 @@
margin: 20rpx;
margin-top: 30rpx;
box-shadow: 0px 4rpx 16rpx rgba(0, 0, 0, 0.08);
.loading-tip {
width: 650rpx;
height: 710rpx;
position: relative;
}
.top-right-box {
display: flex;
flex-direction: row;

View File

@ -14,9 +14,18 @@
</view>
</Section>
<view class="search-box">
<view class="content-box">
<!-- 海外 -->
<view v-if="stationValue" style="width: 100%;" class="content-box">
<view style="width: calc(100% - (50% - 300rpx));" class="content-title">
{{ $t('homePage.home.station') }}
</view>
<view style="width: calc(100% - (50% - 300rpx));" class="content-value">
{{ currentStationName }}
</view>
</view>
<view v-else class="content-box">
<view class="content-title">
{{ this.$t('homePage.price.provinceRegion') }}
{{ $t('homePage.price.provinceRegion') }}
</view>
<view class="content-value">
{{ regionName }}
@ -32,7 +41,7 @@
</view>
</view>
<view class="content-box">
<view v-if="!stationValue" class="content-box">
<view class="content-title">
{{ this.$t('homePage.price.eleType') }}
</view>
@ -51,7 +60,7 @@
</view>
</view>
<view class="content-box">
<view v-if="!stationValue" class="content-box">
<view class="content-title">
{{ this.$t('homePage.price.exeTime') }}
</view>
@ -78,31 +87,34 @@
{{ this.$t('homePage.price.exeTime') }}
</view>
<view class="time-value">
{{ detailData.executionTime }}
{{ detailData.executionTime || timeSlot }}
</view>
<view class="time-title">
<view v-if="!stationValue" class="time-title">
{{ this.$t('homePage.price.eleType') }}
</view>
<view class="time-value">
<view v-if="!stationValue" class="time-value">
{{ detailData.electricityTypeLabel }}
</view>
<view class="time-title">
{{ this.$t('homePage.price.volLevel') }}
</view>
<view class="time-value">
{{ detailData.voltageLevelLabel }}
{{ stationValue? (detailData.voltageLevelLabel || voltageLevelName): detailData.voltageLevelLabel }}
</view>
<view class="title">
{{ this.$t('homePage.price.fsdd') }}{{ this.$t('homePage.price.dietailUnit') }}
{{ stationValue? this.$t('homePage.home.useElecPrice'):this.$t('homePage.price.fsdd') }}{{ this.$t('homePage.price.dietailUnit') }}
</view>
<view class="levels-chart">
<zero-loading v-if="levelsChart_loading"></zero-loading>
<charts v-else id="levelsChart" :options="levelsChart_option" :labelFormatter="true" :dataList="dataList"></charts>
<!-- <view v-else> -->
<!-- <charts v-if="stationValue" id="levelsChart" :options="levelsChart_option" :labelFormatter="true" :dataList="dataList"></charts> -->
<charts v-else id="levelsChart" :options="levelsChart_option" :labelFormatter="true" :dataList="dataList"></charts>
<!-- </view> -->
</view>
<view class="title">
{{ this.$t('homePage.price.eleprice') }}{{ this.$t('homePage.price.dietailUnit') }}
</view>
<view class="value-box">
<view v-if="!stationValue" class="value-box">
<view class="box">
<view class="box-value">
{{ detailData.nonTimePrice ? detailData.nonTimePrice : '--' }}
@ -138,7 +150,7 @@
</view>
</view>
<view class="price-box">
<view v-if="!stationValue" class="price-box">
<Section :title="$t('homePage.price.historytrend')">
<view slot="right" style="flex: 1">
<view class="top-right-box">
@ -162,8 +174,6 @@
<uni-th width="100" align="center">{{this.$t('homePage.price.regular')}}</uni-th>
<uni-th width="100" align="center">{{this.$t('homePage.price.lowValley')}}</uni-th>
<uni-th width="100" align="center">{{this.$t('homePage.price.deepValley')}}</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in history_tableData" :key="index">
<uni-td align="center">{{ item.executionTime }}</uni-td>
@ -172,13 +182,12 @@
<uni-td align="center">{{ item.regularPrice ? item.regularPrice : '-' }}</uni-td>
<uni-td align="center">{{ item.lowValleyPrice ? item.lowValleyPrice : '-' }}</uni-td>
<uni-td align="center">{{ item.deepValleyPrice ? item.deepValleyPrice : '-' }}</uni-td>
</uni-tr>
</uni-table>
</view>
</view>
<view class="price-box">
<view v-if="!stationValue" class="price-box">
<Section :title="$t('homePage.price.peakDifference')">
<view slot="right" style="flex: 1">
<view class="top-right-box">
@ -216,9 +225,14 @@
</view>
<view class="popup-box">
<u-popup v-model="popupShow" mode="bottom" border-radius="20" height="75%" placement="top-end" @close="closePop">
<u-popup v-model="popupShow" mode="bottom" border-radius="20" :height="stationValue? '40%':'75%'" placement="top-end" @close="closePop">
<view class="title">{{this.$t('homePage.price.sift')}}</view>
<view class="s-station">
<view v-if="stationValue" class="s-station">
<u-section :title="$t('homePage.home.station')" line-color="#009458" color="#2A2A2A" class="s-title" :right="false"
style="margin-bottom: 20rpx;"></u-section>
<stationDropdow style="width: 100%;border-color: rgb(220, 223, 230);border: 1px solid #dcdfe6;" ref="dropdow" />
</view>
<view v-else class="s-station">
<u-section :title="$t('homePage.price.provinceRegion')" line-color="#009458" color="#2A2A2A" class="s-title" :right="false"
style="margin-bottom: 20rpx;"></u-section>
<view style="margin-top: 20rpx;">
@ -230,7 +244,7 @@
label-name="regionName" @confirm="confirmRegion"></u-select>
</view>
<view class="s-station">
<view v-if="!stationValue" class="s-station">
<u-section :title="$t('homePage.price.customerType')" line-color="#009458" color="#2A2A2A" class="s-title" :right="false"
style="margin-bottom: 20rpx;"></u-section>
<view style="margin-top: 20rpx;">
@ -243,7 +257,7 @@
@confirm="confirmCustomer" value-name="value" label-name="name"></u-select>
</view>
<view class="s-station">
<view v-if="!stationValue" class="s-station">
<u-section :title="$t('homePage.price.eleType')" line-color="#009458" color="#2A2A2A" class="s-title" :right="false"
style="margin-bottom: 20rpx;"></u-section>
<view style="margin-top: 20rpx;">
@ -255,7 +269,7 @@
label-name="name" @confirm="confirmElectricity"></u-select>
</view>
<view class="s-station">
<view v-if="!stationValue" class="s-station">
<u-section :title="$t('homePage.price.volLevel')" line-color="#009458" color="#2A2A2A" class="s-title" :right="false"
style="margin-bottom: 20rpx;"></u-section>
<view style="margin-top: 20rpx;">
@ -267,7 +281,7 @@
@confirm="confirmVoltage" value-name="value" label-name="name"></u-select>
</view>
<view class="s-station">
<view v-if="!stationValue" class="s-station">
<u-section :title="$t('homePage.price.exeTime')" :default-value="defaultcTimeArr" line-color="#009458" color="#2A2A2A" class="s-title"
:right="false" style="margin-bottom: 20rpx;"></u-section>
<view style="margin-top: 20rpx;"><u-input v-model="filters.executionTime" type="select" border="border"
@ -288,10 +302,18 @@
</template>
<script>
import stationDropdow from '@/components/station-dropdow/index'
import Section from '@/components/section/index.vue'
import charts from "@/components/charts/index";
import Search from "@/components/Search/index";
export default {
components: {
stationDropdow,
Section,
charts,
Search
},
data() {
return {
background: {
@ -325,6 +347,12 @@ export default {
color: '#FF3333'
}
],
overseasColorList:[
{
name: this.language !== 'en_US'? '平时段':'Normal period',
color: '#048FFF'
}
],
popupShow: false,
filters: {
regionId: undefined,
@ -333,6 +361,7 @@ export default {
voltageLevel: undefined,
executionTime: undefined
},
currentStationName:'',
regionName: '上海',
electricityName: '两部制',
customerName: '大工业用户',
@ -353,7 +382,7 @@ export default {
second: false
},
sureButtonStyle: {
backgroundColor: '#009458',
backgroundColor: '#009458',
width: '280rpx',
height: '70rpx',
fontSize: '28rpx',
@ -386,23 +415,31 @@ export default {
useCustList: [],
useVolList: [],
middleIndexList: [],
dataList: []
customElecPriceData:[],
timeSlot:''
}
},
computed: {
language(){
return this.vuex_language
},
stationValue(){
return this.vuex_stationValue === 'Overseas Station' || this.vuex_stationValue === '海外站'? true:false
},
stationList () {
return this.vuex_provinceStation
},
stationShow (){
return this.vuex_StationShow
},
stationid (){
return this.vuex_currentStation.id
}
},
components: {
Section,
charts,
Search
},
onLoad() {
},
onLoad() {},
created() {
this.getRegionList()
if (!this.stationValue) {this.getRegionList()}
var currentDate = new Date();
// 获取年份和月份
var year = currentDate.getFullYear();
@ -414,8 +451,13 @@ export default {
this.filters.customerType = 2
this.filters.voltageLevel = 4
this.filters.executionTime = formattedDate
this.getData()
this.loading = true
if (this.stationValue) {
this.currentStationName = this.stationList[0].list[0].list[0].name
this.GetCustomElecPricePageData(this.stationList[0].list[0].list[0].id)
} else{
this.getData()
this.loading = true
}
},
methods: {
@ -431,10 +473,11 @@ export default {
this.filters.customerType = 2
this.filters.voltageLevel = 4
this.filters.executionTime = formattedDate
this.regionName = '上海'
this.electricityName = '两部制'
this.customerName = '大工业用户'
this.voltageLevelName = '10千伏'
this.currentStationName = ''
this.regionName = this.stationValue? '' : '上海'
this.electricityName = this.stationValue? '' : '两部制'
this.customerName = this.stationValue? '' : '大工业用户'
this.voltageLevelName = this.stationValue? '' : '10千伏'
this.useEleList = this.electricityList.filter(item => +item.type === +this.filters.customerType)
this.useVolList = this.voltageLevelList.filter(item => +item.type === +this.filters.customerType)
@ -518,7 +561,6 @@ export default {
}
},
confirmRegion(val) {
const regionIndex = this.regionList.findIndex((item) => {
@ -597,8 +639,13 @@ export default {
search() {
this.pageNum = 1;
this.dataList = [];
this.getData();
if (this.stationValue) {
this.GetCustomElecPricePageData(this.stationid)
} else{
this.getData()
}
this.popupShow = false;
this.currentStationName = this.$refs.dropdow.stationName;
},
findMiddleIndex(arr) {
let firstIndex = -1 // 第一个不为null的
@ -627,16 +674,151 @@ export default {
return result
},
// 查询自定义电价
async GetCustomElecPricePageData(id) {
this.levelsChart_loading = true
const params = {
stationId: id,
templateName: '',
isEnable:'',
validityStartTime:'',
validityEndTime:'',
elecType:1
}
try {
const { data } = await this.$u.api.proxyPrice.GetCustomElecPricePage(params)
// this.customElecPriceData = data
let nowdata = [
{
list:[],
name:data[0].type
}
];
for (let i = 0; i < 49; i++) {
nowdata[0].list.push(data[0].price)
}
this.initLevelsChartOverses(nowdata)
this.dataList = nowdata;
this.detailList = data;
this.customerName = this.language !== 'en_US'? '大工业用户':'Large industrial users',
this.voltageLevelName = this.language !== 'en_US'? '10kv': '10kv',
this.timeSlot = data[0].validityStartTime + ' —— ' + data[0].validityEndTime;
console.log(JSON.stringify(this.dataList),JSON.stringify(this.overseasColorList));
} finally {
this.loading = false
this.levelsChart_loading = false
}
},
async getLevelsChart(id) {
this.levelsChart_loading = true
try {
const res = await this.$u.api.proxyPrice.GetTouLineById(id)
this.initLevelsChart(res.data)
this.dataList = res.data ? res.data : []
this.dataList = res.data ? res.data : [],
console.log(this.dataList);
} finally {
this.levelsChart_loading = false
}
},
// 新增:初始化海外站电价图表
initLevelsChartOverses(data) {
const series = []
if (data.length > 0) {
data.map(item => {
const colorInfo = this.colorList.find(color => color.name === item.name)
const param = {
type: 'line',
itemStyle: {
normal: {
color: colorInfo ? colorInfo.color : undefined,
lineStyle: {
color: colorInfo ? colorInfo.color : undefined
},
areaStyle: {
type: 'default',
opacity: 0.2
}
}
},
name: item.name,
data: item.list,
symbol: 'circle',
'symbolSize': 0.001,
label: {
show: true,
}
}
series.push(param)
})
}
this.levelsChart_option = {
tooltip: {
trigger: 'axis',
confine: true,
textStyle: {
textShadowBlur: 10, // 重点
textShadowColor: 'transparent', // 重点
},
},
legend: {
},
grid: {
bottom: "15%",
top: "20%",
},
calculable: true,
xAxis: [{
type: 'category',
boundaryGap: false,
data: ['0', '0.5', '1', '1.5', '2', '2.5', '3', '3.5', '4', '4.5', '5', '5.5', '6',
'6.5', '7', '7.5', '8', '8.5', '9', '9.5', '10', '10.5', '11', '11.5', '12',
12.5, 13, 13.5, 14, 14.5, 15, 15.5, 16, 16.5, 17, 17.5, 18, 18.5, 19, 19.5, 20,
20.5, 21, 21.5, 22, 22.5, 23, 23.5, 24
],
splitLine: {
show: true,
lineStyle: {
color: '#F0F0F0',
}
},
axisLine: {
lineStyle: {
color: '#F0F0F0',
}
},
axisLabel: {
show: true,
color: '#A3A3A3'
},
axisTick: {
show: false
}
}],
yAxis: [{
type: 'value',
axisLine: {
show: false
},
axisLabel: {
show: true,
color: '#A3A3A3'
},
splitLine: {
show: true,
lineStyle: {
color: '#F0F0F0',
}
}
}],
series: series
}
},
initLevelsChart(data) {
const series = []
@ -1181,7 +1363,19 @@ export default {
.s-station {
margin-bottom: 60rpx;
padding: 0 20px 0 20px;
::v-deep .uicon-arrow-down-fill {
color: rgb(192, 196, 204) !important;
}
.home-navbar-warp{
padding:0 20rpx;
}
::v-deep .search {
width:100%;
}
::v-deep .uni-input-input{
text-align:left;
color: #303133;
}
.s-title {
font-size: 35rpx;
text-align: left;

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 197 KiB

101
static/html/demo.html Normal file
View File

@ -0,0 +1,101 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="PoweredByAidex"/>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<meta name="description" content="PoweredByAidex"/>
</head>
<body>
<svg width="128" height="128"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<style>path {fill-opacity:1; stroke:none;}</style>
<path d="M 42,0L 0,0L 0,128L 62,128L 62,126L 60.7072,125.2928L 58.146,123.854L 55.6451,122.3549L 53.2063,120.7937L 52,120L 50.6822,119.3178L 48.0777,117.9223L 45.5826,116.4174L 43.3111,114.6889L 41.3966,112.6034L 39.9425,110.0575L 38.9719,107.0281L 38.4156,103.5844L 38.148,99.852L 38.0423,95.9577L 38.0079,91.9921L 38,90L 35.5885,88.4115L 33.1929,86.8071L 32,86L 29.3498,84.6502L 26.7241,83.2759L 24.1496,81.8504L 21.6456,80.3544L 19.2063,78.7937L 18,78L 16.6822,77.3178L 14.0777,75.9223L 11.5826,74.4174L 9.3111,72.6889L 7.3966,70.6034L 5.9425,68.0575L 4.9719,65.0281L 4.4156,61.5844L 4.2818,59.7182L 4.0952,55.9048L 4.0607,53.9395L 4.0386,51.9623L 4.0124,47.9936L 4.0168,44.0132L 4.0578,40.0573L 4.1791,36.179L 4.3221,34.3221L 4.7484,30.7484L 5.1291,29.129L 6.0983,26.0983L 7.4879,23.4879L 8.3791,22.3791L 10.3181,20.3181L 12.5253,18.5253L 14.9196,16.9196L 17.4387,15.4387L 20.0358,14.0358L 22.6744,12.6744L 24,12L 26.4247,10.4247L 27.6601,9.6601L 30.165,8.165L 32.7351,6.7351L 35.3557,5.3557L 38.0055,4.0055L 40.6675,2.6675L 42,2Z" style="fill:rgb(254,254,254);"/>
<path d="M 58,62L 59.3709,62.6291L 62.0751,63.9249L 64.7042,65.2958L 66,66L 70,66L 70,62L 68,60L 65.6634,58.3366L 63.3818,56.6182L 61.182,54.818L 59.0518,52.9482L 58,52L 55.6723,50.3277L 53.488,48.512L 51.5906,46.4094L 50.1002,43.8998L 49.071,40.929L 48.4623,37.5377L 48.1554,33.8446L 48,30L 47.2582,26.7418L 46.5916,23.4084L 46,20L 44,20L 42,22L 41.9814,23.9814L 41.917,27.917L 41.7622,31.7622L 41.4385,35.4385L 40.8635,38.8635L 39.9723,41.9723L 38.7311,44.7311L 37.1392,47.1392L 35.2342,49.2342L 33.1055,51.1055L 32,52L 29.793,53.793L 27.5268,55.5268L 25.1866,57.1866L 24,58L 22,60L 20,62L 20,66L 26,66L 28.6926,64.6926L 31.4189,63.4189L 34.2096,62.2096L 37.0777,61.0777L 38.4931,60.5638L 41.2382,59.6271L 43.8451,58.9301L 46.3927,58.5947L 48.9354,58.717L 50.2132,59.0062L 52.7823,59.7624L 55.3802,60.8068Z" style="fill:rgb(254,254,254);"/>
<path d="M 85.2331,17.2701L 86.4837,16.5847L 87.7563,15.9652L 90.3475,14.8965L 93.0246,14.2314L 95.7591,14.0611L 98.5014,14.3992L 101.2011,15.1859L 103.8206,16.3207L 106.3454,17.6971L 108.792,19.2165L 110,20L 111.3178,20.6822L 113.9223,22.0777L 116.4174,23.5826L 118.6889,25.3111L 120.6034,27.3966L 121.3304,28.6696L 122.5428,31.4572L 123.3061,34.6936L 123.7166,38.2802L 123.8055,40.1826L 123.9106,44.0318L 123.8774,47.9088L 123.6792,51.6854L 123.2186,55.2195L 122.37,58.3701L 121.046,61.046L 120.151,62.151L 119.1695,63.1695L 118.1211,64.1211L 115.922,65.922L 113.5629,67.5629L 111.1037,69.1037L 108.5654,70.5654L 105.9647,71.9647L 103.3257,73.3257L 102,74L 99.3198,75.3198L 96.5065,76.5065L 93.5268,77.5268L 92,78L 92,80L 92.3524,81.6476L 92.6727,83.3272L 92.9526,85.0465L 93.4244,88.5695L 93.7174,92.2526L 93.7775,94.15L 93.8123,97.9511L 93.6565,101.699L 93.2447,105.2551L 92.4795,108.4814L 91.2758,111.2761L 89.6104,113.6105L 87.5449,115.5449L 85.2126,117.2126L 84,118L 81.5753,119.5753L 79.1045,121.1045L 76.5654,122.5654L 73.9647,123.9647L 71.3257,125.3257L 70,126L 70,128L 128,128L 128,0L 50,0L 50,2L 52,4L 54.6502,5.3498L 57.2759,6.7241L 59.8504,8.1496L 62.3544,9.6456L 64.7937,11.2063L 66,12L 67.3333,12.6667L 70,14L 71.3333,14.6667L 74,16L 75.3333,16.6667L 78,18L 84,18Z" style="fill:rgb(254,254,254);"/>
<path d="M 84,74L 84,76L 88,76L 88,74Z" style="fill:rgb(254,254,254);"/>
<path d="M 88,76L 88,78L 92,78L 92,76Z" style="fill:rgb(254,254,254);"/>
<path d="M 82,20L 80,18L 78,18L 75.3333,19.3333L 74,20L 74,22L 82,22Z" style="fill:rgb(212,228,213);"/>
<path d="M 84,72L 80,72L 80,74L 84,74Z" style="fill:rgb(212,228,213);"/>
<path d="M 70,18L 68,16L 66.7072,15.2928L 64.146,13.854L 61.6451,12.3549L 59.2063,10.7937L 58,10L 56.6667,9.3333L 54,8L 50.998,7.002L 48,6L 42,6L 39.5753,7.5753L 38.3399,8.3399L 35.835,9.835L 33.2649,11.2649L 30.6443,12.6443L 27.9945,13.9945L 25.3325,15.3325L 24,16L 22.7944,16.7944L 20.3566,18.3566L 17.8559,19.8559L 15.2937,21.2937L 14,22L 12,24L 10,26L 10,68L 12,70L 14,72L 16.6502,73.3498L 19.2759,74.7241L 21.8504,76.1496L 24.3544,77.6456L 26.7937,79.2063L 28,80L 29.3333,80.6667L 32,82L 36,82L 38,80L 38.7389,78.9578L 40.3681,77.0458L 42.366,75.5475L 43.5513,75.0035L 46.1174,73.9788L 48.998,72.998L 52,72L 52.5916,70.5916L 53.2207,69.2207L 54.5415,66.5832L 55.9374,64.1874L 57.3208,62.0292L 58,61L 58,60L 56.6667,59.3333L 54,58L 52.6667,57.3333L 50,56L 44,56L 42.608,56.608L 39.7965,57.7965L 36.9233,58.9233L 34.0999,59.953L 32.7929,60.281L 31.5625,60.2742L 30.5423,59.7222L 29.5169,58.149L 30.4488,56.2218L 32.5088,54.4707L 34.8159,52.8129L 36,52L 38,50L 40,48L 40.1183,44.1183L 40.3327,40.3327L 40.5256,38.5268L 40.7716,36.7769L 41.3801,33.4141L 41.8269,31.9259L 42.4253,30.6286L 43.2715,29.6633L 45.1308,28.6799L 46.7589,29.7437L 47.5856,32.5325L 47.8986,36.1197L 48,38L 48.7418,41.2582L 49.4084,44.5916L 50,48L 52,50L 54,52L 55.3333,52.6667L 58,54L 60,54L 60.0024,52.0028L 60.0175,48.0198L 60.0826,44.0909L 60.2949,40.3144L 60.5551,38.5801L 60.9297,36.9578L 61.9123,33.9411L 63.3325,31.3529L 64.2076,30.2225L 66.0465,28.0526L 67.0259,27.0296L 69.0026,25.0034L 71,23.0001L 72,22L 72,20Z" style="fill:rgb(254,220,188);"/>
<path d="M 64,78L 60,78L 60,80L 64,80Z" style="fill:rgb(94,170,125);"/>
<path d="M 64,68L 64,70L 72,70L 72,68Z" style="fill:rgb(94,170,125);"/>
<path d="M 70,58L 68,58L 68,62L 70,62Z" style="fill:rgb(94,170,125);"/>
<path d="M 42,86L 36,86L 36,90L 38,92L 40,92L 42,90Z" style="fill:rgb(227,236,224);"/>
<path d="M 68,76L 66,74L 60,74L 57.3198,75.3198L 54.5065,76.5065L 51.5268,77.5268L 50,78L 48.4115,80.4115L 46.8071,82.8071L 46,84L 46,86L 54,86L 56.0945,84.0945L 58.3099,82.3099L 60.7558,80.7558L 63.4888,79.4888L 66.4645,78.4645L 68,78Z" style="fill:rgb(33,149,100);"/>
<path d="M 80,64L 80,26L 76,26L 73.3333,27.3333L 72,28L 72,58L 73.6143,60.3857L 75.2088,62.7912L 76,64Z" style="fill:rgb(33,149,100);"/>
<path d="M 70,24L 71,25L 72,25L 74.998,24.499L 78,24L 78,22L 70,22Z" style="fill:rgb(148,187,146);"/>
<path d="M 42,72L 38,72L 38,80L 40,80L 42,78Z" style="fill:rgb(240,215,182);"/>
<path d="M 56,64L 52,64L 52,68L 56,68Z" style="fill:rgb(240,215,182);"/>
<path d="M 58,61L 57,61L 56,62L 56,66L 60,66L 60,62Z" style="fill:rgb(240,215,182);"/>
<path d="M 62,24L 60,24L 60,56L 62,56Z" style="fill:rgb(240,215,182);"/>
<path d="M 42,88L 40,90L 40,92L 52,92L 52,90L 50,88Z" style="fill:rgb(166,213,193);"/>
<path d="M 54,86L 50,86L 50,90L 54,90Z" style="fill:rgb(166,213,193);"/>
<path d="M 59.2582,87.2582L 61.8498,85.8498L 64.5916,84.5916L 66,84L 66,82L 64,80L 60,80L 57.3333,81.3333L 56,82L 54,84L 54,88L 58,88Z" style="fill:rgb(166,213,193);"/>
<path d="M 68,78L 64,78L 64,82L 68,82Z" style="fill:rgb(166,213,193);"/>
<path d="M 74.6667,78.6667L 76,78L 78.6667,76.6667L 80,76L 80,74L 70,74L 68,76L 68,80L 72,80Z" style="fill:rgb(166,213,193);"/>
<path d="M 84,24L 82,24L 82,66L 84,66Z" style="fill:rgb(166,213,193);"/>
<path d="M 86,24L 84,24L 84,72L 86,72Z" style="fill:rgb(106,189,160);"/>
<path d="M 94,114L 94,80L 92,78L 90.6667,77.3333L 88,76L 86.6667,75.3333L 84,74L 80,74L 77.3333,75.3333L 76,76L 73.3333,77.3333L 72,78L 69.3333,79.3333L 68,80L 65.5753,81.5753L 63.1045,83.1045L 60.5654,84.5654L 57.9647,85.9647L 55.3257,87.3257L 54,88L 51.636,89.3995L 49.2489,90.5836L 48.0432,90.9921L 45.5777,91.6132L 42.8616,91.8992L 39.7026,91.9863L 38,92L 38,114L 40,116L 42.6502,117.3498L 45.2759,118.7241L 47.8504,120.1496L 50.3544,121.6456L 52.7937,123.2063L 54,124L 55.3333,124.6667L 58,126L 59.3333,126.6667L 62,128L 70,128L 72.6667,126.6667L 74,126L 76.6667,124.6667L 78,124L 80.6667,122.6667L 82,122L 83.2056,121.2056L 85.6434,119.6434L 88.1441,118.1441L 90.7063,116.7063L 92,116Z" style="fill:rgb(6,150,109);"/>
<path d="M 85.8729,57.8729L 85.6659,61.6659L 85.2814,65.2814L 84.7048,68.7048L 84,72L 84,74L 85.3333,74.6667L 88,76L 89.3333,76.6667L 92,78L 100,78L 102.4247,76.4247L 104.8955,74.8955L 107.4346,73.4346L 110.0353,72.0353L 112.6743,70.6743L 114,70L 115.2056,69.2056L 117.6434,67.6434L 120.1441,66.1441L 122.7063,64.7063L 124,64L 124,26L 122,24L 119.3498,22.6502L 116.7241,21.2759L 114.1496,19.8504L 111.6456,18.3544L 109.2063,16.7937L 108,16L 106.6667,15.3333L 104,14L 102.6667,13.3333L 100,12L 98.6667,11.3333L 96,10L 94,10L 91.3333,11.3333L 90,12L 87.3333,13.3333L 86,14L 83.6143,15.6143L 81.2088,17.2088L 80,18L 80,20L 80.8396,21.2073L 82.4279,23.6946L 83.7665,26.3869L 84.7608,29.3767L 85.4016,32.6928L 85.7538,36.2964L 85.9157,40.1046L 85.9759,44.0286L 85.9899,48.0011L 85.9756,51.9773L 85.9171,55.9173Z" style="fill:rgb(6,150,109);"/>
<path d="M 62,84L 58,84L 58,86L 62,86Z" style="fill:rgb(132,196,168);"/>
<path d="M 42,30L 40,30L 40,36L 42,36Z" style="fill:rgb(255,232,210);"/>
<path d="M 42,4L 42,6L 46,6L 46,4Z" style="fill:rgb(255,232,210);"/>
<path d="M 50,38L 48,38L 48,44L 50,44Z" style="fill:rgb(255,232,210);"/>
<path d="M 48,92L 42,92L 42,94L 48,94Z" style="fill:rgb(94,180,147);"/>
<path d="M 82,26L 80,26L 80,68L 82,68Z" style="fill:rgb(94,180,147);"/>
<path d="M 40.6667,84.6667L 42,82L 42,78L 40,78L 38,80L 38,86L 40,86Z" style="fill:rgb(174,195,156);"/>
<path d="M 50,76L 42,76L 42,82L 44,82L 45.1868,81.5847L 47.5787,80.7752L 50,80Z" style="fill:rgb(174,195,156);"/>
<path d="M 56,74L 54.6667,73.3333L 52,72L 48,72L 48,76L 50,78L 54,78L 56,76Z" style="fill:rgb(174,195,156);"/>
<path d="M 62,72L 62,71L 61,70L 52,70L 52,74L 54,74L 55.3333,74L 58,74L 60,74Z" style="fill:rgb(174,195,156);"/>
<path d="M 64,68L 56,68L 56,70L 58.501,70.499L 61,71L 62,71L 64,70Z" style="fill:rgb(174,195,156);"/>
<path d="M 64,66L 60,66L 60,68L 64,68Z" style="fill:rgb(174,195,156);"/>
<path d="M 66,30L 64,30L 64,60L 66,60Z" style="fill:rgb(174,195,156);"/>
<path d="M 72,25L 71,24L 68,24L 66,26L 66,30L 68,30L 70,30L 72,30Z" style="fill:rgb(174,195,156);"/>
<path d="M 42,2L 38,2L 35.3333,3.3333L 34,4L 31.3333,5.3333L 30,6L 27.3333,7.3333L 26,8L 23.5753,9.5753L 21.1045,11.1045L 18.5654,12.5654L 15.9647,13.9647L 13.3257,15.3257L 12,16L 9.6143,17.6143L 7.2088,19.2088L 6,20L 4,22L 4,24L 14,24L 16.6667,22.6667L 18,22L 20.6667,20.6667L 22,20L 24.4247,18.4247L 25.6601,17.6601L 28.165,16.165L 30.7351,14.7351L 33.3557,13.3557L 36.0055,12.0055L 38.6675,10.6675L 40,10L 42,8Z" style="fill:rgb(254,244,234);"/>
<path d="M 32,80L 29.5885,78.4115L 27.1929,76.8071L 26,76L 24.6667,75.3333L 22,74L 20.6667,73.3333L 18,72L 16.6667,71.3333L 14,70L 12.3857,69.6143L 9.1769,68.8231L 6,68L 4,68L 4,72L 6,74L 8.6502,75.3498L 11.2759,76.7241L 13.8504,78.1496L 16.3544,79.6456L 18.7937,81.2063L 20,82L 21.3333,82.6667L 24,84L 25.3333,84.6667L 28,86L 32,86Z" style="fill:rgb(254,244,234);"/>
<path d="M 50,0L 42,0L 42,2L 50,2Z" style="fill:rgb(254,244,234);"/>
<path d="M 74,18L 74,14L 72.7072,13.2928L 70.146,11.854L 67.6451,10.3549L 65.2063,8.7937L 64,8L 62.6667,7.3333L 60,6L 58.6667,5.3333L 56,4L 54.6667,3.3333L 52,2L 48,2L 48,4L 49.3333,6.6667L 50,8L 51.2928,8.7072L 53.854,10.146L 56.3549,11.6451L 58.7937,13.2063L 60,14L 61.3333,14.6667L 64,16L 65.3333,16.6667L 68,18Z" style="fill:rgb(254,244,234);"/>
<path d="M 74,72L 74,74L 80,74L 82.6667,72.6667L 84,72L 84,66L 82,66L 79.6143,67.6143L 77.2088,69.2088L 76,70Z" style="fill:rgb(190,220,203);"/>
<path d="M 84,24L 84,22L 78,22L 78,24L 80,26L 82,26Z" style="fill:rgb(190,220,203);"/>
<path d="M 38,84L 34,84L 34,90L 36,90L 36.6667,88.6667L 38,86Z" style="fill:rgb(242,239,228);"/>
<path d="M 64,62L 60,62L 60,64L 64,64Z" style="fill:rgb(242,239,228);"/>
<path d="M 76.6667,20.6667L 78,20L 78,16L 74,16L 71.3333,17.3333L 70,18L 70,20L 72,22L 74,22Z" style="fill:rgb(242,239,228);"/>
<path d="M 42,82L 40,82L 40,86L 42,86Z" style="fill:rgb(114,176,133);"/>
<path d="M 48,80L 48,79L 46,78L 44,78L 44,82L 46,82Z" style="fill:rgb(114,176,133);"/>
<path d="M 58,73L 56,72L 54,72L 54,74L 58,74Z" style="fill:rgb(114,176,133);"/>
<path d="M 69,32L 69,30L 66,30L 66,60L 68,60L 68.0007,58.0013L 68.0044,54.0088L 68.0192,50.0384L 68.0636,46.1271L 68.1671,42.3341L 68.3593,38.7186L 68.6476,35.2952Z" style="fill:rgb(114,176,133);"/>
<path d="M 70,28L 68,28L 68,30L 69,32L 70,32Z" style="fill:rgb(114,176,133);"/>
<path d="M 70,64L 67.002,65.002L 64,66L 64,68L 65.3198,68.5767L 67.8263,69.8336L 70.0333,71.3234L 72,73L 74,73L 76,72L 78.6667,70.6667L 80,70L 80,64Z" style="fill:rgb(114,176,133);"/>
<path d="M 72,24L 72,28L 76,28L 78.6667,26.6667L 80,26L 80,24Z" style="fill:rgb(114,176,133);"/>
<path d="M 38,80L 36,80L 36,84L 38,84Z" style="fill:rgb(208,206,169);"/>
<path d="M 47,76L 47,74L 42,74L 42,76Z" style="fill:rgb(208,206,169);"/>
<path d="M 48,72L 46,72L 46,74L 47,76L 48,76Z" style="fill:rgb(208,206,169);"/>
<path d="M 52,68L 52,70L 56,70L 56,68Z" style="fill:rgb(208,206,169);"/>
<path d="M 56,66L 56,68L 60,68L 60,66Z" style="fill:rgb(208,206,169);"/>
<path d="M 66,64L 60,64L 60,66L 66,66Z" style="fill:rgb(208,206,169);"/>
<path d="M 64,30L 62,30L 62,58L 64,58Z" style="fill:rgb(208,206,169);"/>
<path d="M 66,26L 64,26L 64,30L 66,30Z" style="fill:rgb(208,206,169);"/>
<path d="M 47.5885,85.5885L 49.1929,83.1929L 50,82L 50,80L 46,80L 44,82L 44,88L 46,88Z" style="fill:rgb(49,155,107);"/>
<path d="M 54,76L 54,78L 58,78L 60,76L 60,74L 56,74Z" style="fill:rgb(49,155,107);"/>
<path d="M 70,72L 60,72L 60,74L 63.002,74.998L 66,76L 70,76Z" style="fill:rgb(49,155,107);"/>
<path d="M 72,30L 70,30L 70,58L 72,58Z" style="fill:rgb(49,155,107);"/>
<path d="M 74,58L 72,58L 72,62L 76,62L 76,60Z" style="fill:rgb(49,155,107);"/>
<path d="M 44,82L 42,82L 42,88L 44,88Z" style="fill:rgb(73,163,117);"/>
<path d="M 50,86L 46,86L 46,88L 50,88Z" style="fill:rgb(73,163,117);"/>
<path d="M 60,80L 56,80L 56,82L 60,82Z" style="fill:rgb(73,163,117);"/>
<path d="M 74,73L 72.6667,71L 72,70L 62,70L 62,72L 63.6143,72.3857L 66.8231,73.1769L 70,74L 74,74Z" style="fill:rgb(73,163,117);"/>
<path d="M 70,32L 68,32L 68,58L 70,58Z" style="fill:rgb(73,163,117);"/>
<path d="M 74.998,61.002L 72.998,59.002L 72,58L 70,58L 70,64L 76,64L 76,62Z" style="fill:rgb(73,163,117);"/>
<path d="M 10,26L 8,26L 8,68L 10,68Z" style="fill:rgb(254,223,194);"/>
<path d="M 46,18L 42,18L 42,22L 44,22L 46,20Z" style="fill:rgb(254,223,194);"/>
<path d="M 12,24L 4,24L 4,68L 6,70L 12,70L 12,68L 11.2952,66.7048L 10.0138,63.9862L 9.5332,62.4668L 8.757,59.243L 8.3136,55.6867L 8.108,51.8952L 8.0391,47.9815L 8.0532,44.0413L 8.1664,40.1647L 8.4614,36.4612L 9.0527,33.0527L 10.0138,30.0138L 11.2952,27.2952L 12,26Z" style="fill:rgb(254,240,227);"/>
<path d="M 36,82L 32,82L 32,88L 34,88L 34.6667,86.6667L 36,84Z" style="fill:rgb(254,240,227);"/>
<path d="M 42,36L 40,36L 40,44L 42,44Z" style="fill:rgb(254,240,227);"/>
<path d="M 50,4L 48,2L 42,2L 42,4L 44.4115,5.5885L 46.8071,7.1929L 48,8L 50,8Z" style="fill:rgb(254,240,227);"/>
<path d="M 48,22L 46,22L 46,30L 48,30Z" style="fill:rgb(254,240,227);"/>
<path d="M 50,44L 48,44L 48,48L 50,48Z" style="fill:rgb(254,240,227);"/>
</svg>
</body>
</html>

14
static/scss/init.scss Normal file
View File

@ -0,0 +1,14 @@
.p_container {
width: 100%;
height: 100%;
}
.p_content {
margin: 0 16rpx;
}
.p_box {
background-color: #fff;
padding: 24rpx 16rpx;
}
.marginT20 {
margin-top: 20rpx;
}

67
static/sss.svg Normal file
View File

@ -0,0 +1,67 @@
<svg id="拓扑" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="718" height="516" viewBox="0 0 718 516">
<defs>
<style>
.cls-1 {
fill: #fff;
}
.cls-2 {
font-size: 28px;
fill: #333;
font-family: SourceHanSansCN;
}
.cls-3 {
fill: #999;
}
.cls-3, .cls-4 {
fill-rule: evenodd;
}
.cls-4 {
fill: #019a7c;
}
</style>
</defs>
<rect id="Background" class="cls-1" width="718" height="516" rx="10" ry="10"/>
<text id="计量电表功率_kW0:00" data-name="计量电表功率kW0:00" class="cls-2" x="178" y="194.999">运行</text>
<text id="计量电表功率_kW0:00-2" data-name="计量电表功率kW0:00" class="cls-2" x="529" y="343.999">1.08 kVar</text>
<text id="计量电表功率_kW0:00-3" data-name="计量电表功率kW0:00" class="cls-2" x="178" y="247">发电</text>
<text id="计量电表功率_kW0:00-4" data-name="计量电表功率kW0:00" class="cls-2" x="529" y="396">1.08 A</text>
<text id="计量电表功率_kW0:00-5" data-name="计量电表功率kW0:00" class="cls-2" x="529" y="447.999">1.08 kW</text>
<g>
<g id="计量电表功率_kW0:00-6" data-name="计量电表功率kW0:00">
<path id="Vector" class="cls-3" d="M154,2073.39a2.037,2.037,0,0,1-2.1-2.07,2.069,2.069,0,0,1,2.1-2.13,2.092,2.092,0,0,1,2.128,2.13A2.06,2.06,0,0,1,154,2073.39Zm0,13.72a2.1,2.1,0,1,1,2.128-2.1A2.085,2.085,0,0,1,154,2087.11Z" transform="translate(-1 -1888)"/>
<path id="Vector-2" data-name="Vector" class="cls-3" d="M122.472,2088.04l-1.876-.98a21.769,21.769,0,0,0,2.772-6.84l1.848,0.62A28.246,28.246,0,0,1,122.472,2088.04Zm8.316-1.4h6.244c1.484,0,1.708-.42,1.876-3.28a5.814,5.814,0,0,0,1.876.78c-0.28,3.5-.924,4.37-3.612,4.37h-6.5c-3.22,0-4.088-.59-4.088-2.83v-5.46h2.044v5.44C128.632,2086.47,128.968,2086.64,130.788,2086.64Zm14.672-17.2H135.24a14.659,14.659,0,0,0,10.5,7.96,8.5,8.5,0,0,0-1.4,1.93,16.225,16.225,0,0,1-11.256-9.89c-1.372,4.4-4.34,8.07-11.564,10a7.894,7.894,0,0,0-1.148-1.74c6.468-1.62,9.212-4.64,10.528-8.26H120.652v-1.96H131.46a30.406,30.406,0,0,0,.616-4H134.2c-0.14,1.37-.336,2.72-0.588,4H145.46v1.96Zm-14.98,10.11,1.624-.95a36.937,36.937,0,0,1,4.508,4.7l-1.68,1.12A31.749,31.749,0,0,0,130.48,2079.55Zm9.464,0.84,1.848-.59a32.425,32.425,0,0,1,3.444,7.37l-1.988.7A31.765,31.765,0,0,0,139.944,2080.39Zm-10.248-4.87,1.736-1.09a23.313,23.313,0,0,1,4.62,3.36l-1.876,1.2A21.278,21.278,0,0,0,129.7,2075.52Z" transform="translate(-1 -1888)"/>
<path id="Vector-3" data-name="Vector" class="cls-3" d="M117.544,2073.84h-7.7c1.344,6.1,3.948,11.14,8.288,13.52a8.142,8.142,0,0,0-1.512,1.74c-3.752-2.32-6.216-6.5-7.756-11.76a19.864,19.864,0,0,1-7,11.76,10.208,10.208,0,0,0-1.68-1.32,19.53,19.53,0,0,0,7.14-13.94h-6.356v-2.04h6.5c0.028-.59.028-1.15,0.028-1.71v-6.47h2.044v6.47c0,0.56,0,1.12-.028,1.71h8.036v2.04Zm-19.572,2.46v-12.76h2.044v25.56H97.972v-10.28c-1.652,1.6-3.36,3.2-4.788,4.48l-1.176-1.76C93.492,2080.34,95.816,2078.35,97.972,2076.3Zm-0.28-4.03-1.708,1.12a31.152,31.152,0,0,0-3.528-5.18l1.624-1.01A31.569,31.569,0,0,1,97.692,2072.27Zm18.984-2.94-1.652,1.04a35.738,35.738,0,0,0-3.332-4.96l1.568-.89A31.353,31.353,0,0,1,116.676,2069.33Z" transform="translate(-1 -1888)"/>
<path id="Vector-4" data-name="Vector" class="cls-3" d="M75.18,2065.27H88.9v1.96H75.18v-1.96Zm-4.676-1.71,2.016,0.79a33.911,33.911,0,0,1-7.252,7,11.687,11.687,0,0,0-1.288-1.65A25.822,25.822,0,0,0,70.5,2063.56Zm1.12,5.97,1.96,0.73a37.737,37.737,0,0,1-3.052,4.2v14.78h-2.1v-12.46a37.48,37.48,0,0,1-3.192,2.91,12.607,12.607,0,0,0-1.512-1.71A30.384,30.384,0,0,0,71.624,2069.53Zm17.948,3.39v1.98H85.428v11.54c0,1.29-.336,1.85-1.288,2.18a21.039,21.039,0,0,1-5.124.28,7.683,7.683,0,0,0-.756-1.9c1.96,0.06,3.836.06,4.368,0.03s0.672-.14.672-0.62V2074.9H73.976v-1.98h15.6Z" transform="translate(-1 -1888)"/>
<path id="Vector-5" data-name="Vector" class="cls-3" d="M45.668,2065.33h14v1.96h-14v-1.96Zm-0.112,18.25v-0.08a0.133,0.133,0,0,0-.028.08,21.119,21.119,0,0,0-.728-2.07,3.193,3.193,0,0,0,1.512-1.59,37.1,37.1,0,0,0,3.192-6.28H43.82v-1.96H61.628v1.96h-9.66a45.048,45.048,0,0,1-4.116,7.48l9.184-.7c-0.9-1.6-1.9-3.28-2.828-4.7l1.708-.79c1.736,2.72,3.976,6.33,5.04,8.43l-1.82.98c-0.28-.62-0.672-1.34-1.12-2.13C47.6,2083.14,46.4,2083.25,45.556,2083.58Zm-2.212-14.92-1.428,1.48c-1.092-.98-3.3-2.57-4.928-3.75l1.372-1.29C39.956,2066.17,42.224,2067.71,43.344,2068.66Zm-1.232,4.65V2084c0.616,0.28,1.232.87,2.324,1.52,1.876,1.17,4.228,1.37,7.308,1.37a101.864,101.864,0,0,0,10.248-.56,8.54,8.54,0,0,0-.672,2.29c-1.876.12-6.608,0.28-9.632,0.28-3.416,0-5.74-.33-7.7-1.54-1.12-.7-2.072-1.59-2.716-1.59-0.924,0-2.324,1.65-3.7,3.5l-1.428-1.93a14.218,14.218,0,0,1,3.948-3.25v-8.85H36.26v-1.93h5.852Z" transform="translate(-1 -1888)"/>
</g>
<g id="计量电表功率_kW0:00-7" data-name="计量电表功率kW0:00">
<path id="Vector-6" data-name="Vector" class="cls-3" d="M504,2222.39a2.037,2.037,0,0,1-2.1-2.07,2.069,2.069,0,0,1,2.1-2.13,2.092,2.092,0,0,1,2.128,2.13A2.06,2.06,0,0,1,504,2222.39Zm0,13.72a2.1,2.1,0,1,1,2.128-2.1A2.085,2.085,0,0,1,504,2236.11Z" transform="translate(-1 -1888)"/>
<path id="Vector-7" data-name="Vector" class="cls-3" d="M495.656,2213.91v2.01H474.32v6.95c0,4.51-.336,10.95-2.632,15.31a7.2,7.2,0,0,0-1.68-1.17c2.128-4.09,2.3-9.89,2.3-14.11v-8.99h23.352Zm-9.688,11.48v9.6h9.6v1.99H474.488v-1.99H483.9v-9.6h-7.588v-1.99H483.9v-5.96h2.072v5.96h8.26v1.99h-8.26Zm2.156,3.02,1.484-1.01a24.108,24.108,0,0,1,4,4.2l-1.568,1.21A23.9,23.9,0,0,0,488.124,2228.41Z" transform="translate(-1 -1888)"/>
<path id="Vector-8" data-name="Vector" class="cls-3" d="M457.828,2235.58h5.88c1.568,0,1.848-.9,2.072-4.54a6.337,6.337,0,0,0,2.044.93c-0.364,4.2-1.036,5.68-3.976,5.68h-6.16c-3.108,0-4.032-.81-4.032-4.09v-2.94h-6.888v1.71H444.64v-15.71h9.016v-4h2.184v4h9.268v14H455.84v3C455.84,2235.24,456.148,2235.58,457.828,2235.58Zm-11.06-16.94h6.888v4h-6.888v-4Zm9.072,0h7.2v4h-7.2v-4Zm0,5.94h7.2v4h-7.2v-4Zm-9.072,0h6.888v4h-6.888v-4Z" transform="translate(-1 -1888)"/>
</g>
<g id="计量电表功率_kW0:00-8" data-name="计量电表功率kW0:00">
<path id="Vector-9" data-name="Vector" class="cls-3" d="M154,2125.39a2.037,2.037,0,0,1-2.1-2.07,2.069,2.069,0,0,1,2.1-2.13,2.092,2.092,0,0,1,2.128,2.13A2.06,2.06,0,0,1,154,2125.39Zm0,13.72a2.1,2.1,0,1,1,2.128-2.1A2.085,2.085,0,0,1,154,2139.11Z" transform="translate(-1 -1888)"/>
<path id="Vector-10" data-name="Vector" class="cls-3" d="M122.472,2140.04l-1.876-.98a21.769,21.769,0,0,0,2.772-6.84l1.848,0.62A28.246,28.246,0,0,1,122.472,2140.04Zm8.316-1.4h6.244c1.484,0,1.708-.42,1.876-3.28a5.814,5.814,0,0,0,1.876.78c-0.28,3.5-.924,4.37-3.612,4.37h-6.5c-3.22,0-4.088-.59-4.088-2.83v-5.46h2.044v5.44C128.632,2138.47,128.968,2138.64,130.788,2138.64Zm14.672-17.2H135.24a14.659,14.659,0,0,0,10.5,7.96,8.5,8.5,0,0,0-1.4,1.93,16.225,16.225,0,0,1-11.256-9.89c-1.372,4.4-4.34,8.07-11.564,10a7.894,7.894,0,0,0-1.148-1.74c6.468-1.62,9.212-4.64,10.528-8.26H120.652v-1.96H131.46a30.406,30.406,0,0,0,.616-4H134.2c-0.14,1.37-.336,2.72-0.588,4H145.46v1.96Zm-14.98,10.11,1.624-.95a36.937,36.937,0,0,1,4.508,4.7l-1.68,1.12A31.749,31.749,0,0,0,130.48,2131.55Zm9.464,0.84,1.848-.59a32.425,32.425,0,0,1,3.444,7.37l-1.988.7A31.765,31.765,0,0,0,139.944,2132.39Zm-10.248-4.87,1.736-1.09a23.313,23.313,0,0,1,4.62,3.36l-1.876,1.2A21.278,21.278,0,0,0,129.7,2127.52Z" transform="translate(-1 -1888)"/>
<path id="Vector-11" data-name="Vector" class="cls-3" d="M117.544,2125.84h-7.7c1.344,6.1,3.948,11.14,8.288,13.52a8.142,8.142,0,0,0-1.512,1.74c-3.752-2.32-6.216-6.5-7.756-11.76a19.864,19.864,0,0,1-7,11.76,10.208,10.208,0,0,0-1.68-1.32,19.53,19.53,0,0,0,7.14-13.94h-6.356v-2.04h6.5c0.028-.59.028-1.15,0.028-1.71v-6.47h2.044v6.47c0,0.56,0,1.12-.028,1.71h8.036v2.04Zm-19.572,2.46v-12.76h2.044v25.56H97.972v-10.28c-1.652,1.6-3.36,3.2-4.788,4.48l-1.176-1.76C93.492,2132.34,95.816,2130.35,97.972,2128.3Zm-0.28-4.03-1.708,1.12a31.152,31.152,0,0,0-3.528-5.18l1.624-1.01A31.569,31.569,0,0,1,97.692,2124.27Zm18.984-2.94-1.652,1.04a35.738,35.738,0,0,0-3.332-4.96l1.568-.89A31.353,31.353,0,0,1,116.676,2121.33Z" transform="translate(-1 -1888)"/>
<path id="Vector-12" data-name="Vector" class="cls-3" d="M67.872,2141.13v-12.15H86.044v12.09H83.86v-0.84H69.972v0.9h-2.1Zm10.136-10.31H83.86v2.8H78.008v-2.8Zm0,4.51H83.86v3.08H78.008v-3.08Zm-8.036,0h5.936v3.08H69.972v-3.08Zm0-4.51h5.936v2.8H69.972v-2.8ZM84.2,2117.86l1.344,0.87a18.469,18.469,0,0,1-6.384,5.74,41.742,41.742,0,0,0,10.948,2.57,8.92,8.92,0,0,0-1.26,1.94,41.7,41.7,0,0,1-11.872-3.31,45.481,45.481,0,0,1-12.068,3.7,9.29,9.29,0,0,0-.924-1.99,44.212,44.212,0,0,0,10.836-2.88,19.147,19.147,0,0,1-4.032-3.11,25.558,25.558,0,0,1-4.116,2.71,6.136,6.136,0,0,0-1.4-1.51,18.371,18.371,0,0,0,8.092-7.08l2.212,0.42a13.372,13.372,0,0,1-1.428,2.04h9.688Zm-11.676,1.96-0.28.28a16.043,16.043,0,0,0,4.732,3.39,19.787,19.787,0,0,0,5.18-3.67H72.52Z" transform="translate(-1 -1888)"/>
<path id="Vector-13" data-name="Vector" class="cls-3" d="M50.708,2118.53v1.18a7.854,7.854,0,0,1-4.9,7.56,7.866,7.866,0,0,0-1.344-1.54c3.668-1.68,4.284-4.01,4.284-6.08v-3.08H57.6v6.5c0,0.78.084,1.03,0.5,1.03h1.932a6.132,6.132,0,0,0,1.316-.14,17.582,17.582,0,0,0,.2,1.8,5.764,5.764,0,0,1-1.484.14h-2.1c-1.9,0-2.324-.82-2.324-2.89v-4.48H50.708Zm-6.58,1.71-1.4,1.48a35.987,35.987,0,0,0-4.256-4.36l1.344-1.26A34.218,34.218,0,0,1,44.128,2120.24Zm-1.876,16.07,3.08-2.21a8.745,8.745,0,0,0,.756,1.71c-4.928,3.64-5.684,4.25-6.132,4.76a6.724,6.724,0,0,0-1.12-1.74,3.138,3.138,0,0,0,1.4-2.52v-9.99h-3.92v-1.99h5.936v11.98Zm16.6-8.54,1.288,0.59a17.381,17.381,0,0,1-5.376,8.18,21.455,21.455,0,0,0,7.112,2.85,7.078,7.078,0,0,0-1.288,1.85,20.7,20.7,0,0,1-7.5-3.42,25.25,25.25,0,0,1-7.476,3.36,6.254,6.254,0,0,0-1.036-1.84,22.188,22.188,0,0,0,6.916-2.8,20.331,20.331,0,0,1-4.676-6.58l0.392-.14H45.78v-1.96H58.492Zm-1.344,2.05H48.776a16.475,16.475,0,0,0,4.368,5.54A15.133,15.133,0,0,0,57.512,2129.82Z" transform="translate(-1 -1888)"/>
</g>
<g id="计量电表功率_kW0:00-9" data-name="计量电表功率kW0:00">
<path id="Vector-14" data-name="Vector" class="cls-3" d="M504,2274.39a2.037,2.037,0,0,1-2.1-2.07,2.069,2.069,0,0,1,2.1-2.13,2.092,2.092,0,0,1,2.128,2.13A2.06,2.06,0,0,1,504,2274.39Zm0,13.72a2.1,2.1,0,1,1,2.128-2.1A2.085,2.085,0,0,1,504,2288.11Z" transform="translate(-1 -1888)"/>
<path id="Vector-15" data-name="Vector" class="cls-3" d="M495.4,2276.55l-1.652,1.12a22.821,22.821,0,0,0-1.344-2.02c-11.48.76-12.768,0.84-13.58,1.18a13.142,13.142,0,0,0-.56-1.96,4.4,4.4,0,0,0,1.876-.81c0.532-.51,2.128-2.47,3.276-3.98h-5.488v-1.88h7.952c-0.336-.98-0.812-2.18-1.26-3.16l1.876-.45a19.406,19.406,0,0,1,1.484,3.61h7.392v1.88h-9.6c-1.064,1.4-2.38,3.14-3.444,4.4l8.764-.54c-0.7-.86-1.484-1.73-2.156-2.49l1.568-.92A42.993,42.993,0,0,1,495.4,2276.55Zm-17.976-8.21L476.2,2270a25,25,0,0,0-4.732-3.62l1.2-1.45A25.025,25.025,0,0,1,477.428,2268.34Zm-0.98,7.06-1.148,1.74a23.832,23.832,0,0,0-5.068-3.08l1.092-1.54A24.83,24.83,0,0,1,476.448,2275.4Zm-0.224,4,1.512,1.38c-1.484,2.94-3.444,6.41-5.068,8.98l-1.736-1.4A86.954,86.954,0,0,0,476.224,2279.4Zm3.976,1.32v-2.86h1.9v2.89c0,3.08-.448,6.63-4.2,9.32a7.6,7.6,0,0,0-1.456-1.37C479.836,2286.35,480.2,2283.27,480.2,2280.72Zm4.928-2.83H487v11.03h-1.876v-11.03Zm7.5,10.11h0.812a0.932,0.932,0,0,0,.588-0.14,1.176,1.176,0,0,0,.308-0.73c0.028-.47.056-1.48,0.084-2.83a4.851,4.851,0,0,0,1.456.79,19.64,19.64,0,0,1-.252,3.19,1.686,1.686,0,0,1-.756,1.09,2.72,2.72,0,0,1-1.316.28h-1.372a2.49,2.49,0,0,1-1.54-.47c-0.392-.34-0.532-0.79-0.532-2.5v-8.82h1.932v9.05a1.437,1.437,0,0,0,.14.95A0.883,0.883,0,0,0,492.632,2288Z" transform="translate(-1 -1888)"/>
<path id="Vector-16" data-name="Vector" class="cls-3" d="M457.828,2287.58h5.88c1.568,0,1.848-.9,2.072-4.54a6.337,6.337,0,0,0,2.044.93c-0.364,4.2-1.036,5.68-3.976,5.68h-6.16c-3.108,0-4.032-.81-4.032-4.09v-2.94h-6.888v1.71H444.64v-15.71h9.016v-4h2.184v4h9.268v14H455.84v3C455.84,2287.24,456.148,2287.58,457.828,2287.58Zm-11.06-16.94h6.888v4h-6.888v-4Zm9.072,0h7.2v4h-7.2v-4Zm0,5.94h7.2v4h-7.2v-4Zm-9.072,0h6.888v4h-6.888v-4Z" transform="translate(-1 -1888)"/>
</g>
<g id="计量电表功率_kW0:00-10" data-name="计量电表功率kW0:00">
<path id="Vector-17" data-name="Vector" class="cls-3" d="M504,2326.39a2.037,2.037,0,0,1-2.1-2.07,2.069,2.069,0,0,1,2.1-2.13,2.092,2.092,0,0,1,2.128,2.13A2.06,2.06,0,0,1,504,2326.39Zm0,13.72a2.1,2.1,0,1,1,2.128-2.1A2.085,2.085,0,0,1,504,2340.11Z" transform="translate(-1 -1888)"/>
<path id="Vector-18" data-name="Vector" class="cls-3" d="M489.188,2331.68l-1.652.73a6.655,6.655,0,0,0-.756-1.48c-7.28.7-8.26,0.84-8.82,1.12a17.337,17.337,0,0,0-.616-1.82,5.992,5.992,0,0,0,2.324-1.37c0.532-.45,1.736-1.54,3.08-2.92-3.22.26-3.836,0.4-4.256,0.56a10.093,10.093,0,0,0-.588-1.76,2.169,2.169,0,0,0,1.232-.9,19.147,19.147,0,0,0,2.156-2.85H471.1v-1.91h11.4c-0.364-.7-0.868-1.54-1.288-2.18l2.016-.53a16.84,16.84,0,0,1,1.652,2.71h10.388v1.91H483.476a31.513,31.513,0,0,1-2.66,3.41l3.556-.22a25.686,25.686,0,0,0,1.876-2.32l1.708,0.98a55.37,55.37,0,0,1-7.056,6.97l4.9-.39c-0.448-.62-0.924-1.26-1.372-1.8l1.54-.64A21.236,21.236,0,0,1,489.188,2331.68Zm5.74-.39-1.54,1.23a35.7,35.7,0,0,0-5.488-3.92l1.484-1.12A35,35,0,0,1,494.928,2331.29Zm-2.8-9.24,1.736,1.07a29.8,29.8,0,0,1-4.172,3.5l-1.512-.98A24.274,24.274,0,0,0,492.128,2322.05Zm-20.636,1.23,1.4-1.14a24.507,24.507,0,0,1,4.256,3.16l-1.456,1.26A22.934,22.934,0,0,0,471.492,2323.28Zm6.048,4.15,0.42,1.54c-2.128,1.15-4.4,2.35-6.244,3.27l-1.036-1.68C472.416,2329.86,475.02,2328.63,477.54,2327.43Zm17.948,6.89v1.93h-11.4v5.91h-2.184v-5.91H470.54v-1.93h11.368v-2.3h2.184v2.3h11.4Z" transform="translate(-1 -1888)"/>
<path id="Vector-19" data-name="Vector" class="cls-3" d="M453.152,2332.02l0.252,1.93c-3.78,1.12-7.784,2.24-10.724,3.05l-0.532-2.12c1.232-.28,2.772-0.68,4.48-1.1v-11.92H442.54v-1.99h10.192v1.99h-4.06v11.36C450.128,2332.83,451.668,2332.41,453.152,2332.02Zm6.524-9.1h7.56s0,0.78-.028,1.06c-0.448,11.48-.812,15.49-1.876,16.78a2.783,2.783,0,0,1-2.156,1.09,30.909,30.909,0,0,1-4.116-.06,4.815,4.815,0,0,0-.644-2.04c1.708,0.17,3.3.17,3.92,0.17a1.414,1.414,0,0,0,1.176-.42c0.784-.9,1.232-4.65,1.652-14.56h-5.6c-0.448,7.42-2.072,13.66-8.456,17.24a6.052,6.052,0,0,0-1.484-1.65c5.936-3.16,7.476-8.82,7.9-15.59h-4.592v-2.02H457.6q0.084-2.82.084-5.88h2.072Q459.76,2320.07,459.676,2322.92Z" transform="translate(-1 -1888)"/>
</g>
<path id="Union" class="cls-4" d="M364,2216h-4V1976H130v-4H590v4H364v240Z" transform="translate(-1 -1888)"/>
<image id="pv" x="307" y="348" width="106" height="92" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABcCAYAAACGAiAnAAAN/UlEQVR4nO2dW2wcVxnHf2fW60vcpG5ap2lc0lvaUtpSeuEFgagqhAQIkEBC8ASRnEBeUJAaxw88pBIPubzkBVVqXJmbkAAhVHG/FAGVSkuAVr2kpG16d5rEuThXx96d+dA58613vN5dz8yuN5lk/pIVZeQ5c875zuU7///3HRtawfhoD4Fcg/AR4FrgCqAINCr3LMgE8A+Gd07NPR3beg9wP7AC6EpYo1OIvAs8zYadJ6tljtjyPgpmGeC10MoZ4BDwF4Z3nIjU+U7gXuBqbXM9HAHexjf7CTjBpu0zaSuRtFPmQ7gGeAD4BnC3GqtZx7wHPAW8CEwxvg33u/70x4HvANcDPQlr8Rbwd+AV4GTk+SeALcBgk46Mg1PAv4EXGN88xfrdou/cB3wL+LAO0HrY5walkV9TcO8fBALW705ciRYNJQ8Cw8AHgSuB7iazyb4wCXJARylq0F5gFbCmxQ5dKvQD12BkudZvVr9jVwTb8Xc0+e6NzogetwM/Bn4GnHfGSoh0hhobsQZZjbjRdK+OqEKMNyeBqqH86S4d8VcBfR3o9DQoOGMJ1xMU39HlzA66KTDWUKUmZdrVZUgH8V78btvW9yPGjo20a7ft1LuAW7QScYxkJ9tRMG+ACQ0lfjfiXw9yVcp6dAo9rq1iVlWbIicw8k6MTi9oHw0hZi1iutPUuVVDrUn43hS+OYhvdBR6PeCtAzOYsh6dQmgopFpP0zUB3kvAdLw6yBpMcBcmSLVypDOUMT0Yc5s6D3Fg1+QzwFECM0lgypFybtHl72KGnQVrwVRnvuk5jXBYHZg43px9/z71QhMjuaEe2+LpBnuT22TjwRrmmDPUpu0n2bTd17d6EpZzoVAEswbMwNz3128rQ3AG5IgOwkVgrlcPcbn2YSKkmVEDBLIWmXPF46CEyEFEpmp+t6ib7UDMci6goWQNSG09Z9Q5moxXhrkS4QNp2pvc6zNen+5RhxIY+jTwX5CDc0/GtxXwz3sgx92hMK0HKtaLMofreF8ntBOPtXwMsV+xToNQ4tHRfrcvbdoeqKv9Cshq613EKOcgmF6MSbxPpWiAsZ07jcjT6s3EwRkMz4N5e/63TRkJngMmktdjrj4nwbypnRaB88ieQpoewJNBnGu+XD29QB2JFxHbFnk/Rlm2rtNhHyZDmpE26c4E8FqC98u6jp+OPCvpgfGnulmnRVk77FTN+88D76h73BpVVsWUztSyPrHffUlXhDjbQFnLONum+uTIkSPHpYz4a/fYSH/IRpgbkp175DCI3ez/x/Cuc4yPes5r9MVKI/e0oW9PI0462cuGndU9cGxEeUjTG5/iioUpAp7CN0fmZIuxrWuBW4EblGReDEd1X3uJ4R2x9qskzoT1/b8EfEYljbiw3uGv1LM7F3pITsP5CvDtNnRcReZ4o8ZZeahNMkctXnf1NvJshJGw6sFXgS9o2xaDlXn+oH0Sy1Dx3cTUdI+ZBPP6HBEbBEWCYE0GDrmN0IORdXhBlaAN2YkDMakkwkO+3AUSZ/Y5xDPUY1uWIbJKhb0VcQtXqAYl2gjTA+bGmCPvYkTI+xlWVutmJhMaanloLDPEntHlcV6IO6MGECxtNJiANrIndd/pN4XSmxRKlUYoE33RE7GNUMQwhImsCIW+oxjvTT1XxWEoKnTSrXH7IZ6hjJMh1iWUyUshZWRVXccaVBpQVHkku0ufG2jzpJkSEpwGOeb24UTlBLEMFc+ZMOY63TBjr6nKPNjN8jjrd5cjz7vVO8rw0mfWOm1qfHPRsQ3rtwWMjdjZ9K6qAf0xyunBWDGSVTF+dxFDhcEnBn/azoA7E8rls2AmlDIJsedhT5fOmzJsqKILQ7AzSrx+9TT9CJN+h+7liyGcUXa1Gt9s3IrTJOhlsaXPU+MM6b6SZOmbQTiAmKgEMAiStJyLFQP4xTX4xdD1NzKDcYE7R2JWuLJXD2kfN7VF8xnllwvq5QVagbiVwMkgYl5BolqN14fQh3FhY4kjceoilDkmI0RpBVN6xjrZBpmjHs6A6a8epo1KHrwM3JygHIPfbVeXw83iL5o3IAhCQxnbGfJkwoYcRXjBSe9z8AIQGzD5TAKJZBE4meNAHZnjPXfYbqfMMQ/um/6ck+QtCw1Vnn4aJIHcbgN+vEHVzVIaKnzR7jN/VmkjCWZVXIx6QRWJ5EAbR3lZT/f1ZI6JNsscUZxWyaNy7KjoU5aJebWFcnLkyJEjR4jGa/eekdUudtqYuNR9FK8jZr/zvDZsLzM2UgylEXOrnqHaiTOIlVJ4ng07q2FbYyMfCs9+TuZYAmfC4Rwi+xF5j427jrsne0avcOcsI/c0SR6oxXlE3nZe6oadh+r9QrMN/Q6VIr6cgpf7AfB9zWYoRyJrh7XMdqIic2yria/79BLJHFHYmI9Hgd86BiaEdbU/BjyiSQJxYJ2sXwI/VwdsARobKuT30h5OpzD+RDWEy2SdiG2EUPoxEd7PFKbAXyx5oBaLSkgLDRUqsL34koaN8MNRLccolE7o/7kEGPNGWNiuQvEcQXAUcfGK0zFpt0o5q6v84e55LHy9GWWfrVTiNMkJmypjziTrd4cHUMsX+tOXvqHGN4dP1m8rMbb1lBK0axMY6mbN+FimS7gf/YWFm2zg9xD46zS5LCmUiDXR0OVujLdCicqsShuNUNBBPVDD1yUJdY5A1lDuupty1wLj1vOGWhn9sy5oQxwdEsI/3484zWXgEiFjo6hkTF5N0HUtQZeuUDKrkbrHY5ajMKsx5naMWeBlLzSUmB4kdSrMDGLeQCx/VSmvPIAEQxdp2me7YCWPdYgXdrCREsZGRi1IilgMg+qcLBjQCw3VWs5SKcx6DyIVtISjuVSkjQYQlW8kbKMxMxgX0JNw6bPKtwt6WbD0zXcmxke7CaRP+eDjKYjCt0DeqhlJPfrz/kKGuw0QlyFxrI7MUdnQzy6RzBHFGV0CQwLBeLPhGcvpU6/q92MQwxK69FYKenS0m03b59j02gYscz9iOztVIPtBlzywcVfUULOh5OHi4JIyHDFgHRc7emsHlQvKfFZljnYGYNbDoXmDZb1L1DvB2JbnXfxe6MnFrYPNyOxVWzQ01FkNMPxJyqVqWin7KF5TEW+pOqykI7qezHEo/mhuCef1+7WZh2nqMKP3ceQZHzly5LjcEa6bj28pOiZCrKRhhlL2ycsM79g397+xkT4NVLxuiRmJs4gL8tzHhp3VdX1sxEoqtyshvFQyRxSzykS8xfCOaq7y2Nbl4eVZrg/i79E2QyWUPo6wcVep4kz0a2FfB76YsqKP6E8Fllr5GvDZNqXXNIJtzN/029EN+HPAw0ssc0QxpfX4IfBE5Lkd+N8DdwNbEq/3CS3LljkVGirwQr3IuEKTekihlyJydP5jEw1dXmqvq1H5JvKz1OjVsO9ajrSkZ8ibEgWwWukkJB7+SWRJ6NWQ5dUpGjOLOF6ryu/ZqwkwfRm5Q6JdqNyZsZLxzV0a/UokkispnbQ6XLrDWRgaymgcdFrayDCBmcdGFDHGxu2luvwio+hqwKRXsv9PJmzWUJRO8tjzsOWp1ukH0qzlSulHeC1/ehAJLnF+ryEG8Yu34Be17TYvTFJIHi415yow69gzOuhhvNUaHxH3zr1azLiLPqLSRngL1+VqqFUhCV1hwG2mpUkSk15BwdnE5VDJoKeXMd3VwsWGJQImKHuRpa+leIuMQ3SFUia90DtDoTcNk07Yf46Vt4ailU4956a0cdM6Gro8oBtrKzeyZBT2BjI3+HUbMUF4rY7dw+VErcS+COaCZyoZ6jek7NTT7noCwyk27YgGuK/UeIHL0FA2+cGSBtLH+GbPJbnZVWds5Li66X0Jtpg5td1rbfTLlF7vVhsateoy3qMGQD6AkStr+nRSlYkkmlzFUKu61H2c0UKTUi2TulGGWtCeh3vU6IMdom0uRtjU0RWIGcLveWfOMGJjHZlIGO/nq3xyzlNLv5Yu7cPUjBJ7sa3lCyWraZ/tQPVWZ5l3hjyGEOey4CisTWy2/VEPkZcR+VMd4S0OJhE5gMzdIVEM12dzuRxyG2HhjZkhcVxHiW6Ks4jZi5i3u8LZZH6jl1Q8oJzUikU2vCAMiXJng8shdDkpFt7qHFJI7+mEKDUhF3x10vaD+RfIE2D2dbFh5yR7Rp9DuAIj72K4DXFpm80CQirXdL7Axl1RaqSsuaj/0X87gcN6t1DttdZ2yXhSU1CXOrilFueUjaiuUht3TTO21Rrqr5rY0Mh5K4OcdLKRyN7wMq4dpysNsAX+0f2hkNAJiMs21663lkEfB37UAca8gsoNMbV1+Z2mtHaqHrUI6jgOlvP7bgxHS/T9cuXcdaEa0TrGtl7jtDPjiN9Gyc0zYTgZzzC847ksNa8WnV4S2gm7p34K4d559xLNx1nN0bIbeW6oCwNRWcGs0j21HvpV0Ixz5c1FjSzPKHSt95qs+Z1UeJcUlyt7kDnkhsoIckNlBLmhMoLcUBlBbqiMIDdURpAbKiPIDZUR5IbKCHJDZQS5oTKC3FAZQW6ojKCz9P/jWx8EPtmm0q5G+DxwXZNAz5JebPIsxv552ZYxjbhgnt8zvCPhPUetodN61P3AN9tUVlGjfJu1oah/Jv0hTX1tDeIiiZ7TK7MvYUOJU1rTXC/XCHGX7mXu2prW0a1x9R0XXDv9Qa8D1900+m47ULhA9c+diawgN1RGkBsqI8gNlRHkhsoIckNlBJ12zydS/B2qiwn2bz3tX5IrVxdBpw31C82wyCpshoXNGoncqdEBAP8H/OQpM6WFaO0AAAAASUVORK5CYII="/>
<image id="DCDC" x="322" y="151" width="80" height="80" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAJR0lEQVR4nO2cy3MTVxbGv9OSZeNgGwzJmEeoyoOEYQikEkKmmFRNTWWVmj9g1pQJ62yw17NJFc4m68Su+TtSWUxlkZBAhhkmTMLkwSQ8ggGjGEcGYySdqXPuuVarbT3pllqgr0plkLqvWp9+99xzbp8SYXaa0VfbytqJRQAroUexb2mVcgA2AxgyzwL/ojdQTJtfexAXun/NaRKNA3gewARYjcz5i4saeBHEFwEsPO6WmYS4LQCeBbAbQBnAqr2mJFYb6Mz7AsDVrl52WsSYAOhlAANrU5jUq1VPYiUGumm7oOZNzvz4WBv34bQnb0inLUGm8F0APwMo2PO7wwb2VS0xT8j7PQh/tP//COK8W2Bpwp4b7RsYVoW8fWbey/b/RRD/y9aJLQDnANJY2DewWrXIE/M+sbXiUPiMvoGi2elhANuVPMZREA5GyPtcMxQX+14Mn9o30EnMe8PIexXAcIS8i2qmLCgRNWfg3HQQzcCdmEGlsj4kRzr2fmtl4QcnM5qUErIgCnQMKq0iKBXbGq9VVcgT4o7aXyHvZhV5kzPzzoepdW/QLIFZy4NykedLllj6R6nFjyDjjYfGljHyliq0M16r8uSJea8bed+D+FyEvJqqb6Anj/GUrUzbqw+gEjizCsqsAHQXc9PLYBTAWNI3fvvUStXhs1NZF0doDNAxnwSzjDkCUA7gVXAmj3LmNkALmJu+rYZOnroXq20bkzds5J1bR14dNSLQkyfm/QXAgcjrDFAZjBWQmnYdwA8Avgbgl/2whiyOvATgTxqQiWT8QRceqGxZ/nUQLgD4J4CzAK7FamAM5IUNqqfAptZ2M++QTbEly8yLNsYAGJsAPAFgq11QAR9OlfTYgB6ESH4FwGEAv1MC3Th3rc7M2rm7wBjQ2Cjnz+k4i5icWWlwvfUVI3nNGhiVmHfGCLviYhXnwBgByYWRlDfPgTACZvmwGTv2jpEsOxp/tr8LIP4KwFdgKZE0MZVjngbwgn44xmGQjiO16PkNiG5VsZHXroFCymUA/wbwDcB5sBo4puUN8QGAhKoxEL0E5vsg+dBcUnMJe8GaR20GsWxafAoqn0dQvKZTtzzoDfwVrHSO25TfBeDbtm1LgDyvVg207Ry+a9M4b9P8F6OjAOJBMEmMewZEJUDSAZZYKVN2L0iPvwzQaUBNXLQVt2xf0BWAsyANCXsAylgYCZq4vlqKnbx2DWRHEySm3cfxmerVcW4q4y6WxwH6rTNAKKKiGgrssHPnNVGdnIlumz3Q6T538rIzjW5YTM1bGdWaEiSvXQPrq8yOIKJrtsDIxY6C9d9PuRin22b50MbkRiooIW71DeeHrSox8pIxkI0gmd6kU1Li47AaQLpADNg0LdS97zL5XruGOXWAPK+ka+EApAmyj2FlQFOaBxbzklLi5HnFa6CrZ6W2DRnGqxovK6YFlt5QzXHWKhbdQh8yWhvngR0kzytuA7OWTD9hYy+7qci3bdoKgZtCr9eSr1jk8Rs7t5k8sGPkecVj4N/eISWrzKMAPau5HMuKrRe7CEIejJuWz+20CmQMH5zcpPHxxHvVmwZEowD2AywJ9za7F/FDzffvAnlecRHoS74J3VNzH2DVfXBaAlg2Jn8Ca6WyT9Mb5p2WKMtiEd0sEDP+ANABW8HLRmUtdZw8r1YNHDR6ntHcbnZ6B8ABSmreMEjr2/1ud0XTkP9Yki1J9yXLAw/p60SHdN0mXMXs1B3bSAhswTlotfKEjVOd9qwRPzAMDsZtc6Kj5Hm1aqBNLf0r9w5WjbxhgCTf2+pqYlwF4VOwfoCFUF43AvCL7gPTmyB6FWB5/pYtMjlNnIVOop36fPU4Xp54OeaIUddR8rwaGEjsNjV52baqxmw6jYamVC70KFqscltRpKYV1vK62alLthkB+yK22abpNjMwa/TKKv2Tq7dD46yRl90C0B4rGd+w+xSDeo3E/7DmgETJa85AylrtW7wJyLfKfioVAfZ5XGDPLTlK+Lp1Nki9G02YZSH5uzOHD1qtO2pfgK+FfwHhBsD/tS8jPI6Rp+a9ZdQ9b1+C7PqcA9NpEH+XNHleDQzMVAxknRZXahx5z+LULVD5Bqh4R8879n716np8Rkj+H+ZO3tEdF9AV1z6hVQqsYvlVSzgqfwMqzoc2GsLkHbGY94K9JrR+aXQLebfis6i+GsVA30xz04r5wRrH+Xsj9+24RpWGj4k/h1rG/PsV7QtZqjKvmryjAO2318/Y46wtVEtxm1RP9Q089leLgZoQL8f2rpVat369uz7mhcmTMb6zLbEzOt2Pz7RfP7eptN8XbkCemveFkdeVnsZ0GtgaeZe6QZ5XWglMPXle6TKwh8jzShuBPUOeVzoM7EHyvNJCYM+R59VdA3uYPK9uE9iz5Hl1x8BHgDyvbhHY8+R5ddbAR4g8r04T+MiQ59UZA32na5m3Wr/MYbv59JxtgX1fRR7Roh4/Nx25kZS+nuxOEWidriRT9S0zcI/t+0n31pcR8nqmJztZAyvd/dtt6/11I2+3Xbhs239m7cAV8nqoJztpArORztTXwEreAkAfg3EWpHfl5iPk9UxPdjIGbkzea0begn5YuVXJgfzN48S79+y8oV7ryU6KwEbkfQ7Q1030Caa+JzteA1shDyHyaiv1PdlxExgXeV6p78mOx8D4yfNKfU92XATGTV5zSkFP9sMZmBx5zSkFPdkPS2B3yKutjvdkt2dgt8nz6nZP9kMQmA7yut+T3aKBaSGv2z3ZIbVKYFpiXrd7stfU6m8mdJq8dPRk11Grv5nQafLS0pNd15ja6jh5KevJfmgDO01e+nqyG2pjA9eTd8T21XYY/ucTiXlp6cmOjlNHtQiMkveKBdh5gD7RneRkYl5aerKbVtTA8K90hMkz8zS5PA0OLiSS53W7J7sNRQ305E2sJw8fhTrhO1Xbpl7ewABMOZDcsaIDthUUNu+crWYX9JcuT7zbN8+UDf0dAdNe+9HB8Qh5ZyyGNL06PS7yBvpieovlSOV15Gl+dapPXkTewM3WZuF/hPvbPnnNyRvoWx4KRl7epRK6HV5psdjg9/MeM+3WDIX15rx6F12FV8CSlWMZxLssDysmtZvbgxLz9lm4G9rIwEoeyDQI4n7MC8uRN1HPQB8Ldyl5TH3yqlXZ+q9hoI+FfTUjAP8HIzP5Aa4b7ZEAAAAASUVORK5CYII="/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -51,7 +51,8 @@ const store = new Vuex.Store({
vuex_psdkey: lifeData.vuex_psdkey ? lifeData.vuex_psdkey : '',
vuex_StationShow:lifeData.vuex_StationShow ? lifeData.vuex_StationShow : [0,0,0],
tabbar_current: 0,
vuex_stationValue:lifeData.vuex_stationValue ? lifeData.vuex_stationValue : '',
vuex_stationValue:lifeData.vuex_stationValue ? lifeData.vuex_stationValue : '',
vuex_inverterFlag:lifeData.vuex_inverterFlag ? lifeData.vuex_inverterFlag : 0,
tabbarList: [
{
"icon": "warning",

View File

@ -4,7 +4,7 @@
<view class='filter-input'
:style="{'background-color' :inputBackgroundColor ,'border-radius':radius + 'rpx'}">
<!-- 左侧搜索图标 -->
<img src="/static/aidex/images/search.png" class="filterImg">
<image src="/static/aidex/images/search.png" class="filterImg"></image>
<!-- 输入框内容 -->
<input class="text" type='text' v-model="inputVal" confirm-type="搜索" :placeholder='placeholder'

View File

@ -0,0 +1,320 @@
## 2.5.0-202301012023-01-01
- 秋云图表组件 修改条件编译顺序确保uniapp的cli方式的项目依赖不完整时可以正常显示
- 秋云图表组件 恢复props属性directory的使用以修复vue3项目中开启echarts后echarts目录识别错误的bug
- uCharts.js 修复区域图、混合图只有一个数据时图表显示不正确的bug
- uCharts.js 修复折线图、区域图中时间轴类别图表tooltip指示点显示不正确的bug
- uCharts.js 修复x轴使用labelCount时并且boundaryGap = 'justify' 并且关闭Y轴显示的时候最后一个坐标值不显示的bug
- uCharts.js 修复折线图只有一组数据时 ios16 渲染颜色不正确的bug
- uCharts.js 修复玫瑰图半径显示不正确的bug
- uCharts.js 柱状图、山峰图增加正负图功能y轴网格如果需要显示0轴则由 min max 及 splitNumber 确定后续版本优化自动显示0轴
- uCharts.js 柱状图column增加 opts.extra.column.labelPosition数据标签位置有效值为 outside外部, insideTop内顶部, center内中间, bottom内底部
- uCharts.js 雷达图radar增加 opts.extra.radar.labelShow否显示各项标识文案是默认true
- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.boxPadding提示窗边框填充距离默认3px
- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.fontSize提示窗字体大小配置默认13px
- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.lineHeight提示窗文字行高默认20px
- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.legendShow是否显示左侧图例默认true
- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.legendShape图例形状图例标识样式有效值为 auto自动跟随图例, diamond◆, circle●, triangle▲, square■, rect▬, line-
- uCharts.js 标记线markLine增加 opts.extra.markLine.labelFontSize字体大小配置默认13px
- uCharts.js 标记线markLine增加 opts.extra.markLine.labelPadding标签边框内填充距离默认6px
- uCharts.js 折线图line增加 opts.extra.line.linearType渐变色类型可选值 none关闭渐变色custom 自定义渐变色。使用自定义渐变色时请赋值serie.linearColor作为颜色值
- uCharts.js 折线图line增加 serie.linearColor渐变色数组格式为2维数组[起始位置,颜色值],例如[[0,'#0EE2F8'],[0.3,'#2BDCA8'],[0.6,'#1890FF'],[1,'#9A60B4']]
- uCharts.js 折线图line增加 opts.extra.line.onShadow是否开启折线阴影开启后请赋值serie.setShadow阴影设置
- uCharts.js 折线图line增加 serie.setShadow阴影配置格式为4位数组[offsetX,offsetY,blur,color]
- uCharts.js 折线图line增加 opts.extra.line.animation动画效果方向可选值为vertical 垂直动画效果horizontal 水平动画效果
- uCharts.js X轴xAxis增加 opts.xAxis.lineHeightX轴字体行高默认20px
- uCharts.js X轴xAxis增加 opts.xAxis.marginTopX轴文字距离轴线的距离默认0px
- uCharts.js X轴xAxis增加 opts.xAxis.title当前X轴标题
- uCharts.js X轴xAxis增加 opts.xAxis.titleFontSize标题字体大小默认13px
- uCharts.js X轴xAxis增加 opts.xAxis.titleOffsetY标题纵向偏移距离负数为向上偏移正数向下偏移
- uCharts.js X轴xAxis增加 opts.xAxis.titleOffsetX标题横向偏移距离负数为向左偏移正数向右偏移
- uCharts.js X轴xAxis增加 opts.xAxis.titleFontColor标题字体颜色默认#666666
## 报错TypeError: Cannot read properties of undefined (reading 'length')
- 如果是uni-modules版本组件请先登录HBuilderX账号
- 在HBuilderX中的manifest.json点击重新获取uniapp的appid或者删除appid重新粘贴重新运行
- 如果是cli项目请使用码云上的非uniCloud版本组件
- 或者添加uniCloud的依赖
- 或者使用原生uCharts
## 2.4.5-202211302022-11-30
- uCharts.js 优化tooltip当文字很多变为左侧显示时如果画布仍显显示不下提示框错位置变为以左侧0位置起画
- uCharts.js 折线图修复特殊情况下只有单点数据并改变线宽后点变为圆形的bug
- uCharts.js 修复Y轴disabled启用后无效并报错的bug
- uCharts.js 修复仪表盘起始结束角度特殊情况下显示不正确的bug
- uCharts.js 雷达图新增参数 opts.extra.radar.radius , 自定义雷达图半径
- uCharts.js 折线图、区域图增加tooltip指示点opts.extra.line.activeType/opts.extra.area.activeType可选值"none"不启用激活指示点,"hollow"空心点模式,"solid"实心点模式
## 2.4.4-202211022022-11-02
- 秋云图表组件 修复使用echarts时reload、reshow无法调用重新渲染的bug[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/40)
- 秋云图表组件 修复使用echarts时初始化时宽高不正确的bug[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/42)
- 秋云图表组件 修复uniapp的h5使用history模式时无法加载echarts的bug
- 秋云图表组件 小程序端@complete@scrollLeft@scrollRight@getTouchStart@getTouchMove@getTouchEnd事件增加opts参数传出,方便一些特殊需求的交互获取数据。
- uCharts.js 修复calTooltipYAxisData方法内formatter格式化方法未与y轴方法同步的问题[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/43)
- uCharts.js 地图新增参数opts.series[i].fillOpacity以透明度方式来设置颜色过度效果[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/38)
- uCharts.js 地图新增参数opts.extra.map.active是否启用点击激活变色
- uCharts.js 地图新增参数opts.extra.map.activeTextColor是否启用点击激活变色
- uCharts.js 地图新增渲染完成事件renderComplete
- uCharts.js 漏斗图修复当部分数据相同时tooltip提示窗点击错误的bug
- uCharts.js 漏斗图新增参数series.data[i].centerText 居中标签文案
- uCharts.js 漏斗图新增参数series.data[i].centerTextSize 居中标签文案字体大小默认opts.fontSize
- uCharts.js 漏斗图新增参数series.data[i].centerTextColor 居中标签文案字体颜色,默认#FFFFFF
- uCharts.js 漏斗图新增参数opts.extra.funnel.minSize 最小值的最小宽度默认0
- uCharts.js 进度条新增参数opts.extra.arcbar.direction动画方向可选值为cw顺时针、ccw逆时针
- uCharts.js 混合图新增参数opts.extra.mix.line.width折线的宽度默认2
- uCharts.js 修复tooltip开启horizentalLine水平横线标注时图表显示错位的bug
- uCharts.js 优化tooltip当文字很多变为左侧显示时如果画布仍显显示不下提示框错位置变为以左侧0位置起画
- uCharts.js 修复开启滚动条后X轴文字超出绘图区域后的隐藏逻辑
- uCharts.js 柱状图、条状图修复堆叠模式不能通过{value,color}赋值单个柱子颜色的问题
- uCharts.js 气泡图修复不识别series.textSize和series.textColor的bug
## 报错TypeError: Cannot read properties of undefined (reading 'length')
1. 如果是uni-modules版本组件请先登录HBuilderX账号
2. 在HBuilderX中的manifest.json点击重新获取uniapp的appid或者删除appid重新粘贴重新运行
3. 如果是cli项目请使用码云上的非uniCloud版本组件
4. 或者添加uniCloud的依赖
5. 或者使用原生uCharts
## 2.4.3-202205052022-05-05
- 秋云图表组件 修复开启canvas2d后将series赋值为空数组显示加载图标时再次赋值后画布闪动的bug
- 秋云图表组件 修复升级hbx最新版后ECharts的highlight方法报错的bug
- uCharts.js 雷达图新增参数opts.extra.radar.gridEval数据点位网格抽希默认1
- uCharts.js 雷达图新增参数opts.extra.radar.axisLabel 是否显示刻度点值默认false
- uCharts.js 雷达图新增参数opts.extra.radar.axisLabelTofix刻度点值小数位数默认0
- uCharts.js 雷达图新增参数opts.extra.radar.labelPointShow是否显示末端刻度圆点默认false
- uCharts.js 雷达图新增参数opts.extra.radar.labelPointRadius刻度圆点的半径默认3
- uCharts.js 雷达图新增参数opts.extra.radar.labelPointColor刻度圆点的颜色默认#cccccc
- uCharts.js 雷达图新增参数opts.extra.radar.linearType渐变色类型可选值"none"关闭渐变,"custom"开启渐变
- uCharts.js 雷达图新增参数opts.extra.radar.customColor自定义渐变颜色数组类型对应series的数组长度以匹配不同series颜色的不同配色方案例如["#FA7D8D", "#EB88E2"]
- uCharts.js 雷达图优化支持series.textColor、series.textSize属性
- uCharts.js 柱状图中温度计式图标优化支持全圆角类型修复边框有缝隙的bug详见官网【演示】中的温度计图表
- uCharts.js 柱状图新增参数opts.extra.column.activeWidth当前点击柱状图的背景宽度默认一个单元格单位
- uCharts.js 混合图增加opts.extra.mix.area.gradient 区域图是否开启渐变色
- uCharts.js 混合图增加opts.extra.mix.area.opacity 区域图透明度默认0.2
- uCharts.js 饼图、圆环图、玫瑰图、漏斗图增加opts.series[0].data[i].labelText自定义标签文字避免formatter格式化的繁琐详见官网【演示】中的饼图
- uCharts.js 饼图、圆环图、玫瑰图、漏斗图增加opts.series[0].data[i].labelShow自定义是否显示某一个指示标签避免因饼图类别太多导致标签重复或者居多导致图形变形的问题详见官网【演示】中的饼图
- uCharts.js 增加opts.series[i].legendText/opts.series[0].data[i].legendText与series.name同级自定义图例显示文字的方法
- uCharts.js 优化X轴、Y轴formatter格式化方法增加形参统一为fromatter:function(value,index,opts){}
- uCharts.js 修复横屏模式下无法使用双指缩放方法的bug
- uCharts.js 修复当只有一条数据或者多条数据值相等的时候Y轴自动计算的最大值错误的bug
- 【官网模板】增加外部自定义图例与图表交互的例子,[点击跳转](https://www.ucharts.cn/v2/#/layout/info?id=2)
## 注意非unimodules 版本如因更新 hbx 至 3.4.7 导致报错如下,请到码云更新非 unimodules 版本组件,[点击跳转](https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6)
> Error in callback for immediate watcher "uchartsOpts": "SyntaxError: Unexpected token u in JSON at position 0"
## 2.4.2-202204212022-04-21
- 秋云图表组件 修复HBX升级3.4.6.20220420版本后echarts报错的问题
## 2.4.2-202204202022-04-20
## 重要此版本uCharts新增了很多功能修复了诸多已知问题
- 秋云图表组件 新增onzoom开启双指缩放功能仅uCharts前提需要直角坐标系类图表类型并且ontouch为true、opts.enableScroll为true详见实例项目K线图
- 秋云图表组件 新增optsWatch是否监听opts变化关闭optsWatch后动态修改opts不会触发图表重绘
- 秋云图表组件 修复开启canvas2d功能后动态更新数据后画布闪动的bug
- 秋云图表组件 去除directory属性改为自动获取echarts.min.js路径升级不受影响
- 秋云图表组件 增加getImage()方法及@getImage事件通过ref调用getImage()方法获,触发@getImage事件获取当前画布的base64图片文件流
- 秋云图表组件 支付宝、字节跳动、飞书、快手小程序支持开启canvas2d同层渲染设置。
- 秋云图表组件 新增加【非uniCloud】版本组件避免有些不需要uniCloud的使用组件发布至小程序需要提交隐私声明问题请到码云[【非uniCloud版本】](https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6)或npm[【非uniCloud版本】](https://www.npmjs.com/package/@qiun/uni-ucharts)下载使用。
- uCharts.js 新增dobuleZoom双指缩放功能
- uCharts.js 新增山峰图type="mount"数据格式为饼图类格式不需要传入categories具体详见新版官网在线演示
- uCharts.js 修复折线图当数据中存在null时tooltip报错的bug
- uCharts.js 修复饼图类当画布比较小时自动计算的半径是负数报错的bug
- uCharts.js 统一各图表类型的series.formatter格式化方法的形参为(val, index, series, opts),方便格式化时有更多参数可用
- uCharts.js 标记线功能增加labelText自定义显示文字增加labelAlign标签显示位置左侧或右侧增加标签显示位置微调labelOffsetX、labelOffsetY
- uCharts.js 修复条状图当数值很小时开启圆角后样式错误的bug
- uCharts.js 修复X轴开启disabled后X轴仍占用空间的bug
- uCharts.js 修复X轴开启滚动条并且开启rotateLabel后X轴文字与滚动条重叠的bug
- uCharts.js 增加X轴rotateAngle文字旋转自定义角度取值范围(-90至90)
- uCharts.js 修复地图文字标签层级显示不正确的bug
- uCharts.js 修复饼图、圆环图、玫瑰图当数据全部为0的时候不显示数据标签的bug
- uCharts.js 修复当opts.padding上边距为0时Y轴顶部刻度标签位置不正确的bug
## 另外我们还开发了各大原生小程序组件已发布至码云和npm
[https://gitee.com/uCharts/uCharts](https://gitee.com/uCharts/uCharts)
[https://www.npmjs.com/~qiun](https://www.npmjs.com/~qiun)
## 对于原生uCharts文档我们已上线新版官方网站详情点击下面链接进入官网
[https://www.uCharts.cn/v2/](https://www.ucharts.cn/v2/)
## 2.3.7-202201222022-01-22
## 重要使用vue3编译请使用cli模式并升级至最新依赖HbuilderX编译需要使用3.3.8以上版本
- uCharts.js 修复uni-app平台组件模式使用vue3编译到小程序报错的bug。
## 2.3.7-202201182022-01-18
## 注意使用vue3的前提是需要3.3.8.20220114-alpha版本的HBuilder
## 2.3.67-202201182022-01-18
- 秋云图表组件 组件初步支持vue3全端编译会有些问题具体详见下面修改
1. 小程序端运行时在uni_modules文件夹的qiun-data-charts.js中搜索 new uni_modules_qiunDataCharts_js_sdk_uCharts_uCharts.uCharts将.uCharts去掉。
2. 小程序端发行时在uni_modules文件夹的qiun-data-charts.js中搜索 new e.uCharts将.uCharts去掉变为 new e。
3. 如果觉得上述步骤比较麻烦如果您的项目只编译到小程序端可以修改u-charts.js最后一行导出方式将 export default uCharts;变更为 export default { uCharts: uCharts }; 这样变更后H5和App端的renderjs会有问题请开发者自行选择。此问题非组件问题请等待DC官方修复Vue3的小程序端
## 2.3.6-202201112022-01-11
- 秋云图表组件 修改组件 props 属性中的 background 默认值为 rgba(0,0,0,0)
## 2.3.6-202112012021-12-01
- uCharts.js 修复bar条状图开启圆角模式时值很小时圆角渲染错误的bug
## 2.3.5-202110142021-10-15
- uCharts.js 增加vue3的编译支持仅原生uChartsqiun-data-charts组件后续会支持请关注更新
## 2.3.4-202110122021-10-12
- 秋云图表组件 修复 mac os x 系统 mouseover 事件丢失的 bug
## 2.3.3-202107062021-07-06
- uCharts.js 增加雷达图开启数据点值opts.dataLabel的显示
## 2.3.2-202106272021-06-27
- 秋云图表组件 修复tooltipCustom个别情况下传值不正确报错TypeError: Cannot read property 'name' of undefined的bug
## 2.3.1-202106162021-06-16
- uCharts.js 修复圆角柱状图使用4角圆角时当数值过大时不正确的bug
## 2.3.0-202106122021-06-12
- uCharts.js 【重要】uCharts增加nvue兼容可在nvue项目中使用gcanvas组件渲染uCharts[详见码云uCharts-demo-nvue](https://gitee.com/uCharts/uCharts)
- 秋云图表组件 增加tapLegend属性是否开启图例点击交互事件
- 秋云图表组件 getIndex事件中增加返回uCharts实例中的opts参数以便在页面中调用参数
- 示例项目 pages/other/other.vue增加app端自定义tooltip的方法详见showOptsTooltip方法
## 2.2.1-202106032021-06-03
- uCharts.js 修复饼图、圆环图、玫瑰图当起始角度不为0时tooltip位置不准确的bug
- uCharts.js 增加温度计式柱状图开启顶部半圆形的配置
## 2.2.0-202105292021-05-29
- uCharts.js 增加条状图type="bar"
- 示例项目 pages/ucharts/ucharts.vue增加条状图的demo
## 2.1.7-202105242021-05-24
- uCharts.js 修复大数据量模式下曲线图不平滑的bug
## 2.1.6-202105232021-05-23
- 秋云图表组件 修复小程序端开启滚动条更新数据后滚动条位置不符合预期的bug
## 2.1.5-20210517022021-05-17
- uCharts.js 修复自定义Y轴min和max值为0时不能正确显示的bug
## 2.1.5-202105172021-05-17
- uCharts.js 修复Y轴自定义min和max时未按指定的最大值最小值显示坐标轴刻度的bug
## 2.1.4-202105162021-05-16
- 秋云图表组件 优化onWindowResize防抖方法
- 秋云图表组件 修复APP端uCharts更新数据时清空series显示loading图标后再显示图表图表抖动的bug
- uCharts.js 修复开启canvas2d后x轴、y轴、series自定义字体大小未按比例缩放的bug
- 示例项目 修复format-e.vue拼写错误导致app端使用uCharts渲染图表
## 2.1.3-202105132021-05-13
- 秋云图表组件 修改uCharts变更chartData数据为updateData方法支持带滚动条的数据动态打点
- 秋云图表组件 增加onWindowResize防抖方法 fix by ど誓言,如尘般染指流年づ
- 秋云图表组件 H5或者APP变更chartData数据显示loading图表时原数据闪现的bug
- 秋云图表组件 props增加errorReload禁用错误点击重新加载的方法
- uCharts.js 增加tooltip显示categoryx轴对应点位标题的功能opts.extra.tooltip.showCategory默认为false
- uCharts.js 修复mix混合图只有柱状图时tooltip的分割线显示位置不正确的bug
- uCharts.js 修复开启滚动条图表在拖动中动态打点滚动条位置不正确的bug
- uCharts.js 修复饼图类数据格式为echarts数据格式series为空数组报错的bug
- 示例项目 修改uCharts.js更新到v2.1.2版本后,@getIndex方法获取索引值变更为e.currentIndex.index
- 示例项目 pages/updata/updata.vue增加滚动条拖动更新数据动态打点的demo
- 示例项目 pages/other/other.vue增加errorReload禁用错误点击重新加载的demo
## 2.1.2-202105092021-05-09
秋云图表组件 修复APP端初始化时就传入chartData或lacaldata不显示图表的bug
## 2.1.1-202105092021-05-09
- 秋云图表组件 变更ECharts的eopts配置在renderjs内执行支持在config-echarts.js配置文件内写function配置。
- 秋云图表组件 修复APP端报错Prop being mutated: "onmouse"错误的bug。
- 秋云图表组件 修复APP端报错Error: Not FoundPage[6][-1,27] at view.umd.min.js:1的bug。
## 2.1.0-202105072021-05-07
- 秋云图表组件 修复初始化时就有数据或者数据更新的时候loading加载动画闪动的bug
- uCharts.js 修复x轴format方法categories为字符串类型时返回NaN的bug
- uCharts.js 修复series.textColor、legend.fontColor未执行全局默认颜色的bug
## 2.1.0-202105062021-05-06
- 秋云图表组件 修复极个别情况下报错item.properties undefined的bug
- 秋云图表组件 修复极个别情况下关闭加载动画reshow不起作用无法显示图表的bug
- 示例项目 pages/ucharts/ucharts.vue 增加时间轴折线图type="tline"、时间轴区域图type="tarea"、散点图type="scatter"、气泡图demotype="bubble"、倒三角形漏斗图opts.extra.funnel.type="triangle"、金字塔形漏斗图opts.extra.funnel.type="pyramid"
- 示例项目 pages/format-u/format-u.vue 增加X轴format格式化示例
- uCharts.js 升级至v2.1.0版本
- uCharts.js 修复 玫瑰图面积模式点击tooltip位置不正确的bug
- uCharts.js 修复 玫瑰图点击图例只剩一个类别显示空白的bug
- uCharts.js 修复 饼图类图点击图例其他图表tooltip位置某些情况下不准的bug
- uCharts.js 修复 x轴为矢量轴时间轴情况下点击tooltip位置不正确的bug
- uCharts.js 修复 词云图获取点击索引偶尔不准的bug
- uCharts.js 增加 直角坐标系图表X轴format格式化方法原生uCharts.js用法请使用formatter
- uCharts.js 增加 漏斗图扩展配置倒三角形opts.extra.funnel.type="triangle"金字塔形opts.extra.funnel.type="pyramid"
- uCharts.js 增加 散点图opts.type="scatter"、气泡图opts.type="bubble"
- 后期计划 完善散点图、气泡图增加markPoints标记点增加横向条状图。
## 2.0.0-202105022021-05-02
- uCharts.js 修复词云图获取点击索引不正确的bug
## 2.0.0-202105012021-05-01
- 秋云图表组件 修复QQ小程序、百度小程序在关闭动画效果情况下v-for循环使用图表显示不正确的bug
## 2.0.0-202104262021-04-26
- 秋云图表组件 修复QQ小程序不支持canvas2d的bug
- 秋云图表组件 修复钉钉小程序某些情况点击坐标计算错误的bug
- uCharts.js 增加 extra.column.categoryGap 参数柱状图类每个category点位X轴点柱子组之间的间距
- uCharts.js 增加 yAxis.data[i].titleOffsetY 参数,标题纵向偏移距离,负数为向上偏移,正数向下偏移
- uCharts.js 增加 yAxis.data[i].titleOffsetX 参数,标题横向偏移距离,负数为向左偏移,正数向右偏移
- uCharts.js 增加 extra.gauge.labelOffset 参数仪表盘标签文字径向便宜距离默认13px
## 2.0.0-20210422-22021-04-22
秋云图表组件 修复 formatterAssign 未判断 args[key] == null 的情况导致栈溢出的 bug
## 2.0.0-202104222021-04-22
- 秋云图表组件 修复H5、APP、支付宝小程序、微信小程序canvas2d模式下横屏模式的bug
## 2.0.0-202104212021-04-21
- uCharts.js 修复多行图例的情况下图例在上方或者下方时图例float为左侧或者右侧时第二行及以后的图例对齐方式不正确的bug
## 2.0.0-202104202021-04-20
- 秋云图表组件 修复微信小程序开启canvas2d模式后windows版微信小程序不支持canvas2d模式的bug
- 秋云图表组件 修改非uni_modules版本为v2.0版本qiun-data-charts组件
## 2.0.0-202104192021-04-19
## v1.0版本已停更建议转uni_modules版本组件方式调用点击右侧绿色【使用HBuilderX导入插件】即可使用示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件请重启HBuilderX如仍不好用请重启电脑
## 如果是cli项目请尝试清理node_modules重新install还不行就删除项目再重新install。
## 此问题已于DCloud官方确认HBuilderX下个版本会修复。
## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍右侧蓝色按钮示例项目请看2遍 </font>
## [DEMO演示及在线生成工具v2.0文档https://demo.ucharts.cn](https://demo.ucharts.cn)
## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
- uCharts.js 修复混合图中柱状图单独设置颜色不生效的bug
- uCharts.js 修复多Y轴单独设置fontSize时开启canvas2d后未对应放大字体的bug
## 2.0.0-202104182021-04-18
- 秋云图表组件 增加directory配置修复H5端history模式下如果发布到二级目录无法正确加载echarts.min.js的bug
## 2.0.0-202104162021-04-16
## v1.0版本已停更建议转uni_modules版本组件方式调用点击右侧绿色【使用HBuilderX导入插件】即可使用示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件请重启HBuilderX如仍不好用请重启电脑
## 如果是cli项目请尝试清理node_modules重新install还不行就删除项目再重新install。
## 此问题已于DCloud官方确认HBuilderX下个版本会修复。
## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍右侧蓝色按钮示例项目请看2遍 </font>
## [DEMO演示及在线生成工具v2.0文档https://demo.ucharts.cn](https://demo.ucharts.cn)
## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
- 秋云图表组件 修复APP端某些情况下报错`Not Found Page`的bugfix by 高级bug开发技术员
- 示例项目 修复APP端v-for循环某些情况下报错`Not Found Page`的bugfix by 高级bug开发技术员
- uCharts.js 修复非直角坐标系tooltip提示窗右侧超出未变换方向显示的bug
## 2.0.0-202104152021-04-15
- 秋云图表组件 修复H5端发布到二级目录下echarts无法加载的bug
- 秋云图表组件 修复某些情况下echarts.off('finished')移除监听事件报错的bug
## 2.0.0-202104142021-04-14
## v1.0版本已停更建议转uni_modules版本组件方式调用点击右侧绿色【使用HBuilderX导入插件】即可使用示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件请重启HBuilderX如仍不好用请重启电脑
## 如果是cli项目请尝试清理node_modules重新install还不行就删除项目再重新install。
## 此问题已于DCloud官方确认HBuilderX下个版本会修复。
## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍右侧蓝色按钮示例项目请看2遍 </font>
## [DEMO演示及在线生成工具v2.0文档https://demo.ucharts.cn](https://demo.ucharts.cn)
## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
- 秋云图表组件 修复H5端在cli项目下ECharts引用地址错误的bug
- 示例项目 增加ECharts的formatter用法的示例(详见示例项目format-e.vue)
- uCharts.js 增加圆环图中心背景色的配置extra.ring.centerColor
- uCharts.js 修复微信小程序安卓端柱状图开启透明色后显示不正确的bug
## 2.0.0-202104132021-04-13
- 秋云图表组件 修复百度小程序多个图表真机未能正确获取根元素dom尺寸的bug
- 秋云图表组件 修复百度小程序横屏模式方向不正确的bug
- 秋云图表组件 修改ontouch时@getTouchStart@getTouchMove@getTouchEnd的触发条件
- uCharts.js 修复饼图类数据格式series属性不生效的bug
- uCharts.js 增加时序区域图 详见示例项目中ucharts.vue
## 2.0.0-20210412-22021-04-12
## v1.0版本已停更建议转uni_modules版本组件方式调用点击右侧绿色【使用HBuilderX导入插件】即可使用示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件请重启HBuilderX。如仍不好用请重启电脑此问题已于DCloud官方确认HBuilderX下个版本会修复。
## [DEMO演示及在线生成工具v2.0文档https://demo.ucharts.cn](https://demo.ucharts.cn)
## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
- 秋云图表组件 修复uCharts在APP端横屏模式下不能正确渲染的bug
- 示例项目 增加ECharts柱状图渐变色、圆角柱状图、横向柱状图条状图的示例
## 2.0.0-202104122021-04-12
- 秋云图表组件 修复created中判断echarts导致APP端无法识别改回mounted中判断echarts初始化
- uCharts.js 修复2d模式下series.textOffset未乘像素比的bug
## 2.0.0-202104112021-04-11
## v1.0版本已停更建议转uni_modules版本组件方式调用点击右侧绿色【使用HBuilderX导入插件】即可使用示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
## 初次使用如果提示未注册<qiun-data-charts>组件请重启HBuilderX并清空小程序开发者工具缓存。
## [DEMO演示及在线生成工具v2.0文档https://demo.ucharts.cn](https://demo.ucharts.cn)
## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
- uCharts.js 折线图区域图增加connectNulls断点续连的功能详见示例项目中ucharts.vue
- 秋云图表组件 变更初始化方法为created变更type2d默认值为true优化2d模式下组件初始化后dom获取不到的bug
- 秋云图表组件 修复左右布局时右侧图表点击坐标错误的bug修复tooltip柱状图自定义颜色显示object的bug
## 2.0.0-202104102021-04-10
- 修复左右布局时右侧图表点击坐标错误的bug修复柱状图自定义颜色tooltip显示object的bug
- 增加标记线及柱状图自定义颜色的demo
## 2.0.0-202104092021-04-08
## v1.0版本已停更建议转uni_modules版本组件方式调用点击右侧【使用HBuilderX导入插件】即可体验DEMO演示及在线生成工具v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
## 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
- uCharts.js 修复钉钉小程序百度小程序measureText不准确的bug修复2d模式下饼图类activeRadius为按比例放大的bug
- 修复组件在支付宝小程序端点击位置不准确的bug
## 2.0.0-202104082021-04-07
- 修复组件在支付宝小程序端不能显示的bug目前支付宝小程不能点击交互后续修复
- uCharts.js 修复高分屏下柱状图类,圆弧进度条 自定义宽度不能按比例放大的bug
## 2.0.0-202104072021-04-06
## v1.0版本已停更建议转uni_modules版本组件方式调用点击右侧【使用HBuilderX导入插件】即可体验DEMO演示及在线生成工具v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
## 增加 通过tofix和unit快速格式化y轴的demo add by `howcode`
## 增加 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
## 2.0.0-202104062021-04-05
# 秋云图表组件+uCharts v2.0版本同步上线使用方法详见https://demo.ucharts.cn帮助页
## 2.0.02021-04-05
# 秋云图表组件+uCharts v2.0版本同步上线使用方法详见https://demo.ucharts.cn帮助页

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,162 @@
<template>
<view class="container loading1">
<view class="shape shape1"></view>
<view class="shape shape2"></view>
<view class="shape shape3"></view>
<view class="shape shape4"></view>
</view>
</template>
<script>
export default {
name: 'loading1',
data() {
return {
};
}
}
</script>
<style scoped="true">
.container {
width: 30px;
height: 30px;
position: relative;
}
.container.loading1 {
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
.container .shape {
position: absolute;
width: 10px;
height: 10px;
border-radius: 1px;
}
.container .shape.shape1 {
left: 0;
background-color: #1890FF;
}
.container .shape.shape2 {
right: 0;
background-color: #91CB74;
}
.container .shape.shape3 {
bottom: 0;
background-color: #FAC858;
}
.container .shape.shape4 {
bottom: 0;
right: 0;
background-color: #EE6666;
}
.loading1 .shape1 {
-webkit-animation: animation1shape1 0.5s ease 0s infinite alternate;
animation: animation1shape1 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation1shape1 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(16px, 16px);
transform: translate(16px, 16px);
}
}
@keyframes animation1shape1 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(16px, 16px);
transform: translate(16px, 16px);
}
}
.loading1 .shape2 {
-webkit-animation: animation1shape2 0.5s ease 0s infinite alternate;
animation: animation1shape2 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation1shape2 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-16px, 16px);
transform: translate(-16px, 16px);
}
}
@keyframes animation1shape2 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-16px, 16px);
transform: translate(-16px, 16px);
}
}
.loading1 .shape3 {
-webkit-animation: animation1shape3 0.5s ease 0s infinite alternate;
animation: animation1shape3 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation1shape3 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(16px, -16px);
transform: translate(16px, -16px);
}
}
@keyframes animation1shape3 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(16px, -16px);
transform: translate(16px, -16px);
}
}
.loading1 .shape4 {
-webkit-animation: animation1shape4 0.5s ease 0s infinite alternate;
animation: animation1shape4 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation1shape4 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-16px, -16px);
transform: translate(-16px, -16px);
}
}
@keyframes animation1shape4 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-16px, -16px);
transform: translate(-16px, -16px);
}
}
</style>

View File

@ -0,0 +1,170 @@
<template>
<view class="container loading2">
<view class="shape shape1"></view>
<view class="shape shape2"></view>
<view class="shape shape3"></view>
<view class="shape shape4"></view>
</view>
</template>
<script>
export default {
name: 'loading2',
data() {
return {
};
}
}
</script>
<style scoped="true">
.container {
width: 30px;
height: 30px;
position: relative;
}
.container.loading2 {
-webkit-transform: rotate(10deg);
transform: rotate(10deg);
}
.container.loading2 .shape {
border-radius: 5px;
}
.container.loading2{
-webkit-animation: rotation 1s infinite;
animation: rotation 1s infinite;
}
.container .shape {
position: absolute;
width: 10px;
height: 10px;
border-radius: 1px;
}
.container .shape.shape1 {
left: 0;
background-color: #1890FF;
}
.container .shape.shape2 {
right: 0;
background-color: #91CB74;
}
.container .shape.shape3 {
bottom: 0;
background-color: #FAC858;
}
.container .shape.shape4 {
bottom: 0;
right: 0;
background-color: #EE6666;
}
.loading2 .shape1 {
-webkit-animation: animation2shape1 0.5s ease 0s infinite alternate;
animation: animation2shape1 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation2shape1 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(20px, 20px);
transform: translate(20px, 20px);
}
}
@keyframes animation2shape1 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(20px, 20px);
transform: translate(20px, 20px);
}
}
.loading2 .shape2 {
-webkit-animation: animation2shape2 0.5s ease 0s infinite alternate;
animation: animation2shape2 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation2shape2 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-20px, 20px);
transform: translate(-20px, 20px);
}
}
@keyframes animation2shape2 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-20px, 20px);
transform: translate(-20px, 20px);
}
}
.loading2 .shape3 {
-webkit-animation: animation2shape3 0.5s ease 0s infinite alternate;
animation: animation2shape3 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation2shape3 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(20px, -20px);
transform: translate(20px, -20px);
}
}
@keyframes animation2shape3 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(20px, -20px);
transform: translate(20px, -20px);
}
}
.loading2 .shape4 {
-webkit-animation: animation2shape4 0.5s ease 0s infinite alternate;
animation: animation2shape4 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation2shape4 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-20px, -20px);
transform: translate(-20px, -20px);
}
}
@keyframes animation2shape4 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-20px, -20px);
transform: translate(-20px, -20px);
}
}
</style>

View File

@ -0,0 +1,173 @@
<template>
<view class="container loading3">
<view class="shape shape1"></view>
<view class="shape shape2"></view>
<view class="shape shape3"></view>
<view class="shape shape4"></view>
</view>
</template>
<script>
export default {
name: 'loading3',
data() {
return {
};
}
}
</script>
<style scoped="true">
.container {
width: 30px;
height: 30px;
position: relative;
}
.container.loading3 {
-webkit-animation: rotation 1s infinite;
animation: rotation 1s infinite;
}
.container.loading3 .shape1 {
border-top-left-radius: 10px;
}
.container.loading3 .shape2 {
border-top-right-radius: 10px;
}
.container.loading3 .shape3 {
border-bottom-left-radius: 10px;
}
.container.loading3 .shape4 {
border-bottom-right-radius: 10px;
}
.container .shape {
position: absolute;
width: 10px;
height: 10px;
border-radius: 1px;
}
.container .shape.shape1 {
left: 0;
background-color: #1890FF;
}
.container .shape.shape2 {
right: 0;
background-color: #91CB74;
}
.container .shape.shape3 {
bottom: 0;
background-color: #FAC858;
}
.container .shape.shape4 {
bottom: 0;
right: 0;
background-color: #EE6666;
}
.loading3 .shape1 {
-webkit-animation: animation3shape1 0.5s ease 0s infinite alternate;
animation: animation3shape1 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation3shape1 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(5px, 5px);
transform: translate(5px, 5px);
}
}
@keyframes animation3shape1 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(5px, 5px);
transform: translate(5px, 5px);
}
}
.loading3 .shape2 {
-webkit-animation: animation3shape2 0.5s ease 0s infinite alternate;
animation: animation3shape2 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation3shape2 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-5px, 5px);
transform: translate(-5px, 5px);
}
}
@keyframes animation3shape2 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-5px, 5px);
transform: translate(-5px, 5px);
}
}
.loading3 .shape3 {
-webkit-animation: animation3shape3 0.5s ease 0s infinite alternate;
animation: animation3shape3 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation3shape3 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(5px, -5px);
transform: translate(5px, -5px);
}
}
@keyframes animation3shape3 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(5px, -5px);
transform: translate(5px, -5px);
}
}
.loading3 .shape4 {
-webkit-animation: animation3shape4 0.5s ease 0s infinite alternate;
animation: animation3shape4 0.5s ease 0s infinite alternate;
}
@-webkit-keyframes animation3shape4 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-5px, -5px);
transform: translate(-5px, -5px);
}
}
@keyframes animation3shape4 {
from {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
to {
-webkit-transform: translate(-5px, -5px);
transform: translate(-5px, -5px);
}
}
</style>

View File

@ -0,0 +1,222 @@
<template>
<view class="container loading5">
<view class="shape shape1"></view>
<view class="shape shape2"></view>
<view class="shape shape3"></view>
<view class="shape shape4"></view>
</view>
</template>
<script>
export default {
name: 'loading5',
data() {
return {
};
}
}
</script>
<style scoped="true">
.container {
width: 30px;
height: 30px;
position: relative;
}
.container.loading5 .shape {
width: 15px;
height: 15px;
}
.container .shape {
position: absolute;
width: 10px;
height: 10px;
border-radius: 1px;
}
.container .shape.shape1 {
left: 0;
background-color: #1890FF;
}
.container .shape.shape2 {
right: 0;
background-color: #91CB74;
}
.container .shape.shape3 {
bottom: 0;
background-color: #FAC858;
}
.container .shape.shape4 {
bottom: 0;
right: 0;
background-color: #EE6666;
}
.loading5 .shape1 {
animation: animation5shape1 2s ease 0s infinite reverse;
}
@-webkit-keyframes animation5shape1 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, 15px);
transform: translate(0, 15px);
}
50% {
-webkit-transform: translate(15px, 15px);
transform: translate(15px, 15px);
}
75% {
-webkit-transform: translate(15px, 0);
transform: translate(15px, 0);
}
}
@keyframes animation5shape1 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, 15px);
transform: translate(0, 15px);
}
50% {
-webkit-transform: translate(15px, 15px);
transform: translate(15px, 15px);
}
75% {
-webkit-transform: translate(15px, 0);
transform: translate(15px, 0);
}
}
.loading5 .shape2 {
animation: animation5shape2 2s ease 0s infinite reverse;
}
@-webkit-keyframes animation5shape2 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(-15px, 0);
transform: translate(-15px, 0);
}
50% {
-webkit-transform: translate(-15px, 15px);
transform: translate(-15px, 15px);
}
75% {
-webkit-transform: translate(0, 15px);
transform: translate(0, 15px);
}
}
@keyframes animation5shape2 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(-15px, 0);
transform: translate(-15px, 0);
}
50% {
-webkit-transform: translate(-15px, 15px);
transform: translate(-15px, 15px);
}
75% {
-webkit-transform: translate(0, 15px);
transform: translate(0, 15px);
}
}
.loading5 .shape3 {
animation: animation5shape3 2s ease 0s infinite reverse;
}
@-webkit-keyframes animation5shape3 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(15px, 0);
transform: translate(15px, 0);
}
50% {
-webkit-transform: translate(15px, -15px);
transform: translate(15px, -15px);
}
75% {
-webkit-transform: translate(0, -15px);
transform: translate(0, -15px);
}
}
@keyframes animation5shape3 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(15px, 0);
transform: translate(15px, 0);
}
50% {
-webkit-transform: translate(15px, -15px);
transform: translate(15px, -15px);
}
75% {
-webkit-transform: translate(0, -15px);
transform: translate(0, -15px);
}
}
.loading5 .shape4 {
animation: animation5shape4 2s ease 0s infinite reverse;
}
@-webkit-keyframes animation5shape4 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, -15px);
transform: translate(0, -15px);
}
50% {
-webkit-transform: translate(-15px, -15px);
transform: translate(-15px, -15px);
}
75% {
-webkit-transform: translate(-15px, 0);
transform: translate(-15px, 0);
}
}
@keyframes animation5shape4 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, -15px);
transform: translate(0, -15px);
}
50% {
-webkit-transform: translate(-15px, -15px);
transform: translate(-15px, -15px);
}
75% {
-webkit-transform: translate(-15px, 0);
transform: translate(-15px, 0);
}
}
</style>

View File

@ -0,0 +1,229 @@
<template>
<view class="container loading6">
<view class="shape shape1"></view>
<view class="shape shape2"></view>
<view class="shape shape3"></view>
<view class="shape shape4"></view>
</view>
</template>
<script>
export default {
name: 'loading6',
data() {
return {
};
}
}
</script>
<style scoped="true">
.container {
width: 30px;
height: 30px;
position: relative;
}
.container.loading6 {
-webkit-animation: rotation 1s infinite;
animation: rotation 1s infinite;
}
.container.loading6 .shape {
width: 12px;
height: 12px;
border-radius: 2px;
}
.container .shape {
position: absolute;
width: 10px;
height: 10px;
border-radius: 1px;
}
.container .shape.shape1 {
left: 0;
background-color: #1890FF;
}
.container .shape.shape2 {
right: 0;
background-color: #91CB74;
}
.container .shape.shape3 {
bottom: 0;
background-color: #FAC858;
}
.container .shape.shape4 {
bottom: 0;
right: 0;
background-color: #EE6666;
}
.loading6 .shape1 {
-webkit-animation: animation6shape1 2s linear 0s infinite normal;
animation: animation6shape1 2s linear 0s infinite normal;
}
@-webkit-keyframes animation6shape1 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, 18px);
transform: translate(0, 18px);
}
50% {
-webkit-transform: translate(18px, 18px);
transform: translate(18px, 18px);
}
75% {
-webkit-transform: translate(18px, 0);
transform: translate(18px, 0);
}
}
@keyframes animation6shape1 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, 18px);
transform: translate(0, 18px);
}
50% {
-webkit-transform: translate(18px, 18px);
transform: translate(18px, 18px);
}
75% {
-webkit-transform: translate(18px, 0);
transform: translate(18px, 0);
}
}
.loading6 .shape2 {
-webkit-animation: animation6shape2 2s linear 0s infinite normal;
animation: animation6shape2 2s linear 0s infinite normal;
}
@-webkit-keyframes animation6shape2 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(-18px, 0);
transform: translate(-18px, 0);
}
50% {
-webkit-transform: translate(-18px, 18px);
transform: translate(-18px, 18px);
}
75% {
-webkit-transform: translate(0, 18px);
transform: translate(0, 18px);
}
}
@keyframes animation6shape2 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(-18px, 0);
transform: translate(-18px, 0);
}
50% {
-webkit-transform: translate(-18px, 18px);
transform: translate(-18px, 18px);
}
75% {
-webkit-transform: translate(0, 18px);
transform: translate(0, 18px);
}
}
.loading6 .shape3 {
-webkit-animation: animation6shape3 2s linear 0s infinite normal;
animation: animation6shape3 2s linear 0s infinite normal;
}
@-webkit-keyframes animation6shape3 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(18px, 0);
transform: translate(18px, 0);
}
50% {
-webkit-transform: translate(18px, -18px);
transform: translate(18px, -18px);
}
75% {
-webkit-transform: translate(0, -18px);
transform: translate(0, -18px);
}
}
@keyframes animation6shape3 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(18px, 0);
transform: translate(18px, 0);
}
50% {
-webkit-transform: translate(18px, -18px);
transform: translate(18px, -18px);
}
75% {
-webkit-transform: translate(0, -18px);
transform: translate(0, -18px);
}
}
.loading6 .shape4 {
-webkit-animation: animation6shape4 2s linear 0s infinite normal;
animation: animation6shape4 2s linear 0s infinite normal;
}
@-webkit-keyframes animation6shape4 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, -18px);
transform: translate(0, -18px);
}
50% {
-webkit-transform: translate(-18px, -18px);
transform: translate(-18px, -18px);
}
75% {
-webkit-transform: translate(-18px, 0);
transform: translate(-18px, 0);
}
}
@keyframes animation6shape4 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
25% {
-webkit-transform: translate(0, -18px);
transform: translate(0, -18px);
}
50% {
-webkit-transform: translate(-18px, -18px);
transform: translate(-18px, -18px);
}
75% {
-webkit-transform: translate(-18px, 0);
transform: translate(-18px, 0);
}
}
</style>

View File

@ -0,0 +1,36 @@
<template>
<view>
<Loading1 v-if="loadingType==1"/>
<Loading2 v-if="loadingType==2"/>
<Loading3 v-if="loadingType==3"/>
<Loading4 v-if="loadingType==4"/>
<Loading5 v-if="loadingType==5"/>
</view>
</template>
<script>
import Loading1 from "./loading1.vue";
import Loading2 from "./loading2.vue";
import Loading3 from "./loading3.vue";
import Loading4 from "./loading4.vue";
import Loading5 from "./loading5.vue";
export default {
components:{Loading1,Loading2,Loading3,Loading4,Loading5},
name: 'qiun-loading',
props: {
loadingType: {
type: Number,
default: 2
},
},
data() {
return {
};
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,422 @@
/*
* uCharts®
* 高性能跨平台图表库支持H5、APP、小程序微信/支付宝/百度/头条/QQ/360、Vue、Taro等支持canvas的框架平台
* Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
* Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
* 复制使用请保留本段注释,感谢支持开源!
*
* uCharts®官方网站
* https://www.uCharts.cn
*
* 开源地址:
* https://gitee.com/uCharts/uCharts
*
* uni-app插件市场地址
* http://ext.dcloud.net.cn/plugin?id=271
*
*/
// 通用配置项
// 主题颜色配置如每个图表类型需要不同主题请在对应图表类型上更改color属性
const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
const cfe = {
//demotype为自定义图表类型
"type": ["pie", "ring", "rose", "funnel", "line", "column", "area", "radar", "gauge","candle","demotype"],
//增加自定义图表类型如果需要categories请在这里加入您的图表类型例如最后的"demotype"
"categories": ["line", "column", "area", "radar", "gauge", "candle","demotype"],
//instance为实例变量承载属性option为eopts承载属性不要删除
"instance": {},
"option": {},
//下面是自定义format配置因除H5端外的其他端无法通过props传递函数只能通过此属性对应下标的方式来替换
"formatter":{
"tooltipDemo1":function(res){
let result = ''
for (let i in res) {
if (i == 0) {
result += res[i].axisValueLabel + '年销售额'
}
let value = '--'
if (res[i].data !== null) {
value = res[i].data
}
// #ifdef H5
result += '\n' + res[i].seriesName + '' + value + ' 万元'
// #endif
// #ifdef APP-PLUS
result += '<br/>' + res[i].marker + res[i].seriesName + '' + value + ' 万元'
// #endif
}
return result;
},
legendFormat:function(name){
return "自定义图例+"+name;
},
yAxisFormatDemo:function (value, index) {
return value + '元';
},
seriesFormatDemo:function(res){
return res.name + '年' + res.value + '元';
}
},
//这里演示了自定义您的图表类型的option可以随意命名之后在组件上 type="demotype" 后组件会调用这个花括号里的option如果组件上还存在eopts参数会将demotype与eopts中option合并后渲染图表。
"demotype":{
"color": color,
//在这里填写echarts的option即可
},
//下面是自定义配置,请添加项目所需的通用配置
"column": {
"color": color,
"title": {
"text": ''
},
"tooltip": {
"trigger": 'axis'
},
"grid": {
"top": 30,
"bottom": 50,
"right": 15,
"left": 40
},
"legend": {
"bottom": 'left',
},
"toolbox": {
"show": false,
},
"xAxis": {
"type": 'category',
"axisLabel": {
"color": '#666666'
},
"axisLine": {
"lineStyle": {
"color": '#CCCCCC'
}
},
"boundaryGap": true,
"data": []
},
"yAxis": {
"type": 'value',
"axisTick": {
"show": false,
},
"axisLabel": {
"color": '#666666'
},
"axisLine": {
"lineStyle": {
"color": '#CCCCCC'
}
},
},
"seriesTemplate": {
"name": '',
"type": 'bar',
"data": [],
"barwidth": 20,
"label": {
"show": true,
"color": "#666666",
"position": 'top',
},
},
},
"line": {
"color": color,
"title": {
"text": ''
},
"tooltip": {
"trigger": 'axis'
},
"grid": {
"top": 30,
"bottom": 50,
"right": 15,
"left": 40
},
"legend": {
"bottom": 'left',
},
"toolbox": {
"show": false,
},
"xAxis": {
"type": 'category',
"axisLabel": {
"color": '#666666'
},
"axisLine": {
"lineStyle": {
"color": '#CCCCCC'
}
},
"boundaryGap": true,
"data": []
},
"yAxis": {
"type": 'value',
"axisTick": {
"show": false,
},
"axisLabel": {
"color": '#666666'
},
"axisLine": {
"lineStyle": {
"color": '#CCCCCC'
}
},
},
"seriesTemplate": {
"name": '',
"type": 'line',
"data": [],
"barwidth": 20,
"label": {
"show": true,
"color": "#666666",
"position": 'top',
},
},
},
"area": {
"color": color,
"title": {
"text": ''
},
"tooltip": {
"trigger": 'axis'
},
"grid": {
"top": 30,
"bottom": 50,
"right": 15,
"left": 40
},
"legend": {
"bottom": 'left',
},
"toolbox": {
"show": false,
},
"xAxis": {
"type": 'category',
"axisLabel": {
"color": '#666666'
},
"axisLine": {
"lineStyle": {
"color": '#CCCCCC'
}
},
"boundaryGap": true,
"data": []
},
"yAxis": {
"type": 'value',
"axisTick": {
"show": false,
},
"axisLabel": {
"color": '#666666'
},
"axisLine": {
"lineStyle": {
"color": '#CCCCCC'
}
},
},
"seriesTemplate": {
"name": '',
"type": 'line',
"data": [],
"areaStyle": {},
"label": {
"show": true,
"color": "#666666",
"position": 'top',
},
},
},
"pie": {
"color": color,
"title": {
"text": ''
},
"tooltip": {
"trigger": 'item'
},
"grid": {
"top": 40,
"bottom": 30,
"right": 15,
"left": 15
},
"legend": {
"bottom": 'left',
},
"seriesTemplate": {
"name": '',
"type": 'pie',
"data": [],
"radius": '50%',
"label": {
"show": true,
"color": "#666666",
"position": 'top',
},
},
},
"ring": {
"color": color,
"title": {
"text": ''
},
"tooltip": {
"trigger": 'item'
},
"grid": {
"top": 40,
"bottom": 30,
"right": 15,
"left": 15
},
"legend": {
"bottom": 'left',
},
"seriesTemplate": {
"name": '',
"type": 'pie',
"data": [],
"radius": ['40%', '70%'],
"avoidLabelOverlap": false,
"label": {
"show": true,
"color": "#666666",
"position": 'top',
},
"labelLine": {
"show": true
},
},
},
"rose": {
"color": color,
"title": {
"text": ''
},
"tooltip": {
"trigger": 'item'
},
"legend": {
"top": 'bottom'
},
"seriesTemplate": {
"name": '',
"type": 'pie',
"data": [],
"radius": "55%",
"center": ['50%', '50%'],
"roseType": 'area',
},
},
"funnel": {
"color": color,
"title": {
"text": ''
},
"tooltip": {
"trigger": 'item',
"formatter": "{b} : {c}%"
},
"legend": {
"top": 'bottom'
},
"seriesTemplate": {
"name": '',
"type": 'funnel',
"left": '10%',
"top": 60,
"bottom": 60,
"width": '80%',
"min": 0,
"max": 100,
"minSize": '0%',
"maxSize": '100%',
"sort": 'descending',
"gap": 2,
"label": {
"show": true,
"position": 'inside'
},
"labelLine": {
"length": 10,
"lineStyle": {
"width": 1,
"type": 'solid'
}
},
"itemStyle": {
"bordercolor": '#fff',
"borderwidth": 1
},
"emphasis": {
"label": {
"fontSize": 20
}
},
"data": [],
},
},
"gauge": {
"color": color,
"tooltip": {
"formatter": '{a} <br/>{b} : {c}%'
},
"seriesTemplate": {
"name": '业务指标',
"type": 'gauge',
"detail": {"formatter": '{value}%'},
"data": [{"value": 50, "name": '完成率'}]
},
},
"candle": {
"xAxis": {
"data": []
},
"yAxis": {},
"color": color,
"title": {
"text": ''
},
"dataZoom": [{
"type": 'inside',
"xAxisIndex": [0, 1],
"start": 10,
"end": 100
},
{
"show": true,
"xAxisIndex": [0, 1],
"type": 'slider',
"bottom": 10,
"start": 10,
"end": 100
}
],
"seriesTemplate": {
"name": '',
"type": 'k',
"data": [],
},
}
}
export default cfe;

View File

@ -0,0 +1,606 @@
/*
* uCharts®
* 高性能跨平台图表库支持H5、APP、小程序微信/支付宝/百度/头条/QQ/360、Vue、Taro等支持canvas的框架平台
* Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
* Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
* 复制使用请保留本段注释,感谢支持开源!
*
* uCharts®官方网站
* https://www.uCharts.cn
*
* 开源地址:
* https://gitee.com/uCharts/uCharts
*
* uni-app插件市场地址
* http://ext.dcloud.net.cn/plugin?id=271
*
*/
// 主题颜色配置如每个图表类型需要不同主题请在对应图表类型上更改color属性
const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
//事件转换函数主要用作格式化x轴为时间轴根据需求自行修改
const formatDateTime = (timeStamp, returnType)=>{
var date = new Date();
date.setTime(timeStamp * 1000);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
if(returnType == 'full'){return y + '-' + m + '-' + d + ' '+ h +':' + minute + ':' + second;}
if(returnType == 'y-m-d'){return y + '-' + m + '-' + d;}
if(returnType == 'h:m'){return h +':' + minute;}
if(returnType == 'h:m:s'){return h +':' + minute +':' + second;}
return [y, m, d, h, minute, second];
}
const cfu = {
//demotype为自定义图表类型一般不需要自定义图表类型只需要改根节点上对应的类型即可
"type":["pie","ring","rose","word","funnel","map","arcbar","line","column","mount","bar","area","radar","gauge","candle","mix","tline","tarea","scatter","bubble","demotype"],
"range":["饼状图","圆环图","玫瑰图","词云图","漏斗图","地图","圆弧进度条","折线图","柱状图","山峰图","条状图","区域图","雷达图","仪表盘","K线图","混合图","时间轴折线","时间轴区域","散点图","气泡图","自定义类型"],
//增加自定义图表类型如果需要categories请在这里加入您的图表类型例如最后的"demotype"
//自定义类型时需要注意"tline","tarea","scatter","bubble"等时间轴矢量x轴类图表没有categories不需要加入categories
"categories":["line","column","mount","bar","area","radar","gauge","candle","mix","demotype"],
//instance为实例变量承载属性不要删除
"instance":{},
//option为opts及eopts承载属性不要删除
"option":{},
//下面是自定义format配置因除H5端外的其他端无法通过props传递函数只能通过此属性对应下标的方式来替换
"formatter":{
"yAxisDemo1":function(val, index, opts){return val+'元'},
"yAxisDemo2":function(val, index, opts){return val.toFixed(2)},
"xAxisDemo1":function(val, index, opts){return val+'年';},
"xAxisDemo2":function(val, index, opts){return formatDateTime(val,'h:m')},
"seriesDemo1":function(val, index, series, opts){return val+'元'},
"tooltipDemo1":function(item, category, index, opts){
if(index==0){
return '随便用'+item.data+'年'
}else{
return '其他我没改'+item.data+'天'
}
},
"pieDemo":function(val, index, series, opts){
if(index !== undefined){
return series[index].name+''+series[index].data+'元'
}
},
},
//这里演示了自定义您的图表类型的option可以随意命名之后在组件上 type="demotype" 后组件会调用这个花括号里的option如果组件上还存在opts参数会将demotype与opts中option合并后渲染图表。
"demotype":{
//我这里把曲线图当做了自定义图表类型,您可以根据需要随意指定类型或配置
"type": "line",
"color": color,
"padding": [15,10,0,15],
"xAxis": {
"disableGrid": true,
},
"yAxis": {
"gridType": "dash",
"dashLength": 2,
},
"legend": {
},
"extra": {
"line": {
"type": "curve",
"width": 2
},
}
},
//下面是自定义配置,请添加项目所需的通用配置
"pie":{
"type": "pie",
"color": color,
"padding": [5,5,5,5],
"extra": {
"pie": {
"activeOpacity": 0.5,
"activeRadius": 10,
"offsetAngle": 0,
"labelWidth": 15,
"border": true,
"borderWidth": 3,
"borderColor": "#FFFFFF"
},
}
},
"ring":{
"type": "ring",
"color": color,
"padding": [5,5,5,5],
"rotate": false,
"dataLabel": true,
"legend": {
"show": true,
"position": "right",
"lineHeight": 25,
},
"title": {
"name": "收益率",
"fontSize": 15,
"color": "#666666"
},
"subtitle": {
"name": "70%",
"fontSize": 25,
"color": "#7cb5ec"
},
"extra": {
"ring": {
"ringWidth":30,
"activeOpacity": 0.5,
"activeRadius": 10,
"offsetAngle": 0,
"labelWidth": 15,
"border": true,
"borderWidth": 3,
"borderColor": "#FFFFFF"
},
},
},
"rose":{
"type": "rose",
"color": color,
"padding": [5,5,5,5],
"legend": {
"show": true,
"position": "left",
"lineHeight": 25,
},
"extra": {
"rose": {
"type": "area",
"minRadius": 50,
"activeOpacity": 0.5,
"activeRadius": 10,
"offsetAngle": 0,
"labelWidth": 15,
"border": false,
"borderWidth": 2,
"borderColor": "#FFFFFF"
},
}
},
"word":{
"type": "word",
"color": color,
"extra": {
"word": {
"type": "normal",
"autoColors": false
}
}
},
"funnel":{
"type": "funnel",
"color": color,
"padding": [15,15,0,15],
"extra": {
"funnel": {
"activeOpacity": 0.3,
"activeWidth": 10,
"border": true,
"borderWidth": 2,
"borderColor": "#FFFFFF",
"fillOpacity": 1,
"labelAlign": "right"
},
}
},
"map":{
"type": "map",
"color": color,
"padding": [0,0,0,0],
"dataLabel": true,
"extra": {
"map": {
"border": true,
"borderWidth": 1,
"borderColor": "#666666",
"fillOpacity": 0.6,
"activeBorderColor": "#F04864",
"activeFillColor": "#FACC14",
"activeFillOpacity": 1
},
}
},
"arcbar":{
"type": "arcbar",
"color": color,
"title": {
"name": "百分比",
"fontSize": 25,
"color": "#00FF00"
},
"subtitle": {
"name": "默认标题",
"fontSize": 15,
"color": "#666666"
},
"extra": {
"arcbar": {
"type": "default",
"width": 12,
"backgroundColor": "#E9E9E9",
"startAngle": 0.75,
"endAngle": 0.25,
"gap": 2
}
}
},
"line":{
"type": "line",
"color": color,
"padding": [15,10,0,15],
"xAxis": {
"disableGrid": true,
},
"yAxis": {
"gridType": "dash",
"dashLength": 2,
},
"legend": {
},
"extra": {
"line": {
"type": "straight",
"width": 2,
"activeType": "hollow"
},
}
},
"tline":{
"type": "line",
"color": color,
"padding": [15,10,0,15],
"xAxis": {
"disableGrid": false,
"boundaryGap":"justify",
},
"yAxis": {
"gridType": "dash",
"dashLength": 2,
"data":[
{
"min":0,
"max":80
}
]
},
"legend": {
},
"extra": {
"line": {
"type": "curve",
"width": 2,
"activeType": "hollow"
},
}
},
"tarea":{
"type": "area",
"color": color,
"padding": [15,10,0,15],
"xAxis": {
"disableGrid": true,
"boundaryGap":"justify",
},
"yAxis": {
"gridType": "dash",
"dashLength": 2,
"data":[
{
"min":0,
"max":80
}
]
},
"legend": {
},
"extra": {
"area": {
"type": "curve",
"opacity": 0.2,
"addLine": true,
"width": 2,
"gradient": true,
"activeType": "hollow"
},
}
},
"column":{
"type": "column",
"color": color,
"padding": [15,15,0,5],
"xAxis": {
"disableGrid": true,
},
"yAxis": {
"data":[{"min":0}]
},
"legend": {
},
"extra": {
"column": {
"type": "group",
"width": 30,
"activeBgColor": "#000000",
"activeBgOpacity": 0.08
},
}
},
"mount":{
"type": "mount",
"color": color,
"padding": [15,15,0,5],
"xAxis": {
"disableGrid": true,
},
"yAxis": {
"data":[{"min":0}]
},
"legend": {
},
"extra": {
"mount": {
"type": "mount",
"widthRatio": 1.5,
},
}
},
"bar":{
"type": "bar",
"color": color,
"padding": [15,30,0,5],
"xAxis": {
"boundaryGap":"justify",
"disableGrid":false,
"min":0,
"axisLine":false
},
"yAxis": {
},
"legend": {
},
"extra": {
"bar": {
"type": "group",
"width": 30,
"meterBorde": 1,
"meterFillColor": "#FFFFFF",
"activeBgColor": "#000000",
"activeBgOpacity": 0.08
},
}
},
"area":{
"type": "area",
"color": color,
"padding": [15,15,0,15],
"xAxis": {
"disableGrid": true,
},
"yAxis": {
"gridType": "dash",
"dashLength": 2,
},
"legend": {
},
"extra": {
"area": {
"type": "straight",
"opacity": 0.2,
"addLine": true,
"width": 2,
"gradient": false,
"activeType": "hollow"
},
}
},
"radar":{
"type": "radar",
"color": color,
"padding": [5,5,5,5],
"dataLabel": false,
"legend": {
"show": true,
"position": "right",
"lineHeight": 25,
},
"extra": {
"radar": {
"gridType": "radar",
"gridColor": "#CCCCCC",
"gridCount": 3,
"opacity": 0.2,
"max": 200,
"labelShow": true
},
}
},
"gauge":{
"type": "gauge",
"color": color,
"title": {
"name": "66Km/H",
"fontSize": 25,
"color": "#2fc25b",
"offsetY": 50
},
"subtitle": {
"name": "实时速度",
"fontSize": 15,
"color": "#1890ff",
"offsetY": -50
},
"extra": {
"gauge": {
"type": "default",
"width": 30,
"labelColor": "#666666",
"startAngle": 0.75,
"endAngle": 0.25,
"startNumber": 0,
"endNumber": 100,
"labelFormat": "",
"splitLine": {
"fixRadius": 0,
"splitNumber": 10,
"width": 30,
"color": "#FFFFFF",
"childNumber": 5,
"childWidth": 12
},
"pointer": {
"width": 24,
"color": "auto"
}
}
}
},
"candle":{
"type": "candle",
"color": color,
"padding": [15,15,0,15],
"enableScroll": true,
"enableMarkLine": true,
"dataLabel": false,
"xAxis": {
"labelCount": 4,
"itemCount": 40,
"disableGrid": true,
"gridColor": "#CCCCCC",
"gridType": "solid",
"dashLength": 4,
"scrollShow": true,
"scrollAlign": "left",
"scrollColor": "#A6A6A6",
"scrollBackgroundColor": "#EFEBEF"
},
"yAxis": {
},
"legend": {
},
"extra": {
"candle": {
"color": {
"upLine": "#f04864",
"upFill": "#f04864",
"downLine": "#2fc25b",
"downFill": "#2fc25b"
},
"average": {
"show": true,
"name": ["MA5","MA10","MA30"],
"day": [5,10,20],
"color": ["#1890ff","#2fc25b","#facc14"]
}
},
"markLine": {
"type": "dash",
"dashLength": 5,
"data": [
{
"value": 2150,
"lineColor": "#f04864",
"showLabel": true
},
{
"value": 2350,
"lineColor": "#f04864",
"showLabel": true
}
]
}
}
},
"mix":{
"type": "mix",
"color": color,
"padding": [15,15,0,15],
"xAxis": {
"disableGrid": true,
},
"yAxis": {
"disabled": false,
"disableGrid": false,
"splitNumber": 5,
"gridType": "dash",
"dashLength": 4,
"gridColor": "#CCCCCC",
"padding": 10,
"showTitle": true,
"data": []
},
"legend": {
},
"extra": {
"mix": {
"column": {
"width": 20
}
},
}
},
"scatter":{
"type": "scatter",
"color":color,
"padding":[15,15,0,15],
"dataLabel":false,
"xAxis": {
"disableGrid": false,
"gridType":"dash",
"splitNumber":5,
"boundaryGap":"justify",
"min":0
},
"yAxis": {
"disableGrid": false,
"gridType":"dash",
},
"legend": {
},
"extra": {
"scatter": {
},
}
},
"bubble":{
"type": "bubble",
"color":color,
"padding":[15,15,0,15],
"xAxis": {
"disableGrid": false,
"gridType":"dash",
"splitNumber":5,
"boundaryGap":"justify",
"min":0,
"max":250
},
"yAxis": {
"disableGrid": false,
"gridType":"dash",
"data":[{
"min":0,
"max":150
}]
},
"legend": {
},
"extra": {
"bubble": {
"border":2,
"opacity": 0.5,
},
}
}
}
export default cfu;

View File

@ -0,0 +1,5 @@
# uCharts JSSDK说明
1、如不使用uCharts组件可直接引用u-charts.js打包编译后会`自动压缩`,压缩后体积约为`120kb`
2、如果120kb的体积仍需压缩请手到uCharts官网通过在线定制选择您需要的图表。
3、config-ucharts.js为uCharts组件的用户配置文件升级前请`自行备份config-ucharts.js`文件,以免被强制覆盖。
4、config-echarts.js为ECharts组件的用户配置文件升级前请`自行备份config-echarts.js`文件,以免被强制覆盖。

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -0,0 +1,80 @@
{
"id": "qiun-data-charts",
"displayName": "秋云 ucharts echarts 高性能跨全端图表组件",
"version": "2.5.0-20230101",
"description": "uCharts 新增正负柱状图支持H5及APP用 ucharts echarts 渲染图表uniapp可视化首选组件",
"keywords": [
"ucharts",
"echarts",
"f2",
"图表",
"可视化"
],
"repository": "https://gitee.com/uCharts/uCharts",
"engines": {
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": "474119"
},
"declaration": {
"ads": "无",
"data": "插件不采集任何数据",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/~qiun",
"type": "component-vue"
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "y",
"联盟": "y"
},
"Vue": {
"vue2": "y",
"vue3": "y"
}
}
}
}
}

View File

@ -0,0 +1,84 @@
![logo](https://img-blog.csdnimg.cn/4a276226973841468c1be356f8d9438b.png)
[![star](https://gitee.com/uCharts/uCharts/badge/star.svg?theme=gvp)](https://gitee.com/uCharts/uCharts/stargazers)
[![fork](https://gitee.com/uCharts/uCharts/badge/fork.svg?theme=gvp)](https://gitee.com/uCharts/uCharts/members)
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
[![npm package](https://img.shields.io/npm/v/@qiun/ucharts.svg?style=flat-square)](https://www.npmjs.com/~qiun)
## uCharts简介
`uCharts`是一款基于`canvas API`开发的适用于所有前端应用的图表库,开发者编写一套代码,可运行到 Web、iOS、Android基于 uni-app / taro )、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等更多支持 canvas API 的平台。
## 官方网站
## [https://www.ucharts.cn](https://www.ucharts.cn)
## 快速体验
一套代码编到多个平台依次扫描二维码亲自体验uCharts图表跨平台效果其他平台请自行编译。
![](https://www.ucharts.cn/images/web/guide/qrcode20220224.png)
![](https://img-blog.csdnimg.cn/7d0115593ff24ac39a224fb7c6ed72a4.png)
## 致开发者
感谢各位开发者`五年`来对秋云及uCharts的支持uCharts的进步离不开各位开发者的鼓励与贡献。为更好的帮助各位开发者使用图表工具我们推出了新版官网增加了在线定制、问答社区、在线配置等一些增值服务为确保您能更好的应用图表组件建议您先`仔细阅读官网指南`以及`常见问题`,而不是下载下来`直接使用`。如仍然不能解决,请到`官网社区`或开通会员后加入`专属VIP会员群`提问将会很快得到回答。
## 视频教程
## [uCharts新手入门教程](https://www.bilibili.com/video/BV1qA411Q7se/?share_source=copy_web&vd_source=42a1242f9aaade6427736af69eb2e1d9)
## 社群支持
uCharts官方拥有5个2000人的QQ群及专属VIP会员群支持庞大的用户量证明我们一直在努力请各位放心使用uCharts的开源图表组件的开发团队付出了大量的时间与精力经过四来的考验不会有比较明显的bug请各位放心使用。如果您有更好的想法可以在`码云提交Pull Requests`以帮助更多开发者完成需求再次感谢各位对uCharts的鼓励与支持
#### 官方交流群
- 交流群1371774600已满
- 交流群2619841586已满
- 交流群3955340127已满
- 交流群4641669795已满
- 交流群5236294809只能扫码加入
![](https://www.ucharts.cn/images/web/qq5.jpg)
- 口令`uniapp`
#### 专属VIP会员群
- 开通会员后详见【账号详情】页面中顶部的滚动通知
- 口令`您的用户ID`
## 版权信息
uCharts始终坚持开源遵循 [Apache Licence 2.0](https://www.apache.org/licenses/LICENSE-2.0.html) 开源协议意味着您无需支付任何费用即可将uCharts应用到您的产品中。
注意这并不意味着您可以将uCharts应用到非法的领域比如涉及赌博暴力等方面。如因此产生纠纷或法律问题uCharts相关方及秋云科技不承担任何责任。
## 合作伙伴
[![DIY官网](https://www.ucharts.cn/images/web/guide/links/diy-gw.png)](https://www.diygw.com/)
[![HasChat](https://www.ucharts.cn/images/web/guide/links/haschat.png)](https://gitee.com/howcode/has-chat)
[![uViewUI](https://www.ucharts.cn/images/web/guide/links/uView.png)](https://www.uviewui.com/)
[![图鸟UI](https://www.ucharts.cn/images/web/guide/links/tuniao.png)](https://ext.dcloud.net.cn/plugin?id=7088)
[![thorui](https://www.ucharts.cn/images/web/guide/links/thorui.png)](https://ext.dcloud.net.cn/publisher?id=202)
[![FirstUI](https://www.ucharts.cn/images/web/guide/links/first.png)](https://www.firstui.cn/)
[![nProUI](https://www.ucharts.cn/images/web/guide/links/nPro.png)](https://ext.dcloud.net.cn/plugin?id=5169)
[![GraceUI](https://www.ucharts.cn/images/web/guide/links/grace.png)](https://www.graceui.com/)
## 更新记录
详见官网指南中说明,[点击此处查看](https://www.ucharts.cn/v2/#/guide/index?id=100)
## 相关链接
- [uCharts官网](https://www.ucharts.cn)
- [DCloud插件市场地址](https://ext.dcloud.net.cn/plugin?id=271)
- [uCharts码云开源托管地址](https://gitee.com/uCharts/uCharts) [![star](https://gitee.com/uCharts/uCharts/badge/star.svg?theme=gvp)](https://gitee.com/uCharts/uCharts/stargazers)
- [uCharts npm开源地址](https://www.ucharts.cn)
- [ECharts官网](https://echarts.apache.org/zh/index.html)
- [ECharts配置手册](https://echarts.apache.org/zh/option.html)
- [图表组件在项目中的应用 ReportPlus数据报表](https://www.ucharts.cn/v2/#/layout/info?id=1)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -211,7 +211,6 @@ export default {
// #endif
},
init() {
console.log(1111,this.list);
// 如果没有数据的时候多处报未定义
if (!this.list || this.list.length == 0){
return