| applications/drone-command/src/views/detectionCountermeasure/deviceAppConfig/index.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/permissionManage/permissionUser.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/permissionManage/permissionUser/index.vue | ●●●●● patch | view | raw | blame | history | |
| applications/drone-command/src/views/system/dept.vue | ●●●●● patch | view | raw | blame | history |
applications/drone-command/src/views/detectionCountermeasure/deviceAppConfig/index.vue
@@ -29,6 +29,24 @@ </el-select> </el-form-item> <el-form-item label="设备状态" prop="deviceStatus"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="searchParams.deviceStatus" placeholder="请选择" clearable @change="handleSearch" > <el-option v-for="item in dictObj.deviceStatus" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> </el-select> </el-form-item> <el-form-item class="history-search-actions"> <el-button :icon="RefreshRight" @click="resetForm"></el-button> <el-button class="search-btn" :icon="Search" @click="handleSearch"></el-button> @@ -47,13 +65,28 @@ <el-table-column prop="deviceModel" show-overflow-tooltip label="设备型号" /> <el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" /> <el-table-column prop="deviceSn" show-overflow-tooltip label="设备编码" /> <el-table-column prop="deployLocation" show-overflow-tooltip label="部署位置" /> <el-table-column prop="deviceStatus" show-overflow-tooltip label="设备状态"> <template v-slot="{ row }"> {{ getDictLabel(row.status, dictObj.deviceStatus) }} </template> </el-table-column> <el-table-column show-overflow-tooltip label="部署位置"> <template v-slot="{ row }"> {{ formatDeployLocation(row) }} </template> </el-table-column> <el-table-column prop="manufacturer" show-overflow-tooltip label="厂商" /> <el-table-column prop="contactPhone" show-overflow-tooltip label="联系方式" /> <el-table-column prop="sceneName" show-overflow-tooltip label="所属场景" /> <el-table-column label="操作" class-name="operation-btns"> <el-table-column label="设置配置" class-name="operation-btns"> <template v-slot="{ row }"> <el-link @click="openForm('edit', row)" type="warning">配置接口</el-link> </template> </el-table-column> <el-table-column label="操作" class-name="operation-btns"> <template v-slot="{ row }"> <el-link @click="handleEdit(row)">编辑</el-link> <el-link @click="handleDelete(row)" type="danger">删除</el-link> </template> </el-table-column> </el-table> @@ -71,22 +104,27 @@ </div> </div> <FormDiaLog v-if="dialogVisible" v-model="dialogVisible" ref="dialogRef" @success="getList" /> <ConfigFormDiaLog v-if="dialogVisible" v-model="dialogVisible" ref="configDialogRef" @success="getList" /> <DeviceFormDiaLog ref="deviceFormRef" @success="getList" /> </basic-container> </template> <script setup> import { RefreshRight, Search } from '@element-plus/icons-vue' import { nextTick, onMounted, provide, ref } from 'vue' import FormDiaLog from './FormDiaLog.vue' import { ElMessage, ElMessageBox } from 'element-plus' import ConfigFormDiaLog from './FormDiaLog.vue' import DeviceFormDiaLog from '@/views/basicManage/deviceStock/FormDiaLog.vue' import { getDictionaryByCode } from '@/api/system/dictbiz' import { getDictLabel } from '@ztzf/utils' import { fwDevicePageApi } from '@/views/basicManage/deviceStock/fwDevice' import { fwDevicePageApi, fwDeviceRemoveApi } from '@/views/basicManage/deviceStock/fwDevice' import { getDeptTree } from '@/api/system/dept' // 初始化查询参数 const initSearchParams = () => ({ deviceName: '', // 设备名称 deviceType: '', // 设备类型 deviceStatus: '', // 设备状态 current: 1, // 当前页 size: 10, // 每页大小 }) @@ -96,13 +134,18 @@ const loading = ref(true) // 列表加载中 const list = ref([]) // 列表数据 const queryParamsRef = ref(null) // 查询表单实例 const dialogRef = ref(null) // 弹框实例 const configDialogRef = ref(null) // 弹框实例 const deviceFormRef = ref(null) // 设备表单弹框实例 const dialogVisible = ref(false) const deptTree = ref([]) const dictObj = ref({ deviceType: [], //设备类型 deviceStatus: [], //设备状态 deviceAtt: [], //设备属性 }) provide('dictObj', dictObj) provide('deptTree', deptTree) // 获取列表 async function getList() { @@ -131,8 +174,14 @@ // 获取字典 function getDictList() { getDictionaryByCode('deviceType').then(res => { getDictionaryByCode('deviceType,deviceStatus,deviceAtt').then(res => { dictObj.value = res.data.data }) } function getDeptTreeFun() { getDeptTree().then(res => { deptTree.value = res.data.data }) } @@ -140,13 +189,38 @@ function openForm(mode, row) { dialogVisible.value = true nextTick(() => { dialogRef.value?.open({ mode, row }) configDialogRef.value?.open({ mode, row }) }) } function handleEdit(row) { deviceFormRef.value?.open({ mode: 'edit', row }) } async function handleDelete(row) { await ElMessageBox.confirm('确认删除该设备吗?', '提示', { type: 'warning', customClass: 'ztzf-page-view-message-box', confirmButtonClass: 'ztzf-message-box-confirm', cancelButtonClass: 'ztzf-message-box-cancel', }) await fwDeviceRemoveApi({ ids: row.id }) ElMessage.success('删除成功') getList() } function formatDeployLocation(row) { if (!row) return '' const longitude = row.deployLongitude ?? row.longitude const latitude = row.deployLatitude ?? row.latitude if (longitude == null || latitude == null) return '' return `${longitude}, ${latitude}` } onMounted(() => { getList() getDictList() getDeptTreeFun() }) </script> <style scoped lang="scss"></style> applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue
@@ -15,18 +15,18 @@ </el-select> </el-form-item> <el-form-item label="设备类型" prop="deviceType"> <el-form-item label="设备状态" prop="deviceStatus"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="searchParams.deviceType" v-model="searchParams.deviceStatus" placeholder="请选择" clearable @clear="handleSearch" @change="handleSearch" > <el-option v-for="item in dictObj.deviceType" v-for="item in dictObj.deviceStatus" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" @@ -62,11 +62,11 @@ <el-table-column type="index" show-overflow-tooltip width="64" label="序号" /> <el-table-column prop="deviceName" show-overflow-tooltip width="140" label="设备名称" /> <el-table-column prop="deviceSn" show-overflow-tooltip width="140" label="设备编码" /> <!-- <el-table-column prop="deviceStatus" show-overflow-tooltip width="100" label="设备状态"> <template v-slot="{ row }"> {{ getDictLabel(row.deviceStatus, dictObj.deviceStatus) }} </template> </el-table-column>--> <el-table-column prop="deviceStatus" show-overflow-tooltip width="100" label="设备状态"> <template v-slot="{ row }"> {{ getDictLabel(row.deviceStatus, dictObj.deviceStatus) }} </template> </el-table-column> <el-table-column prop="areaName" show-overflow-tooltip width="120" label="区域" /> <el-table-column prop="defenseZoneName" show-overflow-tooltip width="120" label="场景" /> <el-table-column show-overflow-tooltip label="调度位置"> @@ -127,7 +127,7 @@ // 初始化查询参数 const initSearchParams = () => ({ deviceId: '', // 设备名称 deviceType: '', // 设备类型 deviceStatus: '', // 设备状态 deviceSn: '', // 设备编号 current: 1, // 当前页 size: 10, // 每页大小 applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue
@@ -168,7 +168,7 @@ ) } if (level === 0) { getLazyTree('00').then(res => { getLazyTree('000000000000').then(res => { list = res.data.data callback() }) applications/drone-command/src/views/permissionManage/permissionUser.vue
@@ -1,9 +1,7 @@ <template> <basic-container> 用户管理 </basic-container> <PermissionUser /> </template> <script setup> import PermissionUser from './permissionUser/index.vue' </script> <style scoped lang="scss"> </style> applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue
New file @@ -0,0 +1,421 @@ <template> <el-dialog class="ztzf-page-view-dialog" v-model="visible" :title="dialogTitle" @closed="handleClosed" destroy-on-close> <div class="detail-container" v-if="dialogReadonly"> <div class="detail-title">用户详情</div> <el-row> <el-col :span="12"> <div class="label">登录账号</div> <div class="val">{{ formData.account }}</div> </el-col> <el-col :span="12"> <div class="label">用户姓名</div> <div class="val">{{ formData.realName }}</div> </el-col> <el-col :span="12"> <div class="label">手机号</div> <div class="val">{{ formData.phone }}</div> </el-col> <el-col :span="12"> <div class="label">电子邮箱</div> <div class="val">{{ formData.email }}</div> </el-col> <el-col :span="12"> <div class="label">用户性别</div> <div class="val">{{ getSexLabel(formData.sex) }}</div> </el-col> <el-col :span="12"> <div class="label">用户生日</div> <div class="val">{{ formData.birthday }}</div> </el-col> <el-col :span="12"> <div class="label">所属角色</div> <div class="val">{{ formData.roleName }}</div> </el-col> <el-col :span="12"> <div class="label">所属部门</div> <div class="val">{{ formData.deptName }}</div> </el-col> <el-col :span="12"> <div class="label">用户编号</div> <div class="val">{{ formData.code }}</div> </el-col> <el-col :span="12"> <div class="label">账号状态</div> <div class="val">{{ formData.statusName }}</div> </el-col> <el-col :span="12"> <div class="label">到期时间</div> <div class="val">{{ formData.expireTime }}</div> </el-col> <el-col :span="12"> <div class="label">次数限制</div> <div class="val">{{ formData.maxLoginNum }}</div> </el-col> <el-col :span="12"> <div class="label">飞行开始时间</div> <div class="val">{{ formData.flightStartTime }}</div> </el-col> <el-col :span="12"> <div class="label">飞行结束时间</div> <div class="val">{{ formData.flightEndTime }}</div> </el-col> </el-row> </div> <el-form class="dialog-form" v-else ref="formRef" :model="formData" :rules="rules" label-width="110px"> <el-divider content-position="left">基础信息</el-divider> <el-row :gutter="16"> <el-col :span="12"> <el-form-item label="登录账号" prop="account"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.account" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12" v-if="dialogMode === 'add'"> <el-form-item label="密码" prop="password"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.password" type="password" maxlength="50" placeholder="请输入" clearable show-password /> </el-form-item> </el-col> <el-col :span="12" v-if="dialogMode === 'add'"> <el-form-item label="确认密码" prop="password2"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.password2" type="password" maxlength="50" placeholder="请输入" clearable show-password /> </el-form-item> </el-col> </el-row> <el-divider content-position="left">详细信息</el-divider> <el-row :gutter="16"> <el-col :span="12"> <el-form-item label="用户姓名" prop="realName"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.realName" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="手机号" prop="phone"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.phone" maxlength="20" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="电子邮箱" prop="email"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.email" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="用户性别" prop="sex"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="formData.sex" placeholder="请选择" clearable> <el-option label="男" :value="1" /> <el-option label="女" :value="2" /> <el-option label="未知" :value="3" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="用户生日" prop="birthday"> <el-date-picker class="ztzf-data-cockpit-date-picker" popper-class="ztzf-data-cockpit-date-picker-popper" v-model="formData.birthday" type="datetime" placeholder="请选择" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" clearable /> </el-form-item> </el-col> </el-row> <el-divider content-position="left">职责信息</el-divider> <el-row :gutter="16"> <el-col :span="12"> <el-form-item label="用户编号" prop="code"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.code" maxlength="50" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="所属角色" prop="roleId"> <el-tree-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-tree-select-popper" v-model="formData.roleId" :data="roleTree" :props="treeProps" node-key="id" check-strictly clearable placeholder="请选择" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="所属部门" prop="deptId"> <el-tree-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-tree-select-popper" v-model="formData.deptId" :data="deptTree" :props="deptTreeSelectProps" node-key="id" check-strictly clearable placeholder="请选择" /> </el-form-item> </el-col> </el-row> <el-divider content-position="left">登录限制</el-divider> <el-row :gutter="16"> <el-col :span="12"> <el-form-item label="到期时间" prop="expireTime"> <el-date-picker class="ztzf-data-cockpit-date-picker" popper-class="ztzf-data-cockpit-date-picker-popper" v-model="formData.expireTime" type="datetime" placeholder="请选择" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="次数限制" prop="maxLoginNum"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.maxLoginNum" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="飞行开始时间" prop="flightStartTime"> <el-time-picker class="ztzf-data-cockpit-date-picker" popper-class="ztzf-data-cockpit-date-picker-popper" v-model="formData.flightStartTime" placeholder="请选择" format="HH:mm" value-format="HH:mm" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="飞行结束时间" prop="flightEndTime"> <el-time-picker class="ztzf-data-cockpit-date-picker" popper-class="ztzf-data-cockpit-date-picker-popper" v-model="formData.flightEndTime" placeholder="请选择" format="HH:mm" value-format="HH:mm" clearable /> </el-form-item> </el-col> </el-row> </el-form> <template #footer> <el-button color="#2B2B4C" @click="handleCancel">{{ dialogReadonly ? '关闭' : '取消' }}</el-button> <el-button color="#284FE3" v-if="!dialogReadonly" type="primary" :loading="submitting" :disabled="submitting" @click="handleSubmit"> 保存 </el-button> </template> </el-dialog> </template> <script setup> import { computed, onMounted, ref } from 'vue' import { ElMessage } from 'element-plus' import { add, getUser, update } from '@/api/system/user' import { getDeptTree } from '@/api/system/dept' import { getRoleTree } from '@/api/system/role' import func from '@/utils/func' const initForm = () => ({ account: '', password: '', password2: '', realName: '', phone: '', email: '', sex: null, birthday: '', code: '', roleId: '', deptId: '', expireTime: '', maxLoginNum: '', flightStartTime: '', flightEndTime: '', }) const treeProps = { label: 'title', children: 'children', } const deptTreeSelectProps = { label: 'name', value: 'id', children: 'children', } 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 dialogReadonly = computed(() => dialogMode.value === 'view') const dialogTitle = computed(() => { if (dialogMode.value === 'edit') return '编辑' if (dialogMode.value === 'view') return '查看' return '新增' }) const roleTree = ref([]) const deptTree = ref([]) const validatePass = (rule, value, callback) => { if (value === '') { callback(new Error('请输入密码')) } else { callback() } } const validatePass2 = (rule, value, callback) => { if (value === '') { callback(new Error('请再次输入密码')) } else if (value !== formData.value.password) { callback(new Error('两次输入密码不一致')) } else { callback() } } const rules = { account: [{ required: true, message: '请输入登录账号', trigger: 'blur' }], password: [{ required: true, validator: validatePass, trigger: 'blur' }], password2: [{ required: true, validator: validatePass2, trigger: 'blur' }], realName: [ { required: true, message: '请输入用户姓名', trigger: 'blur' }, { min: 2, max: 50, message: '姓名长度在 2 到 50 个字符', trigger: 'blur' }, ], roleId: [{ required: true, message: '请选择所属角色', trigger: 'change' }], deptId: [{ required: true, message: '请选择所属部门', trigger: 'change' }], } function getSexLabel(sex) { const map = { 1: '男', 2: '女', 3: '未知' } return map[sex] || '' } async function getRoleTreeData() { const res = await getRoleTree('000000') roleTree.value = res.data.data } async function getDeptTreeData() { const res = await getDeptTree('000000') deptTree.value = res.data.data } function handleCancel() { visible.value = false } function validateFlightTime() { if (formData.value.flightStartTime && formData.value.flightEndTime) { const [startHours, startMinutes] = formData.value.flightStartTime.split(':').map(Number) const [endHours, endMinutes] = formData.value.flightEndTime.split(':').map(Number) const startTotalMinutes = startHours * 60 + startMinutes const endTotalMinutes = endHours * 60 + endMinutes if (endTotalMinutes < startTotalMinutes) { ElMessage.error('飞行结束时间不能小于飞行开始时间') return false } } return true } async function handleSubmit() { const isValid = await formRef.value?.validate().catch(() => false) if (!isValid) return if (!validateFlightTime()) return submitting.value = true try { const submitData = { ...formData.value } submitData.roleId = func.toStr(submitData.roleId) submitData.name = submitData.realName if (dialogMode.value === 'add') { await add(submitData) } else { await update(submitData) } 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 getUser(formData.value.id) const data = res?.data?.data ?? {} if (data.roleId) { data.roleId = func.split(data.roleId)[0] || data.roleId } formData.value = data } function handleClosed() { formData.value = initForm() } async function open({ mode, row } = {}) { dialogMode.value = mode || 'add' visible.value = true if (dialogMode.value === 'add') { formData.value = initForm() return } formData.value = { id: row.id } await loadDetail() } onMounted(() => { getRoleTreeData() getDeptTreeData() }) defineExpose({ open }) </script> <style scoped lang="scss"> :deep(.el-select) { width: 100%; } :deep(.el-date-editor) { width: 100%; } :deep(.el-tree-select) { width: 100%; } </style> applications/drone-command/src/views/permissionManage/permissionUser/index.vue
New file @@ -0,0 +1,202 @@ <template> <basic-container> <el-form ref="queryParamsRef" :model="searchParams" class="ztzf-page-history-search"> <el-form-item label="登录账号" prop="account"> <el-input class="ztzf-data-cockpit-search-input" v-model="searchParams.account" placeholder="请输入" clearable @clear="handleSearch" /> </el-form-item> <el-form-item label="用户姓名" prop="realName"> <el-input class="ztzf-data-cockpit-search-input" v-model="searchParams.realName" placeholder="请输入" clearable @clear="handleSearch" /> </el-form-item> <el-form-item label="所属部门" prop="deptId"> <el-tree-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-tree-select-popper" v-model="searchParams.deptId" :data="deptTree" :props="treeProps" node-key="id" check-strictly clearable @change="handleSearch" /> </el-form-item> <el-form-item class="history-search-actions"> <el-button :icon="RefreshRight" @click="resetForm"></el-button> <el-button class="search-btn" :icon="Search" @click="handleSearch"></el-button> </el-form-item> </el-form> <div class="ztzf-table-toolbar"> <el-button v-if="permission.user_add" :icon="Plus" color="#284FE3" type="primary" @click="handleAdd"> 新增 </el-button> <el-button v-if="permission.user_delete" :icon="Delete" color="#1A2652" type="primary" :disabled="!selectedIds.length" @click="handleDelete()" > 删除 </el-button> </div> <div class="ztzf-table-container" v-loading="loading" element-loading-background="rgba(5, 5, 15, 0.6)"> <div class="ztzf-table-content ztzf-table-content-bg"> <el-table class="ztzf-data-cockpit-table" :data="list" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="46" /> <el-table-column type="index" show-overflow-tooltip width="64" label="序号" /> <el-table-column prop="account" show-overflow-tooltip label="登录账号" /> <el-table-column prop="realName" show-overflow-tooltip label="用户姓名" /> <el-table-column prop="roleName" show-overflow-tooltip label="所属角色" /> <el-table-column prop="deptName" show-overflow-tooltip label="所属部门" /> <el-table-column prop="phone" show-overflow-tooltip width="120" label="手机号" /> <el-table-column label="操作" class-name="operation-btns" width="180"> <template v-slot="{ row }"> <el-link v-if="permission.user_view" @click="handleView(row)">查看</el-link> <el-link v-if="permission.user_edit" @click="handleEdit(row)">编辑</el-link> <el-link v-if="permission.user_delete" type="danger" @click="handleDelete(row)">删除</el-link> </template> </el-table-column> </el-table> </div> <div class="ztzf-table-pagination"> <el-pagination popper-class="ztzf-data-cockpit-select-popper" v-model:current-page="searchParams.current" v-model:page-size="searchParams.size" layout="total, prev, pager, next, sizes" :total="total" @change="getList" /> </div> </div> <FormDiaLog ref="dialogRef" @success="getList" /> </basic-container> </template> <script setup> import { Delete, Plus, RefreshRight, Search } from '@element-plus/icons-vue' import { computed, onMounted, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { getDeptTree } from '@/api/system/dept' import { getList as getUserList, remove } from '@/api/system/user' import { useStore } from 'vuex' import FormDiaLog from './FormDiaLog.vue' const initSearchParams = () => ({ account: '', realName: '', deptId: '', current: 1, size: 10, }) const searchParams = ref(initSearchParams()) const loading = ref(true) const list = ref([]) const total = ref(0) const selectedIds = ref([]) const queryParamsRef = ref(null) const dialogRef = ref(null) const deptTree = ref([]) const treeProps = { label: 'name', children: 'children', } const store = useStore() const permission = computed(() => store.getters.permission || {}) async function getList() { loading.value = true try { const res = await getUserList( searchParams.value.current, searchParams.value.size, { account: searchParams.value.account, realName: searchParams.value.realName, }, searchParams.value.deptId ) 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 searchParams.value.deptId = '' getList() } function handleAdd() { dialogRef.value?.open({ mode: 'add' }) } 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', customClass: 'ztzf-page-view-message-box', confirmButtonClass: 'ztzf-message-box-confirm', cancelButtonClass: 'ztzf-message-box-cancel', }) const ids = row ? row.id : selectedIds.value.join(',') await remove(ids) ElMessage.success('删除成功') selectedIds.value = [] getList() } function handleSelectionChange(rows) { selectedIds.value = rows.map(item => item.id) } function getDeptTreeList() { getDeptTree().then(res => { deptTree.value = res?.data?.data ?? [] }) } onMounted(() => { getList() getDeptTreeList() }) </script> <style scoped lang="scss"></style> applications/drone-command/src/views/system/dept.vue
@@ -238,7 +238,7 @@ } if (level === 0) { getLazyTree('00').then(res => { getLazyTree('000000000000').then(res => { list = res.data.data callback() })