Browse Source

修改禅道问题

develop
王钦 4 months ago
parent
commit
af8cef8afb
  1. 16
      ruoyi-ui/src/api/MonthlyEquipment/index.js
  2. 2
      ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue
  3. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/components/BroadcastReleases.vue
  4. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/components/CameraControlDialog.vue
  5. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/index.vue
  6. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/MillimeterWaveRadar/components/DeviceControlDialog.vue
  7. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue
  8. 71
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeTraffic/index.vue
  9. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
  10. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/taskEditDialog.vue
  11. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/EventDispatchDialog/index.vue
  12. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue
  13. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/Carousel/index.vue
  14. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/Carousel/index_v1.vue
  15. 18
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/index.vue
  16. 2
      ruoyi-ui/src/views/JiHeExpressway/utils/enum_event/PresetFormItems.js
  17. 39
      ruoyi-ui/src/views/system/user/profile/index.vue

16
ruoyi-ui/src/api/MonthlyEquipment/index.js

@ -52,6 +52,22 @@ export function getSystemStatusExport(query) {
url += "&direction=" + url += "&direction=" +
query.direction query.direction
} }
if(query.stakeMark){
url += "&stakeMark=" +
query.stakeMark
}
if(query.deviceStatus){
url += "&deviceStatus=" +
query.deviceStatus
}
if(query.useState){
url += "&useState=" +
query.useState
}
if(query.deviceIp){
url += "&deviceIp=" +
query.deviceIp
}
return request.post( return request.post(
url, url,
{}, {},

2
ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue

@ -26,6 +26,8 @@
@click.native="$emit('firstBtnClick', cardData.id)">{{ getFirstBtnText(cardData.state) }}</Button> @click.native="$emit('firstBtnClick', cardData.id)">{{ getFirstBtnText(cardData.state) }}</Button>
<Button v-if="cardData.state == 4" :style="{ background: lastBtnColor, width: isShowLeft ? '50%' : '25%' }" <Button v-if="cardData.state == 4" :style="{ background: lastBtnColor, width: isShowLeft ? '50%' : '25%' }"
@click.native="$emit('lastBtnClick', cardData.id)">{{ getLastBtnText(cardData.state) }}</Button> @click.native="$emit('lastBtnClick', cardData.id)">{{ getLastBtnText(cardData.state) }}</Button>
<Button v-if="cardData.isDiaodu == 1" :style="{ background: lastBtnColor, width: isShowLeft ? '50%' : '30%' }"
@click.native="$emit('lastBtnClick', cardData.id)">调度记录</Button>
</div> </div>
</div> </div>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/components/BroadcastReleases.vue

@ -170,7 +170,7 @@ export default {
}) })
functions.push({ functions.push({
"functionId": "A1", "functionId": "",
"params": { "params": {
"name": "task-3", "name": "task-3",
"outVol": "" + this.dataForm.outVol, "outVol": "" + this.dataForm.outVol,

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/components/CameraControlDialog.vue

@ -1,6 +1,6 @@
<template> <template>
<!-- margin-left: 450px;margin-top: 250px; --> <!-- margin-left: 450px;margin-top: 250px; -->
<Dialog v-model="modelVisible" title="相机控制" style="z-index: 2051;" top="50%" width="550px"> <Dialog v-model="modelVisible" title="相机控制" noneMask style="z-index: 2051;" top="50%" width="550px">
<div class="CameraControlDialog"> <div class="CameraControlDialog">
<div class="direction"> <div class="direction">
<div class="control-container top" @click="controlClick(21)"> <div class="control-container top" @click="controlClick(21)">

4
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/index.vue

@ -14,7 +14,7 @@
</div> </div>
<template #footer> <template #footer>
<Button @click.native="onControlClick" disabled :style="dialogData.iotDeviceId?'':'background-color:#4E5969'">设备操作</Button> <Button @click.native="onControlClick" disabled :style="(dialogData.deviceState===1 && dialogData.iotDeviceId)?'':'background-color:#A9AEB8'">设备操作</Button>
</template> </template>
<!-- 设备操作弹窗 --> <!-- 设备操作弹窗 -->
<DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId" :productId="dialogData.id" <DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId" :productId="dialogData.id"
@ -112,7 +112,7 @@ export default {
}, },
methods: { methods: {
onControlClick(){ onControlClick(){
if(this.dialogData.iotDeviceId){ if(this.dialogData.deviceState===1 && this.dialogData.iotDeviceId){
this.deviceControlVisible = true this.deviceControlVisible = true
} }
}, },

6
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/MillimeterWaveRadar/components/DeviceControlDialog.vue

@ -38,7 +38,7 @@
</Button> </Button>
</div> </div>
<div class="body"> <div class="body">
<Table :data="data" v-loading="loading"> <Table :data="data" v-loading="loading" height="350px">
<ElTableColumn prop="typename" label="事件类型" width="110" /> <ElTableColumn prop="typename" label="事件类型" width="110" />
<ElTableColumn prop="stakeMark" label="桩号" width="90"></ElTableColumn> <ElTableColumn prop="stakeMark" label="桩号" width="90"></ElTableColumn>
<ElTableColumn prop="remark" label="描述" /> <ElTableColumn prop="remark" label="描述" />
@ -55,7 +55,7 @@
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div class="footer"> <div class="footer" style="justify-content: flex-end;width:100%;display: flex;">
<Pagination <Pagination
@current-change="getData" @current-change="getData"
@size-change="onSizeChange" @size-change="onSizeChange"
@ -182,7 +182,7 @@ export default {
e.typename = WarningSubclass[e.warningType][e.warningSubclass] e.typename = WarningSubclass[e.warningType][e.warningSubclass]
e.stateName = warningStateMapping[e.warningState] e.stateName = warningStateMapping[e.warningState]
}); });
this.data = res.rows; this.data = [...res.rows,...res.rows,...res.rows,...res.rows,...res.rows,...res.rows,...res.rows];
this.total = res.total; this.total = res.total;
}) })
}, },

