This commit is contained in:
yangzhe 2025-04-15 10:33:07 +08:00
commit 6cea5b7602
9 changed files with 261 additions and 72 deletions

View File

@ -10,6 +10,24 @@
"navigationBarTitleText": ""
}
},
{
"path": "pages/adminHome/index",
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/adminNfc/index",
"style": {
"navigationBarTitleText": "nfc写入"
}
},
{
"path": "pages/adminMy/index",
"style": {
"navigationBarTitleText": "nfc写入"
}
},
{
"path": "pages/login/login",
"style": {
@ -229,17 +247,29 @@
"selectedIconPath": "static/tab/home_cur.png",
"text": "首页"
},
// {
// "pagePath": "pages/my/index",
// "iconPath": "static/tab/my.png",
// "selectedIconPath": "static/tab/my_cur.png",
// "text": "我的"
// },
{
"pagePath": "pages/user/index",
"iconPath": "static/tab/my.png",
"selectedIconPath": "static/tab/my_cur.png",
"text": "设置"
},
{
"pagePath": "pages/adminHome/index",
"iconPath": "static/tab/my.png",
"selectedIconPath": "static/tab/my_cur.png",
"text": "首页"
},
{
"pagePath": "pages/adminNfc/index",
"iconPath": "static/tab/my.png",
"selectedIconPath": "static/tab/my_cur.png",
"text": "nfc写入"
},
{
"pagePath": "pages/adminMy/index",
"iconPath": "static/tab/my.png",
"selectedIconPath": "static/tab/my_cur.png",
"text": "我的"
}
]
},

30
pages/adminHome/index.vue Normal file
View File

@ -0,0 +1,30 @@
<template>
<view class="content">
<view>管理员首页</view>
<u-tabbar :list="vuex_tabbar"></u-tabbar>
</view>
</template>
<script>
import { loginApi } from "@/api/apiList";
export default {
data() {
return {
phone: "13800451500",
pwd: "123456",
};
},
mounted() {
uni.hideLoading(); // Loading
},
onLoad() {},
methods: {},
};
</script>
<style lang="scss" scoped>
.content {
height: 100vh; //
// background-color: skyblue;
overflow: hidden;
padding-bottom: 100rpx;
}
</style>

30
pages/adminMy/index.vue Normal file
View File

@ -0,0 +1,30 @@
<template>
<view class="content">
<view>管理员--我的</view>
<u-tabbar :list="vuex_tabbar"></u-tabbar>
</view>
</template>
<script>
import { loginApi } from "@/api/apiList";
export default {
data() {
return {
phone: "13800451500",
pwd: "123456",
};
},
mounted() {
uni.hideLoading(); // Loading
},
onLoad() {},
methods: {},
};
</script>
<style lang="scss" scoped>
.content {
height: 100vh; //
// background-color: skyblue;
overflow: hidden;
padding-bottom: 100rpx;
}
</style>

30
pages/adminNfc/index.vue Normal file
View File

@ -0,0 +1,30 @@
<template>
<view class="content">
<view>管理员--NFC</view>
<u-tabbar :list="vuex_tabbar"></u-tabbar>
</view>
</template>
<script>
import { loginApi } from "@/api/apiList";
export default {
data() {
return {
phone: "13800451500",
pwd: "123456",
};
},
mounted() {
uni.hideLoading(); // Loading
},
onLoad() {},
methods: {},
};
</script>
<style lang="scss" scoped>
.content {
height: 100vh; //
// background-color: skyblue;
overflow: hidden;
padding-bottom: 100rpx;
}
</style>

View File

@ -104,6 +104,7 @@
</view>
</view>
</view>
<u-tabbar :list="vuex_tabbar"></u-tabbar>
</view>
</template>
<script>

View File

@ -105,6 +105,7 @@
mode="range"
@change="changeDate"
></u-calendar>
<u-tabbar :list="vuex_tabbar"></u-tabbar>
</view>
</template>

View File

