优化初始化进入界面时,默认监测因子选项为PM颗粒物等常用因子
| | |
| | | m[index].selected = true; |
| | | this.$router.push(m[index].path); |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.navTo(0); |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | sceneMap: new Map() |
| | | }; |
| | | }, |
| | | watch: { |
| | | // å½åæ¢åºå¿æ¶ï¼æ¸
空ææé项 |
| | | districtCode(nV, oV) { |
| | | if (nV != oV) { |
| | | this.handelCheckAllChange(false); |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | fetchScene(sceneType) { |
| | | return sceneInfoApi |
| | |
| | | |
| | | // æ ¹æ®é项ï¼å°æªæå¼çå¾å±å¼å¯ |
| | | types.forEach((t) => { |
| | | if (!lableMarkMap.has(t)) { |
| | | const key = this.districtCode + t; |
| | | if (!lableMarkMap.has(key)) { |
| | | this.fetchScene(t).then((res) => { |
| | | const layer = marks.createLabelMarks(sceneIcon(t), res); |
| | | lableMarkMap.set(t, { show: true, layer }); |
| | | lableMarkMap.set(key, { show: true, layer }); |
| | | }); |
| | | } else { |
| | | const m = lableMarkMap.get(t); |
| | | const m = lableMarkMap.get(key); |
| | | if (!m.show) { |
| | | MapUtil.addViews(m.layer); |
| | | m.show = true; |
| | |
| | | |
| | | // æ ¹æ®é项ï¼å°å¼å¯ä¸çæªéä¸å¾å±å
³é |
| | | for (const [key, value] of lableMarkMap) { |
| | | if (!types.includes(key)) { |
| | | if (!types.map((t) => this.districtCode + t).includes(key)) { |
| | | if (value.show) { |
| | | MapUtil.removeViews(value.layer); |
| | | value.show = false; |
| | |
| | | @click="deleteMission(row)" |
| | | >å é¤</el-button |
| | | > |
| | | <!-- <el-button |
| | | <el-button |
| | | :loading="row.downloadLoading" |
| | | type="primary" |
| | | size="small" |
| | | class="el-button-custom" |
| | | @click="downloadReport(row)" |
| | | >æ¥å</el-button |
| | | > --> |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | |
| | | <script> |
| | | // çæµå ååéæ¡ |
| | | import { radioOptions } from '@/constant/radio-options'; |
| | | import { radioOptions, defaultOptions } from '@/constant/radio-options'; |
| | | import { TYPE0 } from '@/constant/device-type'; |
| | | |
| | | export default { |
| | |
| | | emits: ['change'], |
| | | data() { |
| | | return { |
| | | radio: radioOptions(TYPE0)[0].value |
| | | radio: defaultOptions(TYPE0) |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | :data="sceneStore.sceneList" |
| | | table-layout="fixed" |
| | | size="small" |
| | | height="30vh" |
| | | :show-overflow-tooltip="true" |
| | | border |
| | | row-class-name="t-row" |
| | |
| | | header-row-class-name="t-header-row" |
| | | header-cell-class-name="t-header-cell" |
| | | @row-click="handleRowClick" |
| | | @filter-change="handleFilterChange" |
| | | > |
| | | <el-table-column type="index" label="#" width="25" /> |
| | | <el-table-column |
| | | prop="type" |
| | | label="ç±»å" |
| | | width="55" |
| | | width="56" |
| | | column-key="type" |
| | | :filters="sceneTypeFilter" |
| | | :filter-method="filterHandler" |
| | | /> |
| | | <el-table-column prop="name" label="åç§°" /> |
| | | <!-- <el-table-column prop="location" label="å°å" /> --> |
| | | <!-- <el-table-column prop="districtName" label="åºå¿" align="center" /> --> |
| | | <el-table-column |
| | | prop="districtName" |
| | | label="åºå¿" |
| | | align="center" |
| | | width="54" |
| | | /> |
| | | <!-- <el-table-column label="管ç" width="70" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button |
| | |
| | | data() { |
| | | return { |
| | | dialogVisible: false, |
| | | onConfirm: undefined |
| | | onConfirm: undefined, |
| | | showSceneTypes: [] |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | .map((v) => { |
| | | return { text: v.label, value: v.label }; |
| | | }); |
| | | }, |
| | | showSceneList() { |
| | | if (this.showSceneTypes.length == 0) { |
| | | return this.sceneStore.sceneList; |
| | | } else { |
| | | return this.sceneStore.sceneList.filter((v) => { |
| | | return this.showSceneTypes.indexOf(v.type) != -1; |
| | | }); |
| | | } |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | } |
| | | } |
| | | }, |
| | | 'sceneStore.sceneList': { |
| | | handler(nV, oV) { |
| | | // 'sceneStore.sceneList': { |
| | | // handler(nV, oV) { |
| | | // if (nV != oV) { |
| | | // this.dialogVisible = true; |
| | | // this.drawMarks(nV); |
| | | // } |
| | | // }, |
| | | // deep: true |
| | | // }, |
| | | showSceneList(nV, oV) { |
| | | if (nV != oV) { |
| | | this.dialogVisible = true; |
| | | this.drawMarks(nV); |
| | | } |
| | | }, |
| | | deep: true |
| | | }, |
| | | 'toolboxStore.sceneSearchStatus': { |
| | | handler(nV) { |
| | |
| | | filterHandler(value, row, column) { |
| | | const property = column['property']; |
| | | return row[property] === value; |
| | | }, |
| | | handleFilterChange(newFilters) { |
| | | // console.log(newFilters); |
| | | this.showSceneTypes = newFilters['type']; |
| | | } |
| | | } |
| | | }; |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { deviceList } from '@/constant/device-type'; |
| | | // import { deviceList } from '@/constant/device-type'; |
| | | import { mapStores } from 'pinia'; |
| | | import { useDeviceStore } from '@/stores/device'; |
| | | |
| | |
| | | { |
| | | label: 'é¿å®åº', |
| | | value: '310105' |
| | | }, |
| | | { |
| | | label: 'éå®åº', |
| | | value: '310106' |
| | | }, |
| | | { |
| | | label: '徿±åº', |
| | | value: '310104' |
| | | }, |
| | | { |
| | | label: 'éå±±åº', |
| | | value: '310116' |
| | | } |
| | | // { |
| | | // label: 'æ®éåº', |
| | | // value: '310107' |
| | | // }, |
| | | // { |
| | | // label: 'éµè¡åº', |
| | | // value: '310112' |
| | | // }, |
| | | // { |
| | | // label: 'å®å±±åº', |
| | | // value: '310113' |
| | | // }, |
| | | // { |
| | | // label: 'åå®åº', |
| | | // value: '310114' |
| | | // }, |
| | | ]; |
| | | |
| | | if (import.meta.env.VITE_DATA_MODE == 'jingan') { |
| | |
| | | import { TYPE0, TYPE1, TYPE2, TYPE4 } from '@/constant/device-type'; |
| | | import { |
| | | option1, |
| | | default1, |
| | | option2, |
| | | option3, |
| | | default3, |
| | | option4 |
| | | } from '@/constant/checkbox-options/options'; |
| | | import { option1 as option1Jingan } from '@/constant/checkbox-options/options-jingan'; |
| | | import { |
| | | option1 as option1Jingan, |
| | | default1 as default1Jingan |
| | | } from '@/constant/checkbox-options/options-jingan'; |
| | | |
| | | // çæµå ååéæ¡é项 |
| | | function checkboxOptions(deviceType) { |
| | |
| | | } |
| | | } |
| | | |
| | | function defaultOptions(deviceType) { |
| | | if (import.meta.env.VITE_DATA_MODE == 'jingan') { |
| | | switch (deviceType) { |
| | | case TYPE0: |
| | | return default1Jingan; |
| | | default: |
| | | return undefined; |
| | | } |
| | | } else { |
| | | switch (deviceType) { |
| | | case TYPE0: |
| | | return default1; |
| | | case TYPE1: |
| | | return default3; |
| | | case TYPE2: |
| | | return undefined; |
| | | case TYPE4: |
| | | return undefined; |
| | | default: |
| | | return undefined; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * é»è®¤é项 |
| | | * @param {*} deviceType 设å¤ç±»å |
| | |
| | | * @returns |
| | | */ |
| | | function defaultFactorTypes(deviceType, count = 3) { |
| | | const defaultOpt = defaultOptions(deviceType); |
| | | if (defaultOpt) { |
| | | if (defaultOpt.length > count) { |
| | | return defaultOpt.slice(0, count); |
| | | } else { |
| | | return defaultOpt; |
| | | } |
| | | } else { |
| | | const list = checkboxOptions(deviceType); |
| | | if (list.length > count) { |
| | | return list.slice(0, count).map((v) => v.value); |
| | |
| | | return list.map((v) => v.value); |
| | | } |
| | | } |
| | | } |
| | | |
| | | export { checkboxOptions, defaultFactorTypes }; |
| | |
| | | value: '17' |
| | | } |
| | | ]; |
| | | |
| | | export const default1 = [option1[3].value, option1[4].value, option1[0].value]; |
| | |
| | | label: 'é£é', |
| | | name: 'WIND_SPEED', |
| | | value: '16' |
| | | }, |
| | | } |
| | | // { |
| | | // label: 'é£å', |
| | | // name: 'WIND_DIRECTION', |
| | | // value: '17' |
| | | // }, |
| | | { |
| | | label: 'é«åº¦', |
| | | name: 'HEIGHT', |
| | | value: '18' |
| | | } |
| | | // { |
| | | // label: 'é«åº¦', |
| | | // name: 'HEIGHT', |
| | | // value: '18' |
| | | // } |
| | | ]; |
| | | |
| | | // é»è®¤é项 |
| | | const default1 = [option1[5].value, option1[6].value, option1[7].value]; |
| | | |
| | | const option2 = [ |
| | | { |
| | |
| | | label: 'é£é', |
| | | name: 'WIND_SPEED', |
| | | value: '16' |
| | | } |
| | | }, |
| | | // { |
| | | // label: 'é£å', |
| | | // name: 'WIND_DIRECTION', |
| | | // value: '17' |
| | | // } |
| | | // }, |
| | | { |
| | | label: 'é«åº¦', |
| | | name: 'HEIGHT', |
| | | value: '18' |
| | | } |
| | | ]; |
| | | |
| | | // é»è®¤é项 |
| | | const default3 = [option3[5].value, option3[6].value, option3[7].value]; |
| | | |
| | | const option4 = [ |
| | | { |
| | |
| | | } |
| | | ]; |
| | | |
| | | export { option1, option2, option3, option4 }; |
| | | export { option1, default1, option2, option3, default3, option4 }; |
| | |
| | | } |
| | | |
| | | function typeName(type) { |
| | | return typeList().find((v) => (v.value = type)).label; |
| | | return typeList().find((v) => v.value == type).label; |
| | | } |
| | | |
| | | export { TYPE0, TYPE1, TYPE2, TYPE3, TYPE4, typeList, typeName, deviceList }; |
| | |
| | | import { TYPE0, TYPE1, TYPE2 } from '@/constant/device-type'; |
| | | import { option1, option2 } from '@/constant/radio-options/options'; |
| | | import { option1 as option1Jingan } from '@/constant/radio-options/options-jingan'; |
| | | import { |
| | | option1, |
| | | default1, |
| | | option2, |
| | | default2 |
| | | } from '@/constant/radio-options/options'; |
| | | import { |
| | | option1 as option1Jingan, |
| | | default1 as default1Jingan |
| | | } from '@/constant/radio-options/options-jingan'; |
| | | |
| | | // çæµå ååéæ¡é项 |
| | | function radioOptions(deviceType) { |
| | |
| | | } |
| | | } |
| | | |
| | | // const option1 = [ |
| | | // { |
| | | // label: 'NO2', |
| | | // name: 'NO2', |
| | | // value: '1' |
| | | // }, |
| | | // { |
| | | // label: 'CO', |
| | | // name: 'CO', |
| | | // value: '2' |
| | | // }, |
| | | // { |
| | | // label: 'H2S', |
| | | // name: 'H2S', |
| | | // value: '3' |
| | | // }, |
| | | // { |
| | | // label: 'SO2', |
| | | // name: 'SO2', |
| | | // value: '4' |
| | | // }, |
| | | // { |
| | | // label: 'O3', |
| | | // name: 'O3', |
| | | // value: '5' |
| | | // }, |
| | | // { |
| | | // label: 'PM2.5', |
| | | // name: 'PM25', |
| | | // value: '6' |
| | | // }, |
| | | // { |
| | | // label: 'PM10', |
| | | // name: 'PM10', |
| | | // value: '7' |
| | | // }, |
| | | // { |
| | | // label: 'TVOC', |
| | | // name: 'VOC', |
| | | // value: '10' |
| | | // } |
| | | // ]; |
| | | function defaultOptions(deviceType) { |
| | | if (import.meta.env.VITE_DATA_MODE == 'jingan') { |
| | | if (TYPE0 == deviceType) { |
| | | return default1Jingan; |
| | | } else { |
| | | return undefined; |
| | | } |
| | | } else { |
| | | if ([TYPE0, TYPE1].includes(deviceType)) { |
| | | return default1; |
| | | } else if (deviceType == TYPE2) { |
| | | return default2; |
| | | } else { |
| | | return undefined; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // const option2 = [ |
| | | // { |
| | | // label: '温度', |
| | | // name: 'TMP', |
| | | // value: '1' |
| | | // }, |
| | | // { |
| | | // label: 'çµå¯¼ç', |
| | | // name: 'spC', |
| | | // value: '2' |
| | | // }, |
| | | // { |
| | | // label: 'æµåº¦', |
| | | // name: 'tur', |
| | | // value: '3' |
| | | // }, |
| | | // { |
| | | // label: '溶解氧', |
| | | // name: 'DO', |
| | | // value: '4' |
| | | // }, |
| | | // { |
| | | // label: 'PH', |
| | | // name: 'PH', |
| | | // value: '5' |
| | | // } |
| | | // ]; |
| | | export { radioOptions }; |
| | | export { radioOptions, defaultOptions }; |
| | |
| | | value: '7' |
| | | } |
| | | ]; |
| | | |
| | | // é»è®¤é项 PM2.5 |
| | | export const default1 = option1[3].value; |
| | |
| | | } |
| | | ]; |
| | | |
| | | // é»è®¤é项 PM2.5 |
| | | export const default1 = option1[5].value; |
| | | |
| | | export const option2 = [ |
| | | { |
| | | label: '温度', |
| | |
| | | value: '5' |
| | | } |
| | | ]; |
| | | |
| | | // é»è®¤é项 温度 |
| | | export const default2 = option2[0].value; |
| | |
| | | return deviceApi |
| | | .fethchDevice({ type: type, page, pageSize }) |
| | | .then((res) => { |
| | | deviceList.value = res.data; |
| | | deviceList.value = res.data.sort((a, b) => { |
| | | return a.deviceCode < b.deviceCode ? -1 : 1; |
| | | }); |
| | | return res; |
| | | }); |
| | | }); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="background"> |
| | | <div class="title-content"> |
| | | é£ç¾½å¤§æ°ç¯å¢èµ°èªçæµæ±¡ææº¯æºæ¥åæºè½çæç³»ç» |
| | | </div> |
| | | |
| | | <div class="flexbox flex-space-around"> |
| | | <div class="input-box flexbox"> |
| | | <div class="flexbox-col align-items" style="margin: auto"> |
| | | <div class="flexbox-col input-content flex-space-between"> |
| | | <el-form |
| | | :model="formObj" |
| | | ref="formRef" |
| | | :rules="rules" |
| | | label-position="top" |
| | | > |
| | | <el-form-item label="ç¨æ·å" prop="userName"> |
| | | <el-input |
| | | size="default" |
| | | v-model="formObj.userName" |
| | | placeholder="ç¨æ·å" |
| | | style="width: 200px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="å¯ç " prop="password"> |
| | | <el-input |
| | | size="default" |
| | | type="password" |
| | | show-password |
| | | v-model="formObj.password" |
| | | placeholder="å¯ç " |
| | | style="width: 200px" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="btn-login" @click="login">ç»å½</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <img :src="underwayPng" alt="èµ°èªçæµ" class="img-1" /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import underwayPng3 from '@/assets/mipmap/underway-3.png'; |
| | | import underwayPng2 from '@/assets/mipmap/underway-2.png'; |
| | | import underwayPng from '@/assets/mipmap/underway.png'; |
| | | import { ElMessage } from 'element-plus'; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | formObj: {}, |
| | | rules: { |
| | | userName: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥ç¨æ·å', |
| | | trigger: 'blur' |
| | | } |
| | | ], |
| | | password: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥å¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | } |
| | | }; |
| | | }, |
| | | computed: { |
| | | underwayPng() { |
| | | if (import.meta.env.VITE_DATA_MODE == 'jingan') { |
| | | return underwayPng2; |
| | | } else { |
| | | return underwayPng3; |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | login() { |
| | | this.$refs.formRef.validate((valid) => { |
| | | if (valid) { |
| | | if ( |
| | | (this.formObj.userName == 'jingan' && |
| | | this.formObj.password == 'jingan123') || |
| | | (this.formObj.userName == 'feiyu' && |
| | | this.formObj.password == 'fyhb123') |
| | | ) { |
| | | this.$router.replace('/index/hmode'); |
| | | } else { |
| | | ElMessage({ |
| | | message: 'ç¨æ·åæå¯ç é误', |
| | | type: 'error' |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | .background { |
| | | background-color: #002378; |
| | | position: absolute; |
| | | left: 0; |
| | | top: 0; |
| | | bottom: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | min-height: 768px; |
| | | min-width: 1366px; |
| | | } |
| | | |
| | | .title-content { |
| | | /* position: absolute; */ |
| | | width: 100%; |
| | | height: 200px; |
| | | padding: 3vh 0 0 0; |
| | | /* top: 80px; |
| | | left: 0; |
| | | right: 0; */ |
| | | color: white; |
| | | font-size: 1.4rem; |
| | | display: flex; |
| | | justify-content: center; |
| | | background-image: url('@/assets/mipmap/title_bg.png'); |
| | | background-size: contain; |
| | | background-repeat: no-repeat; |
| | | } |
| | | |
| | | .img-1 { |
| | | min-height: 500px; |
| | | height: 60vh; |
| | | /* margin-left: 6vw; */ |
| | | } |
| | | |
| | | .input-box { |
| | | width: 400px; |
| | | height: 420px; |
| | | /* background-color: aquamarine; */ |
| | | background-image: url('@/assets/mipmap/border.png'); |
| | | background-size: 100% 100%; |
| | | color: white; |
| | | } |
| | | |
| | | .input-content { |
| | | } |
| | | |
| | | .input-content .text-box { |
| | | width: 220px; |
| | | height: 28px; |
| | | font-size: 12px; |
| | | border-radius: 6px; |
| | | } |
| | | |
| | | .btn-login { |
| | | margin-top: 20px; |
| | | border-radius: 6px; |
| | | padding: 8px 60px; |
| | | box-shadow: 10px 10px 10px rgba(39, 39, 39, 0.473); |
| | | background: -moz-linear-gradient( |
| | | left, |
| | | rgb(109, 213, 231), |
| | | rgb(80, 166, 202), |
| | | rgb(65, 141, 186), |
| | | rgb(33, 90, 154), |
| | | rgb(13, 56, 133), |
| | | rgb(11, 53, 131) |
| | | ); |
| | | background: -ms-linear-gradient( |
| | | left, |
| | | rgb(109, 213, 231), |
| | | rgb(80, 166, 202), |
| | | rgb(65, 141, 186), |
| | | rgb(33, 90, 154), |
| | | rgb(13, 56, 133), |
| | | rgb(11, 53, 131) |
| | | ); |
| | | background: -o-linear-gradient( |
| | | left, |
| | | rgb(109, 213, 231), |
| | | rgb(80, 166, 202), |
| | | rgb(65, 141, 186), |
| | | rgb(33, 90, 154), |
| | | rgb(13, 56, 133), |
| | | rgb(11, 53, 131) |
| | | ); |
| | | background: -webkit-linear-gradient( |
| | | left, |
| | | rgb(109, 213, 231), |
| | | rgb(80, 166, 202), |
| | | rgb(65, 141, 186), |
| | | rgb(33, 90, 154), |
| | | rgb(13, 56, 133), |
| | | rgb(11, 53, 131) |
| | | ); |
| | | cursor: pointer; |
| | | } |
| | | </style> |
| | |
| | | import { useFetchData } from '@/composables/fetchData'; |
| | | import moment from 'moment'; |
| | | import { TYPE0 } from '@/constant/device-type'; |
| | | import { radioOptions } from '@/constant/radio-options'; |
| | | import { defaultOptions } from '@/constant/radio-options'; |
| | | import { FactorDatas } from '@/model/FactorDatas'; |
| | | import TrendAnalysis from './component/TrendAnalysis.vue'; |
| | | import DataSheet from './component/DataSheet.vue'; |
| | |
| | | // çæµè®¾å¤ç¼å· |
| | | deviceCode: '', |
| | | // çæµå åçç±»åç¼å· |
| | | factorType: radioOptions(TYPE0)[0].value, |
| | | factorType: defaultOptions(TYPE0), |
| | | // çæµæ°æ® |
| | | factorDatas: new FactorDatas(), |
| | | // å³å®ç»å¶3Då¾å½¢æ¶æ¯å¦ä¸åå¾ååå¹¶ |
| | |
| | | import moment from 'moment'; |
| | | import { useFetchData } from '@/composables/fetchData'; |
| | | import { TYPE0 } from '@/constant/device-type'; |
| | | import { radioOptions } from '@/constant/radio-options'; |
| | | import { defaultOptions } from '@/constant/radio-options'; |
| | | import { FactorDatas } from '@/model/FactorDatas'; |
| | | import DashBoard from './component/DashBoard.vue'; |
| | | import RealTimeTrend from './component/RealTimeTrend.vue'; |
| | |
| | | deviceType: TYPE0, |
| | | deviceCode: '', |
| | | // çæµå åçç±»åç¼å· |
| | | factorType: radioOptions(TYPE0)[0].value, |
| | | factorType: defaultOptions(TYPE0), |
| | | // æ°è·åççæµæ°æ® |
| | | factorDatas: new FactorDatas(), |
| | | // å
¨é¨çæµæ°æ® |
| | |
| | | } |
| | | }, |
| | | watch: { |
| | | // formSearch(nV, oV) { |
| | | // if (nV != oV) { |
| | | // this.handleChange(nV[0].value); |
| | | // } |
| | | // } |
| | | // å½è®¾å¤ç¼å·é¦æ¬¡ä»å端è·åæ¶ï¼è§¦åéç¥äºä»¶ |
| | | ['formSearch.deviceCode'](nV, oV) { |
| | | if (oV == undefined && nV != oV) { |
| | | this.handleClick(); |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.$emit('change', this.formSearch); |
| | | // å½è®¾å¤ç¼å·å·²ç»ä»å端è·å宿æ¶ï¼ç´æ¥è§¦åéç¥äºä»¶ |
| | | if (this.formSearch.deviceCode) { |
| | | this.handleClick(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |