diff --git a/Cunkebao/app/workspace/traffic-distribution/page.tsx b/Cunkebao/app/workspace/traffic-distribution/page.tsx index 48c858ddd..715e39d35 100644 --- a/Cunkebao/app/workspace/traffic-distribution/page.tsx +++ b/Cunkebao/app/workspace/traffic-distribution/page.tsx @@ -28,21 +28,44 @@ import Link from "next/link" import BottomNav from "@/app/components/BottomNav" import { api } from "@/lib/api" import { showToast } from "@/lib/toast" +import { Switch } from "@/components/ui/switch" interface DistributionPlan { - id: string + id: string | number + companyId?: number name: string - status: "active" | "paused" - source: string - sourceIcon: string - targetGroups: string[] - totalUsers: number - dailyAverage: number - deviceCount: number - poolCount: number - lastUpdated: string + type?: number + status: number // 1: 进行中, 0: 已暂停 + autoStart?: number + userId?: number createTime: string - creator: string + updateTime?: string + config: { + id?: number + workbenchId?: number + distributeType?: number + maxPerDay?: number + timeType?: number + startTime?: string + endTime?: string + account?: string[] + devices: string[] + pools: string[] + createTime?: string + updateTime?: string + lastUpdated?: string + total: { + dailyAverage: number + totalAccounts: number + deviceCount: number + poolCount: number + totalUsers: number + } + } + creatorName?: string + auto_like?: any + moments_sync?: any + group_push?: any } interface ApiResponse { @@ -111,7 +134,7 @@ export default function TrafficDistributionPage() { const handleDelete = async (planId: string) => { const loadingToast = showToast("正在删除计划...", "loading", true); try { - const response = await api.delete(`/v1/traffic-distribution/delete?id=${planId}`) + const response = await api.delete(`/v1/workbench/delete?id=${planId}`) if (response.code === 200) { loadingToast.remove(); @@ -136,24 +159,23 @@ export default function TrafficDistributionPage() { router.push(`/workspace/traffic-distribution/${planId}`) } - const togglePlanStatus = async (planId: string, currentStatus: "active" | "paused") => { + const togglePlanStatus = async (planId: string, currentStatus: number) => { const loadingToast = showToast("正在更新计划状态...", "loading", true); try { - const response = await api.post('/v1/traffic-distribution/update-status', { + const response = await api.post('/v1/workbench/update-status', { id: planId, - status: currentStatus === "active" ? "paused" : "active" + status: currentStatus === 1 ? 0 : 1 }) if (response.code === 200) { setPlans(plans.map(plan => plan.id === planId - ? { ...plan, status: currentStatus === "active" ? "paused" : "active" } + ? { ...plan, status: currentStatus === 1 ? 0 : 1 } : plan )) - - const newStatus = currentStatus === "active" ? "paused" : "active" + const newStatus = currentStatus === 1 ? 0 : 1 loadingToast.remove(); - showToast(response.msg || `计划${newStatus === "active" ? "已启动" : "已暂停"}`, "success") + showToast(response.msg || `计划${newStatus === 1 ? "已启动" : "已暂停"}`, "success") } else { loadingToast.remove(); showToast(response.msg || "请稍后再试", "error") @@ -233,59 +255,52 @@ export default function TrafficDistributionPage() {
{plans.map((plan) => ( - {/* 卡片头部 */} + {/* 卡片头部:全部元素一行排列,间距紧凑 */}
-
-
{plan.sourceIcon}
-
-

{plan.name}

-
- - {plan.status == 1 ? "进行中" : "已暂停"} - - {plan.config.pools.map((group, index) => ( - - {group} - - ))} -
-
+
+ {plan.name} + {plan.status === 1 ? "进行中" : "已暂停"} + togglePlanStatus(plan.id.toString(), Number(plan.status))} + className="ml-2" + /> +
+ + + + + + {/* handleView(plan.id.toString())}> + + 查看详情 + */} + handleEdit(plan.id.toString())}> + + 编辑计划 + + togglePlanStatus(plan.id.toString(), Number(plan.status))}> + {plan.status === 1 ? ( + <> + + 暂停计划 + + ) : ( + <> + + 启动计划 + + )} + + handleDelete(plan.id.toString())} className="text-red-600"> + + 删除计划 + + +
- - - - - - - handleView(plan.id)}> - - 查看详情 - - handleEdit(plan.id)}> - - 编辑计划 - - togglePlanStatus(plan.id, plan.status)}> - {plan.status === "active" ? ( - <> - - 暂停计划 - - ) : ( - <> - - 启动计划 - - )} - - handleDelete(plan.id)} className="text-red-600"> - - 删除计划 - - -
{/* 卡片内容 - 上3下2布局,图标在文字左侧 */} @@ -312,7 +327,7 @@ export default function TrafficDistributionPage() {
日均分发量
-
{plan.config.total.totalUsers}
+
{plan.config.total.totalAccounts}
总流量池数量
diff --git a/Server/application/api/config/route.php b/Server/application/api/config/route.php index 55f29341b..566864d25 100644 --- a/Server/application/api/config/route.php +++ b/Server/application/api/config/route.php @@ -15,6 +15,7 @@ Route::group('v1', function () { Route::get('department/list', 'app\\api\\controller\\AccountController@getDepartmentList'); // 获取部门列表 √ Route::post('department/update', 'app\\api\\controller\\AccountController@updateDepartment'); // 更新部门 √ Route::post('department/delete', 'app\\api\\controller\\AccountController@deleteDepartment'); // 删除部门 √ + Route::post('department/setPrivileges', 'app\\api\\controller\\AccountController@setPrivileges'); // 设置部门权限 √ }); // Device控制器路由 diff --git a/Server/application/api/controller/AccountController.php b/Server/application/api/controller/AccountController.php index 0aaecb526..aeadb7521 100644 --- a/Server/application/api/controller/AccountController.php +++ b/Server/application/api/controller/AccountController.php @@ -520,7 +520,7 @@ class AccountController extends BaseController * 修改部门权限 * @return \think\response\Json */ - public function setPrivileges($id = '') + public function setPrivileges($data = []) { // 获取授权token $authorization = trim($this->request->header('authorization', $this->authorization)); @@ -530,23 +530,26 @@ class AccountController extends BaseController try { // 获取并验证请求参数 - $id = !empty($id) ? $id : $this->request->param('id', 0); - + $id = !empty($data['id']) ? $data['id'] : $this->request->param('id', 0); if (empty($id)) { return errorJson('部门ID不能为空'); } + $privilegeIds = !empty($data['privilegeIds']) ? $data['privilegeIds'] : '1001,1002,1004,1023,1406,20003,20021,20022,20023,20032,20041,20049,20054,20055,20060,20100,20102,20107'; + $privilegeIds = explode(',',$privilegeIds); // 验证部门是否存在 $department = CompanyModel::where('id', $id)->find(); if (empty($department)) { return errorJson('部门不存在'); } + + // 构建请求参数 $params = [ 'departmentId' => $id, - 'privilegeIds' => [1001,1002,1004,1023,1406,20003,20021,20022,20023,20032,20041,20049,20054,20055,20060,20100,20102,20107], + 'privilegeIds' => $privilegeIds, 'syncPrivilege' => true ]; diff --git a/Server/application/cunkebao/controller/WorkbenchController.php b/Server/application/cunkebao/controller/WorkbenchController.php index 872fc7541..319248b07 100644 --- a/Server/application/cunkebao/controller/WorkbenchController.php +++ b/Server/application/cunkebao/controller/WorkbenchController.php @@ -307,7 +307,7 @@ class WorkbenchController extends Controller $day = intval($day); - if($dailyAverage > 0){ + if($dailyAverage > 0 && $totalAccounts > 0 && $day > 0){ $dailyAverage = $dailyAverage / $totalAccounts / $day; } @@ -706,17 +706,15 @@ class WorkbenchController extends Controller return json(['code' => 400, 'msg' => '请求方式错误']); } - $param = $this->request->post(); + $id = $this->request->param('id',''); - // 验证数据 - $validate = new WorkbenchValidate; - if (!$validate->scene('update_status')->check($param)) { - return json(['code' => 400, 'msg' => $validate->getError()]); + if(empty($id)){ + return json(['code' => 400, 'msg' => '参数错误']); } $workbench = Workbench::where([ - ['id', '=', $param['id']], - ['userId', '=', $this->request->userInfo['id']] + ['id', '=', $id], + ['companyId', '=', $this->request->userInfo['companyId']] ])->find(); if (empty($workbench)) { diff --git a/Server/application/superadmin/controller/company/CreateCompanyController.php b/Server/application/superadmin/controller/company/CreateCompanyController.php index d21e58133..ce39b7cec 100644 --- a/Server/application/superadmin/controller/company/CreateCompanyController.php +++ b/Server/application/superadmin/controller/company/CreateCompanyController.php @@ -266,8 +266,9 @@ class CreateCompanyController extends BaseController */ protected function setDepartmentPrivileges(array $params): void { - $params = ArrHelper::getValue('companyId=id,companyId,name,memo,status', $params); - $result = CompanyModel::create($params); + $params = ArrHelper::getValue('companyId', $params); + $accountController = new \app\api\controller\AccountController(); + $accountController->setPrivileges(['id' => $params['companyId']]); } /**