applications/drone-command/src/views/basicManage/deviceScrap/FormDiaLog.vue
New file @@ -0,0 +1,91 @@ <template> <el-dialog v-model="visible" :title="titleEnum[dialogMode]" @closed="handleClosed" destroy-on-close> <div v-if="dialogReadonly"> <el-row> <el-col :span="12"> <div>设备名称: {{ formData.deviceName }}</div> </el-col> <el-col :span="12"> <div>设备类型: {{ getDictLabel(formData.deviceType, dictObj.deviceType) }}</div> </el-col> <el-col :span="12"> <div>型号 : {{ formData.deviceModel }}</div> </el-col> <el-col :span="12"> <div>生产厂商 : {{ formData.manufacturer }}</div> </el-col> <el-col :span="12"> <div>入库时间 : {{ formData.createTime }}</div> </el-col> <el-col :span="12"> <div>来源 : {{ formData.source }}</div> </el-col> <el-col :span="12"> <div>所属部门 : {{ formData.belongDeptName }}</div> </el-col> <el-col :span="12"> <div>负责人 : {{ formData.charger }}</div> </el-col> <el-col :span="12"> <div>报废时间 : {{ formData.scrapTime }}</div> </el-col> <el-col :span="24"> <div>报废原因 : {{ formData.scrapReason }}</div> </el-col> <el-col :span="24"> <div>处置方式 : {{ formData.disposeWay }}</div> </el-col> </el-row> </div> <template #footer> <el-button @click="handleCancel">{{ dialogReadonly ? '关闭' : '取消' }}</el-button> </template> </el-dialog> </template> <script setup> import { computed, ref } from 'vue' import { getDictLabel } from '@ztzf/utils' import { fwDeviceScrapDetailApi } from '@/views/basicManage/deviceStock/fwDeviceScrapApi' const initForm = () => ({}) const emit = defineEmits(['success']) const formData = ref(initForm()) // 表单数据 const visible = ref(false) // 弹框显隐 const dialogMode = ref('add') // 弹框模式 const dictObj = inject('dictObj') const dialogReadonly = computed(() => dialogMode.value === 'view') const titleEnum = ref({ edit: '编辑', view: '查看', add: '维护计划' }) // 关闭弹框 function handleCancel() { visible.value = false } // 加载详情 async function loadDetail() { if (!formData.value.id) return const res = await fwDeviceScrapDetailApi({ id: formData.value.id }) let obj = res?.data?.data || {} formData.value = { ...formData.value, ...obj } } // 关闭后重置 function handleClosed() { formData.value = initForm() } // 打开弹框 async function open({ mode, row } = {}) { dialogMode.value = mode || 'add' visible.value = true if (dialogMode.value === 'add') { formData.value = initForm() } else { formData.value = row await loadDetail() } } defineExpose({ open }) </script> applications/drone-command/src/views/basicManage/deviceScrap/deviceScrap.vue
@@ -1,9 +1,186 @@ <template> <basic-container> 设备报废管理 </basic-container> <basic-container> <el-form ref="queryParamsRef" :model="searchParams"> <el-row :gutter="16"> <el-col :span="4"> <el-form-item label="设备名称" prop="deviceName"> <el-input v-model="searchParams.deviceName" placeholder="请输入" clearable @clear="handleSearch" /> </el-form-item> </el-col> <el-col :span="4"> <el-form-item label="设备类型" prop="deviceType"> <el-select v-model="searchParams.deviceType" placeholder="请选择" clearable @change="handleSearch"> <el-option v-for="item in dictObj.deviceType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> </el-select> </el-form-item> </el-col> <el-col :span="4"> <el-form-item label="所属部门" prop="belongDept"> <el-tree-select v-model="searchParams.belongDept" :data="deptTree" :props="treeProps" node-key="id" check-strictly clearable @change="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> <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="deviceName" label="设备名称" /> <el-table-column prop="deviceType" label="设备类型"> <template v-slot="{ row }"> {{ getDictLabel(row.deviceType, dictObj.deviceType) }} </template> </el-table-column> <el-table-column prop="deviceModel" label="型号" /> <el-table-column prop="manufacturer" label="生产厂商" /> <el-table-column prop="createTime" label="入库时间" /> <el-table-column prop="source" label="来源" /> <el-table-column prop="charger" label="负责人" /> <el-table-column prop="scrapTime" label="报废时间" /> <el-table-column prop="scrapReason" label="报废原因" /> <el-table-column prop="disposeWay" label="处置方式" /> <el-table-column prop="maintainReminder" label="维护提醒" /> <el-table-column label="操作"> <template v-slot="{ row }"> <el-link @click="handleView(row)" type="primary">查看</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" /> <MaintenanceDiaLog ref="maintenanceDialogRef" @success="getList" /> </basic-container> </template> <script setup> import { onMounted, ref } from 'vue' import { getDictionaryByCode } from '@/api/system/dictbiz' import { getDeptTree } from '@/api/system/dept' import { getDictLabel } from '@ztzf/utils' import FormDiaLog from './FormDiaLog.vue' import MaintenanceDiaLog from '@/views/basicManage/maintainRecord/MaintenanceDiaLog.vue' import { fwDeviceScrapPageApi } from '@/views/basicManage/deviceStock/fwDeviceScrapApi' const initSearchParams = () => ({ deviceName: '', // 设备名称 deviceType: '', // 设备类型 belongDept: '', // 所属部门 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) // 弹框实例 const maintenanceDialogRef = ref(null) // 弹框实例 const dictObj = ref({ deviceType: [], //设备类型 deviceAtt: [], //设备属性 }) provide('dictObj', dictObj) const deptTree = ref([]) //部门树 const treeProps = { label: 'name', children: 'children', } const planCycleOptions = [ { label: '每年', value: '1' }, { label: '每月', value: '2' }, { label: '每周', value: '3' }, ] provide('planCycleOptions', planCycleOptions) // 获取列表 async function getList() { loading.value = true try { const res = await fwDeviceScrapPageApi(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 handleSelectionChange(rows) { selectedIds.value = rows.map(item => item.id) } // 获取字典 function getDictList() { getDictionaryByCode('deviceType,deviceAtt').then(res => { dictObj.value = res.data.data }) } // 获取部门树 function getDeptTreeFun() { getDeptTree().then(res => { deptTree.value = res.data.data }) } // 新增 function handleAdd() { dialogRef.value?.open({ mode: 'add' }) } function getPlanCycleLabel(row) { const item = planCycleOptions.find(option => option.value === row.planCycleType) return item?.label + '-' + row.planCycleValue.join(',') } provide('getPlanCycleLabel', getPlanCycleLabel) onMounted(() => { getList() getDictList() getDeptTreeFun() }) </script> <style scoped lang="scss"> </style> <style scoped lang="scss"></style> applications/drone-command/src/views/basicManage/deviceScrap/接口文档.txt
applications/drone-command/src/views/basicManage/deviceStock/DeviceScrapDiaLog.vue
@@ -4,12 +4,12 @@ <el-row> <el-col :span="24"> <el-form-item label="报废原因" prop="scrapReason"> <el-input v-model="formData.scrapReason" maxlength="50" placeholder="请输入" clearable /> <el-input v-model="formData.scrapReason" maxlength="200" type="textarea" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="处置方式" prop="disposeWay"> <el-input v-model="formData.disposeWay" maxlength="50" placeholder="请输入" clearable /> <el-input v-model="formData.disposeWay" maxlength="200" type="textarea" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="12"> @@ -70,8 +70,8 @@ }) const rules = { scrapReason: fieldRules(true, 50), disposeWay: fieldRules(true, 50), scrapReason: fieldRules(true, 200), disposeWay: fieldRules(true, 200), scrapTime: fieldRules(true, 0), } @@ -107,8 +107,7 @@ formData.value.deviceId = row.id } onMounted(() => { }) onMounted(() => {}) defineExpose({ open }) </script> applications/drone-command/src/views/basicManage/deviceStock/FormDiaLog.vue
@@ -28,7 +28,7 @@ <div>用途: {{ formData.purpose }}</div> </el-col> <el-col :span="12"> <div>所属部门: {{ formData.belongDept }}</div> <div>所属部门: {{ formData.belongDeptName }}</div> </el-col> <el-col :span="12"> <div>负责人: {{ formData.charger }}</div> @@ -155,7 +155,7 @@ <script setup> import { computed, ref } from 'vue' import { ElMessage } from 'element-plus' import { fwDeviceDetailApi, fwDevicePageApi, fwDeviceSubmitApi } from '@/views/basicManage/deviceStock/fwDevice' import { fwDeviceDetailApi, fwDeviceSubmitApi } from '@/views/basicManage/deviceStock/fwDevice' import { getUserListApi } from '@/api/system/user' import { fieldRules, getDictLabel } from '@ztzf/utils' import { fwDeviceTrackPageApi } from '@/views/basicManage/deviceStock/fwDeviceTrackApi' applications/drone-command/src/views/basicManage/maintainRecord/FormDiaLog.vue
@@ -16,7 +16,7 @@ <div>生产厂商 : {{ formData.manufacturer }}</div> </el-col> <el-col :span="12"> <div>所属部门 : {{ formData.belongDept }}</div> <div>所属部门 : {{ formData.belongDeptName }}</div> </el-col> <el-col :span="12"> <div>负责人 : {{ formData.charger }}</div> @@ -108,9 +108,12 @@ import { computed, ref } from 'vue' import { ElMessage } from 'element-plus' import { fieldRules, getDictLabel } from '@ztzf/utils' import { fwDeviceMaintainPlanDetailApi, fwDeviceMaintainPlanSubmitApi, fwDevicePageApi } from './maintainRecordApi' import { fwDeviceTrackPageApi } from '@/views/basicManage/deviceStock/fwDeviceTrackApi' import { fwDeviceMaintainRecordPageApi } from '@/views/basicManage/maintainRecord/fwDeviceMaintainRecord' import { fwDeviceMaintainPlanDetailApi, fwDeviceMaintainPlanSubmitApi, fwDevicePageApi, } from '@/views/basicManage/maintainRecord/maintainRecordApi' const initForm = () => ({ deviceId: '', applications/drone-command/src/views/basicManage/maintainRecord/MaintenanceDiaLog.vue
@@ -14,12 +14,18 @@ <el-row> <el-col :span="24"> <el-form-item label="维护内容" prop="maintainContent"> <el-input v-model="formData.maintainContent" maxlength="50" placeholder="请输入" clearable /> <el-input v-model="formData.maintainContent" maxlength="200" type="textarea" placeholder="请输入" clearable /> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="更换部件" prop="replacePart"> <el-input v-model="formData.replacePart" maxlength="50" placeholder="请输入" clearable /> <el-input v-model="formData.replacePart" maxlength="200" type="textarea" placeholder="请输入" clearable /> </el-form-item> </el-col> </el-row> @@ -54,8 +60,8 @@ import { computed, ref } from 'vue' import { ElMessage } from 'element-plus' import { fieldRules } from '@ztzf/utils' import { fwDeviceMaintainPlanDetailApi, fwDeviceMaintainPlanSubmitApi, fwDevicePageApi } from './maintainRecordApi' import { fwDeviceMaintainRecordSubmitApi } from '@/views/basicManage/maintainRecord/fwDeviceMaintainRecord' import { fwDeviceMaintainPlanDetailApi } from '@/views/basicManage/maintainRecord/maintainRecordApi' const initForm = () => ({ deviceId: '', @@ -92,8 +98,8 @@ }) const rules = { maintainContent: fieldRules(true, 50), replacePart: fieldRules(true, 50), maintainContent: fieldRules(true, 200), replacePart: fieldRules(true, 200), maintainTime: fieldRules(true, 0), } applications/drone-command/src/views/basicManage/maintainRecord/maintainRecord.vue
@@ -88,9 +88,12 @@ import { getDictionaryByCode } from '@/api/system/dictbiz' import { getDeptTree } from '@/api/system/dept' import { getDictLabel } from '@ztzf/utils' import { fwDeviceMaintainPlanPageApi, fwDeviceMaintainPlanRemoveApi } from './maintainRecordApi' import FormDiaLog from './FormDiaLog.vue' import MaintenanceDiaLog from '@/views/basicManage/maintainRecord/MaintenanceDiaLog.vue' import { fwDeviceMaintainPlanPageApi, fwDeviceMaintainPlanRemoveApi, } from '@/views/basicManage/maintainRecord/maintainRecordApi' const initSearchParams = () => ({ deviceName: '', // 设备名称 applications/drone-command/src/views/basicManage/maintainRecord/接口文档.txt
File was deleted