123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <template>
- <Dialog :title="dialogTitle" v-model="dialogVisible">
- <el-form
- ref="formRef"
- :model="formData"
- :rules="formRules"
- label-width="100px"
- v-loading="formLoading"
- >
- <!-- <el-form-item label="文件名称" prop="filename">-->
- <!-- <el-input v-model="formData.filename" placeholder="请输入文件名称" />-->
- <!-- </el-form-item>-->
- <el-form-item :label="t('fileInfo.fileDirectory')" prop="classId">
- <el-tree-select
- disabled="true"
- v-model="formData.classId"
- :data="fileList"
- :props="defaultProps"
- check-strictly
- placeholder="请选择文件目录"
- value-key="id"
- />
- </el-form-item>
- <el-form-item :label="t('fileInfo.appendix')" prop="filePath" style="">
- <UploadFileAll style="vertical-align: middle"
- :is-show-tip="false"
- :disabled="formType==='detail'"
- v-model="formData.filePath"
- :multiple="formType === 'create'"
- :limit="formType === 'create' ? 5 : 1"
- />
- </el-form-item>
- <el-form-item :label="t('fileInfo.fileType')" prop="fileType">
- <el-select v-model="formData.fileType" placeholder="请选择" :disabled="formType==='detail'">
- <el-option
- v-for="dict in getStrDictOptions(DICT_TYPE.PMS_FILE_TYPE)"
- :key="dict.label"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item :label="t('fileInfo.remark')" prop="remark">
- <el-input v-model="formData.remark" :disabled="formType==='detail'" type="textarea" :placeholder="t('deviceForm.remarkHolder')" />
- </el-form-item>
- </el-form>
- <template #footer>
- <el-button @click="submitForm" type="primary" v-if="formType!=='detail'" :disabled="formLoading">{{t('common.ok')}}</el-button>
- <el-button @click="dialogVisible = false">{{t('common.cancel')}}</el-button>
- </template>
- </Dialog>
- </template>
- <script setup lang="ts">
- import { IotInfoApi, IotInfoVO } from '@/api/pms/iotinfo'
- import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
- import {defaultProps, handleTree} from "@/utils/tree";
- import * as FileClassifyApi from "@/api/pms/info";
- import {IotTreeApi} from "@/api/system/tree";
- /** 资料 表单 */
- defineOptions({ name: 'IotInfoFormTree' })
- const { t } = useI18n() // 国际化
- const message = useMessage() // 消息弹窗
- const dialogVisible = ref(false) // 弹窗的是否展示
- const dialogTitle = ref('') // 弹窗的标题
- const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
- const fileList = ref<Tree[]>([]) // 树形结构
- const formType = ref('') // 表单的类型:create - 新增;update - 修改
- const formData = ref({
- id: undefined,
- deviceId: undefined,
- classId: undefined,
- deptId: undefined,
- filename: undefined,
- fileType: undefined,
- filePath: undefined,
- remark: undefined,
- fileList: []
- })
- const formRules = reactive({
- // classId: [{ required: true, message: '文件不能为空', trigger: 'blur' }],
- filePath: [{ required: true, message: '文件不能为空', trigger: 'blur' }]
- })
- const formRef = ref() // 表单 Ref
- const props = defineProps<{
- deviceId: string
- classId: string
- nodeId: string
- }>()
- const classIdd = ref('')
- /** 打开弹窗 */
- const open = async (type: string, id?: number) => {
- // if (props.type==='file') {
- await getTreeInfo()
- // } else {
- // await getTree();
- // }
- dialogVisible.value = true
- dialogTitle.value = t('action.' + type)
- formType.value = type
- resetForm()
- // 修改时,设置数据
- if (id) {
- formLoading.value = true
- try {
- formData.value.classid =
- formData.value = await IotInfoApi.getIotInfo(id)
- } finally {
- formLoading.value = false
- }
- }else {
- formData.value.fileType = 'file'
- }
- classIdd.value = props.classId
- formData.value.classId = props.nodeId
- }
- defineExpose({ open }) // 提供 open 方法,用于打开弹窗
- const getTreeInfo = async () => {
- const res = await IotTreeApi.getSimpleTreeList()
- fileList.value = []
- fileList.value.push(...handleTree(res))
- // firstLevelKeys.value = treeList.value.map(node => node.id);
- // emits('success', treeList.value[0].id)
- }
- /** 获得分类树 */
- const getTree = async () => {
- const res = await FileClassifyApi.IotInfoClassifyApi.getSimpleInfotClassifyList(props.deviceId)
- fileList.value = []
- fileList.value.push(...handleTree(res))
- }
- /** 提交表单 */
- const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
- const submitForm = async () => {
- // 校验表单
- await formRef.value.validate()
- // 提交请求
- formLoading.value = true
- try {
- formData.value.fileList = formData.value.filePath
- formData.value.filePath = ''
- const data = formData.value as unknown as IotInfoVO
- if (formType.value === 'create') {
- data.deviceId = props.deviceId
- // data.filePath = data.filePath.join(',')
- await IotInfoApi.createIotInfo(data)
- message.success(t('common.createSuccess'))
- } else {
- await IotInfoApi.updateIotInfo(data)
- message.success(t('common.updateSuccess'))
- }
- dialogVisible.value = false
- // 发送操作成功的事件
- emit('success')
- } finally {
- formLoading.value = false
- }
- }
- /** 重置表单 */
- const resetForm = () => {
- formData.value = {
- id: undefined,
- deviceId: undefined,
- deptId: undefined,
- filename: undefined,
- fileType: undefined,
- filePath: undefined,
- remark: undefined
- }
- formRef.value?.resetFields()
- }
- </script>
|