9.20 大屏重构页面

main
shilei 1 month ago
parent e6b7571e14
commit 21d28d6933

@ -3,7 +3,7 @@ ENV = development
# 本地环境接口地址
# VITE_API_URL = http://localhost:5034
VITE_API_URL = http://192.168.2.7:5036
VITE_API_URL = http://192.168.2.7:5034
# VITE_API_URL = http://192.168.2.13:5036
# VITE_API_URL = http://33055a1c.r11.cpolar.top
# VITE_API_URL = http://192.168.2.17:5034

@ -4,5 +4,5 @@ window.__env__ = {
"VITE_OPEN_CDN": "false",
"VITE_PUBLIC_PATH": "",
"VITE_SM_PUBLIC_KEY": "0484C7466D950E120E5ECE5DD85D0C90EAA85081A3A2BD7C57AE6DC822EFCCBD66620C67B0103FC8DD280E36C3B282977B722AAEC3C56518EDCEBAFB72C5A05312",
"VITE_API_URL": "http://192.168.2.7:5036"
"VITE_API_URL": "http://192.168.2.7:5034"
}

@ -74,4 +74,5 @@ export * from './apis/sys-battery-log-api';
export * from './apis/sys-equip-alarm-log-api';
export * from './apis/sys-equipinfo-api';
export * from './apis/sys-bty-mode-info-api';
export * from './apis/sys-charg-capacity-api';

