xiabin
9
.editorconfig
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*.{js,jsx,ts,tsx,vue}]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
end_of_line = auto
|
6
.env.development
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# 开发环境
|
||||||
|
VITE_PORT = 9000
|
||||||
|
VITE_APP_NAME = 'digital-agriculture-screen'
|
||||||
|
VITE_APP_TITLE = '政务云数字农业智慧大屏'
|
||||||
|
VITE_APP_BASE_API = '/apis'
|
||||||
|
VITE_APP_BASE_URL = 'http://192.168.18.99:8080'
|
5
.env.production
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# 生产环境
|
||||||
|
VITE_APP_NAME = 'digital-agriculture-screen'
|
||||||
|
VITE_APP_TITLE = '政务云数字农业智慧大屏'
|
||||||
|
VITE_APP_BASE_API = '/apis'
|
||||||
|
VITE_APP_BASE_URL = ''
|
5
.env.test
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# 测试环境
|
||||||
|
VITE_APP_NAME = 'digital-agriculture-screen'
|
||||||
|
VITE_APP_TITLE = '政务云数字农业智慧大屏'
|
||||||
|
VITE_APP_BASE_API = '/apis'
|
||||||
|
VITE_APP_BASE_URL = ''
|
14
.eslintignore
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
*.sh
|
||||||
|
*.md
|
||||||
|
*.woff
|
||||||
|
*.ttf
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
|
.husky
|
||||||
|
.local
|
||||||
|
dist
|
||||||
|
src/assets
|
||||||
|
node_modules
|
||||||
|
Dockerfile
|
||||||
|
stats.html
|
||||||
|
tailwind.config.js
|
62
.eslintrc.cjs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: .eslintrc.cjs
|
||||||
|
* 在VSCode中安装ESLint插件,编写过程中检测代码质量
|
||||||
|
* ESLint 代码质量校验相关配置
|
||||||
|
* 这里使用prettier作为代码格式化工具,用ESLint做代码质检
|
||||||
|
* 相关配置使用下面extends扩展先做默认设置
|
||||||
|
* 在.prettierrc.cjs文件中配置好后,格式化规则会以.prettierrc.cjs作为最终格式,所以不建议在本文件中做代码格式化相关配置
|
||||||
|
* 相关prettier配置ESLint会默认加载为代码质检 格式化以prettier为主
|
||||||
|
* 在本配置文件中只做代码质量约束规范配置
|
||||||
|
* @Author: zenghua.wang
|
||||||
|
* @Date: 2022-09-22 15:53:58
|
||||||
|
* @LastEditors: zenghua.wang
|
||||||
|
* @LastEditTime: 2024-03-22 10:19:39
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
es2021: true,
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
extends: [
|
||||||
|
'eslint-config-prettier',
|
||||||
|
'eslint:recommended',
|
||||||
|
// 'plugin:@typescript-eslint/recommended',
|
||||||
|
'plugin:vue/vue3-recommended',
|
||||||
|
'plugin:vue/vue3-essential',
|
||||||
|
'plugin:prettier/recommended',
|
||||||
|
],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
env: {
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
files: ['.eslintrc.{js,cjs}'],
|
||||||
|
parserOptions: {
|
||||||
|
sourceType: 'script',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
sourceType: 'module',
|
||||||
|
requireConfigFile: false,
|
||||||
|
parser: '@babel/eslint-parser',
|
||||||
|
// parser: '@typescript-eslint/parser',
|
||||||
|
},
|
||||||
|
plugins: ['vue', 'prettier'],
|
||||||
|
globals: {
|
||||||
|
defineProps: 'readonly',
|
||||||
|
defineEmits: 'readonly',
|
||||||
|
defineExpose: 'readonly',
|
||||||
|
withDefaults: 'readonly',
|
||||||
|
},
|
||||||
|
// 这里时配置规则的,自己看情况配置
|
||||||
|
rules: {
|
||||||
|
'prettier/prettier': 'error',
|
||||||
|
'no-debugger': 'off',
|
||||||
|
'no-unused-vars': 'off',
|
||||||
|
'vue/no-unused-vars': 'off',
|
||||||
|
'vue/multi-word-component-names': 'off',
|
||||||
|
},
|
||||||
|
};
|
115
.gitignore
vendored
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Snowpack dependency directory (https://snowpack.dev/)
|
||||||
|
web_modules/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
# .env
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
.parcel-cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
.next
|
||||||
|
out
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
.cache/
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
.vscode-test
|
||||||
|
|
||||||
|
# yarn v2
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/unplugged
|
||||||
|
.yarn/build-state.yml
|
||||||
|
.yarn/install-state.gz
|
||||||
|
.pnp.*
|
20
.prettierignore
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
## OS
|
||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
.idea
|
||||||
|
.editorconfig
|
||||||
|
package-lock.json
|
||||||
|
.npmrc
|
||||||
|
|
||||||
|
# Ignored suffix
|
||||||
|
*.log
|
||||||
|
*.md
|
||||||
|
*.svg
|
||||||
|
*.png
|
||||||
|
*ignore
|
||||||
|
|
||||||
|
## Local
|
||||||
|
|
||||||
|
## Built-files
|
||||||
|
.cache
|
||||||
|
dist
|
52
.prettierrc.cjs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: .prettierrc.cjs
|
||||||
|
* 在VSCode中安装prettier插件 打开插件配置填写`.prettierrc.js` 将本文件作为其代码格式化规范
|
||||||
|
* 在本文件中修改格式化规则,不会同时触发改变ESLint代码检查,所以每次修改本文件需要重启VSCode,ESLint检查才能同步代码格式化
|
||||||
|
* 需要相应的代码格式化规范请自行查阅配置,下面为默认项目配置
|
||||||
|
* @Author: zenghua.wang
|
||||||
|
* @Date: 2022-09-22 15:53:58
|
||||||
|
* @LastEditors: zenghua.wang
|
||||||
|
* @LastEditTime: 2024-01-24 19:22:25
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
// 一行最多多少个字符
|
||||||
|
printWidth: 150,
|
||||||
|
// 指定每个缩进级别的空格数
|
||||||
|
tabWidth: 2,
|
||||||
|
// 使用制表符而不是空格缩进行
|
||||||
|
useTabs: false,
|
||||||
|
// 在语句末尾是否需要分号
|
||||||
|
semi: true,
|
||||||
|
// 是否使用单引号
|
||||||
|
singleQuote: true,
|
||||||
|
// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
|
||||||
|
quoteProps: 'as-needed',
|
||||||
|
// 在JSX中使用单引号而不是双引号
|
||||||
|
jsxSingleQuote: false,
|
||||||
|
// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
|
||||||
|
trailingComma: 'es5',
|
||||||
|
// 在对象文字中的括号之间打印空格
|
||||||
|
bracketSpacing: true,
|
||||||
|
// jsx 标签的反尖括号需要换行
|
||||||
|
jsxBracketSameLine: false,
|
||||||
|
// 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
|
||||||
|
arrowParens: 'always',
|
||||||
|
// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
|
||||||
|
rangeStart: 0,
|
||||||
|
rangeEnd: Infinity,
|
||||||
|
// 指定要使用的解析器,不需要写文件开头的 @prettier
|
||||||
|
requirePragma: false,
|
||||||
|
// 不需要自动在文件开头插入 @prettier
|
||||||
|
insertPragma: false,
|
||||||
|
// 使用默认的折行标准 always\never\preserve
|
||||||
|
proseWrap: 'preserve',
|
||||||
|
// 指定HTML文件的全局空格敏感度 css\strict\ignore
|
||||||
|
htmlWhitespaceSensitivity: 'css',
|
||||||
|
// Vue文件脚本和样式标签缩进
|
||||||
|
vueIndentScriptAndStyle: false,
|
||||||
|
//在 windows 操作系统中换行符通常是回车 (CR) 加换行分隔符 (LF),也就是回车换行(CRLF),
|
||||||
|
//然而在 Linux 和 Unix 中只使用简单的换行分隔符 (LF)。
|
||||||
|
//对应的控制字符为 "\n" (LF) 和 "\r\n"(CRLF)。auto意为保持现有的行尾
|
||||||
|
// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
|
||||||
|
endOfLine: 'auto',
|
||||||
|
};
|
17
.stylelintignore
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# .stylelintignore
|
||||||
|
# 旧的不需打包的样式库
|
||||||
|
*.min.css
|
||||||
|
|
||||||
|
# 其他类型文件
|
||||||
|
*.js
|
||||||
|
*.jpg
|
||||||
|
*.png
|
||||||
|
*.eot
|
||||||
|
*.ttf
|
||||||
|
*.woff
|
||||||
|
*.json
|
||||||
|
|
||||||
|
# 测试和打包目录
|
||||||
|
/dist/*
|
||||||
|
/node_modules/*
|
||||||
|
/src/assets/*
|
131
.stylelintrc.cjs
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: .stylelintrc.cjs
|
||||||
|
* @Author: zenghua.wang
|
||||||
|
* @Date: 2022-09-22 15:53:58
|
||||||
|
* @LastEditors: zenghua.wang
|
||||||
|
* @LastEditTime: 2024-01-24 18:49:26
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
plugins: ['stylelint-order', 'stylelint-scss'],
|
||||||
|
extends: [
|
||||||
|
'stylelint-config-standard',
|
||||||
|
'stylelint-config-standard-scss',
|
||||||
|
'stylelint-config-prettier',
|
||||||
|
'stylelint-config-html/vue',
|
||||||
|
'stylelint-config-recommended-vue',
|
||||||
|
'stylelint-config-recommended-scss'
|
||||||
|
],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ['**/*.{html,vue}'],
|
||||||
|
customSyntax: 'postcss-html'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
indentation: 2,
|
||||||
|
'selector-pseudo-element-no-unknown': [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
ignorePseudoElements: ['v-deep', ':deep']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'number-leading-zero': 'always',
|
||||||
|
'no-descending-specificity': null,
|
||||||
|
'function-url-quotes': 'always',
|
||||||
|
'string-quotes': 'single',
|
||||||
|
'unit-case': null,
|
||||||
|
'color-hex-case': 'lower',
|
||||||
|
'color-hex-length': 'long',
|
||||||
|
'rule-empty-line-before': 'never',
|
||||||
|
'font-family-no-missing-generic-family-keyword': null,
|
||||||
|
'selector-type-no-unknown': null,
|
||||||
|
'block-opening-brace-space-before': 'always',
|
||||||
|
'at-rule-no-unknown': null,
|
||||||
|
'no-duplicate-selectors': null,
|
||||||
|
'property-no-unknown': null,
|
||||||
|
'no-empty-source': null,
|
||||||
|
'selector-class-pattern': null,
|
||||||
|
'keyframes-name-pattern': null,
|
||||||
|
'selector-pseudo-class-no-unknown': [true, { ignorePseudoClasses: ['global', 'deep'] }],
|
||||||
|
'function-no-unknown': null,
|
||||||
|
'order/properties-order': [
|
||||||
|
'position',
|
||||||
|
'top',
|
||||||
|
'right',
|
||||||
|
'bottom',
|
||||||
|
'left',
|
||||||
|
'z-index',
|
||||||
|
'display',
|
||||||
|
'justify-content',
|
||||||
|
'align-items',
|
||||||
|
'float',
|
||||||
|
'clear',
|
||||||
|
'overflow',
|
||||||
|
'overflow-x',
|
||||||
|
'overflow-y',
|
||||||
|
'margin',
|
||||||
|
'margin-top',
|
||||||
|
'margin-right',
|
||||||
|
'margin-bottom',
|
||||||
|
'margin-left',
|
||||||
|
'padding',
|
||||||
|
'padding-top',
|
||||||
|
'padding-right',
|
||||||
|
'padding-bottom',
|
||||||
|
'padding-left',
|
||||||
|
'width',
|
||||||
|
'min-width',
|
||||||
|
'max-width',
|
||||||
|
'height',
|
||||||
|
'min-height',
|
||||||
|
'max-height',
|
||||||
|
'font-size',
|
||||||
|
'font-family',
|
||||||
|
'font-weight',
|
||||||
|
'border',
|
||||||
|
'border-style',
|
||||||
|
'border-width',
|
||||||
|
'border-color',
|
||||||
|
'border-top',
|
||||||
|
'border-top-style',
|
||||||
|
'border-top-width',
|
||||||
|
'border-top-color',
|
||||||
|
'border-right',
|
||||||
|
'border-right-style',
|
||||||
|
'border-right-width',
|
||||||
|
'border-right-color',
|
||||||
|
'border-bottom',
|
||||||
|
'border-bottom-style',
|
||||||
|
'border-bottom-width',
|
||||||
|
'border-bottom-color',
|
||||||
|
'border-left',
|
||||||
|
'border-left-style',
|
||||||
|
'border-left-width',
|
||||||
|
'border-left-color',
|
||||||
|
'border-radius',
|
||||||
|
'text-align',
|
||||||
|
'text-justify',
|
||||||
|
'text-indent',
|
||||||
|
'text-overflow',
|
||||||
|
'text-decoration',
|
||||||
|
'white-space',
|
||||||
|
'color',
|
||||||
|
'background',
|
||||||
|
'background-position',
|
||||||
|
'background-repeat',
|
||||||
|
'background-size',
|
||||||
|
'background-color',
|
||||||
|
'background-clip',
|
||||||
|
'opacity',
|
||||||
|
'filter',
|
||||||
|
'list-style',
|
||||||
|
'outline',
|
||||||
|
'visibility',
|
||||||
|
'box-shadow',
|
||||||
|
'text-shadow',
|
||||||
|
'resize',
|
||||||
|
'transition'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
75
auto-imports.d.ts
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
/* prettier-ignore */
|
||||||
|
// @ts-nocheck
|
||||||
|
// noinspection JSUnusedGlobalSymbols
|
||||||
|
// Generated by unplugin-auto-import
|
||||||
|
export {}
|
||||||
|
declare global {
|
||||||
|
const EffectScope: typeof import('vue')['EffectScope']
|
||||||
|
const computed: typeof import('vue')['computed']
|
||||||
|
const createApp: typeof import('vue')['createApp']
|
||||||
|
const customRef: typeof import('vue')['customRef']
|
||||||
|
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
||||||
|
const defineComponent: typeof import('vue')['defineComponent']
|
||||||
|
const effectScope: typeof import('vue')['effectScope']
|
||||||
|
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
||||||
|
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
||||||
|
const h: typeof import('vue')['h']
|
||||||
|
const inject: typeof import('vue')['inject']
|
||||||
|
const isProxy: typeof import('vue')['isProxy']
|
||||||
|
const isReactive: typeof import('vue')['isReactive']
|
||||||
|
const isReadonly: typeof import('vue')['isReadonly']
|
||||||
|
const isRef: typeof import('vue')['isRef']
|
||||||
|
const markRaw: typeof import('vue')['markRaw']
|
||||||
|
const nextTick: typeof import('vue')['nextTick']
|
||||||
|
const onActivated: typeof import('vue')['onActivated']
|
||||||
|
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
||||||
|
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
|
||||||
|
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
|
||||||
|
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
||||||
|
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
||||||
|
const onDeactivated: typeof import('vue')['onDeactivated']
|
||||||
|
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
||||||
|
const onMounted: typeof import('vue')['onMounted']
|
||||||
|
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
||||||
|
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
||||||
|
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
||||||
|
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
||||||
|
const onUnmounted: typeof import('vue')['onUnmounted']
|
||||||
|
const onUpdated: typeof import('vue')['onUpdated']
|
||||||
|
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
|
||||||
|
const provide: typeof import('vue')['provide']
|
||||||
|
const reactive: typeof import('vue')['reactive']
|
||||||
|
const readonly: typeof import('vue')['readonly']
|
||||||
|
const ref: typeof import('vue')['ref']
|
||||||
|
const resolveComponent: typeof import('vue')['resolveComponent']
|
||||||
|
const shallowReactive: typeof import('vue')['shallowReactive']
|
||||||
|
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
||||||
|
const shallowRef: typeof import('vue')['shallowRef']
|
||||||
|
const toRaw: typeof import('vue')['toRaw']
|
||||||
|
const toRef: typeof import('vue')['toRef']
|
||||||
|
const toRefs: typeof import('vue')['toRefs']
|
||||||
|
const toValue: typeof import('vue')['toValue']
|
||||||
|
const triggerRef: typeof import('vue')['triggerRef']
|
||||||
|
const unref: typeof import('vue')['unref']
|
||||||
|
const useAttrs: typeof import('vue')['useAttrs']
|
||||||
|
const useCssModule: typeof import('vue')['useCssModule']
|
||||||
|
const useCssVars: typeof import('vue')['useCssVars']
|
||||||
|
const useId: typeof import('vue')['useId']
|
||||||
|
const useLink: typeof import('vue-router')['useLink']
|
||||||
|
const useModel: typeof import('vue')['useModel']
|
||||||
|
const useRoute: typeof import('vue-router')['useRoute']
|
||||||
|
const useRouter: typeof import('vue-router')['useRouter']
|
||||||
|
const useSlots: typeof import('vue')['useSlots']
|
||||||
|
const useTemplateRef: typeof import('vue')['useTemplateRef']
|
||||||
|
const watch: typeof import('vue')['watch']
|
||||||
|
const watchEffect: typeof import('vue')['watchEffect']
|
||||||
|
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
||||||
|
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
||||||
|
}
|
||||||
|
// for type re-export
|
||||||
|
declare global {
|
||||||
|
// @ts-ignore
|
||||||
|
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
||||||
|
import('vue')
|
||||||
|
}
|
51
components.d.ts
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
/* prettier-ignore */
|
||||||
|
// @ts-nocheck
|
||||||
|
// Generated by unplugin-vue-components
|
||||||
|
// Read more: https://github.com/vuejs/core/pull/3399
|
||||||
|
export {}
|
||||||
|
|
||||||
|
declare module 'vue' {
|
||||||
|
export interface GlobalComponents {
|
||||||
|
BaseBg: typeof import('./src/components/baseBg.vue')['default']
|
||||||
|
CenterMap: typeof import('./src/components/centerMap.vue')['default']
|
||||||
|
'CenterMap copy': typeof import('./src/components/centerMap copy.vue')['default']
|
||||||
|
CodeDialog: typeof import('./src/components/code-dialog/index.vue')['default']
|
||||||
|
Components: typeof import('./src/components/index.js')['default']
|
||||||
|
copy: typeof import('./src/components/centerMap copy.vue')['default']
|
||||||
|
CurrentTime: typeof import('./src/components/currentTime.vue')['default']
|
||||||
|
CustomBack: typeof import('./src/components/customBack.vue')['default']
|
||||||
|
CustomCarouselPicture: typeof import('./src/components/custom-carousel-picture/index.vue')['default']
|
||||||
|
CustomEchartBar: typeof import('./src/components/custom-echart-bar/index.vue')['default']
|
||||||
|
CustomEchartBubble: typeof import('./src/components/custom-echart-bubble/index.vue')['default']
|
||||||
|
CustomEchartColumnLine: typeof import('./src/components/custom-echart-column-line/index.vue')['default']
|
||||||
|
CustomEchartHyalineCake: typeof import('./src/components/custom-echart-hyaline-cake/index.vue')['default']
|
||||||
|
CustomEchartLine: typeof import('./src/components/custom-echart-line/index.vue')['default']
|
||||||
|
CustomEchartLineLine: typeof import('./src/components/custom-echart-line-line/index.vue')['default']
|
||||||
|
CustomEchartMaps: typeof import('./src/components/custom-echart-maps/index.vue')['default']
|
||||||
|
CustomEchartMixin: typeof import('./src/components/custom-echart-mixin/index.vue')['default']
|
||||||
|
CustomEchartPictorialBar: typeof import('./src/components/custom-echart-pictorial-bar/index.vue')['default']
|
||||||
|
CustomEchartPie: typeof import('./src/components/custom-echart-pie/index.vue')['default']
|
||||||
|
CustomEchartPie3d: typeof import('./src/components/custom-echart-pie-3d/index.vue')['default']
|
||||||
|
CustomEchartPieGauge: typeof import('./src/components/custom-echart-pie-gauge/index.vue')['default']
|
||||||
|
CustomEchartRadar: typeof import('./src/components/custom-echart-radar/index.vue')['default']
|
||||||
|
CustomEchartScatterBlister: typeof import('./src/components/custom-echart-scatter-blister/index.vue')['default']
|
||||||
|
CustomEchartTriangle: typeof import('./src/components/custom-echart-triangle/index.vue')['default']
|
||||||
|
CustomEchartWaterDroplet: typeof import('./src/components/custom-echart-water-droplet/index.vue')['default']
|
||||||
|
CustomEchartWordCloud: typeof import('./src/components/custom-echart-word-cloud/index.vue')['default']
|
||||||
|
CustomIframe: typeof import('./src/components/custom-iframe/index.vue')['default']
|
||||||
|
CustomImportExcel: typeof import('./src/components/custom-import-excel/index.vue')['default']
|
||||||
|
CustomProgress: typeof import('./src/components/customProgress.vue')['default']
|
||||||
|
CustomRankList: typeof import('./src/components/custom-rank-list/index.vue')['default']
|
||||||
|
CustomRichEditor: typeof import('./src/components/custom-rich-editor/index.vue')['default']
|
||||||
|
CustomScrollBoard: typeof import('./src/components/custom-scroll-board/index.vue')['default']
|
||||||
|
CustomScrollTitle: typeof import('./src/components/custom-scroll-title/index.vue')['default']
|
||||||
|
CustomTableOperate: typeof import('./src/components/custom-table-operate/index.vue')['default']
|
||||||
|
CustomTableTree: typeof import('./src/components/custom-table-tree/index.vue')['default']
|
||||||
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
|
SubTop: typeof import('./src/components/subTop.vue')['default']
|
||||||
|
SvgIcon: typeof import('./src/components/svg-icon/index.vue')['default']
|
||||||
|
UpFile: typeof import('./src/components/custom-rich-editor/upFile.js')['default']
|
||||||
|
}
|
||||||
|
}
|
16
index.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/logo.png" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>政务云数字农业智慧大屏</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
84
package.json
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"name": "digital-agriculture-screen",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.1",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite --mode development",
|
||||||
|
"build": "vite build --mode production",
|
||||||
|
"test": "vite build --mode test",
|
||||||
|
"preview": "vite preview",
|
||||||
|
"format": "prettier --write 'src/**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}'",
|
||||||
|
"eslint": "npx eslint --init",
|
||||||
|
"lint": "npm run lint:script && npm run lint:style",
|
||||||
|
"lint:style": "stylelint 'src/**/*.{vue,scss,css,sass,less}' --fix",
|
||||||
|
"lint:script": "eslint --ext .js,.ts,.tsx,.vue --fix --quiet ./src"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
|
"@smallwei/avue": "^3.6.2",
|
||||||
|
"@wangeditor/editor": "^5.1.23",
|
||||||
|
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||||
|
"animate.css": "^4.1.1",
|
||||||
|
"axios": "^1.6.5",
|
||||||
|
"echarts": "^5.6.0",
|
||||||
|
"echarts-gl": "^2.0.9",
|
||||||
|
"echarts-liquidfill": "^3.1.0",
|
||||||
|
"echarts-wordcloud": "^2.1.0",
|
||||||
|
"@vuemap/vue-amap": "^2.0",
|
||||||
|
"@vuemap/vue-amap-loca": "^2.0",
|
||||||
|
"element-plus": "^2.7.2",
|
||||||
|
"js-base64": "^3.7.6",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"moment": "^2.30.1",
|
||||||
|
"nprogress": "^0.2.0",
|
||||||
|
"path-browserify": "^1.0.1",
|
||||||
|
"pinia": "^2.1.7",
|
||||||
|
"pinia-plugin-persistedstate": "^3.2.1",
|
||||||
|
"screenfull": "^6.0.2",
|
||||||
|
"vue": "^3.3.11",
|
||||||
|
"vue-cesium": "^3.2.9",
|
||||||
|
"vue-echarts": "^7.0.3",
|
||||||
|
"vue-router": "^4.2.5",
|
||||||
|
"vue3-scroll-seamless": "^1.0.6"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.23.7",
|
||||||
|
"@babel/eslint-parser": "^7.23.3",
|
||||||
|
"@types/path-browserify": "^1.0.2",
|
||||||
|
"@vitejs/plugin-vue": "^4.5.2",
|
||||||
|
"autoprefixer": "^10.4.17",
|
||||||
|
"eslint": "^8.56.0",
|
||||||
|
"eslint-config-prettier": "^9.1.0",
|
||||||
|
"eslint-plugin-prettier": "^5.1.3",
|
||||||
|
"eslint-plugin-vue": "^9.20.1",
|
||||||
|
"mockjs": "^1.1.0",
|
||||||
|
"postcss": "^8.4.33",
|
||||||
|
"postcss-html": "^1.6.0",
|
||||||
|
"postcss-import": "^16.0.0",
|
||||||
|
"prettier": "^3.2.4",
|
||||||
|
"sass": "^1.70.0",
|
||||||
|
"stylelint": "^16.2.0",
|
||||||
|
"stylelint-config-html": "^1.1.0",
|
||||||
|
"stylelint-config-prettier": "^9.0.5",
|
||||||
|
"stylelint-config-rational-order": "^0.1.2",
|
||||||
|
"stylelint-config-recommended": "^14.0.0",
|
||||||
|
"stylelint-config-recommended-scss": "^14.0.0",
|
||||||
|
"stylelint-config-recommended-vue": "^1.5.0",
|
||||||
|
"stylelint-config-standard": "^36.0.0",
|
||||||
|
"stylelint-config-standard-scss": "^13.0.0",
|
||||||
|
"stylelint-order": "^6.0.4",
|
||||||
|
"stylelint-scss": "^6.1.0",
|
||||||
|
"terser": "^5.27.0",
|
||||||
|
"unplugin-auto-import": "^0.17.3",
|
||||||
|
"unplugin-vue-components": "^0.26.0",
|
||||||
|
"vite": "^5.0.8",
|
||||||
|
"vite-plugin-compression": "^0.5.1",
|
||||||
|
"vite-plugin-eslint": "^1.8.1",
|
||||||
|
"vite-plugin-mock": "^3.0.1",
|
||||||
|
"vite-plugin-progress": "^0.0.7",
|
||||||
|
"vite-plugin-qiankun": "^1.0.15",
|
||||||
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
|
"vite-plugin-vue-setup-extend": "^0.4.0"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/avatar.gif
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
public/logo.png
Normal file
After Width: | Height: | Size: 12 KiB |
21
src/App.vue
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<template>
|
||||||
|
<el-config-provider :size="size" :locale="zhCn">
|
||||||
|
<router-view />
|
||||||
|
</el-config-provider>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="app">
|
||||||
|
import { computed, ref, onMounted, onUnmounted } from 'vue';
|
||||||
|
import { useSettingStore } from '@/store/modules/setting';
|
||||||
|
// 配置element中文
|
||||||
|
import zhCn from 'element-plus/es/locale/lang/zh-cn';
|
||||||
|
import { createApp } from 'vue';
|
||||||
|
import App from './App.vue';
|
||||||
|
|
||||||
|
const SettingStore = useSettingStore();
|
||||||
|
// 配置全局组件大小
|
||||||
|
const size = computed(() => SettingStore.themeConfig.globalComSize);
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
@import './styles/style';
|
||||||
|
</style>
|
35
src/apis/index.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// import request from '@/utils/axios';
|
||||||
|
// import { isEmpty } from '@/utils';
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @Title: 获取字典
|
||||||
|
// */
|
||||||
|
// export function CommonDicData(params = { pageNum: 1, pageSize: 20, dictType: null }) {
|
||||||
|
// if (isEmpty(params?.dictType)) return;
|
||||||
|
// return request(`/system/dict/data/list`, {
|
||||||
|
// method: 'GET',
|
||||||
|
// apisType: 'dicData',
|
||||||
|
// params,
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @Title: 上传图片
|
||||||
|
// */
|
||||||
|
// export function CommonUpload(data, params) {
|
||||||
|
// return request(`/upload`, {
|
||||||
|
// method: 'POST',
|
||||||
|
// apisType: 'upload',
|
||||||
|
// uploadType: 'multipart/form-data',
|
||||||
|
// data,
|
||||||
|
// params,
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //云南省所有区域信息
|
||||||
|
// export function getRegion(code) {
|
||||||
|
// let codeVal = code ? code : '530000';
|
||||||
|
// return request('/system/area/region?areaCode=' + codeVal, {
|
||||||
|
// method: 'GET',
|
||||||
|
// });
|
||||||
|
// }
|
11
src/apis/inputs.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import request from '@/utils/axios';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 获取投入品信息
|
||||||
|
* https://doc.apipost.net/docs/detail/4516a8efdce0000?target_id=f010812312008&locale=zh-cn
|
||||||
|
*/
|
||||||
|
export function GetInputsInfo(code) {
|
||||||
|
return request('/inputGoods/inputView/getData', {
|
||||||
|
method: 'GET',
|
||||||
|
});
|
||||||
|
}
|
11
src/apis/land.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import request from '@/utils/axios';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 获取土地信息
|
||||||
|
* https://doc.apipost.net/docs/detail/4516a8efdce0000?target_id=f010812312008&locale=zh-cn
|
||||||
|
*/
|
||||||
|
export function GetLandInfo(code) {
|
||||||
|
return request('/inputGoods/inputView/getData', {
|
||||||
|
method: 'GET',
|
||||||
|
});
|
||||||
|
}
|
BIN
src/assets/fonts/DingTalk JinBuTi.ttf
Normal file
BIN
src/assets/fonts/DingTalk Sans.ttf
Normal file
15
src/assets/fonts/font.css
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'JinBuTi';
|
||||||
|
/* 自定义字体名称 */
|
||||||
|
src: url('./DingTalk JinBuTi.ttf') format('truetype');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Sans';
|
||||||
|
/* 自定义字体名称 */
|
||||||
|
src: url('./DingTalk Sans.ttf') format('truetype');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
BIN
src/assets/images/basic/containerBG.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
src/assets/images/basic/containerBotBG.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
src/assets/images/basic/footerBG.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
src/assets/images/basic/footerBtnTextBG.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
src/assets/images/basic/headerBG.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
src/assets/images/basic/leftArrowIcon.png
Normal file
After Width: | Height: | Size: 517 B |
BIN
src/assets/images/basic/leftTitleBG.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
src/assets/images/basic/rightArrowIcon.png
Normal file
After Width: | Height: | Size: 517 B |
BIN
src/assets/images/basic/rightTitleBG.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
src/assets/images/basic/tagBG.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/images/business/b1-1.png
Normal file
After Width: | Height: | Size: 601 KiB |
BIN
src/assets/images/business/b1-2.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
src/assets/images/business/b2-1.png
Normal file
After Width: | Height: | Size: 601 KiB |
BIN
src/assets/images/business/b2-2.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
src/assets/images/business/bg_title.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/images/early/arrowL.png
Normal file
After Width: | Height: | Size: 326 KiB |
BIN
src/assets/images/early/arrowR.png
Normal file
After Width: | Height: | Size: 431 KiB |
BIN
src/assets/images/early/back1.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
src/assets/images/early/back2.png
Normal file
After Width: | Height: | Size: 702 KiB |
BIN
src/assets/images/early/back3.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
src/assets/images/early/bg5.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
src/assets/images/early/icon1.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
src/assets/images/early/icon2.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
src/assets/images/early/icon3.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
src/assets/images/early/icon5.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
src/assets/images/early/icon6.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
src/assets/images/early/icon7.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
src/assets/images/entities/1.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
src/assets/images/entities/2.jpg
Normal file
After Width: | Height: | Size: 853 KiB |
BIN
src/assets/images/entities/3.jpg
Normal file
After Width: | Height: | Size: 502 KiB |
BIN
src/assets/images/entities/4.jpg
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
src/assets/images/entities/5.jpg
Normal file
After Width: | Height: | Size: 448 KiB |
BIN
src/assets/images/entities/6.jpg
Normal file
After Width: | Height: | Size: 828 KiB |
BIN
src/assets/images/entities/7.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
src/assets/images/entities/8.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
src/assets/images/entities/goodsBG.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
src/assets/images/entities/leftArrowBG.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
src/assets/images/entities/rightArrowBG.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
src/assets/images/entities/tomatoImg.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/images/inputs/1.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
src/assets/images/inputs/2.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
src/assets/images/inputs/3.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
src/assets/images/inputs/4.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
src/assets/images/inputs/5.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
src/assets/images/inputs/6.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
src/assets/images/inputs/bg_label.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
src/assets/images/inputs/bg_title.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/images/inputs/bg_value.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
src/assets/images/land/countCircleBG.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
src/assets/images/land/countTextBG.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
src/assets/images/land/土地资源地图1.png
Normal file
After Width: | Height: | Size: 223 KiB |
BIN
src/assets/images/land/提示边框1.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
src/assets/images/land/矩形 45.png
Normal file
After Width: | Height: | Size: 101 B |
BIN
src/assets/images/land/矩形 45_1.png
Normal file
After Width: | Height: | Size: 101 B |
BIN
src/assets/images/land/组 78.png
Normal file
After Width: | Height: | Size: 296 B |
BIN
src/assets/images/land/组 78_1.png
Normal file
After Width: | Height: | Size: 296 B |
BIN
src/assets/images/plant/bg1.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
src/assets/images/plant/bg2.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
src/assets/images/plant/bg3.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
src/assets/images/plant/bg5.png
Normal file
After Width: | Height: | Size: 702 KiB |
BIN
src/assets/images/plant/bg6.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/images/plant/bg7.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/assets/images/plant/bg8.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
src/assets/images/plant/bg9.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
src/assets/images/plant/icon1.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
src/assets/images/plant/icon2.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
src/assets/images/plant/icon3.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
BIN
src/assets/images/plant/icon4.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
src/assets/images/plant/icon5.png
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
src/assets/images/trace/all.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
src/assets/images/trace/batch.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
src/assets/images/trace/bg1.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/images/trace/bg2.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
src/assets/images/trace/bubbleA.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
src/assets/images/trace/bubbleB.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
src/assets/images/trace/bubbleC.png
Normal file
After Width: | Height: | Size: 16 KiB |