|
@@ -62,19 +62,21 @@
|
|
@change="effectTypeChange"
|
|
@change="effectTypeChange"
|
|
>
|
|
>
|
|
<a-radio value="week">按周</a-radio>
|
|
<a-radio value="week">按周</a-radio>
|
|
- <a-radio value="mouth">按月</a-radio>
|
|
|
|
|
|
+ <a-radio value="month">按月</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
|
|
|
<a-form-item label="生效范围" name="firmwareVersion">
|
|
<a-form-item label="生效范围" name="firmwareVersion">
|
|
- <a-checkbox
|
|
|
|
- v-model:checked="checkState.checkAll"
|
|
|
|
- :indeterminate="checkState.indeterminate"
|
|
|
|
- @change="onCheckAllChange"
|
|
|
|
- >
|
|
|
|
- 全选
|
|
|
|
- </a-checkbox>
|
|
|
|
- <a-checkbox-group v-model:value="formState.effectTimeRanges" :options="plainOptions" />
|
|
|
|
|
|
+ <a-form-item-rest>
|
|
|
|
+ <a-checkbox
|
|
|
|
+ v-model:checked="checkState.checkAll"
|
|
|
|
+ :indeterminate="checkState.indeterminate"
|
|
|
|
+ @change="onCheckAllChange"
|
|
|
|
+ >
|
|
|
|
+ 全选
|
|
|
|
+ </a-checkbox>
|
|
|
|
+ <a-checkbox-group v-model:value="formState.effectTimeRanges" :options="plainOptions" />
|
|
|
|
+ </a-form-item-rest>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
|
|
|
<a-form-item label="生效时段">
|
|
<a-form-item label="生效时段">
|
|
@@ -87,8 +89,8 @@
|
|
<a-button size="small" type="link" @click="addEffectTime">添加</a-button>
|
|
<a-button size="small" type="link" @click="addEffectTime">添加</a-button>
|
|
</div>
|
|
</div>
|
|
<div style="margin-top: 12px">
|
|
<div style="margin-top: 12px">
|
|
- <span v-if="!formState.effectTimeFrames.length" style="color: #aaa; font-size: 12px"
|
|
|
|
- >暂无生效时段</span
|
|
|
|
|
|
+ <span v-if="!formState.effectTimeFrames.length" style="color: #aaa; font-size: 14px"
|
|
|
|
+ >⚠️暂无生效时段</span
|
|
>
|
|
>
|
|
<a-space wrap v-else>
|
|
<a-space wrap v-else>
|
|
<a-tag
|
|
<a-tag
|
|
@@ -120,8 +122,8 @@
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
import { ref, reactive, watch } from 'vue'
|
|
import { ref, reactive, watch } from 'vue'
|
|
import { message, type FormInstance } from 'ant-design-vue'
|
|
import { message, type FormInstance } from 'ant-design-vue'
|
|
-// import * as deviceApi from '@/api/device'
|
|
|
|
-// import type { Rule } from 'ant-design-vue/es/form'
|
|
|
|
|
|
+import * as alarmApi from '@/api/alarm'
|
|
|
|
+import type { EventVal, EventValParam } from '@/api/alarm/types'
|
|
|
|
|
|
defineOptions({
|
|
defineOptions({
|
|
name: 'AlarmPlanModal',
|
|
name: 'AlarmPlanModal',
|
|
@@ -181,7 +183,7 @@ const mouthOptions = [
|
|
type FormState = {
|
|
type FormState = {
|
|
planName: string // 计划名称
|
|
planName: string // 计划名称
|
|
region: string[] // 检测区域 [left, top, width, height]
|
|
region: string[] // 检测区域 [left, top, width, height]
|
|
- eventType: string | null // 事件类型
|
|
|
|
|
|
+ eventType: EventVal | null // 事件类型
|
|
planTime: string[] // 计划时间
|
|
planTime: string[] // 计划时间
|
|
effectType: 'week' | 'month' // 生效方式 周week、月month
|
|
effectType: 'week' | 'month' // 生效方式 周week、月month
|
|
effectTimeRanges: string[] // 生效范围 周 1-7、月 1-31
|
|
effectTimeRanges: string[] // 生效范围 周 1-7、月 1-31
|
|
@@ -193,7 +195,7 @@ type FormState = {
|
|
const formState = reactive<FormState>({
|
|
const formState = reactive<FormState>({
|
|
planName: '',
|
|
planName: '',
|
|
region: [],
|
|
region: [],
|
|
- eventType: '',
|
|
|
|
|
|
+ eventType: null,
|
|
planTime: [],
|
|
planTime: [],
|
|
effectType: 'week',
|
|
effectType: 'week',
|
|
effectTimeRanges: weekOptions,
|
|
effectTimeRanges: weekOptions,
|
|
@@ -269,6 +271,17 @@ const cancel = () => {
|
|
emit('update:open', false)
|
|
emit('update:open', false)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// 星期映射数字
|
|
|
|
+const weekdaysReverseMap: Record<string, number> = {
|
|
|
|
+ 周一: 1,
|
|
|
|
+ 周二: 2,
|
|
|
|
+ 周三: 3,
|
|
|
|
+ 周四: 4,
|
|
|
|
+ 周五: 5,
|
|
|
|
+ 周六: 6,
|
|
|
|
+ 周日: 7,
|
|
|
|
+}
|
|
|
|
+
|
|
const submitLoading = ref(false)
|
|
const submitLoading = ref(false)
|
|
// 确定
|
|
// 确定
|
|
const submit = () => {
|
|
const submit = () => {
|
|
@@ -276,24 +289,68 @@ const submit = () => {
|
|
?.validate()
|
|
?.validate()
|
|
.then(() => {
|
|
.then(() => {
|
|
console.log('校验通过', formState)
|
|
console.log('校验通过', formState)
|
|
- // submitLoading.value = true
|
|
|
|
- // deviceApi
|
|
|
|
- // .addDevice({
|
|
|
|
- // clientId: formState.deviceId,
|
|
|
|
- // devType: formState.deviceType,
|
|
|
|
- // software: formState.firmwareVersion,
|
|
|
|
- // tenantId: formState.tenantId,
|
|
|
|
- // })
|
|
|
|
- // .then((res) => {
|
|
|
|
- // console.log('添加成功', res)
|
|
|
|
- // submitLoading.value = false
|
|
|
|
- // message.success('添加成功')
|
|
|
|
- // emit('success')
|
|
|
|
- // cancel()
|
|
|
|
- // })
|
|
|
|
- // .catch(() => {
|
|
|
|
- // submitLoading.value = false
|
|
|
|
- // })
|
|
|
|
|
|
+ let paramData: EventValParam = {}
|
|
|
|
+ if (
|
|
|
|
+ ['stay_detection', 'retention_detection', 'toileting_detection'].includes(
|
|
|
|
+ formState.eventType as string
|
|
|
|
+ )
|
|
|
|
+ ) {
|
|
|
|
+ console.log('参数传 {}')
|
|
|
|
+ paramData = {}
|
|
|
|
+ } else if (
|
|
|
|
+ ['toileting_frequency', 'night_toileting_frequency', 'bathroom_stay_frequency'].includes(
|
|
|
|
+ formState.eventType as string
|
|
|
|
+ )
|
|
|
|
+ ) {
|
|
|
|
+ console.log('参数传 { "start_time": "22:00", "end_time": "6:00" }')
|
|
|
|
+ paramData = { start_time: '22:00', end_time: '6:00' }
|
|
|
|
+ } else if (
|
|
|
|
+ ['toilet_frequency_abnormal', 'night_toileting_frequency_abnormal'].includes(
|
|
|
|
+ formState.eventType as string
|
|
|
|
+ )
|
|
|
|
+ ) {
|
|
|
|
+ console.log('参数传 { "start_time": "22:00", "end_time": "6:00", "count": 3 }')
|
|
|
|
+ paramData = { start_time: '22:00', end_time: '6:00', count: 3 }
|
|
|
|
+ } else if (['target_absence'].includes(formState.eventType as string)) {
|
|
|
|
+ console.log('参数传 { "time_threshold": 300 }')
|
|
|
|
+ paramData = { time_threshold: 300 }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const params = {
|
|
|
|
+ clientId: '', // 设备ID
|
|
|
|
+ name: formState.planName, // 计划名称
|
|
|
|
+ region: formState.region, // 检测区域 [left, top, width, height]
|
|
|
|
+ eventVal: formState.eventType, // 事件类型 与 param 有联动关系
|
|
|
|
+ param: paramData, // 事件参数 与 eventVal 有联动关系
|
|
|
|
+ enable: Number(formState.isEnable) as 0 | 1, // 是否启用 0否 1是
|
|
|
|
+ alarmTimePlan: {
|
|
|
|
+ startDate: formState.planTime[0], // 计划开始时间
|
|
|
|
+ stopDate: formState.planTime[1], // 计划结束时间
|
|
|
|
+ monthDays: formState.effectType === 'month' ? formState.effectTimeRanges : [], // 按月生效范围 1-31
|
|
|
|
+ weekdays:
|
|
|
|
+ formState.effectType === 'week'
|
|
|
|
+ ? formState.effectTimeRanges.map((item: string) => String(weekdaysReverseMap[item]))
|
|
|
|
+ : [], // 按周生效范围 1-7
|
|
|
|
+ timeRange: formState.effectTimeFrames.map((item) => ({
|
|
|
|
+ start_time: item.startTime, // 生效开始时间
|
|
|
|
+ end_time: item.endTime, // 生效结束时间
|
|
|
|
+ })),
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ console.log('🚀🚀🚀提交参数', params)
|
|
|
|
+ submitLoading.value = true
|
|
|
|
+ alarmApi
|
|
|
|
+ .saveAlarmPlan(params)
|
|
|
|
+ .then((res) => {
|
|
|
|
+ console.log('添加成功', res)
|
|
|
|
+ submitLoading.value = false
|
|
|
|
+ message.success('添加成功')
|
|
|
|
+ emit('success')
|
|
|
|
+ cancel()
|
|
|
|
+ })
|
|
|
|
+ .catch(() => {
|
|
|
|
+ submitLoading.value = false
|
|
|
|
+ })
|
|
})
|
|
})
|
|
.catch((err) => {
|
|
.catch((err) => {
|
|
console.log('校验失败', err)
|
|
console.log('校验失败', err)
|