@ -14,10 +14,10 @@
</view>
<u-button type="primary" @click="loginFn" style="margin-top: 50rpx">登陆</u-button>
<u-button type="primary" @click="login1Fn" style="margin-top: 50rpx"
>登陆13800451500</u-button
>登陆13800451500管理员</u-button
>
<u-button type="primary" @click="login2Fn" style="margin-top: 50rpx"
>登陆18174010562</u-button
>登陆18174010562清洁工</u-button
>
</view>
</template>
@ -40,23 +40,69 @@ export default {
login1Fn() {
this.phone = "13800451500";
this.pwd = "123456";
this.loginFn();
const normalTabBar = [
{
pagePath: "/pages/index/planList",
iconPath: "/static/tab/list.png",
selectedIconPath: "/static/tab/list_cur.png",
text: "计划",
},
{
pagePath: "/pages/index/index",
iconPath: "/static/tab/home.png",
selectedIconPath: "/static/tab/home_cur.png",
text: "首页",
},
{
pagePath: "/pages/user/index",
iconPath: "/static/tab/my.png",
selectedIconPath: "/static/tab/my_cur.png",
text: "设置",
},
];
this.$u.vuex("vuex_tabbar", normalTabBar);
this.loginFn(false);
},
login2Fn() {
this.phone = "18174010562";
this.pwd = "123456";
this.loginFn();
const adminTabBar = [
{
pagePath: "/pages/adminHome/index",
iconPath: "/static/tab/list.png",
selectedIconPath: "/static/tab/list_cur.png",
text: "首页",
},
{
pagePath: "/pages/adminNfc/index",
iconPath: "/static/tab/list.png",
selectedIconPath: "/static/tab/list_cur.png",
text: "nfc写入",
},
{
pagePath: "/pages/adminMy/index",
iconPath: "/static/tab/list.png",
selectedIconPath: "/static/tab/list_cur.png",
text: "我的",
},
];
this.$u.vuex("vuex_tabbar", adminTabBar);
this.loginFn(true);
},
async loginFn() {
//
normalizePath(path) {
return path.startsWith("/") ? path : `/${path}`;
},
async loginFn(type) {
let salt = bcrypt.genSaltSync(12);
console.log("666");
let req = {
phone: this.phone,
password: bcrypt.hashSync(this.pwd, salt),
};
console.log(req, "req--");
const res = await loginApi(req);
console.log(res, "res--");
if (!res.succeed) {
uni.showToast({
title: res.error || "登录失败",
@ -66,16 +112,16 @@ export default {
}
let token = res.data;
uni.setStorageSync("token", "Bearer " + token);
uni.switchTab({
url: "/pages/index/index",
success() {
console.log("跳转成功");
window.initFn = null; //
},
fail(err) {
console.error("跳转失败", err);
},
});
let userRole = "admin";
if (type) {
uni.switchTab({
url: `/pages/index/planList`,
});
} else {
uni.switchTab({
url: `/pages/adminHome/index`,
});
}
},
},
};

View File

@ -59,6 +59,7 @@
</view>
</view>
</view>
<u-tabbar :list="vuex_tabbar"></u-tabbar>
</view>
</template>

View File

@ -4,61 +4,81 @@ Vue.use(Vuex)
let lifeData = {};
try{
// 尝试获取本地是否存在lifeData变量第一次启动APP时是不存在的
lifeData = uni.getStorageSync('lifeData');
}catch(e){
try {
// 尝试获取本地是否存在lifeData变量第一次启动APP时是不存在的
lifeData = uni.getStorageSync('lifeData');
} catch (e) {
}
// 需要永久存储且下次APP启动需要取出的在state中的变量名
let saveStateKeys = ['vuex_user', 'vuex_token'];
let saveStateKeys = ['vuex_user', 'vuex_token', 'vuex_tabbar'];
// 保存变量到本地存储中
const saveLifeData = function(key, value){
// 判断变量名是否在需要存储的数组中
if(saveStateKeys.indexOf(key) != -1) {
// 获取本地存储的lifeData对象将变量添加到对象中
let tmp = uni.getStorageSync('lifeData');
// 第一次打开APP不存在lifeData变量故放一个{}空对象
tmp = tmp ? tmp : {};
tmp[key] = value;
// 执行这一步后所有需要存储的变量都挂载在本地的lifeData对象中
uni.setStorageSync('lifeData', tmp);
}
const saveLifeData = function (key, value) {
// 判断变量名是否在需要存储的数组中
if (saveStateKeys.indexOf(key) != -1) {
// 获取本地存储的lifeData对象将变量添加到对象中
let tmp = uni.getStorageSync('lifeData');
// 第一次打开APP不存在lifeData变量故放一个{}空对象
tmp = tmp ? tmp : {};
tmp[key] = value;
// 执行这一步后所有需要存储的变量都挂载在本地的lifeData对象中
uni.setStorageSync('lifeData', tmp);
}
}
const store = new Vuex.Store({
// 下面这些值仅为示例,使用过程中请删除
state: {
// 如果上面从本地获取的lifeData对象下有对应的属性就赋值给state中对应的变量
// 加上vuex_前缀是防止变量名冲突也让人一目了然
vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '明月'},
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
// 如果vuex_version无需保存到本地永久存储无需lifeData.vuex_version方式
vuex_version: '1.0.1',
},
mutations: {
$uStore(state, payload) {
// 判断是否多层级调用state中为对象存在的情况诸如user.info.score = 1
let nameArr = payload.name.split('.');
let saveKey = '';
let len = nameArr.length;
if(nameArr.length >= 2) {
let obj = state[nameArr[0]];
for(let i = 1; i < len - 1; i ++) {
obj = obj[nameArr[i]];
}
obj[nameArr[len - 1]] = payload.value;
saveKey = nameArr[0];
} else {
// 单层级变量在state就是一个普通变量的情况
state[payload.name] = payload.value;
saveKey = payload.name;
}
// 保存变量到本地,见顶部函数定义
saveLifeData(saveKey, state[saveKey])
}
}
// 下面这些值仅为示例,使用过程中请删除
state: {
// 如果上面从本地获取的lifeData对象下有对应的属性就赋值给state中对应的变量
// 加上vuex_前缀是防止变量名冲突也让人一目了然
vuex_user: lifeData.vuex_user ? lifeData.vuex_user : { name: '明月' },
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
vuex_tabbar: lifeData.vuex_tabbar ? lifeData.vuex_tabbar : [
// {
// "pagePath": "/pages/adminHome/index",
// "iconPath": "/static/tab/my.png",
// "selectedIconPath": "/static/tab/my_cur.png",
// "text": "首页"
// },
// {
// "pagePath": "/pages/adminNfc/index",
// "iconPath": "/static/tab/my.png",
// "selectedIconPath": "/static/tab/my_cur.png",
// "text": "nfc写入"
// },
// {
// "pagePath": "/pages/adminMy/index",
// "iconPath": "/static/tab/my.png",
// "selectedIconPath": "/static/tab/my_cur.png",
// "text": "我的"
// }
],
// 如果vuex_version无需保存到本地永久存储无需lifeData.vuex_version方式
vuex_version: '1.0.1',
},
mutations: {
$uStore(state, payload) {
// 判断是否多层级调用state中为对象存在的情况诸如user.info.score = 1
let nameArr = payload.name.split('.');
let saveKey = '';
let len = nameArr.length;
if (nameArr.length >= 2) {
let obj = state[nameArr[0]];
for (let i = 1; i < len - 1; i++) {
obj = obj[nameArr[i]];
}
obj[nameArr[len - 1]] = payload.value;
saveKey = nameArr[0];
} else {
// 单层级变量在state就是一个普通变量的情况
state[payload.name] = payload.value;
saveKey = payload.name;
}
// 保存变量到本地,见顶部函数定义
saveLifeData(saveKey, state[saveKey])
}
}
})
export default store