This commit is contained in:
cclu 2024-12-20 19:35:18 +08:00
parent 9c8cc6bc71
commit 75dd0a758e
89 changed files with 62059 additions and 11681 deletions

BIN
aiMap.zip

Binary file not shown.

View File

@ -1,11 +1,3 @@
<!--
* @Author: cclu 1106109051@qq.com
* @Date: 2024-11-18 11:40:21
* @LastEditors: cclu 1106109051@qq.com
* @LastEditTime: 2024-11-21 10:44:39
* @FilePath: \aiRobot\index.html
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<!doctype html>
<html lang="en">
<head>
@ -13,16 +5,17 @@
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>地图测试</title>
<base href="/aiMap/">
<base href="/"> <!-- 确保这里匹配你的部署路径 -->
</head>
<body>
<div id="app"></div>
</body>
<script type="module" src="/src/main.ts"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
<style>
*{
margin: 0;
padding: 0;
}
margin: 0;
padding: 0;
}
</style>
</html>

7774
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,7 @@
"@antv/l7": "^2.22.3",
"@antv/l7-maps": "^2.22.3",
"axios": "^1.7.7",
"echarts": "^5.5.1",
"element-plus": "^2.8.8",
"moment": "^2.30.1",
"pinia": "^2.2.6",

View File

@ -1,11 +1,3 @@
<!--
* @Author: cclu 1106109051@qq.com
* @Date: 2024-11-19 17:27:17
* @LastEditors: cclu 1106109051@qq.com
* @LastEditTime: 2024-11-19 17:29:28
* @FilePath: \aiMap\src\App.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div>
<router-view></router-view>
@ -19,7 +11,7 @@ import { useRouter } from "vue-router";
const router = useRouter();
onMounted(() => {
router.push("/map");
// router.push("/map/:id");
});
</script>

