超管后台 - 对接删除项目
This commit is contained in:
@@ -36,8 +36,8 @@ Route::group('', function () {
|
|||||||
Route::group('company', function () {
|
Route::group('company', function () {
|
||||||
Route::post('create', 'app\superadmin\controller\company\CreateCompanyController@index');
|
Route::post('create', 'app\superadmin\controller\company\CreateCompanyController@index');
|
||||||
Route::post('update', 'app\superadmin\controller\company\UpdateCompanyController@index');
|
Route::post('update', 'app\superadmin\controller\company\UpdateCompanyController@index');
|
||||||
|
Route::post('delete', 'app\superadmin\controller\company\DeleteCompanyController@index');
|
||||||
Route::get('list', 'app\superadmin\controller\company\GetCompanyListController@index');
|
Route::get('list', 'app\superadmin\controller\company\GetCompanyListController@index');
|
||||||
Route::get('detail/:id', 'app\superadmin\controller\company\GetCompanyDetailForUpdateController@index');
|
Route::get('detail/:id', 'app\superadmin\controller\company\GetCompanyDetailForUpdateController@index');
|
||||||
Route::post('delete/:id', 'app\superadmin\controller\company\DeleteCompanyController@index');
|
|
||||||
});
|
});
|
||||||
})->middleware(['app\superadmin\middleware\AdminAuth']);
|
})->middleware(['app\superadmin\middleware\AdminAuth']);
|
||||||
@@ -61,16 +61,14 @@ class DeleteCompanyController extends BaseController
|
|||||||
* @param int $companId
|
* @param int $companId
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
protected function deleteUser(int $companId): void
|
protected function deleteUsers(int $companId): void
|
||||||
{
|
{
|
||||||
$user = UserModel::where('companyId', $companId)->find();
|
$users = UserModel::where('companyId', $companId)->select();
|
||||||
|
|
||||||
if (!$user) {
|
foreach ($users as $user) {
|
||||||
throw new \Exception('用户不存在', 404);
|
if (!$user->delete()) {
|
||||||
}
|
throw new \Exception($user->username . ' 用户删除失败', 400);
|
||||||
|
}
|
||||||
if (!$user->delete()) {
|
|
||||||
throw new \Exception('用户删除失败', 400);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +85,7 @@ class DeleteCompanyController extends BaseController
|
|||||||
$this->deleteCompany($companId);
|
$this->deleteCompany($companId);
|
||||||
|
|
||||||
// 2. 删除用户
|
// 2. 删除用户
|
||||||
$this->deleteUser($companId);
|
$this->deleteUsers($companId);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,14 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@
|
|||||||
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
|
||||||
import { Plus, Search, MoreHorizontal, Edit, Eye, Trash, ChevronLeft, ChevronRight } from "lucide-react"
|
import { Plus, Search, MoreHorizontal, Edit, Eye, Trash, ChevronLeft, ChevronRight } from "lucide-react"
|
||||||
import { toast } from "sonner"
|
import { toast } from "sonner"
|
||||||
|
import {
|
||||||
|
Dialog,
|
||||||
|
DialogContent,
|
||||||
|
DialogDescription,
|
||||||
|
DialogFooter,
|
||||||
|
DialogHeader,
|
||||||
|
DialogTitle,
|
||||||
|
} from "@/components/ui/dialog"
|
||||||
|
|
||||||
interface Project {
|
interface Project {
|
||||||
id: number
|
id: number
|
||||||
@@ -27,6 +35,9 @@ export default function ProjectsPage() {
|
|||||||
const [currentPage, setCurrentPage] = useState(1)
|
const [currentPage, setCurrentPage] = useState(1)
|
||||||
const [totalPages, setTotalPages] = useState(1)
|
const [totalPages, setTotalPages] = useState(1)
|
||||||
const [pageSize] = useState(10)
|
const [pageSize] = useState(10)
|
||||||
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)
|
||||||
|
const [deletingProjectId, setDeletingProjectId] = useState<number | null>(null)
|
||||||
|
const [isDeleting, setIsDeleting] = useState(false)
|
||||||
|
|
||||||
// 获取项目列表
|
// 获取项目列表
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -59,6 +70,44 @@ export default function ProjectsPage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleDeleteClick = (projectId: number) => {
|
||||||
|
setDeletingProjectId(projectId)
|
||||||
|
setDeleteDialogOpen(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleConfirmDelete = async () => {
|
||||||
|
if (!deletingProjectId) return
|
||||||
|
|
||||||
|
setIsDeleting(true)
|
||||||
|
try {
|
||||||
|
const response = await fetch("http://yishi.com/company/delete", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
id: deletingProjectId
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
|
||||||
|
const data = await response.json()
|
||||||
|
|
||||||
|
if (data.code === 200) {
|
||||||
|
toast.success("删除成功")
|
||||||
|
// 刷新项目列表
|
||||||
|
window.location.reload()
|
||||||
|
} else {
|
||||||
|
toast.error(data.msg || "删除失败")
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
toast.error("网络错误,请稍后重试")
|
||||||
|
} finally {
|
||||||
|
setIsDeleting(false)
|
||||||
|
setDeleteDialogOpen(false)
|
||||||
|
setDeletingProjectId(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
<div className="flex justify-between">
|
<div className="flex justify-between">
|
||||||
@@ -127,7 +176,10 @@ export default function ProjectsPage() {
|
|||||||
<Edit className="mr-2 h-4 w-4" /> 编辑项目
|
<Edit className="mr-2 h-4 w-4" /> 编辑项目
|
||||||
</Link>
|
</Link>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem className="text-destructive">
|
<DropdownMenuItem
|
||||||
|
className="text-red-600"
|
||||||
|
onClick={() => handleDeleteClick(project.id)}
|
||||||
|
>
|
||||||
<Trash className="mr-2 h-4 w-4" /> 删除项目
|
<Trash className="mr-2 h-4 w-4" /> 删除项目
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
@@ -179,6 +231,34 @@ export default function ProjectsPage() {
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{/* 删除确认对话框 */}
|
||||||
|
<Dialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>
|
||||||
|
<DialogContent>
|
||||||
|
<DialogHeader>
|
||||||
|
<DialogTitle>确认删除</DialogTitle>
|
||||||
|
<DialogDescription>
|
||||||
|
删除项目将会删除本项目关联的所有账号,项目删除后不可恢复,是否确认删除?
|
||||||
|
</DialogDescription>
|
||||||
|
</DialogHeader>
|
||||||
|
<DialogFooter>
|
||||||
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
onClick={() => setDeleteDialogOpen(false)}
|
||||||
|
disabled={isDeleting}
|
||||||
|
>
|
||||||
|
取消
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant="destructive"
|
||||||
|
onClick={handleConfirmDelete}
|
||||||
|
disabled={isDeleting}
|
||||||
|
>
|
||||||
|
{isDeleting ? "删除中..." : "确认删除"}
|
||||||
|
</Button>
|
||||||
|
</DialogFooter>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user