yangg 1 долоо хоног өмнө
parent
commit
e8017b9a7f
100 өөрчлөгдсөн 1789 нэмэгдсэн , 258 устгасан
  1. 2 2
      .env.development
  2. 685 0
      DEPLOYMENT.md
  3. 1056 0
      DEVELOPMENT.md
  4. 0 208
      README.md
  5. 1 1
      dist/assets/401.BMBPK9UO.js
  6. 1 1
      dist/assets/404.Bvj6kQuD.js
  7. 1 1
      dist/assets/ActiveUsersPie._HwOtqnP.js
  8. 0 0
      dist/assets/BorrowRankingList.CceyP_Qw.js
  9. 0 0
      dist/assets/BorrowTrendsChart.BgdfyRJv.js
  10. 1 1
      dist/assets/DeviceBorrowCountChart.IYyGbdT1.js
  11. 1 1
      dist/assets/DeviceBorrowDurationChart.BywRV3qv.js
  12. 1 1
      dist/assets/InfoCards.D1lOWU-s.js
  13. 0 1
      dist/assets/RoleDrawer.CBqqCJE-.js
  14. 0 0
      dist/assets/RoleMenuBtn.CWNBJxMK.js
  15. 1 1
      dist/assets/RoleMenuField.B1kfGKVg.js
  16. 0 0
      dist/assets/RoleMenuTree.DFsZaCuR.js
  17. 1 1
      dist/assets/RoleUsers.Cv60EtDA.js
  18. 1 1
      dist/assets/RoleUsersStores.DnH9kRrY.js
  19. 0 0
      dist/assets/SettlementDialog.BcFfYhHh.js
  20. 1 1
      dist/assets/StatusCards.DSbc_5JJ.js
  21. 1 1
      dist/assets/UtilizationTrend.BZn34sAh.js
  22. 0 0
      dist/assets/WarehouseSelectDialog.C3m6777w.js
  23. 0 0
      dist/assets/account.BVAYg-3p.js
  24. 0 1
      dist/assets/account.BtkKiTFL.css
  25. 0 0
      dist/assets/account.xgea-AJi.js
  26. 1 0
      dist/assets/account.yYmuVk84.css
  27. 1 0
      dist/assets/addContent.CN68U5md.js
  28. 0 0
      dist/assets/addContent.vue_vue_type_script_setup_true_lang.DAl8rZ69.js
  29. 0 1
      dist/assets/addContent.zb8diLZj.js
  30. 1 1
      dist/assets/addTabs.DPi02O4M.js
  31. 1 1
      dist/assets/addTabs.vue_vue_type_script_setup_true_lang.-nTpCWDB.js
  32. 1 1
      dist/assets/api.2enrpmEI.js
  33. 1 1
      dist/assets/api.3Z5kfZ3L.js
  34. 1 1
      dist/assets/api.5e6j2WLv.js
  35. 1 1
      dist/assets/api.B_6Iw6pI.js
  36. 1 1
      dist/assets/api.B_H3gF8l.js
  37. 1 1
      dist/assets/api.Bmx1aDhE.js
  38. 1 1
      dist/assets/api.BuO-sL4T.js
  39. 1 1
      dist/assets/api.ByO9Beo-.js
  40. 1 1
      dist/assets/api.BzspVXzn.js
  41. 1 1
      dist/assets/api.CkRWsva-.js
  42. 1 1
      dist/assets/api.CoBdXsPO.js
  43. 1 1
      dist/assets/api.CrH-BHHD.js
  44. 1 1
      dist/assets/api.D4necOd_.js
  45. 1 1
      dist/assets/api.DGx5T5Fx.js
  46. 1 1
      dist/assets/api.DryHg6Ox.js
  47. 1 1
      dist/assets/api.ZVYx5XJA.js
  48. 1 1
      dist/assets/api.hqguW4pb.js
  49. 1 1
      dist/assets/api.l-byepyR.js
  50. 1 1
      dist/assets/api.u0gce_la.js
  51. 0 1
      dist/assets/aside.krZyWLu5.js
  52. 1 1
      dist/assets/associationTable.DMYf_o5W.js
  53. 0 0
      dist/assets/associationTable.vue_vue_type_script_setup_true_lang.D6AT_M1Q.js
  54. 1 0
      dist/assets/authFunction.BQbm82_n.js
  55. 0 1
      dist/assets/authFunction.SBBImBKV.js
  56. 0 0
      dist/assets/breadcrumb.4r2fbpIx.js
  57. 0 0
      dist/assets/changePwd.FIlC7LhM.js
  58. 2 2
      dist/assets/classic.Cs1gLef6.js
  59. 1 1
      dist/assets/closeFull.goZUv5-W.js
  60. 1 1
      dist/assets/columnPermission.sDZRKcsT.js
  61. 2 2
      dist/assets/columns.B-3JttFh.js
  62. 0 0
      dist/assets/columnsAside.DO_jcPGZ.js
  63. 0 0
      dist/assets/commonCrud.D39IXw49.js
  64. 0 0
      dist/assets/crud.01VPoHJL.js
  65. 0 0
      dist/assets/crud.B1mNT-UB.js
  66. 0 0
      dist/assets/crud.BAFOo6sO.js
  67. 0 0
      dist/assets/crud.BBt63vfF.js
  68. 0 0
      dist/assets/crud.BDtvWnUk.js
  69. 0 0
      dist/assets/crud.BG0fvdiD.js
  70. 0 0
      dist/assets/crud.BJ-y2GAb.js
  71. 0 0
      dist/assets/crud.BTHDtff7.js
  72. 0 0
      dist/assets/crud.Bc4M1tup.js
  73. 0 0
      dist/assets/crud.BqqIB6sX.js
  74. 0 0
      dist/assets/crud.C1FM13FL.js
  75. 0 0
      dist/assets/crud.CBn_xSSS.js
  76. 0 0
      dist/assets/crud.CGE9mSY8.js
  77. 0 0
      dist/assets/crud.CHgfiFuU.js
  78. 0 0
      dist/assets/crud.CTe1vp8I.js
  79. 0 0
      dist/assets/crud.C_yTNSng.js
  80. 0 0
      dist/assets/crud.CeglOVFd.js
  81. 1 1
      dist/assets/crud.Citzi9qU.js
  82. 0 0
      dist/assets/crud.CkLEzj43.js
  83. 0 0
      dist/assets/crud.CmiNNbfX.js
  84. 0 0
      dist/assets/crud.CmsB91Qa.js
  85. 1 1
      dist/assets/crud.Cyh4QLnY.js
  86. 1 1
      dist/assets/crud.D1LhuClR.js
  87. 0 0
      dist/assets/crud.DHYrxkFM.js
  88. 0 0
      dist/assets/crud.DJG33rqg.js
  89. 1 1
      dist/assets/crud.DJnUDZlA.js
  90. 0 0
      dist/assets/crud.DK5-BAFt.js
  91. 0 0
      dist/assets/crud.DLbfJmej.js
  92. 0 0
      dist/assets/crud.DTtz7j6r.js
  93. 0 0
      dist/assets/crud.Da6QkdTW.js
  94. 0 0
      dist/assets/crud.DjaAQl5K.js
  95. 0 0
      dist/assets/crud.Djb3wdii.js
  96. 0 0
      dist/assets/crud.DyVmLmBe.js
  97. 0 0
      dist/assets/crud.Q8pb-lof.js
  98. 0 0
      dist/assets/crud.R3c2t9h-.js
  99. 0 0
      dist/assets/crud.l3t9U8Fn.js
  100. 0 0
      dist/assets/crud.zUhyb20-.js

+ 2 - 2
.env.development

@@ -5,8 +5,8 @@ ENV = 'development'
 #线下:http://192.168.100.187:8083
 # 本地环境接口地址 121.36.251.245
 
-VITE_API_URL = 'http://192.168.100.121:8086'
-#VITE_API_URL = 'http://1.94.168.85:8086'
+#VITE_API_URL = 'http://192.168.100.121:8086'
+VITE_API_URL = 'http://1.94.168.85:8086'
 # VITE_API_URL = 'https://backend.qicai321.com'
 VITE_API_WX_URL='https://api.weixin.qq.com/'
 VITE_API_URL_MINLONG='http://117.185.80.170:7861'

+ 685 - 0
DEPLOYMENT.md

