Browse Source

Merge branch 'master' into dev-wugg

wugg 1 year ago
parent
commit
b69e63410e
100 changed files with 1068 additions and 13 deletions
  1. 6 6
      .gitignore
  2. 1 0
      composer.json
  3. 7 7
      config/database.php
  4. 17 0
      modules/consolecrud/Consolecrud.php
  5. 8 0
      modules/consolecrud/info.ini
  6. 114 0
      modules/dataexport/Dataexport.php
  7. 8 0
      modules/dataexport/info.ini
  8. 114 0
      modules/dataexport/library/ExportLib.php
  9. 123 0
      modules/department/Department.php
  10. 8 0
      modules/department/info.ini
  11. 100 0
      modules/notice/Notice.php
  12. 8 0
      modules/notice/info.ini
  13. 129 0
      modules/qiniu/Qiniu.php
  14. 8 0
      modules/qiniu/info.ini
  15. 216 0
      modules/sms/Sms.php
  16. 8 0
      modules/sms/info.ini
  17. 125 0
      modules/sms/library/Helper.php
  18. 8 0
      modules/wangeditor/info.ini
  19. 1 0
      public/assets/401-e9d97ddd.js
  20. 1 0
      public/assets/404-c253b4de.js
  21. 1 0
      public/assets/add-b8118f3d.js
  22. 0 0
      public/assets/add.vue_vue_type_script_setup_true_lang-7e2aaee1.js
  23. 1 0
      public/assets/admin-0fe9dec0.js
  24. 1 0
      public/assets/admin-f063a068.js
  25. 1 0
      public/assets/adminInfo-7e4b4bc8.js
  26. 0 0
      public/assets/adminInfo-9e20d1e4.js
  27. 1 0
      public/assets/adminInfo-cd060f4e.js
  28. 1 0
      public/assets/adminLog-08891d2a.js
  29. 1 0
      public/assets/adminLog-668b61cd.js
  30. 1 0
      public/assets/attachment-4d39873b.js
  31. 1 0
      public/assets/attachment-9340cffd.js
  32. 1 0
      public/assets/avatar-520fefc6.js
  33. 0 0
      public/assets/baAccount-1c1dfc9e.js
  34. 1 0
      public/assets/balance-181867a9.js
  35. 1 0
      public/assets/balance-2d62616b.js
  36. 1 0
      public/assets/balance-bc0b7359.js
  37. BIN
      public/assets/bg-95f82371.jpg
  38. 1 0
      public/assets/budget-6612bb40.js
  39. 1 0
      public/assets/budget-69cf6f65.js
  40. 0 0
      public/assets/buy-5684eff5.js
  41. 0 0
      public/assets/changePassword-41b07ea2.js
  42. 1 0
      public/assets/changePassword-b77f0d51.js
  43. 1 0
      public/assets/changePassword-d9665588.js
  44. 0 0
      public/assets/coffee-d68d7748.svg
  45. 1 0
      public/assets/commonDialog-9adf7239.js
  46. 0 0
      public/assets/commonDone-8e26d3b4.js
  47. 0 0
      public/assets/config-1fc57787.js
  48. 1 0
      public/assets/config-34462342.js
  49. 0 0
      public/assets/config-4f89ec8a.js
  50. 1 0
      public/assets/config-60a5c1b5.js
  51. 1 0
      public/assets/config-e41052c9.js
  52. 0 0
      public/assets/confirmFileConflict-f55d2a2b.js
  53. 1 0
      public/assets/controllerUrls-941681c3.js
  54. 0 0
      public/assets/crud-2ca28497.js
  55. 0 0
      public/assets/crud-4bde072a.js
  56. 0 0
      public/assets/crud-68282d37.js
  57. 1 0
      public/assets/darkSwitch-2d22b024.js
  58. 1 0
      public/assets/dashboard-0bd54af4.js
  59. 1 0
      public/assets/dashboard-cc92587d.js
  60. 0 0
      public/assets/dashboard-d144be65.js
  61. 1 0
      public/assets/dataRecycle-780129d6.js
  62. 1 0
      public/assets/dataRecycle-99473835.js
  63. 1 0
      public/assets/dataRecycleLog-31fded96.js
  64. 1 0
      public/assets/dataRecycleLog-b3aa36ab.js
  65. 1 0
      public/assets/dataexport-120e1788.js
  66. 1 0
      public/assets/dataexport-449dde0a.js
  67. 1 0
      public/assets/dataexport-f3666609.js
  68. 1 0
      public/assets/department-64f9ccf1.js
  69. 1 0
      public/assets/department-d76d9181.js
  70. 0 0
      public/assets/design-c1a45e4a.js
  71. 13 0
      public/assets/echarts-02f2616f.js
  72. 0 0
      public/assets/en-19abc9b5.js
  73. 1 0
      public/assets/en-4f54b060.js
  74. 1 0
      public/assets/facilityType-533913b2.js
  75. 1 0
      public/assets/facilityType-94ff6c55.js
  76. 0 0
      public/assets/footer-a0716a4b.js
  77. 1 0
      public/assets/globs-en-a7a4ca30.js
  78. 1 0
      public/assets/globs-zh-cn-df9c8d5f.js
  79. 0 0
      public/assets/goodsInfo-70ea221f.js
  80. 1 0
      public/assets/group-156558b9.js
  81. 1 0
      public/assets/group-157f1c99.js
  82. 1 0
      public/assets/group-90ae3cb1.js
  83. 1 0
      public/assets/group-e3df291b.js
  84. 0 0
      public/assets/header-1-2575ae78.svg
  85. 1 0
      public/assets/iframe-7b7d77b9.js
  86. 0 0
      public/assets/index-078f7f5f.js
  87. 0 0
      public/assets/index-0ec044bf.js
  88. 0 0
      public/assets/index-13980975.js
  89. 0 0
      public/assets/index-1509bf3f.js
  90. 0 0
      public/assets/index-1aea2814.js
  91. 0 0
      public/assets/index-1dcde328.js
  92. 0 0
      public/assets/index-2e23032c.js
  93. 0 0
      public/assets/index-309815bb.js
  94. 0 0
      public/assets/index-36295e00.js
  95. 0 0
      public/assets/index-38d43ee6.js
  96. 0 0
      public/assets/index-3f3a4552.js
  97. 0 0
      public/assets/index-434d719f.js
  98. 0 0
      public/assets/index-43cc03db.js
  99. 1 0
      public/assets/index-465c298e.js
  100. 0 0
      public/assets/index-47ba3d7e.js

+ 6 - 6
.gitignore

@@ -1,9 +1,9 @@
 # 通过 Git 部署项目至线上时建议删除的忽略规则
