Browse Source

first commit

master
zhang_li 11 months ago
commit
db808852bc
  1. 16
      .gitignore
  2. BIN
      .image/Java监控.jpg
  3. BIN
      .image/MySQL.jpg
  4. BIN
      .image/OA请假-列表.jpg
  5. BIN
      .image/OA请假-发起.jpg
  6. BIN
      .image/OA请假-详情.jpg
  7. BIN
      .image/Redis.jpg
  8. BIN
      .image/admin-uniapp/01.png
  9. BIN
      .image/admin-uniapp/02.png
  10. BIN
      .image/admin-uniapp/03.png
  11. BIN
      .image/admin-uniapp/04.png
  12. BIN
      .image/admin-uniapp/05.png
  13. BIN
      .image/admin-uniapp/06.png
  14. BIN
      .image/admin-uniapp/07.png
  15. BIN
      .image/admin-uniapp/08.png
  16. BIN
      .image/admin-uniapp/09.png
  17. BIN
      .image/common/mall-feature.png
  18. BIN
      .image/common/mall-preview.png
  19. BIN
      .image/common/project-vs.png
  20. BIN
      .image/common/ruoyi-vue-pro-architecture.png
  21. BIN
      .image/common/ruoyi-vue-pro-biz.png
  22. BIN
      .image/common/yudao-cloud-architecture.png
  23. BIN
      .image/common/yudao-roadmap.png
  24. BIN
      .image/个人中心.jpg
  25. BIN
      .image/代码生成.jpg
  26. BIN
      .image/令牌管理.jpg
  27. BIN
      .image/任务列表-审批.jpg
  28. BIN
      .image/任务列表-已办.jpg
  29. BIN
      .image/任务列表-待办.jpg
  30. BIN
      .image/任务日志.jpg
  31. BIN
      .image/商户信息.jpg
  32. BIN
      .image/在线用户.jpg
  33. BIN
      .image/大屏设计器-列表.jpg
  34. BIN
      .image/大屏设计器-编辑.jpg
  35. BIN
      .image/大屏设计器-预览.jpg
  36. BIN
      .image/字典数据.jpg
  37. BIN
      .image/字典类型.jpg
  38. BIN
      .image/定时任务.jpg
  39. BIN
      .image/岗位管理.jpg
  40. BIN
      .image/应用信息-列表.jpg
  41. BIN
      .image/应用信息-编辑.jpg
  42. BIN
      .image/应用管理.jpg
  43. BIN
      .image/我的流程-列表.jpg
  44. BIN
      .image/我的流程-发起.jpg
  45. BIN
      .image/我的流程-详情.jpg
  46. BIN
      .image/报表设计器-图形报表.jpg
  47. BIN
      .image/报表设计器-打印设计.jpg
  48. BIN
      .image/报表设计器-数据报表.jpg
  49. BIN
      .image/操作日志.jpg
  50. BIN
      .image/支付订单.jpg
  51. BIN
      .image/敏感词.jpg
  52. BIN
      .image/数据库文档.jpg
  53. BIN
      .image/文件管理.jpg
  54. BIN
      .image/文件管理2.jpg
  55. BIN
      .image/文件配置.jpg
  56. BIN
      .image/日志中心.jpg
  57. BIN
      .image/流程模型-列表.jpg
  58. BIN
      .image/流程模型-定义.jpg
  59. BIN
      .image/流程模型-设计.jpg
  60. BIN
      .image/流程表单.jpg
  61. BIN
      .image/生成效果.jpg
  62. BIN
      .image/用户分组.jpg
  63. BIN
      .image/用户管理.jpg
  64. BIN
      .image/登录.jpg
  65. BIN
      .image/登录日志.jpg
  66. BIN
      .image/短信日志.jpg
  67. BIN
      .image/短信模板.jpg
  68. BIN
      .image/短信渠道.jpg
  69. BIN
      .image/租户套餐.png
  70. BIN
      .image/租户管理.jpg
  71. BIN
      .image/系统接口.jpg
  72. BIN
      .image/菜单管理.jpg
  73. BIN
      .image/表单构建.jpg
  74. BIN
      .image/角色管理.jpg
  75. BIN
      .image/访问日志.jpg
  76. BIN
      .image/退款订单.jpg
  77. BIN
      .image/通知公告.jpg
  78. BIN
      .image/部门管理.jpg
  79. BIN
      .image/配置管理.jpg
  80. BIN
      .image/链路追踪.jpg
  81. BIN
      .image/错误日志.jpg
  82. BIN
      .image/错误码管理.jpg
  83. BIN
      .image/首页.jpg
  84. 35
      App.vue
  85. 21
      LICENSE
  86. 52
      README.md
  87. 34
      api/login.js
  88. 42
      api/system/user.js
  89. 550
      components/form/index.vue
  90. 77
      components/search/index.vue
  91. 97
      components/sparePartsApplicationList/index.vue
  92. 114
      components/sparePartsCard/index.vue
  93. 167
      components/uni-section/uni-section.vue
  94. 469
      components/verifition/Verify.vue
  95. 14
      components/verifition/utils/ase.js
  96. 17
      components/verifition/utils/request.js
  97. 557
      components/verifition/verifyPoint/verifyPoint.vue
  98. 661
      components/verifition/verifySlider/verifySlider.vue
  99. 103
      components/workOrderList/index.vue
  100. 26
      config.js

