first commit

This commit is contained in:
ylj20011123 2025-06-19 19:31:54 +08:00
commit a895d39596
111 changed files with 37075 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar"]
}

BIN
README.md Normal file

Binary file not shown.

10
auto-imports.d.ts vendored Normal file
View File

@ -0,0 +1,10 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
// biome-ignore lint: disable
export {}
declare global {
}

15
components.d.ts vendored Normal file
View File

@ -0,0 +1,15 @@
/* eslint-disable */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
ElInput: typeof import('element-plus/es')['ElInput']
Robot: typeof import('./src/components/robot.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
}
}

BIN
deepseek.zip Normal file

Binary file not shown.

28
eslint.config.js Normal file
View File

@ -0,0 +1,28 @@
/*
* @Author: cclu 1106109051@qq.com
* @Date: 2024-11-18 11:54:00
* @LastEditors: cclu 1106109051@qq.com
* @LastEditTime: 2024-11-29 11:57:57
* @FilePath: \aiRobot\eslint.config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
module.exports = {
root: true,
env: {
node: true,
},
extends: [
'eslint:recommended',
'plugin:vue/vue3-essential',
'@vue/eslint-config-typescript/recommended',
],
parserOptions: {
ecmaVersion: 2020,
},
rules: {
'vue/max-attributes-per-line': ['error', {
'singleline': 3
}],
'@typescript-eslint/no-explicit-any': 'off',
},
};

26
index.html Normal file
View File

@ -0,0 +1,26 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<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="./"> <!-- 确保这里匹配你的部署路径 -->
</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>
<script>
</script>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</html>

4756
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

42
package.json Normal file
View File

@ -0,0 +1,42 @@
{
"name": "airobot",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc -b && vite build",
"preview": "vite preview"
},
"dependencies": {
"@antv/l7": "^2.22.3",
"@antv/l7-maps": "^2.22.3",
"@types/js-cookie": "^3.0.6",
"axios": "^1.7.7",
"echarts": "^5.5.1",
"element-plus": "^2.8.8",
"marked": "^15.0.6",
"moment": "^2.30.1",
"openai": "^4.82.0",
"pinia": "^2.2.6",
"rollup": "^4.27.3",
"vue-router": "^4.4.5"
},
"devDependencies": {
"@eslint/js": "^9.15.0",
"@types/node": "^22.9.0",
"@vitejs/plugin-vue": "^5.2.0",
"@vue/eslint-config-typescript": "^14.1.3",
"eslint": "^9.15.0",
"eslint-plugin-vue": "^9.31.0",
"globals": "^15.12.0",
"less": "^4.2.0",
"less-loader": "^12.2.0",
"prettier": "^3.3.3",
"typescript": "~5.6.2",
"typescript-eslint": "^8.14.0",
"vite": "^5.4.11",
"vue": "^3.5.13",
"vue-tsc": "^2.1.8"
}
}

1
public/vite.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

20
src/App.vue Normal file
View File

@ -0,0 +1,20 @@
<template>
<div>
<router-view></router-view>
</div>
</template>
<script setup>
import { onMounted } from "vue";
import { useRouter } from "vue-router";
const router = useRouter();
onMounted(() => {
// router.push("/map/:id");
});
</script>
<style>
/* 样式 */
</style>

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739428542367" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4174" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M919.6 405.6l-57.2-8c-12.7-1.8-23-10.4-28-22.1-11.3-26.7-25.7-51.7-42.9-74.5-7.7-10.2-10-23.5-5.2-35.3l21.7-53.5c6.7-16.4 0.2-35.3-15.2-44.1L669.1 96.6c-15.4-8.9-34.9-5.1-45.8 8.9l-35.4 45.3c-7.9 10.2-20.7 14.9-33.5 13.3-14-1.8-28.3-2.8-42.8-2.8-14.5 0-28.8 1-42.8 2.8-12.8 1.6-25.6-3.1-33.5-13.3l-35.4-45.3c-10.9-14-30.4-17.8-45.8-8.9L230.4 168c-15.4 8.9-21.8 27.7-15.2 44.1l21.7 53.5c4.8 11.9 2.5 25.1-5.2 35.3-17.2 22.8-31.7 47.8-42.9 74.5-5 11.8-15.3 20.4-28 22.1l-57.2 8C86 408 72.9 423 72.9 440.8v142.9c0 17.7 13.1 32.7 30.6 35.2l57.2 8c12.7 1.8 23 10.4 28 22.1 11.3 26.7 25.7 51.7 42.9 74.5 7.7 10.2 10 23.5 5.2 35.3l-21.7 53.5c-6.7 16.4-0.2 35.3 15.2 44.1L354 927.8c15.4 8.9 34.9 5.1 45.8-8.9l35.4-45.3c7.9-10.2 20.7-14.9 33.5-13.3 14 1.8 28.3 2.8 42.8 2.8 14.5 0 28.8-1 42.8-2.8 12.8-1.6 25.6 3.1 33.5 13.3l35.4 45.3c10.9 14 30.4 17.8 45.8 8.9l123.7-71.4c15.4-8.9 21.8-27.7 15.2-44.1l-21.7-53.5c-4.8-11.8-2.5-25.1 5.2-35.3 17.2-22.8 31.7-47.8 42.9-74.5 5-11.8 15.3-20.4 28-22.1l57.2-8c17.6-2.5 30.6-17.5 30.6-35.2V440.8c0.2-17.8-12.9-32.8-30.5-35.2z m-408 245.5c-76.7 0-138.9-62.2-138.9-138.9s62.2-138.9 138.9-138.9 138.9 62.2 138.9 138.9-62.2 138.9-138.9 138.9z" fill="#358ffa" p-id="4175"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739255816985" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6475" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M394.666667 106.666667h448a74.666667 74.666667 0 0 1 74.666666 74.666666v448a74.666667 74.666667 0 0 1-74.666666 74.666667H394.666667a74.666667 74.666667 0 0 1-74.666667-74.666667V181.333333a74.666667 74.666667 0 0 1 74.666667-74.666666z m0 64a10.666667 10.666667 0 0 0-10.666667 10.666666v448a10.666667 10.666667 0 0 0 10.666667 10.666667h448a10.666667 10.666667 0 0 0 10.666666-10.666667V181.333333a10.666667 10.666667 0 0 0-10.666666-10.666666H394.666667z m245.333333 597.333333a32 32 0 0 1 64 0v74.666667a74.666667 74.666667 0 0 1-74.666667 74.666666H181.333333a74.666667 74.666667 0 0 1-74.666666-74.666666V394.666667a74.666667 74.666667 0 0 1 74.666666-74.666667h74.666667a32 32 0 0 1 0 64h-74.666667a10.666667 10.666667 0 0 0-10.666666 10.666667v448a10.666667 10.666667 0 0 0 10.666666 10.666666h448a10.666667 10.666667 0 0 0 10.666667-10.666666v-74.666667z" fill="#358ffa" p-id="6476"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739168203743" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4192" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M874.011741 138.270167v746.665215c0 29.35461-12.003532 57.457666-33.336825 78.22207A115.455776 115.455776 0 0 1 760.234184 995.555611h-511.999004c-30.179497 0-59.135885-11.6622-80.469177-32.398159a109.084232 109.084232 0 0 1-33.30838-78.22207V138.270167h739.554118z m-85.333168 82.972283h-568.887783V884.906937c0 7.338652 2.986661 14.364417 8.305762 19.56974 5.347545 5.176879 12.57242 8.078207 20.138628 8.078206h511.999004c7.537763 0 14.791082-2.901328 20.110183-8.078206a27.278169 27.278169 0 0 0 8.334206-19.56974V221.24245z m-383.999253 580.720648c-23.580399 0-42.666584-18.545742-42.666584-41.471919V428.658935c0-22.897733 19.086185-41.471919 42.666584-41.471919 23.551954 0 42.666584 18.574186 42.666583 41.471919v331.860688c0 22.926178-19.114629 41.471919-42.666583 41.47192z m199.110724 0c-23.580399 0-42.666584-18.545742-42.666584-41.471919V428.658935c0-22.897733 19.086185-41.471919 42.666584-41.471919 23.551954 0 42.666584 18.574186 42.666583 41.471919v331.860688c0 22.926178-19.114629 41.471919-42.666583 41.47192z m355.554864-580.720648h-910.220452c-23.580399 0-42.666584-18.574186-42.666584-41.500364 0-22.897733 19.086185-41.471919 42.666584-41.471919h910.220452c23.551954 0 42.666584 18.574186 42.666584 41.471919 0 22.926178-19.114629 41.500364-42.666584 41.500364z m-331.377133-138.268176l7.111097 55.295893h-261.68838l7.111097-55.295893h247.466186zM652.998837 0.001991h-297.52831c-28.842611-0.227555-53.304785 20.565293-56.888779 48.383906l-21.902179 172.856553h455.110226l-22.186624-172.856553c-3.612437-27.818613-28.074612-48.611461-56.888778-48.355462h0.284444z" fill="#358ffa" p-id="4193"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739236641688" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4139" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M742.832175 461.155909h125.076465a50.844091 50.844091 0 0 1 0 101.688182h-137.787488l27.455809 27.45581A50.844091 50.844091 0 1 1 685.378352 660.973188l-107.789474-106.772592a50.844091 50.844091 0 0 1 0-71.690169l107.789474-107.789474a50.844091 50.844091 0 1 1 72.198609 71.690169z m-586.740815-305.064549h711.81728a50.844091 50.844091 0 0 1 0 101.688183h-711.81728a50.844091 50.844091 0 0 1 0-101.688183z m0 305.064549h305.064549a50.844091 50.844091 0 1 1 0 101.688182h-305.064549a50.844091 50.844091 0 0 1 0-101.688182z m0 305.064548h711.81728a50.844091 50.844091 0 0 1 0 101.688183h-711.81728a50.844091 50.844091 0 0 1 0-101.688183z" fill="#358ffa" p-id="4140"></path></svg>

