Authored by 王涛
Showing 19 changed files with 690 additions and 0 deletions
@@ -40,5 +40,7 @@ @@ -40,5 +40,7 @@
40 40
41 @import "../css/navTabs.css"; 41 @import "../css/navTabs.css";
42 42
  43 +@import "../css/faultDiagnosis.css";
  44 +
43 /*对比分析*/ 45 /*对比分析*/
44 @import "../css/analysis.css"; 46 @import "../css/analysis.css";
  1 +.fault-book-input{
  2 + width: 75%;
  3 + text-align: center;
  4 + padding: 1.5%;
  5 +}
  6 +
  7 +.fault-book-input-text{
  8 + width: 25%;
  9 + text-align: center;
  10 + margin-right: 3%;
  11 +}
  12 +
  13 +.fault-book-title-card{
  14 + margin: 1%;
  15 + padding-left: 2%;
  16 +}
  17 +
  18 +.fault-book-title-card-text{
  19 + color: #3A92FC;
  20 +}
  21 +
  22 +#faultDiagnosisIndex{
  23 + background-color: #F4F5FA;
  24 + padding-top: 1%;
  25 + height: 100%;
  26 +}
  27 +
  28 +.fault-definition .fault-definition-line{
  29 + padding-top: 1%;
  30 +}
  31 +.fault-definition .fault-definition-img{
  32 + padding-right: 0.5%;
  33 +}
  34 +
  35 +.title-img{
  36 + position: absolute;
  37 + left: 5%;
  38 + width: 0.8%;
  39 + top: 19.5%;
  40 +}
  41 +
  42 +.title-text{
  43 + position: absolute;
  44 + left: 7%;
  45 + font-size: 18px;
  46 + top: 19%;
  47 +}
  48 +
  49 +.fault-definition .fault-definition-radio{
  50 + position: absolute;
  51 + left: 7%;
  52 + top: 22%;
  53 + width: 5%;
  54 +}
  55 +
  56 +.fault-definition .fault-definition-select-up{
  57 + position: absolute;
  58 + top: 22%;
  59 + left: 20%;
  60 +}
  61 +
  62 +.fault-definition .fault-definition-select-down{
  63 + position: absolute;
  64 + top: 27%;
  65 + left: 20%;
  66 +}
  67 +
  68 +.network-monitor .context-radio{
  69 + position: absolute;
  70 + left: 2.7%;
  71 + top: 22%;
  72 + width: 20%;
  73 +}
  74 +
  75 +.application-monitor .context-radio{
  76 + position: absolute;
  77 + left: 2.7%;
  78 + top: 22%;
  79 + width: 20%;
  80 +}
  81 +
  82 +.apm-monitor .context-radio{
  83 + position: absolute;
  84 + left: 2.7%;
  85 + top: 22%;
  86 + width: 20%;
  87 +}
  88 +
  89 +.log-detection .context-radio{
  90 + position: absolute;
  91 + left: 2.7%;
  92 + top: 22%;
  93 + width: 20%;
  94 +}
  95 +
  96 +.basic-environment .context-radio{
  97 + position: absolute;
  98 + left: 2.7%;
  99 + top: 22%;
  100 + width: 20%;
  101 +}
  102 +
  103 +.basic-environment .context-select{
  104 + position: absolute;
  105 + width: 40%;
  106 + top: 28%;
  107 + left: 0.8%;
  108 +}
  109 +
  110 +.context-multiple-choice{
  111 + position: absolute;
  112 + left: 7%;
  113 + top: 27%;
  114 +}
  115 +
  116 +.multiple-choice-icon{
  117 + position: relative;
  118 + top: 28.5%;
  119 + right: 18px;
  120 +}
  121 +
  122 +.multiple-choice-button{
  123 + min-width: 140px;
  124 +}
  125 +
  126 +.multiple-choice-add-icon{
  127 + position: relative;
  128 + top: 33%;
  129 + left: -132px;
  130 +}
  131 +
  132 +.network-monitor-popup-left-context{
  133 +
  134 +}
  135 +
  136 +.network-monitor-popup-left{
  137 + background-color: #3B92FC;
  138 + padding-bottom: 3%;
  139 +}
  140 +
  141 +.network-monitor-popup{
  142 +
  143 +}
  144 +
  145 +.network-monitor-popup .context-item{
  146 +
  147 +}
  148 +
  149 +.network-monitor-popup .context-head{
  150 + color: white;
  151 + padding-top: 10px;
  152 + font-size: 25px;
  153 +}
  154 +
  155 +.network-monitor-popup .multiple-choice-button{
  156 + width: 100%;
  157 + color: #C7DBFE;
  158 + font-size: 18px;
  159 + margin-top: 15px;
  160 + padding-top: 10px;
  161 + height: 10%;
  162 +}
  163 +
  164 +.network-monitor-popup-right .context-head{
  165 + color: #3B92FC;
  166 + font-size: 18px;
  167 + text-align: left;
  168 + margin-left: 4%;
  169 +}
  1 +<div id="faultDiagnosisIndex">
  2 + <!--搜索输入框部分-->
  3 + <el-row>
  4 + <el-col :span="6">
  5 + <div class="grid-content bg-purple">
  6 + <span class="fault-book-input-text">所属业务</span>
  7 + <el-input v-model="input" placeholder="Please input 1" class="fault-book-input"/>
  8 + </div>
  9 + </el-col>
  10 + <el-col :span="6">
  11 + <div class="grid-content bg-purple">
  12 + <span class="fault-book-input-text">名称</span>
  13 + <el-input v-model="input" placeholder="Please input 2" class="fault-book-input"/>
  14 + </div>
  15 + </el-col>
  16 + </el-row>
  17 +
  18 + <!--卡片分页排头-->
  19 + <el-row :gutter="12" class="fault-book-title-card">
  20 + <el-col :span="3">
  21 + <el-card class="fault-book-title-card-text" @click="clickDaultDefinitionFunc()" shadow="hover">故障定义</el-card>
  22 + </el-col>
  23 + <el-col :span="3">
  24 + <el-card class="fault-book-title-card-text" @click="clickNetworkMonitorFunc()" shadow="hover">网络监测</el-card>
  25 + </el-col>
  26 + <el-col :span="3">
  27 + <el-card class="fault-book-title-card-text" @click="applicationMonitorFunc()" shadow="hover">应用检测</el-card>
  28 + </el-col>
  29 + <el-col :span="3">
  30 + <el-card class="fault-book-title-card-text" @click="basicEnvironmentFunc()" shadow="hover">基础环境</el-card>
  31 + </el-col>
  32 + <el-col :span="3">
  33 + <el-card class="fault-book-title-card-text" @click="apmMonitorFunc()" shadow="hover">APM</el-card>
  34 + </el-col>
  35 + <el-col :span="3">
  36 + <el-card class="fault-book-title-card-text" @click="logDetectionFunc()" shadow="hover">日志检测</el-card>
  37 + </el-col>
  38 + <el-col :span="3">
  39 + <el-card class="fault-book-title-card-text" @click="subscriptionReportFunc()" shadow="hover">报告订阅</el-card>
  40 + </el-col>
  41 + </el-row>
  42 +
  43 + <!---主体卡片部分-->
  44 + <!--故障定义-->
  45 + <div class="fault-definition" v-if="faultDefinitionHide">
  46 + <div>
  47 + <span>
  48 + <img src="./src/assets/images/faultDiagnosis/icon-gzdy.png" class="title-img">
  49 + <span class="title-text">故障定义</span>
  50 + </span>
  51 + </div>
  52 + <div>
  53 + <span class="fault-definition-radio">
  54 + <el-radio v-model="faultDefinitionRadio" label="1">产生告警时触发</el-radio>
  55 + <el-radio v-model="faultDefinitionRadio" label="2">自定义规则</el-radio>
  56 + </span>
  57 + <span class="fault-definition-select-up">
  58 +
  59 + <el-select v-model="value" placeholder="Select">
  60 + <el-option
  61 + v-for="item in options"
  62 + :key="item.value"
  63 + :label="item.label"
  64 + :value="item.value"
  65 + >
  66 + </el-option>
  67 + </el-select>
  68 + 的警告级别为
  69 + <el-select v-model="value" placeholder="Select">
  70 + <el-option
  71 + v-for="item in options"
  72 + :key="item.value"
  73 + :label="item.label"
  74 + :value="item.value"
  75 + >
  76 + </el-option>
  77 + </el-select>
  78 + 时触发
  79 + </span>
  80 + <span class="fault-definition-select-down">
  81 +
  82 + <el-select v-model="value" placeholder="Select">
  83 + <el-option
  84 + v-for="item in options"
  85 + :key="item.value"
  86 + :label="item.label"
  87 + :value="item.value"
  88 + >
  89 + </el-option>
  90 + </el-select>
  91 + 的警告级别为
  92 + <el-select v-model="value" placeholder="Select">
  93 + <el-option
  94 + v-for="item in options"
  95 + :key="item.value"
  96 + :label="item.label"
  97 + :value="item.value"
  98 + >
  99 + </el-option>
  100 + </el-select>
  101 + 时触发
  102 + </span>
  103 +
  104 + </div>
  105 + </div>
  106 +
  107 + <!--网络检测-->
  108 + <div class="network-monitor" v-if="networkMonitorHide">
  109 + <div>
  110 + <span>
  111 + <img src="./src/assets/images/faultDiagnosis/icon-wljc.png" class="title-img">
  112 + <span class="title-text">网络检测</span>
  113 + </span>
  114 + </div>
  115 + <div class="context-radio">
  116 + <span class="fault-book-input-text">状态选择</span>
  117 + <el-radio v-model="radio1" label="1">启用</el-radio>
  118 + <el-radio v-model="radio1" label="2">不启用</el-radio>
  119 + </div>
  120 + <div class="context-multiple-choice">
  121 + <span v-for="(item, index) in networkMonitorList" :key="index">
  122 + <span>
  123 + <el-button class="multiple-choice-button" type="primary">{{item.title}}</el-button>
  124 + <img :id="item.id" @click="deleteItem(item.id, networkMonitorList)" src="./src/assets/images/faultDiagnosis/icon-item-delete.png" class="multiple-choice-icon">
  125 + </span>
  126 + </span>
  127 + <span>
  128 + <el-button class="multiple-choice-button" @click="networkMonitorVisible = true">添加网络检测</el-button>
  129 + <img src="./src/assets/images/faultDiagnosis/icon-item-add.png" class="multiple-choice-add-icon">
  130 + </span>
  131 + </div>
  132 + </div>
  133 +
  134 + <!--应用监测-->
  135 + <div class="application-monitor" v-if="applicationMonitorHide">
  136 + <div>
  137 + <span>
  138 + <img src="./src/assets/images/faultDiagnosis/icon-yyjc.png" class="title-img">
  139 + <span class="title-text">应用检测</span>
  140 + </span>
  141 + </div>
  142 + <div class="context-radio">
  143 + <span class="fault-book-input-text">状态选择</span>
  144 + <el-radio v-model="radio1" label="1">启用</el-radio>
  145 + <el-radio v-model="radio1" label="2">不启用</el-radio>
  146 + </div>
  147 + <div class="context-multiple-choice">
  148 + <span v-for="(item, index) in applicationMonitorList" :key="index">
  149 + <span>
  150 + <el-button class="multiple-choice-button" type="primary">{{item.title}}</el-button>
  151 + <img :id="item.id" @click="deleteItem(item.id, applicationMonitorList)" src="./src/assets/images/faultDiagnosis/icon-item-delete.png" class="multiple-choice-icon">
  152 + </span>
  153 + </span>
  154 + <span>
  155 + <el-button class="multiple-choice-button" @click="addNetworkMonitorItem()">添加应用检测</el-button>
  156 + <img src="./src/assets/images/faultDiagnosis/icon-item-add.png" class="multiple-choice-add-icon">
  157 + </span>
  158 + </div>
  159 + </div>
  160 +
  161 + <!--基础环境 Basic environment-->
  162 + <div class="basic-environment" v-if="basicEnvironmentHide">
  163 + <div>
  164 + <span>
  165 + <img src="./src/assets/images/faultDiagnosis/icon-jchj.png" class="title-img">
  166 + <span class="title-text">基础环境</span>
  167 + </span>
  168 + </div>
  169 + <div class="context-radio">
  170 + <span class="fault-book-input-text">状态选择</span>
  171 + <el-radio v-model="radio1" label="1">启用</el-radio>
  172 + <el-radio v-model="radio1" label="2">不启用</el-radio>
  173 + </div>
  174 + <div class="context-select">
  175 + <span class="fault-book-input-text context-select-text">选择类型</span>
  176 + <el-select v-model="value" placeholder="从业务选择">
  177 + <el-option
  178 + v-for="item in options"
  179 + :key="item.value"
  180 + :label="item.label"
  181 + :value="item.value"
  182 + >
  183 + </el-option>
  184 + </el-select>
  185 + <el-select v-model="value" placeholder="从资源选择">
  186 + <el-option
  187 + v-for="item in options"
  188 + :key="item.value"
  189 + :label="item.label"
  190 + :value="item.value"
  191 + >
  192 + </el-option>
  193 + </el-select>
  194 + </div>
  195 + </div>
  196 +
  197 + <!--APM-->
  198 + <div class="apm-monitor" v-if="apmMonitorHide">
  199 + <div>
  200 + <span>
  201 + <img src="./src/assets/images/faultDiagnosis/icon-apm.png" class="title-img">
  202 + <span class="title-text">APM</span>
  203 + </span>
  204 + </div>
  205 + <div class="context-radio">
  206 + <span class="fault-book-input-text">状态选择</span>
  207 + <el-radio v-model="radio1" label="1">启用</el-radio>
  208 + <el-radio v-model="radio1" label="2">不启用</el-radio>
  209 + </div>
  210 + <div class="context-multiple-choice">
  211 + <span v-for="(item, index) in apmMonitorList" :key="index">
  212 + <span>
  213 + <el-button class="multiple-choice-button" type="primary">{{item.title}}</el-button>
  214 + <img :id="item.id" @click="deleteItem(item.id, apmMonitorList)" src="./src/assets/images/faultDiagnosis/icon-item-delete.png" class="multiple-choice-icon">
  215 + </span>
  216 + </span>
  217 + <span>
  218 + <el-button class="multiple-choice-button" @click="addNetworkMonitorItem()">添加 APM</el-button>
  219 + <img src="./src/assets/images/faultDiagnosis/icon-item-add.png" class="multiple-choice-add-icon">
  220 + </span>
  221 + </div>
  222 + </div>
  223 +
  224 + <!--日志检测-->
  225 + <div class="log-detection" v-if="logDetectionHide">
  226 + <div>
  227 + <span>
  228 + <img src="./src/assets/images/faultDiagnosis/icon-rzjc.png" class="title-img">
  229 + <span class="title-text">日志检测</span>
  230 + </span>
  231 + </div>
  232 + <div class="context-radio">
  233 + <span class="fault-book-input-text">状态选择</span>
  234 + <el-radio v-model="radio1" label="1">启用</el-radio>
  235 + <el-radio v-model="radio1" label="2">不启用</el-radio>
  236 + </div>
  237 + <div class="context-multiple-choice">
  238 + <span v-for="(item, index) in logDetectionList" :key="index">
  239 + <span>
  240 + <el-button class="multiple-choice-button" type="primary">{{item.title}}</el-button>
  241 + <img :id="item.id" @click="deleteItem(item.id, logDetectionList)" src="./src/assets/images/faultDiagnosis/icon-item-delete.png" class="multiple-choice-icon">
  242 + </span>
  243 + </span>
  244 + <span>
  245 + <el-button class="multiple-choice-button" @click="addNetworkMonitorItem()">添加日志检测</el-button>
  246 + <img src="./src/assets/images/faultDiagnosis/icon-item-add.png" class="multiple-choice-add-icon">
  247 + </span>
  248 + </div>
  249 + </div>
  250 +
  251 + <!--订阅报告-->
  252 + <div class="subscription-report" v-if="subscriptionReportHide">
  253 + <div>
  254 + <span>
  255 + <img src="./src/assets/images/faultDiagnosis/icon-bgdy.png" class="title-img">
  256 + <span class="title-text">报告订阅</span>
  257 + </span>
  258 + </div>
  259 + <div class="context-multiple-choice">
  260 + <span v-for="(item, index) in subscriptionReportList" :key="index">
  261 + <span>
  262 + <el-button class="multiple-choice-button" type="primary">{{item.title}}</el-button>
  263 + <img :id="item.id" @click="deleteItem(item.id, subscriptionReportList)" src="./src/assets/images/faultDiagnosis/icon-item-delete.png" class="multiple-choice-icon">
  264 + </span>
  265 + </span>
  266 + <span>
  267 + <el-button class="multiple-choice-button" @click="addNetworkMonitorItem()">添加订阅人员</el-button>
  268 + <img src="./src/assets/images/faultDiagnosis/icon-item-add.png" class="multiple-choice-add-icon">
  269 + </span>
  270 + </div>
  271 + </div>
  272 +
  273 + <!--网络检测弹窗-->
  274 + <div class="network-monitor-popup">
  275 + <el-dialog v-model="networkMonitorVisible" title="故障新增内容">
  276 + <el-row>
  277 + <el-col :span="6">
  278 + <div class="grid-content bg-purple network-monitor-popup-left">
  279 + <span>
  280 + <div class="context-head">
  281 + 已配置链路
  282 + </div>
  283 + </span>
  284 + <span v-for="(item, index) in networkMonitorList" :key="index">
  285 + <span>
  286 + <div class="multiple-choice-button">{{item.title}}</div>
  287 + <!--img-->
  288 + </span>
  289 + </span>
  290 + <span>
  291 + <div class="multiple-choice-button">
  292 + <img src="./src/assets/images/faultDiagnosis/icon-popup-add.png">
  293 + </div>
  294 + </span>
  295 +
  296 + </div>
  297 + </el-col>
  298 + <el-col :span="18">
  299 + <div class="grid-content bg-purple-light network-monitor-popup-right">
  300 + <div class="context-head">
  301 + <span>电子税务局网络链路配置</span>
  302 + <span >
  303 + <img src="./src/assets/images/faultDiagnosis/icon-popup-right-delete.png">
  304 + </span>
  305 + </div>
  306 + </div>
  307 + </el-col>
  308 + </el-row>
  309 +<!-- <div class="network-monitor-popup-left">-->
  310 +<!-- <span>-->
  311 +<!-- <div class="context-head">-->
  312 +<!-- 已配置链路-->
  313 +<!-- </div>-->
  314 +<!-- </span>-->
  315 +<!-- <span v-for="(item, index) in networkMonitorList" :key="index">-->
  316 +<!-- <span>-->
  317 +<!-- <div class="multiple-choice-button">{{item.title}}</div>-->
  318 +<!-- &lt;!&ndash;img&ndash;&gt;-->
  319 +<!-- </span>-->
  320 +<!-- </span>-->
  321 +<!-- <span>-->
  322 +<!-- <div class="multiple-choice-button">-->
  323 +<!-- <img src="./src/assets/images/faultDiagnosis/icon-popup-add.png">-->
  324 +<!-- </div>-->
  325 +<!-- </span>-->
  326 +<!-- </div>-->
  327 +<!-- <div class="network-monitor-popup-right">-->
  328 +<!-- <div class="context-head">-->
  329 +<!-- <span>电子税务局网络链路配置</span>-->
  330 +<!-- <span>-->
  331 +<!-- <img src="./src/assets/images/faultDiagnosis/icon-popup-right-delete.png">-->
  332 +<!-- </span>-->
  333 +<!-- </div>-->
  334 +<!-- </div>-->
  335 + </el-dialog>
  336 + </div>
  337 +
  338 +</div>
  1 +export default {
  2 + name: 'faultDiagnosis',
  3 + template: '',
  4 + components: {},
  5 + data () {
  6 + return {
  7 + multiple_choice_button_id_Tmpl: '',
  8 + multiple_choice_button_id: '',
  9 + faultDefinitionHide: false,
  10 + networkMonitorHide: false,
  11 + applicationMonitorHide: false,
  12 + basicEnvironmentHide: false,
  13 + apmMonitorHide: false,
  14 + logDetectionHide: false,
  15 + subscriptionReportHide: false,
  16 + //网络检测选中项集合
  17 + networkMonitorList: [
  18 + {
  19 + title: "电子税务局外用链路1",
  20 + type: "networkMonitor",
  21 + id: "networkMonitor1"
  22 + },
  23 + {
  24 + title: "电子税务局外用链路2",
  25 + type: "networkMonitor",
  26 + id: "networkMonitor2"
  27 + },
  28 + {
  29 + title: "电子税务局外用链路3",
  30 + type: "networkMonitor",
  31 + id: "networkMonitor3"
  32 + }
  33 + ],
  34 + //应用检测选中项集合
  35 + applicationMonitorList: [
  36 + {
  37 + title: "从对接过来的NPM中选择",
  38 + type: "applicationMonitor",
  39 + id: "applicationMonitor1"
  40 + }
  41 + ],
  42 + //APM
  43 + apmMonitorList: [
  44 + {
  45 + title: "arms",
  46 + type: "apmMonitor",
  47 + id: " apmMonitor1"
  48 + }
  49 + ],
  50 + //日志检测
  51 + logDetectionList: [
  52 + {
  53 + title: "日志检测1",
  54 + type: "logDetection",
  55 + id: " logDetection1"
  56 + }
  57 + ],
  58 + //订阅人员
  59 + //订阅人员
  60 + subscriptionReportList: [
  61 + {
  62 + title: "张三",
  63 + type: "subscriptionReport",
  64 + id: " subscriptionReport1"
  65 + },
  66 + {
  67 + title: "李四",
  68 + type: "subscriptionReport",
  69 + id: " subscriptionReport2"
  70 + },
  71 + {
  72 + title: "王五",
  73 + type: "subscriptionReport",
  74 + id: " subscriptionReport3"
  75 + }
  76 +
  77 + ],
  78 + networkMonitorVisible: false,
  79 + }
  80 + },
  81 + computed: {},
  82 + methods: {
  83 + hiddenAll(){
  84 + this.faultDefinitionHide = false;
  85 + this.networkMonitorHide = false;
  86 + this.applicationMonitorHide = false;
  87 + this.basicEnvironmentHide = false;
  88 + this.apmMonitorHide = false;
  89 + this.logDetectionHide = false;
  90 + this.subscriptionReportHide = false;
  91 + },
  92 + // 打开故障定义卡片
  93 + clickDaultDefinitionFunc(){
  94 + this.hiddenAll();
  95 + this.faultDefinitionHide = true;
  96 + },
  97 + //打开网络监测卡片
  98 + clickNetworkMonitorFunc(){
  99 + this.hiddenAll();
  100 + this.networkMonitorHide = true;
  101 + },
  102 + //打开应用监测卡片
  103 + applicationMonitorFunc(){
  104 + this.hiddenAll();
  105 + this.applicationMonitorHide = true;
  106 + },
  107 + //打开基础环境卡片
  108 + basicEnvironmentFunc(){
  109 + this.hiddenAll();
  110 + this.basicEnvironmentHide = true;
  111 + },
  112 + //APM
  113 + apmMonitorFunc(){
  114 + this.hiddenAll();
  115 + this.apmMonitorHide = true;
  116 + },
  117 + //日志检测
  118 + logDetectionFunc(){
  119 + this.hiddenAll();
  120 + this.logDetectionHide = true;
  121 + },
  122 + //报告订阅
  123 + subscriptionReportFunc(){
  124 + this.hiddenAll();
  125 + this.subscriptionReportHide = true;
  126 + },
  127 + //遍历集合,动态增加集合内item
  128 + showItemList(){
  129 + },
  130 + deleteItem(id, list){
  131 + var newList = [];
  132 + var type = '';
  133 + $.each(list,function (index, value) {
  134 + var valueId = value.id;
  135 + type = value.type;
  136 + if(valueId === id){
  137 + console.log("点击删除id为:" + valueId + "的值")
  138 + } else {
  139 + newList.push(value)
  140 + }
  141 + });
  142 + switch (type) {
  143 + case "networkMonitor":
  144 + //网络检测
  145 + this.networkMonitorList = newList;
  146 + break;
  147 + case "applicationMonitor":
  148 + //网络检测
  149 + this.applicationMonitorList = newList;
  150 + break;
  151 + case "apmMonitor":
  152 + //APM
  153 + this.apmMonitorList = newList;
  154 + break;
  155 + case "logDetection":
  156 + //日志检测
  157 + this.logDetectionList = newList;
  158 + break;
  159 + case "subscriptionReport":
  160 + //订阅人员
  161 + this.subscriptionReportList = newList;
  162 + break;
  163 + case "networkMonitor5":
  164 + //网络检测
  165 + break;
  166 + case "networkMonitor6":
  167 + //网络检测
  168 + break;
  169 +
  170 + }
  171 + },
  172 + //点击添加网络检测item
  173 + addNetworkMonitorItem(){
  174 +
  175 + }
  176 +
  177 + },
  178 + mounted () {},
  179 + unmounted () {}
  180 +
  181 +}