新增 有家相册 uni-app 前端(uniapp/youjiala,H5 / 微信小程序 / App 三端)

从旧 WebVue 移植的地基部分:
- 登录页(RSA+MD5 密码加密、redirect 回跳、中英文切换)与登录后落地页
- 401 / 403 / 404 错误页 + error-panel 通用外壳(文案走 ErrorPage 语言包)
- 登录守卫双链路:uni.addInterceptor 拦站内跳转,页面级 onShow 复核冷启动深链
- 单一请求链路 common/http.interceptor:JWT 唯一来源、401 并发刷新单例、
  业务异常识别、HTTP 403 跳无权限页
- H5 干净短地址:initRouter 前向 __uniRoutes 追加克隆记录(router/h5-clean-url)
- 路由登记表 router/routes.ts(PAGE_PATHS / pageUrl / PAGE_PERMISSIONS)
  与新增页面四步登记约定(src/md/page-routing.md)
- i18n:uView Pro 语言包 + 后端词条合并,双取值(后端 zh-cn/en,包名 zh-CN/en-US)
- 后端接口层 service/ 与数据模型 data/auto/ 为生成器产物,不手改

不入库的内容:
- 摘除脚手架残留的 Harmony 签名密码(manifest.json signingConfigs 与
  harmony-configs/build-profile.json5 的 keyPassword / storePassword 已置空)
- 忽略 node_modules、dist、unpackage、.hbuilderx、.agents、pnpm-lock.yaml
  及根目录临时截图
This commit is contained in:
owenchen committed 2026-10-13 08:27:34 +08:00
1 parent 74757f9eb4
commit 6a8258ac4b
274 files changed
+30291

No files matched your search

