Browse Source

Merge branch 'develop' of http://39.106.31.193:9211/mengff/jihe-hs into develop

wangqin
zhangzhang 8 months ago
parent
commit
6dcf2aaf8a
  1. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/components/DeviceControlDialog.vue
  2. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/PerceiveEvent/index.vue
  3. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/components/PeopleCard/index.vue
  4. 26
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/firstResponders/components/AddNEditDialog.vue
  5. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/firstResponders/index.vue
  6. 79
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/images/lane.svg
  7. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/index.vue
  8. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/index.vue
  9. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/Carousel/index.vue
  10. 103
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  11. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  12. 71
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue
  13. 127
      ruoyi-ui/src/views/JiHeExpressway/utils/enum.js
  14. 2
      ruoyi-ui/vue.config.js

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/components/DeviceControlDialog.vue

@ -431,7 +431,7 @@ export default {
// //
await request({ await request({
url: `/business/device/batchLaserFatigueInvokedFunction`, url: `/business/device/batchFunctions`,
method: "post", method: "post",
data: { data: {
deviceId: this.deviceId, deviceId: this.deviceId,

5
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/PerceiveEvent/index.vue

@ -3,8 +3,9 @@
<div class="PerceiveEvent"> <div class="PerceiveEvent">
<!-- <Video class="item-video" /> --> <!-- <Video class="item-video" /> -->
<div class="video-pic"> <div class="video-pic">
<Video style="height: 100%; flex: 1" :showHeader="false" :url="dialogData.formData.videoList[0]" <!-- <Video style="height: 100%; flex: 1" :showHeader="false" :url="dialogData.formData.videoList[0]"
videoType="mp4" /> videoType="mp4" /> -->
<Carousel style="flex: 1; height: 100%;max-width: 350px;" :videos="dialogData.formData.videoList" />
<Carousel style="flex: 1; height: 100%;max-width: 300px;" :pictures="dialogData.formData.pictures" /> <Carousel style="flex: 1; height: 100%;max-width: 300px;" :pictures="dialogData.formData.pictures" />
</div> </div>
<LineChart class="chart" /> <LineChart class="chart" />

5
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/components/PeopleCard/index.vue

@ -42,6 +42,10 @@ export default {
key: "name", key: "name",
label: "姓名" label: "姓名"
}, },
{
key: "type",
label: "类型"
},
{ {
key: "postName", key: "postName",
label: "岗位" label: "岗位"
@ -72,6 +76,7 @@ export default {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 6px; gap: 6px;
font-size: 14px;
} }
.btns { .btns {

26
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/firstResponders/components/AddNEditDialog.vue

@ -7,7 +7,7 @@
ref="FormConfigRef" ref="FormConfigRef"
:formList="formList" :formList="formList"
column="1" column="1"
labelWidth="90px" labelWidth="100px"
/> />
</div> </div>
@ -68,6 +68,24 @@ export default {
}, },
], ],
}, },
{
label: "人员类型:",
key: "employeesType",
required: true,
type: "select",
options: {
options: [
{
key: 1,
label: "路管人员",
},
{
key: 2,
label: "应急人员",
},
],
},
},
{ {
label: "岗位:", label: "岗位:",
key: "postId", key: "postId",
@ -127,7 +145,7 @@ export default {
getSelectOptionsStation(2), getSelectOptionsStation(2),
]).then(([post, organization]) => { ]).then(([post, organization]) => {
if (post.status === "fulfilled" && post.value.code == 200) { if (post.status === "fulfilled" && post.value.code == 200) {
this.formList[2].options.options = post.value.data.map((item) => ({ this.formList[3].options.options = post.value.data.map((item) => ({
key: item.postId + "", key: item.postId + "",
label: item.postName, label: item.postName,
})); }));
@ -137,7 +155,7 @@ export default {
organization.status === "fulfilled" && organization.status === "fulfilled" &&
Array.isArray(organization.value) Array.isArray(organization.value)
) { ) {
this.formList[3].options.options = organization.value; this.formList[4].options.options = organization.value;
} }
}); });
}, },
@ -181,7 +199,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.AddNEditDialog { .AddNEditDialog {
width: 450px; width: 450px;
height: 150px; height: 200px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 15px; gap: 15px;

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/firstResponders/index.vue

@ -203,7 +203,7 @@ export default {
grid-gap: 9px; grid-gap: 9px;
// grid-auto-flow: row; // grid-auto-flow: row;
justify-content: space-between; justify-content: space-between;
grid-auto-rows: minmax(270px, max-content); grid-auto-rows: minmax(280px, max-content);
position: relative; position: relative;
} }
} }

79
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/images/lane.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.6 MiB

After

Width:  |  Height:  |  Size: 2.6 KiB

10
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/index.vue

@ -18,7 +18,7 @@
</div> </div>
</div> </div>
<div class="bottom-info"> <div class="bottom-info">
<div class="tag">拥堵五级事件</div> <div class="tag" >{{ detailData.eventLevel || '暂无事件等级' }}</div>
</div> </div>
<EditEventInformationDialog v-model="editEventInformationDialogVisible" /> <EditEventInformationDialog v-model="editEventInformationDialogVisible" />
@ -69,8 +69,7 @@ export default {
{ {
label: '道路方向', label: '道路方向',
// text: '', // text: '',
key: 'direction', key: 'direction'
enum: 'CameraDirectionEnum'
}, },
{ {
label: '桩号', label: '桩号',
@ -99,9 +98,10 @@ export default {
background-image: url(./images/lane.svg); background-image: url(./images/lane.svg);
flex: 1; flex: 1;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100% 100%; background-size: 100% auto;
// background-size: auto auto;
display: grid; display: grid;
grid-template-columns: 1.2fr 1fr 1fr 1fr 1fr 0.6fr 1fr 1fr 1fr 1fr 1.2fr; grid-template-columns: 1fr 1fr 1fr 1fr 1fr .5fr 1fr 1fr 1fr 1fr 1fr;
>div { >div {
display: flex; display: flex;

3
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/index.vue

@ -65,15 +65,14 @@ export default {
}, },
methods: { methods: {
getDetail() { getDetail() {
// -
request({ request({
url: `/dc/system/event/${this.detailId}`, url: `/dc/system/event/${this.detailId}`,
method: "GET", method: "GET",
}) })
.then((result) => { .then((result) => {
if (result.code != 200) return; if (result.code != 200) return;
this.provideData.detail = result.data; this.provideData.detail = result.data;
console.log("事件详情", this.provideData.detail);
}) })
.catch((err) => {}); .catch((err) => {});
}, },

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

@ -11,6 +11,12 @@
</div> </div>
</VueSlickCarousel> </VueSlickCarousel>
<VueSlickCarousel v-if="videos.length > 0" v-bind="settings" ref="CarouselRef" class="vueSlickCarousel">
<div v-for="(item, index) in videos " :key="index" class="item">
<Video style="height: 100%;" :showHeader="false" :url="item || ''" videoType="mp4" />
</div>
</VueSlickCarousel>
<img src="./images/arrow.svg" @click="nextSlide" class="arrow" /> <img src="./images/arrow.svg" @click="nextSlide" class="arrow" />
</div> </div>
</template> </template>
@ -21,10 +27,11 @@ import VueSlickCarousel from 'vue-slick-carousel'
import 'vue-slick-carousel/dist/vue-slick-carousel.css' import 'vue-slick-carousel/dist/vue-slick-carousel.css'
// optional style for arrows & dots // optional style for arrows & dots
import 'vue-slick-carousel/dist/vue-slick-carousel-theme.css' import 'vue-slick-carousel/dist/vue-slick-carousel-theme.css'
import Video from "@screen/components/Video";
export default { export default {
name: "Carousel", name: "Carousel",
components: { VueSlickCarousel }, components: { VueSlickCarousel,Video },
props: { props: {
pictures: { pictures: {
type: Array, type: Array,
@ -39,6 +46,10 @@ export default {
// "require('@screen/images/shareWith/weChat-active.svg')" // "require('@screen/images/shareWith/weChat-active.svg')"
] ]
}, },
videos: {
type: Array,
default: () => []
},
}, },
data() { data() {
return { return {

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

@ -1,89 +1,44 @@
<template> <template>
<Dialog v-model="modelVisible" title="事件详情" width="890px" top="11%"> <Dialog v-model="modelVisible" title="事件详情" width="890px" top="11%">
<div <div class="EventDetail" :style="{
class="EventDetail" height: activeName == '-1' || activeName == '0' ? '380px' : '598px',
:style="{ }">
height: activeName == '-1' || activeName == '0' ? '380px' : '598px',
}"
>
<Form :formList="formList" :dFormData="formData" label-width="100px" /> <Form :formList="formList" :dFormData="formData" label-width="100px" />
<div class="video-pic"> <div class="video-pic">
<Video
style="height: 100%; width: 380px"
:showHeader="false"
:url="
formData.videoList && formData.videoList.length > 0
? formData.videoList[0]
: ''
"
:camId="formData.upCamId"
:pileNum="formData.stakeMark"
rangeIndex="upCamera"
:videoType="formData.videoType"
/>
<Video
v-if="activeName != '-1'"
style="height: 100%; width: 380px"
:showHeader="false"
:url="
formData.videoList && formData.videoList.length > 0
? formData.videoList[1]
: ''
"
:camId="formData.downCamId"
:pileNum="formData.stakeMark"
rangeIndex="downCamera"
:videoType="formData.videoType"
/>
<Carousel v-else style="flex: 1" :pictures="formData.pictures" /> <Video v-if="activeName != '-1'" style="height: 100%; width: 380px" :showHeader="false" :url="formData.videoList && formData.videoList.length > 0
? formData.videoList[0] : ''" :camId="formData.upCamId" :pileNum="formData.stakeMark" rangeIndex="upCamera"
:videoType="formData.videoType" />
<Video v-if="activeName != '-1'" style="height: 100%; width: 380px" :showHeader="false" :url="formData.videoList && formData.videoList.length > 0
? formData.videoList[1] : ''" :camId="formData.downCamId" :pileNum="formData.stakeMark" rangeIndex="downCamera"
:videoType="formData.videoType" />
<Carousel v-if="activeName == '-1'" style="flex: 1" :videos="formData.videoList" :pictures="[]"/>
<Carousel v-if="activeName == '-1'" style="flex: 1" :pictures="formData.pictures" :videos="[]"/>
</div> </div>
<!-- <div>{{ formData.videoList[0] }}</div> --> <!-- <div>{{ formData.videoList[0] }}</div> -->
<TimeLine1 <TimeLine1 v-if="activeName == '1' || activeName == '2'" :data="timeLine1List" />
v-if="activeName == '1' || activeName == '2'" <TimeLine2 v-if="activeName == '1' || activeName == '2'" :data="timeLine2List" style="flex: 1" />
:data="timeLine1List"
/>
<TimeLine2
v-if="activeName == '1' || activeName == '2'"
:data="timeLine2List"
style="flex: 1"
/>
</div> </div>
<!-- 确认弹窗 --> <!-- 确认弹窗 -->
<EventPlanDialog <EventPlanDialog :visible="isShowDialog" :info="info" :eventFormData="formData" :activeName="activeName"
:visible="isShowDialog" @reInitData="() => {
:info="info" this.$emit('update:value', false);
:eventFormData="formData" this.$emit('queryData', true);
:activeName="activeName" }
@reInitData=" " @close="onCloseAddNew" />
() => {
this.$emit('update:value', false);
this.$emit('queryData', true);
}
"
@close="onCloseAddNew"
/>
<template #footer> <template #footer>
<Button <Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px"
v-if="activeName == '-1' || activeName == '0'" @click.native="onDelete">误报</Button>
style="padding: 0 24px" <Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }"
@click.native="onDelete" @click.native="modelVisible = false">取消</Button>
>误报</Button <Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px"
> @click.native="onSubmit">确认</Button>
<Button
:style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }"
@click.native="modelVisible = false"
>取消</Button
>
<Button
v-if="activeName == '-1' || activeName == '0'"
style="padding: 0 24px"
@click.native="onSubmit"
>确认</Button
>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -124,7 +79,7 @@ export default {
activeName: String, activeName: String,
formData: { formData: {
type: Object, type: Object,
default: () => {}, default: () => { },
}, },
}, },
data() { data() {

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

@ -294,8 +294,9 @@ export default {
data.visibility = otherConfig.visibility; data.visibility = otherConfig.visibility;
data.pictures = otherConfig.pictures || []; data.pictures = otherConfig.pictures || [];
data.videoList = otherConfig.videoList || [] data.videoList = otherConfig.videoList || [];
// data.videoList = otherConfig.videoList || ['https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-480p.mp4'] // data.videoList = ['https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-480p.mp4',
// 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-480p.mp4']
} }
data.videoType = "mp4"; data.videoType = "mp4";
this.detailDialogFormData = data; this.detailDialogFormData = data;

71
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue

@ -4,47 +4,24 @@
<ElForm :model="formData" inline :rules="rules" ref="ruleForm"> <ElForm :model="formData" inline :rules="rules" ref="ruleForm">
<div class="first"> <div class="first">
<el-form-item prop="eventCategory"> <el-form-item prop="eventCategory">
<el-radio-group <el-radio-group v-model="formData.eventCategory" @input="changeRadio">
v-model="formData.eventCategory"
@input="changeRadio"
>
<el-radio-button :label="1">交通事件</el-radio-button> <el-radio-button :label="1">交通事件</el-radio-button>
<el-radio-button :label="2">感知事件</el-radio-button> <el-radio-button :label="2">感知事件</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item required label="预案名称:" prop="planName"> <el-form-item required label="预案名称:" prop="planName">
<el-input <el-input v-model="formData.planName" placeholder="请输入预案名称"></el-input>
v-model="formData.planName"
placeholder="请输入预案名称"
></el-input>
</el-form-item> </el-form-item>
<el-form-item required label="事件类型:" prop="eventType"> <el-form-item required label="事件类型:" prop="eventType">
<el-select <el-select v-model="formData.eventType" placeholder="请选择事件类型" @change="changeEventType">
v-model="formData.eventType" <el-option v-for="item in eventOptions" :key="item.value" :label="item.label" :value="item.value">
placeholder="请选择事件类型"
@change="changeEventType"
>
<el-option
v-for="item in eventOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="触发类型:" prop="triggerMechanism"> <el-form-item label="触发类型:" prop="triggerMechanism">
<el-select <el-select v-model="formData.triggerMechanism" placeholder="请选择触发类型">
v-model="formData.triggerMechanism" <el-option v-for="item in mechanismOptions" :key="item.value" :label="item.label" :value="item.value">
placeholder="请选择触发类型"
>
<el-option
v-for="item in mechanismOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -56,11 +33,7 @@
<div class="text"><i style="color: red">*</i>执行操作:</div> <div class="text"><i style="color: red">*</i>执行操作:</div>
</el-col> </el-col>
<el-col :span="22"> <el-col :span="22">
<FormTable <FormTable ref="secondFormTable" :tableData="secondFormData" :type="1"></FormTable>
ref="secondFormTable"
:tableData="secondFormData"
:type="1"
></FormTable>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
@ -70,11 +43,7 @@
<div class="text"><i style="color: red">*</i>恢复操作:</div> <div class="text"><i style="color: red">*</i>恢复操作:</div>
</el-col> </el-col>
<el-col :span="22"> <el-col :span="22">
<FormTable <FormTable ref="thirdFormTable" :tableData="thirdFormData" :type="2"></FormTable>
ref="thirdFormTable"
:tableData="thirdFormData"
:type="2"
></FormTable>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
@ -82,17 +51,9 @@
</div> </div>
<template #footer> <template #footer>
<Button <Button style="background: #c9c9c9; padding: 0 24px"
style="background: #c9c9c9; padding: 0 24px" @click.native="(modelVisible = false), (submitting = false)">取消</Button>
@click.native="(modelVisible = false), (submitting = false)" <Button style="padding: 0 24px" @click.native="handleSubmit" :loading="submitting">保存</Button>
>取消</Button
>
<Button
style="padding: 0 24px"
@click.native="handleSubmit"
:loading="submitting"
>保存</Button
>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -111,7 +72,7 @@ import {
gzmsMap, gzmsMap,
eventSubClassMap, eventSubClassMap,
trafficKV, trafficKV,
perceptionKV, WarningTypeList as perceptionKV,
} from "@screen/utils/enum.js"; } from "@screen/utils/enum.js";
const typeMap = { const typeMap = {
@ -141,7 +102,7 @@ export default {
visible: Boolean, visible: Boolean,
detail: { detail: {
type: Object, type: Object,
default: () => {}, default: () => { },
}, },
}, },
data() { data() {
@ -201,7 +162,7 @@ export default {
}, },
}; };
}, },
mounted() {}, mounted() { },
computed: { computed: {
modelVisible: { modelVisible: {
get() { get() {
@ -212,7 +173,7 @@ export default {
this.eventOptions = typeMap[this.detail.eventCategory]; this.eventOptions = typeMap[this.detail.eventCategory];
this.mechanismOptions = this.mechanismOptions =
eventSubClassMap[this.detail.eventCategory || 1][ eventSubClassMap[this.detail.eventCategory || 1][
this.detail.eventType this.detail.eventType
]; ];
this.initData(this.detail.id); this.initData(this.detail.id);
} else { } else {
@ -327,7 +288,7 @@ export default {
this.eventOptions = typeMap[value]; this.eventOptions = typeMap[value];
this.changeEventType(1); this.changeEventType(1);
}, },
handleChange() {}, handleChange() { },
formatData(it, value = 1, id = "") { formatData(it, value = 1, id = "") {
let data = { ...it, actionType: value, emergencyPlansId: id }; let data = { ...it, actionType: value, emergencyPlansId: id };
if ( if (

127
ruoyi-ui/src/views/JiHeExpressway/utils/enum.js

@ -163,21 +163,7 @@ export const WarningType = {
99: "其他事件", 99: "其他事件",
}; };
// 交通事件主类 //========= 感知事件 主类(key vulue) [{value: 1, label: '交通拥堵'}]=========
export const trafficType = {
1: "交通事故",
2: "车辆故障",
3: "交通管制",
4: "交通拥堵",
5: "非法上路",
6: "路障清除",
7: "施工建设",
8: "服务区异常",
9: "设施设备隐患",
10: "异常天气",
11: "其他事件",
};
export const WarningTypeList = Object.keys(WarningType).map((key) => { export const WarningTypeList = Object.keys(WarningType).map((key) => {
return { return {
value: key * 1, value: key * 1,
@ -185,6 +171,11 @@ export const WarningTypeList = Object.keys(WarningType).map((key) => {
}; };
}); });
// 交通事件主类 {1: "交通事故" } 格式
export const trafficType = Object.keys(EventTopics).reduce((prev, now) => {
return { ...prev, [EventTopics[now]]: now };
}, {});
// 感知事件主类的子类(上方) warningSubclass // 感知事件主类的子类(上方) warningSubclass
export const WarningSubclass = { export const WarningSubclass = {
1: { 1: {
@ -262,104 +253,14 @@ export const WarningSubclass = {
}, },
}; };
//========= 交通事件 主类(key vulue)========= //========= 交通事件 主类(key vulue) =========
export const trafficKV = [ export const trafficKV = Object.keys(trafficType).map((key) => {
{ return {
value: 1, value: key * 1,
label: "交通事故", label: trafficType[key],
}, };
{ });
value: 2,
label: "车辆故障",
},
{
value: 3,
label: "交通管制",
},
{
value: 4,
label: "交通拥堵",
},
{
value: 5,
label: "非法上路",
},
{
value: 6,
label: "路障清除",
},
{
value: 7,
label: "施工建设",
},
{
value: 8,
label: "服务区异常",
},
{
value: 9,
label: "设施设备隐患",
},
{
value: 10,
label: "异常天气",
},
{
value: 11,
label: "其他事件",
},
];
//========= 感知事件 主类(key vulue)=========
export const perceptionKV = [
{
value: 1,
label: "交通拥堵",
},
{
value: 2,
label: "行人",
},
{
value: 3,
label: "非机动车",
},
{
value: 4,
label: "停车",
},
{
value: 5,
label: "违规驾驶",
},
{
value: 6,
label: "路障",
},
{
value: 7,
label: "道路施工",
},
{
value: 8,
label: "异常天气",
},
{
value: 9,
label: "护栏碰撞",
},
{
value: 10,
label: "交通事故",
},
{
value: 11,
label: "车辆故障",
},
{
value: 99,
label: "其他事件",
},
];
//交通事件、感知事件 子类(key vulue)预案使用 //交通事件、感知事件 子类(key vulue)预案使用
export const eventSubClassMap = { export const eventSubClassMap = {
1: { 1: {

2
ruoyi-ui/vue.config.js

@ -31,7 +31,7 @@ module.exports = {
devServer: { devServer: {
host: "0.0.0.0", host: "0.0.0.0",
port: port, port: port,
// https: true, https: true,
open: true, open: true,
proxy: { proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy

Loading…
Cancel
Save