feat: 远程操作/样式更换

master
李小林 8 months ago
parent 832bf3bf66
commit f1f6d2415c
  1. 12
      src/api/remote/index.ts
  2. 13
      src/router/index.ts
  3. 35
      src/views/family/operate/remote-operation/components/RemoteOperateInfo.vue
  4. 10
      src/views/family/operate/remote-operation/components/RemoteOperateList.vue
  5. 20
      src/views/family/operate/remote-operation/components/UpgradeSoftVer.vue
  6. 111
      src/views/family/operate/remote-operation/components/VendorProfiles.vue
  7. 38
      src/views/resources/customer/components/AddCustom.vue
  8. 19
      src/views/resources/device-type/components/DeviceTypeToVer.vue
  9. 47
      src/views/resources/device-type/components/DeviceTypeVersionEdit.vue
  10. 20
      src/views/resources/equipment/components/AddEquipment.vue
  11. 41
      src/views/resources/equipment/components/EquipmentEdit.vue
  12. 25
      src/views/resources/operate-type/components/AddOperateType.vue
  13. 36
      src/views/resources/service/components/BusinessForm.vue
  14. 6
      src/views/resources/tr069/components/BindingDevType.vue
  15. 6
      src/views/resources/tr069/components/BindingService.vue
  16. 14
      src/views/resources/tr069/components/Tr069DevTypeSoftVerList.vue
  17. 6
      src/views/resources/tr069/components/Tr069Service.vue
  18. 14
      src/views/resources/tr069/components/Tr069Tree.vue

@ -152,3 +152,15 @@ export function remoteOpenRegister(devId: number, fileId?: number) {
method: "GET", method: "GET",
}); });
} }
export function setAccountPassword(devId?: number) {
return request({
url: `/api/equipment/v1/remote/account-password/${devId}`,
method: "GET",
});
}
export function remoteVendorProfile(devId: number, fileId?: number) {
return request({
url: `/api/equipment/v1/remote/vendor-profile/${devId}/${fileId}`,
method: "GET",
});
}

@ -371,6 +371,19 @@ export const constantRoutes: RouteRecordRaw[] = [
title: "软件版本升级", title: "软件版本升级",
}, },
}, },
{
path: "/resources/remote/vendor-profiles/:devId/:typeAndVerId",
name: "VendorProfiles",
component: () =>
import(
"@/views/family/operate/remote-operation/components/VendorProfiles.vue"
),
meta: {
hidden: true,
keepAlive: true,
title: "配置文件下发",
},
},
], ],
}, },
]; ];

