32
This commit is contained in:
parent
762802ff4a
commit
97703fda3c
|
|
@ -14,4 +14,4 @@ VITE_APP_ROUTER_PREFIX = '/'
|
|||
VITE_APP_UPLOAD_URL = 'Common/UploadFile'
|
||||
|
||||
#socket API
|
||||
VITE_APP_SOCKET_API = 'http://localhost:11082/msghub'
|
||||
VITE_APP_SOCKET_API = 'http://localhost:11082/msghub'
|
||||
|
|
|
|||
|
|
@ -16,4 +16,4 @@ VITE_APP_UPLOAD_URL = 'Common/UploadFile'
|
|||
VITE_APP_SOCKET_API = 'http://49.233.115.141:11082/msghub'
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip
|
||||
VITE_BUILD_COMPRESS = gzip
|
||||
|
|
|
|||
19
.env.test
Normal file
19
.env.test
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# 生产环境配置
|
||||
ENV = 'production'
|
||||
|
||||
VITE_APP_API_HOST = 'https://odf.zpc-xy.com/'
|
||||
|
||||
# 生产环境
|
||||
VITE_APP_BASE_API = 'https://odf.zpc-xy.com/'
|
||||
|
||||
# 路由前缀
|
||||
VITE_APP_ROUTER_PREFIX = '/'
|
||||
|
||||
# 默认上传地址
|
||||
VITE_APP_UPLOAD_URL = 'Common/UploadFile'
|
||||
|
||||
#socket API
|
||||
VITE_APP_SOCKET_API = 'https://odf.zpc-xy.com/msghub'
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip
|
||||
|
|
@ -9,6 +9,7 @@
|
|||
"dev": "vite",
|
||||
"build:prod": "vite build",
|
||||
"build:stage": "vite build --mode staging",
|
||||
"build:test": "vite build --mode test",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"repository": {
|
||||
|
|
|
|||
69
src/api/business/odfappupdates.js
Normal file
69
src/api/business/odfappupdates.js
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* App 更新表分页查询
|
||||
* @param {查询条件} data
|
||||
*/
|
||||
export function listOdfAppUpdates(query) {
|
||||
return request({
|
||||
url: 'business/OdfAppUpdates/list',
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增App 更新表
|
||||
* @param data
|
||||
*/
|
||||
export function addOdfAppUpdates(data) {
|
||||
return request({
|
||||
url: 'business/OdfAppUpdates/add',
|
||||
method: 'post',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
/**
|
||||
*修改App 更新表状态
|
||||
* @param {*} data {id:0,IsActive:true}
|
||||
* @returns
|
||||
*/
|
||||
export function OdfAppStatus(data) {
|
||||
return request({
|
||||
url: 'business/OdfAppUpdates/status',
|
||||
method: 'post',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 修改App 更新表
|
||||
* @param data
|
||||
*/
|
||||
export function updateOdfAppUpdates(data) {
|
||||
return request({
|
||||
url: 'business/OdfAppUpdates',
|
||||
method: 'PUT',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 获取App 更新表详情
|
||||
* @param {Id}
|
||||
*/
|
||||
export function getOdfAppUpdates(id) {
|
||||
return request({
|
||||
url: 'business/OdfAppUpdates/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除App 更新表
|
||||
* @param {主键} pid
|
||||
*/
|
||||
export function delOdfAppUpdates(pid) {
|
||||
return request({
|
||||
url: 'business/OdfAppUpdates/delete/' + pid,
|
||||
method: 'POST'
|
||||
})
|
||||
}
|
||||
|
|
@ -68,12 +68,12 @@ const props = defineProps({
|
|||
// 大小限制(MB)
|
||||
fileSize: {
|
||||
type: Number,
|
||||
default: 5
|
||||
default: 50
|
||||
},
|
||||
// 文件类型, 例如['png', 'jpg', 'jpeg']
|
||||
fileType: {
|
||||
type: Array,
|
||||
default: () => ['doc', 'xls', 'ppt', 'txt', 'pdf']
|
||||
default: () => ['doc', 'xls', 'ppt', 'txt', 'pdf', 'apk']
|
||||
},
|
||||
// 是否显示提示
|
||||
isShowTip: {
|
||||
|
|
|
|||
|
|
@ -30,18 +30,105 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="设备型号" prop="equipmentModel">
|
||||
<el-select v-model="form.equipmentModel" placeholder="请选择设备型号">
|
||||
<el-option
|
||||
v-for="item in options.odf_ports_unit_type"
|
||||
:key="item.dictValue"
|
||||
:label="item.dictLabel"
|
||||
:value="item.dictValue"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="业务类型" prop="businessType">
|
||||
<el-select v-model="form.businessType" placeholder="请选择业务类型">
|
||||
<el-option
|
||||
v-for="item in options.odf_ports_business_type"
|
||||
:key="item.dictValue"
|
||||
:label="item.dictLabel"
|
||||
:value="item.dictValue"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="业务名称" prop="businessName">
|
||||
<el-input v-model="form.businessName" placeholder="请输入业务名称(不提交)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="1号端口" prop="port1">
|
||||
<el-input v-model="form.port1" placeholder="请输入1号端口(不提交)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="2号端口" prop="port2">
|
||||
<el-input v-model="form.port2" placeholder="请输入2号端口(不提交)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="3号端口" prop="port3">
|
||||
<el-input v-model="form.port3" placeholder="请输入3号端口(不提交)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="备注" prop="remarks">
|
||||
<el-input type="textarea" v-model="form.remarks" placeholder="请输入备注" />
|
||||
<el-input type="textarea" v-model="form.remarks" placeholder="系统自动生成,禁止修改" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="历史故障表" prop="historyRemarks">
|
||||
<el-input type="textarea" v-model="form.historyRemarks" placeholder="请输入历史故障表" />
|
||||
<el-form-item label="历史故障记录" prop="historyFault">
|
||||
<div class="fault-records" style="width: 100%">
|
||||
<div v-for="(record, index) in form.historyFault" :key="index" class="fault-record-item">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item :prop="`historyFault.${index}.faultTime`" :rules="[]">
|
||||
<el-date-picker
|
||||
v-model="record.faultTime"
|
||||
type="datetime"
|
||||
placeholder="选择故障时间"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="14">
|
||||
<el-form-item :prop="`historyFault.${index}.faultReason`" :rules="[]">
|
||||
<el-input v-model="record.faultReason" placeholder="请输入故障原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<div class="fault-actions">
|
||||
<el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
icon="Delete"
|
||||
circle
|
||||
@click="removeFaultRecord(index)"
|
||||
:disabled="form.historyFault.length <= 0" />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="add-fault-record">
|
||||
<el-button type="primary" size="small" icon="Plus" @click="addFaultRecord"> 添加故障记录 </el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- <el-col :lg="24">
|
||||
<el-form-item label="历史故障说明" prop="historyRemarks">
|
||||
<el-input type="textarea" v-model="form.historyRemarks" placeholder="请输入历史故障表" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
<!-- 分隔线 -->
|
||||
<el-col :lg="24">
|
||||
<el-divider content-position="left">
|
||||
|
|
@ -132,8 +219,20 @@ const form = ref({
|
|||
portNumber: null,
|
||||
status: null,
|
||||
opticalAttenuation: null,
|
||||
equipmentModel: null,
|
||||
businessType: null,
|
||||
businessName: null,
|
||||
port1: null,
|
||||
port2: null,
|
||||
port3: null,
|
||||
remarks: null,
|
||||
historyRemarks: null,
|
||||
historyFault: [
|
||||
{
|
||||
faultTime: null,
|
||||
faultReason: null
|
||||
}
|
||||
],
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
})
|
||||
|
|
@ -151,15 +250,24 @@ const rules = {
|
|||
|
||||
// 字典选项
|
||||
const options = reactive({
|
||||
odf_ports_status: []
|
||||
odf_ports_status: [],
|
||||
// 设备型号 选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
|
||||
odf_ports_unit_type: [],
|
||||
// 业务类型 选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
|
||||
odf_ports_business_type: []
|
||||
})
|
||||
|
||||
// 获取字典数据
|
||||
var dictParams = ['odf_ports_status']
|
||||
var dictParams = ['odf_ports_status', 'odf_ports_unit_type', 'odf_ports_business_type']
|
||||
proxy.getDicts(dictParams).then((response) => {
|
||||
response.data.forEach((element) => {
|
||||
options[element.dictType] = element.list
|
||||
})
|
||||
console.debug('[OdfPortForm] dicts loaded:', {
|
||||
statusLen: options.odf_ports_status.length,
|
||||
unitTypeLen: options.odf_ports_unit_type.length,
|
||||
businessTypeLen: options.odf_ports_business_type.length
|
||||
})
|
||||
})
|
||||
|
||||
// 重置表单
|
||||
|
|
@ -178,8 +286,20 @@ function resetForm() {
|
|||
portNumber: null,
|
||||
status: null,
|
||||
opticalAttenuation: null,
|
||||
equipmentModel: null,
|
||||
businessType: null,
|
||||
businessName: null,
|
||||
port1: null,
|
||||
port2: null,
|
||||
port3: null,
|
||||
remarks: null,
|
||||
historyRemarks: null,
|
||||
historyFault: [
|
||||
{
|
||||
faultTime: null,
|
||||
faultReason: null
|
||||
}
|
||||
],
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
|
|
@ -190,11 +310,15 @@ function resetForm() {
|
|||
|
||||
// 加载数据
|
||||
function loadData() {
|
||||
console.log('[OdfPortForm] loadData merged form:')
|
||||
if (props.id) {
|
||||
getOdfPorts(props.id).then((res) => {
|
||||
const { code, data } = res
|
||||
if (code == 200) {
|
||||
form.value = { ...data }
|
||||
// 合并后端数据,保留本地不提交字段
|
||||
form.value = { ...form.value, ...data }
|
||||
console.log('[OdfPortForm] loadData merged form:', { form: { ...form.value } })
|
||||
parseRemarksToFields()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
|
|
@ -208,8 +332,15 @@ function submitForm() {
|
|||
if (valid) {
|
||||
submitLoading.value = true
|
||||
|
||||
// 提交时排除不需要提交的本地字段
|
||||
const payload = { ...form.value }
|
||||
delete payload.businessName
|
||||
delete payload.port1
|
||||
delete payload.port2
|
||||
delete payload.port3
|
||||
|
||||
if (isEdit.value) {
|
||||
updateOdfPorts(form.value)
|
||||
updateOdfPorts(payload)
|
||||
.then((res) => {
|
||||
proxy.$modal.msgSuccess('修改成功')
|
||||
handleSuccess()
|
||||
|
|
@ -218,7 +349,7 @@ function submitForm() {
|
|||
submitLoading.value = false
|
||||
})
|
||||
} else {
|
||||
addOdfPorts(form.value)
|
||||
addOdfPorts(payload)
|
||||
.then((res) => {
|
||||
proxy.$modal.msgSuccess('新增成功')
|
||||
handleSuccess()
|
||||
|
|
@ -243,6 +374,21 @@ function handleClose() {
|
|||
resetForm()
|
||||
}
|
||||
|
||||
// 添加故障记录
|
||||
function addFaultRecord() {
|
||||
form.value.historyFault.push({
|
||||
faultTime: null,
|
||||
faultReason: null
|
||||
})
|
||||
}
|
||||
|
||||
// 删除故障记录
|
||||
function removeFaultRecord(index) {
|
||||
if (form.value.historyFault.length > 0) {
|
||||
form.value.historyFault.splice(index, 1)
|
||||
}
|
||||
}
|
||||
|
||||
// 监听对话框显示状态
|
||||
watch(
|
||||
() => props.visible,
|
||||
|
|
@ -252,4 +398,164 @@ watch(
|
|||
}
|
||||
}
|
||||
)
|
||||
|
||||
// 根据选择与输入自动拼接备注
|
||||
function getDictLabel(list, value) {
|
||||
if (!Array.isArray(list)) return ''
|
||||
const hit = list.find((x) => String(x.dictValue) === String(value))
|
||||
return hit ? hit.dictLabel : ''
|
||||
}
|
||||
|
||||
function updateRemarks() {
|
||||
const equipmentLabel = getDictLabel(options.odf_ports_unit_type, form.value.equipmentModel)
|
||||
const businessTypeLabel = getDictLabel(options.odf_ports_business_type, form.value.businessType)
|
||||
const businessName = (form.value.businessName || '').trim()
|
||||
const p1 = (form.value.port1 || '').trim()
|
||||
const p2 = (form.value.port2 || '').trim()
|
||||
const p3 = (form.value.port3 || '').trim()
|
||||
const ports = [p1, p2, p3].filter((x) => x).join('/')
|
||||
const parts = [businessName, equipmentLabel, businessTypeLabel, ports].filter((x) => x)
|
||||
console.debug('[OdfPortForm] updateRemarks inputs:', {
|
||||
businessName,
|
||||
equipmentModel: form.value.equipmentModel,
|
||||
equipmentLabel,
|
||||
businessType: form.value.businessType,
|
||||
businessTypeLabel,
|
||||
p1,
|
||||
p2,
|
||||
p3,
|
||||
ports,
|
||||
parts
|
||||
})
|
||||
form.value.remarks = parts.join(' ')
|
||||
console.debug('[OdfPortForm] updateRemarks result:', form.value.remarks)
|
||||
}
|
||||
|
||||
// 监听字段变化,自动更新备注
|
||||
watch(
|
||||
() => [form.value.equipmentModel, form.value.businessType, form.value.businessName, form.value.port1, form.value.port2, form.value.port3],
|
||||
() => updateRemarks()
|
||||
)
|
||||
|
||||
// ----- 编辑态:解析备注并回填字段 -----
|
||||
const parsedFromRemarks = ref(false)
|
||||
|
||||
function areOptionsReady() {
|
||||
return (
|
||||
Array.isArray(options.odf_ports_unit_type) &&
|
||||
options.odf_ports_unit_type.length > 0 &&
|
||||
Array.isArray(options.odf_ports_business_type) &&
|
||||
options.odf_ports_business_type.length > 0
|
||||
)
|
||||
}
|
||||
|
||||
function getDictValueByLabel(list, label) {
|
||||
if (!Array.isArray(list)) return null
|
||||
const hit = list.find((x) => String(x.dictLabel) === String(label))
|
||||
return hit ? hit.dictValue : null
|
||||
}
|
||||
|
||||
function parseRemarksToFields() {
|
||||
const raw = form.value.remarks || ''
|
||||
if (!raw) return
|
||||
// 统一换行/空白为单个空格,并剔除前缀
|
||||
let remarks = raw
|
||||
.replace(/[\r\n\t]+/g, ' ')
|
||||
.replace(/\s+/g, ' ')
|
||||
.trim()
|
||||
if (!remarks) return
|
||||
remarks = remarks.replace(/^端口备注信息\s*/, '')
|
||||
console.debug('[OdfPortForm] parse start:', { raw, normalized: remarks })
|
||||
|
||||
// 提取端口部分(最后一个空格后的内容)
|
||||
const lastSpaceIdx = remarks.lastIndexOf(' ')
|
||||
if (lastSpaceIdx === -1) return
|
||||
const beforePorts = remarks.substring(0, lastSpaceIdx).trim()
|
||||
const portsStr = remarks.substring(lastSpaceIdx + 1).trim()
|
||||
console.debug('[OdfPortForm] parse split:', { beforePorts, portsStr })
|
||||
|
||||
const [p1, p2, p3] = portsStr.split('/')
|
||||
form.value.port1 = p1 || ''
|
||||
form.value.port2 = p2 || ''
|
||||
form.value.port3 = p3 || ''
|
||||
|
||||
// 分割剩余部分:业务名称 [设备型号] [业务类型]
|
||||
const tokens = beforePorts.split(' ').filter((x) => x)
|
||||
if (tokens.length >= 2) {
|
||||
const equipmentLabel = tokens[tokens.length - 2] || ''
|
||||
const businessTypeLabel = tokens[tokens.length - 1] || ''
|
||||
const nameTokens = tokens.slice(0, Math.max(0, tokens.length - 2))
|
||||
let businessName = nameTokens.join(' ').trim()
|
||||
form.value.businessName = businessName
|
||||
|
||||
const equipmentValue = getDictValueByLabel(options.odf_ports_unit_type, equipmentLabel)
|
||||
const businessTypeValue = getDictValueByLabel(options.odf_ports_business_type, businessTypeLabel)
|
||||
form.value.equipmentModel = equipmentValue
|
||||
form.value.businessType = businessTypeValue
|
||||
console.debug('[OdfPortForm] parse mapped:', {
|
||||
equipmentLabel,
|
||||
businessTypeLabel,
|
||||
businessName,
|
||||
p1: form.value.port1,
|
||||
p2: form.value.port2,
|
||||
p3: form.value.port3,
|
||||
equipmentValue,
|
||||
businessTypeValue
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function tryParseRemarks() {
|
||||
if (parsedFromRemarks.value) return
|
||||
if (!props.id) return
|
||||
if (!form.value.remarks) return
|
||||
if (!areOptionsReady()) return
|
||||
console.debug('[OdfPortForm] tryParseRemarks conditions ok, start parse')
|
||||
parseRemarksToFields()
|
||||
parsedFromRemarks.value = true
|
||||
console.debug('[OdfPortForm] tryParseRemarks done. parsedFromRemarks=', parsedFromRemarks.value)
|
||||
}
|
||||
|
||||
// 当字典或备注变更时尝试解析一次
|
||||
watch(
|
||||
() => [options.odf_ports_unit_type.length, options.odf_ports_business_type.length, form.value.remarks, props.visible],
|
||||
() => {
|
||||
if (props.visible) tryParseRemarks()
|
||||
}
|
||||
)
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.fault-records {
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
padding: 16px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.fault-record-item {
|
||||
margin-bottom: 16px;
|
||||
padding: 12px;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #e4e7ed;
|
||||
}
|
||||
|
||||
.fault-record-item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.fault-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.add-fault-record {
|
||||
text-align: center;
|
||||
margin-top: 16px;
|
||||
padding-top: 16px;
|
||||
border-top: 1px solid #e4e7ed;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,11 @@
|
|||
<el-input type="textarea" v-model="form.remarks" :disabled="isView" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="排序" prop="remarks">
|
||||
<el-input v-model.number="form.orderby" :disabled="isView" placeholder="请输入序号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- 高级 -->
|
||||
<el-col v-if="isAdd" :lg="24">
|
||||
<el-divider content-position="left">
|
||||
|
|
@ -173,7 +177,8 @@ const form = ref({
|
|||
framesCount: 9,
|
||||
rowCount: 6,
|
||||
portsCount: 12,
|
||||
defaultStatus: 0
|
||||
defaultStatus: 0,
|
||||
orderby: 0
|
||||
})
|
||||
|
||||
// 表单验证规则
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ const service = axios.create({
|
|||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: import.meta.env.VITE_APP_BASE_API,
|
||||
// 超时
|
||||
timeout: 30000
|
||||
timeout: 300000
|
||||
})
|
||||
|
||||
// request拦截器
|
||||
|
|
|
|||
335
src/views/business/OdfAppUpdates.vue
Normal file
335
src/views/business/OdfAppUpdates.vue
Normal file
|
|
@ -0,0 +1,335 @@
|
|||
<!--
|
||||
* @Descripttion: (App 更新表/odf_app_updates)
|
||||
* @Author: (admin)
|
||||
* @Date: (2025-09-23)
|
||||
-->
|
||||
<template>
|
||||
<div>
|
||||
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch" @submit.prevent>
|
||||
<el-form-item label="版本号" prop="versionCode">
|
||||
<el-input v-model.number="queryParams.versionCode" placeholder="请输入版本号" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="search" type="primary" @click="handleQuery">{{ $t('btn.search') }}</el-button>
|
||||
<el-button icon="refresh" @click="resetQuery">{{ $t('btn.reset') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 工具区域 -->
|
||||
<el-row :gutter="15" class="mb10">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" v-hasPermi="['odfappupdates:add']" plain icon="plus" @click="handleAdd">
|
||||
{{ $t('btn.add') }}
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
:data="dataList"
|
||||
v-loading="loading"
|
||||
ref="table"
|
||||
border
|
||||
header-cell-class-name="el-table-header-cell"
|
||||
highlight-current-row
|
||||
@sort-change="sortChange">
|
||||
<el-table-column prop="id" label="Id" align="center" v-if="columns.showColumn('id')" />
|
||||
<el-table-column prop="versionCode" label="版本号" align="center" v-if="columns.showColumn('versionCode')" />
|
||||
<el-table-column prop="updateType" label="更新类型" align="center" v-if="columns.showColumn('updateType')">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="options.updateTypeOptions" :value="scope.row.updateType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="downloadUrl" label="下载地址" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('downloadUrl')" />
|
||||
<el-table-column prop="isActive" label="是否启用" align="center" v-if="columns.showColumn('isActive')">
|
||||
<template #default="scope">
|
||||
<el-switch v-model="scope.row.isActive" :before-change="() => handleStatusBeforeChange(scope.row)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="160">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
type="success"
|
||||
size="small"
|
||||
icon="edit"
|
||||
title="编辑"
|
||||
v-hasPermi="['odfappupdates:edit']"
|
||||
@click="handleUpdate(scope.row)"></el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
icon="delete"
|
||||
title="删除"
|
||||
v-hasPermi="['odfappupdates:delete']"
|
||||
@click="handleDelete(scope.row)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<el-dialog :title="title" :lock-scroll="false" v-model="open">
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="版本号" prop="versionCode">
|
||||
<el-input v-model.number="form.versionCode" placeholder="请输入版本号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="更新类型" prop="updateType">
|
||||
<el-select v-model="form.updateType" placeholder="请选择更新类型">
|
||||
<el-option
|
||||
v-for="item in options.updateTypeOptions"
|
||||
:key="item.dictValue"
|
||||
:label="item.dictLabel"
|
||||
:value="item.dictValue"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="下载地址" prop="downloadUrl">
|
||||
<UploadFile v-model="form.downloadUrl" :data="{ uploadType: 1 }" :limit="1" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="是否启用" prop="isActive">
|
||||
<el-switch v-model="form.isActive" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="opertype != 3">
|
||||
<el-button text @click="cancel">{{ $t('btn.cancel') }}</el-button>
|
||||
<el-button type="primary" :loading="state.submitLoading" @click="submitForm">{{ $t('btn.submit') }}</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="odfappupdates">
|
||||
import {
|
||||
listOdfAppUpdates,
|
||||
addOdfAppUpdates,
|
||||
delOdfAppUpdates,
|
||||
updateOdfAppUpdates,
|
||||
getOdfAppUpdates,
|
||||
OdfAppStatus
|
||||
} from '@/api/business/odfappupdates.js'
|
||||
const { proxy } = getCurrentInstance()
|
||||
const ids = ref([])
|
||||
const loading = ref(false)
|
||||
const showSearch = ref(true)
|
||||
const queryParams = reactive({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
sort: 'IsActive',
|
||||
sortType: 'desc',
|
||||
versionCode: undefined
|
||||
})
|
||||
const columns = ref([
|
||||
{ visible: true, align: 'center', type: '', prop: 'id', label: 'Id' },
|
||||
{ visible: true, align: 'center', type: '', prop: 'versionCode', label: '版本号' },
|
||||
{ visible: true, align: 'center', type: 'dict', prop: 'updateType', label: '更新类型', showOverflowTooltip: true },
|
||||
{ visible: true, align: 'center', type: '', prop: 'downloadUrl', label: '下载地址', showOverflowTooltip: true },
|
||||
{ visible: true, align: 'center', type: '', prop: 'isActive', label: '是否启用' }
|
||||
//{ visible: false, prop: 'actions', label: '操作', type: 'slot', width: '160' }
|
||||
])
|
||||
const total = ref(0)
|
||||
const dataList = ref([])
|
||||
const queryRef = ref()
|
||||
const defaultTime = ref([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)])
|
||||
|
||||
var dictParams = []
|
||||
|
||||
function getList() {
|
||||
loading.value = true
|
||||
listOdfAppUpdates(queryParams).then((res) => {
|
||||
const { code, data } = res
|
||||
if (code == 200) {
|
||||
dataList.value = data.result
|
||||
total.value = data.totalNum
|
||||
loading.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 查询
|
||||
function handleQuery() {
|
||||
queryParams.pageNum = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
// 重置查询操作
|
||||
function resetQuery() {
|
||||
proxy.resetForm('queryRef')
|
||||
handleQuery()
|
||||
}
|
||||
// 自定义排序
|
||||
function sortChange(column) {
|
||||
var sort = undefined
|
||||
var sortType = undefined
|
||||
|
||||
if (column.prop != null && column.order != null) {
|
||||
sort = column.prop
|
||||
sortType = column.order
|
||||
}
|
||||
queryParams.sort = sort
|
||||
queryParams.sortType = sortType
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/*************** form操作 ***************/
|
||||
const formRef = ref()
|
||||
const title = ref('')
|
||||
// 操作类型 1、add 2、edit 3、view
|
||||
const opertype = ref(0)
|
||||
const open = ref(false)
|
||||
const state = reactive({
|
||||
single: true,
|
||||
multiple: true,
|
||||
submitLoading: false,
|
||||
form: {},
|
||||
rules: {
|
||||
versionCode: [{ required: true, message: '版本号不能为空', trigger: 'blur', type: 'number' }],
|
||||
updateType: [{ required: true, message: '更新类型不能为空', trigger: 'change' }],
|
||||
downloadUrl: [{ required: true, message: '下载地址不能为空', trigger: 'blur' }],
|
||||
isActive: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }]
|
||||
},
|
||||
options: {
|
||||
// 更新类型 选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
|
||||
updateTypeOptions: [
|
||||
{ dictLabel: '可选更新', dictValue: '0' },
|
||||
{ dictLabel: '强制更新', dictValue: '1' }
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
const { form, rules, options, single, multiple } = toRefs(state)
|
||||
|
||||
// 关闭dialog
|
||||
function cancel() {
|
||||
open.value = false
|
||||
reset()
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
function reset() {
|
||||
form.value = {
|
||||
id: null,
|
||||
versionCode: null,
|
||||
updateType: null,
|
||||
downloadUrl: null,
|
||||
isActive: null,
|
||||
createTime: null
|
||||
}
|
||||
proxy.resetForm('formRef')
|
||||
}
|
||||
|
||||
// 添加按钮操作
|
||||
function handleAdd() {
|
||||
reset()
|
||||
open.value = true
|
||||
state.submitLoading = false
|
||||
title.value = '添加App 更新表'
|
||||
opertype.value = 1
|
||||
}
|
||||
// 修改按钮操作
|
||||
function handleUpdate(row) {
|
||||
reset()
|
||||
state.submitLoading = false
|
||||
const id = row.id || ids.value
|
||||
getOdfAppUpdates(id).then((res) => {
|
||||
const { code, data } = res
|
||||
if (code == 200) {
|
||||
open.value = true
|
||||
title.value = '修改App 更新表'
|
||||
opertype.value = 2
|
||||
|
||||
form.value = {
|
||||
...data
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 添加&修改 表单提交
|
||||
function submitForm() {
|
||||
proxy.$refs['formRef'].validate((valid) => {
|
||||
if (valid) {
|
||||
state.submitLoading = true
|
||||
|
||||
if (form.value.id != undefined && opertype.value === 2) {
|
||||
updateOdfAppUpdates(form.value).then((res) => {
|
||||
proxy.$modal.msgSuccess('修改成功')
|
||||
open.value = false
|
||||
getList()
|
||||
})
|
||||
} else {
|
||||
addOdfAppUpdates(form.value)
|
||||
.then((res) => {
|
||||
proxy.$modal.msgSuccess('新增成功')
|
||||
open.value = false
|
||||
getList()
|
||||
})
|
||||
.finally(() => {
|
||||
setTimeout(() => {
|
||||
state.submitLoading = false
|
||||
}, 800)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除按钮操作
|
||||
function handleDelete(row) {
|
||||
const Ids = row.id || ids.value
|
||||
|
||||
proxy
|
||||
.$confirm('是否确认删除参数编号为"' + Ids + '"的数据项?', '警告', {
|
||||
confirmButtonText: proxy.$t('common.ok'),
|
||||
cancelButtonText: proxy.$t('common.cancel'),
|
||||
type: 'warning'
|
||||
})
|
||||
.then(function () {
|
||||
return delOdfAppUpdates(Ids)
|
||||
})
|
||||
.then(() => {
|
||||
getList()
|
||||
proxy.$modal.msgSuccess('删除成功')
|
||||
})
|
||||
}
|
||||
|
||||
// 开关切换前确认并提交(返回 Promise,避免初始化触发)
|
||||
function handleStatusBeforeChange(row) {
|
||||
const target = row.isActive === true ? false : true
|
||||
const text = target ? '启用' : '停用'
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
proxy
|
||||
.$confirm('确认要"' + text + '"该版本吗?', '警告', {
|
||||
confirmButtonText: proxy.$t('common.ok'),
|
||||
cancelButtonText: proxy.$t('common.cancel'),
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
const payload = { id: row.id, IsActive: target === true }
|
||||
OdfAppStatus(payload)
|
||||
.then(() => {
|
||||
proxy.$modal.msgSuccess(text + '成功')
|
||||
row.isActive = target
|
||||
getList()
|
||||
resolve(true)
|
||||
})
|
||||
.catch(() => {
|
||||
reject(false)
|
||||
})
|
||||
})
|
||||
.catch(() => reject(false))
|
||||
})
|
||||
}
|
||||
|
||||
handleQuery()
|
||||
</script>
|
||||
|
|
@ -188,6 +188,20 @@
|
|||
align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
v-if="columns.showColumn('opticalCableOffRemarks')" />
|
||||
<el-table-column
|
||||
prop="equipmentModel"
|
||||
width="150"
|
||||
label="设备型号"
|
||||
align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
v-if="columns.showColumn('equipmentModel')" />
|
||||
<el-table-column
|
||||
prop="businessType"
|
||||
width="150"
|
||||
label="业务类型"
|
||||
align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
v-if="columns.showColumn('businessType')" />
|
||||
<el-table-column prop="createdAt" label="数据信息" width="180" :show-overflow-tooltip="true" v-if="columns.showColumn('createdAt')">
|
||||
<template #default="scope">
|
||||
<div class="time-info">
|
||||
|
|
@ -754,6 +768,8 @@ const columns = ref([
|
|||
{ visible: true, align: 'center', type: '', prop: 'opticalAttenuation', label: '光衰值(dB)', showOverflowTooltip: true },
|
||||
{ visible: true, align: 'center', type: '', prop: 'historyRemarks', label: '历史故障表', showOverflowTooltip: true },
|
||||
{ visible: true, align: 'center', type: '', prop: 'opticalCableOffRemarks', label: '光缆段信息', showOverflowTooltip: true },
|
||||
{ visible: true, align: 'center', type: '', prop: 'equipmentModel', label: '设备型号', showOverflowTooltip: true, width: '200' },
|
||||
{ visible: true, align: 'center', type: '', prop: 'businessType', label: '业务类型', showOverflowTooltip: true, width: '200' },
|
||||
{ visible: true, align: 'center', type: '', prop: 'createdAt', label: '数据信息', showOverflowTooltip: true }
|
||||
//{ visible: false, prop: 'actions', label: '操作', type: 'slot', width: '160' }
|
||||
])
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user