Skip to content

Commit 229594b

Browse files
committed
【代码重构】IoT:重构插件配置管理,替换 PluginInfo 为 PluginConfig
1 parent 5d32cc3 commit 229594b

File tree

6 files changed

+116
-122
lines changed

6 files changed

+116
-122
lines changed

src/api/iot/plugin/index.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import request from '@/config/axios'
2+
3+
// IoT 插件配置 VO
4+
export interface PluginConfigVO {
5+
id: number // 主键ID
6+
pluginKey: string // 插件标识
7+
name: string // 插件名称
8+
description: string // 描述
9+
deployType: number // 部署方式
10+
fileName: string // 插件包文件名
11+
version: string // 插件版本
12+
type: number // 插件类型
13+
protocol: string // 设备插件协议类型
14+
status: number // 状态
15+
configSchema: string // 插件配置项描述信息
16+
config: string // 插件配置信息
17+
script: string // 插件脚本
18+
}
19+
20+
// IoT 插件配置 API
21+
export const PluginConfigApi = {
22+
// 查询IoT 插件配置分页
23+
getPluginConfigPage: async (params: any) => {
24+
return await request.get({ url: `/iot/plugin-config/page`, params })
25+
},
26+
27+
// 查询IoT 插件配置详情
28+
getPluginConfig: async (id: number) => {
29+
return await request.get({ url: `/iot/plugin-config/get?id=` + id })
30+
},
31+
32+
// 新增IoT 插件配置
33+
createPluginConfig: async (data: PluginConfigVO) => {
34+
return await request.post({ url: `/iot/plugin-config/create`, data })
35+
},
36+
37+
// 修改IoT 插件配置
38+
updatePluginConfig: async (data: PluginConfigVO) => {
39+
return await request.put({ url: `/iot/plugin-config/update`, data })
40+
},
41+
42+
// 删除IoT 插件配置
43+
deletePluginConfig: async (id: number) => {
44+
return await request.delete({ url: `/iot/plugin-config/delete?id=` + id })
45+
},
46+
47+
// 修改IoT 插件状态
48+
updatePluginStatus: async (data: any) => {
49+
return await request.put({ url: `/iot/plugin-config/update-status`, data })
50+
}
51+
}