@ -0,0 +1,560 @@
/* tslint:disable */
/* eslint-disable */
/**
*
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AdminResultSysUser } from '../models';
import { PageEmeterDayEnergyInput } from '../models';
/**
* SysChargCapacityApi - axios parameter creator
* @export
*/
export const SysChargCapacityApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary 🔖
* @param {PageEmeterDayEnergyInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiTEgEmeterTotalEnergyValuePageGet: async (body?: PageEmeterDayEnergyInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/Home/GetElectricityConsumption`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions: AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options };
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary 🔖
* @param {PageEmeterDayEnergyInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiGetAllEmeterEnergyChangeGet: async (body?: PageEmeterDayEnergyInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/Home/GetElectricityChargerNoConsumption`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions: AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options };
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiGetGetTodayMinutelyElectricalData: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/Ammeter/GetTodayMinutelyElectricalData`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions: AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options };
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiGetLastDayMeterData: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/Ammeter/GetLastDayMeterData`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions: AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options };
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* * @param {Array<number>} [body]
* @throws {RequiredError}
*/
apiBatchDeleteTEgEmeterTotalEnergyValuePost: async (body?: Array<number>, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/Ammeter/TEgEmeterTotalEnergyValue/BatchDelete`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions: AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options };
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiDeleteTEgEmeterTotalEnergyValueGet: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `api/Ammeter/TEgEmeterTotalEnergyValue/{id}`
.replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions: AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options };
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
}
}
export const SysChargCapacityApiFp = function (configuration?: Configuration) {
return {
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @param {PageEmeterDayEnergyInput} [body]
*
*/
async apiTEgEmeterTotalEnergyValuePageGet(body?: PageEmeterDayEnergyInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargCapacityApiAxiosParamCreator(configuration).apiTEgEmeterTotalEnergyValuePageGet(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url };
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary 🔖
* @param {PageEmeterDayEnergyInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiGetAllEmeterEnergyChangeGet(body?: PageEmeterDayEnergyInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargCapacityApiAxiosParamCreator(configuration).apiGetAllEmeterEnergyChangeGet(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url };
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiGetGetTodayMinutelyElectricalData(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargCapacityApiAxiosParamCreator(configuration).apiGetGetTodayMinutelyElectricalData(options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url };
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiGetLastDayMeterData(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargCapacityApiAxiosParamCreator(configuration).apiGetLastDayMeterData(options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url };
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiBatchDeleteTEgEmeterTotalEnergyValuePost(body?: Array<number>, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargCapacityApiAxiosParamCreator(configuration).apiBatchDeleteTEgEmeterTotalEnergyValuePost(body, options);
const second_url = 'http://192.168.2.3:5034'
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url };
return axios.request(axiosRequestArgs);
};
},
/**
* *
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiDeleteTEgEmeterTotalEnergyValueGet(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargCapacityApiAxiosParamCreator(configuration).apiDeleteTEgEmeterTotalEnergyValueGet(id, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url };
return axios.request(axiosRequestArgs);
};
},
}
}
export const SysChargCapacityFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* * @param {PageEmeterDayEnergyInput} [body]
*/
async apiTEgEmeterTotalEnergyValuePageGet(body?: PageEmeterDayEnergyInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(configuration).apiTEgEmeterTotalEnergyValuePageGet(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary 🔖
* @param {PageEmeterDayEnergyInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiGetAllEmeterEnergyChangeGet(body?: PageEmeterDayEnergyInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(configuration).apiGetAllEmeterEnergyChangeGet(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiGetGetTodayMinutelyElectricalData(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(configuration).apiGetGetTodayMinutelyElectricalData(options).then((request) => request(axios, basePath));
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiGetLastDayMeterData(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(configuration).apiGetLastDayMeterData(options).then((request) => request(axios, basePath));
},
/**
*
* @summary 🔖
* @param {Array<number>} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiBatchDeleteTEgEmeterTotalEnergyValuePost(body?: Array<number>, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(configuration).apiBatchDeleteTEgEmeterTotalEnergyValuePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiDeleteTEgEmeterTotalEnergyValueGet(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(configuration).apiDeleteTEgEmeterTotalEnergyValueGet(id, options).then((request) => request(axios, basePath));
},
}
}
/**
* SysUserApi - object-oriented interface
* @export
* @class SysUserApi
* @extends {BaseAPI}
*/
export class SysChargCapacityApi extends BaseAPI {
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysChargCapacityApi
* * @param {PageEmeterDayEnergyInput} [body]
*/
public async apiTEgEmeterTotalEnergyValuePageGet(body?: PageEmeterDayEnergyInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(this.configuration).apiTEgEmeterTotalEnergyValuePageGet(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary 🔖
* @param {PageEmeterDayEnergyInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysChargCapacityApi
*/
public async apiGetAllEmeterEnergyChangeGet(body: PageEmeterDayEnergyInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(this.configuration).apiGetAllEmeterEnergyChangeGet(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysChargCapacityApi
*/
public async apiGetGetTodayMinutelyElectricalData(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(this.configuration).apiGetGetTodayMinutelyElectricalData(options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysChargCapacityApi
*/
public async apiGetLastDayMeterData(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(this.configuration).apiGetLastDayMeterData(options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary 🔖
* @param {Array<number>} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysChargCapacityApi
*/
public async apiBatchDeleteTEgEmeterTotalEnergyValuePost(body?: Array<number>, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(this.configuration).apiBatchDeleteTEgEmeterTotalEnergyValuePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary 🔖 // 接口后面直接跟参数
* @param {string} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysMonitorApi
*/
public async apiDeleteTEgEmeterTotalEnergyValueGet(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
return SysChargCapacityApiFp(this.configuration).apiDeleteTEgEmeterTotalEnergyValueGet(id, options).then((request) => request(this.axios, this.basePath));
}
}

@ -1050,7 +1050,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
*/
async apiSendPowerRegulationGet(code: string, power: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiSendPowerRegulationGet(code, power, options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1082,7 +1082,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
*/
async apiGetChargerCodeListGET(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiGetChargerCodeListGET(options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1113,7 +1113,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
*/
async apiSetStartChargeByBinNoGet(binNo: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiSetStartChargeByBinNoGet(binNo, options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1129,7 +1129,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
*/
async apiSetStopChargeByBinNoGet(binNo: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiSetStopChargeByBinNoGet(binNo, options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1160,7 +1160,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
*/
async apiDistributeElecPriceForChargeGet(ceid: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiDistributeElecPriceForChargeGet(ceid, options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1176,7 +1176,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
*/
async apiChargerSendAuthGet(code: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiChargerSendAuthGet(code, options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1193,7 +1193,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
async apiGetBattPerStatusCountGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiGetBattPerStatusCountGet(options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1210,7 +1210,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
async apiBatteryStatusInfoGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiBatteryStatusInfoGet(options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };
@ -1227,7 +1227,7 @@ export const SysChargeMonitorApiFp = function (configuration?: Configuration) {
async apiGetChargMonitorChargBinData(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysUser>>> {
const localVarAxiosArgs = await SysChargeMonitorApiAxiosParamCreator(configuration).apiGetChargMonitorChargBinData(options);
const second_url = 'http://localhost:5035'
const second_url = 'http://192.168.2.7:5035'
return (axios: AxiosInstance = globalAxios, basePath: string = second_url) => {
const axiosRequestArgs: AxiosRequestConfig = { ...localVarAxiosArgs.options, url: second_url + localVarAxiosArgs.url };

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -249,7 +249,7 @@ export default {
noBattery: "无电池",
disabled: "禁用",
chargingCompleted: "充电完成",
chargerConnectionStatus: "充电机连接状态",
chargerConnectionStatus: "充电机状态",
connected: "已连接",
disconnected: "未连接",
chargingTime: "充电时间",

@ -10,7 +10,55 @@ import { defineStore } from 'pinia';
*/
export const useThemeConfig = defineStore('themeConfig', {
state: (): ThemeConfigState => ({
themeConfig: { "isDrawer": false, "primary": "#131a1f", "isIsDark": false, "topBar": "#131a1f", "topBarColor": "#28353f", "isTopBarColorGradual": false, "menuBar": "#131a1f", "menuBarColor": "#FFFFFF", "menuBarActiveColor": "var(--el-color-primary-light-7)", "isMenuBarColorGradual": false, "columnsMenuBar": "#2C3A49", "columnsMenuBarColor": "#F0F0F0", "isColumnsMenuBarColorGradual": false, "isColumnsMenuHoverPreload": false, "isCollapse": false, "isUniqueOpened": true, "isFixedHeader": true, "isFixedHeaderChange": false, "isClassicSplitMenu": false, "isLockScreen": false, "lockScreenTime": 300, "isShowLogo": true, "isShowLogoChange": false, "isBreadcrumb": true, "isTagsview": true, "isBreadcrumbIcon": false, "isTagsviewIcon": false, "isCacheTagsView": false, "isSortableTagsView": true, "isShareTagsView": false, "isFooter": true, "isGrayscale": false, "isInvert": false, "isWatermark": false, "watermarkText": "青拓", "tagsStyle": "tags-style-one", "animation": "fadeLeft", "columnsAsideStyle": "columns-round", "columnsAsideLayout": "columns-vertical", "layout": "defaults", "isRequestRoutes": true, "globalTitle": "青拓", "globalViceTitle": "青拓", "globalViceTitleMsg": "换电站", "copyright": "----", "globalI18n": "zh-cn", "globalComponentSize": "small" }
themeConfig: {
"isDrawer": false,
"primary": "#131a1f",
"isIsDark": false,
"topBar": "#131a1f",
"topBarColor": "#28353f",
"isTopBarColorGradual": false,
"menuBar": "#131a1f",
"menuBarColor": "#FFFFFF",
"menuBarActiveColor": "var(--el-color-primary-light-7)",
"isMenuBarColorGradual": false,
"columnsMenuBar": "#2C3A49",
"columnsMenuBarColor": "#F0F0F0",
"isColumnsMenuBarColorGradual": false,
"isColumnsMenuHoverPreload": false,
"isCollapse": false,
"isUniqueOpened": true,
"isFixedHeader": true,
"isFixedHeaderChange": false,
"isClassicSplitMenu": false,
"isLockScreen": false,
"lockScreenTime": 300,
"isShowLogo": true,
"isShowLogoChange": false,
"isBreadcrumb": true,
"isTagsview": true,
"isBreadcrumbIcon": false,
"isTagsviewIcon": false,
"isCacheTagsView": false,
"isSortableTagsView": true,
"isShareTagsView": false,
"isFooter": false,
"isGrayscale": false,
"isInvert": false,
"isWatermark": false,
"watermarkText": "青拓",
"tagsStyle": "tags-style-one",
"animation": "fadeLeft",
"columnsAsideStyle": "columns-round",
"columnsAsideLayout": "columns-vertical",
"layout": "defaults",
"isRequestRoutes": true,
"globalTitle": "青拓",
"globalViceTitle": "青拓",
"globalViceTitleMsg": "换电站",
"copyright": "----",
"globalI18n": "zh-cn",
"globalComponentSize": "small"
}
}),
actions: {
setThemeConfig(data: ThemeConfigState) {

@ -1,6 +1,6 @@
<template>
<div v-loading="put_loading" :element-loading-text="$t('message.warehouses.Transfer_in_warehouse')">
<el-row class="ac-list" :gutter="40" type="flex" justify="center">
<el-row class="ac-list" type="flex" justify="center">
<el-col :span="10">
<div class="ac">
<!-- -->
@ -125,10 +125,13 @@ const handle_drawer = async () => {
}
.ac {
border: 1px solid white;
padding: 10px 0;
// border: 1px solid white;
border-radius: 10px;
margin-bottom: 30px;
background-color: white;
// background-color: white;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
color: #fff;
}
.ac .info {
@ -161,7 +164,7 @@ const handle_drawer = async () => {
}
.down_btn {
background: #1b1f83;
background: #131a1f;
color: #fff;
}

@ -15,7 +15,6 @@
.title_tops .top_kuang {
width: 100%;
height: 80px;
filter: drop-shadow(2px 2px 2px #ccc);
}
.title_tops .left_imgs_posi {
height: 100%;
@ -30,8 +29,13 @@
.title_tops .left_imgs_posi span:first-child {
width: 270px;
height: 40px;
background: url('../../../assets/imgs/充电数据监控大屏.png') no-repeat center;
background-size: 100% 100%;
font-size: 30px;
font-weight: bold;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
background-clip: text;
-webkit-text-fill-color: transparent;
font-family: emoji;
font-style: italic;
}
.title_tops .left_imgs_posi span:last-child {
color: #1f34d5;
@ -41,7 +45,7 @@
}
.bot_main {
height: calc(100% - 60px);
padding: 10px 0;
padding: 10px 0 0 0;
box-sizing: border-box;
}
.bot_main .el-col {
@ -55,9 +59,9 @@
flex-direction: column;
}
.bot_main .left_hinge > div {
background: #fff;
box-shadow: 2px 2px 2px #ccc;
background: #28353f;
border-radius: 5px;
color: #fff;
}
.bot_main .left_hinge > div:first-child {
flex: 1;
@ -93,44 +97,29 @@
.bot_main .left_hinge .batter_dates {
margin-top: 10px;
flex: 1;
display: flex;
flex-direction: column;
}
.bot_main .left_hinge .batter_dates > div {
flex: 1;
padding: 5px;
box-sizing: border-box;
.bot_main .left_hinge .batter_dates .allow_infos {
display: flex;
}
.bot_main .left_hinge .batter_dates > div > div {
.bot_main .left_hinge .batter_dates .allow_infos > div {
flex: 1;
height: 100%;
}
.bot_main .left_hinge .batter_dates > div .allow_big {
display: flex;
flex-direction: column;
align-items: start;
justify-content: space-evenly;
}
.bot_main .left_hinge .batter_dates > div .allow_big > div {
margin: 0 5px;
height: 80px;
background: url('../../../assets/imgs/sort_three.png') no-repeat center;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
}
.bot_main .left_hinge .batter_dates > div .allow_big > div span:first-child {
width: 10px;
height: 10px;
border: 1px solid #1c3dc2;
}
.bot_main .left_hinge .batter_dates > div .allow_big > div span:last-child {
margin-left: 5px;
font-size: 14px;
}
.bot_main .left_hinge .batter_dates > div .allow_big > span {
margin-left: 15px;
.bot_main .left_hinge .batter_dates .allow_infos > div:last-child {
background: url('../../../assets/imgs/sort_two.png') no-repeat center;
background-size: 100% 100%;
}
.bot_main .left_hinge .batter_dates > div:nth-child(1),
.bot_main .left_hinge .batter_dates > div:nth-child(2) {
border-bottom: 1px solid #ccc;
.bot_main .left_hinge .batter_dates .echarts_battery {
margin-top: 10px;
height: calc(100% - 90px);
padding: 10px;
box-sizing: border-box;
}
.bot_main .left_hinge .batter_charts {
padding: 10px;
@ -142,10 +131,7 @@
height: 100%;
}
.bot_main .hinge_topsdates {
height: 35px;
background: #1c3dc2;
border-radius: 5px;
padding-left: 10px;
padding-left: 5px;
font-size: 12px;
display: flex;
align-items: center;
@ -155,8 +141,7 @@
font-size: 20px !important;
}
.bot_main .strategy_center {
background: #fff;
box-shadow: 2px 2px 2px #ccc;
background: #28353f;
border-radius: 5px;
padding: 5px 10px 5px 10px;
box-sizing: border-box;
@ -228,7 +213,7 @@
margin-left: 10px;
font-size: 25px;
font-weight: bold;
color: black;
color: #fff;
letter-spacing: 2px;
}
.bot_main .strategy_center .strategy_soc i {
@ -267,23 +252,22 @@
}
}
.bot_main .strategy_center .center_table {
margin-top: 10px;
flex: 1;
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
overflow: hidden;
overflow-y: scroll;
padding-bottom: 5px;
box-sizing: border-box;
}
.bot_main .strategy_center .center_table > div {
width: 32%;
height: 50%;
background: #edeef0;
width: 24%;
height: 49%;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
border-radius: 8px;
padding: 10px 10px;
box-sizing: border-box;
font-size: 12px;
color: #000;
color: #fff;
margin: 5px;
}
.bot_main .strategy_center .center_table > div .title {

@ -18,7 +18,7 @@
.top_kuang {
width: 100%;
height: 80px;
filter: drop-shadow(2px 2px 2px #ccc);
// filter: drop-shadow(2px 2px 2px #ccc);
}
.left_imgs_posi {
@ -34,8 +34,13 @@
span:first-child {
width: 270px;
height: 40px;
background: url('../../../assets/imgs/充电数据监控大屏.png')no-repeat center;
background-size: 100% 100%;
font-size: 30px;
font-weight: bold;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
background-clip: text;
-webkit-text-fill-color: transparent;
font-family: emoji;
font-style: italic;
}
span:last-child {
@ -51,7 +56,7 @@
.bot_main {
// margin-top: 10px;
height: calc(100% - 60px);
padding: 10px 0;
padding: 10px 0 0 0;
box-sizing: border-box;
.el-col {
@ -68,9 +73,10 @@
flex-direction: column;
>div {
background: #fff;
box-shadow: 2px 2px 2px #ccc;
background: #28353f;
// box-shadow: 2px 2px 2px #ccc;
border-radius: 5px;
color: #fff;
}
>div:first-child {
@ -115,54 +121,35 @@
.batter_dates {
margin-top: 10px;
flex: 1;
// background: #1c3dc2;
display: flex;
flex-direction: column;
>div {
flex: 1;
padding: 5px;
box-sizing: border-box;
// display: flex;
.allow_infos {
display: flex;
>div {
flex: 1;
height: 100%;
}
.allow_big {
margin: 0 5px;
height: 80px;
background: url('../../../assets/imgs/sort_three.png')no-repeat center;
background-size: 100% 100%;
display: flex;
flex-direction: column;
align-items: start;
justify-content: space-evenly;
>div {
display: flex;
align-items: center;
span:first-child {
width: 10px;
height: 10px;
border: 1px solid #1c3dc2;
}
span:last-child {
margin-left: 5px;
font-size: 14px;
}
}
>span {
margin-left: 15px;
}
align-items: center;
justify-content: center;
}
>div:last-child {
background: url('../../../assets/imgs/sort_two.png')no-repeat center;
background-size: 100% 100%;
}
}
>div:nth-child(1),
>div:nth-child(2) {
border-bottom: 1px solid #ccc;
.echarts_battery {
margin-top: 10px;
height: calc(100% - 90px);
padding: 10px;
box-sizing: border-box;
}
}
.batter_charts {
@ -179,10 +166,10 @@
}
.hinge_topsdates {
height: 35px;
background: #1c3dc2;
border-radius: 5px;
padding-left: 10px;
// height: 35px;
// background: #1c3dc2;
// border-radius: 5px;
padding-left: 5px;
font-size: 12px;
display: flex;
align-items: center;
@ -195,8 +182,8 @@
}
.strategy_center {
background: #fff;
box-shadow: 2px 2px 2px #ccc;
background: #28353f;
// box-shadow: 2px 2px 2px #ccc;
border-radius: 5px;
padding: 5px 10px 5px 10px;
box-sizing: border-box;
@ -293,7 +280,7 @@
// font-family: UnidreamLED;
font-size: 25px;
font-weight: bold;
color: black;
color: #fff;
letter-spacing: 2px;
}
@ -343,25 +330,26 @@
}
.center_table {
margin-top: 10px;
flex: 1;
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
overflow: hidden;
overflow-y: scroll;
padding-bottom: 5px;
box-sizing: border-box;
>div {
width: 32%;
height: 50%;
background: #edeef0;
width: 24%;
height: 49%;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
// background: #edeef0;
// border: 2px solid #ccc;
border-radius: 8px;
padding: 10px 10px;
box-sizing: border-box;
font-size: 12px;
color: #000;
color: #fff;
margin: 5px;
.title {
font-size: 18px;
font-weight: bold;

@ -1,13 +1,13 @@
<template>
<div class="content">
<div class="title_tops">
<img src="../../../assets/imgs/充电顶部框.png" class="top_kuang" />
<img src="../../../assets/imgs/充电顶部框_dark.png" class="top_kuang" />
<div class="left_imgs_posi">
<span></span>
<span>充电数据监控大屏</span>
<span style="font-family: UnidreamLED">Charging date monItoring screen</span>
</div>
</div>
<el-row :gutter="15" class="bot_main">
<el-row :gutter="10" class="bot_main">
<el-col :span="5">
<div class="left_hinge">
<div>
@ -15,58 +15,34 @@
<i class="el-icon-s-flag"></i>
关键数据 / KEY DATA
</div>
<dv-decoration3 style="width: 250px; height: 25px" />
<div class="interval_line"></div>
<!-- <div class="interval_line"></div> -->
<!-- -->
<div class="batter_dates">
<div>
<div class="allow_big">
<div>
<span></span>
<span class="numbers_family">{{ char_nums_obj.chargeTotalCount }}</span>
</div>
<span>{{ $t('message.charging.totalChargingTimes') }}</span>
</div>
<div class="allow_big">
<div>
<span></span>
<span class="numbers_family">{{ char_nums_obj.chargeTodayCount }}</span>
</div>
<span>{{ $t('message.charging.todayChargingTimes') }}</span>
</div>
</div>
<div>
<div class="allow_big">
<div>
<span></span>
<span class="numbers_family">{{ batter_status.btyTotalCount }}</span>
</div>
<span>{{ $t('message.charging.totalBatteriesInStation') }}</span>
<div class="allow_infos">
<div>
<el-statistic title="累计充电 (次)" :value="char_nums_obj.chargeTotalCount" value-style="color: #03f7f9">
<template #suffix>
<el-icon style="vertical-align: -0.125em; color: #03f7f9">
<ChatLineRound />
</el-icon>
</template>
</el-statistic>
</div>
<div class="allow_big">
<div>
<span></span>
<span class="numbers_family">{{ batter_status.canSwapCount }}</span>
</div>
<span>{{ $t('message.charging.availableBatteries') }}</span>
<div>
<el-statistic title="今日充电 (次)" :value="char_nums_obj.chargeTodayCount" value-style="color: rgb(231 221 168)">
<template #suffix>
<el-icon style="vertical-align: -0.125em; color: rgb(231 221 168)">
<Tickets />
</el-icon>
</template>
</el-statistic>
</div>
</div>
<div>
<div class="allow_big">
<div>
<span></span>
<span class="numbers_family">{{ batter_status.chargingCount }}</span>
</div>
<span>{{ $t('message.charging.chargingBatteries') }}</span>
</div>
<div class="allow_big">
<!-- <div>
<span></span>
<span>当前充电总功率</span>
</div>
<span>单位KW</span>
<span class="numbers_family">{{ (all_powers / 1000).toFixed(2) }}</span> -->
</div>
<div class="echarts_battery" id="echarts_battery" ref="homeLineRef_THREE">
<!-- <dv-conical-column-chart :config="conical_config" style="width: 100%; height: 100%" /> -->
<!-- <dv-capsule-chart :config="conical_config" style="width: 100%; height: 100%" /> -->
</div>
</div>
</div>
@ -110,7 +86,9 @@
</div>
</div>
<div class="tops_info btns">
<el-button size="small" type="warning" @click="handle_remove(item.no, item.chargeStatus)" v-if="item.chargeStatus != 1 && item.exists == 1 && item.amtLock == 0">{{ $t('message.charging.relocate') }}</el-button>
<el-button size="small" type="warning" @click="handle_remove(item.no, item.chargeStatus)" v-if="item.chargeStatus != 1 && item.exists == 1 && item.amtLock == 0">{{
$t('message.charging.relocate')
}}</el-button>
<el-dropdown @command="handleCommand($event, item)">
<el-button type="primary">
{{ $t('message.charging.operation') }}<el-icon class="el-icon--right"><arrow-down /></el-icon>
@ -123,17 +101,6 @@
</el-dropdown-menu>
</template>
</el-dropdown>
<!-- <el-popconfirm title="确定要设置启动吗?" @confirm="getSWAPMONITORING_CHARGESTART(item.no)">
<template #reference>
<el-button size="small" type="success">充电启动</el-button>
</template>
</el-popconfirm>
<el-button size="small" type="info" @click="handle_power(item)"></el-button>
<el-popconfirm title="确定要设置停止吗?" @confirm="getSWAPMONITORING_CHARGESTOP(item.no)">
<template #reference>
<el-button size="small" type="danger">充电停止</el-button>
</template>
</el-popconfirm> -->
</div>
<div class="info_bottom">
<div>
@ -161,10 +128,6 @@
<span>{{ $t('message.charging.remainingTime') }}:</span>
<span>{{ item.estimatedRemainingTime }} (min)</span>
</div>
<!-- <div>
<span>充电电量:</span>
<span>{{ item.onceElectricCharge }}(kw.h)</span>
</div> -->
<div>
<span>{{ $t('message.charging.requestedVoltage') }}:</span>
<span>{{ item.bmsNeedVoltage }} (V)</span>
@ -178,6 +141,10 @@
<span>{{ item.totalCurrent }} (A)</span>
</div>
<div>
<span> {{ $t('message.charging.power') }}:</span>
<span> {{ (item.power / 1000).toFixed(2) }} (KW) </span>
</div>
<!-- <div>
<span>{{ $t('message.charging.batteryMaxTemperature') }}:</span>
<span>{{ item.cellTemperatureMax }} (°c)</span>
@ -197,27 +164,15 @@
<span>{{ item.chargingInterfaceDetectionTwoTemp }} (°c)</span>
</div>
<!-- <div>
<span>{{ $t('message.charging.chargingPort3Temperature') }}:</span>
<span>{{ item.chargingInterfaceDetectionTheTemp }} (°c)</span>
</div>
<div>
<span>{{ $t('message.charging.chargingPort4Temperature') }}:</span>
<span>{{ item.chargingInterfaceDetectionFourTemp }} (°c)</span>
</div> -->
<div>
<span> {{ $t('message.charging.power') }}:</span>
<span> {{ (item.power / 1000).toFixed(2) }} (KW) </span>
</div>
<div>
<span>{{ $t('message.charging.authenticationRequired') }}:</span>
<span>
<el-tag v-if="item.isAuthed" type="success">{{ $t('message.charging.isyes') }}</el-tag>
<el-tag v-else type="danger">{{ $t('message.charging.isno') }}</el-tag>
</span>
</div>
</div> -->
</div>
</div>
</div>
@ -259,6 +214,7 @@
</template>
<script setup>
import { ChatLineRound, Tickets } from '@element-plus/icons-vue';
import { getAPI } from '/@/utils/axios-utils';
import { SysChargeMonitorApi, SysSystemBaseconfigApi } from '/@/api-services/api';
import { ElMessageBox, ElMessage } from 'element-plus';
@ -266,6 +222,10 @@ import { storeToRefs } from 'pinia';
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
import battery from './components/battery.vue';
import { ArrowDown } from '@element-plus/icons-vue';
import battery_one from '../../../assets/imgs/battery_one.png';
import battery_two from '../../../assets/imgs/battery_two.png';
import battery_three from '../../../assets/imgs/battery_three.png';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
@ -280,6 +240,27 @@ const char_nums_obj = ref({
chargeTotalCount: 0,
chargeTodayCount: 0,
});
const conical_config = ref({
data: [
{
name: '站内总电池',
value: '8',
},
{
name: '可用电池',
value: '6',
},
{
name: '正在充电电池',
value: '2',
},
],
// img: [battery_one, battery_two, battery_three],
showValue: true,
colors: ['#e062ae', '#fb7293', '#e690d1'],
unit: '数量',
labelNum: 8,
});
const moveruleFormref = ref(null);
const all_powers = ref(0);
const mBmBatteryCountInfo = ref(null);
@ -299,6 +280,7 @@ const moveruleForm = ref({
});
const homeLineRef = ref(null);
const homeLineRef_EQM = ref(null);
const homeLineRef_THREE = ref(null);
const batter_status = ref({
btyTotalCount: 0,
canSwapCount: 0,
@ -404,6 +386,12 @@ const handle_charge = async () => {
const handle_BatteryStatusInfo = async () => {
const response = await getAPI(SysChargeMonitorApi).apiBatteryStatusInfoGet();
batter_status.value = response.data?.data;
// conical_config.value.data[0].value = batter_status.value.btyTotalCount;
// conical_config.value.data[1].value = batter_status.value.canSwapCount;
// conical_config.value.data[2].value = batter_status.value.chargingCount;
nextTick(() => {
initLineChart_Three();
});
};
const handle_char_count = async () => {
@ -557,9 +545,7 @@ const submitForm = async () => {
demo_loading.value = false;
resetForm();
})
.catch(() => {
});
.catch(() => {});
} else {
innerVisible.value = false;
movedialogVisible.value = false;
@ -586,6 +572,7 @@ const submitForm = async () => {
const state_chart = ref({
homeChartOne: null,
homeChartTwo: null,
homeChartThree: null,
myCharts: [],
theme: '',
});
@ -597,7 +584,7 @@ const initLineChart = () => {
title: {
text: t('message.charging.sevenDaysDCStationData'),
x: 'left',
textStyle: { fontSize: '15', color: '#303133' },
textStyle: { fontSize: '15', color: '#ffffff' },
},
grid: { top: 70, right: 20, bottom: 30, left: 30 },
tooltip: {
@ -611,7 +598,7 @@ const initLineChart = () => {
{
type: 'value',
name: '(kwh)',
splitLine: { show: true, lineStyle: { type: 'dashed', color: '#f5f5f5' } },
splitLine: { show: true, lineStyle: { type: 'dashed', color: '#ffffff' } },
},
],
series: [
@ -622,12 +609,12 @@ const initLineChart = () => {
symbol: 'circle',
smooth: true,
data: seven_y_data_emeterEnergy.value,
lineStyle: { color: '#fe9a8b' },
itemStyle: { color: '#fe9a8b', borderColor: '#fe9a8b' },
lineStyle: { color: '#ffffff' },
itemStyle: { color: '#ffffff', borderColor: '#ffffff' },
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#fe9a8bb3' },
{ offset: 1, color: '#fe9a8b03' },
{ offset: 0, color: '#ffffff' },
{ offset: 1, color: '#ffffff' },
]),
},
},
@ -644,7 +631,7 @@ const initLineChart_EQM = () => {
title: {
text: t('message.charging.sevenDaysACStationData'),
x: 'left',
textStyle: { fontSize: '15', color: '#303133' },
textStyle: { fontSize: '15', color: '#ffffff' },
},
grid: { top: 70, right: 20, bottom: 30, left: 30 },
tooltip: {
@ -658,7 +645,7 @@ const initLineChart_EQM = () => {
{
type: 'value',
name: '(kwh)',
splitLine: { show: true, lineStyle: { type: 'dashed', color: '#f5f5f5' } },
splitLine: { show: true, lineStyle: { type: 'dashed', color: '#ffffff' } },
},
],
series: [
@ -669,12 +656,12 @@ const initLineChart_EQM = () => {
symbol: 'circle',
smooth: true,
data: seven_y_data_emeterEnergyChange.value,
lineStyle: { color: '#fe9a8b' },
itemStyle: { color: '#fe9a8b', borderColor: '#fe9a8b' },
lineStyle: { color: '#ffffff' },
itemStyle: { color: '#ffffff', borderColor: '#ffffff' },
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#fe9a8bb3' },
{ offset: 1, color: '#fe9a8b03' },
{ offset: 0, color: '#ffffff' },
{ offset: 1, color: '#ffffff' },
]),
},
},
@ -684,6 +671,88 @@ const initLineChart_EQM = () => {
state_chart.value.myCharts.push(state_chart.value.homeChartTwo);
};
const initLineChart_Three = () => {
state_chart.value.homeChartThree = markRaw(echarts.init(homeLineRef_THREE.value, state_chart.value.theme));
const option_EQM = {
title: {
text: '电池数量统计',
textStyle: {
color: '#fff',
fontSize: 14,
},
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true,
},
xAxis: {
type: 'category',
data: ['总电池', '可用电池', '正在充电'],
axisLabel: {
show: true,
textStyle: {
color: '#fff',
fontSize: 12,
},
},
},
yAxis: {
type: 'value',
axisLabel: {
show: true,
textStyle: {
color: '#fff',
fontSize: 12,
},
},
},
series: [
{
data: [
{
value: 8,
itemStyle: {
color: '#7acaec',
},
label: {
show: true,
position: 'inside',
color: '#fff',
},
},
{
value: 6,
itemStyle: {
color: '#13ce66',
},
label: {
show: true,
position: 'inside',
color: '#fff',
},
},
{
value: 2,
itemStyle: {
color: '#e2a84e',
},
label: {
show: true,
position: 'inside',
color: '#fff',
},
},
],
type: 'bar',
},
],
};
state_chart.value.homeChartThree.setOption(option_EQM);
state_chart.value.myCharts.push(state_chart.value.homeChartThree);
};
// echarts resize
const initEchartsResizeFun = () => {
nextTick(() => {
@ -773,4 +842,7 @@ const initEchartsResize = () => {
height: 100% !important;
// background: skyblue;
}
:deep(.el-statistic__head) {
color: #fff;
}
</style>

@ -19,9 +19,13 @@
}
.title_header .left_tit span:first-child {
width: 300px;
height: 60px;
background: url('../../../assets/imgs/换电数据监控大屏.png') no-repeat center;
background-size: 100% 100%;
font-size: 30px;
font-weight: bold;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
background-clip: text;
-webkit-text-fill-color: transparent;
font-family: emoji;
font-style: italic;
}
.title_header .right_info {
height: 100%;
@ -100,7 +104,7 @@
align-items: flex-start;
}
.bot_maininfo .left_order .swapper_order > div span:last-child {
color: #fff;
color: #00efec;
font-size: 14px;
font-weight: 600;
}
@ -218,10 +222,11 @@
background: #28353f;
border-radius: 5px;
padding: 0 15px;
align-items: center;
position: relative;
padding-top: 20px;
box-sizing: border-box;
display: flex;
align-items: end;
}
.step_status .over_dis {
width: 100%;

@ -22,9 +22,16 @@
span:first-child {
width: 300px;
height: 60px;
background: url('../../../assets/imgs/换电数据监控大屏.png')no-repeat center;
background-size: 100% 100%;
// height: 60px;
font-size: 30px;
font-weight: bold;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
background-clip: text;
-webkit-text-fill-color: transparent;
font-family: emoji;
font-style: italic;
// background: url('../../../assets/imgs/换电数据监控大屏.png')no-repeat center;
// background-size: 100% 100%;
}
}
@ -121,7 +128,7 @@
align-items: flex-start;
span:last-child {
color: #fff;
color: #00efec;
font-size: 14px;
font-weight: 600;
}
@ -275,11 +282,11 @@
border-radius: 5px;
padding: 0 15px;
box-sizing: border-box;
align-items: center;
position: relative;
padding-top: 20px;
box-sizing: border-box;
display: flex;
align-items: end;
.over_dis {
width: 100%;
height: 100%;
@ -437,7 +444,8 @@
width: 24%;
height: 50%;
// background: #131a1f;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%); color: #fff;
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
color: #fff;
position: relative;
border-radius: 5px;
padding: 35px 10px 5px 10px;

@ -2,7 +2,7 @@
<div class="content">
<div class="title_header">
<div class="left_tit">
<span></span>
<span>换电数据监控大屏</span>
<span style="font-family: UnidreamLED">BATTER SWAP MONITOR</span>
</div>
<div class="swap_Business_status">
@ -11,10 +11,10 @@
<dv-decoration5 :dur="10" style="width: 300px; height: 30px" />
</div>
<div>
<dv-border-box2 class="item_dvborder_2"> 营业中 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2"> 设备维护 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2"> 歇业中 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2"> 暂停营业 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2" :class="go_status == 1 ? 'blue_tooth_class' : ''"> 营业中 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2" :class="go_status == 2 ? 'blue_tooth_class' : ''"> 设备维护 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2" :class="go_status == 3 ? 'blue_tooth_class' : ''"> 歇业中 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2" :class="go_status == 4 ? 'blue_tooth_class' : ''"> 暂停营业 </dv-border-box2>
</div>
</div>
<div class="swap_Business_status">
@ -23,9 +23,9 @@
<dv-decoration5 :dur="10" style="width: 300px; height: 30px" />
</div>
<div>
<dv-border-box2 class="item_dvborder_2"> 自动 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2"> 手动 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2"> 无效 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2" :class="modelState == 1010 ? 'blue_tooth_class' : ''"> 自动 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2" :class="modelState == 1000 ? 'blue_tooth_class' : ''"> 手动 </dv-border-box2>
<dv-border-box2 class="item_dvborder_2" :class="modelState == 0 ? 'blue_tooth_class' : ''"> 无效 </dv-border-box2>
</div>
</div>
<div class="right_info">
@ -147,30 +147,10 @@
<el-icon color="#fff"><Connection /></el-icon>
<span style="margin-left: 5px">换电步骤</span>
</div>
<!-- <div class="over_dis public_flex" id="over_dis">
<div class="public_flex">
<div v-for="(item, index) in steps_list" :key="index" class="item_sweps" :class="item.class">
<i :class="item.icon"></i>
<span>{{ item.stepName }}</span>
</div>
</div>
</div> -->
<div style="width: 100%;">
<div style="width: 100%">
<el-steps style="width: 100%" :active="2" finish-status="success">
<el-step title="未知" />
<el-step title="空闲" />
<el-step title="RFID扫描完成" />
<el-step title="云平台验证完成" />
<el-step title="车辆到位" />
<el-step title="车辆准备完成" />
<!-- <el-step title="云平台启动换电完成" /> -->
<!-- <el-step title="车辆调整完成" /> -->
<!-- <el-step title="开始换电" /> -->
<el-step title="拆卸亏电包" />
<el-step title="安装满电包" />
<el-step title="包安装完成" />
<el-step title="车辆自检" />
<el-step title="换电完成" />
<el-step :title="item.stepName" v-for="(item, index) in steps_list" :key="index" />
</el-steps>
</div>
</div>
@ -192,12 +172,12 @@
<div>
<span>取电池仓号:</span>
<span>{{ mStationSwapTruckField != null ? mStationSwapTruckField.velVin : '--' }}</span>
<span>{{ mStationSwapTruckField != null ? mStationSwapTruckField.downBatteryBinNo : '--' }}</span>
</div>
<div>
<span>放电池仓号:</span>
<span>{{ mStationSwapTruckField != null ? mStationSwapTruckField.velType : '--' }}</span>
<span>{{ mStationSwapTruckField != null ? mStationSwapTruckField.upBatteryBinNo : '--' }}</span>
</div>
</div>
</div>
@ -209,7 +189,7 @@
<div class="swapper_order">
<div>
<span>车牌号:</span>
<span style="word-break: break-all">{{ mStationSwapTruckField != null ? mStationSwapTruckField.orderNo : '--' }}</span>
<span style="word-break: break-all">{{ mStationSwapTruckField != null ? mStationSwapTruckField.velNo : '--' }}</span>
</div>
<div>
@ -219,7 +199,7 @@
<div>
<span>车辆Mac:</span>
<span>{{ mStationSwapTruckField != null ? mStationSwapTruckField.velType : '--' }}</span>
<span>{{ mStationSwapTruckField != null ? mStationSwapTruckField.velMac : '--' }}</span>
</div>
</div>
</div>
@ -233,47 +213,53 @@
</div>
<!-- -->
<div class="center_charg">
<div v-for="item in 8" :key="item" :class="item % 2 == 0 ? 'isborder_green' : ''">
<div class="title_posi">#{{ item }}</div>
<div class="switch_posi" :class="item % 2 == 0 ? 'switch_posi isswitch_posi' : 'switch_posi isfalseswitch_posi'">{{ item % 2 == 0 ? '在位' : '不在位' }}</div>
<div v-for="(item, index) in batter_list" :key="index" :class="handle_isgreen_brder(index)">
<div class="title_posi">#{{ item.no }}</div>
<div class="switch_posi" :class="item.exists == 1 ? 'switch_posi isswitch_posi' : 'switch_posi isfalseswitch_posi'">{{ item.exists == 1 ? '在位' : '不在位' }}</div>
<!-- -->
<div class="form_info">
<div>
<el-switch disabled v-model="switch_is_swap" class="ml-2" inline-prompt style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949" active-text="" inactive-text="" />
<el-switch disabled v-model="switch_is_swap" class="ml-2" inline-prompt style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949" active-text="" inactive-text="" />
<el-switch
disabled
v-model="item.canSwapFlag"
class="ml-2"
inline-prompt
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
active-text="可换电"
inactive-text="不可换电"
/>
<el-switch
disabled
v-model="item.canChargeFlag"
class="ml-2"
inline-prompt
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
active-text="可充电"
inactive-text="不可充电"
/>
</div>
<div>
<span>电池编号</span>
<span>DC151321352</span>
<span>{{ item.batteryNo }}</span>
</div>
<div>
<span>电池电量</span>
<span>98%</span>
<span>{{ item.soc }}%</span>
</div>
<!-- <div>
<span>充电状态</span>
<el-tag type="success">可充电</el-tag>
</div>
<div>
<span>换电状态</span>
<el-tag type="error">禁止换电</el-tag>
</div>
<div>
<span>充电机连接状态</span>
<el-tag type="error">未连接</el-tag>
</div> -->
<div>
<span>是否预约</span>
<el-tag type="success">预约锁定</el-tag>
<el-tag type="success" v-if="item.amtLock == 1"></el-tag>
<el-tag type="danger" v-else></el-tag>
</div>
<div>
<span>充电机工作状态</span>
<el-tag type="success">充电完成</el-tag>
<el-tag v-if="item.chargeStatus == 0" type="info"></el-tag>
<el-tag v-if="item.chargeStatus == 1" type="success"></el-tag>
<el-tag v-if="item.chargeStatus == 2" type="danger"></el-tag>
<el-tag v-if="item.chargeStatus == 3" type="danger"></el-tag>
<el-tag v-if="item.chargeStatus == 4" type="warning"></el-tag>
</div>
<!-- <div>
<span>电池状态</span>
<el-tag type="success">在仓</el-tag>
</div> -->
</div>
</div>
</div>
@ -287,9 +273,9 @@
</div>
<!-- -->
<div class="error_info">
<div v-for="item in 10" :key="item" :class="handle_item_sort(item)">
<span> {{ item }}. 充电机--电池温差过大严重报警--08-07 17:04:25 </span>
<img src="../../../assets/imgs/tail.png" alt="" v-if="item > 3" />
<div v-for="(item, index) in error_info_list" :key="item" :class="handle_item_sort(index)">
<span> {{ index + 1 }}. {{ item.errorMsg }} {{ item.startTime }} </span>
<img src="../../../assets/imgs/tail.png" alt="" v-if="index > 2" />
</div>
</div>
</div>
@ -350,14 +336,13 @@
<script setup>
import { getAPI } from '/@/utils/axios-utils';
import { SysMonitorApi, SysChargeMonitorApi, SysBtyModeInfoReaultApi } from '/@/api-services/api';
import { SysMonitorApi, SysChargeMonitorApi, SysBtyModeInfoReaultApi, SysEquipAlarmLogApi } from '/@/api-services/api';
import { ElMessageBox, ElMessage } from 'element-plus';
import { onMounted, reactive, ref, onBeforeUnmount } from 'vue';
import { storeToRefs } from 'pinia';
import { swappingInfo } from '/@/stores/swapping';
import arrow_true from '/@/assets/imgs/arrow_true.png';
import arrow_false from '/@/assets/imgs/arrow_false.png';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
@ -405,103 +390,22 @@ const modelState = ref(0);
const controlModel = ref(0);
const go_status = ref(1);
const stateInfo = ref(null);
const steps_list = ref([
{
stepName: '未知',
icon: 'el-icon-refresh',
class: '',
type: '0',
},
{
stepName: '空闲',
icon: 'el-icon-d-arrow-right',
class: '',
type: '1',
},
{
stepName: 'RFID扫描完成',
icon: 'el-icon-caret-right',
class: '',
type: '2',
},
{
stepName: '云平台验证完成',
icon: 'el-icon-full-screen',
class: '',
type: '3',
},
{
stepName: '车辆到位',
icon: 'el-icon-aim',
class: '',
type: '4',
},
{
stepName: '车辆准备完成(N档、手刹)',
icon: 'el-icon-place',
class: 'check_steps',
type: '5',
},
{
stepName: '云平台启动换电完成',
icon: 'el-icon-orange',
class: '',
type: '6',
},
{
stepName: '车辆调整完成(下高压、下低压)',
icon: 'el-icon-time',
class: '',
type: '7',
},
{
stepName: '开始换电',
icon: 'el-icon-s-release',
class: '',
type: '8',
},
{
stepName: '拆卸亏电包',
icon: 'el-icon-s-marketing',
class: '',
type: '9',
},
{
stepName: '安装满电包',
icon: 'el-icon-s-opportunity',
class: '',
type: '10',
},
{
stepName: '包安装完成',
icon: 'el-icon-s-flag',
class: '',
type: '11',
},
{
stepName: '车辆自检',
icon: 'el-icon-sort-down',
class: '',
type: '12',
},
{
stepName: '换电完成(车辆驶离)',
icon: 'el-icon-sort-down',
class: '',
type: '13',
},
]);
const steps_list = ref([]);
const content_list = ref([]);
const car_list = ref([]);
const car_list_manual = ref([]);
const charg_list = ref([]);
const timer = ref(null);
const error_info_list = ref([]);
const batter_list = ref([]);
onMounted(async () => {
updateTime();
handle_error_list();
handle_charge();
// load();
// handle_GetStationSwapModel();
// handle_apiSwapPlcSuccGet();
// handle_SwapMonitorData();
handle_SwapMonitorData();
// handle_GetDeviceState();
// timer.value = setInterval(() => {
// handle_SwapMonitorData();
@ -523,6 +427,41 @@ const handle_GetDeviceState = async () => {
boxConnectFlag.value = response.data?.data.boxConnectFlag;
};
const handle_error_list = async () => {
let params = {
pageSize: 10,
pageNum: 1,
};
const response = await getAPI(SysEquipAlarmLogApi).apiQueryEquipAlarmPagePost(params);
error_info_list.value = response.data.data?.rows ?? [];
};
const handle_charge = async () => {
const response = await getAPI(SysChargeMonitorApi).apiGetChargMonitorChargBinData();
let array = response.data?.data;
for (let item of array) {
if (item.canChargeFlag == 1) {
item.canChargeFlag = true;
} else {
item.canChargeFlag = false;
}
if (item.canSwapFlag == 1) {
item.canSwapFlag = true;
} else {
item.canSwapFlag = false;
}
}
batter_list.value = array;
};
const handle_isgreen_brder = (index) => {
if (index + 1 == mStationSwapTruckField.value.downBatteryBinNo || index + 1 == mStationSwapTruckField.value.upBatteryBinNo) {
return 'isborder_green';
} else {
return '';
}
};
const per_dialog_open = async (data) => {
dialogFormVisible_personnel.value = true;
per_form.value.type = data;
@ -781,28 +720,28 @@ const handle_SwapMonitorData = async () => {
batteryInfo.value = obj_data?.batteryInfo;
steps_list.value = obj_data.stateInfo;
//
let check_steps_name = obj_data.stateInfo.filter((item) => item.status == 1);
// let check_steps_name = obj_data.stateInfo.filter((item) => item.status == 1);
// console.log(check_steps_name, 'check_steps_name');
let str = {
name: check_steps_name[check_steps_name.length - 1].stepName,
time: check_steps_name[check_steps_name.length - 1].startTime,
};
let array = wind_content_list.value;
if (array.length == 30) {
content_list.value.splice(0, 14);
}
if (content_list.value.length == 0) {
content_list.value.push(str);
} else {
if (content_list.value[content_list.value.length - 1].name != check_steps_name[check_steps_name.length - 1].stepName) {
content_list.value.push(str);
}
}
storesswappingInfo.setwind_content_list(content_list.value);
setTimeout(() => {
load();
}, 500);
// let str = {
// name: check_steps_name[check_steps_name.length - 1].stepName,
// time: check_steps_name[check_steps_name.length - 1].startTime,
// };
// let array = wind_content_list.value;
// if (array.length == 30) {
// content_list.value.splice(0, 14);
// }
// if (content_list.value.length == 0) {
// content_list.value.push(str);
// } else {
// if (content_list.value[content_list.value.length - 1].name != check_steps_name[check_steps_name.length - 1].stepName) {
// content_list.value.push(str);
// }
// }
// storesswappingInfo.setwind_content_list(content_list.value);
// setTimeout(() => {
// load();
// }, 500);
}
};
@ -845,11 +784,11 @@ const load = async () => {
const handle_item_sort = (data) => {
switch (data) {
case 1:
case 0:
return 'one';
case 2:
case 1:
return 'two';
case 3:
case 2:
return 'three';
default:
return 'default';
@ -897,4 +836,18 @@ const updateTime = () => {
:deep(.el-step__icon-inner) {
font-size: 19px !important;
}
:deep(.el-step__title) {
white-space: nowrap;
}
:deep(.el-steps .el-step:nth-child(odd) .el-step__title) {
position: absolute;
top: -35px;
}
:deep(.el-steps .el-step:last-child .el-step__title) {
left: -100px;
top: -35px;
}
:deep(.is-process) {
color: #3475f7 !important;
}
</style>

@ -2,7 +2,7 @@
<div style="padding: 10px" class="content">
<el-row :gutter="20">
<el-col :span="12">
<el-card>
<el-card class="bg_items_info">
<template #header>
<div class="card-header">
<span>{{ $t('message.system_base_config.strategy_set') }}</span>
@ -47,7 +47,7 @@
</el-card>
</el-col> -->
<el-col :span="12">
<el-card>
<el-card class="bg_items_info">
<template #header>
<div class="card-header">
<span>{{ $t('message.system_base_config.Business_status') }}</span>
@ -104,7 +104,7 @@
</el-row>
<el-row :gutter="20" style="margin-top: 20px">
<el-col :span="12">
<el-card>
<el-card class="bg_items_info">
<template #header>
<div class="card-header">
<span>换电模式</span>
@ -147,7 +147,7 @@
</el-card>
</el-col> -->
<el-col :span="12">
<el-card>
<el-card class="bg_items_info">
<template #header>
<div class="card-header">
<span>{{ $t('message.system_base_config.swapping_operation_mode') }}</span>
@ -636,9 +636,13 @@ const SetHandoverStationStatus = async () => {
<style scoped lang="less">
.content {
overflow: hidden;
overflow-y: scroll;
display: unset !important;
// overflow: hidden;
// overflow-y: scroll;
// display: unset !important;
}
.bg_items_info {
background-image: linear-gradient(to right, #868f96 0%, #596164 100%);
color: #fff;
}
.public_flex {
display: flex;
@ -657,4 +661,10 @@ label {
font-size: 12px;
color: #fff;
}
:deep(.el-card) {
border: unset;
}
:deep(.el-radio__label) {
color: #fff;
}
</style>

@ -0,0 +1,290 @@
<template>
<div class="sys-tenant-container">
<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
<el-form :model="state.queryParams" ref="queryForm" :inline="true">
<el-form-item label="充电机编号">
<el-input v-model="state.queryParams.chargerNo" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="时间跨度">
<!-- <el-input v-model="state.queryParams.timeType" placeholder="请选择" clearable /> -->
<el-select v-model="state.queryParams.timeType" placeholder="请选择" size="small">
<el-option label="日" value="1" />
<el-option label="月" value="2" />
<el-option label="年" value="3" />
</el-select>
</el-form-item>
<el-form-item label="时间">
<el-date-picker
v-model="state.times"
type="datetimerange"
start-placeholder="开始"
end-placeholder="结束"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
date-format="YYYY/MM/DD ddd"
time-format="A hh:mm:ss"
v-if="state.queryParams.timeType == '1'"
/>
<el-date-picker
v-model="state.times"
type="daterange"
value-format="YYYY-MM-DD"
range-separator="to"
start-placeholder="开始"
end-placeholder="结束"
size="small"
v-if="state.queryParams.timeType == '2'"
/>
<el-date-picker v-model="state.times" type="month" range-separator="to" value-format="YYYY-MM" size="small" v-if="state.queryParams.timeType == '3'" />
</el-form-item>
<el-form-item>
<el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery_dates"> </el-button>
<el-button icon="ele-Refresh" @click="resetQuery"> </el-button>
</el-button-group>
</el-form-item>
</el-form>
</el-card>
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
<h2>充电量统计信息</h2>
<div id="charts_content" ref="homeLineRef"></div>
</el-card>
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
<h2>充电量统计表信息</h2>
<el-table :data="state.tenantData_Eme" style="width: 100%; margin-top: 10px" v-loading="state.loading_Eme" border ref="tableRef_eme">
<!-- <el-table-column type="selection" width="55" fixed> </el-table-column> -->
<el-table-column type="index" :label="$t('message.emeter_total_energy_value.Serial_number')" width="55" align="center" fixed />
<el-table-column prop="chargerNo" label="充电机编号" align="center" show-overflow-tooltip />
<!-- <el-table-column prop="value" :label="$t('message.emeter_total_energy_value.Kilowatt_hour')" align="center" show-overflow-tooltip /> -->
<el-table-column prop="time" label="上报时间" align="center" show-overflow-tooltip />
<el-table-column prop="chargeCount" label="充电度数(kwh)" align="center" show-overflow-tooltip />
</el-table>
<el-pagination
v-model:currentPage="state.tableParams.pageNum"
v-model:page-size="state.tableParams.pageSize"
:total="state.toTal"
:page-sizes="[10, 20, 50, 100]"
small
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
layout="total, sizes, prev, pager, next, jumper"
/>
</el-card>
</div>
</template>
<script lang="ts" setup name="sysTenant">
// 1 2 3
import { onMounted, reactive, ref, markRaw, nextTick, onActivated, watch } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { getAPI } from '/@/utils/axios-utils';
import { SysChargCapacityApi } from '/@/api-services/api';
import { storeToRefs } from 'pinia';
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
import * as echarts from 'echarts';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const storesTagsViewRoutes = useTagsViewRoutes();
const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
const tableRef = ref<RefType>();
const state = reactive({
loading: false,
loading_Eme: false,
selectlist: [] as EmptyObjectType[],
tenantData: [] as any,
tenantData_Eme: [] as any,
queryParams: {
chargerNo: undefined,
timeType: '2',
startTime: undefined,
endTime: undefined,
},
times: '',
tableParams: {
pageNum: 1,
pageSize: 10,
},
toTal: 0 as any,
editTenantTitle: '',
seven_x_data: [] as any,
seven_y_data_emeterEnergy: [] as any,
seven_y_data_emeterEnergy_EQM: [] as any,
});
const homeLineRef = ref();
onMounted(async () => {
handleQuery();
handleQuery_table();
initEchartsResize();
});
// keep-alive
onActivated(() => {
initEchartsResizeFun();
});
watch(
() => isTagsViewCurrenFull,
() => {
initEchartsResizeFun();
}
);
// echarts resize
const initEchartsResize = () => {
window.addEventListener('resize', initEchartsResizeFun);
};
const resetQuery = () => {
state.queryParams.chargerNo = undefined;
(state.queryParams.startTime = undefined), (state.queryParams.endTime = undefined), (state.queryParams.timeType = '2'), handleQuery();
handleQuery_table();
};
const handleQuery_table = async () => {
let params = Object.assign(state.queryParams, state.tableParams);
var res = await getAPI(SysChargCapacityApi).apiGetAllEmeterEnergyChangeGet(params);
// console.log(res, 'table');
state.tenantData_Eme = res.data.data?.rows ?? [];
state.toTal = res.data.data?.toTal ?? 0;
};
const handleSizeChange = (val: number) => {
state.tableParams.pageSize = val;
handleQuery_table();
};
//
const handleCurrentChange = (val: number) => {
state.tableParams.pageNum = val;
handleQuery_table();
};
// echarts resize
const initEchartsResizeFun = () => {
nextTick(() => {
for (let i = 0; i < state_chart.myCharts.length; i++) {
setTimeout(() => {
state_chart.myCharts[i].resize();
}, i * 1000);
}
});
};
const handleQuery_dates = () => {
// console.log(state.times[state.times.length - 1], 'times');
if (state.queryParams.timeType == '3' && state.times != '') {
state.queryParams.startTime = state.times + '-01 00:00:00';
state.queryParams.endTime = getCurrentDate() + ' 23:59:59';
} else if (state.queryParams.timeType == '2' && state.times != '') {
state.queryParams.startTime = state.times[0] + ' 00:00:00';
state.queryParams.endTime = state.times[1] + ' 23:59:59';
} else if (state.queryParams.timeType == '1' && state.times != '') {
// console.log(state.times);
state.queryParams.startTime = state.times[0];
state.queryParams.endTime = state.times[1];
}
handleQuery();
handleQuery_table();
};
const getCurrentDate = () => {
const date = new Date();
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 0
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
};
//
const handleQuery = async () => {
state.loading_Eme = true;
// console.log(state.queryParams, 'state.queryParams');
var res = await getAPI(SysChargCapacityApi).apiTEgEmeterTotalEnergyValuePageGet(state.queryParams);
let tenantData_Eme = res.data?.data ?? [];
// console.log(res, 'res');
let x_data = [];
let y_data = [];
for (let item of tenantData_Eme) {
x_data.push(item.time);
y_data.push(item.chargeCount);
}
state.seven_x_data = x_data;
state.seven_y_data_emeterEnergy = y_data;
state.loading_Eme = false;
nextTick(() => {
initLineChart();
});
};
const state_chart = reactive({
homeChartOne: null as any,
homeChartTwo: null,
myCharts: [] as any,
theme: '',
});
// 线
const initLineChart = () => {
state_chart.homeChartOne = markRaw(echarts.init(homeLineRef.value, state_chart.theme));
const option = {
backgroundColor: '',
grid: { top: 70, right: 20, bottom: 30, left: 50 },
tooltip: {
trigger: 'axis',
},
legend: {
data: ['充电量'],
right: 0,
},
xAxis: {
data: state.seven_x_data,
},
yAxis: [
{
type: 'value',
name: '(kwh)',
splitLine: { show: true, lineStyle: { type: 'dashed', color: '#f5f5f5' } },
},
],
series: [
{
name: '充电量',
// name: "",
type: 'bar',
symbolSize: 6,
symbol: 'circle',
smooth: true,
data: state.seven_y_data_emeterEnergy,
lineStyle: { color: '#fe9a8b' },
itemStyle: { color: '#fe9a8b', borderColor: '#fe9a8b' },
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#fe9a8bb3' },
{ offset: 1, color: '#fe9a8b03' },
]),
},
label: {
show: true,
position: 'top',
},
},
],
};
state_chart.homeChartOne.setOption(option);
state_chart.myCharts.push(state_chart.homeChartOne);
};
</script>
<style lang="less" scoped>
#charts_content {
width: 100%;
height: 100%;
}
</style>
Loading…
Cancel
Save