@ -103,7 +103,14 @@
class-name="my-content" class-name="my-content"
width="150px" width="150px"
> >
{{ remote.devRemark1 }} <el-button
v-loading="pwdLoading"
type="primary"
link
@click="setAccountPwd"
>
{{ remote.devRemark1 }}</el-button
>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item <el-descriptions-item
label="逻辑ID" label="逻辑ID"
@ -206,7 +213,11 @@
width="150px" width="150px"
> >
<div class="flex justify-center"> <div class="flex justify-center">
<remote-operate-list :pppoe="remote.devPppoe" :dev-id="devId" /> <remote-operate-list
:pppoe="remote.devPppoe"
:dev-id="devId"
:type-and-ver-id="typeAndVerId"
/>
<el-divider direction="vertical" /> <el-divider direction="vertical" />
<el-button type="primary" link @click="skipDevOrder" <el-button type="primary" link @click="skipDevOrder"
>设备工单</el-button >设备工单</el-button
@ -252,10 +263,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { DeviceInfo, RemoteDevInfoVO, UnBindingForm } from "@/api/remote/types"; import { DeviceInfo, RemoteDevInfoVO, UnBindingForm } from "@/api/remote/types";
import { remoteDevInfo, remoteUnbindingLogicId } from "@/api/remote"; import {
remoteDevInfo,
remoteUnbindingLogicId,
setAccountPassword,
} from "@/api/remote";
import { Grid, InfoFilled } from "@element-plus/icons-vue"; import { Grid, InfoFilled } from "@element-plus/icons-vue";
import OperateTabs from "@/views/family/operate/remote-operation/components/OperateTabs.vue"; import OperateTabs from "@/views/family/operate/remote-operation/components/OperateTabs.vue";
import RemoteOperateList from "@/views/family/operate/remote-operation/components/RemoteOperateList.vue"; import RemoteOperateList from "@/views/family/operate/remote-operation/components/RemoteOperateList.vue";
import { confirm } from "@/utils/confirm";
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
@ -265,6 +281,7 @@ let typeAndVerId: number = parseInt(<string>route.params.typeAndVerId);
const remote = ref<RemoteDevInfoVO>({}); const remote = ref<RemoteDevInfoVO>({});
const unbindingForm = ref<UnBindingForm>({}); const unbindingForm = ref<UnBindingForm>({});
const loading = ref<boolean>(false); const loading = ref<boolean>(false);
const pwdLoading = ref<boolean>(false);
const dynamic = ref<DeviceInfo>({}); const dynamic = ref<DeviceInfo>({});
provide("dynamic", dynamic); provide("dynamic", dynamic);
const getData = () => { const getData = () => {
@ -309,6 +326,18 @@ const unbindingLogicId = () => {
loading.value = false; loading.value = false;
}); });
}; };
const setAccountPwd = () => {
confirm("确定执行设置电信账号密码操作吗", () => {
pwdLoading.value = true;
setAccountPassword(remote.value.devId)
.then(() => {
getData();
})
.finally(() => {
pwdLoading.value = false;
});
});
};
// //
const skipDevOrder = () => { const skipDevOrder = () => {
let devAdNo = remote.value.devAdNo; let devAdNo = remote.value.devAdNo;

@ -36,7 +36,9 @@
</el-dropdown-item> </el-dropdown-item>
</div> </div>
<div v-hasPerm="['family:remote:profiles:issued']"> <div v-hasPerm="['family:remote:profiles:issued']">
<el-dropdown-item divided>设备厂商配置文件下发 </el-dropdown-item> <el-dropdown-item @click="vendorProfile" divided
>设备厂商配置文件下发
</el-dropdown-item>
</div> </div>
<div v-hasPerm="['family:remote:full_service:issued']"> <div v-hasPerm="['family:remote:full_service:issued']">
<el-dropdown-item divided>设备全业务配置下发 </el-dropdown-item> <el-dropdown-item divided>设备全业务配置下发 </el-dropdown-item>
@ -126,6 +128,7 @@ const router = useRouter();
const prop = defineProps<{ const prop = defineProps<{
devId: number; devId: number;
pppoe?: string; pppoe?: string;
typeAndVerId: number;
}>(); }>();
const loading = ref<boolean>(false); const loading = ref<boolean>(false);
const openPing = () => { const openPing = () => {
@ -213,6 +216,11 @@ const upgradeSoftVer = () => {
path: `/resources/remote/upgrade-soft-ver/${prop.devId}`, path: `/resources/remote/upgrade-soft-ver/${prop.devId}`,
}); });
}; };
const vendorProfile = () => {
router.push({
path: `/resources/remote/vendor-profiles/${prop.devId}/${prop.typeAndVerId}`,
});
};
const registration = () => { const registration = () => {
confirm("确认开启终端注册页面吗", () => { confirm("确认开启终端注册页面吗", () => {
loading.value = true; loading.value = true;

@ -9,6 +9,15 @@
>设备软件版本升级--软件版本列表</span >设备软件版本升级--软件版本列表</span
> >
</div> </div>
<div>
<el-button
type="primary"
:icon="Position"
:disabled="loading"
@click="submit"
>执行</el-button
>
</div>
</div> </div>
</template> </template>
<div class="any-table"> <div class="any-table">
@ -27,7 +36,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
width="200" width="300"
label="版本名称" label="版本名称"
align="center" align="center"
prop="softVer" prop="softVer"
@ -39,19 +48,12 @@
/> />
</el-table> </el-table>
</div> </div>
<template #footer>
<div class="flex justify-end">
<el-button type="primary" :disabled="loading" @click="submit"
>确定</el-button
>
</div>
</template>
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Grid } from "@element-plus/icons-vue"; import { Grid, Position } from "@element-plus/icons-vue";
import { SoftVersionUpgradeVO } from "@/api/device-type-ver/types"; import { SoftVersionUpgradeVO } from "@/api/device-type-ver/types";
import { ElTable } from "element-plus"; import { ElTable } from "element-plus";
import { upgradeSoftVerTable } from "@/api/device-type-ver"; import { upgradeSoftVerTable } from "@/api/device-type-ver";

@ -0,0 +1,111 @@
<template>
<div class="app-container">
<el-card shadow="never">
<template #header>
<div class="flex justify-between">
<div style="display: flex; align-items: center">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>厂商配置文件列表</span
>
</div>
<div>
<el-button type="primary" :icon="Position" @click="submit"
>执行</el-button
>
</div>
</div>
</template>
<div class="any-table">
<el-table
:data="tableData"
v-loading="loading"
highlight-current-row
@row-click="handleCurrentChange"
>
<el-table-column width="55">
<template #default="scope">
<el-radio :label="scope.row.fileId" v-model="fileId">
{{ "" }}
</el-radio>
</template>
</el-table-column>
<el-table-column
label="厂商配置文件"
prop="fileName"
align="center"
/>
<el-table-column
label="文件创建时间"
prop="fileCreateTime"
align="center"
/>
<el-table-column
label="文件描述内容"
prop="fileDesc"
align="center"
/>
</el-table>
</div>
</el-card>
</div>
</template>
<script setup lang="ts">
import { Grid, Position } from "@element-plus/icons-vue";
import { FileListVO } from "@/api/file-list/types";
import { listVendorProfile } from "@/api/device-type-ver";
import { ElTable } from "element-plus";
import { SoftVersionUpgradeVO } from "@/api/device-type-ver/types";
import { remoteVendorProfile } from "@/api/remote";
const route = useRoute();
let devId: number = parseInt(<string>route.params.devId);
let typeAndVerId: number = parseInt(<string>route.params.typeAndVerId);
const tableData = ref<FileListVO[]>([]);
const loading = ref<boolean>(false);
const fileId = ref<number>();
const handleCurrentChange = (val: SoftVersionUpgradeVO) => {
fileId.value = val.fileId;
};
const getData = () => {
loading.value = true;
listVendorProfile(typeAndVerId)
.then(({ data }) => {
tableData.value = data;
})
.finally(() => {
loading.value = false;
});
};
const submit = () => {
if (fileId.value === undefined) {
ElMessage({
message: "请选择一个设备厂商文件",
duration: 1000,
type: "error",
});
return;
}
loading.value = true;
remoteVendorProfile(devId, fileId.value)
.then(() => {
ElMessage({
message: "操作成功",
type: "success",
duration: 1000,
});
})
.finally(() => {
loading.value = false;
});
};
onMounted(() => {
getData();
});
</script>
<style scoped>
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style>

@ -3,16 +3,13 @@
<div v-show="active === 1"> <div v-show="active === 1">
<el-card shadow="never" v-loading="loading"> <el-card shadow="never" v-loading="loading">
<template #header> <template #header>
<div <div style="display: flex; justify-content: space-between">
style=" <div style="display: flex; align-items: center; margin-left: 3px">
font-weight: 700; <el-icon size="15"><Grid /></el-icon>&nbsp;<span
font-size: 14px; style="font-weight: 700; font-size: 14px; line-height: 16px"
line-height: 32px; >新增客户信息</span
display: flex;
justify-content: space-between;
"
> >
<div>新增客户信息</div> </div>
<div v-if="formData.custId === undefined"> <div v-if="formData.custId === undefined">
<el-button <el-button
type="primary" type="primary"
@ -192,16 +189,13 @@
</el-card> </el-card>
<el-card shadow="never" style="margin-top: 10px"> <el-card shadow="never" style="margin-top: 10px">
<template #header> <template #header>
<div <div style="display: flex; justify-content: space-between">
style=" <div style="display: flex; align-items: center; margin-left: 3px">
font-weight: 700; <el-icon size="15"><Grid /></el-icon>&nbsp;<span
font-size: 14px; style="font-weight: 700; font-size: 14px; line-height: 16px"
line-height: 32px; >客户绑定的设备信息列表</span
display: flex;
justify-content: space-between;
"
> >
<div>客户绑定的设备信息列表</div> </div>
<div> <div>
<el-button <el-button
type="primary" type="primary"
@ -423,7 +417,13 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { InfoFilled, Position, Refresh, Search } from "@element-plus/icons-vue"; import {
Grid,
InfoFilled,
Position,
Refresh,
Search,
} from "@element-plus/icons-vue";
import { CustomForm } from "@/api/customer/types"; import { CustomForm } from "@/api/customer/types";
import { ElTable, FormInstance, FormRules } from "element-plus"; import { ElTable, FormInstance, FormRules } from "element-plus";
import { getDomainOptions } from "@/api/domain"; import { getDomainOptions } from "@/api/domain";

@ -2,7 +2,15 @@
<div class="app-container"> <div class="app-container">
<el-card shadow="never"> <el-card shadow="never">
<div v-loading="voLoading"> <div v-loading="voLoading">
<el-descriptions title="设备类型信息" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备类型信息</span
>
</div>
</template>
<el-descriptions-item <el-descriptions-item
label="设备供应商" label="设备供应商"
label-align="left" label-align="left"
@ -57,8 +65,11 @@
</div> </div>
<div class="mt-4"> <div class="mt-4">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<div style="font-weight: 700; line-height: 32px; font-size: 14px"> <div style="display: flex; align-items: center">
设备类型对应的设备软件版本列表 <el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备类型对应的设备软件版本列表</span
>
</div> </div>
<div> <div>
<el-button type="primary" @click="openAddTypeVer"> <el-button type="primary" @click="openAddTypeVer">
@ -242,7 +253,7 @@ import {
import { findDevTypeById } from "@/api/device-type"; import { findDevTypeById } from "@/api/device-type";
import { downloadFileApi } from "@/api/file"; import { downloadFileApi } from "@/api/file";
import { downloadHook } from "@/utils"; import { downloadHook } from "@/utils";
import { DocumentCopy, InfoFilled, View } from "@element-plus/icons-vue"; import { DocumentCopy, Grid, InfoFilled, View } from "@element-plus/icons-vue";
import AddDevTypeVersion from "@/views/resources/device-type/components/AddDevTypeVersion.vue"; import AddDevTypeVersion from "@/views/resources/device-type/components/AddDevTypeVersion.vue";
import AddFile from "@/views/resources/device-type/components/AddFile.vue"; import AddFile from "@/views/resources/device-type/components/AddFile.vue";

@ -8,7 +8,15 @@
:rules="rules" :rules="rules"
v-loading="loading" v-loading="loading"
> >
<el-descriptions title="设备类型软件版本信息" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备类型软件版本信息</span
>
</div>
</template>
<template #extra> <template #extra>
<el-button @click="submitForm(typeVerFormRef)" type="primary" <el-button @click="submitForm(typeVerFormRef)" type="primary"
><el-icon><EditPen /></el-icon></el-button ><el-icon><EditPen /></el-icon></el-button
@ -210,7 +218,19 @@
ref="capabilityFormRef" ref="capabilityFormRef"
v-loading="loadingCapability" v-loading="loadingCapability"
> >
<el-descriptions title="设备能力信息" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="
font-weight: 700;
font-size: 14px;
line-height: 16px;
"
>设备能力信息</span
>
</div>
</template>
<template #extra> <template #extra>
<el-button @click="submitCapabilityForm" type="primary" <el-button @click="submitCapabilityForm" type="primary"
><el-icon><EditPen /></el-icon></el-button ><el-icon><EditPen /></el-icon></el-button
@ -422,8 +442,11 @@
</div> </div>
<div class="mt-4"> <div class="mt-4">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<div style="font-weight: 700; line-height: 32px; font-size: 14px"> <div style="display: flex; align-items: center">
设备类型及设备软件版本支持的设备厂商配置文件列表 <el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备类型及设备软件版本支持的设备厂商配置文件列表</span
>
</div> </div>
<div> <div>
<el-button type="primary" @click="openVendorProfile" <el-button type="primary" @click="openVendorProfile"
@ -470,8 +493,11 @@
</div> </div>
<div class="mt-4"> <div class="mt-4">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<div style="font-weight: 700; line-height: 32px; font-size: 14px"> <div style="display: flex; align-items: center">
已绑定系统管理域 <el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>已绑定系统管理域</span
>
</div> </div>
<div> <div>
<el-button type="primary" @click="openDomainTree" <el-button type="primary" @click="openDomainTree"
@ -500,8 +526,11 @@
</div> </div>
<div class="mt-4"> <div class="mt-4">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<div style="font-weight: 700; line-height: 32px; font-size: 14px"> <div style="display: flex; align-items: center">
设备类型及设备软件版本支持的业务信息列表 <el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备类型及设备软件版本支持的业务信息列表</span
>
</div> </div>
</div> </div>
<div class="any-table mt-4"> <div class="any-table mt-4">
@ -556,7 +585,7 @@ import {
pageService, pageService,
pageSysDomain, pageSysDomain,
} from "@/api/device-type-ver"; } from "@/api/device-type-ver";
import { EditPen, InfoFilled } from "@element-plus/icons-vue"; import { EditPen, Grid, InfoFilled } from "@element-plus/icons-vue";
import { FormInstance, FormRules } from "element-plus"; import { FormInstance, FormRules } from "element-plus";
import { editCapabilityForm, getCapabilityForm } from "@/api/type-ver-ext"; import { editCapabilityForm, getCapabilityForm } from "@/api/type-ver-ext";
import { CapabilityForm } from "@/api/type-ver-ext/types"; import { CapabilityForm } from "@/api/type-ver-ext/types";

@ -120,6 +120,14 @@
:rules="rules" :rules="rules"
> >
<el-descriptions title="新增设备信息" :column="2" border> <el-descriptions title="新增设备信息" :column="2" border>
<template #title>
<div style="display: flex; align-items: center; margin-left: 3px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>新增设备信息</span
>
</div>
</template>
<el-descriptions-item <el-descriptions-item
label="设备序列号" label="设备序列号"
label-align="left" label-align="left"
@ -229,7 +237,15 @@
<div v-show="active === 2"> <div v-show="active === 2">
<el-card shadow="never"> <el-card shadow="never">
<el-form :model="fileForm" v-loading="loading"> <el-form :model="fileForm" v-loading="loading">
<el-descriptions title="终端私有配置文件" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center; margin-left: 3px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>终端私有配置文件</span
>
</div>
</template>
<el-descriptions-item <el-descriptions-item
label="文件名称" label="文件名称"
label-align="left" label-align="left"
@ -408,7 +424,7 @@ import {
PrivateProfile, PrivateProfile,
} from "@/api/resources-equipment/types"; } from "@/api/resources-equipment/types";
import { getDomainOptions } from "@/api/domain"; import { getDomainOptions } from "@/api/domain";
import { Position, Search, UploadFilled } from "@element-plus/icons-vue"; import { Grid, Position, Search, UploadFilled } from "@element-plus/icons-vue";
import { uploadApi } from "@/api/file"; import { uploadApi } from "@/api/file";
import { import {
addResourceEquipment, addResourceEquipment,

@ -16,7 +16,15 @@
</template> </template>
<el-scrollbar height="500"> <el-scrollbar height="500">
<el-form :model="editForm" ref="editFormRef" :rules="rules"> <el-form :model="editForm" ref="editFormRef" :rules="rules">
<el-descriptions title="设备详细信息" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center; margin-left: 3px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备详细信息</span
>
</div>
</template>
<el-descriptions-item <el-descriptions-item
label="设备序列号" label="设备序列号"
label-align="left" label-align="left"
@ -207,12 +215,15 @@
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-form> </el-form>
<el-descriptions <el-descriptions style="margin-top: 10px" :column="2" border>
title="设备类型信息" <template #title>
style="margin-top: 10px" <div style="display: flex; align-items: center; margin-left: 3px">
:column="2" <el-icon size="15"><Grid /></el-icon>&nbsp;<span
border style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备类型信息</span
> >
</div>
</template>
<el-descriptions-item <el-descriptions-item
label="设备供应商" label="设备供应商"
label-align="left" label-align="left"
@ -294,12 +305,15 @@
{{ type.softVer }} {{ type.softVer }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-descriptions <el-descriptions style="margin-top: 10px" :column="2" border>
title="客户信息" <template #title>
style="margin-top: 10px" <div style="display: flex; align-items: center; margin-left: 3px">
:column="2" <el-icon size="15"><Grid /></el-icon>&nbsp;<span
border style="font-weight: 700; font-size: 14px; line-height: 16px"
>客户信息</span
> >
</div>
</template>
<template #extra> <template #extra>
<div v-if="customer.custId != undefined"> <div v-if="customer.custId != undefined">
<el-popconfirm <el-popconfirm
@ -427,7 +441,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { InfoFilled, Position, Refresh } from "@element-plus/icons-vue"; import { Grid, InfoFilled, Position, Refresh } from "@element-plus/icons-vue";
import { import {
editResourceEquipment, editResourceEquipment,
getResourceDeviceDetail, getResourceDeviceDetail,
@ -511,4 +525,7 @@ onMounted(() => {
:deep(.el-scrollbar__thumb) { :deep(.el-scrollbar__thumb) {
display: none; display: none;
} }
:deep(.el-card__body) {
padding: 10px 5px;
}
</style> </style>

@ -2,7 +2,13 @@
<div class="app-container"> <div class="app-container">
<el-card shadow="never"> <el-card shadow="never">
<template #header> <template #header>
<div style="display: flex; justify-content: flex-end"> <div class="flex justify-between">
<div style="display: flex; align-items: center; margin-left: 3px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>新增操作组件表单</span
>
</div>
<el-button type="primary" @click="submit">保存</el-button> <el-button type="primary" @click="submit">保存</el-button>
</div> </div>
</template> </template>
@ -12,7 +18,7 @@
ref="addOperateFormRef" ref="addOperateFormRef"
:rules="rules" :rules="rules"
> >
<el-descriptions title="新增操作组件表单" :column="2" border> <el-descriptions :column="2" border>
<el-descriptions-item <el-descriptions-item
label="操作名称" label="操作名称"
label-align="left" label-align="left"
@ -68,7 +74,15 @@
style="margin-top: 10px" style="margin-top: 10px"
:rules="fileRules" :rules="fileRules"
> >
<el-descriptions title="文件信息表单" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center; margin-left: 10px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>文件信息表单</span
>
</div>
</template>
<el-descriptions-item <el-descriptions-item
label="操作名称" label="操作名称"
label-align="left" label-align="left"
@ -130,7 +144,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { DevOperateTypeForm, OperateFileForm } from "@/api/operate-type/types"; import { DevOperateTypeForm, OperateFileForm } from "@/api/operate-type/types";
import { UploadFilled } from "@element-plus/icons-vue"; import { Grid, UploadFilled } from "@element-plus/icons-vue";
import { FormInstance, FormRules, UploadUserFile } from "element-plus"; import { FormInstance, FormRules, UploadUserFile } from "element-plus";
import { addFileRecord, uploadApi } from "@/api/file"; import { addFileRecord, uploadApi } from "@/api/file";
import { AddOperateType } from "@/api/operate-type"; import { AddOperateType } from "@/api/operate-type";
@ -230,4 +244,7 @@ const submit = async () => {
:deep(.my-label) { :deep(.my-label) {
background: var(--el-color-white) !important; background: var(--el-color-white) !important;
} }
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style> </style>

@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <el-card shadow="never">
<div v-show="active === 0"> <div v-show="active === 0">
<el-form <el-form
:model="businessForm" :model="businessForm"
@ -9,7 +9,15 @@
v-loading="formLoading" v-loading="formLoading"
style="margin-bottom: 10px" style="margin-bottom: 10px"
> >
<el-descriptions title="业务信息表单" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center; margin-left: 3px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>业务信息表单</span
>
</div>
</template>
<template #extra v-if="businessForm.servId != undefined"> <template #extra v-if="businessForm.servId != undefined">
<div style="margin-right: 10px"> <div style="margin-right: 10px">
<el-button <el-button
@ -80,7 +88,15 @@
v-if="servId === 0" v-if="servId === 0"
style="margin-top: 10px; margin-bottom: 10px" style="margin-top: 10px; margin-bottom: 10px"
> >
<el-descriptions title="文件信息表单" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center; margin-left: 3px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>文件信息表单</span
>
</div>
</template>
<el-descriptions-item <el-descriptions-item
label="文件名称" label="文件名称"
label-align="left" label-align="left"
@ -176,8 +192,11 @@
</div> </div>
</div> </div>
<div v-show="active === 1"> <div v-show="active === 1">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; align-items: center; margin-left: 3px">
<div style="font-weight: 700">业务信息列表</div> <el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>业务信息列表</span
>
</div> </div>
<div <div
style=" style="
@ -205,13 +224,13 @@
<el-button type="primary" @click="submitBindingTr069">提交</el-button> <el-button type="primary" @click="submitBindingTr069">提交</el-button>
</div> </div>
</div> </div>
</div> </el-card>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { BusinessFile, BusinessForm, Tr069Option } from "@/api/service/types"; import { BusinessFile, BusinessForm, Tr069Option } from "@/api/service/types";
import { Position, UploadFilled } from "@element-plus/icons-vue"; import { Grid, Position, UploadFilled } from "@element-plus/icons-vue";
import { FormInstance, FormRules, UploadUserFile } from "element-plus"; import { FormInstance, FormRules, UploadUserFile } from "element-plus";
import { import {
addBusiness, addBusiness,
@ -385,6 +404,9 @@ onMounted(() => {
:deep(.my-label) { :deep(.my-label) {
background: var(--el-color-white) !important; background: var(--el-color-white) !important;
} }
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style> </style>
<style> <style>

@ -210,4 +210,8 @@ onMounted(() => {
}); });
</script> </script>
<style scoped></style> <style scoped>
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style>

@ -97,4 +97,8 @@ onMounted(() => {
}); });
</script> </script>
<style scoped></style> <style scoped>
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style>

@ -3,8 +3,11 @@
<el-card shadow="never"> <el-card shadow="never">
<div class="mb-4"> <div class="mb-4">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<div style="font-weight: 700; line-height: 32px; font-size: 14px"> <div style="display: flex; align-items: center;margin-left: 3px">
设备类型对应的设备软件版本列表 <el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>设备类型对应的设备软件版本列表</span
>
</div> </div>
<div> <div>
<el-button type="primary" @click="skipBindingDevType"> <el-button type="primary" @click="skipBindingDevType">
@ -52,6 +55,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { Tr069DevTypeQuery, Tr069DevTypeVO } from "@/api/tr069/types"; import { Tr069DevTypeQuery, Tr069DevTypeVO } from "@/api/tr069/types";
import { tr069BindingDevTypePage } from "@/api/device-type"; import { tr069BindingDevTypePage } from "@/api/device-type";
import { Grid } from "@element-plus/icons-vue";
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
@ -83,4 +87,8 @@ onMounted(() => {
}); });
</script> </script>
<style scoped></style> <style scoped>
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style>

@ -105,4 +105,8 @@ onMounted(() => {
}); });
</script> </script>
<style scoped></style> <style scoped>
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style>

@ -7,7 +7,15 @@
v-loading="loadingForm" v-loading="loadingForm"
ref="tr069FormRef" ref="tr069FormRef"
> >
<el-descriptions title="TR-069参数树模型" :column="2" border> <el-descriptions :column="2" border>
<template #title>
<div style="display: flex; align-items: center; margin-left: 3px">
<el-icon size="15"><Grid /></el-icon>&nbsp;<span
style="font-weight: 700; font-size: 14px; line-height: 16px"
>TR-069参数树模型</span
>
</div>
</template>
<template #extra> <template #extra>
<el-button type="primary" @click="submitForm(tr069FormRef)" <el-button type="primary" @click="submitForm(tr069FormRef)"
><el-icon><EditPen /></el-icon></el-button ><el-icon><EditPen /></el-icon></el-button
@ -88,13 +96,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { Tr069VerForm, Tr069Xml } from "@/api/tr069/types"; import { Tr069VerForm, Tr069Xml } from "@/api/tr069/types";
import { EditPen } from "@element-plus/icons-vue"; import { EditPen, Grid } from "@element-plus/icons-vue";
import { import {
addTr069, addTr069,
editTr069, editTr069,
getTr069Form, getTr069Form,
getTr069XmlOption, getTr069XmlOption,
getTr069XmlTree getTr069XmlTree,
} from "@/api/tr069"; } from "@/api/tr069";
import { FormInstance, FormRules } from "element-plus"; import { FormInstance, FormRules } from "element-plus";

Loading…
Cancel
Save