@miot-rn/car-component 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +325 -0
- package/dist/assets/i18n/ar.d.ts +55 -0
- package/dist/assets/i18n/ar.js +55 -0
- package/dist/assets/i18n/bo.d.ts +55 -0
- package/dist/assets/i18n/bo.js +55 -0
- package/dist/assets/i18n/cs.d.ts +55 -0
- package/dist/assets/i18n/cs.js +55 -0
- package/dist/assets/i18n/de.d.ts +55 -0
- package/dist/assets/i18n/de.js +55 -0
- package/dist/assets/i18n/el.d.ts +55 -0
- package/dist/assets/i18n/el.js +55 -0
- package/dist/assets/i18n/en.d.ts +55 -0
- package/dist/assets/i18n/en.js +55 -0
- package/dist/assets/i18n/es.d.ts +55 -0
- package/dist/assets/i18n/es.js +55 -0
- package/dist/assets/i18n/es_us.d.ts +55 -0
- package/dist/assets/i18n/es_us.js +55 -0
- package/dist/assets/i18n/fi.d.ts +55 -0
- package/dist/assets/i18n/fi.js +55 -0
- package/dist/assets/i18n/fr.d.ts +55 -0
- package/dist/assets/i18n/fr.js +55 -0
- package/dist/assets/i18n/he.d.ts +55 -0
- package/dist/assets/i18n/he.js +55 -0
- package/dist/assets/i18n/hu.d.ts +55 -0
- package/dist/assets/i18n/hu.js +55 -0
- package/dist/assets/i18n/id.d.ts +55 -0
- package/dist/assets/i18n/id.js +55 -0
- package/dist/assets/i18n/it.d.ts +55 -0
- package/dist/assets/i18n/it.js +55 -0
- package/dist/assets/i18n/ja.d.ts +55 -0
- package/dist/assets/i18n/ja.js +55 -0
- package/dist/assets/i18n/ko.d.ts +55 -0
- package/dist/assets/i18n/ko.js +55 -0
- package/dist/assets/i18n/nb.d.ts +55 -0
- package/dist/assets/i18n/nb.js +55 -0
- package/dist/assets/i18n/nl.d.ts +55 -0
- package/dist/assets/i18n/nl.js +55 -0
- package/dist/assets/i18n/pl.d.ts +55 -0
- package/dist/assets/i18n/pl.js +55 -0
- package/dist/assets/i18n/pt.d.ts +55 -0
- package/dist/assets/i18n/pt.js +55 -0
- package/dist/assets/i18n/pt_pt.d.ts +55 -0
- package/dist/assets/i18n/pt_pt.js +55 -0
- package/dist/assets/i18n/ro.d.ts +55 -0
- package/dist/assets/i18n/ro.js +55 -0
- package/dist/assets/i18n/ru.d.ts +55 -0
- package/dist/assets/i18n/ru.js +55 -0
- package/dist/assets/i18n/sk.d.ts +55 -0
- package/dist/assets/i18n/sk.js +55 -0
- package/dist/assets/i18n/sv.d.ts +55 -0
- package/dist/assets/i18n/sv.js +55 -0
- package/dist/assets/i18n/th.d.ts +55 -0
- package/dist/assets/i18n/th.js +55 -0
- package/dist/assets/i18n/tr.d.ts +55 -0
- package/dist/assets/i18n/tr.js +55 -0
- package/dist/assets/i18n/uk.d.ts +55 -0
- package/dist/assets/i18n/uk.js +55 -0
- package/dist/assets/i18n/vi.d.ts +55 -0
- package/dist/assets/i18n/vi.js +55 -0
- package/dist/assets/i18n/zh.d.ts +55 -0
- package/dist/assets/i18n/zh.js +55 -0
- package/dist/assets/i18n/zh_hk.d.ts +55 -0
- package/dist/assets/i18n/zh_hk.js +55 -0
- package/dist/assets/i18n/zh_tw.d.ts +55 -0
- package/dist/assets/i18n/zh_tw.js +55 -0
- package/dist/assets/image/dark/car_background_dark.png +0 -0
- package/dist/assets/image/default/car_background.png +0 -0
- package/dist/components/airConditioningCard/index.d.ts +24 -0
- package/dist/components/airConditioningCard/index.js +103 -0
- package/dist/components/carInfoHeader/carImage.d.ts +8 -0
- package/dist/components/carInfoHeader/carImage.js +42 -0
- package/dist/components/carInfoHeader/dualRangeIndicator.d.ts +15 -0
- package/dist/components/carInfoHeader/dualRangeIndicator.js +124 -0
- package/dist/components/carInfoHeader/index.d.ts +37 -0
- package/dist/components/carInfoHeader/index.js +118 -0
- package/dist/components/carInfoHeader/parkingStatus.d.ts +12 -0
- package/dist/components/carInfoHeader/parkingStatus.js +100 -0
- package/dist/components/carInfoHeader/rangeProgressBar.d.ts +14 -0
- package/dist/components/carInfoHeader/rangeProgressBar.js +77 -0
- package/dist/components/carInfoHeader/singleRangeIndicator.d.ts +11 -0
- package/dist/components/carInfoHeader/singleRangeIndicator.js +58 -0
- package/dist/components/cardContainer/index.d.ts +8 -0
- package/dist/components/cardContainer/index.js +22 -0
- package/dist/components/containerWithGap/gapWrap.d.ts +8 -0
- package/dist/components/containerWithGap/gapWrap.js +31 -0
- package/dist/components/containerWithGap/index.d.ts +12 -0
- package/dist/components/containerWithGap/index.js +43 -0
- package/dist/components/flatSelect/FlatOption.d.ts +18 -0
- package/dist/components/flatSelect/FlatOption.js +117 -0
- package/dist/components/flatSelect/FlatSelect.d.ts +14 -0
- package/dist/components/flatSelect/FlatSelect.js +112 -0
- package/dist/components/flatSelect/index.d.ts +2 -0
- package/dist/components/flatSelect/index.js +2 -0
- package/dist/components/flatSelect/index.zh-CN.md +89 -0
- package/dist/components/groupContainer/index.d.ts +9 -0
- package/dist/components/groupContainer/index.js +48 -0
- package/dist/components/otherSettingCard/index.d.ts +8 -0
- package/dist/components/otherSettingCard/index.js +40 -0
- package/dist/components/pageBackground/index.d.ts +7 -0
- package/dist/components/pageBackground/index.js +22 -0
- package/dist/components/seatControl/index.d.ts +34 -0
- package/dist/components/seatControl/index.js +98 -0
- package/dist/components/seatControl/seatCard.d.ts +11 -0
- package/dist/components/seatControl/seatCard.js +24 -0
- package/dist/components/seatControl/seatCardRow.d.ts +29 -0
- package/dist/components/seatControl/seatCardRow.js +48 -0
- package/dist/components/seatControlGroup/index.d.ts +40 -0
- package/dist/components/seatControlGroup/index.js +51 -0
- package/dist/components/steeringWheelHotCard/index.d.ts +17 -0
- package/dist/components/steeringWheelHotCard/index.js +66 -0
- package/dist/components/titleContainer/TitleContainer.d.ts +4 -0
- package/dist/components/titleContainer/TitleContainer.js +148 -0
- package/dist/components/titleContainer/TitleContainer.zh-CN.md +62 -0
- package/dist/components/titleContainer/index.d.ts +1 -0
- package/dist/components/titleContainer/index.js +1 -0
- package/dist/components/titleContainer/interface.d.ts +48 -0
- package/dist/components/titleContainer/interface.js +21 -0
- package/dist/components/warningForRunningCard/index.d.ts +6 -0
- package/dist/components/warningForRunningCard/index.js +20 -0
- package/dist/config/ConnectStatus.d.ts +7 -0
- package/dist/config/ConnectStatus.js +8 -0
- package/dist/config/index.d.ts +16 -0
- package/dist/config/index.js +16 -0
- package/dist/config/seatFunctionType.d.ts +7 -0
- package/dist/config/seatFunctionType.js +24 -0
- package/dist/config/seatGearLevel.d.ts +21 -0
- package/dist/config/seatGearLevel.js +19 -0
- package/dist/config/seatI18nKeys.d.ts +9 -0
- package/dist/config/seatI18nKeys.js +9 -0
- package/dist/config/seatPosition.d.ts +8 -0
- package/dist/config/seatPosition.js +8 -0
- package/dist/config/seatRowConfig.d.ts +6 -0
- package/dist/config/seatRowConfig.js +6 -0
- package/dist/global.d.js +0 -0
- package/dist/hooks/CONNECT_STATUS.d.ts +6 -0
- package/dist/hooks/CONNECT_STATUS.js +5 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/useAirConditionData.d.ts +29 -0
- package/dist/hooks/useAirConditionData.js +89 -0
- package/dist/hooks/useDualRangeData.d.ts +18 -0
- package/dist/hooks/useDualRangeData.js +82 -0
- package/dist/hooks/useParkingStatusData.d.ts +19 -0
- package/dist/hooks/useParkingStatusData.js +100 -0
- package/dist/hooks/useSeatControlData.d.ts +94 -0
- package/dist/hooks/useSeatControlData.js +251 -0
- package/dist/hooks/useSingleRangeData.d.ts +15 -0
- package/dist/hooks/useSingleRangeData.js +97 -0
- package/dist/hooks/useSteeringWheelData.d.ts +11 -0
- package/dist/hooks/useSteeringWheelData.js +56 -0
- package/dist/icons/CarInUsed.d.ts +4 -0
- package/dist/icons/CarInUsed.js +13 -0
- package/dist/icons/DeviceManage.d.ts +4 -0
- package/dist/icons/DeviceManage.js +13 -0
- package/dist/icons/ElectricPower.d.ts +4 -0
- package/dist/icons/ElectricPower.js +13 -0
- package/dist/icons/ErrorStatus.d.ts +4 -0
- package/dist/icons/ErrorStatus.js +13 -0
- package/dist/icons/FuelPower.d.ts +4 -0
- package/dist/icons/FuelPower.js +18 -0
- package/dist/icons/Loading.d.ts +4 -0
- package/dist/icons/Loading.js +16 -0
- package/dist/icons/MijiaLogo.d.ts +4 -0
- package/dist/icons/MijiaLogo.js +16 -0
- package/dist/icons/Minus.d.ts +4 -0
- package/dist/icons/Minus.js +15 -0
- package/dist/icons/ParkingStatus.d.ts +4 -0
- package/dist/icons/ParkingStatus.js +15 -0
- package/dist/icons/SeatGearHeatingLevelOne.d.ts +4 -0
- package/dist/icons/SeatGearHeatingLevelOne.js +22 -0
- package/dist/icons/SeatGearHeatingLevelThree.d.ts +4 -0
- package/dist/icons/SeatGearHeatingLevelThree.js +18 -0
- package/dist/icons/SeatGearHeatingLevelTwo.d.ts +4 -0
- package/dist/icons/SeatGearHeatingLevelTwo.js +22 -0
- package/dist/icons/SeatGearHeatingOff.d.ts +4 -0
- package/dist/icons/SeatGearHeatingOff.js +18 -0
- package/dist/icons/SeatGearVentilationLevelOne.d.ts +4 -0
- package/dist/icons/SeatGearVentilationLevelOne.js +17 -0
- package/dist/icons/SeatGearVentilationLevelThree.d.ts +4 -0
- package/dist/icons/SeatGearVentilationLevelThree.js +13 -0
- package/dist/icons/SeatGearVentilationLevelTwo.d.ts +4 -0
- package/dist/icons/SeatGearVentilationLevelTwo.js +17 -0
- package/dist/icons/SeatGearVentilationOff.d.ts +4 -0
- package/dist/icons/SeatGearVentilationOff.js +16 -0
- package/dist/icons/SentryMode.d.ts +4 -0
- package/dist/icons/SentryMode.js +13 -0
- package/dist/icons/SmartScene.d.ts +4 -0
- package/dist/icons/SmartScene.js +13 -0
- package/dist/icons/SteeringWheelFirstGear.d.ts +4 -0
- package/dist/icons/SteeringWheelFirstGear.js +13 -0
- package/dist/icons/SteeringWheelHot.d.ts +4 -0
- package/dist/icons/SteeringWheelHot.js +13 -0
- package/dist/icons/SteeringWheelSecondGear.d.ts +4 -0
- package/dist/icons/SteeringWheelSecondGear.js +13 -0
- package/dist/icons/SteeringWheelThirdGear.d.ts +4 -0
- package/dist/icons/SteeringWheelThirdGear.js +13 -0
- package/dist/icons/Warning.d.ts +4 -0
- package/dist/icons/Warning.js +13 -0
- package/dist/icons/index.d.ts +24 -0
- package/dist/icons/index.js +27 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +20 -0
- package/dist/modules/MODULES.md +245 -0
- package/dist/modules/airconditionModule/README.md +262 -0
- package/dist/modules/airconditionModule/index.d.ts +17 -0
- package/dist/modules/airconditionModule/index.js +63 -0
- package/dist/modules/carInfoModule/README.md +418 -0
- package/dist/modules/carInfoModule/index.d.ts +26 -0
- package/dist/modules/carInfoModule/index.js +67 -0
- package/dist/modules/index.d.ts +2 -0
- package/dist/modules/index.js +2 -0
- package/dist/modules/seatModule/README.md +345 -0
- package/dist/modules/seatModule/index.d.ts +15 -0
- package/dist/modules/seatModule/index.js +40 -0
- package/dist/modules/steeringWheelModule/README.md +216 -0
- package/dist/modules/steeringWheelModule/index.d.ts +13 -0
- package/dist/modules/steeringWheelModule/index.js +31 -0
- package/dist/resources/i18n.d.ts +1730 -0
- package/dist/resources/i18n.js +84 -0
- package/dist/resources/images.d.ts +1 -0
- package/dist/resources/images.js +45 -0
- package/dist/spec/index.d.ts +494 -0
- package/dist/spec/index.js +911 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.js +1 -0
- package/dist/utils/checkSameValue.d.ts +1 -0
- package/dist/utils/checkSameValue.js +11 -0
- package/dist/utils/fns.d.ts +5 -0
- package/dist/utils/fns.js +167 -0
- package/dist/utils/get-value-or-default.d.ts +1 -0
- package/dist/utils/get-value-or-default.js +4 -0
- package/dist/utils/getLocalI18n.d.ts +1 -0
- package/dist/utils/getLocalI18n.js +9 -0
- package/dist/utils/i18n.d.ts +1 -0
- package/dist/utils/i18n.js +141 -0
- package/dist/utils/objects.d.ts +2 -0
- package/dist/utils/objects.js +222 -0
- package/dist/utils/spec.d.ts +8 -0
- package/dist/utils/spec.js +171 -0
- package/dist/utils/types.d.ts +3 -0
- package/dist/utils/types.js +25 -0
- package/package.json +27 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { AirConditioningCard } from './components/airConditioningCard';
|
|
2
|
+
export { CardContainer } from './components/cardContainer';
|
|
3
|
+
export { default as ContainerWithGap } from './components/containerWithGap';
|
|
4
|
+
export { FlatSelect, FlatOption } from './components/flatSelect';
|
|
5
|
+
export { GroupContainer } from './components/groupContainer';
|
|
6
|
+
export { OtherSettingCard } from './components/otherSettingCard';
|
|
7
|
+
export { SteeringWheelHotCard } from './components/steeringWheelHotCard';
|
|
8
|
+
export { TitleContainer } from './components/titleContainer';
|
|
9
|
+
export { WarningForRunningCard } from './components/warningForRunningCard';
|
|
10
|
+
export { CarInfoHeader } from './components/carInfoHeader';
|
|
11
|
+
export type { SingleRangeData, DualRangeData, ParkingStatusData, CarInfoHeaderProps, } from './components/carInfoHeader';
|
|
12
|
+
export { SeatControl, type SeatControlProps, type ControlButtonConfig, type OnButtonPressParams } from './components/seatControl';
|
|
13
|
+
export { SeatCard, type SeatCardProps } from './components/seatControl/seatCard';
|
|
14
|
+
export { PageBackground, type PageBackgroundProps } from './components/pageBackground';
|
|
15
|
+
export { SeatControlGroup, type SeatControlGroupProps, type SeatConfig } from './components/seatControlGroup';
|
|
16
|
+
export { useSingleRangeData, type RangeDisplayData, type UseSingleRangeDataProps } from './hooks/useSingleRangeData';
|
|
17
|
+
export { useDualRangeData, type DualRangeDisplayData, type UseDualRangeDataProps } from './hooks/useDualRangeData';
|
|
18
|
+
export { useParkingStatusData, type ParkingStatusInfo, type UseParkingStatusDataProps } from './hooks/useParkingStatusData';
|
|
19
|
+
export { useSeatControlData, type SeatControlDataProps, SeatSpecs, LEVEL_ICONS, TYPE_CONFIG, SEAT_TITLES } from './hooks/useSeatControlData';
|
|
20
|
+
export * from './config';
|
|
21
|
+
export * from './modules';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { AirConditioningCard } from "./components/airConditioningCard";
|
|
2
|
+
export { CardContainer } from "./components/cardContainer";
|
|
3
|
+
export { default as ContainerWithGap } from "./components/containerWithGap";
|
|
4
|
+
export { FlatSelect, FlatOption } from "./components/flatSelect";
|
|
5
|
+
export { GroupContainer } from "./components/groupContainer";
|
|
6
|
+
export { OtherSettingCard } from "./components/otherSettingCard";
|
|
7
|
+
export { SteeringWheelHotCard } from "./components/steeringWheelHotCard";
|
|
8
|
+
export { TitleContainer } from "./components/titleContainer";
|
|
9
|
+
export { WarningForRunningCard } from "./components/warningForRunningCard";
|
|
10
|
+
export { CarInfoHeader } from "./components/carInfoHeader";
|
|
11
|
+
export { SeatControl } from "./components/seatControl";
|
|
12
|
+
export { SeatCard } from "./components/seatControl/seatCard";
|
|
13
|
+
export { PageBackground } from "./components/pageBackground";
|
|
14
|
+
export { SeatControlGroup } from "./components/seatControlGroup";
|
|
15
|
+
export { useSingleRangeData } from "./hooks/useSingleRangeData";
|
|
16
|
+
export { useDualRangeData } from "./hooks/useDualRangeData";
|
|
17
|
+
export { useParkingStatusData } from "./hooks/useParkingStatusData";
|
|
18
|
+
export { useSeatControlData, SeatSpecs, LEVEL_ICONS, TYPE_CONFIG, SEAT_TITLES } from "./hooks/useSeatControlData";
|
|
19
|
+
export * from "./config";
|
|
20
|
+
export * from "./modules";
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Modules 技术文档
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
`modules/` 是 `@miot-rn/car-component` 的业务模块层,遵循 **Module = Component + Hook** 的组合模式。每个 Module 封装了 spec 数据获取(通过 hook)和 UI 渲染(通过 component),对外暴露简洁的 `specs` + 配置项 Props 接口。
|
|
6
|
+
|
|
7
|
+
## 架构
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Module (业务模块)
|
|
11
|
+
├── 接收 specs + 配置 props
|
|
12
|
+
├── 调用 hook → 获取/转换 spec 数据
|
|
13
|
+
└── 渲染 component → 传入转换后的 props
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
消费方 → Module(specs, config)
|
|
18
|
+
├── hook(specs) → 数据转换、状态管理、事件处理
|
|
19
|
+
└── Component(transformedProps) → UI 渲染
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 模块清单
|
|
23
|
+
|
|
24
|
+
### 1. CarInfoModule — 车辆信息模块
|
|
25
|
+
|
|
26
|
+
| 项目 | 说明 |
|
|
27
|
+
|------|------|
|
|
28
|
+
| 文件 | `carInfoModule/index.tsx` |
|
|
29
|
+
| 组件 | `CarInfoHeader` |
|
|
30
|
+
| Hooks | `useSingleRangeData`, `useDualRangeData`, `useParkingStatusData` |
|
|
31
|
+
| 导出 | ✅ 已从 `modules/index.ts` 导出 |
|
|
32
|
+
|
|
33
|
+
**Props 接口:`CarInfoModuleProps`**
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
interface CarInfoModuleProps {
|
|
37
|
+
specs: CarInfoSpecs;
|
|
38
|
+
connectStatus?: ConnectStatusValue; // 默认 ConnectStatus.CONNECTING
|
|
39
|
+
containerStyle?: StyleProp<ViewStyle>;
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Specs 定义:`CarInfoSpecs`**
|
|
44
|
+
|
|
45
|
+
| Spec 字段 | 用途 |
|
|
46
|
+
|-----------|------|
|
|
47
|
+
| `specPowerBatteryPropertiesBatterySoCDisplay` | 电池 SOC 显示 |
|
|
48
|
+
| `specPowerBatteryPropertiesLowSocWarning` | 低电量警告 |
|
|
49
|
+
| `specPowerBatteryPropertiesBatteryEstimatedMileage` | 电池预估里程 |
|
|
50
|
+
| `specPowerBatteryPropertiesDCDRangeSOCTypeDisplay` | 续航 SOC 类型显示 |
|
|
51
|
+
| `specPowerBatteryPropertiesCLTCEstimatedRange` | CLTC 预估续航 |
|
|
52
|
+
| `specPowerBatteryLifeEffectivenessPropertiesCltcEstimatedExtendEange` | CLTC 增程续航 |
|
|
53
|
+
| `specPowerRangePropertiesCltcFuelEndurance` | CLTC 燃油续航 |
|
|
54
|
+
| `specPowerRangePropertiesWltcPureEleCruisingEndurance` | WLTC 纯电续航 |
|
|
55
|
+
| `specPowerRangePropertiesWltcFuelEndurance` | WLTC 燃油续航 |
|
|
56
|
+
| `specBodyGearPropertiesGearStatus` | 档位状态 |
|
|
57
|
+
| `specBodyPowerModePropertiesPowerModeState` | 电源模式 |
|
|
58
|
+
| `specDoorCentralLockPropertiesCentralLockState` | 中控锁状态 |
|
|
59
|
+
| `specSentryInfoPropertiesSentryWorkMode` | 哨兵模式 |
|
|
60
|
+
|
|
61
|
+
**核心逻辑:**
|
|
62
|
+
- 根据是否传入双续航相关 spec 自动判断 `rangeType`(`'single'` | `'dual'`)
|
|
63
|
+
- 单续航 → `useSingleRangeData` → 电量百分比 + 预估里程
|
|
64
|
+
- 双续航 → `useDualRangeData` → 纯电续航 + 燃油续航
|
|
65
|
+
- 驻车状态 → `useParkingStatusData` → 档位/锁车/哨兵模式状态图标
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### 2. SeatModule — 座椅控制模块
|
|
70
|
+
|
|
71
|
+
| 项目 | 说明 |
|
|
72
|
+
|------|------|
|
|
73
|
+
| 文件 | `seatModule/index.tsx` |
|
|
74
|
+
| 组件 | `SeatControlGroup` |
|
|
75
|
+
| Hook | `useSeatControlData` |
|
|
76
|
+
| 导出 | ✅ 已从 `modules/index.ts` 导出 |
|
|
77
|
+
|
|
78
|
+
**Props 接口:`SeatModuleProps`**
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
interface SeatModuleProps {
|
|
82
|
+
specs: SeatSpecs;
|
|
83
|
+
disabled?: boolean; // 默认 false
|
|
84
|
+
onSeatChange?: (params: {
|
|
85
|
+
propType: string;
|
|
86
|
+
previousValue: number;
|
|
87
|
+
currentValue: number;
|
|
88
|
+
}) => void;
|
|
89
|
+
style?: StyleProp<ViewStyle>;
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Specs 定义:`SeatSpecs`**
|
|
94
|
+
|
|
95
|
+
| Spec 字段 | 用途 |
|
|
96
|
+
|-----------|------|
|
|
97
|
+
| `specSeatRow1LeftPropertiesHeating` | 第一排左座加热 |
|
|
98
|
+
| `specSeatRow1LeftPropertiesSeatVentilation` | 第一排左座通风 |
|
|
99
|
+
| `specSeatRow1RightPropertiesHeating` | 第一排右座加热 |
|
|
100
|
+
| `specSeatRow1RightPropertiesSeatVentilation` | 第一排右座通风 |
|
|
101
|
+
| `specSeatRow2LeftPropertiesHeating` | 第二排左座加热 |
|
|
102
|
+
| `specSeatRow2LeftPropertiesSeatVentilation` | 第二排左座通风 |
|
|
103
|
+
| `specSeatRow2MiddlePropertiesHeating` | 第二排中座加热 |
|
|
104
|
+
| `specSeatRow2MiddlePropertiesSeatVentilation` | 第二排中座通风 |
|
|
105
|
+
| `specSeatRow2RightPropertiesHeating` | 第二排右座加热 |
|
|
106
|
+
| `specSeatRow2RightPropertiesSeatVentilation` | 第二排右座通风 |
|
|
107
|
+
|
|
108
|
+
**核心逻辑:**
|
|
109
|
+
- `useSeatControlData` 根据传入的 specs 动态生成座椅行列数据(`seatRows`)和标题(`seatTitles`)
|
|
110
|
+
- `hasSeats` 为 false 时不渲染(无座椅 spec 则隐藏模块)
|
|
111
|
+
- 支持加热/通风档位切换回调 `onSeatChange`
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 3. AirconditionModule — 空调控制模块
|
|
116
|
+
|
|
117
|
+
| 项目 | 说明 |
|
|
118
|
+
|------|------|
|
|
119
|
+
| 文件 | `airconditionModule/index.tsx` |
|
|
120
|
+
| 组件 | `AirConditioningCard` |
|
|
121
|
+
| Hook | `useAirConditionData` |
|
|
122
|
+
| 导出 | ❌ 未从 `modules/index.ts` 导出 |
|
|
123
|
+
|
|
124
|
+
**Props 接口:`AirconditionModuleProps`**
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
interface AirconditionModuleProps {
|
|
128
|
+
specs: AirconditionSpecs;
|
|
129
|
+
connectStatus?: ConnectStatusValue;
|
|
130
|
+
isCarRunning: boolean;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Specs 定义:`AirconditionSpecs`**
|
|
135
|
+
|
|
136
|
+
| Spec 字段 | 用途 |
|
|
137
|
+
|-----------|------|
|
|
138
|
+
| `specHVACStatePropertiesHvacStatus` | 空调开关状态 |
|
|
139
|
+
| `specHVACStatePropertiesHvacDefrosterStatus` | 除霜状态 |
|
|
140
|
+
| `specHVACTemperaturePropertiesInsideTemperature` | 车内温度 |
|
|
141
|
+
| `specHVACTemperaturePropertiesOutsideTemperature` | 车外温度 |
|
|
142
|
+
| `specHVACTemperaturePropertiesHvacTargetTemperature` | 目标温度 |
|
|
143
|
+
|
|
144
|
+
**核心逻辑:**
|
|
145
|
+
- 禁用条件:`connectStatus !== CONNECTED || isCarRunning`
|
|
146
|
+
- 根据是否传入 `specHVACTemperaturePropertiesHvacTargetTemperature` 决定是否显示目标温度控制
|
|
147
|
+
- 根据是否传入 `specHVACStatePropertiesHvacDefrosterStatus` 决定是否显示除霜控制
|
|
148
|
+
- hook 返回温度步进、最大/最小温度、i18n 标题等
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### 4. SteeringWheelModule — 方向盘加热模块
|
|
153
|
+
|
|
154
|
+
| 项目 | 说明 |
|
|
155
|
+
|------|------|
|
|
156
|
+
| 文件 | `steeringWheelModule/index.tsx` |
|
|
157
|
+
| 组件 | `SteeringWheelHotCard` |
|
|
158
|
+
| Hook | `useSteeringWheelData` |
|
|
159
|
+
| 导出 | ❌ 未从 `modules/index.ts` 导出 |
|
|
160
|
+
|
|
161
|
+
**Props 接口:`SteeringWheelModuleProps`**
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
interface SteeringWheelModuleProps {
|
|
165
|
+
specs: SteeringWheelSpecs;
|
|
166
|
+
connectStatus?: ConnectStatusValue;
|
|
167
|
+
isCarRunning: boolean;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Specs 定义:`SteeringWheelSpecs`**
|
|
172
|
+
|
|
173
|
+
| Spec 字段 | 用途 |
|
|
174
|
+
|-----------|------|
|
|
175
|
+
| `specBodySteeringWheelPropertiesSteeringWheelHeating` | 方向盘加热档位 |
|
|
176
|
+
|
|
177
|
+
**核心逻辑:**
|
|
178
|
+
- 禁用条件:`connectStatus !== CONNECTED || isCarRunning`
|
|
179
|
+
- hook 返回加热档位选项(`steeringWheelOptions`)和当前状态
|
|
180
|
+
- 使用 `FlatSelect` 风格的档位选择 UI
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 依赖关系图
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
modules/index.ts
|
|
188
|
+
├── export CarInfoModule
|
|
189
|
+
└── export SeatModule
|
|
190
|
+
|
|
191
|
+
CarInfoModule
|
|
192
|
+
├── hooks: useSingleRangeData, useDualRangeData, useParkingStatusData
|
|
193
|
+
└── components: CarInfoHeader
|
|
194
|
+
|
|
195
|
+
SeatModule
|
|
196
|
+
├── hooks: useSeatControlData
|
|
197
|
+
└── components: SeatControlGroup
|
|
198
|
+
|
|
199
|
+
AirconditionModule (未导出)
|
|
200
|
+
├── hooks: useAirConditionData
|
|
201
|
+
└── components: AirConditioningCard
|
|
202
|
+
|
|
203
|
+
SteeringWheelModule (未导出)
|
|
204
|
+
├── hooks: useSteeringWheelData
|
|
205
|
+
└── components: SteeringWheelHotCard
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## 三层引用模式
|
|
209
|
+
|
|
210
|
+
每个模块支持三种引用粒度,开发者可按需选择:
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
┌──────────────────────────────────────────────────────┐
|
|
214
|
+
│ Module(完整模块)= Hook + Component │
|
|
215
|
+
│ 开箱即用,适合标准业务场景 │
|
|
216
|
+
├──────────────────────────────────────────────────────┤
|
|
217
|
+
│ Hook(数据层) Component(UI 层) │
|
|
218
|
+
│ 自定义 UI 时复用数据逻辑 已有数据源时仅渲染 UI │
|
|
219
|
+
└──────────────────────────────────────────────────────┘
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
| 模块 | Hook | Component |
|
|
223
|
+
|------|------|-----------|
|
|
224
|
+
| `CarInfoModule` | `useSingleRangeData` / `useDualRangeData` / `useParkingStatusData` | `CarInfoHeader` |
|
|
225
|
+
| `SeatModule` | `useSeatControlData` | `SeatControlGroup` |
|
|
226
|
+
| `AirconditionModule` | `useAirConditionData` | `AirConditioningCard` |
|
|
227
|
+
| `SteeringWheelModule` | `useSteeringWheelData` | `SteeringWheelHotCard` |
|
|
228
|
+
|
|
229
|
+
详细用法请参考各模块目录下的 `README.md`。
|
|
230
|
+
|
|
231
|
+
## 设计模式
|
|
232
|
+
|
|
233
|
+
1. **Specs 注入模式**:所有模块通过 `specs` prop 接收设备 spec 定义,不在模块内部硬编码 spec 引用,实现不同车型的灵活适配。
|
|
234
|
+
|
|
235
|
+
2. **条件渲染**:模块根据传入的 specs 是否存在自动决定功能可见性(如 SeatModule 的 `hasSeats`、CarInfoModule 的 `rangeType` 判断)。
|
|
236
|
+
|
|
237
|
+
3. **统一禁用策略**:空调和方向盘模块共享 `connectStatus !== CONNECTED || isCarRunning` 的禁用逻辑,确保行驶中或断连时不可操作。
|
|
238
|
+
|
|
239
|
+
4. **Hook 封装数据转换**:所有 spec 原始值到 UI 展示值的转换(i18n、档位映射、温度格式化等)均在 hook 层完成,Module 和 Component 不处理原始 spec 数据。
|
|
240
|
+
|
|
241
|
+
## 注意事项
|
|
242
|
+
|
|
243
|
+
- `AirconditionModule` 和 `SteeringWheelModule` 当前未从 `modules/index.ts` 导出,消费方需直接引用子路径或等待后续导出。
|
|
244
|
+
- `SeatModule` 中存在 `as any` 类型断言,可能需要后续类型完善。
|
|
245
|
+
- `SteeringWheelModule` 中存在 `@ts-ignore` 注释,`steeringWheelOptions` 的类型与 `SteeringWheelHotCard` 的 `options` prop 类型可能不完全匹配。
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# AirconditionModule — 空调控制模块
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
车载空调控制模块,提供空调开关、除霜开关和目标温度调节功能。支持车内/车外温度显示。
|
|
6
|
+
|
|
7
|
+
> ⚠️ 当前未从 `modules/index.ts` 导出,需直接引用子路径。
|
|
8
|
+
|
|
9
|
+
## 引用方式
|
|
10
|
+
|
|
11
|
+
本模块支持三种引用粒度,开发者可根据需要选择:
|
|
12
|
+
|
|
13
|
+
| 引用方式 | 说明 | 适用场景 |
|
|
14
|
+
|---------|------|---------|
|
|
15
|
+
| **Module(推荐)** | 完整模块,内含数据层 + UI 层 | 标准业务场景,开箱即用 |
|
|
16
|
+
| **Hook** | 仅数据层(`useAirConditionData`) | 需要自定义 UI,复用数据逻辑 |
|
|
17
|
+
| **Component** | 仅 UI 层(`AirConditioningCard`) | 已有数据源,仅需渲染 UI |
|
|
18
|
+
|
|
19
|
+
## 文件
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
airconditionModule/
|
|
23
|
+
└── index.tsx
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Module 用法(完整模块)
|
|
29
|
+
|
|
30
|
+
### Props
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
interface AirconditionModuleProps {
|
|
34
|
+
specs: AirconditionSpecs;
|
|
35
|
+
connectStatus?: ConnectStatusValue;
|
|
36
|
+
isCarRunning: boolean; // 车辆是否行驶中
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface AirconditionSpecs {
|
|
40
|
+
specHVACStatePropertiesHvacStatus?: Spec;
|
|
41
|
+
specHVACStatePropertiesHvacDefrosterStatus?: Spec;
|
|
42
|
+
specHVACTemperaturePropertiesInsideTemperature?: Spec;
|
|
43
|
+
specHVACTemperaturePropertiesOutsideTemperature?: Spec;
|
|
44
|
+
specHVACTemperaturePropertiesHvacTargetTemperature?: Spec;
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Specs 定义
|
|
49
|
+
|
|
50
|
+
| Spec | 用途 | 必填 |
|
|
51
|
+
|------|------|------|
|
|
52
|
+
| `specHVACStatePropertiesHvacStatus` | 空调开关状态(On/Off) | 否 |
|
|
53
|
+
| `specHVACStatePropertiesHvacDefrosterStatus` | 除霜状态(Off/Max Defrost) | 否 |
|
|
54
|
+
| `specHVACTemperaturePropertiesInsideTemperature` | 车内温度(只读) | 否 |
|
|
55
|
+
| `specHVACTemperaturePropertiesOutsideTemperature` | 车外温度(只读) | 否 |
|
|
56
|
+
| `specHVACTemperaturePropertiesHvacTargetTemperature` | 目标温度(可调节) | 否 |
|
|
57
|
+
|
|
58
|
+
### 禁用条件
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
disabled = connectStatus !== ConnectStatus.CONNECTED || isCarRunning
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 条件渲染
|
|
65
|
+
|
|
66
|
+
| 条件 | 效果 |
|
|
67
|
+
|------|------|
|
|
68
|
+
| `specHVACTemperaturePropertiesHvacTargetTemperature` 存在 | 显示目标温度 Stepper |
|
|
69
|
+
| `specHVACStatePropertiesHvacDefrosterStatus` 存在 | 显示除霜开关 |
|
|
70
|
+
|
|
71
|
+
### 示例
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
import { AirconditionModule } from '@miot-rn/car-component/dist/modules/airconditionModule';
|
|
75
|
+
import { ConnectStatus } from '@miot-rn/car-component/dist/config';
|
|
76
|
+
|
|
77
|
+
<AirconditionModule
|
|
78
|
+
specs={{
|
|
79
|
+
specHVACStatePropertiesHvacStatus: hvacStatusSpec,
|
|
80
|
+
specHVACStatePropertiesHvacDefrosterStatus: defrosterSpec,
|
|
81
|
+
specHVACTemperaturePropertiesInsideTemperature: insideTempSpec,
|
|
82
|
+
specHVACTemperaturePropertiesOutsideTemperature: outsideTempSpec,
|
|
83
|
+
specHVACTemperaturePropertiesHvacTargetTemperature: targetTempSpec,
|
|
84
|
+
}}
|
|
85
|
+
connectStatus={ConnectStatus.CONNECTED}
|
|
86
|
+
isCarRunning={false}
|
|
87
|
+
/>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 2. Hook 用法(`useAirConditionData`)
|
|
93
|
+
|
|
94
|
+
适用于需要**自定义 UI** 但复用空调数据逻辑的场景。
|
|
95
|
+
|
|
96
|
+
### 引入
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { useAirConditionData } from '@miot-rn/car-component/dist/hooks/useAirConditionData';
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 入参
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
interface UseAirConditionDataProps {
|
|
106
|
+
specHVACStatePropertiesHvacStatus: Spec;
|
|
107
|
+
specHVACStatePropertiesHvacDefrosterStatus: Spec;
|
|
108
|
+
specHVACTemperaturePropertiesInsideTemperature: Spec;
|
|
109
|
+
specHVACTemperaturePropertiesOutsideTemperature: Spec;
|
|
110
|
+
specHVACTemperaturePropertiesHvacTargetTemperature: Spec;
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 返回值
|
|
115
|
+
|
|
116
|
+
| 字段 | 类型 | 说明 |
|
|
117
|
+
|------|------|------|
|
|
118
|
+
| `hvacStatus` | `any` | 空调开关 spec 原始值 |
|
|
119
|
+
| `hvacDefrosterStatus` | `any` | 除霜开关 spec 原始值 |
|
|
120
|
+
| `transformHvacStatus` | `boolean` | 空调是否开启(`true` = On) |
|
|
121
|
+
| `transformHvacDefrosterStatus` | `boolean` | 除霜是否开启(`true` = 非 Off) |
|
|
122
|
+
| `targetTemperature` | `any` | 目标温度 spec 原始值 |
|
|
123
|
+
| `onHvacStatusChange` | `(val: boolean) => void` | 空调开关切换,写入 On/Off |
|
|
124
|
+
| `onHvacDefrosterChange` | `(val: boolean) => void` | 除霜开关切换,写入 Max Defrost/Off |
|
|
125
|
+
| `onHvacTemperatureChange` | `(val: number) => void` | 温度调节,写入数值 |
|
|
126
|
+
| `hvacTitle` | `string` | 空调标题(i18n `car_air_condition_name`) |
|
|
127
|
+
| `hvacDefrosterTitle` | `string` | 除霜标题(i18n `car_air_condition_defog`) |
|
|
128
|
+
| `airConditionTip` | `string` | 除霜副标题(i18n `car_air_condition_tip`) |
|
|
129
|
+
| `insideCarTip` | `string` | 车内温度文案,含温度值插值 |
|
|
130
|
+
| `outsideCarTip` | `string` | 车外温度文案,含温度值插值 |
|
|
131
|
+
| `insideTemperature` | `any` | 车内温度 spec 原始值 |
|
|
132
|
+
| `outsideTemperature` | `any` | 车外温度 spec 原始值 |
|
|
133
|
+
| `temperatureStep` | `number` | 温度调节步进 |
|
|
134
|
+
| `maxTemperature` | `number` | 最高可调温度 |
|
|
135
|
+
| `minTemperature` | `number` | 最低可调温度 |
|
|
136
|
+
|
|
137
|
+
### 示例
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
import { useAirConditionData } from '@miot-rn/car-component/dist/hooks/useAirConditionData';
|
|
141
|
+
|
|
142
|
+
const MyCustomAirCondition = ({ specs }) => {
|
|
143
|
+
const {
|
|
144
|
+
transformHvacStatus,
|
|
145
|
+
onHvacStatusChange,
|
|
146
|
+
transformHvacDefrosterStatus,
|
|
147
|
+
onHvacDefrosterChange,
|
|
148
|
+
targetTemperature,
|
|
149
|
+
onHvacTemperatureChange,
|
|
150
|
+
hvacTitle,
|
|
151
|
+
insideCarTip,
|
|
152
|
+
outsideCarTip,
|
|
153
|
+
minTemperature,
|
|
154
|
+
maxTemperature,
|
|
155
|
+
temperatureStep,
|
|
156
|
+
} = useAirConditionData(specs);
|
|
157
|
+
|
|
158
|
+
return (
|
|
159
|
+
<View>
|
|
160
|
+
<Text>{hvacTitle}</Text>
|
|
161
|
+
<Switch value={transformHvacStatus} onValueChange={onHvacStatusChange} />
|
|
162
|
+
<Text>{insideCarTip}</Text>
|
|
163
|
+
<Text>{outsideCarTip}</Text>
|
|
164
|
+
<Slider
|
|
165
|
+
value={Number(targetTemperature)}
|
|
166
|
+
minimumValue={minTemperature}
|
|
167
|
+
maximumValue={maxTemperature}
|
|
168
|
+
step={temperatureStep}
|
|
169
|
+
onValueChange={onHvacTemperatureChange}
|
|
170
|
+
/>
|
|
171
|
+
</View>
|
|
172
|
+
);
|
|
173
|
+
};
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 3. Component 用法(`AirConditioningCard`)
|
|
179
|
+
|
|
180
|
+
适用于已有数据源,仅需渲染空调控制 UI 的场景。
|
|
181
|
+
|
|
182
|
+
### 引入
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
import { AirConditioningCard } from '@miot-rn/car-component/dist/components/airConditioningCard';
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Props
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
interface AirConditioningCardProps {
|
|
192
|
+
hvacStatus: boolean; // 空调开关状态
|
|
193
|
+
hvacDefrosterStatus: boolean; // 除霜开关状态
|
|
194
|
+
onHvacStatusChange: (value: boolean) => void; // 空调开关回调
|
|
195
|
+
onHvacDefrosterChange: (value: boolean) => void; // 除霜开关回调
|
|
196
|
+
targetTemperature: number | string; // 目标温度
|
|
197
|
+
onHvacTemperatureChange: (value: number) => void; // 温度调节回调
|
|
198
|
+
hvacTitle: string; // 空调标题
|
|
199
|
+
hvacDefrosterTitle: string; // 除霜标题
|
|
200
|
+
hvacDefrosterSubtitle?: string; // 除霜副标题,默认 ''
|
|
201
|
+
insideTip?: string; // 车内温度提示,默认 ''
|
|
202
|
+
outsideTip?: string; // 车外温度提示,默认 ''
|
|
203
|
+
temperatureStep: number; // 温度步进
|
|
204
|
+
maxTemperature: number; // 最高温度
|
|
205
|
+
minTemperature: number; // 最低温度
|
|
206
|
+
insideTemperature?: number | string; // 车内温度值(控制是否显示)
|
|
207
|
+
outsideTemperature?: number | string; // 车外温度值(控制是否显示)
|
|
208
|
+
showHvacDefroster?: boolean; // 是否显示除霜,默认 false
|
|
209
|
+
disabled?: boolean; // 禁用状态,默认 false
|
|
210
|
+
showTargetTemperature?: boolean; // 是否显示温度调节,默认 false
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 渲染结构
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
CardContainer
|
|
218
|
+
├── TitleContainer (标题 + 空调 Switch)
|
|
219
|
+
│ └── subtitle: 车内/车外温度文案
|
|
220
|
+
├── Stepper (目标温度调节,showTargetTemperature=true 时显示)
|
|
221
|
+
│ └── 空调关闭或 disabled 时 Stepper 禁用
|
|
222
|
+
└── LargeVariantSwitch (除霜开关,showHvacDefroster=true 时显示)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 示例
|
|
226
|
+
|
|
227
|
+
```tsx
|
|
228
|
+
import { AirConditioningCard } from '@miot-rn/car-component/dist/components/airConditioningCard';
|
|
229
|
+
|
|
230
|
+
<AirConditioningCard
|
|
231
|
+
hvacStatus={true}
|
|
232
|
+
hvacDefrosterStatus={false}
|
|
233
|
+
onHvacStatusChange={(val) => console.log('空调:', val)}
|
|
234
|
+
onHvacDefrosterChange={(val) => console.log('除霜:', val)}
|
|
235
|
+
targetTemperature={24}
|
|
236
|
+
onHvacTemperatureChange={(val) => console.log('温度:', val)}
|
|
237
|
+
hvacTitle="空调"
|
|
238
|
+
hvacDefrosterTitle="前挡除霜"
|
|
239
|
+
insideTip="车内 25°C"
|
|
240
|
+
outsideTip="车外 10°C"
|
|
241
|
+
insideTemperature={25}
|
|
242
|
+
outsideTemperature={10}
|
|
243
|
+
temperatureStep={0.5}
|
|
244
|
+
maxTemperature={32}
|
|
245
|
+
minTemperature={16}
|
|
246
|
+
showTargetTemperature={true}
|
|
247
|
+
showHvacDefroster={true}
|
|
248
|
+
disabled={false}
|
|
249
|
+
/>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## i18n 文案
|
|
255
|
+
|
|
256
|
+
| Key | 用途 |
|
|
257
|
+
|-----|------|
|
|
258
|
+
| `car_air_condition_name` | 空调标题 |
|
|
259
|
+
| `car_air_condition_defog` | 除霜标题 |
|
|
260
|
+
| `car_air_condition_tip` | 除霜副标题 |
|
|
261
|
+
| `car_inside_car_tip` | 车内温度文案(含温度值插值) |
|
|
262
|
+
| `car_outside_car_tip` | 车外温度文案(含温度值插值) |
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ConnectStatusValue } from '../../config/ConnectStatus';
|
|
3
|
+
import { Spec } from '../../types';
|
|
4
|
+
export interface AirconditionSpecs {
|
|
5
|
+
specHVACStatePropertiesHvacStatus?: Spec;
|
|
6
|
+
specHVACStatePropertiesHvacDefrosterStatus?: Spec;
|
|
7
|
+
specHVACTemperaturePropertiesInsideTemperature?: Spec;
|
|
8
|
+
specHVACTemperaturePropertiesOutsideTemperature?: Spec;
|
|
9
|
+
specHVACTemperaturePropertiesHvacTargetTemperature?: Spec;
|
|
10
|
+
}
|
|
11
|
+
export interface AirconditionModuleProps {
|
|
12
|
+
specs: AirconditionSpecs;
|
|
13
|
+
connectStatus?: ConnectStatusValue;
|
|
14
|
+
isCarRunning: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const AirconditionModule: ({ specs, connectStatus, isCarRunning }: AirconditionModuleProps) => React.JSX.Element;
|
|
17
|
+
export default AirconditionModule;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AirConditioningCard } from "../../components/airConditioningCard";
|
|
3
|
+
import { useAirConditionData } from "../../hooks/useAirConditionData";
|
|
4
|
+
import { ConnectStatus } from "../../hooks";
|
|
5
|
+
export const AirconditionModule = ({
|
|
6
|
+
specs,
|
|
7
|
+
connectStatus,
|
|
8
|
+
isCarRunning
|
|
9
|
+
}) => {
|
|
10
|
+
const {
|
|
11
|
+
specHVACStatePropertiesHvacStatus,
|
|
12
|
+
specHVACStatePropertiesHvacDefrosterStatus,
|
|
13
|
+
specHVACTemperaturePropertiesInsideTemperature,
|
|
14
|
+
specHVACTemperaturePropertiesOutsideTemperature,
|
|
15
|
+
specHVACTemperaturePropertiesHvacTargetTemperature
|
|
16
|
+
} = specs;
|
|
17
|
+
const {
|
|
18
|
+
transformHvacStatus,
|
|
19
|
+
transformHvacDefrosterStatus,
|
|
20
|
+
targetTemperature,
|
|
21
|
+
onHvacStatusChange,
|
|
22
|
+
onHvacDefrosterChange,
|
|
23
|
+
onHvacTemperatureChange,
|
|
24
|
+
hvacTitle,
|
|
25
|
+
hvacDefrosterTitle,
|
|
26
|
+
airConditionTip,
|
|
27
|
+
insideCarTip,
|
|
28
|
+
outsideCarTip,
|
|
29
|
+
insideTemperature,
|
|
30
|
+
outsideTemperature,
|
|
31
|
+
temperatureStep,
|
|
32
|
+
maxTemperature,
|
|
33
|
+
minTemperature
|
|
34
|
+
} = useAirConditionData({
|
|
35
|
+
specHVACStatePropertiesHvacStatus: specHVACStatePropertiesHvacStatus,
|
|
36
|
+
specHVACStatePropertiesHvacDefrosterStatus: specHVACStatePropertiesHvacDefrosterStatus,
|
|
37
|
+
specHVACTemperaturePropertiesInsideTemperature: specHVACTemperaturePropertiesInsideTemperature,
|
|
38
|
+
specHVACTemperaturePropertiesOutsideTemperature: specHVACTemperaturePropertiesOutsideTemperature,
|
|
39
|
+
specHVACTemperaturePropertiesHvacTargetTemperature: specHVACTemperaturePropertiesHvacTargetTemperature
|
|
40
|
+
});
|
|
41
|
+
return /*#__PURE__*/React.createElement(AirConditioningCard, {
|
|
42
|
+
showTargetTemperature: !!specHVACTemperaturePropertiesHvacTargetTemperature,
|
|
43
|
+
hvacStatus: transformHvacStatus,
|
|
44
|
+
hvacDefrosterStatus: transformHvacDefrosterStatus,
|
|
45
|
+
targetTemperature: targetTemperature,
|
|
46
|
+
onHvacStatusChange: onHvacStatusChange,
|
|
47
|
+
onHvacDefrosterChange: onHvacDefrosterChange,
|
|
48
|
+
onHvacTemperatureChange: onHvacTemperatureChange,
|
|
49
|
+
hvacTitle: hvacTitle,
|
|
50
|
+
hvacDefrosterTitle: hvacDefrosterTitle,
|
|
51
|
+
hvacDefrosterSubtitle: airConditionTip,
|
|
52
|
+
insideTip: insideCarTip,
|
|
53
|
+
outsideTip: outsideCarTip,
|
|
54
|
+
insideTemperature: insideTemperature,
|
|
55
|
+
outsideTemperature: outsideTemperature,
|
|
56
|
+
temperatureStep: temperatureStep,
|
|
57
|
+
maxTemperature: maxTemperature,
|
|
58
|
+
minTemperature: minTemperature,
|
|
59
|
+
disabled: connectStatus !== ConnectStatus.CONNECTED || isCarRunning,
|
|
60
|
+
showHvacDefroster: !!specHVACStatePropertiesHvacDefrosterStatus
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
export default AirconditionModule;
|