| applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/permissionManage/permissionDept/ShareDiaLog.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/permissionManage/permissionDept/fwDevicePerShareApi.js | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/permissionManage/permissionDept/index.vue | ●●●●● patch | view | raw | blame | history | |
| applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue | ●●●●● patch | view | raw | blame | history |
applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue
@@ -175,7 +175,7 @@ const emit = defineEmits(['success']) const formRef = ref(null) const formData = ref(initForm()) const visible = ref(false) const visible = defineModel() const dialogMode = ref('add') const submitting = ref(false) const isAddChild = ref(false) @@ -283,7 +283,6 @@ async function open({ mode, row, parent } = {}) { dialogMode.value = mode || 'add' visible.value = true isAddChild.value = mode === 'add' && !!parent?.id await getDeptTree().then(res => { if (deptTree) { applications/drone-command/src/views/permissionManage/permissionDept/ShareDiaLog.vue
New file @@ -0,0 +1,143 @@ <template> <el-dialog class="command-page-map-view-dialog" v-model="visible" :show-close="false" :close-on-click-modal="false"> <div class="dialog-container"> <div class="right-container" style="width: 100%"> <div class="header"> <span>设备共享</span> <el-icon class="close-btn" @click.stop="visible = false"><Close /></el-icon> </div> <div class="content"> <div class="command-table-container" v-loading="loading" element-loading-background="rgba(5, 5, 15, 0.6)"> <div class="command-table-content"> <el-table ref="tableRef" class="command-table" :data="deviceList" row-key="id" @selection-change="handleSelectionChange" > <el-table-column type="selection" width="55" :reserve-selection="true" /> <el-table-column type="index" show-overflow-tooltip width="64" label="序号" /> <el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" /> <el-table-column prop="deviceSn" show-overflow-tooltip label="设备SN" /> <el-table-column prop="deviceType" show-overflow-tooltip label="设备类型" /> <el-table-column prop="belongDeptName" show-overflow-tooltip label="所属部门" /> </el-table> </div> </div> </div> <div class="footer"> <el-button color="#2B2B4C" @click="handleCancel">取消</el-button> <el-button color="#284FE3" type="primary" :loading="submitting" :disabled="submitting" @click="handleSubmit"> 确定 </el-button> </div> </div> </div> </el-dialog> </template> <script setup> import { Close } from '@element-plus/icons-vue' import { ref, nextTick } from 'vue' import { ElMessage } from 'element-plus' import { nonDeptAreaDevicesApi, fwDevicePerShareSaveApi, fwDevicePerShareRemoveApi } from './fwDevicePerShareApi' const emit = defineEmits(['success']) const visible = defineModel() // 弹框显隐 const loading = ref(false) // 加载中 const submitting = ref(false) // 提交中 const deviceList = ref([]) // 设备列表 const tableRef = ref(null) // 表格实例 const selectedRows = ref([]) // 当前选中的行 const originalSharedIds = ref([]) // 原始已共享的设备ID集合 const currentDeptId = ref(null) // 当前操作的部门ID // 选中变化 function handleSelectionChange(rows) { selectedRows.value = rows } // 关闭弹框 function handleCancel() { visible.value = false } // 获取设备列表 async function getDeviceList() { loading.value = true try { const res = await nonDeptAreaDevicesApi({ loanToDeptId: currentDeptId.value }) deviceList.value = res?.data?.data ?? [] // 记录原始已共享的设备ID originalSharedIds.value = deviceList.value.filter(item => item.isShared).map(item => item.id) // 回显已共享的设备勾选状态 nextTick(() => { deviceList.value.forEach(item => { if (item.isShared) { tableRef.value?.toggleRowSelection(item, true) } }) }) } finally { loading.value = false } } // 提交 async function handleSubmit() { submitting.value = true try { const currentSelectedIds = selectedRows.value.map(item => item.id) // 计算需要新增的设备(当前选中但原来未共享) const toAddDevices = selectedRows.value.filter(item => !originalSharedIds.value.includes(item.id)) // 计算需要删除的设备(原来共享但当前未选中) const toRemoveIds = originalSharedIds.value.filter(id => !currentSelectedIds.includes(id)) const promises = [] // 调用新增接口 if (toAddDevices.length > 0) { const addData = toAddDevices.map(item => ({ deviceId: item.id, deviceSn: item.deviceSn, loanFromDeptId: item.belongDept, loanToDeptId: currentDeptId.value, })) promises.push(fwDevicePerShareSaveApi(addData)) } // 调用删除接口 if (toRemoveIds.length > 0) { promises.push(fwDevicePerShareRemoveApi({ ids: toRemoveIds.join(',') })) } if (promises.length > 0) { await Promise.all(promises) ElMessage.success('保存成功') } else { ElMessage.info('未做任何修改') } visible.value = false emit('success') } finally { submitting.value = false } } // 打开弹框 async function open({ row } = {}) { currentDeptId.value = row?.id selectedRows.value = [] await getDeviceList() } defineExpose({ open }) </script> <style scoped lang="scss"></style> applications/drone-command/src/views/permissionManage/permissionDept/fwDevicePerShareApi.js
New file @@ -0,0 +1,28 @@ import request from '@/axios' // 查询非本部门区域的设备 export const nonDeptAreaDevicesApi = params => { return request({ url: `/drone-fw/device/fwDevice/nonDeptAreaDevices`, method: 'get', params, }) } // 新增设备共享 export const fwDevicePerShareSaveApi = data => { return request({ url: `/drone-fw/device/fwDevicePerShare/save`, method: 'post', data, }) } // 删除设备共享 export const fwDevicePerShareRemoveApi = params => { return request({ url: `/drone-fw/device/fwDevicePerShare/remove`, method: 'post', params, }) } applications/drone-command/src/views/permissionManage/permissionDept/index.vue
@@ -62,13 +62,14 @@ <el-table-column prop="sort" show-overflow-tooltip width="80" label="排序" /> <el-table-column prop="bingId" show-overflow-tooltip width="100" label="组织id" /> <el-table-column prop="areaName" show-overflow-tooltip width="180" label="行政区划" /> <el-table-column label="操作" class-name="operation-btns" width="220"> <template v-slot="{ row }"> <el-link @click="handleView(row)">查看</el-link> <el-link @click="handleEdit(row)">编辑</el-link> <el-link @click="handleAddChild(row)">新增子项</el-link> <el-link type="danger" @click="handleDelete(row)">删除</el-link> <el-link type="danger" @click="handleShare(row)">共享</el-link> </template> </el-table-column> </el-table> @@ -86,18 +87,20 @@ </div> </div> <FormDiaLog ref="dialogRef" @success="getList" /> <FormDiaLog ref="dialogRef" @success="getList" v-model="visible" v-if="visible" /> <ShareDiaLog ref="shareDialogRef" @success="getList" v-model="shareVisible" v-if="shareVisible" /> </basic-container> </template> <script setup> import { Delete, Plus, RefreshRight, Search } from '@element-plus/icons-vue' import { onMounted, provide, ref } from 'vue' import { nextTick, onMounted, provide, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { getDictionary } from '@/api/system/dict' import { getChildLazyTree, getDeptTree, getLazyList, remove } from '@/api/system/dept' import { getDictLabel } from '@ztzf/utils' import FormDiaLog from './FormDiaLog.vue' import ShareDiaLog from './ShareDiaLog.vue' import { saveOperationLog } from '@ztzf/apis' import { useRoute } from 'vue-router' @@ -110,11 +113,14 @@ const searchParams = ref(initSearchParams()) const loading = ref(true) const visible = ref(false) const list = ref([]) const total = ref(0) const selectedIds = ref([]) const queryParamsRef = ref(null) const dialogRef = ref(null) const shareDialogRef = ref(null) const shareVisible = ref(false) const dictObj = ref({ org_category: [], org_nature: [], @@ -148,19 +154,38 @@ } function handleAdd() { dialogRef.value?.open({ mode: 'add' }) visible.value = true nextTick(() => { dialogRef.value?.open({ mode: 'add' }) }) } function handleAddChild(row) { dialogRef.value?.open({ mode: 'add', parent: row }) visible.value = true nextTick(() => { dialogRef.value?.open({ mode: 'add', parent: row }) }) } function handleView(row) { dialogRef.value?.open({ mode: 'view', row: { ...row } }) visible.value = true nextTick(() => { dialogRef.value?.open({ mode: 'view', row: { ...row } }) }) } function handleEdit(row) { dialogRef.value?.open({ mode: 'edit', row: { ...row } }) visible.value = true nextTick(() => { dialogRef.value?.open({ mode: 'edit', row: { ...row } }) }) } function handleShare(row) { shareVisible.value = true nextTick(() => { shareDialogRef.value?.open({ row }) }) } async function handleDelete(row) { applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -264,7 +264,7 @@ </template> <script setup> import { computed, ref, onMounted, nextTick } from 'vue' import { computed, ref, nextTick } from 'vue' import { ElMessage } from 'element-plus' import { dateRangeFormat, fieldRules, flyVisual, geomAnalysis, getDictLabel } from '@ztzf/utils' import { @@ -321,7 +321,6 @@ let viewer let drawPolygonExample let pointList = ref([]) const requester = inject('requester') const suddenlyEdit = ref(false) const processList = ref([]) let viewPlane