This commit is contained in:
ylj20011123 2025-11-21 09:38:07 +08:00
parent 5cd17869a5
commit 7b28725b13
5 changed files with 2839 additions and 1563 deletions

View File

@ -307,20 +307,17 @@ const handleSetRowKeyTable = (list: any) => {
subItem.rowKey = `${index + 1}-${subIndex + 1}`; subItem.rowKey = `${index + 1}-${subIndex + 1}`;
if (subItem.children && subItem.children.length > 0) { if (subItem.children && subItem.children.length > 0) {
subItem.children.forEach((thirdItem: any, thirdIndex: number) => { subItem.children.forEach((thirdItem: any, thirdIndex: number) => {
thirdItem.rowKey = `${index + 1}-${subIndex + 1}-${ thirdItem.rowKey = `${index + 1}-${subIndex + 1}-${thirdIndex + 1
thirdIndex + 1
}`; }`;
if (thirdItem.children && thirdItem.children.length > 0) { if (thirdItem.children && thirdItem.children.length > 0) {
thirdItem.children.forEach( thirdItem.children.forEach(
(fourthItem: any, fourthIndex: number) => { (fourthItem: any, fourthIndex: number) => {
fourthItem.rowKey = `${index + 1}-${subIndex + 1}-${ fourthItem.rowKey = `${index + 1}-${subIndex + 1}-${thirdIndex + 1
thirdIndex + 1
}-${fourthIndex + 1}`; }-${fourthIndex + 1}`;
if (fourthItem.children && fourthItem.children.length > 0) { if (fourthItem.children && fourthItem.children.length > 0) {
fourthItem.children.forEach( fourthItem.children.forEach(
(fifthItem: any, fifthIndex: number) => { (fifthItem: any, fifthIndex: number) => {
fourthItem.rowKey = `${index + 1}-${subIndex + 1}-${ fourthItem.rowKey = `${index + 1}-${subIndex + 1}-${thirdIndex + 1
thirdIndex + 1
}-${fourthIndex + 1}-${fifthIndex + 1}`; }-${fourthIndex + 1}-${fifthIndex + 1}`;
} }
); );
@ -1093,8 +1090,7 @@ const renderCell = (row: any, column: any) => {
return `<span style="text-align: right">${formatNumber(value)}</span>`; return `<span style="text-align: right">${formatNumber(value)}</span>`;
} }
if (column.isRate) { if (column.isRate) {
return `<span style="color: ${ return `<span style="color: ${value > 0 ? "green" : "red"
value > 0 ? "green" : "red"
};text-align: right">${value}%</span>`; };text-align: right">${value}%</span>`;
} }
@ -1121,57 +1117,41 @@ const handleGetResFieldRes = (obj: any, config: any) => {
// //
const handleInspectionDialogueBox = async (detail: any, otherObj?: any) => { const handleInspectionDialogueBox = async (detail: any, otherObj?: any) => {
// //
let str: string = `${ let str: string = `${props.currentServerPartDetail.SERVERPART_NAME
props.currentServerPartDetail.SERVERPART_NAME }<span class="style4">天气情况${props.currentServerPartDetail.weatherModel
}<span class="style4">天气情况${ ? `<span class="style5">${"今天"}(${moment().format("YYYY-MM-DD")})${detail.weatherModel.DAY_WEATHER
props.currentServerPartDetail.weatherModel }转${detail.weatherModel.NIGHT_WEATHER}气温${detail.weatherModel.NIGHT_AIR_TEMPERATURE
? `<span class="style5">${"今天"}(${moment().format("YYYY-MM-DD")})${ }~${detail.weatherModel.DAY_AIR_TEMPERATURE
detail.weatherModel.DAY_WEATHER
}转${detail.weatherModel.NIGHT_WEATHER}气温${
detail.weatherModel.NIGHT_AIR_TEMPERATURE
}~${
detail.weatherModel.DAY_AIR_TEMPERATURE
}</span><span class="style5">${"明天"}(${moment() }</span><span class="style5">${"明天"}(${moment()
.add(1, "d") .add(1, "d")
.format("YYYY-MM-DD")})${detail.tmwWeatherModel.DAY_WEATHER}转${ .format("YYYY-MM-DD")})${detail.tmwWeatherModel.DAY_WEATHER}转${detail.tmwWeatherModel.NIGHT_WEATHER
detail.tmwWeatherModel.NIGHT_WEATHER }气温${detail.tmwWeatherModel.NIGHT_AIR_TEMPERATURE}~${detail.tmwWeatherModel.DAY_AIR_TEMPERATURE
}气温${detail.tmwWeatherModel.NIGHT_AIR_TEMPERATURE}~${
detail.tmwWeatherModel.DAY_AIR_TEMPERATURE
}</span>` }</span>`
: "暂无天气数据" : "暂无天气数据"
}</span><span class="style4">实时路况<span class="style5">${ }</span><span class="style4">实时路况<span class="style5">${detail?.roadConditions
detail?.roadConditions ? `${detail?.roadConditions?.EXPRESSWAY_NAME
? `${
detail?.roadConditions?.EXPRESSWAY_NAME
? detail?.roadConditions?.EXPRESSWAY_NAME + "" ? detail?.roadConditions?.EXPRESSWAY_NAME + ""
: "" : ""
}${ }${detail?.roadConditions?.evaluation.status_desc || ""
detail?.roadConditions?.evaluation.status_desc || ""
}(${moment().format("MM月DD日 HH时mm分")})` }(${moment().format("MM月DD日 HH时mm分")})`
: "暂无实况车流数据" : "暂无实况车流数据"
} </span></span><span class="style4">车辆归属${ } </span></span><span class="style4">车辆归属${detail?.provinceListTooltip && detail?.provinceListTooltip.length > 0
detail?.provinceListTooltip && detail?.provinceListTooltip.length > 0
? `${detail?.provinceListTooltip ? `${detail?.provinceListTooltip
.map((item: any) => { .map((item: any) => {
return `<span class="style5">${moment( return `<span class="style5">${moment(
moment().startOf("year") moment().startOf("year")
).format("YYYY年MM月")}至${moment().format("YYYY年MM月")}${ ).format("YYYY年MM月")}至${moment().format("YYYY年MM月")}${detail?.SERVERPART_NAME || ""
detail?.SERVERPART_NAME || "" }总入区车流${formatNumber(item.TotalCount || 0)}</span>${item.children && item.children.length > 0
}总入区车流${formatNumber(item.TotalCount || 0)}</span>${
item.children && item.children.length > 0
? item.children ? item.children
.map((subItem: any) => { .map((subItem: any) => {
return `<span class="style5">${ return `<span class="style5">${subItem.ProvinceOrCityName
subItem.ProvinceOrCityName
}占比${formatNumber( }占比${formatNumber(
(subItem.TotalCount / item.TotalCount) * 100 (subItem.TotalCount / item.TotalCount) * 100
)}%Top3${ )}%Top3${subItem.children && subItem.children.length > 0
subItem.children && subItem.children.length > 0
? subItem.children ? subItem.children
.map((thirdItem: any, thirdIndex: number) => { .map((thirdItem: any, thirdIndex: number) => {
return thirdItem.ProvinceOrCityName !== "其他" return thirdItem.ProvinceOrCityName !== "其他"
? `${thirdItem.ProvinceOrCityName}${ ? `${thirdItem.ProvinceOrCityName}${thirdIndex + 1 !== subItem.children.length
thirdIndex + 1 !== subItem.children.length
? "、" ? "、"
: "" : ""
}` }`
@ -1187,14 +1167,11 @@ const handleInspectionDialogueBox = async (detail: any, otherObj?: any) => {
}) })
.join("")}` .join("")}`
: "暂无车辆归属地数据" : "暂无车辆归属地数据"
}</span>${ }</span>${otherObj
otherObj ? `${otherObj?.businessText
? `${
otherObj?.businessText
? `<span class="style4">经营数据:</span><span class="style4">${otherObj?.businessText}</span>` ? `<span class="style4">经营数据:</span><span class="style4">${otherObj?.businessText}</span>`
: "" : ""
}${ }${otherObj?.merchantText
otherObj?.merchantText
? `<span class="style4">在营商家:${otherObj?.merchantText}</span>` ? `<span class="style4">在营商家:${otherObj?.merchantText}</span>`
: "" : ""
}` }`
@ -1338,8 +1315,7 @@ const handleConfigItemTable = async (
} }
timeStr = time; timeStr = time;
} else { } else {
timeStr = `${answer?.StartDate ? answer?.StartDate : ""}${ timeStr = `${answer?.StartDate ? answer?.StartDate : ""}${answer?.EndDate ? "-" + answer?.EndDate : ""
answer?.EndDate ? "-" + answer?.EndDate : ""
}`; }`;
} }
} }
@ -1453,7 +1429,7 @@ const handleAnswerQuestions = async () => {
// //
searchText.value = ""; searchText.value = "";
const data = await handleTranslateSentence(req); const data = await handleTranslateSentence(req);
console.log("data", data); console.log("data321312", data);
// deepseekid // deepseekid
// //
// const deepseekIds = await handleUseDeepseekSemantics(req.Sentence); // const deepseekIds = await handleUseDeepseekSemantics(req.Sentence);
@ -1502,10 +1478,8 @@ const handleAnswerQuestions = async () => {
// let newShowText: string = await handleUseDeepseekOptimize( // let newShowText: string = await handleUseDeepseekOptimize(
// data?.RevenueAnalysis // data?.RevenueAnalysis
// ); // );
const lastContent = `<span class="style4">${data?.RevenueAnalysis}</span>`; const lastContent = `<span class="style4">${data?.RevenueAnalysis}</span>`
// const lastContent = `<span class="style4">${
// newShowText || ""
// }</span>`;
isPrinting.value = true; isPrinting.value = true;
await handlePrintWord(lastBox, lastContent); await handlePrintWord(lastBox, lastContent);
} }
@ -1986,13 +1960,13 @@ const handleStopPrint = () => {
}; };
// //
const handleShowDataPie = () => {}; const handleShowDataPie = () => { };
// //
const handleGoSearchMore = () => { const handleGoSearchMore = () => {
window.open("http://saas.eshangtech.com/cloud/"); window.open("http://saas.eshangtech.com/cloud/");
}; };
// pdf // pdf
const handleExportPDF = () => {}; const handleExportPDF = () => { };
// //
const props = defineProps<{ const props = defineProps<{
@ -2009,6 +1983,7 @@ const emit = defineEmits<{
(e: "handleHiddenSuspended"): void; // (e: "handleHiddenSuspended"): void; //
(e: "handleShowAi", value: boolean): void; // ai (e: "handleShowAi", value: boolean): void; // ai
(e: "handleChangeRightFilterInDialogue", id: any): void; // watch (e: "handleChangeRightFilterInDialogue", id: any): void; // watch
(e: "handleDeleteNoDefault"): void; // watch
}>(); }>();
// //
@ -2122,8 +2097,7 @@ const handleSetWarningData = async (noAdd?: boolean) => {
// //
const handleSelectWarning = async (value: number) => { const handleSelectWarning = async (value: number) => {
handleAddDialogList( handleAddDialogList(
`${props.currentServerPartDetail?.SERVERPART_NAME || ""}${ `${props.currentServerPartDetail?.SERVERPART_NAME || ""}${descObjRef.value[Number(value)] || "预警类型"
descObjRef.value[Number(value)] || "预警类型"
}` }`
); );
console.log("value", value); console.log("value", value);
@ -2190,10 +2164,8 @@ const handleSelectWarning = async (value: number) => {
} }
}); });
} }
result = `${descObjRef.value[Number(value)]},共有${ result = `${descObjRef.value[Number(value)]},共有${serverpartId.length || 0
serverpartId.length || 0 } 对服务区存在${warningData.length || 0}条${descObjRef.value[Number(value)]
} 对服务区存在${warningData.length || 0}条${
descObjRef.value[Number(value)]
} 的情况您可以鼠标移动到具体服务区查看情况`; } 的情况您可以鼠标移动到具体服务区查看情况`;
} }
console.log("result", result); console.log("result", result);
@ -2354,6 +2326,7 @@ const handleCloseInspection = () => {
// //
const closeInspection = () => { const closeInspection = () => {
duringInspection.value = false; duringInspection.value = false;
emit("handleDeleteNoDefault");
// inspectionIndex.value = 0; // inspectionIndex.value = 0;
}; };
@ -2567,29 +2540,17 @@ defineExpose({
<div class="expandBox" v-if="showDialogBox"> <div class="expandBox" v-if="showDialogBox">
<!-- 展开后的顶部机器人图标和文字 --> <!-- 展开后的顶部机器人图标和文字 -->
<div class="boxTop"> <div class="boxTop">
<img <img class="closeIcon" src="@/assets/ai/AiIcon.png" @click="handleCloseDialogbox()" />
class="closeIcon"
src="@/assets/ai/AiIcon.png"
@click="handleCloseDialogbox()"
/>
<span class="titleText">商业智能助理小驿为您服务</span> <span class="titleText">商业智能助理小驿为您服务</span>
</div> </div>
<div class="dialogBox"> <div class="dialogBox">
<!-- 实际的对话框方框 --> <!-- 实际的对话框方框 -->
<div id="dialogContent" class="dialogContent"> <div id="dialogContent" class="dialogContent">
<div <div :class="`dialogueBoxItem dialogueBoxItem${index + 1}`" v-for="(item, index) in dialogueList" :key="index"
:class="`dialogueBoxItem dialogueBoxItem${index + 1}`"
v-for="(item, index) in dialogueList"
:key="index"
:style="{ :style="{
justifyContent: item.type === 1 ? 'flex-start' : 'flex-end', justifyContent: item.type === 1 ? 'flex-start' : 'flex-end',
}" }">
> <img v-if="item.type === 1" class="robotIcon" src="@/assets/ai/profileIcon.png" />
<img
v-if="item.type === 1"
class="robotIcon"
src="@/assets/ai/profileIcon.png"
/>
<div class="dialogueTextBox"> <div class="dialogueTextBox">
<div class="dialogueTextBox-text"> <div class="dialogueTextBox-text">
{{ item.text || "" }} {{ item.text || "" }}
@ -2599,43 +2560,20 @@ defineExpose({
v-if="item.deepseekContent" v-if="item.deepseekContent"
v-html="item.deepseekContent" v-html="item.deepseekContent"
></div> --> ></div> -->
<div <div class="loadingBox" v-if="isNewDialogLoading && index === dialogueList.length - 1" v-loading="isNewDialogLoading && index === dialogueList.length - 1
class="loadingBox" "></div>
v-if="isNewDialogLoading && index === dialogueList.length - 1"
v-loading="
isNewDialogLoading && index === dialogueList.length - 1
"
></div>
<div <div v-if="item.isFirst && item.isOver" style="margin-top: 8px" class="firstClickTab">
v-if="item.isFirst && item.isOver" <div v-for="(item, index) in clickTabList" :key="index" :class="selectTab === item.value
style="margin-top: 8px"
class="firstClickTab"
>
<div
v-for="(item, index) in clickTabList"
:key="index"
:class="
selectTab === item.value
? 'clickItem selctClickItem' ? 'clickItem selctClickItem'
: 'clickItem' : 'clickItem'
" " @click="handleClickTab(item.value)">
@click="handleClickTab(item.value)"
>
{{ item.label || "" }} {{ item.label || "" }}
</div> </div>
<div <div v-if="!duringInspection" class="clickItem" @click="servicepartInspection(inspectionIndex)">
v-if="!duringInspection"
class="clickItem"
@click="servicepartInspection(inspectionIndex)"
>
{{ inspectionIndex > 0 ? "继续巡检" : "服务区巡检" }} {{ inspectionIndex > 0 ? "继续巡检" : "服务区巡检" }}
</div> </div>
<div <div v-if="duringInspection" class="clickItem" @click="handleCloseInspection()">
v-if="duringInspection"
class="clickItem"
@click="handleCloseInspection()"
>
{{ "暂停巡检" }} {{ "暂停巡检" }}
</div> </div>
<!-- <img <!-- <img
@ -2646,36 +2584,18 @@ defineExpose({
</div> </div>
<div v-if="item.isWarningSelect" class="firstClickTab"> <div v-if="item.isWarningSelect" class="firstClickTab">
<div <div class="clickItem" style="display: block" v-for="(item, index) in descListRef" :key="index"
class="clickItem" @click="handleSelectWarning(item.value)">
style="display: block"
v-for="(item, index) in descListRef"
:key="index"
@click="handleSelectWarning(item.value)"
>
{{ item.label || "" }} {{ item.label || "" }}
</div> </div>
</div> </div>
<div v-if="item.haveTable" style="margin-top: 8px"> <div v-if="item.haveTable" style="margin-top: 8px">
<el-table <el-table :data="item.tableData" :fit="true" tree-props="treeProps" row-key="rowKey" class="elTable"
:data="item.tableData" :max-height="500">
:fit="true" <el-table-column v-for="(column, index) in item.columns" :key="index" :prop="column.prop"
tree-props="treeProps" :label="column.label" :width="column.width" :align="column.align" :show-overflow-tooltip="true"
row-key="rowKey" header-align="center">
class="elTable"
:max-height="500"
>
<el-table-column
v-for="(column, index) in item.columns"
:key="index"
:prop="column.prop"
:label="column.label"
:width="column.width"
:align="column.align"
:show-overflow-tooltip="true"
header-align="center"
>
<!-- :formatter="handleFormatter" --> <!-- :formatter="handleFormatter" -->
<!-- 自定义表头内容 --> <!-- 自定义表头内容 -->
@ -2723,126 +2643,58 @@ defineExpose({
</el-table> </el-table>
</div> </div>
<div <div class="moreOption" v-if="
class="moreOption"
v-if="
item.ENABLE_CHART || item.ENABLE_CHART ||
item.ENABLE_PDF_EXPORT || item.ENABLE_PDF_EXPORT ||
item.ENABLE_VIEW_MORE item.ENABLE_VIEW_MORE
" ">
> <span class="optionItem" v-if="item.ENABLE_CHART" @click="handleShowDataPie()">查看数据图表</span>
<span <span class="optionItem" v-if="item.ENABLE_CHART" @click="handleGoSearchMore()">查看更多</span>
class="optionItem" <span class="optionItem" v-if="item.ENABLE_CHART" @click="handleExportPDF()">导出为PDF</span>
v-if="item.ENABLE_CHART"
@click="handleShowDataPie()"
>查看数据图表</span
>
<span
class="optionItem"
v-if="item.ENABLE_CHART"
@click="handleGoSearchMore()"
>查看更多</span
>
<span
class="optionItem"
v-if="item.ENABLE_CHART"
@click="handleExportPDF()"
>导出为PDF</span
>
</div> </div>
<div <div style="width: 100%; height: 80px" v-if="printingLoading && index === dialogueList.length - 1"
style="width: 100%; height: 80px" v-loading="printingLoading" :element-loading-text="printingLoadingText"></div>
v-if="printingLoading && index === dialogueList.length - 1"
v-loading="printingLoading"
:element-loading-text="printingLoadingText"
></div>
</div> </div>
<img <img v-if="item.type === 2" class="userIcon" src="@/assets/ai/userIcon.png" />
v-if="item.type === 2"
class="userIcon"
src="@/assets/ai/userIcon.png"
/>
</div> </div>
</div> </div>
<!-- 输入框 --> <!-- 输入框 -->
<div class="inputBox"> <div class="inputBox">
<el-input <el-input ref="inputRef" class="searchText" placeholder="Hi,您好!请输入您想了解的服务区..." v-model="searchText"
ref="inputRef" @keyup.enter="handleSubmit()" :disabled="isPrinting" />
class="searchText" <img v-if="isPrinting" class="searchIcon" src="@/assets/ai/stopIcon.png" @click="handleStopPrint()" />
placeholder="Hi,您好!请输入您想了解的服务区..." <img v-if="!isPrinting" class="searchIcon" src="@/assets/ai/searchIconBlue.png" @click="handleSubmit()" />
v-model="searchText"
@keyup.enter="handleSubmit()"
:disabled="isPrinting"
/>
<img
v-if="isPrinting"
class="searchIcon"
src="@/assets/ai/stopIcon.png"
@click="handleStopPrint()"
/>
<img
v-if="!isPrinting"
class="searchIcon"
src="@/assets/ai/searchIconBlue.png"
@click="handleSubmit()"
/>
</div> </div>
<div class="moreSelect"> <div class="moreSelect">
<div v-if="!bottomSelect" class="filterFixed"> <div v-if="!bottomSelect" class="filterFixed">
<img <img class="filterIcon" src="@/assets/ai/dropDown.png" @click="handleShowTabList()" />
class="filterIcon"
src="@/assets/ai/dropDown.png"
@click="handleShowTabList()"
/>
</div> </div>
<div class="filterBox" v-if="bottomSelect"> <div class="filterBox" v-if="bottomSelect">
<div class="filterList"> <div class="filterList">
<div <div v-for="(item, index) in clickTabList" :key="index" :class="selectTab === item.value
v-for="(item, index) in clickTabList"
:key="index"
:class="
selectTab === item.value
? 'filterItem selectFilterItem' ? 'filterItem selectFilterItem'
: 'filterItem' : 'filterItem'
" " @click="handleClickTab(item.value)">
@click="handleClickTab(item.value)"
>
{{ item.label || "" }} {{ item.label || "" }}
</div> </div>
<div <div v-if="!duringInspection" class="filterItem" @click="servicepartInspection(inspectionIndex)">
v-if="!duringInspection"
class="filterItem"
@click="servicepartInspection(inspectionIndex)"
>
{{ inspectionIndex > 0 ? "继续巡检" : "服务区巡检" }} {{ inspectionIndex > 0 ? "继续巡检" : "服务区巡检" }}
</div> </div>
<div <div v-if="duringInspection" class="filterItem" @click="handleCloseInspection()">
v-if="duringInspection"
class="filterItem"
@click="handleCloseInspection()"
>
{{ "暂停巡检" }} {{ "暂停巡检" }}
</div> </div>
</div> </div>
<img <img class="filterIcon" src="@/assets/ai/pullUp.png" @click="handleShowTabList()" />
class="filterIcon"
src="@/assets/ai/pullUp.png"
@click="handleShowTabList()"
/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="closeBox" v-else> <div class="closeBox" v-else>
<img <img class="closeIcon" src="@/assets/ai/AiIcon.png" @click="handleGetShowDailogBox()" />
class="closeIcon"
src="@/assets/ai/AiIcon.png"
@click="handleGetShowDailogBox()"
/>
</div> </div>
</template> </template>

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,25 @@
.el-popover__title{ .el-popover__title {
margin-bottom: 0; margin-bottom: 0;
} }
.BUSINESS_TRADEBox{
.el-form-item__label{ .BUSINESS_TRADEBox {
color: #fff!important; .el-form-item__label {
color: #fff !important;
} }
.el-form-item__content{ .el-form-item__content {
.el-select{ .el-select {
.el-select__wrapper{ .el-select__wrapper {
background-color: transparent!important; background-color: transparent !important;
} }
} }
} }
} }
.moreSelectBox{
.moreSelectBox {
margin-right: 8px; margin-right: 8px;
.selectBox{
.selectBox {
width: 36px; width: 36px;
height: 36px; height: 36px;
background: rgba(95, 95, 95, 0.5); background: rgba(95, 95, 95, 0.5);
@ -27,29 +30,35 @@
justify-content: center; justify-content: center;
box-sizing: border-box; box-sizing: border-box;
cursor: pointer; cursor: pointer;
.selectBoxDefaultIcon{
.selectBoxDefaultIcon {
width: 22px; width: 22px;
height: 22px; height: 22px;
} }
} }
.selectFormBox{
.selectFormBox {
width: 260px; width: 260px;
background: rgba(95, 95, 95, 0.5); background: rgba(95, 95, 95, 0.5);
border-radius: 6px; border-radius: 6px;
border: 1px solid #5F5F5F; border: 1px solid #5F5F5F;
box-sizing: border-box; box-sizing: border-box;
padding: 12px; padding: 12px;
.closeIcon{ z-index: 99;
.closeIcon {
width: 22px; width: 22px;
height: 22px; height: 22px;
cursor: pointer; cursor: pointer;
z-index: 6; z-index: 999;
} }
} }
} }
.rightSearchMain{
.rightSearchMain {
width: 40px; width: 40px;
.defaultIconBox{
.defaultIconBox {
width: 36px; width: 36px;
height: 36px; height: 36px;
background: rgba(95, 95, 95, 0.5); background: rgba(95, 95, 95, 0.5);
@ -60,15 +69,18 @@
justify-content: center; justify-content: center;
box-sizing: border-box; box-sizing: border-box;
cursor: pointer; cursor: pointer;
.defaultIcon{
.defaultIcon {
width: 22px; width: 22px;
height: 22px; height: 22px;
} }
} }
.otherList{
.otherList {
width: 36px; width: 36px;
margin-top: 8px; margin-top: 8px;
.otherItem{
.otherItem {
width: 36px; width: 36px;
height: 36px; height: 36px;
background: rgba(95, 95, 95, 0.5); background: rgba(95, 95, 95, 0.5);
@ -80,7 +92,8 @@
justify-content: center; justify-content: center;
box-sizing: border-box; box-sizing: border-box;
cursor: pointer; cursor: pointer;
.otherIcon{
.otherIcon {
width: 22px; width: 22px;
height: 22px; height: 22px;
} }
@ -89,15 +102,19 @@
} }
} }
.el-popover{
background-color: #000!important; .el-popover {
.el-popover__title{ background-color: #000 !important;
color: #fff!important;
.el-popover__title {
color: #fff !important;
} }
.el-popper__arrow::before{
background-color: #000!important; .el-popper__arrow::before {
background-color: #000 !important;
} }
.is-light{
border-color: #000!important; .is-light {
border-color: #000 !important;
} }
} }

View File

@ -83,6 +83,7 @@ const handleClickFilter = (value: string) => {
filterList.forEach((item: any) => { filterList.forEach((item: any) => {
item.isSelect = false; item.isSelect = false;
}); });
showSearchForm.value = false
emit("handleDeleteSelect"); emit("handleDeleteSelect");
} else { } else {
// //
@ -133,7 +134,7 @@ const handleClickFilter = (value: string) => {
} }
console.log("selectFilterList.value", selectFilterList.value); console.log("selectFilterList.value", selectFilterList.value);
if (value === "99") { if (value === "99") {
emit("handleNearServiceList"); // emit("handleNearServiceList");
} }
if (selectFilterList.value) { if (selectFilterList.value) {
@ -180,15 +181,12 @@ const handleShowMoreFormBox = () => {
if (!isShowFilterIconList.value) { if (!isShowFilterIconList.value) {
isShowFilterIconList.value = true; isShowFilterIconList.value = true;
} }
showSearchForm.value = true; showSearchForm.value = !showSearchForm.value;
}; };
// //
const handleColseSearchBox = () => { const handleColseSearchBox = () => {
console.log("1"); showSearchForm.value = !showSearchForm.value;
nextTick(() => {
showSearchForm.value = false;
});
}; };
// //
@ -279,10 +277,10 @@ defineExpose({
</el-form> </el-form>
<div style="width: 100%; display: flex; justify-content: flex-end"> <div style="width: 100%; display: flex; justify-content: flex-end">
<el-button type="primary" @click="handleClickFilter('5')">查询</el-button> <el-button type="primary" @click.stop="handleClickFilter('5')">查询</el-button>
</div> </div>
</div> </div>
<img class="closeIcon" src="@/assets/ai/retract.png" @click="handleColseSearchBox" /> <img class="closeIcon" src="@/assets/ai/retract.png" @click.stop="handleColseSearchBox" />
</div> </div>
</div> </div>
</div> </div>

View File

@ -235,7 +235,7 @@ const handleGetAllService = async () => {
let SPREGIONTYPECOLORLIST: any = []; let SPREGIONTYPECOLORLIST: any = [];
let typeID: number = 0; let typeID: number = 0;
data.forEach((item: any) => { data.forEach((item: any) => {
if (item.SPREGIONTYPE_ID) { if (item.SPREGIONTYPE_ID && item.SPREGIONTYPE_ID !== 89) {
if ( if (
SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID] || SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID] ||
SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID] === 0 SPREGIONTYPETYPELIST[item.SPREGIONTYPE_ID] === 0
@ -309,14 +309,13 @@ const handleAllServiceMarkedPoint = async () => {
}); });
pointLayer.on("mousemove", (ev: any) => { pointLayer.on("mousemove", (ev: any) => {
const detail: any = ev.feature; const detail: any = ev.feature;
console.log('detaildetaildetail', detail)
hoverPoint.value.style.top = `${ev.y + 5}px`; hoverPoint.value.style.top = `${ev.y + 5}px`;
hoverPoint.value.style.left = `${ev.x + 5}px`; hoverPoint.value.style.left = `${ev.x + 5}px`;
hoverPoint.value.style.display = "block"; hoverPoint.value.style.display = "block";
hoverPoint.value.innerHTML = `<div> hoverPoint.value.innerHTML = `<div>
<div>${detail?.SERVERPART_NAME || ""}${ <div>${detail?.SERVERPART_NAME || ""}${detail?.SERVERPART_TYPE
detail?.SERVERPART_TYPE ? `${ServerpartTypeObj ? ServerpartTypeObj[detail?.SERVERPART_TYPE] : ""
? `${
ServerpartTypeObj ? ServerpartTypeObj[detail?.SERVERPART_TYPE] : ""
}` }`
: "" : ""
}</div> }</div>
@ -326,15 +325,11 @@ const handleAllServiceMarkedPoint = async () => {
? ` ? `
<div style="background-color: black; color: white; border-radius: 5px; font-size: 14px; border: none;box-shadow: none;"> <div style="background-color: black; color: white; border-radius: 5px; font-size: 14px; border: none;box-shadow: none;">
<div>天气情况</div> <div>天气情况</div>
<div>${"今天"}${detail.weatherModel.DAY_WEATHER}转${ <div>${"今天"}${detail.weatherModel.DAY_WEATHER}转${detail.weatherModel.NIGHT_WEATHER
detail.weatherModel.NIGHT_WEATHER }气温${detail.weatherModel.NIGHT_AIR_TEMPERATURE}~${detail.weatherModel.DAY_AIR_TEMPERATURE
}气温${detail.weatherModel.NIGHT_AIR_TEMPERATURE}~${
detail.weatherModel.DAY_AIR_TEMPERATURE
}</div> }</div>
<div>${"明天"}${detail.tmwWeatherModel.DAY_WEATHER}转${ <div>${"明天"}${detail.tmwWeatherModel.DAY_WEATHER}转${detail.tmwWeatherModel.NIGHT_WEATHER
detail.tmwWeatherModel.NIGHT_WEATHER }气温${detail.tmwWeatherModel.NIGHT_AIR_TEMPERATURE}~${detail.tmwWeatherModel.DAY_AIR_TEMPERATURE
}气温${detail.tmwWeatherModel.NIGHT_AIR_TEMPERATURE}~${
detail.tmwWeatherModel.DAY_AIR_TEMPERATURE
}</div> }</div>
</div> </div>
` `
@ -347,16 +342,14 @@ const handleAllServiceMarkedPoint = async () => {
? ` ? `
<div style="max-height: 250px;overflow-y: auto"> <div style="max-height: 250px;overflow-y: auto">
<div>实时路况${moment().format("YY月DD日 HH点mm分")}</div> <div>实时路况${moment().format("YY月DD日 HH点mm分")}</div>
<div>${ <div>${detail?.roadConditions?.EXPRESSWAY_NAME
detail?.roadConditions?.EXPRESSWAY_NAME
? detail?.roadConditions?.EXPRESSWAY_NAME + "" ? detail?.roadConditions?.EXPRESSWAY_NAME + ""
: "" : ""
}${ }${detail?.roadConditions?.evaluation?.status === 1
detail?.roadConditions?.evaluation.status === 1
? "双向畅通" ? "双向畅通"
: detail?.roadConditions?.evaluation.status === 2 : detail?.roadConditions?.evaluation?.status === 2
? "双向缓行" ? "双向缓行"
: detail?.roadConditions?.evaluation.status === 3 : detail?.roadConditions?.evaluation?.status === 3
? "双向拥堵" ? "双向拥堵"
: "" : ""
}</div> }</div>
@ -384,21 +377,17 @@ const handleAllServiceMarkedPoint = async () => {
(item: any) => (item: any) =>
`<div>${moment(moment().startOf("y")).format( `<div>${moment(moment().startOf("y")).format(
"YYYY年MM月" "YYYY年MM月"
)}至${moment().format("YYYY年MM月")}${ )}至${moment().format("YYYY年MM月")}${detail?.SERVERPART_NAME || ""
detail?.SERVERPART_NAME || ""
}总入区车流${formatNumber(item.TotalCount || 0)} }总入区车流${formatNumber(item.TotalCount || 0)}
${ ${item.children?.length > 0
item.children?.length > 0
? `<div>${item.children ? `<div>${item.children
.map( .map(
(subItem: any) => (subItem: any) =>
`<div>${ `<div>${subItem.ProvinceOrCityName
subItem.ProvinceOrCityName
}占比${formatNumber( }占比${formatNumber(
(subItem.TotalCount / item.TotalCount) * 100 (subItem.TotalCount / item.TotalCount) * 100
)}% Top3 )}% Top3
${ ${subItem.children && subItem.children.length > 0
subItem.children && subItem.children.length > 0
? `<span> ? `<span>
${subItem.children ${subItem.children
.map((thirdItem: any, thirdIndex: number) => { .map((thirdItem: any, thirdIndex: number) => {
@ -425,8 +414,7 @@ const handleAllServiceMarkedPoint = async () => {
// //
nowSelectId.value && nowSelectId.value.indexOf("5") !== -1 nowSelectId.value && nowSelectId.value.indexOf("5") !== -1
? `<div> ? `<div>
${detail?.tradeType || ""}${ ${detail?.tradeType || ""}${detail?.shopName ? `${detail?.shopName}` : ""
detail?.shopName ? `${detail?.shopName}` : ""
} }
</div>` </div>`
: "" : ""
@ -442,8 +430,7 @@ const handleAllServiceMarkedPoint = async () => {
${ ${
// //
nowSelectId.value && nowSelectId.value.indexOf("8") !== -1 nowSelectId.value && nowSelectId.value.indexOf("8") !== -1
? `<div>对客销售:${ ? `<div>对客销售:${detail.AVR_TICKET > 30
detail.AVR_TICKET > 30
? "繁忙" ? "繁忙"
: detail.AVR_TICKET > 15 && detail.AVR_TICKET < 30 : detail.AVR_TICKET > 15 && detail.AVR_TICKET < 30
? "良好" ? "良好"
@ -765,6 +752,7 @@ const handleSetCarData = async (
} }
}); });
} }
let data: any = {}; let data: any = {};
let roadItem: any = {}; let roadItem: any = {};
let roadReq: any = { let roadReq: any = {
@ -773,6 +761,7 @@ const handleSetCarData = async (
}; };
data = await handleGetBaiDuTrafficInfo(roadReq); data = await handleGetBaiDuTrafficInfo(roadReq);
let roadRes: any = JSON.parse(data); let roadRes: any = JSON.parse(data);
if (roadRes.status == 2) { if (roadRes.status == 2) {
let roadReq: any = { let roadReq: any = {
RoadName: selectObj.SERVERPART_NAME || "", RoadName: selectObj.SERVERPART_NAME || "",
@ -822,8 +811,6 @@ const handleSetCarData = async (
...selectObj, ...selectObj,
...roadItem, ...roadItem,
}; };
console.log("item", item);
console.log("defaultServerPartList", defaultServerPartList);
let allLayers: any = scene.value.getLayers(); let allLayers: any = scene.value.getLayers();
if (allLayers && allLayers.length > 0) { if (allLayers && allLayers.length > 0) {
let obj: any = {}; let obj: any = {};
@ -987,7 +974,7 @@ const handleDeleteLayer = (name: string) => {
}; };
// //
const handleDeleteNoDefault = (nowSelect: string) => { const handleDeleteNoDefault = (nowSelect?: string) => {
if (nowSelect) { if (nowSelect) {
if (nowSelect.indexOf("1") === -1) { if (nowSelect.indexOf("1") === -1) {
scene.value.removeAllMarkers(); scene.value.removeAllMarkers();
@ -1256,7 +1243,7 @@ const handleGetCarComeForm = async () => {
// //
const handleGetBusinessFormat = async () => { const handleGetBusinessFormat = async () => {
await RobotDialogueBoxRef.value.handleGetBusinessTrade(); // await RobotDialogueBoxRef.value.handleGetBusinessTrade();
let formData: any = RightSearchBoxRef.value.form; let formData: any = RightSearchBoxRef.value.form;
console.log("formData", formData); console.log("formData", formData);
const req: any = { const req: any = {
@ -1318,8 +1305,6 @@ const handleGetBusinessFormat = async () => {
} }
let BusinessTradeIdsObj: any = let BusinessTradeIdsObj: any =
RightSearchBoxRef.value.selectBusinessTradeIdsObj; RightSearchBoxRef.value.selectBusinessTradeIdsObj;
console.log("BusinessTradeIdsObj", BusinessTradeIdsObj);
console.log("obj", obj);
nextTick(() => { nextTick(() => {
defaultServerPartList.forEach((item: any) => { defaultServerPartList.forEach((item: any) => {
@ -1467,8 +1452,7 @@ const handleWarningMap = async (warningData: any) => {
if (itemStr) { if (itemStr) {
itemStr += `${subItem.SERVERPARTSHOP_NAME}`; itemStr += `${subItem.SERVERPARTSHOP_NAME}`;
} else { } else {
itemStr = `${waringObj[subItem.WARNING_TYPE]}${ itemStr = `${waringObj[subItem.WARNING_TYPE]}${subItem.SERVERPARTSHOP_NAME
subItem.SERVERPARTSHOP_NAME
} `; } `;
} }
} }
@ -1515,8 +1499,7 @@ const handleWarningMap = async (warningData: any) => {
if (itemStr) { if (itemStr) {
itemStr += `${subItem.SERVERPARTSHOP_NAME}; `; itemStr += `${subItem.SERVERPARTSHOP_NAME}; `;
} else { } else {
itemStr = `${waringObj[subItem.WARNING_TYPE]}${ itemStr = `${waringObj[subItem.WARNING_TYPE]}${subItem.SERVERPARTSHOP_NAME
subItem.SERVERPARTSHOP_NAME
} `; } `;
} }
} }
@ -2061,131 +2044,77 @@ const handleNearServiceList = async () => {
<template> <template>
<div id="map" class="mapBox"> <div id="map" class="mapBox">
<div class="RobotBox" v-if="baseInfoObj?.ShowAIQA"> <div class="RobotBox" v-if="baseInfoObj?.ShowAIQA">
<RobotDialogueBox <RobotDialogueBox ref="RobotDialogueBoxRef" @handleLightServerpart="handleLightServerpart"
ref="RobotDialogueBoxRef" @handleEnterySearch="handleEnterySearch" @handleWarningMap="handleWarningMap"
@handleLightServerpart="handleLightServerpart" @handleAreaInspection="handleAreaInspection" @handleHiddenSuspended="handleHiddenSuspended"
@handleEnterySearch="handleEnterySearch" @handleShowAi="handleShowAi" @handleChangeRightFilterInDialogue="handleChangeRightFilterInDialogue"
@handleWarningMap="handleWarningMap" @handleDeleteNoDefault="handleDeleteNoDefault" :currentServerPartDetail="currentServerPartDetail"
@handleAreaInspection="handleAreaInspection" :allServerPartIdList="allServerPartIdList" />
@handleHiddenSuspended="handleHiddenSuspended"
@handleShowAi="handleShowAi"
@handleChangeRightFilterInDialogue="handleChangeRightFilterInDialogue"
:currentServerPartDetail="currentServerPartDetail"
:allServerPartIdList="allServerPartIdList"
/>
</div> </div>
<div <div class="rightSearchBox" :style="{ right: showRightDetail ? 'calc(25% + 8px)' : '16px' }">
class="rightSearchBox" <RightSearchBox ref="RightSearchBoxRef" @handleChangeMapShow="handleChangeMapShow"
:style="{ right: showRightDetail ? 'calc(25% + 8px)' : '16px' }" @handleDeleteSelect="handleDeleteSelect" @handleHiddenSuspended="handleHiddenSuspended"
> @handleNearServiceList="handleNearServiceList" :currentServerPartDetail="currentServerPartDetail" />
<RightSearchBox
ref="RightSearchBoxRef"
@handleChangeMapShow="handleChangeMapShow"
@handleDeleteSelect="handleDeleteSelect"
@handleHiddenSuspended="handleHiddenSuspended"
@handleNearServiceList="handleNearServiceList"
:currentServerPartDetail="currentServerPartDetail"
/>
</div> </div>
<div <div class="serverpartDetail" :style="{ right: showRightDetail ? '0' : '-25%' }">
class="serverpartDetail"
:style="{ right: showRightDetail ? '0' : '-25%' }"
>
<!-- v-if="showRightDetail" --> <!-- v-if="showRightDetail" -->
<RightDetail <RightDetail ref="RightDetailRef" :currentServerPartDetail="currentServerPartDetail"
ref="RightDetailRef" @handleCloseRightDetail="handleCloseRightDetail" @handleShowDetail="handleShowDetail" />
:currentServerPartDetail="currentServerPartDetail"
@handleCloseRightDetail="handleCloseRightDetail"
@handleShowDetail="handleShowDetail"
/>
</div> </div>
<!-- 实时营收的box --> <!-- 实时营收的box -->
<div <div class="realBox" v-show="isShowAi || isShowDetail
class="realBox"
v-show="
isShowAi || isShowDetail
? false ? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData : baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true ? true
: false : false
" ">
>
<!-- v-if="baseInfoObj?.ShowRevenueGraphic && isShowAi || isShowDetail" --> <!-- v-if="baseInfoObj?.ShowRevenueGraphic && isShowAi || isShowDetail" -->
<RealBox <RealBox ref="RealBoxRef" :show="isShowAi || isShowDetail
ref="RealBoxRef"
:show="
isShowAi || isShowDetail
? false ? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData : baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true ? true
: false : false
" " />
/>
</div> </div>
<!-- 片区图例 --> <!-- 片区图例 -->
<div <div class="areaListLegend" v-if="SPREGIONTYPECOLORList && SPREGIONTYPECOLORList.length > 0">
class="areaListLegend" <div class="areaItem" v-for="(item, index) in SPREGIONTYPECOLORList" :key="index">
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="color" :style="{ background: item.value }"></span>
<span class="text">{{ item.label }}</span> <span class="text">{{ item.label }}</span>
</div> </div>
</div> </div>
<!-- 区域营收占比 --> <!-- 区域营收占比 -->
<div <div class="revenueRate" v-show="isShowAi || isShowDetail
class="revenueRate"
v-show="
isShowAi || isShowDetail
? false ? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData : baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true ? true
: false : false
" ">
> <RevenueRate ref="revenueRateRef" :SPREGIONTYPECOLOR="SPREGIONTYPECOLOR" :show="isShowAi || isShowDetail
<RevenueRate
ref="revenueRateRef"
:SPREGIONTYPECOLOR="SPREGIONTYPECOLOR"
:show="
isShowAi || isShowDetail
? false ? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData : baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true ? true
: false : false
" " />
/>
</div> </div>
<!-- 消费金额趋势图 --> <!-- 消费金额趋势图 -->
<div <div class="BusyRanking" v-show="isShowAi || isShowDetail
class="BusyRanking"
v-show="
isShowAi || isShowDetail
? false ? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData : baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true ? true
: false : false
" ">
> <BusyRanking ref="BusyRankingRef" :show="isShowAi || isShowDetail
<BusyRanking
ref="BusyRankingRef"
:show="
isShowAi || isShowDetail
? false ? false
: baseInfoObj?.ShowRevenueGraphic && isShowRealData : baseInfoObj?.ShowRevenueGraphic && isShowRealData
? true ? true
: false : false
" " @handleServiceBusy="handleServiceBusy" />
@handleServiceBusy="handleServiceBusy"
/>
</div> </div>
</div> </div>
</template> </template>