Files
coinbus/yq/src/views/Alarm/index.js
2026-01-16 10:32:27 +08:00

520 lines
16 KiB
JavaScript

import { subscriptionConfiguration } from "../../util/subscriptionMetrics";
import { getSubscript, getSubscriptList, getSubscriptDelete } from "../../api/messageSubscription";
export default {
data() {
return {
btLoading: false,
AlarmLoading: false,
activeName: "selectAlarm",
from: [{
date: `2023-12-02`,
indicators: "指标1",
threshold: "22000.05",
cycle: "10分钟",
notice: "Android App"
},
{
date: `2023-12-12`,
indicators: "指标5",
threshold: "22000.05",
cycle: "15分钟",
notice: "Android App、Email"
}
],
currentPage1: 1,
pageSizes: [20, 50, 100,],
totalLimit1: 0,
formLabelAlign: {
// region: "",
// min: "",
// max: "",
// percentageMin: "",
// percentageMax: "",
// content: "",
addresses: "",
cycle: "",
noticeWay: "",
channel: "BTCOnChain",
metrics: "活跃地址数",
},
labelPosition: "left",
options: [{
value: '选项1',
label: '选项1'
}, {
value: '选项2',
label: '选项2'
}, {
value: '选项3',
label: '选项3'
},],
value: '',
radio: "",
cycle: "",
cycleList: [
{
value: '5m',
label: "5分钟",
},
{
value: '10m',
label: "10分钟",
},
{
value: '15m',
label: "15分钟",
},
{
value: '30m',
label: "30分钟",
},
{
value: '1h',
label: "1小时",
},
{
value: '4h',
label: "4小时",
},
{
value: '8h',
label: "8小时",
},
{
value: '12h',
label: "12小时",
},
{
value: '1d',
label: "1天",
},
{
value: '1w',
label: "1周",
},
{
value: '1M',
label: "1月",
},
],
contactList: [`Email`,],//[`Email`, `Android App`, `站内信`]
contact: {
// Email:true,
},
contactWeekly: [],
contactMonthly: [],
contactMajor: {},
contactNotice: {
Email: true,
},
range: "",
rise: "",
dialogVisible: false,
newCycle: "",
modes: "Email",
reportDialogVisible: false,
daily: "",
WeeklyValue: "",
MonthlyValue: "",
MajorValue: "",
Text: "",
errorMessage: "请输入最多两位小数的数字",
threshold: "数值",
indexList: [],
show: false,
activeItem: {
value: '巨鲸钱包监控',
label: '巨鲸钱包监控',
alarmType: [`地址`,],
alarmInterval: [`1天`,],
},
threshold2: "",
defaultIndex: `交易量`,
threshold3: "",
alarmType: [],
alarmInterval: [],
address: "",
conditionList: [
{
value: '>',
label: "大于",
},
{
value: '<',
label: "小于",
},
{
value: '+',
label: "涨",
},
{
value: '-',
label: "跌",
},
],
alarmCycleList: [
{
value: '1d',
label: "subscribe.day",
},
{
value: 'realTime',
label: "subscribe.realTimeData",
},
],
flatIndexList:[],
}
},
created() {
this.indexList = subscriptionConfiguration
this.activeItem = this.indexList[0].children[0].children[0].children[0]
this.formLabelAlign.metrics = this.activeItem.id
this.formLabelAlign.channel = this.activeItem.channel
this.formLabelAlign.cycle = this.activeItem.alarmInterval
this.formLabelAlign.noticeWay = this.modes
this.formLabelAlign.cycle = `realTime`
},
mounted() {
this.indexList = subscriptionConfiguration
this.flatIndexList = this.handelAllMenu(this.indexList) //扁平化指标选择
this.handelChoice()
this.fetchSubscriptionList()
},
computed: {
getTranslatedOptions() {
return this.translateOptions(this.indexList);
}
},
methods: {
//扁平化导航数组 递归
handelAllMenu(arr) {
var result = [];
arr.forEach((item) => {
if (!item.children) {
result.push(item);
} else {
var nestedItems = this.handelAllMenu(item.children);
result = result.concat(nestedItems);
}
});
return result;
},
//映射I18n
translateOptions(options) {
return options.map(option => {
const translatedOption = {
...option,
label: this.$t(option.label)
};
if (option.children) {
translatedOption.children = this.translateOptions(option.children);
}
return translatedOption;
});
},
async fetchSubscript(params) {
this.btLoading = true
const { data } = await getSubscript(params)
if (data && data.code == 200) {
this.$message({
message: data.msg,
type: "success",
});
this.fetchSubscriptionList()
this.address = ""
this.dialogVisible = false
}
this.btLoading = false
},
async fetchSubscriptionList(params) {
this.AlarmLoading = true
const { data } = await getSubscriptList(params)
this.from = data.rows
this.from.forEach(item => {
item.date = item.date.split(`T`)[0]
})
this.AlarmLoading = false
},
async fetchSubscriptionCancel(params) {
this.AlarmLoading = true
const { data } = await getSubscriptDelete(params)
if (data && data.code == 200) {
this.$message({
message: data.msg,
type: "success",
});
this.fetchSubscriptionList()
}
this.AlarmLoading = false
},
handelMetrics(metrics){
let obj = this.flatIndexList.find(item => item.id == metrics)
if (obj) {
return this.$t(obj.label);
}else{
return metrics
}
},
//处理告警周期
handelAlarmCycle(value) {
let obj = this.alarmCycleList.find(item => item.value == value)
if (obj) {
return this.$t(obj.label)
}
},
handleInputBlur() {
this.address = this.address.split("/")
this.address = this.address.filter(value => value !== "")
if (this.address.length > 5) {
this.address = this.address.slice(0, 5);
// console.log("不能超过五条");
// this.$message({
// message:"最多指定5个地址",
// type: "warning",
// });
}
this.address = this.address.join("/")
},
handleConfirm() {
this.reportDialogVisible = true
this.Text = `订阅确认`
},
handelUnsubscribe() {
this.reportDialogVisible = true
this.Text = `退订确认`
},
handleInput(value) {
let format = /^\d+(\.\d{0,2})?$/.test(value)
// 使用正则表达式验证输入的值
if (!format) {
this.formLabelAlign.region = this.formLabelAlign.region.slice(0, -1); // 不符合规定的格式,移除最后输入的字符
this.formLabelAlign.min = this.formLabelAlign.min.slice(0, -1); // 不符合规定的格式,移除最后输入的字符
}
},
handleMaxInput(value) {
let format = /^\d+(\.\d{0,2})?$/.test(value)
// 使用正则表达式验证输入的值
if (!format) {
this.formLabelAlign.max = this.formLabelAlign.max.slice(0, -1); // 不符合规定的格式,移除最后输入的字符
}
},
handleInputPercentage(value) {
let format1 = /^\d+(\.\d{0,1})?$/.test(value)
// 使用正则表达式验证输入的值
if (!format1) {
this.formLabelAlign.addresses = this.formLabelAlign.type.slice(0, -1); // 不符合规定的格式,移除最后输入的字符
}
},
handleInputPercentageMin(value) {
let format = /^\d+(\.\d{0,1})?$/.test(value)
// 使用正则表达式验证输入的值
if (!format) {
this.formLabelAlign.percentageMin = this.formLabelAlign.percentageMin.slice(0, -1); // 不符合规定的格式,移除最后输入的字符
}
},
handleInputPercentageMax(value) {
let format = /^\d+(\.\d{0,1})?$/.test(value)
// 使用正则表达式验证输入的值
if (!format) {
this.formLabelAlign.percentageMax = this.formLabelAlign.percentageMax.slice(0, -1); // 不符合规定的格式,移除最后输入的字符
}
},
// 日报订阅
handelCheckbox(value) {
if (value) {
this.formLabelAlign.channel = "Observations"
this.formLabelAlign.metrics = "日报订阅"
}
const checkedValues = Object.keys(this.contact).filter(key => this.contact[key]);
checkedValues.forEach(item => {
if (!this.daily.includes(item)) {
this.daily += item + ``
}
})
this.formLabelAlign.noticeWay = this.daily
},
handelCheckboxWeekly() {
let checkedValuesWeekly = Object.keys(this.contactWeekly).filter(key => this.contactWeekly[key]);
checkedValuesWeekly.forEach(item => {
if (!this.WeeklyValue.includes(item)) {
this.WeeklyValue += item + ``
}
})
},
handelCheckboxMonthly() {
let checkedValuesMonthly = Object.keys(this.contactMonthly).filter(key => this.contactMonthly[key]);
checkedValuesMonthly.forEach(item => {
if (!this.MonthlyValue.includes(item)) {
this.MonthlyValue += item + ``
}
})
},
handelCheckboxMajor() {
let checkedValuesMajor = Object.keys(this.contactMajor).filter(key => this.contactMajor[key]);
checkedValuesMajor.forEach(item => {
if (!this.MajorValue.includes(item)) {
this.MajorValue += item + ``
}
})
},
handelCheckboxNotice() {
let checkedValuesNotice = Object.keys(this.contactNotice).filter(key => this.contactNotice[key]);
this.modes = ""
checkedValuesNotice.forEach(item => {
this.modes += item + ``
})
if (this.modes.charAt(this.modes.length - 1) === "、") {
// 删除最后一个字符
this.modes = this.modes.slice(0, -1);
}
this.formLabelAlign.noticeWay = this.modes
},
handelSubmit() {
if (this.cycle) {
this.newCycle = this.cycleList.find(item => item.value == this.cycle).label
}
if (this.formLabelAlign.type) {
this.formLabelAlign.type = this.formLabelAlign.type + `%`
}
if (this.threshold2 == `subscribe.address`) {//等于地址
// const regex = /[^\u4e00-\u9fa5]+/g;
const regex = /[\u4E00-\u9FA5]/
// 地址不能为空或输入中文字符
if (regex.test(this.address) || !this.address) {
this.$message({
message: this.$t(`subscribe.addressVerification`),
type: 'warning'
});
return
}
this.formLabelAlign.addresses = this.address.replace(/\//g, ",");
}
// 请至少选择一种通知方式
if (!this.formLabelAlign.noticeWay) {
this.$message({
message: this.$t(`subscribe.noticeVerification`),
type: 'warning'
});
return
}
this.dialogVisible = true
},
handelConfirm() {
// 该指标已订阅,不能重复订阅!
if (this.from.some(item=>item.metrics == this.formLabelAlign.metrics)) {
this.$message({
message: this.$t(`subscribe.repeatSubscription`),
type: 'warning'
});
return
}
if (this.formLabelAlign.cycle == "1天" || this.formLabelAlign.cycle == `subscribe.day` ) {
this.formLabelAlign.cycle = "1d"
}
this.fetchSubscript(this.formLabelAlign)
},
//订阅列表退订
deleteRow(rows) {
this.fetchSubscriptionCancel({ id: rows.id })
},
handelRadio() {
this.formLabelAlign.type = ""
this.formLabelAlign.percentageMax = ""
this.formLabelAlign.percentageMin = ""
this.formLabelAlign.max = ""
this.formLabelAlign.min = ""
this.formLabelAlign.region = ""
},
handelIndex(value) {
const selectedOptions = this.$refs.cascader.getCheckedNodes(value);
this.activeItem = selectedOptions[0].data
this.formLabelAlign.cycle = this.activeItem.alarmInterval[0]
this.formLabelAlign.metrics = this.activeItem.id
this.formLabelAlign.channel = this.activeItem.channel
this.address =""
this.formLabelAlign.addresses = ""
this.handelChoice()
},
handelChoice() {
this.indexList = subscriptionConfiguration
if (this.activeItem.children && this.activeItem.children[0]) {
this.threshold2 = this.activeItem.children[0].alarmType[0]
this.threshold2 = this.activeItem.children[0].alarmType[0]
this.threshold3 = this.activeItem.children[0].alarmInterval[0]
this.alarmType = this.activeItem.children[0].alarmType
this.alarmInterval = this.activeItem.children[0].alarmInterval
} else {
this.threshold2 = this.activeItem.alarmType[0]
this.threshold2 = this.activeItem.alarmType[0]
this.threshold3 = this.activeItem.alarmInterval[0]
this.alarmType = this.activeItem.alarmType
this.alarmInterval = this.activeItem.alarmInterval
}
}
}
}