16
.gitignore

@ -0,0 +1,16 @@
######################################################################
# Build Tools
/unpackage/*
/node_modules/*
######################################################################
# Development Tools
/.idea/*
/.vscode/*
/.hbuilderx/*
package-lock.json
yarn.lock

BIN
.image/Java监控.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
.image/MySQL.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

BIN
.image/OA请假-列表.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
.image/OA请假-发起.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
.image/OA请假-详情.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
.image/Redis.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

BIN
.image/admin-uniapp/01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
.image/admin-uniapp/02.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
.image/admin-uniapp/03.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
.image/admin-uniapp/04.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
.image/admin-uniapp/05.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
.image/admin-uniapp/06.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
.image/admin-uniapp/07.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
.image/admin-uniapp/08.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
.image/admin-uniapp/09.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
.image/common/mall-feature.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
.image/common/mall-preview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

BIN
.image/common/project-vs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

BIN
.image/common/ruoyi-vue-pro-architecture.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
.image/common/ruoyi-vue-pro-biz.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
.image/common/yudao-cloud-architecture.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

BIN
.image/common/yudao-roadmap.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
.image/个人中心.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
.image/代码生成.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
.image/令牌管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
.image/任务列表-审批.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
.image/任务列表-已办.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
.image/任务列表-待办.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
.image/任务日志.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
.image/商户信息.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
.image/在线用户.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
.image/大屏设计器-列表.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
.image/大屏设计器-编辑.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
.image/大屏设计器-预览.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
.image/字典数据.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
.image/字典类型.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
.image/定时任务.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
.image/岗位管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
.image/应用信息-列表.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
.image/应用信息-编辑.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
.image/应用管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
.image/我的流程-列表.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
.image/我的流程-发起.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
.image/我的流程-详情.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
.image/报表设计器-图形报表.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
.image/报表设计器-打印设计.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
.image/报表设计器-数据报表.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
.image/操作日志.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
.image/支付订单.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

BIN
.image/敏感词.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
.image/数据库文档.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
.image/文件管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
.image/文件管理2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
.image/文件配置.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
.image/日志中心.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
.image/流程模型-列表.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

BIN
.image/流程模型-定义.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
.image/流程模型-设计.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
.image/流程表单.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
.image/生成效果.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
.image/用户分组.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
.image/用户管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
.image/登录.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
.image/登录日志.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
.image/短信日志.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
.image/短信模板.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

BIN
.image/短信渠道.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
.image/租户套餐.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
.image/租户管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
.image/系统接口.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
.image/菜单管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
.image/表单构建.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
.image/角色管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
.image/访问日志.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
.image/退款订单.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
.image/通知公告.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
.image/部门管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
.image/配置管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
.image/链路追踪.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
.image/错误日志.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
.image/错误码管理.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
.image/首页.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

35
App.vue

@ -0,0 +1,35 @@
<script>
import config from './config'
import store from '@/store'
import { getAccessToken } from '@/utils/auth'
export default {
onLaunch: function() {
this.initApp()
},
methods: {
//
initApp() {
//
this.initConfig()
//
//#ifdef H5
this.checkLogin()
//#endif
},
initConfig() {
this.globalData.config = config
},
checkLogin() {
if (!getAccessToken()) {
this.$tab.reLaunch('/pages/login')
}
}
}
}
</script>
<style lang="scss">
@import '@/static/scss/index.scss';
@import "./uni_modules/vk-uview-ui/index.scss";
</style>

21
LICENSE

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 芋道
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

52
README.md

@ -0,0 +1,52 @@
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
**「我喜欢写代码,乐此不疲」**
**「我喜欢做开源,以此为乐」**
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
## 🐶 新手必读
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
* 启动文档:<https://doc.iocoder.cn/quick-start/>
* 视频教程:<https://doc.iocoder.cn/video/>
## 🐯 平台简介
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
![](/.image/admin-uniapp/02.png)
* 采用 uni-app 框架,一套代码多端适配,支持 App、小程序、H5!
* 已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
## 技术栈
| 框架 | 说明 | 版本 |
|-------------------------------------------------|--------------------|--------|
| [uni-app](hhttps://github.com/dcloudio/uni-app) | 跨平台框架 | 2.0.0 |
| [uni-ui](https://github.com/dcloudio/uni-ui) | 基于 uni-app 的 UI 框架 | 1.4.20 |
## 🔥 后端架构
支持 Spring Boot、Spring Cloud 两种架构:
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
![架构图](/.image/common/ruoyi-vue-pro-architecture.png)
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
![架构图](/.image/common/yudao-cloud-architecture.png)
## 🐷 演示图
| biu | biu | biu |
|----------------------------------|----------------------------------|----------------------------------|
| ![](/.image/admin-uniapp/01.png) | ![](/.image/admin-uniapp/02.png) | ![](/.image/admin-uniapp/03.png) |
| ![](/.image/admin-uniapp/04.png) | ![](/.image/admin-uniapp/05.png) | ![](/.image/admin-uniapp/06.png) |
| ![](/.image/admin-uniapp/07.png) | ![](/.image/admin-uniapp/08.png) | ![](/.image/admin-uniapp/09.png) |

34
api/login.js

@ -0,0 +1,34 @@
import request from '@/utils/request'
// 登录方法
export function login(username, password, captchaVerification) {
const data = {
username,
password,
captchaVerification
}
return request({
url: '/system/auth/login',
headers: {
isToken: false
},
'method': 'POST',
'data': data
})
}
// 获取用户详细信息
export function getInfo() {
return request({
url: '/system/auth/get-permission-info',
'method': 'GET'
})
}
// 退出方法
export function logout() {
return request({
url: '/system/auth/logout',
'method': 'POST'
})
}

42
api/system/user.js

@ -0,0 +1,42 @@
import upload from '@/utils/upload'
import request from '@/utils/request'
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/update-password',
method: 'PUT',
params: data
})
}
// 查询用户个人信息
export function getUserProfile() {
return request({
url: '/system/user/profile/get',
method: 'GET'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
url: '/system/user/profile/update',
method: 'PUT',
data: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
return upload({
url: '/system/user/profile/update-avatar',
method: 'PUT',
name: data.name,
filePath: data.filePath
})
}

550
components/form/index.vue

@ -0,0 +1,550 @@
<template>
<view class="form-content">
<view class="form">
<u-form
:model="data"
ref="form"
:rules="form.rules"
:error-type='form.errorType'
:border='form.border'
:label-position='form.labelPosition'
:label-width='form.labelWidth'
:label-style='form.labelStyle'
:label-align='form.labelAlign'
>
<u-form-item
:label="item.label"
:prop="item.field"
:required='item.required'
:border-bottom="item.borderBottom"
:label-position='item.labelPosition'
:label-width='item.labelWidth'
:label-style='item.labelStyle'
:label-align='item.labelAlign'
:right-icon='item.rightIcon'
:left-icon='item.leftIcon'
:left-icon-style='item.leftIconStyle'
:right-icon-style='item.rightIconStyle'
v-for="(item,index) in form.formData"
:key="index"
>
<u-input
:type="item.type ||'text'"
v-model="data[item.field]"
:clearable='item.clearable'
:input-align='item.inputAlign'
:placeholder="item.placeholder ? item.placeholder : `请输入${item.label}`"
:disabled='item.disabled'
:maxlength='item.maxlength'
placeholder-style='font-size:28rpx'
:confirm-type='item.confirmType'
:confirm-style='item.confirmStyle'
:focus='item.focus'
:fixed='item.fixed'
:password-icon='item.passwordIcon'
:border='item.border'
:border-color='item.borderColor'
:auto-height='item.autoHeight'
:height='item.height'
:cursor-spacing='item.cursorSpacing'
:selection-start='item.selectionStart'
:selection-end='item.selectionEnd'
:trim='item.trim'
:show-confirmbar='item.showConfirmbar'
:adjust-position='item.adjustPosition'
v-if="item.type == 'text'||item.type == 'number'||item.type == 'idcard'||item.type == 'digit'||item.type == 'tel'||item.type == 'safePassword'||item.type == 'nickname'"
/>
<view class="range" v-if="item.type == 'range'">
<u-input
type="number"
v-model="data[item.field]"
:clearable='item.clearable'
:input-align='item.inputAlign'
:placeholder="item.placeholder ? item.placeholder : `请输入${item.label}`"
:disabled='item.disabled'
:maxlength='item.maxlength'
placeholder-style='font-size:28rpx'
:confirm-type='item.confirmType'
:confirm-style='item.confirmStyle'
:focus='item.focus'
:fixed='item.fixed'
:password-icon='item.passwordIcon'
:border='item.border'
:border-color='item.borderColor'
:auto-height='item.autoHeight'
:height='item.height'
:cursor-spacing='item.cursorSpacing'
:selection-start='item.selectionStart'
:selection-end='item.selectionEnd'
:trim='item.trim'
:show-confirmbar='item.showConfirmbar'
:adjust-position='item.adjustPosition'
style="flex: 1;"
/>
<span style="padding: 0px 20rpx;">-</span>
<u-input
:type="item.type"
v-model="data[item.field]"
:clearable='item.clearable'
:input-align='item.inputAlign'
:placeholder="item.placeholder ? item.placeholder : `请输入${item.label}`"
:disabled='item.disabled'
:maxlength='item.maxlength'
placeholder-style='font-size:28rpx'
:confirm-type='item.confirmType'
:confirm-style='item.confirmStyle'
:focus='item.focus'
:fixed='item.fixed'
:password-icon='item.passwordIcon'
:border='item.border'
:border-color='item.borderColor'
:auto-height='item.autoHeight'
:height='item.height'
:cursor-spacing='item.cursorSpacing'
:selection-start='item.selectionStart'
:selection-end='item.selectionEnd'
:trim='item.trim'
:show-confirmbar='item.showConfirmbar'
:adjust-position='item.adjustPosition'
style="flex: 1;"
/>
</view>
<u-radio-group
v-model="data[item.field]"
:disabled='item.disabled'
:label-disabled='item.labelDisabled'
:shape='item.shape'
:icon-size='item.iconSize'
:active-color='item.activeColor'
:size='item.size'
:width='item.width'
:wrap='item.wrap'
@change="radioGroupChange($event,item.field)"
v-else-if="item.type == 'radio'"
>
<u-radio
:name="cur.value"
:icon-size='cur.iconSize'
:label-size='cur.labelSize'
:shape='cur.shape'
:disabled='cur.disabled'
:label-disabled='cur.labelDisabled'
:active-color='cur.activeColor'
v-for="(cur, key) in item.list" :key="key"
@change="radioChange($event,item.field)"
>
{{cur.label}}
</u-radio>
</u-radio-group>
<u-checkbox-group
:max='item.max'
:disabled='item.disabled'
:label-disabled='item.labelDisabled'
:shape='item.shape'
:icon-size='item.iconSize'
:active-color='item.activeColor'
:size='item.size'
:width='item.width'
:wrap='item.wrap'
@change="checkboxGroupChange($event,item.field)"
v-else-if="item.type == 'checkbox'"
>
<u-checkbox
v-model="cur.checked"
:size='cur.size'
:label-size='cur.labelSize'
:icon-size='cur.iconSize'
:name="cur.value"
:shape='cur.shape'
:disabled='cur.disabled'
:active-color='cur.activeColor'
v-for="(cur, key) in item.list" :key="key"
@change="checkboxChange($event,item.field)"
>
{{cur.label}}
</u-checkbox>
</u-checkbox-group>
<u-input
:type="item.type"
v-model="data[item.field]"
:clearable='item.clearable'
:input-align='item.inputAlign'
:placeholder="item.placeholder ? item.placeholder : `请输入${item.label}`"
:disabled='item.disabled'
:maxlength='item.maxlength'
placeholder-style='font-size:28rpx'
:confirm-type='item.confirmType'
:confirm-style='item.confirmStyle'
:focus='item.focus'
:fixed='item.fixed'
:password-icon='item.passwordIcon'
:border='item.border'
:border-color='item.borderColor'
:auto-height='item.autoHeight'
:height='item.height'
:cursor-spacing='item.cursorSpacing'
:selection-start='item.selectionStart'
:selection-end='item.selectionEnd'
:trim='item.trim'
:show-confirmbar='item.showConfirmbar'
:adjust-position='item.adjustPosition'
v-else-if="item.type == 'textarea'"
/>
<u-switch
v-model="data[item.field]"
:loading='item.loading'
:disabled='item.disabled'
:size='item.size'
:active-color='item.activeColor'
:inactive-color='item.inactiveColor'
:vibrate-short='item.vibrateShort'
:active-value='item.activeValue'
:inactive-value='item.inactiveValue'
@change ='switchChange($event,item.field)'
v-else-if="item.type == 'switch'"
/>
<u-slider
v-model="data[item.field]"
:min='item.min'
:max='item.max'
:step='item.step'
:block-width='item.blockWidth'
:height='item.height'
:inactive-color='item.inactiveColor'
:active-color='item.activeColor'
:block-color='item.blockColor'
:block-style='item.blockStyle'
:disabled='item.disabled'
:use-slot='item.useSlot'
v-else-if="item.type == 'slider'"
/>
<view class="select" v-else-if="item.type == 'singleColumn'" @click="openSingleColumn(item.field,data[item.field],item.list)">
<view class="input" v-if='data[item.field]'>
{{selectFormat(data[item.field],item.list)}}
</view>
<view class="placeholder" v-else>
{{item.placeholder ? item.placeholder : `请选择${item.label}`}}
</view>
<u-icon name="arrow-right" color="#aaaaaa" size="28"></u-icon>
</view>
<view class="select" v-else-if="item.type == 'datetime'" @click="openDatetime(item.field,data[item.field],item.params,item.formatValue)">
<view class="input" v-if='data[item.field]'>
{{data[item.field]}}
</view>
<view class="placeholder" v-else>
{{item.placeholder ? item.placeholder : `请选择${item.label}`}}
</view>
<u-icon name="arrow-right" color="#aaaaaa" size="28"></u-icon>
</view>
<view class="select" v-else-if="item.type == 'region'" @click="openRegion(item.field,data[item.field],item.params,item.formatValue)">
<view class="input" v-if='data[item.field]'>
{{regionText}}
</view>
<view class="placeholder" v-else>
{{item.placeholder ? item.placeholder : `请选择${item.label}`}}
</view>
<u-icon name="arrow-right" color="#aaaaaa" size="28"></u-icon>
</view>
<template v-slot:right v-if="item.isRightButton || item.isRightText ">
<view class="right-button" v-if="item.isRightButton">
{{item.isRightButton}}
</view>
<view class="right-text" v-if="item.isRightText">
{{item.isRightText}}
</view>
</template>
</u-form-item>
</u-form>
<view>
</view>
</view>
<u-select v-model="singleColumnShow" mode="single-column" :default-value='singleColumnDefaultValue' :list="singleColumnList" @confirm="chooseSingleColumn"></u-select>
<u-select v-model="mutilColumnShow" mode="mutil-column" :default-value='mutilColumnDefaultValue' :list="mutilColumnList" @confirm="chooseMutilColumn"></u-select>
<u-picker mode="time" v-model="datetimeShow" :default-time='datetimeDefaultValue' :params="params" @confirm='chooseDatetime'></u-picker>
<u-picker mode="region" v-model="regionShow" :area-code='regionDefaultValue' @confirm='chooseRegion'></u-picker>
<view style="height: constant(safe-area-inset-bottom); height: env(safe-area-inset-bottom);"></view>
</view>
</template>
<script>
import sparePartsCard from '@/components/sparePartsCard/index.vue'
export default {
components:{
sparePartsCard
},
props: { form: { type: Object, default: {}, require: true }, data: { type: Object, default: {}, require: true }, },
data() {
return {
//
singleColumnList:[],
singleColumnShow:false,
singleColumnDefaultValue:[],
//
mutilColumnList:[],
mutilColumnShow:false,
mutilColumnDefaultValue:[],
field:'',
//
datetimeShow:false,
params:{
year: true,
month: true,
day: true,
hour: true,
minute: true,
second: true
},
datetimeDefaultValue:'',
//
regionShow:false,
regionDefaultValue:[],
regionText:''
}
},
methods: {
//
openSingleColumn(field,val,list){
this.singleColumnList = list
this.field = field
// this.data[this.field] = val ? val :''
// if(val){
// this.singleColumnDefaultValue = [list.findIndex(item=>item.value==val)]
// }else{
// this.singleColumnDefaultValue = []
// }
this.singleColumnShow = true
},
//
chooseSingleColumn(e){
console.log(e)
this.$forceUpdate()
this.data[this.field] = e[0].value
console.log(this.data)
this.singleColumnShow = false
this.$emit('singleColumn',this.field,this.data[this.field])
},
//
openMutilColumn(field,val,list){
this.mutilColumnList = list
this.field = field
this.data[this.field] = val ? val :''
this.mutilColumnDefaultValue = [list.findIndex(item=>item.value==val)]
this.mutilColumnShow = true
},
//
chooseMutilColumn(e){
this.data[this.field] = e[0].value
this.mutilColumnShow = false
this.$forceUpdate()
},
//
openDatetime(field,val,params,formatValue){
this.params = params
this.formatValue =formatValue
this.field = field
this.data[this.field] = val ? val :''
this.datetimeDefaultValue = val ? val :''
this.datetimeShow = true
},
//
chooseDatetime(e){
let array1 = []
let array2 = []
if(this.formatValue.indexOf('YYYY')>-1){
array1.push(e.year)
}
if(this.formatValue.indexOf('MM')>-1){
array1.push(e.month)
}
if(this.formatValue.indexOf('DD')>-1){
array1.push(e.day)
}
if(this.formatValue.indexOf('hh')>-1){
array2.push(e.hour)
}
if(this.formatValue.indexOf('mm')>-1){
array2.push(e.month)
}
if(this.formatValue.indexOf('ss')>-1){
array2.push(e.second)
}
let str = array1.join('-') + ' ' + array2.join(':')
this.data[this.field] = str
this.$emit('datetime',this.field,this.data[this.field])
},
//
openRegion(field,val){
console.log(val)
this.field = field
this.data[this.field] = val ? val :[]
if(val){
this.regionDefaultValue = this.data[this.field]
}else{
this.regionDefaultValue = []
}
this.regionShow = true
},
chooseRegion(e){
console.log(e)
this.data[this.field] = [e.province.code,e.city.code,e.area.code]
this.regionText = `${e.province.name}-${e.city.name}-${e.area.name}`
this.$emit('region',this.field,this.data[this.field])
},
selectFormat(val,array){
let str = array.filter(item=>item.value == val)[0].label
return str
},
//
radioGroupChange(e,field){
this.$emit('radioGroupChange',e,field)
},
//
radioChange(e,field){
this.$emit('radioChange',e,field)
},
// checkbox
checkboxChange(e,field) {
this.$emit('checkboxChange',e,field)
},
// checkboxcheckbox-group
checkboxGroupChange(e,field) {
this.$emit('checkboxGroupChange',e,field)
},
switchChange(e,field) {
this.$emit('switchChange',e,field)
},
},
mounted() {
this.$refs.form.setRules(this.form.rules)
this.form.formData.forEach((item,index)=>{
if(!this.data[item.field]){
this.data[item.field] = item.value ? item.value : ''
}
})
}
}
</script>
<style lang="scss" scoped>
.form {
}
::v-deep .uni-searchbar__box {
border: 1px solid #E4E4E4;
justify-content: start;
}
::v-deep .uni-forms-item {
padding: 10px 0px;
// border-bottom: 1px solid #E4E4E4;
margin: 0px;
}
::v-deep .uni-data-checklist{
margin-top: 10rpx!important;
}
::v-deep .uni-forms-item__content{
display: flex;
align-items: center;
}
.input {
height: 72rpx;
line-height: 72rpx;
}
.footer {
position: fixed;
bottom: 0px;
left: 0px;
width: 100%;
}
.btns {
display: flex;
button {
flex: 1;
}
.sure {
background: #409eff;
color: white;
border-radius: 0px;
&::after {
border: 1px solid #409eff;
border-radius: 0px;
}
}
.reset {
background: #F5F5F5;
border-radius: 0px;
&::after {
border-radius: 0px;
}
}
}
.select{
display: flex;
align-items: center;
height: 72rpx;
width: 100%;
.input{
flex: 1;
font-size: 28rpx;
color: #000000;
}
.placeholder{
flex: 1;
font-size: 28rpx;
color: #828282;
}
}
.select-popup{
background: white;
border-radius: 30rpx 30rpx 0px 0px;
max-height: 80vh;
overflow-y: auto;
.popup-item{
padding: 32rpx 30rpx;
border-bottom: 1px solid #eeeeee;
text-align: center;
font-size: 30rpx;
}
.line{
background: #F5F5F5;
height: 20rpx;
}
.cancle{
padding: 32rpx 30rpx;
text-align: center;
font-size: 30rpx;
color: red;
}
}
.active{
color: #409eff;
}
.right-button{
background: #409eff;
color: white;
padding:0rpx 30rpx;
border-radius: 16rpx;
text-align: center;
font-size: 28rpx;
}
.range{
display: flex;
align-items: center;
}
</style>

77
components/search/index.vue

@ -0,0 +1,77 @@
<template>
<view class="content">
<view class="screen-input">
<u-search
:show-action='false'
:bg-color="search.bgBolor ||'white'"
:border-color="search.borderColor ||'#E4E4E4'"
:shape="search.shape ||'square'"
:height="search.height || 80"
:placeholder="search.placeholder ||'请输入设备编码或设备名称'"
:clearabled="true">
</u-search>
</view>
<view class="screen-btn" @click="screen" v-if="isShowScreen">
<image src="../../static/icon/screen.png" mode="widthFix"></image>
<view>筛选</view>
</view>
</view>
</template>
<script>
export default {
props: {
searchData:{
type: Object,
default:()=>{return {}},
require:false
},
isShowScreen: {
type: Boolean,
default:()=>{return true},
require:false
},
},
data() {
return {
keyWord: '',
}
},
methods: {
//
search() {
this.$emit('search', this.keyWord)
},
//
screen() {
this.$emit('screen')
}
}
}
</script>
<style lang="scss" scoped>
.content {
padding: 20rpx;
display: flex;
align-items: center;
background: white;
.screen-input {
flex: 1;
width: 0px;
}
.screen-btn {
display: flex;
align-items: center;
margin-left:20rpx;
image {
width: 30rpx;
margin-right: 6rpx;
}
}
}
</style>

97
components/sparePartsApplicationList/index.vue

@ -0,0 +1,97 @@
<template>
<view class="content">
<view class="list">
<view class="item" v-for="(item,index) in data.list" :key="index">
<view class="title">
<view class="title-txt">
{{item.title}}
</view>
<view class="time" v-if="data.isShowTime">
2023-12-12 08:00:00
</view>
</view>
<view class="dec" v-for="(cur,key) in labelList" :key="key">
{{cur.label}}:<span>{{item[cur.field]}}</span>
</view>
<view class="bottom" v-if="data.isShowStatus">
<view class="status">
<u-tag text="待领取" v-if="item.status==1" bg-color='rgba(255,255,255,0)' color='#fe8463' border-color='#fe8463' type="primary" shape='circle'/>
<u-tag text="撤单" v-else-if="item.status==2" bg-color='rgba(255,255,255,0)' color='#d7d7d7' border-color='#d7d7d7 ' type="warning" shape='circle'/>
<u-tag text="待执行" v-else-if="item.status==3" bg-color='rgba(255,255,255,0)' color='#e01f54' border-color='#e01f54' type="success" shape='circle'/>
<u-tag text="维修中" v-else-if="item.status==4" bg-color='rgba(255,255,255,0)' color='#005eaa' border-color='#005eaa ' type="error" shape='circle'/>
<u-tag text="待验证" v-else-if="item.status==5" bg-color='rgba(255,255,255,0)' color='#2EC7C9' border-color='#2EC7C9' type="info" shape='circle'/>
<u-tag text="已完成" v-else-if="item.status==6" bg-color='rgba(255,255,255,0)' color='#2ba471' border-color='#2ba471' type="info" shape='circle'/>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
labelList:{
type: Array,
default:()=>{return []},
},
data:{
type: Object,
default:()=>{return {}},
},
},
data() {
return {
}
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.list{
background: #f5f5f5;
margin-top: 20rpx;
.item{
padding: 30rpx 30rpx 0px 30rpx;
margin-top: 20rpx;
background: white;
position: relative;
.title{
display: flex;
align-items: center;
padding-bottom: 20rpx;
.title-txt{
color: #409eff;
font-weight: bold;
font-size: 36rpx;
width: 0px;
flex: 1;
}
.time{
color: #919191;
}
}
.dec{
padding-bottom: 20rpx;
span{
color: #999999;
}
}
.last{
padding-bottom: 30rpx;
}
.bottom{
position: absolute;
right: 30rpx;
bottom:40rpx;
}
}
}
</style>

114
components/sparePartsCard/index.vue

@ -0,0 +1,114 @@
<template>
<view class="">
<view class="title" v-if="subForm.formLabel">
<span v-if="subForm.required">*</span>{{subForm.formLabel}}
</view>
<view class="list">
<view class="item" v-for="(item,index) in data[subForm.formField]" :key="index">
<view class="item-box">
<view class="spare-title">
<view class="title-txt">
{{item.name}}
</view>
</view>
<u-row gutter="16">
<u-col :span="cur.span || 12" v-for="(cur,key) in subForm.formData" :key="key">
<view class="dec">
<view class="" v-if="cur.isList">
{{cur.label}}:{{item[cur.field]}}
</view>
</view>
</u-col>
</u-row>
</view>
<u-icon name="minus-circle" color="#aaaaaa" size="60" v-if="subForm.isShowButton"></u-icon>
</view>
</view>
<view class="add-btn">
<u-button type="primary" @click="addSubForm"><u-icon name="plus-circle" color="#ffffff" size="36"
v-if="subForm.isShowButton"></u-icon>添加</u-button>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
subForm: {
type: Object,
default: () => {
return {}
},
},
data: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
}
},
methods: {
addSubForm() {
console.log(444)
this.$emit('addSubForm', this.subForm.formLabel)
}
}
}
</script>
<style lang="scss" scoped>
.title {
padding: 32rpx 0px;
position: relative;
span {
position: absolute;
left: -16rpx;
color: #fa3534;
padding-top: 6rpx;
}
}
.list {
.item {
display: flex;
margin-bottom: 20rpx;
.item-box {
background: #F5F5F5;
border-radius: 12rpx;
flex: 1;
width: 0rpx;
}
.spare-title {
padding: 20rpx 30rpx;
border-bottom: 1px solid #e4e4e4;
.title-txt {
color: #409eff;
font-size: 30rpx;
font-weight: bold;
}
}
.dec {
color: #9c9c9c;
padding: 0rpx 30rpx 20rpx;
}
}
}
.add-btn {
display: flex;
justify-content: flex-start;
align-items: center;
}
</style>

167
components/uni-section/uni-section.vue

@ -0,0 +1,167 @@
<template>
<view class="uni-section">
<view class="uni-section-header" @click="onClick">
<view class="uni-section-header__decoration" v-if="type" :class="type" />
<slot v-else name="decoration"></slot>
<view class="uni-section-header__content">
<text :style="{'font-size':titleFontSize,'color':titleColor}" class="uni-section__content-title" :class="{'distraction':!subTitle}">{{ title }}</text>
<text v-if="subTitle" :style="{'font-size':subTitleFontSize,'color':subTitleColor}" class="uni-section-header__content-sub">{{ subTitle }}</text>
</view>
<view class="uni-section-header__slot-right">
<slot name="right"></slot>
</view>
</view>
<view class="uni-section-content" :style="{padding: _padding}">
<slot />
</view>
</view>
</template>
<script>
/**
* Section 标题栏
* @description 标题栏
* @property {String} type = [line|circle|square] 标题装饰类型
* @value line 竖线
* @value circle 圆形
* @value square 正方形
* @property {String} title 主标题
* @property {String} titleFontSize 主标题字体大小
* @property {String} titleColor 主标题字体颜色
* @property {String} subTitle 副标题
* @property {String} subTitleFontSize 副标题字体大小
* @property {String} subTitleColor 副标题字体颜色
* @property {String} padding 默认插槽 padding
*/
export default {
name: 'UniSection',
emits:['click'],
props: {
type: {
type: String,
default: ''
},
title: {
type: String,
required: true,
default: ''
},
titleFontSize: {
type: String,
default: '14px'
},
titleColor:{
type: String,
default: '#333'
},
subTitle: {
type: String,
default: ''
},
subTitleFontSize: {
type: String,
default: '12px'
},
subTitleColor: {
type: String,
default: '#999'
},
padding: {
type: [Boolean, String],
default: false
}
},
computed:{
_padding(){
if(typeof this.padding === 'string'){
return this.padding
}
return this.padding?'10px':''
}
},
watch: {
title(newVal) {
if (uni.report && newVal !== '') {
uni.report('title', newVal)
}
}
},
methods: {
onClick() {
this.$emit('click')
}
}
}
</script>
<style lang="scss" >
$uni-primary: #2979ff !default;
.uni-section {
background-color: #fff;
.uni-section-header {
position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
align-items: center;
padding: 12px 10px;
font-weight: normal;
&__decoration{
margin-right: 6px;
background-color: $uni-primary;
&.line {
width: 4px;
height: 12px;
border-radius: 10px;
}
&.circle {
width: 8px;
height: 8px;
border-top-right-radius: 50px;
border-top-left-radius: 50px;
border-bottom-left-radius: 50px;
border-bottom-right-radius: 50px;
}
&.square {
width: 8px;
height: 8px;
}
}
&__content {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
flex: 1;
color: #333;
.distraction {
flex-direction: row;
align-items: center;
}
&-sub {
margin-top: 2px;
}
}
&__slot-right{
font-size: 14px;
}
}
.uni-section-content{
font-size: 14px;
}
}
</style>