-/vendor
-/modules
-/public/*.lock
-/public/index.html
-/public/assets
+#/vendor
+#/modules
+#/public/*.lock
+#/public/index.html
+#/public/assets
 
 # 通过 Git 部署项目至线上时可以考虑删除的忽略规则
 /public/storage/*
@@ -60,4 +60,4 @@ pnpm-debug.log*
 *.css.map
 *.local
 !.gitkeep
-.svn
+.svn

+ 1 - 0
composer.json

@@ -51,6 +51,7 @@
         }
     },
     "config": {
+       "platform-check": false,
         "preferred-install": "dist",
         "allow-plugins": {
             "easywechat-composer/easywechat-composer": true

+ 7 - 7
config/database.php

@@ -26,19 +26,19 @@ return [
             // 服务器地址
             'hostname'        => env('database.hostname', '127.0.0.1'),
             // 数据库名
-            'database'        => env('database.database', 'buildadmin_com'),
+            'database'        => env('database.database', 'huiwu'),
             // 用户名
-            'username'        => env('database.username', 'root'),
+            'username'        => env('database.username', 'admin'),
             // 密码
-            'password'        => env('database.password', 'admin888'),
+            'password'        => env('database.password', 'admin!@#865'),
             // 端口
             'hostport'        => env('database.hostport', '3306'),
             // 数据库连接参数
             'params'          => [],
             // 数据库编码默认采用utf8
-            'charset'         => env('database.charset', 'utf8'),
+            'charset'         => env('database.charset', 'utf8mb4'),
             // 数据库表前缀
-            'prefix'          => env('database.prefix', 'ba_'),
+            'prefix'          => env('database.prefix', 'hw_'),
 
             // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
             'deploy'          => 0,
@@ -49,11 +49,11 @@ return [
             // 指定从服务器序号
             'slave_no'        => '',
             // 是否严格检查字段是否存在
-            'fields_strict'   => true,
+            'fields_strict'   => false,
             // 是否需要断线重连
             'break_reconnect' => true,
             // 监听SQL
-            'trigger_sql'     => env('app_debug', false),
+            'trigger_sql'     => env('app_debug', true),
             // 开启字段缓存
             'fields_cache'    => false,
         ],

+ 17 - 0
modules/consolecrud/Consolecrud.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace modules\consolecrud;
+
+use think\facade\Console;
+
+class Consolecrud
+{
+    public function AppInit()
+    {
+        if (request()->isCli()) {
+            Console::starting(function (\think\Console $console) {
+                $console->addCommand('app\admin\command\Crud');
+            });
+        }
+    }
+}

+ 8 - 0
modules/consolecrud/info.ini

@@ -0,0 +1,8 @@
+uid = consolecrud
+title = 命令行CRUD代码生成
+intro = 老版本BuildAdmin内置的命令行CRUD代码生成功能
+author = 妙码生花
+authorid = 1
+website = https://www.buildadmin.com
+version = 1.0.0
+state = 1

+ 114 - 0
modules/dataexport/Dataexport.php

@@ -0,0 +1,114 @@
+<?php
+
+namespace modules\dataexport;
+
+use app\common\library\Menu;
+use app\admin\model\MenuRule;
+use ba\module\moduleException;
+use ba\module\Server;
+use FilesystemIterator;
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use think\Exception;
+
+class Dataexport
+{
+    private $uid = 'dataexport';
+
+    public function install()
+    {
+        $pMenu = MenuRule::where('name', 'routine')->value('id');
+        $menu  = [
+            [
+                'type'      => 'menu',
+                'title'     => '数据导出管理',
+                'name'      => 'routine/dataexport',
+                'path'      => 'routine/dataexport',
+                'icon'      => 'fa fa-cloud-download',
+                'menu_type' => 'tab',
+                'component' => '/src/views/backend/routine/dataexport/index.vue',
+                'keepalive' => '1',
+                'pid'       => $pMenu ? $pMenu : 0,
+                'children'  => [
+                    ['type' => 'button', 'title' => '查看', 'name' => 'routine/dataexport/index'],
+                    ['type' => 'button', 'title' => '添加', 'name' => 'routine/dataexport/add'],
+                    ['type' => 'button', 'title' => '编辑', 'name' => 'routine/dataexport/edit'],
+                    ['type' => 'button', 'title' => '删除', 'name' => 'routine/dataexport/del'],
+                    ['type' => 'button', 'title' => '执行任务', 'name' => 'routine/dataexport/start'],
+                ],
+            ],
+            [
+                'type'      => 'menu',
+                'title'     => '导出任务控制',
+                'name'      => 'routine/dataexport/taskControl',
+                'path'      => 'routine/dataexport/taskControl/:id',
+                'icon'      => 'fa fa-cloud-download',
+                'menu_type' => 'tab',
+                'component' => '/src/views/backend/routine/dataexport/taskControl.vue',
+                'keepalive' => '1',
+                'extend'    => 'add_rules_only',
+                'pid'       => $pMenu ? $pMenu : 0,
+            ]
+        ];
+        Menu::create($menu);
+    }
+
+    public function uninstall()
+    {
+        Menu::delete('routine/dataexport', true);
+        Menu::delete('routine/dataexport/taskControl', true);
+    }
+
+    public function enable()
+    {
+        Menu::enable('routine/dataexport');
+        Menu::enable('routine/dataexport/taskControl');
+    }
+
+    public function disable()
+    {
+        Menu::disable('routine/dataexport');
+        Menu::disable('routine/dataexport/taskControl');
+    }
+
+    public function update()
+    {
+        // 兼容系统v1.1.2的语言包按需加载
+        // 寻找安装时备份中的lang/pages文件,如果有,还原到lang/backend内而不是原位置
+        $ebakDir = root_path() . 'modules' . DIRECTORY_SEPARATOR . 'ebak' . DIRECTORY_SEPARATOR;
+        $zipFile = $ebakDir . $this->uid . '-install.zip';
+        $zipDir  = false;
+        if (is_file($zipFile)) {
+            try {
+                $zipDir = Server::unzip($zipFile);
+            } catch (moduleException|Exception $e) {
+                // skip
+            }
+        }
+        if ($zipDir) {
+            $oldBaInputs = [
+                path_transform('web\src\lang\pages\zh-cn\routine\dataexport.ts'),
+                path_transform('web\src\lang\pages\en\routine\dataexport.ts')
+            ];
+            foreach ($oldBaInputs as $oldBaInput) {
+                @unlink(root_path() . $oldBaInput);
+            }
+
+            foreach (
+                $iterator = new RecursiveIteratorIterator(
+                    new RecursiveDirectoryIterator($zipDir, FilesystemIterator::SKIP_DOTS),
+                    RecursiveIteratorIterator::SELF_FIRST
+                ) as $item
+            ) {
+                $ebakFile = path_transform($iterator->getSubPathName());
+                if (!$item->isDir() && in_array($ebakFile, $oldBaInputs)) {
+                    $newFileName = str_replace(DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR . 'backend' . DIRECTORY_SEPARATOR, $ebakFile);
+                    copy($item, root_path() . $newFileName);
+                }
+            }
+        }
+        deldir($zipDir);
+        del_empty_dir(root_path() . 'web/src/lang/pages/en');
+        del_empty_dir(root_path() . 'web/src/lang/pages/zh-cn');
+    }
+}

+ 8 - 0
modules/dataexport/info.ini

@@ -0,0 +1,8 @@
+uid = dataexport
+title = 数据导出
+intro = 本模块为系统提供表格数据导出的功能
+author = 妙码生花
+authorid = 1
+website = https://www.buildadmin.com
+version = 1.0.2
+state = 1

+ 114 - 0
modules/dataexport/library/ExportLib.php

@@ -0,0 +1,114 @@
+<?php
+
+namespace modules\dataexport\library;
+
+use app\admin\model\routine\Dataexport;
+use think\facade\Db;
+
+class ExportLib
+{
+    protected $row    = null;
+    protected $fields = [];
+    protected $join   = [];
+    protected $where  = [];
+    protected $order  = [];
+
+    public function __construct(int $id)
+    {
+        $this->row = Dataexport::where('id', $id)->find();
+
+        foreach ($this->row->field_config as $item) {
+            $asName                = $this->row->main_table . '.' . $item['name'] . ' as ' . $this->row->main_table . '_' . $item['name'];
+            $item['field']         = $this->row->main_table . '_' . $item['name'];
+            $this->fields[$asName] = $item;
+        }
+
+        if ($this->row->join_table) {
+            foreach ($this->row->join_table as $joinTable) {
+                foreach ($joinTable['fields'] as $item) {
+                    $joinAsName            = $joinTable['asname'] ? $joinTable['asname'] : $joinTable['table'];
+                    $asName                = $joinAsName . '.' . $item['name'] . ' as ' . $joinAsName . '_' . $item['name'];
+                    $item['field']         = $joinAsName . '_' . $item['name'];
+                    $this->fields[$asName] = $item;
+                }
+
+                $condition = vsprintf('%s.%s = %s.%s', [
+                    $this->row->main_table,
+                    $joinTable['fk'],
+                    $joinAsName,
+                    $joinTable['pk']
+                ]);
+
+                $this->join[] = [$joinTable['table'] . ' ' . $joinAsName, $condition, $joinTable['type'] ?? 'LEFT'];
+            }
+        }
+
+        // 筛选
+        if ($this->row->where_field) {
+            foreach ($this->row->where_field as $item) {
+                $this->where[] = [$item['field'], $item['operator'], $item['value']];
+            }
+        }
+
+        // 排序
+        if ($this->row->order_field) {
+            foreach ($this->row->order_field as $item) {
+                $this->order[$item['field']] = $item['value'];
+            }
+        }
+    }
+
+    public function getSql(string $type = '', $data = [])
+    {
+        $res = Db::name($this->row->main_table)
+            ->alias($this->row->main_table)
+            ->field(implode(',', array_keys($this->fields)))
+            ->where($this->where)
+            ->order($this->order);
+        foreach ($this->join as $item) {
+            $res->join($item[0], $item[1], $item[2]);
+        }
+
+        if ($type == 'limit') {
+            return $res->fetchSql()->limit($data[0], $data[1])->select();
+        } elseif ($type == 'test') {
+            return $res->fetchSql()->limit(10)->select();
+        }
+        return $res;
+    }
+
+    public function getXlsTitle(): array
+    {
+        $title = [];
+        foreach ($this->fields as $key => $value) {
+            $title[] = $value['title'] ?: $key;
+        }
+        return $title;
+    }
+
+    public function getFields()
+    {
+        return $this->fields;
+    }
+
+    public function assignment($value, $comment)
+    {
+        if ($comment) {
+            $comment = explode(',', $comment);
+            foreach ($comment as $v) {
+                list($itemKey, $itemValue) = explode('=', $v);
+                if ($itemKey == $value) {
+                    return $itemValue;
+                }
+            }
+        }
+        return $value;
+    }
+
+    public function getCount()
+    {
+        $sql = $this->getSql();
+        return $sql->count();
+    }
+
+}

+ 123 - 0
modules/department/Department.php

@@ -0,0 +1,123 @@
+<?php
+
+namespace modules\department;
+
+use app\common\library\Menu;
+use app\admin\model\MenuRule;
+use ba\module\moduleException;
+use ba\module\Server;
+use FilesystemIterator;
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use think\Exception;
+
+class Department
+{
+    private $uid = 'department';
+
+    public function install()
+    {
+        $pMenu    = MenuRule::where('name', 'auth')->value('id');
+        $newMenus = [
+            [
+                'type'      => 'menu',
+                'title'     => '部门管理',
+                'name'      => 'department/department',
+                'path'      => 'department/department',
+                'icon'      => 'fa fa-sitemap',
+                'menu_type' => 'tab',
+                'component' => '/src/views/backend/department/department/index.vue',
+                'keepalive' => '0',
+                'pid'       => $pMenu ? $pMenu : 0,
+                'children'  => [
+                    ['type' => 'button', 'title' => '查看', 'name' => 'department/department/index'],
+                    ['type' => 'button', 'title' => '添加', 'name' => 'department/department/add'],
+                    ['type' => 'button', 'title' => '编辑', 'name' => 'department/department/edit'],
+                    ['type' => 'button', 'title' => '删除', 'name' => 'department/department/del'],
+                    ['type' => 'button', 'title' => '快速排序', 'name' => 'department/department/sortable'],
+                ],
+            ],
+            [
+                'type'      => 'menu',
+                'title'     => '岗位管理',
+                'name'      => 'department/jobs',
+                'path'      => 'department/jobs',
+                'icon'      => 'fa fa-id-badge',
+                'menu_type' => 'tab',
+                'component' => '/src/views/backend/department/jobs/index.vue',
+                'keepalive' => '1',
+                'pid'       => $pMenu ? $pMenu : 0,
+                'children'  => [
+                    ['type' => 'button', 'title' => '查看', 'name' => 'department/jobs/index'],
+                    ['type' => 'button', 'title' => '添加', 'name' => 'department/jobs/add'],
+                    ['type' => 'button', 'title' => '编辑', 'name' => 'department/jobs/edit'],
+                    ['type' => 'button', 'title' => '删除', 'name' => 'department/jobs/del'],
+                    ['type' => 'button', 'title' => '快速排序', 'name' => 'department/jobs/sortable'],
+                ],
+            ]
+        ];
+        Menu::create($newMenus);
+    }
+
+    public function uninstall()
+    {
+        Menu::delete('department/department', true);
+        Menu::delete('department/jobs', true);
+    }
+
+    public function enable()
+    {
+        Menu::enable('department/department');
+        Menu::enable('department/jobs');
+    }
+
+    public function disable()
+    {
+        Menu::disable('department/department');
+        Menu::disable('department/jobs');
+    }
+
+    public function update()
+    {
+        // 兼容系统v1.1.2的语言包按需加载
+        // 寻找安装时备份中的lang/pages文件,如果有,还原到lang/backend内而不是原位置
+        $ebakDir = root_path() . 'modules' . DIRECTORY_SEPARATOR . 'ebak' . DIRECTORY_SEPARATOR;
+        $zipFile = $ebakDir . $this->uid . '-install.zip';
+        $zipDir  = false;
+        if (is_file($zipFile)) {
+            try {
+                $zipDir = Server::unzip($zipFile);
+            } catch (moduleException|Exception $e) {
+                // skip
+            }
+        }
+        if ($zipDir) {
+            $oldBaInputs = [
+                path_transform('web\src\lang\pages\zh-cn\department\department.ts'),
+                path_transform('web\src\lang\pages\en\department\department.ts'),
+                path_transform('web\src\lang\pages\zh-cn\department\jobs.ts'),
+                path_transform('web\src\lang\pages\en\department\jobs.ts'),
+            ];
+            foreach ($oldBaInputs as $oldBaInput) {
+                @unlink(root_path() . $oldBaInput);
+            }
+
+            foreach (
+                $iterator = new RecursiveIteratorIterator(
+                    new RecursiveDirectoryIterator($zipDir, FilesystemIterator::SKIP_DOTS),
+                    RecursiveIteratorIterator::SELF_FIRST
+                ) as $item
+            ) {
+                $ebakFile = path_transform($iterator->getSubPathName());
+                if (!$item->isDir() && in_array($ebakFile, $oldBaInputs)) {
+                    $newFileName = str_replace(DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR . 'backend' . DIRECTORY_SEPARATOR, $ebakFile);
+                    copy($item, root_path() . $newFileName);
+                }
+            }
+        }
+        deldir($zipDir);
+        del_empty_dir(root_path() . 'web/src/lang/pages/en');
+        del_empty_dir(root_path() . 'web/src/lang/pages/zh-cn');
+    }
+
+}

+ 8 - 0
modules/department/info.ini

@@ -0,0 +1,8 @@
+uid = department
+title = 部门岗位管理
+intro = 为您的后台增加部门岗位管理功能
+author = jsjxsz
+authorid = 16
+website = https://www.jsjxsz.cn
+version = 1.0.2
+state = 1

+ 100 - 0
modules/notice/Notice.php

@@ -0,0 +1,100 @@
+<?php
+
+namespace modules\notice;
+
+use app\common\library\Menu;
+use app\admin\model\MenuRule;
+use ba\module\moduleException;
+use ba\module\Server;
+use FilesystemIterator;
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use think\Exception;
+
+class Notice
+{
+    private $uid = 'notice';
+
+    public function install()
+    {
+        $pMenu = MenuRule::where('name', 'routine')->value('id');
+        $menu  = [
+            [
+                'type'      => 'menu',
+                'title'     => '通知公告管理',
+                'name'      => 'routine/notice',
+                'path'      => 'routine/notice',
+                'icon'      => 'el-icon-ChatLineRound',
+                'menu_type' => 'tab',
+                'component' => '/src/views/backend/routine/notice/index.vue',
+                'keepalive' => '1',
+                'pid'       => $pMenu ? $pMenu : 0,
+                'children'  => [
+                    ['type' => 'button', 'title' => '查看', 'name' => 'routine/notice/index'],
+                    ['type' => 'button', 'title' => '添加', 'name' => 'routine/notice/add'],
+                    ['type' => 'button', 'title' => '编辑', 'name' => 'routine/notice/edit'],
+                    ['type' => 'button', 'title' => '删除', 'name' => 'routine/notice/del'],
+                    ['type' => 'button', 'title' => '快速排序', 'name' => 'routine/notice/sortable'],
+                ],
+            ]
+        ];
+        Menu::create($menu);
+    }
+
+    public function uninstall()
+    {
+        Menu::delete('routine/notice', true);
+    }
+
+    public function enable()
+    {
+        Menu::enable('routine/notice');
+    }
+
+    public function disable()
+    {
+        Menu::disable('routine/notice');
+    }
+
+    public function update()
+    {
+        // 兼容系统v1.1.2的语言包按需加载
+        // 寻找安装时备份中的lang/pages文件,如果有,还原到lang/backend内而不是原位置
+        $ebakDir = root_path() . 'modules' . DIRECTORY_SEPARATOR . 'ebak' . DIRECTORY_SEPARATOR;
+        $zipFile = $ebakDir . $this->uid . '-install.zip';
+        $zipDir  = false;
+        if (is_file($zipFile)) {
+            try {
+                $zipDir = Server::unzip($zipFile);
+            } catch (moduleException|Exception $e) {
+                // skip
+            }
+        }
+        if ($zipDir) {
+            $oldBaInputs = [
+                path_transform('web\src\lang\pages\zh-cn\routine\notice.ts'),
+                path_transform('web\src\lang\pages\en\routine\notice.ts')
+            ];
+            foreach ($oldBaInputs as $oldBaInput) {
+                @unlink(root_path() . $oldBaInput);
+            }
+
+            foreach (
+                $iterator = new RecursiveIteratorIterator(
+                    new RecursiveDirectoryIterator($zipDir, FilesystemIterator::SKIP_DOTS),
+                    RecursiveIteratorIterator::SELF_FIRST
+                ) as $item
+            ) {
+                $ebakFile = path_transform($iterator->getSubPathName());
+                if (!$item->isDir() && in_array($ebakFile, $oldBaInputs)) {
+                    $newFileName = str_replace(DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR . 'backend' . DIRECTORY_SEPARATOR, $ebakFile);
+                    copy($item, root_path() . $newFileName);
+                }
+            }
+        }
+        deldir($zipDir);
+        del_empty_dir(root_path() . 'web/src/lang/pages/en');
+        del_empty_dir(root_path() . 'web/src/lang/pages/zh-cn');
+    }
+
+}

+ 8 - 0
modules/notice/info.ini

@@ -0,0 +1,8 @@
+uid = notice
+title = 公告通知管理
+intro = 为您的后台增加公告通知管理功能
+author = 妙码生花
+authorid = 1
+website = https://www.buildadmin.com
+version = 1.0.2
+state = 1

+ 129 - 0
modules/qiniu/Qiniu.php

@@ -0,0 +1,129 @@
+<?php
+
+namespace modules\qiniu;
+
+use ba\module\moduleException;
+use ba\module\Server;
+use ba\Version;
+use FilesystemIterator;
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use think\App;
+use Qiniu\Auth;
+use think\Exception;
+use think\facade\Cache;
+use think\facade\Event;
+use app\common\model\Config;
+use app\common\model\Attachment;
+
+class Qiniu
+{
+    private $uid = 'qiniu';
+
+    public function AppInit()
+    {
+        // 上传配置初始化
+        Event::listen('uploadConfigInit', function (App $app) {
+            $uploadConfig = get_sys_config('', 'upload');
+            if ($uploadConfig['upload_mode'] == 'qiniu') {
+                $auth                 = new Auth($uploadConfig['upload_access_key'], $uploadConfig['upload_secret_key']);
+                $upToken              = $auth->uploadToken($uploadConfig['upload_bucket']);
+                $app->request->upload = [
+                    'cdn'    => $uploadConfig['upload_cdn_url'],
+                    'mode'   => $uploadConfig['upload_mode'],
+                    'url'    => $uploadConfig['upload_url'],
+                    'params' => [
+                        'token' => $upToken,
+                    ]
+                ];
+            }
+        });
+
+        // 附件管理中删除了文件
+        Event::listen('AttachmentDel', function (Attachment $attachment) {
+            if ($attachment->storage != 'qiniu') {
+                return true;
+            }
+            $uploadConfig = get_sys_config('', 'upload');
+            if (!$uploadConfig['upload_access_key'] || !$uploadConfig['upload_secret_key'] || !$uploadConfig['upload_bucket']) {
+                return true;
+            }
+            $auth          = new Auth($uploadConfig['upload_access_key'], $uploadConfig['upload_secret_key']);
+            $config        = new \Qiniu\Config();
+            $bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
+            $url           = str_replace(full_url(), '', ltrim($attachment->url, '/'));
+            $bucketManager->delete($uploadConfig['upload_bucket'], $url);
+            return true;
+        });
+    }
+
+    public function enable()
+    {
+        Config::addConfigGroup('upload', '上传配置');
+        if (!Config::where('name', 'upload_mode')->value('id')) {
+            // 配置数据曾在禁用时被删除
+            Server::importSql(root_path() . 'modules' . DIRECTORY_SEPARATOR . $this->uid . DIRECTORY_SEPARATOR);
+        }
+
+        // 恢复缓存中的配置数据
+        if (Version::compare('v1.1.0', \think\facade\Config::get('buildadmin.version'))) {
+            $config = Cache::pull($this->uid . '-module-config');
+            if ($config) {
+                $config = json_decode($config, true);
+                foreach ($config as $item) {
+                    Config::where('name', $item['name'])->update([
+                        'value' => $item['value']
+                    ]);
+                }
+            }
+        }
+    }
+
+    public function disable()
+    {
+        $config = Config::whereIn('name', ['upload_mode', 'upload_bucket', 'upload_access_key', 'upload_secret_key', 'upload_url', 'upload_cdn_url'])->select();
+        // 备份配置到缓存
+        if (Version::compare('v1.1.0', \think\facade\Config::get('buildadmin.version'))) {
+            if (!$config->isEmpty()) {
+                $configData = $config->toArray();
+                Cache::set($this->uid . '-module-config', json_encode($configData), 3600);
+            }
+        }
+        foreach ($config as $item) {
+            $item->delete();
+        }
+        Config::removeConfigGroup('upload');
+    }
+
+    public function update()
+    {
+        // 兼容系统v1.1.2
+        // 寻找安装时备份中的baInput.ts文件,如果有,还原到mixins内
+        $ebakDir = root_path() . 'modules' . DIRECTORY_SEPARATOR . 'ebak' . DIRECTORY_SEPARATOR;
+        $zipFile = $ebakDir . $this->uid . '-install.zip';
+        $zipDir  = false;
+        if (is_file($zipFile)) {
+            try {
+                $zipDir = Server::unzip($zipFile);
+            } catch (moduleException|Exception $e) {
+                // skip
+            }
+        }
+        if ($zipDir) {
+            $oldBaInput = path_transform('web\src\components\baInput\components\baUpload.ts');
+            @unlink(root_path() . $oldBaInput);
+            foreach (
+                $iterator = new RecursiveIteratorIterator(
+                    new RecursiveDirectoryIterator($zipDir, FilesystemIterator::SKIP_DOTS),
+                    RecursiveIteratorIterator::SELF_FIRST
+                ) as $item
+            ) {
+                $ebakFile = path_transform($iterator->getSubPathName());
+                if (!$item->isDir() && $ebakFile == $oldBaInput) {
+                    copy($item, path_transform(root_path() . 'web/src/components/mixins/baUpload.ts'));
+                }
+            }
+        }
+        deldir($zipDir);
+    }
+}

+ 8 - 0
modules/qiniu/info.ini

@@ -0,0 +1,8 @@
+uid = qiniu
+title = 七牛云存储
+intro = 本模块为系统提供文件上传到七牛云存储的功能
+author = 妙码生花
+authorid = 1
+website = https://www.buildadmin.com
+version = 1.0.2
+state = 1

+ 216 - 0
modules/sms/Sms.php

@@ -0,0 +1,216 @@
+<?php
+
+namespace modules\sms;
+
+use ba\module\moduleException;
+use ba\module\Server;
+use ba\Version;
+use FilesystemIterator;
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use think\Exception;
+use think\facade\Cache;
+use think\facade\Db;
+use think\facade\Event;
+use think\facade\Validate;
+use app\common\model\Config;
+use app\common\library\Menu;
+use Overtrue\EasySms\EasySms;
+use modules\sms\library\Helper;
+use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;
+
+class Sms
+{
+    private $uid = 'sms';
+
+    public static function send($templateCode, $mobile, $tplVar = []): bool
+    {
+        // 环境检查
+        if (!extension_loaded('curl')) {
+            throw new Exception('Please install curl extension');
+        }
+        if (!ini_get('curl.cainfo')) {
+            throw new Exception('Please configure curl.cainfo in the php.ini file');
+        }
+
+        // 数据检查
+        $validate = Validate::rule(['mobile' => 'require|mobile'])->message(['mobile' => 'Mobile format error']);
+        if (!$validate->check(['mobile' => $mobile])) {
+            throw new Exception($validate->getError());
+        }
+        $templateData = Db::name('sms_template')
+            ->where('code', $templateCode)
+            ->where('status', 1)
+            ->find();
+        if (!$templateData) {
+            throw new Exception('SMS template does not exist');
+        }
+        if (!$templateData['template'] && !$templateData['content']) {
+            throw new Exception('SMS template error');
+        }
+
+        // 配置检查
+        $config = config('sms');
+        if (!is_array($config['default']['gateways']) || count($config['default']['gateways']) <= 0) {
+            throw new Exception('Please configure available service providers for SMS sending');
+        }
+
+        // 解析模板
+        $template = Helper::analysisVariable($templateData['content'], $templateData['variables'], $tplVar);
+        Event::trigger('TemplateAnalysisAfter', $template);
+
+        try {
+            $easySms = new EasySms($config);
+            $res     = $easySms->send($mobile, [
+                'template' => $templateData['template'],
+                'content'  => $template['content'],
+                'data'     => $template['variables'],
+            ]);
+        } catch (NoGatewayAvailableException $e) {
+            throw new Exception($e->getLastException()->getMessage());
+        }
+        return true;
+    }
+
+    public function install()
+    {
+        $menu = [
+            [
+                'type'      => 'menu_dir',
+                'title'     => '短信管理',
+                'name'      => 'sms',
+                'path'      => 'sms',
+                'icon'      => 'el-icon-ChatLineRound',
+                'menu_type' => 'tab',
+                'children'  => [
+                    [
+                        'type'      => 'menu',
+                        'title'     => '短信配置',
+                        'name'      => 'sms/config',
+                        'path'      => 'sms/config',
+                        'icon'      => 'el-icon-Setting',
+                        'menu_type' => 'tab',
+                        'component' => '/src/views/backend/sms/config.vue',
+                        'keepalive' => '1',
+                        'children'  => [
+                            ['type' => 'button', 'title' => '查看', 'name' => 'sms/config/getConfigKey'],
+                            ['type' => 'button', 'title' => '修改配置', 'name' => 'sms/config/saveConfig'],
+                        ]
+                    ],
+                    [
+                        'type'      => 'menu',
+                        'title'     => '模板变量管理',
+                        'name'      => 'sms/variable',
+                        'path'      => 'sms/variable',
+                        'icon'      => 'fa fa-asterisk',
+                        'menu_type' => 'tab',
+                        'component' => '/src/views/backend/sms/variable/index.vue',
+                        'keepalive' => '1',
+                        'children'  => [
+                            ['type' => 'button', 'title' => '查看', 'name' => 'sms/variable/index'],
+                            ['type' => 'button', 'title' => '添加', 'name' => 'sms/variable/add'],
+                            ['type' => 'button', 'title' => '编辑', 'name' => 'sms/variable/edit'],
+                            ['type' => 'button', 'title' => '删除', 'name' => 'sms/variable/del'],
+                        ]
+                    ],
+                    [
+                        'type'      => 'menu',
+                        'title'     => '短信模板管理',
+                        'name'      => 'sms/template',
+                        'path'      => 'sms/template',
+                        'icon'      => 'el-icon-Document',
+                        'menu_type' => 'tab',
+                        'component' => '/src/views/backend/sms/template/index.vue',
+                        'keepalive' => '1',
+                        'remark'    => '不同服务商可能需要不同的模板ID,所以单个模板并不一定适用于所有服务商,若有轮询服务商发送的需求,多数情况需自行通过代码实现',
+                        'children'  => [
+                            ['type' => 'button', 'title' => '查看', 'name' => 'sms/template/index'],
+                            ['type' => 'button', 'title' => '添加', 'name' => 'sms/template/add'],
+                            ['type' => 'button', 'title' => '编辑', 'name' => 'sms/template/edit'],
+                            ['type' => 'button', 'title' => '删除', 'name' => 'sms/template/del'],
+                        ]
+                    ]
+                ]
+            ]
+        ];
+        Menu::create($menu);
+    }
+
+    public function uninstall()
+    {
+        Menu::delete('sms', true);
+    }
+
+    public function enable()
+    {
+        Menu::enable('sms');
+        Config::addQuickEntrance('短信配置', '/admin/sms/config');
+
+        // 恢复短信配置
+        if (Version::compare('v1.1.0', \think\facade\Config::get('buildadmin.version'))) {
+            $config = Cache::pull('sms-module-config');
+            if ($config) {
+                @file_put_contents(config_path() . 'sms.php', $config);
+            }
+        }
+    }
+
+    public function disable()
+    {
+        Menu::disable('sms');
+        Config::removeQuickEntrance('短信配置');
+
+        // 备份短信配置
+        if (Version::compare('v1.1.0', \think\facade\Config::get('buildadmin.version'))) {
+            $config = @file_get_contents(config_path() . 'sms.php');
+            if ($config) {
+                Cache::set('sms-module-config', $config, 3600);
+            }
+        }
+    }
+
+    public function update()
+    {
+        // 兼容系统v1.1.2的语言包按需加载
+        // 寻找安装时备份中的lang/pages文件,如果有,还原到lang/backend内而不是原位置
+        $ebakDir = root_path() . 'modules' . DIRECTORY_SEPARATOR . 'ebak' . DIRECTORY_SEPARATOR;
+        $zipFile = $ebakDir . $this->uid . '-install.zip';
+        $zipDir  = false;
+        if (is_file($zipFile)) {
+            try {
+                $zipDir = Server::unzip($zipFile);
+            } catch (moduleException|Exception $e) {
+                // skip
+            }
+        }
+        if ($zipDir) {
+            $oldBaInputs = [
+                path_transform('web\src\lang\pages\zh-cn\sms\config.ts'),
+                path_transform('web\src\lang\pages\en\sms\config.ts'),
+                path_transform('web\src\lang\pages\zh-cn\sms\template.ts'),
+                path_transform('web\src\lang\pages\en\sms\template.ts'),
+                path_transform('web\src\lang\pages\zh-cn\sms\variable.ts'),
+                path_transform('web\src\lang\pages\en\sms\variable.ts'),
+            ];
+            foreach ($oldBaInputs as $oldBaInput) {
+                @unlink(root_path() . $oldBaInput);
+            }
+
+            foreach (
+                $iterator = new RecursiveIteratorIterator(
+                    new RecursiveDirectoryIterator($zipDir, FilesystemIterator::SKIP_DOTS),
+                    RecursiveIteratorIterator::SELF_FIRST
+                ) as $item
+            ) {
+                $ebakFile = path_transform($iterator->getSubPathName());
+                if (!$item->isDir() && in_array($ebakFile, $oldBaInputs)) {
+                    $newFileName = str_replace(DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR . 'backend' . DIRECTORY_SEPARATOR, $ebakFile);
+                    copy($item, root_path() . $newFileName);
+                }
+            }
+        }
+        deldir($zipDir);
+        del_empty_dir(root_path() . 'web/src/lang/pages/en');
+        del_empty_dir(root_path() . 'web/src/lang/pages/zh-cn');
+    }
+}

+ 8 - 0
modules/sms/info.ini

@@ -0,0 +1,8 @@
+uid = sms
+title = 短信模块
+intro = 提供发送短信的功能,支持多场景,多厂商
+author = 妙码生花
+authorid = 1
+website = https://www.buildadmin.com
+version = 1.0.4
+state = 1

+ 125 - 0
modules/sms/library/Helper.php

@@ -0,0 +1,125 @@
+<?php
+
+namespace modules\sms\library;
+
+use ba\Random;
+use app\admin\model\sms\Variable;
+use think\db\exception\PDOException;
+use think\facade\Db;
+
+class Helper
+{
+    public static function calcVar($id)
+    {
+        $varData = Variable::where('id', $id)->find()->toArray();
+        if (!$varData) return '';
+        if ($varData['value_source'] == 'literal') {
+            return $varData['value'];
+        } elseif ($varData['value_source'] == 'func') {
+            $class = '\\' . $varData['namespace'] . '\\' . $varData['class'];
+            if (!class_exists($class)) return '';
+            if (!method_exists($class, $varData['func'])) return '';
+            $handle = new $class();
+            return $handle->{$varData['func']}($varData['param']);
+        } elseif ($varData['value_source'] == 'sql') {
+            $sql = str_replace('__PREFIX__', config('database.connections.mysql.prefix'), $varData['sql']);
+            try {
+                $res = Db::query($sql);
+            } catch (PDOException $e) {
+                // return $e->getMessage();
+                return '';
+            }
+            if ($res) {
+                if (is_array($res[0])) {
+                    foreach ($res[0] as $value) {
+                        return $value;
+                    }
+                } else {
+                    return $res[0];
+                }
+            }
+        }
+        return '';
+    }
+
+    public static function numeric(int $len = 6)
+    {
+        return Random::build('numeric', $len);
+    }
+
+    public static function alnum(int $len = 6)
+    {
+        return Random::build('alnum', $len);
+    }
+
+    /**
+     * 分析字符串中的自定义变量
+     * @param string $content     要分析的字符串
+     * @param string $variableIds 要分析的变量ID数组
+     * @param array  $tplVar      动态传递新的变量值
+     * @return array 解析过变量的模板以及用到的变量数组
+     */
+    public static function analysisVariable(string $content, string $variableIds, array $tplVar = []): array
+    {
+        if (!$content && !$variableIds) {
+            return [
+                'content'   => '',
+                'variables' => [],
+            ];
+        }
+
+        // 读取数据库中的模板变量
+        $allVariable = []; // 全部变量
+        $useVariable = []; // 使用到的变量
+        $variableTmp = Db::name('sms_variable')->where('status', 1)->select();
+        $variables   = explode(',', $variableIds); // 要分析的变量数组
+        foreach ($variableTmp as $value) {
+            $varName = $value['name'];
+            // 是需要分析的变量
+            if (in_array($value['id'], $variables)) {
+                $value['type'] = 'definition_now';// 标记为现在定义
+                if (array_key_exists($varName, $tplVar)) {
+                    $value['value'] = $tplVar[$varName];
+                } else {
+                    $value['value'] = self::calcVar($value['id']);
+                }
+                $useVariable[$varName] = $value['value'];
+                $allVariable[$varName] = $value;
+                continue;
+            }
+
+            $value['type']         = 'predefined';// 标记为预定义
+            $allVariable[$varName] = $value;
+        }
+        unset($variableTmp);
+
+        // 准备传递过来的模板变量
+        foreach ($tplVar as $key => $value) {
+            $allVariable[$key] = [
+                'type'  => 'definition_now',// 标记为现在定义
+                'value' => $value,
+            ];
+        }
+
+        $match = [];
+        preg_match_all('/\${(.*?)}/', $content, $match);// 匹配到所有变量
+
+        foreach ($match[1] as $key => $value) {
+            if (array_key_exists($value, $allVariable)) {
+                if ($allVariable[$value]['type'] == 'definition_now') {
+                    $content             = str_replace($match[0][$key], $allVariable[$value]['value'], $content);
+                    $useVariable[$value] = $allVariable[$value]['value'];
+                } else if ($allVariable[$value]['type'] == 'predefined') {
+                    $variableValue       = self::calcVar($allVariable[$value]['id']);
+                    $content             = str_replace($match[0][$key], $variableValue, $content);
+                    $useVariable[$value] = $variableValue;
+                }
+            }
+        }
+
+        return [
+            'content'   => $content,
+            'variables' => $useVariable,
+        ];
+    }
+}