After

Width:  |  Height:  |  Size: 1010 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739237192994" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4349" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M281.676266 461.155909l-14.744786-14.744787a50.844091 50.844091 0 0 1 71.690168-72.19861l107.789474 107.789474a50.844091 50.844091 0 0 1 0 71.690169L338.621648 660.973188a50.844091 50.844091 0 1 1-71.690168-71.690169l27.455809-27.455809H156.09136a50.844091 50.844091 0 0 1 0-101.688183z m586.740814-305.064549a50.844091 50.844091 0 0 1 0 101.688183h-711.817279a50.844091 50.844091 0 0 1 0-101.688183z m0 610.129097a50.844091 50.844091 0 0 1 0 101.688183h-711.817279a50.844091 50.844091 0 0 1 0-101.688183z m0-305.064548a50.844091 50.844091 0 0 1 0 101.688182h-305.064548a50.844091 50.844091 0 0 1 0-101.688182z" fill="#358ffa" p-id="4350"></path></svg>

After

Width:  |  Height:  |  Size: 985 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1738746708312" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4159" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M533.333333 896C332.8 896 170.666667 733.866667 170.666667 533.333333S332.8 170.666667 533.333333 170.666667 896 332.8 896 533.333333 733.866667 896 533.333333 896z m0-42.666667c174.933333 0 320-145.066667 320-320S708.266667 213.333333 533.333333 213.333333 213.333333 358.4 213.333333 533.333333 358.4 853.333333 533.333333 853.333333z m21.333334-170.666666v42.666666h-42.666667v-42.666666h42.666667z m0-341.333334v298.666667h-42.666667V341.333333h42.666667z" fill="#ffffff" p-id="4160"></path></svg>