13
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue

@ -15,7 +15,7 @@
<el-tab-pane label="定时管控" name="2"></el-tab-pane> <el-tab-pane label="定时管控" name="2"></el-tab-pane>
<el-tab-pane label="管控记录" name="3"></el-tab-pane> <el-tab-pane label="管控记录" name="3"></el-tab-pane>
</el-tabs> </el-tabs>
<div class="body2" style="z-index: 2003 !important;"> <div class="body2" >
<div class="title">批量控制</div> <div class="title">批量控制</div>
<span class="close" @click="() => { this.activeIcon = null; }"> <span class="close" @click="() => { this.activeIcon = null; }">
<i class="el-icon-close" /> <i class="el-icon-close" />
@ -569,6 +569,17 @@ export default {
this.data['deviceType'] = deviceTypeDefault; this.data['deviceType'] = deviceTypeDefault;
changeHandle(this.data, this.formList); changeHandle(this.data, this.formList);
this.tabAction = '1'; this.tabAction = '1';
//
setTimeout(() => {
let pop = document.getElementsByClassName('el-popover')
for(let i of pop){
if(i.getAttribute('aria-hidden') === 'false'){
i.style['z-index'] = '2001'
}
}
}, 100);
} else { } else {
this.tabAction = -1; this.tabAction = -1;
} }

71
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeTraffic/index.vue

