超管后台 - 新建项目对接触客宝
This commit is contained in:
36
README.en.md
36
README.en.md
@@ -1,36 +0,0 @@
|
|||||||
# YiShi
|
|
||||||
|
|
||||||
#### Description
|
|
||||||
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
|
|
||||||
|
|
||||||
#### Software Architecture
|
|
||||||
Software architecture description
|
|
||||||
|
|
||||||
#### Installation
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### Instructions
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### Contribution
|
|
||||||
|
|
||||||
1. Fork the repository
|
|
||||||
2. Create Feat_xxx branch
|
|
||||||
3. Commit your code
|
|
||||||
4. Create Pull Request
|
|
||||||
|
|
||||||
|
|
||||||
#### Gitee Feature
|
|
||||||
|
|
||||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
|
||||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
|
||||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
|
||||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
|
||||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
|
||||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
|
||||||
39
README.md
39
README.md
@@ -1,39 +0,0 @@
|
|||||||
# YiShi
|
|
||||||
|
|
||||||
#### 介绍
|
|
||||||
{**以下是 Gitee 平台说明,您可以替换此简介**
|
|
||||||
Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
|
|
||||||
无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
|
|
||||||
|
|
||||||
#### 软件架构
|
|
||||||
软件架构说明
|
|
||||||
|
|
||||||
|
|
||||||
#### 安装教程
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### 使用说明
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### 参与贡献
|
|
||||||
|
|
||||||
1. Fork 本仓库
|
|
||||||
2. 新建 Feat_xxx 分支
|
|
||||||
3. 提交代码
|
|
||||||
4. 新建 Pull Request
|
|
||||||
|
|
||||||
|
|
||||||
#### 特技
|
|
||||||
|
|
||||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
|
||||||
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
|
|
||||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
|
|
||||||
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
|
|
||||||
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
|
|
||||||
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace app\library\s2;
|
namespace app\library\s2;
|
||||||
|
|
||||||
|
use think\Exception;
|
||||||
use think\facade\Cache;
|
use think\facade\Cache;
|
||||||
use think\facade\Env;
|
use think\facade\Env;
|
||||||
use think\facade\Log;
|
use think\facade\Log;
|
||||||
@@ -68,10 +69,16 @@ class CurlHandle
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $baseUrl
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setBaseUrl(string $baseUrl): CurlHandle
|
||||||
|
{
|
||||||
|
$this->baseUrl = $baseUrl;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $url 请求的链接
|
* @param string $url 请求的链接
|
||||||
@@ -81,12 +88,14 @@ class CurlHandle
|
|||||||
* @param string $type 数据类型,支持dataBuild、json等
|
* @param string $type 数据类型,支持dataBuild、json等
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
public function requestCurl($url, $params = [], $method = 'GET', $type = 'dataBuild')
|
public function send($url, $params = [], $type = 'dataBuild')
|
||||||
{
|
{
|
||||||
$str = '';
|
$str = '';
|
||||||
if (!empty($url)) {
|
if (!empty($url)) {
|
||||||
try {
|
try {
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
|
$method = $this->method;
|
||||||
|
$url = $this->baseUrl . $url;
|
||||||
|
|
||||||
// 处理GET请求的参数
|
// 处理GET请求的参数
|
||||||
if (strtoupper($method) == 'GET' && !empty($params)) {
|
if (strtoupper($method) == 'GET' && !empty($params)) {
|
||||||
@@ -121,6 +130,9 @@ class CurlHandle
|
|||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //是否验证对等证书,1则验证,0则不验证
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //是否验证对等证书,1则验证,0则不验证
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
||||||
$str = curl_exec($ch);
|
$str = curl_exec($ch);
|
||||||
|
if(curl_errno($ch)) {
|
||||||
|
echo 'Curl error: ' .curl_errno($ch) . ':' . curl_error($ch);
|
||||||
|
}
|
||||||
curl_close($ch);
|
curl_close($ch);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$str = '';
|
$str = '';
|
||||||
|
|||||||
@@ -47,10 +47,7 @@ class DeviceLogic implements DeviceInterface
|
|||||||
->setHeader('Content-Type', 'text/plain')
|
->setHeader('Content-Type', 'text/plain')
|
||||||
->setHeader('authorization', 'bearer ' . $JWT)
|
->setHeader('authorization', 'bearer ' . $JWT)
|
||||||
->setMethod('get')
|
->setMethod('get')
|
||||||
->requestCurl('api/Account/myTenantPageAccounts', $params);
|
->send('api/Account/myTenantPageAccounts', $params);
|
||||||
|
|
||||||
print_r($result);
|
|
||||||
exit();
|
|
||||||
|
|
||||||
$response = handleApiResponse($result);
|
$response = handleApiResponse($result);
|
||||||
// 保存数据到数据库
|
// 保存数据到数据库
|
||||||
|
|||||||
@@ -2,37 +2,37 @@
|
|||||||
use think\facade\Route;
|
use think\facade\Route;
|
||||||
|
|
||||||
// 超级管理员认证相关路由(不需要鉴权)
|
// 超级管理员认证相关路由(不需要鉴权)
|
||||||
Route::post('auth/login', 'app\\superadmin\\controller\\Auth@login');
|
Route::post('auth/login', 'app\\superadmin\\controller\\AuthController@login');
|
||||||
|
|
||||||
// 需要登录认证的路由组
|
// 需要登录认证的路由组
|
||||||
Route::group('', function () {
|
Route::group('', function () {
|
||||||
// 菜单管理相关路由
|
// 菜单管理相关路由
|
||||||
Route::group('menu', function () {
|
Route::group('menu', function () {
|
||||||
Route::get('tree', 'app\\superadmin\\controller\\Menu@getMenuTree');
|
Route::get('tree', 'app\\superadmin\\controller\\MenuController@getTree');
|
||||||
Route::get('list', 'app\\superadmin\\controller\\Menu@getMenuList');
|
Route::get('list', 'app\\superadmin\\controller\\MenuController@getList');
|
||||||
Route::post('save', 'app\\superadmin\\controller\\Menu@saveMenu');
|
Route::post('save', 'app\\superadmin\\controller\\MenuController@save');
|
||||||
Route::delete('delete/:id', 'app\\superadmin\\controller\\Menu@deleteMenu');
|
Route::delete('delete/:id', 'app\\superadmin\\controller\\MenuController@delete');
|
||||||
Route::post('status', 'app\\superadmin\\controller\\Menu@updateStatus');
|
Route::post('status', 'app\\superadmin\\controller\\MenuController@updateStatus');
|
||||||
Route::get('toplevel', 'app\\superadmin\\controller\\Menu@getTopLevelMenus');
|
Route::get('toplevel', 'app\\superadmin\\controller\\MenuController@getTopLevelMenus');
|
||||||
});
|
});
|
||||||
|
|
||||||
// 管理员相关路由
|
// 管理员相关路由
|
||||||
Route::group('administrator', function () {
|
Route::group('administrator', function () {
|
||||||
Route::get('list', 'app\\superadmin\\controller\\Administrator@getList');
|
Route::get('list', 'app\\superadmin\\controller\\AdministratorController@getList');
|
||||||
Route::get('detail/:id', 'app\\superadmin\\controller\\Administrator@getDetail');
|
Route::get('detail/:id', 'app\\superadmin\\controller\\AdministratorController@getDetail');
|
||||||
Route::post('update', 'app\\superadmin\\controller\\Administrator@updateAdmin');
|
Route::post('update', 'app\\superadmin\\controller\\AdministratorController@update');
|
||||||
Route::post('add', 'app\\superadmin\\controller\\Administrator@addAdmin');
|
Route::post('add', 'app\\superadmin\\controller\\AdministratorController@add');
|
||||||
Route::post('delete', 'app\\superadmin\\controller\\Administrator@deleteAdmin');
|
Route::delete('delete/:id', 'app\\superadmin\\controller\\AdministratorController@delete');
|
||||||
});
|
});
|
||||||
|
|
||||||
// 客户池管理路由
|
// 客户池管理路由
|
||||||
Route::group('trafficPool', function () {
|
Route::group('trafficPool', function () {
|
||||||
Route::get('list', 'app\\superadmin\\controller\\TrafficPool@getList'); // 获取客户池列表
|
Route::get('list', 'app\\superadmin\\controller\\TrafficPoolController@getList'); // 获取客户池列表
|
||||||
Route::get('detail', 'app\\superadmin\\controller\\TrafficPool@getDetail'); // 获取客户详情
|
Route::get('detail', 'app\\superadmin\\controller\\TrafficPoolController@getDetail'); // 获取客户详情
|
||||||
});
|
});
|
||||||
|
|
||||||
// 公司路由
|
// 公司路由
|
||||||
Route::group('company', function () {
|
Route::group('company', function () {
|
||||||
Route::post('create', 'app\\superadmin\\controller\\Company@create');
|
Route::post('create', 'app\\superadmin\\controller\\CompanyController@create');
|
||||||
});
|
});
|
||||||
})->middleware(['app\\superadmin\\middleware\\AdminAuth']);
|
})->middleware(['app\\superadmin\\middleware\\AdminAuth']);
|
||||||
@@ -8,7 +8,7 @@ use app\superadmin\model\Administrator as AdminModel;
|
|||||||
/**
|
/**
|
||||||
* 管理员控制器
|
* 管理员控制器
|
||||||
*/
|
*/
|
||||||
class Administrator extends Controller
|
class AdministratorController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 获取管理员列表
|
* 获取管理员列表
|
||||||
@@ -4,7 +4,7 @@ namespace app\superadmin\controller;
|
|||||||
use think\Controller;
|
use think\Controller;
|
||||||
use app\superadmin\model\Administrator;
|
use app\superadmin\model\Administrator;
|
||||||
|
|
||||||
class Auth extends Controller
|
class AuthController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 管理员登录
|
* 管理员登录
|
||||||
@@ -52,7 +52,7 @@ class Auth extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建登录令牌
|
* 创建登录令牌
|
||||||
* @param Administrator $admin
|
* @param AdministratorController $admin
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function createToken($admin)
|
private function createToken($admin)
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace app\superadmin\controller;
|
namespace app\superadmin\controller;
|
||||||
|
|
||||||
|
use app\library\s2\CurlHandle;
|
||||||
use app\superadmin\model\Company as companyModel;
|
use app\superadmin\model\Company as companyModel;
|
||||||
use app\superadmin\model\Users;
|
use app\superadmin\model\Users;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
@@ -13,7 +14,7 @@ use think\facade\Session;
|
|||||||
/**
|
/**
|
||||||
* 公司控制器
|
* 公司控制器
|
||||||
*/
|
*/
|
||||||
class Company extends Controller
|
class CompanyController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 创建新项目
|
* 创建新项目
|
||||||
@@ -22,43 +23,34 @@ class Company extends Controller
|
|||||||
public function create()
|
public function create()
|
||||||
{
|
{
|
||||||
// 获取参数
|
// 获取参数
|
||||||
$params = Request::only(['nickname', 'account', 'password', 'realName', 'memo']);
|
$params = Request::only(['name', 'nickname', 'account', 'password', 'realName', 'memo']);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 开启事务
|
// 开启事务
|
||||||
Db::startTrans();
|
Db::startTrans();
|
||||||
|
$curl = CurlHandle::getInstant()->setBaseUrl('http://yishi.com/');
|
||||||
// 创建Guzzle客户端
|
|
||||||
$client = new Client([
|
|
||||||
'base_uri' => Config::get('app.api_base_url'),
|
|
||||||
'timeout' => 10.0
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 1. 调用创建部门接口
|
// 1. 调用创建部门接口
|
||||||
$departmentResponse = $client->post('/v1/api/account/department/create', [
|
$departmentResponse = $curl->setMethod('post')->send('v1/api/account/department/create', [
|
||||||
'json' => [
|
'name' => $params['name'],
|
||||||
'name' => $params['name'],
|
'memo' => $params['memo'] ?: '',
|
||||||
'memo' => $params['memo'] ?: '',
|
|
||||||
]
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$departmentData = json_decode($departmentResponse->getBody(), true);
|
$departmentData = json_decode($departmentResponse, true);
|
||||||
if ($departmentData['code'] != 200) {
|
if ($departmentData['code'] != 200) {
|
||||||
throw new \Exception($departmentData['msg']);
|
throw new \Exception($departmentData['msg']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 调用创建账号接口
|
// 2. 调用创建账号接口
|
||||||
$accountResponse = $client->post('/v1/api/account/create', [
|
$accountResponse = $curl->setMethod('post')->send('v1/api/account/create', [
|
||||||
'json' => [
|
'userName' => $params['account'],
|
||||||
'userName' => $params['account'],
|
'password' => $params['password'],
|
||||||
'password' => $params['password'],
|
'realName' => $params['realName'],
|
||||||
'realName' => $params['realName'],
|
'nickname' => $params['nickname'],
|
||||||
'nickname' => $params['nickname'],
|
'departmentId' => $departmentData['data']['id']
|
||||||
'departmentId' => $departmentData['data']['id']
|
|
||||||
]
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$accountData = json_decode($accountResponse->getBody(), true);
|
$accountData = json_decode($accountResponse, true);
|
||||||
if ($accountData['code'] != 200) {
|
if ($accountData['code'] != 200) {
|
||||||
throw new \Exception($accountData['msg']);
|
throw new \Exception($accountData['msg']);
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,7 @@ use app\superadmin\model\Menu as MenuModel;
|
|||||||
/**
|
/**
|
||||||
* 菜单控制器
|
* 菜单控制器
|
||||||
*/
|
*/
|
||||||
class Menu extends Controller
|
class MenuController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 获取菜单列表(树状结构)
|
* 获取菜单列表(树状结构)
|
||||||
@@ -14,7 +14,7 @@ use think\facade\Validate;
|
|||||||
/**
|
/**
|
||||||
* 客户池控制器
|
* 客户池控制器
|
||||||
*/
|
*/
|
||||||
class TrafficPool extends Controller
|
class TrafficPoolController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 获取客户池列表
|
* 获取客户池列表
|
||||||
@@ -25,7 +25,8 @@
|
|||||||
"aliyuncs/oss-sdk-php": "^2.7",
|
"aliyuncs/oss-sdk-php": "^2.7",
|
||||||
"topthink/think-worker": "2.0.*",
|
"topthink/think-worker": "2.0.*",
|
||||||
"topthink/think-queue": "2.0.*",
|
"topthink/think-queue": "2.0.*",
|
||||||
"textalk/websocket": "^1.5"
|
"textalk/websocket": "^1.5",
|
||||||
|
"guzzlehttp/guzzle": "^7.9"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|||||||
2
Server/composer.lock
generated
2
Server/composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "3f1dbb62be88ad00a166b59ed9183932",
|
"content-hash": "9ad1ad6eaacd62087a3871dd6bef4424",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "adbario/php-dot-notation",
|
"name": "adbario/php-dot-notation",
|
||||||
|
|||||||
@@ -112,29 +112,6 @@ export default function NewProjectPage() {
|
|||||||
<Textarea id="memo" placeholder="请输入备注信息(选填)" rows={2} />
|
<Textarea id="memo" placeholder="请输入备注信息(选填)" rows={2} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label>关联设备</Label>
|
|
||||||
<div className="space-y-3">
|
|
||||||
{devices.map((device, index) => (
|
|
||||||
<div key={device.id} className="flex items-center gap-2">
|
|
||||||
<Input
|
|
||||||
placeholder={`设备 ${index + 1} 名称`}
|
|
||||||
value={device.name}
|
|
||||||
onChange={(e) => handleDeviceChange(device.id, e.target.value)}
|
|
||||||
/>
|
|
||||||
{devices.length > 1 && (
|
|
||||||
<Button type="button" variant="outline" size="icon" onClick={() => handleRemoveDevice(device.id)}>
|
|
||||||
<Trash className="h-4 w-4" />
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
<Button type="button" variant="outline" onClick={handleAddDevice} className="flex items-center gap-1">
|
|
||||||
<Plus className="h-4 w-4" /> 添加设备
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label htmlFor="description">项目介绍</Label>
|
<Label htmlFor="description">项目介绍</Label>
|
||||||
<Textarea id="description" placeholder="请输入项目介绍(选填)" rows={4} />
|
<Textarea id="description" placeholder="请输入项目介绍(选填)" rows={4} />
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"require": {
|
|
||||||
"topthink/think-queue": "2.0.*",
|
|
||||||
"symfony/var-dumper": "^5.4"
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"allow-plugins": {
|
|
||||||
"topthink/think-installer": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
488
composer.lock
generated
488
composer.lock
generated
@@ -1,488 +0,0 @@
|
|||||||
{
|
|
||||||
"_readme": [
|
|
||||||
"This file locks the dependencies of your project to a known state",
|
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
|
||||||
"This file is @generated automatically"
|
|
||||||
],
|
|
||||||
"content-hash": "c5312c17aaa7d134ec90cbb20c791f62",
|
|
||||||
"packages": [
|
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-mbstring",
|
|
||||||
"version": "v1.31.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
|
||||||
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
|
||||||
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.2"
|
|
||||||
},
|
|
||||||
"provide": {
|
|
||||||
"ext-mbstring": "*"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-mbstring": "For best performance"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"thanks": {
|
|
||||||
"url": "https://github.com/symfony/polyfill",
|
|
||||||
"name": "symfony/polyfill"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony polyfill for the Mbstring extension",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"mbstring",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2024-09-09T11:45:10+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-php80",
|
|
||||||
"version": "v1.31.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
|
||||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
|
||||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.2"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"thanks": {
|
|
||||||
"url": "https://github.com/symfony/polyfill",
|
|
||||||
"name": "symfony/polyfill"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php80\\": ""
|
|
||||||
},
|
|
||||||
"classmap": [
|
|
||||||
"Resources/stubs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Ion Bazan",
|
|
||||||
"email": "ion.bazan@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2024-09-09T11:45:10+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symfony/var-dumper",
|
|
||||||
"version": "v5.4.48",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/var-dumper.git",
|
|
||||||
"reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/42f18f170aa86d612c3559cfb3bd11a375df32c8",
|
|
||||||
"reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.2.5",
|
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
|
||||||
"symfony/polyfill-php80": "^1.16"
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"symfony/console": "<4.4"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"ext-iconv": "*",
|
|
||||||
"symfony/console": "^4.4|^5.0|^6.0",
|
|
||||||
"symfony/http-kernel": "^4.4|^5.0|^6.0",
|
|
||||||
"symfony/process": "^4.4|^5.0|^6.0",
|
|
||||||
"symfony/uid": "^5.1|^6.0",
|
|
||||||
"twig/twig": "^2.13|^3.0.4"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
|
|
||||||
"ext-intl": "To show region name in time zone dump",
|
|
||||||
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
|
|
||||||
},
|
|
||||||
"bin": [
|
|
||||||
"Resources/bin/var-dump-server"
|
|
||||||
],
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"Resources/functions/dump.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Component\\VarDumper\\": ""
|
|
||||||
},
|
|
||||||
"exclude-from-classmap": [
|
|
||||||
"/Tests/"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"debug",
|
|
||||||
"dump"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"source": "https://github.com/symfony/var-dumper/tree/v5.4.48"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2024-11-08T15:21:10+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "topthink/framework",
|
|
||||||
"version": "v5.1.42",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/top-think/framework.git",
|
|
||||||
"reference": "ecf1a90d397d821ce2df58f7d47e798c17eba3ad"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/top-think/framework/zipball/ecf1a90d397d821ce2df58f7d47e798c17eba3ad",
|
|
||||||
"reference": "ecf1a90d397d821ce2df58f7d47e798c17eba3ad",
|
|
||||||
"shasum": "",
|
|
||||||
"mirrors": [
|
|
||||||
{
|
|
||||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
|
||||||
"preferred": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.6.0",
|
|
||||||
"topthink/think-installer": "2.*"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"johnkary/phpunit-speedtrap": "^1.0",
|
|
||||||
"mikey179/vfsstream": "~1.6",
|
|
||||||
"phpdocumentor/reflection-docblock": "^2.0",
|
|
||||||
"phploc/phploc": "2.*",
|
|
||||||
"phpunit/phpunit": "^5.0|^6.0",
|
|
||||||
"sebastian/phpcpd": "2.*",
|
|
||||||
"squizlabs/php_codesniffer": "2.*"
|
|
||||||
},
|
|
||||||
"type": "think-framework",
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"Apache-2.0"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "liu21st",
|
|
||||||
"email": "liu21st@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "yunwuxin",
|
|
||||||
"email": "448901948@qq.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "the new thinkphp framework",
|
|
||||||
"homepage": "http://thinkphp.cn/",
|
|
||||||
"keywords": [
|
|
||||||
"framework",
|
|
||||||
"orm",
|
|
||||||
"thinkphp"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/top-think/framework/issues",
|
|
||||||
"source": "https://github.com/top-think/framework/tree/v5.1.42"
|
|
||||||
},
|
|
||||||
"time": "2022-10-25T15:04:49+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "topthink/think-helper",
|
|
||||||
"version": "v3.1.10",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/top-think/think-helper.git",
|
|
||||||
"reference": "ac66cc0859a12cd5d73258f50f338aadc95e9b46"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/top-think/think-helper/zipball/ac66cc0859a12cd5d73258f50f338aadc95e9b46",
|
|
||||||
"reference": "ac66cc0859a12cd5d73258f50f338aadc95e9b46",
|
|
||||||
"shasum": "",
|
|
||||||
"mirrors": [
|
|
||||||
{
|
|
||||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
|
||||||
"preferred": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.1.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "^9.5"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"src/helper.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"think\\": "src"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"Apache-2.0"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "yunwuxin",
|
|
||||||
"email": "448901948@qq.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "The ThinkPHP6 Helper Package",
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/top-think/think-helper/issues",
|
|
||||||
"source": "https://github.com/top-think/think-helper/tree/v3.1.10"
|
|
||||||
},
|
|
||||||
"time": "2024-11-21T01:47:51+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "topthink/think-installer",
|
|
||||||
"version": "v2.0.5",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/top-think/think-installer.git",
|
|
||||||
"reference": "38ba647706e35d6704b5d370c06f8a160b635f88"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/top-think/think-installer/zipball/38ba647706e35d6704b5d370c06f8a160b635f88",
|
|
||||||
"reference": "38ba647706e35d6704b5d370c06f8a160b635f88",
|
|
||||||
"shasum": "",
|
|
||||||
"mirrors": [
|
|
||||||
{
|
|
||||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
|
||||||
"preferred": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"composer-plugin-api": "^1.0||^2.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"composer/composer": "^1.0||^2.0"
|
|
||||||
},
|
|
||||||
"type": "composer-plugin",
|
|
||||||
"extra": {
|
|
||||||
"class": "think\\composer\\Plugin"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"think\\composer\\": "src"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"Apache-2.0"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "yunwuxin",
|
|
||||||
"email": "448901948@qq.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/top-think/think-installer/issues",
|
|
||||||
"source": "https://github.com/top-think/think-installer/tree/v2.0.5"
|
|
||||||
},
|
|
||||||
"time": "2021-01-14T12:12:14+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "topthink/think-queue",
|
|
||||||
"version": "v2.0.4",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/top-think/think-queue.git",
|
|
||||||
"reference": "d9b8f38c7af8ad770257b0d7db711ce8b12a6969"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/top-think/think-queue/zipball/d9b8f38c7af8ad770257b0d7db711ce8b12a6969",
|
|
||||||
"reference": "d9b8f38c7af8ad770257b0d7db711ce8b12a6969",
|
|
||||||
"shasum": "",
|
|
||||||
"mirrors": [
|
|
||||||
{
|
|
||||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
|
||||||
"preferred": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"topthink/framework": "5.1.*",
|
|
||||||
"topthink/think-helper": ">=1.0.4",
|
|
||||||
"topthink/think-installer": "^2.0"
|
|
||||||
},
|
|
||||||
"type": "think-extend",
|
|
||||||
"extra": {
|
|
||||||
"think-config": {
|
|
||||||
"queue": "src/config.php"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"src/common.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"think\\": "src"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"Apache-2.0"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "yunwuxin",
|
|
||||||
"email": "448901948@qq.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "The ThinkPHP5 Queue Package",
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/top-think/think-queue/issues",
|
|
||||||
"source": "https://github.com/top-think/think-queue/tree/2.0"
|
|
||||||
},
|
|
||||||
"time": "2018-05-11T06:55:55+00:00"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"packages-dev": [],
|
|
||||||
"aliases": [],
|
|
||||||
"minimum-stability": "stable",
|
|
||||||
"stability-flags": [],
|
|
||||||
"prefer-stable": false,
|
|
||||||
"prefer-lowest": false,
|
|
||||||
"platform": [],
|
|
||||||
"platform-dev": [],
|
|
||||||
"plugin-api-version": "2.3.0"
|
|
||||||
}
|
|
||||||
52
package-lock.json
generated
52
package-lock.json
generated
@@ -1,52 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "yi-shi",
|
|
||||||
"lockfileVersion": 3,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"": {
|
|
||||||
"dependencies": {
|
|
||||||
"sonner": "^2.0.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/react": {
|
|
||||||
"version": "19.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
|
|
||||||
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/react-dom": {
|
|
||||||
"version": "19.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
|
|
||||||
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
|
||||||
"scheduler": "^0.26.0"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"react": "^19.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/scheduler": {
|
|
||||||
"version": "0.26.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
|
|
||||||
"integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peer": true
|
|
||||||
},
|
|
||||||
"node_modules/sonner": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peerDependencies": {
|
|
||||||
"react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
|
|
||||||
"react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
"sonner": "^2.0.3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user