After

Width:  |  Height:  |  Size: 834 B

1
src/assets/ai/option.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739428542367" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4174" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M919.6 405.6l-57.2-8c-12.7-1.8-23-10.4-28-22.1-11.3-26.7-25.7-51.7-42.9-74.5-7.7-10.2-10-23.5-5.2-35.3l21.7-53.5c6.7-16.4 0.2-35.3-15.2-44.1L669.1 96.6c-15.4-8.9-34.9-5.1-45.8 8.9l-35.4 45.3c-7.9 10.2-20.7 14.9-33.5 13.3-14-1.8-28.3-2.8-42.8-2.8-14.5 0-28.8 1-42.8 2.8-12.8 1.6-25.6-3.1-33.5-13.3l-35.4-45.3c-10.9-14-30.4-17.8-45.8-8.9L230.4 168c-15.4 8.9-21.8 27.7-15.2 44.1l21.7 53.5c4.8 11.9 2.5 25.1-5.2 35.3-17.2 22.8-31.7 47.8-42.9 74.5-5 11.8-15.3 20.4-28 22.1l-57.2 8C86 408 72.9 423 72.9 440.8v142.9c0 17.7 13.1 32.7 30.6 35.2l57.2 8c12.7 1.8 23 10.4 28 22.1 11.3 26.7 25.7 51.7 42.9 74.5 7.7 10.2 10 23.5 5.2 35.3l-21.7 53.5c-6.7 16.4-0.2 35.3 15.2 44.1L354 927.8c15.4 8.9 34.9 5.1 45.8-8.9l35.4-45.3c7.9-10.2 20.7-14.9 33.5-13.3 14 1.8 28.3 2.8 42.8 2.8 14.5 0 28.8-1 42.8-2.8 12.8-1.6 25.6 3.1 33.5 13.3l35.4 45.3c10.9 14 30.4 17.8 45.8 8.9l123.7-71.4c15.4-8.9 21.8-27.7 15.2-44.1l-21.7-53.5c-4.8-11.8-2.5-25.1 5.2-35.3 17.2-22.8 31.7-47.8 42.9-74.5 5-11.8 15.3-20.4 28-22.1l57.2-8c17.6-2.5 30.6-17.5 30.6-35.2V440.8c0.2-17.8-12.9-32.8-30.5-35.2z m-408 245.5c-76.7 0-138.9-62.2-138.9-138.9s62.2-138.9 138.9-138.9 138.9 62.2 138.9 138.9-62.2 138.9-138.9 138.9z" fill="#ffffff" p-id="4175"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739004307243" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4151" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M511.582491 63.413262C265.134543 63.413262 64.62588 263.921925 64.62588 510.369873s200.508663 446.957635 446.957635 446.957635 446.957635-200.508663 446.957635-446.957635S758.031463 63.413262 511.582491 63.413262zM509.001713 751.859903c-98.517781 0-182.467775-62.623269-214.771505-150.056598l0.327458-0.134053c-2.007727-4.036943-3.38305-8.422833-3.38305-13.237489 0-16.647145 13.494339-30.142507 30.142507-30.142507 13.389962 0 24.358781 8.877181 28.2893 20.955264l0.422625-0.172939c23.269983 65.442478 85.645612 112.503307 158.972665 112.503307 93.106538 0 168.845523-75.738985 168.845523-168.845523s-75.738985-168.845523-168.845523-168.845523c-20.432355 0-39.874149 3.980661-58.013275 10.66899l21.248953 40.742936c2.486634 2.677992 4.0175 6.2831 4.0175 10.243295 0 8.417717-8.404414 14.921851-15.365966 15.07023-0.102331 0-0.206708 0-0.309038 0-0.220011 0-0.427742 0-0.647753-0.013303l-150.579507-6.463202c-5.372358-0.234337-10.229992-3.310396-12.716626-8.093329-2.486634-4.76963-2.236947-10.509355 0.647753-15.055904l80.890308-127.179564c2.8847-4.533246 8.006348-7.151887 13.365402-6.960529 5.372358 0.234337 10.227945 3.312442 12.71458 8.095375l18.580171 35.625382c26.629497-10.855232 55.683207-16.963347 86.168522-16.963347 126.338407 0 229.130537 102.791108 229.130537 229.130537S635.340119 751.859903 509.001713 751.859903z" fill="#358ffa" p-id="4152" data-spm-anchor-id="a313x.search_index.0.i2.3bb43a815hZKzx" class=""></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739255742822" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5396" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M861.866667 349.866667l-102.4 102.4C733.866667 341.333333 631.466667 256 512 256c-140.8 0-256 115.2-256 256s115.2 256 256 256c136.533333 0 251.733333-106.666667 256-243.2l76.8-76.8c4.266667 21.333333 8.533333 42.666667 8.533333 68.266667 0 187.733333-153.6 341.333333-341.333333 341.333333s-341.333333-153.6-341.333333-341.333333 153.6-341.333333 341.333333-341.333334c110.933333 0 213.333333 55.466667 273.066667 136.533334l8.533333-12.8h119.466667l-51.2 51.2z" fill="#358ffa" p-id="5397"></path></svg>

