This commit is contained in:
cclu 2024-11-27 18:50:09 +08:00
parent 8bb086a400
commit 8e14aff70d
34 changed files with 10979 additions and 227 deletions

BIN
aiMap.zip Normal file

Binary file not shown.

View File

@ -2,7 +2,7 @@
* @Author: cclu 1106109051@qq.com * @Author: cclu 1106109051@qq.com
* @Date: 2024-11-18 11:54:00 * @Date: 2024-11-18 11:54:00
* @LastEditors: cclu 1106109051@qq.com * @LastEditors: cclu 1106109051@qq.com
* @LastEditTime: 2024-11-18 11:54:18 * @LastEditTime: 2024-11-26 16:56:07
* @FilePath: \aiRobot\eslint.config.js * @FilePath: \aiRobot\eslint.config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
@ -21,5 +21,13 @@ module.exports = {
}, },
rules: { rules: {
// 自定义规则 // 自定义规则
"no-nested-ternary": 1,
"no-use-before-define": 1,
"no-param-reassign": 0,
"no-plusplus": 0,
"eqeqeq": 0,
"no-useless-escape": 0,
"prefer-destructuring": 0,
"no-lonely-if": 0
}, },
}; };

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -66,12 +66,54 @@
padding: 8px 12px; padding: 8px 12px;
.firstClickTab{ .firstClickTab{
width: 100%; width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
.clickItem{ .clickItem{
display: inline-block;
margin-right: 8px; margin-right: 8px;
cursor: pointer; cursor: pointer;
color: rgb(24, 144, 255); color: #1890ff;
text-decoration: none; text-decoration: none;
} }
.selctClickItem{
box-sizing: border-box;
padding: 4px 6px;
background-color: #1890ff;
color: #fff;
border-radius: 8px;
}
.clearClick{
width: 15px;
height: 15px;
cursor: pointer;
margin-left: 12px;
}
}
.style1{
color: #6590f5!important;
font-weight: bold;
}
.style2{
color: #FE7628!important;
font-weight: bold;
}
.style3{
color: #98aac9!important;
font-weight: bold;
}
.operateBox{
width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
.operateItem{
display: block;
width: 160px;
cursor: pointer;
}
} }
.el-loading-mask{ .el-loading-mask{

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,81 @@
.el-popover__title{
margin-bottom: 0;
}
.BUSINESS_TRADEBox{
.el-form-item__label{
color: #fff!important;
}
}
.moreSelectBox{
margin-right: 8px;
.selectBox{
width: 36px;
height: 36px;
background: rgba(95, 95, 95, 0.5);
border-radius: 6px;
border: 1px solid #5F5F5F;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
cursor: pointer;
.selectBoxDefaultIcon{
width: 22px;
height: 22px;
}
}
.selectFormBox{
width: 260px;
background: rgba(95, 95, 95, 0.5);
border-radius: 6px;
border: 1px solid #5F5F5F;
box-sizing: border-box;
padding: 12px;
.closeIcon{
width: 22px;
height: 22px;
cursor: pointer;
z-index: 6;
}
}
}
.rightSearchMain{
width: 40px;
.defaultIconBox{
width: 36px;
height: 36px;
background: rgba(95, 95, 95, 0.5);
border-radius: 6px;
border: 1px solid #5F5F5F;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
cursor: pointer;
.defaultIcon{
width: 22px;
height: 22px;
}
}
.otherList{
width: 36px;
margin-top: 8px;
.otherItem{
width: 36px;
height: 36px;
background: rgba(95, 95, 95, 0.5);
border-radius: 6px;
border: 1px solid #5F5F5F;
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
cursor: pointer;
.otherIcon{
width: 22px;
height: 22px;
}
}
}
}

View File

@ -0,0 +1,272 @@
<script lang="ts" setup>
import { onMounted, reactive, ref, watch } from "vue";
import "./rightSearchBox.less";
import weather from "@/assets/ai/weather.png";
import traffic from "@/assets/ai/traffic.png";
import heat from "@/assets/ai/heat.png";
import comeForm from "@/assets/ai/comeForm.png";
import businessTrade from "@/assets/ai/businessTrade.png";
import weaearlyWarningther from "@/assets/ai/earlyWarning.png";
import deleteIcon from "@/assets/ai/deleteIcon.png";
import selectWeather from "@/assets/ai/selectWeather.png";
import selectTraffic from "@/assets/ai/selectTraffic.png";
import selectHeat from "@/assets/ai/selectHeat.png";
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 { nextTick } from "process";
import { getFieldEnumTree } from "../service";
import { ElMessage } from "element-plus";
//
const isShowFilterIconList = ref<boolean>(false);
//
let selectFilterList = ref<string>();
//
const filterList: any = reactive<any>([
{ label: "天气情况", value: "1", src: weather, selectScr: selectWeather },
{ label: "实时交通", value: "2", src: traffic, selectScr: selectTraffic },
{ label: "营收热力", value: "3", src: heat, selectScr: selectHeat },
{ label: "车辆归属", value: "4", src: comeForm, selectScr: selectComeForm },
{
label: "经营业态",
value: "5",
src: businessTrade,
selectScr: selectBusinessTrade,
},
{
label: "预警类型",
value: "6",
src: weaearlyWarningther,
selectScr: selectEarlyWarning,
},
{ label: "清空", value: "7", src: deleteIcon, selectScr: selectDeleteIcon },
]);
//
const showSearchForm = ref<boolean>(false);
//
const form = reactive({
BUSINESS_TRADE: [],
});
//
let businessTradeList = reactive([]);
//
let selectBusinessTradeList = reactive<any>([]);
//
let selectBusinessTradeIdsObj = ref<any>();
//
const showFilterList = () => {
isShowFilterIconList.value = !isShowFilterIconList.value;
};
//
const handleClickFilter = (value: string) => {
if (value === "7") {
selectFilterList.value = "";
filterList.forEach((item: any) => {
item.isSelect = false;
});
} else {
//
if (
value === "5" &&
!(form.BUSINESS_TRADE && form.BUSINESS_TRADE.length > 0)
) {
ElMessage({
message: "请先选择需要查询的经营业态!",
type: "warning",
});
handleShowMoreFormBox();
return;
}
//
if (value === "4" && !props.currentServerPartDetail) {
ElMessage({
message: "请先选择服务区!",
type: "warning",
});
return;
}
if (selectFilterList.value) {
if (selectFilterList.value.indexOf(value) === -1) {
selectFilterList.value += `,${value}`;
} else {
let list: any = selectFilterList.value.split(",");
console.log("list", list);
console.log("value", value);
let newStr: string = "";
if (list && list.length > 0) {
list.forEach((item: any) => {
if (item !== value) {
if (newStr) {
newStr += `,${item}`;
} else {
newStr = item;
}
}
});
}
selectFilterList.value = newStr;
}
nextTick(() => {
let obj: any = filterList.filter((item: any) => item.value === value);
if (obj[0].isSelect) {
obj[0].isSelect = false;
} else {
obj[0].isSelect = true;
}
});
} else {
selectFilterList.value = value;
nextTick(() => {
let obj: any = filterList.filter((item: any) => item.value === value);
obj[0].isSelect = true;
});
}
}
};
//
const handleShowMoreFormBox = () => {
if (!isShowFilterIconList.value) {
isShowFilterIconList.value = true;
}
showSearchForm.value = true;
};
//
const handleColseSearchBox = () => {
console.log("1");
nextTick(() => {
showSearchForm.value = false;
});
};
//
const handleGetBUSINESS_TRADE = async () => {
const data = await getFieldEnumTree({
FieldExplainField: "BusinessTradeIds",
});
console.log("dasdkaskldas", data);
businessTradeList = data;
let BusinessTradeIdsObj: any = {};
if (data && data.length > 0) {
data.forEach((item: any) => {
BusinessTradeIdsObj[item.value] = item.label;
if (item.children && item.children.length > 0) {
item.children.forEach((subItem: any) => {
BusinessTradeIdsObj[subItem.value] = subItem.label;
});
}
});
}
nextTick(() => {
selectBusinessTradeIdsObj.value = BusinessTradeIdsObj;
console.log("selectBusinessTradeIdsObj", selectBusinessTradeIdsObj.value);
});
};
onMounted(() => {
handleGetBUSINESS_TRADE();
});
//
const emit = defineEmits<{
(e: "handleChangeMapShow", nowSelect: any): void; // selectFilterList.value
}>();
//
const props = defineProps<{
currentServerPartDetail: any;
}>();
watch(
() => selectFilterList.value,
(newVal, oldVal) => {
emit("handleChangeMapShow", newVal);
},
{ deep: true }
);
//
defineExpose({
form: form,
selectBusinessTradeIdsObj: selectBusinessTradeIdsObj,
selectFilterList: selectFilterList,
});
</script>
<template>
<div style="display: flex; width: 100%">
<div class="moreSelectBox">
<div
:class="showSearchForm ? 'selectFormBox' : 'selectBox'"
v-if="isShowFilterIconList"
@click="handleShowMoreFormBox"
>
<img
v-if="!showSearchForm"
class="selectBoxDefaultIcon"
src="@/assets/ai/retract.png"
/>
<div v-if="showSearchForm" style="display: flex; width: 100%">
<div style="width: 220px">
<el-form :model="form" label-width="auto">
<el-form-item
class="BUSINESS_TRADEBox"
label-position="top"
label="经营业态"
prop="BUSINESS_TRADE"
>
<el-tree-select
v-model="form.BUSINESS_TRADE"
:data="businessTradeList"
placeholder="请选择经营业态"
:props="{
label: 'label',
children: 'children',
}"
clearable
filterable
default-expand-all
multiple
show-checkbox
/>
</el-form-item>
</el-form>
</div>
<img
class="closeIcon"
src="@/assets/ai/retract.png"
@click="handleColseSearchBox"
/>
</div>
</div>
</div>
<div class="rightSearchMain">
<div class="defaultIconBox" @click="showFilterList">
<img class="defaultIcon" src="@/assets/ai/filterIcon.png" />
</div>
<div class="otherList" v-if="isShowFilterIconList">
<div
class="otherItem"
v-for="(item, index) in filterList"
:key="index"
@click="handleClickFilter(item.value)"
>
<el-popover :title="item.label" placement="left">
<template #reference>
<img
class="otherIcon"
:src="item.isSelect ? item.selectScr : item.src"
/>
</template>
</el-popover>
</div>
</div>
</div>
</div>
</template>

View File

View File

@ -21,4 +21,11 @@
z-index: 10; z-index: 10;
} }
.rightSearchBox{
position: absolute;
top: 16px;
right: 16px;
z-index: 10;
}
} }

