qqq
This commit is contained in:
@@ -380,7 +380,7 @@ export default function EquipmentPage() {
|
|||||||
<Filter className="h-4 w-4 mr-2" />
|
<Filter className="h-4 w-4 mr-2" />
|
||||||
<SelectValue placeholder="筛选状态" />
|
<SelectValue placeholder="筛选状态" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="all">全部状态</SelectItem>
|
<SelectItem value="all">全部状态</SelectItem>
|
||||||
<SelectItem value="1">正常</SelectItem>
|
<SelectItem value="1">正常</SelectItem>
|
||||||
<SelectItem value="2">即将到期</SelectItem>
|
<SelectItem value="2">即将到期</SelectItem>
|
||||||
@@ -420,10 +420,10 @@ export default function EquipmentPage() {
|
|||||||
onValueChange={(value) => setNewEquipment({ ...newEquipment, type: value })}
|
onValueChange={(value) => setNewEquipment({ ...newEquipment, type: value })}
|
||||||
disabled={loadingEquipmentTypes}
|
disabled={loadingEquipmentTypes}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder={loadingEquipmentTypes ? "加载中..." : "选择设备类型"} />
|
<SelectValue placeholder={loadingEquipmentTypes ? "加载中..." : "选择设备类型"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{Object.entries(equipmentTypes).map(([key, value]) => (
|
{Object.entries(equipmentTypes).map(([key, value]) => (
|
||||||
<SelectItem key={key} value={key}>
|
<SelectItem key={key} value={key}>
|
||||||
{value}
|
{value}
|
||||||
@@ -462,7 +462,7 @@ export default function EquipmentPage() {
|
|||||||
: "选择商户"
|
: "选择商户"
|
||||||
} />
|
} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px] overflow-y-auto">
|
||||||
{merchants.length === 0 && !loadingMerchants ? (
|
{merchants.length === 0 && !loadingMerchants ? (
|
||||||
<SelectItem value="no-data" disabled>
|
<SelectItem value="no-data" disabled>
|
||||||
点击加载商户数据
|
点击加载商户数据
|
||||||
@@ -501,10 +501,10 @@ export default function EquipmentPage() {
|
|||||||
value={newEquipment.status}
|
value={newEquipment.status}
|
||||||
onValueChange={(value) => setNewEquipment({ ...newEquipment, status: value })}
|
onValueChange={(value) => setNewEquipment({ ...newEquipment, status: value })}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder="选择设备状态" />
|
<SelectValue placeholder="选择设备状态" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="normal">正常</SelectItem>
|
<SelectItem value="normal">正常</SelectItem>
|
||||||
<SelectItem value="expiring">即将到期</SelectItem>
|
<SelectItem value="expiring">即将到期</SelectItem>
|
||||||
<SelectItem value="expired">已到期</SelectItem>
|
<SelectItem value="expired">已到期</SelectItem>
|
||||||
@@ -564,10 +564,10 @@ export default function EquipmentPage() {
|
|||||||
onValueChange={(value) => setEditEquipment({ ...editEquipment, type: value })}
|
onValueChange={(value) => setEditEquipment({ ...editEquipment, type: value })}
|
||||||
disabled={loadingEquipmentTypes}
|
disabled={loadingEquipmentTypes}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder={loadingEquipmentTypes ? "加载中..." : "选择设备类型"} />
|
<SelectValue placeholder={loadingEquipmentTypes ? "加载中..." : "选择设备类型"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{Object.entries(equipmentTypes).map(([key, value]) => (
|
{Object.entries(equipmentTypes).map(([key, value]) => (
|
||||||
<SelectItem key={key} value={key}>
|
<SelectItem key={key} value={key}>
|
||||||
{value}
|
{value}
|
||||||
@@ -592,10 +592,10 @@ export default function EquipmentPage() {
|
|||||||
onValueChange={(value) => setEditEquipment({ ...editEquipment, merchantId: value })}
|
onValueChange={(value) => setEditEquipment({ ...editEquipment, merchantId: value })}
|
||||||
disabled={loadingMerchants}
|
disabled={loadingMerchants}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder={loadingMerchants ? "加载中..." : "选择商户"} />
|
<SelectValue placeholder={loadingMerchants ? "加载中..." : "选择商户"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{merchants.map((merchant) => (
|
{merchants.map((merchant) => (
|
||||||
<SelectItem key={merchant.id} value={merchant.merchantsId || merchant.id}>
|
<SelectItem key={merchant.id} value={merchant.merchantsId || merchant.id}>
|
||||||
{merchant.merchantName}
|
{merchant.merchantName}
|
||||||
@@ -628,10 +628,10 @@ export default function EquipmentPage() {
|
|||||||
value={editEquipment.status}
|
value={editEquipment.status}
|
||||||
onValueChange={(value) => setEditEquipment({ ...editEquipment, status: value })}
|
onValueChange={(value) => setEditEquipment({ ...editEquipment, status: value })}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder="选择设备状态" />
|
<SelectValue placeholder="选择设备状态" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="normal">正常</SelectItem>
|
<SelectItem value="normal">正常</SelectItem>
|
||||||
<SelectItem value="expiring">即将到期</SelectItem>
|
<SelectItem value="expiring">即将到期</SelectItem>
|
||||||
<SelectItem value="expired">已到期</SelectItem>
|
<SelectItem value="expired">已到期</SelectItem>
|
||||||
@@ -745,7 +745,7 @@ export default function EquipmentPage() {
|
|||||||
<div className="space-y-1">
|
<div className="space-y-1">
|
||||||
<div className="flex items-center space-x-2">
|
<div className="flex items-center space-x-2">
|
||||||
<Shield className="h-4 w-4 text-blue-600" />
|
<Shield className="h-4 w-4 text-blue-600" />
|
||||||
<span className="font-medium text-blue-600">{item.equId}</span>
|
<span className="font-medium text-blue-600">{item.equipmentId}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="text-sm font-medium">{item.equipmentName}</div>
|
<div className="text-sm font-medium">{item.equipmentName}</div>
|
||||||
<div className="text-xs text-gray-500">类型: {equipmentTypeDisplay}</div>
|
<div className="text-xs text-gray-500">类型: {equipmentTypeDisplay}</div>
|
||||||
|
|||||||
@@ -416,10 +416,10 @@ export default function MallsPage() {
|
|||||||
onValueChange={(value) => setNewMall({ ...newMall, provinceCode: value })}
|
onValueChange={(value) => setNewMall({ ...newMall, provinceCode: value })}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder="请选择省份" />
|
<SelectValue placeholder="请选择省份" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{provinces.map((province) => (
|
{provinces.map((province) => (
|
||||||
<SelectItem key={province.code} value={province.code}>
|
<SelectItem key={province.code} value={province.code}>
|
||||||
{province.name}
|
{province.name}
|
||||||
@@ -435,7 +435,7 @@ export default function MallsPage() {
|
|||||||
onValueChange={(value) => setNewMall({ ...newMall, mallUserId: value })}
|
onValueChange={(value) => setNewMall({ ...newMall, mallUserId: value })}
|
||||||
disabled={loading || !newMall.provinceCode}
|
disabled={loading || !newMall.provinceCode}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder={
|
<SelectValue placeholder={
|
||||||
!newMall.provinceCode
|
!newMall.provinceCode
|
||||||
? "请先选择省份"
|
? "请先选择省份"
|
||||||
@@ -444,7 +444,7 @@ export default function MallsPage() {
|
|||||||
: "请选择商场"
|
: "请选择商场"
|
||||||
} />
|
} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{mallUsers.map((mallUser) => (
|
{mallUsers.map((mallUser) => (
|
||||||
<SelectItem key={mallUser.userId} value={mallUser.userId}>
|
<SelectItem key={mallUser.userId} value={mallUser.userId}>
|
||||||
<div className="flex flex-col items-start">
|
<div className="flex flex-col items-start">
|
||||||
|
|||||||
@@ -676,7 +676,7 @@ export default function MerchantsPage() {
|
|||||||
{merchant.mallLocation || "无"}
|
{merchant.mallLocation || "无"}
|
||||||
</div>
|
</div>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell>{merchant.dealerId || "无"}</TableCell>
|
<TableCell>{merchant.dealerName || "无"}</TableCell>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<div className="flex items-start">
|
<div className="flex items-start">
|
||||||
<MapPin className="h-4 w-4 mr-1 text-gray-400 mt-0.5 flex-shrink-0" />
|
<MapPin className="h-4 w-4 mr-1 text-gray-400 mt-0.5 flex-shrink-0" />
|
||||||
@@ -774,139 +774,141 @@ export default function MerchantsPage() {
|
|||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Dialog open={isAddMerchantOpen} onOpenChange={setIsAddMerchantOpen}>
|
<Dialog open={isAddMerchantOpen} onOpenChange={setIsAddMerchantOpen}>
|
||||||
<DialogContent className="max-w-2xl">
|
<DialogContent className="max-w-2xl max-h-[90vh] flex flex-col">
|
||||||
<DialogHeader>
|
<DialogHeader className="flex-shrink-0">
|
||||||
<DialogTitle>添加新商户</DialogTitle>
|
<DialogTitle>添加新商户</DialogTitle>
|
||||||
<DialogDescription>填写商户基本信息和地址详情</DialogDescription>
|
<DialogDescription>填写商户基本信息和地址详情</DialogDescription>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="flex-1 overflow-y-auto pr-2">
|
||||||
<div className="space-y-2">
|
<div className="grid grid-cols-2 gap-4">
|
||||||
<Label htmlFor="province">选择省份</Label>
|
|
||||||
<Select
|
|
||||||
value={newMerchant.province}
|
|
||||||
onValueChange={handleProvinceChange}
|
|
||||||
disabled={loadingProvinces}
|
|
||||||
onOpenChange={(open) => {
|
|
||||||
if (open && provinces.length === 0 && !loadingProvinces) {
|
|
||||||
fetchProvinces()
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<SelectTrigger>
|
|
||||||
<SelectValue placeholder={loadingProvinces ? "加载中..." : "选择省份"} />
|
|
||||||
</SelectTrigger>
|
|
||||||
<SelectContent>
|
|
||||||
{provinces.length === 0 && !loadingProvinces ? (
|
|
||||||
<SelectItem value="no-data" disabled>
|
|
||||||
点击加载省份数据
|
|
||||||
</SelectItem>
|
|
||||||
) : (
|
|
||||||
provinces.map((province) => (
|
|
||||||
<SelectItem key={province.code} value={province.code}>
|
|
||||||
{province.name}
|
|
||||||
</SelectItem>
|
|
||||||
))
|
|
||||||
)}
|
|
||||||
</SelectContent>
|
|
||||||
</Select>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="mall">所属商场(可选)</Label>
|
|
||||||
<Select
|
|
||||||
value={newMerchant.mall}
|
|
||||||
onValueChange={(value) => {
|
|
||||||
const selectedMall = malls.find(mall => mall.mallUser === value)
|
|
||||||
setNewMerchant({
|
|
||||||
...newMerchant,
|
|
||||||
mall: selectedMall?.mallId || value,
|
|
||||||
mallUserId: value
|
|
||||||
})
|
|
||||||
}}
|
|
||||||
disabled={loadingMalls || !newMerchant.province}
|
|
||||||
>
|
|
||||||
<SelectTrigger>
|
|
||||||
<SelectValue placeholder={
|
|
||||||
!newMerchant.province
|
|
||||||
? "请先选择省份"
|
|
||||||
: loadingMalls
|
|
||||||
? "加载中..."
|
|
||||||
: "选择商场(可选)"
|
|
||||||
} />
|
|
||||||
</SelectTrigger>
|
|
||||||
<SelectContent>
|
|
||||||
{malls.map((mall) => (
|
|
||||||
<SelectItem key={mall.mallUser || mall.id} value={mall.mallUser}>
|
|
||||||
{mall.mallName}
|
|
||||||
</SelectItem>
|
|
||||||
))}
|
|
||||||
</SelectContent>
|
|
||||||
</Select>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="name">商户名称</Label>
|
|
||||||
<Input
|
|
||||||
id="name"
|
|
||||||
value={newMerchant.name}
|
|
||||||
onChange={(e) => setNewMerchant({ ...newMerchant, name: e.target.value })}
|
|
||||||
placeholder="请输入商户名称"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="contact">联系人</Label>
|
|
||||||
<Input
|
|
||||||
id="contact"
|
|
||||||
value={newMerchant.contact}
|
|
||||||
onChange={(e) => setNewMerchant({ ...newMerchant, contact: e.target.value })}
|
|
||||||
placeholder="请输入联系人姓名"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="phone">联系电话</Label>
|
|
||||||
<Input
|
|
||||||
id="phone"
|
|
||||||
value={newMerchant.phone}
|
|
||||||
onChange={(e) => setNewMerchant({ ...newMerchant, phone: e.target.value })}
|
|
||||||
placeholder="请输入联系电话"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{userRole === "admin" && (
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label htmlFor="totalMerchant">选择总商户(可选)</Label>
|
<Label htmlFor="province">选择省份</Label>
|
||||||
<Select
|
<Select
|
||||||
value={newMerchant.totalMerchant}
|
value={newMerchant.province}
|
||||||
onValueChange={(value) => setNewMerchant({ ...newMerchant, totalMerchant: value })}
|
onValueChange={handleProvinceChange}
|
||||||
disabled={loadingTotalMerchants}
|
disabled={loadingProvinces}
|
||||||
onOpenChange={(open) => {
|
onOpenChange={(open) => {
|
||||||
if (open && totalMerchants.length === 0 && !loadingTotalMerchants) {
|
if (open && provinces.length === 0 && !loadingProvinces) {
|
||||||
fetchTotalMerchants()
|
fetchProvinces()
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder={loadingTotalMerchants ? "加载中..." : "选择总商户(可选)"} />
|
<SelectValue placeholder={loadingProvinces ? "加载中..." : "选择省份"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{totalMerchants.map((merchant) => (
|
{provinces.length === 0 && !loadingProvinces ? (
|
||||||
<SelectItem key={merchant.userId} value={merchant.userId}>
|
<SelectItem value="no-data" disabled>
|
||||||
{merchant.nickName}
|
点击加载省份数据
|
||||||
|
</SelectItem>
|
||||||
|
) : (
|
||||||
|
provinces.map((province) => (
|
||||||
|
<SelectItem key={province.code} value={province.code}>
|
||||||
|
{province.name}
|
||||||
|
</SelectItem>
|
||||||
|
))
|
||||||
|
)}
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="mall">所属商场(可选)</Label>
|
||||||
|
<Select
|
||||||
|
value={newMerchant.mall}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
const selectedMall = malls.find(mall => mall.mallUser === value)
|
||||||
|
setNewMerchant({
|
||||||
|
...newMerchant,
|
||||||
|
mall: selectedMall?.mallId || value,
|
||||||
|
mallUserId: value
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
disabled={loadingMalls || !newMerchant.province}
|
||||||
|
>
|
||||||
|
<SelectTrigger className="w-full">
|
||||||
|
<SelectValue placeholder={
|
||||||
|
!newMerchant.province
|
||||||
|
? "请先选择省份"
|
||||||
|
: loadingMalls
|
||||||
|
? "加载中..."
|
||||||
|
: "选择商场(可选)"
|
||||||
|
} />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent className="max-h-[300px]">
|
||||||
|
{malls.map((mall) => (
|
||||||
|
<SelectItem key={mall.mallUser || mall.id} value={mall.mallUser}>
|
||||||
|
{mall.mallName}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
))}
|
))}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
)}
|
<div className="space-y-2">
|
||||||
<div className="col-span-2 space-y-2">
|
<Label htmlFor="name">商户名称</Label>
|
||||||
<Label htmlFor="detailedAddress">详细地址</Label>
|
<Input
|
||||||
<Textarea
|
id="name"
|
||||||
id="detailedAddress"
|
value={newMerchant.name}
|
||||||
value={newMerchant.detailedAddress}
|
onChange={(e) => setNewMerchant({ ...newMerchant, name: e.target.value })}
|
||||||
onChange={(e) => setNewMerchant({ ...newMerchant, detailedAddress: e.target.value })}
|
placeholder="请输入商户名称"
|
||||||
placeholder="请输入详细地址"
|
/>
|
||||||
rows={3}
|
</div>
|
||||||
/>
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="contact">联系人</Label>
|
||||||
|
<Input
|
||||||
|
id="contact"
|
||||||
|
value={newMerchant.contact}
|
||||||
|
onChange={(e) => setNewMerchant({ ...newMerchant, contact: e.target.value })}
|
||||||
|
placeholder="请输入联系人姓名"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="phone">联系电话</Label>
|
||||||
|
<Input
|
||||||
|
id="phone"
|
||||||
|
value={newMerchant.phone}
|
||||||
|
onChange={(e) => setNewMerchant({ ...newMerchant, phone: e.target.value })}
|
||||||
|
placeholder="请输入联系电话"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{userRole === "admin" && (
|
||||||
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="totalMerchant">选择总商户(可选)</Label>
|
||||||
|
<Select
|
||||||
|
value={newMerchant.totalMerchant}
|
||||||
|
onValueChange={(value) => setNewMerchant({ ...newMerchant, totalMerchant: value })}
|
||||||
|
disabled={loadingTotalMerchants}
|
||||||
|
onOpenChange={(open) => {
|
||||||
|
if (open && totalMerchants.length === 0 && !loadingTotalMerchants) {
|
||||||
|
fetchTotalMerchants()
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<SelectTrigger className="w-full">
|
||||||
|
<SelectValue placeholder={loadingTotalMerchants ? "加载中..." : "选择总商户(可选)"} />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent className="max-h-[300px]">
|
||||||
|
{totalMerchants.map((merchant) => (
|
||||||
|
<SelectItem key={merchant.userId} value={merchant.userId}>
|
||||||
|
{merchant.nickName}
|
||||||
|
</SelectItem>
|
||||||
|
))}
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
<div className="col-span-2 space-y-2">
|
||||||
|
<Label htmlFor="detailedAddress">详细地址</Label>
|
||||||
|
<Textarea
|
||||||
|
id="detailedAddress"
|
||||||
|
value={newMerchant.detailedAddress}
|
||||||
|
onChange={(e) => setNewMerchant({ ...newMerchant, detailedAddress: e.target.value })}
|
||||||
|
placeholder="请输入详细地址"
|
||||||
|
rows={3}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex justify-end space-x-2 mt-6">
|
<div className="flex justify-end space-x-2 mt-6 flex-shrink-0 pt-4 border-t">
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
onClick={() => setIsAddMerchantOpen(false)}
|
onClick={() => setIsAddMerchantOpen(false)}
|
||||||
@@ -946,10 +948,10 @@ export default function MerchantsPage() {
|
|||||||
value={newEquipment.type}
|
value={newEquipment.type}
|
||||||
onValueChange={(value) => setNewEquipment({ ...newEquipment, type: value })}
|
onValueChange={(value) => setNewEquipment({ ...newEquipment, type: value })}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder="选择设备类型" />
|
<SelectValue placeholder="选择设备类型" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="干粉灭火器">干粉灭火器</SelectItem>
|
<SelectItem value="干粉灭火器">干粉灭火器</SelectItem>
|
||||||
<SelectItem value="烟雾探测器">烟雾探测器</SelectItem>
|
<SelectItem value="烟雾探测器">烟雾探测器</SelectItem>
|
||||||
<SelectItem value="自动喷淋">自动喷淋</SelectItem>
|
<SelectItem value="自动喷淋">自动喷淋</SelectItem>
|
||||||
@@ -1016,128 +1018,130 @@ export default function MerchantsPage() {
|
|||||||
|
|
||||||
{/* 编辑商户对话框 */}
|
{/* 编辑商户对话框 */}
|
||||||
<Dialog open={isEditMerchantOpen} onOpenChange={setIsEditMerchantOpen}>
|
<Dialog open={isEditMerchantOpen} onOpenChange={setIsEditMerchantOpen}>
|
||||||
<DialogContent className="max-w-2xl">
|
<DialogContent className="max-w-2xl max-h-[90vh] flex flex-col">
|
||||||
<DialogHeader>
|
<DialogHeader className="flex-shrink-0">
|
||||||
<DialogTitle>编辑商户</DialogTitle>
|
<DialogTitle>编辑商户</DialogTitle>
|
||||||
<DialogDescription>修改商户基本信息和地址详情</DialogDescription>
|
<DialogDescription>修改商户基本信息和地址详情</DialogDescription>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="flex-1 overflow-y-auto pr-2">
|
||||||
<div className="space-y-2">
|
<div className="grid grid-cols-2 gap-4">
|
||||||
<Label htmlFor="edit-province">选择省份</Label>
|
|
||||||
<Select
|
|
||||||
value={editMerchant.province}
|
|
||||||
onValueChange={handleEditProvinceChange}
|
|
||||||
disabled={loadingProvinces}
|
|
||||||
>
|
|
||||||
<SelectTrigger>
|
|
||||||
<SelectValue placeholder={loadingProvinces ? "加载中..." : "选择省份"} />
|
|
||||||
</SelectTrigger>
|
|
||||||
<SelectContent>
|
|
||||||
{provinces.map((province) => (
|
|
||||||
<SelectItem key={province.code} value={province.code}>
|
|
||||||
{province.name}
|
|
||||||
</SelectItem>
|
|
||||||
))}
|
|
||||||
</SelectContent>
|
|
||||||
</Select>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="edit-mall">所属商场(可选)</Label>
|
|
||||||
<Select
|
|
||||||
value={editMerchant.mallUserId}
|
|
||||||
onValueChange={(value) => {
|
|
||||||
const selectedMall = malls.find(mall => mall.mallUser === value)
|
|
||||||
setEditMerchant({
|
|
||||||
...editMerchant,
|
|
||||||
mall: selectedMall?.mallId || value,
|
|
||||||
mallUserId: value
|
|
||||||
})
|
|
||||||
}}
|
|
||||||
disabled={loadingMalls || !editMerchant.province}
|
|
||||||
>
|
|
||||||
<SelectTrigger>
|
|
||||||
<SelectValue placeholder={
|
|
||||||
!editMerchant.province
|
|
||||||
? "请先选择省份"
|
|
||||||
: loadingMalls
|
|
||||||
? "加载中..."
|
|
||||||
: "选择商场(可选)"
|
|
||||||
} />
|
|
||||||
</SelectTrigger>
|
|
||||||
<SelectContent>
|
|
||||||
{malls.map((mall) => (
|
|
||||||
<SelectItem key={mall.mallUser || mall.id} value={mall.mallUser}>
|
|
||||||
{mall.mallName}
|
|
||||||
</SelectItem>
|
|
||||||
))}
|
|
||||||
</SelectContent>
|
|
||||||
</Select>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="edit-name">商户名称</Label>
|
|
||||||
<Input
|
|
||||||
id="edit-name"
|
|
||||||
value={editMerchant.name}
|
|
||||||
onChange={(e) => setEditMerchant({ ...editMerchant, name: e.target.value })}
|
|
||||||
placeholder="请输入商户名称"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="edit-contact">联系人</Label>
|
|
||||||
<Input
|
|
||||||
id="edit-contact"
|
|
||||||
value={editMerchant.contact}
|
|
||||||
onChange={(e) => setEditMerchant({ ...editMerchant, contact: e.target.value })}
|
|
||||||
placeholder="请输入联系人姓名"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="space-y-2">
|
|
||||||
<Label htmlFor="edit-phone">联系电话</Label>
|
|
||||||
<Input
|
|
||||||
id="edit-phone"
|
|
||||||
value={editMerchant.phone}
|
|
||||||
onChange={(e) => setEditMerchant({ ...editMerchant, phone: e.target.value })}
|
|
||||||
placeholder="请输入联系电话"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{userRole === "admin" && (
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label htmlFor="edit-totalMerchant">选择总商户(可选)</Label>
|
<Label htmlFor="edit-province">选择省份</Label>
|
||||||
<Select
|
<Select
|
||||||
value={editMerchant.totalMerchant}
|
value={editMerchant.province}
|
||||||
onValueChange={(value) => setEditMerchant({ ...editMerchant, totalMerchant: value })}
|
onValueChange={handleEditProvinceChange}
|
||||||
disabled={loadingTotalMerchants}
|
disabled={loadingProvinces}
|
||||||
onOpenChange={(open) => {
|
|
||||||
if (open && totalMerchants.length === 0 && !loadingTotalMerchants) {
|
|
||||||
fetchTotalMerchants()
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder={loadingTotalMerchants ? "加载中..." : "选择总商户(可选)"} />
|
<SelectValue placeholder={loadingProvinces ? "加载中..." : "选择省份"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{totalMerchants.map((merchant) => (
|
{provinces.map((province) => (
|
||||||
<SelectItem key={merchant.userId} value={merchant.userId}>
|
<SelectItem key={province.code} value={province.code}>
|
||||||
{merchant.nickName}
|
{province.name}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
))}
|
))}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
)}
|
<div className="space-y-2">
|
||||||
<div className="col-span-2 space-y-2">
|
<Label htmlFor="edit-mall">所属商场(可选)</Label>
|
||||||
<Label htmlFor="edit-detailedAddress">详细地址</Label>
|
<Select
|
||||||
<Textarea
|
value={editMerchant.mallUserId}
|
||||||
id="edit-detailedAddress"
|
onValueChange={(value) => {
|
||||||
value={editMerchant.detailedAddress}
|
const selectedMall = malls.find(mall => mall.mallUser === value)
|
||||||
onChange={(e) => setEditMerchant({ ...editMerchant, detailedAddress: e.target.value })}
|
setEditMerchant({
|
||||||
placeholder="请输入详细地址"
|
...editMerchant,
|
||||||
rows={3}
|
mall: selectedMall?.mallId || value,
|
||||||
/>
|
mallUserId: value
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
disabled={loadingMalls || !editMerchant.province}
|
||||||
|
>
|
||||||
|
<SelectTrigger className="w-full">
|
||||||
|
<SelectValue placeholder={
|
||||||
|
!editMerchant.province
|
||||||
|
? "请先选择省份"
|
||||||
|
: loadingMalls
|
||||||
|
? "加载中..."
|
||||||
|
: "选择商场(可选)"
|
||||||
|
} />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent className="max-h-[300px]">
|
||||||
|
{malls.map((mall) => (
|
||||||
|
<SelectItem key={mall.mallUser || mall.id} value={mall.mallUser}>
|
||||||
|
{mall.mallName}
|
||||||
|
</SelectItem>
|
||||||
|
))}
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="edit-name">商户名称</Label>
|
||||||
|
<Input
|
||||||
|
id="edit-name"
|
||||||
|
value={editMerchant.name}
|
||||||
|
onChange={(e) => setEditMerchant({ ...editMerchant, name: e.target.value })}
|
||||||
|
placeholder="请输入商户名称"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="edit-contact">联系人</Label>
|
||||||
|
<Input
|
||||||
|
id="edit-contact"
|
||||||
|
value={editMerchant.contact}
|
||||||
|
onChange={(e) => setEditMerchant({ ...editMerchant, contact: e.target.value })}
|
||||||
|
placeholder="请输入联系人姓名"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="edit-phone">联系电话</Label>
|
||||||
|
<Input
|
||||||
|
id="edit-phone"
|
||||||
|
value={editMerchant.phone}
|
||||||
|
onChange={(e) => setEditMerchant({ ...editMerchant, phone: e.target.value })}
|
||||||
|
placeholder="请输入联系电话"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{userRole === "admin" && (
|
||||||
|
<div className="space-y-2">
|
||||||
|
<Label htmlFor="edit-totalMerchant">选择总商户(可选)</Label>
|
||||||
|
<Select
|
||||||
|
value={editMerchant.totalMerchant}
|
||||||
|
onValueChange={(value) => setEditMerchant({ ...editMerchant, totalMerchant: value })}
|
||||||
|
disabled={loadingTotalMerchants}
|
||||||
|
onOpenChange={(open) => {
|
||||||
|
if (open && totalMerchants.length === 0 && !loadingTotalMerchants) {
|
||||||
|
fetchTotalMerchants()
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<SelectTrigger className="w-full">
|
||||||
|
<SelectValue placeholder={loadingTotalMerchants ? "加载中..." : "选择总商户(可选)"} />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent className="max-h-[300px]">
|
||||||
|
{totalMerchants.map((merchant) => (
|
||||||
|
<SelectItem key={merchant.userId} value={merchant.userId}>
|
||||||
|
{merchant.nickName}
|
||||||
|
</SelectItem>
|
||||||
|
))}
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
<div className="col-span-2 space-y-2">
|
||||||
|
<Label htmlFor="edit-detailedAddress">详细地址</Label>
|
||||||
|
<Textarea
|
||||||
|
id="edit-detailedAddress"
|
||||||
|
value={editMerchant.detailedAddress}
|
||||||
|
onChange={(e) => setEditMerchant({ ...editMerchant, detailedAddress: e.target.value })}
|
||||||
|
placeholder="请输入详细地址"
|
||||||
|
rows={3}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex justify-end space-x-2 mt-6">
|
<div className="flex justify-end space-x-2 mt-6 flex-shrink-0 pt-4 border-t">
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
onClick={() => setIsEditMerchantOpen(false)}
|
onClick={() => setIsEditMerchantOpen(false)}
|
||||||
|
|||||||
@@ -298,7 +298,7 @@ export default function WorkOrdersPage() {
|
|||||||
创建工单
|
创建工单
|
||||||
</Button>
|
</Button>
|
||||||
</DialogTrigger>
|
</DialogTrigger>
|
||||||
<DialogContent className="max-w-2xl">
|
<DialogContent className="max-w-2xl max-h-[90vh] overflow-y-auto">
|
||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>创建新工单</DialogTitle>
|
<DialogTitle>创建新工单</DialogTitle>
|
||||||
<DialogDescription>选择商户和设备,然后分配给维修人员</DialogDescription>
|
<DialogDescription>选择商户和设备,然后分配给维修人员</DialogDescription>
|
||||||
@@ -394,7 +394,7 @@ export default function WorkOrdersPage() {
|
|||||||
<SelectTrigger className="w-full sm:w-32">
|
<SelectTrigger className="w-full sm:w-32">
|
||||||
<SelectValue placeholder="状态" />
|
<SelectValue placeholder="状态" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="all">全部状态</SelectItem>
|
<SelectItem value="all">全部状态</SelectItem>
|
||||||
<SelectItem value="1">待接单</SelectItem>
|
<SelectItem value="1">待接单</SelectItem>
|
||||||
<SelectItem value="2">已接单</SelectItem>
|
<SelectItem value="2">已接单</SelectItem>
|
||||||
@@ -410,7 +410,7 @@ export default function WorkOrdersPage() {
|
|||||||
<SelectTrigger className="w-full sm:w-32">
|
<SelectTrigger className="w-full sm:w-32">
|
||||||
<SelectValue placeholder="工人" />
|
<SelectValue placeholder="工人" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="all">全部工人</SelectItem>
|
<SelectItem value="all">全部工人</SelectItem>
|
||||||
{uniqueWorkers.map((worker) => (
|
{uniqueWorkers.map((worker) => (
|
||||||
<SelectItem key={worker} value={worker}>
|
<SelectItem key={worker} value={worker}>
|
||||||
@@ -723,10 +723,10 @@ function CreateWorkOrderForm({ onClose }: { onClose: () => void }) {
|
|||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder={loadingMerchants ? "加载中..." : "请先选择商户"} />
|
<SelectValue placeholder={loadingMerchants ? "加载中..." : "请先选择商户"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px] overflow-y-auto">
|
||||||
{merchants.map((merchant) => (
|
{merchants.map((merchant) => (
|
||||||
<SelectItem key={merchant.id} value={merchant.id}>
|
<SelectItem key={merchant.id} value={merchant.id}>
|
||||||
{merchant.merchantName} - {merchant.mallLocation || "无商场"}
|
{merchant.merchantName} - {merchant.contactPerson} - {merchant.mallLocation || "无商场"}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
))}
|
))}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
@@ -751,7 +751,7 @@ function CreateWorkOrderForm({ onClose }: { onClose: () => void }) {
|
|||||||
: "选择设备"
|
: "选择设备"
|
||||||
} />
|
} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px] overflow-y-auto">
|
||||||
{availableEquipment.map((equipment) => (
|
{availableEquipment.map((equipment) => (
|
||||||
<SelectItem key={equipment.id} value={equipment.equipmentId}>
|
<SelectItem key={equipment.id} value={equipment.equipmentId}>
|
||||||
{equipment.equipmentName} ({equipment.equipmentType})
|
{equipment.equipmentName} ({equipment.equipmentType})
|
||||||
@@ -764,10 +764,10 @@ function CreateWorkOrderForm({ onClose }: { onClose: () => void }) {
|
|||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label htmlFor="type">工单类型</Label>
|
<Label htmlFor="type">工单类型</Label>
|
||||||
<Select value={formData.type} onValueChange={(value) => setFormData({ ...formData, type: value })}>
|
<Select value={formData.type} onValueChange={(value) => setFormData({ ...formData, type: value })}>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder="选择类型" />
|
<SelectValue placeholder="选择类型" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="设备检测">设备检测</SelectItem>
|
<SelectItem value="设备检测">设备检测</SelectItem>
|
||||||
<SelectItem value="故障维修">故障维修</SelectItem>
|
<SelectItem value="故障维修">故障维修</SelectItem>
|
||||||
<SelectItem value="设备安装">设备安装</SelectItem>
|
<SelectItem value="设备安装">设备安装</SelectItem>
|
||||||
@@ -790,7 +790,7 @@ function CreateWorkOrderForm({ onClose }: { onClose: () => void }) {
|
|||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder={loadingWorkers ? "加载中..." : "选择维修工人"} />
|
<SelectValue placeholder={loadingWorkers ? "加载中..." : "选择维修工人"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px] overflow-y-auto">
|
||||||
{workers.map((worker) => (
|
{workers.map((worker) => (
|
||||||
<SelectItem key={worker.id} value={worker.id}>
|
<SelectItem key={worker.id} value={worker.id}>
|
||||||
{worker.name} - {worker.province} ({worker.phone})
|
{worker.name} - {worker.province} ({worker.phone})
|
||||||
|
|||||||
@@ -622,7 +622,7 @@ export default function WorkersPage() {
|
|||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="选择省份" />
|
<SelectValue placeholder="选择省份" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{provinces.map((province) => (
|
{provinces.map((province) => (
|
||||||
<SelectItem key={province.code} value={province.code}>
|
<SelectItem key={province.code} value={province.code}>
|
||||||
{province.name}
|
{province.name}
|
||||||
@@ -640,7 +640,7 @@ export default function WorkersPage() {
|
|||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="选择经销商" />
|
<SelectValue placeholder="选择经销商" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{dealers.map((dealer) => (
|
{dealers.map((dealer) => (
|
||||||
<SelectItem key={dealer.userId} value={dealer.userId}>
|
<SelectItem key={dealer.userId} value={dealer.userId}>
|
||||||
{dealer.userName}
|
{dealer.userName}
|
||||||
@@ -708,7 +708,7 @@ export default function WorkersPage() {
|
|||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="选择省份" />
|
<SelectValue placeholder="选择省份" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{provinces.map((province) => (
|
{provinces.map((province) => (
|
||||||
<SelectItem key={province.code} value={province.code}>
|
<SelectItem key={province.code} value={province.code}>
|
||||||
{province.name}
|
{province.name}
|
||||||
@@ -726,7 +726,7 @@ export default function WorkersPage() {
|
|||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="选择经销商" />
|
<SelectValue placeholder="选择经销商" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
{dealers.map((dealer) => (
|
{dealers.map((dealer) => (
|
||||||
<SelectItem key={dealer.userId} value={dealer.userId}>
|
<SelectItem key={dealer.userId} value={dealer.userId}>
|
||||||
{dealer.userName}
|
{dealer.userName}
|
||||||
@@ -889,7 +889,7 @@ export default function WorkersPage() {
|
|||||||
<SelectTrigger className="w-32">
|
<SelectTrigger className="w-32">
|
||||||
<SelectValue placeholder="省份" />
|
<SelectValue placeholder="省份" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="all">全部省份</SelectItem>
|
<SelectItem value="all">全部省份</SelectItem>
|
||||||
{provinces.map((province) => (
|
{provinces.map((province) => (
|
||||||
<SelectItem key={province.code} value={province.code}>
|
<SelectItem key={province.code} value={province.code}>
|
||||||
@@ -902,7 +902,7 @@ export default function WorkersPage() {
|
|||||||
<SelectTrigger className="w-32">
|
<SelectTrigger className="w-32">
|
||||||
<SelectValue placeholder="技能等级" />
|
<SelectValue placeholder="技能等级" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="all">全部等级</SelectItem>
|
<SelectItem value="all">全部等级</SelectItem>
|
||||||
<SelectItem value="高级技师">高级技师</SelectItem>
|
<SelectItem value="高级技师">高级技师</SelectItem>
|
||||||
<SelectItem value="中级技师">中级技师</SelectItem>
|
<SelectItem value="中级技师">中级技师</SelectItem>
|
||||||
@@ -913,7 +913,7 @@ export default function WorkersPage() {
|
|||||||
<SelectTrigger className="w-64">
|
<SelectTrigger className="w-64">
|
||||||
<SelectValue placeholder="选择工单" />
|
<SelectValue placeholder="选择工单" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-[300px]">
|
||||||
<SelectItem value="all">全部工单</SelectItem>
|
<SelectItem value="all">全部工单</SelectItem>
|
||||||
{workOrders.map((order) => (
|
{workOrders.map((order) => (
|
||||||
<SelectItem key={order.value} value={order.value}>
|
<SelectItem key={order.value} value={order.value}>
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ function SelectContent({
|
|||||||
<SelectPrimitive.Content
|
<SelectPrimitive.Content
|
||||||
data-slot="select-content"
|
data-slot="select-content"
|
||||||
className={cn(
|
className={cn(
|
||||||
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
|
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-[300px] min-w-[8rem] overflow-hidden rounded-md border shadow-md",
|
||||||
position === "popper" &&
|
position === "popper" &&
|
||||||
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
||||||
className
|
className
|
||||||
@@ -72,9 +72,9 @@ function SelectContent({
|
|||||||
<SelectScrollUpButton />
|
<SelectScrollUpButton />
|
||||||
<SelectPrimitive.Viewport
|
<SelectPrimitive.Viewport
|
||||||
className={cn(
|
className={cn(
|
||||||
"p-1",
|
"p-1 max-h-[280px] overflow-y-auto",
|
||||||
position === "popper" &&
|
position === "popper" &&
|
||||||
"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
|
"w-full min-w-[var(--radix-select-trigger-width)]"
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -47,3 +47,4 @@ export async function deleteService(id: string): Promise<ServiceResponse> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,3 +10,4 @@ export async function getUserByRoleKey(roleKey: string): Promise<UserByRoleRespo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -42,3 +42,4 @@ export interface UserByRoleResponse {
|
|||||||
data: User[]
|
data: User[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user