After

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739187359056" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5593" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M684.032 403.456q-17.408-8.192-15.872-22.016t11.776-22.016q3.072-2.048 19.968-15.872t41.472-33.28q-43.008-49.152-102.4-77.312t-129.024-28.16q-64.512 0-120.832 24.064t-98.304 66.048-66.048 98.304-24.064 120.832q0 63.488 24.064 119.808t66.048 98.304 98.304 66.048 120.832 24.064q53.248 0 100.864-16.896t87.04-47.616 67.584-72.192 41.472-90.624q7.168-23.552 26.624-38.912t46.08-15.36q31.744 0 53.76 22.528t22.016 53.248q0 14.336-5.12 27.648-21.504 71.68-63.488 132.096t-99.84 103.936-128.512 68.096-148.48 24.576q-95.232 0-179.2-35.84t-145.92-98.304-98.304-145.92-36.352-178.688 36.352-179.2 98.304-145.92 145.92-98.304 179.2-36.352q105.472 0 195.584 43.52t153.6 118.272q23.552-17.408 39.424-30.208t19.968-15.872q6.144-5.12 13.312-7.68t13.312 0 10.752 10.752 6.656 24.576q1.024 9.216 2.048 31.232t2.048 51.2 1.024 60.416-1.024 58.88q-1.024 34.816-16.384 50.176-8.192 8.192-24.576 9.216t-34.816-3.072q-27.648-6.144-60.928-13.312t-63.488-14.848-53.248-14.336-29.184-9.728z" p-id="5594" fill="#358ffa"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 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

1
src/assets/vue.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

After

Width:  |  Height:  |  Size: 496 B

View File

@ -0,0 +1,379 @@
.closeBox{
.closeIcon{
width: 50px;
height: 50px;
cursor: pointer;
}
}
.expandBox{
.boxTop{
display: flex;
align-items: center;
.closeIcon{
width: 50px;
height: 50px;
cursor: pointer;
}
.titleText{
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 16px;
color: rgba(255, 255, 255, 0.85);
line-height: 26px;
text-align: left;
font-style: normal;
margin-left: 4px;
}
}
.dialogBox{
padding: 12px;
color: #fff;
width: 90%;
max-height: calc(100vh - 140px);
white-space: pre-wrap;
background: rgba(56, 56, 56, 0.51);
border-radius: 8px;
border: 1px solid #5F5F5F;
margin-top: 10px;
display: flex;
flex-direction: column;
.dialogContent{
width: 100%;
box-sizing: border-box;
max-height: 100vh;
padding: 12px;
flex: 1;
overflow-y: auto;
.dialogueBoxItem{
width: 100%;
display: flex;
align-items: flex-start;
margin-top: 12px;
.robotIcon{
width: 28px;
height: 28px;
margin-right: 8px;
}
.dialogueTextBox{
max-width: calc(100% - 36px);
min-width: 30px;
min-height: 22px;
background: rgba(27, 27, 27, 0.51);
border-radius: 4px;
padding: 8px 12px;
.deepseekContent{
div {
line-height: 1.6;
font-size: 16px;
}
h2 {
color: #2c3e50;
}
strong {
color: #333;
}
ul {
padding-left: 20px;
}
li {
margin-bottom: 5px;
strong{
color: #fff;
}
}
}
.firstClickTab{
width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
.clickItem{
display: inline-block;
margin-right: 8px;
cursor: pointer;
color: #1890ff;
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;
}
}
.moreOption{
width: 100%;
display: flex;
align-items: center;
margin-top: 16px;
.optionItem{
color: #1890ff!important;
cursor: pointer;
margin-right: 16px;
}
}
.style1{
color: #6590f5!important;
font-weight: bold;
}
.style2{
color: #FE7628!important;
font-weight: bold;
}
.style3{
color: #98aac9!important;
font-weight: bold;
}
.style4{
display: block;
text-indent: 2rem;
}
.style5{
display: block;
text-indent: 4rem;
}
.operateBox{
width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
.operateItem{
display: block;
width: 160px;
cursor: pointer;
}
}
.el-loading-mask{
background-color: transparent!important;
.el-loading-spinner{
transform: translateY(50%);
.circular{
width: 20px!important;
height: 20px!important;
}
}
}
.elTable{
background-color: transparent !important;
.el-table__inner-wrapper{
.el-table__header-wrapper{
.el-table__header{
thead{
tr{
background: transparent !important;
th{
background: transparent !important;
.cell{
color: #fff!important;
}
}
}
}
}
}
.el-table__body-wrapper{
.el-scrollbar{
.el-scrollbar__wrap{
.el-scrollbar__view{
.el-table__body{
.el-table__row{
background: transparent !important;
color: #fff!important;
}
tr:hover>td.el-table__cell{
background: transparent !important;
color: #fff!important;
}
.el-table__row--level-0{
.el-table__cell{
.cell{
// display: flex;
// align-items: center;
.el-table__expand-icon{
.el-icon{
color: #fff;
}
}
}
}
}
.el-table__row--level-1{
.el-table__cell{
.cell{
// display: flex;
// align-items: center;
.el-table__indent{
padding-left: 0!important;
}
}
}
}
.el-table__row--level-2{
.el-table__cell{
.cell{
// display: flex;
// align-items: center;
.el-table__indent{
padding-left: 0!important;
}
}
}
}
.el-table__row--level-3{
.el-table__cell{
.cell{
// display: flex;
// align-items: center;
.el-table__indent{
padding-left: 0!important;
}
}
}
}
.el-table__row--level-4{
.el-table__cell{
.cell{
// display: flex;
// align-items: center;
.el-table__indent{
padding-left: 0!important;
}
}
}
}
}
}
}
}
}
}
}
}
.loadingBox{
width: 100%;
height: 50px;
}
.userIcon{
width: 28px;
height: 28px;
margin-left: 8px;
}
}
}
.dialogContent::-webkit-scrollbar {
width: 0px; /* 隐藏水平滚动条 */
height: 0px; /* 隐藏垂直滚动条 */
}
.inputBox{
width: 100%;
box-sizing: border-box;
padding: 12px;
display: flex;
align-items: center;
.searchText{
width: calc(100% - 30px);
.el-input__wrapper{
background-color: transparent!important;
.el-input__inner{
color: #fff !important;
}
}
}
.searchIcon{
width: 24px;
height: 24px;
margin-left: 6px;
cursor: pointer;
}
}
.moreSelect{
width: 100%;
.filterFixed{
width: 100%;
box-sizing: border-box;
display: flex;
justify-content: flex-end;
.filterIcon{
width: 20px;
height: 20px;
cursor: pointer;
}
}
.filterBox{
width: 100%;
display: flex;
.filterList{
width: calc(100% - 28px);
box-sizing: border-box;
display: flex;
align-items: center;
flex-wrap: wrap;
.filterItem{
cursor: pointer;
margin-right: 6px;
padding: 4px 8px;
border-radius: 14px;
border: 1px solid rgb(90, 90, 90);
font-family: PingFangSC, "PingFang SC";
font-weight: 400;
font-size: 14px;
color: rgba(255, 255, 255, 0.85);
line-height: 20px;
text-align: left;
font-style: normal;
margin-bottom: 8px;
}
.selectFilterItem{
color: #1890ff !important;
border-color: #1890ff;
}
}
.filterIcon{
width: 15px;
height: 15px;
cursor: pointer;
margin-left: 8px;
}
}
}
}
}

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,729 @@
.main{
width: 100vw;
height: 100vh;
background: #292a2d;
display: flex;
align-items: center;
overflow: hidden;
.meng{
width: 100vw;
height: 100vh;
position: fixed;
top: 0;left: 0;
z-index:1;
}
.leftFilterBox{
width: 18vw;
height: calc(100vh - 20px);
box-sizing: border-box;
padding: 16px;
// position: fixed;
// top: 0;
// left: 0;
// overflow-y: auto;
.filterItem{
width: 100%;
height: 72px;
margin-bottom: 18px;
.topItem{
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
.titleBox{
display: flex;
align-items: center;
.itemTitle{
font-size: 16px;
font-weight: 600;
color: #fff;
}
.noticeIcon{
width: 24px;
height: 24px;
margin-left: 4px;
cursor: pointer;
}
}
}
}
.leftFilterTabBox{
height: calc(100vh - 540px);
.el-tabs__header{
.el-tabs__nav-wrap{
.el-tabs__nav-scroll{
.el-tabs__nav{
.el-tabs__item{
color: #fff;
}
.is-active{
color: #409eff;
}
}
}
}
}
.el-tabs__content{
.el-tab-pane{
height: calc(100% - 40px);
}
}
}
.roleBox{
height: 100%;
.bottomItem{
height: calc(100% - 50px);
.el-textarea{
height: 100%;
border-color: #292a2d!important;
.el-textarea__inner{
height: 100%;
background-color: #292a2d;
border-color: #292a2d!important;
color: #fff;
}
.el-textarea__inner::-webkit-scrollbar{
display: none;
}
}
}
.updatebox{
width: 100%;
display: flex;
align-items: center;
margin-top: 8px;
.updateIcon{
width: 20px;
height: 20px;
margin-right: 6px;
cursor: pointer;
}
.updateText{
font-size: 16px;
color: #fff;
cursor: pointer;
}
.updateText:hover{
color: #358ffa;
cursor: pointer;
}
}
}
}
.leftFilterBox::-webkit-scrollbar{
display: none;
}
.modalSelectBox{
width: 10vw;
height: 100vh;
box-sizing: border-box;
padding: 16px;
// position: fixed;
// left: 18vw;
// top: 0;
.showBox{
width: 100%;
height: 100%;
position: relative;
.selectBox{
color: #fff;
}
.indentationBox{
position: absolute;
top: -3px;
right: 0;
.indentationIcon{
width: 25px;
height: 25px;
cursor: pointer;
}
}
}
}
// .stopBox{
// width: 72vw;
// height: 40px;
// position: fixed;
// bottom: 80px;
// left: 28vw;
// display: flex;
// align-items: center;
// justify-content: center;
// cursor: pointer;
// .stopIcon{
// width: 26px;
// height: 26px;
// margin-right: 12px;
// }
// .stopText{
// color: #fff;
// }
// }
.dialogBox{
width: 72vw;
height: 100vh;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
padding-bottom: 20px;
.bigContent{
display: flex;
align-items: center;
// width: 72vw;
width: 100%;
// max-height: calc(100vh - 98px);
// min-height: calc(100vh - 168px);
// flex: 1;
height: calc(100vh - 198px);
// position: fixed;
// top: 0;
// left: 28vw;
.contentBox{
width: calc((100% - 20px) / 2);
height: 100%;
// height: calc(100vh - 100px);
// position: fixed;
// top: 0;
// left: 30vw;
box-sizing: border-box;
padding: 16px 16px 0;
.contentTitleBox{
width: 100%;
height: 30px;
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
.contentTitle{
color: #fff;
height: 30px;
display: flex;
align-items: center;
}
.phoneModalSelectBox{
width: 120px;
height: 120px;
position: absolute;
box-sizing: border-box;
padding: 12px;
top: 0;
left: 20px;
background-color: #fff;
transform: translateY(30px);
border-radius: 8px;
z-index: 2;
.phoneModal{
padding: 4px;
font-size: 12px;
}
}
.rightBox{
position: relative;
.optionIcon{
width: 30px;
height: 30px;
}
.phoneRightOptionBox{
width: 150px;
height: 60px;
position: absolute;
box-sizing: border-box;
padding: 12px;
top: 30px;
right: 10px;
background-color: #fff;
border-radius: 8px;
z-index: 2;
.OptionItem{
width: 100%;
height: 72px;
margin-bottom: 18px;
.topItem{
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
.titleBox{
display: flex;
align-items: center;
.itemTitle{
font-size: 16px;
font-weight: 600;
color: #000;
}
.noticeIcon{
width: 24px;
height: 24px;
margin-left: 4px;
cursor: pointer;
}
}
}
}
}
}
}
.boxContentBox{
width: 100%;
height: calc(100% - 40px);
overflow-y: scroll;
.contentItem{
width: 100%;
display: flex;
.defaultItem{
box-sizing: border-box;
padding: 12px;
margin-bottom: 12px;
}
.roleDefaultItem{
max-width: 80%;
color: #f8faff;
background-color: #414158;
border-radius: 14px;
.depthAnalysis{
width: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
color: #409efe;
cursor: pointer;
}
.descText{
color: #a6a6a6;
font-size: 12px;
line-height: 20px;
width: 100%;
height: 200px;
overflow-y: auto;
}
.descText::-webkit-scrollbar{
display: none;
}
.contentText{
color: #fff;
font-size: 16px;
line-height: 28px;
width: 100%;
max-height: 300px;
overflow-y: auto;
word-break: break-all;
}
.contentText::-webkit-scrollbar{
display: none;
}
}
.assistantItem{
max-width: 80%;
.descText{
color: #a6a6a6;
font-size: 12px;
line-height: 20px;
}
.contentText{
color: #fff;
font-size: 16px;
line-height: 28px;
div {
line-height: 1.6;
font-size: 16px;
strong{
color: #fff;
}
}
hr{
margin: 8px 0;
}
p{
strong{
color: #fff;
}
}
pre{
display: inline-block;
width: 100%;
code{
display: inline-block;
width: 100%;
}
}
h1 {
color: #fff;
strong{
color: #fff;
}
}
h2 {
color: #fff;
strong{
color: #fff;
}
}
h3 {
color: #fff;
strong{
color: #fff;
}
}
h4 {
color: #fff;
strong{
color: #fff;
}
}
h5 {
color: #fff;
strong{
color: #fff;
}
}
h6 {
color: #fff;
strong{
color: #fff;
}
}
strong {
color: #fff;
strong{
color: #fff;
}
}
ul {
padding-left: 20px;
strong{
color: #fff;
}
}
ol{
box-sizing: border-box;
padding: 0 5px;
// li {
// margin-bottom: 5px;
// box-sizing: border-box;
// strong{
// color: #fff;
// }
// }
// li::marker{
// display: block!important;
// width: 30px;
// height: 30px;
// color: #fff;
// text-indent: 2rem!important;
// unicode-bidi: normal!important;
// text-align: center!important;
// text-align-last: center!important;
// font-variant-numeric: normal!important;
// }
}
li {
margin-bottom: 5px;
box-sizing: border-box;
strong{
color: #fff;
}
}
table{
thead{
tr{
th{
strong{
color: #fff;
}
}
}
}
}
}
}
.userItem{
color: #f8faff;
// background-color: #414158;
width: 80%;
// border-radius: 14px;
// font-size: 16px;
display: flex;
justify-content: flex-end;
align-items: center;
.reloadBox{
display: none;
}
.userText{
background-color: #414158;
max-width: 100%;
color: #f8faff;
border-radius: 14px;
font-size: 16px;
padding: 12px;
display: inline-block;
}
}
.userItem:hover{
.reloadBox{
display: block;
.img{
width: 30px;
height: 30px;
margin-right: 12px;
cursor: pointer;
}
}
}
.loading{
.loadingTextBox{
padding: 12px;
border-radius: 14px;
background: #494949;
color: #fff;
font-size: 12px;
line-height: 20px;
margin-bottom: 12px;
}
.loadingBox{
display: block;
width: 20px;
height: 20px;
font-size: 20px;
.el-loading-mask{
background: transparent!important;
.el-loading-spinner{
.circular{
font-size: 20px!important;
width: 20px!important;
height: 20px!important;
}
}
}
}
}
}
.contentImgBox{
width: 100%;
height: 200px;
display: flex;
justify-content: center;
.contentImg{
width: 200px;
height: 200px;
}
}
.toolBox{
width: 80%;
display: flex;
align-items: center;
// justify-content: center;
justify-content: flex-end;
.deleteBox{
display: flex;
justify-content: center;
align-items: center;
.deleteIcon{
width: 16px;
height: 16px;
margin-right: 8px;
cursor: pointer;
}
.deleteText{
font-size: 14px;
// color: #fff;
color: #a6a6a6;
cursor: pointer;
}
.deleteText:hover{
color: #358ffa;
}
}
}
}
.boxContentBox::-webkit-scrollbar{
display: none;
}
}
}
.inputBox{
width: 50vw;
max-height: 168px;
min-height: 98px;
// height: 90px;
// position: fixed;
// bottom: 20px;
// left: 30vw;
// display: flex;
// align-items: center;
box-sizing: border-box;
padding: 12px 0 0;
border-radius: 16px;
background-color: #404045;
.showBox{
width: 100px;
height: 100%;
margin-right: 10px;
display: flex;
align-items: center;
.selectBox{
color: #fff;
}
}
.input{
width: 100%;
// width: calc(100% - 200px);
// height: 50px;
text-indent: 1rem;
background-color: #404045;
border-width: 0;
color: #fff;
font-size: 16px;
.el-textarea__inner{
// border-radius: 32px;
padding: 1px 16px;
background-color: #404045;
color: #fff;
box-shadow: none;
}
.el-textarea__inner::-webkit-scrollbar{
display: none;
}
}
.bottomInput{
width: 100%;
height: 60px;
box-sizing: border-box;
padding: 12px;
display: flex;
align-items: center;
justify-content: space-between;
.leftBox{
display: flex;
align-items: center;
.handleV3{
font-size: 14px;
color: #F8FAFF;
padding: 4px 8px;
border-radius: 24px;
border: 1px solid #F8FAFF;
cursor: pointer;
margin-right: 8px;
}
.handleV3Select{
color: #559de9;
border: 1px solid #559de9;
background-color: #48518e;
}
.changeBigBox{
position: relative;
.phoneChangeBox{
font-size: 14px;
color: #F8FAFF;
padding: 4px 8px;
border-radius: 24px;
border: 1px solid #F8FAFF;
cursor: pointer;
}
.phoneModalSelectBox{
width: 120px;
height: 120px;
position: absolute;
box-sizing: border-box;
padding: 12px;
top: 0;
left: 50%;
background-color: #fff;
transform: translateY(-120px);
border-radius: 8px;
z-index: 2;
.phoneModal{
padding: 4px;
font-size: 12px;
}
}
}
}
.sendBox{
cursor: pointer;
.iconImg{
width: 30px;
height: 30px;
}
}
}
.btn{
width: 70px;
height: 100%;
margin-left: 10px;
border-radius: 16px;
cursor: pointer;
border-width: 0;
background: #566cfd;
color: #fff;
}
.stopBox{
display: flex;
align-items: center;
justify-content: center;
margin-left: 12px;
cursor: pointer;
.stopIcon{
width: 26px;
height: 26px;
margin-right: 12px;
}
.stopText{
color: #fff;
}
}
}
}
}
@media only screen and (max-width: 768px) {
.main{
width: 100vw;
height: 100vh;
background: #292a2d;
display: flex;
align-items: center;
.leftFilterBox{
display: none;
}
.modalSelectBox{
display: none;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,227 @@
import { wrapTreeNode } from "../../options/serveice";
import request from "../../request/request";
import requestCode from "../../request/requestCode";
// 拿到服务区列表
export async function handleGetServerpartList(params: any) {
const data: any = await requestCode.get('/BaseInfo/GetServerpartList', params)
if (data.Result_Code !== 100) {
return {
data: [],
current: 1,
pageSize: 20,
total: 0,
success: true,
};
}
return data.Result_Data.List;
}
// 拿到枚举列表
export async function getFieldEnumTree(params: any) {
const data: any = await request.get('/FrameWork/GetFieldEnumTree', params)
if (data.Result_Code !== 100) {
return {
data: [],
current: 1,
pageSize: 20,
total: 0,
success: true,
};
}
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) {
const data: any = await requestCode.get('/Analysis/TranslateSentence', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data
}
// 拿到这个问题的配置明细
export async function handleGetANALYSISRULEDetail(params: any) {
const data: any = await request.get('/Analysis/GetANALYSISRULEDetail', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data
}
// 拿到配置列表 多个的时候按照优先级去选择
export async function handleGetANALYSISRULEList(params: any) {
const data: any = await request.post('/Analysis/GetANALYSISRULEList', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}
// 语义识别接口 同步接口
export async function handleSynchroSENTENCE(params: any) {
const data: any = await request.post('/Analysis/SynchroSENTENCE', params)
if (data.Result_Code !== 100) {
return 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);
}
// 经营项目列表
export async function handleGetBrandReceivables(params: any) {
const data: any = await request.get('/BusinessProject/GetBrandReceivables', params)
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 handleGetPROMPTList(params: any) {
const data: any = await request.post('/Analysis/GetPROMPTList', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data;
}
export async function handleSynchroPROMPT(params: any) {
const data: any = await request.post('/Analysis/SynchroPROMPT', params)
if (data.Result_Code !== 100) {
return data
}
return 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;
}
// 服务区门店的实时数据
export async function handleGetTransactionDetailList(params: any) {
const data: any = await requestCode.get('/Revenue/GetTransactionDetailList', params)
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}

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
}

179
src/components/robot.vue Normal file
View File

@ -0,0 +1,179 @@
<script setup lang="ts">
import { AxiosResponse } from "axios";
import { log } from "console";
import { onMounted, reactive, ref } from "vue";
import { wrapTreeNode } from "../options/serveice";
import { GetProjectSplitSummary } from "./service";
//
let dialogueList = reactive<any>([]);
//
let printText = ref<string>("");
//
const isVisible = ref<boolean>(false);
//
const displayedText = ref<string>("");
//
const searchText = ref<string>("");
onMounted(async () => {
await handleGetData();
dialogueList[0] = {
text: "",
type: 1,
searchType: "default",
};
printText.value =
"您好!我是服务区商业智能助理小驿。\n您想了解服务区哪些方面的信息";
console.log("printText", printText.value);
handlePrintText();
// setTimeout(() => {
// dialogueList[0] = {
// text: "驿\n",
// type: 1,
// searchType: "default",
// };
// }, 2000);
});
//
const handlePrintText = () => {
let index = 0;
displayedText.value = ""; //
const interval = setInterval(() => {
// <br>
if (printText.value[index] === "\n") {
displayedText.value += "<br>";
} else {
displayedText.value += printText.value[index];
}
index++;
//
if (index === printText.value.length) {
clearInterval(interval);
}
}, 100);
};
//
const handleGetData = async () => {
let req: any = {
ServerpartId: "416",
StatisticsMonth: "202411",
};
const data: any = await GetProjectSplitSummary(req);
// let list: any = wrapTreeNode(data);
console.log("data", data);
};
</script>
<template>
<div class="main">
<div class="content">
<div v-for="(item, index) in dialogueList" :key="index"
:class="item.type === 1 ? 'dialogueItem1' : 'dialogueItem2'">
<div v-html="index === dialogueList.length - 1 ? displayedText : item.text"></div>
</div>
</div>
<div class="InputBox">
<div class="inputContent">
<img class="voiceIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/robot/microphone.png" />
<div class="input">
<el-input v-model="searchText" placeholder="有问题尽管问我~" />
</div>
</div>
</div>
</div>
</template>
<style scoped lang='less'>
.main {
width: 100vw;
height: 100vh;
background-image: url("https://eshangtech.com/ShopICO/ahyd-BID/robot/robotBackground.png");
background-repeat: no-repeat;
position: relative;
.content {
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 16px;
.dialogueItem1 {
max-width: 100%;
box-sizing: border-box;
padding: 12px 16px;
background: #ffffff;
border-radius: 0px 12px 12px 12px;
}
.dialogueItem2 {
max-width: 100%;
box-sizing: border-box;
padding: 8px 12px;
background: #2363ff;
border-radius: 12px 0px 12px 12px;
}
}
.InputBox {
width: 100%;
height: 90px;
box-sizing: border-box;
padding-bottom: 56px;
background: #fff;
position: fixed;
bottom: 0;
left: 0;
.inputContent {
width: 100%;
height: 56px;
box-sizing: border-box;
padding: 8px 16px 4px;
display: flex;
align-items: center;
.voiceIcon {
width: 24px;
height: 24px;
margin-right: 8px;
}
.input {
width: calc(100% - 32px);
height: 100%;
background: #f2f3f7;
border-radius: 22px;
display: flex;
align-items: center;
box-sizing: border-box;
padding-left: 5px;
.el-input {
width: 95%;
::v-deep(.el-input__wrapper) {
background-color: transparent !important;
box-shadow: none !important;
}
}
}
}
}
}
</style>

17
src/components/service.ts Normal file
View File

@ -0,0 +1,17 @@
import request from "../request/request";
export async function GetProjectSplitSummary(params: any) {
const data: any = await request.get('/BusinessProject/GetMonthSummaryList', params)
if (data.Result_Code !== 100) {
return {
data: [],
current: 1,
pageSize: 20,
total: 0,
success: true,
};
}
return data.Result_Data;
}

16
src/main.ts Normal file
View File

@ -0,0 +1,16 @@
import {
createApp
} from 'vue';
import App from './App.vue';
import router from './router';
import { createPinia } from 'pinia';
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
const app = createApp(App);
app.use(ElementPlus)
app.use(router);
app.use(createPinia());
app.mount('#app');

60
src/options/serveice.ts Normal file
View File

@ -0,0 +1,60 @@
export const wrapTreeNode = (data: any) => {
const wrapData: any = data.map((item: any) => {
const node = { ...item.node };
if (item.children && item.children.length > 0) {
node.children = wrapTreeNode(item.children);
}
return node
});
return wrapData;
}
// 若有小数保留两位小数 没有小数不保留
export const formatNumber = (num: number) => {
// 判断是否是小数
if (num % 1 !== 0) {
return num.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
} else {
return num.toLocaleString(); // 使用千分号,不保留小数位
}
}
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); // 转换为数字
};
// 截取小数点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;

80
src/request/request.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: 'https://api.eshangtech.com/EShangApiMain', // 默认请求前缀
timeout: 60000, // 请求超时时间
headers: {
"provincecode": "340000",
'Content-Type': 'application/json',
},
});
// 请求拦截器
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

@ -0,0 +1,81 @@
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: 'https://api.eshangtech.com/CommercialApi', // 默认请求前缀
timeout: 60000, // 请求超时时间
headers: {
"provincecode": "340000",
'Content-Type': 'application/json',
},
});
// 请求拦截器
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;

Some files were not shown because too many files have changed in this diff Show More