src/api/iot/plugininfo/index.ts

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/views/iot/plugin/PluginInfoForm.vue renamed to src/views/iot/plugin/PluginConfigForm.vue

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
</template>
3030
<script setup lang="ts">
3131
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
32-
import { PluginInfoApi, PluginInfoVO } from '@/api/iot/plugininfo'
32+
import { PluginConfigApi, PluginConfigVO } from '@/api/iot/plugin'
3333
34-
/** IoT 插件信息 表单 */
35-
defineOptions({ name: 'PluginInfoForm' })
34+
/** IoT 插件配置 表单 */
35+
defineOptions({ name: 'PluginConfigForm' })
3636
3737
const { t } = useI18n() // 国际化
3838
const message = useMessage() // 消息弹窗
@@ -62,7 +62,7 @@ const open = async (type: string, id?: number) => {
6262
if (id) {
6363
formLoading.value = true
6464
try {
65-
formData.value = await PluginInfoApi.getPluginInfo(id)
65+
formData.value = await PluginConfigApi.getPluginConfig(id)
6666
} finally {
6767
formLoading.value = false
6868
}
@@ -78,12 +78,12 @@ const submitForm = async () => {
7878
// 提交请求
7979
formLoading.value = true
8080
try {
81-
const data = formData.value as unknown as PluginInfoVO
81+
const data = formData.value as unknown as PluginConfigVO
8282
if (formType.value === 'create') {
83-
await PluginInfoApi.createPluginInfo(data)
83+
await PluginConfigApi.createPluginConfig(data)
8484
message.success(t('common.createSuccess'))
8585
} else {
86-
await PluginInfoApi.updatePluginInfo(data)
86+
await PluginConfigApi.updatePluginConfig(data)
8787
message.success(t('common.updateSuccess'))
8888
}
8989
dialogVisible.value = false
@@ -103,4 +103,4 @@ const resetForm = () => {
103103
}
104104
formRef.value?.resetFields()
105105
}
106-
</script>
106+
</script>

src/views/iot/plugin/detail/PluginImportForm.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
3636
const formLoading = ref(false) // 表单的加载中
3737
const uploadRef = ref()
3838
const importUrl =
39-
import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/iot/plugin-info/upload-file'
39+
import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/iot/plugin-config/upload-file'
4040
const uploadHeaders = ref() // 上传 Header 头
4141
const fileList = ref([]) // 文件列表
4242

src/views/iot/plugin/detail/index.vue

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,25 @@
1212
<ContentWrap class="mt-10px">
1313
<el-descriptions :column="2" direction="horizontal">
1414
<el-descriptions-item label="插件名称">
15-
{{ pluginInfo.name }}
15+
{{ pluginConfig.name }}
1616
</el-descriptions-item>
1717
<el-descriptions-item label="插件标识">
18-
{{ pluginInfo.pluginKey }}
18+
{{ pluginConfig.pluginKey }}
1919
</el-descriptions-item>
2020
<el-descriptions-item label="版本号">
21-
{{ pluginInfo.version }}
21+
{{ pluginConfig.version }}
2222
</el-descriptions-item>
2323
<el-descriptions-item label="状态">
2424
<el-switch
25-
v-model="pluginInfo.status"
25+
v-model="pluginConfig.status"
2626
:active-value="1"
2727
:inactive-value="0"
28+
:disabled="pluginConfig.id <= 0"
2829
@change="handleStatusChange"
2930
/>
3031
</el-descriptions-item>
3132
<el-descriptions-item label="插件描述">
32-
{{ pluginInfo.description }}
33+
{{ pluginConfig.description }}
3334
</el-descriptions-item>
3435
</el-descriptions>
3536
</ContentWrap>
@@ -45,23 +46,22 @@
4546
<!-- TODO @haohao:插件实例的前端展示:底部要不要加个分页,展示运行中的实力?默认勾选,只展示 state 为在线的 -->
4647

4748
<!-- 插件导入对话框 -->
48-
<!-- TODO @haohao:Number 尽量不用。因为有用户会使用 snowflake、或者 string 的时候,会有问题 -->
4949
<PluginImportForm
5050
ref="importFormRef"
51-
:id="Number(pluginInfo.id)"
52-
@success="getPluginInfo(Number(pluginInfo.id))"
51+
:id="pluginConfig.id"
52+
@success="getPluginConfig(pluginConfig.id)"
5353
/>
5454
</template>
5555

5656
<script lang="ts" setup>
57-
import { PluginInfoApi, PluginInfoVO } from '@/api/iot/plugininfo'
57+
import { PluginConfigApi, PluginConfigVO } from '@/api/iot/plugin'
5858
import { useRoute } from 'vue-router'
5959
import { onMounted, ref } from 'vue'
6060
import PluginImportForm from './PluginImportForm.vue'
6161
6262
const message = useMessage()
6363
const route = useRoute()
64-
const pluginInfo = ref<PluginInfoVO>({
64+
const pluginConfig = ref<PluginConfigVO>({
6565
id: 0,
6666
pluginKey: '',
6767
name: '',
@@ -76,41 +76,30 @@ const pluginInfo = ref<PluginInfoVO>({
7676
config: '',
7777
script: ''
7878
})
79-
// TODO @haohao:这里可以改成 pluginInfo.id > 0 去判断,然后 handleStatusChange disable 按钮
80-
const isInitialLoad = ref(true) // 初始化标志位
81-
82-
onMounted(() => {
83-
const id = Number(route.params.id)
84-
if (id) {
85-
getPluginInfo(id).then(() => {
86-
isInitialLoad.value = false // 数据加载完成后,设置标志位为 false
87-
})
88-
}
89-
})
9079
9180
/** 获取插件详情 */
92-
const getPluginInfo = async (id: number) => {
93-
pluginInfo.value = await PluginInfoApi.getPluginInfo(id)
81+
const getPluginConfig = async (id: number) => {
82+
pluginConfig.value = await PluginConfigApi.getPluginConfig(id)
9483
}
9584
9685
/** 处理状态变更 */
9786
const handleStatusChange = async (status: number) => {
98-
if (isInitialLoad.value) {
87+
if (pluginConfig.value.id <= 0) {
9988
return
10089
}
10190
try {
10291
// 修改状态的二次确认
10392
const text = status === 1 ? '启用' : '停用'
10493
await message.confirm('确认要"' + text + '"插件吗?')
105-
await PluginInfoApi.updatePluginStatus({
106-
id: pluginInfo.value.id,
94+
await PluginConfigApi.updatePluginStatus({
95+
id: pluginConfig.value.id,
10796
status
10897
})
10998
message.success('更新状态成功')
11099
// 获取详情
111-
await getPluginInfo(pluginInfo.value.id)
100+
await getPluginConfig(pluginConfig.value.id)
112101
} catch (error) {
113-
pluginInfo.value.status = status === 1 ? 0 : 1
102+
pluginConfig.value.status = status === 1 ? 0 : 1
114103
message.error('更新状态失败')
115104
}
116105
}
@@ -120,4 +109,12 @@ const importFormRef = ref()
120109
const handleImport = () => {
121110
importFormRef.value.open()
122111
}
112+
113+
/** 初始化插件详情 */
114+
onMounted(() => {
115+
const id = Number(route.params.id)
116+
if (id) {
117+
getPluginConfig(id)
118+
}
119+
})
123120
</script>

0 commit comments

Comments
 (0)