File diff suppressed because it is too large Load Diff

View File

@ -36,6 +36,16 @@ export async function getFieldEnumTree(params: any) {
return wrapTreeNode(data.Result_Data.List); return wrapTreeNode(data.Result_Data.List);
} }
export async function getFieldGetFieEnumList(params: any) {
const data: any = await request.get('/Dictionary/GetFieEnumList', params)
if (data.Result_Code !== 100) {
return []
}
return data.Result_Data.List
}
// 询问问题 调用的接口 // 询问问题 调用的接口
export async function handleTranslateSentence(params: any) { export async function handleTranslateSentence(params: any) {
@ -77,3 +87,52 @@ export async function handleSynchroSENTENCE(params: any) {
return data.Result_Data return data.Result_Data
} }
// 实时交通数据接口
export async function handleGetBaiDuTrafficInfo(params: any) {
const data: any = await requestCode.get('/BigData/GetBaiDuTrafficInfo', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data
}
// 营收热力
export async function handleGetMonthlySPINCAnalysis(params: any) {
const data: any = await requestCode.get('/Revenue/GetMonthlySPINCAnalysis', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}
// 车辆归属地
export async function handleGetProvinceVehicleTreeList(params: any) {
const data: any = await requestCode.get('/BigData/GetProvinceVehicleTreeList', params)
if (data.Result_Code !== 100) {
return data
}
return wrapTreeNode(data.Result_Data.List)
}
// 预警类型
export async function handleGetMonthINCAnalysis(params: any) {
const data: any = await request.get('/BusinessProject/GetAccountWarningList', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}
// 经营业态
export async function handleGetPeriodWarningList(params: any) {
const data: any = await request.get('/BusinessProject/GetPeriodWarningList', params)
if (data.Result_Code !== 100) {
return data
}
return wrapTreeNode(data.Result_Data.List);
}

View File

@ -46,6 +46,7 @@ const instance = axios.create({
baseURL: 'https://api.eshangtech.com/EShangApiMain', // 默认请求前缀 baseURL: 'https://api.eshangtech.com/EShangApiMain', // 默认请求前缀
timeout: 60000, // 请求超时时间 timeout: 60000, // 请求超时时间
headers: { headers: {
"provincecode": "340000",
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); });

View File

@ -46,6 +46,7 @@ const instance = axios.create({
baseURL: 'https://api.eshangtech.com/CommercialApi', // 默认请求前缀 baseURL: 'https://api.eshangtech.com/CommercialApi', // 默认请求前缀
timeout: 60000, // 请求超时时间 timeout: 60000, // 请求超时时间
headers: { headers: {
"provincecode": "340000",
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); });

View File

@ -46,6 +46,7 @@ const instance = axios.create({
baseURL: 'https://api.eshangtech.com/', // 默认请求前缀 baseURL: 'https://api.eshangtech.com/', // 默认请求前缀
timeout: 60000, // 请求超时时间 timeout: 60000, // 请求超时时间
headers: { headers: {
"provincecode": "340000",
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); });

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"],"version":"5.6.3"} {"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/rightsearchbox.vue"],"version":"5.6.3"}

View File

@ -0,0 +1,34 @@
// vite.config.ts
import { defineConfig } from "file:///D:/workfile/web/aiMap/node_modules/vite/dist/node/index.js";
import vue from "file:///D:/workfile/web/aiMap/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import path from "path";
var __vite_injected_original_dirname = "D:\\workfile\\web\\aiMap";
var vite_config_default = defineConfig({
plugins: [
vue()
],
base: "/aiMap",
build: {
outDir: "dist",
// 打包输出目录
assetsDir: "assets",
// 静态资源目录
rollupOptions: {
input: "/index.html"
// 指定入口文件
}
},
resolve: {
alias: {
"@": path.resolve(__vite_injected_original_dirname, "src")
// 将 @ 映射到 src 目录
}
},
server: {
host: "0.0.0.0"
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3JrZmlsZVxcXFx3ZWJcXFxcYWlNYXBcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXHdvcmtmaWxlXFxcXHdlYlxcXFxhaU1hcFxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya2ZpbGUvd2ViL2FpTWFwL3ZpdGUuY29uZmlnLnRzXCI7LypcbiAqIEBBdXRob3I6IGNjbHUgMTEwNjEwOTA1MUBxcS5jb21cbiAqIEBEYXRlOiAyMDI0LTExLTE4IDExOjQwOjIxXG4gKiBATGFzdEVkaXRvcnM6IGNjbHUgMTEwNjEwOTA1MUBxcS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjQtMTEtMjEgMTA6NDM6MTRcbiAqIEBGaWxlUGF0aDogXFxhaVJvYm90XFx2aXRlLmNvbmZpZy50c1xuICogQERlc2NyaXB0aW9uOiBcdThGRDlcdTY2MkZcdTlFRDhcdThCQTRcdThCQkVcdTdGNkUsXHU4QkY3XHU4QkJFXHU3RjZFYGN1c3RvbU1hZGVgLCBcdTYyNTNcdTVGMDBrb3JvRmlsZUhlYWRlclx1NjdFNVx1NzcwQlx1OTE0RFx1N0Y2RSBcdThGREJcdTg4NENcdThCQkVcdTdGNkU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PQktvcm8xL2tvcm8xRmlsZUhlYWRlci93aWtpLyVFOSU4NSU4RCVFNyVCRCVBRVxuICovXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcbmltcG9ydCB2dWUgZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwbHVnaW5zOiBbXG4gICAgdnVlKCksXG4gIF0sXG4gIGJhc2U6ICcvYWlNYXAnLFxuICBidWlsZDoge1xuICAgIG91dERpcjogJ2Rpc3QnLCAvLyBcdTYyNTNcdTUzMDVcdThGOTNcdTUxRkFcdTc2RUVcdTVGNTVcbiAgICBhc3NldHNEaXI6ICdhc3NldHMnLCAvLyBcdTk3NTlcdTYwMDFcdThENDRcdTZFOTBcdTc2RUVcdTVGNTVcbiAgICByb2xsdXBPcHRpb25zOiB7IFxuICAgICAgaW5wdXQ6ICcvaW5kZXguaHRtbCcsIC8vIFx1NjMwN1x1NUI5QVx1NTE2NVx1NTNFM1x1NjU4N1x1NEVGNlxuICAgIH0sXG4gIH0sXG4gIHJlc29sdmU6IHtcbiAgICBhbGlhczoge1xuICAgICAgJ0AnOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnc3JjJyksIC8vIFx1NUMwNiBAIFx1NjYyMFx1NUMwNFx1NTIzMCBzcmMgXHU3NkVFXHU1RjU1XG4gICAgfSxcbiAgfSxcbiAgc2VydmVyOiB7XG4gICAgaG9zdDogJzAuMC4wLjAnLFxuICB9XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLG9CQUFvQjtBQUM3QixPQUFPLFNBQVM7QUFDaEIsT0FBTyxVQUFVO0FBVmpCLElBQU0sbUNBQW1DO0FBWXpDLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFNBQVM7QUFBQSxJQUNQLElBQUk7QUFBQSxFQUNOO0FBQUEsRUFDQSxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUE7QUFBQSxJQUNSLFdBQVc7QUFBQTtBQUFBLElBQ1gsZUFBZTtBQUFBLE1BQ2IsT0FBTztBQUFBO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLE9BQU87QUFBQSxNQUNMLEtBQUssS0FBSyxRQUFRLGtDQUFXLEtBQUs7QUFBQTtBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sTUFBTTtBQUFBLEVBQ1I7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=