@@ -0,0 +1,685 @@
+# 部署文档
+
+## 部署概述
+
+本文档介绍如何将项目部署到生产环境。项目支持多种部署方式,包括静态文件部署、Docker 部署等。
+
+## 前置要求
+
+- Node.js >= 16.0.0
+- npm >= 7.0.0 或 yarn
+- Web 服务器(Nginx、Apache、IIS 等)或 Docker(可选)
+
+## 构建生产版本
+
+### 1. 配置生产环境变量
+
+在项目根目录创建 `.env.production` 文件:
+
+```env
+# API 基础路径(生产环境)
+VITE_API_URL=https://your-api-domain.com/api/
+
+# 公共路径(根据部署路径配置)
+# 如果部署在根目录,使用: /
+# 如果部署在子目录,使用: /subdirectory/
+VITE_PUBLIC_PATH=/
+
+# 构建输出目录
+VITE_DIST_PATH=dist
+```
+
+### 2. 执行构建命令
+
+```bash
+# 标准生产构建
+npm run build
+
+# 或使用 yarn
+yarn build
+```
+
+构建完成后,生成的文件位于 `dist/` 目录。
+
+### 3. 构建输出说明
+
+构建后的 `dist/` 目录结构:
+
+```
+dist/
+├── assets/              # 静态资源(JS、CSS、图片等)
+│   ├── index.[hash].js
+│   ├── index.[hash].css
+│   └── ...
+├── index.html          # 入口 HTML 文件
+├── favicon.ico         # 网站图标
+└── version-build       # 版本文件(用于版本检查)
+```
+
+## 构建优化
+
+### 1. 构建分析
+
+分析构建产物大小,优化打包体积:
+
+```bash
+# 安装分析插件
+npm install --save-dev rollup-plugin-visualizer
+
+# 在 vite.config.ts 中添加配置
+import { visualizer } from 'rollup-plugin-visualizer';
+
+export default defineConfig({
+  plugins: [
+    // ...其他插件
+    visualizer({
+      open: true,
+      gzipSize: true,
+      brotliSize: true,
+    }),
+  ],
+});
+
+# 构建后会自动打开分析页面
+npm run build
+```
+
+### 2. 代码分割优化
+
+项目已配置代码分割(`vite.config.ts`):
+
+```typescript
+manualChunks: {
+  vue: ['vue', 'vue-router', 'pinia'],
+  echarts: ['echarts'],
+}
+```
+
+可以根据实际情况调整分割策略。
+
+### 3. 压缩优化
+
+Vite 默认会压缩代码,可以通过配置进一步优化:
+
+```typescript
+build: {
+  minify: 'terser',  // 使用 terser 压缩(需要安装 terser)
+  terserOptions: {
+    compress: {
+      drop_console: true,  // 生产环境移除 console
+      drop_debugger: true, // 移除 debugger
+    },
+  },
+}
+```
+
+## 环境变量配置
+
+### 生产环境变量
+
+在部署前,确保正确配置 `.env.production`:
+
+```env
+# API 地址(必须配置为生产环境的后端地址)
+VITE_API_URL=https://api.yourdomain.com/api/
+
+# 公共路径
+# 根目录部署: /
+# 子目录部署: /subdirectory/
+VITE_PUBLIC_PATH=/
+
+# 构建输出目录
+VITE_DIST_PATH=dist
+```
+
+### 多环境部署
+
+如果需要支持多个环境(开发、测试、生产),可以创建不同的环境文件:
+
+- `.env.development` - 开发环境
+- `.env.staging` - 测试环境
+- `.env.production` - 生产环境
+
+构建时指定环境:
+
+```bash
+# 构建测试环境
+vite build --mode staging
+
+# 构建生产环境
+vite build --mode production
+```
+
+## 部署检查清单
+
+- [ ] 环境变量已正确配置(`.env.production`)
+- [ ] 已执行生产构建(`npm run build`)
+- [ ] 构建产物已上传到服务器
+- [ ] Web 服务器配置正确(支持 SPA 路由)
+- [ ] API 地址配置正确(后端服务可访问)
+- [ ] HTTPS 已配置(生产环境推荐)
+- [ ] 静态资源缓存策略已配置
+- [ ] Gzip 压缩已启用
+- [ ] 安全头已配置
+- [ ] 跨域问题已解决(如需要)
+- [ ] 版本检查功能正常
+
+## HTTPS 配置详解
+
+### 1. 使用 Let's Encrypt 免费证书
+
+```bash
+# 安装 Certbot
+sudo apt-get update
+sudo apt-get install certbot python3-certbot-nginx
+
+# 获取证书(自动配置 Nginx)
+sudo certbot --nginx -d your-domain.com -d www.your-domain.com
+
+# 测试自动续期
+sudo certbot renew --dry-run
+
+# 证书会自动续期(通过 cron 任务)
+```
+
+### 2. 手动配置 SSL 证书
+
+如果使用其他证书提供商:
+
+```nginx
+server {
+    listen 443 ssl http2;
+    server_name your-domain.com;
+    
+    # SSL 证书路径
+    ssl_certificate /path/to/certificate.crt;
+    ssl_certificate_key /path/to/private.key;
+    
+    # SSL 证书链(如果提供)
+    # ssl_trusted_certificate /path/to/chain.crt;
+    
+    # SSL 优化配置
+    ssl_protocols TLSv1.2 TLSv1.3;
+    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
+    ssl_prefer_server_ciphers on;
+    ssl_session_cache shared:SSL:10m;
+    ssl_session_timeout 10m;
+    ssl_stapling on;
+    ssl_stapling_verify on;
+    
+    # HSTS(HTTP Strict Transport Security)
+    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
+}
+```
+
+### 3. SSL 测试
+
+使用在线工具测试 SSL 配置:
+- [SSL Labs](https://www.ssllabs.com/ssltest/)
+- [SSL Checker](https://www.sslshopper.com/ssl-checker.html)
+
+## 性能优化建议
+
+### 1. 启用 Gzip 压缩
+
+参考上述 Nginx/Apache 配置示例。
+
+**压缩效果检查**:
+```bash
+# 检查响应头是否包含 Content-Encoding: gzip
+curl -H "Accept-Encoding: gzip" -I https://your-domain.com
+```
+
+### 2. 启用 Brotli 压缩(更高效)
+
+```nginx
+# 安装 Brotli 模块
+# Ubuntu/Debian
+sudo apt-get install nginx-module-brotli
+
+# 在 nginx.conf 中加载模块
+load_module modules/ngx_http_brotli_filter_module.so;
+load_module modules/ngx_http_brotli_static_module.so;
+
+# 配置 Brotli
+brotli on;
+brotli_comp_level 6;
+brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
+```
+
+### 3. 配置静态资源缓存
+
+```nginx
+# Nginx 示例
+location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+    expires 1y;
+    add_header Cache-Control "public, immutable";
+    
+    # 启用压缩
+    gzip_static on;
+    brotli_static on;
+}
+
+# HTML 文件不缓存
+location ~* \.html$ {
+    expires -1;
+    add_header Cache-Control "no-cache, no-store, must-revalidate";
+    add_header Pragma "no-cache";
+}
+```
+
+### 4. CDN 加速
+
+将静态资源(JS、CSS、图片)部署到 CDN,提升加载速度。
+
+**CDN 选择建议**:
+- 国内: 阿里云 CDN、腾讯云 CDN、七牛云
+- 国外: Cloudflare、AWS CloudFront、Fastly
+
+**CDN 配置要点**:
+- 设置合适的缓存策略
+- 配置 HTTPS
+- 启用 HTTP/2
+- 配置回源规则
+
+### 5. 代码分割和懒加载
+
+项目已配置代码分割(`vite.config.ts` 中的 `manualChunks`),将 Vue 核心库和 ECharts 单独打包。
+
+**路由懒加载**:
+```typescript
+// 路由配置中使用动态导入
+const routes = [
+  {
+    path: '/company',
+    component: () => import('/@/views/system/company/index.vue'),
+  },
+];
+```
+
+### 6. 图片优化
+
+- 使用 WebP 格式(现代浏览器)
+- 压缩图片大小
+- 使用响应式图片(srcset)
+- 懒加载图片(Intersection Observer)
+
+### 7. 预加载关键资源
+
+在 `index.html` 中添加:
+
+```html
+<!-- DNS 预解析 -->
+<link rel="dns-prefetch" href="https://api.yourdomain.com">
+
+<!-- 预连接 -->
+<link rel="preconnect" href="https://api.yourdomain.com">
+
+<!-- 预加载关键资源 -->
+<link rel="preload" href="/assets/main.js" as="script">
+<link rel="preload" href="/assets/main.css" as="style">
+```
+
+### 8. 性能监控
+
+使用性能监控工具:
+- **Google Analytics**: 页面性能分析
+- **Google PageSpeed Insights**: 性能评分
+- **WebPageTest**: 详细性能分析
+- **Lighthouse**: Chrome DevTools 内置工具
+
+## CI/CD 持续集成部署
+
+### 1. GitHub Actions 配置
+
+创建 `.github/workflows/deploy.yml`:
+
+```yaml
+name: Build and Deploy
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    branches: [ main ]
+
+jobs:
+  build-and-deploy:
+    runs-on: ubuntu-latest
+    
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v3
+      
+    - name: Setup Node.js
+      uses: actions/setup-node@v3
+      with:
+        node-version: '18'
+        cache: 'npm'
+        
+    - name: Install dependencies
+      run: npm ci
+      
+    - name: Build
+      run: npm run build
+      env:
+        VITE_API_URL: ${{ secrets.VITE_API_URL }}
+        VITE_PUBLIC_PATH: ${{ secrets.VITE_PUBLIC_PATH }}
+        
+    - name: Deploy to server
+      uses: easingthemes/ssh-deploy@main
+      env:
+        SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
+        REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
+        REMOTE_USER: ${{ secrets.REMOTE_USER }}
+        SOURCE: "dist/"
+        TARGET: "/var/www/zheda-admin/"
+```
+
+### 2. GitLab CI 配置
+
+创建 `.gitlab-ci.yml`:
+
+```yaml
+stages:
+  - build
+  - deploy
+
+build:
+  stage: build
+  image: node:18
+  script:
+    - npm ci
+    - npm run build
+  artifacts:
+    paths:
+      - dist/
+    expire_in: 1 hour
+
+deploy:
+  stage: deploy
+  image: alpine:latest
+  before_script:
+    - apk add --no-cache openssh-client
+    - eval $(ssh-agent -s)
+    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
+    - mkdir -p ~/.ssh
+    - chmod 700 ~/.ssh
+  script:
+    - scp -r dist/* $DEPLOY_USER@$DEPLOY_HOST:/var/www/zheda-admin/
+  only:
+    - main
+```
+
+### 3. Jenkins 配置
+
+创建 `Jenkinsfile`:
+
+```groovy
+pipeline {
+    agent any
+    
+    environment {
+        NODE_VERSION = '18'
+    }
+    
+    stages {
+        stage('Checkout') {
+            steps {
+                checkout scm
+            }
+        }
+        
+        stage('Install') {
+            steps {
+                sh 'npm ci'
+            }
+        }
+        
+        stage('Build') {
+            steps {
+                sh 'npm run build'
+            }
+        }
+        
+        stage('Deploy') {
+            steps {
+                sh '''
+                    rsync -avz --delete dist/ user@server:/var/www/zheda-admin/
+                '''
+            }
+        }
+    }
+}
+```
+
+
+
+
+#### 日志轮转配置
+
+创建 `/etc/logrotate.d/nginx`:
+
+```
+/var/log/nginx/*.log {
+    daily
+    missingok
+    rotate 52
+    compress
+    delaycompress
+    notifempty
+    create 0640 www-data adm
+    sharedscripts
+    postrotate
+        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
+    endscript
+}
+```
+
+### 3. 性能监控
+
+使用性能监控工具分析页面性能。
+
+#### Google Analytics
+
+```html
+<!-- 在 index.html 中添加 -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
+<script>
+  window.dataLayer = window.dataLayer || [];
+  function gtag(){dataLayer.push(arguments);}
+  gtag('js', new Date());
+  gtag('config', 'GA_MEASUREMENT_ID');
+</script>
+```
+
+#### 自定义性能监控
+
+```typescript
+// 监控页面加载性能
+window.addEventListener('load', () => {
+  const perfData = performance.getEntriesByType('navigation')[0];
+  console.log('DNS查询耗时:', perfData.domainLookupEnd - perfData.domainLookupStart);
+  console.log('TCP连接耗时:', perfData.connectEnd - perfData.connectStart);
+  console.log('请求耗时:', perfData.responseEnd - perfData.requestStart);
+  console.log('DOM解析耗时:', perfData.domContentLoadedEventEnd - perfData.domContentLoadedEventStart);
+  console.log('页面加载耗时:', perfData.loadEventEnd - perfData.fetchStart);
+});
+```
+
+
+## 常见问题
+
+### 1. 页面刷新 404
+
+**问题**: 刷新页面或直接访问路由时出现 404
+
+**原因**: Web 服务器未配置 SPA 路由支持
+
+**解决方案**: 参考上述 Nginx/Apache/IIS 配置,确保所有路由都指向 `index.html`
+
+### 2. API 请求失败
+
+**问题**: 前端无法访问后端 API
+
+**解决方案**:
+- 检查 `VITE_API_URL` 配置是否正确
+- 检查后端服务是否正常运行
+- 检查跨域配置(CORS)
+- 检查网络防火墙设置
+
+### 3. 静态资源加载失败
+
+**问题**: CSS、JS 文件加载失败
+
+**解决方案**:
+- 检查 `VITE_PUBLIC_PATH` 配置是否正确
+- 检查 Web 服务器配置
+- 检查文件路径是否正确
+
+### 4. 版本更新后用户看不到新版本
+
+**问题**: 用户浏览器缓存了旧版本
+
+**解决方案**:
+- 项目已集成版本检查功能,会自动提示用户刷新
+- 可以配置更激进的缓存策略,确保 HTML 文件不被缓存
+
+```nginx
+# HTML 文件不缓存
+location ~* \.html$ {
+    expires -1;
+    add_header Cache-Control "no-cache, no-store, must-revalidate";
+}
+```
+
+## 备份和恢复
+
+### 1. 备份策略
+
+#### 文件备份
+
+```bash
+# 创建备份脚本 backup.sh
+#!/bin/bash
+BACKUP_DIR="/backup/zheda-admin"
+DATE=$(date +%Y%m%d_%H%M%S)
+DEPLOY_DIR="/var/www/zheda-admin"
+
+# 创建备份目录
+mkdir -p $BACKUP_DIR
+
+# 备份部署文件
+tar -czf $BACKUP_DIR/zheda-admin_$DATE.tar.gz -C $DEPLOY_DIR .
+
+# 保留最近 7 天的备份
+find $BACKUP_DIR -name "zheda-admin_*.tar.gz" -mtime +7 -delete
+
+echo "备份完成: $BACKUP_DIR/zheda-admin_$DATE.tar.gz"
+```
+
+#### 自动化备份
+
+使用 cron 定时任务:
+
+```bash
+# 编辑 crontab
+crontab -e
+
+# 每天凌晨 2 点备份
+0 2 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1
+```
+
+### 2. 恢复流程
+
+```bash
+# 停止服务(如果需要)
+sudo systemctl stop nginx
+
+# 恢复备份
+cd /var/www/zheda-admin
+tar -xzf /backup/zheda-admin_20240101_020000.tar.gz
+
+# 重启服务
+sudo systemctl start nginx
+
+# 验证恢复
+curl -I https://your-domain.com
+```
+
+### 3. 版本管理
+
+使用 Git 标签管理版本:
+
+```bash
+# 创建版本标签
+git tag -a v1.0.0 -m "Release version 1.0.0"
+git push origin v1.0.0
+
+# 查看所有标签
+git tag
+
+# 切换到指定版本
+git checkout v1.0.0
+```
+
+## 回滚方案
+
+如果部署后出现问题,可以快速回滚:
+
+### 1. 快速回滚(保留旧版本)
+
+部署前备份当前版本:
+
+```bash
+# 部署前备份
+cp -r /var/www/zheda-admin /var/www/zheda-admin.backup.$(date +%Y%m%d_%H%M%S)
+
+# 部署新版本
+rsync -avz --delete dist/ /var/www/zheda-admin/
+
+# 如果出现问题,快速回滚
+rm -rf /var/www/zheda-admin
+cp -r /var/www/zheda-admin.backup.* /var/www/zheda-admin
+```
+
+### 2. Git 版本回滚
+
+```bash
+# 查看提交历史
+git log --oneline
+
+# 回滚到指定版本
+git checkout <commit-hash>
+npm run build
+
+# 重新部署
+rsync -avz --delete dist/ /var/www/zheda-admin/
+```
+
+### 3. 蓝绿部署
+
+使用蓝绿部署策略,实现零停机回滚:
+
+```bash
+# 部署到绿色环境
+rsync -avz --delete dist/ /var/www/zheda-admin-green/
+
+# 测试绿色环境
+curl https://green.your-domain.com
+
+# 切换流量(更新 Nginx 配置)
+sudo nginx -s reload
+
+# 如果出现问题,立即切换回蓝色环境
+```
+
+### 4. 回滚检查清单
+
+- [ ] 确认回滚原因和影响范围
+- [ ] 备份当前版本
+- [ ] 执行回滚操作
+- [ ] 验证功能正常
+- [ ] 通知相关人员
+- [ ] 记录回滚日志
+

+ 1056 - 0
DEVELOPMENT.md

@@ -0,0 +1,1056 @@
+# 开发文档
+
+## 项目简介
+
+本项目是基于 Vue3 + TypeScript + Vite + Element Plus 的前端管理系统,采用前后端分离架构,提供完整的权限管理、CRUD操作等功能。
+
+## 技术栈
+
+- **框架**: Vue 3.4+ (Composition API)
+- **语言**: TypeScript 4.9+
+- **构建工具**: Vite 5.4+
+- **UI框架**: Element Plus 2.8+
+- **状态管理**: Pinia 2.0+
+- **路由**: Vue Router 4.4+
+- **CRUD框架**: Fast-Crud 1.21+
+- **HTTP客户端**: Axios 1.7+
+- **样式**: Tailwind CSS 3.2+ / SCSS
+
+## 环境要求
+
+- **Node.js**: >= 16.0.0 (推荐使用最新 LTS 版本)
+- **npm**: >= 7.0.0 (或使用 yarn)
+- **操作系统**: Windows / macOS / Linux
+
+## 快速开始
+
+### 1. 克隆项目
+
+```bash
+git clone <repository-url>
+cd zheda
+```
+
+### 2. 安装依赖
+
+使用 npm:
+```bash
+npm install
+```
+
+或使用 yarn:
+```bash
+yarn install
+```
+
+或使用国内镜像加速:
+```bash
+npm install --registry=https://registry.npm.taobao.org
+```
+
+### 3. 配置环境变量
+
+在项目根目录创建环境变量文件(根据实际需要选择):
+
+**开发环境** (`.env.development`):
+```env
+# 开发服务器端口
+VITE_PORT=8080
+
+# API 基础路径
+VITE_API_URL=http://localhost:8000/api/
+
+# 公共路径(开发环境通常为 ./)
+VITE_PUBLIC_PATH=./
+
+# 构建输出目录
+VITE_DIST_PATH=dist
+```
+
+**生产环境** (`.env.production`):
+```env
+# API 基础路径(生产环境)
+VITE_API_URL=https://your-api-domain.com/api/
+
+# 公共路径(根据部署路径配置,如:/ 或 /admin/)
+VITE_PUBLIC_PATH=/
+
+# 构建输出目录
+VITE_DIST_PATH=dist
+```
+
+**本地生产环境** (`.env.local_prod`):
+```env
+# 本地生产环境配置
+VITE_API_URL=http://localhost:8000/api/
+VITE_PUBLIC_PATH=/
+VITE_DIST_PATH=dist
+```
+
+### 4. 启动开发服务器
+
+```bash
+npm run dev
+```
+
+或
+
+```bash
+yarn dev
+```
+
+开发服务器启动后,访问: `http://localhost:8080` (端口可在环境变量中配置)
+
+## 项目结构
+
+```
+zheda/
+├── public/                 # 静态资源目录(不会被 Vite 处理,直接复制到 dist)
+│   ├── favicon.ico        # 网站图标
+│   ├── favicon1.ico       # 备用图标
+│   ├── favicon2.ico       # 备用图标
+│   └── version-build       # 版本构建文件(自动生成)
+├── src/                    # 源代码目录
+│   ├── api/               # API 接口定义
+│   │   ├── login/         # 登录相关接口
+│   │   │   └── index.ts   # 登录 API
+│   │   ├── menu/          # 菜单相关接口
+│   │   └── system/        # 系统相关接口
+│   │       ├── loginBackground.ts
+│   │       └── ...
+│   ├── assets/            # 静态资源(图片、样式等)
+│   │   ├── style/         # 全局样式文件
+│   │   ├── iconfont/      # 图标字体文件
+│   │   └── *.png|jpg|svg  # 图片资源
+│   ├── components/        # 公共组件(可复用的 Vue 组件)
+│   ├── directive/         # 自定义指令(Vue 指令)
+│   ├── i18n/              # 国际化配置(多语言支持)
+│   ├── layout/             # 布局组件(页面布局结构)
+│   ├── plugin/             # 插件配置(第三方插件初始化)
+│   │   └── permission/     # 权限插件
+│   ├── router/            # 路由配置
+│   │   ├── index.ts       # 路由入口(路由实例和守卫)
+│   │   ├── backEnd.ts     # 后端控制路由逻辑
+│   │   ├── frontEnd.ts    # 前端控制路由逻辑
+│   │   └── route.ts       # 路由定义(静态路由)
+│   ├── stores/            # Pinia 状态管理
+│   │   ├── index.ts       # Store 入口
+│   │   ├── userInfo.ts    # 用户信息 Store
+│   │   ├── routesList.ts  # 路由列表 Store
+│   │   ├── btnPermission.ts # 按钮权限 Store
+│   │   ├── columnPermission.ts # 列权限 Store
+│   │   ├── themeConfig.ts # 主题配置 Store
+│   │   └── ...            # 其他 Store
+│   ├── theme/             # 主题样式(颜色、布局等)
+│   ├── types/             # TypeScript 类型定义
+│   │   └── global.d.ts    # 全局类型声明
+│   ├── utils/             # 工具函数
+│   │   ├── baseUrl.ts     # 基础URL处理(API地址管理)
+│   │   ├── service.ts     # HTTP请求封装(Axios封装)
+│   │   ├── storage.ts     # 本地存储封装(LocalStorage/SessionStorage)
+│   │   ├── authFunction.ts # 权限验证函数
+│   │   ├── message.ts     # 消息提示封装
+│   │   ├── dictionary.ts  # 字典数据管理
+│   │   ├── upgrade.ts     # 版本升级检查
+│   │   └── ...            # 其他工具函数
+│   ├── views/             # 页面组件(业务页面)
+│   │   └── system/        # 系统管理模块
+│   │       └── company/   # 公司管理
+│   │           ├── crud.tsx # CRUD 配置
+│   │           ├── api.ts   # API 接口
+│   │           └── index.vue # 页面组件
+│   ├── App.vue            # 根组件(应用入口组件)
+│   ├── main.ts            # 入口文件(应用初始化)
+│   └── settings.ts        # Fast-Crud 配置(CRUD框架配置)
+├── dist/                  # 构建输出目录(生产环境,gitignore)
+├── node_modules/         # 依赖包目录(gitignore)
+├── index.html             # HTML 模板
+├── package.json           # 项目依赖配置
+├── package-lock.json     # 依赖锁定文件
+├── yarn.lock             # Yarn 依赖锁定文件(如果使用 Yarn)
+├── tsconfig.json          # TypeScript 配置
+├── vite.config.ts         # Vite 构建配置
+├── tailwind.config.js     # Tailwind CSS 配置
+├── postcss.config.js      # PostCSS 配置
+├── .env.development       # 开发环境变量(需要创建)
+├── .env.production        # 生产环境变量(需要创建)
+├── .env.local_prod        # 本地生产环境变量(需要创建)
+├── .gitignore            # Git 忽略文件配置
+├── README.md              # 项目说明文档
+├── DEVELOPMENT.md         # 开发文档(本文档)
+└── DEPLOYMENT.md          # 部署文档
+```
+
+### 目录详细说明
+
+#### `/src/api/` - API 接口层
+- **作用**: 统一管理所有后端 API 接口
+- **规范**: 
+  - 按业务模块划分目录
+  - 每个模块创建独立的 `api.ts` 文件
+  - 使用统一的 `request` 方法进行请求
+- **示例**: 参考 `src/views/system/company/api.ts`
+
+#### `/src/stores/` - 状态管理
+- **作用**: 使用 Pinia 进行全局状态管理
+- **主要 Store**:
+  - `userInfo.ts`: 用户信息(登录状态、用户数据)
+  - `routesList.ts`: 路由列表(动态路由)
+  - `btnPermission.ts`: 按钮权限列表
+  - `themeConfig.ts`: 主题配置(布局、颜色等)
+- **使用方式**: 
+  ```typescript
+  import { useUserInfo } from '/@/stores/userInfo';
+  const { userInfos } = storeToRefs(useUserInfo());
+  ```
+
+#### `/src/utils/` - 工具函数
+- **核心工具**:
+  - `service.ts`: HTTP 请求封装,包含请求/响应拦截器
+  - `storage.ts`: 本地存储封装(LocalStorage/SessionStorage)
+  - `authFunction.ts`: 权限验证函数(auth、auths、authAll)
+  - `baseUrl.ts`: API 基础地址管理
+  - `message.ts`: 消息提示封装
+  - `dictionary.ts`: 字典数据管理
+
+#### `/src/router/` - 路由系统
+- **路由模式**: Hash 模式(`createWebHashHistory`)
+- **路由控制**: 支持前端控制和后端控制两种模式
+  - 前端控制: 路由定义在前端,通过角色权限过滤
+  - 后端控制: 路由由后端返回,动态注册
+- **路由守卫**: 
+  - 登录验证
+  - 权限验证
+  - 版本检查
+  - 路由缓存(keep-alive)
+
+#### `/src/views/` - 页面组件
+- **组织方式**: 按业务模块划分
+- **命名规范**: 使用 kebab-case(短横线命名)
+- **CRUD 页面**: 使用 Fast-Crud 框架,参考 `system/company/crud.tsx`
+
+## 开发指南
+
+### 代码规范
+
+项目使用 ESLint 进行代码检查,建议在提交代码前运行:
+
+```bash
+npm run lint-fix
+```
+
+### 添加新页面
+
+1. 在 `src/views/` 目录下创建页面组件
+2. 在 `src/router/` 中添加路由配置
+3. 如需 CRUD 功能,参考 `src/views/system/company/crud.tsx` 的实现方式
+
+### API 接口调用
+
+#### 1. 创建 API 文件
+
+在 `src/api/` 或对应业务模块目录下创建 API 文件,例如 `src/views/system/company/api.ts`:
+
+```typescript
+import { request } from '/@/utils/service';
+import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
+
+// API 前缀(统一管理)
+export const apiPrefix = '/api/platform-admin/tenants/';
+
+// 获取列表(分页查询)
+export function GetList(query: UserPageQuery) {
+  return request({
+    url: apiPrefix,
+    method: 'get',
+    params: query,
+  });
+}
+
+// 获取详情
+export function GetObj(id: InfoReq) {
+  return request({
+    url: apiPrefix + id,
+    method: 'get',
+  });
+}
+
+// 新增
+export function AddObj(obj: AddReq) {
+  return request({
+    url: apiPrefix,
+    method: 'post',
+    data: obj,
+  });
+}
+
+// 更新
+export function UpdateObj(obj: EditReq) {
+  return request({
+    url: apiPrefix + obj.id + '/',
+    method: 'put',
+    data: obj,
+  });
+}
+
+// 删除
+export function DelObj(id: DelReq) {
+  return request({
+    url: apiPrefix + id + '/',
+    method: 'delete',
+    data: { id },
+  });
+}
+
+// 自定义接口示例
+export function updateTenantStatus(id: string, status: number) {
+  return request({
+    url: `${apiPrefix}${id}/activate/`,
+    method: 'post',
+    data: { status },
+  });
+}
+```
+
+#### 2. 在组件中使用 API
+
+```typescript
+import { GetList, AddObj, UpdateObj, DelObj } from './api';
+
+// 在 setup 函数中使用
+const loadData = async () => {
+  try {
+    const res = await GetList({ page: 1, limit: 10 });
+    console.log(res.data);
+  } catch (error) {
+    console.error('加载数据失败', error);
+  }
+};
+```
+
+#### 3. API 请求配置说明
+
+**请求拦截器** (`src/utils/service.ts`):
+- 自动添加 `Authorization` 头(从 SessionStorage 获取 token)
+- 统一设置 `baseURL`(从环境变量获取)
+- 参数序列化(处理布尔值、空值等)
+
+**响应拦截器**:
+- 统一处理错误码(400、401、403、500 等)
+- 401 自动跳转登录页
+- 统一错误提示
+
+**请求配置选项**:
+```typescript
+request({
+  url: '/api/xxx',
+  method: 'get' | 'post' | 'put' | 'delete',
+  params: {},      // GET 请求参数
+  data: {},        // POST/PUT 请求体
+  headers: {},     // 自定义请求头
+  timeout: 20000,   // 超时时间(毫秒)
+  responseType: 'blob', // 响应类型(用于文件下载)
+  unpack: false,    // 是否解包响应数据
+})
+```
+
+#### 4. 文件下载
+
+项目提供了文件下载工具函数:
+
+```typescript
+import { downloadFile, downloadFilePost } from '/@/utils/service';
+
+// GET 方式下载
+downloadFile({
+  url: '/api/export/',
+  params: { id: 1 },
+  method: 'get',
+  filename: '导出文件'
+});
+
+// POST 方式下载
+downloadFilePost({
+  url: '/api/export/',
+  data: { ids: [1, 2, 3] },
+  method: 'post',
+  filename: '导出文件'
+});
+```
+
+### 使用 Fast-Crud
+
+项目集成了 Fast-Crud 框架,可以快速生成 CRUD 页面。参考 `src/views/system/company/crud.tsx` 的实现。
+
+#### 1. 基本结构
+
+```typescript
+import * as api from './api';
+import { UserPageQuery, AddReq, DelReq, EditReq, CreateCrudOptionsProps, CreateCrudOptionsRet } from '@fast-crud/fast-crud';
+
+export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
+  // 分页查询
+  const pageRequest = async (query: UserPageQuery) => {
+    return await api.GetList(query);
+  };
+  
+  // 编辑请求
+  const editRequest = async ({ form, row }: EditReq) => {
+    form.id = row.id;
+    return await api.UpdateObj(form);
+  };
+  
+  // 删除请求
+  const delRequest = async ({ row }: DelReq) => {
+    return await api.DelObj(row.id);
+  };
+  
+  // 新增请求
+  const addRequest = async ({ form }: AddReq) => {
+    return await api.AddObj(form);
+  };
+
+  return {
+    crudOptions: {
+      // CRUD 配置
+    }
+  };
+};
+```
+
+#### 2. 主要配置项
+
+**请求配置**:
+```typescript
+request: {
+  pageRequest,    // 分页查询
+  addRequest,     // 新增
+  editRequest,    // 编辑
+  delRequest,     // 删除
+}
+```
+
+**工具栏配置**:
+```typescript
+toolbar: {
+  buttons: {
+    search: { show: true },      // 搜索按钮
+    refresh: { show: true },      // 刷新按钮
+    export: { show: true },       // 导出按钮
+    columns: { show: true },      // 列设置按钮
+  }
+}
+```
+
+**搜索配置**:
+```typescript
+search: {
+  col: { span: 3 },              // 每列占用的栅格数
+  show: true,                     // 显示搜索区域
+  autoSearch: true,               // 自动搜索
+  buttons: {
+    search: { size: 'small' },    // 查询按钮大小
+    reset: { size: 'small' },      // 重置按钮大小
+  }
+}
+```
+
+**操作栏配置**:
+```typescript
+actionbar: {
+  buttons: {
+    add: {
+      size: 'small',
+      show: true,  // 或使用权限: auth('company:Create')
+    },
+  },
+}
+```
+
+**行操作配置**:
+```typescript
+rowHandle: {
+  fixed: 'right',        // 固定在右侧
+  width: 260,            // 操作栏宽度
+  buttons: {
+    view: {              // 查看按钮
+      size: 'small',
+      text: '查看',
+      show: true,
+    },
+    edit: {              // 编辑按钮
+      size: 'small',
+      show: true,
+    },
+    remove: {            // 删除按钮
+      show: false,
+    },
+    // 自定义按钮
+    customAction: {
+      size: 'small',
+      text: '自定义操作',
+      click: async ({ row }) => {
+        // 自定义操作逻辑
+      },
+    },
+  },
+}
+```
+
+**列配置**:
+```typescript
+columns: {
+  name: {
+    title: '名称',
+    type: 'input',              // 字段类型
+    search: { show: true },     // 是否显示在搜索区域
+    form: {                     // 表单配置
+      rules: [{ required: true, message: '名称必填' }],
+      component: { placeholder: '请输入名称' },
+    },
+    column: { minWidth: 120 },  // 列配置
+  },
+  status: {
+    title: '状态',
+    type: 'dict-select',       // 字典选择器
+    search: { show: true },
+    dict: dict({
+      data: [
+        { value: 1, label: '启用' },
+        { value: 0, label: '禁用' },
+      ]
+    }),
+  },
+}
+```
+
+#### 3. 字段类型
+
+Fast-Crud 支持多种字段类型:
+- `input`: 文本输入框
+- `textarea`: 多行文本
+- `number`: 数字输入框
+- `password`: 密码输入框
+- `select`: 下拉选择
+- `dict-select`: 字典选择器
+- `date`: 日期选择器
+- `datetime`: 日期时间选择器
+- `switch`: 开关
+- `radio`: 单选框
+- `checkbox`: 复选框
+- `upload`: 文件上传
+- `editor`: 富文本编辑器
+
+#### 4. 完整示例
+
+参考 `src/views/system/company/crud.tsx` 查看完整的 CRUD 配置示例。
+
+### 状态管理
+
+使用 Pinia 进行状态管理,store 文件位于 `src/stores/` 目录。
+
+#### 1. Store 结构
+
+```typescript
+// src/stores/userInfo.ts 示例
+import { defineStore } from 'pinia';
+import { Session } from '/@/utils/storage';
+
+export const useUserInfo = defineStore('userInfo', {
+  state: (): UserInfosState => ({
+    userInfos: {
+      username: '',
+      avatar: '',
+      roles: [],
+      // ...其他用户信息
+    },
+  }),
+  actions: {
+    // 设置用户信息
+    setUserInfos(data: any) {
+      this.userInfos = data;
+    },
+    // 清除用户信息
+    clearUserInfos() {
+      this.userInfos = {
+        username: '',
+        avatar: '',
+        roles: [],
+      };
+    },
+  },
+  persist: {
+    key: 'userInfo',
+    storage: Session,  // 使用 SessionStorage
+  },
+});
+```
+
+#### 2. 使用 Store
+
+```typescript
+import { useUserInfo } from '/@/stores/userInfo';
+import { storeToRefs } from 'pinia';
+
+// 在 setup 中使用
+const userInfoStore = useUserInfo();
+const { userInfos } = storeToRefs(userInfoStore);
+
+// 调用 actions
+userInfoStore.setUserInfos(newData);
+
+// 直接访问 state
+console.log(userInfoStore.userInfos);
+```
+
+#### 3. 主要 Store 说明
+
+**userInfo.ts** - 用户信息
+- 存储当前登录用户的信息
+- 包含用户名、头像、角色等
+
+**routesList.ts** - 路由列表
+- 存储动态路由列表
+- 用于路由权限控制
+
+**btnPermission.ts** - 按钮权限
+- 存储当前用户的按钮权限列表
+- 配合 `auth()` 函数使用
+
+**themeConfig.ts** - 主题配置
+- 存储主题相关配置(布局、颜色等)
+- 支持持久化存储
+
+#### 4. Store 持久化
+
+项目使用 `pinia-plugin-persist` 实现 Store 持久化:
+
+```typescript
+persist: {
+  key: 'storeKey',        // 存储的 key
+  storage: Session,        // 存储方式:Session 或 Local
+  paths: ['userInfos'],   // 需要持久化的字段
+}
+```
+
+### 样式开发
+
+- 支持 Tailwind CSS 工具类
+- 支持 SCSS 预处理器
+- 全局样式位于 `src/assets/style/` 和 `src/theme/`
+
+### 权限系统
+
+项目实现了完整的权限控制系统,包括路由权限、按钮权限和字段权限。
+
+#### 1. 按钮权限
+
+使用 `auth()` 函数进行按钮权限验证:
+
+```typescript
+import { auth } from '/@/utils/authFunction';
+
+// 单个权限验证
+if (auth('company:Create')) {
+  // 有权限,显示按钮
+}
+
+// 多个权限验证(满足一个即可)
+import { auths } from '/@/utils/authFunction';
+if (auths(['company:Create', 'company:Edit'])) {
+  // 有任一权限即可
+}
+
+// 多个权限验证(全部满足)
+import { authAll } from '/@/utils/authFunction';
+if (authAll(['company:Create', 'company:Edit'])) {
+  // 必须全部有权限
+}
+```
+
+在模板中使用:
+```vue
+<template>
+  <el-button v-if="auth('company:Create')" @click="handleAdd">
+    新增
+  </el-button>
+</template>
+
+<script setup>
+import { auth } from '/@/utils/authFunction';
+</script>
+```
+
+#### 2. 路由权限
+
+路由权限在路由守卫中自动处理(`src/router/index.ts`):
+- 未登录用户自动跳转到登录页
+- 根据用户角色动态加载路由
+- 支持前端控制和后端控制两种模式
+
+#### 3. 字段权限
+
+字段权限通过 `columnPermission` Store 管理,可以控制表格列的显示。
+
+### 国际化
+
+项目支持多语言,配置文件位于 `src/i18n/` 目录。
+
+#### 使用方式
+
+```typescript
+import { useI18n } from 'vue-i18n';
+
+const { t } = useI18n();
+const message = t('common.save');  // 获取翻译文本
+```
+
+#### 添加新语言
+
+1. 在 `src/i18n/` 目录下创建语言文件
+2. 在 `src/i18n/index.ts` 中注册新语言
+3. 使用 `useI18n().locale.value = 'en'` 切换语言
+
+## 常用命令
+
+```bash
+# 启动开发服务器
+npm run dev
+
+# 构建生产版本
+npm run build
+
+# 构建本地生产版本(使用 local_prod 环境变量)
+npm run build:local
+
+# 代码检查和自动修复
+npm run lint-fix
+```
+
+## 开发注意事项
+
+1. **路径别名**: 
+   - `/@/` 指向 `src/` 目录
+   - `@views` 指向 `src/views` 目录
+
+2. **环境变量**: 
+   - 所有环境变量必须以 `VITE_` 开头才能在代码中访问
+   - 使用 `import.meta.env.VITE_XXX` 访问环境变量
+
+3. **API 请求**: 
+   - 所有 API 请求会自动添加认证 token(从 Cookie 中获取)
+   - 请求拦截器配置在 `src/utils/service.ts`
+
+4. **版本管理**: 
+   - 构建时会自动生成版本文件到 `public/version-build`
+   - 生产环境会自动检查版本更新
+
+5. **浏览器兼容性**: 
+   - 支持 Edge ≥ 79, Firefox ≥ 78, Chrome ≥ 64, Safari ≥ 12
+   - 不支持 IE11 及以下版本
+
+## 组件开发规范
+
+### 1. 组件命名
+
+- **文件命名**: 使用 PascalCase(大驼峰),如 `UserProfile.vue`
+- **组件注册**: 使用 kebab-case(短横线),如 `<user-profile />`
+- **目录命名**: 使用 kebab-case,如 `user-profile/`
+
+### 2. 组件结构
+
+```vue
+<template>
+  <!-- 模板内容 -->
+</template>
+
+<script setup lang="ts">
+// 1. 导入依赖
+import { ref, computed, onMounted } from 'vue';
+import { useRouter } from 'vue-router';
+
+// 2. 定义 Props
+interface Props {
+  title: string;
+  count?: number;
+}
+const props = withDefaults(defineProps<Props>(), {
+  count: 0,
+});
+
+// 3. 定义 Emits
+const emit = defineEmits<{
+  change: [value: number];
+  update: [value: string];
+}>();
+
+// 4. 响应式数据
+const loading = ref(false);
+const data = ref([]);
+
+// 5. 计算属性
+const total = computed(() => props.count * 2);
+
+// 6. 方法
+const handleClick = () => {
+  emit('change', 1);
+};
+
+// 7. 生命周期
+onMounted(() => {
+  // 初始化逻辑
+});
+</script>
+
+<style scoped lang="scss">
+/* 样式 */
+</style>
+```
+
+### 3. 代码规范
+
+- 使用 TypeScript 进行类型定义
+- 使用 Composition API(`<script setup>`)
+- 遵循 ESLint 规则
+- 组件内方法按功能分组
+- 添加必要的注释
+
+## Git 工作流程
+
+### 1. 分支管理
+
+- `main/master`: 主分支,生产环境代码
+- `develop`: 开发分支
+- `feature/xxx`: 功能分支
+- `bugfix/xxx`: 修复分支
+- `hotfix/xxx`: 紧急修复分支
+
+### 2. 提交规范
+
+使用约定式提交格式:
+
+```
+<type>(<scope>): <subject>
+
+<body>
+
+<footer>
+```
+
+**type 类型**:
+- `feat`: 新功能
+- `fix`: 修复 bug
+- `docs`: 文档更新
+- `style`: 代码格式调整
+- `refactor`: 代码重构
+- `perf`: 性能优化
+- `test`: 测试相关
+- `chore`: 构建/工具相关
+
+**示例**:
+```bash
+git commit -m "feat(company): 添加公司管理功能"
+git commit -m "fix(api): 修复接口请求超时问题"
+git commit -m "docs(readme): 更新开发文档"
+```
+
+### 3. 代码审查
+
+- 提交前运行 `npm run lint-fix` 检查代码
+- 创建 Pull Request 进行代码审查
+- 确保所有测试通过后再合并
+
+## 调试技巧
+
+### 1. Vue DevTools
+
+安装 Vue DevTools 浏览器扩展:
+- Chrome: [Vue.js devtools](https://chrome.google.com/webstore/detail/vuejs-devtools)
+- Firefox: [Vue.js devtools](https://addons.mozilla.org/firefox/addon/vue-js-devtools/)
+
+功能:
+- 查看组件树
+- 检查组件 props、data、computed
+- 查看 Pinia Store 状态
+- 时间旅行调试
+
+### 2. 浏览器开发者工具
+
+**Network 面板**:
+- 查看 API 请求和响应
+- 检查请求头、响应头
+- 分析请求性能
+
+**Console 面板**:
+- 查看日志输出
+- 调试 JavaScript 代码
+- 查看错误堆栈
+
+**Vue 面板** (需要 Vue DevTools):
+- 查看组件实例
+- 检查响应式数据
+- 修改组件状态
+
+### 3. 断点调试
+
+在代码中使用 `debugger` 语句:
+
+```typescript
+const handleClick = () => {
+  debugger;  // 浏览器会在此处暂停
+  // 后续代码
+};
+```
+
+### 4. 日志调试
+
+使用 `console` 方法进行调试:
+
+```typescript
+console.log('普通日志', data);
+console.warn('警告信息', warning);
+console.error('错误信息', error);
+console.table(arrayData);  // 表格形式显示数组
+console.group('分组');      // 分组日志
+console.groupEnd();
+```
+
+### 5. 性能分析
+
+使用浏览器 Performance 面板:
+- 录制页面性能
+- 分析渲染性能
+- 查找性能瓶颈
+
+### 6. 网络调试
+
+**代理配置** (`vite.config.ts`):
+```typescript
+proxy: {
+  '/api': {
+    target: 'http://localhost:8000',
+    changeOrigin: true,
+    rewrite: (path) => path.replace(/^\/api/, ''),
+  },
+}
+```
+
+**Mock 数据**: 可以使用 Mock.js 或 MSW 进行接口模拟
+
+## 常见问题
+
+### 1. 依赖安装失败
+
+**问题**: npm install 失败或速度慢
+
+**解决方案**:
+- 使用国内镜像: `npm install --registry=https://registry.npm.taobao.org`
+- 清除缓存: `npm cache clean --force`
+- 删除 `node_modules` 和 `package-lock.json` 后重新安装
+
+### 2. 端口被占用
+
+**问题**: 启动开发服务器时提示端口被占用
+
+**解决方案**:
+- 修改 `.env.development` 中的 `VITE_PORT` 配置
+- 或终止占用端口的进程
+
+### 3. API 请求跨域
+
+**问题**: 开发环境 API 请求出现跨域错误
+
+**解决方案**:
+- 检查后端 CORS 配置
+- 或在 `vite.config.ts` 中配置代理(已配置 `/gitee` 代理示例)
+
+### 4. TypeScript 类型错误
+
+**问题**: TypeScript 编译报错
+
+**解决方案**:
+- 检查 `tsconfig.json` 配置
+- 确保安装了所有类型定义包(@types/*)
+- 使用 `// @ts-ignore` 临时忽略(不推荐)
+- 添加类型定义文件(`.d.ts`)
+
+### 5. 路由跳转问题
+
+**问题**: 路由跳转后页面不更新或出现 404
+
+**解决方案**:
+- 检查路由配置是否正确
+- 确认路由模式(Hash 模式)
+- 检查路由守卫逻辑
+- 清除浏览器缓存
+
+### 6. 权限验证失败
+
+**问题**: 有权限但按钮不显示或接口返回 403
+
+**解决方案**:
+- 检查权限标识是否正确
+- 确认用户权限数据已加载
+- 检查 `auth()` 函数调用
+- 查看后端权限配置
+
+### 7. 样式不生效
+
+**问题**: 修改样式后页面没有变化
+
+**解决方案**:
+- 检查样式作用域(scoped)
+- 确认样式文件已正确导入
+- 检查 Tailwind CSS 类名是否正确
+- 清除浏览器缓存并重新构建
+
+### 8. 环境变量不生效
+
+**问题**: 修改环境变量后不生效
+
+**解决方案**:
+- 确认环境变量以 `VITE_` 开头
+- 重启开发服务器
+- 检查环境变量文件位置
+- 使用 `import.meta.env.VITE_XXX` 访问
+
+### 9. 构建失败
+
+**问题**: `npm run build` 失败
+
+**解决方案**:
+- 检查 Node.js 版本是否符合要求
+- 清除 `node_modules` 和 `dist` 目录
+- 删除 `package-lock.json` 重新安装
+- 检查代码语法错误
+- 查看构建日志中的具体错误信息
+
+### 10. 依赖版本冲突
+
+**问题**: 安装依赖时出现版本冲突警告
+
+**解决方案**:
+- 使用 `npm install --legacy-peer-deps` 安装
+- 更新冲突的依赖包到兼容版本
+- 使用 `npm audit fix` 修复安全漏洞
+
+## 参考资料
+
+- [Vue 3 官方文档](https://cn.vuejs.org/)
+- [Vite 官方文档](https://cn.vitejs.dev/)
+- [Element Plus 官方文档](https://element-plus.org/zh-CN/)
+- [Fast-Crud 文档](http://fast-crud.docmirror.cn/)
+- [Pinia 官方文档](https://pinia.vuejs.org/zh/)
+
+## 贡献指南
+
+1. Fork 项目
+2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
+3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
+4. 推送到分支 (`git push origin feature/AmazingFeature`)
+5. 开启 Pull Request
+
+## 许可证
+
+MIT License
+

+ 0 - 208
README.md

@@ -1,208 +0,0 @@
-# Django-Vue3-Admin
-
-[![img](https://img.shields.io/badge/license-MIT-blue.svg)](https://gitee.com/liqianglog/django-vue-admin/blob/master/LICENSE)  [![img](https://img.shields.io/badge/python-%3E=3.7.x-green.svg)](https://python.org/)  [![PyPI - Django Version badge](https://img.shields.io/badge/django%20versions-3.2-blue)](https://docs.djangoproject.com/zh-hans/3.2/) [![img](https://img.shields.io/badge/node-%3E%3D%2012.0.0-brightgreen)](https://nodejs.org/zh-cn/) [![img](https://gitee.com/liqianglog/django-vue-admin/badge/star.svg?theme=dark)](https://gitee.com/liqianglog/django-vue-admin)
-
-[预 览](https://demo.dvadmin.com) | [官网文档](https://www.django-vue-admin.com) | [群聊](https://qm.qq.com/cgi-bin/qm/qr?k=fOdnHhC8DJlRHGYSnyhoB8P5rgogA6Vs&jump_from=webapi) | [社区](https://bbs.django-vue-admin.com) | [插件市场](https://bbs.django-vue-admin.com/plugMarket.html) | [Github](https://github.com/liqianglog/django-vue-admin)
-
-
-
-💡 **「关于」**
-
-我们是一群热爱代码的青年,在这个炙热的时代下,我们希望静下心来通过Code带来一点我们的色彩和颜色。
-
-因为热爱,所以拥抱未来!
-
-
-## 平台简介
-
-💡 [django-vue3-admin](https://gitee.com/huge-dream/django-vue3-admin.git) 是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
-    django-vue3-admin 基于 vue3 + CompositionAPI + typescript + vite + element plus, 是一款全栈,快速,开源的后台管理系统!
-
-
-
-
-* 🧑‍🤝‍🧑前端采用 Vue3+TS+pinia+fastcrud(感谢[vue-next-admin](https://lyt-top.gitee.io/vue-next-admin-doc-preview/))
-* 👭后端采用 Python 语言 Django 框架以及强大的 [Django REST Framework](https://pypi.org/project/djangorestframework)。
-* 👫权限认证使用[Django REST Framework SimpleJWT](https://pypi.org/project/djangorestframework-simplejwt),支持多终端认证系统。
-* 👬支持加载动态权限菜单,多方式轻松权限控制。
-* 💏特别鸣谢:[vue-next-admin](https://lyt-top.gitee.io/vue-next-admin-doc-preview/)。
-* 💡 特别感谢[jetbrains](https://www.jetbrains.com/) 为本开源项目提供免费的 IntelliJ IDEA 授权。
-
-#### 🏭 环境支持
-
-| Edge      | Firefox      | Chrome      | Safari      |
-| --------- | ------------ | ----------- | ----------- |
-| Edge ≥ 79 | Firefox ≥ 78 | Chrome ≥ 64 | Safari ≥ 12 |
-
-> 由于 Vue3 不再支持 IE11,故而 ElementPlus 也不支持 IE11 及之前版本。
-
-
-
-## 在线体验
-
-👩‍👧‍👦演示地址:[https://demo.dvadmin.com](https://demo.dvadmin.com)
-
-- 账号:superadmin
-
-- 密码:admin123456
-
-👩‍👦‍👦文档地址:[coding](https://dvadmin-private.coding.net/share/km/cec69f3d-30fe-47d5-bd97-e9e851f0b776/K-2)
-
-
-
-## 交流
-
-- 交流社区:[戳我](https://bbs.django-vue-admin.com)👩‍👦‍👦
-
-- 插件市场:[戳我](https://bbs.django-vue-admin.com/plugMarket.html)👩‍👦‍👦
-
--  django-vue-admin交流01群(已满):812482043 [点击链接加入群聊](https://qm.qq.com/cgi-bin/qm/qr?k=aJVwjDvH-Es4MPJQuoO32N0SucK22TE5&jump_from=webapi)
--  django-vue-admin交流02群(已满):687252418  [点击链接加入群聊](https://qm.qq.com/cgi-bin/qm/qr?k=4jJN4IjWGfxJ8YJXbb_gTsuWjR34WLdc&jump_from=webapi)
--  django-vue-admin交流03群:442108213  [点击链接加入群聊](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=wsm5oSz3K8dElBYUDtLTcQSEPhINFkl8&authKey=M6sbER0z59ZakgBr5erFeZyFZU15CI52bErNZa%2FxSvvGIuVAbY0N5866v89hm%2FK4&noverify=0&group_code=442108213)
-
-- 二维码
-
-  <img src='https://images.gitee.com/uploads/images/2022/0530/233203_5fb11883_5074988.jpeg' width='200'>
-
-## 源码地址
-
-gitee地址(主推):[https://gitee.com/huge-dream/django-vue3-admin](https://gitee.com/huge-dream/django-vue3-admin)👩‍👦‍👦
-
-github地址:暂无
-
-
-## 内置功能
-
-1.  👨‍⚕️菜单管理:配置系统菜单,操作权限,按钮权限标识、后端接口权限等。
-2.  🧑‍⚕️部门管理:配置系统组织机构(公司、部门、角色)。
-3.  👩‍⚕️角色管理:角色菜单权限分配、数据权限分配、设置角色按部门进行数据范围权限划分。
-4.  🧑‍🎓按钮权限权限:授权角色的按钮权限和接口权限,可做到每一个接口都能授权数据范围。
-5.  🧑‍🎓字段权限权限:授权页面的字段显示权限。
-5.  👨‍🎓用户管理:用户是系统操作者,该功能主要完成系统用户配置。
-6.  👬接口白名单:配置不需要进行权限校验的接口。
-7.  🧑‍🔧字典管理:对系统中经常使用的一些较为固定的数据进行维护。
-8.  🧑‍🔧地区管理:对省市县区域进行管理。
-9.  📁附件管理:对平台上所有文件、图片等进行统一管理。
-10.  🗓️操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
-11.  🔌[插件市场 ](https://bbs.django-vue-admin.com/plugMarket.html):基于Django-Vue-Admin框架开发的应用和插件。
-
-##  插件市场 🔌
-
-- Celery异步任务:[dvadmin-celery](https://gitee.com/huge-dream/dvadmin-celery)
-- 升级中心后端:[dvadmin-upgrade-center](https://gitee.com/huge-dream/dvadmin-upgrade-center)
-- 升级中心前端:[dvadmin-upgrade-center-web](https://gitee.com/huge-dream/dvadmin-upgrade-center-web)
-
-## 准备工作
-~~~
-Python >= 3.8.0 (推荐3.8+版本)
-nodejs >= 14.0 (推荐最新)
-Mysql >= 5.7.0 (可选,默认数据库sqlite3,推荐8.0版本)
-Redis(可选,最新版)
-~~~
-
-## 前端♝
-
-```bash
-# 克隆项目
-git clone https://gitee.com/huge-dream/django-vue3-admin.git
-
-# 进入项目目录
-cd web
-
-# 安装依赖
-npm install --registry=https://registry.npm.taobao.org
-
-# 启动服务
-npm run dev
-# 浏览器访问 http://localhost:8080
-# .env.development 文件中可配置启动端口等参数
-# 构建生产环境
-# npm run build
-```
-
-
-
-## 后端💈
-
-~~~bash
-1. 进入项目目录 cd backend
-2. 在项目根目录中,复制 ./conf/env.example.py 文件为一份新的到 ./conf 文件夹下,并重命名为 env.py
-3. 在 env.py 中配置数据库信息
-	mysql数据库版本建议:8.0
-	mysql数据库字符集:utf8mb4
-4. 安装依赖环境
-	pip3 install -r requirements.txt
-5. 执行迁移命令:
-	python3 manage.py makemigrations
-	python3 manage.py migrate
-6. 初始化数据
-	python3 manage.py init
-7. 初始化省市县数据:
-	python3 manage.py init_area
-8. 启动项目
-	python3 manage.py runserver 0.0.0.0:8000
-或使用 daphne :
-  daphne -b 0.0.0.0 -p 8000 application.asgi:application
-~~~
-
-### 访问项目
-
-- 访问地址:[http://localhost:8080](http://localhost:8080) (默认为此地址,如有修改请按照配置文件)
-- 账号:`superadmin` 密码:`admin123456`
-
-
-
-
-
-### docker-compose 运行
-
-~~~shell
-# 先安装docker-compose (自行百度安装),执行此命令等待安装,如有使用celery插件请打开docker-compose.yml中celery 部分注释
-docker-compose up -d
-# 初始化后端数据(第一次执行即可)
-docker exec -ti dvadmin-django bash
-python manage.py makemigrations 
-python manage.py migrate
-python manage.py init_area
-python manage.py init
-exit
-
-前端地址:http://127.0.0.1:8080
-后端地址:http://127.0.0.1:8080/api
-# 在服务器上请把127.0.0.1 换成自己公网ip
-账号:superadmin 密码:admin123456
-
-# docker-compose 停止
-docker-compose down
-#  docker-compose 重启
-docker-compose restart
-#  docker-compose 启动时重新进行 build
-docker-compose up -d --build
-~~~
-
-
-
-## 演示图✅
-
-![image-01](https://images.gitee.com/uploads/images/2022/0530/234137_b58c8f98_5074988.png)
-
-![image-02](https://images.gitee.com/uploads/images/2022/0530/234240_39834603_5074988.png)
-
-![image-03](https://images.gitee.com/uploads/images/2022/0530/234339_35e728a0_5074988.png)
-
-![image-04](https://images.gitee.com/uploads/images/2022/0530/234426_957036b0_5074988.png)
-
-![image-05](https://images.gitee.com/uploads/images/2022/0530/234458_898be492_5074988.png)
-
-![image-06](https://images.gitee.com/uploads/images/2022/0530/234521_35b40076_5074988.png)
-
-![image-07](https://images.gitee.com/uploads/images/2022/0530/234615_c2325639_5074988.png)
-
-![image-08](https://images.gitee.com/uploads/images/2022/0530/234639_1ed6cc93_5074988.png)
-
-![image-09](https://images.gitee.com/uploads/images/2022/0530/234815_cea2c53f_5074988.png)
-
-![image-10](https://images.gitee.com/uploads/images/2022/0530/234840_5f3e5f53_5074988.png)
-
-
-

+ 1 - 1
dist/assets/401.BNH08WSx.js → dist/assets/401.BMBPK9UO.js

@@ -1 +1 @@
-import{a as m,aC as r,f as d,aj as f,c as g,o as p,b as e,Q as i,S as u,K as _,P as h,F as v}from"./vue.D1BjjNmv.js";import{u as w,b as T,S as b}from"./index.tPS9Jpg2.js";import{_ as C}from"./_plugin-vue_export-helper.DlAUqK2U.js";const F=m({name:"401",setup(){const s=w(),t=T(),{themeConfig:a}=r(s),{isTagsViewCurrenFull:n}=r(t),c=()=>{b.clear(),window.location.reload()},l=d(()=>{let{isTagsview:o}=a.value;return n.value?"30px":o?"114px":"80px"});return{onSetAuth:c,initTagViewHeight:l}}}),V={class:"error-flex"},$={class:"left"},x={class:"left-item"},y={class:"left-item-animation left-item-title"},A={class:"left-item-animation left-item-msg"},S={class:"left-item-animation left-item-btn"};function k(s,t,a,n,c,l){const o=f("el-button");return p(),g("div",{class:"error layout-view-bg-white",style:v({height:`calc(100vh - ${s.initTagViewHeight}`})},[e("div",V,[e("div",$,[e("div",x,[t[0]||(t[0]=e("div",{class:"left-item-animation left-item-num"},"401",-1)),e("div",y,i(s.$t("message.noAccess.accessTitle")),1),e("div",A,i(s.$t("message.noAccess.accessMsg")),1),e("div",S,[u(o,{type:"primary",round:"",onClick:s.onSetAuth},{default:_(()=>[h(i(s.$t("message.noAccess.accessBtn")),1)]),_:1},8,["onClick"])])])]),t[1]||(t[1]=e("div",{class:"right"},[e("img",{src:"https://img-blog.csdnimg.cn/3333f265772a4fa89287993500ecbf96.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbHl0LXRvcA==,size_16,color_FFFFFF,t_70,g_se,x_16"})],-1))])],4)}const H=C(F,[["render",k],["__scopeId","data-v-858f28e6"]]);export{H as default};
+import{a as m,aC as r,f as d,aj as f,c as g,o as p,b as e,Q as i,S as u,K as _,P as h,F as v}from"./vue.D1BjjNmv.js";import{u as w,b as T,S as b}from"./index.BsMIUALc.js";import{_ as C}from"./_plugin-vue_export-helper.DlAUqK2U.js";const F=m({name:"401",setup(){const s=w(),t=T(),{themeConfig:a}=r(s),{isTagsViewCurrenFull:n}=r(t),c=()=>{b.clear(),window.location.reload()},l=d(()=>{let{isTagsview:o}=a.value;return n.value?"30px":o?"114px":"80px"});return{onSetAuth:c,initTagViewHeight:l}}}),V={class:"error-flex"},$={class:"left"},x={class:"left-item"},y={class:"left-item-animation left-item-title"},A={class:"left-item-animation left-item-msg"},S={class:"left-item-animation left-item-btn"};function k(s,t,a,n,c,l){const o=f("el-button");return p(),g("div",{class:"error layout-view-bg-white",style:v({height:`calc(100vh - ${s.initTagViewHeight}`})},[e("div",V,[e("div",$,[e("div",x,[t[0]||(t[0]=e("div",{class:"left-item-animation left-item-num"},"401",-1)),e("div",y,i(s.$t("message.noAccess.accessTitle")),1),e("div",A,i(s.$t("message.noAccess.accessMsg")),1),e("div",S,[u(o,{type:"primary",round:"",onClick:s.onSetAuth},{default:_(()=>[h(i(s.$t("message.noAccess.accessBtn")),1)]),_:1},8,["onClick"])])])]),t[1]||(t[1]=e("div",{class:"right"},[e("img",{src:"https://img-blog.csdnimg.cn/3333f265772a4fa89287993500ecbf96.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbHl0LXRvcA==,size_16,color_FFFFFF,t_70,g_se,x_16"})],-1))])],4)}const H=C(F,[["render",k],["__scopeId","data-v-858f28e6"]]);export{H as default};

+ 1 - 1
dist/assets/404.D1ebIIJf.js → dist/assets/404.Bvj6kQuD.js

@@ -1 +1 @@
-import{a as d,aC as m,aH as u,f,aj as p,c as g,o as _,b as e,Q as i,S as v,K as h,P as T,F as C}from"./vue.D1BjjNmv.js";import{u as w,b as V}from"./index.tPS9Jpg2.js";import{_ as $}from"./_plugin-vue_export-helper.DlAUqK2U.js";const b=d({name:"404",setup(){const t=w(),s=V(),{themeConfig:n}=m(t),{isTagsViewCurrenFull:a}=m(s),r=u(),l=()=>{r.push("/")},o=f(()=>{let{isTagsview:c}=n.value;return a.value?"30px":c?"114px":"80px"});return{onGoHome:l,initTagViewHeight:o}}}),y="/assets/img404.DizYJBZK.png",B={class:"error-flex"},F={class:"left"},H={class:"left-item"},k={class:"left-item-animation left-item-title"},x={class:"left-item-animation left-item-msg"},R={class:"left-item-animation left-item-btn"};function N(t,s,n,a,r,l){const o=p("el-button");return _(),g("div",{class:"error layout-view-bg-white",style:C({height:`calc(100vh - ${t.initTagViewHeight}`})},[e("div",B,[e("div",F,[e("div",H,[s[0]||(s[0]=e("div",{class:"left-item-animation left-item-num"},"404",-1)),e("div",k,i(t.$t("message.notFound.foundTitle")),1),e("div",x,i(t.$t("message.notFound.foundMsg")),1),e("div",R,[v(o,{type:"primary",round:"",onClick:t.onGoHome},{default:h(()=>[T(i(t.$t("message.notFound.foundBtn")),1)]),_:1},8,["onClick"])])])]),s[1]||(s[1]=e("div",{class:"right"},[e("img",{src:y})],-1))])],4)}const G=$(b,[["render",N],["__scopeId","data-v-43ed7a98"]]);export{G as default};
+import{a as d,aC as m,aH as u,f,aj as p,c as g,o as _,b as e,Q as i,S as v,K as h,P as T,F as C}from"./vue.D1BjjNmv.js";import{u as w,b as V}from"./index.BsMIUALc.js";import{_ as $}from"./_plugin-vue_export-helper.DlAUqK2U.js";const b=d({name:"404",setup(){const t=w(),s=V(),{themeConfig:n}=m(t),{isTagsViewCurrenFull:a}=m(s),r=u(),l=()=>{r.push("/")},o=f(()=>{let{isTagsview:c}=n.value;return a.value?"30px":c?"114px":"80px"});return{onGoHome:l,initTagViewHeight:o}}}),y="/assets/img404.DizYJBZK.png",B={class:"error-flex"},F={class:"left"},H={class:"left-item"},k={class:"left-item-animation left-item-title"},x={class:"left-item-animation left-item-msg"},R={class:"left-item-animation left-item-btn"};function N(t,s,n,a,r,l){const o=p("el-button");return _(),g("div",{class:"error layout-view-bg-white",style:C({height:`calc(100vh - ${t.initTagViewHeight}`})},[e("div",B,[e("div",F,[e("div",H,[s[0]||(s[0]=e("div",{class:"left-item-animation left-item-num"},"404",-1)),e("div",k,i(t.$t("message.notFound.foundTitle")),1),e("div",x,i(t.$t("message.notFound.foundMsg")),1),e("div",R,[v(o,{type:"primary",round:"",onClick:t.onGoHome},{default:h(()=>[T(i(t.$t("message.notFound.foundBtn")),1)]),_:1},8,["onClick"])])])]),s[1]||(s[1]=e("div",{class:"right"},[e("img",{src:y})],-1))])],4)}const G=$(b,[["render",N],["__scopeId","data-v-43ed7a98"]]);export{G as default};

+ 1 - 1
dist/assets/ActiveUsersPie.D8hs_16t.js → dist/assets/ActiveUsersPie._HwOtqnP.js

@@ -1 +1 @@
-import{E as l}from"./index.D6H9PPaW.js";import{G as c}from"./api.NmfwFtB-.js";import{u as p,a as m,b as d,c as u,d as f,f as _}from"./echarts.Bm4fHez2.js";import{a as h,r as v,q as y,f as r,c as s,o,b as g,S as w,u as b}from"./vue.D1BjjNmv.js";import{_ as x}from"./_plugin-vue_export-helper.DlAUqK2U.js";import"./index.tPS9Jpg2.js";const D={class:"chart-container"},k={key:0},B={key:1,class:"empty-tip"},$=h({__name:"ActiveUsersPie",setup(A){p([m,d,u,f,_]);const a=v([]);y(async()=>{const t=await c();t.code===2e3?a.value=t.data.active_users:a.value=[]});const i=r(()=>a.value.length>0),n=r(()=>{const t=a.value.map(e=>({name:e.user_name,value:e.borrow_count}));return{title:{text:"借用次数分布",left:"center"},tooltip:{trigger:"item",formatter:"{b}: {c}次 ({d}%)"},legend:{orient:"vertical",left:"left",data:t.map(e=>e.name)},series:[{name:"借用次数",type:"pie",radius:"60%",data:t,emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]}});return(t,e)=>(o(),s("div",D,[e[0]||(e[0]=g("h3",null,"活跃用户 Top10 借用次数分布",-1)),i.value?(o(),s("div",k,[w(b(l),{option:n.value,autoresize:"",style:{height:"400px"}},null,8,["option"])])):(o(),s("div",B,"暂无数据"))]))}}),S=x($,[["__scopeId","data-v-7c359f81"]]);export{S as default};
+import{E as l}from"./index.D6H9PPaW.js";import{G as c}from"./api.BzspVXzn.js";import{u as p,a as m,b as d,c as u,d as f,f as _}from"./echarts.Bm4fHez2.js";import{a as h,r as v,q as y,f as r,c as s,o,b as g,S as w,u as b}from"./vue.D1BjjNmv.js";import{_ as x}from"./_plugin-vue_export-helper.DlAUqK2U.js";import"./index.BsMIUALc.js";const D={class:"chart-container"},k={key:0},B={key:1,class:"empty-tip"},$=h({__name:"ActiveUsersPie",setup(A){p([m,d,u,f,_]);const a=v([]);y(async()=>{const t=await c();t.code===2e3?a.value=t.data.active_users:a.value=[]});const i=r(()=>a.value.length>0),n=r(()=>{const t=a.value.map(e=>({name:e.user_name,value:e.borrow_count}));return{title:{text:"借用次数分布",left:"center"},tooltip:{trigger:"item",formatter:"{b}: {c}次 ({d}%)"},legend:{orient:"vertical",left:"left",data:t.map(e=>e.name)},series:[{name:"借用次数",type:"pie",radius:"60%",data:t,emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]}});return(t,e)=>(o(),s("div",D,[e[0]||(e[0]=g("h3",null,"活跃用户 Top10 借用次数分布",-1)),i.value?(o(),s("div",k,[w(b(l),{option:n.value,autoresize:"",style:{height:"400px"}},null,8,["option"])])):(o(),s("div",B,"暂无数据"))]))}}),S=x($,[["__scopeId","data-v-7c359f81"]]);export{S as default};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/BorrowRankingList.CceyP_Qw.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/BorrowTrendsChart.BgdfyRJv.js


+ 1 - 1
dist/assets/DeviceBorrowCountChart.BNzy4a-7.js → dist/assets/DeviceBorrowCountChart.IYyGbdT1.js

@@ -1 +1 @@
-import{u as i}from"./useDeviceRanking.1ohhyzhI.js";import{a as m,r as t,f as b,q as v,aj as s,c as w,o as f,b as n,S as e,K as C,R as D}from"./vue.D1BjjNmv.js";import"./index.tPS9Jpg2.js";const g=m({__name:"DeviceBorrowCountChart",setup(h){t(null),t("");const{borrowCountData:c,fetchRanking:u}=i(),l=t([]),p=async()=>{await u(),l.value=c.value},d=b(()=>[...l.value].sort((r,o)=>o.borrow_count-r.borrow_count));return v(p),(r,o)=>{const a=s("el-table-column"),_=s("el-table");return f(),w(D,null,[o[0]||(o[0]=n("div",null,[n("h2",null,"Top20单台设备累计借用次数排名")],-1)),n("div",null,[e(_,{data:d.value,style:{width:"100%"}},{default:C(()=>[e(a,{label:"排名",type:"index",width:"60"}),e(a,{prop:"device_name",label:"设备名称"}),e(a,{prop:"device_code",label:"设备编号"}),e(a,{prop:"borrow_count",label:"借用次数"})]),_:1},8,["data"])])],64)}}});export{g as default};
+import{u as i}from"./useDeviceRanking.D1fnXj9D.js";import{a as m,r as t,f as b,q as v,aj as s,c as w,o as f,b as n,S as e,K as C,R as D}from"./vue.D1BjjNmv.js";import"./index.BsMIUALc.js";const g=m({__name:"DeviceBorrowCountChart",setup(h){t(null),t("");const{borrowCountData:c,fetchRanking:u}=i(),l=t([]),p=async()=>{await u(),l.value=c.value},d=b(()=>[...l.value].sort((r,o)=>o.borrow_count-r.borrow_count));return v(p),(r,o)=>{const a=s("el-table-column"),_=s("el-table");return f(),w(D,null,[o[0]||(o[0]=n("div",null,[n("h2",null,"Top20单台设备累计借用次数排名")],-1)),n("div",null,[e(_,{data:d.value,style:{width:"100%"}},{default:C(()=>[e(a,{label:"排名",type:"index",width:"60"}),e(a,{prop:"device_name",label:"设备名称"}),e(a,{prop:"device_code",label:"设备编号"}),e(a,{prop:"borrow_count",label:"借用次数"})]),_:1},8,["data"])])],64)}}});export{g as default};

+ 1 - 1
dist/assets/DeviceBorrowDurationChart.CaeBUEHg.js → dist/assets/DeviceBorrowDurationChart.BywRV3qv.js

@@ -1 +1 @@
-import{u as p}from"./useDeviceRanking.1ohhyzhI.js";import{a as m,r as _,f as b,q as v,aj as l,c as f,o as D,b as o,S as e,K as w,R as h}from"./vue.D1BjjNmv.js";import"./index.tPS9Jpg2.js";const C=m({__name:"DeviceBorrowDurationChart",setup(g){const r=_(""),{borrowDurationData:s,fetchRanking:c}=p(),u=async()=>{await c(r.value)},i=b(()=>[...s.value].sort((n,a)=>Number(a.total_duration)-Number(n.total_duration)));return v(u),(n,a)=>{const t=l("el-table-column"),d=l("el-table");return D(),f(h,null,[a[0]||(a[0]=o("div",null,[o("h2",null,"Top20单台设备累计借用时长排名")],-1)),o("div",null,[e(d,{data:i.value,style:{width:"100%"}},{default:w(()=>[e(t,{label:"排名",type:"index",width:"60"}),e(t,{prop:"device_name",label:"设备名称"}),e(t,{prop:"device_code",label:"设备编号"}),e(t,{prop:"total_duration",label:"借用时长(小时)"})]),_:1},8,["data"])])],64)}}});export{C as default};
+import{u as p}from"./useDeviceRanking.D1fnXj9D.js";import{a as m,r as _,f as b,q as v,aj as l,c as f,o as D,b as o,S as e,K as w,R as h}from"./vue.D1BjjNmv.js";import"./index.BsMIUALc.js";const C=m({__name:"DeviceBorrowDurationChart",setup(g){const r=_(""),{borrowDurationData:s,fetchRanking:c}=p(),u=async()=>{await c(r.value)},i=b(()=>[...s.value].sort((n,a)=>Number(a.total_duration)-Number(n.total_duration)));return v(u),(n,a)=>{const t=l("el-table-column"),d=l("el-table");return D(),f(h,null,[a[0]||(a[0]=o("div",null,[o("h2",null,"Top20单台设备累计借用时长排名")],-1)),o("div",null,[e(d,{data:i.value,style:{width:"100%"}},{default:w(()=>[e(t,{label:"排名",type:"index",width:"60"}),e(t,{prop:"device_name",label:"设备名称"}),e(t,{prop:"device_code",label:"设备编号"}),e(t,{prop:"total_duration",label:"借用时长(小时)"})]),_:1},8,["data"])])],64)}}});export{C as default};

+ 1 - 1
dist/assets/InfoCards.D5ksZNzc.js → dist/assets/InfoCards.D1lOWU-s.js

@@ -1 +1 @@
-import{af as m,ag as b,ah as p,ai as v,aj as y,ak as h,al as g}from"./index.tPS9Jpg2.js";import{a as i,f as F,c as t,o as e,b as s,R as C,a9 as D,G as n,Q as r}from"./vue.D1BjjNmv.js";import{_ as k}from"./_plugin-vue_export-helper.DlAUqK2U.js";const B={class:"info-cards"},w={class:"stats-grid"},x=["onClick"],I={class:"stat-icon"},E={class:"stat-content"},j={class:"stat-number","data-target":"423"},A={class:"stat-label"},L=i({name:"InfoCards"}),R=i({...L,props:{summaryData:{type:Object,required:!0}},setup(d){const a=d,u=F(()=>[{label:"设备总库存数",value:a.summaryData.total_devices,icon:m,color:"#409EFF",class:"blue",iconFont:"fa-shopping-bag"},{label:"在借数",value:a.summaryData.borrowed_devices,icon:b,color:"#F56C6C",class:"red",iconFont:"fa-calendar-alt"},{label:"在库数",value:a.summaryData.available_devices,icon:p,color:"#67C23A",class:"green",iconFont:"fa-chart-line"},{label:"今日借出",value:a.summaryData.today_borrowed,icon:v,color:"#E6A23C",class:"yellow",iconFont:"fa-clock"},{label:"今日归还",value:a.summaryData.today_returned,icon:y,color:"#909399",class:"gray",iconFont:"fa-sync-alt"},{label:"累计借用人次",value:a.summaryData.total_borrowers,icon:h,color:"#3498DB",class:"purple",iconFont:"fa-users"},{label:"累计借用次数",value:a.summaryData.total_borrows,icon:g,color:"#9B59B6",class:"teal",iconFont:"fa-chart-bar"}]);function _(l){console.log("点击信息卡片:",l.label)}return(l,c)=>(e(),t("div",B,[c[0]||(c[0]=s("div",{class:"info-title"}," 数据简报 ",-1)),s("div",w,[(e(!0),t(C,null,D(u.value,(o,f)=>(e(),t("div",{key:f,onClick:q=>_(o),class:n([o.class,"stat-card"]),"data-animate":"slideInRight"},[s("div",I,[s("i",{class:n(["fas",o.iconFont])},null,2)]),s("div",E,[s("span",j,r(o.value),1),s("span",A,r(o.label),1)])],10,x))),128))])]))}}),O=k(R,[["__scopeId","data-v-a8fab884"]]);export{O as default};
+import{af as m,ag as b,ah as p,ai as v,aj as y,ak as h,al as g}from"./index.BsMIUALc.js";import{a as i,f as F,c as t,o as e,b as s,R as C,a9 as D,G as n,Q as r}from"./vue.D1BjjNmv.js";import{_ as k}from"./_plugin-vue_export-helper.DlAUqK2U.js";const B={class:"info-cards"},w={class:"stats-grid"},x=["onClick"],I={class:"stat-icon"},E={class:"stat-content"},j={class:"stat-number","data-target":"423"},A={class:"stat-label"},L=i({name:"InfoCards"}),R=i({...L,props:{summaryData:{type:Object,required:!0}},setup(d){const a=d,u=F(()=>[{label:"设备总库存数",value:a.summaryData.total_devices,icon:m,color:"#409EFF",class:"blue",iconFont:"fa-shopping-bag"},{label:"在借数",value:a.summaryData.borrowed_devices,icon:b,color:"#F56C6C",class:"red",iconFont:"fa-calendar-alt"},{label:"在库数",value:a.summaryData.available_devices,icon:p,color:"#67C23A",class:"green",iconFont:"fa-chart-line"},{label:"今日借出",value:a.summaryData.today_borrowed,icon:v,color:"#E6A23C",class:"yellow",iconFont:"fa-clock"},{label:"今日归还",value:a.summaryData.today_returned,icon:y,color:"#909399",class:"gray",iconFont:"fa-sync-alt"},{label:"累计借用人次",value:a.summaryData.total_borrowers,icon:h,color:"#3498DB",class:"purple",iconFont:"fa-users"},{label:"累计借用次数",value:a.summaryData.total_borrows,icon:g,color:"#9B59B6",class:"teal",iconFont:"fa-chart-bar"}]);function _(l){console.log("点击信息卡片:",l.label)}return(l,c)=>(e(),t("div",B,[c[0]||(c[0]=s("div",{class:"info-title"}," 数据简报 ",-1)),s("div",w,[(e(!0),t(C,null,D(u.value,(o,f)=>(e(),t("div",{key:f,onClick:q=>_(o),class:n([o.class,"stat-card"]),"data-animate":"slideInRight"},[s("div",I,[s("i",{class:n(["fas",o.iconFont])},null,2)]),s("div",E,[s("span",j,r(o.value),1),s("span",A,r(o.label),1)])],10,x))),128))])]))}}),O=k(R,[["__scopeId","data-v-a8fab884"]]);export{O as default};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 1
dist/assets/RoleDrawer.CBqqCJE-.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/RoleMenuBtn.CWNBJxMK.js


+ 1 - 1
dist/assets/RoleMenuField.CsqWps0D.js → dist/assets/RoleMenuField.B1kfGKVg.js

@@ -1 +1 @@
-import{R as F,c as M}from"./api.By84Pgj2.js";import{R as w,a as $}from"./RoleMenuFieldStores.1tuZt4kb.js";import{E as y}from"./index.tPS9Jpg2.js";import{a as S,aj as f,c as l,M as N,u as r,o as a,b as t,S as m,P as k,K as v,R as p,a9 as _,Q as R}from"./vue.D1BjjNmv.js";import{_ as U}from"./_plugin-vue_export-helper.DlAUqK2U.js";const B={key:0,class:"pccm-item"},D={class:"menu-form-alert"},E={class:"columns-list"},H={class:"columns-head"},I={class:"columns-content"},j={class:"width-txt"},z=S({__name:"RoleMenuField",setup(K){const d=w(),h=$(),V=F(),b=(c,s,u)=>{for(const n of d.$state)n[s]=n[u]?n[s]:c},g=async()=>{const c=await M(V.$state.roleId,d.$state);y({message:c.msg,type:"success"})};return(c,s)=>{const u=f("el-button"),n=f("el-checkbox");return r(d).$state.length>0?(a(),l("div",B,[t("div",D,[m(u,{size:"small",onClick:g},{default:v(()=>s[0]||(s[0]=[k("保存 ")])),_:1}),s[1]||(s[1]=k(" 配置数据列字段权限 "))]),t("ul",E,[t("li",H,[s[2]||(s[2]=t("div",{class:"width-txt"},[t("span",null,"字段")],-1)),(a(!0),l(p,null,_(r(h).$state,(e,i)=>(a(),l("div",{key:i,class:"width-check"},[m(n,{modelValue:e.checked,"onUpdate:modelValue":o=>e.checked=o,onChange:o=>b(o,e.value,e.disabled)},{default:v(()=>[t("span",null,R(e.label),1)]),_:2},1032,["modelValue","onUpdate:modelValue","onChange"])]))),128))]),t("div",I,[(a(!0),l(p,null,_(r(d).$state,(e,i)=>(a(),l("li",{key:i,class:"columns-item"},[t("div",j,R(e.title),1),(a(!0),l(p,null,_(r(h).$state,(o,x)=>(a(),l("div",{key:x,class:"width-check"},[m(n,{modelValue:e[o.value],"onUpdate:modelValue":C=>e[o.value]=C,class:"ci-checkout",disabled:e[o.disabled]},null,8,["modelValue","onUpdate:modelValue","disabled"])]))),128))]))),128))])])])):N("",!0)}}}),G=U(z,[["__scopeId","data-v-088391a4"]]);export{G as default};
+import{R as F,c as M}from"./api.Bmx1aDhE.js";import{R as w,a as $}from"./RoleMenuFieldStores.1tuZt4kb.js";import{E as y}from"./index.BsMIUALc.js";import{a as S,aj as f,c as l,M as N,u as r,o as a,b as t,S as m,P as k,K as v,R as p,a9 as _,Q as R}from"./vue.D1BjjNmv.js";import{_ as U}from"./_plugin-vue_export-helper.DlAUqK2U.js";const B={key:0,class:"pccm-item"},D={class:"menu-form-alert"},E={class:"columns-list"},H={class:"columns-head"},I={class:"columns-content"},j={class:"width-txt"},z=S({__name:"RoleMenuField",setup(K){const d=w(),h=$(),V=F(),b=(c,s,u)=>{for(const n of d.$state)n[s]=n[u]?n[s]:c},g=async()=>{const c=await M(V.$state.roleId,d.$state);y({message:c.msg,type:"success"})};return(c,s)=>{const u=f("el-button"),n=f("el-checkbox");return r(d).$state.length>0?(a(),l("div",B,[t("div",D,[m(u,{size:"small",onClick:g},{default:v(()=>s[0]||(s[0]=[k("保存 ")])),_:1}),s[1]||(s[1]=k(" 配置数据列字段权限 "))]),t("ul",E,[t("li",H,[s[2]||(s[2]=t("div",{class:"width-txt"},[t("span",null,"字段")],-1)),(a(!0),l(p,null,_(r(h).$state,(e,i)=>(a(),l("div",{key:i,class:"width-check"},[m(n,{modelValue:e.checked,"onUpdate:modelValue":o=>e.checked=o,onChange:o=>b(o,e.value,e.disabled)},{default:v(()=>[t("span",null,R(e.label),1)]),_:2},1032,["modelValue","onUpdate:modelValue","onChange"])]))),128))]),t("div",I,[(a(!0),l(p,null,_(r(d).$state,(e,i)=>(a(),l("li",{key:i,class:"columns-item"},[t("div",j,R(e.title),1),(a(!0),l(p,null,_(r(h).$state,(o,x)=>(a(),l("div",{key:x,class:"width-check"},[m(n,{modelValue:e[o.value],"onUpdate:modelValue":C=>e[o.value]=C,class:"ci-checkout",disabled:e[o.disabled]},null,8,["modelValue","onUpdate:modelValue","disabled"])]))),128))]))),128))])])])):N("",!0)}}}),G=U(z,[["__scopeId","data-v-088391a4"]]);export{G as default};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/RoleMenuTree.DFsZaCuR.js


+ 1 - 1
dist/assets/RoleUsers.D9vBIYuO.js → dist/assets/RoleUsers.Cv60EtDA.js

@@ -1 +1 @@
-import{R as p,h as d}from"./api.By84Pgj2.js";import{R as f}from"./RoleUsersStores.DnyrTfiK.js";import{E as u}from"./index.tPS9Jpg2.js";import{a as _,f as c,aj as i,J as R,o as g,u as l}from"./vue.D1BjjNmv.js";const v=_({__name:"RoleUsers",setup(h){const r=p(),a=f(),n=c(()=>(a.$state.all_users||[]).filter(e=>(e==null?void 0:e.user_type)!==1)),m=(e,s,o)=>{d(r.$state.roleId,{direction:s,movedKeys:o}).then(t=>{r.set_state(t.data),u({message:t.msg,type:"success"})})};return(e,s)=>{const o=i("el-transfer");return g(),R(o,{modelValue:l(a).$state.right_users,"onUpdate:modelValue":s[0]||(s[0]=t=>l(a).$state.right_users=t),filterable:"",titles:["未授权用户","已授权用户"],data:n.value,props:{key:"id",label:"name"},onChange:m},null,8,["modelValue","data"])}}});export{v as default};
+import{R as p,h as d}from"./api.Bmx1aDhE.js";import{R as f}from"./RoleUsersStores.DnH9kRrY.js";import{E as u}from"./index.BsMIUALc.js";import{a as _,f as c,aj as i,J as R,o as g,u as l}from"./vue.D1BjjNmv.js";const v=_({__name:"RoleUsers",setup(h){const r=p(),a=f(),n=c(()=>(a.$state.all_users||[]).filter(e=>(e==null?void 0:e.user_type)!==1)),m=(e,s,o)=>{d(r.$state.roleId,{direction:s,movedKeys:o}).then(t=>{r.set_state(t.data),u({message:t.msg,type:"success"})})};return(e,s)=>{const o=i("el-transfer");return g(),R(o,{modelValue:l(a).$state.right_users,"onUpdate:modelValue":s[0]||(s[0]=t=>l(a).$state.right_users=t),filterable:"",titles:["未授权用户","已授权用户"],data:n.value,props:{key:"id",label:"name"},onChange:m},null,8,["modelValue","data"])}}});export{v as default};

+ 1 - 1
dist/assets/RoleUsersStores.DnyrTfiK.js → dist/assets/RoleUsersStores.DnH9kRrY.js

@@ -1 +1 @@
-import{d as e}from"./vue.D1BjjNmv.js";import{g as r}from"./api.By84Pgj2.js";import{X as o}from"./index.tPS9Jpg2.js";const _=e("RoleUsersStores",{state:()=>({all_users:[],right_users:[]}),actions:{get_all_users(){r().then(s=>{this.$state.all_users=s})},set_right_users(s){this.$state.right_users=o.map(s,t=>t.id)}}});export{_ as R};
+import{d as e}from"./vue.D1BjjNmv.js";import{g as r}from"./api.Bmx1aDhE.js";import{X as o}from"./index.BsMIUALc.js";const _=e("RoleUsersStores",{state:()=>({all_users:[],right_users:[]}),actions:{get_all_users(){r().then(s=>{this.$state.all_users=s})},set_right_users(s){this.$state.right_users=o.map(s,t=>t.id)}}});export{_ as R};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/SettlementDialog.BcFfYhHh.js


+ 1 - 1
dist/assets/StatusCards.Dt_JB1qi.js → dist/assets/StatusCards.DSbc_5JJ.js

@@ -1 +1 @@
-import{am as v,ai as b,an as f,ao as h}from"./index.tPS9Jpg2.js";import{a as i,f as C,aH as k,aj as g,c as l,o as n,b as a,R as w,a9 as y,S as D,F,K as S,J as x,O as B,Q as r}from"./vue.D1BjjNmv.js";import{_ as E}from"./_plugin-vue_export-helper.DlAUqK2U.js";const j={class:"status-cards"},z={class:"pending-items"},A=["onClick"],L={class:"icon-wrapper"},N={class:"item-content"},O={class:"number","data-target":"37"},R={class:"label"},V=i({name:"StatusCards"}),q=i({...V,props:{statusData:{type:Object,required:!0}},setup(u){const s=u,d=C(()=>[{label:"待审批",value:s.statusData.pending_approval,icon:v,color:"#409EFF"},{label:"已借出",value:s.statusData.pending_return,icon:b,color:"#E6A23C"},{label:"待维修",value:s.statusData.pending_maintenance,icon:f,color:"#67C23A"},{label:"已逾期",value:s.statusData.pending_overdue,icon:h,color:"#F56C6C"}]),t=k();function _(o){switch(console.log("点击状态卡片:",o.label),o.label){case"待审批":t.push("/borrow/approval");break;case"已借出":t.push("/borrow/list?status=5");break;case"待维修":t.push("/devicemaintenance");break;case"已逾期":t.push("/borrow/list?status=8");break;default:console.warn("未知状态:",o.label)}}return(o,c)=>{const p=g("el-icon");return n(),l("div",j,[c[0]||(c[0]=a("div",{class:"info-title"}," 待处理 ",-1)),a("div",z,[(n(!0),l(w,null,y(d.value,(e,m)=>(n(),l("div",{class:"pending-item",key:m,onClick:H=>_(e)},[a("div",L,[D(p,{size:40,class:"card-icon",style:F({color:e.color})},{default:S(()=>[(n(),x(B(e.icon)))]),_:2},1032,["style"])]),a("div",N,[a("span",O,r(e.value),1),a("span",R,r(e.label),1)])],8,A))),128))])])}}}),Q=E(q,[["__scopeId","data-v-4cf97a6f"]]);export{Q as default};
+import{am as v,ai as b,an as f,ao as h}from"./index.BsMIUALc.js";import{a as i,f as C,aH as k,aj as g,c as l,o as n,b as a,R as w,a9 as y,S as D,F,K as S,J as x,O as B,Q as r}from"./vue.D1BjjNmv.js";import{_ as E}from"./_plugin-vue_export-helper.DlAUqK2U.js";const j={class:"status-cards"},z={class:"pending-items"},A=["onClick"],L={class:"icon-wrapper"},N={class:"item-content"},O={class:"number","data-target":"37"},R={class:"label"},V=i({name:"StatusCards"}),q=i({...V,props:{statusData:{type:Object,required:!0}},setup(u){const s=u,d=C(()=>[{label:"待审批",value:s.statusData.pending_approval,icon:v,color:"#409EFF"},{label:"已借出",value:s.statusData.pending_return,icon:b,color:"#E6A23C"},{label:"待维修",value:s.statusData.pending_maintenance,icon:f,color:"#67C23A"},{label:"已逾期",value:s.statusData.pending_overdue,icon:h,color:"#F56C6C"}]),t=k();function _(o){switch(console.log("点击状态卡片:",o.label),o.label){case"待审批":t.push("/borrow/approval");break;case"已借出":t.push("/borrow/list?status=5");break;case"待维修":t.push("/devicemaintenance");break;case"已逾期":t.push("/borrow/list?status=8");break;default:console.warn("未知状态:",o.label)}}return(o,c)=>{const p=g("el-icon");return n(),l("div",j,[c[0]||(c[0]=a("div",{class:"info-title"}," 待处理 ",-1)),a("div",z,[(n(!0),l(w,null,y(d.value,(e,m)=>(n(),l("div",{class:"pending-item",key:m,onClick:H=>_(e)},[a("div",L,[D(p,{size:40,class:"card-icon",style:F({color:e.color})},{default:S(()=>[(n(),x(B(e.icon)))]),_:2},1032,["style"])]),a("div",N,[a("span",O,r(e.value),1),a("span",R,r(e.label),1)])],8,A))),128))])])}}}),Q=E(q,[["__scopeId","data-v-4cf97a6f"]]);export{Q as default};

+ 1 - 1
dist/assets/UtilizationTrend.Hp-O1FRj.js → dist/assets/UtilizationTrend.BZn34sAh.js

@@ -1,4 +1,4 @@
-import{E as c}from"./index.D6H9PPaW.js";import{c as m}from"./api.NmfwFtB-.js";import{u,a as f,k as p,c as d,d as _,j as h,f as x}from"./echarts.Bm4fHez2.js";import{a as y,r as $,q as v,f as b,c as g,o as z,b as k,S as w,u as B}from"./vue.D1BjjNmv.js";import{_ as C}from"./_plugin-vue_export-helper.DlAUqK2U.js";import"./index.tPS9Jpg2.js";const D={class:"chart-container"},E=y({__name:"UtilizationTrend",setup(S){u([f,p,d,_,h,x]);const o=$([]);v(async()=>{const a=await m();a.code===2e3&&(o.value=a.data.monthly_utilization)});const r=b(()=>{const a=o.value.map(t=>t.month),e=o.value.map(t=>t.rate);console.log("rates:::",e);const i=o.value.map((t,s,n)=>s===0?0:+(t.rate-n[s-1].rate).toFixed(2));return{title:{text:"设备利用率提升幅度",left:"center"},tooltip:{trigger:"axis",formatter:t=>{const s=t[0].data,n=i[t[0].dataIndex],l=n>0?"+":"";return`
+import{E as c}from"./index.D6H9PPaW.js";import{c as m}from"./api.BzspVXzn.js";import{u,a as f,k as p,c as d,d as _,j as h,f as x}from"./echarts.Bm4fHez2.js";import{a as y,r as $,q as v,f as b,c as g,o as z,b as k,S as w,u as B}from"./vue.D1BjjNmv.js";import{_ as C}from"./_plugin-vue_export-helper.DlAUqK2U.js";import"./index.BsMIUALc.js";const D={class:"chart-container"},E=y({__name:"UtilizationTrend",setup(S){u([f,p,d,_,h,x]);const o=$([]);v(async()=>{const a=await m();a.code===2e3&&(o.value=a.data.monthly_utilization)});const r=b(()=>{const a=o.value.map(t=>t.month),e=o.value.map(t=>t.rate);console.log("rates:::",e);const i=o.value.map((t,s,n)=>s===0?0:+(t.rate-n[s-1].rate).toFixed(2));return{title:{text:"设备利用率提升幅度",left:"center"},tooltip:{trigger:"axis",formatter:t=>{const s=t[0].data,n=i[t[0].dataIndex],l=n>0?"+":"";return`
             月份:${t[0].name}<br/>
             利用率:${s}<br/>
             提升幅度:${l}${n}

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/WarehouseSelectDialog.C3m6777w.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/account.BVAYg-3p.js


+ 0 - 1
dist/assets/account.BtkKiTFL.css

@@ -1 +0,0 @@
-.login-content-form[data-v-18248e7f]{margin-top:20px}.login-content-form .login-animation1[data-v-18248e7f]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.1s}.login-content-form .login-animation2[data-v-18248e7f]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.2s}.login-content-form .login-animation3[data-v-18248e7f]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.3s}.login-content-form .login-animation4[data-v-18248e7f]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.4s}.login-content-form .login-content-password[data-v-18248e7f]{display:inline-block;width:20px;cursor:pointer}.login-content-form .login-content-password[data-v-18248e7f]:hover{color:#909399}.login-content-form .login-content-captcha[data-v-18248e7f]{width:100%;padding:0;font-weight:700;letter-spacing:5px}.login-content-form .login-content-submit[data-v-18248e7f]{width:100%;letter-spacing:2px;font-weight:800;margin-top:15px}.login-content-form[data-v-18248e7f] .el-checkbox__label{color:gray!important}.login-content-form[data-v-18248e7f] .el-checkbox__input.is-checked+.el-checkbox__label{color:gray!important}.login-content-form .login-link[data-v-18248e7f]{color:#0017ab;text-decoration:none;cursor:pointer}.login-content-form .login-link[data-v-18248e7f]:hover{color:#0017ab}

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/account.xgea-AJi.js


+ 1 - 0
dist/assets/account.yYmuVk84.css

@@ -0,0 +1 @@
+.login-content-form[data-v-442df2d5]{margin-top:20px}.login-content-form .login-animation1[data-v-442df2d5]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.1s}.login-content-form .login-animation2[data-v-442df2d5]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.2s}.login-content-form .login-animation3[data-v-442df2d5]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.3s}.login-content-form .login-animation4[data-v-442df2d5]{opacity:0;animation-name:error-num;animation-duration:.5s;animation-fill-mode:forwards;animation-delay:.4s}.login-content-form .login-content-password[data-v-442df2d5]{display:inline-block;width:20px;cursor:pointer}.login-content-form .login-content-password[data-v-442df2d5]:hover{color:#909399}.login-content-form .login-content-captcha[data-v-442df2d5]{width:100%;padding:0;font-weight:700;letter-spacing:5px}.login-content-form .login-content-submit[data-v-442df2d5]{width:100%;letter-spacing:2px;font-weight:800;margin-top:15px}.login-content-form[data-v-442df2d5] .el-checkbox__label{color:gray!important}.login-content-form[data-v-442df2d5] .el-checkbox__input.is-checked+.el-checkbox__label{color:gray!important}.login-content-form .login-link[data-v-442df2d5]{color:#0017ab;text-decoration:none;cursor:pointer}.login-content-form .login-link[data-v-442df2d5]:hover{color:#0017ab}

+ 1 - 0
dist/assets/addContent.CN68U5md.js

@@ -0,0 +1 @@
+import{_ as o}from"./addContent.vue_vue_type_script_setup_true_lang.DAl8rZ69.js";import"./api.BuO-sL4T.js";import"./index.BsMIUALc.js";import"./vue.D1BjjNmv.js";import"./associationTable.vue_vue_type_script_setup_true_lang.D6AT_M1Q.js";import"./dictionary.DeujVvuS.js";export{o as default};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/addContent.vue_vue_type_script_setup_true_lang.DAl8rZ69.js


+ 0 - 1
dist/assets/addContent.zb8diLZj.js

@@ -1 +0,0 @@
-import{_ as o}from"./addContent.vue_vue_type_script_setup_true_lang.Bg5a-RzJ.js";import"./api.Uk_Yegnu.js";import"./index.tPS9Jpg2.js";import"./vue.D1BjjNmv.js";import"./associationTable.vue_vue_type_script_setup_true_lang.DMZnknQl.js";import"./dictionary.4d6L08P4.js";export{o as default};

+ 1 - 1
dist/assets/addTabs.bBuj3LW7.js → dist/assets/addTabs.DPi02O4M.js

@@ -1 +1 @@
-import{_ as o}from"./addTabs.vue_vue_type_script_setup_true_lang.B1tMWBrq.js";import"./api.Uk_Yegnu.js";import"./index.tPS9Jpg2.js";import"./vue.D1BjjNmv.js";export{o as default};
+import{_ as o}from"./addTabs.vue_vue_type_script_setup_true_lang.-nTpCWDB.js";import"./api.BuO-sL4T.js";import"./index.BsMIUALc.js";import"./vue.D1BjjNmv.js";export{o as default};

+ 1 - 1
dist/assets/addTabs.vue_vue_type_script_setup_true_lang.B1tMWBrq.js → dist/assets/addTabs.vue_vue_type_script_setup_true_lang.-nTpCWDB.js

@@ -1 +1 @@
-import{A as V}from"./api.Uk_Yegnu.js";import{t as b}from"./index.tPS9Jpg2.js";import{a as g,_ as f,r as v,i as x,aj as u,c as w,o as C,S as t,K as l,u as r,P as p}from"./vue.D1BjjNmv.js";const j={style:{padding:"20px"}},R=g({__name:"addTabs",setup(A){let o=f({title:null,key:null});const i=v(),_=f({title:[{required:!0,message:"请输入"}],key:[{required:!0,message:"请输入"},{pattern:/^[A-Za-z0-9]+$/,message:"只能是英文和数字"}]}),c=x("refreshView"),y=async m=>{m&&await m.validate((e,s)=>{e?V(o).then(n=>{n.code==2e3&&(b("新增成功"),c())}):console.log("error submit!",s)})};return(m,e)=>{const s=u("el-input"),n=u("el-form-item"),d=u("el-button"),k=u("el-form");return C(),w("div",j,[t(k,{ref_key:"formRef",ref:i,model:r(o),rules:_,"label-width":"80px"},{default:l(()=>[t(n,{label:"标题",prop:"title"},{default:l(()=>[t(s,{modelValue:r(o).title,"onUpdate:modelValue":e[0]||(e[0]=a=>r(o).title=a)},null,8,["modelValue"])]),_:1}),t(n,{label:"key值",prop:"key"},{default:l(()=>[t(s,{modelValue:r(o).key,"onUpdate:modelValue":e[1]||(e[1]=a=>r(o).key=a)},null,8,["modelValue"])]),_:1}),t(n,null,{default:l(()=>[t(d,{type:"primary",onClick:e[2]||(e[2]=a=>y(i.value))},{default:l(()=>e[3]||(e[3]=[p("立即创建")])),_:1}),t(d,null,{default:l(()=>e[4]||(e[4]=[p("取消")])),_:1})]),_:1})]),_:1},8,["model","rules"])])}}});export{R as _};
+import{A as V}from"./api.BuO-sL4T.js";import{t as b}from"./index.BsMIUALc.js";import{a as g,_ as f,r as v,i as x,aj as u,c as w,o as C,S as t,K as l,u as r,P as p}from"./vue.D1BjjNmv.js";const j={style:{padding:"20px"}},R=g({__name:"addTabs",setup(A){let o=f({title:null,key:null});const i=v(),_=f({title:[{required:!0,message:"请输入"}],key:[{required:!0,message:"请输入"},{pattern:/^[A-Za-z0-9]+$/,message:"只能是英文和数字"}]}),c=x("refreshView"),y=async m=>{m&&await m.validate((e,s)=>{e?V(o).then(n=>{n.code==2e3&&(b("新增成功"),c())}):console.log("error submit!",s)})};return(m,e)=>{const s=u("el-input"),n=u("el-form-item"),d=u("el-button"),k=u("el-form");return C(),w("div",j,[t(k,{ref_key:"formRef",ref:i,model:r(o),rules:_,"label-width":"80px"},{default:l(()=>[t(n,{label:"标题",prop:"title"},{default:l(()=>[t(s,{modelValue:r(o).title,"onUpdate:modelValue":e[0]||(e[0]=a=>r(o).title=a)},null,8,["modelValue"])]),_:1}),t(n,{label:"key值",prop:"key"},{default:l(()=>[t(s,{modelValue:r(o).key,"onUpdate:modelValue":e[1]||(e[1]=a=>r(o).key=a)},null,8,["modelValue"])]),_:1}),t(n,null,{default:l(()=>[t(d,{type:"primary",onClick:e[2]||(e[2]=a=>y(i.value))},{default:l(()=>e[3]||(e[3]=[p("立即创建")])),_:1}),t(d,null,{default:l(()=>e[4]||(e[4]=[p("取消")])),_:1})]),_:1})]),_:1},8,["model","rules"])])}}});export{R as _};

+ 1 - 1
dist/assets/api.7ioI-1Wn.js → dist/assets/api.2enrpmEI.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/app_user/";function u(t){return e({url:r+"?user_type=0",method:"get",params:t})}function a(t){return e({url:r+t+"/",method:"get"})}function o(t){return e({url:r,method:"post",data:t})}function s(t){return e({url:r+t.id+"/",method:"put",data:t})}function i(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}function m(){return e({url:"/api/system/organization/tree/",method:"get"})}export{o as A,i as D,m as G,s as U,a,u as b,d as c};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/app_user/";function u(t){return e({url:r+"?user_type=0",method:"get",params:t})}function a(t){return e({url:r+t+"/",method:"get"})}function o(t){return e({url:r,method:"post",data:t})}function s(t){return e({url:r+t.id+"/",method:"put",data:t})}function i(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}function m(){return e({url:"/api/system/organization/tree/",method:"get"})}export{o as A,i as D,m as G,s as U,a,u as b,d as c};

+ 1 - 1
dist/assets/api.YHrsVX8i.js → dist/assets/api.3Z5kfZ3L.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/dept/";function a(t){return e({url:r,method:"get",params:t})}function n(t){return e({url:r,method:"post",data:t})}function u(t){return e({url:r+t.id+"/",method:"put",data:t})}function d(t){return e({url:r+t+"/",method:"delete"})}function s(t){return e({url:r,method:"get",params:t})}function p(t){return e({url:r+"move_up/",method:"post",data:t})}function m(t){return e({url:r+"move_down/",method:"post",data:t})}export{n as A,d as D,a as G,u as U,m as a,p as d,s as l};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/dept/";function a(t){return e({url:r,method:"get",params:t})}function n(t){return e({url:r,method:"post",data:t})}function u(t){return e({url:r+t.id+"/",method:"put",data:t})}function d(t){return e({url:r+t+"/",method:"delete"})}function s(t){return e({url:r,method:"get",params:t})}function p(t){return e({url:r+"move_up/",method:"post",data:t})}function m(t){return e({url:r+"move_down/",method:"post",data:t})}export{n as A,d as D,a as G,u as U,m as a,p as d,s as l};

+ 1 - 1
dist/assets/api.rldkyPfk.js → dist/assets/api.5e6j2WLv.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/device/category/";function n(t){return e({url:"/api/system/device/category/all_with_disabled/",method:"get",params:t})}function u(t){return e({url:r+t+"/",method:"get"})}function o(t){return e({url:r,method:"post",data:t})}function s(t){return e({url:r+t.id+"/",method:"put",data:t})}function i(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}export{o as A,i as D,n as G,s as U,u as a,d as b};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/device/category/";function n(t){return e({url:"/api/system/device/category/all_with_disabled/",method:"get",params:t})}function u(t){return e({url:r+t+"/",method:"get"})}function o(t){return e({url:r,method:"post",data:t})}function s(t){return e({url:r+t.id+"/",method:"put",data:t})}function i(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}export{o as A,i as D,n as G,s as U,u as a,d as b};

+ 1 - 1
dist/assets/api.Cr-a6uN-.js → dist/assets/api.B_6Iw6pI.js

@@ -1 +1 @@
-import{x as u}from"./index.tPS9Jpg2.js";function e(t){return u({url:"/api/system/column/",method:"get",params:t})}function o(t){return u({url:"/api/system/column/auto_match_fields/",method:"post",data:t})}function s(t){return u({url:"/api/system/column/",method:"post",data:t})}function m(t){return u({url:`/api/system/column/${t}/`,method:"delete"})}function n(t){return u({url:`/api/system/column/${t.id}/`,method:"put",data:t})}export{s as a,o as b,m as d,e as g,n as u};
+import{x as u}from"./index.BsMIUALc.js";function e(t){return u({url:"/api/system/column/",method:"get",params:t})}function o(t){return u({url:"/api/system/column/auto_match_fields/",method:"post",data:t})}function s(t){return u({url:"/api/system/column/",method:"post",data:t})}function m(t){return u({url:`/api/system/column/${t}/`,method:"delete"})}function n(t){return u({url:`/api/system/column/${t.id}/`,method:"put",data:t})}export{s as a,o as b,m as d,e as g,n as u};

+ 1 - 1
dist/assets/api.BUdMGjyG.js → dist/assets/api.B_H3gF8l.js

@@ -1 +1 @@
-import{x as t}from"./index.tPS9Jpg2.js";const s="/api/system/manageclass/week_schedule/",r="/api/system/manageclass/";function f(e){return t({url:s+"?week_offset=0",method:"get",params:e})}function h(e){return t({url:s+e+"/",method:"get"})}function b(e){return t({url:r,method:"post",data:e})}function g(e){return t({url:r+e.id+"/",method:"put",data:e})}function y(){return t({url:s+"?week_offset=0",method:"get"})}function L(e){return t({url:"/api/system/app_user/?user_type=1",method:"get",params:e})}function _(e){return t({url:r+e+"/",method:"delete",data:{id:e}})}function k(e){return t({url:s+"?week_offset="+e,method:"get"})}function w(e){return t({url:"/api/system/manageclass/copy-schedule/",method:"post",data:e})}async function G(e){const o=e.data.schedule;return e.data.time_labels.map((c,i)=>{var u;const n={timeLabel:c};for(let a=1;a<=7;a++){const l=((u=o[a])==null?void 0:u[i+1])||[];n[`day${a}`]=l}return n})}export{b as A,w as C,_ as D,y as G,g as U,k as a,h as b,f as c,L as d,G as g};
+import{x as t}from"./index.BsMIUALc.js";const s="/api/system/manageclass/week_schedule/",r="/api/system/manageclass/";function f(e){return t({url:s+"?week_offset=0",method:"get",params:e})}function h(e){return t({url:s+e+"/",method:"get"})}function b(e){return t({url:r,method:"post",data:e})}function g(e){return t({url:r+e.id+"/",method:"put",data:e})}function y(){return t({url:s+"?week_offset=0",method:"get"})}function L(e){return t({url:"/api/system/app_user/?user_type=1",method:"get",params:e})}function _(e){return t({url:r+e+"/",method:"delete",data:{id:e}})}function k(e){return t({url:s+"?week_offset="+e,method:"get"})}function w(e){return t({url:"/api/system/manageclass/copy-schedule/",method:"post",data:e})}async function G(e){const o=e.data.schedule;return e.data.time_labels.map((c,i)=>{var u;const n={timeLabel:c};for(let a=1;a<=7;a++){const l=((u=o[a])==null?void 0:u[i+1])||[];n[`day${a}`]=l}return n})}export{b as A,w as C,_ as D,y as G,g as U,k as a,h as b,f as c,L as d,G as g};

+ 1 - 1
dist/assets/api.By84Pgj2.js → dist/assets/api.Bmx1aDhE.js

@@ -1 +1 @@
-import{d as o}from"./vue.D1BjjNmv.js";import{x as r,X as n}from"./index.tPS9Jpg2.js";const s={drawerVisible:!1,roleId:void 0,roleName:void 0,users:[]},i=o("RoleDrawerStores",{state:()=>({...s}),actions:{handleDrawerOpen(e){this.drawerVisible=!0,this.set_state(e)},set_state(e){this.roleName=e.name,this.roleId=e.id,this.users=e.users},handleDrawerClose(){Object.assign(this.$state,s)}}});function l(e){return r({url:"/api/system/role_menu_button_permission/get_role_menu/",method:"get",params:e}).then(t=>n.toArrayTree(t.data,{key:"id",parentKey:"parent",children:"children",strict:!1}))}function m(e){return r({url:"/api/system/role_menu_button_permission/set_role_menu/",method:"put",data:e})}function _(e){return r({url:"/api/system/role_menu_button_permission/get_role_menu_btn_field/",method:"get",params:e})}function p(e){return r({url:"/api/system/role_menu_button_permission/set_role_menu_btn/",method:"put",data:e})}function d(e,t){return r({url:`/api/system/role_menu_button_permission/${e}/set_role_menu_field/`,method:"put",data:t})}function h(e){return r({url:"/api/system/role_menu_button_permission/set_role_menu_btn_data_range/",method:"put",data:e})}function c(e){return r({url:"/api/system/role_menu_button_permission/role_to_dept_all/",method:"get",params:e})}function f(){return r({url:"/api/system/user/",method:"get",params:{limit:999}}).then(e=>n.map(e.data,t=>({id:t.id,name:t.name,user_type:t.user_type})))}function b(e,t){return r({url:`/api/system/role/${e}/set_role_users/`,method:"put",data:t})}export{i as R,c as a,p as b,d as c,l as d,m as e,_ as f,f as g,b as h,h as s};
+import{d as o}from"./vue.D1BjjNmv.js";import{x as r,X as n}from"./index.BsMIUALc.js";const s={drawerVisible:!1,roleId:void 0,roleName:void 0,users:[]},i=o("RoleDrawerStores",{state:()=>({...s}),actions:{handleDrawerOpen(e){this.drawerVisible=!0,this.set_state(e)},set_state(e){this.roleName=e.name,this.roleId=e.id,this.users=e.users},handleDrawerClose(){Object.assign(this.$state,s)}}});function l(e){return r({url:"/api/system/role_menu_button_permission/get_role_menu/",method:"get",params:e}).then(t=>n.toArrayTree(t.data,{key:"id",parentKey:"parent",children:"children",strict:!1}))}function m(e){return r({url:"/api/system/role_menu_button_permission/set_role_menu/",method:"put",data:e})}function _(e){return r({url:"/api/system/role_menu_button_permission/get_role_menu_btn_field/",method:"get",params:e})}function p(e){return r({url:"/api/system/role_menu_button_permission/set_role_menu_btn/",method:"put",data:e})}function d(e,t){return r({url:`/api/system/role_menu_button_permission/${e}/set_role_menu_field/`,method:"put",data:t})}function h(e){return r({url:"/api/system/role_menu_button_permission/set_role_menu_btn_data_range/",method:"put",data:e})}function c(e){return r({url:"/api/system/role_menu_button_permission/role_to_dept_all/",method:"get",params:e})}function f(){return r({url:"/api/system/user/",method:"get",params:{limit:999}}).then(e=>n.map(e.data,t=>({id:t.id,name:t.name,user_type:t.user_type})))}function b(e,t){return r({url:`/api/system/role/${e}/set_role_users/`,method:"put",data:t})}export{i as R,c as a,p as b,d as c,l as d,m as e,_ as f,f as g,b as h,h as s};

+ 1 - 1
dist/assets/api.Uk_Yegnu.js → dist/assets/api.BuO-sL4T.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const n="/api/system/system_config/";function a(t){return e({url:n,method:"get",params:t})}function s(t){return e({url:n,method:"post",data:t})}function u(t){return e({url:n+t.id+"/",method:"put",data:t})}function o(t){return e({url:n+t+"/",method:"delete",data:{id:t}})}function d(t){return e({url:n+"save_content/",method:"put",data:t})}export{s as A,o as D,a as G,u as U,d as s};
+import{x as e}from"./index.BsMIUALc.js";const n="/api/system/system_config/";function a(t){return e({url:n,method:"get",params:t})}function s(t){return e({url:n,method:"post",data:t})}function u(t){return e({url:n+t.id+"/",method:"put",data:t})}function o(t){return e({url:n+t+"/",method:"delete",data:{id:t}})}function d(t){return e({url:n+"save_content/",method:"put",data:t})}export{s as A,o as D,a as G,u as U,d as s};

+ 1 - 1
dist/assets/api.DdvEWenq.js → dist/assets/api.ByO9Beo-.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/device/";function n(t){return e({url:r,method:"get",params:t})}function s(t){return e({url:`/api/system/device/${t}/borrow_records/`,method:"get"})}function i(t){return e({url:`/api/system/device/${t}/maintenance_history/`,method:"get"})}function o(t){return e({url:`/api/system/device/${t}/maintenance_records/`,method:"get"})}function u(t){return e({url:`/api/system/device/${t}/statistics/`,method:"get"})}function d(t){return e({url:r,method:"post",data:t})}function c(t){return e({url:r+t.id+"/",method:"put",data:t})}function m(t){return e({url:r+t.id+"/change_status/",method:"post",data:t})}function p(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}export{d as A,p as D,n as G,c as U,o as a,i as b,s as c,m as d,u as g};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/device/";function n(t){return e({url:r,method:"get",params:t})}function s(t){return e({url:`/api/system/device/${t}/borrow_records/`,method:"get"})}function i(t){return e({url:`/api/system/device/${t}/maintenance_history/`,method:"get"})}function o(t){return e({url:`/api/system/device/${t}/maintenance_records/`,method:"get"})}function u(t){return e({url:`/api/system/device/${t}/statistics/`,method:"get"})}function d(t){return e({url:r,method:"post",data:t})}function c(t){return e({url:r+t.id+"/",method:"put",data:t})}function m(t){return e({url:r+t.id+"/change_status/",method:"post",data:t})}function p(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}export{d as A,p as D,n as G,c as U,o as a,i as b,s as c,m as d,u as g};

+ 1 - 1
dist/assets/api.NmfwFtB-.js → dist/assets/api.BzspVXzn.js

@@ -1 +1 @@
-import{x as t}from"./index.tPS9Jpg2.js";const e="/api/system/dashboard/";function s(){return t({url:e+"overview_stats/",method:"get"})}function i(r){return t({url:"/api/system/dashboard/combined_dashboard/",method:"get",params:r})}function a(){return t({url:e+"utilization_trend/",method:"get"})}function n(r){return t({url:e+"borrow_trends/?period="+r,method:"get"})}function d(){return t({url:e+"active_users/",method:"get"})}function u(){return t({url:"/api/system/borrow/application/dashboard_statistics/",method:"get"})}export{d as G,i as a,n as b,a as c,u as d,s as e};
+import{x as t}from"./index.BsMIUALc.js";const e="/api/system/dashboard/";function s(){return t({url:e+"overview_stats/",method:"get"})}function i(r){return t({url:"/api/system/dashboard/combined_dashboard/",method:"get",params:r})}function a(){return t({url:e+"utilization_trend/",method:"get"})}function n(r){return t({url:e+"borrow_trends/?period="+r,method:"get"})}function d(){return t({url:e+"active_users/",method:"get"})}function u(){return t({url:"/api/system/borrow/application/dashboard_statistics/",method:"get"})}export{d as G,i as a,n as b,a as c,u as d,s as e};

+ 1 - 1
dist/assets/api.Bc1pI_qC.js → dist/assets/api.CkRWsva-.js

@@ -1 +1 @@
-import{x as u,S as n}from"./index.tPS9Jpg2.js";let t="/api/system/menu/";n.get("superKey")==="super_admin_role"?t="/api/system/superadmin/menus/":t="/api/system/menu/";function a(e){return u({url:t,method:"get",params:e})}function s(e){return u({url:t,method:"post",data:e})}function o(e){return u({url:t+e.id+"/",method:"put",data:e})}function m(e){return u({url:t+e+"/",method:"delete"})}function d(e){return u({url:t,method:"get",params:e})}function i(e){return u({url:t+"move_up/",method:"post",data:e})}function p(e){return u({url:t+"move_down/",method:"post",data:e})}export{s as A,m as D,a as G,o as U,p as a,d as l,i as m};
+import{x as u,S as n}from"./index.BsMIUALc.js";let t="/api/system/menu/";n.get("superKey")==="super_admin_role"?t="/api/system/superadmin/menus/":t="/api/system/menu/";function a(e){return u({url:t,method:"get",params:e})}function s(e){return u({url:t,method:"post",data:e})}function o(e){return u({url:t+e.id+"/",method:"put",data:e})}function m(e){return u({url:t+e+"/",method:"delete"})}function d(e){return u({url:t,method:"get",params:e})}function i(e){return u({url:t+"move_up/",method:"post",data:e})}function p(e){return u({url:t+"move_down/",method:"post",data:e})}export{s as A,m as D,a as G,o as U,p as a,d as l,i as m};

+ 1 - 1
dist/assets/api.Ib2r_w4f.js → dist/assets/api.CoBdXsPO.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/warehouse/";function u(t){return e({url:r,method:"get",params:t})}function n(t){return e({url:r,method:"post",data:t})}function o(t){return e({url:r+t.id+"/",method:"put",data:t})}function s(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}export{n as A,s as D,d as G,o as U,u as a};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/warehouse/";function u(t){return e({url:r,method:"get",params:t})}function n(t){return e({url:r,method:"post",data:t})}function o(t){return e({url:r+t.id+"/",method:"put",data:t})}function s(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}export{n as A,s as D,d as G,o as U,u as a};

+ 1 - 1
dist/assets/api.B2q-GKsR.js → dist/assets/api.CrH-BHHD.js

@@ -1 +1 @@
-import{x as a}from"./index.tPS9Jpg2.js";const e="/api/system/approval/workflow/",o="/api/system/approval/workflow_step/";function p(t){return a({url:e,method:"get",params:t})}function u(t){return a({url:e,method:"post",data:t})}function n(t,r){return a({url:"/api/system/approval/workflow_step/"+t+"/",method:"put",data:r})}function d(t){return a({url:e+t+"/",method:"delete",data:{id:t}})}function i(t){return a({url:o,method:"post",data:t})}function l(t,r){return a({url:o+t+"/",method:"put",data:r})}export{u as A,d as D,p as G,n as U,l as a,i as b};
+import{x as a}from"./index.BsMIUALc.js";const e="/api/system/approval/workflow/",o="/api/system/approval/workflow_step/";function p(t){return a({url:e,method:"get",params:t})}function u(t){return a({url:e,method:"post",data:t})}function n(t,r){return a({url:"/api/system/approval/workflow_step/"+t+"/",method:"put",data:r})}function d(t){return a({url:e+t+"/",method:"delete",data:{id:t}})}function i(t){return a({url:o,method:"post",data:t})}function l(t,r){return a({url:o+t+"/",method:"put",data:r})}export{u as A,d as D,p as G,n as U,l as a,i as b};

+ 1 - 1
dist/assets/api.VWSmIxx4.js → dist/assets/api.D4necOd_.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const a="/api/system/inventory/check-records/list/";function r(t){return e({url:a,method:"get",params:t})}function s(t){return e({url:a,method:"post",data:t})}function c(t){return e({url:a+t.id+"/",method:"put",data:t})}function o(t){return e({url:a+t+"/",method:"delete",data:{id:t}})}function i(){return e({url:a,method:"get"})}function u(t){return e({url:"/api/system/device/scan/start/",method:"post",data:t})}function d(t){return e({url:`/api/system/inventory/check-records/${t}/`,method:"get"})}function m(t){return e({url:"/api/system/device/scan/",method:"post",data:t})}function p(t){return e({url:"/api/system/device/scan/batch/",method:"post",data:t})}function l(t){return e({url:"/api/system/device/scan/complete/",method:"post",data:t})}function h(t){return e({url:`/api/system/inventory/check-records/${t}/cancel/`,method:"post"})}export{s as A,l as C,o as D,i as G,p as S,c as U,m as a,h as b,d as c,u as d,r as e};
+import{x as e}from"./index.BsMIUALc.js";const a="/api/system/inventory/check-records/list/";function r(t){return e({url:a,method:"get",params:t})}function s(t){return e({url:a,method:"post",data:t})}function c(t){return e({url:a+t.id+"/",method:"put",data:t})}function o(t){return e({url:a+t+"/",method:"delete",data:{id:t}})}function i(){return e({url:a,method:"get"})}function u(t){return e({url:"/api/system/device/scan/start/",method:"post",data:t})}function d(t){return e({url:`/api/system/inventory/check-records/${t}/`,method:"get"})}function m(t){return e({url:"/api/system/device/scan/",method:"post",data:t})}function p(t){return e({url:"/api/system/device/scan/batch/",method:"post",data:t})}function l(t){return e({url:"/api/system/device/scan/complete/",method:"post",data:t})}function h(t){return e({url:`/api/system/inventory/check-records/${t}/cancel/`,method:"post"})}export{s as A,l as C,o as D,i as G,p as S,c as U,m as a,h as b,d as c,u as d,r as e};

+ 1 - 1
dist/assets/api.DwQeFO3m.js → dist/assets/api.DGx5T5Fx.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/borrow/",a="/api/system/borrow/application/";function o(t){return e({url:r+"application/",method:"get",params:t})}function n(t){return e({url:r+"application/",method:"post",data:t})}function p(t){return e({url:`/api/system/borrow/application/${t.id}/`,method:"put",data:t})}function s(t){return e({url:"/api/system/borrow/application/"+t+"/",method:"delete",data:{id:t}})}function u(t){return e({url:a+t+"/",method:"get"})}async function c(t){return await e({url:`/api/system/borrow/application/${t.id}/borrow/`,method:"post",data:t})}async function l(t){return await e({url:`/api/system/borrow/application/${t.id}/return_device/`,method:"post",data:t})}async function m(t){return await e({url:`/api/system/borrow/application/${t.id}/renew/`,method:"post",data:t})}function d(t){return e({url:"/api/system/app_user/",method:"get",params:t})}export{n as A,c as C,s as D,u as G,m as R,p as U,d as a,l as b,o as c};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/borrow/",a="/api/system/borrow/application/";function o(t){return e({url:r+"application/",method:"get",params:t})}function n(t){return e({url:r+"application/",method:"post",data:t})}function p(t){return e({url:`/api/system/borrow/application/${t.id}/`,method:"put",data:t})}function s(t){return e({url:"/api/system/borrow/application/"+t+"/",method:"delete",data:{id:t}})}function u(t){return e({url:a+t+"/",method:"get"})}async function c(t){return await e({url:`/api/system/borrow/application/${t.id}/borrow/`,method:"post",data:t})}async function l(t){return await e({url:`/api/system/borrow/application/${t.id}/return_device/`,method:"post",data:t})}async function m(t){return await e({url:`/api/system/borrow/application/${t.id}/renew/`,method:"post",data:t})}function d(t){return e({url:"/api/system/app_user/",method:"get",params:t})}export{n as A,c as C,s as D,u as G,m as R,p as U,d as a,l as b,o as c};

+ 1 - 1
dist/assets/api.CVhLCval.js → dist/assets/api.DryHg6Ox.js

@@ -1 +1 @@
-import{x as o}from"./index.tPS9Jpg2.js";function r(){return o({url:"/api/captcha/",method:"get"})}function a(t){return o({url:"/api/login/",method:"post",data:t})}function e(t){return o({url:"/api/system/user/login_change_password/",method:"post",data:t})}function s(){return o({url:"/api/system/user/user_info/",method:"get"})}function u(t){return o({url:"/api/platform-admin/auth/login/",method:"post",data:t})}export{s as a,e as b,r as g,a as l,u as p};
+import{x as o}from"./index.BsMIUALc.js";function r(){return o({url:"/api/captcha/",method:"get"})}function a(t){return o({url:"/api/login/",method:"post",data:t})}function e(t){return o({url:"/api/system/user/login_change_password/",method:"post",data:t})}function s(){return o({url:"/api/system/user/user_info/",method:"get"})}function u(t){return o({url:"/api/platform-admin/auth/login/",method:"post",data:t})}export{s as a,e as b,r as g,a as l,u as p};

+ 1 - 1
dist/assets/api.BdB-lcUH.js → dist/assets/api.ZVYx5XJA.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/borrow/application/?status=1";function i(t){return e({url:r,method:"get",params:t})}function u(t){return e({url:r,method:"post",data:t})}function p(t){return e({url:r+t.id+"/",method:"put",data:t})}function d(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function m(t){return e({url:"/api/system/tenant/switch/",method:"post",data:{tenant_id:t}})}function c(t,a,o,s){return e({url:`/api/system/borrow/application/${t}/review/`,method:"post",data:{action:a,remark:o,warehouse:s}})}export{u as A,c as B,d as D,i as G,m as S,p as U};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/borrow/application/?status=1";function i(t){return e({url:r,method:"get",params:t})}function u(t){return e({url:r,method:"post",data:t})}function p(t){return e({url:r+t.id+"/",method:"put",data:t})}function d(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function m(t){return e({url:"/api/system/tenant/switch/",method:"post",data:{tenant_id:t}})}function c(t,a,o,s){return e({url:`/api/system/borrow/application/${t}/review/`,method:"post",data:{action:a,remark:o,warehouse:s}})}export{u as A,c as B,d as D,i as G,m as S,p as U};

+ 1 - 1
dist/assets/api.DcPJ0oRW.js → dist/assets/api.hqguW4pb.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/device_tags/";function n(t){return e({url:r,method:"get",params:t})}function u(t){return e({url:r,method:"post",data:t})}function s(t){return e({url:r+t.id+"/",method:"put",data:t})}function o(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}export{u as A,o as D,n as G,s as U,d as a};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/device_tags/";function n(t){return e({url:r,method:"get",params:t})}function u(t){return e({url:r,method:"post",data:t})}function s(t){return e({url:r+t.id+"/",method:"put",data:t})}function o(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function d(){return e({url:r,method:"get"})}export{u as A,o as D,n as G,s as U,d as a};

+ 1 - 1
dist/assets/api.B1TtkXaI.js → dist/assets/api.l-byepyR.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const r="/api/system/approval/workflow/",o="/api/system/approval/workflow_step/";function u(t){return e({url:r,method:"get",params:t})}function n(t){return e({url:r,method:"post",data:t})}function p(t,a){return e({url:r+t+"/",method:"put",data:a})}function d(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function i(t){return e({url:o,method:"post",data:t})}function l(t,a){return e({url:o+t+"/",method:"put",data:a})}function f(t){return e({url:o+t+"/",method:"delete",data:{id:t}})}export{n as A,f as D,u as G,p as U,l as a,i as b,d as c};
+import{x as e}from"./index.BsMIUALc.js";const r="/api/system/approval/workflow/",o="/api/system/approval/workflow_step/";function u(t){return e({url:r,method:"get",params:t})}function n(t){return e({url:r,method:"post",data:t})}function p(t,a){return e({url:r+t+"/",method:"put",data:a})}function d(t){return e({url:r+t+"/",method:"delete",data:{id:t}})}function i(t){return e({url:o,method:"post",data:t})}function l(t,a){return e({url:o+t+"/",method:"put",data:a})}function f(t){return e({url:o+t+"/",method:"delete",data:{id:t}})}export{n as A,f as D,u as G,p as U,l as a,i as b,d as c};

+ 1 - 1
dist/assets/api.hlZmDIsr.js → dist/assets/api.u0gce_la.js

@@ -1 +1 @@
-import{x as e}from"./index.tPS9Jpg2.js";const a="/api/platform-admin/tenants/";function u(t){return e({url:a,method:"get",params:t})}function o(t){return e({url:a,method:"post",data:t})}function s(t){return e({url:a+t.id+"/",method:"put",data:t})}function d(t){return e({url:a+t+"/",method:"delete",data:{id:t}})}function i(){return e({url:a,method:"get"})}function m(t,r){return e({url:`${a}${t}/activate/`,method:"post",data:{status:r}})}export{o as A,d as D,u as G,s as U,i as a,m as u};
+import{x as e}from"./index.BsMIUALc.js";const a="/api/platform-admin/tenants/";function u(t){return e({url:a,method:"get",params:t})}function o(t){return e({url:a,method:"post",data:t})}function s(t){return e({url:a+t.id+"/",method:"put",data:t})}function d(t){return e({url:a+t+"/",method:"delete",data:{id:t}})}function i(){return e({url:a,method:"get"})}function m(t,r){return e({url:`${a}${t}/activate/`,method:"post",data:{status:r}})}export{o as A,d as D,u as G,s as U,i as a,m as u};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 1
dist/assets/aside.krZyWLu5.js


+ 1 - 1
dist/assets/associationTable.C-RLQ3F8.js → dist/assets/associationTable.DMYf_o5W.js

@@ -1 +1 @@
-import{_ as o}from"./associationTable.vue_vue_type_script_setup_true_lang.DMZnknQl.js";import"./index.tPS9Jpg2.js";import"./vue.D1BjjNmv.js";export{o as default};
+import{_ as o}from"./associationTable.vue_vue_type_script_setup_true_lang.D6AT_M1Q.js";import"./index.BsMIUALc.js";import"./vue.D1BjjNmv.js";export{o as default};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/associationTable.vue_vue_type_script_setup_true_lang.D6AT_M1Q.js


+ 1 - 0
dist/assets/authFunction.BQbm82_n.js

@@ -0,0 +1 @@
+import{K as s}from"./index.BsMIUALc.js";function a(t){return s().data.some(o=>o===t)}export{a};

+ 0 - 1
dist/assets/authFunction.SBBImBKV.js

@@ -1 +0,0 @@
-import{K as s}from"./index.tPS9Jpg2.js";function a(t){return s().data.some(o=>o===t)}export{a};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/breadcrumb.4r2fbpIx.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/changePwd.FIlC7LhM.js


+ 2 - 2
dist/assets/classic.C7ioZo1I.js → dist/assets/classic.Cs1gLef6.js

@@ -1,2 +1,2 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/aside.gkln98P3.js","assets/index.tPS9Jpg2.js","assets/vue.D1BjjNmv.js","assets/index.B3U2FkM1.css","assets/routeFilter.DaRXixcV.js","assets/header.CUmSTH7k.js","assets/main.Bev96LYV.js","assets/_plugin-vue_export-helper.DlAUqK2U.js","assets/main.cPHE1sJJ.css","assets/tagsView.DSuR_HCt.js","assets/tagsView.Cvk_NTDA.css"])))=>i.map(i=>d[i]);
-import{u as g,_ as e}from"./index.tPS9Jpg2.js";import{a as p,r as E,aB as L,aC as V,f as w,q as A,w as _,aj as M,J as l,o as f,K as d,S as t,u as o,aA as a,b as k,M as x,t as b}from"./vue.D1BjjNmv.js";const B={class:"flex-center layout-backtop"},P=p({name:"layoutClassic"}),N=p({...P,setup(S){const m=a(()=>e(()=>import("./aside.gkln98P3.js"),__vite__mapDeps([0,1,2,3,4]))),y=a(()=>e(()=>import("./header.CUmSTH7k.js"),__vite__mapDeps([5,1,2,3]))),v=a(()=>e(()=>import("./main.Bev96LYV.js"),__vite__mapDeps([6,1,2,3,7,8]))),T=a(()=>e(()=>import("./tagsView.DSuR_HCt.js"),__vite__mapDeps([9,1,2,3,7,10]))),s=E(),h=L(),R=g(),{themeConfig:r}=V(R),C=w(()=>r.value.isTagsview),c=()=>{var n;(n=s.value)==null||n.layoutMainScrollbarRef.update()},u=()=>{b(()=>{setTimeout(()=>{c(),s.value.layoutMainScrollbarRef.wrapRef.scrollTop=0},500)})};return A(()=>{u()}),_(()=>h.path,()=>{u()}),_(r,()=>{c()},{deep:!0}),(n,D)=>{const i=M("el-container");return f(),l(i,{class:"layout-container flex-center"},{default:d(()=>[t(o(y)),t(i,{class:"layout-mian-height-50"},{default:d(()=>[t(o(m)),k("div",B,[C.value?(f(),l(o(T),{key:0})):x("",!0),t(o(v),{ref_key:"layoutMainRef",ref:s},null,512)])]),_:1})]),_:1})}}});export{N as default};
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/aside.krZyWLu5.js","assets/index.BsMIUALc.js","assets/vue.D1BjjNmv.js","assets/index.B3U2FkM1.css","assets/routeFilter.le-yYjBQ.js","assets/header.05ZaxOKD.js","assets/main.CRoTJlIO.js","assets/_plugin-vue_export-helper.DlAUqK2U.js","assets/main.cPHE1sJJ.css","assets/tagsView.DdDdmuu9.js","assets/tagsView.Cvk_NTDA.css"])))=>i.map(i=>d[i]);
+import{u as g,_ as e}from"./index.BsMIUALc.js";import{a as p,r as E,aB as L,aC as V,f as w,q as A,w as _,aj as M,J as l,o as f,K as d,S as t,u as o,aA as a,b as k,M as x,t as b}from"./vue.D1BjjNmv.js";const B={class:"flex-center layout-backtop"},P=p({name:"layoutClassic"}),N=p({...P,setup(S){const m=a(()=>e(()=>import("./aside.krZyWLu5.js"),__vite__mapDeps([0,1,2,3,4]))),y=a(()=>e(()=>import("./header.05ZaxOKD.js"),__vite__mapDeps([5,1,2,3]))),v=a(()=>e(()=>import("./main.CRoTJlIO.js"),__vite__mapDeps([6,1,2,3,7,8]))),T=a(()=>e(()=>import("./tagsView.DdDdmuu9.js"),__vite__mapDeps([9,1,2,3,7,10]))),s=E(),h=L(),R=g(),{themeConfig:r}=V(R),C=w(()=>r.value.isTagsview),c=()=>{var n;(n=s.value)==null||n.layoutMainScrollbarRef.update()},u=()=>{b(()=>{setTimeout(()=>{c(),s.value.layoutMainScrollbarRef.wrapRef.scrollTop=0},500)})};return A(()=>{u()}),_(()=>h.path,()=>{u()}),_(r,()=>{c()},{deep:!0}),(n,D)=>{const i=M("el-container");return f(),l(i,{class:"layout-container flex-center"},{default:d(()=>[t(o(y)),t(i,{class:"layout-mian-height-50"},{default:d(()=>[t(o(m)),k("div",B,[C.value?(f(),l(o(T),{key:0})):x("",!0),t(o(v),{ref_key:"layoutMainRef",ref:s},null,512)])]),_:1})]),_:1})}}});export{N as default};

+ 1 - 1
dist/assets/closeFull.egzwnp_t.js → dist/assets/closeFull.goZUv5-W.js

@@ -1 +1 @@
-import{a as s,aC as n,aj as c,c as r,M as u,u as _,o as i,b as m,S as f}from"./vue.D1BjjNmv.js";import{b as p}from"./index.tPS9Jpg2.js";import{_ as d}from"./_plugin-vue_export-helper.DlAUqK2U.js";const C={key:0,class:"layout-navbars-close-full"},v={class:"layout-navbars-close-full-icon"},b=s({name:"layoutCloseFull"}),g=s({...b,setup(F){const e=p(),{isTagsViewCurrenFull:o}=n(e),t=()=>{e.setCurrenFullscreen(!1)};return(a,V)=>{const l=c("SvgIcon");return _(o)?(i(),r("div",C,[m("div",v,[f(l,{name:"ele-Close",title:a.$t("message.tagsView.closeFullscreen"),onClick:t},null,8,["title"])])])):u("",!0)}}}),w=d(g,[["__scopeId","data-v-83ab04b1"]]);export{w as default};
+import{a as s,aC as n,aj as c,c as r,M as u,u as _,o as i,b as m,S as f}from"./vue.D1BjjNmv.js";import{b as p}from"./index.BsMIUALc.js";import{_ as d}from"./_plugin-vue_export-helper.DlAUqK2U.js";const C={key:0,class:"layout-navbars-close-full"},v={class:"layout-navbars-close-full-icon"},b=s({name:"layoutCloseFull"}),g=s({...b,setup(F){const e=p(),{isTagsViewCurrenFull:o}=n(e),t=()=>{e.setCurrenFullscreen(!1)};return(a,V)=>{const l=c("SvgIcon");return _(o)?(i(),r("div",C,[m("div",v,[f(l,{name:"ele-Close",title:a.$t("message.tagsView.closeFullscreen"),onClick:t},null,8,["title"])])])):u("",!0)}}}),w=d(g,[["__scopeId","data-v-83ab04b1"]]);export{w as default};

+ 1 - 1
dist/assets/columnPermission.CqZvtkyB.js → dist/assets/columnPermission.sDZRKcsT.js

@@ -1 +1 @@
-import{X as d}from"./index.tPS9Jpg2.js";const r=async(n,e,s=[])=>{const t=await n();e.pagination==null&&(e.pagination={show:!0});const i=e.columns,c=["checked","_index","id","create_datetime","update_datetime"].concat(s);return d.eachTree(i,(o,a)=>{!c.includes(String(a))&&a in t.data&&(t.data[a].is_query||(o.column.show=!1,o.column.columnSetDisabled=!0),o.addForm={show:t.data[a].is_create},o.editForm={show:t.data[a].is_update})}),e};export{r as h};
+import{X as d}from"./index.BsMIUALc.js";const r=async(n,e,s=[])=>{const t=await n();e.pagination==null&&(e.pagination={show:!0});const i=e.columns,c=["checked","_index","id","create_datetime","update_datetime"].concat(s);return d.eachTree(i,(o,a)=>{!c.includes(String(a))&&a in t.data&&(t.data[a].is_query||(o.column.show=!1,o.column.columnSetDisabled=!0),o.addForm={show:t.data[a].is_create},o.editForm={show:t.data[a].is_update})}),e};export{r as h};

+ 2 - 2
dist/assets/columns.Bt5BCsDO.js → dist/assets/columns.B-3JttFh.js

@@ -1,2 +1,2 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/aside.gkln98P3.js","assets/index.tPS9Jpg2.js","assets/vue.D1BjjNmv.js","assets/index.B3U2FkM1.css","assets/routeFilter.DaRXixcV.js","assets/header.CUmSTH7k.js","assets/main.Bev96LYV.js","assets/_plugin-vue_export-helper.DlAUqK2U.js","assets/main.cPHE1sJJ.css","assets/columnsAside.CaEwkE7G.js","assets/columnsAside.CkOkhAlF.css"])))=>i.map(i=>d[i]);
-import{u as b,_ as o}from"./index.tPS9Jpg2.js";import{a as p,r as _,aB as A,aC as E,q as w,w as i,aj as f,J as L,o as S,K as n,S as e,u as t,aA as a,t as k}from"./vue.D1BjjNmv.js";const M=p({name:"layoutColumns"}),D=p({...M,setup(P){const m=a(()=>o(()=>import("./aside.gkln98P3.js"),__vite__mapDeps([0,1,2,3,4]))),d=a(()=>o(()=>import("./header.CUmSTH7k.js"),__vite__mapDeps([5,1,2,3]))),y=a(()=>o(()=>import("./main.Bev96LYV.js"),__vite__mapDeps([6,1,2,3,7,8]))),R=a(()=>o(()=>import("./columnsAside.CaEwkE7G.js"),__vite__mapDeps([9,2,1,3,4,7,10]))),r=_(""),s=_(),v=A(),T=b(),{themeConfig:C}=E(T),l=()=>{r.value.update(),s.value.layoutMainScrollbarRef.update()},c=()=>{k(()=>{setTimeout(()=>{l(),r.value.wrapRef.scrollTop=0,s.value.layoutMainScrollbarRef.wrapRef.scrollTop=0},500)})};return w(()=>{c()}),i(()=>v.path,()=>{c()}),i(C,()=>{l()},{deep:!0}),(V,g)=>{const h=f("el-scrollbar"),u=f("el-container");return S(),L(u,{class:"layout-container"},{default:n(()=>[e(t(R)),e(u,{class:"layout-columns-warp layout-container-view h100"},{default:n(()=>[e(t(m)),e(h,{ref_key:"layoutScrollbarRef",ref:r,class:"layout-backtop"},{default:n(()=>[e(t(d)),e(t(y),{ref_key:"layoutMainRef",ref:s},null,512)]),_:1},512)]),_:1})]),_:1})}}});export{D as default};
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/aside.krZyWLu5.js","assets/index.BsMIUALc.js","assets/vue.D1BjjNmv.js","assets/index.B3U2FkM1.css","assets/routeFilter.le-yYjBQ.js","assets/header.05ZaxOKD.js","assets/main.CRoTJlIO.js","assets/_plugin-vue_export-helper.DlAUqK2U.js","assets/main.cPHE1sJJ.css","assets/columnsAside.DO_jcPGZ.js","assets/columnsAside.CkOkhAlF.css"])))=>i.map(i=>d[i]);
+import{u as b,_ as o}from"./index.BsMIUALc.js";import{a as p,r as _,aB as A,aC as E,q as w,w as i,aj as f,J as L,o as S,K as n,S as e,u as t,aA as a,t as k}from"./vue.D1BjjNmv.js";const M=p({name:"layoutColumns"}),D=p({...M,setup(P){const m=a(()=>o(()=>import("./aside.krZyWLu5.js"),__vite__mapDeps([0,1,2,3,4]))),d=a(()=>o(()=>import("./header.05ZaxOKD.js"),__vite__mapDeps([5,1,2,3]))),y=a(()=>o(()=>import("./main.CRoTJlIO.js"),__vite__mapDeps([6,1,2,3,7,8]))),R=a(()=>o(()=>import("./columnsAside.DO_jcPGZ.js"),__vite__mapDeps([9,2,1,3,4,7,10]))),r=_(""),s=_(),v=A(),T=b(),{themeConfig:C}=E(T),l=()=>{r.value.update(),s.value.layoutMainScrollbarRef.update()},c=()=>{k(()=>{setTimeout(()=>{l(),r.value.wrapRef.scrollTop=0,s.value.layoutMainScrollbarRef.wrapRef.scrollTop=0},500)})};return w(()=>{c()}),i(()=>v.path,()=>{c()}),i(C,()=>{l()},{deep:!0}),(V,g)=>{const h=f("el-scrollbar"),u=f("el-container");return S(),L(u,{class:"layout-container"},{default:n(()=>[e(t(R)),e(u,{class:"layout-columns-warp layout-container-view h100"},{default:n(()=>[e(t(m)),e(h,{ref_key:"layoutScrollbarRef",ref:r,class:"layout-backtop"},{default:n(()=>[e(t(d)),e(t(y),{ref_key:"layoutMainRef",ref:s},null,512)]),_:1},512)]),_:1})]),_:1})}}});export{D as default};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/columnsAside.DO_jcPGZ.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/commonCrud.D39IXw49.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.01VPoHJL.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.B1mNT-UB.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.BAFOo6sO.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.BBt63vfF.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.BDtvWnUk.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.BG0fvdiD.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.BJ-y2GAb.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.BTHDtff7.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.Bc4M1tup.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.BqqIB6sX.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.C1FM13FL.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CBn_xSSS.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CGE9mSY8.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CHgfiFuU.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CTe1vp8I.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.C_yTNSng.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CeglOVFd.js


+ 1 - 1
dist/assets/crud.BgOuj3G6.js → dist/assets/crud.Citzi9qU.js

@@ -1 +1 @@
-import{b as t,A as o,c as s}from"./api.BUdMGjyG.js";import"./index.tPS9Jpg2.js";import"./vue.D1BjjNmv.js";const p=function({crudExpose:r}){return{crudOptions:{layout:"custom",request:{pageRequest:async e=>await s(e),addRequest:async({form:e})=>await o(e),getDetail:async({row:e})=>await t(e.id)},search:{show:!1},toolbar:{show:!1},rowHandle:{show:!1},table:{show:!1},actionbar:{show:!1,buttons:{add:{show:!1}}},pagination:{show:!0},columns:{search:{title:"关键字搜索",search:{show:!0,type:"input"},type:"input",form:{component:{placeholder:"请输入"},show:!1},column:{show:!1}},classroom:{title:"教室",type:"input",column:{minWidth:120},form:{component:{placeholder:"请填写教室"},rules:[{required:!0,message:"请填写教室"}]}},teacher_name:{title:"教师名字"+"test",type:"input",column:{show:!0,minWidth:120},form:{component:{placeholder:"请填写教师名字"},rules:[{required:!0,message:"请填写教师名字"}]}},datetime_label:{title:"星期",search:{show:!0},treeNode:!0,type:"input",column:{minWidth:120},form:{rules:[{required:!0,message:"名称必填项"}],component:{placeholder:"请输入名称"}}},time_label:{title:"上下午",type:"input",column:{minWidth:120,show:!0},form:{component:{placeholder:"请填写密码"},rules:[{required:!0,message:"请填写密码"}]}},semester_label:{title:"学期",type:"input",column:{show:!0,minWidth:120},form:{component:{placeholder:"请填写邮箱"},rules:[{required:!1,message:"请填写邮箱"}]}},classdetail:{title:"课程名称",type:"input",column:{show:!0,minWidth:120},form:{component:{placeholder:"请填写手机号"},rules:[{required:!0,message:"请填写手机号"}]}}}}}};export{p as createCrudOptions};
+import{b as t,A as o,c as s}from"./api.B_H3gF8l.js";import"./index.BsMIUALc.js";import"./vue.D1BjjNmv.js";const p=function({crudExpose:r}){return{crudOptions:{layout:"custom",request:{pageRequest:async e=>await s(e),addRequest:async({form:e})=>await o(e),getDetail:async({row:e})=>await t(e.id)},search:{show:!1},toolbar:{show:!1},rowHandle:{show:!1},table:{show:!1},actionbar:{show:!1,buttons:{add:{show:!1}}},pagination:{show:!0},columns:{search:{title:"关键字搜索",search:{show:!0,type:"input"},type:"input",form:{component:{placeholder:"请输入"},show:!1},column:{show:!1}},classroom:{title:"教室",type:"input",column:{minWidth:120},form:{component:{placeholder:"请填写教室"},rules:[{required:!0,message:"请填写教室"}]}},teacher_name:{title:"教师名字"+"test",type:"input",column:{show:!0,minWidth:120},form:{component:{placeholder:"请填写教师名字"},rules:[{required:!0,message:"请填写教师名字"}]}},datetime_label:{title:"星期",search:{show:!0},treeNode:!0,type:"input",column:{minWidth:120},form:{rules:[{required:!0,message:"名称必填项"}],component:{placeholder:"请输入名称"}}},time_label:{title:"上下午",type:"input",column:{minWidth:120,show:!0},form:{component:{placeholder:"请填写密码"},rules:[{required:!0,message:"请填写密码"}]}},semester_label:{title:"学期",type:"input",column:{show:!0,minWidth:120},form:{component:{placeholder:"请填写邮箱"},rules:[{required:!1,message:"请填写邮箱"}]}},classdetail:{title:"课程名称",type:"input",column:{show:!0,minWidth:120},form:{component:{placeholder:"请填写手机号"},rules:[{required:!0,message:"请填写手机号"}]}}}}}};export{p as createCrudOptions};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CkLEzj43.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CmiNNbfX.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.CmsB91Qa.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 1 - 1
dist/assets/crud.Cyh4QLnY.js


+ 1 - 1
dist/assets/crud.DCQ2WWoJ.js → dist/assets/crud.D1LhuClR.js

@@ -1 +1 @@
-import{x as a,W as l,r as n}from"./index.tPS9Jpg2.js";import"./vue.D1BjjNmv.js";const s="/api/system/download_center/";function r(e){return a({url:s,method:"get",params:e})}function i(e){return a({url:s,method:"post",data:e})}function u(e){return a({url:s+e.id+"/",method:"put",data:e})}function d(e){return a({url:s+e+"/",method:"delete",data:{id:e}})}const b=function({crudExpose:e}){return{crudOptions:{toolbar:{buttons:{search:{show:!1},refresh:{show:!0},compact:{show:!1},columns:{show:!1}}},request:{pageRequest:async t=>await r(t),addRequest:async({form:t})=>await i(t),editRequest:async({form:t,row:o})=>(t.id=o.id,await u(t)),delRequest:async({row:t})=>await d(t.id)},pagination:{show:!0},actionbar:{buttons:{add:{show:!1}}},toolbar:{buttons:{export:{show:!1}}},rowHandle:{fixed:"right",width:120,buttons:{view:{show:!1},edit:{show:!1},remove:{show:!1},download:{show:n(t=>t.row.task_status===2),text:"下载文件",type:"warning",click:t=>window.open(t.row.url,"_blank")}}},form:{col:{span:24},labelWidth:"100px",wrapper:{is:"el-dialog",width:"600px"}},columns:{_index:{title:"序号",form:{show:!1},column:{type:"index",align:"center",width:"70px",columnSetDisabled:!0}},search:{title:"关键字搜索",search:{show:!0,type:"input"},type:"input",form:{component:{placeholder:"请输入"},show:!1},column:{show:!1}},task_name:{title:"任务名",type:"text",column:{minWidth:160,align:"left"},search:{show:!0}},file_name:{title:"文件名",type:"text",column:{minWidth:160,align:"left"},search:{show:!0}},size:{title:"文件大小(b)",type:"number",column:{width:100}},task_status:{title:"任务状态",type:"dict-select",dict:l({data:[{label:"任务已创建",value:0},{label:"任务进行中",value:1},{label:"任务完成",value:2},{label:"任务失败",value:3}]}),column:{width:120},search:{show:!0}},create_datetime:{title:"创建时间",column:{width:160}},update_datetime:{title:"创建时间",column:{width:160}}}}}};export{b as createCrudOptions};
+import{x as a,W as l,r as n}from"./index.BsMIUALc.js";import"./vue.D1BjjNmv.js";const s="/api/system/download_center/";function r(e){return a({url:s,method:"get",params:e})}function i(e){return a({url:s,method:"post",data:e})}function u(e){return a({url:s+e.id+"/",method:"put",data:e})}function d(e){return a({url:s+e+"/",method:"delete",data:{id:e}})}const b=function({crudExpose:e}){return{crudOptions:{toolbar:{buttons:{search:{show:!1},refresh:{show:!0},compact:{show:!1},columns:{show:!1}}},request:{pageRequest:async t=>await r(t),addRequest:async({form:t})=>await i(t),editRequest:async({form:t,row:o})=>(t.id=o.id,await u(t)),delRequest:async({row:t})=>await d(t.id)},pagination:{show:!0},actionbar:{buttons:{add:{show:!1}}},toolbar:{buttons:{export:{show:!1}}},rowHandle:{fixed:"right",width:120,buttons:{view:{show:!1},edit:{show:!1},remove:{show:!1},download:{show:n(t=>t.row.task_status===2),text:"下载文件",type:"warning",click:t=>window.open(t.row.url,"_blank")}}},form:{col:{span:24},labelWidth:"100px",wrapper:{is:"el-dialog",width:"600px"}},columns:{_index:{title:"序号",form:{show:!1},column:{type:"index",align:"center",width:"70px",columnSetDisabled:!0}},search:{title:"关键字搜索",search:{show:!0,type:"input"},type:"input",form:{component:{placeholder:"请输入"},show:!1},column:{show:!1}},task_name:{title:"任务名",type:"text",column:{minWidth:160,align:"left"},search:{show:!0}},file_name:{title:"文件名",type:"text",column:{minWidth:160,align:"left"},search:{show:!0}},size:{title:"文件大小(b)",type:"number",column:{width:100}},task_status:{title:"任务状态",type:"dict-select",dict:l({data:[{label:"任务已创建",value:0},{label:"任务进行中",value:1},{label:"任务完成",value:2},{label:"任务失败",value:3}]}),column:{width:120},search:{show:!0}},create_datetime:{title:"创建时间",column:{width:160}},update_datetime:{title:"创建时间",column:{width:160}}}}}};export{b as createCrudOptions};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.DHYrxkFM.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.DJG33rqg.js


+ 1 - 1
dist/assets/crud.F9gpBX2v.js → dist/assets/crud.DJnUDZlA.js

@@ -1 +1 @@
-import{r}from"./index.tPS9Jpg2.js";import{D as o,U as s,A as u,G as a}from"./api.DcPJ0oRW.js";import"./vue.D1BjjNmv.js";const w=function({crudExpose:n}){return{crudOptions:{request:{pageRequest:async e=>await a(e),addRequest:async({form:e})=>await u(e),editRequest:async({form:e,row:t})=>(e.id=t.id,await s(e)),delRequest:async({row:e})=>await o(e.id)},form:{wrapper:{buttons:{ok:{text:"提交",show:r(e=>e.mode!=="view")}}}},actionbar:{buttons:{add:{show:!0}}},toolbar:{show:!1},rowHandle:{buttons:{remove:{show:!0},edit:{show:!0}}},pagination:{show:!0},columns:{_index:{title:"序号",form:{show:!1},column:{type:"index",align:"center",width:"70px",columnSetDisabled:!0}},search:{title:"关键字搜索",search:{show:!0,type:"input"},type:"input",form:{component:{placeholder:"请输入"},show:!1},column:{show:!1}},name:{title:"标签名称",search:{show:!0},treeNode:!0,type:"input",column:{Width:200},form:{rules:[{required:!0,message:"名称必填项"}],component:{placeholder:"请输入名称"}},viewForm:{component:{placeholder:""},rules:[{required:!0,message:""}]}},color:{title:"颜色",type:"input",column:{show:!1,Width:220},form:{value:"#FF5722",show:!1,component:{placeholder:"请填写标签颜色"},rules:[{required:!0,message:"请填写标签颜色"}]},viewForm:{component:{placeholder:""},rules:[{required:!0,message:""}]}},description:{title:"标签描述",type:"input",column:{width:1e3},form:{component:{placeholder:"请填写标签描述"},rules:[{required:!1,message:"请填写标签描述"}]},viewForm:{component:{placeholder:""},rules:[{required:!1,message:""}]}},sort:{title:"排序",type:"input",column:{minWidth:120},form:{value:1,show:!1,component:{placeholder:"请填写排序"},rules:[{required:!1,message:"请填写排序"}]},viewForm:{component:{placeholder:""},rules:[{required:!0,message:""}]}}}}}};export{w as createCrudOptions};
+import{r}from"./index.BsMIUALc.js";import{D as o,U as s,A as u,G as a}from"./api.hqguW4pb.js";import"./vue.D1BjjNmv.js";const w=function({crudExpose:n}){return{crudOptions:{request:{pageRequest:async e=>await a(e),addRequest:async({form:e})=>await u(e),editRequest:async({form:e,row:t})=>(e.id=t.id,await s(e)),delRequest:async({row:e})=>await o(e.id)},form:{wrapper:{buttons:{ok:{text:"提交",show:r(e=>e.mode!=="view")}}}},actionbar:{buttons:{add:{show:!0}}},toolbar:{show:!1},rowHandle:{buttons:{remove:{show:!0},edit:{show:!0}}},pagination:{show:!0},columns:{_index:{title:"序号",form:{show:!1},column:{type:"index",align:"center",width:"70px",columnSetDisabled:!0}},search:{title:"关键字搜索",search:{show:!0,type:"input"},type:"input",form:{component:{placeholder:"请输入"},show:!1},column:{show:!1}},name:{title:"标签名称",search:{show:!0},treeNode:!0,type:"input",column:{Width:200},form:{rules:[{required:!0,message:"名称必填项"}],component:{placeholder:"请输入名称"}},viewForm:{component:{placeholder:""},rules:[{required:!0,message:""}]}},color:{title:"颜色",type:"input",column:{show:!1,Width:220},form:{value:"#FF5722",show:!1,component:{placeholder:"请填写标签颜色"},rules:[{required:!0,message:"请填写标签颜色"}]},viewForm:{component:{placeholder:""},rules:[{required:!0,message:""}]}},description:{title:"标签描述",type:"input",column:{width:1e3},form:{component:{placeholder:"请填写标签描述"},rules:[{required:!1,message:"请填写标签描述"}]},viewForm:{component:{placeholder:""},rules:[{required:!1,message:""}]}},sort:{title:"排序",type:"input",column:{minWidth:120},form:{value:1,show:!1,component:{placeholder:"请填写排序"},rules:[{required:!1,message:"请填写排序"}]},viewForm:{component:{placeholder:""},rules:[{required:!0,message:""}]}}}}}};export{w as createCrudOptions};

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.DK5-BAFt.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.DLbfJmej.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.DTtz7j6r.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.Da6QkdTW.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.DjaAQl5K.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.Djb3wdii.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.DyVmLmBe.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.Q8pb-lof.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.R3c2t9h-.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.l3t9U8Fn.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/assets/crud.zUhyb20-.js


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно