最新版本

This commit is contained in:
2026-05-26 09:44:21 +08:00
parent 822ed9a099
commit fa41edf857
24 changed files with 597 additions and 163 deletions

View File

@@ -7,6 +7,14 @@ use app\admin\service\AccountService;
class AccountManagement extends BaseController
{
/* 查询所有用户 */
public function getAllUsers(AccountService $accountService)
{
$result = $accountService->getAllUsers();
return json(['code' => 200, 'message' => '查询成功', 'data' => $result]);
}
/* 注册用户 */
public function addAccount(AccountService $accountService)
{
@@ -14,7 +22,7 @@ class AccountManagement extends BaseController
$params = $this->request->post();
# 参数校验
if (empty($params['real_name'])) {
if (empty($params['username'])) {
return json(['code' => 400, 'message' => '缺少必要参数']);
}
@@ -31,4 +39,26 @@ class AccountManagement extends BaseController
]);
}
}
/* 更新用户状态 */
public function updateAccountStatus(AccountService $accountService, $id, $status)
{
try {
$result = $accountService->updateAccountStatus($id, $status);
return json(['code' => 200, 'message' => '账户状态更新成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 400, 'message' => $e->getMessage(), 'data' => null]);
}
}
/* 删除用户 */
public function deleteAccount(AccountService $accountService, $id)
{
try {
$result = $accountService->deleteAccount($id);
return json(['code' => 200, 'message' => '账户删除成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 400, 'message' => $e->getMessage(), 'data' => null]);
}
}
}

View File

@@ -0,0 +1,89 @@
<?php
namespace app\admin\controller;
use app\BaseController;
use app\common\service\TicketService;
use app\admin\service\CompanyOperatorsService;
class CompanyAndOperators extends BaseController
{
/**
* 获取所有运营人员名称
*/
public function getAllOperators(TicketService $ticketService)
{
$result = $ticketService->getAllOperators();
return json(['code' => 200, 'msg' => '查询成功', 'data' => $result]);
}
public function TestgetAllOperators(TicketService $ticketService)
{
$result = $ticketService->TestgetAllOperators();
return json(['code' => 200, 'msg' => '查询成功', 'data' => $result]);
}
/**
* 获取我方员工列表
*/
public function getStaffList(TicketService $ticketService)
{
$result = $ticketService->getStaffList();
return json(['code' => 200, 'msg' => '查询成功', 'data' => $result]);
}
/* 删除运营 */
public function deleteOperator(CompanyOperatorsService $CompanyOperatorService, $id)
{
$result = $CompanyOperatorService->deleteOperator($id);
return json(['code' => 200, 'msg' => '删除成功', 'data' => $result]);
}
/* 删除客户单位 */
public function deleteCompany(CompanyOperatorsService $CompanyOperatorService, $id)
{
$result = $CompanyOperatorService->deleteCompany($id);
if (!$result) {
return json(['code' => 400, 'msg' => '删除失败', 'data' => null]);
}
return json(['code' => 200, 'msg' => '删除成功']);
}
/* 新增公司(客户)单位 */
public function addCompany(CompanyOperatorsService $CompanyOperatorService)
{
$data = $this->request->post();
try {
$result = $CompanyOperatorService->addCompany($data);
return json(['code' => 200, 'msg' => '创建成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 400, 'msg' => $e->getMessage(), 'data' => null]);
}
}
/* 新增运营人员 */
public function addOperator(CompanyOperatorsService $CompanyOperatorService)
{
$data = $this->request->post();
try {
$result = $CompanyOperatorService->addOperator($data);
return json(['code' => 200, 'msg' => '创建成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 400, 'msg' => $e->getMessage(), 'data' => null]);
}
}
}

View File

@@ -22,7 +22,8 @@ class Ticket extends BaseController
"page" => $this->request->param('page', 1, 'intval'),
"limit" => $this->request->param('limit', 20, 'intval'),
"status" => $this->request->param('status', null),
"operator_name" => $this->request->param('operator_name', null),
"operator_id" => $this->request->param('operator_id', null),
"user_id" => $this->request->param('user_id', null),
"searchKeyword" => $this->request->param('search', null),
"sortOrder" => $this->request->param('sort_order', 'desc'),
];
@@ -69,6 +70,39 @@ class Ticket extends BaseController
}
}
/**
* 统计各状态工单数量
*/
public function getTicketDashboardStats(TicketService $ticketService)
{
$result = $ticketService->getTicketDashboardStats();
return json(['code' => 200, 'msg' => '查询成功', 'data' => $result]);
}
/**
* 批量更新工单
*/
public function batchUpdate(TicketService $ticketService)
{
$adminId = Session::get('user_info.id'); // 获取当前登录管理员ID
$data = $this->request->post();
$ids = $data['ids'] ?? [];
if (!is_array($ids) || empty($ids)) {
return json(['code' => 400, 'msg' => 'ids 必须是非空数组', 'data' => []]);
}
$allowFields = ['status', 'lock_time'];
try {
$result = $ticketService->batchUpdateTickets($ids, $data, $allowFields, $adminId, true);
return json(['code' => 200, 'msg' => '批量更新成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 400, 'msg' => $e->getMessage(), 'data' => []]);
}
}
/**
* 删除一个工单(仅后台可调用)
*/

View File

@@ -1,30 +0,0 @@
<?php
namespace app\admin\controller;
use app\BaseController;
use app\common\service\TicketService;
class TicketFilter extends BaseController
{
/**
* 获取所有运营人员名称 (下拉筛选用)
*/
public function getAllOperators(TicketService $ticketService)
{
$result = $ticketService->getAllOperators();
return json(['code' => 200, 'msg' => '查询成功', 'data' => $result]);
}
/**
* 获取我方员工列表 (下拉选择用)
*/
public function getStaffList(TicketService $ticketService)
{
$result = $ticketService->getStaffList();
return json(['code' => 200, 'msg' => '查询成功', 'data' => $result]);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace app\admin\controller;
use app\BaseController;
use app\admin\service\UtillService;
use think\facade\Session;
class Utill extends BaseController
{
/* 获取需要导出的数据
$range范围week,month
*/
public function getExportData(UtillService $UtillService)
{
$range = $this->request->post('range');
try {
# session中获取当前登录是否是管理员
$isAdmin = Session::get('user_info.role') === 'admin' ? true : false; // 后续用来判断
if (!$isAdmin) {
return json(['code' => 403, 'msg' => '权限不足', 'data' => []]);
}
$data = $UtillService->getExportData($range);
return json(['code' => 200, 'msg' => '查询成功', 'data' => $data]);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => '查询失败', 'data' => []]);
}
}
}

View File

@@ -2,30 +2,21 @@
namespace app\admin\middleware;
use thans\jwt\facade\JWTAuth;
use thans\jwt\exception\TokenExpiredException;
use think\facade\Session;
class Auth
{
public function handle($request, \Closure $next)
{
try {
// 1. 核心:必须先执行 auth(),它会自动从 Header 读取 Bearer Token 并验证
// 如果过期或非法,这里会直接抛出异常
$payload = JWTAuth::auth();
// $payload = JWTAuth::getPayload(); 这个是获取数据进行解码token
$request->login_user_id = (int)$payload['user_id'] ?? null;
$request->login_role = $payload['role'] ?? null;
return $next($request);
}catch (TokenExpiredException $e){
// 捕获token过期异常
return json(['code' => 401, 'msg' => '登录已过期,请重新登录'],401);
} catch (\Exception $e) {
// 如果报错,返回具体的错误信息,方便我们排查
return json(['code' => 400, 'msg' => '权限校验失败:' . $e->getMessage()], 400);
if (!Session::has('user_info')) {
return json(['code' => 401, 'msg' => '未登录,请先登录']);
}
$user = Session::get('user_info');
$request->login_user_id = $user['id'] ?? null;
$request->login_role = $user['role'] ?? null;
return $next($request);
}
}

View File

@@ -1,19 +1,29 @@
<?php
use think\facade\Route;
use app\admin\middleware\Auth;
Route::get('ticketsfind', 'Ticket/ticketsFind'); // 通用查询方法
// Route::group(function () {
// // Route::get('ticketsfind', 'Ticket/ticketsFind'); // 通用查询方法
// Route::post('addticket', 'Ticket/save'); // 保存工单
// Route::put('ticket/:id', 'Ticket/updateTicket'); // 更新工单
// Route::delete('ticket/:id', 'Ticket/deleteTicket'); // 删除工单
// Route::get('operators', 'Ticket/getAllOperators'); // 根据运营人员查询
// Route::get('customers', 'Customers/getList');
// Route::post('addcustomername', 'Customers/addCustomer'); //添加客户名称
// Route::post('addemployee', 'Customers/addEmployee');
// Route::get('getStaffList', 'Ticket/getStaffList');
// Route::delete('deleteemployee/:empId', 'Customers/deleteEmployee');
// Route::delete('deletecustomer/:customerId', 'Customers/deleteCustomer');
// Route::get('getticketstatuscount', 'Ticket/getTicketStatusCount');
// })->middleware(Auth::class); // 只有这里需要 Token
Route::group(function () {
Route::get('ticketsfind', 'Ticket/ticketsFind');
Route::post('addticket', 'Ticket/createTicket');
Route::put('ticket/:id', 'Ticket/updateTicket');
Route::delete('ticket/:id', 'Ticket/deleteTicket');
Route::put('tickets/batch-update', 'Ticket/batchUpdate');
Route::get('getticketdashboardstats', 'Ticket/getTicketDashboardStats');
Route::get('getUserStaffList', 'CompanyAndOperators/getStaffList');
Route::get('operators', 'CompanyAndOperators/getAllOperators');
Route::get('getOperatorList', 'CompanyAndOperators/TestgetAllOperators');
Route::delete('deleteOperator/:id', 'CompanyAndOperators/deleteOperator');
Route::delete('deleteCompany/:id', 'CompanyAndOperators/deleteCompany');
Route::post('addCompany', 'CompanyAndOperators/addCompany');
Route::post('addOperator', 'CompanyAndOperators/addOperator');
Route::get('getAllUsers', 'AccountManagement/getAllUsers');
Route::post('addAccount', 'AccountManagement/addAccount');
Route::put('updateAccountStatus/:id/:status', 'AccountManagement/updateAccountStatus');
Route::delete('deleteAccount/:id', 'AccountManagement/deleteAccount');
Route::post('getExportData', 'Utill/getExportData');
})->middleware(Auth::class);

View File

@@ -6,21 +6,44 @@ use app\common\model\User as UserModel;
class AccountService
{
/* 查询所有用户 */
public function getAllUsers()
{
$users = UserModel::with('company')->select();
return $users->map(function ($user) {
return [
'id' => $user->id,
'company' => [
'id' => $user->company_id,
'company_name' => $user->company->company_name
],
'username' => $user->username,
'real_name' => $user->real_name,
'role' => $user->role,
'status' => $user->status,
];
})->toArray();
}
/* 注册账户 */
public function createAccount($data)
{
if (empty($data['username'])) {
$data['username'] = $data['real_name'];
{
if (empty($data['real_name'])) {
$data['real_name'] = $data['username'];
}
# 检查数据库中是否有相同用户名账户
$exist = UserModel::where('username', $data['username'])->find();
if ($exist) {
throw new \Exception('用户名已存在');
}
$insertData = [
'username' => $data['username'] ?? $data['real_name'],
'real_name' => $data['real_name'],
'company_id' => $data['company_id'] ?? 0,
'username' => $data['username'],
'real_name' => $data['real_name'] ?? $data['username'],
'password' => password_hash('123456', PASSWORD_DEFAULT),
'role' => $data['role'] ?? 'user',
'status' => 1,
@@ -31,4 +54,32 @@ class AccountService
/** @var \think\Model $user */
return $user->visible(['id', 'username', 'real_name', 'role', 'status'])->toArray();
}
/* 更新用户状态 */
public function updateAccountStatus($id, $status)
{
$user = UserModel::find($id);
if (!$user) {
throw new \Exception('用户不存在');
}
$user->status = $status;
$user->save();
return $user->visible(['id', 'username', 'real_name', 'role', 'status'])->toArray();
}
/* 删除用户 */
public function deleteAccount($id)
{
$user = UserModel::find($id);
if (!$user) {
throw new \Exception('用户不存在');
}
$user->delete();
return ['id' => $id];
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace app\admin\service;
use app\common\model\CompanyOperators;
use app\common\model\Companys;
class CompanyOperatorsService
{
public function deleteOperator($id)
{
$result = CompanyOperators::destroy($id);
return $result;
}
public function deleteCompany($id)
{
$result = Companys::customDelete($id);
return $result;
}
public function addCompany($data){
# 判断该公司名称是否已存在
$existingCompany = Companys::where('company_name', $data['company_name'])->find();
if ($existingCompany) {
throw new \Exception('公司名称已存在');
}
$result = Companys::create($data);
return $result;
}
public function addOperator($data){
# 判断运营人员是否存在
$existingOperator = CompanyOperators::where('operator_name', $data['operator_name'])->find();
if ($existingOperator) {
throw new \Exception('运营人员已存在');
}
$result = CompanyOperators::create($data);
return $result;
}
}

View File

@@ -1,48 +0,0 @@
<?php
namespace app\admin\service;
use app\common\model\Customers as CustomersModel;
use app\common\model\CustomerEmployees;
class CustomersService
{
public function selectCustomersWithEmployees()
{
//with 预载入 ,解决N+1问题
$list = CustomersModel::with('employees')->select();
return $list;
}
public function addCustomer($companyName)
{
$id = CustomersModel::create([
'company_name' => $companyName
]);
return $id;
}
public function addEmployee($empName, $Id)
{
$id = CustomersModel::where('id', $Id)->find()->employees()->save([
'employee_name' => $empName
]);
return $id;
}
public function deleteEmployee($empId)
{
$result = CustomerEmployees::destroy($empId);
return $result; // 返回受影响的行数删除一行就1,没有删除就是0
}
public function deleteCustomer($customerId)
{
// 删除客户单位会自动删除关联的员工(假设你在模型中设置了级联删除)
$result = CustomersModel::destroy($customerId);
return $result; // 返回受影响的行数删除一行就1,没有删除就是0
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace app\admin\service;
use app\common\model\Tickets;
class UtillService
{
/* 获取需要导出的数据 */
public function getExportData($range)
{
$list = Tickets::with(['ticketStaff', 'ticketOperator'])->whereTime('lock_time', $range)->select();
foreach ($list as $item) {
$item->visible(['id', 'website', 'datanum', 'remark', 'create_time', 'lock_time']);
$item->append(['username', 'operator_name'])->hidden(['ticketStaff', 'ticketOperator']);
}
return $list;
}
}