@ -112,9 +112,9 @@ export default {
formatTooltip(val) { formatTooltip(val) {
if(this.marks[val]){ if(this.marks[val]){
return this.marks[val].remark; return this.marks[val];
} else { } else {
return this.marks[0].remark; return this.marks[0];
} }
}, },
play(){ play(){
@ -156,45 +156,18 @@ export default {
} else { } else {
this.activeIcon = type; this.activeIcon = type;
this.lnglats = {}; this.lnglats = {};
this.lnglatsNode = {};
request({ request({
url: '/system/information/listTime', url: '/system/information/listTime',
method: 'get' method: 'get'
}).then(result=>{ }).then(async result=>{
if (result.code != 200) return this.$message.error(result?.msg); if (result.code != 200) return this.$message.error(result?.msg);
this.silderVisible = true; this.silderVisible = true;
const style = { const style = {
color: '#9fe4fe' color: '#9fe4fe'
} }
const now = moment().format('YYYY-MM-DD HH:mm:ss'); //
const list = result.rows;
let marks = {0: {
style,
label: now.substr(11,5),
remark: now,
cid:0,
}};
let total = list.length>9?9:list.length;
let idx = 0;
for(let i = list.length-1; i>=0;i--){
idx++;
marks[idx] = {
style,
label: list[i].createTime.substr(11,5),
remark: list[i].createTime,
cid: list[i].id
}
}
this.max = total;
this.marks = marks;
this.showLnglat();
})
}
},
async showLnglat(){
if(!this.lnglats[this.timeTick]){
//
if(this.timeTick === 0){
let res = await request({ url: '/business/traffic-statistics/current/getTheCurrentCongestedSection', method: 'get'}); let res = await request({ url: '/business/traffic-statistics/current/getTheCurrentCongestedSection', method: 'get'});
let aryLine = []; let aryLine = [];
res.data.forEach(e => { res.data.forEach(e => {
@ -205,13 +178,20 @@ export default {
xyArr: lines, xyArr: lines,
}) })
}); });
this.drawThumbail(res.data); this.lnglats[0] = _.cloneDeep(aryLine);
this.lnglats[this.timeTick] = _.cloneDeep(aryLine); this.lnglatsNode[0] = res.data;
this.lnglatsNode[this.timeTick] = res.data;
} else { const now = moment().format('HH:mm');
let res = await request({ url: `/system/information/${this.marks[this.timeTick].cid}`, method: 'get'}); let marks = {0: now};
let _line = JSON.parse(res.data.otherConfig) let total = 0;
let idx = 0;
for(let i in result.data){
idx++;
total++;
marks[idx] = i
let aryLine = []; let aryLine = [];
const _line = JSON.parse(result.data[i])
_line.forEach(e => { _line.forEach(e => {
const lines = e.link_lng_lats.split(';').map(x=>x.split(',')) const lines = e.link_lng_lats.split(';').map(x=>x.split(','))
aryLine.push({ aryLine.push({
@ -220,13 +200,18 @@ export default {
xyArr: lines xyArr: lines
}) })
}); });
this.lnglats[this.timeTick] = _.cloneDeep(aryLine); this.lnglats[idx] = _.cloneDeep(aryLine);
this.lnglatsNode[this.timeTick] = _line; this.lnglatsNode[idx] = _line;
this.drawThumbail(_line);
} }
} else { this.max = total;
this.drawThumbail(this.lnglatsNode[this.timeTick]); this.marks = marks;
this.showLnglat();
})
} }
},
async showLnglat(){
this.drawThumbail(this.lnglatsNode[this.timeTick] );
Vue.prototype.mapIns.addPointByArr( {pointList:[]}, 'lineLayer', true); Vue.prototype.mapIns.addPointByArr( {pointList:[]}, 'lineLayer', true);
Vue.prototype.mapIns.removeLayerByName('lineLayer'); Vue.prototype.mapIns.removeLayerByName('lineLayer');
setTimeout(()=>{ setTimeout(()=>{

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js

@ -110,12 +110,10 @@ export class MarkerCluster {
} }
let _stake = e.extData.stakeMark; let _stake = e.extData.stakeMark;
const state = getState(e); const state = getState(e);
console.log(e.extData,3334)
let _title = ''; let _title = '';
if(e.extData.stakeMark && e.extData.direction){ if(e.extData.stakeMark && e.extData.direction){
if(e.extData.warningSubclass){ if(e.extData.warningSubclass){
let arySubClass = e.extData.warningSubclass.split('-') let arySubClass = e.extData.warningSubclass.split('-')
console.log(arySubClass,3334)
_title = `${e.extData.stakeMark} ${e.extData.direction==='1'?'菏泽方向':'济南方向'} ${_.find(WarningSubclassOptions[arySubClass[0]],{value:e.extData.warningSubclass}).label}事件` _title = `${e.extData.stakeMark} ${e.extData.direction==='1'?'菏泽方向':'济南方向'} ${_.find(WarningSubclassOptions[arySubClass[0]],{value:e.extData.warningSubclass}).label}事件`
} else { } else {
_title = `${e.extData.stakeMark} ${e.extData.direction==='1'?'菏泽方向':'济南方向'} ${e.config?.item.title}事件` _title = `${e.extData.stakeMark} ${e.extData.direction==='1'?'菏泽方向':'济南方向'} ${e.config?.item.title}事件`

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/taskEditDialog.vue

@ -1,5 +1,5 @@
<template> <template>
<Dialog v-model="modelVisible" title="修改" width="600px" label-width="120px" style="z-index: 2050;"> <Dialog v-model="modelVisible" :title="(this.mode==='edit')?'修改':'新增'" width="600px" label-width="120px" style="z-index: 2050;">
<el-form> <el-form>
<el-form-item label="设备类型"> <el-form-item label="设备类型">
<!-- <el-radio-group v-model="searchData.deviceType" @input="onChange"> <!-- <el-radio-group v-model="searchData.deviceType" @input="onChange">

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/EventDispatchDialog/index.vue

@ -1,5 +1,5 @@
<template> <template>
<Dialog v-model="modelVisible" title="调度记录" width="710px"> <Dialog v-model="modelVisible" title="调度记录" width="710px" top="8%">
<div class="EventDetail"> <div class="EventDetail">
<BlackBar class="left"> <BlackBar class="left">
<!-- <img src="./images/test.png" style="width: 100%;" /> --> <!-- <img src="./images/test.png" style="width: 100%;" /> -->

13
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue

@ -28,6 +28,7 @@
:cardData="item" :cardData="item"
:isShowLeft="false" :isShowLeft="false"
@firstBtnClick="firstBtnClick" @firstBtnClick="firstBtnClick"
@lastBtnClick="lastBtnClick"
/> />
</div> </div>
</div> </div>
@ -52,6 +53,12 @@
<!-- "详情"弹出框 --> <!-- "详情"弹出框 -->
<EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData" activeName="2" <EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData" activeName="2"
@update:value="handleClose" /> @update:value="handleClose" />
<EventDispatchDialog
:visible="eventDispatchDialogVisible"
@update:value="handleClose"
:eventId="eventId"
/>
</div> </div>
</template> </template>
@ -60,6 +67,7 @@ import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue";
import Pagination from "@screen/components/Pagination.vue"; import Pagination from "@screen/components/Pagination.vue";
import InputSearch from "@screen/components/InputSearch/index.vue"; import InputSearch from "@screen/components/InputSearch/index.vue";
import RoadStateCard from "@screen/components/RoadStateCard/index.vue"; import RoadStateCard from "@screen/components/RoadStateCard/index.vue";
import EventDispatchDialog from "./EventDispatchDialog/index";
import EventDetailDialog from "../event/EventDetailDialog/index.vue"; import EventDetailDialog from "../event/EventDetailDialog/index.vue";
@ -81,6 +89,7 @@ export default {
InputSearch, InputSearch,
EventDetailDialog, EventDetailDialog,
ButtonGradient, ButtonGradient,
EventDispatchDialog
}, },
data() { data() {
return { return {
@ -117,6 +126,7 @@ export default {
this.total = result.total; this.total = result.total;
result.rows.forEach((it) => { result.rows.forEach((it) => {
it.stringDirection = directionMapping[it.direction] || it.direction; it.stringDirection = directionMapping[it.direction] || it.direction;
it.isDiaodu = 1
}); });
this.data = result.rows; this.data = result.rows;
}); });
@ -151,7 +161,6 @@ export default {
}); });
}, },
lastBtnClick(id) { lastBtnClick(id) {
console.log(id);
this.eventDispatchDialogVisible = true; this.eventDispatchDialogVisible = true;
this.eventId = id; this.eventId = id;
}, },
@ -179,7 +188,9 @@ export default {
this.initData(); this.initData();
}, },
handleClose() { handleClose() {
this.eventDetailDialogVisible = false; this.eventDetailDialogVisible = false;
this.eventDispatchDialogVisible = false;
}, },
}, },
}; };