+33
View File
@@ -0,0 +1,33 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
docs
*.local
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
components.d.ts
# uni-app / HBuilderX 本地缓存与构建产物
unpackage/
.hbuilderx/
# 本地 AI 助手资产(工具生成的脚本,不随项目分发)
.agents/
# 根目录临时截图等验证产物(src 下的静态资源不受影响)
/*.png
+3
View File
@@ -0,0 +1,3 @@
strict-peer-dependencies=false
auto-install-peers=true
shamefully-hoist=true
+16
View File
@@ -0,0 +1,16 @@
{
"recommendations": [
"vue.volar",
"mrmaoddxxaa.create-uniapp-view",
"uni-helper.uni-helper-vscode",
"uni-helper.uni-app-schemas-vscode",
"uni-helper.uni-highlight-vscode",
"uni-helper.uni-ui-snippets-vscode",
"uni-helper.uni-app-snippets-vscode",
"uni-helper.uni-cloud-snippets-vscode",
"yoavbls.pretty-ts-errors",
"johnsoncodehk.vscode-tsconfig-helper",
"dbaeumer.vscode-eslint",
"antfu.unocss"
]
}
+37
View File
@@ -0,0 +1,37 @@
{
"files.associations": {
"pages.json": "jsonc",
"manifest.json": "jsonc"
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never"
},
"prettier.enable": false,
"editor.formatOnSave": false,
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
"nvue",
"uvue",
"html",
"markdown",
"json",
"jsonc",
"yaml",
"toml",
"xml",
"gql",
"graphql",
"astro",
"svelte",
"css",
"less",
"scss",
"pcss",
"postcss"
]
}
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 前端梦工厂
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+50
View File
@@ -0,0 +1,50 @@
# 使用 pnpm 管理依赖
本项目为 pnpm 依赖管理。
## 常用命令
- 安装依赖:
```bash
pnpm install
```
- 启动开发:
```bash
# 运行h5
pnpm dev:h5
# 运行微信小程序
pnpm dev:mp-weixin
# 运行安卓APP
pnpm dev:app-android
```
- 构建生产包:
```bash
# 运行h5
pnpm build:h5
# 运行微信小程序
pnpm build:mp-weixin
# 运行安卓APP
pnpm build:app-android
```
- 添加依赖:
```bash
pnpm add <包名>
```
- 删除依赖:
```bash
pnpm remove <包名>
```
## 说明
- 已自动生成 `pnpm-lock.yaml`,请勿手动修改。
- 如遇 node_modules 兼容问题,可先删除 node_modules 和 pnpm-lock.yaml 后重新 `pnpm install`。
- 推荐全员统一使用 pnpm,避免包管理混乱。
+275
View File
@@ -0,0 +1,275 @@
<!-- Language Switch Button -->
<p align="right" style="margin-top: 10px;">
<span style="padding: 6px 16px; background: #ededed; color: #333; border-radius: 6px; margin-left: 8px; font-weight: bold;">English</span>
<a href="README.md" style="padding: 6px 16px; background: #2979ff; color: #fff; border-radius: 6px; text-decoration: none; font-weight: bold;">中文</a>
</p>
<p align="center">
<img alt="logo" src="https://ik.imagekit.io/anyup/uview-pro/common/logo-new.png" width="120" height="120" style="margin-bottom: 10px;">
</p>
<h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView Pro</h3>
<h3 align="center">uni-app Vue3 Multi-platform Rapid Development UI Framework</h3>
<div align="center">
[![star](https://gitee.com/anyup/uView-Pro/badge/star.svg?theme=gvp)](https://gitee.com/anyup/uView-Pro)
[![fork](https://gitee.com/anyup/uView-Pro/badge/fork.svg?theme=gvp)](https://gitee.com/anyup/uView-Pro)
[![stars](https://img.shields.io/github/stars/anyup/uView-Pro?style=flat-square&logo=GitHub)](https://github.com/anyup/uView-Pro)
[![forks](https://img.shields.io/github/forks/anyup/uView-Pro?style=flat-square&logo=GitHub)](https://github.com/anyup/uView-Pro)
[![issues](https://img.shields.io/github/issues/anyup/uView-Pro?style=flat-square&logo=GitHub)](https://github.com/anyup/uView-Pro/issues)
[![npm version](https://img.shields.io/npm/v/uview-pro)](https://www.npmjs.com/package/uview-pro)
[![Website](https://img.shields.io/badge/uView%20Pro-docs-blue?style=flat-square)](https://uviewpro.cn)
[![node version](https://img.shields.io/badge/node-%3E%3D18-green)](https://nodejs.org/)
[![pnpm version](https://img.shields.io/badge/pnpm-%3E%3D7.30-green)](https://pnpm.io/)
[![license](https://img.shields.io/github/license/anyup/uView-Pro?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)
</div>
## Description
uView UI is an excellent UI framework in the [uni-app](https://uniapp.dcloud.io/) ecosystem, providing comprehensive components and handy tools for efficient development.
uView Pro is a uni-app ecosystem framework that fully supports Vue3.0 and TypeScript. The baseline version of uView Pro is modified based on uView 1.8.8, completely reconstructed using TypeScript, and now fully supports uni-app Vue3.0.
## [Official Documentation: https://uviewpro.cn](https://uviewpro.cn)
## [Quick Start Template: https://starter.uviewpro.cn](https://starter.uviewpro.cn)
## Features
- Compatible with Android, iOS, WeChat Mini Programs, H5, QQ Mini Programs, Baidu Mini Programs, Alipay Mini Programs, and Toutiao Mini Programs
- 70+ selected components, rich in functionality, multi-end compatibility, quick integration, and ready to use out of the box
- Numerous handy JS tools for efficient development
- A variety of commonly used pages and layouts, allowing you to focus on logic and achieve more with less effort
- Detailed documentation and modern demo effects
- On-demand import, streamlined bundle size
## HarmonyOS Preview
The uView Pro HarmonyOS application has officially been launched in the Huawei App Market, providing you with a complete business scenario demonstration platform. It includes a component library, template samples, scenario cases, and supports one-click copying and downloading to help developers quickly get started and experience the practical value of the components!
> System requirements: Only supported on HarmonyOS 5.0 and above devices
<table>
<tr align="center">
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_harmony.png" width="180" height="180" ></td>
</tr>
<tr>
<td align="center"><strong>HarmonyOS</strong><br>(Scan with browse)</td>
</tr>
</table>
## Mobile Preview
You can scan the following QR codes with **WeChat** or **mobile browser** to view the best demo effect.
<table class="table">
<tr>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_wx.jpg" width="150" height="150" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_alipay.png" width="150" height="150" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_h5.png" width="150" height="150" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_android.png" width="150" height="150" ></td>
</tr>
<tr>
<td align="center"><strong>WeChat Mini Program</strong><br>(Scan with WeChat)</td>
<td align="center"><strong>AliPay Mini Program</strong><br>(Scan with AliPay)</td>
<td align="center"><strong>H5</strong><br>(Scan with browser)</td>
<td align="center"><strong>Android</strong><br>(Scan with browser)</td>
</tr>
</table>
To run the sample project, please [download the source code](https://github.com/anyup/uview-pro) and execute the following commands in the project root directory:
```bash
pnpm install
pnpm dev
```
For more running and building commands, please refer to the [pnpm Running Guide](README-pnpm.md)
## Links
- [Github](https://github.com/anyup/uview-pro)
- [Gitee](https://gitee.com/anyup/uview-pro)
- [Official Documentation](https://uviewpro.cn)
- [Changelog](https://github.com/anyup/uView-Pro/blob/master/src/uni_modules/uview-pro/changelog.md)
## Communication & Feedback
uView Pro WeChat Group: [Click to Join](https://uviewpro.cn/zh/resource/about.html)
uView Pro QQ Group: [Click to Join](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=98nSVDldWEbDdq4lxiP4aL7uATfMSlI6&authKey=G2yQJ5MQiKzMldaxBsIfKt17NuJuUw8Fr6zdKLggc6NZXgw4BVbqkU2U3EE994yd&noverify=0&group_code=811732166)
<table class="table">
<tr>
<td><img src="https://ik.imagekit.io/anyup/images/social/weixin-chat-cl.png" width="250" height="345" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qq-chat.png" width="250" height="345" ></td>
</tr>
<tr>
<td align="center"><strong>WeChat Group</strong><br></td>
<td align="center"><strong>QQ Group</strong><br></td>
</tr>
</table>
## About PR
We are very happy to accept high-quality PRs from everyone. However, please note that uView Pro needs to be compatible with multiple platforms (Mini Programs, H5, iOS App, Android App), including nvue and vue pages.
Therefore, before you fix bugs and submit PRs, please try your best to test compatibility on these platforms. It would be best to include test screenshots to facilitate review. Thank you very much!
## Installation And Configuration
uView Pro supports both `npm` and `uni_modules` installation methods, and the configuration is highly consistent. No matter which method you use, you can use easycom for automatic component import, greatly improving development efficiency. The following is a unified configuration guide:
### 1. Install uView Pro
- npm installation:
```bash
npm install uview-pro
# or
yarn add uview-pro
# or
pnpm add uview-pro
```
- uni_modules installation:
Download from HBuilderX plugin market or manually, and place uView Pro in the `uni_modules` directory.
[Plugin Market: https://ext.dcloud.net.cn/plugin?id=24633](https://ext.dcloud.net.cn/plugin?id=24633)
### 2. Import uView Pro main library
Import and register uView Pro in `main.ts`:
```js
// main.ts
import { createSSRApp } from 'vue';
// npm method
import uViewPro from 'uview-pro';
// uni_modules method
// import uViewPro from "@/uni_modules/uview-pro";
export function createApp() {
const app = createSSRApp(App);
app.use(uViewPro);
return {
app
};
}
```
### 3. Import global styles
Import theme styles in `uni.scss`:
```scss
/* uni.scss */
// npm method
@import 'uview-pro/theme.scss';
// uni_modules method
// @import "@/uni_modules/uview-pro/theme.scss";
```
Import base styles at the top of `App.vue`:
```scss
<style lang="scss">
// npm method
@import "uview-pro/index.scss";
// uni_modules method
// @import "@/uni_modules/uview-pro/index.scss";
</style>
```
### 4. Configure easycom for automatic component import
Configure easycom rules in `pages.json` for automatic component import:
```json
// pages.json
{
"easycom": {
"autoscan": true,
"custom": {
// npm method
"^u-(.*)": "uview-pro/components/u-$1/u-$1.vue"
// uni_modules method
// "^u-(.*)": "@/uni_modules/uview-pro/components/u-$1/u-$1.vue"
}
},
"pages": [
// ...
]
}
```
**Tips**
- 1. After modifying the `easycom` rules, you need to restart HX or recompile the project.
- 2. Please ensure there is only one easycom field in `pages.json`, otherwise please merge multiple rules yourself.
- 3. It must be placed inside `custom`, otherwise it will not take effect.
### 5. Volar Type Support
For global Volar type support in CLI projects, add the following to `tsconfig.json`:
```json
{
"compilerOptions": {
// npm method
"types": ["uview-pro/types"]
// uni_modules method
// "types": ["@/uni_modules/uview-pro/types"]
}
}
```
> HBuilderX projects do not support the types configuration in tsconfig.json. CLI projects are recommended to configure for the best TS experience.
### 6. Component Usage
After configuration, you can use uView Pro components directly in SFC without import or components registration:
```vue
<template>
<u-button type="primary">Button</u-button>
</template>
```
See [Quick Start](https://uviewpro.cn/zh/components/quickstart.html) for more details.
## Donate to uView Pro
The documentation and framework source code of uView Pro are developed based on uView UI and are therefore open source and free. If you think uView Pro has helped your development work, you can donate to support uView Pro. There is no threshold for donation, even a cup of cola is appreciated (believe me, this is more meaningful than tipping a streamer).
<table class="table">
<tr>
<td><img src="https://ik.imagekit.io/anyup/images/social/wechat-pay.png" width="250" height="345" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/ali-pay.png" width="250" height="345" ></td>
</tr>
<tr>
<td align="center"><strong>WeChat</strong><br></td>
<td align="center"><strong>Alipay</strong><br></td>
</tr>
</table>
## Contributors
<a href="https://github.com/anyup/uView-Pro/graphs/contributors">
<img alt="Contributors" src="https://contrib.rocks/image?repo=anyup/uView-Pro" />
</a>
## License
uView Pro follows the [MIT](https://en.wikipedia.org/wiki/MIT_License) open source license, which means you do not need to pay any fees or obtain authorization to use uView Pro in your products.
## Acknowledgements
Special thanks to the uView UI development team, all contributors to uView UI, and all contributors to uView Pro.
- [Github](https://github.com/anyup/uview-pro)
- [Gitee](https://gitee.com/anyup/uview-pro)
- [uView UI 1.0](https://github.com/umicro/uView)
- [uView UI 2.0](https://github.com/umicro/uView2.0)
+272
View File
@@ -0,0 +1,272 @@
<!-- 语言切换按钮 -->
<p align="right" style="margin-top: 10px;">
<a href="README.en.md" style="padding: 6px 16px; background: #2979ff; color: #fff; border-radius: 6px; text-decoration: none; font-weight: bold;">English</a>
<span style="padding: 6px 16px; background: #ededed; color: #333; border-radius: 6px; margin-left: 8px; font-weight: bold;">中文</span>
</p>
<p align="center">
<img alt="logo" src="https://ik.imagekit.io/anyup/uview-pro/common/logo-new.png" width="120" height="120" style="margin-bottom: 10px;">
</p>
<h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView Pro</h3>
<h3 align="center">uni-app Vue3 多平台快速开发的 UI 框架</h3>
<div align="center">
[![star](https://gitee.com/anyup/uView-Pro/badge/star.svg?theme=gvp)](https://gitee.com/anyup/uView-Pro)
[![fork](https://gitee.com/anyup/uView-Pro/badge/fork.svg?theme=gvp)](https://gitee.com/anyup/uView-Pro)
[![stars](https://img.shields.io/github/stars/anyup/uView-Pro?style=flat-square&logo=GitHub)](https://github.com/anyup/uView-Pro)
[![forks](https://img.shields.io/github/forks/anyup/uView-Pro?style=flat-square&logo=GitHub)](https://github.com/anyup/uView-Pro)
[![issues](https://img.shields.io/github/issues/anyup/uView-Pro?style=flat-square&logo=GitHub)](https://github.com/anyup/uView-Pro/issues)
[![npm version](https://img.shields.io/npm/v/uview-pro)](https://www.npmjs.com/package/uview-pro)
[![Website](https://img.shields.io/badge/uView%20Pro-docs-blue?style=flat-square)](https://uviewpro.cn)
[![node version](https://img.shields.io/badge/node-%3E%3D18-green)](https://nodejs.org/)
[![pnpm version](https://img.shields.io/badge/pnpm-%3E%3D7.30-green)](https://pnpm.io/)
[![license](https://img.shields.io/github/license/anyup/uView-Pro?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)
</div>
## 说明
`uView UI`,是 [uni-app](https://uniapp.dcloud.io/) 生态优秀的 UI 框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。
`uView Pro`,是全面支持 Vue3.0、TypeScript 的 uni-app 生态框架,uView Pro 的基线版本是基于 uView 1.8.8 修改,使用 TypeScript 完全重构,目前已全面支持 uni-app Vue3.0。
## [组件库文档:https://uviewpro.cn](https://uviewpro.cn)
## [快速启动模板:https://starter.uviewpro.cn](https://starter.uviewpro.cn)
## 特性
- 兼容安卓,iOS,微信小程序,H5,QQ 小程序,百度小程序,支付宝小程序,头条小程序
- 70+精选组件,功能丰富,多端兼容,让您快速集成,开箱即用
- 众多贴心的 JS 利器,让您飞镖在手,召之即来,百步穿杨
- 众多的常用页面和布局,让您专注逻辑,事半功倍
- 详尽的文档支持,现代化的演示效果
- 按需引入,精简打包体积
## 鸿蒙预览
🎉🎉 uView Pro 鸿蒙端应用已正式上线华为鸿蒙应用市场,为您提供完整的业务场景演示平台,包含组件库、模板示例、场景案例等,支持一键复制下载,帮助开发者快速上手并体验组件的实际应用价值!
> 系统要求:仅支持 HarmonyOS 5.0 及以上版本设备
<table>
<tr align="center">
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_harmony.png" width="180" height="180" ></td>
</tr>
<tr>
<td align="center"><strong>鸿蒙应用</strong><br>(浏览器扫码)</td>
</tr>
</table>
## 手机预览
您可以通过**微信**或**手机浏览器**扫描以下二维码,查看最佳的演示效果。
<table class="table">
<tr>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_wx.jpg" width="150" height="150" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_alipay.png" width="150" height="150" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_h5.png" width="150" height="150" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qr_uview_pro_android.png" width="150" height="150" ></td>
</tr>
<tr>
<td align="center"><strong>微信小程序</strong><br>(微信扫码)</td>
<td align="center"><strong>支付宝小程序</strong><br>(支付宝扫码)</td>
<td align="center"><strong>H5</strong><br>(浏览器扫码)</td>
<td align="center"><strong>Android</strong><br>(浏览器扫码)</td>
</tr>
</table>
运行示例工程,请[下载源码](https://github.com/anyup/uview-pro)后,在项目根目录执行以下命令:
```bash
pnpm install
pnpm dev
```
更多运行和构建命令参考:[pnpm 运行指南](README-pnpm.md)
## 链接
- [Github](https://github.com/anyup/uview-pro)
- [Gitee](https://gitee.com/anyup/uview-pro)
- [官方文档](https://uviewpro.cn)
- [更新日志](https://github.com/anyup/uView-Pro/blob/master/src/uni_modules/uview-pro/changelog.md)
## 交流反馈
`uView Pro` 微信交流群: [点击进入](https://uviewpro.cn/zh/resource/about.html)
`uView Pro` QQ 交流群: [点击进入](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=98nSVDldWEbDdq4lxiP4aL7uATfMSlI6&authKey=G2yQJ5MQiKzMldaxBsIfKt17NuJuUw8Fr6zdKLggc6NZXgw4BVbqkU2U3EE994yd&noverify=0&group_code=811732166)
<table class="table">
<tr>
<td><img src="https://ik.imagekit.io/anyup/images/social/weixin-chat-cl.png" width="250" height="345" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/qq-chat.png" width="250" height="345" ></td>
</tr>
<tr>
<td align="center"><strong>微信群</strong><br></td>
<td align="center"><strong>QQ群</strong><br></td>
</tr>
</table>
## 关于 PR
我们非常乐意接受各位的优质 PR,但在此之前我希望您了解 `uView Pro` 是一个需要兼容多个平台的(小程序、h5、iOS App、Android App)包括 nvue 页面、vue 页面。
所以希望在您修复 bug 并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢!
## 安装配置
`uView Pro` 支持 `npm` 和 `uni_modules` 两种主流安装方式,配置方式高度一致。无论采用哪种方式,均可通过 `easycom` 实现组件自动引入,极大提升开发效率。以下为统一的配置说明:
### 1. 安装 uView Pro
- npm 安装:
```bash
npm install uview-pro
# 或
yarn add uview-pro
# 或
pnpm add uview-pro
```
- uni_modules 安装:
通过 HBuilderX 插件市场或手动下载,将 uView Pro 放入 `uni_modules` 目录。
[插件市场:https://ext.dcloud.net.cn/plugin?id=24633](https://ext.dcloud.net.cn/plugin?id=24633)
### 2. 引入 uView Pro 主库
在 `main.ts` 中引入并注册 uView Pro:
```js
// npm 方式
import uViewPro from 'uview-pro'
import { createSSRApp } from 'vue'
// uni_modules 方式
// import uViewPro from "@/uni_modules/uview-pro";
export function createApp() {
const app = createSSRApp(App)
app.use(uViewPro)
return {
app
}
}
```
### 3. 引入全局样式
在 `uni.scss` 中引入主题样式:
```scss
/* npm 方式 */
@import 'uview-pro/theme.scss';
/* uni_modules 方式 */
/* @import "@/uni_modules/uview-pro/theme.scss"; */
```
在 `App.vue` 首行引入基础样式:
```scss
<style lang="scss">
/* npm 方式 */
@import "uview-pro/index.scss";
/* uni_modules 方式 */
/* @import "@/uni_modules/uview-pro/index.scss"; */
</style>
```
### 4. 配置 easycom 自动引入组件
在 `pages.json` 中配置 `easycom` 规则,实现组件自动引入:
```json
{
"easycom": {
"autoscan": true,
"custom": {
// npm 方式
"^u-(.*)": "uview-pro/components/u-$1/u-$1.vue"
// uni_modules 方式
// "^u-(.*)": "@/uni_modules/uview-pro/components/u-$1/u-$1.vue"
}
},
"pages": []
}
```
**温馨提示**
- 1.修改 `easycom` 规则后需重启 HX 或重新编译项目。
- 2.请确保 `pages.json` 中只有一个 easycom 字段,否则请自行合并多个规则。
- 3.一定要放在 `custom` 内,否则无效。
### 5. Volar 类型提示支持
如需在 `CLI` 项目中获得 `Volar` 的全局类型提示,请在 `tsconfig.json` 中添加:
```json
{
"compilerOptions": {
// npm 方式
"types": ["uview-pro/types"]
// uni_modules 方式
// "types": ["@/uni_modules/uview-pro/types"]
}
}
```
> HBuilderX 项目暂不支持 `tsconfig.json` 的 `types` 配置,`CLI` 项目推荐配置以获得最佳 `TS` 体验。
### 6. 组件使用
配置完成后,无需 `import` 和 `components` 注册,可直接在 `SFC` 中使用 `uView Pro` 组件:
```vue
<template>
<u-button type="primary">
按钮
</u-button>
</template>
```
请通过[快速上手](https://uviewpro.cn/zh/components/quickstart.html)了解更详细的内容
## 捐赠 uView Pro
`uView Pro` 文档内容和框架源码基于 `uView UI` 二次开发,因此全部开源免费,如果您认为 `uView Pro` 帮到了您的开发工作,您可以捐赠 `uView Pro` 的研发工作,捐赠无门槛,哪怕是一杯可乐也好(相信这比打赏主播更有意义)。
<table class="table">
<tr>
<td><img src="https://ik.imagekit.io/anyup/images/social/wechat-pay.png" width="250" height="345" ></td>
<td><img src="https://ik.imagekit.io/anyup/images/social/ali-pay.png" width="250" height="345" ></td>
</tr>
<tr>
<td align="center"><strong>微信</strong><br></td>
<td align="center"><strong>支付宝</strong><br></td>
</tr>
</table>
## 贡献者
<a href="https://github.com/anyup/uView-Pro/graphs/contributors">
<img alt="Contributors" src="https://contrib.rocks/image?repo=anyup/uView-Pro" />
</a>
## 版权信息
`uView Pro` 遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将 `uView Pro` 应用到您的产品中。
## 鸣谢
再次感谢 `uView UI` 开发团队,以及所有为 `uView UI` 的贡献者,以及所有为 `uView Pro` 的贡献者。
- [Github](https://github.com/anyup/uview-pro)
- [Gitee](https://gitee.com/anyup/uview-pro)
- [uView UI 1.0](https://github.com/umicro/uView)
- [uView UI 2.0](https://github.com/umicro/uView2.0)
+10
View File
@@ -0,0 +1,10 @@
import uniHelper from '@uni-helper/eslint-config'
export default uniHelper({
// match the project formatter (Prettier defaults) and CloudBuilder generated code: double quotes + semicolons
stylistic: {
indent: 2,
quotes: 'double',
semi: true,
},
})
@@ -0,0 +1,82 @@
{
app: {
signingConfigs: [
{
name: 'default',
type: 'HarmonyOS',
material: {
certpath: 'D:/workspace/anyup/uView-Pro-Starter/docs/uviewpro.cer',
keyAlias: 'uviewpro',
keyPassword: '',
profile: 'D:/workspace/anyup/uView-Pro-Starter/docs/uviewpro_prodRelease.p7b',
signAlg: 'SHA256withECDSA',
storeFile: 'D:/workspace/anyup/uView-Pro-Starter/docs/uviewpro.p12',
storePassword: ''
}
},
{
name: 'release',
type: 'HarmonyOS',
material: {
storeFile: 'D:/workspace/anyup/uView-Pro-Starter/docs/uviewpro.p12',
storePassword: '',
keyAlias: 'uviewpro',
keyPassword: '',
signAlg: 'SHA256withECDSA',
profile: 'D:/workspace/anyup/uView-Pro-Starter/docs/uviewpro_prodRelease.p7b',
certpath: 'D:/workspace/anyup/uView-Pro-Starter/docs/uviewpro.cer'
}
}
],
products: [
{
name: 'default',
signingConfig: 'default',
targetSdkVersion: '6.0.0(20)',
compatibleSdkVersion: '5.0.0(12)',
compatibleSdkVersionStage: 'beta6',
runtimeOS: 'HarmonyOS',
buildOption: {
strictMode: {
caseSensitiveCheck: true,
useNormalizedOHMUrl: true
}
}
},
{
name: 'release',
signingConfig: 'release',
targetSdkVersion: '6.0.0(20)',
compatibleSdkVersion: '5.0.0(12)',
compatibleSdkVersionStage: 'beta6',
runtimeOS: 'HarmonyOS',
buildOption: {
strictMode: {
caseSensitiveCheck: true,
useNormalizedOHMUrl: true
}
}
}
],
buildModeSet: [
{
name: 'debug'
},
{
name: 'release'
}
]
},
modules: [
{
name: 'entry',
srcPath: './entry',
targets: [
{
name: 'default',
applyToProducts: ['default']
}
]
}
]
}
+21
View File
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="icon" href="static/logo.png">
<script>
const coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)')
|| CSS.supports('top: constant(a)'))
document.write(
`<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0${
coverSupport ? ', viewport-fit=cover' : ''}" />`)
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
+19980
View File
File diff suppressed because it is too large. Load diff
+108
View File
@@ -0,0 +1,108 @@
{
"name": "youjiala",
"type": "module",
"version": "1.0.0",
"private": true,
"packageManager": "pnpm@10.34.5",
"engines": {
"node": ">=18.0.0",
"pnpm": ">=10.0.0"
},
"scripts": {
"dev": "uni",
"dev:custom": "uni -p",
"dev:h5": "uni",
"dev:h5:ssr": "uni --ssr",
"dev:app": "uni -p app",
"dev:app-android": "uni -p app-android",
"dev:app-ios": "uni -p app-ios",
"dev:mp-alipay": "uni -p mp-alipay",
"dev:mp-baidu": "uni -p mp-baidu",
"dev:mp-jd": "uni -p mp-jd",
"dev:mp-kuaishou": "uni -p mp-kuaishou",
"dev:mp-lark": "uni -p mp-lark",
"dev:mp-qq": "uni -p mp-qq",
"dev:mp-toutiao": "uni -p mp-toutiao",
"dev:mp-weixin": "uni -p mp-weixin",
"dev:mp-xhs": "uni -p mp-xhs",
"dev:mp-dingtalk": "uni -p mp-dingtalk",
"dev:quickapp-webview": "uni -p quickapp-webview",
"dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
"dev:quickapp-webview-union": "uni -p quickapp-webview-union",
"build": "uni build",
"build:custom": "uni build -p",
"build:h5": "uni build",
"build:h5:ssr": "uni build --ssr",
"build:app": "uni build -p app",
"build:app-android": "uni build -p app-android",
"build:app-ios": "uni build -p app-ios",
"build:mp-alipay": "uni build -p mp-alipay",
"build:mp-baidu": "uni build -p mp-baidu",
"build:mp-jd": "uni build -p mp-jd",
"build:mp-kuaishou": "uni build -p mp-kuaishou",
"build:mp-lark": "uni build -p mp-lark",
"build:mp-qq": "uni build -p mp-qq",
"build:mp-toutiao": "uni build -p mp-toutiao",
"build:mp-weixin": "uni build -p mp-weixin",
"build:mp-xhs": "uni build -p mp-xhs",
"build:mp-dingtalk": "uni build -p mp-dingtalk",
"build:quickapp-webview": "uni build -p quickapp-webview",
"build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
"build:quickapp-webview-union": "uni build -p quickapp-webview-union",
"type-check": "vue-tsc --noEmit",
"lint": "eslint .",
"lint:fix": "eslint . --fix"
},
"dependencies": {
"@dcloudio/uni-app": "3.0.0-4080720251210001",
"@dcloudio/uni-app-harmony": "3.0.0-4080720251210001",
"@dcloudio/uni-app-plus": "3.0.0-4080720251210001",
"@dcloudio/uni-components": "3.0.0-4080720251210001",
"@dcloudio/uni-h5": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-alipay": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-baidu": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-harmony": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-jd": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-kuaishou": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-lark": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-qq": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-toutiao": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-weixin": "3.0.0-4080720251210001",
"@dcloudio/uni-mp-xhs": "3.0.0-4080720251210001",
"@dcloudio/uni-quickapp-webview": "3.0.0-4080720251210001",
"crypto-js": "^4.1.1",
"dayjs": "^1.11.23",
"pinia": "2.2.4",
"pinia-plugin-persistedstate": "3.2.1",
"uview-pro": "^0.6.15",
"vue": "3.4.21",
"vue-router": "4.5.1",
"wxmp-rsa": "^2.1.0",
"z-paging": "^2.8.8"
},
"devDependencies": {
"@dcloudio/types": "3.4.19",
"@dcloudio/uni-automator": "3.0.0-4080720251210001",
"@dcloudio/uni-cli-shared": "3.0.0-4080720251210001",
"@dcloudio/uni-stacktracey": "3.0.0-4080720251210001",
"@dcloudio/vite-plugin-uni": "3.0.0-4080720251210001",
"@iconify-json/carbon": "^1.2.15",
"@mini-types/alipay": "^3.0.14",
"@types/crypto-js": "^4.2.2",
"@types/node": "^25.0.3",
"@uni-helper/eslint-config": "^0.6.1",
"@uni-helper/plugin-uni": "0.1.0",
"@uni-helper/uni-types": "^1.0.0-alpha.7",
"@uni-helper/unocss-preset-uni": "^0.2.11",
"@uni-helper/vite-plugin-uni-components": "^0.2.6",
"@vue/runtime-core": "3.4.21",
"@vue/tsconfig": "^0.8.1",
"eslint": "^9.39.2",
"miniprogram-api-typings": "^4.1.2",
"sass": "1.64.2",
"typescript": "^5.9.3",
"unocss": "^66.10.1",
"vite": "5.2.8",
"vue-tsc": "^3.2.1"
}
}
+8
View File
@@ -0,0 +1,8 @@
allowBuilds:
'@uni-helper/unocss-preset-uni': true
bufferutil: true
core-js: true
esbuild: true
vue-demi: true
overrides:
unconfig: 7.3.2
+30
View File
@@ -0,0 +1,30 @@
<!-- eslint-disable no-console -->
<script setup lang="ts">
import { onLoad } from "@dcloudio/uni-app";
import { useLocale, useTheme } from "uview-pro";
import { onMounted } from "vue";
const { darkMode, currentTheme } = useTheme();
const { currentLocale, locales } = useLocale();
onLoad(() => {
console.log("App.root.vue onLoad");
console.log("darkMode->", darkMode.value);
console.log("theme->", currentTheme.value?.name);
console.log("locale->", currentLocale.value?.name);
console.log("locales->", locales.value);
});
onMounted(() => {
console.log("App.root.vue onMounted");
});
</script>
<template>
<u-config-provider>
<slot />
<u-toast global />
</u-config-provider>
</template>
<style lang="scss"></style>
+14
View File
@@ -0,0 +1,14 @@
<script setup lang="ts">
import { onLaunch } from "@dcloudio/uni-app";
import { setupNavGuard } from "@/router/nav-guard";
// 启动即挂导航拦截器:首次站内跳转就被管住(冷启动深链由页面级 useAuthGuard 复核)
onLaunch(() => {
setupNavGuard();
});
</script>
<style lang="scss">
@import "uview-pro/index.scss";
@import "common/style.scss";
</style>
+53
View File
@@ -0,0 +1,53 @@
export const APP_INFO: {
name: string;
version: string;
buildTime: string;
platform: string;
} = {
name: "uViewPro(跨平台UI组件库)",
version: "1.0.9",
buildTime: "2025-12-23",
platform: getPlatform(),
};
export const UVIEW_PRO_INFO = {
name: "uview-pro",
version: "0.4.7",
buildTime: "2025-12-19",
};
function getPlatform() {
let platform = uni.getSystemInfoSync().platform;
if (platform) {
return platform;
}
// #ifdef H5
platform = "H5";
// #endif
// #ifdef MP-WEIXIN
platform = "微信小程序";
// #endif
// #ifdef MP-ALIPAY
platform = "支付宝小程序";
// #endif
// #ifdef APP-PLUS
platform = "App";
// #endif
// #ifdef APP-HARMONY
platform = "HarmonyOS";
// #endif
platform = "未知平台";
return platform;
}
export const ONBOARDING_STORAGE_BASE_KEY = `guide-onboarded-${APP_INFO.version}`;
export const GUIDE_TABS_KEY = `guide-page-tabs-${APP_INFO.version}`;
export const GUIDE_FAB_KEY = `guide-page-fab-${APP_INFO.version}`;
export const GUIDE_TABBAR_KEY = `guide-page-tabbar-${APP_INFO.version}`;
export const GUIDE_THEME_SWITCHER_KEY = `guide-theme-switcher-${APP_INFO.version}`;
export const GUIDE_EXPERIENCE_KEY = `guide-experience-entry-${APP_INFO.version}`;
@@ -0,0 +1,517 @@
import type {
RequestConfig,
RequestInterceptor,
RequestMeta,
RequestOptions,
} from "uview-pro";
import type { JwtInfo } from "@/data/auto/jwtInfo";
import { http } from "uview-pro";
import { toBackendLocale } from "@/common/locale-const";
import { WebSitePolicy } from "@/policy/custom/webSitePolicy";
import {
currentRealPath,
errorPageUrl,
pageUrl,
resolvePageName,
toRealPath,
} from "@/router/routes";
/**
* 全项目唯一请求层(基于 uview-pro httpPlugin,main.ts 已注册)
* 整合了原 common/request 模块的全部能力:
* - JWT 登录态存取 + Authorization 头
* - 401 并发刷新令牌单例(refreshPromise)+ _retry 防递归
* - 业务异常识别(.NET CloudBuilder 的 ValidatedException / ServiceErrorException)
* - meta 驱动的 loading / toast 开关
* - uploadFile / downloadFile 文件传输工具
*/
// ==================== 全局配置 ====================
// 后端地址唯一来源:policy/custom/webSitePolicy(代码生成器维护,改地址只动那里)
// 与旧系统 WebVue 同逻辑:开发构建用 WebApiRootDev,发布构建用 WebApiRoot
// App 端开发构建(真机/模拟器)连不上宿主机的 localhost,改用 WebApiRootDevApp
// 小程序端需在平台配置 https 合法域名;本地 H5 联调如遇 CORS 需后端放行开发端口
let devBaseUrl = WebSitePolicy.WebApiRootDev;
// #ifdef APP-PLUS
devBaseUrl = WebSitePolicy.WebApiRootDevApp;
// #endif
export const baseUrl = import.meta.env.DEV
? devBaseUrl
: WebSitePolicy.WebApiRoot;
// 登录页真实路径:getCurrentPages() 拿到的 route 永远是 pages.json 里的 path,
// 不含 H5 运行时补的短地址别名,故路径比较只能用真实路径,跳转 URL 才走 pageUrl()
const loginPage = toRealPath("login");
const timeout = 60000;
// ==================== 登录态(JWT) ====================
// JwtInfo 使用后端对齐的权威定义(@/data/auto/jwtInfo:AccessToken / RefreshToken / CreatedTime),
// 此处再导出,保持 import { JwtInfo } from '@/common/http.interceptor' 的调用方兼容
export type { JwtInfo };
const JWT_STORAGE_KEY = "request-jwt-info";
/** 读取登录令牌信息 */
export function getJwtInfo(): JwtInfo | null {
return (uni.getStorageSync(JWT_STORAGE_KEY) as JwtInfo) || null;
}
/** 登录成功后写入令牌(供登录页调用) */
export function setLoginJwt(jwt: JwtInfo) {
uni.setStorageSync(JWT_STORAGE_KEY, jwt);
}
/** 清除登录态 */
export function clearLoginState() {
uni.removeStorageSync(JWT_STORAGE_KEY);
}
function getToken(): string {
return getJwtInfo()?.AccessToken ?? "";
}
/**
* 认证失败统一收尾:必要时清登录态并跳登录页;
* 已经在登录页就不再跳,避免死循环
*/
function goLogin(clearState = true) {
if (clearState)
clearLoginState();
const pages = getCurrentPages();
const current = pages[pages.length - 1];
const currentPath = current ? `/${current.route}` : "";
if (currentPath !== loginPage)
uni.reLaunch({ url: pageUrl("login") });
}
/**
* 权限不足统一收尾:跳 403 页并把出错地址用 ?from= 带过去。
* 这里不复用 router/nav-guard 的 jumpToError:nav-guard 依赖本模块读登录态,
* 反向 import 会形成循环依赖;本页已在 403 时不再跳,避免页面自身请求 403 导致来回刷
*/
function goForbidden() {
const real = currentRealPath();
const name = resolvePageName(real);
if (name === "error403") {
return;
}
// from 是给用户看的地址:H5 用短地址,其它端用真实路径
const url = errorPageUrl("error403", name ? pageUrl(name) : real);
uni.redirectTo({ url, fail: () => uni.reLaunch({ url }) });
}
// ==================== 401 并发刷新(原 axios 封装的精华设计) ====================
/**
* 正在进行的刷新请求 Promise。
* 多个请求同时 401 时共用同一次刷新:后端每次刷新都会换新 RefreshToken,
* 各自刷新会让先完成的那个把其它请求携带的旧 RefreshToken 作废,
* 结果被判定「无效的令牌,请重新登录」而把人踢下线。
*/
let refreshPromise: Promise<JwtInfo> | null = null;
/** 真正发起刷新:直接走 uni.request 绕开 http 单例,防止刷新自身 401 无限递归 */
function doRefreshToken(): Promise<JwtInfo> {
const data = getJwtInfo();
if (!data)
return Promise.reject(new Error("无登录态,无法刷新令牌"));
return new Promise<JwtInfo>((resolve, reject) => {
uni.request({
url: `${baseUrl}/Auth/RefreshToken`,
method: "POST",
data,
timeout,
success: (res) => {
if (res.statusCode >= 200 && res.statusCode < 300 && res.data) {
const jwt = res.data as JwtInfo;
setLoginJwt(jwt);
resolve(jwt);
}
else {
// 带上 status:goLogin 据此区分「服务端拒绝」与「网络抖动」
const err: any = new Error("刷新令牌失败");
err.status = res.statusCode;
reject(err);
}
},
fail: (err: any) => reject(err), // 网络类异常无 status,保留登录态
});
});
}
/** 取得「共用的刷新动作」:并发 401 只刷新一次 */
function refreshTokenOnce(): Promise<JwtInfo> {
if (!refreshPromise) {
refreshPromise = doRefreshToken().finally(() => {
refreshPromise = null;
});
}
return refreshPromise;
}
// ==================== 提示与业务异常 ====================
/** 从后端错误体里提取可读文案(兼容 .NET 序列化与常见 {message,msg} 格式) */
function extractErrorMessage(data: any): string {
if (data == null)
return "";
if (typeof data === "string")
return data;
return data.Message ?? data.message ?? data.msg ?? "";
}
/**
* 发给后端的 Culture / locale 头统一取值(与旧系统 CulturePolicy 字面一致:zh-cn / en)。
* uni.getLocale() 在 H5 常返回 zh-Hans 等 BCP-47 变体,直传会让服务端
* ServiceMessageManager.ComposeMessage 查不到词条,抛空 Message 异常,
* 前端只能看到兜底文案,故统一归一化(取值定义见 common/locale-const.ts)。
*/
export function backendLocale(): string {
return toBackendLocale(String(uni.getLocale?.() ?? ""));
}
/** 长错误用 modal 完整展示,短错误用 toast */
function notifyError(detail: string, fallback = "请求失败") {
const content = detail || fallback;
if (content.length > 14) {
uni.showModal({
title: fallback,
content: content.slice(0, 200),
showCancel: false,
});
}
else {
uni.showToast({ title: content, icon: "none" });
}
}
/**
* 业务异常识别:HTTP 成功但 body 是 .NET 异常对象时命中
* @returns 命中返回异常消息(调用方需抛出),未命中返回空串
*/
function detectBusinessException(data: any): string {
if (!data || typeof data !== "object" || !data.SourceCode)
return "";
const msg = extractErrorMessage(data) || "业务处理失败";
if (data.SourceCode === "CloudBuilder.Core.ValidatedException") {
uni.showModal({
title: "业务校验失败",
content: msg.slice(0, 200),
showCancel: false,
});
return msg;
}
if (data.SourceCode === "CloudBuilder.Core.ServiceErrorException") {
notifyError(msg, "服务异常");
return msg;
}
return "";
}
// ==================== 全局配置(httpPlugin 注册用) ====================
const httpRequestConfig: RequestConfig = {
baseUrl,
header: {
"content-type": "application/json",
},
timeout,
meta: {
originalData: true, // 拦截器收到完整响应(含 statusCode/header),自行解包
toast: true, // 出错默认提示,单次请求可传 meta.toast=false 关闭
loading: false, // 默认不显示 loading,单次请求传 meta.loading=true 开启
},
};
// ==================== 请求 / 响应拦截器(httpPlugin 注册用) ====================
const httpInterceptor: RequestInterceptor = {
// 请求拦截器:loading + method 归一化 + Authorization + locale
request: (config: RequestOptions) => {
const meta: RequestMeta = config.meta || {};
if (meta.loading) {
uni.showLoading({ title: "加载中...", mask: true });
}
// 归一化 method 大写:兼容代码生成的 service 层(传小写 "post"/"get",uni.request 要求大写)
config.method = String(
config.method || "GET",
).toUpperCase() as RequestOptions["method"];
const token = getToken();
if (token) {
// ASP.NET Core JWT Bearer 认证要求 Authorization 带 "Bearer " 前缀(旧系统同)
config.header.Authorization = token.startsWith("Bearer ")
? token
: `Bearer ${token}`;
}
config.header.locale = backendLocale();
return config;
},
// 响应拦截器(async:支持 401 等待刷新后重试)
response: async (response: any) => {
const meta: RequestMeta = response.config?.meta || {};
if (meta.loading) {
uni.hideLoading();
}
const { statusCode, data: rawData, errMsg } = response;
const config = response.config;
// 网络层错误
if (errMsg && errMsg.includes("Failed to connect")) {
meta.toast && notifyError("", "网络错误");
throw new Error("网络错误");
}
if (errMsg && errMsg.includes("request:fail")) {
meta.toast && notifyError("", "请求错误:未知");
throw new Error("请求错误:未知");
}
// 401 且未重试过:共用刷新 + 重试
if (statusCode === 401 && !config._retry) {
if (!getToken()) {
// 本来就没有登录态,直接去登录页
goLogin(true);
throw new Error("登录已失效,请重新登录");
}
// _retry 标记:重试请求再 401 时落入下方非 2xx 分支,防止无限递归
config._retry = true;
// ① 只把「刷新令牌」放进 try:刷新失败(服务端拒绝)才清登录态跳登录页;
// 网络抖动(无 status)保留登录态,避免一次断网把用户踢下线
try {
await refreshTokenOnce();
}
catch (refreshError: any) {
goLogin(!!(refreshError && refreshError.status));
throw refreshError;
}
// ② 重试放在 try 之外:它自身的失败(500/403 等)只算这次业务请求失败,
// 不能当成「刷新失败」,否则会误清已成功续期用户的登录态
return await http.request(config);
}
// 204:后端约定「无内容但业务自行处理」,静默透传
if (statusCode === 204)
return rawData;
// 请求错误(非 2xx)
if (!(statusCode >= 200 && statusCode < 300)) {
// 403:权限不足,跳 403 页列出原因(401 走上面的续期 / 回登录页链路,不进错误页)
if (statusCode === 403) {
goForbidden();
}
// 异常体优先:.NET 后端常以 500 + JSON 异常返回业务错误
const bizMsg = detectBusinessException(rawData);
if (bizMsg)
throw new Error(bizMsg);
const errorMessage = `请求错误[${statusCode}]`;
meta.toast && notifyError(extractErrorMessage(rawData), errorMessage);
const err: any = new Error(`${errorMessage}:${errMsg ?? ""}`);
err.status = statusCode; // 结构化状态码,供调用方按 401/403/500 分支处理
err.data = rawData;
throw err;
}
// 2xx 但 body 是业务异常
const bizMsg = detectBusinessException(rawData);
if (bizMsg)
throw new Error(bizMsg);
// 成功:剥壳返回 JSON body(service/* 经 utils/request 直接拿到后端实体对象)
return rawData;
},
};
// ==================== 文件传输工具(不属于主链路,无拦截器逻辑) ====================
export interface UploadOptions {
url: string;
/** 本地文件路径(chooseImage/chooseVideo 等获得) */
filePath: string;
/** 文件对应的 form-key,后端按此名接收(默认 'file') */
name?: string;
formData?: Record<string, any>;
header?: Record<string, any>;
}
/** 上传文件(uni.uploadFile 封装,自动携带 token,失败 reject 可感知) */
export function uploadFile(options: UploadOptions): Promise<any> {
const { url, filePath, name = "file", formData, header = {} } = options;
const fullUrl = url.indexOf("http") === 0 ? url : baseUrl + url;
const token = getToken();
return new Promise((resolve, reject) => {
uni.uploadFile({
url: fullUrl,
filePath,
name,
formData,
timeout,
header: token ? { Authorization: token, ...header } : header,
success: (res) => {
if (res.statusCode < 200 || res.statusCode >= 300) {
notifyError("", `上传失败[${res.statusCode}]`);
reject(new Error(`上传失败[${res.statusCode}]`));
return;
}
let data: any = res.data;
try {
data = typeof res.data === "string" ? JSON.parse(res.data) : res.data;
}
catch {
/* 非 JSON 响应保持原样 */
}
const bizMsg = detectBusinessException(data);
if (bizMsg)
reject(new Error(bizMsg));
else resolve(data);
},
fail: (err: any) => {
notifyError(err.errMsg ?? "", "上传失败");
reject(err);
},
});
});
}
export interface DownloadOptions {
url: string;
method?: "GET" | "POST";
data?: any;
/** 下载文件名前缀(自动追加时间戳与扩展名) */
filename: string;
extension?: string;
}
/** arraybuffer 按 UTF-8 解码(H5 用 TextDecoder,小程序简化实现) */
function abToString(buffer: ArrayBuffer): string {
if (typeof TextDecoder !== "undefined")
return new TextDecoder("utf-8").decode(new Uint8Array(buffer));
const bytes = new Uint8Array(buffer);
let result = "";
for (let i = 0; i < bytes.length;) {
const c = bytes[i];
if (c < 0x80) {
result += String.fromCharCode(c);
i += 1;
}
else if (c < 0xE0) {
result += String.fromCharCode(((c & 0x1F) << 6) | (bytes[i + 1] & 0x3F));
i += 2;
}
else {
result += String.fromCharCode(
((c & 0x0F) << 12)
| ((bytes[i + 1] & 0x3F) << 6)
| (bytes[i + 2] & 0x3F),
);
i += 3;
}
}
return result;
}
/** 生成 yyyyMMddHHmmss 时间戳(零依赖,替代 dayjs) */
function timestamp(): string {
const d = new Date();
const p = (n: number) => String(n).padStart(2, "0");
return `${d.getFullYear()}${p(d.getMonth() + 1)}${p(d.getDate())}${p(d.getHours())}${p(d.getMinutes())}${p(d.getSeconds())}`;
}
/**
* 下载并打开文件(默认按 Excel 处理)
* 关键防御:先探测 content-type——后端报错时返回的是 JSON 而不是文件
*/
export async function downloadFile(options: DownloadOptions): Promise<void> {
const { url, method = "POST", data, filename, extension = "xlsx" } = options;
const fullUrl = url.indexOf("http") === 0 ? url : baseUrl + url;
const token = getToken();
const res = await new Promise<UniApp.RequestSuccessCallbackResult>(
(resolve, reject) => {
uni.request({
url: fullUrl,
method,
data,
timeout,
responseType: "arraybuffer",
header: token ? { Authorization: token } : {},
success: resolve,
fail: err => reject(new Error(err.errMsg || "下载失败")),
});
},
);
const header = res.header as Record<string, any>;
const contentType = String(
header["content-type"] || header.Content_Type || header.ContentType || "",
);
if (contentType.includes("application/json")) {
const text
= typeof res.data === "string"
? res.data
: abToString(res.data as ArrayBuffer);
let msg = "下载失败";
try {
msg = extractErrorMessage(JSON.parse(text)) || msg;
}
catch {
/* 解析失败沿用默认文案 */
}
notifyError(msg, "下载失败");
throw new Error(msg);
}
if (res.statusCode < 200 || res.statusCode >= 300) {
notifyError("", `下载失败[${res.statusCode}]`);
throw new Error(`下载失败[${res.statusCode}]`);
}
const fileName = `${filename}${timestamp()}.${extension}`;
// #ifdef H5
// H5:blob + 隐藏 <a> 触发浏览器下载
const downloadUrl = URL.createObjectURL(new Blob([res.data as ArrayBuffer]));
const link = document.createElement("a");
link.href = downloadUrl;
link.download = fileName;
document.body.appendChild(link);
link.click();
link.remove();
URL.revokeObjectURL(downloadUrl);
// #endif
// #ifndef H5
// 小程序/App:写入本地用户目录后调起系统文档预览
const fs = uni.getFileSystemManager();
// 写入目录按平台区分:微信用 uni.env.USER_DATA_PATH(官方类型未声明故转 any);
// App 端无 uni.env,写 plus 私有目录 _doc/(openDocument 同样支持该相对路径)
let userDataPath = "";
// #ifdef MP-WEIXIN
userDataPath = (uni as any).env?.USER_DATA_PATH ?? "";
// #endif
// #ifdef APP-PLUS
userDataPath = "_doc";
// #endif
const filePath = `${userDataPath}/${fileName}`;
await new Promise<void>((resolve, reject) => {
fs.writeFile({
filePath,
data: res.data as ArrayBuffer,
success: () => resolve(),
fail: (err: any) => reject(new Error(err.errMsg || "写入文件失败")),
});
});
await new Promise<void>((resolve, reject) => {
uni.openDocument({
filePath,
showMenu: true,
success: () => resolve(),
fail: (err: any) => reject(new Error(err.errMsg || "无法打开文件")),
});
});
// #endif
}
// 导出(main.ts httpPlugin 注册用)
export { httpInterceptor, httpRequestConfig };
@@ -0,0 +1,33 @@
/**
* 语言 / Culture 取值:区分「后端 Culture 线值」与「uView Pro 语言包 name」两套
*
* - 后端(旧 CulturePolicy)严格字面:中文 "zh-cn"、英文 "en"。
* 发给后端的 locale 头 / 登录体 Culture 用这套,防止后端精确匹配失败。
* - uView Pro 内置语言包 name 固定为 "zh-CN" / "en-US"(大小写敏感)。
* 前端自定义语言包的 name 必须与之完全相同,config-provider 才能把自定义文案
* 与内置组件文案(picker / calendar / upload …)按 name 合并;
* 若写成 "zh-cn" 会被当成另一种语言,导致内置组件文案丢失 + 语言选择器出现重复项。
*/
/** 发给后端的 Culture 线值 */
export const BACKEND_LOCALE_ZH = "zh-cn";
export const BACKEND_LOCALE_EN = "en";
/** uView Pro 语言包 name(必须匹配内置大小写,勿改成 zh-cn / en) */
export const UI_LOCALE_ZH = "zh-CN";
export const UI_LOCALE_EN = "en-US";
/** 前端默认选中的语言包 name */
export const DEFAULT_LOCALE = UI_LOCALE_ZH;
/** 归一化任意 locale 变体(zh-Hans / zh-CN / en-US …)到后端 Culture 线值 */
export function toBackendLocale(value: string): string {
const l = String(value || "").toLowerCase();
return l.startsWith("en") ? BACKEND_LOCALE_EN : BACKEND_LOCALE_ZH;
}
/** 归一化任意 locale 变体(含 DB 的 Lang)到 uView 语言包 name */
export function toUiLocale(value: string): string {
const l = String(value || "").toLowerCase();
return l.startsWith("en") ? UI_LOCALE_EN : UI_LOCALE_ZH;
}
+36
View File
@@ -0,0 +1,36 @@
// 跨端密码加密工具(H5 / 小程序 / App 均可用)
// 说明:原 jsencrypt 依赖浏览器 window.crypto,小程序/App 无 DOM 会失败;
// wxmp-rsa 是 jsencrypt 同源 fork(jsbn 纯 JS 实现,随机数走 Math.random 兜底),
// 无任何浏览器全局依赖,API 与 jsencrypt 完全一致,一套代码全端运行。
import CryptoJS from "crypto-js";
import { JSEncrypt } from "wxmp-rsa";
/** MD5 摘要(小写 hex),与旧系统 WebVue 的 CryptoJS.MD5(...).toString() 输出一致 */
export function md5Hex(text: string): string {
return CryptoJS.MD5(text).toString();
}
/**
* RSA 公钥加密(PKCS#1 v1.5),返回 base64 密文
* @param plaintext 待加密明文
* @param publicKeyPem 后端 /Auth/GetRsaPublicKey 返回的 PEM 公钥(无换行的裸格式也可)
* @returns 加密失败返回空串,调用方需判空兜底
*/
export function rsaEncrypt(plaintext: string, publicKeyPem: string): string {
const encryptor = new JSEncrypt();
encryptor.setPublicKey(publicKeyPem);
// encrypt 失败返回 false(非 nullish),用 || 兜底为空串
return encryptor.encrypt(plaintext) || "";
}
/**
* 登录密码密文:RSA( Guid + MD5(密码) ),算法与旧系统 WebVue 登录完全一致
* Guid 同时作为请求体 LoginData.Guid 发送,服务端解密后比对前缀防重放
*/
export function encryptLoginPassword(
password: string,
guid: string,
publicKeyPem: string,
): string {
return rsaEncrypt(guid + md5Hex(password), publicKeyPem);
}
+12
View File
@@ -0,0 +1,12 @@
:deep(.code-text) {
font-family: 'Monaco', 'Consolas', monospace;
white-space: pre-wrap;
line-height: 1.4;
}
.code-block {
background: $u-bg-gray-light;
padding: 24rpx;
border-radius: 8rpx;
margin: 16rpx 0;
}
@@ -0,0 +1,116 @@
// 此自定义uView Pro主题生成于2025-11-29 13:18
// 地址:https://uviewpro.cn/zh/guide/themeGenerate.html
export default [
// 主题 1: 紫色
{
name: "purple",
label: "霞光紫",
color: {
primary: "#7c3aed",
error: "#f43f5e",
warning: "#f59e0b",
success: "#10b981",
info: "#6b7280",
primaryLight: "#f3e8ff",
errorLight: "#ffe4e6",
warningLight: "#fef3c7",
successLight: "#d1fae5",
infoLight: "#f3f4f6",
primaryDark: "#6d28d9",
errorDark: "#e11d48",
warningDark: "#d97706",
successDark: "#059669",
infoDark: "#4b5563",
primaryDisabled: "#c4b5fd",
errorDisabled: "#fbcfe8",
warningDisabled: "#fde68a",
successDisabled: "#a7f3d0",
infoDisabled: "#d1d5db",
},
},
// 主题 2: 绿色
{
name: "green",
label: "清翠绿",
color: {
primary: "#059669",
error: "#dc2626",
warning: "#eab308",
success: "#16a34a",
info: "#78716c",
primaryLight: "#ecfdf5",
errorLight: "#fee2e2",
warningLight: "#fefce8",
successLight: "#dcfce7",
infoLight: "#fafaf9",
primaryDark: "#047857",
errorDark: "#b91c1c",
warningDark: "#ca8a04",
successDark: "#15803d",
infoDark: "#57534e",
primaryDisabled: "#6ee7b7",
errorDisabled: "#fca5a5",
warningDisabled: "#facc15",
successDisabled: "#86efac",
infoDisabled: "#e7e5e4",
},
},
// 主题 3: 橙色
{
name: "orange",
label: "暖阳橙",
color: {
primary: "#f97316",
error: "#ef4444",
warning: "#fbbf24",
success: "#22c55e",
info: "#6366f1",
primaryLight: "#ffedd5",
errorLight: "#fee2e2",
warningLight: "#fef3c7",
successLight: "#dcfce7",
infoLight: "#e0e7ff",
primaryDark: "#ea580c",
errorDark: "#dc2626",
warningDark: "#f59e0b",
successDark: "#16a34a",
infoDark: "#4f46e5",
primaryDisabled: "#fed7aa",
errorDisabled: "#fecaca",
warningDisabled: "#fde68a",
successDisabled: "#86efac",
infoDisabled: "#c7d2fe",
},
},
// 主题 4: 深蓝 / 黑蓝色系
{
name: "dark",
label: "午夜蓝",
color: {
primary: "#0b3d91",
error: "#ef5350",
warning: "#ffa726",
success: "#66bb6a",
info: "#2196f3",
primaryLight: "#081a33",
errorLight: "#5e1914",
warningLight: "#663c00",
successLight: "#1b3a1b",
infoLight: "#003d66",
primaryDark: "#062a57",
errorDark: "#c62828",
warningDark: "#e65100",
successDark: "#2e7d32",
infoDark: "#01579b",
primaryDisabled: "#274a7a",
errorDisabled: "#ef9a9a",
warningDisabled: "#ffb74d",
successDisabled: "#81c784",
infoDisabled: "#4fc3f7",
},
},
];
@@ -0,0 +1,75 @@
<script setup lang="ts">
import type { PropType } from "vue";
import { $u } from "uview-pro";
import { reactive } from "vue";
defineProps({
navTitle: {
type: String,
default: "uView Pro",
},
showNavBack: {
type: Boolean,
default: true,
},
hideNav: {
type: Boolean,
default: false,
},
showTabbar: {
type: Boolean,
default: false,
},
customStyle: {
type: [String, Object] as PropType<string | Record<string, any>>,
default: "",
},
customClass: {
type: [String, Object] as PropType<string | Record<string, any>>,
default: "",
},
});
const background = reactive({
backgroundColor: "var(--u-type-primary)",
// 渐变色
backgroundImage: "linear-gradient(90deg, var(--u-type-primary-dark), var(--u-type-primary-disabled))",
});
</script>
<template>
<view class="app-page" :class="{ 'has-tabbar': showTabbar }" :style="$u.toStyle(customStyle)">
<!-- #ifndef MP-ALIPAY -->
<u-navbar
v-if="!hideNav" :is-back="showNavBack && !showTabbar" :title="navTitle" :background="background" :is-fixed="true"
:immersive="false" back-icon-name="arrow-leftward" title-width="350" title-color="#ffffff"
back-icon-color="#ffffff"
/>
<!-- #endif -->
<u-transition name="slide-left" :appear="true">
<slot />
</u-transition>
<app-tabbar v-if="showTabbar" />
</view>
</template>
<style lang="scss" scoped>
.app-page {
width: 100%;
min-height: 100vh;
// padding-bottom: 30rpx;
overflow-y: auto;
background-color: $u-bg-white;
-webkit-font-smoothing: antialiased;
color: $u-main-color;
transition: background 0.3s ease;
&.has-tabbar {
background-image: linear-gradient(135deg,
rgba(var(--u-type-primary-rgb, 41, 121, 255), 0.04) 0%,
rgba(var(--u-type-success-rgb, 25, 190, 107), 0.04) 40%,
rgba(var(--u-type-warning-rgb, 255, 153, 0), 0.04) 100%);
}
}
</style>
@@ -0,0 +1,29 @@
<script lang="ts">
</script>
<script setup lang="ts">
import { $u } from "uview-pro";
import { ref } from "vue";
import { useTabbarStore } from "@/stores";
defineOptions({
options: {
addGlobalClass: true,
// #ifndef MP-TOUTIAO
virtualHost: true,
// #endif
styleIsolation: "shared",
},
});
const { tabbarList } = useTabbarStore();
const current = ref<number>(0);
</script>
<template>
<u-tabbar v-model="current" :list="tabbarList" :active-color="$u.color.primary" />
</template>
<style lang="scss" scoped>
</style>
@@ -0,0 +1,316 @@
<script setup lang="ts">
import type { PropType } from "vue";
import { useLocale } from "uview-pro";
import { WebSitePolicy } from "@/policy/custom/webSitePolicy";
/**
* 错误页通用外壳(401 / 403 / 404 共用),移植自旧 WebVue 的 components/basic/ErrorPanel.vue。
* 只负责排版与配色,具体文案、图标、按钮由各错误页提供。
* 旧版用 ant-design 图标 + <a> 链接,这里换成 uView Pro 的 u-icon 与纯文本,跨端可用。
*/
defineProps({
/** 状态码,如 401 */
code: {
type: String,
required: true,
},
/** 状态码下方的短标签,如「UNAUTHORIZED · 未认证」 */
badge: {
type: String,
default: "",
},
/** 主题色:blue(默认)/ amber(无权限)/ violet(找不到页面) */
tone: {
type: String as PropType<"blue" | "amber" | "violet">,
default: "blue",
},
/** 主标题:一句话说清出了什么问题 */
title: {
type: String,
required: true,
},
/** 副标题:补充说明 */
description: {
type: String,
default: "",
},
/** 可能的原因清单 */
reasons: {
type: Array as PropType<string[]>,
default: () => [],
},
/** 出错的地址(守卫跳页时用 ?from= 带过来) */
from: {
type: String,
default: "",
},
/** 兜底提示 */
hint: {
type: String,
default: "",
},
});
// 「可能的原因」「出错的地址:」是组件自己的固定标签,走语言包;业务文案仍由各错误页传入
const { t } = useLocale();
</script>
<template>
<view class="ep" :class="`ep--${tone}`">
<!-- 顶部渐变头图:品牌 + 大号状态码 -->
<view class="ep-hero">
<view class="ep-brand">
<image class="ep-brand__logo" src="/static/logo.png" mode="aspectFill" />
<text class="ep-brand__name">
{{ WebSitePolicy.Title }}
</text>
</view>
<view class="ep-code">
{{ code }}
</view>
<view class="ep-tag">
{{ badge }}
</view>
</view>
<!-- 悬浮卡片:图标 + 说明 + 可能原因 + 操作 -->
<view class="ep-card">
<view class="ep-icon">
<slot name="icon" />
</view>
<view class="ep-title">
{{ title }}
</view>
<view v-if="description" class="ep-desc">
{{ description }}
</view>
<view v-if="reasons && reasons.length" class="ep-reasons">
<view class="ep-reasons__title">
<text>{{ t('ErrorPage.reasonsTitle') }}</text>
</view>
<view v-for="(item, i) in reasons" :key="i" class="ep-reasons__item">
<text class="ep-reasons__dot">
•
</text>
<text class="ep-reasons__text">
{{ item }}
</text>
</view>
</view>
<view v-if="from" class="ep-from">
<text>{{ t('ErrorPage.fromLabel') }}</text>
<text class="ep-from__code">
{{ from }}
</text>
</view>
<view class="ep-actions">
<slot name="actions" />
</view>
<view v-if="hint" class="ep-hint">
{{ hint }}
</view>
</view>
<view class="ep-footer">
<text class="ep-footer__line">
{{ WebSitePolicy.Copy }}
</text>
<text class="ep-footer__line">
{{ WebSitePolicy.Beian }}
</text>
</view>
</view>
</template>
<style lang="scss" scoped>
.ep {
/* 主题色:默认品牌蓝→青渐变,amber / violet 用于区分不同错误类型 */
--ep-from: #1677ff;
--ep-to: #36cfc9;
--ep-shadow: rgba(22, 119, 255, 0.18);
display: flex;
flex-direction: column;
min-height: 100vh;
background-color: $u-bg-white;
}
.ep--amber {
--ep-from: #fa8c16;
--ep-to: #ffc53d;
--ep-shadow: rgba(250, 140, 22, 0.18);
}
.ep--violet {
--ep-from: #722ed1;
--ep-to: #b37feb;
--ep-shadow: rgba(114, 46, 209, 0.18);
}
/* ---------- 头图 ---------- */
.ep-hero {
/* 状态栏高度:navigationStyle 为 custom,页面顶部会被状态栏压住 */
padding: calc(var(--status-bar-height) + 32rpx) 32rpx 88rpx;
border-radius: 0 0 44rpx 44rpx;
background-image: linear-gradient(135deg, var(--ep-from) 0%, var(--ep-to) 100%);
box-shadow: 0 12rpx 36rpx var(--ep-shadow);
color: $u-bg-white;
}
.ep-brand {
display: flex;
align-items: center;
}
.ep-brand__logo {
width: 52rpx;
height: 52rpx;
border-radius: 10rpx;
background-color: rgba(255, 255, 255, 0.24);
}
.ep-brand__name {
margin-left: 16rpx;
font-size: 30rpx;
font-weight: 600;
opacity: 0.95;
}
.ep-code {
margin-top: 16rpx;
font-size: 104rpx;
font-weight: 800;
line-height: 1;
letter-spacing: 4rpx;
}
.ep-tag {
margin-top: 12rpx;
font-size: 24rpx;
letter-spacing: 2rpx;
opacity: 0.9;
}
/* ---------- 悬浮卡片 ---------- */
.ep-card {
margin: -56rpx 32rpx 36rpx;
padding: 36rpx 32rpx 40rpx;
border-radius: 40rpx;
background-color: #fff;
box-shadow: 0 16rpx 48rpx rgba(15, 35, 60, 0.08);
}
.ep-icon {
display: flex;
align-items: center;
justify-content: center;
width: 96rpx;
height: 96rpx;
margin-bottom: 24rpx;
border-radius: 28rpx;
background-image: linear-gradient(135deg, var(--ep-from) 0%, var(--ep-to) 100%);
box-shadow: 0 4rpx 16rpx var(--ep-shadow);
}
.ep-title {
font-size: 36rpx;
font-weight: 700;
line-height: 1.4;
color: $u-main-color;
}
.ep-desc {
margin-top: 12rpx;
font-size: 27rpx;
line-height: 1.65;
color: $u-content-color;
}
.ep-reasons {
margin-top: 28rpx;
padding: 24rpx;
border: 2rpx solid #eef0f4;
border-radius: 28rpx;
background-color: #f7f9fc;
}
.ep-reasons__title {
margin-bottom: 12rpx;
font-size: 26rpx;
font-weight: 600;
color: $u-main-color;
}
.ep-reasons__item {
display: flex;
align-items: flex-start;
margin-top: 8rpx;
}
.ep-reasons__dot {
margin-right: 12rpx;
font-size: 26rpx;
line-height: 1.6;
color: var(--ep-from);
}
.ep-reasons__text {
flex: 1;
font-size: 26rpx;
line-height: 1.6;
color: $u-tips-color;
}
.ep-from {
margin-top: 24rpx;
font-size: 24rpx;
line-height: 1.6;
color: $u-light-color;
word-break: break-all;
}
.ep-from__code {
margin-left: 8rpx;
padding: 2rpx 12rpx;
border-radius: 12rpx;
background-color: #f2f4f8;
color: $u-main-color;
}
.ep-actions {
display: flex;
flex-direction: column;
/* 按钮来自各页面的插槽,拿不到本组件的 scoped 样式,故间距写在容器上 */
gap: 20rpx;
margin-top: 36rpx;
}
.ep-hint {
margin-top: 28rpx;
font-size: 24rpx;
line-height: 1.6;
color: $u-light-color;
}
/* ---------- 底部信息 ---------- */
.ep-footer {
display: flex;
flex: 1;
flex-direction: column;
align-items: center;
justify-content: flex-end;
padding: 0 32rpx 28rpx;
text-align: center;
}
.ep-footer__line {
font-size: 22rpx;
line-height: 32rpx;
color: $u-light-color;
}
</style>
+2
View File
@@ -0,0 +1,2 @@
export * from "./useAuthGuard";
export * from "./useLang";
@@ -0,0 +1,23 @@
import { onShow } from "@dcloudio/uni-app";
import { ensureCurrentPageAuthorized } from "@/router/nav-guard";
/**
* 页面级登录守卫(补 router/nav-guard 拦不到的那半边)
*
* uni.addInterceptor 只作用于站内跳转;H5 地址栏直达、分享链接冷启动、
* 小程序「编译进入指定页面」都不会调用任何导航 API,
* 因此受保护页面必须在自己的 onShow 里再校验一次。
*
* 放在 onShow 而不是 onLoad:从登录页 reLaunch 回来、或从后台切回前台时
* 令牌可能已经变化,每次显示都复核一次更稳妥。
*
* @param onAuthorized 校验通过后的初始化回调(拉数据等),被拦走时不会执行
*/
export function useAuthGuard(onAuthorized?: () => void): void {
onShow(() => {
if (!ensureCurrentPageAuthorized()) {
return;
}
onAuthorized?.();
});
}
@@ -0,0 +1,18 @@
import { useLocale } from "uview-pro";
export function useLang() {
const { setLocale } = useLocale();
// 切换语言
function switchLang(lang: string, locale?: string) {
// 切换uniapp语言
locale && uni.setLocale(locale);
uni.setStorageSync("UNI_LOCALE", locale);
// 切换uView Pro语言
setLocale(lang);
}
return {
switchLang,
};
}
@@ -0,0 +1,16 @@
import type { GridColumnInfo } from "./gridColumnInfo";
import type { SearchFilter } from "./searchFilter";
import type { SelectOption } from "./selectOption";
export class AbstractSearchCriteria {
public limit: number = 0;
public page: number = 0;
public clear: number = 0;
public orderby: string = "";
public orderbytag: string = "";
public Filter: SearchFilter[] = [];
public IsModal: boolean = false;
public ReportName: string = "";
public GridColumns: GridColumnInfo[] = [];
public SelectOptions: SelectOption[] = [];
}
@@ -0,0 +1,4 @@
export class BiometricLoginChallengeDto {
public RequestOptionsJson: string = "";
public ChallengeId: string = "";
}
@@ -0,0 +1,3 @@
export class BiometricRegistrationResultDto {
public CredentialIdBase64Url: string = "";
}
@@ -0,0 +1,68 @@
export class DmsFileDeleteLogEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UpdatedBy: string = "";
public FileId: number = 0;
public FileName: string = "";
public FilePath: string = "";
public FileSize: number = 0;
public OwerId: string = "";
public RevisionNo: number = 0;
public IsDirectoryIndc: string = "";
public IsLinkIndc: string = "";
public LinkedFileId: number = 0;
public OrgFileName: string = "";
public OrderKey: string = "";
public FileTag: string = "";
public AllowRenameIndc: string = "";
public AllowDeleteIndc: string = "";
public FileType: string = "";
public LandscapeIndc: string = "";
public TranscodeIndc: string = "";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly FILE_ID: string = "FileId";
static readonly FILE_NAME: string = "FileName";
static readonly FILE_PATH: string = "FilePath";
static readonly FILE_SIZE: string = "FileSize";
static readonly OWER_ID: string = "OwerId";
static readonly REVISION_NO: string = "RevisionNo";
static readonly IS_DIRECTORY_INDC: string = "IsDirectoryIndc";
static readonly IS_LINK_INDC: string = "IsLinkIndc";
static readonly LINKED_FILE_ID: string = "LinkedFileId";
static readonly ORG_FILE_NAME: string = "OrgFileName";
static readonly ORDER_KEY: string = "OrderKey";
static readonly FILE_TAG: string = "FileTag";
static readonly ALLOW_RENAME_INDC: string = "AllowRenameIndc";
static readonly ALLOW_DELETE_INDC: string = "AllowDeleteIndc";
static readonly FILE_TYPE: string = "FileType";
static readonly LANDSCAPE_INDC: string = "LandscapeIndc";
static readonly TRANSCODE_INDC: string = "TranscodeIndc";
static readonly DB_NAME_DMS_FILE_DELETE_LOG: string = "dms_file_delete_log";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,updated_datetime,updated_by,file_id,file_name,file_path,file_size,ower_id,revision_no,is_directory_indc,is_link_indc,linked_file_id,org_file_name,order_key,file_tag,allow_rename_indc,allow_delete_indc,file_type,landscape_indc,transcode_indc";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_FILE_ID: string = "file_id";
static readonly DB_FILE_NAME: string = "file_name";
static readonly DB_FILE_PATH: string = "file_path";
static readonly DB_FILE_SIZE: string = "file_size";
static readonly DB_OWER_ID: string = "ower_id";
static readonly DB_REVISION_NO: string = "revision_no";
static readonly DB_IS_DIRECTORY_INDC: string = "is_directory_indc";
static readonly DB_IS_LINK_INDC: string = "is_link_indc";
static readonly DB_LINKED_FILE_ID: string = "linked_file_id";
static readonly DB_ORG_FILE_NAME: string = "org_file_name";
static readonly DB_ORDER_KEY: string = "order_key";
static readonly DB_FILE_TAG: string = "file_tag";
static readonly DB_ALLOW_RENAME_INDC: string = "allow_rename_indc";
static readonly DB_ALLOW_DELETE_INDC: string = "allow_delete_indc";
static readonly DB_FILE_TYPE: string = "file_type";
static readonly DB_LANDSCAPE_INDC: string = "landscape_indc";
static readonly DB_TRANSCODE_INDC: string = "transcode_indc";
}
@@ -0,0 +1,68 @@
export class DmsFileEntity {
public AllowDeleteIndc: string = "";
public AllowRenameIndc: string = "";
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FileId: number = 0;
public FileName: string = "";
public FilePath: string = "";
public FileSize: number = 0;
public FileTag: string = "";
public FileType: string = "";
public IsDirectoryIndc: string = "";
public IsLinkIndc: string = "";
public LandscapeIndc: string = "";
public LinkedFileId: number = 0;
public OrderKey: string = "";
public OrgFileName: string = "";
public OwerId: string = "";
public RevisionNo: number = 0;
public TranscodeIndc: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
static readonly ALLOW_DELETE_INDC: string = "AllowDeleteIndc";
static readonly ALLOW_RENAME_INDC: string = "AllowRenameIndc";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FILE_ID: string = "FileId";
static readonly FILE_NAME: string = "FileName";
static readonly FILE_PATH: string = "FilePath";
static readonly FILE_SIZE: string = "FileSize";
static readonly FILE_TAG: string = "FileTag";
static readonly FILE_TYPE: string = "FileType";
static readonly IS_DIRECTORY_INDC: string = "IsDirectoryIndc";
static readonly IS_LINK_INDC: string = "IsLinkIndc";
static readonly LANDSCAPE_INDC: string = "LandscapeIndc";
static readonly LINKED_FILE_ID: string = "LinkedFileId";
static readonly ORDER_KEY: string = "OrderKey";
static readonly ORG_FILE_NAME: string = "OrgFileName";
static readonly OWER_ID: string = "OwerId";
static readonly REVISION_NO: string = "RevisionNo";
static readonly TRANSCODE_INDC: string = "TranscodeIndc";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly DB_NAME_DMS_FILE: string = "dms_file";
static readonly DB_NAME_FIELDS: string = "allow_delete_indc,allow_rename_indc,created_by,created_datetime,file_id,file_name,file_path,file_size,file_tag,file_type,is_directory_indc,is_link_indc,landscape_indc,linked_file_id,order_key,org_file_name,ower_id,revision_no,transcode_indc,updated_by,updated_datetime";
static readonly DB_ALLOW_DELETE_INDC: string = "allow_delete_indc";
static readonly DB_ALLOW_RENAME_INDC: string = "allow_rename_indc";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FILE_ID: string = "file_id";
static readonly DB_FILE_NAME: string = "file_name";
static readonly DB_FILE_PATH: string = "file_path";
static readonly DB_FILE_SIZE: string = "file_size";
static readonly DB_FILE_TAG: string = "file_tag";
static readonly DB_FILE_TYPE: string = "file_type";
static readonly DB_IS_DIRECTORY_INDC: string = "is_directory_indc";
static readonly DB_IS_LINK_INDC: string = "is_link_indc";
static readonly DB_LANDSCAPE_INDC: string = "landscape_indc";
static readonly DB_LINKED_FILE_ID: string = "linked_file_id";
static readonly DB_ORDER_KEY: string = "order_key";
static readonly DB_ORG_FILE_NAME: string = "org_file_name";
static readonly DB_OWER_ID: string = "ower_id";
static readonly DB_REVISION_NO: string = "revision_no";
static readonly DB_TRANSCODE_INDC: string = "transcode_indc";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
}
@@ -0,0 +1,11 @@
import type { DmsFileUploadDeleteLogViewDisplayData } from "./dmsFileUploadDeleteLogViewDisplayData";
import type { DmsFileUploadViewDisplayData } from "./dmsFileUploadViewDisplayData";
import type { FamilyDmsFileViewDisplayData } from "./familyDmsFileViewDisplayData";
import { SearchCriteriaResultData } from "./searchCriteriaResultData";
export class DmsFileResultData extends SearchCriteriaResultData {
public Datas: DmsFileUploadViewDisplayData[] = [];
public Previews: string[] = [];
public Logs: DmsFileUploadDeleteLogViewDisplayData[] = [];
public Families: FamilyDmsFileViewDisplayData[] = [];
}
@@ -0,0 +1,6 @@
import { AbstractSearchCriteria } from "./abstractSearchCriteria";
export class DmsFileSearchCriteria extends AbstractSearchCriteria {
public UserIdIndc: boolean = false;
public FamilyName: string = "";
}
@@ -0,0 +1,29 @@
export class DmsFileUploadDeleteLogEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UpdatedBy: string = "";
public FileId: number = 0;
public UploadName: string = "";
public FileCategory: string = "";
public OrgFileName: string = "";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly FILE_ID: string = "FileId";
static readonly UPLOAD_NAME: string = "UploadName";
static readonly FILE_CATEGORY: string = "FileCategory";
static readonly ORG_FILE_NAME: string = "OrgFileName";
static readonly DB_NAME_DMS_FILE_UPLOAD_DELETE_LOG: string = "dms_file_upload_delete_log";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,updated_datetime,updated_by,file_id,upload_name,file_category,org_file_name";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_FILE_ID: string = "file_id";
static readonly DB_UPLOAD_NAME: string = "upload_name";
static readonly DB_FILE_CATEGORY: string = "file_category";
static readonly DB_ORG_FILE_NAME: string = "org_file_name";
}
@@ -0,0 +1,13 @@
import { DmsFileUploadDeleteLogViewEntity } from "./dmsFileUploadDeleteLogViewEntity";
export class DmsFileUploadDeleteLogViewDisplayData extends DmsFileUploadDeleteLogViewEntity {
public IsSelected?: Date = null!;
public IsPlay: string = "";
public IsPause: string = "";
public FormattedPic: string = "";
public FormattedM3u8: string = "";
static readonly IS_SELECTED: string = "IsSelected";
static readonly IS_PLAY: string = "IsPlay";
static readonly IS_PAUSE: string = "IsPause";
}
@@ -0,0 +1,74 @@
export class DmsFileUploadDeleteLogViewEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public FileId: number = 0;
public UploadName: string = "";
public FileCategory: string = "";
public OrgFileName: string = "";
public FileName: string = "";
public FilePath: string = "";
public FolderLocalName: string = "";
public FileSize: number = 0;
public OwerId: string = "";
public RevisionNo: number = 0;
public IsDirectoryIndc: string = "";
public IsLinkIndc: string = "";
public LinkedFileId: number = 0;
public OrderKey: string = "";
public FileTag: string = "";
public AllowRenameIndc: string = "";
public AllowDeleteIndc: string = "";
public FileType: string = "";
public LandscapeIndc: string = "";
public TranscodeIndc: string = "";
public Url: string = "";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly FILE_ID: string = "FileId";
static readonly UPLOAD_NAME: string = "UploadName";
static readonly FILE_CATEGORY: string = "FileCategory";
static readonly ORG_FILE_NAME: string = "OrgFileName";
static readonly FILE_NAME: string = "FileName";
static readonly FILE_PATH: string = "FilePath";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly FILE_SIZE: string = "FileSize";
static readonly OWER_ID: string = "OwerId";
static readonly REVISION_NO: string = "RevisionNo";
static readonly IS_DIRECTORY_INDC: string = "IsDirectoryIndc";
static readonly IS_LINK_INDC: string = "IsLinkIndc";
static readonly LINKED_FILE_ID: string = "LinkedFileId";
static readonly ORDER_KEY: string = "OrderKey";
static readonly FILE_TAG: string = "FileTag";
static readonly ALLOW_RENAME_INDC: string = "AllowRenameIndc";
static readonly ALLOW_DELETE_INDC: string = "AllowDeleteIndc";
static readonly FILE_TYPE: string = "FileType";
static readonly LANDSCAPE_INDC: string = "LandscapeIndc";
static readonly TRANSCODE_INDC: string = "TranscodeIndc";
static readonly URL: string = "Url";
static readonly DB_NAME_DMS_FILE_UPLOAD_DELETE_LOG_VIEW: string = "dms_file_upload_delete_log_view";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,file_id,upload_name,file_category,org_file_name,file_name,file_path,folder_local_name,file_size,ower_id,revision_no,is_directory_indc,is_link_indc,linked_file_id,order_key,file_tag,allow_rename_indc,allow_delete_indc,file_type,landscape_indc,transcode_indc,url";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_FILE_ID: string = "file_id";
static readonly DB_UPLOAD_NAME: string = "upload_name";
static readonly DB_FILE_CATEGORY: string = "file_category";
static readonly DB_ORG_FILE_NAME: string = "org_file_name";
static readonly DB_FILE_NAME: string = "file_name";
static readonly DB_FILE_PATH: string = "file_path";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
static readonly DB_FILE_SIZE: string = "file_size";
static readonly DB_OWER_ID: string = "ower_id";
static readonly DB_REVISION_NO: string = "revision_no";
static readonly DB_IS_DIRECTORY_INDC: string = "is_directory_indc";
static readonly DB_IS_LINK_INDC: string = "is_link_indc";
static readonly DB_LINKED_FILE_ID: string = "linked_file_id";
static readonly DB_ORDER_KEY: string = "order_key";
static readonly DB_FILE_TAG: string = "file_tag";
static readonly DB_ALLOW_RENAME_INDC: string = "allow_rename_indc";
static readonly DB_ALLOW_DELETE_INDC: string = "allow_delete_indc";
static readonly DB_FILE_TYPE: string = "file_type";
static readonly DB_LANDSCAPE_INDC: string = "landscape_indc";
static readonly DB_TRANSCODE_INDC: string = "transcode_indc";
static readonly DB_URL: string = "url";
}
@@ -0,0 +1,29 @@
export class DmsFileUploadEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FileCategory: string = "";
public FileId: number = 0;
public OrgFileName: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UploadName: string = "";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FILE_CATEGORY: string = "FileCategory";
static readonly FILE_ID: string = "FileId";
static readonly ORG_FILE_NAME: string = "OrgFileName";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPLOAD_NAME: string = "UploadName";
static readonly DB_NAME_DMS_FILE_UPLOAD: string = "dms_file_upload";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,file_category,file_id,org_file_name,updated_by,updated_datetime,upload_name";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FILE_CATEGORY: string = "file_category";
static readonly DB_FILE_ID: string = "file_id";
static readonly DB_ORG_FILE_NAME: string = "org_file_name";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPLOAD_NAME: string = "upload_name";
}
@@ -0,0 +1,13 @@
import { DmsFileUploadViewEntity } from "./dmsFileUploadViewEntity";
export class DmsFileUploadViewDisplayData extends DmsFileUploadViewEntity {
public IsSelected?: Date = null!;
public IsPlay: string = "";
public IsPause: string = "";
public FormattedPic: string = "";
public FormattedM3u8: string = "";
static readonly IS_SELECTED: string = "IsSelected";
static readonly IS_PLAY: string = "IsPlay";
static readonly IS_PAUSE: string = "IsPause";
}
@@ -0,0 +1,74 @@
export class DmsFileUploadViewEntity {
public AllowDeleteIndc: string = "";
public AllowRenameIndc: string = "";
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FileCategory: string = "";
public FileId: number = 0;
public FileName: string = "";
public FilePath: string = "";
public FileSize: number = 0;
public FileTag: string = "";
public FileType: string = "";
public FolderLocalName: string = "";
public IsDirectoryIndc: string = "";
public IsLinkIndc: string = "";
public LandscapeIndc: string = "";
public LinkedFileId: number = 0;
public OrderKey: string = "";
public OrgFileName: string = "";
public OwerId: string = "";
public RevisionNo: number = 0;
public TranscodeIndc: string = "";
public UploadName: string = "";
public Url: string = "";
static readonly ALLOW_DELETE_INDC: string = "AllowDeleteIndc";
static readonly ALLOW_RENAME_INDC: string = "AllowRenameIndc";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FILE_CATEGORY: string = "FileCategory";
static readonly FILE_ID: string = "FileId";
static readonly FILE_NAME: string = "FileName";
static readonly FILE_PATH: string = "FilePath";
static readonly FILE_SIZE: string = "FileSize";
static readonly FILE_TAG: string = "FileTag";
static readonly FILE_TYPE: string = "FileType";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly IS_DIRECTORY_INDC: string = "IsDirectoryIndc";
static readonly IS_LINK_INDC: string = "IsLinkIndc";
static readonly LANDSCAPE_INDC: string = "LandscapeIndc";
static readonly LINKED_FILE_ID: string = "LinkedFileId";
static readonly ORDER_KEY: string = "OrderKey";
static readonly ORG_FILE_NAME: string = "OrgFileName";
static readonly OWER_ID: string = "OwerId";
static readonly REVISION_NO: string = "RevisionNo";
static readonly TRANSCODE_INDC: string = "TranscodeIndc";
static readonly UPLOAD_NAME: string = "UploadName";
static readonly URL: string = "Url";
static readonly DB_NAME_DMS_FILE_UPLOAD_VIEW: string = "dms_file_upload_view";
static readonly DB_NAME_FIELDS: string = "allow_delete_indc,allow_rename_indc,created_by,created_datetime,file_category,file_id,file_name,file_path,file_size,file_tag,file_type,folder_local_name,is_directory_indc,is_link_indc,landscape_indc,linked_file_id,order_key,org_file_name,ower_id,revision_no,transcode_indc,upload_name,url";
static readonly DB_ALLOW_DELETE_INDC: string = "allow_delete_indc";
static readonly DB_ALLOW_RENAME_INDC: string = "allow_rename_indc";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FILE_CATEGORY: string = "file_category";
static readonly DB_FILE_ID: string = "file_id";
static readonly DB_FILE_NAME: string = "file_name";
static readonly DB_FILE_PATH: string = "file_path";
static readonly DB_FILE_SIZE: string = "file_size";
static readonly DB_FILE_TAG: string = "file_tag";
static readonly DB_FILE_TYPE: string = "file_type";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
static readonly DB_IS_DIRECTORY_INDC: string = "is_directory_indc";
static readonly DB_IS_LINK_INDC: string = "is_link_indc";
static readonly DB_LANDSCAPE_INDC: string = "landscape_indc";
static readonly DB_LINKED_FILE_ID: string = "linked_file_id";
static readonly DB_ORDER_KEY: string = "order_key";
static readonly DB_ORG_FILE_NAME: string = "org_file_name";
static readonly DB_OWER_ID: string = "ower_id";
static readonly DB_REVISION_NO: string = "revision_no";
static readonly DB_TRANSCODE_INDC: string = "transcode_indc";
static readonly DB_UPLOAD_NAME: string = "upload_name";
static readonly DB_URL: string = "url";
}
@@ -0,0 +1,7 @@
import type { DmsFolderEntity } from "./dmsFolderEntity";
import type { DmsFolderMapEntity } from "./dmsFolderMapEntity";
export class DmsFolderData {
public DmsFolders: DmsFolderEntity[] = [];
public DmsFoldersMaps: DmsFolderMapEntity[] = [];
}
@@ -0,0 +1,26 @@
export class DmsFolderDeleteLogEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UpdatedBy: string = "";
public FolderId: number = 0;
public FolderName: string = "";
public FolderLocalName: string = "";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly FOLDER_ID: string = "FolderId";
static readonly FOLDER_NAME: string = "FolderName";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly DB_NAME_DMS_FOLDER_DELETE_LOG: string = "dms_folder_delete_log";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,updated_datetime,updated_by,folder_id,folder_name,folder_local_name";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_FOLDER_ID: string = "folder_id";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
}
@@ -0,0 +1,26 @@
export class DmsFolderEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FolderId: number = 0;
public FolderLocalName: string = "";
public FolderName: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FOLDER_ID: string = "FolderId";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly FOLDER_NAME: string = "FolderName";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly DB_NAME_DMS_FOLDER: string = "dms_folder";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,folder_id,folder_local_name,folder_name,updated_by,updated_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FOLDER_ID: string = "folder_id";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
}
@@ -0,0 +1,26 @@
export class DmsFolderMapDeleteLogEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UpdatedBy: string = "";
public FolderNameParent: string = "";
public FolderNameSon: string = "";
public Orderby: number = 0;
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly FOLDER_NAME_PARENT: string = "FolderNameParent";
static readonly FOLDER_NAME_SON: string = "FolderNameSon";
static readonly ORDERBY: string = "Orderby";
static readonly DB_NAME_DMS_FOLDER_MAP_DELETE_LOG: string = "dms_folder_map_delete_log";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,updated_datetime,updated_by,folder_name_parent,folder_name_son,orderby";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_FOLDER_NAME_PARENT: string = "folder_name_parent";
static readonly DB_FOLDER_NAME_SON: string = "folder_name_son";
static readonly DB_ORDERBY: string = "orderby";
}
@@ -0,0 +1,4 @@
export class DmsFolderMapDeleteLogEntityKey {
public FolderNameParent: string = "";
public FolderNameSon: string = "";
}
@@ -0,0 +1,26 @@
export class DmsFolderMapEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FolderNameParent: string = "";
public FolderNameSon: string = "";
public Orderby: number = 0;
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FOLDER_NAME_PARENT: string = "FolderNameParent";
static readonly FOLDER_NAME_SON: string = "FolderNameSon";
static readonly ORDERBY: string = "Orderby";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly DB_NAME_DMS_FOLDER_MAP: string = "dms_folder_map";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,folder_name_parent,folder_name_son,orderby,updated_by,updated_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FOLDER_NAME_PARENT: string = "folder_name_parent";
static readonly DB_FOLDER_NAME_SON: string = "folder_name_son";
static readonly DB_ORDERBY: string = "orderby";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
}
@@ -0,0 +1,4 @@
export class DmsFolderMapEntityKey {
public FolderNameParent: string = "";
public FolderNameSon: string = "";
}
@@ -0,0 +1,15 @@
import { FamilyDmsFileViewEntity } from "./familyDmsFileViewEntity";
export class FamilyDmsFileViewDisplayData extends FamilyDmsFileViewEntity {
public IsSelected?: Date = null!;
public FileType: string = "";
public IsPlay: string = "";
public IsPause: string = "";
public FormattedPic: string = "";
public FormattedM3u8: string = "";
static readonly IS_SELECTED: string = "IsSelected";
static readonly FILE_TYPE: string = "FileType";
static readonly IS_PLAY: string = "IsPlay";
static readonly IS_PAUSE: string = "IsPause";
}
@@ -0,0 +1,89 @@
export class FamilyDmsFileViewEntity {
public AllowDeleteIndc: string = "";
public AllowRenameIndc: string = "";
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FamilyName: string = "";
public FavoriteIndc: string = "";
public FileCategory: string = "";
public FileId: number = 0;
public FileName: string = "";
public FilePath: string = "";
public FileSize: number = 0;
public FileTag: string = "";
public FileType: string = "";
public FolderLocalName: string = "";
public FolderName: string = "";
public IsDirectoryIndc: string = "";
public IsLinkIndc: string = "";
public LandscapeIndc: string = "";
public LinkedFileId: number = 0;
public Notice: string = "";
public OrderKey: string = "";
public OrgFileName: string = "";
public OwerId: string = "";
public PermissionIndc: string = "";
public RevisionNo: number = 0;
public TopFolderName: string = "";
public TranscodeIndc: string = "";
public Url: string = "";
static readonly ALLOW_DELETE_INDC: string = "AllowDeleteIndc";
static readonly ALLOW_RENAME_INDC: string = "AllowRenameIndc";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly FAVORITE_INDC: string = "FavoriteIndc";
static readonly FILE_CATEGORY: string = "FileCategory";
static readonly FILE_ID: string = "FileId";
static readonly FILE_NAME: string = "FileName";
static readonly FILE_PATH: string = "FilePath";
static readonly FILE_SIZE: string = "FileSize";
static readonly FILE_TAG: string = "FileTag";
static readonly FILE_TYPE: string = "FileType";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly FOLDER_NAME: string = "FolderName";
static readonly IS_DIRECTORY_INDC: string = "IsDirectoryIndc";
static readonly IS_LINK_INDC: string = "IsLinkIndc";
static readonly LANDSCAPE_INDC: string = "LandscapeIndc";
static readonly LINKED_FILE_ID: string = "LinkedFileId";
static readonly NOTICE: string = "Notice";
static readonly ORDER_KEY: string = "OrderKey";
static readonly ORG_FILE_NAME: string = "OrgFileName";
static readonly OWER_ID: string = "OwerId";
static readonly PERMISSION_INDC: string = "PermissionIndc";
static readonly REVISION_NO: string = "RevisionNo";
static readonly TOP_FOLDER_NAME: string = "TopFolderName";
static readonly TRANSCODE_INDC: string = "TranscodeIndc";
static readonly URL: string = "Url";
static readonly DB_NAME_FAMILY_DMS_FILE_VIEW: string = "family_dms_file_view";
static readonly DB_NAME_FIELDS: string = "allow_delete_indc,allow_rename_indc,created_by,created_datetime,family_name,favorite_indc,file_category,file_id,file_name,file_path,file_size,file_tag,file_type,folder_local_name,folder_name,is_directory_indc,is_link_indc,landscape_indc,linked_file_id,notice,order_key,org_file_name,ower_id,permission_indc,revision_no,top_folder_name,transcode_indc,url";
static readonly DB_ALLOW_DELETE_INDC: string = "allow_delete_indc";
static readonly DB_ALLOW_RENAME_INDC: string = "allow_rename_indc";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_FAVORITE_INDC: string = "favorite_indc";
static readonly DB_FILE_CATEGORY: string = "file_category";
static readonly DB_FILE_ID: string = "file_id";
static readonly DB_FILE_NAME: string = "file_name";
static readonly DB_FILE_PATH: string = "file_path";
static readonly DB_FILE_SIZE: string = "file_size";
static readonly DB_FILE_TAG: string = "file_tag";
static readonly DB_FILE_TYPE: string = "file_type";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_IS_DIRECTORY_INDC: string = "is_directory_indc";
static readonly DB_IS_LINK_INDC: string = "is_link_indc";
static readonly DB_LANDSCAPE_INDC: string = "landscape_indc";
static readonly DB_LINKED_FILE_ID: string = "linked_file_id";
static readonly DB_NOTICE: string = "notice";
static readonly DB_ORDER_KEY: string = "order_key";
static readonly DB_ORG_FILE_NAME: string = "org_file_name";
static readonly DB_OWER_ID: string = "ower_id";
static readonly DB_PERMISSION_INDC: string = "permission_indc";
static readonly DB_REVISION_NO: string = "revision_no";
static readonly DB_TOP_FOLDER_NAME: string = "top_folder_name";
static readonly DB_TRANSCODE_INDC: string = "transcode_indc";
static readonly DB_URL: string = "url";
}
@@ -0,0 +1,23 @@
export class FamilyFolderFavoriteEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FolderName: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UserName: string = "";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FOLDER_NAME: string = "FolderName";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly USER_NAME: string = "UserName";
static readonly DB_NAME_FAMILY_FOLDER_FAVORITE: string = "family_folder_favorite";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,folder_name,updated_by,updated_datetime,user_name";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_USER_NAME: string = "user_name";
}
@@ -0,0 +1,4 @@
export class FamilyFolderFavoriteEntityKey {
public FolderName: string = "";
public UserName: string = "";
}
@@ -0,0 +1,29 @@
export class FamilyFolderFavoriteViewEntity {
public FamilyLocalName: string = "";
public FamilyName: string = "";
public FolderLocalName: string = "";
public FolderName: string = "";
public Notice: string = "";
public TopFolderLocalName: string = "";
public TopFolderName: string = "";
public UserName: string = "";
static readonly FAMILY_LOCAL_NAME: string = "FamilyLocalName";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly FOLDER_NAME: string = "FolderName";
static readonly NOTICE: string = "Notice";
static readonly TOP_FOLDER_LOCAL_NAME: string = "TopFolderLocalName";
static readonly TOP_FOLDER_NAME: string = "TopFolderName";
static readonly USER_NAME: string = "UserName";
static readonly DB_NAME_FAMILY_FOLDER_FAVORITE_VIEW: string = "family_folder_favorite_view";
static readonly DB_NAME_FIELDS: string = "family_local_name,family_name,folder_local_name,folder_name,notice,top_folder_local_name,top_folder_name,user_name";
static readonly DB_FAMILY_LOCAL_NAME: string = "family_local_name";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_NOTICE: string = "notice";
static readonly DB_TOP_FOLDER_LOCAL_NAME: string = "top_folder_local_name";
static readonly DB_TOP_FOLDER_NAME: string = "top_folder_name";
static readonly DB_USER_NAME: string = "user_name";
}
@@ -0,0 +1,17 @@
import type { FamilyGroupFolderDisplayData } from "./familyGroupFolderDisplayData";
import type { FamilyGroupManagerDisplayData } from "./familyGroupManagerDisplayData";
import type { FamilyGroupPermissionDisplayData } from "./familyGroupPermissionDisplayData";
import { FamilyGroupEntity } from "./familyGroupEntity";
export class FamilyGroupData {
public FamilyGroup: FamilyGroupEntity = new FamilyGroupEntity();
public IsManager: boolean = false;
public IsOpen: boolean = false;
public IsAdd: boolean = false;
public FamilyGroupFolders: FamilyGroupFolderDisplayData[] = [];
public FamilyGroupManagers: FamilyGroupManagerDisplayData[] = [];
public FamilyGroupRequests: FamilyGroupManagerDisplayData[] = [];
public FamilyGroupPermissions: FamilyGroupPermissionDisplayData[] = [];
static readonly IS_MANAGER: string = "IsManager";
}
@@ -0,0 +1,38 @@
export class FamilyGroupEntity {
public AddIndc: string = "";
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public ExpireDatetime?: Date = null!;
public FamilyLocalName: string = "";
public FamilyName: string = "";
public Notice: string = "";
public OpenIndc: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public ValidIndc: string = "";
static readonly ADD_INDC: string = "AddIndc";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly EXPIRE_DATETIME: string = "ExpireDatetime";
static readonly FAMILY_LOCAL_NAME: string = "FamilyLocalName";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly NOTICE: string = "Notice";
static readonly OPEN_INDC: string = "OpenIndc";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly VALID_INDC: string = "ValidIndc";
static readonly DB_NAME_FAMILY_GROUP: string = "family_group";
static readonly DB_NAME_FIELDS: string = "add_indc,created_by,created_datetime,expire_datetime,family_local_name,family_name,notice,open_indc,updated_by,updated_datetime,valid_indc";
static readonly DB_ADD_INDC: string = "add_indc";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_EXPIRE_DATETIME: string = "expire_datetime";
static readonly DB_FAMILY_LOCAL_NAME: string = "family_local_name";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_NOTICE: string = "notice";
static readonly DB_OPEN_INDC: string = "open_indc";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_VALID_INDC: string = "valid_indc";
}
@@ -0,0 +1,7 @@
import { FamilyGroupFolderEntity } from "./familyGroupFolderEntity";
export class FamilyGroupFolderDisplayData extends FamilyGroupFolderEntity {
public IsSharePermission: boolean = false;
static readonly IS_SHARE_PERMISSION: string = "IsSharePermission";
}
@@ -0,0 +1,38 @@
export class FamilyGroupFolderEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FamilyName: string = "";
public FilePath: string = "";
public FolderId: number = 0;
public FolderLocalName: string = "";
public FolderName: string = "";
public Notice: string = "";
public TopFolderName: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly FILE_PATH: string = "FilePath";
static readonly FOLDER_ID: string = "FolderId";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly FOLDER_NAME: string = "FolderName";
static readonly NOTICE: string = "Notice";
static readonly TOP_FOLDER_NAME: string = "TopFolderName";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly DB_NAME_FAMILY_GROUP_FOLDER: string = "family_group_folder";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,family_name,file_path,folder_id,folder_local_name,folder_name,notice,top_folder_name,updated_by,updated_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_FILE_PATH: string = "file_path";
static readonly DB_FOLDER_ID: string = "folder_id";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_NOTICE: string = "notice";
static readonly DB_TOP_FOLDER_NAME: string = "top_folder_name";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
}
@@ -0,0 +1,10 @@
import { FamilyGroupManagerEntity } from "./familyGroupManagerEntity";
export class FamilyGroupManagerDisplayData extends FamilyGroupManagerEntity {
public UserLocalName: string = "";
public IsManager: boolean = false;
static readonly USER_LOCAL_NAME: string = "UserLocalName";
static readonly DB_USER_LOCAL_NAME: string = "user_local_name";
static readonly IS_MANAGER: string = "IsManager";
}
@@ -0,0 +1,32 @@
export class FamilyGroupManagerEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public FamilyName: string = "";
public ManagerIndc: string = "";
public Notice: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UserName: string = "";
public ValidIndc: string = "";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly MANAGER_INDC: string = "ManagerIndc";
static readonly NOTICE: string = "Notice";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly USER_NAME: string = "UserName";
static readonly VALID_INDC: string = "ValidIndc";
static readonly DB_NAME_FAMILY_GROUP_MANAGER: string = "family_group_manager";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,family_name,manager_indc,notice,updated_by,updated_datetime,user_name,valid_indc";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_MANAGER_INDC: string = "manager_indc";
static readonly DB_NOTICE: string = "notice";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_USER_NAME: string = "user_name";
static readonly DB_VALID_INDC: string = "valid_indc";
}
@@ -0,0 +1,4 @@
export class FamilyGroupManagerEntityKey {
public FamilyName: string = "";
public UserName: string = "";
}
@@ -0,0 +1,6 @@
import { AbstractSearchCriteria } from "./abstractSearchCriteria";
export class FamilyGroupManagerUserSearchCriteria extends AbstractSearchCriteria {
public FamilyName: string = "";
public FolderName: string = "";
}
@@ -0,0 +1,23 @@
export class FamilyGroupManagerUserViewEntity {
public FamilyLocalName: string = "";
public FamilyName: string = "";
public ManagerIndc: string = "";
public UserLocalName: string = "";
public UserName: string = "";
public ValidIndc: string = "";
static readonly FAMILY_LOCAL_NAME: string = "FamilyLocalName";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly MANAGER_INDC: string = "ManagerIndc";
static readonly USER_LOCAL_NAME: string = "UserLocalName";
static readonly USER_NAME: string = "UserName";
static readonly VALID_INDC: string = "ValidIndc";
static readonly DB_NAME_FAMILY_GROUP_MANAGER_USER_VIEW: string = "family_group_manager_user_view";
static readonly DB_NAME_FIELDS: string = "family_local_name,family_name,manager_indc,user_local_name,user_name,valid_indc";
static readonly DB_FAMILY_LOCAL_NAME: string = "family_local_name";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_MANAGER_INDC: string = "manager_indc";
static readonly DB_USER_LOCAL_NAME: string = "user_local_name";
static readonly DB_USER_NAME: string = "user_name";
static readonly DB_VALID_INDC: string = "valid_indc";
}
@@ -0,0 +1,11 @@
import { FamilyGroupPermissionEntity } from "./familyGroupPermissionEntity";
export class FamilyGroupPermissionDisplayData extends FamilyGroupPermissionEntity {
public UserLocalName: string = "";
public FolderLocalName: string = "";
static readonly USER_LOCAL_NAME: string = "UserLocalName";
static readonly DB_USER_LOCAL_NAME: string = "user_local_name";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
}
@@ -0,0 +1,32 @@
export class FamilyGroupPermissionEntity {
public CreateIndc: string = "";
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public DeleteIndc: string = "";
public FamilyName: string = "";
public FolderName: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UserName: string = "";
static readonly CREATE_INDC: string = "CreateIndc";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly DELETE_INDC: string = "DeleteIndc";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly FOLDER_NAME: string = "FolderName";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly USER_NAME: string = "UserName";
static readonly DB_NAME_FAMILY_GROUP_PERMISSION: string = "family_group_permission";
static readonly DB_NAME_FIELDS: string = "create_indc,created_by,created_datetime,delete_indc,family_name,folder_name,updated_by,updated_datetime,user_name";
static readonly DB_CREATE_INDC: string = "create_indc";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_DELETE_INDC: string = "delete_indc";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_USER_NAME: string = "user_name";
}
@@ -0,0 +1,5 @@
export class FamilyGroupPermissionEntityKey {
public FamilyName: string = "";
public FolderName: string = "";
public UserName: string = "";
}
@@ -0,0 +1,26 @@
export class FamilyGroupPermissionUserFolderViewEntity {
public FamilyName: string = "";
public FilePath: string = "";
public FolderLocalName: string = "";
public FolderName: string = "";
public Notice: string = "";
public UserLocalName: string = "";
public UserName: string = "";
static readonly FAMILY_NAME: string = "FamilyName";
static readonly FILE_PATH: string = "FilePath";
static readonly FOLDER_LOCAL_NAME: string = "FolderLocalName";
static readonly FOLDER_NAME: string = "FolderName";
static readonly NOTICE: string = "Notice";
static readonly USER_LOCAL_NAME: string = "UserLocalName";
static readonly USER_NAME: string = "UserName";
static readonly DB_NAME_FAMILY_GROUP_PERMISSION_USER_FOLDER_VIEW: string = "family_group_permission_user_folder_view";
static readonly DB_NAME_FIELDS: string = "family_name,file_path,folder_local_name,folder_name,notice,user_local_name,user_name";
static readonly DB_FAMILY_NAME: string = "family_name";
static readonly DB_FILE_PATH: string = "file_path";
static readonly DB_FOLDER_LOCAL_NAME: string = "folder_local_name";
static readonly DB_FOLDER_NAME: string = "folder_name";
static readonly DB_NOTICE: string = "notice";
static readonly DB_USER_LOCAL_NAME: string = "user_local_name";
static readonly DB_USER_NAME: string = "user_name";
}
@@ -0,0 +1,10 @@
import type { FamilyFolderFavoriteViewEntity } from "./familyFolderFavoriteViewEntity";
import type { FamilyGroupEntity } from "./familyGroupEntity";
import type { FamilyGroupManagerUserViewEntity } from "./familyGroupManagerUserViewEntity";
import { SearchCriteriaResultData } from "./searchCriteriaResultData";
export class FamilyGroupResultData extends SearchCriteriaResultData {
public Datas: FamilyGroupEntity[] = [];
public Users: FamilyGroupManagerUserViewEntity[] = [];
public Favorites: FamilyFolderFavoriteViewEntity[] = [];
}
@@ -0,0 +1,5 @@
import { AbstractSearchCriteria } from "./abstractSearchCriteria";
export class FamilyGroupSearchCriteria extends AbstractSearchCriteria {
}
@@ -0,0 +1,11 @@
import type { FamilyTreeChildrenMapViewEntity } from "./familyTreeChildrenMapViewEntity";
import type { FamilyTreeSpouseMapViewEntity } from "./familyTreeSpouseMapViewEntity";
import { FamilyPersonDisplayData } from "./familyPersonDisplayData";
export class FamilyPersonData {
public FamilyPerson: FamilyPersonDisplayData = new FamilyPersonDisplayData();
public FamilyTreePersons: FamilyPersonDisplayData[] = [];
public FamilyTreeSpouseMaps: FamilyTreeSpouseMapViewEntity[] = [];
public FamilyTreeParentMaps: FamilyTreeChildrenMapViewEntity[] = [];
public FamilyTreeChildrenMaps: FamilyTreeChildrenMapViewEntity[] = [];
}
@@ -0,0 +1,6 @@
import { FamilyPersonEntity } from "./familyPersonEntity";
export class FamilyPersonDisplayData extends FamilyPersonEntity {
public AvatarUrl: string = "";
public IsCanAmend?: Date = null!;
}
@@ -0,0 +1,104 @@
export class FamilyPersonEntity {
public Alias: string = "";
public AvatarFilename: string = "";
public BindUserId: string = "";
public BirthDate?: Date = null!;
public BirthOrder: string = "";
public BirthText: string = "";
public CommonName: string = "";
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public DeathDate?: Date = null!;
public DeathText: string = "";
public Duty: string = "";
public Education: string = "";
public FatherId: string = "";
public Gender: string = "";
public GenealogyName: string = "";
public GraduationStatus: string = "";
public Hao: string = "";
public Introduction: string = "";
public IsBindUser: string = "";
public LiveStatus: string = "";
public Major: string = "";
public MaritalStatus: string = "";
public MotherName: string = "";
public PersonId: string = "";
public Privacy: string = "";
public School: string = "";
public Surname: string = "";
public Title: string = "";
public TreeId: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public Zi: string = "";
static readonly ALIAS: string = "Alias";
static readonly AVATAR_FILENAME: string = "AvatarFilename";
static readonly BIND_USER_ID: string = "BindUserId";
static readonly BIRTH_DATE: string = "BirthDate";
static readonly BIRTH_ORDER: string = "BirthOrder";
static readonly BIRTH_TEXT: string = "BirthText";
static readonly COMMON_NAME: string = "CommonName";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly DEATH_DATE: string = "DeathDate";
static readonly DEATH_TEXT: string = "DeathText";
static readonly DUTY: string = "Duty";
static readonly EDUCATION: string = "Education";
static readonly FATHER_ID: string = "FatherId";
static readonly GENDER: string = "Gender";
static readonly GENEALOGY_NAME: string = "GenealogyName";
static readonly GRADUATION_STATUS: string = "GraduationStatus";
static readonly HAO: string = "Hao";
static readonly INTRODUCTION: string = "Introduction";
static readonly IS_BIND_USER: string = "IsBindUser";
static readonly LIVE_STATUS: string = "LiveStatus";
static readonly MAJOR: string = "Major";
static readonly MARITAL_STATUS: string = "MaritalStatus";
static readonly MOTHER_NAME: string = "MotherName";
static readonly PERSON_ID: string = "PersonId";
static readonly PRIVACY: string = "Privacy";
static readonly SCHOOL: string = "School";
static readonly SURNAME: string = "Surname";
static readonly TITLE: string = "Title";
static readonly TREE_ID: string = "TreeId";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly ZI: string = "Zi";
static readonly DB_NAME_FAMILY_PERSON: string = "family_person";
static readonly DB_NAME_FIELDS: string = "alias,avatar_filename,bind_user_id,birth_date,birth_order,birth_text,common_name,created_by,created_datetime,death_date,death_text,duty,education,father_id,gender,genealogy_name,graduation_status,hao,introduction,is_bind_user,live_status,major,marital_status,mother_name,person_id,privacy,school,surname,title,tree_id,updated_by,updated_datetime,zi";
static readonly DB_ALIAS: string = "alias";
static readonly DB_AVATAR_FILENAME: string = "avatar_filename";
static readonly DB_BIND_USER_ID: string = "bind_user_id";
static readonly DB_BIRTH_DATE: string = "birth_date";
static readonly DB_BIRTH_ORDER: string = "birth_order";
static readonly DB_BIRTH_TEXT: string = "birth_text";
static readonly DB_COMMON_NAME: string = "common_name";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_DEATH_DATE: string = "death_date";
static readonly DB_DEATH_TEXT: string = "death_text";
static readonly DB_DUTY: string = "duty";
static readonly DB_EDUCATION: string = "education";
static readonly DB_FATHER_ID: string = "father_id";
static readonly DB_GENDER: string = "gender";
static readonly DB_GENEALOGY_NAME: string = "genealogy_name";
static readonly DB_GRADUATION_STATUS: string = "graduation_status";
static readonly DB_HAO: string = "hao";
static readonly DB_INTRODUCTION: string = "introduction";
static readonly DB_IS_BIND_USER: string = "is_bind_user";
static readonly DB_LIVE_STATUS: string = "live_status";
static readonly DB_MAJOR: string = "major";
static readonly DB_MARITAL_STATUS: string = "marital_status";
static readonly DB_MOTHER_NAME: string = "mother_name";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_PRIVACY: string = "privacy";
static readonly DB_SCHOOL: string = "school";
static readonly DB_SURNAME: string = "surname";
static readonly DB_TITLE: string = "title";
static readonly DB_TREE_ID: string = "tree_id";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_ZI: string = "zi";
}
@@ -0,0 +1,35 @@
export class FamilyPersonLogEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UpdatedBy: string = "";
public LogId: number = 0;
public PersonId: string = "";
public AuditCode: string = "";
public EventActor: string = "";
public OldValue: string = "";
public NewValue: string = "";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly LOG_ID: string = "LogId";
static readonly PERSON_ID: string = "PersonId";
static readonly AUDIT_CODE: string = "AuditCode";
static readonly EVENT_ACTOR: string = "EventActor";
static readonly OLD_VALUE: string = "OldValue";
static readonly NEW_VALUE: string = "NewValue";
static readonly DB_NAME_FAMILY_PERSON_LOG: string = "family_person_log";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,updated_datetime,updated_by,log_id,person_id,audit_code,event_actor,old_value,new_value";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_LOG_ID: string = "log_id";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_AUDIT_CODE: string = "audit_code";
static readonly DB_EVENT_ACTOR: string = "event_actor";
static readonly DB_OLD_VALUE: string = "old_value";
static readonly DB_NEW_VALUE: string = "new_value";
}
@@ -0,0 +1,6 @@
import type { FamilyPersonEntity } from "./familyPersonEntity";
import { SearchCriteriaResultData } from "./searchCriteriaResultData";
export class FamilyPersonResultData extends SearchCriteriaResultData {
public Datas: FamilyPersonEntity[] = [];
}
@@ -0,0 +1,5 @@
import { AbstractSearchCriteria } from "./abstractSearchCriteria";
export class FamilyPersonSearchCriteria extends AbstractSearchCriteria {
}
@@ -0,0 +1,38 @@
export class FamilyTreeChildrenMapEntity {
public ChildrenId: string = "";
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public Orderby: number = 0;
public PersonId: string = "";
public RelationType: string = "";
public Remark: string = "";
public SpouseId: string = "";
public TreeId: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
static readonly CHILDREN_ID: string = "ChildrenId";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly ORDERBY: string = "Orderby";
static readonly PERSON_ID: string = "PersonId";
static readonly RELATION_TYPE: string = "RelationType";
static readonly REMARK: string = "Remark";
static readonly SPOUSE_ID: string = "SpouseId";
static readonly TREE_ID: string = "TreeId";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly DB_NAME_FAMILY_TREE_CHILDREN_MAP: string = "family_tree_children_map";
static readonly DB_NAME_FIELDS: string = "children_id,created_by,created_datetime,orderby,person_id,relation_type,remark,spouse_id,tree_id,updated_by,updated_datetime";
static readonly DB_CHILDREN_ID: string = "children_id";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_ORDERBY: string = "orderby";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_RELATION_TYPE: string = "relation_type";
static readonly DB_REMARK: string = "remark";
static readonly DB_SPOUSE_ID: string = "spouse_id";
static readonly DB_TREE_ID: string = "tree_id";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
}
@@ -0,0 +1,5 @@
export class FamilyTreeChildrenMapEntityKey {
public ChildrenId: string = "";
public PersonId: string = "";
public TreeId: string = "";
}
@@ -0,0 +1,47 @@
export class FamilyTreeChildrenMapViewEntity {
public ChildrenCommonName: string = "";
public ChildrenGenealogyName: string = "";
public ChildrenId: string = "";
public ChildrenSurname: string = "";
public CommonName: string = "";
public Gender: string = "";
public GenealogyName: string = "";
public Orderby: number = 0;
public PersonId: string = "";
public RelationType: string = "";
public Remark: string = "";
public SpouseId: string = "";
public Surname: string = "";
public TreeId: string = "";
static readonly CHILDREN_COMMON_NAME: string = "ChildrenCommonName";
static readonly CHILDREN_GENEALOGY_NAME: string = "ChildrenGenealogyName";
static readonly CHILDREN_ID: string = "ChildrenId";
static readonly CHILDREN_SURNAME: string = "ChildrenSurname";
static readonly COMMON_NAME: string = "CommonName";
static readonly GENDER: string = "Gender";
static readonly GENEALOGY_NAME: string = "GenealogyName";
static readonly ORDERBY: string = "Orderby";
static readonly PERSON_ID: string = "PersonId";
static readonly RELATION_TYPE: string = "RelationType";
static readonly REMARK: string = "Remark";
static readonly SPOUSE_ID: string = "SpouseId";
static readonly SURNAME: string = "Surname";
static readonly TREE_ID: string = "TreeId";
static readonly DB_NAME_FAMILY_TREE_CHILDREN_MAP_VIEW: string = "family_tree_children_map_view";
static readonly DB_NAME_FIELDS: string = "children_common_name,children_genealogy_name,children_id,children_surname,common_name,gender,genealogy_name,orderby,person_id,relation_type,remark,spouse_id,surname,tree_id";
static readonly DB_CHILDREN_COMMON_NAME: string = "children_common_name";
static readonly DB_CHILDREN_GENEALOGY_NAME: string = "children_genealogy_name";
static readonly DB_CHILDREN_ID: string = "children_id";
static readonly DB_CHILDREN_SURNAME: string = "children_surname";
static readonly DB_COMMON_NAME: string = "common_name";
static readonly DB_GENDER: string = "gender";
static readonly DB_GENEALOGY_NAME: string = "genealogy_name";
static readonly DB_ORDERBY: string = "orderby";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_RELATION_TYPE: string = "relation_type";
static readonly DB_REMARK: string = "remark";
static readonly DB_SPOUSE_ID: string = "spouse_id";
static readonly DB_SURNAME: string = "surname";
static readonly DB_TREE_ID: string = "tree_id";
}
@@ -0,0 +1,11 @@
import type { FamilyTreePermissionUserViewEntity } from "./familyTreePermissionUserViewEntity";
import { FamilyPersonData } from "./familyPersonData";
import { FamilyTreeDisplayData } from "./familyTreeDisplayData";
export class FamilyTreeData {
public FamilyTree: FamilyTreeDisplayData = new FamilyTreeDisplayData();
public CurrentPerson: FamilyPersonData = new FamilyPersonData();
public IsManager: boolean = false;
public IsCanAmend: boolean = false;
public FamilyTreePermissions: FamilyTreePermissionUserViewEntity[] = [];
}
@@ -0,0 +1,6 @@
import { FamilyTreeEntity } from "./familyTreeEntity";
export class FamilyTreeDisplayData extends FamilyTreeEntity {
public AncestorPersonGenealogyName: string = "";
public OrgTreeName: string = "";
}
@@ -0,0 +1,35 @@
export class FamilyTreeEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UpdatedBy: string = "";
public TreeId: string = "";
public TreeName: string = "";
public Brief: string = "";
public AncestorPersonId: string = "";
public TreeCoverFilename: string = "";
public PublicIndc: string = "";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly TREE_ID: string = "TreeId";
static readonly TREE_NAME: string = "TreeName";
static readonly BRIEF: string = "Brief";
static readonly ANCESTOR_PERSON_ID: string = "AncestorPersonId";
static readonly TREE_COVER_FILENAME: string = "TreeCoverFilename";
static readonly PUBLIC_INDC: string = "PublicIndc";
static readonly DB_NAME_FAMILY_TREE: string = "family_tree";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,updated_datetime,updated_by,tree_id,tree_name,brief,ancestor_person_id,tree_cover_filename,public_indc";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_TREE_ID: string = "tree_id";
static readonly DB_TREE_NAME: string = "tree_name";
static readonly DB_BRIEF: string = "brief";
static readonly DB_ANCESTOR_PERSON_ID: string = "ancestor_person_id";
static readonly DB_TREE_COVER_FILENAME: string = "tree_cover_filename";
static readonly DB_PUBLIC_INDC: string = "public_indc";
}
@@ -0,0 +1,32 @@
export class FamilyTreePermissionEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public ManagerIndc: string = "";
public PersonId: string = "";
public TreeId: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UserName: string = "";
public ValidIndc: string = "";
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly MANAGER_INDC: string = "ManagerIndc";
static readonly PERSON_ID: string = "PersonId";
static readonly TREE_ID: string = "TreeId";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly USER_NAME: string = "UserName";
static readonly VALID_INDC: string = "ValidIndc";
static readonly DB_NAME_FAMILY_TREE_PERMISSION: string = "family_tree_permission";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,manager_indc,person_id,tree_id,updated_by,updated_datetime,user_name,valid_indc";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_MANAGER_INDC: string = "manager_indc";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_TREE_ID: string = "tree_id";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_USER_NAME: string = "user_name";
static readonly DB_VALID_INDC: string = "valid_indc";
}
@@ -0,0 +1,5 @@
export class FamilyTreePermissionEntityKey {
public PersonId: string = "";
public TreeId: string = "";
public UserName: string = "";
}
@@ -0,0 +1,29 @@
export class FamilyTreePermissionUserViewEntity {
public CreatedDatetime: Date = new Date();
public ManagerIndc: string = "";
public PersonId: string = "";
public PersonLocalName: string = "";
public TreeId: string = "";
public UserLocalName: string = "";
public UserName: string = "";
public ValidIndc: string = "";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly MANAGER_INDC: string = "ManagerIndc";
static readonly PERSON_ID: string = "PersonId";
static readonly PERSON_LOCAL_NAME: string = "PersonLocalName";
static readonly TREE_ID: string = "TreeId";
static readonly USER_LOCAL_NAME: string = "UserLocalName";
static readonly USER_NAME: string = "UserName";
static readonly VALID_INDC: string = "ValidIndc";
static readonly DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW: string = "family_tree_permission_user_view";
static readonly DB_NAME_FIELDS: string = "created_datetime,manager_indc,person_id,person_local_name,tree_id,user_local_name,user_name,valid_indc";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_MANAGER_INDC: string = "manager_indc";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_PERSON_LOCAL_NAME: string = "person_local_name";
static readonly DB_TREE_ID: string = "tree_id";
static readonly DB_USER_LOCAL_NAME: string = "user_local_name";
static readonly DB_USER_NAME: string = "user_name";
static readonly DB_VALID_INDC: string = "valid_indc";
}
@@ -0,0 +1,6 @@
import type { FamilyTreeViewEntity } from "./familyTreeViewEntity";
import { SearchCriteriaResultData } from "./searchCriteriaResultData";
export class FamilyTreeResultData extends SearchCriteriaResultData {
public Datas: FamilyTreeViewEntity[] = [];
}
@@ -0,0 +1,5 @@
import { AbstractSearchCriteria } from "./abstractSearchCriteria";
export class FamilyTreeSearchCriteria extends AbstractSearchCriteria {
}
@@ -0,0 +1,50 @@
export class FamilyTreeSpouseMapEntity {
public CreatedBy: string = "";
public CreatedDatetime: Date = new Date();
public DivorceDate?: Date = null!;
public DivorceDateText: string = "";
public IsCurrent: string = "";
public MarryDate?: Date = null!;
public MarryDateText: string = "";
public MarryType: string = "";
public Orderby: number = 0;
public PersonId: string = "";
public Remark: string = "";
public SpouseId: string = "";
public TreeId: string = "";
public UpdatedBy: string = "";
public UpdatedDatetime: Date = new Date();
static readonly CREATED_BY: string = "CreatedBy";
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly DIVORCE_DATE: string = "DivorceDate";
static readonly DIVORCE_DATE_TEXT: string = "DivorceDateText";
static readonly IS_CURRENT: string = "IsCurrent";
static readonly MARRY_DATE: string = "MarryDate";
static readonly MARRY_DATE_TEXT: string = "MarryDateText";
static readonly MARRY_TYPE: string = "MarryType";
static readonly ORDERBY: string = "Orderby";
static readonly PERSON_ID: string = "PersonId";
static readonly REMARK: string = "Remark";
static readonly SPOUSE_ID: string = "SpouseId";
static readonly TREE_ID: string = "TreeId";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly DB_NAME_FAMILY_TREE_SPOUSE_MAP: string = "family_tree_spouse_map";
static readonly DB_NAME_FIELDS: string = "created_by,created_datetime,divorce_date,divorce_date_text,is_current,marry_date,marry_date_text,marry_type,orderby,person_id,remark,spouse_id,tree_id,updated_by,updated_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_DIVORCE_DATE: string = "divorce_date";
static readonly DB_DIVORCE_DATE_TEXT: string = "divorce_date_text";
static readonly DB_IS_CURRENT: string = "is_current";
static readonly DB_MARRY_DATE: string = "marry_date";
static readonly DB_MARRY_DATE_TEXT: string = "marry_date_text";
static readonly DB_MARRY_TYPE: string = "marry_type";
static readonly DB_ORDERBY: string = "orderby";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_REMARK: string = "remark";
static readonly DB_SPOUSE_ID: string = "spouse_id";
static readonly DB_TREE_ID: string = "tree_id";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
}
@@ -0,0 +1,5 @@
export class FamilyTreeSpouseMapEntityKey {
public PersonId: string = "";
public SpouseId: string = "";
public TreeId: string = "";
}
@@ -0,0 +1,59 @@
export class FamilyTreeSpouseMapViewEntity {
public CommonName: string = "";
public DivorceDate?: Date = null!;
public DivorceDateText: string = "";
public Gender: string = "";
public GenealogyName: string = "";
public IsCurrent: string = "";
public MarryDate?: Date = null!;
public MarryDateText: string = "";
public MarryType: string = "";
public Orderby: number = 0;
public PersonId: string = "";
public Remark: string = "";
public SpouseCommonName: string = "";
public SpouseGenealogyName: string = "";
public SpouseId: string = "";
public SpouseSurname: string = "";
public Surname: string = "";
public TreeId: string = "";
static readonly COMMON_NAME: string = "CommonName";
static readonly DIVORCE_DATE: string = "DivorceDate";
static readonly DIVORCE_DATE_TEXT: string = "DivorceDateText";
static readonly GENDER: string = "Gender";
static readonly GENEALOGY_NAME: string = "GenealogyName";
static readonly IS_CURRENT: string = "IsCurrent";
static readonly MARRY_DATE: string = "MarryDate";
static readonly MARRY_DATE_TEXT: string = "MarryDateText";
static readonly MARRY_TYPE: string = "MarryType";
static readonly ORDERBY: string = "Orderby";
static readonly PERSON_ID: string = "PersonId";
static readonly REMARK: string = "Remark";
static readonly SPOUSE_COMMON_NAME: string = "SpouseCommonName";
static readonly SPOUSE_GENEALOGY_NAME: string = "SpouseGenealogyName";
static readonly SPOUSE_ID: string = "SpouseId";
static readonly SPOUSE_SURNAME: string = "SpouseSurname";
static readonly SURNAME: string = "Surname";
static readonly TREE_ID: string = "TreeId";
static readonly DB_NAME_FAMILY_TREE_SPOUSE_MAP_VIEW: string = "family_tree_spouse_map_view";
static readonly DB_NAME_FIELDS: string = "common_name,divorce_date,divorce_date_text,gender,genealogy_name,is_current,marry_date,marry_date_text,marry_type,orderby,person_id,remark,spouse_common_name,spouse_genealogy_name,spouse_id,spouse_surname,surname,tree_id";
static readonly DB_COMMON_NAME: string = "common_name";
static readonly DB_DIVORCE_DATE: string = "divorce_date";
static readonly DB_DIVORCE_DATE_TEXT: string = "divorce_date_text";
static readonly DB_GENDER: string = "gender";
static readonly DB_GENEALOGY_NAME: string = "genealogy_name";
static readonly DB_IS_CURRENT: string = "is_current";
static readonly DB_MARRY_DATE: string = "marry_date";
static readonly DB_MARRY_DATE_TEXT: string = "marry_date_text";
static readonly DB_MARRY_TYPE: string = "marry_type";
static readonly DB_ORDERBY: string = "orderby";
static readonly DB_PERSON_ID: string = "person_id";
static readonly DB_REMARK: string = "remark";
static readonly DB_SPOUSE_COMMON_NAME: string = "spouse_common_name";
static readonly DB_SPOUSE_GENEALOGY_NAME: string = "spouse_genealogy_name";
static readonly DB_SPOUSE_ID: string = "spouse_id";
static readonly DB_SPOUSE_SURNAME: string = "spouse_surname";
static readonly DB_SURNAME: string = "surname";
static readonly DB_TREE_ID: string = "tree_id";
}
@@ -0,0 +1,29 @@
export class FamilyTreeViewEntity {
public AncestorPersonId: string = "";
public Brief: string = "";
public CommonName: string = "";
public GenealogyName: string = "";
public PublicIndc: string = "";
public Surname: string = "";
public TreeId: string = "";
public TreeName: string = "";
static readonly ANCESTOR_PERSON_ID: string = "AncestorPersonId";
static readonly BRIEF: string = "Brief";
static readonly COMMON_NAME: string = "CommonName";
static readonly GENEALOGY_NAME: string = "GenealogyName";
static readonly PUBLIC_INDC: string = "PublicIndc";
static readonly SURNAME: string = "Surname";
static readonly TREE_ID: string = "TreeId";
static readonly TREE_NAME: string = "TreeName";
static readonly DB_NAME_FAMILY_TREE_VIEW: string = "family_tree_view";
static readonly DB_NAME_FIELDS: string = "ancestor_person_id,brief,common_name,genealogy_name,public_indc,surname,tree_id,tree_name";
static readonly DB_ANCESTOR_PERSON_ID: string = "ancestor_person_id";
static readonly DB_BRIEF: string = "brief";
static readonly DB_COMMON_NAME: string = "common_name";
static readonly DB_GENEALOGY_NAME: string = "genealogy_name";
static readonly DB_PUBLIC_INDC: string = "public_indc";
static readonly DB_SURNAME: string = "surname";
static readonly DB_TREE_ID: string = "tree_id";
static readonly DB_TREE_NAME: string = "tree_name";
}
@@ -0,0 +1,6 @@
export class FinishBiometricLoginData {
public Username: string = "";
public AssertionJson: string = "";
public RequestOptionsJson: string = "";
public ChallengeId: string = "";
}
@@ -0,0 +1,4 @@
export class FinishBiometricRegistrationData {
public AttestationJson: string = "";
public CreationOptionsJson: string = "";
}
@@ -0,0 +1,8 @@
export class GridColumnInfo {
public title: string = "";
public dataIndex: string = "";
public sequence: number = 0;
public align: string = "";
public hidden: string = "";
public format: string = "";
}
+5
View File
@@ -0,0 +1,5 @@
export class JwtInfo {
public AccessToken: string = "";
public RefreshToken: string = "";
public CreatedTime: Date = new Date();
}
@@ -0,0 +1,7 @@
import type { LocaleDisplayData } from "./localeDisplayData";
export class LocaleData {
public Inserts: LocaleDisplayData[] = [];
public Updates: LocaleDisplayData[] = [];
public Deletes: LocaleDisplayData[] = [];
}
@@ -0,0 +1,7 @@
import { LocaleEntity } from "./localeEntity";
export class LocaleDisplayData extends LocaleEntity {
public OrgGroupName: string = "";
public OrgLang: string = "";
public OrgName: string = "";
}
@@ -0,0 +1,32 @@
export class LocaleEntity {
public CreatedDatetime: Date = new Date();
public CreatedBy: string = "";
public UpdatedDatetime: Date = new Date();
public UpdatedBy: string = "";
public GroupName: string = "";
public Lang: string = "";
public Name: string = "";
public Value: string = "";
public OrderBy: number = 0;
static readonly CREATED_DATETIME: string = "CreatedDatetime";
static readonly CREATED_BY: string = "CreatedBy";
static readonly UPDATED_DATETIME: string = "UpdatedDatetime";
static readonly UPDATED_BY: string = "UpdatedBy";
static readonly GROUP_NAME: string = "GroupName";
static readonly LANG: string = "Lang";
static readonly NAME: string = "Name";
static readonly VALUE: string = "Value";
static readonly ORDER_BY: string = "OrderBy";
static readonly DB_NAME_LOCALE: string = "locale";
static readonly DB_NAME_FIELDS: string = "created_datetime,created_by,updated_datetime,updated_by,group_name,lang,name,value,order_by";
static readonly DB_CREATED_DATETIME: string = "created_datetime";
static readonly DB_CREATED_BY: string = "created_by";
static readonly DB_UPDATED_DATETIME: string = "updated_datetime";
static readonly DB_UPDATED_BY: string = "updated_by";
static readonly DB_GROUP_NAME: string = "group_name";
static readonly DB_LANG: string = "lang";
static readonly DB_NAME: string = "name";
static readonly DB_VALUE: string = "value";
static readonly DB_ORDER_BY: string = "order_by";
}
@@ -0,0 +1,5 @@
export class LocaleEntityKey {
public GroupName: string = "";
public Lang: string = "";
public Name: string = "";
}
@@ -0,0 +1,6 @@
import type { LocaleDisplayData } from "./localeDisplayData";
import { SearchCriteriaResultData } from "./searchCriteriaResultData";
export class LocaleResultData extends SearchCriteriaResultData {
public Datas: LocaleDisplayData[] = [];
}
@@ -0,0 +1,5 @@
import { AbstractSearchCriteria } from "./abstractSearchCriteria";
export class LocaleSearchCriteria extends AbstractSearchCriteria {
}
@@ -0,0 +1,9 @@
export class LoginData {
public UserName: string = "";
public AgentUserName: string = "";
public UserMobile: string = "";
public UserPassword: string = "";
public RsaUserPassword: string = "";
public Guid: string = "";
public Culture: string = "";
}
Loaded 100 of 274 files, more files were not shown because too many files have changed in this diff. Show more