# vue3-webgis
**Repository Path**: SunBaTian_admin/vue3-webgis
## Basic Information
- **Project Name**: vue3-webgis
- **Description**: 用于学习vue3框架,以及WebGIS框架
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-22
- **Last Updated**: 2025-06-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# **项目模板开发手册**
## **一、运行基础环境**
```
node版本号推荐使用16.13.1
```
```
技术选型:
vue3 + vite + js + pinia + vue-router + sass + mitt
```
## **二、目录结构**
```
|-- dist: 项目打包生成路径1
|-- node_modules: 存放下载依赖的文件夹
|-- public: 存放静态文件
|-- fonts: 存放字体文件
|-- images: 存放图片
|-- styles: 存放全局样式
|-- template: 导入导出模版
|-- index.html: 主页面文件
|-- favicon.png: 在浏览器上显示的图标
|-- src: 源码文件夹
|-- api: 后台api接口
|-- assets: 存放组件中的静态资源图片
|-- components: 存放一些公共组件
|-- layout: 页面布局组件
|-- configs: 存放一些静态配置文件
|-- directives: 存放自定义指令
|-- libs: 库函数或模块
|-- utils: 工具或函数
|-- mock: 存放一些模拟数据
|-- router: 存放路由配置信息
|-- stores: 存放公共状态 vuex
|-- styles: 存放公共样式css|scss
|-- views: 存放所有的路由组件
|-- App.vue: 应用根主组件
|-- main.js: 应用入口 js
|-- style.css: 全局样式
|-- .env.development: 开发环境
|-- .env.production: 生产打包环境
|-- .env.test: 测试打包环境
|-- .eslintignore: eslint忽略配置
|-- .eslintrc.js: eslint相关配置
|-- .gitignore: git 版本管制忽略的配置
|-- .npmrc: npm 仓库配置
|-- .prettierrc: prettier代码格式化配置
|-- .stylelintignore: stylelint代码格式化忽略配置
|-- .stylelintrc.js: stylelint代码格式化配置
|-- index.html: 网页入口
|-- package.json: 项目基本信息,包依赖配置信息等
|-- vite.config.js: vite脚手架配置文件
|-- README.md: 项目描述说明的 readme 文件
```
## **三、运行打包**
### **1、安装项目依赖**
```
npm install 或者 npm i
```
### **2、配置多环境系统常量**
#### 修改 development、production、test 环境下后端服务地址
```
#minio服务
VUE_APP_MINIO_URI=http://*****:9002/map-interactive/
#系统业务地址
VUE_APP_BASE_URI=
#地图样式
VUE_APP_MAP_STYLE_URI=
```
### **3、编译运行开发环境**
```
npm run serve
```
### **4、编译打包生产环境**
```
npm run build
```
### **5、编译打包测试环境**
```
npm run test
```
### **6、代码校验和修复**
```
npm run eslint
```
### **7、代码样式校验和修复**
```
npm run stylelint
```
## **四、模板使用示例**
### **1、组件间通信**
```js
// 发送消息
proxy.eventBus.emit('collapse-content', isCollapse.value);
// 接收消息
proxy.eventBus.on('collapse-content', (data) => {
isCollapse.value = data;
});
```
### **2、图片引用**
```vue
// 图片文件存放在@/assets/images目录下,且文件名称具有唯一性
```
### **3、API 引用**
```js
// 引用api
import API from '@/api/index.js';
Vue.prototype.API = API;
```
#### **(1)API 配置实例-GET**
##### 配置
```
// get transferMode默认传参在param(可不写该参数),可以通过修改transferMode值path、body实现
{
name: 'getAppDetail',
url: '/v1/app',
method: METHODS_ENUM.GET,
}
```
##### 调用
```js
this.API.getAppDetail({
data: { id },
})
.then((res) => {
if (res.code == 200) {}
});
```
#### **(2)API 配置实例-POST**
##### 配置
```
// post transferMode默认传参在body(可不写该参数),可以通过修改transferMode值param实现
{
name: 'addAppInfo',
url: '/v1/app',
method: METHODS_ENUM.POST
},
```
##### 调用
```
this.API.addAppInfo({
data: ***,
}).then((res) => {
if (res.code == 200) {
}
})
```
#### **(3)API 配置实例-PUT**
##### 配置
```
// put transferMode默认传参在body(可不写该参数),可以通过修改transferMode值param实现
{
name: 'appInfoUpdate',
url: '/v1/app',
method: 'put'
},
```
##### 调用
```
this.API.appInfoUpdate({
data: ***,
}).then((res) => {
if (res.code == 200) {
}
})
```
#### **(4)API 配置实例-DELETE**
##### 配置
```
// delete transferMode默认传参在path(可不写该参数),可以通过修改transferMode值param、body实现
{
name: 'appDetailDelete',
url: '/v1/app',
method: 'delete'
},
```
##### 调用
```
this.API.appDetailDelete({
data: ***,
}).then((res) => {
if (res.code == 200) {
}
})
```
#### **(5)API 配置实例-动态**
##### 配置
```
动态服务统一调用dynamicAPI
// 动态地址请求
{
name: 'dynamicAPI',
url: '',
method: '',
},
```
##### 调用
```
this.API.dynamicAPI({
dynamicUrl: `/jcrud/${this.apiCode}/page`,
dynamicMethod: METHODS_ENUM.GET,
data: data,
});
```
#### **(6)API 配置实例-form 表单**
##### 配置
```
{
name: 'authOauthToken',
url: '/oauth/token',
method: METHODS_ENUM.POST
},
```
##### 调用
```js
let fd = new FormData();
fd.append('grant_type', 'password');
fd.append('username', this.login.user);
fd.append('randomStr', uuidv4());
this.API.authOauthToken({
data: fd,
}).then(({ code, data, message }) => {
if (code !== 200) {}
});
```
#### **(7)API 配置实例-文件下载**
##### 配置
```
{
name: 'exportUserAPI',
url: `/admin/user/export`,
method: METHODS_ENUM.GET,
resType: RES_TYPE_ENUM.ARRAYBUFFER
},
```
##### 调用
```js
this.API.exportUserAPI({ data: this.params });
```
### **4、value2Name 字典表值转换成名称**
```js
value2Name(options, val, key = 'value', show = 'label')
```
### **5、加密或解密方法**
### sm2Encryption sm2加密
```js
sm2Encryption(str)
```
### sm2Decryption sm2解密
```js
sm2Decryption(str)
```
### sm3Encryption sm3加密
```js
sm3Encryption(str)
```
## **六、内置组件说明**
[//]: # (业务型组件)
[//]: # (通用型组件)
---
**二次封装el-select,单选时可添加全选选项**
---
**props**
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| --- | --- | --- | --- | --- |
| value | 绑定值 | String / Array | - | - |
| code | 调用字典接口内参数 | String | - | - |
| [props](#MxDictSelect-props) | 配置选项,具体见下表 | Object | - | {value: 'value', label: 'label'} |
| options | 选择下拉数据 | Array | - | [] |
| placeholder | 占位符 | String | - | 请选择 |
| multiple | 是否多选 | Boolean | - | false |
| multipleLimit | 多选时用户最多可以选择的项目数,为 0 则不限制 | Number | - | 3 |
| collapseTags | 多选时是否将选中值按文字的形式展示 | Boolean | - | false |
| clearable | 是否可以清空选项 | Boolean | - | true |
| filterable | 是否可搜索 | Boolean | - | true |
| includeAll | 是否添加全选选项 | Boolean | - | false |
| disabled | 是否禁用 | Boolean | - | false |
#### MxDictSelect **props**
---
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| --- | --- | --- | --- | --- |
| value | 选择值 | String | - | 'value' |
| label | 选择名称 | String | - | 'label' |
---
**events**
| 事件名称 | 说明 | 回调参数 |
| --- | --- | --- |
| change | 选中值发生变化时触发 | 目前的选中值 |
---
**示例:**
```vue
```
---
### **MxDivider 分割线组件**
---
**内置默认插槽**
---
**props**
无
---
**events**
无
---
**示例:**
```vue
通用型组件
```
---
### **MxEllipsis 省略文字组件**
---
**可配置省略文字组件,需要配置组件宽度**
---
**props**
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| --- | --- | --- | --- | --- |
| rowNum | 显示文字行数 | Number | - | 1 |
| text | 鼠标悬停显示的信息 | String | - | - |
| width | 宽度 | Number/String | - | '100%' |
---
**events**
无
---
**示例:**
```vue
```
---
### **pagination 分页组件**
---
**二次封装el-pagination**
---
**props**
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| --- | --- | --- | --- | --- |
| total | (必填)总条目数 | Number | - | - |
| page | 当前页数 | Number | - | 1 |
| limit | 每页显示条目个数 | Number | - | 20 |
| pageSizes | 每页显示个数选择器的选项设置 | number[] | - | [15, 30, 50, 100] |
| layout | 组件布局,子组件名用逗号分隔 | String | - | 'total, sizes, prev, pager, next, jumper' |
| background | 是否为分页按钮添加背景色 | Boolean | - | true |
| autoScroll | 是否开启自动滚动 | Boolean | - | true |
| hidden | 是否隐藏分页组件 | Boolean | - | false |
---
**events**
| 事件名称 | 说明 | 回调参数 |
| --- | --- | --- |
| pagination | 修改数据时调用表格数据 | {page: currentPage, limit: pageSize}|
---
**示例:**
```vue
```
---
### **MxSelect 选择组件**
---
**二次封装el-select,单选时可添加全选选项**
---
**props**
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| --- | --- | --- | --- |----------------------------------|
| value | 绑定值 | String / Array | - | - |
| apiName | 获取数据接口名称 | String | - | - |
| params | 接口参数 | String / Object | - | - |
| [props](#MxSelect-props) | 配置选项,具体见下表 | Object | - | {value: 'value', label: 'label'} |
| options | 选择下拉数据 | Array | - | [] |
| placeholder | 占位符 | String | - | 请选择 |
| multiple | 是否多选 | Boolean | - | false |
| multipleLimit | 多选时用户最多可以选择的项目数,为 0 则不限制 | Number | - | 3 |
| collapseTags | 多选时是否将选中值按文字的形式展示 | Boolean | - | false |
| clearable | 是否可以清空选项 | Boolean | - | true |
| filterable | 是否可搜索 | Boolean | - | true |
| includeAll | 是否添加全选选项 | Boolean | - | false |
| disabled | 是否禁用 | Boolean | - | false |
#### MxSelect **props**
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| --- | --- | --- | --- | --- |
| value | 选择值 | String | - | 'value' |
| label | 选择名称 | String | - | 'label' |
---
**events**
| 事件名称 | 说明 | 回调参数 |
| --- | --- | --- |
| change | 选中值发生变化时触发 | 目前的选中值 |
---
**示例:**
```vue
```
---
### **MxTagTooltips tag tooltips显示组件**
---
**显示tag的tooltips**
---
**props**
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| list | 要显示的列表数据 | Array | [] |
| showKey | 显示的字段名 | String | '' |
| width | 容器的最大宽度 | String | '80%' |
| align | 对齐方式(flex) | String | '' |
| firstPlace | 第一个元素的提示位置 | String | 'top' |
| listPlace | 剩余元素的提示位置 | String | 'right' |
---
**events**
无
---
**示例:**
```vue
```
---