diff --git a/src/jmapNew/theme/chengdu_03/menus/dialog/childDialog/confirmControl.vue b/src/jmapNew/theme/chengdu_03/menus/dialog/childDialog/confirmControl.vue index b7d3c2351..c91404c35 100644 --- a/src/jmapNew/theme/chengdu_03/menus/dialog/childDialog/confirmControl.vue +++ b/src/jmapNew/theme/chengdu_03/menus/dialog/childDialog/confirmControl.vue @@ -12,8 +12,8 @@ append-to-body >
- \ No newline at end of file +.confirm-control .context { + padding-bottom: 40px !important; + border: 1px solid lightgray; +} + diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/routeControl.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/routeControl.vue index 3d5e6dd50..d8dc79ca9 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/routeControl.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/routeControl.vue @@ -45,6 +45,7 @@ import OperationHandler from '@/scripts/cmdPlugin/OperationHandler'; import { mouseCancelState } from '../utils/menuItemStatus'; import ConfirmControl from './childDialog/confirmControl'; import NoticeInfo from './childDialog/childDialog/noticeInfo'; +import CMD from '@/scripts/cmdPlugin/CommandEnum'; export default { name: 'RouteControl', @@ -136,53 +137,23 @@ export default { /** 信号重开*/ this.reopenSignal(); } else if (this.operation == OperationEvent.Signal.singalPassModel.menu.operation) { - this.reopenSignal(); + this.singalPassModel(); // 设置/取消通过模式 } }, // 取消列车进路 cancelTrainRoute() { - if (this.$store.state.training.prdType == '01') { - /** 现地工作站*/ - this.cancelTrainRouteByLocal(); - } else if (this.$store.state.training.prdType == '02') { - /** 行调工作站*/ - this.cancelTrainRouteByCentral(); - } - }, - // 现地工作站取消进路 - cancelTrainRouteByLocal() { const operate = { - send: true, - operation: OperationEvent.Signal.cancelTrainRoute.menu.operation + over: true, + operation: OperationEvent.Signal.cancelTrainRoute.menu.operation, + cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE }; - this.loading = true; - this.$store.dispatch('training/next', operate).then(({ valid }) => { + this.$store.dispatch('training/nextNew', operate).then(({valid}) => { this.loading = false; if (valid) { this.doClose(); } }).catch(() => { - this.loading = false; - this.doClose(); - this.$refs.noticeInfo.doShow(operate); - }); - }, - // 行调工作站取消进路 - cancelTrainRouteByCentral() { - const operate = { - send: true, - operation: OperationEvent.Signal.cancelTrainRoute.menu.operation - }; - - this.loading = true; - this.$store.dispatch('training/next', operate).then(({ valid }) => { - this.loading = false; - if (valid) { - this.doClose(); - } - }).catch(() => { - this.loading = false; this.doClose(); this.$refs.noticeInfo.doShow(operate); }); @@ -191,11 +162,12 @@ export default { signalClose() { const operate = { operation: OperationEvent.Signal.signalClose.menu.operation, - messages: [`信号关灯: ${this.signalName}`] + messages: [`信号关灯: ${this.signalName}`], + cmdType: CMD.Signal.CMD_SIGNAL_CLOSE_SIGNAL }; this.loading = true; - this.$store.dispatch('training/next', operate).then(({ valid }) => { + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { this.loading = false; if (valid) { this.doClose(); @@ -209,12 +181,36 @@ export default { // 信号重开 reopenSignal() { const operate = { - send: true, - operation: OperationEvent.Signal.reopenSignal.menu.operation + over: true, + operation: OperationEvent.Signal.reopenSignal.menu.operation, + cmdType: CMD.Signal.CMD_SIGNAL_REOPEN_SIGNAL }; this.loading = true; - this.$store.dispatch('training/next', operate).then(({ valid }) => { + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { + this.loading = false; + if (valid) { + this.doClose(); + } + }).catch(() => { + this.loading = false; + this.doClose(); + this.$refs.noticeInfo.doShow(operate); + }); + }, + // 设置/取消通过模式 + singalPassModel() { + const operate = { + over: true, + operation: OperationEvent.Signal.singalPassModel.menu.operation, + cmdType: CMD.Signal.CMD_SIGNAL_PASS_MODEL, + param: { + Pass_Auto: this.passRadio + } + }; + + this.loading = true; + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { this.loading = false; if (valid) { this.doClose(); @@ -231,7 +227,7 @@ export default { operation: OperationEvent.Command.close.menu.operation }; - this.$store.dispatch('training/next', operate).then(({ valid }) => { + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { if (valid) { this.doClose(); } diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/routeSelection.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/routeSelection.vue index 2a084c0a4..b0e861631 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/routeSelection.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/routeSelection.vue @@ -15,7 +15,7 @@ 进路列表 - 展开进路预览 + @@ -34,9 +34,10 @@ \ No newline at end of file +}; + + diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/sectionControl.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/sectionControl.vue index 400c8f85d..191dfff94 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/sectionControl.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/sectionControl.vue @@ -1,207 +1,222 @@ \ No newline at end of file +}; + diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/speedLimitControl.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/speedLimitControl.vue index 550ae074d..fe9812dab 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/speedLimitControl.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/speedLimitControl.vue @@ -1,554 +1,551 @@ \ No newline at end of file +}; + diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/standControl.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/standControl.vue index db49efb1e..27ec0a838 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/standControl.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/standControl.vue @@ -94,6 +94,7 @@ v-model="radio2" label="1" style="display: block; text-align: left;" + :disabled="radio2 == 2" @change="changeRadio" > 本站台上行 @@ -104,6 +105,7 @@ v-model="radio2" label="2" style="display: block; text-align: left;" + :disabled="radio2 == 1" @change="changeRadio" > 本站台下行 @@ -149,7 +151,6 @@ export default { earlyDepar: false, // 提前发车 buckle: true, // 设置扣车 AutomaticBuckle: false, // 区间自动扣车 - standCode: '', autoRadio: '1', autoRadio1: '1' }; @@ -213,7 +214,6 @@ export default { this.operation = operate.operation; this.setDefaultItems(); - this.standCode = operate.code; } this.dialogShow = true; this.$nextTick(function () { @@ -232,7 +232,7 @@ export default { this.radio1 = '2'; } else if (this.operation == OperationEvent.StationStand.earlyDeparture.menu.operation) { this.earlyDepar = true; - if (this.selected.direction == '01') { + if (!this.selected.right) { this.radio2 = '2'; } else { this.radio2 = '1'; @@ -240,9 +240,17 @@ export default { } else if (this.operation == OperationEvent.StationStand.setDetainTrainAuto.menu.operation) { this.AutomaticBuckle = true; this.autoRadio1 = '1'; + this.autoRadio = '1'; + if (!this.selected.right) { + this.autoRadio = '2'; + } } else if (this.operation == OperationEvent.StationStand.cancelDetainTrainAuto.menu.operation) { this.AutomaticBuckle = true; this.autoRadio1 = '2'; + this.autoRadio = '1'; + if (!this.selected.right) { + this.autoRadio = '2'; + } } }, doClose() { @@ -281,17 +289,66 @@ export default { } else if (this.operation == OperationEvent.StationStand.earlyDeparture.menu.operation) { /** 提前发车*/ this.earlyDeparture(); + } else if (this.operation == OperationEvent.StationStand.setDetainTrainAuto.menu.operation) { + /** 区间自动扣车*/ + this.setDetainTrainAuto(); + } else if (this.operation == OperationEvent.StationStand.cancelDetainTrainAuto.menu.operation) { + /** 取消区间自动扣车*/ + this.cancelDetainTrainAuto(); } }, + setDetainTrainAuto() { // 区间自动扣车 + const operate = { + over: true, + operation: OperationEvent.StationStand.setDetainTrainAuto.menu.operation, + cmdType: CMD.Stand.CMD_STAND_SET_HOLD_TRAIN_AUTO, + param: { + Direction: this.autoRadio // 1 上行 2 下行 + } + }; + + this.loading = true; + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { + this.loading = false; + this.doClose(); + if (!valid) { + this.$refs.noticeInfo.doShow(operate); + } + }).catch(() => { + this.loading = false; + this.doClose(); + this.$refs.noticeInfo.doShow(operate); + }); + }, + cancelDetainTrainAuto() { // 取消区间自动扣车 + const operate = { + over: true, + operation: OperationEvent.StationStand.cancelDetainTrainAuto.menu.operation, + cmdType: CMD.Stand.CMD_STAND_CANCEL_HOLD_TRAIN_AUTO, + param: { + Direction: this.autoRadio // 1 上行 2 下行 + } + }; + + this.loading = true; + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { + this.loading = false; + this.doClose(); + if (!valid) { + this.$refs.noticeInfo.doShow(operate); + } + }).catch(() => { + this.loading = false; + this.doClose(); + this.$refs.noticeInfo.doShow(operate); + }); + }, // 设置扣车 setDetainTrain() { const operate = { over: true, operation: OperationEvent.StationStand.setDetainTrain.menu.operation, - cmdType: CMD.Stand.CMD_STAND_SET_HOLD_TRAIN, - param: { - StationStand_Code: this.standCode - } + cmdType: CMD.Stand.CMD_STAND_SET_HOLD_TRAIN }; this.loading = true; @@ -312,10 +369,7 @@ export default { const operate = { over: true, operation: OperationEvent.StationStand.cancelDetainTrain.menu.operation, - cmdType: CMD.Stand.CMD_STAND_CANCEL_HOLD_TRAIN, - param: { - StationStand_Code: this.standCode - } + cmdType: CMD.Stand.CMD_STAND_CANCEL_HOLD_TRAIN }; this.loading = true; @@ -336,10 +390,7 @@ export default { const operate = { over: true, operation: OperationEvent.StationStand.earlyDeparture.menu.operation, - cmdType: CMD.Stand.CMD_STAND_EARLY_DEPART, - param: { - StationStand_Code: this.standCode - } + cmdType: CMD.Stand.CMD_STAND_EARLY_DEPART }; this.loading = true; diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/standDetail.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/standDetail.vue index 45e7b649f..fb10a0192 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/standDetail.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/standDetail.vue @@ -1,20 +1,35 @@ \ No newline at end of file +}; + diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/standDetainTrainAll.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/standDetainTrainAll.vue deleted file mode 100644 index 00d7bfa25..000000000 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/standDetainTrainAll.vue +++ /dev/null @@ -1,180 +0,0 @@ - - - \ No newline at end of file diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/standJumpStopControl.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/standJumpStopControl.vue index 8dc9feb97..e3dcd169d 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/standJumpStopControl.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/standJumpStopControl.vue @@ -92,258 +92,260 @@ diff --git a/src/jmapNew/theme/ningbo_01/menus/dialog/switchControl.vue b/src/jmapNew/theme/ningbo_01/menus/dialog/switchControl.vue index 520009fe3..5928106df 100644 --- a/src/jmapNew/theme/ningbo_01/menus/dialog/switchControl.vue +++ b/src/jmapNew/theme/ningbo_01/menus/dialog/switchControl.vue @@ -1,259 +1,303 @@ \ No newline at end of file +}; + diff --git a/src/jmapNew/theme/ningbo_01/menus/menuSignal.vue b/src/jmapNew/theme/ningbo_01/menus/menuSignal.vue index 04e03d9b9..4edabfdb8 100644 --- a/src/jmapNew/theme/ningbo_01/menus/menuSignal.vue +++ b/src/jmapNew/theme/ningbo_01/menus/menuSignal.vue @@ -251,7 +251,7 @@ export default { code: `${this.selected.code}`, operation: OperationEvent.Signal.arrangementRoute.menu.operation, param: { - Signal_Code: `${this.selected.code}` + Signal_Code: this.selected.code } }; diff --git a/src/jmapNew/theme/ningbo_01/menus/menuStation.vue b/src/jmapNew/theme/ningbo_01/menus/menuStation.vue index b2c22c81b..e00c7a549 100644 --- a/src/jmapNew/theme/ningbo_01/menus/menuStation.vue +++ b/src/jmapNew/theme/ningbo_01/menus/menuStation.vue @@ -293,7 +293,7 @@ export default { code: this.selected.code, type: MapDeviceType.Station.type, label: MapDeviceType.Station.label, - operation: OperationEvent.Station.atsAutoControlALL.menu.operation + operation: OperationEvent.Station.stationSetRouteControlAll.menu.operation }; this.$store.dispatch('training/next', operate).then(({ valid }) => { if (valid) { diff --git a/src/jmapNew/theme/ningbo_01/menus/menuStationStand.vue b/src/jmapNew/theme/ningbo_01/menus/menuStationStand.vue index 6d7bfb588..7ad1e5ced 100644 --- a/src/jmapNew/theme/ningbo_01/menus/menuStationStand.vue +++ b/src/jmapNew/theme/ningbo_01/menus/menuStationStand.vue @@ -6,10 +6,9 @@ - - +
@@ -22,10 +21,9 @@ import StandDetail from './dialog/standDetail'; import StandRunLevel from './dialog/standRunLevel'; import StandStopTime from './dialog/standStopTime'; import StandBulkBuckleTrain from './dialog/standBulkBuckleTrain'; -import StandDetainTrainAll from './dialog/standDetainTrainAll'; import NoticeInfo from './dialog/childDialog/childDialog/noticeInfo'; -import Handler from '@/scripts/cmdPlugin/Handler'; +// import Handler from '@/scripts/cmdPlugin/Handler'; import { mapGetters } from 'vuex'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; @@ -43,8 +41,7 @@ export default { StandRunLevel, NoticeInfo, StandBackStrategy, - StandStopTime, - StandDetainTrainAll + StandStopTime }, props: { selected: { @@ -353,10 +350,10 @@ export default { setJumpStop() { const step = { start: true, - code: `${this.selected.code}`, + code: this.selected.code, operation: OperationEvent.StationStand.setJumpStop.menu.operation, param: { - StationStand_Code: `${this.selected.code}` + StationStand_Code: this.selected.code } }; this.$store.dispatch('training/nextNew', step).then(({ valid }) => { @@ -370,10 +367,10 @@ export default { cancelJumpStop() { const step = { start: true, - code: `${this.selected.code}`, + code: this.selected.code, operation: OperationEvent.StationStand.cancelJumpStop.menu.operation, param: { - StationStand_Code: `${this.selected.code}` + StationStand_Code: this.selected.code } }; this.$store.dispatch('training/nextNew', step).then(({ valid }) => { @@ -387,10 +384,10 @@ export default { setStopTime() { const step = { start: true, - code: `${this.selected.code}`, + code: this.selected.code, operation: OperationEvent.StationStand.setStopTime.menu.operation, param: { - StationStand_Code: `${this.selected.code}` + StationStand_Code: this.selected.code } }; this.$store.dispatch('training/nextNew', step).then(({ valid, response }) => { @@ -410,10 +407,10 @@ export default { setRunLevel() { const step = { start: true, - code: `${this.selected.code}`, + code: this.selected.code, operation: OperationEvent.StationStand.setRunLevel.menu.operation, param: { - StationStand_Code: `${this.selected.code}` + StationStand_Code: this.selected.code } }; this.$store.dispatch('training/nextNew', step).then(({ valid, response }) => { @@ -433,10 +430,10 @@ export default { earlyDeparture() { const step = { start: true, - code: `${this.selected.code}`, + code: this.selected.code, operation: OperationEvent.StationStand.earlyDeparture.menu.operation, param: { - StationStand_Code: `${this.selected.code}` + StationStand_Code: this.selected.code } }; this.$store.dispatch('training/nextNew', step).then(({ valid }) => { @@ -450,10 +447,10 @@ export default { detail() { const step = { start: true, - code: `${this.selected.code}`, + code: this.selected.code, operation: OperationEvent.StationStand.detail.menu.operation, param: { - StationStand_Code: `${this.selected.code}` + StationStand_Code: this.selected.code } }; this.$store.dispatch('training/nextNew', step).then(({ valid, response }) => { diff --git a/src/jmapNew/theme/ningbo_01/menus/menuSwitch.vue b/src/jmapNew/theme/ningbo_01/menus/menuSwitch.vue index dddc4058a..177db9e33 100644 --- a/src/jmapNew/theme/ningbo_01/menus/menuSwitch.vue +++ b/src/jmapNew/theme/ningbo_01/menus/menuSwitch.vue @@ -95,11 +95,11 @@ export default { handler: this.active, cmdType: CMD.Switch.CMD_SWITCH_ACTIVE }, - { - label: '确认计轴有效', - handler: this.alxeEffective, - cmdType: CMD.Switch.CMD_SWITCH_COMFIRMATION_AXLE - }, + // { + // label: '确认计轴有效', + // handler: this.alxeEffective, + // cmdType: CMD.Switch.CMD_SWITCH_COMFIRMATION_AXLE + // }, { label: '设置临时限速', handler: this.setSpeed, @@ -211,6 +211,38 @@ export default { this.$refs.noticeInfo.doShow(operate); }); }, + // 单操到定位 + locate() { + const operate = { + start: true, + operation: OperationEvent.Switch.locate.menu.operation, + param: { + Switch_Code: this.selected.code + } + }; + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { + if (valid) { + this.$store.dispatch('menuOperation/handleBreakFlag', { break: true }); + this.$refs.switchControl.doShow(operate, this.selected); + } + }); + }, + // 单操到反位 + reverse() { + const operate = { + start: true, + operation: OperationEvent.Switch.reverse.menu.operation, + param: { + Switch_Code: this.selected.code + } + }; + this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { + if (valid) { + this.$store.dispatch('menuOperation/handleBreakFlag', { break: true }); + this.$refs.switchControl.doShow(operate, this.selected); + } + }); + }, // 道岔单锁 lock() { const operate = { @@ -228,7 +260,7 @@ export default { } }); }, - // 道岔解封 + // 道岔解锁 unlock() { const operate = { start: true, diff --git a/src/jmapNew/theme/ningbo_01/menus/statusBar.vue b/src/jmapNew/theme/ningbo_01/menus/statusBar.vue deleted file mode 100644 index 88a52a177..000000000 --- a/src/jmapNew/theme/ningbo_01/menus/statusBar.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - diff --git a/src/jmapNew/theme/ningbo_01/menus/statusDownTrainDetail.vue b/src/jmapNew/theme/ningbo_01/menus/statusDownTrainDetail.vue deleted file mode 100644 index b0c086739..000000000 --- a/src/jmapNew/theme/ningbo_01/menus/statusDownTrainDetail.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - diff --git a/src/jmapNew/theme/ningbo_01/menus/statusUpTrainDetail.vue b/src/jmapNew/theme/ningbo_01/menus/statusUpTrainDetail.vue deleted file mode 100644 index afafa39cf..000000000 --- a/src/jmapNew/theme/ningbo_01/menus/statusUpTrainDetail.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/scripts/cmdPlugin/CommandEnum.js b/src/scripts/cmdPlugin/CommandEnum.js index f7d54a7db..fbee7f043 100644 --- a/src/scripts/cmdPlugin/CommandEnum.js +++ b/src/scripts/cmdPlugin/CommandEnum.js @@ -84,7 +84,7 @@ export default { CMD_SIGNAL_CANCEL_CI_AUTO_TRIGGER: {value:'Signal_Cancel_CI_Auto_Trigger', label: '取消联锁自动触发'}, /** 设置/取消通过模式 */ CMD_SIGNAL_PASS_MODEL: {value:'Signal_Pass_Model', label: '设置/取消通过模式'}, - /** 设置/取消通过模式 */ + /** 查询进路状态 */ CMD_SIGNAL_DETAIL: {value:'Signal_Detail', label: '查询进路状态'} }, diff --git a/src/scripts/cmdPlugin/CommandHandler.js b/src/scripts/cmdPlugin/CommandHandler.js index 2560fcec1..6098ba25b 100644 --- a/src/scripts/cmdPlugin/CommandHandler.js +++ b/src/scripts/cmdPlugin/CommandHandler.js @@ -23,7 +23,6 @@ class CommandHandle { getDefinition(cmdType) { if (cmdType) { const simulationRole = Handler.getSimulationRole(); - // const simulationRole = 'Center'; return this.definitionMap[simulationRole][cmdType.value] || null; } else { return null; diff --git a/src/scripts/cmdPlugin/OperationHandler.js b/src/scripts/cmdPlugin/OperationHandler.js index 66f62a514..1eacce2aa 100644 --- a/src/scripts/cmdPlugin/OperationHandler.js +++ b/src/scripts/cmdPlugin/OperationHandler.js @@ -881,7 +881,7 @@ export const OperationEvent = { domId: '_Tips-Signal-Detail-Menu' } }, - // 查询进路状态 + // 设置/取消通过模式 singalPassModel: { menu: { operation: '317', @@ -918,7 +918,7 @@ export const OperationEvent = { domId: '_Tips-Section-Query-Menu' } }, - // 区故解 + // 区故解 (故障解锁) fault: { button: { operation: '4020', diff --git a/src/utils/baseUrl.js b/src/utils/baseUrl.js index 79d1c6346..1e9afea51 100644 --- a/src/utils/baseUrl.js +++ b/src/utils/baseUrl.js @@ -3,11 +3,11 @@ export function getBaseUrl() { let BASE_API; if (process.env.NODE_ENV === 'development') { // BASE_API = 'https://joylink.club/jlcloud'; - // BASE_API = 'https://test.joylink.club/jlcloud'; + BASE_API = 'https://test.joylink.club/jlcloud'; // BASE_API = 'http://192.168.3.5:9000'; // 袁琪 // BASE_API = 'http://192.168.3.6:9000'; // 旭强 // BASE_API = 'http://192.168.3.41:9000'; // 张赛 - BASE_API = 'http://192.168.3.82:9000'; // 杜康 + // BASE_API = 'http://192.168.3.82:9000'; // 杜康 } else { BASE_API = process.env.VUE_APP_BASE_API; }