parent
20f28f2a55
commit
6e2f8da03f
@ -0,0 +1,45 @@ |
|||||||
|
import request from "@/utils/request"; |
||||||
|
import { AxiosPromise } from "axios"; |
||||||
|
import { Tr069VerForm, Tr069VerPageResult, Tr069Xml } from "@/api/tr069/types"; |
||||||
|
|
||||||
|
export function getTr069Page( |
||||||
|
data: PageQuery |
||||||
|
): AxiosPromise<Tr069VerPageResult> { |
||||||
|
return request({ |
||||||
|
url: "/api/tr069/v1/page", |
||||||
|
method: "POST", |
||||||
|
data, |
||||||
|
}); |
||||||
|
} |
||||||
|
export function getTr069XmlTree(fileId?: number): AxiosPromise<Tr069Xml> { |
||||||
|
return request({ |
||||||
|
url: `/api/tr069/v1/tree/${fileId}`, |
||||||
|
method: "get", |
||||||
|
}); |
||||||
|
} |
||||||
|
export function getTr069XmlOption(): AxiosPromise<OptionType[]> { |
||||||
|
return request({ |
||||||
|
url: `/api/tr069/v1/tr069-model/option`, |
||||||
|
method: "get", |
||||||
|
}); |
||||||
|
} |
||||||
|
export function getTr069Form(tr069VerId: number): AxiosPromise<Tr069VerForm> { |
||||||
|
return request({ |
||||||
|
url: `/api/tr069/v1/${tr069VerId}`, |
||||||
|
method: "get", |
||||||
|
}); |
||||||
|
} |
||||||
|
export function editTr069(data: Tr069VerForm) { |
||||||
|
return request({ |
||||||
|
url: `/api/tr069/v1/edit`, |
||||||
|
method: "POST", |
||||||
|
data, |
||||||
|
}); |
||||||
|
} |
||||||
|
export function addTr069(data: Tr069VerForm){ |
||||||
|
return request({ |
||||||
|
url: `/api/tr069/v1/add`, |
||||||
|
method: "POST", |
||||||
|
data, |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
export interface Tr069VerVO { |
||||||
|
tr069VerId?: number; |
||||||
|
tr069VerName?: string; |
||||||
|
tr069VerDesc?: string; |
||||||
|
fileName?: string; |
||||||
|
fileId?: number; |
||||||
|
} |
||||||
|
export type Tr069VerPageResult = PageResult<Tr069VerVO[]>; |
||||||
|
export interface Tr069VerForm { |
||||||
|
tr069VerId?: number; |
||||||
|
tr069VerName?: string; |
||||||
|
tr069VerDesc?: string; |
||||||
|
fileId?: number; |
||||||
|
} |
||||||
|
|
||||||
|
export interface Tr069Xml { |
||||||
|
tagName?: string; |
||||||
|
|
||||||
|
read?: string; |
||||||
|
|
||||||
|
write?: string; |
||||||
|
|
||||||
|
type?: string; |
||||||
|
|
||||||
|
children?: Array<Tr069Xml>; |
||||||
|
} |
After Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,93 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog |
||||||
|
class="com-dialog" |
||||||
|
v-model="addDevTypeVerFlag" |
||||||
|
title="新增设备类型软件版本信息" |
||||||
|
> |
||||||
|
<el-form |
||||||
|
ref="addDevTypeVerFormRef" |
||||||
|
:rules="rules" |
||||||
|
:model="formData" |
||||||
|
v-loading="loading" |
||||||
|
label-position="top" |
||||||
|
> |
||||||
|
<el-form-item label="设备类型软件版本名称" prop="softVer"> |
||||||
|
<el-input v-model="formData.softVer" /> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item label="TR069协议版本" prop="specVer"> |
||||||
|
<el-input v-model="formData.specVer" /> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item label="适用流程" prop="provisionFlag"> |
||||||
|
<dictionary |
||||||
|
type-code="provision_flag" |
||||||
|
v-model="formData.provisionFlag" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-form-item label="设备类型软件版本描述" prop="provisionFlag"> |
||||||
|
<el-input v-model="formData.devTypeVerDesc" type="textarea" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<template #footer> |
||||||
|
<el-button type="primary" @click="submitForm(addDevTypeVerFormRef)" |
||||||
|
>确认</el-button |
||||||
|
> |
||||||
|
<el-button>取消</el-button> |
||||||
|
</template> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { DeviceTypeVerForm } from "@/api/device-type-ver/types"; |
||||||
|
import { FormInstance, FormRules } from "element-plus"; |
||||||
|
import { addTypeVer } from "@/api/device-type-ver"; |
||||||
|
|
||||||
|
const addDevTypeVerFlag = ref<boolean>(false); |
||||||
|
const loading = ref<boolean>(false); |
||||||
|
const devTypeId = ref<number>(0); |
||||||
|
const open = (devTypeId_: number) => { |
||||||
|
resetForm(addDevTypeVerFormRef.value); |
||||||
|
devTypeId.value = devTypeId_; |
||||||
|
formData.value = { provisionFlag: "0" }; |
||||||
|
addDevTypeVerFlag.value = true; |
||||||
|
}; |
||||||
|
defineExpose({ open }); |
||||||
|
|
||||||
|
const formData = ref<DeviceTypeVerForm>({ |
||||||
|
provisionFlag: "0", |
||||||
|
}); |
||||||
|
const addDevTypeVerFormRef = ref<FormInstance>(); |
||||||
|
const rules = reactive<FormRules<DeviceTypeVerForm>>({ |
||||||
|
softVer: [ |
||||||
|
{ required: true, message: "请输入设备类型软件版本名称", trigger: "blur" }, |
||||||
|
], |
||||||
|
specVer: [ |
||||||
|
{ required: true, message: "请输入TR069协议版本", trigger: "blur" }, |
||||||
|
], |
||||||
|
}); |
||||||
|
const resetForm = (formEl: FormInstance | undefined) => { |
||||||
|
if (!formEl) return; |
||||||
|
formEl.resetFields(); |
||||||
|
}; |
||||||
|
const emit = defineEmits(["success"]); |
||||||
|
const submitForm = async (formEl: FormInstance | undefined) => { |
||||||
|
if (!formEl) return; |
||||||
|
await formEl.validate((valid, fields) => { |
||||||
|
if (valid) { |
||||||
|
loading.value = true; |
||||||
|
addTypeVer(devTypeId.value, formData.value) |
||||||
|
.then(() => { |
||||||
|
emit("success"); |
||||||
|
addDevTypeVerFlag.value = false; |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped></style> |
@ -0,0 +1,112 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog |
||||||
|
class="com-dialog" |
||||||
|
v-model="tr069XmlFlag" |
||||||
|
align-center |
||||||
|
:title="title" |
||||||
|
> |
||||||
|
<el-form |
||||||
|
ref="addVendorProfileRef" |
||||||
|
v-loading="loading" |
||||||
|
:rules="rules" |
||||||
|
:model="formData" |
||||||
|
> |
||||||
|
<el-row :gutter="20"> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="文件名称" prop="fileName"> |
||||||
|
<el-input v-model="formData.fileName" /> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="文件描述信息"> |
||||||
|
<el-input v-model="formData.fileDesc" type="textarea" :rows="1" /> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-upload |
||||||
|
drag |
||||||
|
action="#" |
||||||
|
:limit="1" |
||||||
|
:auto-upload="false" |
||||||
|
v-model:file-list="fileList" |
||||||
|
accept=".xml" |
||||||
|
> |
||||||
|
<el-icon class="el-icon--upload"><upload-filled /></el-icon> |
||||||
|
<div class="el-upload__text">拖拽上传 或 <em>点击上传</em></div> |
||||||
|
</el-upload> |
||||||
|
</el-form> |
||||||
|
<template #footer> |
||||||
|
<el-button type="primary" @click="handleUpload(addVendorProfileRef)" |
||||||
|
>保存</el-button |
||||||
|
> |
||||||
|
<el-button @click="tr069XmlFlag = false">取消</el-button> |
||||||
|
</template> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { UploadFilled } from "@element-plus/icons-vue"; |
||||||
|
import { Tr069XmlFileForm, VendorProfile } from "@/api/file/types"; |
||||||
|
import { FormInstance, FormRules, UploadUserFile } from "element-plus"; |
||||||
|
import { addTr069FileRecord, uploadApi } from "@/api/file"; |
||||||
|
|
||||||
|
const loading = ref<boolean>(false); |
||||||
|
const tr069XmlFlag = ref<boolean>(false); |
||||||
|
const addVendorProfileRef = ref(); |
||||||
|
const fileList = ref<UploadUserFile[]>([]); |
||||||
|
const formData = ref<Tr069XmlFileForm>({}); |
||||||
|
const title = ref<string>(""); |
||||||
|
const open = (fileType_?: string, title_?: string) => { |
||||||
|
resetForm(addVendorProfileRef.value); |
||||||
|
fileList.value = []; |
||||||
|
formData.value = { |
||||||
|
fileType: fileType_, |
||||||
|
}; |
||||||
|
if (title_ != null) { |
||||||
|
title.value = title_; |
||||||
|
} |
||||||
|
tr069XmlFlag.value = true; |
||||||
|
}; |
||||||
|
defineExpose({ open }); |
||||||
|
const rules = reactive<FormRules<VendorProfile>>({ |
||||||
|
fileName: [{ required: true, message: "请填写文件名称", trigger: "blur" }], |
||||||
|
}); |
||||||
|
const resetForm = (formEl: FormInstance | undefined) => { |
||||||
|
if (!formEl) return; |
||||||
|
formEl.resetFields(); |
||||||
|
}; |
||||||
|
const handleUpload = async (formEl: FormInstance | undefined) => { |
||||||
|
if (fileList.value.length === 0) { |
||||||
|
ElMessage.error("请选择文件上传"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (!formEl) return; |
||||||
|
await formEl.validate((valid, fields) => { |
||||||
|
if (valid) { |
||||||
|
loading.value = true; |
||||||
|
const file = fileList.value[0].raw; |
||||||
|
const dotIndex: any = file?.name.lastIndexOf("."); |
||||||
|
if (dotIndex === -1) { |
||||||
|
ElMessage.error("文件没有后缀,无法上传"); |
||||||
|
return; |
||||||
|
} |
||||||
|
const fileName = formData.value.fileName; |
||||||
|
const fileType = formData.value.fileType; |
||||||
|
formData.value.fileName = |
||||||
|
fileName + "." + file?.name.substring(dotIndex + 1); |
||||||
|
uploadApi(file, fileName, fileType) |
||||||
|
.then(({ data }) => { |
||||||
|
formData.value.fileUrl = data; |
||||||
|
addTr069FileRecord(formData.value).then(() => { |
||||||
|
tr069XmlFlag.value = false; |
||||||
|
}); |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped></style> |
@ -0,0 +1,198 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-card shadow="never"> |
||||||
|
<el-form |
||||||
|
:model="formData" |
||||||
|
:rules="rules" |
||||||
|
v-loading="loadingForm" |
||||||
|
ref="tr069FormRef" |
||||||
|
> |
||||||
|
<el-descriptions title="TR-069参数树模型" :column="2" border> |
||||||
|
<template #extra> |
||||||
|
<el-button type="primary" @click="submitForm(tr069FormRef)" |
||||||
|
><el-icon><EditPen /></el-icon>保存</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
<el-descriptions-item |
||||||
|
label="TR-069数据模型版本" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item style="margin-bottom: 0" prop="fileId"> |
||||||
|
<el-select v-model="formData.fileId"> |
||||||
|
<el-option |
||||||
|
v-for="item in tr069FileOption" |
||||||
|
:key="item.value" |
||||||
|
:label="item.label" |
||||||
|
:value="item.value" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
<el-descriptions-item |
||||||
|
label="TR-069数据模型版本名称" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item prop="tr069VerName" style="margin-bottom: 0"> |
||||||
|
<el-input v-model="formData.tr069VerName" /> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
<el-descriptions-item |
||||||
|
label="TR-069描述" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item prop="tr069VerDesc" style="margin-bottom: 0"> |
||||||
|
<el-input type="textarea" v-model="formData.tr069VerDesc" /> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
</el-descriptions> |
||||||
|
</el-form> |
||||||
|
<div class="tree"> |
||||||
|
<el-scrollbar max-height="300"> |
||||||
|
<el-tree |
||||||
|
ref="folderTreeRef" |
||||||
|
v-loading="treeLoading" |
||||||
|
:highlight-current="true" |
||||||
|
:data="treeList" |
||||||
|
:props="{ children: 'children', label: 'tagName', disabled: '' }" |
||||||
|
:expand-on-click-node="false" |
||||||
|
default-expand-all |
||||||
|
> |
||||||
|
<template #default="{ node }"> |
||||||
|
<div class="custom-tree-node"> |
||||||
|
<span> |
||||||
|
<span> |
||||||
|
<svg-icon class="mr-5px" icon-class="folder" /> |
||||||
|
</span> |
||||||
|
<span>{{ node.label }}</span> |
||||||
|
</span> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</el-tree> |
||||||
|
</el-scrollbar> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { Tr069VerForm, Tr069Xml } from "@/api/tr069/types"; |
||||||
|
import { EditPen } from "@element-plus/icons-vue"; |
||||||
|
import { |
||||||
|
addTr069, |
||||||
|
editTr069, |
||||||
|
getTr069Form, |
||||||
|
getTr069XmlOption, |
||||||
|
getTr069XmlTree |
||||||
|
} from "@/api/tr069"; |
||||||
|
import { FormInstance, FormRules } from "element-plus"; |
||||||
|
|
||||||
|
const route = useRoute(); |
||||||
|
let tr069VerId: number = parseInt(<string>route.params?.tr069VerId); |
||||||
|
let fileId: number = parseInt(<string>route.params?.fileId); |
||||||
|
const formData = ref<Tr069VerForm>({}); |
||||||
|
const treeLoading = ref<boolean>(false); |
||||||
|
const treeList = ref<Tr069Xml[]>([]); |
||||||
|
const tr069FormRef = ref<FormInstance>(); |
||||||
|
const rules = reactive<FormRules<Tr069VerForm>>({ |
||||||
|
fileId: [{ required: true, message: "请选择tr069文件", trigger: "blur" }], |
||||||
|
tr069VerName: [ |
||||||
|
{ required: true, message: "请输入tr069名称", trigger: "blur" }, |
||||||
|
], |
||||||
|
}); |
||||||
|
const loadTr069Xml = async () => { |
||||||
|
treeLoading.value = true; |
||||||
|
treeList.value = []; |
||||||
|
await getTr069XmlTree(formData.value.fileId) |
||||||
|
.then(({ data }) => { |
||||||
|
treeList.value.push(data); |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
treeLoading.value = false; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const tr069FileOption = ref<OptionType[]>([]); |
||||||
|
const loadTr069FileOption = async () => { |
||||||
|
await getTr069XmlOption().then(({ data }) => { |
||||||
|
tr069FileOption.value = data; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const loadingForm = ref<boolean>(false); |
||||||
|
const loadTr069FormData = async () => { |
||||||
|
loadingForm.value = true; |
||||||
|
await getTr069Form(tr069VerId) |
||||||
|
.then(({ data }) => { |
||||||
|
formData.value = data; |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loadingForm.value = false; |
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
const handleEdit = () => { |
||||||
|
loadingForm.value = true; |
||||||
|
editTr069(formData.value) |
||||||
|
.then(() => { |
||||||
|
ElMessage.success("操作成功"); |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loadingForm.value = false; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const handleAdd = () => { |
||||||
|
loadingForm.value = true; |
||||||
|
addTr069(formData.value) |
||||||
|
.then(() => { |
||||||
|
ElMessage.success("操作成功"); |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loadingForm.value = false; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const submitForm = async (formEl: FormInstance | undefined) => { |
||||||
|
if (!formEl) return; |
||||||
|
await formEl.validate((valid, fields) => { |
||||||
|
if (valid) { |
||||||
|
if (tr069VerId !== -999) { |
||||||
|
handleEdit(); |
||||||
|
} else { |
||||||
|
handleAdd(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
}; |
||||||
|
watch( |
||||||
|
() => formData.value.fileId, |
||||||
|
() => { |
||||||
|
loadTr069Xml(); |
||||||
|
} |
||||||
|
); |
||||||
|
onMounted(() => { |
||||||
|
loadTr069FileOption(); |
||||||
|
if (tr069VerId !== -999) { |
||||||
|
formData.value.fileId = fileId; |
||||||
|
loadTr069FormData(); |
||||||
|
} |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
:deep(.my-label) { |
||||||
|
background: var(--el-color-white) !important; |
||||||
|
} |
||||||
|
.tree { |
||||||
|
margin-top: 10px; |
||||||
|
border: 1px solid var(--el-border-color-dark); |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,115 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-card shadow="never"> |
||||||
|
<template #header> |
||||||
|
<div style="display: flex; justify-content: flex-end"> |
||||||
|
<div> |
||||||
|
<el-button type="primary" plain @click="goto(-999, -999)" |
||||||
|
><i-ep-plus />新增</el-button |
||||||
|
> |
||||||
|
<el-button type="primary" @click="openTr069FileForm" plain |
||||||
|
><i-ep-plus />导入TR069文件</el-button |
||||||
|
> |
||||||
|
<el-button @click="loadTr069Page" plain><i-ep-refresh /></el-button> |
||||||
|
<el-button type="danger" plain><i-ep-delete />删除</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<div class="any-table"> |
||||||
|
<el-table :data="tableData" v-loading="loading"> |
||||||
|
<el-table-column |
||||||
|
label="TR-069数据模型版本名称" |
||||||
|
align="center" |
||||||
|
prop="tr069VerName" |
||||||
|
> |
||||||
|
<template #default="scope"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
@click="goto(scope.row.tr069VerId, scope.row.fileId)" |
||||||
|
link |
||||||
|
>{{ scope.row.tr069VerName }}</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="TR-069数据模型版本文件名称" |
||||||
|
align="center" |
||||||
|
prop="fileName" |
||||||
|
> |
||||||
|
<template #default="scope"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleDownload(scope.row.fileId)" |
||||||
|
>{{ scope.row.fileName }} |
||||||
|
</el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="TR-069数据模型版本描述" |
||||||
|
align="center" |
||||||
|
prop="tr069VerDesc" |
||||||
|
/> |
||||||
|
</el-table> |
||||||
|
<pagination |
||||||
|
v-if="total > 0" |
||||||
|
v-model:total="total" |
||||||
|
v-model:page="query.pageNum" |
||||||
|
v-model:limit="query.pageSize" |
||||||
|
@pagination="loadTr069Page" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
<add-tr069-file ref="addTr069FileRef" /> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { Tr069VerVO } from "@/api/tr069/types"; |
||||||
|
import { getTr069Page } from "@/api/tr069"; |
||||||
|
import { downloadFileApi } from "@/api/file"; |
||||||
|
import { downloadHook } from "@/utils"; |
||||||
|
import AddTr069File from "@/views/resources/tr069/components/AddTr069File.vue"; |
||||||
|
defineOptions({ |
||||||
|
name: "Tr069", |
||||||
|
inheritAttrs: false, |
||||||
|
}); |
||||||
|
const loading = ref<boolean>(false); |
||||||
|
const tableData = ref<Tr069VerVO[]>([]); |
||||||
|
const query = ref<PageQuery>({ |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 10, |
||||||
|
}); |
||||||
|
const total = ref<number>(0); |
||||||
|
const loadTr069Page = () => { |
||||||
|
loading.value = true; |
||||||
|
getTr069Page(query.value) |
||||||
|
.then(({ data }) => { |
||||||
|
total.value = data.total; |
||||||
|
tableData.value = data.list; |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const handleDownload = (fileId: number) => { |
||||||
|
downloadFileApi(fileId).then((res) => { |
||||||
|
downloadHook(res); |
||||||
|
}); |
||||||
|
}; |
||||||
|
const router = useRouter(); |
||||||
|
const goto = (tr069VerId?: number, fileId?: number) => { |
||||||
|
router.push({ |
||||||
|
path: `/resources/tr069-tree/${tr069VerId}/${fileId}`, |
||||||
|
}); |
||||||
|
}; |
||||||
|
const addTr069FileRef = ref(); |
||||||
|
const openTr069FileForm = () => { |
||||||
|
addTr069FileRef.value.open("3", "新增TR-069数据模型文件"); |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
loadTr069Page(); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped></style> |
Loading…
Reference in new issue