+ 8 - 0
modules/wangeditor/info.ini

@@ -0,0 +1,8 @@
+uid = wangeditor
+title = wangEditor富文本编辑器
+intro = 本模块为系统添加wangEditor富文本编辑器
+author = 妙码生花
+authorid = 1
+website = https://www.buildadmin.com
+version = 1.0.1
+state = 1

+ 1 - 0
public/assets/401-e9d97ddd.js

@@ -0,0 +1 @@
+import{_ as l}from"./index-ba596ae9.js";import{l as d,o as s,V as a,q as o,N as t,t as n,p as i,W as u,X as f,Y as v}from"./vue-a39e6937.js";const g={},m=e=>(f("data-v-b6724a97"),e=e(),v(),e),b={class:"page"},h={class:"container"},k=m(()=>s("div",{class:"fbi"},"401 WARNING",-1)),N={class:"warning"},y={class:"page-footer"};function I(e,_){const c=n("router-link"),r=n("el-button"),p=n("el-button-group");return i(),d("div",b,[s("div",h,[k,s("div",N,a(e.$t("401.noPowerTip")),1),s("div",y,[o(p,null,{default:t(()=>[o(r,{size:"large",type:"info"},{default:t(()=>[o(c,{class:"stopcode-a",to:"/"},{default:t(()=>[u(a(e.$t("404.Return to home page")),1)]),_:1})]),_:1}),o(r,{size:"large",type:"info"},{default:t(()=>[o(c,{class:"stopcode-a",to:""},{default:t(()=>[s("span",{onClick:_[0]||(_[0]=$=>e.$router.back())},a(e.$t("404.Back to previous page")),1)]),_:1})]),_:1})]),_:1})])])])}const S=l(g,[["render",I],["__scopeId","data-v-b6724a97"]]);export{S as default};

