feat: 添加多项功能和修复

功能新增:
- OSS 存储使用情况显示(文件页面)
- OSS 当日流量统计(阿里云云监控API)
- 分享页面路由修复(/s/xxx 格式支持)

Bug修复:
- 修复分享页面资源路径(相对路径改绝对路径)
- 修复分享码获取逻辑(支持路径格式)
- 修复OSS配额undefined显示问题
- 修复登录流程OSS配置检查
- 修复文件数为null时的显示问题

依赖更新:
- 添加 @alicloud/cms20190101 云监控SDK
- 添加 @alicloud/openapi-client

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-22 21:04:22 +08:00
parent a86903fcdc
commit b135987fe8
3410 changed files with 494007 additions and 11 deletions

8
backend/node_modules/@alicloud/tea-xml/ChangeLog.txt generated vendored Normal file
View File

@@ -0,0 +1,8 @@
2024-01-10 Version: v0.0.3
- Bump xml2js form 0.4.22 to 0.6.0
2021-11-23 Version: v0.0.2
- Add case null in parseXml
2020-02-27 Version: v0.0.1
- v0.0.1

29
backend/node_modules/@alicloud/tea-xml/README.md generated vendored Normal file
View File

@@ -0,0 +1,29 @@
English | [简体中文](README-CN.md)
![](https://aliyunsdk-pages.alicdn.com/icons/AlibabaCloud.svg)
## Alibaba Cloud Tea XML for TypeScript/Node.js
## Prerequisite
Node.js >= 8.x
## Installation
If you use `npm` to manage your dependence, you can use the following command to install it and write into package.json dependences:
```sh
$ npm install @alicloud/tea-xml -S
```
## Issues
[Opening an Issue](https://github.com/aliyun/tea-xml/issues/new), Issues not conforming to the guidelines may be closed immediately.
## Changelog
Detailed changes for each release are documented in the [release notes](./ChangeLog.txt).
## References
* [Latest Release](https://github.com/aliyun/tea-xml/tree/master/ts)
## License
[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Copyright (c) 2009-present, Alibaba Cloud All rights reserved.

View File

@@ -0,0 +1,12 @@
export default class Client {
static parseXml<T>(body: string, response: T): {
[key: string]: any;
};
static toXML(body: {
[key: string]: any;
}): string;
static _parseXML(body: string): any;
static _xmlCast<T>(obj: any, clazz: T): {
[key: string]: any;
};
}

93
backend/node_modules/@alicloud/tea-xml/dist/client.js generated vendored Normal file
View File

@@ -0,0 +1,93 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const xml2js_1 = require("xml2js");
class Client {
static parseXml(body, response) {
let ret = this._parseXML(body);
if (response !== null && typeof response !== 'undefined') {
ret = this._xmlCast(ret, response);
}
return ret;
}
static toXML(body) {
const builder = new xml2js_1.Builder();
return builder.buildObject(body);
}
static _parseXML(body) {
let parser = new xml2js_1.Parser({ explicitArray: false });
let result = {};
parser.parseString(body, function (err, output) {
result.err = err;
result.output = output;
});
if (result.err) {
throw result.err;
}
return result.output;
}
static _xmlCast(obj, clazz) {
obj = obj || {};
let ret = {};
let clz = clazz;
let names = clz.names();
let types = clz.types();
Object.keys(names).forEach((key) => {
let originName = names[key];
let value = obj[originName];
let type = types[key];
switch (type) {
case 'boolean':
if (!value) {
ret[originName] = false;
return;
}
ret[originName] = value === 'false' ? false : true;
return;
case 'number':
if (value != 0 && !value) {
ret[originName] = NaN;
return;
}
ret[originName] = +value;
return;
case 'string':
if (!value) {
ret[originName] = '';
return;
}
ret[originName] = value.toString();
return;
default:
if (type.type === 'array') {
if (!value) {
ret[originName] = [];
return;
}
if (!Array.isArray(value)) {
value = [value];
}
if (typeof type.itemType === 'function') {
ret[originName] = value.map((d) => {
return this._xmlCast(d, type.itemType);
});
}
else {
ret[originName] = value;
}
}
else if (typeof type === 'function') {
if (!value) {
value = {};
}
ret[originName] = this._xmlCast(value, type);
}
else {
ret[originName] = value;
}
}
});
return ret;
}
}
exports.default = Client;
//# sourceMappingURL=client.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}

38
backend/node_modules/@alicloud/tea-xml/package.json generated vendored Normal file
View File

@@ -0,0 +1,38 @@
{
"name": "@alicloud/tea-xml",
"version": "0.0.3",
"description": "",
"main": "dist/client.js",
"scripts": {
"test": "mocha -r ts-node/register test/**/*.spec.ts",
"test-cov": "nyc -e .ts -r=html -r=text -r=lcov npm run test",
"build": "tsc",
"prepublishOnly": "tsc"
},
"author": "Jackson Tian",
"license": "Apache-2.0",
"dependencies": {
"@alicloud/tea-typescript": "^1",
"@types/xml2js": "^0.4.5",
"xml2js": "^0.6.0"
},
"files": [
"dist",
"src"
],
"nyc": {
"extends": "@istanbuljs/nyc-config-typescript",
"all": true,
"check-coverage": true
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^0.1.3",
"@types/mocha": "^5.2.7",
"mocha": "^6.2.0",
"ts-node": "^8.4.1",
"typescript": "^3.6.3",
"codecov": "^3.1.0",
"rewire": "^4.0.1",
"nyc": "^14.1.1"
}
}

100
backend/node_modules/@alicloud/tea-xml/src/client.ts generated vendored Normal file
View File

@@ -0,0 +1,100 @@
// This file is auto-generated, don't edit it
import { Readable } from 'stream';
import * as $tea from '@alicloud/tea-typescript';
import { Parser, Builder } from 'xml2js';
export default class Client {
static parseXml<T>(body: string, response: T): { [key: string]: any } {
let ret: { [key: string]: any } = this._parseXML(body);
if (response !== null && typeof response !== 'undefined') {
ret = this._xmlCast(ret, response);
}
return ret;
}
static toXML(body: { [key: string]: any }): string {
const builder = new Builder();
return builder.buildObject(body);
}
static _parseXML(body: string): any {
let parser = new Parser({ explicitArray: false });
let result: { [key: string]: any } = {};
parser.parseString(body, function (err: any, output: any) {
result.err = err;
result.output = output;
});
if (result.err) {
throw result.err;
}
return result.output;
}
static _xmlCast<T>(obj: any, clazz: T): { [key: string]: any } {
obj = obj || {};
let ret: { [key: string]: any } = {};
let clz = clazz as any;
let names: { [key: string]: string } = clz.names();
let types: { [key: string]: any } = clz.types();
Object.keys(names).forEach((key) => {
let originName = names[key];
let value = obj[originName];
let type = types[key];
switch (type) {
case 'boolean':
if (!value) {
ret[originName] = false;
return;
}
ret[originName] = value === 'false' ? false : true;
return;
case 'number':
if (value != 0 && !value) {
ret[originName] = NaN;
return;
}
ret[originName] = +value;
return;
case 'string':
if (!value) {
ret[originName] = '';
return;
}
ret[originName] = value.toString();
return;
default:
if (type.type === 'array') {
if (!value) {
ret[originName] = [];
return;
}
if (!Array.isArray(value)) {
value = [value];
}
if (typeof type.itemType === 'function') {
ret[originName] = value.map((d: any) => {
return this._xmlCast(d, type.itemType);
});
} else {
ret[originName] = value;
}
} else if (typeof type === 'function') {
if (!value) {
value = {}
}
ret[originName] = this._xmlCast(value, type);
} else {
ret[originName] = value;
}
}
})
return ret;
}
}