From 59b6bafdf03464ad5d89a74623ec8941dec415c7 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 01 八月 2024 12:11:31 +0800
Subject: [PATCH] 2024.8.1

---
 src/views/fysp/support/components/ItemConstruction.vue |    0 
 src/views/fysp/support/components/ItemScene.vue        |   34 ++++
 src/views/fysp/support/NewDevice.vue                   |  100 ++++++++++++++
 src/components.d.ts                                    |    1 
 src/views/fysp/support/JingAnSupport.vue               |   77 +---------
 src/api/additional-jingan/index.js                     |    3 
 src/views/fysp/support/NewConstruction.vue             |   67 +++++++++
 src/views/fysp/support/components/ItemDevice.vue       |   63 +++++++++
 src/components/search-option/base/FYOptionText.vue     |    6 
 src/api/index.js                                       |    2 
 src/api/fysp/deviceApi.js                              |   13 +
 src/App.vue                                            |    2 
 src/views/fysp/support/components/DeviceMatch.vue      |   51 +++++++
 13 files changed, 348 insertions(+), 71 deletions(-)

diff --git a/src/App.vue b/src/App.vue
index e2f76b6..49d586d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -82,7 +82,7 @@
 }
 
 .el-main__content {
-  padding: var(--el-main-padding);
+  padding: var(--el-main-padding) calc(var(--el-main-padding) / 2);
   max-height: calc(100vh - 60px - var(--el-main-padding) * 2);
   /* background-color: aqua; */
   /* overflow: auto; */
diff --git a/src/api/additional-jingan/index.js b/src/api/additional-jingan/index.js
index 3922104..e1c9084 100644
--- a/src/api/additional-jingan/index.js
+++ b/src/api/additional-jingan/index.js
@@ -2,7 +2,8 @@
 import md5 from 'md5';
 import { ElMessage } from 'element-plus';
 
-let IP = 'http://101.230.224.80:8082/';
+// let IP = 'http://101.230.224.80:8082/';
+let IP = 'http://47.100.191.150:8080/jingan/';
 
 const $jingan = axios.create({
   baseURL: IP,
diff --git a/src/api/fysp/deviceApi.js b/src/api/fysp/deviceApi.js
new file mode 100644
index 0000000..f46d505
--- /dev/null
+++ b/src/api/fysp/deviceApi.js
@@ -0,0 +1,13 @@
+import { $fysp } from '../index';
+
+export default {
+  fetchDevice(sceneId) {
+    return $fysp
+      .get(`device`, {
+        params: {
+          sceneId: sceneId
+        }
+      })
+      .then((res) => res.data);
+  }
+};
diff --git a/src/api/index.js b/src/api/index.js
index 7dc7214..f8dbaf2 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -1,7 +1,7 @@
 import axios from 'axios';
 import { ElMessage } from 'element-plus';
 
-const debug = false;
+const debug = true;
 
 let ip1 = 'http://47.100.191.150:9005/';
 let ip1_file = 'http://47.100.191.150:9005/';
diff --git a/src/components.d.ts b/src/components.d.ts
index 8ac9bbb..c8c66a3 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -52,6 +52,7 @@
     ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
+    ElScorllbar: typeof import('element-plus/es')['ElScorllbar']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSpace: typeof import('element-plus/es')['ElSpace']
diff --git a/src/components/search-option/base/FYOptionText.vue b/src/components/search-option/base/FYOptionText.vue
index 980feb5..170e966 100644
--- a/src/components/search-option/base/FYOptionText.vue
+++ b/src/components/search-option/base/FYOptionText.vue
@@ -5,7 +5,7 @@
       :model-value="value"
       :placeholder="placeholder"
       @input="handleInput"
-      style="width: 150px"
+      :style="'width:' + width + ';'"
     />
   </el-form-item>
 </template>
@@ -13,6 +13,10 @@
 <script>
 export default {
   props: {
+    width:{
+      type: String,
+      default: '150px'
+    },
     label: {
       type: String,
       default: '鏌ヨ椤�'
diff --git a/src/views/fysp/support/JingAnSupport.vue b/src/views/fysp/support/JingAnSupport.vue
index ad2c9a4..1a0cc17 100644
--- a/src/views/fysp/support/JingAnSupport.vue
+++ b/src/views/fysp/support/JingAnSupport.vue
@@ -1,72 +1,15 @@
 <template>
-  <FYOptionTime :initValue="true" type="date" v-model:value="updateTime"></FYOptionTime>
-  <el-button type="primary" @click="fetchNewDevice">鏌ヨ鏂拌澶�</el-button>
-  <el-button type="primary" @click="fetchNewConstruction">鏌ヨ鏂板伐鍦�</el-button>
-  <el-row>
-    <el-col :span="12">
-      <el-text>鏂拌澶�</el-text>
-      <div v-for="item in deviceList" :key="item.id">
-        <div>{{ item.id }}</div>
-        <div>{{ item.code }}</div>
-        <div>{{ item.name }}</div>
-        <div>{{ item.address }}</div>
-        <div>{{ item.status }}</div>
-        <span>{{ item.createTime }} |</span>
-        <span>{{ item.updateTime }} |</span>
-        <span>{{ item.remark }} |</span>
-        <span>{{ item.lon }} |</span>
-        <span>{{ item.lat }}</span>
-      </div>
-    </el-col>
-    <el-col :span="12">
-      <el-text>鏂板伐鍦�</el-text>
-      <div v-for="item in constructionList" :key="item.id">
-        <div>{{ item.id }}</div>
-        <div>{{ item.code }}</div>
-        <div>{{ item.name }}</div>
-        <div>{{ item.address }}</div>
-        <div>{{ item.street }}</div>
-        <div>{{ item.status }}</div>
-        <span>{{ item.lon }} |</span>
-        <span>{{ item.lat }}</span>
-        <span>{{ item.score }} |</span>
-        <span>{{ item.grade }}</span>
-        <span>{{ item.subTaskId }} |</span>
-        <span>{{ item.createTime }} |</span>
-      </div>
-    </el-col>
-  </el-row>
+  <el-tabs type="border-card">
+    <el-tab-pane label="鏂拌澶�">
+      <NewDevice></NewDevice>
+    </el-tab-pane>
+    <el-tab-pane label="鏂板伐鍦�">
+      <NewConstruction></NewConstruction>
+    </el-tab-pane>
+  </el-tabs>
 </template>
 <script setup>
-import { ref } from 'vue';
-import dayjs from 'dayjs';
-import constructionApi from '@/api/additional-jingan/constructionApi';
-import { useFetchData } from '@/composables/fetchData';
-
-const { loading, fetchData } = useFetchData();
-
-const updateTime = ref();
-const deviceList = ref([]);
-const constructionList = ref([]);
-
-// 鏌ヨ闇�纭鐨勮澶囨竻鍗�
-function fetchNewDevice() {
-  const param = dayjs(updateTime.value).format('YYYY-MM-DD HH:mm:ss');
-  fetchData(() => {
-    return constructionApi.queryDevice(param).then((res) => {
-      deviceList.value = res.data;
-    });
-  });
-}
-
-// 鏌ヨ鏂板缓宸ュ湴
-function fetchNewConstruction() {
-  const param = dayjs(updateTime.value).format('YYYY-MM-DD HH:mm:ss');
-  fetchData(() => {
-    return constructionApi.queryGdNew(param).then((res) => {
-      constructionList.value = res.data;
-    });
-  });
-}
+import NewDevice from './NewDevice.vue';
+import NewConstruction from './NewConstruction.vue';
 </script>
 <style scoped></style>
diff --git a/src/views/fysp/support/NewConstruction.vue b/src/views/fysp/support/NewConstruction.vue
new file mode 100644
index 0000000..9d0c424
--- /dev/null
+++ b/src/views/fysp/support/NewConstruction.vue
@@ -0,0 +1,67 @@
+<template>
+  <el-form :inline="true">
+    <FYOptionTime :initValue="true" type="date" v-model:value="updateTime"></FYOptionTime>
+    <el-form-item>
+      <el-button type="primary" :loading="loading" @click="fetchNewConstruction"
+        >鏌ヨ鏂板伐鍦�</el-button
+      >
+    </el-form-item>
+  </el-form>
+  <el-row>
+    <el-col :span="12">
+      <el-text>鏂板伐鍦�</el-text>
+      <div v-for="item in constructionList" :key="item.id">
+        <div>{{ item.id }}</div>
+        <div>{{ item.code }}</div>
+        <div>{{ item.name }}</div>
+        <div>{{ item.address }}</div>
+        <div>{{ item.status }}</div>
+        <span>{{ item.createTime }} |</span>
+        <span>{{ item.updateTime }} |</span>
+        <span>{{ item.remark }} |</span>
+        <span>{{ item.lon }} |</span>
+        <span>{{ item.lat }}</span>
+      </div>
+    </el-col>
+    <el-col :span="12">
+      <el-text>鐩戠宸ュ湴</el-text>
+      <div v-for="item in sceneList" :key="item.id">
+        <div>{{ item.id }}</div>
+        <div>{{ item.code }}</div>
+        <div>{{ item.name }}</div>
+        <div>{{ item.address }}</div>
+        <div>{{ item.street }}</div>
+        <div>{{ item.status }}</div>
+        <span>{{ item.lon }} |</span>
+        <span>{{ item.lat }}</span>
+        <span>{{ item.score }} |</span>
+        <span>{{ item.grade }}</span>
+        <span>{{ item.subTaskId }} |</span>
+        <span>{{ item.createTime }} |</span>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+<script setup>
+import { ref } from 'vue';
+import dayjs from 'dayjs';
+import constructionApi from '@/api/additional-jingan/constructionApi';
+import { useFetchData } from '@/composables/fetchData';
+
+const { loading, fetchData } = useFetchData();
+
+const updateTime = ref();
+const constructionList = ref([]);
+const sceneList = ref([])
+
+// 鏌ヨ鏂板缓宸ュ湴
+function fetchNewConstruction() {
+  const param = dayjs(updateTime.value).format('YYYY-MM-DD HH:mm:ss');
+  fetchData(() => {
+    return constructionApi.queryGdNew(param).then((res) => {
+      constructionList.value = res.data;
+    });
+  });
+}
+</script>
+<style scoped></style>
diff --git a/src/views/fysp/support/NewDevice.vue b/src/views/fysp/support/NewDevice.vue
new file mode 100644
index 0000000..e84c783
--- /dev/null
+++ b/src/views/fysp/support/NewDevice.vue
@@ -0,0 +1,100 @@
+<template>
+  <el-row>
+    <el-col :span="8">
+      <el-text>鏂拌澶�</el-text>
+      <el-form :inline="true">
+        <FYOptionTime :initValue="true" type="date" v-model:value="updateTime"></FYOptionTime>
+        <el-form-item>
+          <el-button type="primary" :loading="loading" @click="fetchNewDevice"
+            >鏌ヨ鏂拌澶�</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <el-scrollbar height="76vh">
+        <el-space direction="vertical" alignment="normal">
+          <ItemDevice v-for="item in deviceList" :key="item.id" :item="item" @add="addDevice" />
+        </el-space>
+      </el-scrollbar>
+    </el-col>
+    <el-col :span="8">
+      <DeviceMatch :device="selectedDevice" :scene="selectedScene"></DeviceMatch>
+    </el-col>
+    <el-col :span="8">
+      <el-text>鐩戠宸ュ湴</el-text>
+      <el-form :inline="false">
+        <FYOptionText
+          label="鍦烘櫙鍚嶇О"
+          placeholder="杈撳叆鍚嶇О鍏抽敭瀛�"
+          width="400px"
+          v-model:value="searchText"
+        ></FYOptionText>
+        <el-form-item>
+          <el-button type="primary" :loading="loading2" @click="fetchScene">鏌ヨ鐩戠鍦烘櫙</el-button>
+        </el-form-item>
+      </el-form>
+      <el-scrollbar height="70vh">
+        <!-- <el-space direction="vertical" alignment="normal"> -->
+        <ItemScene v-for="item in sceneList" :key="item.sguid" :item="item" @add="addScene" />
+        <!-- </el-space> -->
+      </el-scrollbar>
+    </el-col>
+  </el-row>
+</template>
+<script setup>
+import { ref, computed } from 'vue';
+import dayjs from 'dayjs';
+import constructionApi from '@/api/additional-jingan/constructionApi';
+import sceneApi from '@/api/fysp/sceneApi';
+import { useFetchData } from '@/composables/fetchData';
+
+import ItemDevice from './components/ItemDevice.vue';
+import ItemScene from './components/ItemScene.vue';
+import DeviceMatch from './components/DeviceMatch.vue';
+
+const { loading, fetchData } = useFetchData();
+
+const updateTime = ref();
+const deviceList = ref([]);
+const selectedDevice = ref(null);
+
+const searchText = ref();
+const sceneList = ref([]);
+const selectedScene = ref(null);
+
+// 鏌ヨ闇�纭鐨勮澶囨竻鍗�
+function fetchNewDevice() {
+  const param = dayjs(updateTime.value).format('YYYY-MM-DD HH:mm:ss');
+  fetchData(() => {
+    return constructionApi.queryDevice(param).then((res) => {
+      deviceList.value = res.data;
+    });
+  });
+}
+
+function addDevice(item) {
+  selectedDevice.value = item;
+  searchText.value = item.name;
+  fetchScene();
+}
+
+const { loading: loading2, fetchData: fetchData2 } = useFetchData();
+// 鏌ヨ鐩戠鍦烘櫙
+function fetchScene() {
+  const area = {};
+  area.sceneName = searchText.value;
+  fetchData2((page, pageSize) => {
+    return sceneApi.searchScene(area, page, pageSize).then((res) => {
+      sceneList.value = res.data;
+    });
+  });
+}
+
+function addScene(item) {
+  selectedScene.value = item;
+}
+</script>
+<style scoped>
+.device-scene-wrap {
+  border: 1px solid black;
+}
+</style>
diff --git a/src/views/fysp/support/components/DeviceMatch.vue b/src/views/fysp/support/components/DeviceMatch.vue
new file mode 100644
index 0000000..338bbe7
--- /dev/null
+++ b/src/views/fysp/support/components/DeviceMatch.vue
@@ -0,0 +1,51 @@
+<template>
+  <el-card shadow="hover">
+    <div>鏂拌澶�</div>
+    <div v-if="device">{{ device.name }}</div>
+    <div v-else>鏈�夋嫨</div>
+    <el-divider></el-divider>
+    <div>鐩戠鍦烘櫙</div>
+    <div v-if="scene">{{ scene.name }}</div>
+    <div v-else>鏈�夋嫨</div>
+    <template #footer>
+      <el-row justify="space-between">
+        <div>
+          <!-- <el-button type="primary" plain :disabled="!enabled">鍚嶇О鍚屾</el-button> -->
+          <el-button type="primary" plain :disabled="!enabled">褰曞叆璁惧淇℃伅</el-button>
+        </div>
+        <el-button type="danger" :disabled="!enabled">涓婁紶鍖归厤淇℃伅</el-button>
+      </el-row>
+      <el-row></el-row>
+    </template>
+  </el-card>
+</template>
+<script setup>
+import { ref, computed, watch } from 'vue';
+import deviceApi from '@/api/fysp/deviceApi';
+
+const props = defineProps({
+  device: Object,
+  scene: Object
+});
+
+const deviceList = ref([]);
+
+const enabled = computed(() => {
+  return props.device && props.scene;
+});
+
+watch(
+  () => props.scene,
+  (nV, oV) => {
+    if (nV != oV) {
+      fetchDeviceInfo();
+    }
+  }
+);
+
+function fetchDeviceInfo() {
+  deviceApi.fetchDevice(props.scene.guid).then((res) => {
+    deviceList.value = res.data;
+  });
+}
+</script>
diff --git a/src/views/fysp/support/components/ItemConstruction.vue b/src/views/fysp/support/components/ItemConstruction.vue
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/views/fysp/support/components/ItemConstruction.vue
diff --git a/src/views/fysp/support/components/ItemDevice.vue b/src/views/fysp/support/components/ItemDevice.vue
new file mode 100644
index 0000000..e43440b
--- /dev/null
+++ b/src/views/fysp/support/components/ItemDevice.vue
@@ -0,0 +1,63 @@
+<template>
+  <el-card shadow="hover">
+    <!-- <template #header>
+      <div class="card-header">
+        <span>Card name</span>
+      </div>
+    </template> -->
+    <!-- <el-descriptions :column="3" size="default" border>
+      <el-descriptions-item label="搴忓彿">{{ item.id }}</el-descriptions-item>
+      <el-descriptions-item label="MN缂栧彿">{{ item.code }}</el-descriptions-item>
+      <el-descriptions-item label="鍚嶇О">{{ item.name }}</el-descriptions-item>
+      <el-descriptions-item label="鍦板潃">{{ item.address }}</el-descriptions-item>
+      <el-descriptions-item label="鐘舵��">{{ item.status }}</el-descriptions-item>
+      <el-descriptions-item label="鍒涘缓鏃堕棿">{{ item.createTime }}</el-descriptions-item>
+      <el-descriptions-item label="鏇存柊鏃堕棿">{{ item.updateTime }}</el-descriptions-item>
+      <el-descriptions-item label="澶囨敞">{{ item.remark }}</el-descriptions-item>
+      <el-descriptions-item label="缁忕含搴�">{{ item.lon }}, {{ item.lat }}</el-descriptions-item>
+    </el-descriptions> -->
+    <el-row justify="space-between">
+      <div>
+        <el-text>{{ item.id }}銆�</el-text>
+        <el-text>{{ item.name }}</el-text>
+      </div>
+      <div>
+        <el-text>MN缂栧彿锛歿{ item.code }}</el-text>
+      </div>
+    </el-row>
+    <div>
+      <el-text>鍦板潃锛�</el-text>
+      <el-text>{{ item.address }}</el-text>
+    </div>
+    <el-row justify="space-between">
+      <div>
+        <el-text size="small" type="info">缁忕含搴︼細{{ item.lon }}, {{ item.lat }}</el-text>
+      </div>
+      <el-space>
+        <div>
+          <el-text size="small" type="info">鍒涘缓鏃堕棿锛歿{ item.createTime }}</el-text>
+        </div>
+        <div>
+          <el-text size="small" type="info">鏇存柊鏃堕棿锛歿{ item.updateTime }}</el-text>
+        </div>
+      </el-space>
+    </el-row>
+    <el-row justify="end">
+      <el-button size="small" type="success" @click="add">娣诲姞</el-button>
+    </el-row>
+  </el-card>
+</template>
+<script setup>
+const props = defineProps({
+  item: {
+    type: Object,
+    default: () => {}
+  }
+});
+
+const emit = defineEmits(['add']);
+
+function add() {
+  emit('add', props.item);
+}
+</script>
diff --git a/src/views/fysp/support/components/ItemScene.vue b/src/views/fysp/support/components/ItemScene.vue
new file mode 100644
index 0000000..bdfeb45
--- /dev/null
+++ b/src/views/fysp/support/components/ItemScene.vue
@@ -0,0 +1,34 @@
+<template>
+  <el-card shadow="hover">
+    <el-row justify="space-between">
+      <div>
+        <el-text>{{ item.index }}銆�</el-text>
+        <el-text>{{ item.name }}</el-text>
+      </div>
+      <div>
+        <el-text>绫诲瀷锛歿{ item.type }}</el-text>
+      </div>
+    </el-row>
+    <div>
+      <el-text>鍖哄幙锛�</el-text>
+      <el-text>{{ item.districtname }}</el-text>
+    </div>
+    <el-row justify="start">
+      <el-button size="small" type="success" @click="add">娣诲姞</el-button>
+    </el-row>
+  </el-card>
+</template>
+<script setup>
+const props = defineProps({
+  item: {
+    type: Object,
+    default: () => {}
+  }
+});
+
+const emit = defineEmits(['add']);
+
+function add() {
+  emit('add', props.item);
+}
+</script>

--
Gitblit v1.9.3