diff --git a/src/api/project/project/index.ts b/src/api/project/project/index.ts index 460927c..23cd9ad 100644 --- a/src/api/project/project/index.ts +++ b/src/api/project/project/index.ts @@ -227,3 +227,39 @@ export const byProjectIdDetail = (id) => { method: 'get' }); }; + +// 新增项目打卡范围 +export const addAttendanceRange = (data) => { + return request({ + url: '/project/projectPunchrange', + method: 'post', + data + }); +}; + +// 删除项目打卡范围 +export const delAttendanceRange = (id) => { + return request({ + url: '/project/projectPunchrange/' + id, + method: 'delete' + }); +}; + + +// 修改项目打卡范围 +export const updateAttendanceRange = (data) => { + return request({ + url: '/project/projectPunchrange', + method: 'put', + data + }); +}; + +// 查询项目打卡范围列表 +export const getAttendanceRangeList = (data) => { + return request({ + url: '/project/projectPunchrange/list', + method: 'get', + params: data + }); +}; \ No newline at end of file diff --git a/src/api/projectScreen/index.ts b/src/api/projectScreen/index.ts new file mode 100644 index 0000000..9e84e68 --- /dev/null +++ b/src/api/projectScreen/index.ts @@ -0,0 +1,66 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; + +// 查询生项目天气 +export const getScreenWeather = (projectId: number | string) => { + return request({ + url: '/project/big/screen/weather/' + projectId, + method: 'get', + }); +}; + +// 查询项目安全天数 +export const getScreenSafetyDay = (projectId: number | string) => { + return request({ + url: '/project/big/screen/safetyDay/' + projectId, + method: 'get', + }); +}; + +// 查询项目公告 +export const getScreenNews = (projectId: number | string) => { + return request({ + url: '/project/big/screen/news/' + projectId, + method: 'get', + }); +}; + +// 查询项目土地统计 +export const getScreenLand = (projectId: number | string) => { + return request({ + url: '/project/big/screen/' + projectId, + method: 'get', + }); +}; + +// 查询项目形象进度 +export const getScreenImgProcess = (projectId: number | string) => { + return request({ + url: '/project/big/screen/imageProgress/' + projectId, + method: 'get', + }); +}; + +// 查询项目人员情况 +export const getScreenPeople = (projectId: number | string) => { + return request({ + url: '/project/big/screen/people/' + projectId, + method: 'get', + }); +}; + +// 查询项目AI安全巡检 +export const getScreenSafetyInspection = (projectId: number | string) => { + return request({ + url: '/project/big/screen/safetyInspection/' + projectId, + method: 'get', + }); +}; + +// 查询项目概况 +export const getScreenGeneralize = (projectId: number | string) => { + return request({ + url: '/project/big/screen/generalize/' + projectId, + method: 'get', + }); +}; diff --git a/src/api/projectScreen/types.ts b/src/api/projectScreen/types.ts new file mode 100644 index 0000000..f6f3b57 --- /dev/null +++ b/src/api/projectScreen/types.ts @@ -0,0 +1,5 @@ +export interface TableQuery extends PageQuery { + tableName: string; + tableComment: string; + dataName: string; +} \ No newline at end of file diff --git a/src/assets/projectLarge/center.png b/src/assets/projectLarge/center.png new file mode 100644 index 0000000..c1ea62c Binary files /dev/null and b/src/assets/projectLarge/center.png differ diff --git a/src/assets/projectLarge/leftarrow.png b/src/assets/projectLarge/leftarrow.png deleted file mode 100644 index 55c4b79..0000000 Binary files a/src/assets/projectLarge/leftarrow.png and /dev/null differ diff --git a/src/assets/projectLarge/rightarrow.png b/src/assets/projectLarge/rightarrow.png deleted file mode 100644 index 723df81..0000000 Binary files a/src/assets/projectLarge/rightarrow.png and /dev/null differ diff --git a/src/assets/projectLarge/swiper.png b/src/assets/projectLarge/swiper.png deleted file mode 100644 index 32520bd..0000000 Binary files a/src/assets/projectLarge/swiper.png and /dev/null differ diff --git a/src/views/ProjectScreen/components/centerPage.vue b/src/views/ProjectScreen/components/centerPage.vue index 8c79dcf..ebf11df 100644 --- a/src/views/ProjectScreen/components/centerPage.vue +++ b/src/views/ProjectScreen/components/centerPage.vue @@ -1,26 +1,27 @@ - @@ -82,24 +157,41 @@ onMounted(() => { .centerPage { display: flex; flex-direction: column; - width: 50vw; height: 100%; +} - .topPage, - .endPage { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - padding: 15px 0; - border: 1px solid rgba(29, 214, 255, 0.1); - box-sizing: border-box; - } +.topPage, +.endPage { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + padding: 15px 0; + border: 1px solid rgba(230, 247, 255, 0.1); + box-sizing: border-box; +} - .topPage { - flex: 1; - margin-bottom: 23px; - } +.topPage { + flex: 1; + margin-bottom: 23px; + transition: flex 0.5s ease; +} + +.endPage { + max-height: 300px; + opacity: 1; + transition: all 0.5s ease; +} + +/* 向下滑出动画 */ +.slide-out-down { + transform: translateY(100%); + opacity: 0; + max-height: 0; + padding: 0; + margin: 0; + border: none; } .swiper { @@ -161,14 +253,20 @@ onMounted(() => { .arrow { display: grid; place-items: center; - width: 20px; - height: 20px; + width: 24px; + height: 24px; border-radius: 50%; - border: 1px solid skyblue; + border: 1px solid rgba(29, 214, 255, 0.3); color: skyblue; + cursor: pointer; + transition: all 0.3s ease; - &:canUse { - color: #000 !important; + &.canUse { + border: 1px solid rgba(29, 214, 255, 1); + } + + &:hover:not(.canUse) { + opacity: 0.7; } } diff --git a/src/views/ProjectScreen/components/header.vue b/src/views/ProjectScreen/components/header.vue index 322f1d4..5450f69 100644 --- a/src/views/ProjectScreen/components/header.vue +++ b/src/views/ProjectScreen/components/header.vue @@ -6,7 +6,7 @@
安全生产天数:
- 1,235 + {{ safetyDay }}
@@ -14,16 +14,18 @@
XXX智慧工地管理平台
XXX Smart Construction Stic Management Dashboard
-
+
- 天气图标 - - - 多云 9°/18° - {{ week[date.week] }} ({{ date.ymd }}) - +
+
+ +
{{ item.weather }}{{ item.tempMin }}°/{{ item.tempMax }}°
+
{{ item.week }}({{ item.date }})
+
+
@@ -35,48 +37,155 @@ 设置图标 管理系统
+ +
+
+
+
+ +
+ + + + + + +
diff --git a/src/views/ProjectScreen/components/leftPage.vue b/src/views/ProjectScreen/components/leftPage.vue index 3be8ba0..3130984 100644 --- a/src/views/ProjectScreen/components/leftPage.vue +++ b/src/views/ProjectScreen/components/leftPage.vue @@ -2,30 +2,53 @@
- <div class="content"> - <div class="content_item" v-for="item in 6" :key="item"> - <div class="round"> - <div class="sub_round"></div> + <div class="content_item" v-for="item in news" :key="item.id"> + <img src="@/assets/projectLarge/round.svg" alt=""> + <div class="ellipsis"> + {{ item.title }} + <span @click="showNewsDetail(item)" style="color: rgba(138, 149, 165, 1);">{{ item.id === newId ? '关闭' : + '查看' }}</span> </div> - <div class="ellipsis">2025年6月23日 重庆市两江新区广场前期准备与审批完毕区广场前期准备与审批完毕前期准备与审批完毕区广场前期准备与审批完毕</div> </div> </div> </div> + + <div class="detailBox" :class="{'show': newId}"> + <!-- <div class="detail_title">{{ newDetail.title }}</div> --> + <div class="detail_content" v-html="newDetail.content"></div> + </div> + <div class="endPage"> <Title title="人员情况" /> - <div class="map"> <img src="@/assets/projectLarge/map.svg" alt=""> + <!-- <div ref="mapChartRef"></div> --> </div> <div class="attendance_tag"> - <div class="tag_item" v-for="(item, index) in tagList" :key="index"> + <div class="tag_item"> <img src="@/assets/projectLarge/people.svg" alt=""> - <div class="tag_title">{{ item.title }}</div> + <div class="tag_title">出勤人</div> <div class="tag_info"> - {{ item.number }} - <span style="font-size: 14px;">{{ index === 2 ? '%' : '人' }}</span> + {{ attendanceCount }} + <span style="font-size: 14px;">人</span> + </div> + </div> + <div class="tag_item"> + <img src="@/assets/projectLarge/people.svg" alt=""> + <div class="tag_title">在岗人</div> + <div class="tag_info"> + {{ peopleCount }} + <span style="font-size: 14px;">人</span> + </div> + </div> + <div class="tag_item"> + <img src="@/assets/projectLarge/people.svg" alt=""> + <div class="tag_title">出勤率</div> + <div class="tag_info"> + {{ attendanceRate }} + <span style="font-size: 14px;">%</span> </div> </div> </div> @@ -37,11 +60,11 @@ <div class="attendance_item_title">出勤率</div> <div class="attendance_item_title">出勤时间</div> </div> - <div v-for="item in list" :key="item.title" class="attendance_item"> - <div class="attendance_item_title">{{ item.title }}</div> - <div class="attendance_item_number">{{ item.number }} <span class="subfont">人/{{ item.number }}</span></div> + <div v-for="item in teamAttendanceList" :key="item.id" class="attendance_item"> + <div class="attendance_item_title">{{ item.teamName }}</div> + <div class="attendance_item_number">{{ item.attendanceNumber }} <span class="subfont">人/{{ item.allNumber }}</span></div> <div class="attendance_item_rate">{{ item.attendanceRate }} %</div> - <div class="attendance_item_date subfont">{{ item.date }}</div> + <div class="attendance_item_date subfont">{{ item.attendanceTime }}</div> </div> </div> </div> @@ -51,29 +74,101 @@ <script setup lang="ts"> import { ref } from "vue" import Title from './title.vue' +import { getScreenNews, getScreenPeople } from '@/api/projectScreen'; +import { mapOption } from './optionList' +import * as echarts from 'echarts'; -const list = ref([ - { title: '智慧系统运维', number: 30, attendanceRate: 100, date: '2025-08-05 08:10' }, - { title: '智慧系统运维', number: 30, attendanceRate: 100, date: '2025-08-05 08:10' }, - { title: '智慧系统运维', number: 30, attendanceRate: 100, date: '2025-08-05 08:10' }, - { title: '智慧系统运维', number: 30, attendanceRate: 100, date: '2025-08-05 08:10' }, - { title: '智慧系统运维', number: 30, attendanceRate: 100, date: '2025-08-05 08:10' }, - { title: '智慧系统运维', number: 30, attendanceRate: 100, date: '2025-08-05 08:10' }, +const props = defineProps({ + projectId: { + type: String, + default: '' + } +}) + +let mapChart = null +const mapChartRef = ref<HTMLDivElement | null>(null); +const news = ref([]) +const newDetail = ref({ + title: '', + content: '' +}) +const newId = ref('') +const attendanceCount = ref(0) +const attendanceRate = ref(0) +const peopleCount = ref(0) +const teamAttendanceList = ref([ + { id: "", teamName: "", attendanceNumber: 0, allNumber: 0, attendanceRate: 0, attendanceTime: "" }, ]) -const tagList = ref([ - { title: '出勤人数', number: 259 }, - { title: '在岗人数', number: 100 }, - { title: '出勤率', number: 100 }, -]) +/** + * 显示新闻详情 + */ +const showNewsDetail = (item: any) => { + if (newId.value === item.id) { + newId.value = '' + return + } + newDetail.value = item + newId.value = item.id +} + +/** + * 获取项目人员出勤数据 + */ +const getPeopleData = async () => { + const res = await getScreenPeople(props.projectId); + const { data, code } = res + if (code === 200) { + attendanceCount.value = data.attendanceCount + attendanceRate.value = data.attendanceRate + peopleCount.value = data.peopleCount + teamAttendanceList.value = data.teamAttendanceList + } +} + +/** + * 获取项目新闻数据 + */ +const getNewsData = async () => { + const res = await getScreenNews(props.projectId); + const { data, code } = res + if (code === 200) { + news.value = data + } +} + +/** + * 初始化地图 + */ +const initMapChart = () => { + if (!mapChartRef.value) { + return; + } + mapChart = echarts.init(mapChartRef.value); + mapChart.setOption(mapOption); +} + +onMounted(() => { + // nextTick(() => { + // initMapChart(); + // }); + getPeopleData() + getNewsData() +}) + +onUnmounted(() => { + // if (mapChart) { + // mapChart.dispose(); + // mapChart = null; + // } +}); + </script> <style scoped lang="scss"> .leftPage { display: flex; flex-direction: column; - width: calc(25vw - 30px); - margin: 0 15px; height: 100%; .topPage, @@ -115,11 +210,11 @@ const tagList = ref([ display: flex; align-items: flex-start; gap: 10px; - // position: relative; margin-bottom: 20px; font-size: 14px; font-weight: 400; color: rgba(230, 247, 255, 1); + cursor: pointer; .ellipsis { display: -webkit-box; @@ -134,21 +229,8 @@ const tagList = ref([ margin-bottom: 0; } - .round { - display: grid; - place-items: center; + img { margin-top: 3px; - width: 12px; - height: 12px; - border-radius: 50%; - background: rgba(29, 214, 255, 0.3); - - .sub_round { - width: 6px; - height: 6px; - border-radius: 50%; - background: #1DD6FF; - } } } } @@ -201,4 +283,45 @@ const tagList = ref([ .subfont { color: rgba(138, 149, 165, 1); } + +.detailBox { + position: absolute; + left: 20vw; + top: 0; + width: 300px; + height: 300px; + max-height: 500px; + overflow-y: auto; + padding: 0 15px; + box-sizing: border-box; + background: rgba(255, 255, 255, 0.2); + border-radius: 4px; + transition: all 0.3s ease; + opacity: 0; + z-index: -1; + + &.show { + left: 25vw; + opacity: 1; + z-index: 1; + } +} + +.detailBox::before { + content: ''; + /* 绝对定位相对于父元素 */ + position: absolute; + /* 定位到左侧中间位置 */ + left: -10px; + top: 50%; + /* 垂直居中 */ + transform: translateY(-50%); + /* 利用边框创建三角形 */ + border-width: 10px 10px 10px 0; + border-style: solid; + /* 三角形颜色与背景匹配,左侧边框透明 */ + border-color: transparent rgba(255, 255, 255, 0.2) transparent transparent; + /* 确保三角形在内容下方 */ + z-index: -1; +} </style> diff --git a/src/views/ProjectScreen/components/optionList.ts b/src/views/ProjectScreen/components/optionList.ts index e69de29..bcdf958 100644 --- a/src/views/ProjectScreen/components/optionList.ts +++ b/src/views/ProjectScreen/components/optionList.ts @@ -0,0 +1,153 @@ +export let pieOption = { + // 定义中心文字 + graphic: [ + { + type: 'text', + left: 'center', + top: '40%', + style: { + // 需要从接口替换 + text: '70%', + fontSize: 24, + fontWeight: 'bold', + fill: '#fff' + } + }, + { + type: 'text', + left: 'center', + top: '50%', + style: { + text: '总进度', + fontSize: 14, + fill: '#fff' + } + }, + ], + legend: { + show: true, + type: 'plain', + bottom: 20, + itemWidth: 12, + itemHeight: 12, + textStyle: { + color: '#fff' + } + }, + series: { + type: 'pie', + data: [], + radius: [50, 80], + center: ['50%', '45%'], + itemStyle: { + borderColor: '#fff', + borderWidth: 1 + }, + label: { + alignTo: 'edge', + formatter: '{name|{b}}\n{percent|{c} %}', + minMargin: 10, + edgeDistance: 20, + lineHeight: 15, + rich: { + name: { + fontSize: 12, + color: '#fff' + }, + percent: { + fontSize: 12, + color: '#fff' + } + } + }, + legend: { + top: 'bottom' + }, + } +}; + +export let barOption = { + legend: { + icon: 'rect', + itemWidth: 12, + itemHeight: 12, + // 调整文字与图标间距 + data: ['计划流转面积', '已流转面积'], + top: 0, + right: 20, + textStyle: { + color: '#fff', + } + }, + xAxis: { + type: 'category', + data: ['地块1', '地块2', '地块3', '地块4', '地块5', '地块6'], + axisLabel: { + color: '#fff' + }, + axisLine: { + show: false + }, + splitLine: { + show: false + } + }, + yAxis: { + name: '单位:m²', + type: 'value', + axisLabel: { + formatter: '{value}' + } + }, + grid: { + bottom: 0, // 距离容器底部的距离 + containLabel: true // 确保坐标轴标签不被裁剪 + }, + series: [ + { + name: '计划流转面积', + type: 'bar', + data: [], + barWidth: '20%', + itemStyle: { + color: 'rgb(29, 253, 253)' + }, + }, + { + name: '已流转面积', + type: 'bar', + data: [], + barWidth: '20%', + itemStyle: { + color: 'rgb(25, 181, 251)' + }, + } + ] +}; + +export let mapOption = { + geo: { + map: 'ch', + roam: true, + aspectScale: Math.cos((47 * Math.PI) / 180), + }, + series: [ + { + type: 'graph', + coordinateSystem: 'geo', + data: [ + { name: 'a', value: [7.667821250000001, 46.791734269956265] }, + { name: 'b', value: [7.404848750000001, 46.516308805996054] }, + { name: 'c', value: [7.376673125000001, 46.24728858538375] }, + { name: 'd', value: [8.015320625000001, 46.39460918238572] }, + { name: 'e', value: [8.616400625, 46.7020608630855] }, + { name: 'f', value: [8.869981250000002, 46.37539345234199] }, + { name: 'g', value: [9.546196250000001, 46.58676648282309] }, + { name: 'h', value: [9.311399375, 47.182454114178896] }, + { name: 'i', value: [9.085994375000002, 47.55395822835779] }, + { name: 'j', value: [8.653968125000002, 47.47709530818285] }, + { name: 'k', value: [8.203158125000002, 47.44506909144329] } + ], + } + ] +}; diff --git a/src/views/ProjectScreen/components/rightPage.vue b/src/views/ProjectScreen/components/rightPage.vue index 52d13b0..37aaec2 100644 --- a/src/views/ProjectScreen/components/rightPage.vue +++ b/src/views/ProjectScreen/components/rightPage.vue @@ -2,21 +2,14 @@ <div class="leftPage"> <div class="topPage"> <Title title="项目概况" /> - - <div class="content"> - <div class="content_item">项目名称:智慧生态工地社区开发项目</div> - <div class="content_item">项目位置:贵州省贵阳市乌当区(具体地块编号:01-123-11)</div> - <div class="content_item">占地面积:约10000亩</div> - <div class="content_item"> 土地性质:城镇住宅用地(兼容商业用地,容积率≤2.5)</div> - </div> + <div class="content" v-html="generalize"></div> </div> <div class="endPage"> - <!-- 饼图容器 --> <Title title="形象进度" /> - - <div ref="pieChartRef" class="echart" /> - <!-- 折线图容器 --> - <div ref="lineChartRef" class="echart" /> + <div class="chart_container"> + <div ref="pieChartRef" class="echart" /> + <div ref="lineChartRef" class="echart" /> + </div> </div> </div> </template> @@ -25,149 +18,45 @@ import { ref, onMounted, onUnmounted, nextTick } from "vue" import Title from './title.vue' import * as echarts from 'echarts'; +import { pieOption, barOption } from './optionList'; +import { getScreenLand, getScreenImgProcess, getScreenGeneralize } from '@/api/projectScreen'; +const props = defineProps({ + projectId: { + type: String, + default: 0 + } +}) + +const generalize = ref() // 饼图相关 const pieChartRef = ref<HTMLDivElement | null>(null); let pieChart: any = null; - +const totalPercent = ref(0) // 折线图相关 const lineChartRef = ref<HTMLDivElement | null>(null); let lineChart: any = null; - +// 土地数据 折线图 +const designAreaData = ref([]) +const transferAreaData = ref([]) // 饼图数据 const pieData = [ - { name: '桩点浇筑', value: 13 }, - { name: '水泥灌注', value: 7 }, - { name: '箱变安装', value: 40 }, - { name: '支架安装', value: 20 }, - { name: '组件安装', value: 20 }, + { label: 'areaPercentage', name: '厂区', value: 0 }, + { label: 'roadPercentage', name: '道路', value: 0 }, + { label: 'collectorLinePercentage', name: '集电线路', value: 0 }, + { label: 'exportLinePercentage', name: '送出线路', value: 0 }, + { label: 'substationPercentage', name: '升压站', value: 0 }, + { label: 'boxTransformerPercentage', name: '箱变', value: 0 }, ] -// 折线图数据 -const barData = { - xAxis: ['地块1', '地块2', '地块3', '地块4', '地块5', '地块6'], - series: [ - { - name: '计划流转面积', - data: [70, 25, 45, 115, 70, 85] - }, - { - name: '已流转面积', - data: [105, 30, 150, 65, 80, 200] - } - ] -} - -// 饼图配置 -const pieOption = { - series: { - type: 'pie', - data: pieData, - radius: [50, 80], - itemStyle: { - borderColor: '#fff', - borderWidth: 1 - }, - label: { - alignTo: 'edge', - formatter: '{name|{b}}\n{percent|{c} %}', - minMargin: 10, - edgeDistance: 20, - lineHeight: 15, - rich: { - name: { - fontSize: 12, - color: '#fff' - }, - percent: { - fontSize: 12, - color: '#fff' - } - } - }, - legend: { - top: 'bottom' - }, - } -}; - -// 柱状图配置 -const barOption = { - legend: { - data: ['计划流转面积', '已流转面积'], - top: 0 - }, - grid: { - left: '3%', - right: '4%', - bottom: '3%', - containLabel: true - }, - xAxis: { - type: 'category', - data: barData.xAxis - }, - yAxis: { - name: '单位:m²', - type: 'value', - axisLabel: { - formatter: '{value}' - } - }, - series: [ - { - type: 'bar', - data: [], // 空数据,仅用于承载markArea - markArea: { - silent: true, // 背景不响应交互 - data: (() => { - const groupCount = 3; // 共3组(6个月 ÷ 2) - const groupWidth = 1.8; // 每组背景宽度(覆盖2根柱子) - const bgData = []; - - for (let i = 0; i < groupCount; i++) { - const startX = i * 2 - 0.9; // 每组起始位置 - const endX = startX + groupWidth; // 每组结束位置 - bgData.push([ - { xAxis: startX, yAxis: 0 }, - { xAxis: endX, yAxis: 100 } - ]); - } - return bgData; - })(), - itemStyle: { - color: 'rgba(255, 255, 255, 0.05)', - borderRadius: 4 - } - } - }, - { - name: '计划流转面积', - type: 'bar', - data: barData.series[0].data, - barWidth: 15, // 柱形宽度 - itemStyle: { - color: 'rgb(29, 253, 253)' - }, - }, - { - name: '已流转面积', - type: 'bar', - data: barData.series[1].data, - barWidth: 15, - itemStyle: { - color: '#rgb(25, 181, 251)' - }, - } - ] -}; - // 初始化饼图 const initPieChart = () => { if (!pieChartRef.value) { console.error('未找到饼图容器元素'); return; } + pieOption.series.data = pieData + pieOption.graphic[0].style.text = totalPercent.value + '%' pieChart = echarts.init(pieChartRef.value, null, { renderer: 'canvas', useDirtyRect: false @@ -181,6 +70,8 @@ const initLineChart = () => { console.error('未找到折线图容器元素'); return; } + barOption.series[0].data = designAreaData.value + barOption.series[1].data = transferAreaData.value lineChart = echarts.init(lineChartRef.value, null, { renderer: 'canvas', useDirtyRect: false @@ -194,11 +85,52 @@ const handleResize = () => { if (lineChart) lineChart.resize(); }; +/** + * 获取项目土地统计数据 + */ +const getScreenLandData = async () => { + const res = await getScreenLand(props.projectId); + const { data, code } = res + if (code === 200) { + designAreaData.value = data.map((item: any) => Number(item.designArea)) + transferAreaData.value = data.map((item: any) => Number(item.transferArea)) + initLineChart(); + } +} + +/** + * 获取项目形象进度数据 + */ +const getScreenImgProcessData = async () => { + const res = await getScreenImgProcess(props.projectId); + const { data, code } = res + if (code === 200) { + totalPercent.value = data.totalPercentage + pieData.forEach((item: any) => { + item.value = data[item.label] + }) + initPieChart() + } +} + +/** + * 获取项目概况数据 + */ +const getScreenGeneralizeData = async () => { + const res = await getScreenGeneralize(props.projectId); + const { data, code } = res + if (code === 200) { + generalize.value = data + } +} + // 组件挂载时初始化图表 onMounted(() => { + getScreenLandData() + getScreenImgProcessData() + getScreenGeneralizeData() nextTick(() => { initPieChart(); - initLineChart(); window.addEventListener('resize', handleResize); }); }); @@ -221,8 +153,6 @@ onUnmounted(() => { .leftPage { display: flex; flex-direction: column; - width: calc(25vw - 30px); - margin: 0 15px; height: 100%; .topPage, @@ -240,15 +170,37 @@ onUnmounted(() => { flex: 1; margin-top: 23px; - .echart { + .chart_container { + display: flex; + flex-direction: column; width: 100%; height: 100%; } + + .echart { + height: 50%; + width: 100%; + } } } .content { - margin: 10px 35px; + max-height: 100px; + margin: 0 15px; + padding: 0 10px; + margin-top: 15px; + box-sizing: border-box; + overflow-y: auto; + + &::-webkit-scrollbar-track { + background: rgba(204, 204, 204, 0.1); + border-radius: 10px; + } + + &::-webkit-scrollbar-thumb { + background: rgba(29, 214, 255, 0.78); + border-radius: 10px; + } .content_item { font-size: 14px; @@ -262,12 +214,6 @@ onUnmounted(() => { } } -.ellipse { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - .subfont { color: rgba(138, 149, 165, 1); } diff --git a/src/views/ProjectScreen/components/title.vue b/src/views/ProjectScreen/components/title.vue index 04b607c..361f557 100644 --- a/src/views/ProjectScreen/components/title.vue +++ b/src/views/ProjectScreen/components/title.vue @@ -4,8 +4,8 @@ <img src="@/assets/projectLarge/section.svg" alt=""> <img src="@/assets/projectLarge/border.svg" alt=""> </div> - <div v-if="prefix"> - <img src="@/assets/projectLarge/robot.svg" alt="" style="width: 20px; height: 20px;margin-right: 5px;"> + <div> + <slot></slot> </div> <div>{{ title }}</div> </div> diff --git a/src/views/ProjectScreen/index.vue b/src/views/ProjectScreen/index.vue index 612dd7d..f58a18f 100644 --- a/src/views/ProjectScreen/index.vue +++ b/src/views/ProjectScreen/index.vue @@ -1,45 +1,108 @@ <template> - <div class="large-screen"> - <Header /> + <div class="large_screen"> + <Header :projectId="projectId" :isFull="isFull" @changePage="handleChangePage" /> <div class="nav"> - <leftPage /> - <centerPage /> - <rightPage /> + <div class="nav_left" :style="{ left: isHideOther ? '-25vw' : '0' }"> + <leftPage :projectId="projectId" /> + </div> + <div class="nav_center" :style="{ width: isFull ? '100%' : 'calc(50vw - 30px)' }"> + <centerPage :projectId="projectId" :isHide="isFull" /> + </div> + <div class="nav_right" :style="{ right: isHideOther ? '-25vw' : '0' }"> + <rightPage :projectId="projectId" /> + </div> </div> </div> </template> <script setup lang="ts"> +import { ref } from 'vue'; import Header from './components/header.vue'; import leftPage from './components/leftPage.vue'; import centerPage from './components/centerPage.vue'; import rightPage from './components/rightPage.vue'; +import { useUserStoreHook } from '@/store/modules/user'; + +const userStore = useUserStoreHook(); +const projectId = computed(() => userStore.selectedProject.id); +const isFull = ref(false) +const isHideOther = ref(false) + +/** + * 切换中心页面全屏 + */ +const handleChangePage = () => { + if (isFull.value) { + isFull.value = false; + setTimeout(() => { + isHideOther.value = false; + }, 500); + } else { + isFull.value = true; + isHideOther.value = true; + } +} </script> <style lang="scss" scoped> -.large-screen { +.large_screen { width: 100vw; height: 100vh; background: url('@/assets/large/bg.png') no-repeat; background-size: 100% 100%; + background-attachment: fixed; background-color: rgba(4, 7, 17, 1); + overflow: hidden; } .nav { - display: flex; - gap: 15rpx; - width: 100%; - height: calc(100vh - 100px); + position: relative; + display: grid; + place-items: center; + width: calc(100vw - 30px); + height: calc(100vh - 90px); + margin: 0 auto; box-sizing: border-box; color: #fff; } .nav_left, .nav_right { - margin: 0 15px 15px 15px; + position: absolute; + width: calc(25vw - 15px); + height: 100%; + transition: all 0.5s ease; +} + +.nav_left { + top: 0; + left: 0; +} + +.nav_right { + top: 0; + right: 0; } .nav_center { - margin-bottom: 15px; + height: 100%; + transition: all 0.5s ease; +} + +/* 中间面板全屏动画 */ +.full-width { + /* 取消flex增长,使用固定宽度 */ + width: calc(100vw - 30px); + flex: none; +} + +.slide_left { + left: -25vw; + opacity: 0; +} + +.slide_right { + right: -25vw; + opacity: 0; } </style> diff --git a/src/views/project/project/index.vue b/src/views/project/project/index.vue index 2adad4b..dc8ec1b 100644 --- a/src/views/project/project/index.vue +++ b/src/views/project/project/index.vue @@ -150,7 +150,7 @@ <el-button link type="primary" icon="Edit" @click="handleCheckRules(scope.row)" v-hasPermi="['project:attendanceRule:byProjectId']" >打卡规则 </el-button> - <!-- <el-button link type="primary" icon="Edit" @click="handleScope(scope.row)" v-hasPermi="['project:project:edit']">打卡范围 </el-button> --> + <el-button link type="primary" icon="Edit" @click="handleScope(scope.row)" v-hasPermi="['project:project:edit']">打卡范围 </el-button> <el-button link type="primary" icon="FolderOpened" @click="handleShowUpload(scope.row)" v-hasPermi="['project:project:edit']" >导入安全协议书 </el-button> @@ -367,23 +367,28 @@ </el-dialog> <el-dialog draggable title="打卡范围" v-model="ScopeFlag" width="600"> <div v-for="(item, i) of punchRangeList" :key="i" class="options_item"> - <el-row> + <el-row style="margin-bottom: 10px;"> <el-col :span="1"> <el-color-picker v-model="item.punchColor" show-alpha /></el-col> <el-col :span="12"> <el-input v-model="item.punchName" placeholder="请输入打卡范围名称" class="ml-8" /></el-col> <el-col :span="10" style="text-align: right; margin-top: 5px"> - <el-button link type="primary" icon="view">预览</el-button> - <el-button link type="primary" icon="plus">添加</el-button> - <el-button link type="primary" icon="delete">移除</el-button> + <el-button v-if="item.id" link type="primary" icon="view" @click="previewPunchRange(item)">预览</el-button> + <el-button v-if="item.id" link type="primary" icon="delete" @click="handleScopeDel(item)">移除</el-button> + <el-button v-if="!item.id" link type="primary" icon="plus" @click="addPunchRange(item)">添加</el-button> + <el-button v-if="item.id" link type="primary" icon="download" @click="handleScopeEdit(item)">保存</el-button> </el-col> </el-row> </div> <template #footer> <div class="dialog-footer"> - <el-button type="primary" @click="scopeSubmit"> 提交</el-button> + <el-button type="primary" @click="scopeSubmit">确定</el-button> <el-button @click="ScopeFlag = false">取消</el-button> </div> </template> </el-dialog> + <CesiumEarthDialog ref="earthDialog" @send-data="handleEarthData" + :position="position" + :data="earthData" + @close="handleEarthClose"></CesiumEarthDialog> </div> </template> @@ -398,10 +403,17 @@ import { updateProject, attendanceRuleAdd, attendanceRuleEdit, - byProjectIdDetail + byProjectIdDetail, + getAttendanceRangeList, + updateAttendanceRange, + delAttendanceRange } from '@/api/project/project'; import { ProjectForm, ProjectQuery, ProjectVO, childProjectQuery, locationType } from '@/api/project/project/types'; import amap from '@/components/amap/index.vue'; +import CesiumEarthDialog from "./map.vue" +import { useUserStoreHook } from '@/store/modules/user'; +const userStore = useUserStoreHook(); +const currentProject = computed(() => userStore.selectedProject); const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { sys_normal_disable, project_category_type, project_type, project_stage } = toRefs<any>( proxy?.useDict('sys_normal_disable', 'project_category_type', 'project_type', 'project_stage') @@ -424,6 +436,14 @@ const projectId = ref<string>(''); const designId = ref<string>(''); const ruleFlag = ref(false); const ScopeFlag = ref(false); +const earthDialog = ref(null); +const position = ref(''); //预览 +let earthData = reactive({ + projectId: '', + punchName: '', + punchColor: '#1983ff', + punchRange: '', +}); //传值给地图组件 const punchRangeList = ref<any>([ { punchName: '', @@ -710,10 +730,48 @@ const handleSetChild = async () => { } }; const handleScope = (row) => { + console.log('row',row); // 打卡范围 ScopeFlag.value = true; projectId.value = row.id; + // 获取打卡范围列表 + getListScope(row.id); }; +// 获取打卡范围列表 +const getListScope = (id) => { + punchRangeList.value = [{ + punchName: '', + punchColor: '#1983ff' + }]; + getAttendanceRangeList({ projectId: id, }).then((res) => { + if (res.code === 200) { + punchRangeList.value.unshift(...res.rows); + } + }); +} +// 修改打卡范围 +const handleScopeEdit = (row) => { + updateAttendanceRange(row).then((res) => { + if (res.code === 200) { + proxy.$modal.msgSuccess('修改成功'); + // ScopeFlag.value = false; + getListScope(projectId.value); + } + }); +} +// 删除打卡范围 +const handleScopeDel = (row) => { + proxy.$modal.confirm('是否确认删除打卡范围?').then(() => { + delAttendanceRange(row.id).then((res) => { + if (res.code === 200) { + proxy.$modal.msgSuccess('删除成功'); + getListScope(projectId.value); + } + }); + }).catch(() => {}); +} + + const scopeSubmit = () => { // 提交打卡范围 }; @@ -761,7 +819,36 @@ const handleExport = () => { `project_${new Date().getTime()}.xlsx` ); }; - +// 打开绘制范围 +const addPunchRange = (item) => { + earthData.punchName = item.punchName + earthData.punchColor = item.punchColor + earthData.projectId = projectId.value + earthData.id = '' + earthData.punchRange = '' + if (earthData.punchName=='') { + proxy.$modal.msgError('请先填写打卡范围名称'); + return + } + earthDialog.value.show() +} +// 接受绘制范围 +const handleEarthData = (data) => { + ScopeFlag.value = false; +} +// 关闭绘制范围 +const handleEarthClose = () => { + earthDialog.value.show = false +} +// 预览范围 +const previewPunchRange = (item)=>{ + earthData.id = item.id + earthData.projectId = item.projectId + earthData.punchName = item.punchName + earthData.punchColor = item.punchColor + earthData.punchRange = item.punchRange + earthDialog.value.show() +} onMounted(() => { getList(); }); diff --git a/src/views/project/project/map.vue b/src/views/project/project/map.vue new file mode 100644 index 0000000..260ef86 --- /dev/null +++ b/src/views/project/project/map.vue @@ -0,0 +1,296 @@ +<template> + <el-dialog v-model="visible" title="地球可视化" :width="dialogWidth" :height="dialogHeight" :before-close="handleClose" + destroy-on-close> + <div v-loading="loading" id="earthMap" class="earth-container"></div> + <template #footer> + <el-button type="warning" @click="redraw">重新绘制</el-button> + <el-button v-if="isDraw" type="success" @click="drawRange">绘制</el-button> + <el-button type="primary" @click="handlesubmit">确定</el-button> + <el-button type="danger" @click="handleClose">关闭</el-button> + </template> + </el-dialog> +</template> + +<script setup> +import { ref, onMounted, watch, defineEmits, defineProps } from 'vue'; +import { ElMessage } from 'element-plus'; +import { + addAttendanceRange, + updateAttendanceRange, +} from '@/api/project/project'; +const emit = defineEmits(['send-data', 'close']); +const props = defineProps({ + position: { + type: String, + default: '' + }, + data: { + type: Object, + default: () => { } + } +}); +// 弹窗控制变量 +const visible = ref(false); +const dialogWidth = ref('90%'); +const dialogHeight = ref('90%'); +let earthInstance = null; +let earthContainer = ref(null); +let loading = ref(true); +let positions = ref([]); +const entityObject = ref(null); +const isDraw = ref(true); +// 显示弹窗 +const show = () => { + visible.value = true; + console.log(props.data); + if (props.data?.id) { + console.log(231, props.data); + isDraw.value = false; + } +}; + +// 关闭弹窗 +const handleClose = () => { + visible.value = false; + // 清除地球实例 + if (earthInstance && earthInstance.destroy) { + earthInstance.destroy(); + earthInstance = null; + } + // 清除全局变量引用 + if (window.Earth2) { + delete window.Earth2; + } +}; + +// 监听弹窗显示状态,初始化地球 +watch( + () => visible.value, + (newVal) => { + if (newVal && earthContainer.value) { + createEarth(); + } + } +); + +// 创建地球 +const createEarth = () => { + if (!window.YJ) { + ElMessage.error('YJ库未加载,请检查依赖'); + return; + } + + window.YJ.on({ + ws: true, + // host: getIP(), // 资源所在服务器地址 + // username: this.loginForm.username, // 用户名 + // password: md5pass, // 密码 + }).then((res) => { + if (!earthContainer.value) return; + loading.value = false; + // 创建地球实例 + earthInstance = new YJ.YJEarth(earthContainer.value); + window.Earth2 = earthInstance; + + // 开启右键和左键点击事件 + YJ.Global.openRightClick(window.Earth2); + YJ.Global.openLeftClick(window.Earth2); + + // 设置初始视角 + const view = { + position: { + lng: 102.03643298211526, + lat: 34.393586474501, + alt: 11298179.51993155 + }, + orientation: { + heading: 360, + pitch: -89.94481747201486, + roll: 0 + } + }; + + YJ.Global.CesiumContainer(window.Earth2, { + compass: false, //罗盘 + }); + // 加载底图 + loadBaseMap(earthInstance.viewer); + + // 可以取消注释以下代码来设置初始视角 + // YJ.Global.flyTo(earthInstance, view); + // YJ.Global.setDefaultView(earthInstance.viewer, view) + if (props.data.punchRange) { + renderRange(JSON.parse(props.data.punchRange)); + } + }) + .catch((err) => { + console.error('初始化地球失败:', err); + ElMessage.error('初始化地球失败,请稍后重试'); + }); +}; + +// 加载底图 +const loadBaseMap = (viewer) => { + if (!viewer || !Cesium) { + ElMessage.error('Cesium库未加载,请检查依赖'); + return; + } + + try { + // 创建瓦片提供器 + const imageryProvider = new Cesium.UrlTemplateImageryProvider({ + url: 'https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', + fileExtension: 'png', + minimumLevel: 0, + maximumLevel: 18, + projection: Cesium.WebMercatorProjection, + credit: new Cesium.Credit('卫星图数据来源') + }); + + // 添加图层到视图 + viewer.imageryLayers.addImageryProvider(imageryProvider); + } catch (err) { + console.error('加载底图失败:', err); + ElMessage.error('加载底图失败'); + } +}; +// 处理数据传递 +const handlesubmit = () => { + if (!earthInstance || !earthInstance.viewer) { + ElMessage.warning('地球实例未初始化,无法获取数据'); + return; + } + // 要传递的对象数据 + const dataToSend = { + ...props.data, + punchRange: JSON.stringify(positions.value), + }; + if (props.data.id) { + updateAttendanceRange1(dataToSend) + } else { + addAttendanceRange1(dataToSend); + } + emit('send-data', dataToSend); +}; +// 新增打卡范围接口 +const addAttendanceRange1 = (data) => { + addAttendanceRange(data).then((res) => { + if (res.code === 200) { + ElMessage.success('新增打卡范围成功'); + handleClose(); + } else { + ElMessage.error(res.msg); + } + }).catch((err) => { + console.error('新增打卡范围失败:', err); + ElMessage.error('新增打卡范围失败'); + }); +}; +// 修改打卡范围接口 +const updateAttendanceRange1 = (data) => { + updateAttendanceRange(data).then((res) => { + if (res.code === 200) { + ElMessage.success('修改打卡范围成功'); + handleClose(); + } else { + ElMessage.error(res.msg); + } + }).catch((err) => { + console.error('修改打卡范围失败:', err); + ElMessage.error('修改打卡范围失败'); + }); +}; +// 绘制范围 +const drawRange = () => { + if (!earthInstance || !earthInstance.viewer) { + ElMessage.warning('地球实例未初始化,无法绘制'); + return; + } + let draw = new YJ.Draw.DrawPolygon(window.Earth2); + draw.start((err, params) => { + if (err) { + console.error('绘制失败:', err); + ElMessage.error('绘制失败'); + return; + } + console.log('绘制成功:', params); + positions.value = params; + renderRange(params); + }); +} +// 渲染范围 +const renderRange = (params) => { + let option = { + id: 'Checkinrange', + info: { + type: "richText", + text: "", + hrefs: "", + }, + positions: params, + color: props.data.punchColor || "rgba(255,0,0,0.5)", + line: { + width: 3, + color: "rgba(255,0,0,1)", + }, + type: 0, + show: true, + } + // PolygonObject + let entity = new YJ.Obj.PolygonObject( + window.Earth2, + option + ); + entity.flyTo(); + entityObject.value = entity +} + + +// 重新绘制 +const redraw = () => { + if (entityObject.value) { + entityObject.value.remove(); + } + drawRange(); +} + +// 组件挂载时设置容器ID +onMounted(() => { + if (!earthContainer.value) { + earthContainer.value = 'earthMap'; // 设置与初始化代码中相同的ID + } +}); + +// 暴露显示方法给父组件 +defineExpose({ + show +}); +</script> + +<style scoped> +.earth-container { + width: 100%; + height: 600px; + overflow: hidden; + position: relative; +} + +:deep(.el-dialog__body) { + padding: 10px; + height: calc(100% - 100px); + overflow: hidden; +} + +:deep(.el-dialog) { + display: flex; + flex-direction: column; + max-height: 90vh; +} + +:deep(.el-dialog__content) { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; +} +</style> diff --git a/vite.config.ts.timestamp-1756395377501-e6f009967ecc8.mjs b/vite.config.ts.timestamp-1756395377501-e6f009967ecc8.mjs deleted file mode 100644 index ec49d52..0000000 --- a/vite.config.ts.timestamp-1756395377501-e6f009967ecc8.mjs +++ /dev/null @@ -1,230 +0,0 @@ -// vite.config.ts -import { loadEnv, defineConfig } from "file:///E:/XNY/new-project/node_modules/vite/dist/node/index.js"; - -// vite/plugins/index.ts -import vue from "file:///E:/XNY/new-project/node_modules/@vitejs/plugin-vue/dist/index.mjs"; - -// vite/plugins/unocss.ts -import UnoCss from "file:///E:/XNY/new-project/node_modules/unocss/dist/vite.mjs"; -var unocss_default = () => { - return UnoCss({ - hmrTopLevelAwait: false - // unocss默认是true,低版本浏览器是不支持的,启动后会报错 - }); -}; - -// vite/plugins/auto-import.ts -import AutoImport from "file:///E:/XNY/new-project/node_modules/unplugin-auto-import/dist/vite.js"; -import { ElementPlusResolver } from "file:///E:/XNY/new-project/node_modules/unplugin-vue-components/dist/resolvers.js"; -import IconsResolver from "file:///E:/XNY/new-project/node_modules/unplugin-icons/dist/resolver.js"; -var __vite_injected_original_dirname = "E:\\XNY\\new-project\\vite\\plugins"; -var auto_import_default = (path3) => { - return AutoImport({ - // 自动导入 Vue 相关函数 - imports: ["vue", "vue-router", "@vueuse/core", "pinia"], - eslintrc: { - enabled: false, - filepath: "./.eslintrc-auto-import.json", - globalsPropValue: true - }, - resolvers: [ - // 自动导入 Element Plus 相关函数ElMessage, ElMessageBox... (带样式) - ElementPlusResolver(), - IconsResolver({ - prefix: "Icon" - }) - ], - vueTemplate: true, - // 是否在 vue 模板中自动导入 - dts: path3.resolve(path3.resolve(__vite_injected_original_dirname, "../../src"), "types", "auto-imports.d.ts") - }); -}; - -// vite/plugins/components.ts -import Components from "file:///E:/XNY/new-project/node_modules/unplugin-vue-components/dist/vite.js"; -import { ElementPlusResolver as ElementPlusResolver2 } from "file:///E:/XNY/new-project/node_modules/unplugin-vue-components/dist/resolvers.js"; -import IconsResolver2 from "file:///E:/XNY/new-project/node_modules/unplugin-icons/dist/resolver.js"; -var __vite_injected_original_dirname2 = "E:\\XNY\\new-project\\vite\\plugins"; -var components_default = (path3) => { - return Components({ - resolvers: [ - // 自动导入 Element Plus 组件 - ElementPlusResolver2(), - // 自动注册图标组件 - IconsResolver2({ - enabledCollections: ["ep"] - }) - ], - dts: path3.resolve(path3.resolve(__vite_injected_original_dirname2, "../../src"), "types", "components.d.ts") - }); -}; - -// vite/plugins/icons.ts -import Icons from "file:///E:/XNY/new-project/node_modules/unplugin-icons/dist/vite.js"; -var icons_default = () => { - return Icons({ - // 自动安装图标库 - autoInstall: true - }); -}; - -// vite/plugins/svg-icon.ts -import { createSvgIconsPlugin } from "file:///E:/XNY/new-project/node_modules/vite-plugin-svg-icons/dist/index.mjs"; -var __vite_injected_original_dirname3 = "E:\\XNY\\new-project\\vite\\plugins"; -var svg_icon_default = (path3, isBuild) => { - return createSvgIconsPlugin({ - // 指定需要缓存的图标文件夹 - iconDirs: [path3.resolve(path3.resolve(__vite_injected_original_dirname3, "../../src"), "assets/icons/svg")], - // 指定symbolId格式 - symbolId: "icon-[dir]-[name]", - svgoOptions: isBuild - }); -}; - -// vite/plugins/compression.ts -import compression from "file:///E:/XNY/new-project/node_modules/vite-plugin-compression/dist/index.mjs"; -var compression_default = (env) => { - const { VITE_BUILD_COMPRESS } = env; - const plugin = []; - if (VITE_BUILD_COMPRESS) { - const compressList = VITE_BUILD_COMPRESS.split(","); - if (compressList.includes("gzip")) { - plugin.push( - compression({ - ext: ".gz", - deleteOriginFile: false - }) - ); - } - if (compressList.includes("brotli")) { - plugin.push( - compression({ - ext: ".br", - algorithm: "brotliCompress", - deleteOriginFile: false - }) - ); - } - } - return plugin; -}; - -// vite/plugins/setup-extend.ts -import setupExtend from "file:///E:/XNY/new-project/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; -var setup_extend_default = () => { - return setupExtend({}); -}; - -// vite/plugins/index.ts -import path from "path"; -var plugins_default = (viteEnv, isBuild = false) => { - const vitePlugins = []; - vitePlugins.push(vue()); - vitePlugins.push(unocss_default()); - vitePlugins.push(auto_import_default(path)); - vitePlugins.push(components_default(path)); - vitePlugins.push(compression_default(viteEnv)); - vitePlugins.push(icons_default()); - vitePlugins.push(svg_icon_default(path, isBuild)); - vitePlugins.push(setup_extend_default()); - return vitePlugins; -}; - -// vite.config.ts -import path2 from "path"; -var __vite_injected_original_dirname4 = "E:\\XNY\\new-project"; -var vite_config_default = defineConfig(({ mode, command }) => { - const env = loadEnv(mode, process.cwd()); - return { - // 部署生产环境和开发环境下的URL。 - // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上 - // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 - base: env.VITE_APP_CONTEXT_PATH, - resolve: { - alias: { - "~": path2.resolve(__vite_injected_original_dirname4, "./"), - "@": path2.resolve(__vite_injected_original_dirname4, "./src") - }, - extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue", ".tif"] - }, - // https://cn.vitejs.dev/config/#resolve-extensions - plugins: plugins_default(env, command === "build"), - server: { - host: "0.0.0.0", - port: Number(env.VITE_APP_PORT), - open: true, - proxy: { - [env.VITE_APP_BASE_API]: { - target: "http://localhost:8899", - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/warm-flow-ui": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/warm-flow": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/workflow": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/auth": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - } - } - }, - css: { - preprocessorOptions: { - scss: { - javascriptEnabled: true - } - }, - postcss: { - plugins: [ - { - postcssPlugin: "internal:charset-removal", - AtRule: { - charset: (atRule) => { - if (atRule.name === "charset") { - atRule.remove(); - } - } - } - } - ] - } - }, - // 预编译 - optimizeDeps: { - include: [ - "vue", - "vue-router", - "pinia", - "axios", - "@vueuse/core", - "echarts", - "vue-i18n", - "@vueup/vue-quill", - "image-conversion", - "element-plus/es/components/**/css" - ] - } - }; -}); -export { - vite_config_default as default -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAidml0ZS9wbHVnaW5zL2luZGV4LnRzIiwgInZpdGUvcGx1Z2lucy91bm9jc3MudHMiLCAidml0ZS9wbHVnaW5zL2F1dG8taW1wb3J0LnRzIiwgInZpdGUvcGx1Z2lucy9jb21wb25lbnRzLnRzIiwgInZpdGUvcGx1Z2lucy9pY29ucy50cyIsICJ2aXRlL3BsdWdpbnMvc3ZnLWljb24udHMiLCAidml0ZS9wbHVnaW5zL2NvbXByZXNzaW9uLnRzIiwgInZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxYTllcXFxcbmV3LXByb2plY3RcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovWE5ZL25ldy1wcm9qZWN0L3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgVXNlckNvbmZpZywgQ29uZmlnRW52LCBsb2FkRW52LCBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcclxuXHJcbmltcG9ydCBjcmVhdGVQbHVnaW5zIGZyb20gJy4vdml0ZS9wbHVnaW5zJztcclxuXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSwgY29tbWFuZCB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcclxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHByb2Nlc3MuY3dkKCkpO1xyXG4gIHJldHVybiB7XHJcbiAgICAvLyBcdTkwRThcdTdGNzJcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdTU0OENcdTVGMDBcdTUzRDFcdTczQUZcdTU4ODNcdTRFMEJcdTc2ODRVUkxcdTMwMDJcclxuICAgIC8vIFx1OUVEOFx1OEJBNFx1NjBDNVx1NTFCNVx1NEUwQlx1RkYwQ3ZpdGUgXHU0RjFBXHU1MDQ3XHU4QkJFXHU0RjYwXHU3Njg0XHU1RTk0XHU3NTI4XHU2NjJGXHU4OEFCXHU5MEU4XHU3RjcyXHU1NzI4XHU0RTAwXHU0RTJBXHU1N0RGXHU1NDBEXHU3Njg0XHU2ODM5XHU4REVGXHU1Rjg0XHU0RTBBXHJcbiAgICAvLyBcdTRGOEJcdTU5ODIgaHR0cHM6Ly93d3cucnVveWkudmlwL1x1MzAwMlx1NTk4Mlx1Njc5Q1x1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOFx1NEUwMFx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1NEUwQVx1RkYwQ1x1NEY2MFx1NUMzMVx1OTcwMFx1ODk4MVx1NzUyOFx1OEZEOVx1NEUyQVx1OTAwOVx1OTg3OVx1NjMwN1x1NUI5QVx1OEZEOVx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1MzAwMlx1NEY4Qlx1NTk4Mlx1RkYwQ1x1NTk4Mlx1Njc5Q1x1NEY2MFx1NzY4NFx1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOCBodHRwczovL3d3dy5ydW95aS52aXAvYWRtaW4vXHVGRjBDXHU1MjE5XHU4QkJFXHU3RjZFIGJhc2VVcmwgXHU0RTNBIC9hZG1pbi9cdTMwMDJcclxuICAgIGJhc2U6IGVudi5WSVRFX0FQUF9DT05URVhUX1BBVEgsXHJcbiAgICByZXNvbHZlOiB7XHJcbiAgICAgIGFsaWFzOiB7XHJcbiAgICAgICAgJ34nOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi8nKSxcclxuICAgICAgICAnQCc6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4dGVuc2lvbnM6IFsnLm1qcycsICcuanMnLCAnLnRzJywgJy5qc3gnLCAnLnRzeCcsICcuanNvbicsICcudnVlJywgJy50aWYnXVxyXG4gICAgfSxcclxuICAgIC8vIGh0dHBzOi8vY24udml0ZWpzLmRldi9jb25maWcvI3Jlc29sdmUtZXh0ZW5zaW9uc1xyXG4gICAgcGx1Z2luczogY3JlYXRlUGx1Z2lucyhlbnYsIGNvbW1hbmQgPT09ICdidWlsZCcpLFxyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIGhvc3Q6ICcwLjAuMC4wJyxcclxuICAgICAgcG9ydDogTnVtYmVyKGVudi5WSVRFX0FQUF9QT1JUKSxcclxuICAgICAgb3BlbjogdHJ1ZSxcclxuICAgICAgcHJveHk6IHtcclxuICAgICAgICBbZW52LlZJVEVfQVBQX0JBU0VfQVBJXToge1xyXG4gICAgICAgICAgdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDo4ODk5JyxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93YXJtLWZsb3ctdWknOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQUF9CQVNFX0FQSSxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93YXJtLWZsb3cnOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQUF9CQVNFX0FQSSxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93b3JrZmxvdyc6IHtcclxuICAgICAgICAgIHRhcmdldDogZW52LlZJVEVfQVBQX0JBU0VfQVBJLFxyXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICAgICAgd3M6IHRydWUsXHJcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoJ14nICsgZW52LlZJVEVfQVBQX0JBU0VfQVBJKSwgJycpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgJy9hdXRoJzoge1xyXG4gICAgICAgICAgdGFyZ2V0OiBlbnYuVklURV9BUFBfQkFTRV9BUEksXHJcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgICAgICB3czogdHJ1ZSxcclxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cCgnXicgKyBlbnYuVklURV9BUFBfQkFTRV9BUEkpLCAnJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjc3M6IHtcclxuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgIHNjc3M6IHtcclxuICAgICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBwb3N0Y3NzOiB7XHJcbiAgICAgICAgcGx1Z2luczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBwb3N0Y3NzUGx1Z2luOiAnaW50ZXJuYWw6Y2hhcnNldC1yZW1vdmFsJyxcclxuICAgICAgICAgICAgQXRSdWxlOiB7XHJcbiAgICAgICAgICAgICAgY2hhcnNldDogKGF0UnVsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0UnVsZS5uYW1lID09PSAnY2hhcnNldCcpIHtcclxuICAgICAgICAgICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIFx1OTg4NFx1N0YxNlx1OEJEMVxyXG4gICAgb3B0aW1pemVEZXBzOiB7XHJcbiAgICAgIGluY2x1ZGU6IFtcclxuICAgICAgICAndnVlJyxcclxuICAgICAgICAndnVlLXJvdXRlcicsXHJcbiAgICAgICAgJ3BpbmlhJyxcclxuICAgICAgICAnYXhpb3MnLFxyXG4gICAgICAgICdAdnVldXNlL2NvcmUnLFxyXG4gICAgICAgICdlY2hhcnRzJyxcclxuICAgICAgICAndnVlLWkxOG4nLFxyXG4gICAgICAgICdAdnVldXAvdnVlLXF1aWxsJyxcclxuICAgICAgICAnaW1hZ2UtY29udmVyc2lvbicsXHJcbiAgICAgICAgJ2VsZW1lbnQtcGx1cy9lcy9jb21wb25lbnRzLyoqL2NzcydcclxuICAgICAgXVxyXG4gICAgfVxyXG4gIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcaW5kZXgudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L1hOWS9uZXctcHJvamVjdC92aXRlL3BsdWdpbnMvaW5kZXgudHNcIjtpbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSc7XHJcbmltcG9ydCBjcmVhdGVVbm9Dc3MgZnJvbSAnLi91bm9jc3MnO1xyXG5pbXBvcnQgY3JlYXRlQXV0b0ltcG9ydCBmcm9tICcuL2F1dG8taW1wb3J0JztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzJztcclxuaW1wb3J0IGNyZWF0ZUljb25zIGZyb20gJy4vaWNvbnMnO1xyXG5pbXBvcnQgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gZnJvbSAnLi9zdmctaWNvbic7XHJcbmltcG9ydCBjcmVhdGVDb21wcmVzc2lvbiBmcm9tICcuL2NvbXByZXNzaW9uJztcclxuaW1wb3J0IGNyZWF0ZVNldHVwRXh0ZW5kIGZyb20gJy4vc2V0dXAtZXh0ZW5kJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAodml0ZUVudjogYW55LCBpc0J1aWxkID0gZmFsc2UpOiBbXSA9PiB7XHJcbiAgY29uc3Qgdml0ZVBsdWdpbnM6IGFueSA9IFtdO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2godnVlKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlVW5vQ3NzKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlQXV0b0ltcG9ydChwYXRoKSk7XHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVDb21wb25lbnRzKHBhdGgpKTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUNvbXByZXNzaW9uKHZpdGVFbnYpKTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUljb25zKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU3ZnSWNvbnNQbHVnaW4ocGF0aCwgaXNCdWlsZCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU2V0dXBFeHRlbmQoKSk7XHJcbiAgcmV0dXJuIHZpdGVQbHVnaW5zO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcdW5vY3NzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi9YTlkvbmV3LXByb2plY3Qvdml0ZS9wbHVnaW5zL3Vub2Nzcy50c1wiO2ltcG9ydCBVbm9Dc3MgZnJvbSAndW5vY3NzL3ZpdGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIHJldHVybiBVbm9Dc3Moe1xyXG4gICAgaG1yVG9wTGV2ZWxBd2FpdDogZmFsc2UgLy8gdW5vY3NzXHU5RUQ4XHU4QkE0XHU2NjJGdHJ1ZVx1RkYwQ1x1NEY0RVx1NzI0OFx1NjcyQ1x1NkQ0Rlx1ODlDOFx1NTY2OFx1NjYyRlx1NEUwRFx1NjUyRlx1NjMwMVx1NzY4NFx1RkYwQ1x1NTQyRlx1NTJBOFx1NTQwRVx1NEYxQVx1NjJBNVx1OTUxOVxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcYXV0by1pbXBvcnQudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L1hOWS9uZXctcHJvamVjdC92aXRlL3BsdWdpbnMvYXV0by1pbXBvcnQudHNcIjtpbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcclxuaW1wb3J0IHsgRWxlbWVudFBsdXNSZXNvbHZlciB9IGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVycyc7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gJ3VucGx1Z2luLWljb25zL3Jlc29sdmVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IChwYXRoOiBhbnkpID0+IHtcclxuICByZXR1cm4gQXV0b0ltcG9ydCh7XHJcbiAgICAvLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjUgVnVlIFx1NzZGOFx1NTE3M1x1NTFGRFx1NjU3MFxyXG4gICAgaW1wb3J0czogWyd2dWUnLCAndnVlLXJvdXRlcicsICdAdnVldXNlL2NvcmUnLCAncGluaWEnXSxcclxuICAgIGVzbGludHJjOiB7XHJcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICBmaWxlcGF0aDogJy4vLmVzbGludHJjLWF1dG8taW1wb3J0Lmpzb24nLFxyXG4gICAgICBnbG9iYWxzUHJvcFZhbHVlOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSBFbGVtZW50IFBsdXMgXHU3NkY4XHU1MTczXHU1MUZEXHU2NTcwRWxNZXNzYWdlLCBFbE1lc3NhZ2VCb3guLi4gKFx1NUUyNlx1NjgzN1x1NUYwRilcclxuICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcigpLFxyXG4gICAgICBJY29uc1Jlc29sdmVyKHtcclxuICAgICAgICBwcmVmaXg6ICdJY29uJ1xyXG4gICAgICB9KVxyXG4gICAgXSxcclxuICAgIHZ1ZVRlbXBsYXRlOiB0cnVlLCAvLyBcdTY2MkZcdTU0MjZcdTU3MjggdnVlIFx1NkEyMVx1Njc3Rlx1NEUyRFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NVxyXG4gICAgZHRzOiBwYXRoLnJlc29sdmUocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3NyYycpLCAndHlwZXMnLCAnYXV0by1pbXBvcnRzLmQudHMnKVxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29tcG9uZW50cy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovWE5ZL25ldy1wcm9qZWN0L3ZpdGUvcGx1Z2lucy9jb21wb25lbnRzLnRzXCI7aW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnMnO1xyXG5pbXBvcnQgSWNvbnNSZXNvbHZlciBmcm9tICd1bnBsdWdpbi1pY29ucy9yZXNvbHZlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAocGF0aDogYW55KSA9PiB7XHJcbiAgcmV0dXJuIENvbXBvbmVudHMoe1xyXG4gICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSBFbGVtZW50IFBsdXMgXHU3RUM0XHU0RUY2XHJcbiAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoKSxcclxuICAgICAgLy8gXHU4MUVBXHU1MkE4XHU2Q0U4XHU1MThDXHU1NkZFXHU2ODA3XHU3RUM0XHU0RUY2XHJcbiAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogWydlcCddXHJcbiAgICAgIH0pXHJcbiAgICBdLFxyXG4gICAgZHRzOiBwYXRoLnJlc29sdmUocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3NyYycpLCAndHlwZXMnLCAnY29tcG9uZW50cy5kLnRzJylcclxuICB9KTtcclxufTtcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxYTllcXFxcbmV3LXByb2plY3RcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJFOlxcXFxYTllcXFxcbmV3LXByb2plY3RcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGljb25zLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi9YTlkvbmV3LXByb2plY3Qvdml0ZS9wbHVnaW5zL2ljb25zLnRzXCI7aW1wb3J0IEljb25zIGZyb20gJ3VucGx1Z2luLWljb25zL3ZpdGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIHJldHVybiBJY29ucyh7XHJcbiAgICAvLyBcdTgxRUFcdTUyQThcdTVCODlcdTg4QzVcdTU2RkVcdTY4MDdcdTVFOTNcclxuICAgIGF1dG9JbnN0YWxsOiB0cnVlXHJcbiAgfSk7XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcWE5ZXFxcXG5ldy1wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcWE5ZXFxcXG5ldy1wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1xcXFxzdmctaWNvbi50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovWE5ZL25ldy1wcm9qZWN0L3ZpdGUvcGx1Z2lucy9zdmctaWNvbi50c1wiO2ltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJztcclxuZXhwb3J0IGRlZmF1bHQgKHBhdGg6IGFueSwgaXNCdWlsZDogYm9vbGVhbikgPT4ge1xyXG4gIHJldHVybiBjcmVhdGVTdmdJY29uc1BsdWdpbih7XHJcbiAgICAvLyBcdTYzMDdcdTVCOUFcdTk3MDBcdTg5ODFcdTdGMTNcdTVCNThcdTc2ODRcdTU2RkVcdTY4MDdcdTY1ODdcdTRFRjZcdTU5MzlcclxuICAgIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi9zcmMnKSwgJ2Fzc2V0cy9pY29ucy9zdmcnKV0sXHJcbiAgICAvLyBcdTYzMDdcdTVCOUFzeW1ib2xJZFx1NjgzQ1x1NUYwRlxyXG4gICAgc3ltYm9sSWQ6ICdpY29uLVtkaXJdLVtuYW1lXScsXHJcbiAgICBzdmdvT3B0aW9uczogaXNCdWlsZFxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXFhOWVxcXFxuZXctcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29tcHJlc3Npb24udHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L1hOWS9uZXctcHJvamVjdC92aXRlL3BsdWdpbnMvY29tcHJlc3Npb24udHNcIjtpbXBvcnQgY29tcHJlc3Npb24gZnJvbSAndml0ZS1wbHVnaW4tY29tcHJlc3Npb24nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGVudjogYW55KSA9PiB7XHJcbiAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTIH0gPSBlbnY7XHJcbiAgY29uc3QgcGx1Z2luOiBhbnlbXSA9IFtdO1xyXG4gIGlmIChWSVRFX0JVSUxEX0NPTVBSRVNTKSB7XHJcbiAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KCcsJyk7XHJcbiAgICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdnemlwJykpIHtcclxuICAgICAgLy8gaHR0cDovL2RvYy5ydW95aS52aXAvcnVveWktdnVlL290aGVyL2ZhcS5odG1sI1x1NEY3Rlx1NzUyOGd6aXBcdTg5RTNcdTUzOEJcdTdGMjlcdTk3NTlcdTYwMDFcdTY1ODdcdTRFRjZcclxuICAgICAgcGx1Z2luLnB1c2goXHJcbiAgICAgICAgY29tcHJlc3Npb24oe1xyXG4gICAgICAgICAgZXh0OiAnLmd6JyxcclxuICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGU6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2Jyb3RsaScpKSB7XHJcbiAgICAgIHBsdWdpbi5wdXNoKFxyXG4gICAgICAgIGNvbXByZXNzaW9uKHtcclxuICAgICAgICAgIGV4dDogJy5icicsXHJcbiAgICAgICAgICBhbGdvcml0aG06ICdicm90bGlDb21wcmVzcycsXHJcbiAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlOiBmYWxzZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwbHVnaW47XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcWE5ZXFxcXG5ldy1wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcWE5ZXFxcXG5ldy1wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1xcXFxzZXR1cC1leHRlbmQudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L1hOWS9uZXctcHJvamVjdC92aXRlL3BsdWdpbnMvc2V0dXAtZXh0ZW5kLnRzXCI7aW1wb3J0IHNldHVwRXh0ZW5kIGZyb20gJ3VucGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQtcGx1cy92aXRlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICByZXR1cm4gc2V0dXBFeHRlbmQoe30pO1xyXG59O1xyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQThPLFNBQWdDLFNBQVMsb0JBQW9COzs7QUNBOUIsT0FBTyxTQUFTOzs7QUNBZCxPQUFPLFlBQVk7QUFFbFMsSUFBTyxpQkFBUSxNQUFNO0FBQ25CLFNBQU8sT0FBTztBQUFBLElBQ1osa0JBQWtCO0FBQUE7QUFBQSxFQUNwQixDQUFDO0FBQ0g7OztBQ055UixPQUFPLGdCQUFnQjtBQUNoVCxTQUFTLDJCQUEyQjtBQUNwQyxPQUFPLG1CQUFtQjtBQUYxQixJQUFNLG1DQUFtQztBQUl6QyxJQUFPLHNCQUFRLENBQUNBLFVBQWM7QUFDNUIsU0FBTyxXQUFXO0FBQUE7QUFBQSxJQUVoQixTQUFTLENBQUMsT0FBTyxjQUFjLGdCQUFnQixPQUFPO0FBQUEsSUFDdEQsVUFBVTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1Ysa0JBQWtCO0FBQUEsSUFDcEI7QUFBQSxJQUNBLFdBQVc7QUFBQTtBQUFBLE1BRVQsb0JBQW9CO0FBQUEsTUFDcEIsY0FBYztBQUFBLFFBQ1osUUFBUTtBQUFBLE1BQ1YsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUNBLGFBQWE7QUFBQTtBQUFBLElBQ2IsS0FBS0EsTUFBSyxRQUFRQSxNQUFLLFFBQVEsa0NBQVcsV0FBVyxHQUFHLFNBQVMsbUJBQW1CO0FBQUEsRUFDdEYsQ0FBQztBQUNIOzs7QUN2QnVSLE9BQU8sZ0JBQWdCO0FBQzlTLFNBQVMsdUJBQUFDLDRCQUEyQjtBQUNwQyxPQUFPQyxvQkFBbUI7QUFGMUIsSUFBTUMsb0NBQW1DO0FBSXpDLElBQU8scUJBQVEsQ0FBQ0MsVUFBYztBQUM1QixTQUFPLFdBQVc7QUFBQSxJQUNoQixXQUFXO0FBQUE7QUFBQSxNQUVUQyxxQkFBb0I7QUFBQTtBQUFBLE1BRXBCQyxlQUFjO0FBQUEsUUFDWixvQkFBb0IsQ0FBQyxJQUFJO0FB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QUFBQSxZQUNmLFFBQVE7QUFBQSxjQUNOLFNBQVMsQ0FBQyxXQUFXO0FBQ25CLG9CQUFJLE9BQU8sU0FBUyxXQUFXO0FBQzdCLHlCQUFPLE9BQU87QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBLElBRUEsY0FBYztBQUFBLE1BQ1osU0FBUztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJwYXRoIiwgIkVsZW1lbnRQbHVzUmVzb2x2ZXIiLCAiSWNvbnNSZXNvbHZlciIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJwYXRoIiwgIkVsZW1lbnRQbHVzUmVzb2x2ZXIiLCAiSWNvbnNSZXNvbHZlciIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJwYXRoIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgInBhdGgiLCAiX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUiLCAicGF0aCIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K diff --git a/vite.config.ts.timestamp-1756496937860-efea843310722.mjs b/vite.config.ts.timestamp-1756496937860-efea843310722.mjs deleted file mode 100644 index 4d6b455..0000000 --- a/vite.config.ts.timestamp-1756496937860-efea843310722.mjs +++ /dev/null @@ -1,230 +0,0 @@ -// vite.config.ts -import { loadEnv, defineConfig } from "file:///E:/ljj/plus-ui/node_modules/vite/dist/node/index.js"; - -// vite/plugins/index.ts -import vue from "file:///E:/ljj/plus-ui/node_modules/@vitejs/plugin-vue/dist/index.mjs"; - -// vite/plugins/unocss.ts -import UnoCss from "file:///E:/ljj/plus-ui/node_modules/unocss/dist/vite.mjs"; -var unocss_default = () => { - return UnoCss({ - hmrTopLevelAwait: false - // unocss默认是true,低版本浏览器是不支持的,启动后会报错 - }); -}; - -// vite/plugins/auto-import.ts -import AutoImport from "file:///E:/ljj/plus-ui/node_modules/unplugin-auto-import/dist/vite.js"; -import { ElementPlusResolver } from "file:///E:/ljj/plus-ui/node_modules/unplugin-vue-components/dist/resolvers.js"; -import IconsResolver from "file:///E:/ljj/plus-ui/node_modules/unplugin-icons/dist/resolver.js"; -var __vite_injected_original_dirname = "E:\\ljj\\plus-ui\\vite\\plugins"; -var auto_import_default = (path3) => { - return AutoImport({ - // 自动导入 Vue 相关函数 - imports: ["vue", "vue-router", "@vueuse/core", "pinia"], - eslintrc: { - enabled: false, - filepath: "./.eslintrc-auto-import.json", - globalsPropValue: true - }, - resolvers: [ - // 自动导入 Element Plus 相关函数ElMessage, ElMessageBox... (带样式) - ElementPlusResolver(), - IconsResolver({ - prefix: "Icon" - }) - ], - vueTemplate: true, - // 是否在 vue 模板中自动导入 - dts: path3.resolve(path3.resolve(__vite_injected_original_dirname, "../../src"), "types", "auto-imports.d.ts") - }); -}; - -// vite/plugins/components.ts -import Components from "file:///E:/ljj/plus-ui/node_modules/unplugin-vue-components/dist/vite.js"; -import { ElementPlusResolver as ElementPlusResolver2 } from "file:///E:/ljj/plus-ui/node_modules/unplugin-vue-components/dist/resolvers.js"; -import IconsResolver2 from "file:///E:/ljj/plus-ui/node_modules/unplugin-icons/dist/resolver.js"; -var __vite_injected_original_dirname2 = "E:\\ljj\\plus-ui\\vite\\plugins"; -var components_default = (path3) => { - return Components({ - resolvers: [ - // 自动导入 Element Plus 组件 - ElementPlusResolver2(), - // 自动注册图标组件 - IconsResolver2({ - enabledCollections: ["ep"] - }) - ], - dts: path3.resolve(path3.resolve(__vite_injected_original_dirname2, "../../src"), "types", "components.d.ts") - }); -}; - -// vite/plugins/icons.ts -import Icons from "file:///E:/ljj/plus-ui/node_modules/unplugin-icons/dist/vite.js"; -var icons_default = () => { - return Icons({ - // 自动安装图标库 - autoInstall: true - }); -}; - -// vite/plugins/svg-icon.ts -import { createSvgIconsPlugin } from "file:///E:/ljj/plus-ui/node_modules/vite-plugin-svg-icons/dist/index.mjs"; -var __vite_injected_original_dirname3 = "E:\\ljj\\plus-ui\\vite\\plugins"; -var svg_icon_default = (path3, isBuild) => { - return createSvgIconsPlugin({ - // 指定需要缓存的图标文件夹 - iconDirs: [path3.resolve(path3.resolve(__vite_injected_original_dirname3, "../../src"), "assets/icons/svg")], - // 指定symbolId格式 - symbolId: "icon-[dir]-[name]", - svgoOptions: isBuild - }); -}; - -// vite/plugins/compression.ts -import compression from "file:///E:/ljj/plus-ui/node_modules/vite-plugin-compression/dist/index.mjs"; -var compression_default = (env) => { - const { VITE_BUILD_COMPRESS } = env; - const plugin = []; - if (VITE_BUILD_COMPRESS) { - const compressList = VITE_BUILD_COMPRESS.split(","); - if (compressList.includes("gzip")) { - plugin.push( - compression({ - ext: ".gz", - deleteOriginFile: false - }) - ); - } - if (compressList.includes("brotli")) { - plugin.push( - compression({ - ext: ".br", - algorithm: "brotliCompress", - deleteOriginFile: false - }) - ); - } - } - return plugin; -}; - -// vite/plugins/setup-extend.ts -import setupExtend from "file:///E:/ljj/plus-ui/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; -var setup_extend_default = () => { - return setupExtend({}); -}; - -// vite/plugins/index.ts -import path from "path"; -var plugins_default = (viteEnv, isBuild = false) => { - const vitePlugins = []; - vitePlugins.push(vue()); - vitePlugins.push(unocss_default()); - vitePlugins.push(auto_import_default(path)); - vitePlugins.push(components_default(path)); - vitePlugins.push(compression_default(viteEnv)); - vitePlugins.push(icons_default()); - vitePlugins.push(svg_icon_default(path, isBuild)); - vitePlugins.push(setup_extend_default()); - return vitePlugins; -}; - -// vite.config.ts -import path2 from "path"; -var __vite_injected_original_dirname4 = "E:\\ljj\\plus-ui"; -var vite_config_default = defineConfig(({ mode, command }) => { - const env = loadEnv(mode, process.cwd()); - return { - // 部署生产环境和开发环境下的URL。 - // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上 - // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 - base: env.VITE_APP_CONTEXT_PATH, - resolve: { - alias: { - "~": path2.resolve(__vite_injected_original_dirname4, "./"), - "@": path2.resolve(__vite_injected_original_dirname4, "./src") - }, - extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue", ".tif"] - }, - // https://cn.vitejs.dev/config/#resolve-extensions - plugins: plugins_default(env, command === "build"), - server: { - host: "0.0.0.0", - port: Number(env.VITE_APP_PORT), - open: true, - proxy: { - [env.VITE_APP_BASE_API]: { - target: "http://localhost:8899", - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/warm-flow-ui": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/warm-flow": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/workflow": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/auth": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - } - } - }, - css: { - preprocessorOptions: { - scss: { - javascriptEnabled: true - } - }, - postcss: { - plugins: [ - { - postcssPlugin: "internal:charset-removal", - AtRule: { - charset: (atRule) => { - if (atRule.name === "charset") { - atRule.remove(); - } - } - } - } - ] - } - }, - // 预编译 - optimizeDeps: { - include: [ - "vue", - "vue-router", - "pinia", - "axios", - "@vueuse/core", - "echarts", - "vue-i18n", - "@vueup/vue-quill", - "image-conversion", - "element-plus/es/components/**/css" - ] - } - }; -}); -export { - vite_config_default as default -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAidml0ZS9wbHVnaW5zL2luZGV4LnRzIiwgInZpdGUvcGx1Z2lucy91bm9jc3MudHMiLCAidml0ZS9wbHVnaW5zL2F1dG8taW1wb3J0LnRzIiwgInZpdGUvcGx1Z2lucy9jb21wb25lbnRzLnRzIiwgInZpdGUvcGx1Z2lucy9pY29ucy50cyIsICJ2aXRlL3BsdWdpbnMvc3ZnLWljb24udHMiLCAidml0ZS9wbHVnaW5zL2NvbXByZXNzaW9uLnRzIiwgInZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxsampcXFxccGx1cy11aVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L2xqai9wbHVzLXVpL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgVXNlckNvbmZpZywgQ29uZmlnRW52LCBsb2FkRW52LCBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcclxuXHJcbmltcG9ydCBjcmVhdGVQbHVnaW5zIGZyb20gJy4vdml0ZS9wbHVnaW5zJztcclxuXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSwgY29tbWFuZCB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcclxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHByb2Nlc3MuY3dkKCkpO1xyXG4gIHJldHVybiB7XHJcbiAgICAvLyBcdTkwRThcdTdGNzJcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdTU0OENcdTVGMDBcdTUzRDFcdTczQUZcdTU4ODNcdTRFMEJcdTc2ODRVUkxcdTMwMDJcclxuICAgIC8vIFx1OUVEOFx1OEJBNFx1NjBDNVx1NTFCNVx1NEUwQlx1RkYwQ3ZpdGUgXHU0RjFBXHU1MDQ3XHU4QkJFXHU0RjYwXHU3Njg0XHU1RTk0XHU3NTI4XHU2NjJGXHU4OEFCXHU5MEU4XHU3RjcyXHU1NzI4XHU0RTAwXHU0RTJBXHU1N0RGXHU1NDBEXHU3Njg0XHU2ODM5XHU4REVGXHU1Rjg0XHU0RTBBXHJcbiAgICAvLyBcdTRGOEJcdTU5ODIgaHR0cHM6Ly93d3cucnVveWkudmlwL1x1MzAwMlx1NTk4Mlx1Njc5Q1x1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOFx1NEUwMFx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1NEUwQVx1RkYwQ1x1NEY2MFx1NUMzMVx1OTcwMFx1ODk4MVx1NzUyOFx1OEZEOVx1NEUyQVx1OTAwOVx1OTg3OVx1NjMwN1x1NUI5QVx1OEZEOVx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1MzAwMlx1NEY4Qlx1NTk4Mlx1RkYwQ1x1NTk4Mlx1Njc5Q1x1NEY2MFx1NzY4NFx1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOCBodHRwczovL3d3dy5ydW95aS52aXAvYWRtaW4vXHVGRjBDXHU1MjE5XHU4QkJFXHU3RjZFIGJhc2VVcmwgXHU0RTNBIC9hZG1pbi9cdTMwMDJcclxuICAgIGJhc2U6IGVudi5WSVRFX0FQUF9DT05URVhUX1BBVEgsXHJcbiAgICByZXNvbHZlOiB7XHJcbiAgICAgIGFsaWFzOiB7XHJcbiAgICAgICAgJ34nOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi8nKSxcclxuICAgICAgICAnQCc6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4dGVuc2lvbnM6IFsnLm1qcycsICcuanMnLCAnLnRzJywgJy5qc3gnLCAnLnRzeCcsICcuanNvbicsICcudnVlJywgJy50aWYnXVxyXG4gICAgfSxcclxuICAgIC8vIGh0dHBzOi8vY24udml0ZWpzLmRldi9jb25maWcvI3Jlc29sdmUtZXh0ZW5zaW9uc1xyXG4gICAgcGx1Z2luczogY3JlYXRlUGx1Z2lucyhlbnYsIGNvbW1hbmQgPT09ICdidWlsZCcpLFxyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIGhvc3Q6ICcwLjAuMC4wJyxcclxuICAgICAgcG9ydDogTnVtYmVyKGVudi5WSVRFX0FQUF9QT1JUKSxcclxuICAgICAgb3BlbjogdHJ1ZSxcclxuICAgICAgcHJveHk6IHtcclxuICAgICAgICBbZW52LlZJVEVfQVBQX0JBU0VfQVBJXToge1xyXG4gICAgICAgICAgdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDo4ODk5JyxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93YXJtLWZsb3ctdWknOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQUF9CQVNFX0FQSSxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93YXJtLWZsb3cnOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQUF9CQVNFX0FQSSxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93b3JrZmxvdyc6IHtcclxuICAgICAgICAgIHRhcmdldDogZW52LlZJVEVfQVBQX0JBU0VfQVBJLFxyXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICAgICAgd3M6IHRydWUsXHJcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoJ14nICsgZW52LlZJVEVfQVBQX0JBU0VfQVBJKSwgJycpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgJy9hdXRoJzoge1xyXG4gICAgICAgICAgdGFyZ2V0OiBlbnYuVklURV9BUFBfQkFTRV9BUEksXHJcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgICAgICB3czogdHJ1ZSxcclxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cCgnXicgKyBlbnYuVklURV9BUFBfQkFTRV9BUEkpLCAnJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjc3M6IHtcclxuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgIHNjc3M6IHtcclxuICAgICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBwb3N0Y3NzOiB7XHJcbiAgICAgICAgcGx1Z2luczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBwb3N0Y3NzUGx1Z2luOiAnaW50ZXJuYWw6Y2hhcnNldC1yZW1vdmFsJyxcclxuICAgICAgICAgICAgQXRSdWxlOiB7XHJcbiAgICAgICAgICAgICAgY2hhcnNldDogKGF0UnVsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0UnVsZS5uYW1lID09PSAnY2hhcnNldCcpIHtcclxuICAgICAgICAgICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIFx1OTg4NFx1N0YxNlx1OEJEMVxyXG4gICAgb3B0aW1pemVEZXBzOiB7XHJcbiAgICAgIGluY2x1ZGU6IFtcclxuICAgICAgICAndnVlJyxcclxuICAgICAgICAndnVlLXJvdXRlcicsXHJcbiAgICAgICAgJ3BpbmlhJyxcclxuICAgICAgICAnYXhpb3MnLFxyXG4gICAgICAgICdAdnVldXNlL2NvcmUnLFxyXG4gICAgICAgICdlY2hhcnRzJyxcclxuICAgICAgICAndnVlLWkxOG4nLFxyXG4gICAgICAgICdAdnVldXAvdnVlLXF1aWxsJyxcclxuICAgICAgICAnaW1hZ2UtY29udmVyc2lvbicsXHJcbiAgICAgICAgJ2VsZW1lbnQtcGx1cy9lcy9jb21wb25lbnRzLyoqL2NzcydcclxuICAgICAgXVxyXG4gICAgfVxyXG4gIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXGxqalxcXFxwbHVzLXVpXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGluZGV4LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi9samovcGx1cy11aS92aXRlL3BsdWdpbnMvaW5kZXgudHNcIjtpbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSc7XHJcbmltcG9ydCBjcmVhdGVVbm9Dc3MgZnJvbSAnLi91bm9jc3MnO1xyXG5pbXBvcnQgY3JlYXRlQXV0b0ltcG9ydCBmcm9tICcuL2F1dG8taW1wb3J0JztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzJztcclxuaW1wb3J0IGNyZWF0ZUljb25zIGZyb20gJy4vaWNvbnMnO1xyXG5pbXBvcnQgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gZnJvbSAnLi9zdmctaWNvbic7XHJcbmltcG9ydCBjcmVhdGVDb21wcmVzc2lvbiBmcm9tICcuL2NvbXByZXNzaW9uJztcclxuaW1wb3J0IGNyZWF0ZVNldHVwRXh0ZW5kIGZyb20gJy4vc2V0dXAtZXh0ZW5kJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAodml0ZUVudjogYW55LCBpc0J1aWxkID0gZmFsc2UpOiBbXSA9PiB7XHJcbiAgY29uc3Qgdml0ZVBsdWdpbnM6IGFueSA9IFtdO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2godnVlKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlVW5vQ3NzKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlQXV0b0ltcG9ydChwYXRoKSk7XHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVDb21wb25lbnRzKHBhdGgpKTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUNvbXByZXNzaW9uKHZpdGVFbnYpKTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUljb25zKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU3ZnSWNvbnNQbHVnaW4ocGF0aCwgaXNCdWlsZCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU2V0dXBFeHRlbmQoKSk7XHJcbiAgcmV0dXJuIHZpdGVQbHVnaW5zO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXGxqalxcXFxwbHVzLXVpXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXHVub2Nzcy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovbGpqL3BsdXMtdWkvdml0ZS9wbHVnaW5zL3Vub2Nzcy50c1wiO2ltcG9ydCBVbm9Dc3MgZnJvbSAndW5vY3NzL3ZpdGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIHJldHVybiBVbm9Dc3Moe1xyXG4gICAgaG1yVG9wTGV2ZWxBd2FpdDogZmFsc2UgLy8gdW5vY3NzXHU5RUQ4XHU4QkE0XHU2NjJGdHJ1ZVx1RkYwQ1x1NEY0RVx1NzI0OFx1NjcyQ1x1NkQ0Rlx1ODlDOFx1NTY2OFx1NjYyRlx1NEUwRFx1NjUyRlx1NjMwMVx1NzY4NFx1RkYwQ1x1NTQyRlx1NTJBOFx1NTQwRVx1NEYxQVx1NjJBNVx1OTUxOVxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXGxqalxcXFxwbHVzLXVpXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGF1dG8taW1wb3J0LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi9samovcGx1cy11aS92aXRlL3BsdWdpbnMvYXV0by1pbXBvcnQudHNcIjtpbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcclxuaW1wb3J0IHsgRWxlbWVudFBsdXNSZXNvbHZlciB9IGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVycyc7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gJ3VucGx1Z2luLWljb25zL3Jlc29sdmVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IChwYXRoOiBhbnkpID0+IHtcclxuICByZXR1cm4gQXV0b0ltcG9ydCh7XHJcbiAgICAvLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjUgVnVlIFx1NzZGOFx1NTE3M1x1NTFGRFx1NjU3MFxyXG4gICAgaW1wb3J0czogWyd2dWUnLCAndnVlLXJvdXRlcicsICdAdnVldXNlL2NvcmUnLCAncGluaWEnXSxcclxuICAgIGVzbGludHJjOiB7XHJcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICBmaWxlcGF0aDogJy4vLmVzbGludHJjLWF1dG8taW1wb3J0Lmpzb24nLFxyXG4gICAgICBnbG9iYWxzUHJvcFZhbHVlOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSBFbGVtZW50IFBsdXMgXHU3NkY4XHU1MTczXHU1MUZEXHU2NTcwRWxNZXNzYWdlLCBFbE1lc3NhZ2VCb3guLi4gKFx1NUUyNlx1NjgzN1x1NUYwRilcclxuICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcigpLFxyXG4gICAgICBJY29uc1Jlc29sdmVyKHtcclxuICAgICAgICBwcmVmaXg6ICdJY29uJ1xyXG4gICAgICB9KVxyXG4gICAgXSxcclxuICAgIHZ1ZVRlbXBsYXRlOiB0cnVlLCAvLyBcdTY2MkZcdTU0MjZcdTU3MjggdnVlIFx1NkEyMVx1Njc3Rlx1NEUyRFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NVxyXG4gICAgZHRzOiBwYXRoLnJlc29sdmUocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3NyYycpLCAndHlwZXMnLCAnYXV0by1pbXBvcnRzLmQudHMnKVxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXGxqalxcXFxwbHVzLXVpXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGNvbXBvbmVudHMudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L2xqai9wbHVzLXVpL3ZpdGUvcGx1Z2lucy9jb21wb25lbnRzLnRzXCI7aW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnMnO1xyXG5pbXBvcnQgSWNvbnNSZXNvbHZlciBmcm9tICd1bnBsdWdpbi1pY29ucy9yZXNvbHZlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAocGF0aDogYW55KSA9PiB7XHJcbiAgcmV0dXJuIENvbXBvbmVudHMoe1xyXG4gICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSBFbGVtZW50IFBsdXMgXHU3RUM0XHU0RUY2XHJcbiAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoKSxcclxuICAgICAgLy8gXHU4MUVBXHU1MkE4XHU2Q0U4XHU1MThDXHU1NkZFXHU2ODA3XHU3RUM0XHU0RUY2XHJcbiAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogWydlcCddXHJcbiAgICAgIH0pXHJcbiAgICBdLFxyXG4gICAgZHRzOiBwYXRoLnJlc29sdmUocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3NyYycpLCAndHlwZXMnLCAnY29tcG9uZW50cy5kLnRzJylcclxuICB9KTtcclxufTtcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxsampcXFxccGx1cy11aVxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXGxqalxcXFxwbHVzLXVpXFxcXHZpdGVcXFxccGx1Z2luc1xcXFxpY29ucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovbGpqL3BsdXMtdWkvdml0ZS9wbHVnaW5zL2ljb25zLnRzXCI7aW1wb3J0IEljb25zIGZyb20gJ3VucGx1Z2luLWljb25zL3ZpdGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIHJldHVybiBJY29ucyh7XHJcbiAgICAvLyBcdTgxRUFcdTUyQThcdTVCODlcdTg4QzVcdTU2RkVcdTY4MDdcdTVFOTNcclxuICAgIGF1dG9JbnN0YWxsOiB0cnVlXHJcbiAgfSk7XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJFOlxcXFxsampcXFxccGx1cy11aVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcc3ZnLWljb24udHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L2xqai9wbHVzLXVpL3ZpdGUvcGx1Z2lucy9zdmctaWNvbi50c1wiO2ltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJztcclxuZXhwb3J0IGRlZmF1bHQgKHBhdGg6IGFueSwgaXNCdWlsZDogYm9vbGVhbikgPT4ge1xyXG4gIHJldHVybiBjcmVhdGVTdmdJY29uc1BsdWdpbih7XHJcbiAgICAvLyBcdTYzMDdcdTVCOUFcdTk3MDBcdTg5ODFcdTdGMTNcdTVCNThcdTc2ODRcdTU2RkVcdTY4MDdcdTY1ODdcdTRFRjZcdTU5MzlcclxuICAgIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi9zcmMnKSwgJ2Fzc2V0cy9pY29ucy9zdmcnKV0sXHJcbiAgICAvLyBcdTYzMDdcdTVCOUFzeW1ib2xJZFx1NjgzQ1x1NUYwRlxyXG4gICAgc3ltYm9sSWQ6ICdpY29uLVtkaXJdLVtuYW1lXScsXHJcbiAgICBzdmdvT3B0aW9uczogaXNCdWlsZFxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXGxqalxcXFxwbHVzLXVpXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGNvbXByZXNzaW9uLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi9samovcGx1cy11aS92aXRlL3BsdWdpbnMvY29tcHJlc3Npb24udHNcIjtpbXBvcnQgY29tcHJlc3Npb24gZnJvbSAndml0ZS1wbHVnaW4tY29tcHJlc3Npb24nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGVudjogYW55KSA9PiB7XHJcbiAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTIH0gPSBlbnY7XHJcbiAgY29uc3QgcGx1Z2luOiBhbnlbXSA9IFtdO1xyXG4gIGlmIChWSVRFX0JVSUxEX0NPTVBSRVNTKSB7XHJcbiAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KCcsJyk7XHJcbiAgICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdnemlwJykpIHtcclxuICAgICAgLy8gaHR0cDovL2RvYy5ydW95aS52aXAvcnVveWktdnVlL290aGVyL2ZhcS5odG1sI1x1NEY3Rlx1NzUyOGd6aXBcdTg5RTNcdTUzOEJcdTdGMjlcdTk3NTlcdTYwMDFcdTY1ODdcdTRFRjZcclxuICAgICAgcGx1Z2luLnB1c2goXHJcbiAgICAgICAgY29tcHJlc3Npb24oe1xyXG4gICAgICAgICAgZXh0OiAnLmd6JyxcclxuICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGU6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2Jyb3RsaScpKSB7XHJcbiAgICAgIHBsdWdpbi5wdXNoKFxyXG4gICAgICAgIGNvbXByZXNzaW9uKHtcclxuICAgICAgICAgIGV4dDogJy5icicsXHJcbiAgICAgICAgICBhbGdvcml0aG06ICdicm90bGlDb21wcmVzcycsXHJcbiAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlOiBmYWxzZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwbHVnaW47XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcbGpqXFxcXHBsdXMtdWlcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJFOlxcXFxsampcXFxccGx1cy11aVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcc2V0dXAtZXh0ZW5kLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi9samovcGx1cy11aS92aXRlL3BsdWdpbnMvc2V0dXAtZXh0ZW5kLnRzXCI7aW1wb3J0IHNldHVwRXh0ZW5kIGZyb20gJ3VucGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQtcGx1cy92aXRlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICByZXR1cm4gc2V0dXBFeHRlbmQoe30pO1xyXG59O1xyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQWtP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QUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBLElBRUEsY0FBYztBQUFBLE1BQ1osU0FBUztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJwYXRoIiwgIkVsZW1lbnRQbHVzUmVzb2x2ZXIiLCAiSWNvbnNSZXNvbHZlciIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJwYXRoIiwgIkVsZW1lbnRQbHVzUmVzb2x2ZXIiLCAiSWNvbnNSZXNvbHZlciIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJwYXRoIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgInBhdGgiLCAiX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUiLCAicGF0aCIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K diff --git a/vite.config.ts.timestamp-1756887630311-9edbd99a3287f.mjs b/vite.config.ts.timestamp-1756887630311-9edbd99a3287f.mjs deleted file mode 100644 index d84c7c1..0000000 --- a/vite.config.ts.timestamp-1756887630311-9edbd99a3287f.mjs +++ /dev/null @@ -1,230 +0,0 @@ -// vite.config.ts -import { loadEnv, defineConfig } from "file:///D:/YJproject/new_project/node_modules/vite/dist/node/index.js"; - -// vite/plugins/index.ts -import vue from "file:///D:/YJproject/new_project/node_modules/@vitejs/plugin-vue/dist/index.mjs"; - -// vite/plugins/unocss.ts -import UnoCss from "file:///D:/YJproject/new_project/node_modules/unocss/dist/vite.mjs"; -var unocss_default = () => { - return UnoCss({ - hmrTopLevelAwait: false - // unocss默认是true,低版本浏览器是不支持的,启动后会报错 - }); -}; - -// vite/plugins/auto-import.ts -import AutoImport from "file:///D:/YJproject/new_project/node_modules/unplugin-auto-import/dist/vite.js"; -import { ElementPlusResolver } from "file:///D:/YJproject/new_project/node_modules/unplugin-vue-components/dist/resolvers.js"; -import IconsResolver from "file:///D:/YJproject/new_project/node_modules/unplugin-icons/dist/resolver.js"; -var __vite_injected_original_dirname = "D:\\YJproject\\new_project\\vite\\plugins"; -var auto_import_default = (path3) => { - return AutoImport({ - // 自动导入 Vue 相关函数 - imports: ["vue", "vue-router", "@vueuse/core", "pinia"], - eslintrc: { - enabled: false, - filepath: "./.eslintrc-auto-import.json", - globalsPropValue: true - }, - resolvers: [ - // 自动导入 Element Plus 相关函数ElMessage, ElMessageBox... (带样式) - ElementPlusResolver(), - IconsResolver({ - prefix: "Icon" - }) - ], - vueTemplate: true, - // 是否在 vue 模板中自动导入 - dts: path3.resolve(path3.resolve(__vite_injected_original_dirname, "../../src"), "types", "auto-imports.d.ts") - }); -}; - -// vite/plugins/components.ts -import Components from "file:///D:/YJproject/new_project/node_modules/unplugin-vue-components/dist/vite.js"; -import { ElementPlusResolver as ElementPlusResolver2 } from "file:///D:/YJproject/new_project/node_modules/unplugin-vue-components/dist/resolvers.js"; -import IconsResolver2 from "file:///D:/YJproject/new_project/node_modules/unplugin-icons/dist/resolver.js"; -var __vite_injected_original_dirname2 = "D:\\YJproject\\new_project\\vite\\plugins"; -var components_default = (path3) => { - return Components({ - resolvers: [ - // 自动导入 Element Plus 组件 - ElementPlusResolver2(), - // 自动注册图标组件 - IconsResolver2({ - enabledCollections: ["ep"] - }) - ], - dts: path3.resolve(path3.resolve(__vite_injected_original_dirname2, "../../src"), "types", "components.d.ts") - }); -}; - -// vite/plugins/icons.ts -import Icons from "file:///D:/YJproject/new_project/node_modules/unplugin-icons/dist/vite.js"; -var icons_default = () => { - return Icons({ - // 自动安装图标库 - autoInstall: true - }); -}; - -// vite/plugins/svg-icon.ts -import { createSvgIconsPlugin } from "file:///D:/YJproject/new_project/node_modules/vite-plugin-svg-icons/dist/index.mjs"; -var __vite_injected_original_dirname3 = "D:\\YJproject\\new_project\\vite\\plugins"; -var svg_icon_default = (path3, isBuild) => { - return createSvgIconsPlugin({ - // 指定需要缓存的图标文件夹 - iconDirs: [path3.resolve(path3.resolve(__vite_injected_original_dirname3, "../../src"), "assets/icons/svg")], - // 指定symbolId格式 - symbolId: "icon-[dir]-[name]", - svgoOptions: isBuild - }); -}; - -// vite/plugins/compression.ts -import compression from "file:///D:/YJproject/new_project/node_modules/vite-plugin-compression/dist/index.mjs"; -var compression_default = (env) => { - const { VITE_BUILD_COMPRESS } = env; - const plugin = []; - if (VITE_BUILD_COMPRESS) { - const compressList = VITE_BUILD_COMPRESS.split(","); - if (compressList.includes("gzip")) { - plugin.push( - compression({ - ext: ".gz", - deleteOriginFile: false - }) - ); - } - if (compressList.includes("brotli")) { - plugin.push( - compression({ - ext: ".br", - algorithm: "brotliCompress", - deleteOriginFile: false - }) - ); - } - } - return plugin; -}; - -// vite/plugins/setup-extend.ts -import setupExtend from "file:///D:/YJproject/new_project/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; -var setup_extend_default = () => { - return setupExtend({}); -}; - -// vite/plugins/index.ts -import path from "path"; -var plugins_default = (viteEnv, isBuild = false) => { - const vitePlugins = []; - vitePlugins.push(vue()); - vitePlugins.push(unocss_default()); - vitePlugins.push(auto_import_default(path)); - vitePlugins.push(components_default(path)); - vitePlugins.push(compression_default(viteEnv)); - vitePlugins.push(icons_default()); - vitePlugins.push(svg_icon_default(path, isBuild)); - vitePlugins.push(setup_extend_default()); - return vitePlugins; -}; - -// vite.config.ts -import path2 from "path"; -var __vite_injected_original_dirname4 = "D:\\YJproject\\new_project"; -var vite_config_default = defineConfig(({ mode, command }) => { - const env = loadEnv(mode, process.cwd()); - return { - // 部署生产环境和开发环境下的URL。 - // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上 - // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 - base: env.VITE_APP_CONTEXT_PATH, - resolve: { - alias: { - "~": path2.resolve(__vite_injected_original_dirname4, "./"), - "@": path2.resolve(__vite_injected_original_dirname4, "./src") - }, - extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue", ".tif"] - }, - // https://cn.vitejs.dev/config/#resolve-extensions - plugins: plugins_default(env, command === "build"), - server: { - host: "0.0.0.0", - port: Number(env.VITE_APP_PORT), - open: true, - proxy: { - [env.VITE_APP_BASE_API]: { - target: "http://localhost:8899", - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/warm-flow-ui": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/warm-flow": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/workflow": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - }, - "/auth": { - target: env.VITE_APP_BASE_API, - changeOrigin: true, - ws: true, - rewrite: (path3) => path3.replace(new RegExp("^" + env.VITE_APP_BASE_API), "") - } - } - }, - css: { - preprocessorOptions: { - scss: { - javascriptEnabled: true - } - }, - postcss: { - plugins: [ - { - postcssPlugin: "internal:charset-removal", - AtRule: { - charset: (atRule) => { - if (atRule.name === "charset") { - atRule.remove(); - } - } - } - } - ] - } - }, - // 预编译 - optimizeDeps: { - include: [ - "vue", - "vue-router", - "pinia", - "axios", - "@vueuse/core", - "echarts", - "vue-i18n", - "@vueup/vue-quill", - "image-conversion", - "element-plus/es/components/**/css" - ] - } - }; -}); -export { - vite_config_default as default -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAidml0ZS9wbHVnaW5zL2luZGV4LnRzIiwgInZpdGUvcGx1Z2lucy91bm9jc3MudHMiLCAidml0ZS9wbHVnaW5zL2F1dG8taW1wb3J0LnRzIiwgInZpdGUvcGx1Z2lucy9jb21wb25lbnRzLnRzIiwgInZpdGUvcGx1Z2lucy9pY29ucy50cyIsICJ2aXRlL3BsdWdpbnMvc3ZnLWljb24udHMiLCAidml0ZS9wbHVnaW5zL2NvbXByZXNzaW9uLnRzIiwgInZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxZSnByb2plY3RcXFxcbmV3X3Byb2plY3RcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovWUpwcm9qZWN0L25ld19wcm9qZWN0L3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgVXNlckNvbmZpZywgQ29uZmlnRW52LCBsb2FkRW52LCBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcclxuXHJcbmltcG9ydCBjcmVhdGVQbHVnaW5zIGZyb20gJy4vdml0ZS9wbHVnaW5zJztcclxuXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSwgY29tbWFuZCB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcclxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHByb2Nlc3MuY3dkKCkpO1xyXG4gIHJldHVybiB7XHJcbiAgICAvLyBcdTkwRThcdTdGNzJcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdTU0OENcdTVGMDBcdTUzRDFcdTczQUZcdTU4ODNcdTRFMEJcdTc2ODRVUkxcdTMwMDJcclxuICAgIC8vIFx1OUVEOFx1OEJBNFx1NjBDNVx1NTFCNVx1NEUwQlx1RkYwQ3ZpdGUgXHU0RjFBXHU1MDQ3XHU4QkJFXHU0RjYwXHU3Njg0XHU1RTk0XHU3NTI4XHU2NjJGXHU4OEFCXHU5MEU4XHU3RjcyXHU1NzI4XHU0RTAwXHU0RTJBXHU1N0RGXHU1NDBEXHU3Njg0XHU2ODM5XHU4REVGXHU1Rjg0XHU0RTBBXHJcbiAgICAvLyBcdTRGOEJcdTU5ODIgaHR0cHM6Ly93d3cucnVveWkudmlwL1x1MzAwMlx1NTk4Mlx1Njc5Q1x1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOFx1NEUwMFx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1NEUwQVx1RkYwQ1x1NEY2MFx1NUMzMVx1OTcwMFx1ODk4MVx1NzUyOFx1OEZEOVx1NEUyQVx1OTAwOVx1OTg3OVx1NjMwN1x1NUI5QVx1OEZEOVx1NEUyQVx1NUI1MFx1OERFRlx1NUY4NFx1MzAwMlx1NEY4Qlx1NTk4Mlx1RkYwQ1x1NTk4Mlx1Njc5Q1x1NEY2MFx1NzY4NFx1NUU5NFx1NzUyOFx1ODhBQlx1OTBFOFx1N0Y3Mlx1NTcyOCBodHRwczovL3d3dy5ydW95aS52aXAvYWRtaW4vXHVGRjBDXHU1MjE5XHU4QkJFXHU3RjZFIGJhc2VVcmwgXHU0RTNBIC9hZG1pbi9cdTMwMDJcclxuICAgIGJhc2U6IGVudi5WSVRFX0FQUF9DT05URVhUX1BBVEgsXHJcbiAgICByZXNvbHZlOiB7XHJcbiAgICAgIGFsaWFzOiB7XHJcbiAgICAgICAgJ34nOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi8nKSxcclxuICAgICAgICAnQCc6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4dGVuc2lvbnM6IFsnLm1qcycsICcuanMnLCAnLnRzJywgJy5qc3gnLCAnLnRzeCcsICcuanNvbicsICcudnVlJywgJy50aWYnXVxyXG4gICAgfSxcclxuICAgIC8vIGh0dHBzOi8vY24udml0ZWpzLmRldi9jb25maWcvI3Jlc29sdmUtZXh0ZW5zaW9uc1xyXG4gICAgcGx1Z2luczogY3JlYXRlUGx1Z2lucyhlbnYsIGNvbW1hbmQgPT09ICdidWlsZCcpLFxyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIGhvc3Q6ICcwLjAuMC4wJyxcclxuICAgICAgcG9ydDogTnVtYmVyKGVudi5WSVRFX0FQUF9QT1JUKSxcclxuICAgICAgb3BlbjogdHJ1ZSxcclxuICAgICAgcHJveHk6IHtcclxuICAgICAgICBbZW52LlZJVEVfQVBQX0JBU0VfQVBJXToge1xyXG4gICAgICAgICAgdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDo4ODk5JyxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93YXJtLWZsb3ctdWknOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQUF9CQVNFX0FQSSxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93YXJtLWZsb3cnOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQUF9CQVNFX0FQSSxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIGVudi5WSVRFX0FQUF9CQVNFX0FQSSksICcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJy93b3JrZmxvdyc6IHtcclxuICAgICAgICAgIHRhcmdldDogZW52LlZJVEVfQVBQX0JBU0VfQVBJLFxyXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICAgICAgd3M6IHRydWUsXHJcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoJ14nICsgZW52LlZJVEVfQVBQX0JBU0VfQVBJKSwgJycpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgJy9hdXRoJzoge1xyXG4gICAgICAgICAgdGFyZ2V0OiBlbnYuVklURV9BUFBfQkFTRV9BUEksXHJcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgICAgICB3czogdHJ1ZSxcclxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cCgnXicgKyBlbnYuVklURV9BUFBfQkFTRV9BUEkpLCAnJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjc3M6IHtcclxuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgIHNjc3M6IHtcclxuICAgICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBwb3N0Y3NzOiB7XHJcbiAgICAgICAgcGx1Z2luczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBwb3N0Y3NzUGx1Z2luOiAnaW50ZXJuYWw6Y2hhcnNldC1yZW1vdmFsJyxcclxuICAgICAgICAgICAgQXRSdWxlOiB7XHJcbiAgICAgICAgICAgICAgY2hhcnNldDogKGF0UnVsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0UnVsZS5uYW1lID09PSAnY2hhcnNldCcpIHtcclxuICAgICAgICAgICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIFx1OTg4NFx1N0YxNlx1OEJEMVxyXG4gICAgb3B0aW1pemVEZXBzOiB7XHJcbiAgICAgIGluY2x1ZGU6IFtcclxuICAgICAgICAndnVlJyxcclxuICAgICAgICAndnVlLXJvdXRlcicsXHJcbiAgICAgICAgJ3BpbmlhJyxcclxuICAgICAgICAnYXhpb3MnLFxyXG4gICAgICAgICdAdnVldXNlL2NvcmUnLFxyXG4gICAgICAgICdlY2hhcnRzJyxcclxuICAgICAgICAndnVlLWkxOG4nLFxyXG4gICAgICAgICdAdnVldXAvdnVlLXF1aWxsJyxcclxuICAgICAgICAnaW1hZ2UtY29udmVyc2lvbicsXHJcbiAgICAgICAgJ2VsZW1lbnQtcGx1cy9lcy9jb21wb25lbnRzLyoqL2NzcydcclxuICAgICAgXVxyXG4gICAgfVxyXG4gIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcaW5kZXgudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L1lKcHJvamVjdC9uZXdfcHJvamVjdC92aXRlL3BsdWdpbnMvaW5kZXgudHNcIjtpbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSc7XHJcbmltcG9ydCBjcmVhdGVVbm9Dc3MgZnJvbSAnLi91bm9jc3MnO1xyXG5pbXBvcnQgY3JlYXRlQXV0b0ltcG9ydCBmcm9tICcuL2F1dG8taW1wb3J0JztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzJztcclxuaW1wb3J0IGNyZWF0ZUljb25zIGZyb20gJy4vaWNvbnMnO1xyXG5pbXBvcnQgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gZnJvbSAnLi9zdmctaWNvbic7XHJcbmltcG9ydCBjcmVhdGVDb21wcmVzc2lvbiBmcm9tICcuL2NvbXByZXNzaW9uJztcclxuaW1wb3J0IGNyZWF0ZVNldHVwRXh0ZW5kIGZyb20gJy4vc2V0dXAtZXh0ZW5kJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAodml0ZUVudjogYW55LCBpc0J1aWxkID0gZmFsc2UpOiBbXSA9PiB7XHJcbiAgY29uc3Qgdml0ZVBsdWdpbnM6IGFueSA9IFtdO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2godnVlKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlVW5vQ3NzKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlQXV0b0ltcG9ydChwYXRoKSk7XHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVDb21wb25lbnRzKHBhdGgpKTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUNvbXByZXNzaW9uKHZpdGVFbnYpKTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUljb25zKCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU3ZnSWNvbnNQbHVnaW4ocGF0aCwgaXNCdWlsZCkpO1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU2V0dXBFeHRlbmQoKSk7XHJcbiAgcmV0dXJuIHZpdGVQbHVnaW5zO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcdW5vY3NzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9ZSnByb2plY3QvbmV3X3Byb2plY3Qvdml0ZS9wbHVnaW5zL3Vub2Nzcy50c1wiO2ltcG9ydCBVbm9Dc3MgZnJvbSAndW5vY3NzL3ZpdGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIHJldHVybiBVbm9Dc3Moe1xyXG4gICAgaG1yVG9wTGV2ZWxBd2FpdDogZmFsc2UgLy8gdW5vY3NzXHU5RUQ4XHU4QkE0XHU2NjJGdHJ1ZVx1RkYwQ1x1NEY0RVx1NzI0OFx1NjcyQ1x1NkQ0Rlx1ODlDOFx1NTY2OFx1NjYyRlx1NEUwRFx1NjUyRlx1NjMwMVx1NzY4NFx1RkYwQ1x1NTQyRlx1NTJBOFx1NTQwRVx1NEYxQVx1NjJBNVx1OTUxOVxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcYXV0by1pbXBvcnQudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L1lKcHJvamVjdC9uZXdfcHJvamVjdC92aXRlL3BsdWdpbnMvYXV0by1pbXBvcnQudHNcIjtpbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcclxuaW1wb3J0IHsgRWxlbWVudFBsdXNSZXNvbHZlciB9IGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVycyc7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gJ3VucGx1Z2luLWljb25zL3Jlc29sdmVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IChwYXRoOiBhbnkpID0+IHtcclxuICByZXR1cm4gQXV0b0ltcG9ydCh7XHJcbiAgICAvLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjUgVnVlIFx1NzZGOFx1NTE3M1x1NTFGRFx1NjU3MFxyXG4gICAgaW1wb3J0czogWyd2dWUnLCAndnVlLXJvdXRlcicsICdAdnVldXNlL2NvcmUnLCAncGluaWEnXSxcclxuICAgIGVzbGludHJjOiB7XHJcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICBmaWxlcGF0aDogJy4vLmVzbGludHJjLWF1dG8taW1wb3J0Lmpzb24nLFxyXG4gICAgICBnbG9iYWxzUHJvcFZhbHVlOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSBFbGVtZW50IFBsdXMgXHU3NkY4XHU1MTczXHU1MUZEXHU2NTcwRWxNZXNzYWdlLCBFbE1lc3NhZ2VCb3guLi4gKFx1NUUyNlx1NjgzN1x1NUYwRilcclxuICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcigpLFxyXG4gICAgICBJY29uc1Jlc29sdmVyKHtcclxuICAgICAgICBwcmVmaXg6ICdJY29uJ1xyXG4gICAgICB9KVxyXG4gICAgXSxcclxuICAgIHZ1ZVRlbXBsYXRlOiB0cnVlLCAvLyBcdTY2MkZcdTU0MjZcdTU3MjggdnVlIFx1NkEyMVx1Njc3Rlx1NEUyRFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NVxyXG4gICAgZHRzOiBwYXRoLnJlc29sdmUocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3NyYycpLCAndHlwZXMnLCAnYXV0by1pbXBvcnRzLmQudHMnKVxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29tcG9uZW50cy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovWUpwcm9qZWN0L25ld19wcm9qZWN0L3ZpdGUvcGx1Z2lucy9jb21wb25lbnRzLnRzXCI7aW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnMnO1xyXG5pbXBvcnQgSWNvbnNSZXNvbHZlciBmcm9tICd1bnBsdWdpbi1pY29ucy9yZXNvbHZlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAocGF0aDogYW55KSA9PiB7XHJcbiAgcmV0dXJuIENvbXBvbmVudHMoe1xyXG4gICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSBFbGVtZW50IFBsdXMgXHU3RUM0XHU0RUY2XHJcbiAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoKSxcclxuICAgICAgLy8gXHU4MUVBXHU1MkE4XHU2Q0U4XHU1MThDXHU1NkZFXHU2ODA3XHU3RUM0XHU0RUY2XHJcbiAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogWydlcCddXHJcbiAgICAgIH0pXHJcbiAgICBdLFxyXG4gICAgZHRzOiBwYXRoLnJlc29sdmUocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3NyYycpLCAndHlwZXMnLCAnY29tcG9uZW50cy5kLnRzJylcclxuICB9KTtcclxufTtcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxZSnByb2plY3RcXFxcbmV3X3Byb2plY3RcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxZSnByb2plY3RcXFxcbmV3X3Byb2plY3RcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGljb25zLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9ZSnByb2plY3QvbmV3X3Byb2plY3Qvdml0ZS9wbHVnaW5zL2ljb25zLnRzXCI7aW1wb3J0IEljb25zIGZyb20gJ3VucGx1Z2luLWljb25zL3ZpdGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIHJldHVybiBJY29ucyh7XHJcbiAgICAvLyBcdTgxRUFcdTUyQThcdTVCODlcdTg4QzVcdTU2RkVcdTY4MDdcdTVFOTNcclxuICAgIGF1dG9JbnN0YWxsOiB0cnVlXHJcbiAgfSk7XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcWUpwcm9qZWN0XFxcXG5ld19wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcWUpwcm9qZWN0XFxcXG5ld19wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1xcXFxzdmctaWNvbi50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovWUpwcm9qZWN0L25ld19wcm9qZWN0L3ZpdGUvcGx1Z2lucy9zdmctaWNvbi50c1wiO2ltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJztcclxuZXhwb3J0IGRlZmF1bHQgKHBhdGg6IGFueSwgaXNCdWlsZDogYm9vbGVhbikgPT4ge1xyXG4gIHJldHVybiBjcmVhdGVTdmdJY29uc1BsdWdpbih7XHJcbiAgICAvLyBcdTYzMDdcdTVCOUFcdTk3MDBcdTg5ODFcdTdGMTNcdTVCNThcdTc2ODRcdTU2RkVcdTY4MDdcdTY1ODdcdTRFRjZcdTU5MzlcclxuICAgIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi9zcmMnKSwgJ2Fzc2V0cy9pY29ucy9zdmcnKV0sXHJcbiAgICAvLyBcdTYzMDdcdTVCOUFzeW1ib2xJZFx1NjgzQ1x1NUYwRlxyXG4gICAgc3ltYm9sSWQ6ICdpY29uLVtkaXJdLVtuYW1lXScsXHJcbiAgICBzdmdvT3B0aW9uczogaXNCdWlsZFxyXG4gIH0pO1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXFlKcHJvamVjdFxcXFxuZXdfcHJvamVjdFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29tcHJlc3Npb24udHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L1lKcHJvamVjdC9uZXdfcHJvamVjdC92aXRlL3BsdWdpbnMvY29tcHJlc3Npb24udHNcIjtpbXBvcnQgY29tcHJlc3Npb24gZnJvbSAndml0ZS1wbHVnaW4tY29tcHJlc3Npb24nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGVudjogYW55KSA9PiB7XHJcbiAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTIH0gPSBlbnY7XHJcbiAgY29uc3QgcGx1Z2luOiBhbnlbXSA9IFtdO1xyXG4gIGlmIChWSVRFX0JVSUxEX0NPTVBSRVNTKSB7XHJcbiAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KCcsJyk7XHJcbiAgICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdnemlwJykpIHtcclxuICAgICAgLy8gaHR0cDovL2RvYy5ydW95aS52aXAvcnVveWktdnVlL290aGVyL2ZhcS5odG1sI1x1NEY3Rlx1NzUyOGd6aXBcdTg5RTNcdTUzOEJcdTdGMjlcdTk3NTlcdTYwMDFcdTY1ODdcdTRFRjZcclxuICAgICAgcGx1Z2luLnB1c2goXHJcbiAgICAgICAgY29tcHJlc3Npb24oe1xyXG4gICAgICAgICAgZXh0OiAnLmd6JyxcclxuICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGU6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2Jyb3RsaScpKSB7XHJcbiAgICAgIHBsdWdpbi5wdXNoKFxyXG4gICAgICAgIGNvbXByZXNzaW9uKHtcclxuICAgICAgICAgIGV4dDogJy5icicsXHJcbiAgICAgICAgICBhbGdvcml0aG06ICdicm90bGlDb21wcmVzcycsXHJcbiAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlOiBmYWxzZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwbHVnaW47XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcWUpwcm9qZWN0XFxcXG5ld19wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcWUpwcm9qZWN0XFxcXG5ld19wcm9qZWN0XFxcXHZpdGVcXFxccGx1Z2luc1xcXFxzZXR1cC1leHRlbmQudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L1lKcHJvamVjdC9uZXdfcHJvamVjdC92aXRlL3BsdWdpbnMvc2V0dXAtZXh0ZW5kLnRzXCI7aW1wb3J0IHNldHVwRXh0ZW5kIGZyb20gJ3VucGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQtcGx1cy92aXRlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICByZXR1cm4gc2V0dXBFeHRlbmQoe30pO1xyXG59O1xyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQWdRLFNBQWdDLFNBQVMsb0JBQW9COzs7QUNBOUIsT0FBTyxTQUFTOzs7QUNBZCxPQUFPLFlBQVk7QUFFcFQsSUFBTyxpQkFBUSxNQUFNO0FBQ25CLFNBQU8sT0FBTztBQUFBLElBQ1osa0JBQWtCO0FBQUE7QUFBQSxFQUNwQixDQUFDO0FBQ0g7OztBQ04yUyxPQUFPLGdCQUFnQjtBQUNsVSxTQUFTLDJCQUEyQjtBQUNwQyxPQUFPLG1CQUFtQjtBQUYxQixJQUFNLG1DQUFtQztBQUl6QyxJQUFPLHNCQUFRLENBQUNBLFVBQWM7QUFDNUIsU0FBTyxXQUFXO0FBQUE7QUFBQSxJQUVoQixTQUFTLENBQUMsT0FBTyxjQUFjLGdCQUFnQixPQUFPO0FBQUEsSUFDdEQsVUFBVTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1Ysa0JBQWtCO0FBQUEsSUFDcEI7QUFBQSxJQUNBLFdBQVc7QUFBQTtBQUFBLE1BRVQsb0JBQW9CO0FBQUEsTUFDcEIsY0FBYztBQUFBLFFBQ1osUUFBUTtBQUFBLE1BQ1YsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUNBLGFBQWE7QUFBQTtBQUFBLElBQ2IsS0FBS0EsTUFBSyxRQUFRQSxNQUFLLFFBQVEsa0NBQVcsV0FBVyxHQUFHLFNBQVMsbUJBQW1CO0FBQUEsRUFDdEYsQ0FBQztBQUNIOzs7QUN2QnlTLE9BQU8sZ0JBQWdCO0FBQ2hVLFNBQVMsdUJBQUFDLDRCQUEyQjtBQUNwQyxPQUFP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O0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxVQUNKLG1CQUFtQjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsU0FBUztBQUFBLFFBQ1AsU0FBUztBQUFBLFVBQ1A7QUFBQSxZQUNFLGVBQWU7QUFBQSxZQUNmLFFBQVE7QUFBQSxjQUNOLFNBQVMsQ0FBQyxXQUFXO0FBQ25CLG9CQUFJLE9BQU8sU0FBUyxXQUFXO0FBQzdCLHlCQUFPLE9BQU87QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBLElBRUEsY0FBYztBQUFBLE1BQ1osU0FBUztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJwYXRoIiwgIkVsZW1lbnRQbHVzUmVzb2x2ZXIiLCAiSWNvbnNSZXNvbHZlciIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJwYXRoIiwgIkVsZW1lbnRQbHVzUmVzb2x2ZXIiLCAiSWNvbnNSZXNvbHZlciIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJwYXRoIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgInBhdGgiLCAiX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUiLCAicGF0aCIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K