超管后台 - 流量池分页跳转
This commit is contained in:
@@ -10,28 +10,7 @@ class AdministratorPermissions extends Model
|
||||
{
|
||||
// 设置数据表名
|
||||
protected $name = 'administrator_permissions';
|
||||
|
||||
// 设置主键
|
||||
protected $pk = 'id';
|
||||
|
||||
// 自动写入时间戳
|
||||
protected $autoWriteTimestamp = true;
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createTime';
|
||||
protected $updateTime = 'updateTime';
|
||||
protected $deleteTime = 'deleteTime';
|
||||
|
||||
// 定义字段类型
|
||||
protected $type = [
|
||||
'id' => 'integer',
|
||||
'adminId' => 'integer',
|
||||
'permissions' => 'json',
|
||||
'createTime' => 'integer',
|
||||
'updateTime' => 'integer',
|
||||
'deleteTime' => 'integer'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* 保存管理员权限
|
||||
* @param int $adminId 管理员ID
|
||||
|
||||
@@ -10,26 +10,4 @@ class Company extends Model
|
||||
{
|
||||
// 设置数据表名
|
||||
protected $name = 'company';
|
||||
|
||||
// 设置主键
|
||||
protected $pk = 'id';
|
||||
|
||||
// 设置时间格式为datetime类型
|
||||
protected $autoWriteTimestamp = 'datetime';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createTime';
|
||||
protected $updateTime = 'lastUpdateTime';
|
||||
|
||||
// 定义字段类型
|
||||
protected $type = [
|
||||
'id' => 'integer',
|
||||
'tenantId' => 'integer',
|
||||
'isTop' => 'integer',
|
||||
'level' => 'integer',
|
||||
'parentId' => 'integer',
|
||||
'privileges' => 'json',
|
||||
'createTime' => 'datetime',
|
||||
'lastUpdateTime' => 'datetime'
|
||||
];
|
||||
}
|
||||
@@ -10,33 +10,4 @@ class WechatFriend extends Model
|
||||
{
|
||||
// 设置数据表名
|
||||
protected $name = 'wechat_friend';
|
||||
|
||||
// 不使用自增主键
|
||||
protected $pk = null;
|
||||
|
||||
// 指定自动时间字段的格式
|
||||
protected $autoWriteTimestamp = 'datetime';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createTime';
|
||||
protected $updateTime = 'updateTime';
|
||||
|
||||
// 定义字段类型
|
||||
protected $type = [
|
||||
'id' => 'integer',
|
||||
'wechatAccountId' => 'integer',
|
||||
'gender' => 'integer',
|
||||
'addFrom' => 'integer',
|
||||
'isDeleted' => 'integer',
|
||||
'isPassed' => 'integer',
|
||||
'accountId' => 'integer',
|
||||
'groupId' => 'integer',
|
||||
'updateTime' => 'integer',
|
||||
'labels' => 'json',
|
||||
'extendFields' => 'json',
|
||||
'thirdParty' => 'json',
|
||||
'deleteTime' => 'datetime',
|
||||
'passTime' => 'datetime',
|
||||
'createTime' => 'datetime'
|
||||
];
|
||||
}
|
||||
@@ -124,6 +124,7 @@ export default function CustomersPage() {
|
||||
const [totalPages, setTotalPages] = useState(1)
|
||||
const [totalItems, setTotalItems] = useState(0)
|
||||
const [pageSize, setPageSize] = useState(10)
|
||||
const [jumpToPage, setJumpToPage] = useState("")
|
||||
|
||||
// 获取客户列表数据
|
||||
useEffect(() => {
|
||||
@@ -158,6 +159,22 @@ export default function CustomersPage() {
|
||||
}
|
||||
};
|
||||
|
||||
// 处理页码跳转
|
||||
const handleJumpToPage = () => {
|
||||
const page = parseInt(jumpToPage);
|
||||
if (!isNaN(page) && page >= 1 && page <= totalPages) {
|
||||
setCurrentPage(page);
|
||||
setJumpToPage("");
|
||||
}
|
||||
};
|
||||
|
||||
// 处理每页显示条数变化
|
||||
const handlePageSizeChange = (size: string) => {
|
||||
const newSize = parseInt(size);
|
||||
setPageSize(newSize);
|
||||
setCurrentPage(1); // 重置为第一页
|
||||
};
|
||||
|
||||
// Filter customers based on search and filters (兼容示例数据)
|
||||
const filteredCustomers = customersData.filter((customer) => {
|
||||
const matchesSearch =
|
||||
@@ -365,8 +382,25 @@ export default function CustomersPage() {
|
||||
{/* 分页控件 */}
|
||||
{!isLoading && !error && customers.length > 0 && (
|
||||
<div className="flex items-center justify-between px-2">
|
||||
<div className="text-sm text-muted-foreground">
|
||||
共 {totalItems} 条记录,当前第 {currentPage}/{totalPages} 页
|
||||
<div className="flex items-center space-x-4">
|
||||
<div className="text-sm text-muted-foreground">
|
||||
共 {totalItems} 条记录,当前第 {currentPage}/{totalPages} 页
|
||||
</div>
|
||||
<div className="flex items-center space-x-2">
|
||||
<span className="text-sm">每页显示:</span>
|
||||
<Select value={pageSize.toString()} onValueChange={handlePageSizeChange}>
|
||||
<SelectTrigger className="h-8 w-[70px]">
|
||||
<SelectValue placeholder={pageSize} />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="10">10</SelectItem>
|
||||
<SelectItem value="30">30</SelectItem>
|
||||
<SelectItem value="50">50</SelectItem>
|
||||
<SelectItem value="100">100</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<span className="text-sm">条</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-2">
|
||||
<Button
|
||||
@@ -419,6 +453,29 @@ export default function CustomersPage() {
|
||||
>
|
||||
<ChevronRight className="h-4 w-4" />
|
||||
</Button>
|
||||
|
||||
{/* 页码跳转 */}
|
||||
<div className="flex items-center space-x-2 ml-2">
|
||||
<span className="text-sm">跳转到</span>
|
||||
<Input
|
||||
type="number"
|
||||
value={jumpToPage}
|
||||
onChange={(e) => setJumpToPage(e.target.value)}
|
||||
onKeyDown={(e) => e.key === "Enter" && handleJumpToPage()}
|
||||
className="h-8 w-16 text-center"
|
||||
min={1}
|
||||
max={totalPages}
|
||||
/>
|
||||
<span className="text-sm">页</span>
|
||||
<Button
|
||||
size="sm"
|
||||
variant="outline"
|
||||
onClick={handleJumpToPage}
|
||||
disabled={!jumpToPage || isNaN(parseInt(jumpToPage)) || parseInt(jumpToPage) < 1 || parseInt(jumpToPage) > totalPages}
|
||||
>
|
||||
确定
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user