@ -0,0 +1,16 @@ |
|||
###################################################################### |
|||
# Build Tools |
|||
|
|||
/unpackage/* |
|||
/node_modules/* |
|||
|
|||
###################################################################### |
|||
# Development Tools |
|||
|
|||
/.idea/* |
|||
/.vscode/* |
|||
/.hbuilderx/* |
|||
|
|||
package-lock.json |
|||
yarn.lock |
|||
|
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 142 KiB |
After Width: | Height: | Size: 152 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 238 KiB |
After Width: | Height: | Size: 139 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 201 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 130 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 160 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 124 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 109 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 208 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 116 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 173 KiB |
After Width: | Height: | Size: 125 KiB |
After Width: | Height: | Size: 125 KiB |
After Width: | Height: | Size: 148 KiB |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 248 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 115 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 129 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 109 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 131 KiB |
After Width: | Height: | Size: 62 KiB |
@ -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> |
@ -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. |
@ -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) | |
@ -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' |
|||
}) |
|||
} |
@ -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 |
|||
}) |
|||
} |
@ -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) |
|||
}, |
|||
// 选中任一checkbox时,由checkbox-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> |
@ -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> |
@ -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> |
@ -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> |
@ -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> |
@ -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(); |
|||
} |
@ -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) |
|||
} |
|||
}) |
|||
}) |
|||
} |
@ -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> |
@ -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" |
|||
} |
|||
] |
|||
} |
|||
} |