签入版本

This commit is contained in:
2026-10-10 19:17:02 +08:00
parent 3423dea03f
commit 32f941b631
232 changed files with 4264 additions and 6251 deletions
@@ -294,7 +294,7 @@ ALTER TABLE think_city ADD INDEX idx_pid (pid);
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = rxthinkcmf.thinkphp6.elevue
DATABASE = rxthinkcmf.thinkphp8.naivevue
USERNAME = root
PASSWORD = root
HOSTPORT = 3306
@@ -304,7 +304,7 @@ HOSTPORT = 3306
[DATABASE]
TYPE = pgsql
HOSTNAME = 127.0.0.1
DATABASE = rxthinkcmf.thinkphp6.elevue
DATABASE = rxthinkcmf.thinkphp8.naivevue
USERNAME = postgres
PASSWORD = root
HOSTPORT = 5432
@@ -314,7 +314,7 @@ HOSTPORT = 5432
[DATABASE]
TYPE = sqlsrv
HOSTNAME = 127.0.0.1
DATABASE = rxthinkcmf.thinkphp6.elevue
DATABASE = rxthinkcmf.thinkphp8.naivevue
USERNAME = sa
PASSWORD = root
HOSTPORT = 1433
@@ -324,7 +324,7 @@ HOSTPORT = 1433
[DATABASE]
TYPE = oracle
HOSTNAME = 127.0.0.1
DATABASE = rxthinkcmf.thinkphp6.elevue
DATABASE = rxthinkcmf.thinkphp8.naivevue
USERNAME = root
PASSWORD = root
HOSTPORT = 1521
@@ -400,7 +400,7 @@ MySQL 是项目默认推荐的关系型数据库,XAMPP 已自带,开箱即
# 若前面有分号则去掉,保存后重启 XAMPP
# 创建数据库
D:\xampp8.2\mysql\bin\mysql.exe -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
D:\xampp8.2\mysql\bin\mysql.exe -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp8.naivevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
```
```sh [macOS]
@@ -409,7 +409,7 @@ brew services start mysql
sudo mysql_secure_installation
# 创建数据库
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp8.naivevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
```
```sh [Ubuntu / Debian]
@@ -419,7 +419,7 @@ sudo systemctl enable mysql
sudo mysql_secure_installation
# 创建数据库
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp8.naivevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
```
```sh [Rocky Linux / CentOS]
@@ -429,7 +429,7 @@ sudo systemctl enable mysqld
sudo mysql_secure_installation
# 创建数据库
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp8.naivevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
```
:::
@@ -454,7 +454,7 @@ PostgreSQL 功能强大,支持 JSONB、全文检索等高级特性,需单独
psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'root';"
# 创建数据库
psql -U postgres -c "CREATE DATABASE \"rxthinkcmf.thinkphp6.elevue\" OWNER postgres ENCODING 'UTF8';"
psql -U postgres -c "CREATE DATABASE \"rxthinkcmf.thinkphp8.naivevue\" OWNER postgres ENCODING 'UTF8';"
```
```sh [macOS]
@@ -465,8 +465,8 @@ brew services start postgresql
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'root';"
# 创建数据库
sudo -u postgres psql -c "CREATE DATABASE \"rxthinkcmf.thinkphp6.elevue\" OWNER postgres ENCODING 'UTF8';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE \"rxthinkcmf.thinkphp6.elevue\" TO postgres;"
sudo -u postgres psql -c "CREATE DATABASE \"rxthinkcmf.thinkphp8.naivevue\" OWNER postgres ENCODING 'UTF8';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE \"rxthinkcmf.thinkphp8.naivevue\" TO postgres;"
```
```sh [Ubuntu / Debian]
@@ -477,8 +477,8 @@ sudo systemctl start postgresql
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'root';"
# 创建数据库
sudo -u postgres psql -c "CREATE DATABASE \"rxthinkcmf.thinkphp6.elevue\" OWNER postgres ENCODING 'UTF8';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE \"rxthinkcmf.thinkphp6.elevue\" TO postgres;"
sudo -u postgres psql -c "CREATE DATABASE \"rxthinkcmf.thinkphp8.naivevue\" OWNER postgres ENCODING 'UTF8';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE \"rxthinkcmf.thinkphp8.naivevue\" TO postgres;"
```
```sh [Rocky Linux / CentOS]
@@ -490,8 +490,8 @@ sudo systemctl start postgresql
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'root';"
# 创建数据库
sudo -u postgres psql -c "CREATE DATABASE \"rxthinkcmf.thinkphp6.elevue\" OWNER postgres ENCODING 'UTF8';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE \"rxthinkcmf.thinkphp6.elevue\" TO postgres;"
sudo -u postgres psql -c "CREATE DATABASE \"rxthinkcmf.thinkphp8.naivevue\" OWNER postgres ENCODING 'UTF8';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE \"rxthinkcmf.thinkphp8.naivevue\" TO postgres;"
```
:::
@@ -558,7 +558,7 @@ SQL Server 是微软商业数据库,XAMPP 已自带 pdo_sqlsrv 驱动,Window
# extension=php_pdo_sqlsrv_82_ts_x64.dll
# 创建数据库
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp6.elevue] COLLATE Chinese_PRC_CI_AS"
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp8.naivevue] COLLATE Chinese_PRC_CI_AS"
```
```sh [macOS]
@@ -571,7 +571,7 @@ docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=root" \
pecl install pdo_sqlsrv
# 创建数据库
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp6.elevue] COLLATE Chinese_PRC_CI_AS"
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp8.naivevue] COLLATE Chinese_PRC_CI_AS"
```
```sh [Ubuntu / Debian]
@@ -593,7 +593,7 @@ echo "extension=pdo_sqlsrv.so" | sudo tee /etc/php/8.2/mods-available/pdo_sqlsrv
sudo phpenmod pdo_sqlsrv
# 创建数据库
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp6.elevue] COLLATE Chinese_PRC_CI_AS"
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp8.naivevue] COLLATE Chinese_PRC_CI_AS"
```
```sh [Rocky Linux / CentOS]
@@ -613,7 +613,7 @@ sudo pecl install pdo_sqlsrv
echo "extension=pdo_sqlsrv.so" | sudo tee /etc/php.d/pdo_sqlsrv.ini
# 创建数据库
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp6.elevue] COLLATE Chinese_PRC_CI_AS"
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp8.naivevue] COLLATE Chinese_PRC_CI_AS"
```
:::
@@ -647,7 +647,7 @@ Oracle 是企业级商业数据库,需手动安装 Instant Client 和 pdo_oci
# .env 配置
# DATABASE.TYPE = oracle
# DATABASE.HOSTNAME = 127.0.0.1
# DATABASE.DATABASE = rxthinkcmf.thinkphp6.elevue
# DATABASE.DATABASE = rxthinkcmf.thinkphp8.naivevue
# DATABASE.USERNAME = root
# DATABASE.PASSWORD = root
# DATABASE.HOSTPORT = 1521
@@ -679,8 +679,8 @@ sudo phpenmod pdo_oci
# 4. 创建表空间和用户
sqlplus system/root@localhost:1521/XE <<EOF
CREATE TABLESPACE "rxthinkcmf_thinkphp6_elevue" DATAFILE '/opt/oracle/oradata/XE/rxthinkcmf_thinkphp6_elevue.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M;
CREATE USER "root" IDENTIFIED BY "root" DEFAULT TABLESPACE "rxthinkcmf_thinkphp6_elevue";
CREATE TABLESPACE "rxthinkcmf_thinkphp8_naivevue" DATAFILE '/opt/oracle/oradata/XE/rxthinkcmf_thinkphp8_naivevue.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M;
CREATE USER "root" IDENTIFIED BY "root" DEFAULT TABLESPACE "rxthinkcmf_thinkphp8_naivevue";
GRANT CONNECT, RESOURCE, CREATE VIEW TO "root";
GRANT UNLIMITED TABLESPACE TO "root";
EXIT;
@@ -703,8 +703,8 @@ sudo phpenmod pdo_oci
# 4. 创建表空间和用户
sqlplus system/root@localhost:1521/XE <<EOF
CREATE TABLESPACE "rxthinkcmf_thinkphp6_elevue" DATAFILE '/opt/oracle/oradata/XE/rxthinkcmf_thinkphp6_elevue.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M;
CREATE USER "root" IDENTIFIED BY "root" DEFAULT TABLESPACE "rxthinkcmf_thinkphp6_elevue";
CREATE TABLESPACE "rxthinkcmf_thinkphp8_naivevue" DATAFILE '/opt/oracle/oradata/XE/rxthinkcmf_thinkphp8_naivevue.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M;
CREATE USER "root" IDENTIFIED BY "root" DEFAULT TABLESPACE "rxthinkcmf_thinkphp8_naivevue";
GRANT CONNECT, RESOURCE, CREATE VIEW TO "root";
GRANT UNLIMITED TABLESPACE TO "root";
EXIT;
@@ -720,15 +720,15 @@ EOF
```text
document/
├── mysql/
│ └── rxthinkcmf.thinkphp6.elevue.sql # MySQL 版本
│ └── rxthinkcmf.thinkphp8.naivevue.sql # MySQL 版本
├── postgresql/
│ └── rxthinkcmf.thinkphp6.elevue.sql # PostgreSQL 版本
│ └── rxthinkcmf.thinkphp8.naivevue.sql # PostgreSQL 版本
├── sqlserver/
│ └── rxthinkcmf.thinkphp6.elevue.sql # SQL Server 版本
│ └── rxthinkcmf.thinkphp8.naivevue.sql # SQL Server 版本
├── oracle/
│ └── rxthinkcmf.thinkphp6.elevue.sql # Oracle 版本
│ └── rxthinkcmf.thinkphp8.naivevue.sql # Oracle 版本
└── sqlite/
└── rxthinkcmf.thinkphp6.elevue.sql # SQLite 版本
└── rxthinkcmf.thinkphp8.naivevue.sql # SQLite 版本
```
各数据库脚本包含完整的表结构定义和初始数据(用户、角色、菜单、字典、城市行政区划等),已针对各数据库的 SQL 语法做了适配,可直接导入使用。
@@ -16,7 +16,6 @@
├── templates/ ← 代码生成器模板
├── runtime/ ← 运行时缓存(自动生成)
├── vendor/ ← Composer 依赖
├── wiki/ ← 文档站点(VitePress)
├── document/ ← 开发参考手册(txt)
├── .env ← 环境变量配置
└── think ← ThinkPHP 命令行入口
@@ -81,52 +81,69 @@ src/views/
```vue
<template>
<!-- 搜索区 -->
<el-form :model="searchForm" inline>
<el-form-item label="名称">
<el-input v-model="searchForm.name" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="fetchData">搜索</el-button>
</el-form-item>
</el-form>
<n-card :bordered="false" class="pt-3 mb-3 proCard">
<!-- 搜索区(BasicForm 驱动) -->
<BasicForm @register="registerForm" @submit="handleSubmit" @reset="handleReset" />
</n-card>
<!-- 操作栏 -->
<el-button v-perm="'sys:example:add'" type="primary" @click="handleAdd">新增</el-button>
<!-- 数据表格 -->
<el-table :data="tableData">
<el-table-column prop="id" label="ID" />
<el-table-column prop="name" label="名称" />
<el-table-column prop="statusText" label="状态" />
<el-table-column label="操作">
<template #default="{ row }">
<el-button v-perm="'sys:example:update'" @click="handleEdit(row)">编辑</el-button>
<el-button v-perm="'sys:example:delete'" type="danger" @click="handleDelete(row.id)">删除</el-button>
<n-card :bordered="false" class="proCard">
<!-- 操作栏 + 数据表格(BasicTable 驱动,分页内置) -->
<BasicTable
:columns="columns"
:request="loadDataTable"
:row-key="(row) => row.id"
ref="basicTableRef"
:actionColumn="actionColumn"
>
<template #tableTitle>
<n-space>
<n-button v-perm="'sys:example:add'" type="primary" @click="handleAdd">
新增
</n-button>
</n-space>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination v-model:current-page="pageNo" v-model:page-size="pageSize"
:total="total" @change="fetchData" />
</BasicTable>
</n-card>
</template>
<script setup lang="ts">
import { h } from 'vue';
import { NButton } from 'naive-ui';
import { BasicTable, TableAction } from '@/components/Table';
import { BasicForm, useForm } from '@/components/Form';
import { getExamplePage, exampleDelete } from '@/api/tool/example';
const tableData = ref([]);
const pageNo = ref(1);
const pageSize = ref(20);
const total = ref(0);
const [registerForm, { handleSubmit, handleReset }] = useForm({
schemas: [
{ field: 'name', label: '名称', component: 'NInput' },
],
});
const fetchData = async () => {
const res = await getExamplePage({ pageNo: pageNo.value, pageSize: pageSize.value });
tableData.value = res.records;
total.value = res.total;
const columns = [
{ title: 'ID', key: 'id', width: 80 },
{ title: '名称', key: 'name' },
{ title: '状态', key: 'statusText' },
];
const actionColumn = {
width: 200,
title: '操作',
key: 'action',
render(record) {
return h(TableAction, {
actions: [
{ label: '编辑', type: 'warning', onClick: () => handleEdit(record), auth: 'sys:example:update' },
{ label: '删除', type: 'error', onClick: () => handleDelete(record.id), auth: 'sys:example:delete' },
],
});
},
};
onMounted(() => fetchData());
// 分页数据请求(BasicTable 内置分页)
const loadDataTable = async (params) => {
const res = await getExamplePage({ ...params });
return { records: res.records, total: res.total };
};
</script>
```
@@ -312,10 +329,10 @@ src/utils/http/axios/
```vue
<!-- v-perm:单权限 -->
<el-button v-perm="'sys:user:add'" type="primary">新增</el-button>
<n-button v-perm="'sys:user:add'" type="primary">新增</n-button>
<!-- v-perms:多权限(满足任一即可) -->
<el-button v-perms="['sys:user:add', 'sys:user:update']">操作</el-button>
<n-button v-perms="['sys:user:add', 'sys:user:update']">操作</n-button>
```
无权限时元素直接从 DOM 移除,而非仅隐藏。
@@ -331,8 +348,11 @@ src/utils/http/axios/
| Hook | 文件 | 说明 |
|------|------|------|
| `usePermission` | `hooks/web/usePermission.ts` | 权限判断(hasPermission、hasSomePermission) |
| `useTable` | `hooks/web/useTable.ts` | 表格通用逻辑(分页、搜索、刷新) |
| `useForm` | `hooks/web/useForm.ts` | 表单通用逻辑(提交、重置、校验) |
| `useMessage` / `useDialog` | `hooks/web/useMessage.ts`、`useDialog.ts` | 消息提示 / 确认弹窗(离散 API,可在非组件上下文调用) |
| `useLoadingBar` | `hooks/web/useLoadingBar.ts` | 顶部加载条 |
| `useLockFn` | `utils/useLockFn.ts` | 请求级防重复提交 |
| `useForm` | `components/Form/src/hooks/useForm.ts` | 表单通用逻辑(注册、提交、重置、校验) |
| 表格逻辑 | `components/Table/src/hooks/*` | BasicTable 内部钩子(分页、数据源、搜索) |
### Directives(自定义指令)
@@ -8,7 +8,7 @@
```text
┌─────────────────────────────────────────────────────────────────┐
│ 浏览器(Vue3 + ElementPlus) │
│ 浏览器(Vue3 + NaiveUI) │
│ Axios HTTP 请求 / Vite 开发代理 │
└──────────────────────────────┬──────────────────────────────────┘
│
@@ -238,7 +238,7 @@ DictService 和 ParamService 均采用此架构,大幅减少数据库查询。
```text
┌──────────────────────────────────────────────────────────────┐
│ 前端(Vue3 + ElementPlus) │
│ 前端(Vue3 + NaiveUI) │
│ Pinia · Vue Router · Axios · TinyMce · ECharts │
└──────────────────────────┬───────────────────────────────────┘
│ HTTP / JSON