From 682182cf67a5aa9fed34335fea22d4673f30f10c Mon Sep 17 00:00:00 2001
From: Mr.Shi <1878285526@qq.com>
Date: 星期一, 04 九月 2023 11:59:44 +0800
Subject: [PATCH] 小程序
---
minipro_standard/store/index.js | 90 +++++++++++------
minipro_standard/pages/mine/mine.vue | 73 +++++++++++--
minipro_standard/util/api/index.js | 5 +
minipro_standard/pages/updatePhone/updatePhone.vue | 41 +++++++
minipro_standard/util/request/requestInterceptors.js | 5
minipro_standard/pages/workbench/workbench.vue | 4
minipro_standard/pages/personal/personal.vue | 20 ++-
minipro_standard/pages/login/login.vue | 3
minipro_standard/pages/changePassword/changePassword.vue | 35 ++++++
9 files changed, 213 insertions(+), 63 deletions(-)
diff --git a/minipro_standard/pages/changePassword/changePassword.vue b/minipro_standard/pages/changePassword/changePassword.vue
index a975dd8..311f0d2 100644
--- a/minipro_standard/pages/changePassword/changePassword.vue
+++ b/minipro_standard/pages/changePassword/changePassword.vue
@@ -25,7 +25,7 @@
</view>
</view>
<view class="password_footer">
- <button v-preventReClick class="password_footer_submit">
+ <button class="password_footer_submit" @click="submit">
<text>瀹屾垚</text>
</button>
</view>
@@ -33,6 +33,7 @@
</template>
<script>
+ import { updatePwd } from '@/util/api/PersonalAPI'
export default {
data() {
return {
@@ -42,6 +43,38 @@
confirmPassword: ''
}
};
+ },
+ methods: {
+ // 蹇樿瀵嗙爜
+ forgotPassword() {
+
+ },
+ // 鎻愪氦淇敼
+ submit() {
+ if (!this.form.originalPassword) {
+ uni.showToast({ title: '鍘熷瘑鐮佷笉鑳戒负绌�', icon: 'none', duration: 2000 });
+ } else if (!this.form.newPassword) {
+ uni.showToast({ title: '鏂板瘑鐮佷笉鑳戒负绌�', icon: 'none', duration: 2000 });
+ } else if (!/^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{6,}$/.test(this.form.newPassword)) {
+ uni.showToast({ title: '瀵嗙爜鏍煎紡涓嶆纭�', icon: 'none', duration: 2000 });
+ } else if (!this.form.confirmPassword) {
+ uni.showToast({ title: '纭瀵嗙爜涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+ } else if (this.form.newPassword !== this.form.confirmPassword) {
+ uni.showToast({ title: '涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�', icon: 'none', duration: 2000 });
+ } else {
+ updatePwd({
+ newPwd: this.form.newPassword,
+ oldPwd: this.form.originalPassword
+ }).then(res => {
+ if (res.code === 200) {
+ uni.showToast({ title: '淇敼鎴愬姛', icon: 'success', duration: 2000, mask: true });
+ setTimeout(() => {
+ uni.navigateBack({ delta: 1 });
+ }, 2000)
+ }
+ })
+ }
+ }
}
}
</script>
diff --git a/minipro_standard/pages/login/login.vue b/minipro_standard/pages/login/login.vue
index 8446015..46d088a 100644
--- a/minipro_standard/pages/login/login.vue
+++ b/minipro_standard/pages/login/login.vue
@@ -49,7 +49,7 @@
let info = await getUserInfo()
if (info.code === 200) {
await that.$store.commit('setEntrance', 'WX')
- await that.$store.commit('setUserInfo', info.data)
+ await that.$store.commit('SETUSERINFO', info.data)
await that.$store.dispatch('getMenuList', 2)
uni.switchTab({
url: '/pages/workbench/workbench'
@@ -71,6 +71,7 @@
if (!this.from.password) return uni.showToast({ title: '瀵嗙爜涓嶈兘涓虹┖', icon:"error", duration: 2000 });
let res = await wxAccountLogin(this.from)
if (res.code === 200) {
+ await this.$store.commit('SETSESSION', res.data)
let user = await getUserInfo({})
if (user.code === 200) {
await this.$store.commit('SETUSERINFO', user.data)
diff --git a/minipro_standard/pages/mine/mine.vue b/minipro_standard/pages/mine/mine.vue
index 18f9c4f..19d9808 100644
--- a/minipro_standard/pages/mine/mine.vue
+++ b/minipro_standard/pages/mine/mine.vue
@@ -2,11 +2,11 @@
<view>
<div class="box">
<div class="box_info" :style="{background: 'url(' + img + ')'}">
- <image src="@/static/2@2x.png" mode="widthFix" />
+ <image :src="userInfo.avatar ? userInfo.avatar : avatar" mode="widthFix" />
<div class="box_info_box">
- <text>寮犱笁</text>
- <div class="box_info_box_x" @click="show = true">
- <text>璞嗙背绉戞妧</text>
+ <text>{{userInfo.realname}}</text>
+ <div class="box_info_box_x" @click="switchOrganization">
+ <text>{{userInfo.curComDepartment ? userInfo.curComDepartment.name : ''}}</text>
<image src="@/static/mine_ic_change@2x.png" alt="" />
</div>
</div>
@@ -22,20 +22,26 @@
</div>
</div>
</div>
- <div class="box_out"><text>閫�鍑虹櫥褰�</text></div>
+ <div class="box_out" @click="loginOut"><text>閫�鍑虹櫥褰�</text></div>
</div>
<!-- 閮ㄩ棬閫夋嫨鍣� -->
- <u-picker :show="show" :columns="columns" @confirm="confirm"></u-picker>
+ <u-picker :show="show" :columns="columns" @confirm="onConfirm" @cancel="show = false"></u-picker>
<myTabbar :index="2" />
</view>
</template>
<script>
+ import { changeCom, getDepartmentListByConditon } from '@/util/api/PersonalAPI'
import myTabbar from "@/components/myTabber.vue"
+ import { wxLoginOut } from '@/util/api'
+ import { mapState } from 'vuex'
export default {
components: {
myTabbar
},
+ computed: mapState([
+ 'userInfo'
+ ]),
data() {
return {
MENU: [
@@ -47,22 +53,61 @@
{ name: '淇敼瀵嗙爜', url: '/pages/changePassword/changePassword', icon: require('@/static/mine_ic_xiugaimima@2x.png') },
],
img: require('@/static/mine_bg@2x.png'),
+ avatar: require('@/static/2@2x.png'),
show: false,
- columns: [
- ['涓浗', '缇庡浗', '鏃ユ湰']
- ]
+ columns: []
}
},
onLoad() {
uni.hideTabBar()
},
methods: {
- jump(url) {
- uni.navigateTo({ url })
+ // 閫�鍑虹櫥褰�
+ loginOut() {
+ wxLoginOut({
+ companyUserId: this.userInfo.companyUser.id
+ }).then(res => {
+ if (res.code === 200) {
+ this.$store.commit('clearCache')
+ uni.reLaunch({
+ url: '/pages/login/login'
+ });
+ }
+ })
},
- confirm(val) {
- console.log(val)
- this.show = false
+ // 纭鍒囨崲缁勭粐
+ onConfirm(e) {
+ changeCom(e.value[0].id).then(res => {
+ if (res.code === 200) {
+ this.show = false
+ uni.showToast({ title: '鏇存柊缁勭粐鎴愬姛', icon: 'success', duration: 2000 });
+ this.$store.dispatch('getUserInfos')
+ }
+ })
+ },
+ // 鑾峰彇缁勭粐
+ switchOrganization() {
+ getDepartmentListByConditon({
+ type: 0
+ }).then(res => {
+ if (res.code === 200) {
+ this.columns = []
+ let arr = []
+ res.data.forEach((item) => {
+ let obj = {
+ text: item.name, id: item.id
+ }
+ arr.push(obj)
+ })
+ this.columns.push(arr)
+ this.show = true
+ }
+ })
+ },
+ // 璺宠浆椤甸潰
+ jump(url) {
+ if (!url) return
+ uni.navigateTo({ url })
}
}
}
diff --git a/minipro_standard/pages/personal/personal.vue b/minipro_standard/pages/personal/personal.vue
index 22f5c25..3677e11 100644
--- a/minipro_standard/pages/personal/personal.vue
+++ b/minipro_standard/pages/personal/personal.vue
@@ -1,41 +1,45 @@
<template>
<view class="info">
<view class="info_portrait">
- <image src="@/static/2@2x.png" mode="widthFix" />
+ <image :src="userInfo.avatar ? userInfo.avatar : avatar" mode="widthFix" />
<text>鐢ㄦ埛鍚�</text>
</view>
<view class="info_list">
<view class="info_list_item">
<text>鏄电О</text>
- <text>鏆傛棤鏄电О</text>
+ <text>{{userInfo.realname ? userInfo.realname : '鏆傛棤鏄电О'}}</text>
</view>
<view class="info_list_item">
<text>鎵嬫満鍙�</text>
- <text>鏆傛棤鎵嬫満鍙�</text>
+ <text>{{userInfo.companyUser.phone ? userInfo.companyUser.phone : '鏆傛棤鎵嬫満鍙�'}}</text>
</view>
<view class="info_list_item">
<text>鎵�灞為儴闂�</text>
- <text>鏆傛棤鎵�灞為儴闂�</text>
+ <text>{{userInfo.department.name ? userInfo.department.name : '鏆傛棤鎵�灞為儴闂�'}}</text>
</view>
<view class="info_list_item">
<text>宀椾綅</text>
- <text>鏆傛棤宀椾綅</text>
+ <text>{{userInfo.companyUser.positionName ? userInfo.companyUser.positionName : '鏆傛棤宀椾綅'}}</text>
</view>
<view class="info_list_item">
<text>褰撳墠缁勭粐</text>
- <text>鏆傛棤缁勭粐</text>
+ <text>{{userInfo.rootDepartment.name ? userInfo.rootDepartment.name : '鏆傛棤缁勭粐'}}</text>
</view>
</view>
</view>
</template>
<script>
+ import { mapState } from 'vuex'
export default {
data() {
return {
-
+ avatar: require('@/static/2@2x.png'),
};
- }
+ },
+ computed: mapState([
+ 'userInfo'
+ ])
}
</script>
diff --git a/minipro_standard/pages/updatePhone/updatePhone.vue b/minipro_standard/pages/updatePhone/updatePhone.vue
index b70fb79..46dd2ba 100644
--- a/minipro_standard/pages/updatePhone/updatePhone.vue
+++ b/minipro_standard/pages/updatePhone/updatePhone.vue
@@ -8,7 +8,7 @@
<view class="password_list_item">
<text>褰撳墠缁戝畾</text>
<view class="password_list_item_box">
- <input type="number" disabled v-model="form.currentPhone" maxlength="11">
+ <input type="number" disabled v-model="userInfo.companyUser.phone" maxlength="11">
</view>
</view>
<view class="password_list_item">
@@ -22,7 +22,7 @@
<view class="password_list_item_box">
<input type="text" v-model="form.verificationCode" maxlength="4" placeholder="璇疯緭鍏ユ墜鏈洪獙璇佺爜">
<p @click="getVerificationCode" v-if="!code.isOpen">鑾峰彇楠岃瘉鐮�</p>
- <p @click="getVerificationCode" v-else>{{code.num}}</p>
+ <p v-else>{{code.num}}</p>
</view>
</view>
</view>
@@ -35,15 +35,50 @@
</template>
<script>
+ import { mapState } from 'vuex'
+ import { phoneRegular } from '@/common/config.js'
export default {
data() {
return {
form: {
- currentPhone: '',
newPhone: '',
verificationCode: ''
+ },
+ code: {
+ num: 60,
+ isOpen: false,
+ timer: 0
}
};
+ },
+ computed: mapState([
+ 'userInfo'
+ ]),
+ methods: {
+ // 鑾峰彇楠岃瘉鐮�
+ getVerificationCode() {
+ this.code.isOpen = true
+ this.code.timer = setInterval(() => {
+ if (this.code.num === 0) {
+ clearInterval(this.code.timer)
+ this.code.isOpen = false
+ this.code.num = 60
+ }
+ this.code.num = this.code.num - 1
+ }, 1000)
+ },
+ // 鎻愪氦淇敼
+ submit() {
+ if (!this.form.newPhone) {
+ uni.showToast({ title: '鏂版墜鏈哄彿涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+ } else if (!phoneRegular.test(this.form.newPhone)) {
+ uni.showToast({ title: '鎵嬫満鍙蜂笉鍚堟硶', icon: 'none', duration: 2000 });
+ } else if (!this.form.verificationCode) {
+ uni.showToast({ title: '楠岃瘉鐮佷笉鑳戒负绌�', icon: 'none', duration: 2000 });
+ } else {
+ console.log('鍙互鎻愪氦')
+ }
+ }
}
}
</script>
diff --git a/minipro_standard/pages/workbench/workbench.vue b/minipro_standard/pages/workbench/workbench.vue
index 089312b..fa678a3 100644
--- a/minipro_standard/pages/workbench/workbench.vue
+++ b/minipro_standard/pages/workbench/workbench.vue
@@ -1,7 +1,7 @@
<template>
<view class="index">
<view class="menu">
- <!-- <view class="menu_list" v-for="(row, i) in Menu" :key="i">
+ <view class="menu_list" v-for="(row, i) in Menu" :key="i">
<view class="menu_list_head">
<span>{{row.label}}</span>
</view>
@@ -14,7 +14,7 @@
<view class="menu_list_zw"></view>
<view class="menu_list_zw"></view>
</div>
- </view> -->
+ </view>
</view>
<myTabbar :index="1" />
</view>
diff --git a/minipro_standard/store/index.js b/minipro_standard/store/index.js
index c5561c5..2d5b182 100644
--- a/minipro_standard/store/index.js
+++ b/minipro_standard/store/index.js
@@ -1,6 +1,10 @@
import Vue from 'vue'
-import Vuex from 'vuex'
-import { pageCount, getTreeList } from '@/util/api/index.js'
+import Vuex from 'vuex'
+import {
+ pageCount,
+ getTreeList,
+ getUserInfo
+} from '@/util/api/index.js'
Vue.use(Vuex) // vue鐨勬彃浠舵満鍒�
@@ -10,7 +14,7 @@
const token = uni.getStorageSync('token');
const userInfo = uni.getStorageSync('userInfo');
const Menu = uni.getStorageSync('MenuList');
-const session = uni.getStorageSync('session');
+const session = uni.getStorageSync('session');
// Vuex.Store 鏋勯�犲櫒閫夐」
@@ -18,18 +22,18 @@
// 涓轰簡涓嶅拰椤甸潰鎴栫粍浠剁殑data涓殑閫犳垚娣锋穯锛宻tate涓殑鍙橀噺鍓嶉潰寤鸿鍔犱笂$绗﹀彿
state: {
// 鐢ㄦ埛淇℃伅
- userInfo: userInfo || null,
+ userInfo: userInfo || null,
token: token || null,
menuButtonWidth: menuButtonWidth || '0',
statusbarHeight: statusbarHeight || '0',
navHeight: navHeight || '0',
session: session ? session : '',
// 鑿滃崟鏉冮檺
- Menu: Menu ? Menu : [],
- // 寰呭姙鏁伴噺
- upcomingNum: {
- d: 0,
- y: 0
+ Menu: Menu ? JSON.parse(Menu) : [],
+ // 寰呭姙鏁伴噺
+ upcomingNum: {
+ d: 0,
+ y: 0
},
},
mutations: {
@@ -41,31 +45,42 @@
uni.setStorageSync('statusbarHeight', val.statusbarHeight);
uni.setStorageSync('menuButtonWidth', val.menuButtonWidth);
},
- SETTOKEN(state, val) {
- state.token = val
- uni.setStorageSync('token', val);
- },
- SETUSERINFO(state, val) {
- state.userInfo = val
- uni.setStorageSync('userInfo', val);
- },
- SETNUM(state, val) {
- state.upcomingNum.d = val.d
- state.upcomingNum.y = val.y
+ SETTOKEN(state, val) {
+ state.token = val
+ uni.setStorageSync('token', val);
},
- SETMENU (state, data) {
+ SETUSERINFO(state, val) {
+ state.userInfo = val
+ uni.setStorageSync('userInfo', val);
+ },
+ SETNUM(state, val) {
+ state.upcomingNum.d = val.d
+ state.upcomingNum.y = val.y
+ },
+ SETMENU(state, data) {
state.Menu = data
uni.setStorageSync('MenuList', JSON.stringify(data));
},
- SETSESSION (state, data) {
+ SETSESSION(state, data) {
state.session = data;
uni.setStorageSync('session', data);
+ },
+ clearCache(state) {
+ state.userInfo = ''
+ state.token = ''
+ state.session = ''
+ state.Menu = []
+ state.upcomingNum.d = 0
+ state.upcomingNum.y = 0
+ uni.clearStorageSync()
}
},
actions: {
// 鍚戝悗绔幏鍙栬彍鍗曟爮鏉冮檺
- async getMenuList (content, type) {
- let res = await getTreeList({ type: type })
+ async getMenuList(content, type) {
+ let res = await getTreeList({
+ type: type
+ })
if (res.code === 200) {
content.commit('SETMENU', res.data)
}
@@ -84,14 +99,25 @@
height,
menuButtonWidth
})
- },
- async getUpcomingNum() {
- let res = await pageCount({})
- if (res.code === 200) {
- content.commit('SETNUM', { d: res.data.startNum, y: res.data.endNum })
- }
- }
+ },
+ async getUpcomingNum() {
+ let res = await pageCount({})
+ if (res.code === 200) {
+ content.commit('SETNUM', {
+ d: res.data.startNum,
+ y: res.data.endNum
+ })
+ }
+ },
+ // 鍚戝悗绔幏鍙栦釜浜轰俊鎭�
+ async getUserInfos(content) {
+ let res = await getUserInfo()
+ if (res.code === 200) {
+ content.commit('SETUSERINFO', res.data)
+ return true;
+ }
+ }
}
})
-export default store
+export default store
\ No newline at end of file
diff --git a/minipro_standard/util/api/index.js b/minipro_standard/util/api/index.js
index a41a10f..dfd23bc 100644
--- a/minipro_standard/util/api/index.js
+++ b/minipro_standard/util/api/index.js
@@ -42,4 +42,9 @@
// 寰俊灏忕▼搴忕櫥褰�
export function wxProgramLogin(params) {
return http.get('/system/wxProgramLogin', {params})
+}
+
+// 寰俊閫�鍑虹櫥褰�
+export function wxLoginOut(data) {
+ return http.post('/system/wxLoginOut', data)
}
\ No newline at end of file
diff --git a/minipro_standard/util/request/requestInterceptors.js b/minipro_standard/util/request/requestInterceptors.js
index 8f37f89..fa7a17c 100644
--- a/minipro_standard/util/request/requestInterceptors.js
+++ b/minipro_standard/util/request/requestInterceptors.js
@@ -4,8 +4,9 @@
*/
module.exports = (vm) => {
uni.$u.http.interceptors.request.use((config) => { // 鍙娇鐢╝sync await 鍋氬紓姝ユ搷浣�
- console.log(config)
- config.header['Cookie'] = 'eva-auth-token=' + vm.$store.state.session
+ if (vm.$store.state.session) {
+ config.header['Cookie'] = 'eva-auth-token=' + vm.$store.state.session
+ }
uni.showLoading({ title: '璇锋眰涓�' });
config.data = config.data || {}
return config
--
Gitblit v1.9.3