first commit
24
.gitignore
vendored
Normal 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
@ -0,0 +1,3 @@
|
||||
{
|
||||
"recommendations": ["Vue.volar"]
|
||||
}
|
||||
10
auto-imports.d.ts
vendored
Normal 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
@ -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
28
eslint.config.js
Normal 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
@ -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
42
package.json
Normal 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
@ -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
@ -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
|
After Width: | Height: | Size: 12 KiB |
1
src/assets/ai/activeOption.svg
Normal 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 |
1
src/assets/ai/copyIcon.svg
Normal 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 |
1
src/assets/ai/deleteIcon.svg
Normal 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
|
After Width: | Height: | Size: 1.7 KiB |
1
src/assets/ai/indentation.svg
Normal 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 |
1
src/assets/ai/indentationRight.svg
Normal 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 |
1
src/assets/ai/noticeIcon.svg
Normal 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
@ -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 |
BIN
src/assets/ai/profileIcon.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
src/assets/ai/pullUp.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
1
src/assets/ai/reloadIcon.svg
Normal 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 |
1
src/assets/ai/reloadSmallIcon.svg
Normal 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 |
BIN
src/assets/ai/searchIconBlue.png
Normal file
|
After Width: | Height: | Size: 930 B |
BIN
src/assets/ai/stopIcon.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
1
src/assets/ai/updateIcon.svg
Normal 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
|
After Width: | Height: | Size: 4.5 KiB |
BIN
src/assets/servicePart/ES.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/servicePart/accumulate.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/servicePart/area.png
Normal file
|
After Width: | Height: | Size: 469 B |
BIN
src/assets/servicePart/averageOrder.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
src/assets/servicePart/baby.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
src/assets/servicePart/badWater.png
Normal file
|
After Width: | Height: | Size: 486 B |
BIN
src/assets/servicePart/buildArea.png
Normal file
|
After Width: | Height: | Size: 305 B |
BIN
src/assets/servicePart/bus.png
Normal file
|
After Width: | Height: | Size: 456 B |
BIN
src/assets/servicePart/car.png
Normal file
|
After Width: | Height: | Size: 613 B |
BIN
src/assets/servicePart/carService.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/assets/servicePart/charge.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
src/assets/servicePart/chemicals.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/servicePart/crossFlow.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
src/assets/servicePart/customerRevenue.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
src/assets/servicePart/date.png
Normal file
|
After Width: | Height: | Size: 247 B |
BIN
src/assets/servicePart/descIcon.png
Normal file
|
After Width: | Height: | Size: 211 B |
BIN
src/assets/servicePart/enterCar.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
src/assets/servicePart/fixed.png
Normal file
|
After Width: | Height: | Size: 950 B |
BIN
src/assets/servicePart/food.png
Normal file
|
After Width: | Height: | Size: 601 B |
BIN
src/assets/servicePart/fun.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
src/assets/servicePart/funBg1.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
src/assets/servicePart/funBg2.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
src/assets/servicePart/funBg3.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
src/assets/servicePart/headerTop.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
src/assets/servicePart/hotal.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/servicePart/maintenance.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/assets/servicePart/manWC.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/assets/servicePart/managerUnit.png
Normal file
|
After Width: | Height: | Size: 542 B |
BIN
src/assets/servicePart/meetingContent.png
Normal file
|
After Width: | Height: | Size: 286 B |
BIN
src/assets/servicePart/minimart.png
Normal file
|
After Width: | Height: | Size: 551 B |
BIN
src/assets/servicePart/moneyBack.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/servicePart/operate.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/servicePart/orderBusiness.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
src/assets/servicePart/ownerSelf.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
src/assets/servicePart/pageIcon.png
Normal file
|
After Width: | Height: | Size: 259 B |
BIN
src/assets/servicePart/person.png
Normal file
|
After Width: | Height: | Size: 833 B |
BIN
src/assets/servicePart/proportion.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
src/assets/servicePart/propryRight.png
Normal file
|
After Width: | Height: | Size: 332 B |
BIN
src/assets/servicePart/rage.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
src/assets/servicePart/revenceBack.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/assets/servicePart/revenceSome.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/assets/servicePart/revenue.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
src/assets/servicePart/room.png
Normal file
|
After Width: | Height: | Size: 518 B |
BIN
src/assets/servicePart/serviceIcon.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
src/assets/servicePart/shop.png
Normal file
|
After Width: | Height: | Size: 559 B |
BIN
src/assets/servicePart/stopArea.png
Normal file
|
After Width: | Height: | Size: 753 B |
BIN
src/assets/servicePart/store.png
Normal file
|
After Width: | Height: | Size: 320 B |
BIN
src/assets/servicePart/thirdToilets.png
Normal file
|
After Width: | Height: | Size: 902 B |
BIN
src/assets/servicePart/tidalSpace.png
Normal file
|
After Width: | Height: | Size: 316 B |
BIN
src/assets/servicePart/trainCar.png
Normal file
|
After Width: | Height: | Size: 669 B |
BIN
src/assets/servicePart/treeTop.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
src/assets/servicePart/uploadStore.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src/assets/servicePart/vehicleRefueling.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/servicePart/water.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/assets/servicePart/waterBoiler.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/assets/servicePart/womenWC.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
1
src/assets/vue.svg
Normal 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 |
379
src/components/deepseek/components/RobotDialogueBox.less
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
3009
src/components/deepseek/components/RobotDialogueBox.vue
Normal file
20792
src/components/deepseek/components/detailText.js
Normal file
729
src/components/deepseek/index.less
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
3165
src/components/deepseek/index.vue
Normal file
227
src/components/deepseek/service.ts
Normal 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
|
||||
}
|
||||
6
src/components/newService.ts
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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;
|
||||
81
src/request/requestCode.ts
Normal 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;
|
||||