BIN
src/assets/ai/busyIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/assets/ai/revenue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/assets/ai/whiteBack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,53 @@
.BusyRankingContent{
.pageTitle{
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 16px;
color: rgba(255, 255, 255, 0.85);
line-height: 26px;
text-align: center;
font-style: normal;
margin-left: 4px;
}
.busyList{
width: 100%;
height: 326px;
margin-top: 12px;
overflow-y: auto;
.busyItem{
width: 100%;
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: space-between;
.left{
display: flex;
align-items: center;
.indexBox{
width: 1.5rem;
height: 1.5rem;
line-height: 1.5rem;
float: left;
text-align: center;
border: 2px solid #d56a40;
color: #d56a40;
font-style: normal;
font-weight: 700;
margin-right: 0.1rem;
margin-top: 0.05rem;
}
.name{
width: 120px;
color: #fff;
margin-left: 4px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
}
}
.busyList::-webkit-scrollbar {
display: none;
}
}

View File

@ -0,0 +1,103 @@
<script setup lang="ts">
import "./BusyRanking.less";
import * as echarts from "echarts";
import moment from "moment";
import { onMounted, reactive, ref, watch } from "vue";
import { handlegetServerConnec } from "../../newService";
import { nextTick } from "process";
//
let busyList = ref<any>([]);
//
const baseInfoObj = ref<any>();
onMounted(async () => {});
//
const handleGetBusyRank = async () => {
let saveData = localStorage.getItem("baseInfoObj");
if (saveData) {
baseInfoObj.value = JSON.parse(saveData);
}
const req: any = {
action_type: "getCurHalfCollect",
province_code: baseInfoObj.value.ProvinceId || "3544",
};
const data = await handlegetServerConnec(req);
console.log("BusyRankingContent", data);
let list: any = data.CollectionObject;
busyList.value = list;
emit("handleServiceBusy");
return list;
};
//
const props = defineProps<{
show: any;
}>();
watch(
() => props.show,
(newVal, oldVal) => {
console.log("realboxnewVal", newVal);
if (newVal) {
handleGetBusyRank();
}
},
{ deep: true }
);
defineExpose({
handleGetBusyRank: handleGetBusyRank,
busyList: busyList,
});
//
const emit = defineEmits<{
(e: "handleServiceBusy"): void; //
}>();
</script>
<template>
<div
class="BusyRankingContent"
id="BusyRankingContent"
style="width: 100%; height: 100%"
>
<div class="pageTitle">服务区繁忙排行</div>
<div class="busyList">
<div
class="busyItem"
v-for="(item, index) in busyList.slice(0, 10)"
:key="index"
>
<div class="left">
<div class="indexBox">{{ index + 1 }}</div>
<div class="name">{{ item.SERVERPART_NAME || "-" }}</div>
</div>
<div
class="right"
:style="{
color:
item.AVR_TICKET >= 30
? '#E64218'
: item.AVR_TICKET >= 15 && item.AVR_TICKET < 30
? '#EFE271'
: '#1BAAE6',
}"
>
<span style="display: inline-block; width: 50px; text-align: right">
{{ item.AVR_TICKET ? item.AVR_TICKET + "%" : "-%" }}
</span>
{{
item.AVR_TICKET >= 30
? "繁忙"
: item.AVR_TICKET >= 15 && item.AVR_TICKET < 30
? "良好"
: "空闲"
}}
</div>
</div>
</div>
</div>
</template>

View File

@ -66,6 +66,12 @@ const duringInspection = ref<boolean>(false);
const inspectionIndex = ref<number>(0);
//
const inputRef = ref<any>();
//
const baseInfoObj = ref<any>();
let saveData = localStorage.getItem("baseInfoObj");
if (saveData) {
baseInfoObj.value = JSON.parse(saveData);
}
onMounted(() => {
//
@ -79,6 +85,7 @@ const handleGetShowDailogBox = async () => {
if (dialogueList && dialogueList.length > 0) {
await nextTick(() => {
showDialogBox.value = true;
emit("handleShowAi", true);
});
inputRef.value?.focus();
console.log("dialogueList", dialogueList);
@ -101,6 +108,7 @@ const handleGetShowDailogBox = async () => {
};
dialogueList.push(obj);
showDialogBox.value = true;
emit("handleShowAi", true);
setTimeout(() => {
dialogueList[0].text = "猜你想了解:";
dialogueList[0].isOver = true;
@ -141,6 +149,7 @@ const handleCloseDialogbox = async () => {
//
showDialogBox.value = false;
emit("handleShowAi", false);
};
//
const handleAddDialogList = (text: string) => {
@ -564,8 +573,8 @@ const handleGetReq = (configDetail: any, answer?: any) => {
let realKey: any = newPARSING_RULES[key];
if (realKey) {
let currentUser: any = {
ProvinceCode: "340000",
pushProvinceCode: "340000",
ProvinceCode: baseInfoObj.value.ProvinceCode || "340000",
pushProvinceCode: baseInfoObj.value.ProvinceCode || "340000",
};
// formatType 0 1 2 3 4: 5 6 7 8: 9 10 11:
// formatType 10 now true|false afterOrBefore after|before count startOrEnd start|end dateType 1 YYYY 2 YYYY-MM 3 YYYY-MM-DD 4 YYYYMM
@ -732,19 +741,52 @@ const handleAnalyzeConfig = async (configDetail: any, answer: any) => {
console.log("dsadsadasf", result);
console.log("OUTPUT_FORMAT", OUTPUT_FORMAT);
console.log("answer", answer);
console.log("newRESPONSE_CONFIG", newRESPONSE_CONFIG);
let newResult: any;
// responseType text json
if (OUTPUT_FORMAT.responseType === "text") {
newResult = newRESPONSE_CONFIG
.replace(/"/g, "'")
.replace(/\{\{(.*?)\}\}/g, (_: any, key: any) => {
.replace(/{{(.*?)}}/g, (_: any, expression: any) => {
try {
return eval(key.trim());
} catch {
return "";
// 使 eval JavaScript
// eval 使
return eval(expression.trim()); //
} catch (error) {
console.error("错误:", error);
return ""; //
}
});
// newResult = newRESPONSE_CONFIG.replace(
// /\{\{(.*?)\}\}/g,
// (_: any, expression: any) => {
// try {
// //
// const func = new Function(
// ...Object.keys({
// moment: window.moment,
// answer,
// result,
// formatNumber,
// }),
// `return (${expression});`
// );
// return func(
// ...Object.values({
// moment: window.moment,
// answer,
// result,
// formatNumber,
// })
// );
// } catch (e) {
// console.error("", expression, e);
// return "";
// }
// }
// );
} else {
if (OUTPUT_FORMAT.responseFormat === "object") {
newResult = result;
@ -957,7 +999,11 @@ const handleGetResFieldRes = (obj: any, config: any) => {
str = obj[key];
}
}
return str;
if (str) {
return str;
} else {
return "暂无数据";
}
};
//
@ -981,17 +1027,17 @@ const handleInspectionDialogueBox = async (detail: any, otherObj?: any) => {
detail.tmwWeatherModel.DAY_AIR_TEMPERATURE
}</span>`
: "暂无天气数据"
}</span><span class="style4">实时路况(${moment().format(
"MM月DD日 HH时mm分"
)})<span class="style5">${
}</span><span class="style4">实时路况<span class="style5">${
detail?.roadConditions
? `${
detail?.roadConditions?.EXPRESSWAY_NAME
? detail?.roadConditions?.EXPRESSWAY_NAME + ""
: ""
}${detail?.roadConditions?.evaluation.status_desc || ""}`
}${
detail?.roadConditions?.evaluation.status_desc || ""
}(${moment().format("MM月DD日 HH时mm分")})`
: "暂无实况车流数据"
} </span></span><span class="style4">车辆归属地情况${
} </span></span><span class="style4">车辆归属${
detail?.provinceListTooltip && detail?.provinceListTooltip.length > 0
? `${detail?.provinceListTooltip
.map((item: any) => {
@ -1010,9 +1056,13 @@ const handleInspectionDialogueBox = async (detail: any, otherObj?: any) => {
)}%Top3${
subItem.children && subItem.children.length > 0
? subItem.children
.map((thirdItem: any) => {
.map((thirdItem: any, thirdIndex: number) => {
return thirdItem.ProvinceOrCityName !== "其他"
? `${thirdItem.ProvinceOrCityName}`
? `${thirdItem.ProvinceOrCityName}${
thirdIndex + 1 !== subItem.children.length
? "、"
: ""
}`
: "";
})
.join("")
@ -1029,7 +1079,7 @@ const handleInspectionDialogueBox = async (detail: any, otherObj?: any) => {
otherObj
? `${
otherObj?.businessText
? `<span class="style4">经营数据:${otherObj?.businessText}</span>`
? `<span class="style4">经营数据:</span><span class="style4">${otherObj?.businessText}</span>`
: ""
}${
otherObj?.merchantText
@ -1242,7 +1292,7 @@ const handleScrollToBottom = () => {
const handleInspectionQuestions = async (text: string) => {
const req: any = {
Sentence: text,
ProvinceCode: "340000",
ProvinceCode: baseInfoObj.value.ProvinceCode || "340000",
DialogCode: thisQuestionId.value || "",
};
const data = await handleTranslateSentence(req);
@ -1276,7 +1326,7 @@ const handleInspectionQuestions = async (text: string) => {
const handleAnswerQuestions = async () => {
const req: any = {
Sentence: searchText.value,
ProvinceCode: "340000",
ProvinceCode: baseInfoObj.value.ProvinceCode || "340000",
DialogCode: thisQuestionId.value || "",
};
//
@ -1324,6 +1374,7 @@ const handleAnswerQuestions = async () => {
const lastBox: any = allBoxes[allBoxes.length - 1];
if (lastBox) {
const lastContent = `<span class="style4">为您查找相关数据</span>`;
// const lastContent = `<span class="style4">${data?.RevenueAnalysis}</span>`;
isPrinting.value = true;
await handlePrintWord(lastBox, lastContent);
}
@ -1361,7 +1412,8 @@ const handleAnswerQuestions = async () => {
}
}
} else {
handleLastUpdate("为您查找相关数据");
// handleLastUpdate("");
handleLastUpdate(data?.RevenueAnalysis.split("{")[0] || "");
}
}
} else {
@ -1679,16 +1731,51 @@ const handlePrintWord = async (
const typeCharacter = async () => {
if (i < tempDiv.innerHTML.length && isPrinting.value) {
// 1. handleWait()
const handleWaitRegex = /handleWait\((.*?)\)/;
const restContent = tempDiv.innerHTML.slice(i);
const match = handleWaitRegex.exec(restContent);
const waitMatch = handleWaitRegex.exec(restContent);
if (match && match.index === 0) {
//
const param: string = match[1].trim().replace(/^["']|["']$/g, "");
await handleWait(param); // handleWait
i += match[0].length; // handleWait
} else {
if (waitMatch && waitMatch.index === 0) {
const param: string = waitMatch[1].trim().replace(/^["']|["']$/g, "");
await handleWait(param);
i += waitMatch[0].length;
}
// 2. moment().startOf() moment().format()
else if (restContent.startsWith("moment().")) {
const momentRegex = /(moment\(\)\.(startOf|format)\(.*?\))/;
const momentMatch = momentRegex.exec(restContent);
if (momentMatch) {
const momentExpression = momentMatch[1]; //
let parsedResult = "";
try {
if (momentExpression.includes("startOf")) {
const unit = momentExpression.match(
/startOf\(['"](\w+)['"]\)/
)?.[1];
parsedResult = moment()
.startOf(unit as any)
.format("YYYY-MM-DD HH:mm:ss");
} else if (momentExpression.includes("format")) {
const formatString = momentExpression.match(
/format\(['"](.*?)['"]\)/
)?.[1];
parsedResult = moment().format(formatString);
}
} catch (error) {
console.error("Moment 解析失败:", error);
}
//
const textNode = document.createTextNode(parsedResult);
tagStack[tagStack.length - 1].appendChild(textNode);
i += momentMatch[0].length; // moment
}
}
// 3.
else {
const char = tempDiv.innerHTML.charAt(i);
if (char === "<") {
const tagEnd = tempDiv.innerHTML.indexOf(">", i);
@ -1774,6 +1861,7 @@ const emit = defineEmits<{
(e: "handleWarningMap", warningData: any): void; //
(e: "handleAreaInspection", index: number): void; //
(e: "handleHiddenSuspended"): void; //
(e: "handleShowAi", value: boolean): void; // ai
}>();
//
@ -1854,6 +1942,7 @@ const handleGetFieldEnum = async () => {
//
const handleGetBusinessTrade = async () => {
showDialogBox.value = true;
emit("handleShowAi", true);
handleAddDialogList(
`${props.currentServerPartDetail?.SERVERPART_NAME || ""}经营业态`
);
@ -1865,6 +1954,7 @@ const handleGetBusinessTrade = async () => {
//
const handleSetWarningData = async () => {
showDialogBox.value = true;
emit("handleShowAi", true);
handleAddDialogList(
`${props.currentServerPartDetail?.SERVERPART_NAME || ""}预警类型`
);
@ -2058,6 +2148,7 @@ defineExpose({
closeInspection,
duringInspection,
handleInspectionQuestions,
showDialogBox,
});
</script>

File diff suppressed because it is too large Load Diff

View File

@ -6932,7 +6932,880 @@ const detailObj = {
[118.103675, 33.532078]
]
}
}
},
// -------------------------------------- 四川 ---------------------------------------------
// 攀枝花西服务区 572
{
"type": "Feature",
"properties": {
SERVERPART_ID: 572
},
"geometry": {
"type": "LineString",
"coordinates": [
[101.321663, 26.56686],
[101.32289, 26.567027],
[101.324348, 26.567193],
[101.325325, 26.567221],
[101.326334, 26.567207],
[101.327637, 26.567013],
[101.329403, 26.566624],
[101.330521, 26.566389],
[101.33187, 26.56618],
[101.332941, 26.566083],
[101.334399, 26.565972],
[101.335997, 26.565861],
[101.337735, 26.565736],
[101.339007, 26.565639],
[101.339845, 26.565542],
[101.34121, 26.565181],
[101.342498, 26.564751],
[101.343879, 26.564099],
[101.344918, 26.563405],
[101.3465, 26.562475],
[101.348285, 26.561462],
[101.350736, 26.560352],
[101.352675, 26.559714],
[101.354894, 26.559145],
[101.357671, 26.558784],
[101.35961, 26.558742],
[101.361767, 26.558839],
[101.364047, 26.559159],
[101.366064, 26.559575],
[101.368872, 26.560429],
[101.370393, 26.560762],
[101.372627, 26.561109],
[101.374551, 26.56122],
[101.377048, 26.561261],
[101.380074, 26.561261],
[101.381563, 26.561275],
[101.383813, 26.561247],
[101.385349, 26.561109],
[101.387102, 26.560651],
[101.389196, 26.559957],
[101.391942, 26.559069],
[101.394052, 26.558375],
[101.395495, 26.557959],
[101.396938, 26.557737],
[101.398676, 26.557691],
[101.400522, 26.557955],
[101.402182, 26.558286],
[101.403742, 26.558497],
[101.404705, 26.558477],
[101.4064, 26.558331],
[101.407352, 26.558242],
[101.408677, 26.55824],
[101.409697, 26.558385],
[101.410748, 26.558653],
[101.411638, 26.55899],
[101.412714, 26.559607],
[101.413457, 26.560188],
[101.413868, 26.560586],
[101.414355, 26.561083],
[101.414843, 26.56171],
[101.415398, 26.562399],
[101.41701, 26.564259],
[101.418113, 26.565628],
[101.419207, 26.566914],
[101.419865, 26.567938],
[101.420464, 26.568917],
[101.421037, 26.57008],
[101.421669, 26.571319],
[101.422148, 26.57229],
[101.422593, 26.573131],
[101.423183, 26.573942],
[101.4242, 26.575109],
[101.425079, 26.575957],
[101.425657, 26.576781],
[101.426124, 26.577912],
[101.426467, 26.5793],
[101.426935, 26.580751],
[101.427526, 26.581808],
[101.42846, 26.58268],
[101.42923, 26.583221],
[101.430027, 26.583578],
[101.431058, 26.583971],
[101.432088, 26.584168],
[101.433903, 26.584376],
[101.435813, 26.58434],
[101.43716, 26.584155],
[101.439106, 26.583515],
[101.441682, 26.582567],
[101.444913, 26.581257],
[101.447438, 26.58049],
[101.450367, 26.579993],
[101.454609, 26.579541],
[101.457538, 26.579767]
]
}
},
// 攀枝花服务区 566
{
"type": "Feature",
"properties": {
SERVERPART_ID: 566
},
"geometry": {
"type": "LineString",
"coordinates": [
[101.838188, 26.539117],
[101.837804, 26.540172],
[101.837695, 26.541522],
[101.83753, 26.544834],
[101.836899, 26.547631],
[101.836488, 26.549177],
[101.836872, 26.552292],
[101.836707, 26.55396],
[101.836159, 26.555653],
[101.836022, 26.55715],
[101.836687, 26.558404],
[101.837288, 26.559244],
[101.83795, 26.559878],
[101.839074, 26.56109],
[101.839983, 26.562151],
[101.840538, 26.562757],
[101.841369, 26.563404],
[101.842709, 26.564148],
[101.843815, 26.564689],
[101.845314, 26.565381],
[101.846266, 26.565853],
[101.847464, 26.566415],
[101.849059, 26.567141],
[101.850203, 26.56765],
[101.852455, 26.568737],
[101.855128, 26.569988],
[101.857279, 26.570974],
[101.860317, 26.572419],
[101.862467, 26.573414],
[101.863683, 26.573992],
[101.864914, 26.574496],
[101.866355, 26.57494],
[101.868585, 26.575457],
[101.869996, 26.575646],
[101.872991, 26.576095],
[101.875261, 26.576332],
[101.876159, 26.57635],
[101.877905, 26.576318],
[101.879836, 26.576173],
[101.882024, 26.576004],
[101.884401, 26.575847],
[101.885724, 26.575944],
[101.887031, 26.576241],
[101.888476, 26.576929],
[101.889395, 26.577545],
[101.890853, 26.578499],
[101.892123, 26.579164],
[101.893176, 26.579393],
[101.894567, 26.579429],
[101.896809, 26.579453],
[101.899024, 26.579514],
[101.900779, 26.579538],
[101.902238, 26.579574],
[101.903183, 26.579695],
[101.904196, 26.580033],
[101.905114, 26.580504],
[101.906059, 26.581205],
[101.908108, 26.582678],
[101.909445, 26.583548],
[101.910742, 26.584091],
[101.912754, 26.584786],
[101.913902, 26.585499],
[101.916873, 26.587926],
[101.918399, 26.589146],
[101.919749, 26.589931],
[101.921343, 26.59051],
[101.922396, 26.590873],
[101.924071, 26.591464],
[101.925394, 26.591887],
[101.926523, 26.592455],
[101.927425, 26.592911],
[101.927785, 26.593186],
[101.928046, 26.593395],
[101.928332, 26.593685],
[101.928824, 26.59428],
[101.929332, 26.595032],
[101.93054, 26.596924],
[101.931107, 26.597808],
[101.931641, 26.598488],
[101.932349, 26.599079],
[101.933038, 26.599487],
[101.933646, 26.599707],
[101.934167, 26.599815],
[101.936345, 26.600205],
[101.939256, 26.600609],
[101.942183, 26.601122],
[101.943435, 26.601608],
[101.944423, 26.602256]
]
}
},
// 绕城东服务区 548
{
"type": "Feature",
"properties": {
SERVERPART_ID: 548
},
"geometry": {
"type": "LineString",
"coordinates": [
[104.207318, 30.652912],
[104.206976, 30.65134],
[104.206777, 30.649962],
[104.20664, 30.648667],
[104.206435, 30.647431],
[104.206298, 30.64596],
[104.206093, 30.644724],
[104.205888, 30.643488],
[104.205682, 30.642134],
[104.205545, 30.64078],
[104.205409, 30.639485],
[104.205272, 30.638014],
[104.205203, 30.636424],
[104.205272, 30.634953],
[104.20534, 30.63354],
[104.205477, 30.632127],
[104.20554, 30.630456],
[104.20557, 30.628902],
[104.205659, 30.627297],
[104.205733, 30.625821],
[104.205733, 30.624267],
[104.205808, 30.622519],
[104.205883, 30.620771],
[104.206019, 30.619056],
[104.206104, 30.617325],
[104.206011, 30.615648],
[104.205826, 30.614051],
[104.205362, 30.612294],
[104.204434, 30.610617],
[104.203228, 30.609179],
[104.20165, 30.607821],
[104.200258, 30.606703]
]
}
},
// 金堂服务区 540
{
"type": "Feature",
"properties": {
SERVERPART_ID: 540
},
"geometry": {
"type": "LineString",
"coordinates": [
[104.4148, 30.798356],
[104.416509, 30.798419],
[104.418155, 30.798773],
[104.419697, 30.799126],
[104.42124, 30.799656],
[104.422782, 30.800098],
[104.424531, 30.800539],
[104.426485, 30.800716],
[104.428439, 30.800804],
[104.43029, 30.800893],
[104.432038, 30.800716],
[104.433889, 30.800628],
[104.43574, 30.800363],
[104.437694, 30.800009],
[104.439442, 30.799568],
[104.441499, 30.799303],
[104.443284, 30.798945],
[104.445196, 30.798646],
[104.447134, 30.798177],
[104.4488, 30.797801],
[104.450365, 30.797234],
[104.451849, 30.796527],
[104.453497, 30.796102],
[104.45498, 30.795677],
[104.456463, 30.795465],
[104.458028, 30.795253],
[104.459594, 30.794969],
[104.461324, 30.794757],
[104.462807, 30.794757],
[104.464455, 30.794616],
[104.466021, 30.794403],
[104.467421, 30.794262],
[104.469234, 30.794049],
[104.471047, 30.793979],
[104.472695, 30.793908],
[104.474508, 30.793908]
]
}
},
// 中江服务区 544
{
"type": "Feature",
"properties": {
SERVERPART_ID: 544
},
"geometry": {
"type": "LineString",
"coordinates": [
[104.665787, 30.936031],
[104.664537, 30.934969],
[104.663533, 30.933726],
[104.662864, 30.932292],
[104.662196, 30.930857],
[104.661527, 30.929423],
[104.660635, 30.92818],
[104.65952, 30.92665],
[104.65796, 30.925598],
[104.656622, 30.924642],
[104.654838, 30.923877],
[104.652832, 30.922921],
[104.651048, 30.922156],
[104.649488, 30.921104],
[104.647927, 30.919861],
[104.647035, 30.918522],
[104.645698, 30.917087],
[104.645029, 30.915557],
[104.64436, 30.914314],
[104.643664, 30.913035],
[104.642829, 30.911328],
[104.642083, 30.909969],
[104.641715, 30.908502],
[104.6415, 30.907113],
[104.6415, 30.905632],
[104.641284, 30.903966],
[104.641068, 30.902485],
[104.640637, 30.901097],
[104.639989, 30.899801],
[104.639342, 30.898413],
[104.638911, 30.896932],
[104.638263, 30.89545],
[104.6374, 30.894154],
[104.636537, 30.892766],
[104.635674, 30.891377],
[104.634488, 30.890081],
[104.633409, 30.888878],
[104.631899, 30.887859],
[104.63082, 30.886841],
[104.629633, 30.885823]
]
}
},
// 三台停车区 549
{
"type": "Feature",
"properties": {
SERVERPART_ID: 549
},
"geometry": {
"type": "LineString",
"coordinates": [
[105.000827, 31.019017],
[105.002769, 31.019506],
[105.004597, 31.020289],
[105.00631, 31.020876],
[105.008137, 31.021659],
[105.009737, 31.022638],
[105.011564, 31.023617],
[105.013163, 31.024596],
[105.014762, 31.025575],
[105.01659, 31.026749],
[105.018417, 31.027728],
[105.020131, 31.028707],
[105.021615, 31.029686],
[105.023557, 31.030273],
[105.025499, 31.03086],
[105.027098, 31.031447],
[105.029268, 31.031447],
[105.031324, 31.031741],
[105.033152, 31.031545],
[105.034793, 31.031364],
[105.03634, 31.031045],
[105.037913, 31.030849],
[105.039628, 31.030531],
[105.041742, 31.030174],
[105.04391, 31.029881],
[105.045736, 31.029783],
[105.047675, 31.029783],
[105.049729, 31.030369],
[105.051669, 31.031152],
[105.053266, 31.031934],
[105.05532, 31.032716],
[105.05726, 31.033498],
[105.059428, 31.033694],
[105.061596, 31.034085],
[105.063421, 31.034965],
[105.06479, 31.036138],
[105.06616, 31.037311],
[105.067757, 31.038582],
[105.069697, 31.039071],
[105.071408, 31.039755],
[105.07312, 31.040342]
]
}
},
// 盐亭服务区 541
{
"type": "Feature",
"properties": {
SERVERPART_ID: 541
},
"geometry": {
"type": "LineString",
"coordinates": [
[105.353212, 31.134419],
[105.355273, 31.134517],
[105.35722, 31.134615],
[105.359282, 31.134811],
[105.361458, 31.135105],
[105.363291, 31.1354],
[105.365009, 31.135988],
[105.366841, 31.136968],
[105.36833, 31.13834],
[105.369246, 31.139909],
[105.370277, 31.141281],
[105.371537, 31.14285],
[105.373141, 31.14383],
[105.374859, 31.144614],
[105.376691, 31.145006],
[105.378638, 31.145595],
[105.3807, 31.145987],
[105.382532, 31.146379],
[105.384365, 31.146967],
[105.386426, 31.147163],
[105.388144, 31.147947],
[105.389977, 31.148143],
[105.391924, 31.149123],
[105.393756, 31.150104],
[105.395589, 31.151084],
[105.397422, 31.152064],
[105.39914, 31.152848],
[105.401087, 31.153632],
[105.403263, 31.154024],
[105.405095, 31.154416],
[105.407271, 31.154808],
[105.409104, 31.155004],
[105.411051, 31.155592],
[105.413227, 31.155592],
[105.415174, 31.156377],
[105.41735, 31.156769],
[105.419412, 31.157749],
[105.421473, 31.158533]
]
}
},
// -------------------------------------- 云南 ---------------------------------------------
// 贺思停车区 1057
{
"type": "Feature",
"properties": {
SERVERPART_ID: 1057
},
"geometry": {
"type": "LineString",
"coordinates": [
[97.634446, 23.882395],
[97.636642, 23.882433],
[97.638297, 23.882546],
[97.639322, 23.882908],
[97.64084, 23.883909],
[97.641606, 23.884546],
[97.642235, 23.885334],
[97.643453, 23.886885],
[97.644519, 23.88821],
[97.64586, 23.890111],
[97.646817, 23.891249],
[97.64761, 23.892174],
[97.648458, 23.892849],
[97.649661, 23.893737],
[97.651056, 23.894462],
[97.652451, 23.895037],
[97.656103, 23.895688],
[97.660547, 23.896475],
[97.663439, 23.896946],
[97.665397, 23.897309],
[97.667242, 23.897878],
[97.669362, 23.898515],
[97.67043, 23.898988],
[97.671587, 23.899713],
[97.673497, 23.900873],
[97.674824, 23.90182],
[97.676283, 23.903272],
[97.678526, 23.906144],
[97.680742, 23.909219],
[97.682554, 23.911734],
[97.684575, 23.914595],
[97.685592, 23.915703],
[97.687542, 23.917133],
[97.689641, 23.918134],
[97.693357, 23.919123],
[97.695443, 23.919636],
[97.701727, 23.921113],
[97.70732, 23.922448],
[97.712131, 23.924283],
[97.715703, 23.926452],
[97.717828, 23.928073],
[97.720575, 23.930787],
[97.723261, 23.933528],
[97.725308, 23.935602],
[97.728802, 23.93926],
[97.730784, 23.941095],
[97.732713, 23.942656],
[97.73403, 23.943585],
[97.736168, 23.944884],
[97.739336, 23.946052],
[97.74433, 23.947398],
[97.747772, 23.948339],
[97.751409, 23.949459],
[97.755404, 23.950767],
[97.760176, 23.953424],
[97.762561, 23.954818],
[97.764582, 23.955616],
[97.768011, 23.956867],
[97.769823, 23.957391],
[97.772912, 23.95845],
[97.77535, 23.959272],
[97.778487, 23.960348],
[97.78052, 23.960981],
[97.781969, 23.961692],
[97.782943, 23.962483],
[97.783419, 23.962997],
[97.784543, 23.964875],
[97.786555, 23.968353],
[97.787572, 23.970093],
[97.788956, 23.971595],
[97.790405, 23.973038],
[97.791746, 23.974105],
[97.794254, 23.974865],
[97.795984, 23.97528],
[97.797737, 23.975932],
[97.799164, 23.976525],
[97.799986, 23.977533],
[97.800873, 23.978205],
[97.801673, 23.979193],
[97.802322, 23.980221],
[97.803632, 23.983009],
[97.80467, 23.985006],
[97.80586, 23.987911],
[97.806703, 23.990322],
[97.807807, 23.992762],
[97.808101, 23.99452]
]
}
},
// 尚勇停车区 1168
{
"type": "Feature",
"properties": {
SERVERPART_ID: 1168
},
"geometry": {
"type": "LineString",
"coordinates": [
[101.695032, 21.196238],
[101.696126, 21.197242],
[101.697613, 21.197991],
[101.699459, 21.199011],
[101.700484, 21.199712],
[101.701407, 21.200891],
[101.702381, 21.203218],
[101.703116, 21.205305],
[101.704022, 21.2076],
[101.704125, 21.208858],
[101.704398, 21.21128],
[101.70462, 21.214674],
[101.70527, 21.216825],
[101.706056, 21.218928],
[101.7065, 21.220474],
[101.7065, 21.221414],
[101.706056, 21.222832],
[101.704672, 21.224648],
[101.703763, 21.226042],
[101.703695, 21.226902],
[101.703883, 21.228336],
[101.704823, 21.230312],
[101.706019, 21.233387],
[101.706822, 21.235346],
[101.707609, 21.237146],
[101.708378, 21.239106],
[101.708839, 21.240349],
[101.70901, 21.241416],
[101.709181, 21.243216],
[101.709267, 21.24551],
[101.70942, 21.246848],
[101.710344, 21.24865],
[101.711438, 21.25045],
[101.712515, 21.252282],
[101.714053, 21.254444],
[101.715574, 21.257184],
[101.717044, 21.259462],
[101.717745, 21.260864],
[101.71795, 21.26174],
[101.717523, 21.262918],
[101.716788, 21.264001],
[101.714529, 21.26617],
[101.713298, 21.267062],
[101.709145, 21.268272],
[101.707949, 21.269403],
[101.70718, 21.270964],
[101.706308, 21.272302],
[101.703898, 21.274325],
[101.701727, 21.276061],
[101.700167, 21.277254],
[101.698373, 21.27891],
[101.697604, 21.280152],
[101.69733, 21.281665],
[101.697484, 21.28278],
[101.69827, 21.28579],
[101.698665, 21.287847],
[101.699608, 21.292123],
[101.700444, 21.295588],
[101.700855, 21.298425],
[101.700658, 21.300008],
[101.699817, 21.301908],
[101.698386, 21.303808],
[101.696794, 21.305474],
[101.695345, 21.307241],
[101.694791, 21.309124],
[101.695095, 21.311207]
]
}
},
// 恐龙山服务区 1179
{
"type": "Feature",
"properties": {
SERVERPART_ID: 1179
},
"geometry": {
"type": "LineString",
"coordinates": [
[102.011307, 24.977835],
[102.013158, 24.977688],
[102.015195, 24.977604],
[102.016699, 24.977646],
[102.01781, 24.977918],
[102.019059, 24.978632],
[102.020772, 24.979429],
[102.022253, 24.979953],
[102.02378, 24.980247],
[102.025423, 24.980394],
[102.026857, 24.980289],
[102.028246, 24.979974],
[102.029704, 24.979513],
[102.031162, 24.978988],
[102.033314, 24.978275],
[102.035072, 24.977939],
[102.037363, 24.977604],
[102.040024, 24.977184],
[102.043912, 24.975716],
[102.047522, 24.974457],
[102.0509, 24.974017],
[102.053098, 24.973492],
[102.055135, 24.971856],
[102.056176, 24.970682],
[102.05849, 24.969402],
[102.061938, 24.967996],
[102.063954, 24.967112],
[102.068027, 24.966588],
[102.071428, 24.966126],
[102.07358, 24.965979],
[102.076496, 24.966944],
[102.079042, 24.967763],
[102.081309, 24.968266],
[102.083299, 24.968056],
[102.085194, 24.967322],
[102.086628, 24.966588],
[102.088965, 24.965476],
[102.091835, 24.964238],
[102.094241, 24.962812],
[102.096231, 24.960882],
[102.098175, 24.9587],
[102.099425, 24.957339],
[102.100906, 24.956563],
[102.102942, 24.956206],
[102.105094, 24.955828],
[102.106344, 24.955619],
[102.107639, 24.954884],
[102.108449, 24.954129],
[102.109082, 24.953028],
[102.109665, 24.95156],
[102.11048, 24.949363],
[102.110966, 24.947757],
[102.110266, 24.945761],
[102.109216, 24.943675],
[102.109116, 24.941861]
]
}
},
// 读书铺服务区 1212
{
"type": "Feature",
"properties": {
SERVERPART_ID: 1212
},
"geometry": {
"type": "LineString",
"coordinates": [
[102.501549, 24.940216],
[102.502739, 24.939469],
[102.503906, 24.93865],
[102.505038, 24.937882],
[102.506331, 24.937301],
[102.508058, 24.937063],
[102.510598, 24.937104],
[102.512748, 24.936917],
[102.515345, 24.936461],
[102.517976, 24.936191],
[102.519751, 24.936274],
[102.522417, 24.936627],
[102.526695, 24.937467],
[102.531076, 24.938266],
[102.533501, 24.938795],
[102.535526, 24.939272],
[102.537482, 24.94006],
[102.540537, 24.941232],
[102.543282, 24.942303],
[102.545181, 24.943102],
[102.546622, 24.944087],
[102.548178, 24.945539],
[102.549425, 24.947105],
[102.550363, 24.948205],
[102.551621, 24.949076],
[102.553228, 24.94974],
[102.556397, 24.950487],
[102.559863, 24.951306],
[102.562391, 24.952312],
[102.565549, 24.954127],
[102.568672, 24.955838],
[102.571291, 24.957197],
[102.57319, 24.957996],
[102.575238, 24.958544],
[102.577171, 24.958845],
[102.578818, 24.959104],
[102.580623, 24.959589],
[102.581824, 24.96019],
[102.58298, 24.96101],
[102.585336, 24.963229],
[102.587761, 24.965573],
[102.589754, 24.967244],
[102.592087, 24.968655],
[102.594587, 24.96963]
]
}
},
// -------------------------------------- 贵州 ---------------------------------------------
// 长耳营服务区 228
{
"type": "Feature",
"properties": {
SERVERPART_ID: 228
},
"geometry": {
"type": "LineString",
"coordinates": [
[105.142428, 25.489071],
[105.143063, 25.486016],
[105.14391, 25.483151],
[105.142852, 25.480095],
[105.141582, 25.477803],
[105.141794, 25.475128],
[105.143486, 25.472454],
[105.144544, 25.470162],
[105.144967, 25.467297],
[105.146025, 25.46424],
[105.147506, 25.461757],
[105.14793, 25.45851],
[105.148776, 25.455262],
[105.150045, 25.452587],
[105.149622, 25.449339],
[105.150045, 25.446283],
[105.150469, 25.443608],
[105.150469, 25.440551],
[105.150045, 25.437876],
[105.148141, 25.43501],
[105.146237, 25.432717],
[105.143698, 25.430233],
[105.141004, 25.428306],
[105.137819, 25.426077],
[105.134837, 25.423949],
[105.131805, 25.421992],
[105.129206, 25.419645],
[105.127906, 25.417297],
[105.12704, 25.414167],
[105.12704, 25.411232],
[105.125307, 25.408884],
[105.121841, 25.406341],
[105.117942, 25.403993],
[105.115343, 25.401058],
[105.111877, 25.399297],
[105.108628, 25.396166],
[105.107328, 25.393427],
[105.107112, 25.389904],
[105.107978, 25.386969],
[105.108628, 25.383838],
[105.109711, 25.38012],
[105.110578, 25.376989],
[105.110361, 25.37327],
[105.109061, 25.370139],
[105.107545, 25.366812]
]
}
},
// 天空之桥 232
{
"type": "Feature",
"properties": {
SERVERPART_ID: 232
},
"geometry": {
"type": "LineString",
"coordinates": [
[107.112167, 25.840124],
[107.108624, 25.83853],
[107.105081, 25.837135],
[107.101981, 25.835142],
[107.098438, 25.83275],
[107.095116, 25.830557],
[107.093566, 25.826969],
[107.092015, 25.823182],
[107.091794, 25.819793],
[107.091794, 25.816404],
[107.092458, 25.813414],
[107.093123, 25.810822],
[107.09268, 25.807433],
[107.091794, 25.804243],
[107.091351, 25.801053],
[107.091351, 25.797664],
[107.090465, 25.794673],
[107.088251, 25.791683],
[107.086036, 25.78909],
[107.082936, 25.786698],
[107.07895, 25.786099],
[107.075396, 25.784999],
[107.071758, 25.784306],
[107.06812, 25.783613],
[107.063951, 25.782975],
[107.060052, 25.78239],
[107.056587, 25.781609],
[107.052255, 25.780244],
[107.047923, 25.779269],
[107.045324, 25.777904],
[107.043591, 25.775368],
[107.042292, 25.773028],
[107.040992, 25.770297],
[107.038826, 25.767956],
[107.03796, 25.764835],
[107.037093, 25.7623],
[107.035144, 25.759374],
[107.033628, 25.757033],
[107.032762, 25.753912],
[107.033195, 25.75118],
[107.033628, 25.747864],
[107.031462, 25.744547],
[107.027563, 25.742792],
[107.023231, 25.741036]
]
}
},
]
},
// 城市道路名称数据
@ -7667,7 +8540,95 @@ const detailObj = {
"SERVERPART_NAME": "蟠龙山服务区",
"SERVERPART_ID": 470,
"SERVERPART_ADDRESS": "宿州市"
}
},
{
"EXPRESSWAY_NAME": "成都绕城高速",
"SERVERPART_NAME": "绕城东服务区",
"SERVERPART_ID": 548,
"SERVERPART_ADDRESS": "成都市"
},
{
"EXPRESSWAY_NAME": "成巴高速",
"SERVERPART_NAME": "金堂服务区",
"SERVERPART_ID": 540,
"SERVERPART_ADDRESS": "巴中市"
},
{
"EXPRESSWAY_NAME": "成巴高速",
"SERVERPART_NAME": "中江服务区",
"SERVERPART_ID": 544,
"SERVERPART_ADDRESS": "德阳市"
},
{
"EXPRESSWAY_NAME": "成渝环线高速",
"SERVERPART_NAME": "三台停车区",
"SERVERPART_ID": 549,
"SERVERPART_ADDRESS": "绵阳市"
},
{
"EXPRESSWAY_NAME": "成巴高速",
"SERVERPART_NAME": "盐亭服务区",
"SERVERPART_ID": 541,
"SERVERPART_ADDRESS": "绵阳市"
},
{
"EXPRESSWAY_NAME": "蓉丽高速",
"SERVERPART_NAME": "攀枝花西服务区",
"SERVERPART_ID": 572,
"SERVERPART_ADDRESS": "攀枝花市"
},
{
"EXPRESSWAY_NAME": "京昆高速",
"SERVERPART_NAME": "攀枝花服务区",
"SERVERPART_ID": 566,
"SERVERPART_ADDRESS": "攀枝花市"
},
{
"EXPRESSWAY_NAME": "瑞弄高速",
"SERVERPART_NAME": "贺思停车区",
"SERVERPART_ID": 1057,
"SERVERPART_ADDRESS": "德宏傣族景颇族自治州"
},
{
"EXPRESSWAY_NAME": "昆磨高速",
"SERVERPART_NAME": "尚勇停车区",
"SERVERPART_ID": 1168,
"SERVERPART_ADDRESS": "西双版纳傣族自治州"
},
{
"EXPRESSWAY_NAME": "纳兴高速",
"SERVERPART_NAME": "纳兴高速",
// 长耳营服务区
"SERVERPART_ID": 228,
"SERVERPART_ADDRESS": "黔西南布依族苗族自治州"
},
{
"EXPRESSWAY_NAME": "余安高速",
"SERVERPART_NAME": "余安高速",
// 天空之桥
"SERVERPART_ID": 232,
"SERVERPART_ADDRESS": "黔南布依族苗族自治州"
},
{
"EXPRESSWAY_NAME": "杭瑞高速",
"SERVERPART_NAME": "恐龙山服务区",
"SERVERPART_ID": 1179,
"SERVERPART_ADDRESS": "楚雄彝族自治州"
},
{
"EXPRESSWAY_NAME": "杭瑞高速",
"SERVERPART_NAME": "读书铺服务区",
"SERVERPART_ID": 1212,
"SERVERPART_ADDRESS": "昆明市"
},
],
cityCoordinate: {
@ -8470,7 +9431,7 @@ const detailObj = {
"儋州市": [109.57, 19.52],
"三沙市": [112.35, 16.83],
},
}
export default detailObj

View File

@ -0,0 +1,88 @@
.realBoxContent{
width: 100%;
height: 100%;
z-index: 10;
display: flex;
align-items: flex-start;
justify-content: space-between;
box-sizing: border-box;
padding: 16px;
border:1px solid #5F5F5F;
border-radius: 8px;
.leftBox{
width: 25%;
.realTime{
color: #fff;
font-size: 0.8rem;
}
.leftOther{
margin-top: 4px;
.label{
color: #fff;
font-size: 0.8rem;
}
.value{
color: #d1ab61;
font-size: 0.8rem;
display: inline-block;
width: 50px;
margin-right: 8px;
text-align: right;
transition: transform 0.3s ease-out;
}
.unit{
color: #d1ab61;
font-size: 0.8rem;
}
}
}
.middleBox{
width: 50%;
display: flex;
flex-direction: column;
align-items: center;
.realText{
font-size: 2rem;
color: #45aaf1;
.unit{
font-size: 20px;
}
}
.yearRevenue{
color: #fff;
font-size: 0.8rem;
margin-top: 2px;
.value{
color: #45aaf1;
}
}
}
.rightBox{
width: 25%;
display: flex;
flex-direction: column;
align-items: flex-end;
.rightItem{
.label{
color: #fff;
font-size: 0.8rem;
}
.value{
color: #d1ab61;
font-size: 0.8rem;
display: inline-block;
width: 50px;
margin-right: 8px;
text-align: right;
}
.unit{
color: #d1ab61;
font-size: 0.8rem;
}
}
}
}

View File

@ -0,0 +1,272 @@
<script setup lang="ts">
import "./realBox.less";
import moment from "moment";
import { nextTick, onMounted, reactive, ref, watch } from "vue";
import { formatNumberData, formatNumberTo } from "../../../options/serveice";
import { handlegetServerConnec } from "../../newService";
//
const baseInfoObj = ref<any>();
//
let realMoney = reactive<any>({});
// ID
let timer;
//
const startTimer = () => {
timer = setInterval(() => {
realMoney.realTime = moment().format("YYYY-MM-DD HH:mm:ss"); //
}, 1000);
};
//
const handleGetRealMoney = async (province_code: any) => {
let req = {
action_type: "getServerConnect",
province_code: province_code,
};
if (!req.province_code) {
return;
}
const data = await handlegetServerConnec(req);
let obj = data.CurrentData[0];
console.log("data321321", obj);
let yearReq = {
action_type: "getYearRevenue",
province_code: province_code,
};
if (!yearReq.province_code) {
return;
}
const yearData = await handlegetServerConnec(yearReq);
obj = {
...obj,
YEAR_REVENUE: yearData.YEAR_REVENUE,
};
nextTick(() => {
//
realMoney.realTime = moment().format("YYYY-MM-DD HH:mm:ss");
//
startTimer();
updateValues(obj, true);
//
startChangeValue();
//
//
// realMoney.TOTALPRICE = formatNumberTo(obj.TOTALPRICE);
// //
// realMoney.TOTALTICKET = formatNumber(obj.TOTALTICKET);
// //
// realMoney.CURSELLCOUNT = formatNumber(obj.CURSELLCOUNT);
// //
// //
// realMoney.personAvg = formatNumberTo(obj.TOTALPRICE / obj.TOTALTICKET);
// //
// realMoney.AvgPrice = formatNumberTo(obj.TOTALPRICE / obj.CURSELLCOUNT);
// startChangeValue();
});
};
// ID
let valueTimer;
//
const startChangeValue = () => {
valueTimer = setInterval(() => {
updateValues(realMoney, false);
}, 10000);
};
const handleAnimateValue = (
start: any,
end: any,
element: any,
duration = 3000
) => {
start = Number(start);
end = Number(end);
// element null undefined
if (!element) {
return;
}
let startTime: number | null = null;
const step = (timestamp: number) => {
if (!startTime) startTime = timestamp;
const progress: number = Math.min((timestamp - startTime) / duration, 1);
//
const value = start + (end - start) * progress;
//
const isInteger = value % 1 === 0;
// DOM
if (isInteger) {
element.textContent = formatNumberData(value);
} else {
element.textContent = formatNumberTo(value);
}
if (progress < 1) {
requestAnimationFrame(step);
}
};
requestAnimationFrame(step);
};
const updateValues = (obj?: any, haveObj?: boolean) => {
let newObj: any = {};
if (haveObj) {
newObj = obj;
newObj.personAvg = obj.TOTALPRICE / obj.TOTALTICKET;
newObj.AvgPrice = obj.TOTALPRICE / obj.CURSELLCOUNT;
} else {
let oldObj: any = JSON.parse(JSON.stringify(realMoney));
let num_1: number = Math.floor(Math.random() * 14) + 1; //
let num_2: number = Math.floor(Math.random() * 21) + 1; //
let num_3: number = Math.random() * 462 + 1; //
newObj.TOTALTICKET = oldObj.TOTALTICKET + num_1;
newObj.TOTALPRICE = oldObj.TOTALPRICE + num_3;
newObj.YEAR_REVENUE = oldObj.YEAR_REVENUE + num_3;
newObj.CURSELLCOUNT = oldObj.CURSELLCOUNT + num_2;
newObj.personAvg =
(oldObj.TOTALPRICE + num_3) / (oldObj.TOTALTICKET + num_1);
newObj.AvgPrice =
(oldObj.TOTALPRICE + num_3) / (oldObj.CURSELLCOUNT + num_2);
}
//
//
const TOTALTICKETElement = document.querySelector(".TOTALTICKET");
//
const TOTALPRICEElement = document.querySelector(" .TOTALPRICE");
//
const YEAR_REVENUEElement = document.querySelector(".YEAR_REVENUE");
//
const personAvgElement = document.querySelector(".personAvg");
//
const CURSELLCOUNTElement = document.querySelector(".CURSELLCOUNT");
//
const AvgPriceElement = document.querySelector(".AvgPrice");
handleAnimateValue(
realMoney.TOTALTICKET || 0,
newObj?.TOTALTICKET || 0,
TOTALTICKETElement
);
handleAnimateValue(
realMoney.TOTALPRICE || 0,
newObj?.TOTALPRICE || 0,
TOTALPRICEElement
);
handleAnimateValue(
realMoney.YEAR_REVENUE || 0,
newObj?.YEAR_REVENUE || 0,
YEAR_REVENUEElement
);
handleAnimateValue(
realMoney.CURSELLCOUNT || 0,
newObj?.CURSELLCOUNT || 0,
CURSELLCOUNTElement
);
handleAnimateValue(
realMoney.personAvg || 0,
newObj.personAvg || 0,
personAvgElement
);
handleAnimateValue(
realMoney.AvgPrice || 0,
newObj.AvgPrice || 0,
AvgPriceElement
);
//
//
realMoney.TOTALTICKET = newObj.TOTALTICKET;
//
realMoney.TOTALPRICE = newObj.TOTALPRICE;
//
realMoney.YEAR_REVENUE = newObj.YEAR_REVENUE;
//
realMoney.personAvg = newObj.personAvg;
//
realMoney.CURSELLCOUNT = newObj.CURSELLCOUNT;
//
realMoney.AvgPrice = newObj.AvgPrice;
};
//
const props = defineProps<{
show: any;
}>();
watch(
() => props.show,
(newVal, oldVal) => {
console.log("realboxnewVal", newVal);
if (newVal) {
let saveData = localStorage.getItem("baseInfoObj");
if (saveData) {
baseInfoObj.value = JSON.parse(saveData);
}
handleGetRealMoney(baseInfoObj.value.ProvinceId);
}
},
{ deep: true }
);
defineExpose({
handleGetRealMoney: handleGetRealMoney,
});
</script>
<template>
<div class="realBoxContent">
<div class="leftBox">
<div class="realTime">{{ realMoney.realTime || "-" }}</div>
<div class="leftOther">
<span class="label">服务司乘</span>
<span class="value TOTALTICKET">{{
realMoney.TOTALTICKET || "-"
}}</span>
<span class="unit"></span>
</div>
</div>
<div class="middleBox">
<div class="realText TOTALPRICE">
{{ realMoney.TOTALPRICE || "-" }}<span class="unit"></span>
</div>
<div class="yearRevenue">
<span class="label">本年度累计营收额为</span>
<span class="value YEAR_REVENUE"
>{{ realMoney.YEAR_REVENUE || "-" }}<span class="unit"></span></span
>
</div>
</div>
<div class="rightBox">
<div class="rightItem">
<span class="label">人均消费</span>
<span class="value personAvg">{{ realMoney.personAvg || "-" }}</span>
<span class="unit"></span>
</div>
<div class="rightItem">
<span class="label">已售商品</span>
<span class="value CURSELLCOUNT">{{
realMoney.CURSELLCOUNT || "-"
}}</span>
<span class="unit"></span>
</div>
<div class="rightItem">
<span class="label">商品均价</span>
<span class="value AvgPrice">{{ realMoney.AvgPrice || "-" }}</span>
<span class="unit"></span>
</div>
</div>
</div>
</template>

View File

@ -0,0 +1,12 @@
.revenueRateMain{
.pageTitle{
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 16px;
color: rgba(255, 255, 255, 0.85);
line-height: 26px;
text-align: center;
font-style: normal;
margin-left: 4px;
}
}

View File

@ -0,0 +1,124 @@
<!-- 区域营收占比 -->
<script setup lang="ts">
import "./revenueRate.less";
import * as echarts from "echarts";
import { onMounted, ref, watch } from "vue";
import { handlegetServerConnec } from "../../newService";
let myChart = ref<any>();
//
const baseInfoObj = ref<any>();
onMounted(async () => {
myChart.value = echarts.init(document.getElementById("revenueRateContent"));
});
//
const handleGetData = async () => {
const req: any = {
action_type: "GetCurrentAmountByRegion",
province_code: baseInfoObj.value.ProvinceId || "3544",
};
const data = await handlegetServerConnec(req);
console.log("revenueRateContent", data);
console.log("props.SPREGIONTYPECOLOR", props.SPREGIONTYPECOLOR);
let list: any = data.CurrentData;
let res: any = [];
if (list && list.length > 0) {
let totalRevenue: number = 0;
list.forEach((item: any) => {
totalRevenue += item.TOTALPRICE;
});
list.forEach((item: any) => {
res.push({
value: Number(((item.TOTALPRICE / totalRevenue) * 100).toFixed(2)),
name: item.TYPE_NAME,
itemStyle: { color: props.SPREGIONTYPECOLOR[item.REGION_ID] },
});
});
}
console.log("res", res);
myChart.value.setOption({
title: {
// text: "",
left: "center",
textStyle: {
color: "#fff", //
fontSize: 24, //
fontWeight: "bold", //
},
},
tooltip: {
trigger: "item",
},
legend: {
orient: "vertical",
right: 1,
padding: [120, 0, 0, 0],
textStyle: {
color: "#ffffff", //
fontSize: 14, //
},
},
series: [
{
name: "",
type: "pie",
radius: "50%",
center: ["30%", "50%"],
data: res,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)",
},
},
label: {
show: true, //
position: "inside", //
color: "#fff", //
formatter: "{c}%", //
},
labelLine: false,
},
],
});
};
//
const props = defineProps<{
SPREGIONTYPECOLOR: any;
show: any;
}>();
watch(
() => props.show,
(newVal, oldVal) => {
console.log("realboxnewVal", newVal);
if (newVal) {
let saveData = localStorage.getItem("baseInfoObj");
if (saveData) {
baseInfoObj.value = JSON.parse(saveData);
}
handleGetData();
}
},
{ deep: true }
);
defineExpose({
handleGetData: handleGetData,
});
</script>
<template>
<div class="revenueRateMain">
<div class="pageTitle">区域营收占比</div>
<div
class="revenueRateContent"
id="revenueRateContent"
style="width: 360px; height: 360px"
></div>
</div>
</template>

View File

@ -1,6 +1,6 @@
.rightDetailBox{
width: 100%;
height: 100vh;
height: calc(100vh - 20px);
.tabTop{
width: 100%;
box-sizing: border-box;
@ -24,9 +24,426 @@
}
}
.detailContent{
width: 100%;
max-height: calc(100vh - 70px);
box-sizing: border-box;
padding: 0 16px 0 0;
.projectBox{
width: 100%;
max-height: calc(100vh - 70px);
.projectTab{
width: 100%;
margin-bottom: 16px;
.el-radio-group{
margin-bottom: 0!important;
}
}
.projectList{
width: 100%;
height: calc(100vh - 140px);
overflow-y: auto;
scrollbar-width: none;
.projectItem{
width: 100%;
box-sizing: border-box;
border-radius: 8px;
background: #fff;
padding: 16px;
margin-bottom: 16px;
cursor: pointer;
display: flex;
.projectItemLeft{
width: 88px;
.leftBrandIcon{
width: 100%;
height: 88px;
}
}
.projectItemRight{
margin-left: 12px;
width: calc(100% - 100px);
.rightTitle{
font-size: 16px;
font-weight: 600;
}
.typeLists{
display: flex;
margin-top: 4px;
.typeItem{
display: inline-block;
padding: 1px 8px;
border-radius: 2px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
line-height: 22px;
margin-right: 8px;
}
}
.topRight{
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
margin-top: 20px;
.dailyItem{
display: flex;
align-items: center;
.itemIcon{
width: 26px;
height: 26px;
margin-right: 8px;
}
.itemLabel{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0,0,0,0.45);
}
.itemValue{
font-size: 18px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: rgba(0,0,0,0.85);
margin-left: 6px;
}
}
}
}
}
.selectProjectItem{
background: linear-gradient(45deg, #c6e8fc 0%, #bac4ff 100%)!important;
}
}
}
.detailServerPart{
width: 100%;
max-height: calc(100vh - 70px);
overflow-y: auto;
scrollbar-width: none;
.serverPartImg{
width: 100%;
height: 300px;
display: flex;
justify-content: center;
align-items: center;
.serverImg{
width: 100%;
height: 100%;
}
.defaultImg{
width: 250px;
height: 250px;
}
}
.serviceTypeTabs{
width: 100%;
height: 86px;
background: #F7FAFF;
border-radius: 4px;
margin-top: 16px;
display: flex;
.serviceTypeItem{
width: 25%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.itemIcon{
width: 30px;
height: 30px;
margin-bottom: 8px;
}
.itemText{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0,0,0,0.65);
line-height: 18px;
}
}
}
.detailList{
margin-top: 16px;
.detailItem{
display: flex;
align-items: flex-start;
margin-bottom: 8px;
.detailItemLeft{
width: 100px;
display: flex;
align-items: center;
.itemLeftIcon{
width: 16px;
height: 16px;
margin-right: 4px;
}
.itemLeftLabel{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #fff;
line-height: 22px;
}
}
.detailItemRight{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #fff;
line-height: 22px;
}
}
}
.areaList{
width: 100%;
.areaItem{
.areaItemTop{
display: flex;
align-items: center;
.itemTopIcon{
width: 24px;
height: 24px;
margin-right: 8px;
}
.itemTitle{
font-size: 14px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #fff;
line-height: 22px;
}
.typeItem{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
line-height: 18px;
padding: 0 6px;
}
}
.itemList{
margin-top: 12px;
.contentItem{
width: 33.3%;
display: inline-block;
margin-bottom: 20px;
.contentItemBox{
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
.contentItemIcon{
width: 30px;
height: 30px;
}
.contentItemText{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #fff;
line-height: 18px;
.number{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #fff;
line-height: 18px;
margin-left: 4px;
}
}
}
.noContentItemBox{
opacity: 0.4!important;
.contentItemText{
text-decoration: line-through!important;
color: #f3f3f3!important;
.number{
color: #f3f3f3!important;
}
}
}
}
}
}
}
}
}
.detailTop{
width: 100%;
box-sizing: border-box;
padding-top: 16px;
display: flex;
.backIconBox{
width: 25px;
.backIcon{
width: 25px;
height: 25px;
cursor: pointer;
}
}
.currentItem{
width: calc(100% - 40px);
margin-left: 15px;
box-sizing: border-box;
border-radius: 8px;
background: linear-gradient(45deg, #F7FCFF 0%, #F8F9FF 100%);
padding: 16px;
margin-bottom: 16px;
display: flex;
.projectItemLeft{
width: 88px;
.leftBrandIcon{
width: 100%;
height: 88px;
}
}
.projectItemRight{
margin-left: 12px;
width: calc(100% - 100px);
.rightTitle{
font-size: 16px;
font-weight: 600;
}
.typeLists{
display: flex;
margin-top: 4px;
.typeItem{
display: inline-block;
padding: 1px 8px;
border-radius: 2px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
line-height: 22px;
margin-right: 8px;
}
}
.topRight{
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
margin-top: 20px;
.dailyItem{
display: flex;
align-items: center;
.itemIcon{
width: 26px;
height: 26px;
margin-right: 8px;
}
.itemLabel{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0,0,0,0.45);
}
.itemValue{
font-size: 18px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: rgba(0,0,0,0.85);
margin-left: 6px;
}
}
}
}
}
}
.loadingBox{
.el-loading-mask{
background-color: transparent!important;
}
}
.rightDetailPrintWordBox{
width: 100%;
max-height: calc(100vh - 200px);
overflow-y: auto;
scrollbar-width: none;
color: #fff;
.title{
display: block;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #fff;
line-height: 24px;
text-align: left;
font-style: normal;
}
.div{
display: block;
margin-bottom: 4px;
}
.bigDiv{
display: block;
margin-bottom: 24px;
}
.style1{
display: inline-block;
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 14px;
color: #1A5D2B;
line-height: 22px;
text-align: center;
font-style: normal;
background: #E1F3E6;
padding: 2px 8px;
border-radius: 2px;
margin-bottom: 8px;
}
.style2{
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #2F6DFF;
line-height: 22px;
text-align: left;
font-style: normal;
cursor: pointer;
}
.style3{
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #FE7628;
line-height: 22px;
text-align: left;
font-style: normal;
}
.style4{
font-family: DINAlternate, DINAlternate;
font-weight: bold;
font-size: 14px;
color: #2f66c5;
line-height: 28px;
text-align: left;
font-style: normal;
}
.style5{
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #788395;
line-height: 22px;
text-align: left;
font-style: normal;
}
}
.el-tabs{
box-sizing: border-box;
padding-top: 8px;

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,9 @@ import selectEarlyWarning from "@/assets/ai/selectEarlyWarning.png";
import selectComeForm from "@/assets/ai/selectComeForm.png";
import selectBusinessTrade from "@/assets/ai/selectBusinessTrade.png";
import selectDeleteIcon from "@/assets/ai/selectDeleteIcon.png";
import busyIcon from "@/assets/ai/busyIcon.png";
import selectBusy from "@/assets/ai/selectBusy.png";
import { nextTick } from "process";
import { getFieldEnumTree } from "../service";
import { ElMessage } from "element-plus";
@ -41,6 +44,7 @@ const filterList: any = reactive<any>([
src: weaearlyWarningther,
selectScr: selectEarlyWarning,
},
{ label: "即时指挥", value: "8", src: busyIcon, selectScr: selectBusy },
{ label: "清空", value: "7", src: deleteIcon, selectScr: selectDeleteIcon },
]);
//
@ -55,6 +59,12 @@ let businessTradeList = reactive([]);
let selectBusinessTradeList = reactive<any>([]);
//
let selectBusinessTradeIdsObj = ref<any>();
//
const baseInfoObj = ref<any>();
let saveData = localStorage.getItem("baseInfoObj");
if (saveData) {
baseInfoObj.value = JSON.parse(saveData);
}
//
const showFilterList = () => {

File diff suppressed because it is too large Load Diff

View File

@ -30,10 +30,73 @@
.serverpartDetail{
width: 25%;
height: calc(100vh - 20px);
position: absolute;
top: 0;
right: 0;
z-index: 10;
}
.realBox{
width: 45%;
height: 100px;
position: absolute;
top: 16px;
left: 50%;
transform: translateX(-50%);
z-index: 10;
}
.revenueRate{
width: 400px;
height: 400px;
border:1px solid #5F5F5F;
position: absolute;
bottom: 16px;
left: 16px;
z-index: 10;
border-radius: 8px;
box-sizing: border-box;
padding: 16px;
}
.BusyRanking{
width: 400px;
height: 400px;
border:1px solid #5F5F5F;
position: absolute;
bottom: 16px;
right: 16px;
z-index: 10;
border-radius: 8px;
box-sizing: border-box;
padding: 16px;
}
.areaList{
box-sizing: border-box;
padding: 16px;
border:1px solid #5F5F5F;
border-radius: 8px;
z-index: 10;
position: absolute;
bottom: 16px;
left: 50%;
transform: translateX(-50%);
display: flex;
flex-wrap: nowrap;
.areaItem{
margin-right: 16px;
.color{
width: 16px;
height: 16px;
border-radius: 50%;
margin-right: 8px;
display: inline-block;
}
.text{
color: #fff;
}
}
}
}

View File

@ -2,18 +2,23 @@
import "./index.less";
// @ts-ignore
import anhuiLine from "./component/anhuiLine";
// @ts-ignore
import yunanLine from "./component/yunanLine";
import { HeatmapLayer, LineLayer, Marker, PointLayer, Scene } from "@antv/l7";
import { GaodeMap } from "@antv/l7-maps";
import { onMounted, reactive, ref } from "vue";
import { onMounted, reactive, ref, watch } from "vue";
import {
getFieldEnumTree,
getFieldGetFieEnumList,
handleGetBaiDuTrafficInfo,
handleGetDecryptString,
handleGetMapConfigByProvinceCode,
handleGetMonthlySPINCAnalysis,
handleGetPeriodWarningList,
handleGetProvinceVehicleTreeList,
handleGetServerpartList,
} from "./service";
import { handlegetServerConnec } from "../newService";
import { ElLoading, ElMessage } from "element-plus";
// @ts-ignore
import RobotDialogueBox from "./component/RobotDialogueBox.vue";
@ -23,14 +28,49 @@ import RightSearchBox from "./component/RightSearchBox.vue";
import RightDetail from "./component/rightDetail.vue";
// @ts-ignore
import detailText from "./component/detailText";
// @ts-ignore
import RealBox from "./component/realBox.vue";
// @ts-ignore
import RevenueRate from "./component/RevenueRate.vue";
// @ts-ignore
import BusyRanking from "./component/BusyRanking.vue";
import { nextTick } from "process";
import moment from "moment";
import { log } from "console";
import { useRoute } from "vue-router";
import {
formatNumber,
formatNumberData,
formatNumberTo,
parseThousandSeparatedNumber,
} from "../../options/serveice";
//
let colorList1 = [
"#4F83FA",
"#A39BFF",
"#63B6FC",
"#88DFB2",
"#88C3BF",
"#d9dcf3",
];
//
let colorList2 = [
"#627FFF",
"#F6976F",
"#FFDC84",
"#63B6FC",
"#73D6A3",
"#B4E6E3",
];
//
let mapCenter: any = {
"340000": [117.455467, 31.856928], //
"510000": [104.07, 30.67], //
"520000": [106.71, 26.58], //
"530000": [102.8329, 24.88], //
};
//
const scene = ref<any>();
//
@ -39,6 +79,12 @@ const RobotDialogueBoxRef = ref();
const RightSearchBoxRef = ref();
//
const RightDetailRef = ref();
//
const RealBoxRef = ref();
//
const revenueRateRef = ref();
//
const BusyRankingRef = ref();
//
const hoverPoint = ref<any>();
//
@ -57,14 +103,55 @@ let nowSelectId = ref<string>("");
let allServerPartIdList = reactive<any>([]);
//
let showRightDetail = ref<boolean>(false);
//
let baseInfoObj = ref<any>();
//
let realMoney = reactive<any>({});
//
let SPREGIONTYPECOLOR = ref<any>();
//
let isShowAi = ref<boolean>(false);
//
let isShowDetail = ref<boolean>(false);
//
let isShowRealData = ref<boolean>(false);
//
let SPREGIONTYPECOLORList = reactive<any>([]);
const route = useRoute();
console.log("route", route);
const pageType = ref(route.params.id); // id
// if (route.params.id === "16684D3D52B39939") {
// baseInfoObj.value.ProvinceCode = "340000";
// } else if (route.params.id === "FACB05FA9FFFC126") {
// baseInfoObj.value.ProvinceCode = "530000";
// }
// console.log("pageType", pageType);
onMounted(async () => {
const loadingInstance = ElLoading.service({
fullscreen: true,
background: "#00000080",
text: "数据加载中...",
});
//
const data = await handleGetMapConfigByProvinceCode({
ProvinceCode: pageType.value,
});
baseInfoObj.value = data;
localStorage.setItem("baseInfoObj", JSON.stringify(data));
scene.value = new Scene({
id: "map",
map: new GaodeMap({
pitch: 0,
mapStyle: "amap://styles/dark",
center: [117.455467, 31.856928],
center: mapCenter[baseInfoObj.value.ProvinceCode],
// baseInfoObj.value.ProvinceCode === "340000"
// ? [117.455467, 31.856928]
// : baseInfoObj.value.ProvinceCode === "530000"
// ? [102.8329, 24.88]
// : [117.455467, 31.856928],
zoom: 6,
minZoom: 5.5,
token: "edb93fe4f1b3d313128b82082c5b3877",
@ -74,11 +161,6 @@ onMounted(async () => {
}),
});
const loadingInstance = ElLoading.service({
fullscreen: true,
background: "#00000080",
text: "数据加载中...",
});
//
await handleGetEnumeration();
console.log("ServerpartTypeObj", ServerpartTypeObj);
@ -91,14 +173,30 @@ onMounted(async () => {
handleGetAnHuiBoundary();
hoverPoint.value = handlePointHover();
loadingInstance.close();
});
//
const handleSmallBoxData = async () => {
revenueRateRef.value.handleGetData();
await BusyRankingRef.value.handleGetBusyRank();
};
//
const handleGetAnHuiBoundary = () => {
const blurLine = new LineLayer();
blurLine.name = "blurLine";
let list: any = anhuiLine;
// 线
let provinceObj: any = anhuiLine;
let list: any = provinceObj[baseInfoObj.value.ProvinceCode];
console.log("handleGetAnHuiBoundary", list);
// let list: any =
// baseInfoObj.value.ProvinceCode === "340000"
// ? anhuiLine
// : baseInfoObj.value.ProvinceCode === "530000"
// ? yunanLine
// : [];
blurLine.source(list).size(1).style({
opacity: 0.6,
sourceColor: "#b6cad7",
@ -111,22 +209,50 @@ const handleGetAnHuiBoundary = () => {
//
const handleGetAllService = async () => {
const req: any = {
Province_Code: "340000",
Province_Code: baseInfoObj.value.ProvinceCode || "340000",
ShowWeather: true, //
};
const data = await handleGetServerpartList(req);
console.log("data", data);
console.log("data312312321321321", data);
if (data && data.length > 0) {
let res: any = [];
let allId: any = [];
let SPREGIONTYPETYPELIST: any = {};
//
let SPREGIONTYPETYPEObj: any = {};
//
let SPREGIONTYPECOLORLIST: any = [];
let typeID: number = 0;
data.forEach((item: any) => {
if (item.SPREGIONTYPE_ID !== 89 && item.SPREGIONTYPE_ID) {
res.push(item);
allId.push(item.SERVERPART_ID.toString());
if (item.SPREGIONTYPE_ID) {
if (
SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID] ||
SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID] === 0
) {
item.SPREGIONTYPETYPE = SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID];
} else {
SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID] = typeID;
item.SPREGIONTYPETYPE = typeID;
SPREGIONTYPETYPEObj[item.SPREGIONTYPE_ID] = colorList1[typeID];
SPREGIONTYPECOLORLIST.push({
label: item.SPREGIONTYPE_NAME,
value: colorList1[typeID],
});
typeID += 1;
}
if (item.SPREGIONTYPE_ID !== 89 && item.SPREGIONTYPE_ID) {
res.push(item);
allId.push(item.SERVERPART_ID.toString());
}
}
});
defaultServerPartList = res;
allServerPartIdList = allId;
console.log("SPREGIONTYPECOLORLIST", SPREGIONTYPECOLORLIST);
SPREGIONTYPECOLORList = SPREGIONTYPECOLORLIST;
SPREGIONTYPECOLOR.value = SPREGIONTYPETYPEObj;
}
return data;
};
@ -153,20 +279,21 @@ const handleAllServiceMarkedPoint = async () => {
});
pointLayer.shape("circle");
pointLayer.size(8);
pointLayer.color("SPREGIONTYPE_ID", (value) => {
return Number(value || 0) === 65 ||
Number(value || 0) === 45 ||
Number(value || 0) === 47
? "#34B6B7"
: "#CEF8D6";
pointLayer.color("SPREGIONTYPETYPE", (value) => {
return colorList1[value];
// return Number(value || 0) === 65 ||
// Number(value || 0) === 45 ||
// Number(value || 0) === 47
// ? "#34B6B7"
// : "#CEF8D6";
});
pointLayer.style({
opacity: 0.6,
});
pointLayer.on("mousemove", (ev: any) => {
const detail: any = ev.feature;
hoverPoint.value.style.top = `${ev.y}px`;
hoverPoint.value.style.left = `${ev.x}px`;
hoverPoint.value.style.top = `${ev.y + 5}px`;
hoverPoint.value.style.left = `${ev.x + 5}px`;
hoverPoint.value.style.display = "block";
hoverPoint.value.innerHTML = `<div>
<div>${detail?.SERVERPART_NAME || ""}${
@ -287,6 +414,19 @@ const handleAllServiceMarkedPoint = async () => {
</div>`
: ""
}
${
//
nowSelectId.value && nowSelectId.value.indexOf("8") !== -1
? `<div>对客销售:${
detail.AVR_TICKET > 30
? "繁忙"
: detail.AVR_TICKET > 15 && detail.AVR_TICKET < 30
? "良好"
: "空闲"
}
</div>`
: ""
}
</div>`;
});
@ -314,7 +454,7 @@ const handleAllServiceMarkedPoint = async () => {
const handleClickPointLayer = async (detail: any) => {
//
currentServerPartDetail.value = detail;
//
//
handleAddSelect(detail);
//
handleDeleteNoDefault("");
@ -322,8 +462,9 @@ const handleClickPointLayer = async (detail: any) => {
let nowSelect: string = RightSearchBoxRef.value.selectFilterList;
await handleChangeMapShow(nowSelect);
//
// showRightDetail.value = true;
showRightDetail.value = true;
//
isShowDetail.value = true;
// //
// let selectTab: any = RobotDialogueBoxRef.value.selectTab;
// RobotDialogueBoxRef.value.handleClickTab(selectTab);
@ -331,6 +472,18 @@ const handleClickPointLayer = async (detail: any) => {
//
const handleAddSelect = (detail: any) => {
let allLayers: any = scene.value.getLayers();
//
let isWarning: boolean = false;
if (allLayers && allLayers.length > 0) {
allLayers.forEach((item: any) => {
if (item.name === "warningLayer") {
isWarning = true;
}
});
}
let current: any = handleGetThisLayer("lightPointLayer");
if (current) {
@ -353,6 +506,11 @@ const handleAddSelect = (detail: any) => {
},
});
scene.value.addLayer(lightPointLayer);
if (isWarning) {
console.log("detailisWarning", detail);
RightDetailRef.value.handleScrollProjectList(detail.warningShop);
}
};
//
@ -377,12 +535,13 @@ const handleChangeToDefault = () => {
});
//
let current: any = handleGetThisLayer("pointLayer");
current.color("SPREGIONTYPE_ID", (value: number) => {
return Number(value || 0) === 65 ||
Number(value || 0) === 45 ||
Number(value || 0) === 47
? "#34B6B7"
: "#CEF8D6";
current.color("SPREGIONTYPETYPE", (value: number) => {
return colorList1[value];
// return Number(value || 0) === 65 ||
// Number(value || 0) === 45 ||
// Number(value || 0) === 47
// ? "#34B6B7"
// : "#CEF8D6";
});
current.render();
};
@ -490,7 +649,6 @@ const handleSelectedServerpart = (id: any) => {
const handleGetThisLayer = (name: string) => {
let res: any;
let allLayers: any = scene.value.getLayers();
console.log("allLayers", allLayers);
if (allLayers && allLayers.length > 0) {
allLayers.forEach((item: any) => {
if (item.name === name) {
@ -663,7 +821,6 @@ const hanleGetRealTrafficData = async (id: any) => {
onceRoadList.features = list;
let allLayers: any = scene.value.getLayers();
console.log("allLayers", allLayers);
let haveList: any = allLayers.filter(
(item: any) => item.name === "lineLayerOnce"
@ -760,7 +917,6 @@ const handleGetRealTraffic = async () => {
//
const handleDeleteLayer = (name: string) => {
let allLayers: any = scene.value.getLayers();
console.log("allLayers", allLayers);
if (allLayers && allLayers.length > 0) {
allLayers.forEach((item: any) => {
if (item.name === name) {
@ -792,6 +948,9 @@ const handleDeleteNoDefault = (nowSelect: string) => {
if (nowSelect.indexOf("6") === -1) {
handleDeleteLayer("warningLayer");
}
if (nowSelect.indexOf("8") === -1) {
isShowRealData.value = false;
}
} else {
console.log("22222", defaultServerPartList);
scene.value.removeAllMarkers();
@ -801,6 +960,14 @@ const handleDeleteNoDefault = (nowSelect: string) => {
handleDeleteLayer("enterLine");
handleDeleteLayer("warningLayer");
handleDeleteLayer("BUSINESS_TRADELayer");
// handleChangeToDefault();
isShowRealData.value = false;
//
let current: any = handleGetThisLayer("pointLayer");
current.color("SPREGIONTYPETYPE", (value: number) => {
return colorList1[value];
});
current.render();
}
};
@ -824,7 +991,7 @@ const handleUpdateMapPoint = () => {
const handleGetServerpartRevenue = async () => {
const revenueReq: any = {
calcType: 2,
pushProvinceCode: 340000,
pushProvinceCode: baseInfoObj.value.ProvinceCode || "340000",
curYear: moment().format("YYYY"),
compareYear: moment().subtract(1, "year").format("YYYY"),
StatisticsDate: moment().format("YYYY-MM-DD"),
@ -1340,6 +1507,75 @@ const handleChangeMapShow = async (nowSelect: string) => {
nowSelectId.value = "";
handleDeleteNoDefault(nowSelectId.value);
}
if (nowSelect.indexOf("8") !== -1) {
isShowRealData.value = true;
// nextTick(async () => {
// if (baseInfoObj?.value.ShowRevenueGraphic) {
// //
// await RealBoxRef.value.handleGetRealMoney(
// baseInfoObj.value.ProvinceId
// );
// //
// await handleSmallBoxData();
// }
// });
nextTick(async () => {
//
handleServiceBusy();
});
}
}
};
//
const handleServiceBusy = async () => {
//
if (baseInfoObj?.value.ShowRevenueGraphic) {
let list: any = BusyRankingRef.value.busyList;
// if (list && list.length > 0) {
// } else {
// const loadingInstance = ElLoading.service({
// fullscreen: true,
// background: "#00000080",
// text: "...",
// });
// list = await revenueRateRef.value.handleGetBusyRank();
// loadingInstance.close();
// }
console.log("listhandleServiceBusy", list);
let obj: any = {};
if (list && list.length > 0) {
list.forEach((item: any) => {
obj[item.SERVERPART_ID] = item.AVR_TICKET;
});
}
if (defaultServerPartList && defaultServerPartList.length > 0) {
defaultServerPartList.forEach((item: any) => {
if (obj[item.SERVERPART_ID] || obj[item.SERVERPART_ID] === 0) {
item.AVR_TICKET = obj[item.SERVERPART_ID];
}
});
}
console.log("defaultServerPartList", defaultServerPartList);
//
let current: any = handleGetThisLayer("pointLayer");
console.log("current", current);
current.setData(defaultServerPartList);
current.color("AVR_TICKET", (value: number) => {
return value >= 30
? "#E64218"
: value > 15 && value < 30
? "#EFE271"
: "#1BAAE6";
// return value >= 30
// ? "#f53232"
// : value > 15 && value < 30
// ? "#0fdb5c"
// : "#2876EB";
});
current.render();
}
};
@ -1370,8 +1606,30 @@ const handleAreaInspection = async (i: number) => {
//
let otherObj: any = {
businessText: answerData,
merchantText: merchantData,
businessText: answerData
.replace(/"/g, "'")
.replace(/{{(.*?)}}/g, (_: any, expression: any) => {
try {
// 使 eval JavaScript
// eval 使
return eval(expression.trim()); //
} catch (error) {
console.error("错误:", error);
return ""; //
}
}),
merchantText: merchantData
.replace(/"/g, "'")
.replace(/{{(.*?)}}/g, (_: any, expression: any) => {
try {
// 使 eval JavaScript
// eval 使
return eval(expression.trim()); //
} catch (error) {
console.error("错误:", error);
return ""; //
}
}),
};
nextTick(async () => {
@ -1407,11 +1665,21 @@ const handleHiddenSuspended = () => {
const handleCloseRightDetail = () => {
showRightDetail.value = false;
};
//
const handleShowAi = (value: boolean) => {
isShowAi.value = value;
};
//
const handleShowDetail = (value: boolean) => {
isShowDetail.value = value;
};
</script>
<template>
<div id="map" class="mapBox">
<div class="RobotBox">
<div class="RobotBox" v-if="baseInfoObj?.ShowAIQA">
<RobotDialogueBox
ref="RobotDialogueBoxRef"
@handleLightServerpart="handleLightServerpart"
@ -1419,6 +1687,7 @@ const handleCloseRightDetail = () => {
@handleWarningMap="handleWarningMap"
@handleAreaInspection="handleAreaInspection"
@handleHiddenSuspended="handleHiddenSuspended"
@handleShowAi="handleShowAi"
:currentServerPartDetail="currentServerPartDetail"
:allServerPartIdList="allServerPartIdList"
/>
@ -1436,11 +1705,103 @@ const handleCloseRightDetail = () => {
:currentServerPartDetail="currentServerPartDetail"
/>
</div>
<div class="serverpartDetail" v-if="showRightDetail">
<div
class="serverpartDetail"
:style="{ right: showRightDetail ? '0' : '-25%' }"
>
<!-- v-if="showRightDetail" -->
<RightDetail
ref="RightDetailRef"
:currentServerPartDetail="currentServerPartDetail"
@handleCloseRightDetail="handleCloseRightDetail"
@handleShowDetail="handleShowDetail"
/>
</div>
<!-- 实时营收的box -->
<div
class="realBox"
v-show="
isShowAi || isShowDetail
? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true
: false
"
>
<!-- v-if="baseInfoObj?.ShowRevenueGraphic && isShowAi || isShowDetail" -->
<RealBox
ref="RealBoxRef"
:show="
isShowAi || isShowDetail
? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true
: false
"
/>
</div>
<!-- 片区图例 -->
<div
class="areaList"
v-if="SPREGIONTYPECOLORList && SPREGIONTYPECOLORList.length > 0"
>
<div
class="areaItem"
v-for="(item, index) in SPREGIONTYPECOLORList"
:key="index"
>
<span class="color" :style="{ background: item.value }"></span>
<span class="text">{{ item.label }}</span>
</div>
</div>
<!-- 区域营收占比 -->
<div
class="revenueRate"
v-show="
isShowAi || isShowDetail
? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true
: false
"
>
<RevenueRate
ref="revenueRateRef"
:SPREGIONTYPECOLOR="SPREGIONTYPECOLOR"
:show="
isShowAi || isShowDetail
? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true
: false
"
/>
</div>
<!-- 消费金额趋势图 -->
<div
class="BusyRanking"
v-show="
isShowAi || isShowDetail
? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true
: false
"
>
<BusyRanking
ref="BusyRankingRef"
:show="
isShowAi || isShowDetail
? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true
: false
"
@handleServiceBusy="handleServiceBusy"
/>
</div>
</div>

View File

@ -143,5 +143,58 @@ export async function handleGetBrandReceivables(params: any) {
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data;
}
export async function handleGetPeriodWarningListPOST(params: any) {
const data: any = await request.post('/BusinessProject/GetPeriodWarningList', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List;
}
export async function handleGetBusinessDate(params: any) {
const data: any = await request.get('/Revenue/GetBusinessDate', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data;
}
export async function handleGetAnnualSplit(params: any) {
const data: any = await request.get('/BusinessProject/GetAnnualSplit', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List;
}
export async function handleGetServerpartInfo(params: any) {
const data: any = await requestCode.get('/BaseInfo/GetServerpartInfo', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data;
}
// 解密
export async function handleGetDecryptString(params: any) {
const data: any = await requestCode.get('/Common/GetDecryptString', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data;
}
// 数据多一点的解密
export async function handleGetMapConfigByProvinceCode(params: any) {
const data: any = await requestCode.get('/Analysis/GetMapConfigByProvinceCode', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data;
}

View File

@ -0,0 +1,6 @@
import request from "../request/newRequest";
export async function handlegetServerConnec(params: any) {
const data: any = await request.get('', params)
return data
}

View File

@ -20,9 +20,41 @@ export const formatNumber = (num: number) => {
}
}
export const formatNumberData = (value: number): string => {
if (isNaN(value)) return ""; // 如果输入值不是数字,返回空字符串
// 判断是否有小数
const isInteger = value % 1 === 0;
// 添加千分号
let formattedValue = value.toLocaleString('en-US');
// 如果有小数,保留两位小数
if (!isInteger) {
formattedValue = parseFloat(value.toFixed(2)).toLocaleString('en-US');
}
return formattedValue;
};
// 把可能是带千分号的数字 变为数字
export const parseThousandSeparatedNumber = (str: string) => {
if (!str) return 0; // 如果字符串为空返回0
const cleaned = str.replace(/,/g, ""); // 移除千分号
return parseFloat(cleaned); // 转换为数字
};
if (!str) return 0; // 如果字符串为空返回0
const cleaned = str.replace(/,/g, ""); // 移除千分号
return parseFloat(cleaned); // 转换为数字
};
// 截取小数点2位 输出带千分号的
export const formatNumberTo = (num: number) => {
// 判断是否是数字
if (isNaN(num) || num === 0) {
return "0.00";
}
// 限制小数点后最多两位
let number: any = num.toFixed(2);
// 添加千分位
const [integer, decimal] = number.split('.');
const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ','); // 添加千分位
// 返回带千分位和保留两位小数的数字
return `${formattedInteger}.${decimal}`;
}

80
src/request/newRequest.ts Normal file
View File

@ -0,0 +1,80 @@
import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
import { notification } from 'antd';
import Cookies from 'js-cookie';
import moment from 'moment';
// 定义 HTTP 状态码及其描述
const codeMessage: Record<number, string> = {
200: '服务器成功返回请求的数据。',
201: '新建或修改数据成功。',
202: '一个请求已经进入后台排队(异步任务)。',
204: '删除数据成功。',
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
401: '用户没有权限(令牌、用户名、密码错误)。',
403: '用户得到授权,但是访问是被禁止的。',
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
406: '请求的格式不可得。',
410: '请求的资源被永久删除,且不会再得到的。',
422: '当创建一个对象时,发生一个验证错误。',
500: '服务器发生错误,请检查服务器。',
502: '网关错误。',
503: '服务不可用,服务器暂时过载或维护。',
504: '网关超时。',
};
// 错误处理
const errorHandler = (error: any): any => {
const { response } = error;
if (response && response.status) {
const errorText = codeMessage[response.status] || response.statusText;
const { status, url } = response;
notification.error({
message: `请求错误 ${status}: ${url}`,
description: errorText,
});
} else {
notification.error({
description: '您的网络异常,无法连接到服务器。',
message: '网络异常',
});
}
return Promise.reject(error);
};
// 创建 axios 实例
const instance = axios.create({
baseURL: 'http://cloud.eshangtech.com/MobileServicePlatform/Handler/handler_ajax.ashx', // 默认请求前缀
timeout: 60000, // 请求超时时间
headers: {
'Content-Type': 'text/plain',
},
});
// 请求拦截器
instance.interceptors.request.use(
(config: any) => {
return config;
},
errorHandler
);
// 响应拦截器
instance.interceptors.response.use(
(response: AxiosResponse) => {
// 每次响应,设置一个 tmp 的 Cookie
Cookies.set('tmp', moment().format());
return response.data; // 统一返回 data
},
errorHandler
);
// 封装的请求方法
const request = {
get: (url: string, params?: any) => instance.get(url, { params }),
post: (url: string, data?: any) => instance.post(url, data),
put: (url: string, data?: any) => instance.put(url, data),
delete: (url: string, params?: any) => instance.delete(url, { params }),
};
export default request;

View File

@ -1,15 +1,22 @@
import { createRouter, createWebHistory } from 'vue-router';
import { createRouter, createWebHashHistory } from 'vue-router';
import Map from '@/components/map/index.vue'; // 你的 Map 组件
const routes = [
{ path: '/', redirect: '/map' },
{ path: '/map', name: 'map', component: () => import('@/components/map/index.vue') }
// { path: '/', name: 'Home', component: Home },
// { path: '/about', name: 'About', component: () => import('../components/About.vue') },
// {
// path: '/:id',
// name: 'home',
// component: Map,
// },
{
path: '/map/:id',
name: 'map',
component: Map
},
];
const router = createRouter({
history: createWebHistory(),
history: createWebHashHistory('/aiMap/'),
routes,
});
export default router;
export default router;

View File

@ -1 +1 @@
{"root":["./src/main.ts","./src/shims-vue.d.ts","./src/vite-env.d.ts","./src/components/service.ts","./src/components/map/service.ts","./src/options/serveice.ts","./src/request/request.ts","./src/request/requestcode.ts","./src/request/requestconfig.ts","./src/router/index.ts","./src/stores/counter.ts","./src/app.vue","./src/components/robot.vue","./src/components/map/index.vue","./src/components/map/component/robotdialoguebox.vue","./src/components/map/component/rightdetail.vue","./src/components/map/component/rightsearchbox.vue"],"version":"5.6.3"}
{"root":["./src/main.ts","./src/shims-vue.d.ts","./src/vite-env.d.ts","./src/components/newservice.ts","./src/components/service.ts","./src/components/map/service.ts","./src/options/serveice.ts","./src/request/newrequest.ts","./src/request/request.ts","./src/request/requestcode.ts","./src/request/requestconfig.ts","./src/router/index.ts","./src/stores/counter.ts","./src/app.vue","./src/components/robot.vue","./src/components/map/index.vue","./src/components/map/component/busyranking.vue","./src/components/map/component/robotdialoguebox.vue","./src/components/map/component/realbox.vue","./src/components/map/component/revenuerate.vue","./src/components/map/component/rightdetail.vue","./src/components/map/component/rightsearchbox.vue"],"version":"5.6.3"}

View File

@ -1,11 +1,4 @@
/*
* @Author: cclu 1106109051@qq.com
* @Date: 2024-11-18 11:40:21
* @LastEditors: cclu 1106109051@qq.com
* @LastEditTime: 2024-11-21 10:43:14
* @FilePath: \aiRobot\vite.config.ts
* @Description: ,`customMade`, koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
@ -14,11 +7,11 @@ export default defineConfig({
plugins: [
vue(),
],
base: '/aiMap',
base: '/aiMap/', // 确保这里设置为你的子路径
build: {
outDir: 'dist', // 打包输出目录
assetsDir: 'assets', // 静态资源目录
rollupOptions: {
rollupOptions: {
input: '/index.html', // 指定入口文件
},
},