+ 1 - 0
public/assets/404-c253b4de.js

@@ -0,0 +1 @@
+import{h as v,y as h,B as f,_ as g,l as k,o as e,V as t,W as c,q as l,N as _,t as b,X as $,Y as B,p as w,a5 as y}from"./vue-a39e6937.js";import{_ as C}from"./index-ba596ae9.js";const I="/assets/qr-de3b60c2.png",p=o=>($("data-v-8be15c25"),o=o(),B(),o),M={class:"page"},N={class:"container"},S=p(()=>e("div",{class:"font-h1"},":(",-1)),V={class:"tip"},q={class:"complete"},R={class:"percentage"},T={class:"details"},x=p(()=>e("div",{class:"qr-image"},[e("img",{src:I,alt:"QR Code"})],-1)),W={class:"stopcode"},D={class:"stopcode-text"},E={class:"stopcode-text"},Q=v({__name:"404",setup(o){const u=y(),a=h(0);var n=null;function m(){a.value+=Math.floor(Math.random()*50),a.value>=100?(a.value=100,u.back()):i()}function i(){n=setTimeout(m,Math.random()*(1e3-500)+500)}return f(()=>{i()}),g(()=>{clearTimeout(n)}),(s,r)=>{const d=b("router-link");return w(),k("div",M,[e("div",N,[S,e("div",V,t(s.$t("404.problems tip")),1),e("div",q,[c(t(s.$t("complete"))+" ",1),e("span",R,t(a.value),1),c("% ")]),e("div",T,[x,e("div",W,[e("div",D,t(s.$t("404.We will automatically return to the previous page when we are finished")),1),e("div",E,[l(d,{class:"stopcode-a",to:""},{default:_(()=>[e("span",{onClick:r[0]||(r[0]=U=>s.$router.back())},t(s.$t("404.Back to previous page")),1)]),_:1}),l(d,{class:"stopcode-a",to:"/"},{default:_(()=>[c(t(s.$t("404.Return to home page")),1)]),_:1})])])])])])}}});const j=C(Q,[["__scopeId","data-v-8be15c25"]]);export{j as default};

