vue-cli init

This commit is contained in:
2025-08-15 16:25:44 +08:00
parent e81805b4c0
commit 8e22afd798
590 changed files with 103286 additions and 213 deletions
+35
View File
@@ -0,0 +1,35 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.toolbar {
padding-top: 5px;
background-color: #fff;
}
.wrap .box .item{
margin: 0 0 0px;
border-radius: 0;
.title {
padding-left:0;
.text {
font-size: 30rpx;
font-weight:500;
margin: 0;
color: #202328;
}
}
}
.grid {
.grid-icon {
color: #666;
}
.grid-text {
font-size: 24rpx;
padding: 15rpx;
color: #202328;
}
}
+130
View File
@@ -0,0 +1,130 @@
<template>
<view class="wrap">
<common-navbar title="通讯录" :showBack="false">
</common-navbar>
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<!--
<u-index-list :scrollTop="scrollTop">
<view class="personal-listitem" v-for="(items, idx) in indexList" :key="idx" :use-slot="true">
<u-index-anchor :index="items" />
<view class="list-cell" v-for="(item, index) in getRandomInt(1,6)" :key="index"
@click="navTo('/pages/sys/book/personal-details')">
<image class="user-images" :src="getReandomImage(index)"></image>
<view class="user-name"><span>{{nameList[index]}}</span><span
class="user-other">{{deptList[index]}}</span></view>
</view>
</view>
</u-index-list>
!-->
<u-divider>已经到底了</u-divider>
</view>
</template>
<script>
import CommonNavbar from "@/components/common-navbar/index";
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
CommonNavbar
},
data() {
return {
keywords: '',
scrollTop: 0,
indexList: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
"T", "U",
"V", "W", "X", "Y", "Z"
],
nameList: ['安全', '安静', '白飞', '百威', '白智英', '李红', '博雅'],
deptList: ['甘肃分公司', '西藏分公司', '海南分公司', '湖南分公司', '深圳分公司', '广州分公司', '济南分公司'],
imageList: ['user01', 'user02', 'user03', 'user04', 'user05', 'user06'],
}
},
onLoad() {
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
methods: {
getRandomInt(min, max) {
let data = Math.floor(Math.random() * (max - min + 1)) + min;
return data;
},
getRandomName() {
const length = this.nameList.length;
const i = this.getRandomInt(0, length - 1);
return this.nameList[i];
},
getRandomDept() {
const length = this.deptList.length;
const i = this.getRandomInt(0, length - 1);
return this.deptList[i];
},
getReandomImage(i) {
// const length = this.imageList.length;
// const i = this.getRandomInt(0, length - 1);
return '/static/aidex/images/' + this.imageList[i] + '.png';
},
navTo(url) {
uni.navigateTo({
url: url
});
},
}
};
</script>
<style lang="scss">
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.wrap .search {
background: #ffffff;
}
.list-cell {
display: flex;
box-sizing: border-box;
width: 100%;
padding: 8px 24rpx;
overflow: hidden;
color: #323233;
font-size: 14px;
line-height: 24px;
background-color: #fff;
align-items: center;
border-bottom: 1px solid #ececec !important;
}
.personal-listitem .list-cell:last-of-type {
border-bottom: 0 !important;
}
.user-images {
width: 80rpx;
height: 80rpx;
margin-right: 10px;
}
.user-name {
font-size: 32rpx;
color: #000000;
flex: 1;
span {
display: block;
}
.user-other {
font-size: 26rpx;
color: #999999;
font-weight: normal;
}
}
</style>
+82
View File
@@ -0,0 +1,82 @@
<template>
<view class="wrap">
<view class="list-cell">
<image class="user-images" src="/static/aidex/images/user06.png"></image>
<view class="user-name">
<span>安静</span><u-icon size="32" color="#f04d94" name="woman"></u-icon><br>
<span class="user-other">员工编号:8888 8888</span>
</view>
</view>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="公司" value="科技有限公司" icon="home" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="所属部门" value="人事部" icon="file-text" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="岗位" value="秘书" icon="account" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="手机" class="connect" value="13898987878" icon="phone" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="邮箱" class="connect" value="upugpbvrtge@188.com" icon="email" :title-width="180" :arrow="false"></u-cell-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
</u-cell-group>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
}
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
}
};
</script>
<style lang="scss">
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.list-cell {
display: flex;
box-sizing: border-box;
width: 100%;
padding: 10px 24rpx;
overflow: hidden;
color: #323233;
font-size: 14px;
line-height: 24px;
background-color: #fff;
align-items: center;
}
.user-images{
width: 80rpx;
height: 80rpx;
margin-right: 10px;
}
.user-name{
font-size: 32rpx;
color: #000000;
span{
}
.user-other{
font-size: 26rpx;
color: #999999;
font-weight: normal;
}
}
</style>
+35
View File
@@ -0,0 +1,35 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.toolbar {
padding-top: 5px;
background-color: #fff;
}
.wrap .box .item{
margin: 0 0 0px;
border-radius: 0;
.title {
padding-left:0;
.text {
font-size: 30rpx;
font-weight:500;
margin: 0;
color: #202328;
}
}
}
.grid {
.grid-icon {
color: #666;
}
.grid-text {
font-size: 24rpx;
padding: 15rpx;
color: #202328;
}
}
+86
View File
@@ -0,0 +1,86 @@
<template>
<view class="wrap">
<head-nav-bar title="首页" />
<u-swiper :height="270" :list="imgList" :title="false" @click="imgListClick"></u-swiper>
<u-collapse-item style="display: none;">
</u-collapse-item>
<u-divider>已经到底了</u-divider>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
show: false,
head: '/static/aidex/images/head.png',
imgList: [
{image: '/static/aidex/banner/banner01.png'}
//{image: '/static/aidex/banner/banner02.png'},
//{image: '/static/aidex/banner/banner03.png'}
],
todoCount: 3
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
imgListClick(index) {
console.log(`点击了第${index + 1}页图片`)
},
itemClick(index) {
console.log(index);
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.banner-box{
padding: 0 2%;
width: 96%;
height: 170rpx;
margin: 30rpx 0 30rpx;
}
.u-swiper-wrap{
padding:0 10px;
}
.banner-pic{
width: 47%;
float: left;
display: inline-block;
margin: 0 1.5%;
}
.banner-pic image{
width: 100%;
height: 170rpx;
border-radius: 12rpx;
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
}
.u-mode-light-info{
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top:-3px;
}
</style>
+113
View File
@@ -0,0 +1,113 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">验证手机号</view>
<view class="remind-text">请输入发送至<em>{{phoneNo}}</em>的6位验证码,有效期10分钟。如未收到,请重新获取验证码</view>
<u-message-input mode="box" @finish="finish" :maxlength="6" :breathe="true"></u-message-input>
<view class="remind-text">
<view v-if="!codeDisabled">{{loadTime}}秒后可重新获取验证码<br> </view>
<!-- <view class="button" :disabled="getCodeDisabled" @click="getCode()"><text>重新获取验证码</text></view> -->
<u-verification-code :keep-running="true" :seconds="seconds" @end="end" @start="start" ref="uCode"
@change="codeChange" :startText="startText" :changeText="changeText" :endText="endText">
</u-verification-code>
<u-button v-if="codeDisabled" class="button" @tap="getCode">{{tips}}</u-button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phoneNo: '',
verificationCode:'',
tips: '',
seconds: 60,
refCode: null,
startText: '重新获取验证码',
changeText: 'X秒重新获取',
endText: '重新获取验证码',
loadTime:60,
codeDisabled:false,
timer:''
};
},
onLoad(option) {
this.phoneNo = option.phoneNo
},
created() {
this.timer = setInterval(this.getTime, 1000)
},
watch:{
},
methods: {
getTime () {
this.loadTime--
if (this.loadTime === 0) {
clearInterval(this.timer)
this.codeDisabled = true
}
},
codeChange(text) {
this.tips = text;
},
getCode() {
if (this.$refs.uCode.canGetCode) {
uni.hideLoading();
// 这里此提示会被this.start()方法中的提示覆盖
this.$u.toast('验证码已发送');
// 通知验证码组件内部开始倒计时
this.$refs.uCode.start();
this.$u.api.sendCode({
phoneno: this.phoneNo,
validCodeType:'2'
})
.then(res => {
if (res.code == '200') {
} else {
this.$refs.uCode.reset();
this.$u.toast(res.msg);
}
});
} else {
this.$u.toast('请稍后重新获取');
}
},
finish(e){
this.$u.api.login({
phoneNo: this.phoneNo,
validCode: e,
loginType: '0'
})
.then(res => {
if(res.msg){
this.$u.toast(res.msg);
}
if (res.code == '200') {
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/home/index'
});
}, 500);
}
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.remind-text {
padding: 30rpx 70rpx;
color: #666666;
em {
font-weight: bold;
color: #242424;
font-style: normal;
margin: 0 5px;
}
}
</style>
+149
View File
@@ -0,0 +1,149 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">忘记密码</view>
<view class="list">
<view class="list-call">
<view class="iconfont icon-shouji" style="font-size: 22px;color:#5473e8;"></view>
<u-field
v-model="mobile"
label="+86"
placeholder="请填写手机号"
style="width: 100%;"
>
</u-field>
</view>
</view>
<view class="button" @click="code()"><text>获取验证码</text></view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
loginCode: '',
password: '',
validCode: '',
fpValidCode: '',
showPassword: false,
imgValidCodeSrc: null,
tips: '获取验证码',
seconds: 60
};
},
onLoad() {
this.refreshImgValidCode();
},
methods: {
code(){
uni.reLaunch({
url: '/pages/sys/login/code'
});
},
showPass() {
this.showPassword = !this.showPassword;
},
refreshImgValidCode(e) {
if (this.vuex_token == '') {
this.$u.api.index().then(res => {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid='
+ res.sessionid + '&t=' + new Date().getTime();
});
} else {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid='
+ this.vuex_token + '&t=' + new Date().getTime();
}
this.validCode = '';
},
codeChange(text) {
this.tips = text;
},
formValid() {
if (this.loginCode.length == 0) {
this.$u.toast('请输入账号');
return false;
}
if (this.password.length == 0) {
this.$u.toast('请输入新密码');
return false;
}
if (this.validCode.length == 0) {
this.$u.toast('请输入图片验证码');
return false;
}
return true;
},
getValidCode() {
if (!this.formValid()) {
return;
}
if (this.$refs.uCode.canGetCode) {
this.$u.api.validCode({
validCode: this.validCode
})
.then(res => {
if (res !== 'true') {
this.$u.toast('图片验证码错误');
return;
}
this.$u.api.getFpValidCode({
loginCode: this.loginCode,
validCode: this.validCode,
validType: 'mobile'
})
.then(res => {
this.$u.toast(res.message, 3000);
if (res.result == 'false') {
this.refreshImgValidCode();
}
});
this.$refs.uCode.start();
});
}
},
submit() {
if (!this.formValid()) {
return;
}
if (this.fpValidCode.length == 0) {
this.$u.toast('请输入手机验证码');
return false;
}
this.$u.api.savePwdByValidCode({
loginCode: this.loginCode,
fpValidCode: this.fpValidCode,
password: this.password
})
.then(res => {
uni.showModal({
title: '提示',
content: res.message,
showCancel: false,
success: function () {
if (res.result == 'true') {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}
}
});
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.uni-input-placeholder{
font-size: 32rpx;
}
.uni-input-input{
font-size: 32rpx;
}
.u-border-bottom:after {
border-bottom-width: 0px!important;
}
</style>
+114
View File
@@ -0,0 +1,114 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.wrap {
display: flex;
flex-direction: column;
justify-content: center;
}
.pages-sys-login-index .wrap {
background: url(../../../static/aidex/login-bg.png) no-repeat left top;
background-size: 100% auto;
}
.list {
display: flex;
flex-direction: column;
padding: 40rpx 70rpx 40rpx 70rpx;
}
.list-call {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding-top: 10rpx;
height: 120rpx;
font-weight: normal;
color: #333333;
border-bottom: 0.5px solid #e2e2e2;
}
.list-call .u-input {
flex: 1;
font-size: 39rpx;
text-align: left;
margin-left: 16rpx;
}
.list-call .u-icon-right {
color: #aaaaaa;
width: 50rpx;
height: 40rpx;
}
.button {
color: #ffffff;
font-size: 32rpx;
width: 80%;
height: 80rpx;
background: #497bff;
box-shadow: 0rpx 0rpx 13rpx 0rpx rgba(15, 168, 250, 0.4);
border-radius: 10rpx;
line-height: 80rpx;
text-align: center;
margin: 50rpx auto 0;
}
.img-valid-code img {
width: 30rpx;
heigth: 50rpx;
}
.btn-valid-code {
color: #da7918;
font-size: 30rpx;
line-height: 48rpx;
padding: 6rpx 35rpx;
border: 1rpx solid #da7918;
border-radius: 50rpx;
}
.btn-valid-code-hover {
background-color: #f3f3f3;
}
.btn-valid-codes {
color: #999999 !important;
border: 1rpx solid #999999;
}
.login-bottom-box{
position: fixed;
bottom:40rpx;
text-align: center;
width: 100%;
}
.copyright{
text-align: center;
color: #939393;
width: 100%;
font-size: 24rpx;
.u-link{
margin: 0 10rpx;
font-size: 24rpx!important;
}
}
.pages-sys-login-index, .pages-sys-login-reg, .pages-sys-login-forget {
.u-checkbox__label{
font-size: 28rpx!important;
}
.u-label{
flex: 0 0 35px!important;
width: 35px!important;
}
}
.reg-text{
font-size: 42rpx;
color: #000;
padding: 40rpx 70rpx 10rpx;
}
+554
View File
@@ -0,0 +1,554 @@
<template>
<view class="wrap">
<view class="haotoplogo">
<image src="/static/haotop/image/logo/Start.jpg" mode="aspectFit" class="logoimg"></image>
</view>
<!-- <div v-if="loginType === 'currentPhone'">-->
<!-- <u-tabs :list="list" :is-scroll="false" :current="current" @change="onClickItem"></u-tabs> -->
<!-- <view v-if="current === 0"> -->
<view class="list">
<template v-if="isDevelopment">
<view class="list-call">
<view class="iconfont icon-link" style="font-size: 22px;color:#5473e8;"></view>
<view style="width: 100%;">
<view class="server-selector" @click="showServerPicker">
<text>{{ getApiUrlLabel() }}</text>
<view class="iconfont icon-arrow-down" style="font-size: 16px;"></view>
</view>
</view>
</view>
<view class="list-call" v-if="selectedApiUrl === 'custom'">
<!-- 当选择自定义时显示输入框 -->
<input
class="u-input"
type="text"
v-model="customApiUrl"
maxlength="100"
placeholder="请输入服务器地址"
@blur="handleBlurInputUrl"
/>
</view>
</template>
<view class="list-call">
<view class="iconfont icon-avatar" style="font-size: 22px;color:#5473e8;"></view>
<input class="u-input" type="text" v-model="login.username" maxlength="32"
:placeholder="$t('login.placeholderAccount')" value="admin" @input="clearInput"/>
<u-icon :size="50" v-if="showClearIcon" name="close-circle-fill" color="#c0c4cc" class="u-clear-icon" @click="clearIcon"/>
</view>
<view class="list-call">
<view class="iconfont icon-key" style="font-size: 22px;color:#5473e8;"></view>
<input class="u-input" type="text" v-model="login.password" maxlength="32"
:placeholder="$t('login.placeholderPassword')" :password="!showPassword" value="admin123" />
<image class="u-icon-right"
:src="'/static/aidex/login/eye_' + (showPassword ? 'open' : 'close') + '.png'"
@click="showPass()"></image>
</view>
<div style="padding:15rpx 0 0;">
<!-- <view class="register">
<navigator class="register-link" url="forget" open-type="navigate">{{$t('login.forget')}}
</navigator>
<navigator class="register-link" url="reg" open-type="navigate">{{$t('login.reg')}}</navigator>
</view> -->
<u-checkbox v-model="remember" active-color="#5473e8">{{$t('login.autoLogin')}}</u-checkbox>
</div>
</view>
<button class="button" :disabled="login.loading" @click="submit('1')" :loading="login.loading"><text>登录</text></button>
<!-- <view class="login-bottom-box">
<u-divider> 更多登录方式 </u-divider>
<view class="oauth2">
<u-icon class="u-icon" size="100" color="#36c956" name="weixin-circle-fill"
@click="wxLogin"></u-icon>
<u-icon class="u-icon" size="100" color="#23a0f0" name="qq-circle-fill"
@click="qqLogin"></u-icon>
</view>
<view class="copyright">
登录即代表您已阅读并同意<u-link href="#">用户协议</u-link> 与 <u-link href="#">隐私政策</u-link>
</view>
</view> -->
<!-- </view> -->
<!-- <view v-if="current === 1">
<view class="list">
<view class="list-call">
<view class="iconfont icon-shouji" style="font-size: 22px;color:#5473e8;"></view>
<u-field v-model="phoneNo" label="+86" placeholder="请填写手机号" style="width: 100%;"
:border-bottom="false" :maxlength="11">
</u-field>
</view>
<div style="padding:25rpx 0 0;">
还没有账号?<navigator class="reg-link" url="reg" open-type="navigate">{{$t('login.reg')}}</navigator>
</div>
</view>
<view class="button" @click="nextStep()"><text>下一步</text></view>
<view class="login-bottom-box">
<u-divider> 更多登录方式 </u-divider>
<view class="oauth2">
<u-icon class="u-icon" size="100" color="#36c956" name="weixin-circle-fill"
@click="wxLogin"></u-icon>
<u-icon class="u-icon" size="100" color="#23a0f0" name="qq-circle-fill"
@click="qqLogin"></u-icon>
</view>
<view class="copyright">
登录即代表您已阅读并同意<u-link href="#">用户协议</u-link> 与 <u-link href="#">隐私政策</u-link>
</view>
</view>
</view> -->
<!-- </div>-->
<!-- <div v-if="loginType !== 'currentPhone'">-->
<!-- <view class="currentPhone-box">-->
<!-- <view class="number-text">183****1005</view>-->
<!-- <view class="other-text">认证服务由中国移动提供。</view>-->
<!-- <u-button type="primary" @click="submit('3')">本机号码一键登录</u-button>-->
<!-- <u-button @click="qiehuanLogin()">其他登录方式</u-button>-->
<!-- </view>-->
<!-- <view class="login-bottom-box">-->
<!-- <view class="copyright">-->
<!-- 登录即代表您已阅读并同意<u-link href="#">用户协议</u-link> 与 <u-link href="#">隐私政策</u-link>-->
<!-- </view>-->
<!-- </view>-->
<!-- </div>-->
<u-picker
v-model="showApiUrlPicker"
mode="selector"
:range="apiUrlList"
range-key="label"
@confirm="onApiUrlConfirm"
@cancel="showApiUrlPicker = false"
></u-picker>
<!-- 版本信息显示 -->
<view class="version-info">
<text class="version-text">版本: {{ appVersion }}</text>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import config from '@/common/config.js';
import base64 from '@/common/base64.js';
import util from '@/common/util.js';
import md5 from '@/common/md5.js';
import manifest from '@/manifest.json';
import { mapState } from 'vuex'
export default {
data() {
return {
isDevelopment: config.isDevelopment,
showClearIcon: false,
login: {
loading: false,
username: "",
password: ""
},
showApiUrlPicker: false,
// 根据环境设置默认URL和选项
selectedApiUrl: config.isDevelopment ? config.devApiUrlOptions[0].value : config.productionApiUrl,
customApiUrl: 'http://192.168.1.66:50002/hcscm/pda/v1',
apiUrlList: config.isDevelopment ? config.devApiUrlOptions : [],
phoneNo: '',
//username: '',
//password: '',
loginType: 'currentPhone',
showPassword: false,
remember: true,
isValidCodeLogin: false,
validCode: '',
imgValidCodeSrc: null,
list: [{
name: '用户名'
}, {
name: '手机号'
}],
current: 0,
activeColor: '#007aff',
};
},
computed: {
appVersion() {
return manifest.versionName;
}
},
onShow() {
// 只在开发环境读取存储的URL
if (config.isDevelopment) {
uni.getStorage({
key: 'ApiUrl',
success: (e) => {
util.updateApiUrl(e.data);
this.selectedApiUrl = e.data;
}
});
}
uni.getStorage({
key: 'UserInfo',
success: (e) => {
console.log("---->>>" + e.data.username + '--->>' + e.data.password);
this.login.username = e.data.username;
this.login.password = e.data.password;
}
})
},
onLoad() {
/*
this.$u.api.index({loginCheck: true}).then(res => {
if (res.code == '200'){
uni.reLaunch({
url: '/pages/sys/msg/index'
});
}
});
*/
},
methods: {
clearInput: function(event) {
if (event.detail.value.length > 0) {
this.showClearIcon = true;
} else {
this.showClearIcon = false;
}
},
clearIcon: function() {
this.login.username = ''
this.showClearIcon = false;
},
showServerPicker() {
this.showApiUrlPicker = true;
},
getApiUrlLabel() {
if (this.selectedApiUrl === 'custom') {
return '自定义服务器';
}
const option = this.apiUrlList.find(item => item.value === this.selectedApiUrl);
return option ? option.label : '选择服务器';
},
onApiUrlConfirm(e) {
console.log('e',JSON.stringify(e));
const selectedValue = this.apiUrlList[e[0]].value;
console.log('selectedValue',selectedValue)
this.selectedApiUrl = selectedValue;
this.showApiUrlPicker = false;
// 如果不是自定义,直接更新 store
if (selectedValue !== 'custom') {
this.$store.dispatch('updateApiUrl', selectedValue);
}
// 如果是自定义且已有自定义值,更新store
else if (this.customApiUrl) {
this.$store.dispatch('updateApiUrl', this.customApiUrl);
}
},
showPass() {
this.showPassword = !this.showPassword;
},
qiehuanLogin() {
this.loginType = 'other'
},
clickchecked() {
var that = this
this.remember = !this.remember
if (that.remember == true) {
if ((this.login.username.length > 0) && (this.login.password.length > 0)) {
uni.setStorage({
key: 'UserInfo',
data: that.login
})
}
}
},
onClickItem(index) {
this.current = index;
},
refreshImgValidCode(e) {
if (this.vuex_token == '') {
this.$u.api.index().then(res => {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid=' +
res.sessionid + '&t=' + new Date().getTime();
});
} else {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid=' +
this.vuex_token + '&t=' + new Date().getTime();
}
this.validCode = '';
},
nextStep() {
//验证码登录下一步
uni.showLoading({
title: '正在获取验证码',
mask: true
})
this.$u.api.sendCode({
phoneNo: this.phoneNo,
validCodeType: '2'
})
.then(res => {
if (res.code == '200') {
setTimeout(() => {
uni.navigateTo({
url: '/pages/sys/login/code?phoneNo=' + this.phoneNo
});
}, 500);
} else {
this.$u.toast(res.msg);
setTimeout(() => {
uni.navigateTo({
url: '/pages/sys/login/code?phoneNo=' + this.phoneNo
});
}, 500);
}
});
},
submit(loginType = '1') {
uni.showLoading({
title: '登录中...'
});
let currentApiUrl;
if (config.isDevelopment) {
// 开发环境:使用选择的URL
currentApiUrl = this.selectedApiUrl === 'custom' ? this.customApiUrl : this.selectedApiUrl;
if (!currentApiUrl || currentApiUrl.length === 0) {
this.$u.toast('请输入服务器地址');
return;
}
// 更新store中的URL
this.$store.dispatch('updateApiUrl', currentApiUrl);
} else {
// 生产环境:使用固定的生产URL
currentApiUrl = config.productionApiUrl;
}
if (this.login.username.length == 0) {
this.$u.toast('请输入账号');
return;
}
if (this.login.password.length == 0) {
this.$u.toast('请输入密码');
return;
}
console.log('开始请求', currentApiUrl)
this.login.loading = true
// 临时设置baseUrl为当前选择的API URL
const originalBaseUrl = this.$u.http.config.baseUrl;
this.$u.http.setConfig({ baseUrl: currentApiUrl });
this.$u.api.pdaLogin({
'phone': this.login.username,
'password': this.login.password,
}).then((res) => {
console.log('login res',res)
var aLoginUserData = res;
//console.log('--aLoginUserData->>' + JSON.stringify(aLoginUserData));
// 只在开发环境保存 apiurl 到本地存储
if (config.isDevelopment) {
uni.setStorage({
key: 'ApiUrl',
data: currentApiUrl
});
util.updateApiUrl(currentApiUrl);
}
// 保存 token 到本地存储
uni.setStorageSync('RemoteTokenData', aLoginUserData);
uni.setStorage({
key:'userToken',
data: {
Token: aLoginUserData.token,
}
});
getApp().globalData.Token = aLoginUserData.token;
getApp().globalData.EmployeeID = aLoginUserData.user_id;
getApp().globalData.IsSaleUserStatus = 0;
getApp().globalData.LoginID = aLoginUserData.user_id;
getApp().globalData.LoginName = aLoginUserData.user_name;
getApp().globalData.PlanDepartmentID = aLoginUserData.default_sale_system_id;
getApp().globalData.PlanDepartmentName = aLoginUserData.default_sale_system_name;
getApp().globalData.UserGroup = '';
getApp().globalData.StoreNameID = aLoginUserData.default_physical_warehouse_id;
getApp().globalData.StoreName = aLoginUserData.default_physical_warehouse_name;
getApp().globalData.StoreTypeNo = '';
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/workbench/index'
});
}, 500);
var that = this
if (that.remember == true) {
if ((this.login.username.length > 0) && (this.login.password.length > 0)) {
uni.setStorage({
key: 'UserInfo',
data: that.login
})
}
}
uni.showToast({
icon: 'none',
title: '登录成功!'
});
this.$store.dispatch('initNotification');
setTimeout(function() {
uni.hideLoading();
}, 1000);
}).catch((error) => {
console.log('login error', error)
uni.showToast({
icon: 'none',
title: '' + (error.msg || error.message || '')
});
setTimeout(function() {
uni.hideLoading();
}, 5000);
// 恢复原始baseUrl
this.$u.http.setConfig({ baseUrl: originalBaseUrl });
}).finally(() => {
this.login.loading = false;
})
},
wxLogin(res) {
this.$u.toast('微信登录');
},
qqLogin() {
this.$u.toast('QQ 登录');
},
handleBlurInputUrl(e) {
// 只在开发环境处理自定义URL
if (config.isDevelopment) {
const url = e.detail.value.trim();
if (url) {
this.customApiUrl = url;
// 保存到本地存储
uni.setStorage({
key: 'ApiUrl',
data: url
});
util.updateApiUrl(url);
}
}
},
}
};
</script>
<style lang="scss">
@import 'index.scss';
.server-selector {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10rpx 0;
border-bottom: 1px solid #eee;
}
.list-call {
.u-select {
margin-bottom: 10rpx;
}
.u-input {
margin-top: 10rpx;
}
}
.haotoplogo {
width: 300rpx;
height: 150rpx;
// max-width: 5%;
// max-height: 5%;
margin: 10rpx auto 10rpx auto;
}
.logoimg{
width: 100%;
height: 100%;
}
.logo {
width: 80%;
font-size: 64rpx;
color: #5473e8;
margin: 80rpx auto 80rpx auto;
}
.list-call-icon {
color: #ff0000;
}
.currentPhone-box {
text-align: center;
padding: 40rpx 80rpx;
.number-text {
color: #000000;
font-size: 60rpx;
}
.other-text {
color: #999999;
font-size: 26rpx;
padding: 20rpx 0;
}
.u-btn {
margin: 30rpx auto;
}
.u-hairline-border {
border: 1px solid #fff;
}
}
.register {
display: inline-block;
color: #5473e8;
height: 40rpx;
line-height: 40rpx;
font-size: 28rpx;
float: right;
margin-top: 6rpx;
}
.register-link {
float: right;
padding: 0 16rpx;
}
.reg-link {
display: inline-block;
color: #5473e8;
}
.oauth2 {
display: flex;
flex-direction: row;
justify-content: space-around;
margin: 0rpx 100rpx 30rpx;
image {
height: 80rpx;
width: 80rpx;
}
}
.u-tabs {
padding: 0 70rpx;
}
.version-info {
text-align: center;
margin-top: 30rpx;
}
.version-text {
font-size: 24rpx;
color: #999999;
}
</style>
+91
View File
@@ -0,0 +1,91 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">欢迎注册</view>
<view class="list">
<view class="list-call">
<view class="iconfont icon-shouji" style="font-size: 22px;color:#5473e8;"></view>
<u-field
v-model="phoneNo"
label="+86"
placeholder="请输入手机号码"
style="width: 100%;"
>
</u-field>
</view>
</view>
<view class="button" @click="getCode()"><text>获取验证码</text></view>
<view class="bottom-box">
<view class="copyright">
注册即代表您已阅读并同意<u-link href="#">用户协议</u-link> 与 <u-link href="#">隐私政策</u-link>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phoneNo: '',
};
},
onLoad() {
},
methods: {
getCode(){
uni.showLoading({
title: '正在获取验证码',
mask: true
})
this.$u.api.sendCode({
phoneNo: this.phoneNo,
validCodeType:'1'
})
.then(res => {
if (res.code == '200') {
setTimeout(() => {
uni.navigateTo({
url: '/pages/sys/login/registerCode?phoneNo='+this.phoneNo
});
}, 500);
}else{
this.$u.toast(res.msg);
}
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.agreement {
display:flex;
flex-direction:row;
align-items:center;
margin-left:90rpx;
color:#666;
}
.uni-input-placeholder{
font-size: 32rpx;
}
.uni-input-input{
font-size: 32rpx;
}
.bottom-box{
position: fixed;
bottom:40rpx;
text-align: center;
width: 100%;
}
.copyright{
text-align: center;
color: #939393;
width: 100%;
font-size: 24rpx;
.u-link{
margin: 0 10rpx;
font-size: 24rpx!important;
}
}
</style>
+111
View File
@@ -0,0 +1,111 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">验证手机号</view>
<view class="remind-text">请输入发送至<em>{{phoneNo}}</em>的6位验证码,有效期10分钟。如未收到,请重新获取验证码</view>
<u-message-input mode="box" @finish="finish" :maxlength="6" :breathe="true"></u-message-input>
<view class="remind-text">
<view v-if="!codeDisabled">{{loadTime}}秒后可重新获取验证码<br> </view>
<!-- <view class="button" :disabled="getCodeDisabled" @click="getCode()"><text>重新获取验证码</text></view> -->
<u-verification-code :keep-running="true" :seconds="seconds" @end="end" @start="start" ref="uCode"
@change="codeChange" :startText="startText" :changeText="changeText" :endText="endText">
</u-verification-code>
<u-button v-if="codeDisabled" class="button" @tap="getCode">{{tips}}</u-button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phoneNo: '',
verificationCode:'',
tips: '',
seconds: 60,
refCode: null,
startText: '重新获取验证码',
changeText: 'X秒重新获取',
endText: '重新获取验证码',
loadTime:60,
codeDisabled:false,
timer:''
};
},
onLoad(option) {
this.phoneNo = option.phoneNo
},
created() {
this.timer = setInterval(this.getTime, 1000)
},
watch:{
},
methods: {
getTime () {
this.loadTime--
if (this.loadTime === 0) {
clearInterval(this.timer)
this.codeDisabled = true
}
},
codeChange(text) {
this.tips = text;
},
getCode() {
if (this.$refs.uCode.canGetCode) {
uni.hideLoading();
// 这里此提示会被this.start()方法中的提示覆盖
this.$u.toast('验证码已发送');
// 通知验证码组件内部开始倒计时
this.$refs.uCode.start();
this.$u.api.sendCode({
phoneNo: this.phoneNo,
validCodeType:'1'
})
.then(res => {
if (res.code == '200') {
} else {
this.$refs.uCode.reset();
this.$u.toast(res.msg);
}
});
} else {
this.$u.toast('请稍后重新获取');
}
},
finish(e){
this.$u.api.registerUser({
phoneNo: this.phoneNo,
validCode: e
})
.then(res => {
if(res.msg){
this.$u.toast(res.msg);
}
if (res.code == '200') {
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/home/index'
});
}, 500);
}
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.remind-text {
padding: 30rpx 70rpx;
color: #666666;
em {
font-weight: bold;
color: #242424;
font-style: normal;
margin: 0 5px;
}
}
</style>
+306
View File
@@ -0,0 +1,306 @@
<template>
<view class="wrap" style="padding-bottom: 60px;">
<view class="header">
<view class="userinfo" @click="navTo('info')">
<view class="image">
<!-- <image :src="avatarUrl"></image> -->
<u-avatar size="80" :src="avatarUrl"></u-avatar>
</view>
<view class="info" style="flex:1;display: flex;justify-content: space-between;">
<view>
<view class="username">请假</view>
<view class="usercode">王天翔</view>
</view>
<u-tag text="待审核" shape="circle" type="warning" style="height: 55rpx;" />
</view>
</view>
</view>
<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
<!-- 当前套餐 -->
<view v-if="current === 0">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group class="datails-examine">
<u-cell-item title="申请编号" label="211110" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="所属部门" label="人事部" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="请假类型" label="事假" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="开始时间" label="2021年10月25日09:00" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="结束时间" label="2021年10月25日18:00" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="时长" label="8h" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="请假事由" label="感冒了,请假一天,望领导批准!" :arrow="false" :border-bottom="false"></u-cell-item>
</u-cell-group>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-time-line>
<u-time-line-item nodeTop="2">
<!-- 此处自定义了左边内容,用一个图标替代 -->
<template v-slot:node>
<image class="user-images" src="/static/aidex/images/user06.png"></image>
</template>
<template v-slot:content>
<view style="justify-content: space-between;display: flex;">
<view class="u-order-title">发起人</view>
<view class="u-order-time">05-08 12:12</view>
</view>
</template>
</u-time-line-item>
<u-time-line-item nodeTop="2">
<!-- 此处自定义了左边内容,用一个图标替代 -->
<template v-slot:node>
<image class="user-images" src="/static/aidex/images/user06.png"></image>
</template>
<template v-slot:content>
<view style="justify-content: space-between;display: flex;">
<view class="u-order-title">部门领导</view>
<view class="u-order-time">05-08 12:12</view>
</view>
<view class="u-order-desc">同意</view>
</template>
</u-time-line-item>
<u-time-line-item nodeTop="2">
<!-- 此处自定义了左边内容,用一个图标替代 -->
<template v-slot:node>
<image class="user-images" src="/static/aidex/images/user06.png"></image>
</template>
<template v-slot:content>
<view style="justify-content: space-between;display: flex;">
<view class="u-order-title">公司领导</view>
<view class="u-order-time">05-08 12:12</view>
</view>
<view class="u-order-desc">同意</view>
</template>
</u-time-line-item>
</u-time-line>
<u-row gutter="32" class="bottom-box" justify="center">
<u-col span="5">
<view><u-button :plain="true" type="primary" shape="circle" @click="navTo('/pages/sys/home/index')">拒绝</u-button></view>
</u-col>
<u-col span="5">
<view><u-button type="primary" shape="circle" @click="navTo('/pages/sys/home/index')">确定</u-button></view>
</u-col>
</u-row>
</view>
<view v-if="current === 1">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #f28c03;">
待审核
</view>
</u-card>
</view>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
list: [{
name: '申请详情'
}, {
name: '查看数据',
}],
m2mSimflowList:[],
m2mOrderFlowList:[],
current: 0,
status: 'loadmore',
iconType: 'circle',
isDot: false,
loadText: {
loadmore: '点击加载更多',
loading: '正在加载...',
nomore: '没有更多了'
},
}
},
created(){
},
methods: {
change(index) {
this.current = index;
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.apply-text{
font-size: 28rpx;
color: #333333;
span{
color: #999999;
}
}
.user-images{
width: 28px;
height:28px;
margin-right: 8px;
}
.apply-list-foot{
font-size: 28rpx;
}
.personnel-list{
display: flex;
align-items: center;
flex-wrap:wrap;
.personnel-user{
position: relative;
margin: 5px 9px 0;
}
.user-images{
width: 32px;
height:32px;
margin-right:0;
}
.iconfont{
position: absolute;
top:-12px;
right:-5px;
color: #FE0100;
}
}
.header {
background-color: #ffffff;
.userinfo {
display: flex;
padding: 20rpx 20rpx 10rpx;
.image {
flex-shrink: 0;
width: 80rpx;
height: 80rpx;
image {
border-radius: 100%;
width: 100%;
height: 100%;
}
}
.info {
display: flex;
flex-flow: wrap;
padding-left: 30rpx;
color: #333333;
.username {
width: 100%;
font-size: 32rpx;
}
.usercode {
padding: 0;
font-size: 24rpx;
color: #999999;
}
}
}
.logout {
flex-shrink: 0;
position: absolute;
right: 70rpx;
top: 65rpx;
.u-btn {
font-size: 30rpx;
}
}
}
.u-node {
width: 44rpx;
height: 44rpx;
border-radius: 100rpx;
display: flex;
justify-content: center;
align-items: center;
background: #d0d0d0;
}
.u-order-title {
color: #333333;
font-weight: bold;
font-size: 30rpx;
}
.u-order-desc {
color: rgb(150, 150, 150);
font-size: 28rpx;
margin-bottom: 6rpx;
}
.u-order-time {
color: rgb(200, 200, 200);
font-size: 26rpx;
}
</style>
+330
View File
@@ -0,0 +1,330 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
<view v-if="current === 0">
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<view class="msg-time">11:05</view>
<u-card class="task-list-item" :border="false" padding="20" margin="10rpx 20rpx" @click="navTo('/pages/sys/msg/details')">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot">
<u-row gutter="16">
<u-col span="6" text-align="center">
<view class="agree-text">同意</view>
</u-col>
<u-col span="6" text-align="center">
<view class="refuse-text">拒绝</view>
</u-col>
</u-row>
</view>
</u-card>
<view class="msg-time">11月10日 15:32</view>
<u-card class="task-list-item" :border="false" padding="20" margin="10rpx 20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot">
<u-row gutter="16">
<u-col span="6" text-align="center">
<view class="agree-text">同意</view>
</u-col>
<u-col span="6" text-align="center">
<view class="refuse-text">拒绝</view>
</u-col>
</u-row>
</view>
</u-card>
<view class="msg-time">11月08日 10:05</view>
<u-card class="task-list-item" :border="false" padding="20" margin="10rpx 20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot">
<u-row gutter="16">
<u-col span="6" text-align="center">
<view class="agree-text">同意</view>
</u-col>
<u-col span="6" text-align="center">
<view class="refuse-text">拒绝</view>
</u-col>
</u-row>
</view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
<view v-if="current === 1">
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
<view v-if="current === 2">
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
list: [{
name: '待办'
}, {
name: '已办',
}, {
name: '已发送',
}],
m2mSimflowList:[],
m2mOrderFlowList:[],
current: 0,
status: 'loadmore',
iconType: 'circle',
isDot: false,
loadText: {
loadmore: '点击加载更多',
loading: '正在加载...',
nomore: '没有更多了'
},
};
},
onLoad() {
},
methods: {
change(index) {
this.current = index;
},
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
@import '../../../common/uni.css';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.u-dropdown {
background: #ffffff;
}
.msg-time{
font-size: 26rpx;
padding: 5px 0;
color: #999999;
text-align: center;
}
.u-card__foot{
.u-icon{
margin-right: 10px;
}
}
.apply-text{
font-size: 28rpx;
color: #333333;
span{
color: #999999;
}
}
.user-images{
width: 28px;
height:28px;
margin-right: 8px;
}
.apply-list-foot{
font-size: 28rpx;
justify-content: space-around;
}
.personnel-list{
display: flex;
align-items: center;
flex-wrap:wrap;
.personnel-user{
position: relative;
margin: 5px 9px 0;
}
.user-images{
width: 32px;
height:32px;
margin-right:0;
}
.iconfont{
position: absolute;
top:-12px;
right:-5px;
color: #FE0100;
}
}
.agree-text{
color: #4094ff;
}
.refuse-text{
color: #ff4400;
}
</style>
+98
View File
@@ -0,0 +1,98 @@
<template>
<view class="wrap">
<view class="article-title">AiDex Sharp快速开发平台</view>
<view class="article-meta">
系统管理员 发起于 2021-4-20 12:30</text>
</view>
<view class="article-content">
<p>
AiDex Sharp快速开发平台:基于若依-ruoyi-vue项目扩展,前端采用Ant-Design-VUE,代码易读易懂、界面简洁美观,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,我们将把UI交互、快速开发能力追求到极致,适配国产数据库,国产中间件,将支持多租户、flowable工作流,移动APP,更多插件正在扩展中。
</p>
<div class="banner-pic">
<image src="../../../static/aidex/images/new-pic.png"></image>
</div>
<p>
aidex 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能(经典架构会的人多),让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
</p>
<p>
aidex 自 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中,aidex 架构精良、易于扩展、大众思维的设计模式、工匠精神打磨每一个细节,深入开发者的内心,并荣获开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生,教师作为入门教材,快速的去实践。
</p>
<p>
aidex 的升级,作者结合了多年总结和经验,以及各方面的应用案例,对架构完成了一次全部重构,也纳入很多新的思想。不管是从开发者模式、底层架构、逻辑处理还是到用户界面,用户交互体验上都有很大的进步,在不忘学习成本、提高开发效率的情况下,安全方面也做和很多工作,包括:身份认证、密码策略、安全审计、日志收集等众多安全选项供你选择。努力为大中小微企业打造全方位企业级快速开发解决方案。
</p>`
</view>
<view class="article-foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
.article-title {
font-size: 40rpx;
font-weight: 400;
text-align: left;
padding-bottom: 10rpx;
font-weight: bold;
margin: 30rpx 30rpx 0;
color: #333333;
}
.article-meta {
padding: 10rpx 30rpx 30rpx;
color: #999999;
border-bottom: 1px solid #ededed;
}
.article-content {
padding: 30rpx 30rpx 0rpx;
overflow: hidden;
font-size: 30rpx;
line-height: 50rpx;
::v-deep( p) {
margin-bottom: 20rpx;
text-indent: 60rpx;
}
.banner-pic{
margin: 10px auto;
text-align: center;
uni-image{
width: 300px;
height: 160px;
box-shadow:0 3px 10px rgba(0,0,0,0.15);
}
}
}
.article-foot{
padding:0 30rpx 20rpx;
font-size: 26rpx;
color: #999999;
.u-icon{
margin-right: 10px;
}
}
</style>
+159
View File
@@ -0,0 +1,159 @@
<template>
<view class="wrap">
<common-navbar title="消息" :showBack="false">
</common-navbar>
<!--
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<scroll-view class="scroll-list" scroll-y="true">
<view class="uni-list">
<uni-view class="uni-list-cell">
<view class="uni-media-list" @click="navTo('/pages/sys/msg/list-item')">
<view class="home-icon icon-color03">
<i class="iconfont icon-tongzhi1"><u-badge type="error" count="2"></u-badge></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>通知公告</span><span style="font-size: 26rpx;color: #999999;">12:35</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>关于元旦放假的通知</span></uni-text>
</uni-view>
</uni-view>
</view>
</uni-view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/list-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color04">
<i class="iconfont icon-xinwen"><u-badge type="error" count="1"></u-badge></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>新闻动态</span><span style="font-size: 26rpx;color: #999999;">09:07</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>神十三航天员圆满完成出舱任务</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/examine-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color06">
<i class="iconfont icon-msg-system"></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>日常办公</span><span style="font-size: 26rpx;color: #999999;">11月07日</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>王梓涵提交的“请假申请”待你审批</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/list-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiao"></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>网上报销</span><span style="font-size: 26rpx;color: #999999;">11月06日</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>吴天祥提交的“差旅费报销”待你审批</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/list-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>我的邮件</span><span style="font-size: 26rpx;color: #999999;">11月06日</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>邮件提醒:邮件提醒:15封新邮件未读</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
</view>
</scroll-view>
!-->
</view>
</template>
<script>
import CommonNavbar from "@/components/common-navbar/index";
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
CommonNavbar,
},
data() {
return {
keywords: '',
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
@import '../../../common/uni.css';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.uni-title{
font-size: 30rpx;
color: #333333;
padding: 10px;
background: #fff;
border-top:1px solid #ededed;
margin-top: 20rpx;
}
.uni-media-list {
padding: 15px 15px;
}
.uni-media-list-body {
height: 42px;
padding-left:20rpx;
}
.uni-media-list-text-top{
height: 40rpx;
overflow: hidden;
width: 100%;
line-height: 40rpx;
font-size: 32rpx;
display: flex;
justify-content: space-between;
}
.uni-media-list-text-bottom {
width: 100%;
line-height: 24rpx;
font-size: 26rpx;
color: #666666;
span{
margin-right: 10rpx;
}
}
</style>
+96
View File
@@ -0,0 +1,96 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<view class="msg-time">11:05</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月08日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="7"></u-icon></view>
</u-card>
<view class="msg-time">11月10日 15:32</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月10日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</u-card>
<view class="msg-time">11月08日 10:05</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月08日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</u-card>
<view class="msg-time">11月08日 09:32</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月08日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
@import '../../../common/uni.css';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.msg-time{
font-size: 26rpx;
padding: 10px 0;
color: #999999;
text-align: center;
}
.u-card__foot{
.u-icon{
margin-right: 10px;
}
}
</style>
+101
View File
@@ -0,0 +1,101 @@
<template>
<view class="wrap">
<view class="u-p-t-30 u-p-b-30 u-flex u-flex-col u-text-center">
<!-- <u-avatar size="250" src="/static/aidex/logo200.png"></u-avatar> -->
<view class="title">浩拓移动APP</view>
<!-- <view class="version">{{vuex_config.productVersion}}</view> -->
</view>
<u-cell-group class="form" :border="false">
<navigator url="" open-type="navigate">
<u-cell-item :arrow="true" title="公司首页"></u-cell-item>
</navigator>
<navigator>
<u-cell-item :arrow="false" title="技术服务">13925931455</u-cell-item>
</navigator>
<navigator url="" open-type="navigate">
<u-cell-item :arrow="true" title="服务条款"></u-cell-item>
</navigator>
</u-cell-group>
<u-row gutter="16" style="margin-top: 20px;">
<u-col span="6" text-align="center">
<view class="cade-box"><image src="/static/aidex/images/code01.jpg"></image></view>
<view class="cade-text">公众号</view>
</u-col>
<u-col span="6" text-align="center">
<view class="cade-box"><image src="/static/aidex/images/code02.jpg"></image></view>
<view class="cade-text">扫一扫 加我微信</view>
</u-col>
</u-row>
<view class="copyright">
<view> 版权所有</view>
<view>Copyright &copy; 2021 baidu.com</view>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
methods: {
upgrade(){
// #ifdef APP-PLUS
this.$u.api.upgradeCheck().then(res => {
if (res.result == 'true'){
console.log('res',res)
uni.showModal({
title: '提示',
content: res.message + '是否下载更新?',
showCancel: true,
success: function (res2) {
if (res2.confirm) {
plus.runtime.openURL(res.data.apkUrl);
}
}
});
}else{
this.$u.toast(res.message);
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版,无需检查更新!');
// #endif
}
}
};
</script>
<style lang="scss" scoped>
page {
background-color: #f5f5f5;
}
.title {
display: flex;
margin: 30rpx 0 10px;
font-size: 50rpx;
}
.version {
margin-bottom: 10rpx;
font-size: 40rpx;
}
.copyright {
margin-top: 50rpx;
text-align: center;
line-height: 60rpx;
color: #999;
}
.cade-box{
uni-image{
width: 120px;
height:120px;
border: 1px solid #dcdcdc;
padding: 5px;
background: #ffffff;
}
}
.cade-text{
color: #999999;
font-size:12px;
}
</style>
+118
View File
@@ -0,0 +1,118 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="清除缓存" :arrow="false">
<view slot="right-icon">
{{ cacheSize }}
</view>
</u-cell-item>
</u-cell-group>
<view class="u-m-40">
<u-button type="primary" @click="clearCache" :hair-line="false">清除缓存</u-button>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
cacheSize: '计算中...'
};
},
onLoad() {
this.calculateCacheSize();
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
clearCache() {
uni.showModal({
title: '提示',
content: '确定要清除缓存吗?',
success: (res) => {
if (res.confirm) {
this.performClearCache();
}
}
});
},
performClearCache() {
try {
// 清除本地存储
uni.clearStorageSync();
// 清除Vuex状态(除了必要的配置)
this.$store.dispatch('updateUserInfo', null);
// 重新计算缓存大小
this.calculateCacheSize();
uni.showToast({
title: '缓存清除成功',
icon: 'success',
duration: 2000
});
// 延迟跳转到登录页面
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}, 2000);
} catch (error) {
console.error('清除缓存失败:', error);
uni.showToast({
title: '清除缓存失败',
icon: 'none',
duration: 2000
});
}
},
calculateCacheSize() {
try {
// 获取本地存储信息
const storageInfo = uni.getStorageInfoSync();
const currentSize = storageInfo.currentSize || 0;
// 转换为合适的单位显示
if (currentSize < 1024) {
this.cacheSize = currentSize + 'KB';
} else if (currentSize < 1024 * 1024) {
this.cacheSize = (currentSize / 1024).toFixed(1) + 'MB';
} else {
this.cacheSize = (currentSize / (1024 * 1024)).toFixed(1) + 'GB';
}
// 如果没有缓存数据,显示0KB
if (currentSize === 0) {
this.cacheSize = '0KB';
}
} catch (error) {
console.error('获取缓存大小失败:', error);
this.cacheSize = '未知';
}
}
}
};
</script>
<style lang="scss">
@import '../home/index.scss';
page {
background-color: #f8f8f8;
}
::v-deep( .u-cell-title) {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>
+97
View File
@@ -0,0 +1,97 @@
<template>
<view class="wrap yjfk-form-right">
<u-form class="form" :model="model" :rules="rules" ref="uForm" label-position="top">
<u-form-item label="问题和意见" prop="content">
<u-input type="textarea" placeholder="请填写10个字以上的问题描述以便我们提供更好的帮助"
v-model="model.content" height="200" maxlength="500" />
</u-form-item>
<u-form-item label="联系方式(手机、邮箱、QQ号码)" prop="contact">
<u-input class="input-left-form" placeholder="选填,便于我们与你联系,进一步沟通"
v-modtel="model.contact" type="text" maxlength="200"></u-input>
</u-form-item>
</u-form>
<view class="form-footer">
<u-button class="btn" type="primary" @click="submit">提交</u-button>
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
model: {
id: '',
category: '',
content: '',
contact: '',
deviceInfo: ''
},
rules: {
category: [
{
required: true,
message: '请选择问题和意见的分类',
trigger: ['change','blur'],
}
],
content: [
{
required: true,
min: 10, max: 500,
message: '问题和意见在 10 到 500 个字符之间',
trigger: ['change','blur'],
}
],
}
};
},
onReady() {
this.$refs.uForm.setRules(this.rules);
// 获取设备信息
uni.getSystemInfo({
success: res => {
this.model.deviceInfo = JSON.stringify(res);
}
});
},
methods: {
submit() {
console.log(this.model)
/*
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.commentSave(this.model).then(res => {
uni.showModal({
title: '提示',
content: res.message,
showCancel: false,
success: function () {
if (res.result == 'true') {
uni.navigateBack();
}
}
});
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});*/
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss" scoped>
.input-placeholder{
text-align: right;
}
</style>
+97
View File
@@ -0,0 +1,97 @@
<template>
<view class="wrap">
<u-cell-group :border="false" title="消息提醒">
<u-cell-item title="接受消息提醒" :arrow="false">
<u-switch v-model="message" slot="right-icon" class="u-m-l-20"></u-switch>
</u-cell-item>
<u-cell-item title="配布单通知" :arrow="false">
<u-switch v-model="notificationEnabled" @change="onNotificationChange" slot="right-icon" class="u-m-l-20"></u-switch>
<text slot="label">关闭后,将停止检查新配布单并停止相关通知。</text>
</u-cell-item>
<u-cell-item title="通知栏显示消息详情" :arrow="false">
<u-switch v-model="messageBar" slot="right-icon" class="u-m-l-20"></u-switch>
<text slot="label">关闭后,当收到消息的时候,只显示有提示,不显示消息内容。</text>
</u-cell-item>
</u-cell-group>
<u-cell-group :border="false" title="声音与振动">
<u-cell-item title="收到消息后播放声音或振动" @click="openSettings">
<text slot="label">前往系统设置中,修改声音与振动</text>
</u-cell-item>
</u-cell-group>
<u-cell-group :border="false" title="软件更新提醒">
<u-cell-item title="软件更新提醒" :arrow="false">
<u-switch v-model="upgrade" slot="right-icon" class="u-m-l-20"></u-switch>
<text slot="label">当本软件有新版本发布时,给予提醒</text>
</u-cell-item>
</u-cell-group>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
message: true,
messageBar: true,
upgrade: true
};
},
computed: {
notificationEnabled: {
get() {
return this.$store.state.vuex_notificationEnabled;
},
set(value) {
this.$store.commit('$uStore', {
name: 'vuex_notificationEnabled',
value: value
});
}
}
},
methods: {
onNotificationChange(value) {
if (value) {
// 开启通知,重新初始化通知系统
this.$store.dispatch('initNotification');
} else {
// 关闭通知,停止轮询
this.$store.dispatch('stopPolling');
}
},
openSettings() {
// #ifdef APP-PLUS
uni.getSystemInfo({
success(res) {
if(res.platform == 'ios'){
plus.runtime.openURL("app-settings://");
} else if (res.platform == 'android'){
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var mIntent = new Intent('android.settings.SOUND_SETTINGS');
main.startActivity(mIntent);
}
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版,无需检查更新!');
// #endif
},
}
};
</script>
<style lang="scss">
page {
background-color: #f8f8f8;
}
::v-deep( .u-cell-title) {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>
+106
View File
@@ -0,0 +1,106 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<view class="u-p-t-5 u-p-b-5">
<u-collapse class="box" :accordion="false" :arrow="false">
<view class="item" v-for="(item, index) in list" :key="item.code">
<u-collapse-item :open="true">
<view class="title" slot="title">
<u-icon :name="item.icon != '' ? item.icon : 'home'" :size="35"></u-icon>
<view class="text">{{item.name}}</view>
</view>
<u-cell-group class="list" :border="false">
<u-cell-item :arrow="true" v-for="(child, index2) in item.childList" :key="child.code" @click="navTo('/pages/sys/msg/form')">
<text slot="title">{{child.name}}</text>
<text slot="label">发送者:{{child.createByName}} &nbsp;|&nbsp; 时间:{{child.createDate}}</text>
</u-cell-item>
</u-cell-group>
</u-collapse-item>
</view>
</u-collapse>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
list: [
{
code: 'a',
name: '常见问题',
icon: 'error-circle',
childList: [
{
code: 'a1',
name: '为什么没有消息提醒?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a2',
name: '怎么关闭消息提醒?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a3',
name: '怎么办理工单?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
}
]
},
{
code: 'a-1',
name: '任务相关',
icon: 'clock',
childList: [
{
code: 'a1',
name: '怎么办理任务?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a2',
name: '怎么完成任务?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a3',
name: '怎么查询任务?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
}
]
}
],
};
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
</style>
+130
View File
@@ -0,0 +1,130 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.header {
background-color: #5b95ff;
.userinfo {
display: flex;
padding: 0rpx 30rpx 10rpx;
.image {
flex-shrink: 0;
width: 100rpx;
height: 100rpx;
image {
border-radius: 100%;
width: 100%;
height: 100%;
}
}
.info {
display: flex;
flex-flow: wrap;
padding-left: 30rpx;
color: #fff;
.username {
width: 100%;
font-size: 40rpx;
}
.usercode {
height: 36rpx;
padding: 0 20rpx;
margin-top: 10rpx;
background-color: rgba(0, 0, 0, 0.1);
border-radius: 20rpx;
font-size: 20rpx;
}
}
}
.logout {
flex-shrink: 0;
position: absolute;
right: 70rpx;
top: 65rpx;
.u-btn {
font-size: 30rpx;
}
}
}
.toolbar {
padding: 0 4%;
margin-bottom: 5rpx;
border-radius: 0 0 100% 100%;
background-color: #4094ff;
.box {
display: flex;
flex-direction: row;
justify-content: space-around;
padding: 10rpx;
border-radius: 15rpx;
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.15);
background-color: #fefefe;
.item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
// flex-flow: wrap;
height: 120rpx;
color: #666666;
font-size: 30rpx;
padding: 10rpx 10rpx;
.icon {
font-size: 50rpx;
}
.label {
padding: 10rpx;
}
}
.hover {
background-color: #f6f6f6;
border-radius: 15rpx;
}
}
}
.uni-input-input{
border: 1px solid red;
}
.userinfo-topbox{
padding: 10px 15px;
color: #ffffff;
.number{
font-size: 20px;
em{
font-style: normal;
font-size: 12px;
}
}
}
.user-order-top{
padding: 10px 15px;
background: #ffffff;
}
.user-order-box{
padding: 10px 15px;
background: #ffffff;
border-bottom: 1px solid #ededed;
.u-col{
position: relative;
}
.u-badge{
top:-8px!important;
right:5px!important;
background: #ff7001;
border: 1px solid #ffffff;
box-sizing: content-box;
}
}
+147
View File
@@ -0,0 +1,147 @@
<template>
<view class="wrap">
<common-navbar title="我的" backgroundColor="#5b95ff" titleColor="#ffffff" :showBack="false">
</common-navbar>
<view class="header">
<view class="userinfo">
<view class="image" @click="navTo('info')">
<!-- <image :src="avatarUrl"></image> -->
<u-avatar size="100" src="/static/aidex/images/user01.png"></u-avatar>
</view>
<view class="info" style="display: flex;justify-content: space-between;">
<view>
<view class="username">{{loginUserName}}</view>
<!--view class="usercode">普通员工</view-->
</view>
<view class="sign-in-images"><image src="/static/aidex/images/sign-in.png"></image></view>
</view>
</view>
<!--
<u-row class="userinfo-topbox" gutter="16" justify="center">
<u-col span="4" text-align="center">
<view class="number">9,999<em>元</em></view>
<view>余额</view>
</u-col>
<u-col span="4" text-align="center" @click="navTo('/pages/sys/application/recharge')">
<view><u-icon size="28px" color="#ffffff" name="rmb-circle"></u-icon></view>
<view>充值</view>
</u-col>
<u-col span="4" text-align="center" @click="navTo('/pages/sys/application/balance-details')">
<view>
<view class="iconfont icon-faan" style="font-size: 24px;color:#ffffff;"></view>
</view>
<view>余额明细</view>
</u-col>
</u-row>
!-->
</view>
<view class="list">
<view>
<u-cell-group class="personal-list">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item icon="question-circle" :iconStyle="{ color: '#ff8d06' }" title="常见问题" @click="navTo('problem')"></u-cell-item>
<u-cell-item icon="kefu-ermai" :iconStyle="{ color: '#5f8dff' }" title="意见反馈" @click="navTo('comment')"></u-cell-item>
<u-cell-item icon="map" :iconStyle="{ color: '#316ede' }" title="账号安全" @click="navTo('pwd')"></u-cell-item>
<u-cell-item icon="order" :iconStyle="{ color: '#59bdf9' }" title="清除缓存" @click="navTo('clear-cache')"></u-cell-item>
<!--<u-cell-item icon="account" :iconStyle="{ color: '#27c0dc' }" title="关于我们" @click="navTo('about')"></u-cell-item>
<u-cell-item icon="kefu-ermai" :iconStyle="{ color: '#ff8a00' }" title="联系客服" @click="navTo('service')"></u-cell-item>!-->
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item icon="setting" :iconStyle="{ color: '#2767dc' }" title="系统设置" @click="navTo('setting')"></u-cell-item>
</u-cell-group>
</view>
</view>
</view>
</template>
<script>
import CommonNavbar from "@/components/common-navbar/index";
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
CommonNavbar,
},
data() {
return {
loginUserName:'',
iconSize: 38
};
},
onLoad(e) {
this.loginUserName = getApp().globalData.UserName;
},
computed: {
avatarUrl() {
// let url = this.vuex_user.avatarUrl || '/ctxPath/static/images/user1.jpg';
// url = url.replace('/ctxPath/', this.vuex_config.baseUrl + '/');
let url = this.vuex_config.baseUrl+ this.vuex_user.avatar || '/static/aidex/tabbar/my_2.png';
url = this.replaceAll(url,'\\','/');
return url + '?t=' + new Date().getTime();
}
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
logout() {
this.$u.api.logout().then(res => {
this.$u.toast(res.msg);
if (res.code == '200' || res.code == '401') {
let self = this;
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}, 500);
}
});
},
upgrade(){
// #ifdef APP-PLUS
this.$u.api.upgradeCheck().then(res => {
if (res.result == 'true'){
uni.showModal({
title: '提示',
content: res.message + '是否下载更新?',
showCancel: true,
success: function (res2) {
if (res2.confirm) {
plus.runtime.openURL(res.data.apkUrl);
}
}
});
}else{
this.$u.toast(res.message);
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端无需检查更新')
// #endif
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.wrap .u-cell-box .u-cell_title{
color:#202328;
}
.sign-in-images{
width: 125rpx;
height:50rpx;
position: absolute;
right: 0;
top:5px;
uni-image{
width: 125rpx;
height:50rpx;
}
}
</style>
+199
View File
@@ -0,0 +1,199 @@
<template>
<view class="wrap" style="padding-bottom: 60px;">
<u-cell-group :border="false">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item title="头像" :arrow="true">
<u-avatar size="60" bg-color='#000;' :src="avatarUrl" @click="chooseAvatar" style="position: absolute;right: 35px;top:12px;"></u-avatar>
</u-cell-item>
<u-cell-item title="公司" :title-width="180" :arrow="false">{{UserInfo.CompanyName}}</u-cell-item>
<u-cell-item title="部门" :title-width="180" :arrow="false">{{UserInfo.DepartmentName}}</u-cell-item>
<u-cell-item title="姓名" :title-width="180" :arrow="false">{{UserInfo.EmployeeName}}</u-cell-item>
<u-cell-item title="岗位" :title-width="180" :arrow="false">{{UserInfo.DutyNames}}</u-cell-item>
<u-cell-item title="手机" :title-width="180" :arrow="false">{{UserInfo.EmployeeMobile}}</u-cell-item>
<u-cell-item title="邮箱" :title-width="180" :arrow="false">{{UserInfo.EmployeeEmail}}</u-cell-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
</u-cell-group>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import util, {
playSuccessAudio,
playErrorAudio
} from '../../../common/util.js';
export default {
data() {
return {
UserInfo:{
CompanyName: '',
DepartmentName: '',
EmployeeName: '',
DutyNames: '',
EmployeeMobile: '',
EmployeeEmail: ''
},
model: {
sex: '1'
},
rules: {
},
avatarBase64: ''
};
},
onLoad() {
this.GetEmployeeInfo();
/*
this.$u.api.getUserInfo().then(res => {
if (res.code == '200'){
this.model = {
id: res.user.id,
name: res.user.name,
sex: res.user.sex,
email: res.user.email,
phonenumber: res.user.phonenumber,
officeTel: res.user.officeTel,
loginDate: res.user.loginDate,
loginIp: res.user.loginIp
}
}else if (res.result == 'login'){
uni.reLaunch({
url: '/pages/sys/login/index'
});
}else{
this.$u.toast(res.message);
}
});
uni.$on('uAvatarCropper', path => {
this.avatarBase64 = path;
})
*/
},
computed: {
avatarUrl() {
if (this.avatarBase64 != ''){
return this.avatarBase64;
}
let url = this.vuex_config.baseUrl+ this.vuex_user.avatar || '/static/aidex/tabbar/my_2.png';
url = this.replaceAll(url,'\\','/');
//url = url.replace('/aidex/', this.vuex_config.baseUrl + '/');
/* alert(url); */
return url;
}
},
onReady() {
//this.$refs.uForm.setRules(this.rules);
},
methods: {
GetEmployeeInfo: function() {
uni.request({
url: util.apiurl + 'rest/db/opensql',
data: {
token: getApp().globalData.Token,
format: 'json',
data: {
db_name: getApp().globalData.AppDBName,
sql_command_id: 'APP.BaseData.GetEmployeeInfo',
params: [{
name: 'ID',
value: getApp().globalData.EmployeeID
}]
},
},
success: (res) => {
if (res.data.status == 0 && res.data.count > 0) {
var aResultData = res.data.data;
for (var i = 0; i < aResultData.length; i++) {
this.UserInfo.CompanyName = aResultData[i].CompanyName;
this.UserInfo.DepartmentName = aResultData[i].DepartmentName;
this.UserInfo.EmployeeName = aResultData[i].EmployeeName;
this.UserInfo.DutyNames = aResultData[i].DutyNames;
this.UserInfo.EmployeeMobile = aResultData[i].EmployeeMobile;
this.UserInfo.EmployeeEmail = aResultData[i].EmployeeEmail;
};
}
},
})
},
chooseAvatar() {
this.$u.route({
url: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',
params: {
destWidth: 200, // 输出图片宽高
rectWidth: 200, // 裁剪框的宽高
fileType: 'jpg', // 输出的图片类型,如果'png'类型发现裁剪的图片太大,改成"jpg"即可
}
})
},
submit() {
this.$refs.uForm.validate(valid => {
if (valid) {
// #ifdef MP-WEIXIN || MP-TOUTIAO
this.$u.toast('您填写的信息有误,11。');
if (this.avatarBase64 != '' && !this.avatarBase64.startsWith('data:')){
this.avatarBase64 = 'data:image/jpeg;base64,' + uni.getFileSystemManager()
.readFileSync(this.avatarBase64, "base64")
}
// #endif
this.model.avatarBase64 = this.avatarBase64;
this.$u.api.user.saveUserInfo(this.model).then(res => {
if(res.code == '200'){
this.vuex_user.avatar = res.imgUrl;
this.$u.vuex('vuex_user', this.vuex_user);
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false,
success: function () {
uni.navigateBack();
}
});
}else{
this.$u.toast(res.msg);
}
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss" scoped>
page{
background: #f5f5f5;
}
.u-form{
background: #fff;
padding:0 15px;
}
.u-size-medium{
height: 60rpx;
line-height: 60rpx;
padding: 0 20px;
font-size:28rpx;
background-color: rgba(0, 0, 0, 0.1);
color:#fff;
border: 1px solid #5186e7;
}
.u-hairline-border:after{
border: 1px solid #5186e7!important;
}
.input-placeholder{
text-align: right;
}
.u-input{
text-align: right !important;
}
.u-form-item{
font-size:36rpx;
}
</style>
+112
View File
@@ -0,0 +1,112 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form class="task-form-field" :model="model" :rules="rules" ref="uForm">
<u-form-item label="修改姓名" label-width="180">
<u-input placeholder="请输入姓名"></u-input>
</u-form-item>
</u-form>
<view class="form-footer">
<u-button class="btn" type="primary" @click="submit">保存</u-button>
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import base64 from '@/common/base64.js';
export default {
data() {
return {
model: {
oldPassword: '',
newPassword: '',
confirmNewPassword: ''
},
rules: {
oldPassword: [
{
required: true,
message: '请输入旧密码',
trigger: ['change','blur'],
}
],
newPassword: [
{
required: true,
message: '请输入新密码',
trigger: ['change','blur'],
},
{
pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/,
message: '需同时含有字母和数字,长度在6-12之间',
trigger: ['change','blur'],
}
],
confirmPassword: [
{
required: true,
message: '请重新输入密码',
trigger: ['change','blur'],
},
{
validator: (rule, value, callback) => {
return value === this.model.newPassword;
},
message: '两次输入的密码不相等',
trigger: ['change','blur'],
}
],
}
};
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods: {
submit() {
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.user.infoSavePwd({
oldPassword: this.model.oldPassword,
newPassword: this.model.newPassword
}).then(res => {
if(res.code == '200'){
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false,
success: function () {
uni.navigateBack();
}
});
}else{
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false
});
}
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss">
page{
background: #f5f5f5;
}
.remind-text{
padding: 20rpx 30rpx;
color: #666666;
}
</style>
+76
View File
@@ -0,0 +1,76 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="如何切换用户?" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="如何修改密码?" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="如何找回密码?" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="如何更新系统?" @click="navTo('')" :arrow="true"></u-cell-item>
</u-cell-group>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
message: true,
messageBar: true,
upgrade: true
};
},
methods: {
openSettings() {
// #ifdef APP-PLUS
uni.getSystemInfo({
success(res) {
if(res.platform == 'ios'){
plus.runtime.openURL("app-settings://");
} else if (res.platform == 'android'){
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var mIntent = new Intent('android.settings.SOUND_SETTINGS');
main.startActivity(mIntent);
}
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版,无需检查更新!');
// #endif
},
logout() {
this.$u.api.logout().then(res => {
this.$u.toast(res.msg);
if (res.code == '200') {
let self = this;
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}, 500);
}
});
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
::v-deep( .u-cell-title) {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>
+126
View File
@@ -0,0 +1,126 @@
<template>
<view class="wrap">
<view class="remind-text">请设置登录密码<br>
定期更新密码提高安全性</view>
<u-form class="form" :model="model" :rules="rules" ref="uForm">
<u-form-item label="旧密码" prop="oldPassword" label-width="180">
<u-input type="password" v-model="model.oldPassword" placeholder="请输入旧密码"></u-input>
</u-form-item>
<u-form-item label="新密码" prop="newPassword" label-width="180">
<u-input type="password" v-model="model.newPassword" placeholder="请输入新密码"></u-input>
</u-form-item>
<u-form-item label="确认密码" prop="confirmPassword" label-width="180">
<u-input type="password" v-model="model.confirmPassword" placeholder="请确认新密码"></u-input>
</u-form-item>
</u-form>
<view class="remind-text">
<u-icon name="question-circle" color="#2767dc" size="28"></u-icon>
密码必须是8-16位的数字,字符组合(不能是纯数字)</view>
<view class="form-footer">
<u-button class="btn" type="primary" @click="submit">提交</u-button>
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import base64 from '@/common/base64.js';
export default {
data() {
return {
model: {
oldPassword: '',
newPassword: '',
confirmNewPassword: ''
},
rules: {
oldPassword: [
{
required: true,
message: '请输入旧密码',
trigger: ['change','blur'],
}
],
newPassword: [
{
required: true,
message: '请输入新密码',
trigger: ['change','blur'],
},
{
pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/,
message: '需同时含有字母和数字,长度在6-12之间',
trigger: ['change','blur'],
}
],
confirmPassword: [
{
required: true,
message: '请重新输入密码',
trigger: ['change','blur'],
},
{
validator: (rule, value, callback) => {
return value === this.model.newPassword;
},
message: '两次输入的密码不相等',
trigger: ['change','blur'],
}
],
}
};
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods: {
submit() {
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.user.infoSavePwd({
oldPassword: this.model.oldPassword,
newPassword: this.model.newPassword
}).then(res => {
if(res.code == '200'){
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false,
success: function () {
uni.navigateBack();
}
});
}else{
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false
});
}
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss">
page{
background: #f5f5f5;
}
.u-form{
background: #fff;
padding: 0px 15px;
}
.remind-text{
padding: 20rpx 30rpx;
color: #666666;
}
</style>
+19
View File
@@ -0,0 +1,19 @@
<template>
<view class="wrap">
<view class="service-banner">
<image class="" src="/static/aidex/images/service02.png"></image>
</view>
<u-gap height="20" bg-color="#ffffff"></u-gap>
<u-cell-group class="service-box">
<u-cell-item icon="phone-fill" title="联系电话" label="15389457063" :arrow="true"></u-cell-item>
<u-cell-item icon="weixin-circle-fill" title="官方微信" label="识别二维码,关注官方微信" :arrow="true"></u-cell-item>
<u-cell-item icon="qq-circle-fill" title="官方QQ" label="1125373337、487477889" :arrow="true"></u-cell-item>
</u-cell-group>
</view>
</template>
<script>
</script>
<style lang="scss">
</style>
+123
View File
@@ -0,0 +1,123 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="通用" @click="navTo('/pages/sys/user/currency')" :arrow="true"></u-cell-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item title="版本更新" @click="upgrade()" :arrow="true"></u-cell-item>
<u-cell-item title="隐私政策" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="用户协议" @click="navTo('')" :arrow="true"></u-cell-item>
</u-cell-group>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<view>
<u-button class="sign-out" @click="logout" :hair-line="false">退出登录</u-button>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import app_upgrade from '@/uni_modules/app-upgrade/js_sdk/index.js'
import util from '@/common/util.js';
import config from '../../../common/config';
export default {
data() {
return {
};
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
upgrade(){
// #ifdef APP-PLUS
app_upgrade(async ()=>{
// 获取应用信息
const appInfo = await new Promise((resolve) => {
plus.runtime.getProperty(plus.runtime.appid, (inf) => {
resolve(inf);
});
});
const res = await this.$u.api.upgradeCheck({
app_name: config.upgradeName,
current_version: appInfo.version
})
if(!res.download_url){
this.$u.toast('当前版本已是最新版');
return
}
return {
changelog: res.message + ',最新版本:' + res.latest_version,
status: res.need_update ? 1 : 0, // 0 无新版本 | 1 有新版本
path: res.download_url // 新apk地址
}
}, 1)
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版,无需检查更新!');
// #endif
},
openSettings() {
// #ifdef APP-PLUS
uni.getSystemInfo({
success(res) {
if(res.platform == 'ios'){
plus.runtime.openURL("app-settings://");
} else if (res.platform == 'android'){
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var mIntent = new Intent('android.settings.SOUND_SETTINGS');
main.startActivity(mIntent);
}
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版,无需检查更新!');
// #endif
},
logout() {
this.$u.api.pdaLogout().then(res => {
console.log('res',res)
if (res.code != 0) {
// this.$u.toast('退出登录失败');
uni.reLaunch({
url: '/pages/sys/login/index'
});
return
}
// 清除token和用户信息
uni.removeStorageSync('token');
this.$store.dispatch('updateUserInfo', null);
uni.reLaunch({
url: '/pages/sys/login/index'
});
}).catch(error => {
console.log('error',error)
// 即使退出登录失败,也要清除本地token和用户信息
uni.removeStorageSync('token');
this.$store.dispatch('updateUserInfo', null);
// this.$u.toast('退出登录失败');
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
::v-deep( .u-cell-title) {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>
+217
View File
@@ -0,0 +1,217 @@
<template>
<view class="wrap" style="padding-bottom: 60px;">
<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
<!-- 当前套餐 -->
<view v-if="current === 0">
<u-form :model="form" class="apply-form-field">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="请假类型" label-width="150" right-icon="arrow-right">
<u-input placeholder="请选择" type="select" class="form-field-select"/>
</u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="开始时间" label-width="150" right-icon="arrow-right">
<u-input placeholder="请选择" type="select" class="form-field-select"/>
</u-form-item>
<u-form-item label="结束时间" label-width="150" right-icon="arrow-right">
<u-input placeholder="请选择" type="select" class="form-field-select"/>
</u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="请假事由" label-width="150"></u-form-item>
<u-form-item><u-input type="textarea" placeholder="请输入内容"/></u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="图片" label-width="150">
<view solt="right" style="flex:1;text-align: right;align-items: center;">
<i class="add-user iconfont icon-tupian"></i>
</view>
</u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="选人处理人" label-width="150">
<view solt="right" style="flex:1;text-align: right;align-items: center;">
<i class="add-user iconfont icon-zengjia"></i>
</view>
</u-form-item>
<u-form-item>
<view class="personnel-list">
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user01.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user02.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user03.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user04.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user05.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
</view>
</u-form-item>
</u-form>
<u-row gutter="32" class="bottom-box" justify="center">
<u-col span="10">
<view><u-button type="primary" shape="circle" @click="navTo('/pages/sys/home/index')">确定</u-button></view>
</u-col>
</u-row>
</view>
<view v-if="current === 1">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型:</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间:</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间:</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #f28c03;">
待审核
</view>
</u-card>
</view>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
list: [{
name: '发起申请'
}, {
name: '查看数据',
}],
m2mSimflowList:[],
m2mOrderFlowList:[],
current: 0,
status: 'loadmore',
iconType: 'circle',
isDot: false,
loadText: {
loadmore: '点击加载更多',
loading: '正在加载...',
nomore: '没有更多了'
},
}
},
created(){
},
methods: {
change(index) {
this.current = index;
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
}
</script>
<style lang="scss" scoped>
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.apply-text{
font-size: 28rpx;
color: #333333;
span{
color: #999999;
}
}
.user-images{
width: 28px;
height:28px;
margin-right: 8px;
}
.apply-list-foot{
font-size: 28rpx;
}
.personnel-list{
display: flex;
align-items: center;
flex-wrap:wrap;
.personnel-user{
position: relative;
margin: 5px 9px 0;
}
.user-images{
width: 48px;
height:48px;
margin-right:0;
}
.iconfont{
position: absolute;
top:-12px;
right:-5px;
color: #FE0100;
}
}
</style>
@@ -0,0 +1,280 @@
<template>
<view class="wrap">
<!--<u-swiper :height="270" :list="imgList" :title="false" @click="imgListClick"></u-swiper>!-->
<view class="workbench-title">销售管理</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/saleship/saleallocated')" >
<view class="home-icon icon-color01">
<i class="iconfont icon-qingjia"></i>
</view>
<view class="grid-text">销售预约</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('/pages/productorder/productweave')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">生产排产</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('/pages/saleship/salepickscan')">
<view class="home-icon icon-color05">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">成品配布</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('/pages/saleship/saleShipmentOut')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">销售付运</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">成品管理</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/storegoods/dyeworksDyeback')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-finance"></i>
</view>
<view class="grid-text">染整进仓</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-mall-bag"></i>
</view>
<view class="grid-text">成品进仓</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiaodan"></i>
</view>
<view class="grid-text">成品出仓</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">成品盘点</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">成品移架</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storegoods/storegoodsstoresearch')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">成品库存</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storegoods/storegoodsstoreallin')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">进仓查询</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storegoods/storegoodsstoreallout')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">出仓查询</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">坯布管理</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/storefabric/storefabricInStore')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">坯布进仓</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('/pages/storefabric/storefabricOutStore')">
<view class="home-icon icon-color03">
<i class="iconfont icon-chucha"></i>
</view>
<view class="grid-text">坯布出仓</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-ribao"></i>
</view>
<view class="grid-text">坯布盘点</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<view class="grid-text">坯布移架</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storefabric/storefabricstoresearch')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">坯布库存</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storefabric/storefabricstoreallin')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">进仓查询</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storefabric/storefabricstoreallout')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">出仓查询</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">原料管理</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/storeyarn/storeYarnInStore')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-yongche"></i>
</view>
<view class="grid-text">原料进仓</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storeyarn/storeYarnBusinessOut')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">原料出仓</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('/pages/storeyarn/storeYarnProduceWeave')">
<view class="home-icon icon-color03">
<i class="iconfont icon-jiabanshenqing"></i>
</view>
<view class="grid-text">织造配纱</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('/pages/storeyarn/storeYarnBusinessCheck')">
<view class="home-icon icon-color12">
<i class="iconfont icon-kaoqinchuqin"></i>
</view>
<view class="grid-text">原料盘点</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storeyarn/storeYarnMoveStore')">
<view class="home-icon icon-color04">
<i class="iconfont icon-haocaifei"></i>
</view>
<view class="grid-text">原料移架</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storeyarn/storeyarnstoresearch')">
<view class="home-icon icon-color01">
<i class="iconfont icon-gongwujiedai"></i>
</view>
<view class="grid-text">原料库存</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storeyarn/storeyarnstoreallin')">
<view class="home-icon icon-color01">
<i class="iconfont icon-gongwujiedai"></i>
</view>
<view class="grid-text">进仓查询</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storeyarn/storeyarnstoreallout')">
<view class="home-icon icon-color01">
<i class="iconfont icon-gongwujiedai"></i>
</view>
<view class="grid-text">出仓查询</view>
</u-grid-item>
<u-grid-item :index="0" @click="navTo('/pages/storeyarn/storeYarnBusinessIn')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-yongche"></i>
</view>
<view class="grid-text">进仓上架</view>
</u-grid-item>
</u-grid>
</view>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
show: false,
head: '/static/aidex/images/head.png',
imgList: [
{image: '/static/aidex/banner/banner01.png'}
//{image: '/static/aidex/banner/banner02.png'},
//{image: '/static/aidex/banner/banner03.png'}
],
todoCount: 3
};
},
onLoad() {
},
onShow: function() {
} ,
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
imgListClick(index) {
console.log(`点击了第${index + 1}页图片`)
},
itemClick(index) {
console.log(index);
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.banner-box{
padding: 0 2%;
width: 96%;
height: 170rpx;
margin: 30rpx 0 30rpx;
}
.u-swiper-wrap{
padding:0 10px;
}
.banner-pic{
width: 47%;
float: left;
display: inline-block;
margin: 0 1.5%;
}
.banner-pic image{
width: 100%;
height: 170rpx;
border-radius: 12rpx;
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
}
.u-mode-light-info{
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top:-3px;
}
.workbench-title{
font-size: 32rpx;
font-weight: bold;
color: #333333;
padding: 15px 30rpx;
}
.home-icon i.icon-tongzhi{
font-size: 22px;
}
</style>
+207
View File
@@ -0,0 +1,207 @@
<template>
<view class="wrap">
<u-swiper :height="270" :list="imgList" :title="false" @click="imgListClick"></u-swiper>
<view class="workbench-title">常用应用</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/sys/workbench/add-form')" >
<view class="home-icon icon-color01">
<i class="iconfont icon-qingjia"></i>
</view>
<view class="grid-text">请假申请</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">合同申请</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-chucha"></i>
</view>
<view class="grid-text">出差申请</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-ribao"></i>
</view>
<view class="grid-text">日报</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<view class="grid-text">邮件</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">会议室</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/sys/workbench/install')">
<view class="home-icon icon-color13">
<i class="iconfont icon-tianjia" style="color:#90949d;"></i>
</view>
<view class="grid-text">添加常用</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">日常办公</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-yongche"></i>
</view>
<view class="grid-text">用车</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-jiabanshenqing"></i>
</view>
<view class="grid-text">加班</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-kaoqinchuqin"></i>
</view>
<view class="grid-text">考勤</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-haocaifei"></i>
</view>
<view class="grid-text">耗材</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color01">
<i class="iconfont icon-gongwujiedai"></i>
</view>
<view class="grid-text">接待</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-baoming"></i>
</view>
<view class="grid-text">报名</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">财务报销</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-finance"></i>
</view>
<view class="grid-text">费用报销</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-mall-bag"></i>
</view>
<view class="grid-text">采购申请</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiaodan"></i>
</view>
<view class="grid-text">付款申请</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">用章申请</view>
</u-grid-item>
</u-grid>
</view>
<u-divider>已经到底了</u-divider>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
show: false,
head: '/static/aidex/images/head.png',
imgList: [
{image: '/static/aidex/banner/banner01.png'},
{image: '/static/aidex/banner/banner02.png'},
{image: '/static/aidex/banner/banner03.png'}
],
todoCount: 3
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
imgListClick(index) {
console.log(`点击了第${index + 1}页图片`)
},
itemClick(index) {
console.log(index);
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.banner-box{
padding: 0 2%;
width: 96%;
height: 170rpx;
margin: 30rpx 0 30rpx;
}
.u-swiper-wrap{
padding:0 10px;
}
.banner-pic{
width: 47%;
float: left;
display: inline-block;
margin: 0 1.5%;
}
.banner-pic image{
width: 100%;
height: 170rpx;
border-radius: 12rpx;
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
}
.u-mode-light-info{
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top:-3px;
}
.workbench-title{
font-size: 32rpx;
font-weight: bold;
color: #333333;
padding: 15px 30rpx;
}
.home-icon i.icon-tongzhi{
font-size: 22px;
}
</style>
+35
View File
@@ -0,0 +1,35 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.toolbar {
background-color: #fff;
}
.wrap .box .item{
margin: 0 0 0px;
border-radius: 0;
.title {
padding-left:0;
.text {
font-size: 30rpx;
font-weight:500;
margin: 0;
color: #202328;
}
}
}
.grid {
.grid-icon {
color: #666;
}
.grid-text {
font-size: 24rpx;
padding: 15rpx;
color: #202328;
}
}
+406
View File
@@ -0,0 +1,406 @@
<template>
<view class="wrap">
<common-navbar title="工作台" :showBack="false">
<template #right>
<view class="scan_box">
<u-icon
name="scan"
color="#333333"
size="46"
@click="handleScan"
></u-icon>
</view>
</template>
</common-navbar>
<view class="workbench-title">销售管理</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/saleship/salepickscan')">
<view class="home-icon icon-color05">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">成品配布</view>
</u-grid-item>
<u-grid-item
:index="1"
@click="navTo('/pages/storegoods/QRBarCodeReview')"
>
<view class="home-icon icon-color02">
<i class="iconfont icon-mall-bag"></i>
</view>
<view class="grid-text">标签检测</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">成品管理</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item
:index="0"
@click="navTo('/pages/storegoods/dyeworksDyeback')"
>
<view class="home-icon icon-color04">
<i class="iconfont icon-finance"></i>
</view>
<view class="grid-text">染整进仓</view>
</u-grid-item>
<u-grid-item
:index="1"
@click="navTo('/pages/storegoods/storeGoodsBusinessIn')"
>
<view class="home-icon icon-color03">
<i class="iconfont icon-mall-bag"></i>
</view>
<view class="grid-text">成品进仓</view>
</u-grid-item>
<u-grid-item
:index="2"
@click="navTo('/pages/storegoods/storeGoodsBusinessOut')"
>
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiaodan"></i>
</view>
<view class="grid-text">成品出仓</view>
</u-grid-item>
<u-grid-item
@click="navTo('/pages/storegoods/storeGoodsBusinessCheck')"
>
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">成品盘点</view>
</u-grid-item>
<u-grid-item
@click="navTo('/pages/storegoods/storeGoodsBusinessStationMoveOnly')"
>
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">成品移架</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storegoods/storegoodsstoresearch')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">成品库存</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storegoods/storegoodsstoreallin')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">进仓查询</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storegoods/storegoodsstoreallout')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">出仓查询</view>
</u-grid-item>
</u-grid>
</view>
<!--
<view class="workbench-title">坯布管理</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/storefabric/storefabricInStore')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">坯布进仓</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('/pages/storefabric/storefabricOutStore')">
<view class="home-icon icon-color03">
<i class="iconfont icon-chucha"></i>
</view>
<view class="grid-text">坯布出仓</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-ribao"></i>
</view>
<view class="grid-text">坯布盘点</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<view class="grid-text">坯布移架</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storefabric/storefabricstoresearch')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">坯布库存</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storefabric/storefabricstoreallin')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">进仓查询</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/storefabric/storefabricstoreallout')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">出仓查询</view>
</u-grid-item>
</u-grid>
</view>
-->
</view>
</template>
<script>
import CommonNavbar from "@/components/common-navbar/index";
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
CommonNavbar,
},
data() {
return {
show: false,
head: "/static/aidex/images/head.png",
imgList: [
{ image: "/static/aidex/banner/banner01.png" },
//{image: '/static/aidex/banner/banner02.png'},
//{image: '/static/aidex/banner/banner03.png'}
],
todoCount: 3,
scanReceiver: null,
isPageActive: false,
};
},
onLoad() {
// #ifdef APP-PLUS
this.isPageActive = true;
this.registerScanBroadcast();
// #endif
},
onUnload() {
// #ifdef APP-PLUS
this.isPageActive = false;
this.unregisterBroadcast();
// #endif
},
onHide() {
// 页面隐藏时
this.isPageActive = false;
},
onShow() {
// 页面显示时
this.isPageActive = true;
},
computed: {
contentStyle() {
const navHeight = getStatusBarHeight() + 44;
return {
height: `${navHeight}px`,
};
},
},
methods: {
navTo(url) {
uni.navigateTo({
url: url,
});
},
imgListClick(index) {
console.log(`点击了第${index + 1}页图片`);
},
itemClick(index) {
console.log(index);
},
// 处理扫码
handleScan() {
// uni.navigateTo({
// url: '/pages/saleship/salepickscandetail?order_no=FPD-PB-202412270196'
// })
// return
// #ifdef APP-PLUS || MP-WEIXIN
uni.scanCode({
scanType: ['qrCode', 'barCode'], // 同时支持二维码和条形码
success: (res) => {
console.log('扫码成功:', res);
const cleanResult = res.result.trim().replace(/[\r\n]/g, '');
uni.navigateTo({
url: '/pages/saleship/salepickscandetail?order_no=' + cleanResult
})
},
fail: (err) => {
console.error('扫码失败:', err);
uni.showToast({
title: '扫码失败',
icon: 'none'
});
}
});
// #endif
// #ifdef H5
uni.showToast({
title: "H5环境不支持扫码功能",
icon: "error",
});
// #endif
},
// 处理扫码成功
handleScanSuccess(result) {
try {
// 这里可以根据实际需求处理扫码结果
// 例如:验证扫码结果的格式或内容
if (this.validateScanResult(result)) {
// 扫码验证通过,执行其他逻辑
uni.showToast({
title: "执行成功",
icon: "success",
});
} else {
uni.showToast({
title: "无效的二维码",
icon: "none",
});
}
} catch (error) {
console.error("处理扫码结果失败:", error);
uni.showToast({
title: "处理失败",
icon: "none",
});
}
},
// 注册扫码广播
registerScanBroadcast() {
try {
console.log('开始注册扫码广播');
const main = plus.android.runtimeMainActivity();
// 配置扫码枪广播
try {
const Intent = plus.android.importClass('android.content.Intent');
const intent = new Intent('com.android.scanner.service_settings');
intent.putExtra('action_barcode_broadcast', 'com.android.server.scannerservice.broadcast');
intent.putExtra('key_barcode_broadcast', 'scannerdata');
main.sendBroadcast(intent);
console.log('扫码枪广播配置已发送');
} catch (error) {
console.error('配置扫码枪广播失败:', error);
}
// 注册广播接收器
const IntentFilter = plus.android.importClass('android.content.IntentFilter');
const filter = new IntentFilter();
filter.addAction('com.android.server.scannerservice.broadcast');
const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: (context, intent) => {
// 只有当页面活动时才处理广播
if (!this.isPageActive) return;
try {
console.log("Workbench intent:", intent);
const scanResult = intent.getStringExtra('scannerdata');
console.log('工作台-扫码结果:', scanResult);
if (scanResult) {
this.$nextTick(() => {
const cleanResult = scanResult.trim().replace(/[\r\n]/g, '');
uni.navigateTo({
url: '/pages/saleship/salepickscandetail?order_no=' + cleanResult
});
});
}
} catch (error) {
console.error('处理广播数据时出错:', error, error.stack);
}
}
});
// 注册广播接收器
main.registerReceiver(receiver, filter);
this.scanReceiver = receiver;
console.log('扫码广播注册成功,等待扫码...');
} catch (error) {
console.error('注册扫码广播失败:', error);
console.error('错误详情:', error.message);
console.error('错误堆栈:', error.stack);
}
},
// 注销广播接收器
unregisterBroadcast() {
if (this.scanReceiver) {
try {
const main = plus.android.runtimeMainActivity();
main.unregisterReceiver(this.scanReceiver);
this.scanReceiver = null;
console.log('扫码广播注销成功');
} catch (error) {
console.error('注销扫码广播失败:', error);
}
}
},
},
};
</script>
<style lang="scss">
@import "index.scss";
.scan_box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.scan_text {
font-size: 12px;
color: #2979ff;
}
}
.banner-box {
padding: 0 2%;
width: 96%;
height: 170rpx;
margin: 30rpx 0 30rpx;
}
.u-swiper-wrap {
padding: 0 10px;
}
.banner-pic {
width: 47%;
float: left;
display: inline-block;
margin: 0 1.5%;
}
.banner-pic image {
width: 100%;
height: 170rpx;
border-radius: 12rpx;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
}
.u-mode-light-info {
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top: -3px;
}
.workbench-title {
font-size: 32rpx;
font-weight: bold;
color: #333333;
padding: 15px 30rpx;
}
.home-icon i.icon-tongzhi {
font-size: 22px;
}
</style>
+217
View File
@@ -0,0 +1,217 @@
<template>
<view class="wrap">
<u-navbar class="custom-header" title="常用设置" height="44" >
<view slot="right">
<u-button size="mini" type="primary" style="margin-right:10px" @click="navTo('/pages/sys/workbench/index')">保存</u-button>
</view>
</u-navbar>
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<view class="workbench-title">常用应用</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color01">
<i class="iconfont icon-qingjia"></i>
</view>
<view class="grid-text">请假申请</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">合同申请</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-chucha"></i>
</view>
<view class="grid-text">出差申请</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-ribao"></i>
</view>
<view class="grid-text">日报</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<view class="grid-text">邮件</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">会议室</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">日常办公</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-yongche"></i>
</view>
<view class="grid-text">用车</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-jiabanshenqing"></i>
</view>
<view class="grid-text">加班</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-kaoqinchuqin"></i>
</view>
<view class="grid-text">考勤</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-haocaifei"></i>
</view>
<view class="grid-text">耗材</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color01">
<i class="iconfont icon-gongwujiedai"></i>
</view>
<view class="grid-text">接待</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-baoming"></i>
</view>
<view class="grid-text">报名</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">财务报销</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-finance"></i>
</view>
<view class="grid-text">费用报销</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-mall-bag"></i>
</view>
<view class="grid-text">采购申请</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiaodan"></i>
</view>
<view class="grid-text">付款申请</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">用章申请</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
</u-grid>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
show: false,
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.reLaunch({
url: url
});
},
back(){
uni.navigateBack();
}
}
};
</script>
<style lang="scss" scoped>
@import 'index.scss';
page {
background-color: #ffffff;
}
.wrap .search{
background: #ffffff;
}
.u-swiper-wrap{
padding:0 10px;
}
.u-mode-light-info{
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top:-3px;
}
.workbench-title{
font-size: 32rpx;
font-weight: bold;
color: #333333;
padding: 15px 30rpx;
}
.home-icon i.icon-tongzhi{
font-size: 22px;
}
.grid .u-grid-item{
position: relative;
.install-icon{
position: absolute;
top:-10px;
right:50%;
margin-right: -30px;
color: #FE0100;
}
.addinstall-icon{
position: absolute;
top:-10px;
right:50%;
margin-right: -30px;
color: #4285F4;
}
}
</style>