This commit is contained in:
1136
package-lock.json
generated
1136
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -53,10 +53,10 @@
|
|||||||
"@vueuse/core": "^11.0.0",
|
"@vueuse/core": "^11.0.0",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "next",
|
"@wangeditor/editor-for-vue": "next",
|
||||||
"axios": "^1.7.5",
|
"axios": "1.13.5",
|
||||||
"crypto-js": "^4.2.0",
|
"crypto-js": "^4.2.0",
|
||||||
"echarts": "^5.4.0",
|
"echarts": "^5.4.0",
|
||||||
"element-plus": "^2.8.0",
|
"element-plus": "2.11.3",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"highlight.js": "^11.10.0",
|
"highlight.js": "^11.10.0",
|
||||||
"md-editor-v3": "^4.17.0",
|
"md-editor-v3": "^4.17.0",
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
"qrcode.vue": "^3.6.0",
|
"qrcode.vue": "^3.6.0",
|
||||||
"vue": "^3.5.12",
|
"vue": "^3.5.12",
|
||||||
"vue-draggable-plus": "^0.6.0",
|
"vue-draggable-plus": "^0.6.0",
|
||||||
"vue-i18n": "^9.14.0",
|
"vue-i18n": "11.1.10",
|
||||||
"vue-router": "^4.4.2",
|
"vue-router": "^4.4.2",
|
||||||
"vue3-count-to": "^1.1.2",
|
"vue3-count-to": "^1.1.2",
|
||||||
"xgplayer": "^3.0.20",
|
"xgplayer": "^3.0.20",
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
"typescript-eslint": "^8.9.0",
|
"typescript-eslint": "^8.9.0",
|
||||||
"unplugin-auto-import": "^0.18.3",
|
"unplugin-auto-import": "^0.18.3",
|
||||||
"unplugin-vue-components": "^0.27.4",
|
"unplugin-vue-components": "^0.27.4",
|
||||||
"vite": "^6.1.0",
|
"vite": "7.1.11",
|
||||||
"vite-plugin-compression": "^0.5.1",
|
"vite-plugin-compression": "^0.5.1",
|
||||||
"vite-plugin-imagemin": "^0.6.1",
|
"vite-plugin-imagemin": "^0.6.1",
|
||||||
"vue-demi": "^0.14.9",
|
"vue-demi": "^0.14.9",
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ export interface Carrier {
|
|||||||
carrier_name: string
|
carrier_name: string
|
||||||
carrier_type: CarrierType
|
carrier_type: CarrierType
|
||||||
description?: string
|
description?: string
|
||||||
|
data_reset_day?: number | null // 上游流量重置日(1-28)
|
||||||
status: number
|
status: number
|
||||||
created_at: string
|
created_at: string
|
||||||
updated_at: string
|
updated_at: string
|
||||||
@@ -37,12 +38,14 @@ export interface CreateCarrierParams {
|
|||||||
carrier_name: string
|
carrier_name: string
|
||||||
carrier_type: CarrierType
|
carrier_type: CarrierType
|
||||||
description?: string
|
description?: string
|
||||||
|
data_reset_day?: number | null // 上游流量重置日(1-28)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新运营商请求参数
|
// 更新运营商请求参数
|
||||||
export interface UpdateCarrierParams {
|
export interface UpdateCarrierParams {
|
||||||
carrier_name?: string
|
carrier_name?: string
|
||||||
description?: string
|
description?: string
|
||||||
|
data_reset_day?: number | null // 上游流量重置日(1-28)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新运营商状态参数
|
// 更新运营商状态参数
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ export interface DeviceCardBinding {
|
|||||||
carrier_name: string // 运营商名称
|
carrier_name: string // 运营商名称
|
||||||
slot_position: number // 插槽位置 (1-4)
|
slot_position: number // 插槽位置 (1-4)
|
||||||
status: number // 卡状态 (1:在库, 2:已分销, 3:已激活, 4:已停用)
|
status: number // 卡状态 (1:在库, 2:已分销, 3:已激活, 4:已停用)
|
||||||
|
network_status: number // 网络状态 (0:停机, 1:开机)
|
||||||
bind_time: string | null // 绑定时间
|
bind_time: string | null // 绑定时间
|
||||||
is_current?: boolean // 是否为设备当前使用的卡
|
is_current?: boolean // 是否为设备当前使用的卡
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -413,10 +413,10 @@
|
|||||||
</ElTableColumn>
|
</ElTableColumn>
|
||||||
<ElTableColumn prop="iccid" label="ICCID" min-width="180" />
|
<ElTableColumn prop="iccid" label="ICCID" min-width="180" />
|
||||||
<ElTableColumn prop="msisdn" label="接入号" width="140" />
|
<ElTableColumn prop="msisdn" label="接入号" width="140" />
|
||||||
<ElTableColumn prop="status" label="状态" width="100" align="center">
|
<ElTableColumn prop="network_status" label="网络状态" width="100" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<ElTag :type="getCardStatusTagType(row.status)">
|
<ElTag :type="getNetworkStatusTagType(row.network_status)">
|
||||||
{{ getCardStatusText(row.status) }}
|
{{ getNetworkStatusText(row.network_status) }}
|
||||||
</ElTag>
|
</ElTag>
|
||||||
</template>
|
</template>
|
||||||
</ElTableColumn>
|
</ElTableColumn>
|
||||||
@@ -1072,6 +1072,29 @@
|
|||||||
return textMap[status] || '未知'
|
return textMap[status] || '未知'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取网络状态标签类型
|
||||||
|
const getNetworkStatusTagType = (networkStatus: number) => {
|
||||||
|
// 0: 停机 (danger 红色)
|
||||||
|
// 1: 开机 - 正常/异常 (success 绿色 / warning 黄色)
|
||||||
|
if (networkStatus === 0) {
|
||||||
|
return 'danger' // 停机 - 红色
|
||||||
|
} else if (networkStatus === 1) {
|
||||||
|
return 'success' // 开机正常 - 绿色
|
||||||
|
}
|
||||||
|
return 'info' // 未知状态
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取网络状态文本
|
||||||
|
const getNetworkStatusText = (networkStatus: number) => {
|
||||||
|
// 0: 停机
|
||||||
|
// 1: 开机 - 显示为"正常"
|
||||||
|
const textMap: Record<number, string> = {
|
||||||
|
0: '停机',
|
||||||
|
1: '正常' // 开机显示为"正常"
|
||||||
|
}
|
||||||
|
return textMap[networkStatus] || '未知'
|
||||||
|
}
|
||||||
|
|
||||||
// 获取设备状态标签类型
|
// 获取设备状态标签类型
|
||||||
const getDeviceStatusTagType = (status: number) => {
|
const getDeviceStatusTagType = (status: number) => {
|
||||||
const typeMap: Record<number, any> = {
|
const typeMap: Record<number, any> = {
|
||||||
|
|||||||
@@ -105,6 +105,20 @@
|
|||||||
placeholder="请输入运营商描述"
|
placeholder="请输入运营商描述"
|
||||||
/>
|
/>
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
|
<ElFormItem label="流量重置日" prop="data_reset_day">
|
||||||
|
<ElInputNumber
|
||||||
|
v-model="form.data_reset_day"
|
||||||
|
:min="1"
|
||||||
|
:max="28"
|
||||||
|
:step="1"
|
||||||
|
controls-position="right"
|
||||||
|
placeholder="请输入流量重置日"
|
||||||
|
style="width: 100%"
|
||||||
|
/>
|
||||||
|
<div style="margin-top: 5px; font-size: 12px; color: #909399">
|
||||||
|
运营商每月清零网关计数器的日期(1-28日),默认为1日
|
||||||
|
</div>
|
||||||
|
</ElFormItem>
|
||||||
<ElFormItem label="实名链接类型" prop="realname_link_type">
|
<ElFormItem label="实名链接类型" prop="realname_link_type">
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="form.realname_link_type"
|
v-model="form.realname_link_type"
|
||||||
@@ -270,6 +284,27 @@
|
|||||||
],
|
],
|
||||||
carrier_type: [{ required: true, message: '请选择运营商类型', trigger: 'change' }],
|
carrier_type: [{ required: true, message: '请选择运营商类型', trigger: 'change' }],
|
||||||
description: [{ max: 500, message: '描述不能超过500个字符', trigger: 'blur' }],
|
description: [{ max: 500, message: '描述不能超过500个字符', trigger: 'blur' }],
|
||||||
|
data_reset_day: [
|
||||||
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (value === null || value === undefined || value === '') {
|
||||||
|
callback() // 允许为空
|
||||||
|
} else {
|
||||||
|
const numValue = Number(value)
|
||||||
|
if (isNaN(numValue)) {
|
||||||
|
callback(new Error('请输入有效的数字'))
|
||||||
|
} else if (!Number.isInteger(numValue)) {
|
||||||
|
callback(new Error('请输入整数'))
|
||||||
|
} else if (numValue < 1 || numValue > 28) {
|
||||||
|
callback(new Error('流量重置日必须在1-28之间'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
realname_link_type: [{ required: true, message: '请选择实名链接类型', trigger: 'change' }],
|
realname_link_type: [{ required: true, message: '请选择实名链接类型', trigger: 'change' }],
|
||||||
realname_link_template: [
|
realname_link_template: [
|
||||||
{
|
{
|
||||||
@@ -292,6 +327,7 @@
|
|||||||
carrier_name: '',
|
carrier_name: '',
|
||||||
carrier_type: null,
|
carrier_type: null,
|
||||||
description: '',
|
description: '',
|
||||||
|
data_reset_day: 1,
|
||||||
realname_link_type: 'none',
|
realname_link_type: 'none',
|
||||||
realname_link_template: ''
|
realname_link_template: ''
|
||||||
})
|
})
|
||||||
@@ -433,6 +469,7 @@
|
|||||||
form.carrier_name = row.carrier_name
|
form.carrier_name = row.carrier_name
|
||||||
form.carrier_type = row.carrier_type
|
form.carrier_type = row.carrier_type
|
||||||
form.description = row.description
|
form.description = row.description
|
||||||
|
form.data_reset_day = row.data_reset_day || 1
|
||||||
form.realname_link_type = row.realname_link_type || 'none'
|
form.realname_link_type = row.realname_link_type || 'none'
|
||||||
form.realname_link_template = row.realname_link_template || ''
|
form.realname_link_template = row.realname_link_template || ''
|
||||||
} else {
|
} else {
|
||||||
@@ -441,6 +478,7 @@
|
|||||||
form.carrier_name = ''
|
form.carrier_name = ''
|
||||||
form.carrier_type = null
|
form.carrier_type = null
|
||||||
form.description = ''
|
form.description = ''
|
||||||
|
form.data_reset_day = 1
|
||||||
form.realname_link_type = 'none'
|
form.realname_link_type = 'none'
|
||||||
form.realname_link_template = ''
|
form.realname_link_template = ''
|
||||||
}
|
}
|
||||||
@@ -493,7 +531,8 @@
|
|||||||
carrier_code: form.carrier_code,
|
carrier_code: form.carrier_code,
|
||||||
carrier_name: form.carrier_name,
|
carrier_name: form.carrier_name,
|
||||||
carrier_type: form.carrier_type as CarrierType,
|
carrier_type: form.carrier_type as CarrierType,
|
||||||
description: form.description || undefined
|
description: form.description || undefined,
|
||||||
|
data_reset_day: form.data_reset_day || null
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dialogType.value === 'add') {
|
if (dialogType.value === 'add') {
|
||||||
@@ -502,7 +541,8 @@
|
|||||||
} else {
|
} else {
|
||||||
const updateData = {
|
const updateData = {
|
||||||
carrier_name: form.carrier_name,
|
carrier_name: form.carrier_name,
|
||||||
description: form.description || undefined
|
description: form.description || undefined,
|
||||||
|
data_reset_day: form.data_reset_day || null
|
||||||
}
|
}
|
||||||
await CarrierService.updateCarrier(form.id, updateData)
|
await CarrierService.updateCarrier(form.id, updateData)
|
||||||
ElMessage.success('修改成功')
|
ElMessage.success('修改成功')
|
||||||
|
|||||||
Reference in New Issue
Block a user