+ 1 - 0
public/assets/add-b8118f3d.js

@@ -0,0 +1 @@
+import{_ as o}from"./add.vue_vue_type_script_setup_true_lang-7e2aaee1.js";import"./vue-a39e6937.js";import"./index-f0d8af94.js";import"./index-434d719f.js";import"./index-ba596ae9.js";import"./controllerUrls-941681c3.js";import"./index-7e56a0fa.js";import"./validate-4ecec794.js";export{o as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/add.vue_vue_type_script_setup_true_lang-7e2aaee1.js


+ 1 - 0
public/assets/admin-0fe9dec0.js

@@ -0,0 +1 @@
+const a={username:"Username",nickname:"Nickname",grouping:"Grouping","head portrait":"Profile picture",mailbox:"Mailbox",mobile:"Mobile Number","Last login":"Last login",Password:"Password","Please leave blank if not modified":"Please leave blank if you do not modify.","Personal signature":"Personal Signature","Administrator login":"Administrator Login Name"};export{a as default};

+ 1 - 0
public/assets/admin-f063a068.js

@@ -0,0 +1 @@
+const a={username:"用户名",nickname:"昵称",grouping:"分组","head portrait":"头像",mailbox:"邮箱",mobile:"手机号","Last login":"最后登录",Password:"密码","Please leave blank if not modified":"不修改请留空","Personal signature":"个性签名","Administrator login":"管理员登录名"};export{a as default};

+ 1 - 0
public/assets/adminInfo-7e4b4bc8.js

@@ -0,0 +1 @@
+const e={"Last logged in on":"Last logged on","user name":"Username","User nickname":"User nickname","Please enter a nickname":"Please enter a nickname","e-mail address":"E-mail address","phone number":"Mobile number",autograph:"Signature","This guy is lazy and doesn write anything":"This guy is lazy and didn't write anything.","New password":"New password","Please leave blank if not modified":"Please leave blank if you do not modify","Save changes":"Save changes","Operation log":"Operation log"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/adminInfo-9e20d1e4.js


+ 1 - 0
public/assets/adminInfo-cd060f4e.js

@@ -0,0 +1 @@
+const e={"Last logged in on":"上次登录于","user name":"用户名","User nickname":"用户昵称","Please enter a nickname":"请输入昵称","e-mail address":"邮箱地址","phone number":"手机号码",autograph:"签名","This guy is lazy and doesn write anything":"这家伙很懒,什么也没写","New password":"新密码","Please leave blank if not modified":"不修改请留空","Save changes":"保存修改","Operation log":"操作日志"};export{e as default};

+ 1 - 0
public/assets/adminLog-08891d2a.js

@@ -0,0 +1 @@
+const e={admin_id:"管理ID",username:"管理用户名",title:"标题",data:"请求数据",url:"URL",ip:"IP",useragent:"UserAgent",createtime:"创建时间","Operation administrator":"操作管理员","Operator IP":"操作人IP","Request data":"请求数据"};export{e as default};

+ 1 - 0
public/assets/adminLog-668b61cd.js

@@ -0,0 +1 @@
+const a={admin_id:"Manage ID",username:"Manage Username",title:"Title",data:"Request Data",url:"URL",ip:"IP",useragent:"UserAgent",createtime:"Creation Time","Operation administrator":"Operation administrator","Operator IP":"Operator IP","Request data":"Request Data"};export{a as default};

+ 1 - 0
public/assets/attachment-4d39873b.js

@@ -0,0 +1 @@
+const e={"Upload administrator":"Upload administrator","Upload user":"Upload member","Storage mode":"Storage mode","Physical path":"Physical path","image width":"Picture width","Picture height":"Picture height","file size":"file size","mime type":"mime type ","SHA1 code":"SHA1","The file is saved in the directory, and the file will not be automatically transferred if the record is modified":"The file had saved in the directory, and the modification record will not automatically tansfer the file.","File saving path Modifying records will not automatically transfer files":"The file had saved in the path, and the modification record will not automatically tansfer the file.","Width of picture file":"The width of the image file.","Height of picture file":"The height of the image file.","Original file name":"Original name of the file","File size (bytes)":"File size (Bytes)","File MIME type":"File MIME type","Upload (Reference) times of this file":"Upload (Reference) times of this file","When the same file is uploaded multiple times, only one attachment record will be saved and added":"When the same file is uploaded many times, only one attachment record will be saved and added.","SHA1 encoding of file":"The SHA1 encoding of file","Files and records will be deleted at the same time Are you sure?":"Files and records will be deleted at the same time Are you sure?"};export{e as default};

+ 1 - 0
public/assets/attachment-9340cffd.js

@@ -0,0 +1 @@
+const e={"Upload administrator":"上传管理员","Upload user":"上传会员","Storage mode":"存储方式","Physical path":"物理路径","image width":"图片宽度","Picture height":"图片高度","file size":"文件大小","mime type":"mime类型","SHA1 code":"sha1","The file is saved in the directory, and the file will not be automatically transferred if the record is modified":"文件保存目录,修改记录不会自动转移文件","File saving path Modifying records will not automatically transfer files":"文件保存路径,修改记录不会自动转移文件","Width of picture file":"图片文件的宽度","Height of picture file":"图片文件的高度","Original file name":"文件原始名称","File size (bytes)":"文件大小(bytes)","File MIME type":"文件mime类型","Upload (Reference) times of this file":"此文件的上传(引用)次数","When the same file is uploaded multiple times, only one attachment record will be saved and added":"同一文件被多次上传时,只会保存一份和增加一条附件记录","SHA1 encoding of file":"文件的sha1编码","Files and records will be deleted at the same time Are you sure?":"将同时删除文件和记录,确认吗?"};export{e as default};

+ 1 - 0
public/assets/avatar-520fefc6.js

@@ -0,0 +1 @@
+const A="/assets/login-header-2b702f97.png",g="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADABAMAAACg8nE0AAAAD1BMVEXBy9eGlqeTorG9yNSptcPYN5ilAAABVElEQVR42u3Y3Y2DMBAEYBNfAR6gANIBdHDpv6m7h9OtorAWMp6IjeYrgGHX/NibRERERERERETEs+HXlFjwLzHcALOk7gY8KZT7Z9YAQ1mHB17MhAXgLQN2EQpglQBwS/iC45vQIUqP4CK9xGYhdIjQI1SECLihYuEsgSkRAlClgDcEZFStnIfIFAUoQAERAjKq1ut/7BRwgZ9+PSDCxiv+3rS6fY9xAElwRTkE+sfYKAdxd5QQZxjijHMiDaT2mhRtKLg71ow1mPVHy4GG4yIi0kP++/VPa+ov3/Fk7BuyYceUernDMfa7PC9iAKjjFhzAOiKb5XR7SG164LC5w9NTN5Lu38yk/pvScH1iQoaj1wASTQgNam0SGjUUwCkBzQ4XwC0BJ1wiYAC4PdpwwkTqkLlAQMYpK2eNTVGAAhSgAAUoQAEKUIACFKAABShAAZ8c8AO1HXS7nTcqUQAAAABJRU5ErkJggg==";export{A as _,g as a};

File diff suppressed because it is too large
+ 0 - 0
public/assets/baAccount-1c1dfc9e.js


+ 1 - 0
public/assets/balance-181867a9.js

@@ -0,0 +1 @@
+const a={"Change time":"变更时间","Current balance":"当前余额","Balance after change":"变更后余额","Balance change record":"余额变更记录"};export{a as default};

+ 1 - 0
public/assets/balance-2d62616b.js

@@ -0,0 +1 @@
+import{n as C,a as k,a1 as z,a9 as B,_ as S}from"./index-ba596ae9.js";import{h as P,r as $,B as w,t as l,a7 as L,p as t,l as s,q as g,N as d,o as c,V as n,k as i,a6 as D,T as I,U as M,M as N}from"./vue-a39e6937.js";const T={class:"user-views"},V={class:"card-header"},j={class:"right-title"},F={class:"logs"},U={class:"log-title"},q={key:0,class:"log-change-amount increase"},x={key:1,class:"log-change-amount reduce"},E={class:"log-after"},A={class:"log-change-time"},G={key:0,class:"log-footer"},H=P({__name:"balance",setup(J){const _=C(),u=k(),e=$({logs:[],currentPage:1,total:0,pageSize:10,pageLoading:!0}),p=a=>{e.pageSize=a,r()},h=a=>{e.currentPage=a,r()},r=()=>{B(e.currentPage,e.pageSize).then(a=>{e.pageLoading=!1,e.logs=a.data.list,e.total=a.data.total})};return w(()=>{r()}),(a,K)=>{const m=l("el-pagination"),v=l("el-empty"),y=l("el-card"),f=L("loading");return t(),s("div",T,[g(y,{class:"user-views-card",shadow:"hover"},{header:d(()=>[c("div",V,[c("span",null,n(a.$t("user.account.balance.Balance change record")),1),c("span",j,n(a.$t("user.account.balance.Current balance")+" "+i(_).money),1)])]),default:d(()=>[D((t(),s("div",F,[(t(!0),s(I,null,M(e.logs,(o,b)=>(t(),s("div",{class:"log-item",key:b},[c("div",U,n(o.memo),1),o.money>0?(t(),s("div",q,n(a.$t("Balance")+":+"+o.money),1)):(t(),s("div",x,n(a.$t("Balance")+":"+o.money),1)),c("div",E,n(a.$t("user.account.balance.Balance after change")+":"+o.after),1),c("div",A,n(a.$t("user.account.balance.Change time")+":"+i(z)(o.createtime)),1)]))),128))])),[[f,e.pageLoading]]),e.total>0?(t(),s("div",G,[g(m,{currentPage:e.currentPage,"page-size":e.pageSize,"page-sizes":[10,20,50,100],background:"",layout:i(u).state.shrink?"prev, next, jumper":"sizes, ->, prev, pager, next, jumper",total:e.total,onSizeChange:p,onCurrentChange:h},null,8,["currentPage","page-size","layout","total"])])):(t(),N(v,{key:1}))]),_:1})])}}});const R=S(H,[["__scopeId","data-v-70827780"]]);export{R as default};

+ 1 - 0
public/assets/balance-bc0b7359.js

@@ -0,0 +1 @@
+const a={"Change time":"Change time","Current balance":"Current balance","Balance after change":"Balance after change","Balance change record":"Balance change record"};export{a as default};

BIN
public/assets/bg-95f82371.jpg


+ 1 - 0
public/assets/budget-6612bb40.js

@@ -0,0 +1 @@
+const t={id:"id",name:"name",weigh:"weigh",status:"status","status 0":"status 0","status 1":"status 1",admin_id:"admin_id",admin__username:"username",create_time:"create_time",update_time:"update_time","quick Search Fields":"id"};export{t as default};

+ 1 - 0
public/assets/budget-69cf6f65.js

@@ -0,0 +1 @@
+const e={id:"ID",name:"活动预算",weigh:"权重",status:"状态","status 0":"禁用","status 1":"启用",admin_id:"创建人",admin__username:"用户名",create_time:"创建时间",update_time:"修改时间","quick Search Fields":"ID"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/buy-5684eff5.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/changePassword-41b07ea2.js


+ 1 - 0
public/assets/changePassword-b77f0d51.js

@@ -0,0 +1 @@
+const s={"Change Password":"修改密码","Old password":"旧密码","New password":"新密码","Confirm new password":"确认新密码","Please enter your current password":"请输入现在的密码","The duplicate password does not match the new password":"重复密码与新密码不相符"};export{s as default};

+ 1 - 0
public/assets/changePassword-d9665588.js

@@ -0,0 +1 @@
+const s={"Change Password":"Change Password","Old password":"Old password","New password":"New password","Confirm new password":"Confirm new password","Please enter your current password":"Please enter your current password","The duplicate password does not match the new password":"The duplicate password does not match the new password"};export{s as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/coffee-d68d7748.svg


+ 1 - 0
public/assets/commonDialog-9adf7239.js

@@ -0,0 +1 @@
+import{s as o}from"./store-5ff6cbac.js";import f from"./installConflict-4c56531b.js";import g from"./commonDone-8e26d3b4.js";import C from"./uploadInstall-8482d260.js";import k from"./confirmFileConflict-f55d2a2b.js";import{h as y,p as t,l as a,q as i,N as c,k as e,a6 as v,a4 as l,M as m,t as s,a7 as x}from"./vue-a39e6937.js";import{_ as D}from"./index-ba596ae9.js";import"./index-0ec044bf.js";import"./index-f0d8af94.js";import"./index-434d719f.js";import"./controllerUrls-941681c3.js";import"./index-7e56a0fa.js";const h=["element-loading-text"],I=y({__name:"commonDialog",setup(V){return(r,n)=>{const d=s("el-scrollbar"),p=s("el-dialog"),_=x("loading");return t(),a("div",null,[i(p,{"close-on-press-escape":e(o).common.quickClose,title:e(o).common.dialogTitle,"close-on-click-modal":e(o).common.quickClose,modelValue:e(o).dialog.common,"onUpdate:modelValue":n[0]||(n[0]=u=>e(o).dialog.common=u),class:"common-dialog"},{default:c(()=>[i(d,{height:500},{default:c(()=>[e(o).common.type=="loading"?v((t(),a("div",{"element-loading-text":e(o).common.loadingTitle?r.$t("module.stateTitle "+e(o).common.loadingTitle):"",key:e(o).common.loadingComponentKey,class:"common-loading"},null,8,h)),[[_,!0]]):l("",!0),e(o).common.type=="InstallConflict"?(t(),m(f,{key:1})):l("",!0),e(o).common.type=="disableConfirmConflict"?(t(),m(k,{key:2})):l("",!0),e(o).common.type=="done"?(t(),m(g,{key:3})):l("",!0),e(o).common.type=="uploadInstall"?(t(),m(C,{key:4})):l("",!0)]),_:1})]),_:1},8,["close-on-press-escape","title","close-on-click-modal","modelValue"])])}}});const j=D(I,[["__scopeId","data-v-e271020e"]]);export{j as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/commonDone-8e26d3b4.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/config-1fc57787.js


+ 1 - 0
public/assets/config-34462342.js

@@ -0,0 +1 @@
+const e={"Are you sure to delete the configuration item?":"Are you sure to delete the configuration item?","Add configuration item":"Add configuration item","Quick configuration entry":"Quick configuration entry","Variable name":"Variable name","Variable grouping":"Variable grouping","Variable title":"Variable title","Variable type":"Variable type",number:"Number","Please enter the recipient email address":"Please enter the recipient email address","Test mail sending":"Test mail sending","send out":"send","Please enter the correct email address":"Please enter the correct email address",Sending:"Sending","Please enter the correct mail configuration":"Please enter the correct mail configuration"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/config-4f89ec8a.js


+ 1 - 0
public/assets/config-60a5c1b5.js

@@ -0,0 +1 @@
+const e={"common/sign_name":"sign name","common/signature":"signature","aliyun/access_key_id":"AccessKey ID","aliyun/access_key_secret":"AccessKey Secret","aliyun/placeholder/access_key_id":"AccessKey ID","aliyun/placeholder/access_key_secret":"AccessKey Secret","qcloud/sdk_app_id":"SDK APP ID","qcloud/secret_id":"SecretId","qcloud/secret_key":"SecretKey","qcloud/placeholder/sdk_app_id":"SDK APP ID","qcloud/placeholder/secret_id":"SecretId","qcloud/placeholder/secret_key":"SecretKey","qiniu/access_key":"AccessKey","qiniu/secret_key":"SecretKey","qiniu/placeholder/access_key":"AccessKey","qiniu/placeholder/secret_key":"SecretKey","yunpian/api_key":"APIKEY","yunpian/placeholder/api_key":"APIKEY","aliyunintl/access_key_id":"AccessKey ID","aliyunintl/access_key_secret":"AccessKey Secret","aliyunintl/placeholder/access_key_id":"AccessKey ID","aliyunintl/placeholder/access_key_secret":"AccessKey Secret",aliyun:"aliyun",qcloud:"qcloud",qiniu:"qiniu",yunpian:"yunpian",aliyunintl:"aliyunintl","The selected service provider needs to configure information at the bottom of this page (required)":"The selected service provider needs to configure information at the bottom of this page (required)","Basic SMS configuration":"Basic SMS configuration","Send timeout (seconds)":"Send timeout (seconds)","Send Policy":"Send Policy","Sequential service provider sends":"Sequential service provider sends","Sent with the service provider":"Sent with the service provider","Available service providers":"Available service providers","Service Provider Configuration":"Service Provider Configuration","Service provider":"Service provider","Select a service provider to start configuration":"Select a service provider to start configuration"};export{e as default};

+ 1 - 0
public/assets/config-e41052c9.js

@@ -0,0 +1 @@
+const e={"Are you sure to delete the configuration item?":"确定删除配置项吗?","Add configuration item":"添加配置项","Quick configuration entry":"快捷配置入口","Variable name":"变量名","Variable grouping":"变量分组","Variable title":"变量标题","Variable type":"变量类型",number:"数字","Please enter the recipient email address":"请输入接收者邮箱地址","Test mail sending":"测试邮件发送","send out":"发送","Please enter the correct email address":"请输入正确的电子邮箱地址",Sending:"发送中...","Please enter the correct mail configuration":"请输入正确的邮件配置"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/confirmFileConflict-f55d2a2b.js


+ 1 - 0
public/assets/controllerUrls-941681c3.js

@@ -0,0 +1 @@
+const a="/admin/auth.menu/",s="/admin/auth.admin/",t="/admin/auth.adminLog/",e="/admin/auth.group/",n="/admin/routine.attachment/",u="/admin/user.user/",i="/admin/user.group/",c="/admin/user.rule/",o="/admin/user.scoreLog/",r="/admin/user.moneyLog/",m="/admin/security.dataRecycle/",d="/admin/security.dataRecycleLog/",y="/admin/security.sensitiveData/",g="/admin/security.sensitiveDataLog/";export{s as a,e as b,t as c,a as d,d as e,y as f,g,c as h,r as i,u as j,o as k,n as r,m as s,i as u};

File diff suppressed because it is too large
+ 0 - 0
public/assets/crud-2ca28497.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/crud-4bde072a.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/crud-68282d37.js


+ 1 - 0
public/assets/darkSwitch-2d22b024.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-ba596ae9.js";import{t,p as n,l as a,o as c,q as s}from"./vue-a39e6937.js";const g="/assets/logo-8000aeec.png";const _={},i={class:"theme-toggle-content"},r={class:"switch"},l={class:"switch-action"};function d(p,h){const o=t("Icon");return n(),a("div",i,[c("div",r,[c("div",l,[s(o,{name:"local-dark",color:"#f2f2f2",size:"13px",class:"switch-icon dark-icon"}),s(o,{name:"local-light",color:"#303133",size:"13px",class:"switch-icon light-icon"})])])])}const v=e(_,[["render",d],["__scopeId","data-v-047bd707"]]);export{v as D,g as _};

+ 1 - 0
public/assets/dashboard-0bd54af4.js

@@ -0,0 +1 @@
+const e={"You have worked today":"您今天已工作了","Continue to work":"继续工作","have a bit of rest":"休息片刻","Member registration":"会员注册量","Total number of members":"会员总数","Number of installed plug-ins":"已装插件数","Membership growth":"会员增长情况","Annex growth":"附件增长情况","New member":"刚刚加入的会员","Joined us":"加入了我们","Member source":"会员来源","Member last name":"会员姓氏",Loading:"加载中...",Monday:"周一",Tuesday:"周二",Wednesday:"周三",Thursday:"周四",Friday:"周五",Saturday:"周六",Sunday:"周日",Visits:"访问量","Registration volume":"注册量",month:"月",picture:"图片",file:"文档",table:"表格","Compressed package":"压缩包",Baidu:"百度","Direct access":"直接访问","take a plane":"坐飞机","Take the high-speed railway":"坐高铁","full name":"姓名",hour:"小时",minute:"分",second:"秒",day:"天","Number of attachments Uploaded":"附件上传量"};export{e as default};

+ 1 - 0
public/assets/dashboard-cc92587d.js

@@ -0,0 +1 @@
+const e={"You have worked today":"You have worked today:  ","Continue to work":"Keep working","have a bit of rest":"Take a break","Member registration":"Member registration","Total number of members":"Total number of members","Number of installed plug-ins":"Number of installed plug-ins","Membership growth":"Membership growth","Annex growth":"Annex Growth","New member":"New Member","Joined us":"Joined us","Member source":"Member source","Member last name":"Member last name",Loading:"Loading",Monday:"Monday",Tuesday:"Tuesday",Wednesday:"Wednesday",Thursday:"Thursday",Friday:"Friday",Saturday:"Saturday",Sunday:"Sunday",Visits:"Visits","Registration volume":"The number of registered users",month:"month",picture:"picture",file:"file",table:"table","Compressed package":"Compressed package",Baidu:"Baidu","Direct access":"Direct access","take a plane":"Take a plane","Take the high-speed railway":"Take the high-speed rail","full name":"Full name",hour:"Hour",minute:"Minute",second:"Second",day:"Day","Number of attachments Uploaded":"Number of attachments upload"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/dashboard-d144be65.js


+ 1 - 0
public/assets/dataRecycle-780129d6.js

@@ -0,0 +1 @@
+const e={"Rule name":"Rule name",controller:"Controller","data sheet":"Data table","Data table primary key":"Data table primary key","Deleting monitoring":"Delete monitoring","The rule name helps to identify deleted data later":"Rule names help to identify deleted data subsequently later.","The data collection mechanism will monitor delete operations under this controller":"The data recycle mechanism will monitor the delete operations under this controller.","Corresponding data sheet":"Corresponding data sheet"};export{e as default};

+ 1 - 0
public/assets/dataRecycle-99473835.js

@@ -0,0 +1 @@
+const e={"Rule name":"规则名称",controller:"控制器","data sheet":"数据表","Data table primary key":"数据表主键","Deleting monitoring":"删除监控中","The rule name helps to identify deleted data later":"规则名称有助于后续识别被删数据","The data collection mechanism will monitor delete operations under this controller":"数据回收机制将监控此控制器下的删除操作","Corresponding data sheet":"对应数据表"};export{e as default};

+ 1 - 0
public/assets/dataRecycleLog-31fded96.js

@@ -0,0 +1 @@
+const e={restore:"Restore","Are you sure to restore the selected records?":"Are you sure to restore the selected records?","Restore the selected record to the original data table":"Restore the selected record to the original data table.","Operation administrator":"Operation administrator","Recycling rule name":"Recycling rule name","Rule name":"Rule name",controller:"Controller","data sheet":"Data table",DeletedData:"Deleted data","Arbitrary fragment fuzzy query":"Arbitrary fragment fuzzy query","Click to expand":"Click to expand","Data table primary key":"Data table primary key","Operator IP":"Operator IP","Deleted data":"Deleted data","Delete time":"Delete time"};export{e as default};

+ 1 - 0
public/assets/dataRecycleLog-b3aa36ab.js

@@ -0,0 +1 @@
+const e={restore:"还原","Are you sure to restore the selected records?":"确定还原选中记录?","Restore the selected record to the original data table":"还原选中记录到原数据表","Operation administrator":"操作管理员","Recycling rule name":"回收规则名称","Rule name":"规则名称",controller:"控制器","data sheet":"数据表",DeletedData:"被删数据","Arbitrary fragment fuzzy query":"任意片段模糊查询","Click to expand":"点击展开","Data table primary key":"数据表主键","Operator IP":"操作者IP","Deleted data":"被删除的数据","Delete time":"删除时间"};export{e as default};

+ 1 - 0
public/assets/dataexport-120e1788.js

@@ -0,0 +1 @@
+import{i as r,e as n,am as o}from"./index-ba596ae9.js";const e="/admin/routine.dataexport/";function d(){return r({url:e+"add",method:"get"})}function i(t){return r({url:e+"getFieldList",method:"get",params:{table:t}})}function l(t){return r({url:e+"test",method:"get",params:{id:t}})}function g(t){const a=n();return o()+e+"task/subId/0/download/true/id/"+t+"?batoken="+a.getToken()+"&server=1"}function m(t,a){const s=n();return o()+e+"task/subId/"+a+"/download/0/id/"+t+"?batoken="+s.getToken()+"&server=1"}function c(t){return r({url:e+"taskZip",method:"get",params:{id:t}},{loading:!0})}function f(t){return r({url:e+"start",method:"get",params:{id:t}},{loading:!0})}function k(t){return r({url:e+"taskControl",method:"get",params:{id:t}})}export{f as a,g as b,d as c,i as d,k as e,m as f,l as g,c as h};

+ 1 - 0
public/assets/dataexport-449dde0a.js

@@ -0,0 +1 @@
+const e={id:"ID",admin_id:"导出人",name:"任务名称",main_table:"数据源表",join_table:"关联表配置",field_config:"字段配置",where_field:"筛选规则",order_field:"排序规则",xls_max_number:"单个xls最大记录数",concurrent_create_xls:"并发创建xls",memory_limit:"脚本内存限制(MB)",export_number:"导出记录数",subtask:"子任务资料",lastprogress:"上次导出进度",lastfile:"上次导出文件",lastexporttime:"上次导出时间",createtime:"创建时间",admin__nickname:"昵称","quick Search Fields":"任务名称",test:"测试任务","perform task":"执行任务",export:"导出"};export{e as default};

+ 1 - 0
public/assets/dataexport-f3666609.js

@@ -0,0 +1 @@
+const e={id:"id",admin_id:"admin_id",name:"name",main_table:"main_table",join_table:"join_table",field_config:"field_config",where_field:"where_field",order_field:"order_field",xls_max_number:"xls_max_number",concurrent_create_xls:"concurrent_create_xls",memory_limit:"memory_limit",export_number:"export_number",subtask:"subtask",lastprogress:"lastprogress",lastfile:"lastfile",lastexporttime:"lastexporttime",createtime:"createtime",admin__nickname:"admin__nickname","quick Search Fields":"name",test:"Test","perform task":"Perform task",export:"export"};export{e as default};

+ 1 - 0
public/assets/department-64f9ccf1.js

@@ -0,0 +1 @@
+const e={id:"部门ID",pid:"上级部门",name:"部门名称",responsible:"负责人",phone:"负责人电话",email:"负责人邮箱",status:"部门状态","status 0":"禁用","status 1":"启用",weigh:"权重",createtime:"创建时间",updatetime:"更新时间","quick Search Fields":"部门名称",department:"所属部门"};export{e as default};

+ 1 - 0
public/assets/department-d76d9181.js

@@ -0,0 +1 @@
+const e={id:"id",pid:"pid",name:"name",responsible:"responsible",phone:"phone",email:"email",status:"status","status 0":"status 0","status 1":"status 1",weigh:"weigh",createtime:"createtime",updatetime:"updatetime","quick Search Fields":"name",department:"department"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/design-c1a45e4a.js


File diff suppressed because it is too large
+ 13 - 0
public/assets/echarts-02f2616f.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/en-19abc9b5.js


+ 1 - 0
public/assets/en-4f54b060.js

@@ -0,0 +1 @@
+const e={Integral:"Integral",Balance:"Balance",Language:"Language",Copyright:"Copyright","Member Center":"Member Center","Logout login":"Logout","Member center disabled":"The member center has been disabled. Please contact the webmaster to turn it on."};export{e as default};

+ 1 - 0
public/assets/facilityType-533913b2.js

@@ -0,0 +1 @@
+const e={id:"ID",name:"分类名",weigh:"权重",create_time:"创建时间",update_time:"修改时间","quick Search Fields":"ID"};export{e as default};

+ 1 - 0
public/assets/facilityType-94ff6c55.js

@@ -0,0 +1 @@
+const e={id:"id",name:"name",weigh:"weigh",create_time:"create_time",update_time:"update_time","quick Search Fields":"id"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/footer-a0716a4b.js


+ 1 - 0
public/assets/globs-en-a7a4ca30.js

@@ -0,0 +1 @@
+const e={id:"ID",state:"State",Home:"Home",complete:"Completed",edit:"Edit",add:"Add",info:"View Details","weigh-sort":"Drag to sort",delete:"Delete",refresh:"Refresh",operate:"Operate",Confirm:"Confirm",Cancel:"Cancel",Save:"Save",Upload:"Upload",Retry:"Retry",Reminder:"Warm Prompt","Save and edit next item":"save and edit next item","quick Search Placeholder":"Fuzzy search by {fields}","Please select field":"Please select {field}","Please input field":"Please input {field}","Please enter the correct field":"Please enter the correct {field}",updatetime:"Modified time",createtime:"Created time","Fuzzy query":"Fuzzy query",Disable:"Disable",Enable:"Enable","Click Select":"Click select","Edit selected row":"Edit selected row","Delete selected row":"Delete selected row","Are you sure to delete the selected record?":"Are you sure to delete the selected record?",shrink:"Shrink",open:"Open","All submenus":"All submenus","Shrink all":"Shrinkage all","Expand all":"Expand all","Expand generic search":"Expand Universal Search",search:"Search",Reset:"Reset",to:"To","Link address":"Link address",none:"None",unknown:"Unknown",weigh:"weigh","No route found to jump~":"Failed to find a jump route.","This is a deliberate error thrown to prevent a hot update of Vite":"This is a deliberate error thrown to prevent a hot update of Vite"};export{e as default};

+ 1 - 0
public/assets/globs-zh-cn-df9c8d5f.js

@@ -0,0 +1 @@
+const e={id:"ID",state:"状态",Home:"首页",complete:"完成",edit:"编辑",add:"添加",info:"查看详情","weigh-sort":"拖动以排序",delete:"删除",refresh:"刷新",operate:"操作",Confirm:"确认",Cancel:"取消",Save:"保存",Upload:"上传",Retry:"重试",Reminder:"温馨提示","Save and edit next item":"保存并编辑下一项","quick Search Placeholder":"通过{fields}模糊搜索","Please select field":"请选择{field}","Please input field":"请输入{field}","Please enter the correct field":"请输入正确的{field}",updatetime:"修改时间",createtime:"创建时间","Fuzzy query":"模糊查询",Disable:"禁用",Enable:"启用","Click Select":"点击选择","Edit selected row":"编辑选中行","Delete selected row":"删除选中行","Are you sure to delete the selected record?":"确定删除选中记录?",shrink:"收缩",open:"展开","All submenus":"所有子菜单","Shrink all":"收缩所有","Expand all":"展开所有","Expand generic search":"展开通用搜索",search:"搜索",Reset:"重置",to:"至","Link address":"链接地址",none:"无",unknown:"未知",weigh:"权重","No route found to jump~":"没有找到可以跳转的路由~","This is a deliberate error thrown to prevent a hot update of Vite":"这是为了防止Vite的热更新而有意抛出的错误"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/goodsInfo-70ea221f.js


+ 1 - 0
public/assets/group-156558b9.js

@@ -0,0 +1 @@
+const o={GroupName:"Group name","Group name":"Group name",jurisdiction:"Permissions"};export{o as default};

+ 1 - 0
public/assets/group-157f1c99.js

@@ -0,0 +1 @@
+const o={GroupName:"组名","Group name":"组别名称",jurisdiction:"权限"};export{o as default};

+ 1 - 0
public/assets/group-90ae3cb1.js

@@ -0,0 +1 @@
+const e={GroupName:"组名","Group name":"组别名称",jurisdiction:"权限","Parent group":"上级分组","The parent group cannot be the group itself":"上级分组不能是分组本身","Manage subordinate role groups here":"在此管理下级角色组(不含同级),您拥有下级角色组的所有权限并且拥有额外的权限"};export{e as default};

+ 1 - 0
public/assets/group-e3df291b.js

@@ -0,0 +1 @@
+const e={GroupName:"Group Name","Group name":"Group Name",jurisdiction:"Permissions","Parent group":"Superior group","The parent group cannot be the group itself":"The parent group cannot be the group itself","Manage subordinate role groups here":"In managing a subordinate role group (excluding a peer role group), you have all the rights of a subordinate role group and additional rights"};export{e as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/header-1-2575ae78.svg


+ 1 - 0
public/assets/iframe-7b7d77b9.js

@@ -0,0 +1 @@
+import{m as o}from"./layout-df994644.js";import{h as s,r as i,a6 as n,p as c,l as d,o as _,m,k as l,a5 as f,a7 as u}from"./vue-a39e6937.js";import{_ as p}from"./index-ba596ae9.js";const h={class:"iframe-main"},v=["src"],g=s({__name:"iframe",setup(x){const a=f(),e=i({loading:!0,iframeSrc:a.currentRoute.value.meta.url}),r=()=>{e.loading=!1};return(y,k)=>{const t=u("loading");return n((c(),d("div",h,[_("iframe",{src:e.iframeSrc,style:m(l(o)(35)),frameborder:"0",height:"100%",width:"100%",id:"iframe",ref:"iframeRef",onLoad:r},null,44,v)])),[[t,e.loading]])}}});const w=p(g,[["__scopeId","data-v-ed57d0d8"]]);export{w as default};

File diff suppressed because it is too large
+ 0 - 0
public/assets/index-078f7f5f.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-0ec044bf.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-13980975.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-1509bf3f.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-1aea2814.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-1dcde328.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-2e23032c.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-309815bb.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-36295e00.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-38d43ee6.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-3f3a4552.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-434d719f.js


File diff suppressed because it is too large
+ 0 - 0
public/assets/index-43cc03db.js


+ 1 - 0
public/assets/index-465c298e.js

@@ -0,0 +1 @@
+import{i as o,e as r}from"./index-ba596ae9.js";const e="/admin/index/";function a(){return o({url:e+"index",method:"get"})}function u(n,t={}){return o({url:e+"login",data:t,method:n})}function l(){const n=r();return o({url:e+"logout",method:"POST",data:{refresh_token:n.getToken("refresh")}})}export{l as a,a as i,u as l};

File diff suppressed because it is too large
+ 0 - 0
public/assets/index-47ba3d7e.js


Some files were not shown because too many files changed in this diff