5
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/Carousel/index.vue

@ -2,7 +2,10 @@
<div class="Carousel"> <div class="Carousel">
<VueSlickCarousel v-if="list.length > 0" v-bind="settings" ref="CarouselRef" class="vueSlickCarousel"> <VueSlickCarousel v-if="list.length > 0" v-bind="settings" ref="CarouselRef" class="vueSlickCarousel">
<div v-for="(item, index) in list " :key="index" class="item"> <div v-for="(item, index) in list " :key="index" class="item">
<el-image v-if="type==='picture' && index === (pageNum-1)" fit="fill" :src="item" :preview-src-list="list"></el-image> <el-image v-if="type==='picture' && index === (pageNum-1)" fit="fill" :src="item" :preview-src-list="list">
<div slot="error" class="el-image__placeholder">
</div>
</el-image>
<Video v-if="type==='video' && index === (pageNum-1)" style="height: 100%;width:100%;" :showHeader="false" :url="item || ''" videoType="mp4" /> <Video v-if="type==='video' && index === (pageNum-1)" style="height: 100%;width:100%;" :showHeader="false" :url="item || ''" videoType="mp4" />
<div v-if="index !== (pageNum-1)" style="height: 100%;width:100%;" ></div> <div v-if="index !== (pageNum-1)" style="height: 100%;width:100%;" ></div>
</div> </div>

3
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/Carousel/index_v1.vue

