| applications/drone-command/src/views/areaManage/areaStatistics/index.vue | patch | view | raw | blame | history | |
| applications/drone-command/src/views/areaManage/defenseZone/index.vue | patch | view | raw | blame | history | |
| applications/drone-command/src/views/areaManage/partition/index.vue | patch | view | raw | blame | history | |
| applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/areaManage/precinctInfo/index.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/areaManage/precinctInfo/precinctInfo.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/areaManage/precinctInfo/precinctInfoApi.js | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/areaManage/sceneConfig/index.vue | patch | view | raw | blame | history |
applications/drone-command/src/views/areaManage/areaStatistics/index.vue
applications/drone-command/src/views/areaManage/defenseZone/index.vue
applications/drone-command/src/views/areaManage/partition/index.vue
applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
New file @@ -0,0 +1,134 @@ <template> <el-dialog v-model="visible" :title="titleEnum[dialogMode]" @closed="handleClosed" destroy-on-close> <div v-if="readonly"> <el-row> <el-col :span="12"> <div>派出所名称: {{ formData.stationName }}</div> </el-col> <el-col :span="12"> <div>联系人: {{ formData.contactPerson }}</div> </el-col> <el-col :span="12"> <div>位置: {{ formData.address }}</div> </el-col> <el-col :span="12"> <div>联系方式: {{ formData.contactPhone }}</div> </el-col> </el-row> </div> <el-form v-else ref="formRef" :model="formData" :rules="rules" :disabled="readonly" label-width="100px"> <el-row> <el-col :span="12"> <el-form-item label="派出所名称" prop="stationName"> <el-input v-model="formData.stationName" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="联系人" prop="contactPerson"> <el-input v-model="formData.contactPerson" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="经度" prop="longitude"> <el-input-number v-model="formData.longitude" max="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="纬度" prop="latitude"> <el-input-number v-model="formData.latitude" max="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="位置" prop="address"> <el-input v-model="formData.address" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="联系方式" prop="contactPhone"> <el-input v-model="formData.contactPhone" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> </el-row> </el-form> <template #footer> <el-button @click="handleCancel">{{ readonly ? '关闭' : '取消' }}</el-button> <el-button v-if="!readonly" type="primary" :loading="submitting" :disabled="submitting" @click="handleSubmit"> 确定 </el-button> </template> </el-dialog> </template> <script setup> import { computed, ref } from 'vue' import { ElMessage } from 'element-plus' import { fwPoliceStationDetailApi, fwPoliceStationSubmitApi } from './precinctInfoApi' import { fieldRules } from '@ztzf/utils' const initForm = () => ({ address: '', // 位置 contactPerson: '', // 联系人 contactPhone: '', // 联系方式 stationName: '', // 派出所名称 longitude: 0, latitude: 0, }) const emit = defineEmits(['success']) const formRef = ref(null) // 表单实例 const formData = ref(initForm()) // 表单数据 const visible = ref(false) // 弹框显隐 const dialogMode = ref('add') // 弹框模式 const submitting = ref(false) // 提交中 const readonly = computed(() => dialogMode.value === 'view') const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' }) const rules = { address: fieldRules(true, 50), stationName: fieldRules(true, 50), contactPerson: fieldRules(true, 50), contactPhone: fieldRules(true, 0), } // 关闭弹框 function handleCancel() { visible.value = false } // 提交新增/编辑 async function handleSubmit() { const isValid = await formRef.value?.validate().catch(() => false) if (!isValid) return submitting.value = true try { await fwPoliceStationSubmitApi(formData.value) ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') visible.value = false emit('success') } finally { submitting.value = false } } // 加载详情 async function loadDetail() { if (!formData.value.id) return const res = await fwPoliceStationDetailApi({ id: formData.value.id }) formData.value = res?.data?.data ?? {} } // 关闭后重置 function handleClosed() { formData.value = initForm() } // 打开弹框 async function open({ mode, row } = {}) { dialogMode.value = mode || 'add' visible.value = true formData.value = dialogMode.value === 'add' ? initForm() : row dialogMode.value !== 'add' && (await loadDetail()) } defineExpose({ open }) </script> applications/drone-command/src/views/areaManage/precinctInfo/index.vue
New file @@ -0,0 +1,130 @@ <template> <basic-container> <el-form ref="queryParamsRef" :model="searchParams"> <el-row :gutter="16"> <el-col :span="4"> <el-form-item label="派出所名称" prop="stationName"> <el-input v-model="searchParams.stationName" placeholder="请输入" clearable @clear="handleSearch" /> </el-form-item> </el-col> <el-col :span="4"> <el-form-item> <el-button @click="resetForm">重置</el-button> <el-button type="primary" @click="handleSearch">查询</el-button> </el-form-item> </el-col> </el-row> </el-form> <div> <el-button type="primary" @click="handleAdd">新增</el-button> <el-button type="danger" :disabled="!selectedIds.length" @click="handleDelete()">删除</el-button> </div> <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column type="index" width="60" label="序号" /> <el-table-column prop="stationName" label="派出所名称" /> <el-table-column prop="address" label="位置" /> <el-table-column prop="longitude" label="经度" /> <el-table-column prop="latitude" label="纬度" /> <el-table-column prop="contactPerson" label="联系人" /> <el-table-column prop="contactPhone" label="联系方式" /> <el-table-column label="操作"> <template v-slot="{ row }"> <el-link @click="handleEdit(row)" type="warning">编辑</el-link> <el-link @click="handleDelete(row)" type="danger">删除</el-link> </template> </el-table-column> </el-table> <div> <el-pagination v-model:current-page="searchParams.current" v-model:page-size="searchParams.size" :total="total" @change="getList" /> </div> <FormDiaLog ref="dialogRef" @success="getList" /> </basic-container> </template> <script setup> import { onMounted, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { fwPoliceStationPageApi, fwPoliceStationRemoveApi } from './precinctInfoApi' import FormDiaLog from './FormDiaLog.vue' const initSearchParams = () => ({ stationName: '', // 名称 current: 1, // 当前页 size: 10, // 每页大小 }) const searchParams = ref(initSearchParams()) // 查询参数 const total = ref(0) // 总条数 const loading = ref(false) // 列表加载中 const list = ref([]) // 列表数据 const selectedIds = ref([]) // 勾选的ID列表 const queryParamsRef = ref(null) // 查询表单实例 const dialogRef = ref(null) // 弹框实例 // 获取列表 async function getList() { loading.value = true try { const res = await fwPoliceStationPageApi(searchParams.value) list.value = res?.data?.data?.records ?? [] total.value = res?.data?.data?.total ?? 0 } finally { loading.value = false } } // 查询 function handleSearch() { searchParams.value.current = 1 getList() } // 重置查询 function resetForm() { queryParamsRef.value?.resetFields() searchParams.value.current = 1 getList() } // 查看 function handleView(row) { dialogRef.value?.open({ mode: 'view', row: { ...row } }) } // 编辑 function handleEdit(row) { dialogRef.value?.open({ mode: 'edit', row: { ...row } }) } // 删除 async function handleDelete(row) { const tips = row ? '该条' : '选中的项' await ElMessageBox.confirm(`确认删除${tips}吗?`, '提示', { type: 'warning' }) const ids = row ? row.id : selectedIds.value.join(',') await fwPoliceStationRemoveApi({ ids }) ElMessage.success('删除成功') selectedIds.value = [] getList() } // 勾选值设置 function handleSelectionChange(rows) { selectedIds.value = rows.map(item => item.id) } // 新增 function handleAdd() { dialogRef.value?.open({ mode: 'add' }) } onMounted(() => { getList() }) </script> <style scoped lang="scss"></style> applications/drone-command/src/views/areaManage/precinctInfo/precinctInfo.vue
File was deleted applications/drone-command/src/views/areaManage/precinctInfo/precinctInfoApi.js
New file @@ -0,0 +1,37 @@ import request from '@/axios' // 查list export const fwPoliceStationPageApi = params => { return request({ url: `/drone-fw/area/fwPoliceStation/page`, method: 'get', params, }) } // 增加或更新 export const fwPoliceStationSubmitApi = data => { return request({ url: `/drone-fw/area/fwPoliceStation/submit`, method: 'post', data, }) } //删除 export const fwPoliceStationRemoveApi = params => { return request({ url: `/drone-fw/area/fwPoliceStation/remove`, method: 'post', params, }) } //详情 export const fwPoliceStationDetailApi = params => { return request({ url: `/drone-fw/area/fwPoliceStation/detail`, method: 'get', params, }) } applications/drone-command/src/views/areaManage/sceneConfig/index.vue