469
components/verifition/Verify.vue

File diff suppressed because one or more lines are too long

14
components/verifition/utils/ase.js

@ -0,0 +1,14 @@
import CryptoJS from 'crypto-js'
/**
* @word 要加密的内容
* @keyWord String 服务器随机返回的关键字
* */
export function aesEncrypt(word, keyWord = "XwKsGlMcdPMEhR1B") {
var key = CryptoJS.enc.Utf8.parse(keyWord);
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}

17
components/verifition/utils/request.js

@ -0,0 +1,17 @@
import config from '@/config'
const baseUrl = config.baseUrl
export const myRequest = (option = {}) => {
return new Promise((reslove, reject) => {
uni.request({
url: baseUrl + option.url,
data: option.data,
method: option.method || "GET",
success: (result) => {
reslove(result)
},
fail: (error) => {
reject(error)
}
})
})
}

557
components/verifition/verifyPoint/verifyPoint.vue

File diff suppressed because one or more lines are too long

661
components/verifition/verifySlider/verifySlider.vue

File diff suppressed because one or more lines are too long

103
components/workOrderList/index.vue

@ -0,0 +1,103 @@
<template>
<view class="content">
<view class="list">
<view class="item" v-for="(item,index) in data.list" :key="index" @click="itemClick(item,index)">
<view class="title">
<view class="title-txt">
{{item.title}}
</view>
<view class="time" v-if="data.isShowTime">
2023-12-12 08:00:00
</view>
</view>
<view class="dec" v-for="(cur,key) in labelList" :key="key">
{{cur.label}}:<span>{{item[cur.field]}}</span>
</view>
<view class="bottom" v-if="data.isShowStatus">
<view class="time">
{{item.time}}
</view>
<view class="status">
<u-tag text="待领取" v-if="item.status==1" bg-color='rgba(255,255,255,0)' color='#fe8463' border-color='#fe8463' type="primary" shape='circle'/>
<u-tag text="撤单" v-else-if="item.status==2" bg-color='rgba(255,255,255,0)' color='#d7d7d7' border-color='#d7d7d7 ' type="warning" shape='circle'/>
<u-tag text="待执行" v-else-if="item.status==3" bg-color='rgba(255,255,255,0)' color='#e01f54' border-color='#e01f54' type="success" shape='circle'/>
<u-tag text="维修中" v-else-if="item.status==4" bg-color='rgba(255,255,255,0)' color='#005eaa' border-color='#005eaa ' type="error" shape='circle'/>
<u-tag text="待验证" v-else-if="item.status==5" bg-color='rgba(255,255,255,0)' color='#2EC7C9' border-color='#2EC7C9' type="info" shape='circle'/>
<u-tag text="已完成" v-else-if="item.status==6" bg-color='rgba(255,255,255,0)' color='#2ba471' border-color='#2ba471' type="info" shape='circle'/>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
labelList:{
type: Array,
default:()=>{return []},
},
data:{
type: Object,
default:()=>{return {}},
},
},
data() {
return {
}
},
methods: {
itemClick(item,index){
this.$emit('itemClick',item,index)
}
}
}
</script>
<style lang="scss" scoped>
.list{
background: #f5f5f5;
margin-top: 20rpx;
.item{
padding: 30rpx 30rpx 0px 30rpx;
margin-top: 20rpx;
background: white;
.title{
display: flex;
align-items: center;
padding-bottom: 20rpx;
.title-txt{
color: #409eff;
font-weight: bold;
font-size: 36rpx;
width: 0px;
flex: 1;
}
.time{
color: #919191;
}
}
.dec{
padding-bottom: 20rpx;
span{
color: #999999;
}
}
.last{
padding-bottom: 30rpx;
}
.bottom{
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid #E4E4E4;
padding: 20rpx 0px;
}
}
}
</style>

26
config.js

@ -0,0 +1,26 @@
// 应用全局配置
module.exports = {
baseUrl: process.env.NODE_ENV === 'development' ? 'http://localhost:12080' : 'http://api-dashboard.yudao.iocoder.cn',
baseApi:process.env.NODE_ENV === 'development' ? '/admin-api' : '/api/admin-api',
// 应用信息
appInfo: {
// 应用名称
name: "yudao-app",
// 应用版本
version: "1.0.0",
// 应用logo
logo: "/static/logo.png",
// 官方网站
site_url: "https://iocoder.cn",
// 政策协议
agreements: [{
title: "隐私政策",
url: "https://iocoder.cn"
},
{
title: "用户服务协议",
url: "https://iocoder.cn"
}
]
}
}

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

Loading…
Cancel
Save