@ -5,6 +5,9 @@
<VueSlickCarousel v-if="pictures.length > 0" v-bind="settings" ref="CarouselRef" class="vueSlickCarousel"> <VueSlickCarousel v-if="pictures.length > 0" v-bind="settings" ref="CarouselRef" class="vueSlickCarousel">
<div v-for="(item, index) in pictures" :key="index" class="item" > <div v-for="(item, index) in pictures" :key="index" class="item" >
<el-image fit="fill" :src="item" :preview-src-list="pictures"> <el-image fit="fill" :src="item" :preview-src-list="pictures">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image> </el-image>
</div> </div>
</VueSlickCarousel> </VueSlickCarousel>

18
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/index.vue

@ -261,9 +261,7 @@ export default {
if(this.deviceName){ if(this.deviceName){
params.deviceName = this.deviceName params.deviceName = this.deviceName
} }
if(this.direction){
params.direction = this.direction
}
request({ request({
url: "/system/status/tablist", url: "/system/status/tablist",
method: "get", method: "get",
@ -329,14 +327,18 @@ export default {
const params = { const params = {
startTime: this.startTime, startTime: this.startTime,
time: this.time, time: this.time,
type: this.devices.join(',') type: this.devices.join(','),
} pageNum: this.searchData.pageNum,
pageSize: this.searchData.pageSize,
orderByField:this.orderField,
orderDirection:this.order,
...this.tabelSearch
};
if(this.deviceName){ if(this.deviceName){
params.deviceName = this.deviceName params.deviceName = this.deviceName
} }
if(this.direction){
params.direction = this.direction
}
getSystemStatusExport(params) getSystemStatusExport(params)
.then((res) => { .then((res) => {
const url = window.URL.createObjectURL(new Blob([res])); const url = window.URL.createObjectURL(new Blob([res]));

2
ruoyi-ui/src/views/JiHeExpressway/utils/enum_event/PresetFormItems.js

@ -14,7 +14,7 @@ const stake_start = {
callback(value, data) { callback(value, data) {
if (!value || if (!value ||
value==='' || value==='' ||
(parseInt(value) >= 55 && parseInt(value) <= 208) (parseInt(value) >= 54 && parseInt(value) <= 208)
){ ){
return true; return true;
} else { } else {

39
ruoyi-ui/src/views/system/user/profile/index.vue

@ -88,6 +88,9 @@
</el-switch> </el-switch>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4">
<Button :loading="loading" style="width:120px;margin-top: 5px;" @click.native="speak()"><i class="el-icon-headset"></i>语音测试</Button>
</el-col>
</el-row> </el-row>
@ -104,10 +107,11 @@ import userInfo from "./userInfo";
import resetPwd from "./resetPwd"; import resetPwd from "./resetPwd";
import { getUserProfile } from "@/api/system/user"; import { getUserProfile } from "@/api/system/user";
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import Button from "@screen/components/Buttons/Button.vue";
export default { export default {
name: "Profile", name: "Profile",
components: { userAvatar, userInfo, resetPwd }, components: { userAvatar, userInfo, resetPwd,Button },
data() { data() {
return { return {
user: {}, user: {},
@ -116,7 +120,8 @@ export default {
activeTab: "userinfo", activeTab: "userinfo",
isSound: 'on', isSound: 'on',
isNotify: 'on' isNotify: 'on',
loading: false
}; };
}, },
created() { created() {
@ -128,6 +133,36 @@ export default {
this.isNotify = Cookies.get('warning-notify') || 'on'; this.isNotify = Cookies.get('warning-notify') || 'on';
}, },
methods: { methods: {
speak(){
//
if(Cookies.get('warning-sound') === 'off'){
this.$message.waning('请开启【通知语音播报】')
return;
}
this.$message.success('正在播报')
this.loading=true;
setTimeout(() => {
this.loading = false
}, 6000);
const text = moment().format('YYYY-MM-DD HH:mm:ss')+' 济菏高速语音播报测试'
// SpeechSynthesisUtterance
const utterance = new SpeechSynthesisUtterance(text);
//
utterance.lang = 'zh-CN'; //
// 01
utterance.volume = 10;
// 1
utterance.rate = 1;
// "default", "female", "male"
utterance.pitch = 1;
// 使SpeechSynthesis
window.speechSynthesis.speak(utterance);
},
getUser() { getUser() {
getUserProfile().then(response => { getUserProfile().then(response => {
this.user = response.data; this.user = response.data;

Loading…
Cancel
Save