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 } } } }