icd管理

This commit is contained in:
sjl
2025-02-11 11:26:50 +08:00
parent b11f4839f4
commit b3aeebb7c7
3 changed files with 247 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ import { pa } from 'element-plus/es/locale/index.mjs'
//获取ICD分页
export const getICDList = (params: ICD.ReqICDParams) => {
return http.get(`/icd/listAll`,params)
return http.post(`/icd/list`,params)
}

View File

@@ -0,0 +1,127 @@
<template>
<!-- 基础信息弹出框 -->
<el-dialog :model-value="dialogVisible" :title="dialogTitle" v-bind="dialogSmall" @close="close" >
<div>
<el-form :model="formContent" ref='dialogFormRef' :rules='rules'>
<el-form-item label="名称" prop="name" >
<el-input v-model='formContent.name' placeholder="请输入icd名称"/>
</el-form-item>
<el-form-item label="存储地址" prop="path" >
<el-input v-model='formContent.path' placeholder="请输入icd存储地址"/>
</el-form-item>
</el-form>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="close()">取消</el-button>
<el-button type="primary" @click="save()" >
保存
</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import{ ElMessage, type FormInstance,type FormItemRule } from 'element-plus'
import type { ProTableInstance } from '@/components/ProTable/interface'
import { ref,computed, Ref} from 'vue'
import { type ICD } from '@/api/device/interface/icd'
import {dialogSmall} from '@/utils/elementBind'
import { useDictStore } from '@/stores/modules/dict'
import {addICD,updateICD} from '@/api/device/icd'
const dictStore = useDictStore()
// 定义弹出组件元信息
const dialogFormRef = ref()
function useMetaInfo() {
const dialogVisible = ref(false)
const titleType = ref('add')
const formContent = ref<ICD.ResICD>({
id: '',
name: '',
path: '',
state: 1,
})
return { dialogVisible, titleType, formContent }
}
const { dialogVisible, titleType, formContent } = useMetaInfo()
// 清空formContent
const resetFormContent = () => {
formContent.value = {
id: '',
name: '',
path: '',
state: 1,
}
}
let dialogTitle = computed(() => {
return titleType.value === 'add' ? '新增ICD' : '编辑ICD'
})
//定义规则
const formRuleRef = ref<FormInstance>()
//定义校验规则
const rules: Ref<Record<string, Array<FormItemRule>>> = ref({
name: [{ required: true, message: 'icd名称必填', trigger: 'blur' }],
path: [{ required: true, message: 'icd存储地址必填', trigger: 'blur' }],
})
// 关闭弹窗
const close = () => {
dialogVisible.value = false
// 清空dialogForm中的值
resetFormContent()
// 重置表单
dialogFormRef.value?.resetFields()
}
// 保存数据
const save = () => {
try {
dialogFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
if (formContent.value.id) {
await updateICD(formContent.value);
} else {
await addICD(formContent.value);
}
ElMessage.success({ message: `${dialogTitle.value}成功!` })
close()
// 刷新表格
await props.refreshTable!()
}
})
} catch (err) {
//error('验证过程中出现错误', err)
}
}
// 打开弹窗,可能是新增,也可能是编辑
const open = async (sign: string, data: ICD.ResICD) => {
// 重置表单
dialogFormRef.value?.resetFields()
titleType.value = sign
dialogVisible.value = true
if (data.id) {
formContent.value = { ...data }
} else {
resetFormContent()
}
}
// 对外映射
defineExpose({ open })
const props = defineProps<{
refreshTable: (() => Promise<void>) | undefined;
}>()
</script>

View File

@@ -0,0 +1,119 @@
<template>
<div class='table-box' ref='popupBaseView'>
<ProTable
ref='proTable'
:columns='columns'
:request-api='getTableList'
>
<!-- :requestApi="getRoleList" -->
<!-- 表格 header 按钮 -->
<template #tableHeader='scope'>
<el-button v-auth.devType="'add'" type='primary' :icon='CirclePlus' @click="openDialog('add')">新增</el-button>
<el-button v-auth.devType="'delete'" type='danger' :icon='Delete' plain :disabled='!scope.isSelected'
@click='batchDelete(scope.selectedListIds)'>
删除
</el-button>
</template>
<!-- 表格操作 -->
<template #operation='scope'>
<el-button v-auth.devType="'edit'" type='primary' link :icon='EditPen' :model-value='false'
@click="openDialog('edit', scope.row)">编辑
</el-button>
<el-button v-auth.devType="'delete'" type='primary' link :icon='Delete' @click='handleDelete(scope.row)'>删除
</el-button>
</template>
</ProTable>
</div>
<IcdPopup :refresh-table='proTable?.getTableList' ref='icdPopup' />
</template>
<script setup lang='tsx' name='useRole'>
import TimeControl from '@/components/TimeControl/index.vue'
import { type ICD } from '@/api/device/interface/icd'
import { useHandleData } from '@/hooks/useHandleData'
import { useDownload } from '@/hooks/useDownload'
import ProTable from '@/components/ProTable/index.vue'
import { type ProTableInstance, type ColumnProps } from '@/components/ProTable/interface'
import { CirclePlus, Delete, EditPen, Download, Upload } from '@element-plus/icons-vue'
import { useDictStore } from '@/stores/modules/dict'
import {
getICDList,
deleteICD,
} from '@/api/device/icd/index.ts'
import { reactive, ref } from 'vue'
import { useModeStore, useAppSceneStore } from '@/stores/modules/mode'
defineOptions({
name: 'devType',
})
const modeStore = useModeStore()
const dictStore = useDictStore()
// ProTable 实例
const proTable = ref<ProTableInstance>()
const icdPopup = ref()
const getTableList = async (params: any) => {
let newParams = JSON.parse(JSON.stringify(params))
return getICDList(newParams)
}
// 表格配置项
const columns = reactive<ColumnProps<ICD.ResICD>[]>([
{ type: 'selection', fixed: 'left', width: 70 },
{ type: 'index', fixed: 'left', width: 70, label: '序号' },
{
prop: 'name',
label: '名称',
search: { el: 'input' },
},
{
prop: 'path',
label: '存储地址',
},
{
prop: 'createTime',
label: '创建时间',
render: scope => {
if (scope.row.createTime) {
const date = new Date(scope.row.createTime);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
return '';
}
},
{ prop: 'operation', label: '操作', fixed: 'right', width: 200 },
])
// 打开 drawer(新增、编辑)
const openDialog = (titleType: string, row: Partial<ICD.ResICD> = {}) => {
icdPopup.value?.open(titleType, row)
}
// 批量删除设备
const batchDelete = async (id: string[]) => {
await useHandleData(deleteICD, id, '删除所选icd')
proTable.value?.clearSelection()
proTable.value?.getTableList()
}
// 删除设备
const handleDelete = async (params: ICD.ResICD) => {
await useHandleData(deleteICD, [params.id] , `删除【${params.name}】icd`)
proTable.value?.getTableList()
}
</script>