feat: 添加IMS SIP响应码原因显示

This commit is contained in:
TsMask
2025-04-28 19:34:56 +08:00
parent 42f8c0b64f
commit 76caaf694c
4 changed files with 100 additions and 49 deletions

View File

@@ -424,6 +424,8 @@ export default {
caller: "Caller",
called: "Called",
result: "Result",
resultCode: "Result Code",
resultCause: "Result Cause",
resultOk: "Success",
resultFail: "Fail",
delTip: "Confirm deletion of the data item numbered [{msg}]?",

View File

@@ -424,6 +424,8 @@ export default {
caller: "主叫",
called: "被叫",
result: "结果",
resultCode: "结果码",
resultCause: "结果原因",
resultOk: "成功",
resultFail: "失败",
delTip: "确认删除编号为【{msg}】的数据项?",

View File

@@ -35,9 +35,12 @@ let dict: {
cdrSipCode: DictType[];
/**CDR 呼叫类型 */
cdrCallType: DictType[];
/**IMS-Voice-SIP响应代码类别类型原因 */
cdrSipCodeCause: DictType[];
} = reactive({
cdrSipCode: [],
cdrCallType: [],
cdrSipCodeCause: [],
});
/**网元可选 */
@@ -182,13 +185,6 @@ let tableColumns: ColumnsType = [
return cdrJSON.calledParty;
},
},
{
title: t('views.dashboard.cdr.result'),
dataIndex: 'cdrJSON',
key: 'cause',
align: 'left',
width: 150,
},
{
title: t('views.dashboard.cdr.duration'),
dataIndex: 'cdrJSON',
@@ -202,6 +198,22 @@ let tableColumns: ColumnsType = [
: parseDuration(cdrJSON.callDuration);
},
},
{
title: t('views.dashboard.cdr.resultCode'),
dataIndex: 'cdrJSON',
key: 'code',
align: 'left',
width: 200,
ellipsis: true,
},
{
title: t('views.dashboard.cdr.resultCause'),
dataIndex: 'cdrJSON',
key: 'cause',
align: 'left',
width: 200,
ellipsis: true,
},
{
title: t('views.dashboard.cdr.seizureTime'),
dataIndex: 'cdrJSON',
@@ -212,7 +224,7 @@ let tableColumns: ColumnsType = [
if (typeof cdrJSON.seizureTime === 'number') {
return parseDateToStr(+cdrJSON.seizureTime * 1000);
}
return cdrJSON.seizureTime;
return parseDateToStr(cdrJSON.seizureTime);
},
},
{
@@ -225,7 +237,7 @@ let tableColumns: ColumnsType = [
if (typeof cdrJSON.releaseTime === 'number') {
return parseDateToStr(+cdrJSON.releaseTime * 1000);
}
return cdrJSON.releaseTime;
return parseDateToStr(cdrJSON.releaseTime);
},
},
{
@@ -498,16 +510,21 @@ function wsMessage(res: Record<string, any>) {
onMounted(() => {
// 初始字典数据
Promise.allSettled([getDict('cdr_sip_code'), getDict('cdr_call_type')]).then(
resArr => {
if (resArr[0].status === 'fulfilled') {
dict.cdrSipCode = resArr[0].value;
}
if (resArr[1].status === 'fulfilled') {
dict.cdrCallType = resArr[1].value;
}
Promise.allSettled([
getDict('cdr_sip_code'),
getDict('cdr_call_type'),
getDict('cdr_sip_code_cause'),
]).then(resArr => {
if (resArr[0].status === 'fulfilled') {
dict.cdrSipCode = resArr[0].value;
}
);
if (resArr[1].status === 'fulfilled') {
dict.cdrCallType = resArr[1].value;
}
if (resArr[2].status === 'fulfilled') {
dict.cdrSipCodeCause = resArr[2].value;
}
});
// 获取网元网元列表
useNeInfoStore()
.fnNelist()
@@ -751,7 +768,7 @@ onBeforeUnmount(() => {
:value="record.cdrJSON.callType"
/>
</template>
<template v-if="column.key === 'cause'">
<template v-if="column.key === 'code'">
<span v-if="record.cdrJSON.callType !== 'sms'">
<DictTag
:options="dict.cdrSipCode"
@@ -763,6 +780,16 @@ onBeforeUnmount(() => {
{{ t('views.dashboard.cdr.resultOk') }}
</span>
</template>
<template v-if="column.key === 'cause'">
<span v-if="record.cdrJSON.callType !== 'sms'">
<DictTag
:options="dict.cdrSipCodeCause"
:value="record.cdrJSON.cause"
value-default="0"
/>
</span>
<span v-else> Call failure for other reason </span>
</template>
<template v-if="column.key === 'id'">
<a-space :size="8" align="center">
<a-tooltip>

View File

@@ -19,12 +19,15 @@ let dict: {
ueEventType: DictType[];
/**UE 事件CM状态 */
ueEventCmState: DictType[];
/**CDR SIP响应代码类别类型 */
cdrSipCodeCause: DictType[];
} = reactive({
cdrSipCode: [],
cdrCallType: [],
ueAauthCode: [],
ueEventType: [],
ueEventCmState: [],
cdrSipCodeCause: [],
});
onMounted(() => {
@@ -35,6 +38,7 @@ onMounted(() => {
getDict('ue_auth_code'),
getDict('ue_event_type'),
getDict('ue_event_cm_state'),
getDict('cdr_sip_code_cause'),
]).then(resArr => {
if (resArr[0].status === 'fulfilled') {
dict.cdrSipCode = resArr[0].value;
@@ -51,6 +55,9 @@ onMounted(() => {
if (resArr[4].status === 'fulfilled') {
dict.ueEventCmState = resArr[4].value;
}
if (resArr[5].status === 'fulfilled') {
dict.cdrSipCodeCause = resArr[5].value;
}
});
});
</script>
@@ -75,16 +82,7 @@ onMounted(() => {
</span>
</div>
<div></div>
<div>
{{ t('views.dashboard.overview.userActivity.time') }}:&nbsp;
<span :title="item.data.releaseTime">
{{
typeof item.data.releaseTime === 'number'
? parseDateToStr(+item.data.releaseTime * 1000)
: item.data.releaseTime
}}
</span>
</div>
<div></div>
</div>
<div class="card-cdr-item">
<div>
@@ -105,6 +103,16 @@ onMounted(() => {
</div>
<div v-else></div>
</div>
<div>
{{ t('views.dashboard.overview.userActivity.time') }}:&nbsp;
<span :title="item.data.releaseTime">
{{
typeof item.data.releaseTime === 'number'
? parseDateToStr(+item.data.releaseTime * 1000)
: parseDateToStr(item.data.releaseTime)
}}
</span>
</div>
<div>
{{ t('views.dashboard.overview.userActivity.result') }}:&nbsp;
<span v-if="item.data.callType !== 'sms'">
@@ -113,6 +121,12 @@ onMounted(() => {
:value="item.data.cause"
value-default="0"
/>
&nbsp;-&nbsp;
<DictTag
:options="dict.cdrSipCodeCause"
:value="item.data.cause"
value-default="0"
/>
</span>
<span v-else>
{{ t('views.dashboard.overview.userActivity.resultOK') }}
@@ -135,15 +149,7 @@ onMounted(() => {
<div>
IMSI: <span :title="item.data.imsi">{{ item.data.imsi }}</span>
</div>
<div>
{{ t('views.dashboard.overview.userActivity.time') }}:
<template v-if="item.data?.time">
{{ item.data.time }}
</template>
<template v-else>
{{ parseDateToStr(+item.data.timestamp * 1000) }}
</template>
</div>
<div></div>
</div>
<div class="card-ue-w33" v-if="item.type === 'auth-result'">
@@ -157,7 +163,16 @@ onMounted(() => {
TAC ID: <span>{{ item.data.tacID }}</span>
</div>
</div>
<div>
{{ t('views.dashboard.overview.userActivity.time') }}:
<template v-if="item.data?.time">
{{ parseDateToStr(item.data.time) }}
</template>
<template v-else-if="item.data?.timestamp">
{{ parseDateToStr(+item.data.timestamp * 1000) }}
</template>
<template v-else> - </template>
</div>
<div v-if="item.type === 'auth-result'">
{{ t('views.dashboard.overview.userActivity.result') }}:&nbsp;
<span>
@@ -198,16 +213,7 @@ onMounted(() => {
<div>
IMSI: <span :title="item.data?.imsi">{{ item.data?.imsi }}</span>
</div>
<div>
{{ t('views.dashboard.overview.userActivity.time') }}:
<span :title="item.data?.timestamp">
{{
typeof item.data?.timestamp === 'number'
? parseDateToStr(+item.data?.timestamp * 1000)
: item.data?.timestamp
}}
</span>
</div>
<div></div>
</div>
<div class="card-ue-w33" v-if="item.type === 'auth-result'">
@@ -221,6 +227,20 @@ onMounted(() => {
TAC ID: <span>{{ item.data.tacID }}</span>
</div>
</div>
<div>
{{ t('views.dashboard.overview.userActivity.time') }}:
<template v-if="item.data?.time">
{{ parseDateToStr(item.data.time) }}
</template>
<template v-else-if="item.data?.timestamp">
{{
typeof item.data?.timestamp === 'number'
? parseDateToStr(+item.data?.timestamp * 1000)
: parseDateToStr(item.data?.timestamp)
}}
</template>
<template v-else> - </template>
</div>
<div v-if="item.type === 'auth-result'">
{{ t('views.dashboard.overview.userActivity.result') }}:&nbsp;
<span>