|
@@ -1,10 +1,10 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="algoCardWrapper">
|
|
<div class="algoCardWrapper">
|
|
|
<div style="display: flex; justify-content: space-between">
|
|
<div style="display: flex; justify-content: space-between">
|
|
|
- <ElSelect v-model="currentAlgoId" style="width: 150px">
|
|
|
|
|
- <ElOption v-for="item in data" :key="item.id" :value="item.id" :label="item.name">
|
|
|
|
|
|
|
+ <ElSelect v-model="selectedAlgoId" style="width: 150px">
|
|
|
|
|
+ <ElOption v-for="item in allAlgoList" :key="item.id" :value="item.id" :label="item.name">
|
|
|
{{ item.name }}
|
|
{{ item.name }}
|
|
|
- <span style="margin-left: 5px" v-if="isAlgoAdded(item.id)">√</span>
|
|
|
|
|
|
|
+ <span style="margin-left: 5px" v-if="isAlgoBind(item.id)">√</span>
|
|
|
</ElOption>
|
|
</ElOption>
|
|
|
</ElSelect>
|
|
</ElSelect>
|
|
|
<ElSwitch v-model="enableCard" />
|
|
<ElSwitch v-model="enableCard" />
|
|
@@ -39,13 +39,12 @@
|
|
|
@change="handleTimeChange(x.id, $event)"
|
|
@change="handleTimeChange(x.id, $event)"
|
|
|
/>
|
|
/>
|
|
|
<span @click="removeTime(x.id)" v-if="timeRangeArr.length > 1">
|
|
<span @click="removeTime(x.id)" v-if="timeRangeArr.length > 1">
|
|
|
- <el-icon style="color: #8c8c8c"><CircleCloseFilled /></el-icon
|
|
|
|
|
|
|
+ <el-icon class="removeIcon"><CircleCloseFilled /></el-icon
|
|
|
></span>
|
|
></span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div @click="handleAddTimeRange"
|
|
|
|
|
- ><el-icon style="cursor: pointer; background-color: #f5f5f5; font-size: 20px"
|
|
|
|
|
- ><CirclePlus /></el-icon
|
|
|
|
|
- ></div>
|
|
|
|
|
|
|
+ <div @click="handleAddTimeRange" class="addTimeIcon">
|
|
|
|
|
+ <img :src="addTimeIcon" width="28" height="28" />
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="algoRow" style="align-items: center">
|
|
<div class="algoRow" style="align-items: center">
|
|
@@ -56,6 +55,7 @@
|
|
|
:min="0"
|
|
:min="0"
|
|
|
size="small"
|
|
size="small"
|
|
|
style="width: 80px"
|
|
style="width: 80px"
|
|
|
|
|
+ :precision="0"
|
|
|
/>
|
|
/>
|
|
|
<ElSelect size="small" style="width: 60px; margin-left: 10px" v-model="detectionUnit">
|
|
<ElSelect size="small" style="width: 60px; margin-left: 10px" v-model="detectionUnit">
|
|
|
<ElOption
|
|
<ElOption
|
|
@@ -68,7 +68,7 @@
|
|
|
<span style="font-size: 12px; margin-left: 5px">/次</span>
|
|
<span style="font-size: 12px; margin-left: 5px">/次</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div style="display: flex; justify-content: flex-end">
|
|
<div style="display: flex; justify-content: flex-end">
|
|
|
- <ElButton size="small" @click="emits('onRemove', currentAlgoId)">删除</ElButton>
|
|
|
|
|
|
|
+ <ElButton size="small" @click="handleRemoveAlgo">删除</ElButton>
|
|
|
<ElButton size="small" type="primary" @click="handleSave">保存</ElButton>
|
|
<ElButton size="small" type="primary" @click="handleSave">保存</ElButton>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -76,21 +76,19 @@
|
|
|
</template>
|
|
</template>
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
|
import { ElSelect, ElOption, ElSwitch, ElInputNumber, ElTimePicker } from 'element-plus';
|
|
import { ElSelect, ElOption, ElSwitch, ElInputNumber, ElTimePicker } from 'element-plus';
|
|
|
- import { CirclePlus, CircleCloseFilled } from '@element-plus/icons-vue';
|
|
|
|
|
- import useAllAlgos from './useAllAlgos';
|
|
|
|
|
|
|
+ import { CircleCloseFilled } from '@element-plus/icons-vue';
|
|
|
import { ref, watch } from 'vue';
|
|
import { ref, watch } from 'vue';
|
|
|
- import { uid } from 'uid';
|
|
|
|
|
import { storeToRefs } from 'pinia';
|
|
import { storeToRefs } from 'pinia';
|
|
|
|
|
+ import { Dayjs } from 'dayjs';
|
|
|
|
|
+ import addTimeIcon from '@/assets/icons/addTimeIcon.png';
|
|
|
import useCameraAlgoStore from '../../store/useCameraAlgoStore';
|
|
import useCameraAlgoStore from '../../store/useCameraAlgoStore';
|
|
|
import { STATUS } from './types';
|
|
import { STATUS } from './types';
|
|
|
|
|
+ import { FrequencyEnum, createDefaultTime, frequencyOptions, getDetectionJSON } from './utils';
|
|
|
|
|
|
|
|
- const { data, loading } = useAllAlgos();
|
|
|
|
|
-
|
|
|
|
|
|
|
+ // const { data: algoList, loading } = useAllAlgos();
|
|
|
const cameraAlgoStore = useCameraAlgoStore();
|
|
const cameraAlgoStore = useCameraAlgoStore();
|
|
|
-
|
|
|
|
|
- const { data: cameraAlogList } = storeToRefs(cameraAlgoStore);
|
|
|
|
|
-
|
|
|
|
|
- const props = defineProps<{ activeAlgoId: number | null }>();
|
|
|
|
|
|
|
+ const { isAlgoBind } = cameraAlgoStore;
|
|
|
|
|
+ const { allAlgoList, selectedAlgoId, selectedAlgoDetail } = storeToRefs(cameraAlgoStore);
|
|
|
|
|
|
|
|
interface Param {
|
|
interface Param {
|
|
|
/** 算法id */
|
|
/** 算法id */
|
|
@@ -110,43 +108,10 @@
|
|
|
(e: 'onRemove', algoId: number): Promise<unknown>;
|
|
(e: 'onRemove', algoId: number): Promise<unknown>;
|
|
|
}>();
|
|
}>();
|
|
|
|
|
|
|
|
- enum FrequencyEnum {
|
|
|
|
|
- second = 1,
|
|
|
|
|
- miniute = 60,
|
|
|
|
|
- hour = 3600,
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- watch(
|
|
|
|
|
- () => props.activeAlgoId,
|
|
|
|
|
- () => {
|
|
|
|
|
- if (props.activeAlgoId) {
|
|
|
|
|
- currentAlgoId.value = props.activeAlgoId;
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- immediate: true,
|
|
|
|
|
- },
|
|
|
|
|
- );
|
|
|
|
|
-
|
|
|
|
|
- const frequencyOptions = [
|
|
|
|
|
- { label: '秒', value: FrequencyEnum.second },
|
|
|
|
|
- { label: '分钟', value: FrequencyEnum.miniute },
|
|
|
|
|
- { label: '小时', value: FrequencyEnum.hour },
|
|
|
|
|
- ];
|
|
|
|
|
- const createDefaultTime = () => {
|
|
|
|
|
- return { id: uid(), value: [new Date(), new Date()] as [Date, Date] };
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- const isAlgoAdded = (algoId: number) => {
|
|
|
|
|
- return cameraAlogList.value?.some((x) => x.id === algoId);
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
const timeRangeArr = ref([createDefaultTime()]);
|
|
const timeRangeArr = ref([createDefaultTime()]);
|
|
|
|
|
|
|
|
const detectionUnit = ref(FrequencyEnum.miniute);
|
|
const detectionUnit = ref(FrequencyEnum.miniute);
|
|
|
|
|
|
|
|
- const currentAlgoId = ref<number>(1);
|
|
|
|
|
-
|
|
|
|
|
/** 电子围栏开关 */
|
|
/** 电子围栏开关 */
|
|
|
const electronicFence = ref(true);
|
|
const electronicFence = ref(true);
|
|
|
|
|
|
|
@@ -154,6 +119,19 @@
|
|
|
|
|
|
|
|
const enableCard = ref(true);
|
|
const enableCard = ref(true);
|
|
|
|
|
|
|
|
|
|
+ watch(
|
|
|
|
|
+ () => selectedAlgoDetail.value,
|
|
|
|
|
+ (detail) => {
|
|
|
|
|
+ console.log('detail change', detail);
|
|
|
|
|
+ const detectionJSON = getDetectionJSON(detail?.detectionFrequency);
|
|
|
|
|
+ enableCard.value = Boolean(detail?.status);
|
|
|
|
|
+ electronicFence.value = Boolean(detail?.electronicFence);
|
|
|
|
|
+ detectionNum.value = detectionJSON.detectionNum;
|
|
|
|
|
+ detectionUnit.value = detectionJSON.detectionUnit;
|
|
|
|
|
+ },
|
|
|
|
|
+ { deep: true, immediate: true },
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
const handleAddTimeRange = () => {
|
|
const handleAddTimeRange = () => {
|
|
|
timeRangeArr.value.push(createDefaultTime());
|
|
timeRangeArr.value.push(createDefaultTime());
|
|
|
};
|
|
};
|
|
@@ -166,16 +144,19 @@
|
|
|
timeRangeArr.value = timeRangeArr.value.filter((x) => x.id !== id);
|
|
timeRangeArr.value = timeRangeArr.value.filter((x) => x.id !== id);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- const getTimeStr = (d: Date) => {
|
|
|
|
|
- return d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
|
|
|
|
|
|
|
+ const getTimeStr = (d: Dayjs) => {
|
|
|
|
|
+ return d.format('HH:mm:ss');
|
|
|
};
|
|
};
|
|
|
- const getTimeStrs = (d: [Date, Date]) => {
|
|
|
|
|
|
|
+ const getTimeStrs = (d: [Dayjs, Dayjs]) => {
|
|
|
return getTimeStr(d[0]) + '-' + getTimeStr(d[1]);
|
|
return getTimeStr(d[0]) + '-' + getTimeStr(d[1]);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const handleSave = () => {
|
|
const handleSave = () => {
|
|
|
|
|
+ const detail = selectedAlgoDetail.value;
|
|
|
|
|
+ if (!detail) return;
|
|
|
const param = {
|
|
const param = {
|
|
|
- algoId: currentAlgoId.value,
|
|
|
|
|
|
|
+ id: detail.id,
|
|
|
|
|
+ algoId: detail.algoId,
|
|
|
detectionFrequency: detectionNum.value * detectionUnit.value,
|
|
detectionFrequency: detectionNum.value * detectionUnit.value,
|
|
|
detectionTime: timeRangeArr.value
|
|
detectionTime: timeRangeArr.value
|
|
|
.map((x) => {
|
|
.map((x) => {
|
|
@@ -188,6 +169,11 @@
|
|
|
emits('onSubmit', param);
|
|
emits('onSubmit', param);
|
|
|
console.log('param', param);
|
|
console.log('param', param);
|
|
|
};
|
|
};
|
|
|
|
|
+
|
|
|
|
|
+ const handleRemoveAlgo = () => {
|
|
|
|
|
+ if (!selectedAlgoId.value) return;
|
|
|
|
|
+ emits('onRemove', selectedAlgoId.value);
|
|
|
|
|
+ };
|
|
|
</script>
|
|
</script>
|
|
|
<style scoped>
|
|
<style scoped>
|
|
|
.algoCardWrapper {
|
|
.algoCardWrapper {
|
|
@@ -208,4 +194,13 @@
|
|
|
.presetList {
|
|
.presetList {
|
|
|
font-size: 12px;
|
|
font-size: 12px;
|
|
|
}
|
|
}
|
|
|
|
|
+ .removeIcon {
|
|
|
|
|
+ margin-left: 10px;
|
|
|
|
|
+ color: #8c8c8c;
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .addTimeIcon {
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ }
|
|
|
</style>
|
|
</style>
|