Compare commits

..

No commits in common. 'main' and 'lvtianfang' have entirely different histories.

@ -1,152 +1,34 @@
<script>
import config from "./config";
import store from "@/store";
import { getToken, setToken, removeToken } from "@/utils/auth";
import { getSqByaccesstoken, getUserinfo } from "@/api/jn/login.js";
import permision from "@/utils/permission.js";
export default {
onLaunch: function () {
console.log("初始化进入");
this.initApp();
//#ifdef APP-PLUS
this.requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION");
this.requestAndroidPermission("android.permission.CAMERA");
this.requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE");
this.requestAndroidPermission("android.permission.RECORD_AUDIO");
//#endif
removeToken();
},
onShow() {
console.log("onShow");
},
methods: {
//
initApp() {
//
this.initConfig();
//
// // #ifdef APP || H5
this.checkLogin();
// //#endif
},
initConfig() {
this.globalData.config = config;
},
checkLogin() {
const launchOptions = uni.getLaunchOptionsSync();
const { query } = launchOptions;
console.log(query, "query");
// console.log(Object.keys(query).length,"query.lengh");
console.log(getToken(), "getToken()");
if (!getToken()) {
if (Object.keys(query).length !== 0) {
console.log("获取query");
// let params = this.getRequestParams();
// console.log(params,"params");
// if (location.href.includes("code=")) {
const code = query.code;
const token = query.token;
uni.setStorageSync("token", token);
// console.log(code,"code");
// console.log(token,"token");
getSqByaccesstoken({
code: code,
})
.then((res) => {
// console.log("accessToken");
uni.setStorageSync("accessToken", res.data.accessToken);
return getUserinfo({
accessToken: res.data.accessToken,
});
})
.then((el) => {
this.$tab.switchTab("/pages/index");
uni.setStorageSync("userInfo", el.data);
setToken(el.data.token);
// location.reload();
console.log("用户信息", el);
});
// }
} else {
// // #ifdef APP
console.log("进入APP判断");
// this.$tab.reLaunch("/pages/myLogin");
uni.reLaunch({
url: "/pages/myLogin",
});
// url
// plus.runtime.openURL( "https://t-jn-development-manager.jsszkd.com/login?clientId=641775453324", this.openErr );
// // #endif
// // #ifdef H5
// location.href = `https://t-jn-development-manager.jsszkd.com/login?clientId=641775453324`
// // #endif
console.log("Before navigateTo or reLaunch");
// this.$tab.reLaunch("/pages/myLogin");
// uni.navigateTo({
// url:'https://t-jn-development-manager.jsszkd.com/login?clientId=641775453324'
// })
}
} else {
this.$tab.reLaunch("/pages/index");
}
},
openErr(err) {
console.log(err, "报错信息");
},
//
getRequestParams() {
let url = location.href;
let requestParams = {};
if (url.indexOf("?") !== -1) {
let str = url.substr(url.indexOf("?") + 1); //?
// console.log(str, '?');
let strs = str.split("&"); //&
// console.log(strs, '&');
for (let i = 0; i < strs.length; i++) {
requestParams[strs[i].split("=")[0]] = decodeURI(
strs[i].split("=")[1]
);
// '=''='
}
}
// console.log(requestParams, '');
return requestParams;
},
async requestAndroidPermission(permisionID) {
var result = await permision.requestAndroidPermission(permisionID);
var strStatus;
if (result == 1) {
strStatus = "已获得授权";
} else if (result == 0) {
strStatus = "未获得授权";
uni.showModal({
content: "请在设置中打卡相机、麦克风、相册、定位权限",
showCancel: false,
});
console.warn("权限:" + permisionID + strStatus);
// App
this.gotoAppPermissionSetting();
} else {
strStatus = "被永久拒绝权限";
uni.showModal({
content: "请在设置中打卡相机、麦克风、相册、定位权限",
showCancel: false,
});
console.warn("权限:" + permisionID + strStatus);
// App
this.gotoAppPermissionSetting();
}
},
gotoAppPermissionSetting: function () {
permision.gotoAppPermissionSetting();
},
},
};
</script>
<style lang="scss">
/* 注意要写在第一行同时给style标签加入lang="scss"属性 */
@import "@/uni_modules/uview-ui/index.scss";
@import "@/static/scss/index.scss";
<script>
import config from './config'
import store from '@/store'
import { getToken } from '@/utils/auth'
export default {
onLaunch: function() {
this.initApp()
},
methods: {
//
initApp() {
//
this.initConfig()
//
//#ifdef H5
this.checkLogin()
//#endif
},
initConfig() {
this.globalData.config = config
},
checkLogin() {
if (!getToken()) {
this.$tab.reLaunch('/pages/login')
}
}
}
}
</script>
<style lang="scss">
@import '@/static/scss/index.scss'
</style>

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

@ -1,44 +0,0 @@
import request from "@/utils/request";
// 查询活动申请列表
export function listActivity(query) {
return request({
url: "/jn/activity/list",
method: "get",
params: query,
});
}
// 查询活动申请详细
export function getActivity(id) {
return request({
url: "/jn/activity/" + id,
method: "get",
});
}
// 新增活动申请
export function addActivity(data) {
return request({
url: "/jn/activity",
method: "post",
data: data,
});
}
// 修改活动申请
export function updateActivity(data) {
return request({
url: "/jn/activity",
method: "put",
data: data,
});
}
// 删除活动申请
export function delActivity(id) {
return request({
url: "/jn/activity/" + id,
method: "delete",
});
}

@ -1,25 +0,0 @@
import request from "@/utils/request";
// APP打卡
export function clock(data) {
return request({
url: "/jn/record/clock",
method: "post",
data,
});
}
// 获取打卡状态
export function getStatus(data){
return request({
url:"/jn/record/status",
method:"post",
data
})
}
// 判断用户位置
export function judgmentPosition(data){
return request({
url:"/jn/record/judgmentPosition",
method:"post",
data
})
}

@ -1,44 +0,0 @@
import request from "@/utils/request";
// 查询活动申请列表
export function listLevel(query) {
return request({
url: "/jn/level/list",
method: "get",
params: query,
});
}
// 查询活动申请详细
export function getLevel(id) {
return request({
url: "/jn/level/" + id,
method: "get",
});
}
// 新增活动申请
export function addLevel(data) {
return request({
url: "/jn/level",
method: "post",
data: data,
});
}
// 修改活动申请
export function updateLevel(data) {
return request({
url: "/jn/level",
method: "put",
data: data,
});
}
// 删除活动申请
export function delLevel(id) {
return request({
url: "/jn/level/" + id,
method: "delete",
});
}

@ -1,38 +0,0 @@
import request from "@/utils/request";
// getSqByaccesstoken
export function getSqByaccesstoken(params) {
return request({
url: "/jn/single/getSqByaccesstoken",
method: "get",
params,
});
}
export function getCode(params){
return request({
url:"/jn/single/getSq",
method: "get",
params
})
}
export function getUserinfo(params){
return request({
url:"/jn/single/getUserByaccessToken",
method: "get",
params,
// headers:{
// isToken:false,
// }
})
}
// 获取用户的考勤点
export function getUserIdByPoint(params){
return request({
url:"/jn/single/getUserByaccessToken",
method: "get",
params,
})
}

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询商家端消息中心列表
export function listNews(query) {
return request({
url: '/jn/news/list',
method: 'get',
params: query
})
}
// 查询商家端消息中心详细
export function getNews(id) {
return request({
url: '/jn/news/' + id,
method: 'get'
})
}
// 新增商家端消息中心
export function addNews(data) {
return request({
url: '/jn/news',
method: 'post',
data: data
})
}
// 修改商家端消息中心
export function updateNews(data) {
return request({
url: '/jn/news',
method: 'put',
data: data
})
}
// 删除商家端消息中心
export function delNews(id) {
return request({
url: '/jn/news/' + id,
method: 'delete'
})
}

@ -1,41 +0,0 @@
import request from '@/utils/request'
//分页条件查询脱岗违停统计表
export function tgwtList(params) {
return request({
url: "/jn/bTgwttj",
method:'get',
params
})
}
//新增脱岗违停统计表
export function tgwtAdd(data) {
return request({
url: `/jn/bTgwttj`,
method:'post',
data
})
}
//脱岗违停审批
export function tgwtSp(data) {
return request({
url: `/jn/bTgwttj/approval`,
method:'post',
data
})
}
//脱岗违停发起申诉
export function tgwtSs(data) {
return request({
url: `/jn/bTgwttj/complaint`,
method:'post',
data
})
}
//脱岗违停查询单条
export function tgwtGet(id) {
return request({
url: `/jn/bTgwttj/${id}`,
method:'get',
})
}

@ -1,23 +1,23 @@
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid) {
const data = {
username,
password,
code,
uuid
}
return request({
'url': '/login',
headers: {
isToken: false
},
'method': 'post',
'data': data
})
}
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid) {
const data = {
username,
password,
code,
uuid
}
return request({
'url': '/login',
headers: {
isToken: false
},
'method': 'post',
'data': data
})
}
// 注册方法
export function register(data) {
return request({
@ -28,32 +28,32 @@ export function register(data) {
method: 'post',
data: data
})
}
// 获取用户详细信息
export function getInfo() {
return request({
'url': '/getInfo',
'method': 'get'
})
}
// 退出方法
export function logout() {
return request({
'url': '/logout',
'method': 'post'
})
}
// 获取验证码
export function getCodeImg() {
return request({
'url': '/captchaImage',
headers: {
isToken: false
},
method: 'get',
timeout: 20000
})
}
// 获取用户详细信息
export function getInfo() {
return request({
'url': '/getInfo',
'method': 'get'
})
}
// 退出方法
export function logout() {
return request({
'url': '/logout',
'method': 'post'
})
}
// 获取验证码
export function getCodeImg() {
return request({
'url': '/captchaImage',
headers: {
isToken: false
},
method: 'get',
timeout: 20000
})
}

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

@ -1,49 +0,0 @@
<template>
<view class="fixedButtom view-global">
<u-button :text="title" :color="color" @click="clickBtn" :customStyle="{
height:'88rpx',
borderRadius: '16rpx'
}"></u-button>
</view>
</template>
<script>
export default {
props: {
color: {
type: String,
default: 'linear-gradient(90deg, #3976F1 0%, #3CA0F6 100%)'
},
title: {
type: String,
default: '申请复核'
}
},
name: "fixedButtom",
data() {
return {
};
},
methods: {
clickBtn() {
this.$emit('click')
}
},
}
</script>
<style lang="scss">
.fixedButtom {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background: #fff;
padding: 20rpx 20rpx calc(20rpx + constant(safe-area-inset-bottom));
/* 兼容 iOS < 11.2 */
padding: 20rpx 20rpx calc(20rpx + env(safe-area-inset-bottom));
/* 兼容 iOS >= 11.2 */
border-top: 1px solid #DCE3EC;
}
</style>

@ -1,13 +1,11 @@
// 应用全局配置
module.exports = {
// baseUrl: "http://39.101.188.84:9037",
TEST_LOGIN:"https://t-jn-development-manager.jsszkd.com/login", // ?clientId=
baseUrl: "https://t-jn-bjh-admin-server.jsszkd.com",
module.exports = {
baseUrl: 'https://vue.ruoyi.vip/prod-api',
// baseUrl: 'http://localhost:8080',
// 应用信息
appInfo: {
// 应用名称
name: "JiangNingUmale-App",
name: "ruoyi-app",
// 应用版本
version: "1.1.0",
// 应用logo
@ -15,15 +13,14 @@ module.exports = {
// 官方网站
site_url: "http://ruoyi.vip",
// 政策协议
agreements: [
{
agreements: [{
title: "隐私政策",
url: "https://ruoyi.vip/protocol.html",
url: "https://ruoyi.vip/protocol.html"
},
{
title: "用户服务协议",
url: "https://ruoyi.vip/protocol.html",
},
],
},
};
url: "https://ruoyi.vip/protocol.html"
}
]
}
}

@ -1,30 +1,17 @@
import Vue from 'vue'
import App from './App'
import store from './store' // store
import plugins from './plugins' // plugins
// import './permission' // permission
import uView from '@/uni_modules/uview-ui'
Vue.use(uView)
// import Videojs from 'video.js'
// import 'video.js/dist/video-js.css'
// Vue.prototype.$video = Videojs
import 'mui-player/dist/mui-player.min.css'
import fixedButtom from '@/components/fixedButtom/fixedButtom.vue'
Vue.component('fixedButtom', fixedButtom)
Vue.use(plugins)
Vue.config.productionTip = false
Vue.prototype.$store = store
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
import Vue from 'vue'
import App from './App'
import store from './store' // store
import plugins from './plugins' // plugins
import './permission' // permission
Vue.use(plugins)
Vue.config.productionTip = false
Vue.prototype.$store = store
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()

@ -1,6 +1,6 @@
{
"name" : "江宁城管app",
"appid" : "__UNI__EE8CBC2",
"name" : "若依移动端",
"appid" : "__UNI__25A9D80",
"description" : "",
"versionName" : "1.1.0",
"versionCode" : "100",
@ -8,82 +8,40 @@
"app-plus" : {
"usingComponents" : true,
"nvueCompiler" : "uni-app",
"compatible" : {
"ignoreVersion" : true //trueHBuilderX1.9.0
},
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
"statusbar" : {
"immersed" : false
},
"modules" : {
"Geolocation" : {}
},
"modules" : {},
"distribute" : {
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
"ios" : {
"dSYMs" : false
},
"sdkConfigs" : {
"ad" : {},
"maps" : {
"amap" : {
"name" : "",
"appkey_ios" : "23a2faa38e7407639db125c7f2cbc571",
"appkey_android" : ""
}
},
"geolocation" : {
"amap" : {
"name" : "amapIryswz1c",
"__platform__" : [ "ios", "android" ],
"appkey_ios" : "19574081fa49df82bdabebfe2146c118",
"appkey_android" : "23a2faa38e7407639db125c7f2cbc571"
}
}
},
"icons" : {
"android" : {
"hdpi" : "static/images/umale/logo2.png",
"xhdpi" : "static/images/umale/logo2.png",
"xxhdpi" : "static/images/umale/logo2.png",
"xxxhdpi" : "static/images/umale/logo2.png"
}
}
"ios" : {},
"sdkConfigs" : {}
}
},
"quickapp" : {},
"mp-weixin" : {
"appid" : "wxceab52cfb9a87f72",
"appid" : "wxccd7e2a0911b3397",
"setting" : {
"urlCheck" : false,
"es6" : false,
@ -93,8 +51,7 @@
"optimization" : {
"subPackages" : true
},
"usingComponents" : true,
"permission" : {}
"usingComponents" : true
},
"vueVersion" : "2",
"h5" : {
@ -107,13 +64,6 @@
"router" : {
"mode" : "hash",
"base" : "./"
},
"sdkConfigs" : {
"maps" : {
"qqmap" : {
"key" : "TYBBZ-A2AKV-MLZPW-UFNQI-HKNVE-BEFZH"
}
}
}
}
}

56
package-lock.json generated

@ -1,56 +0,0 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@turf/boolean-point-in-polygon": {
"version": "6.5.0",
"resolved": "https://registry.npmmirror.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz",
"integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==",
"requires": {
"@turf/helpers": "^6.5.0",
"@turf/invariant": "^6.5.0"
}
},
"@turf/circle": {
"version": "6.5.0",
"resolved": "https://registry.npmmirror.com/@turf/circle/-/circle-6.5.0.tgz",
"integrity": "sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==",
"requires": {
"@turf/destination": "^6.5.0",
"@turf/helpers": "^6.5.0"
}
},
"@turf/destination": {
"version": "6.5.0",
"resolved": "https://registry.npmmirror.com/@turf/destination/-/destination-6.5.0.tgz",
"integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==",
"requires": {
"@turf/helpers": "^6.5.0",
"@turf/invariant": "^6.5.0"
}
},
"@turf/helpers": {
"version": "6.5.0",
"resolved": "https://registry.npmmirror.com/@turf/helpers/-/helpers-6.5.0.tgz",
"integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="
},
"@turf/invariant": {
"version": "6.5.0",
"resolved": "https://registry.npmmirror.com/@turf/invariant/-/invariant-6.5.0.tgz",
"integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==",
"requires": {
"@turf/helpers": "^6.5.0"
}
},
"hls.js": {
"version": "1.4.14",
"resolved": "https://registry.npmmirror.com/hls.js/-/hls.js-1.4.14.tgz",
"integrity": "sha512-UppQjyvPVclg+6t2KY/Rv03h0+bA5u6zwqVoz4LAC/L0fgYmIaCD7ZCrwe8WI1Gv01be1XL0QFsRbSdIHV/Wbw=="
},
"mui-player": {
"version": "1.8.1",
"resolved": "https://registry.npmmirror.com/mui-player/-/mui-player-1.8.1.tgz",
"integrity": "sha512-5o0SnSyVImxT9XUO6jCMmcJ+ZyAEJeFvdeZDHHPNS/LdwhzWX4yQPNgx8nzRbcUJ749xpqEQ6uVddiexLyvvqg=="
}
}
}

@ -1,347 +1,102 @@
{
"pages": [
// {
// "path": "pages/login",
// "style": {
// "navigationBarTitleText": "首页",
// "navigationStyle": "custom"
// }
// },
// {
// "path": "pages/register",
// "style": {
// "navigationBarTitleText": "注册"
// }
// },
{
"path": "pages/index",
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/msg/index",
"style": {
"navigationBarTitleText": "消息列表",
"navigationStyle": "custom"
}
},
{
"path": "pages/msg/index2",
"style": {
"navigationBarTitleText": "消息列表",
"navigationStyle": "custom"
}
},
{
"path": "pages/mine/index",
"style": {
"navigationBarTitleText": "我的",
"navigationStyle": "custom"
}
},
{
"path": "pages/mine/avatar/index",
"style": {
"navigationBarTitleText": "修改头像"
}
},
{
"path": "pages/mine/info/index",
"style": {
"navigationBarTitleText": "个人信息"
}
},
{
"path": "pages/mine/info/edit",
"style": {
"navigationBarTitleText": "编辑资料"
}
},
{
"path": "pages/mine/pwd/index",
"style": {
"navigationBarTitleText": "修改密码"
}
},
{
"path": "pages/mine/setting/index",
"style": {
"navigationBarTitleText": "应用设置"
}
},
{
"path": "pages/mine/help/index",
"style": {
"navigationBarTitleText": "常见问题"
}
},
{
"path": "pages/mine/about/index",
"style": {
"navigationBarTitleText": "关于我们"
}
},
{
"path": "pages/common/webview/index",
"style": {
"navigationBarTitleText": "浏览网页"
}
},
{
"path": "pages/common/textview/index",
"style": {
"navigationBarTitleText": "浏览文本"
}
},
{
"path": "pages/myLogin",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}
],
"subPackages": [
{
"root": "subcontract/work/",
"pages": [
{
"path": "event/index",
"style": {
"navigationBarTitleText": "事件管理",
"navigationStyle": "custom"
}
},
{
"path": "event/add",
"style": {
"navigationBarTitleText": "事件上报",
"navigationStyle": "custom"
}
},
{
"path": "event/deal",
"style": {
"navigationBarTitleText": "处理结果上报",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/deal",
"style": {
"navigationBarTitleText": "处理结果上报",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/exam",
"style": {
"navigationBarTitleText": "任务审核",
"navigationStyle": "custom"
}
},
{
"path": "attence/index",
"style": {
"navigationBarTitleText": "考勤打卡",
"navigationStyle": "custom"
}
},
{
"path": "attence/leaveappli",
"style": {
"navigationBarTitleText": "请假申请",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/index",
"style": {
"navigationBarTitleText": "任务管理",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/info",
"style": {
"navigationBarTitleText": "任务详情",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/infoexam",
"style": {
"navigationBarTitleText": "任务详情",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/back",
"style": {
"navigationBarTitleText": "任务详情",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/ledger",
"style": {
"navigationBarTitleText": "任务台账",
"navigationStyle": "custom"
}
},
{
"path": "taskmanage/create",
"style": {
"navigationBarTitleText": "任务创建",
"navigationStyle": "custom"
}
}
]
},
{
"root": "subcontract/mine/",
"pages": [
{
"path": "event/index"
},
{
"path": "ChangePassword/ChangePassword",
"style": {
"navigationBarTitleText": "修改密码",
"enablePullDownRefresh": false
}
},
{
"path": "ChangeProfile/ChangeProfile",
"style": {
"navigationBarTitleText": "修改头像",
"enablePullDownRefresh": false
}
}
]
},
{
"root": "subPublic",
"pages": [
{
"path": "Store/Store",
"style": {
"navigationBarTitleText": "店铺详细信息",
"enablePullDownRefresh": false
}
},
{
"path": "waterEducation/index",
"style": {
"navigationBarTitleText": "水生态治理科教",
"enablePullDownRefresh": false
}
}
]
},
{
"root": "subEnterprise",
"pages": [
{
"path": "activity/activity",
"style": {
"navigationBarTitleText": "店铺活动管理",
"enablePullDownRefresh": false
}
},
{
"path": "activity/add",
"style": {
"navigationBarTitleText": "新增店铺活动",
"enablePullDownRefresh": false
}
},
{
"path": "threeGuarantees/index",
"style": {
"navigationBarTitleText": "三包等级凭证",
"enablePullDownRefresh": false
}
},
{
"path": "WorkOrder/WorkOrder",
"style": {
"navigationBarTitleText": "整改工单管理",
"enablePullDownRefresh": false
}
},
{
"path": "WorkOrder/handle",
"style": {
"navigationBarTitleText": "整改工单处理",
"enablePullDownRefresh": false
}
},
{
"path": "prequalification/index",
"style": {
"navigationBarTitleText": "店铺店招预审",
"enablePullDownRefresh": false
}
},
{
"path": "prequalification/add",
"style": {
"navigationBarTitleText": "店铺店招预审填报",
"enablePullDownRefresh": false
}
},
{
"path": "msg/index",
"style": {
"navigationBarTitleText": "消息中心",
"enablePullDownRefresh": false
}
}
]
}
],
"preloadRule": {
"pages/index": {
"network": "all",
"packages": ["subcontract/work/"]
},
"pages/mine/index": {
"network": "all",
"packages": ["subcontract/mine/"]
}
},
"tabBar": {
"color": "#000000",
"selectedColor": "#000000",
"borderStyle": "white",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/index",
"iconPath": "static/images/tabbar/home.png",
"selectedIconPath": "static/images/tabbar/home_.png",
"text": "首页"
},
{
"pagePath": "pages/msg/index2",
"iconPath": "static/images/tabbar/work.png",
"selectedIconPath": "static/images/tabbar/work_.png",
"text": "消息"
},
{
"pagePath": "pages/mine/index",
"iconPath": "static/images/tabbar/mine.png",
"selectedIconPath": "static/images/tabbar/mine_.png",
"text": "我的"
}
]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "RuoYi",
"navigationBarBackgroundColor": "#FFFFFF",
"navigationStyle": "custom"
}
{
"pages": [{
"path": "pages/login",
"style": {
"navigationBarTitleText": "登录"
}
}, {
"path": "pages/register",
"style": {
"navigationBarTitleText": "注册"
}
}, {
"path": "pages/index",
"style": {
"navigationBarTitleText": "若依移动端框架",
"navigationStyle": "custom"
}
}, {
"path": "pages/work/index",
"style": {
"navigationBarTitleText": "工作台"
}
}, {
"path": "pages/mine/index",
"style": {
"navigationBarTitleText": "我的"
}
}, {
"path": "pages/mine/avatar/index",
"style": {
"navigationBarTitleText": "修改头像"
}
}, {
"path": "pages/mine/info/index",
"style": {
"navigationBarTitleText": "个人信息"
}
}, {
"path": "pages/mine/info/edit",
"style": {
"navigationBarTitleText": "编辑资料"
}
}, {
"path": "pages/mine/pwd/index",
"style": {
"navigationBarTitleText": "修改密码"
}
}, {
"path": "pages/mine/setting/index",
"style": {
"navigationBarTitleText": "应用设置"
}
}, {
"path": "pages/mine/help/index",
"style": {
"navigationBarTitleText": "常见问题"
}
}, {
"path": "pages/mine/about/index",
"style": {
"navigationBarTitleText": "关于我们"
}
}, {
"path": "pages/common/webview/index",
"style": {
"navigationBarTitleText": "浏览网页"
}
}, {
"path": "pages/common/textview/index",
"style": {
"navigationBarTitleText": "浏览文本"
}
}],
"tabBar": {
"color": "#000000",
"selectedColor": "#000000",
"borderStyle": "white",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/index",
"iconPath": "static/images/tabbar/home.png",
"selectedIconPath": "static/images/tabbar/home_.png",
"text": "首页"
}, {
"pagePath": "pages/work/index",
"iconPath": "static/images/tabbar/work.png",
"selectedIconPath": "static/images/tabbar/work_.png",
"text": "工作台"
}, {
"pagePath": "pages/mine/index",
"iconPath": "static/images/tabbar/mine.png",
"selectedIconPath": "static/images/tabbar/mine_.png",
"text": "我的"
}
]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "RuoYi",
"navigationBarBackgroundColor": "#FFFFFF"
}
}

@ -1,43 +1,43 @@
<template>
<view>
<uni-card class="view-title" :title="title">
<text class="uni-body view-content">{{ content }}</text>
</uni-card>
</view>
</template>
<script>
export default {
data() {
return {
title: '',
content: ''
}
},
onLoad(options) {
this.title = options.title
this.content = options.content
uni.setNavigationBarTitle({
title: options.title
})
}
}
</script>
<style scoped>
page {
background-color: #ffffff;
}
.view-title {
font-weight: bold;
}
.view-content {
font-size: 26rpx;
padding: 12px 5px 0;
color: #333;
line-height: 24px;
font-weight: normal;
}
<template>
<view>
<uni-card class="view-title" :title="title">
<text class="uni-body view-content">{{ content }}</text>
</uni-card>
</view>
</template>
<script>
export default {
data() {
return {
title: '',
content: ''
}
},
onLoad(options) {
this.title = options.title
this.content = options.content
uni.setNavigationBarTitle({
title: options.title
})
}
}
</script>
<style scoped>
page {
background-color: #ffffff;
}
.view-title {
font-weight: bold;
}
.view-content {
font-size: 26rpx;
padding: 12px 5px 0;
color: #333;
line-height: 24px;
font-weight: normal;
}
</style>

@ -1,34 +1,34 @@
<template>
<view v-if="params.url">
<web-view :webview-styles="webviewStyles" :src="`${params.url}`"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
params: {},
webviewStyles: {
progress: {
color: "#FF3333"
}
}
}
},
props: {
src: {
type: [String],
default: null
}
},
onLoad(event) {
this.params = event
if (event.title) {
uni.setNavigationBarTitle({
title: event.title
})
}
}
}
<template>
<view v-if="params.url">
<web-view :webview-styles="webviewStyles" :src="`${params.url}`"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
params: {},
webviewStyles: {
progress: {
color: "#FF3333"
}
}
}
},
props: {
src: {
type: [String],
default: null
}
},
onLoad(event) {
this.params = event
if (event.title) {
uni.setNavigationBarTitle({
title: event.title
})
}
}
}
</script>

@ -1,332 +1,43 @@
<!--
* @Author: 张涛
* @Date: 2023-11-06 14:04:41
* @LastEditors: laozt 2721205210@qq.com
* @LastEditTime: 2024-01-18 09:58:33
* @FilePath: \JiangNingUmale-App\pages\index.vue
-->
<template>
<view class="page">
<u-navbar
title="首页"
:placeholder="true"
:isBack="false"
:is-fixed="false"
/>
<view class="welcome">
<text class="title">欢迎登录城市精细化治理系统</text>
<text class="name">{{ userInfo ? userInfo.account : "" }}</text>
<view class="date-weather">
<text class="date"> {{ time ? time : "" }} </text>
<text class="weather"> 天气晴 </text>
</view>
</view>
<view class="main-content">
<view class="work-center">
<view
v-for="(item, index) in grids"
:key="index"
@click="goPath(item)"
style="position: relative"
>
<image :src="item.gridImg" mode="" class="grid-img"></image>
<text class="grid-name" :style="{ color: item.color }"
>{{ item.name }}
</text>
</view>
</view>
</view>
</view>
</template>
<script>
// import booleanPointInPolygon from '@turf/boolean-point-in-polygon';
// import { point, feature } from '@turf/helpers';
// import circle from '@turf/circle';
import { getUserIdByPoint } from "@/api/jn/login.js";
import { clock, getStatus, judgmentPosition } from "@/api/jn/clock.js";
import { listNews } from "@/api/jn/news";
// import chujie from "@/plugins/mapJson/chujie.json"
export default {
data() {
return {
grids: [
{
name: "水生态治理科教(公众)",
gridImg: "/static/images/umale/gr8.png",
color: "#0D306B",
subcolor: "",
disable: false,
toPage: "/subPublic/waterEducation/index",
},
{
name: "活动管理(商家)",
gridImg: "/static/images/umale/gr8.png",
color: "#0D306B",
subcolor: "",
disable: false,
toPage: "/subEnterprise/activity/activity",
},
{
name: "消息中心(商家)",
gridImg: "/static/images/umale/gr8.png",
color: "#0D306B",
subcolor: "",
disable: false,
toPage: "/subEnterprise/msg/index",
},
{
name: "门前三包服务(商家)",
gridImg: "/static/images/umale/gr8.png",
color: "#0D306B",
subcolor: "",
disable: false,
toPage: "/subEnterprise/threeGuarantees/index",
},
{
name: "店铺店招预审(商家)",
gridImg: "/static/images/umale/gr8.png",
color: "#0D306B",
subcolor: "",
disable: false,
toPage: "/subEnterprise/prequalification/index",
},
],
userInfo: null,
time: null,
lat: null,
lng: null,
circleLat: null,
circleLng: null,
circleClock: null,
times: null,
queryParams: {
pageNum: 1,
pageSize: 10,
title: "",
status: 0,
},
};
},
// ...
onBackPress(options) {
console.log("返回", options);
if (options.from == "backbutton" || options.from == "navigateBack") {
//
uni.showModal({
title: "退出应用",
content: "您确定要退出应用吗?",
success: function (res) {
if (res.confirm) {
//
uni.exit();
} else if (res.cancel) {
//
}
},
});
return true; //
}
return false;
},
onLoad() {
// this.getCircle();
this.getUserLocation();
this.times = setInterval(() => {
console.log("获取用户位置信息");
this.getUserLocation();
}, 10000);
},
mounted() {
this.userInfo = uni.getStorageSync("userInfo");
console.log(JSON.stringify(this.userInfo), "用户信息");
const currentDate = new Date();
const year = currentDate.getFullYear(); //
const month = currentDate.getMonth() + 1; // 01
const day = currentDate.getDate(); //
this.time = year + "年" + month + "月" + day + "日";
},
onShow() {
this.getNumber();
},
methods: {
getNumber() {
listNews({ status: 0 }).then((res) => {
if (res.code == 200) {
this.$nextTick(() => {
uni.setTabBarBadge({
//
index: 1, //tabbar
text: res.total + "", //
});
});
}
});
},
goPath(item) {
this.$tab.navigateTo(item.toPage);
},
getUserLocation() {
let that = this;
uni.getLocation({
type: "gcj02", //apigcj02
geocode: true,
success: function (res) {
that.$modal.closeLoading();
that.lat = res.latitude;
that.lng = res.longitude;
judgmentPosition({
userId: that.userInfo.userId,
latitude: res.latitude + "",
longitude: res.longitude + "",
})
.then((position) => {
// console.log(position,"position");
if (position.code == 200 && position.data) {
getStatus({ userId: that.userInfo.userId })
.then((status) => {
if (status.code == 200) {
if (res.data.status == 0) {
let data = {
userId: that.userInfo.userId,
latitude: res.latitude + "",
longitude: res.longitude + "",
};
return clock(data);
}
}
})
.then((daka) => {
if (data == 200) {
clearInterval(that.times);
}
});
}
})
.catch((err) => {
console.log(err, "position失败");
if (err == "未设置考勤组") {
// clearInterval(that.times)
}
});
//
},
fail: function (err) {
console.log("获取定位失败", err);
uni.showToast({
title: "获取地址失败,将导致部分功能不可用",
icon: "none",
});
clearInterval(that.times);
},
});
},
// getCircle(){
// console.log(this.userInfo,"userInfo");
// getUserIdByPoint({id:this.userInfo.userId}).then(res=>{
// console.log(res,"");
// if(res.data.length > 0) {
// this.circleLat = res.data[0].lat;
// this.circleLng = res.data[0].lng;
// this.circleClock = res.data[0].clock;
// }
// })
// },
},
};
</script>
<style lang="scss">
.page {
background-color: #f6f7f8;
.welcome {
margin: 20rpx;
height: 281rpx;
background-size: 100%;
background-image: url("@/static/images/umale/intr.png");
background-repeat: no-repeat;
display: flex;
flex-direction: column;
padding-left: 31rpx;
padding-top: 45rpx;
.title {
font-size: 36rpx;
font-family: Source Han Sans CN;
color: #ffffff;
text-shadow: 0px 3rpx 6rpx rgba(0, 42, 128, 0.4);
}
.name {
margin-top: 40rpx;
font-size: 40rpx;
font-family: Source Han Sans CN;
font-weight: bold;
color: #ffffff;
text-shadow: 0px 3rpx 6rpx rgba(0, 42, 128, 0.4);
}
.date-weather {
margin-top: 40rpx;
.date {
font-size: 24rpx;
font-family: Source Han Sans CN;
color: #f0f2f6;
text-shadow: 0px 3rpx 6rpx rgba(0, 42, 128, 0.4);
}
.weather {
margin-left: 50rpx;
font-size: 24rpx;
font-family: Source Han Sans CN;
color: #f0f2f6;
text-shadow: 0rpx 3rpx 6rpx rgba(0, 42, 128, 0.4);
}
}
}
.main-content {
position: relative;
.work-center {
// position: absolute;
// top: 10rpx;
width: 100%;
box-sizing: border-box;
padding: 0 30rpx;
display: flex;
flex-wrap: wrap;
& > view {
width: 48%;
height: 210rpx;
margin-bottom: 22rpx;
position: relative;
.grid-img {
height: 100%;
width: 100%;
display: block;
}
.grid-name {
position: absolute;
top: 27rpx;
left: 26rpx;
font-size: 36rpx;
font-family: PingFang SC;
font-weight: bold;
}
}
& > view:nth-child(odd) {
margin-right: 4%;
}
}
}
}
<template>
<view class="content">
<image class="logo" src="@/static/logo.png"></image>
<view class="text-area">
<text class="title">Hello RuoYi</text>
</view>
</view>
</template>
<script>
export default {
onLoad: function() {
}
}
</script>
<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
}
.text-area {
display: flex;
justify-content: center;
}
.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>

@ -1,309 +1,202 @@
<template>
<!-- <view class="normal-login-container">
<view class="view-title">
<text class="title">你好欢迎登录</text>
</view>
<view class="normal-login-container">
<view class="logo-content align-center justify-center flex">
<image
style="width: 100rpx; height: 100rpx"
src="/static/images/umale/logo2.png"
mode="widthFix"
>
<image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix">
</image>
<text class="sutitle">城市精细化治理系统</text>
<text class="title">若依移动端登录</text>
</view>
<view class="login-form-content">
<view class="input-item flex align-center">
<view class="iconfont icon-users icon"></view>
<input
v-model="loginForm.username"
class="input"
type="text"
placeholder="请输入账号"
maxlength="30"
placeholder-class="input-placeholder"
/>
<view class="iconfont icon-user icon"></view>
<input v-model="loginForm.username" class="input" type="text" placeholder="请输入账号" maxlength="30" />
</view>
<view class="input-item flex align-center">
<view class="iconfont icon-passwords icon"></view>
<input
v-model="loginForm.password"
type="password"
class="input"
placeholder="请输入密码"
maxlength="20"
placeholder-class="input-placeholder"
/>
<view class="iconfont icon-password icon"></view>
<input v-model="loginForm.password" type="password" class="input" placeholder="请输入密码" maxlength="20" />
</view>
<view
class="input-item flex align-center"
style="width: 60%; margin: 0px"
v-if="captchaEnabled"
>
<view class="input-item flex align-center" style="width: 60%;margin: 0px;" v-if="captchaEnabled">
<view class="iconfont icon-code icon"></view>
<input
v-model="loginForm.code"
type="number"
class="input"
placeholder="请输入验证码"
maxlength="4"
/>
<view class="login-code">
<image :src="codeUrl" @click="getCode" class="login-code-img"></image>
<input v-model="loginForm.code" type="number" class="input" placeholder="请输入验证码" maxlength="4" />
<view class="login-code">
<image :src="codeUrl" @click="getCode" class="login-code-img"></image>
</view>
</view>
<view class="action-btn">
<button
@click="handleLogin"
class="login-btn cu-btn block bg-blue lg round"
>
登录
</button>
<button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">登录</button>
</view>
<view class="reg text-center" v-if="register">
<text class="text-grey1">没有账号</text>
<text @click="handleUserRegister" class="text-blue">立即注册</text>
</view>
<view class="xieyi text-center">
<text class="text-grey1">登录即代表同意</text>
<text @click="handleUserAgrement" class="text-blue">用户协议</text>
<text @click="handlePrivacy" class="text-blue">隐私协议</text>
</view>
</view>
</view> -->
<web-view :src="urlParams" ></web-view>
</view>
</view>
</template>
<script>
import { getCodeImg } from "@/api/login";
export default {
data() {
return {
codeUrl: "",
captchaEnabled: true,
//
register: false,
globalConfig: getApp().globalData.config,
loginForm: {
username: "admin",
password: "admin123",
code: "",
uuid: "",
},
urlParams: null,
};
},
created() {
// this.getCode();
},
methods: {
//
getRequestParams() {
let url = location.href;
let requestParams = {};
if (url.indexOf("?") !== -1) {
let str = url.substr(url.indexOf("?") + 1); //?
// console.log(str, '?');
let strs = str.split("&"); //&
// console.log(strs, '&');
for (let i = 0; i < strs.length; i++) {
requestParams[strs[i].split("=")[0]] = decodeURI(
strs[i].split("=")[1]
);
// '=''='
import { getCodeImg } from '@/api/login'
export default {
data() {
return {
codeUrl: "",
captchaEnabled: true,
//
register: false,
globalConfig: getApp().globalData.config,
loginForm: {
username: "admin",
password: "admin123",
code: "",
uuid: ''
}
}
// console.log(requestParams, '');
return requestParams;
},
//
handleUserRegister() {
this.$tab.redirectTo(`/pages/register`);
},
//
handlePrivacy() {
let site = this.globalConfig.appInfo.agreements[0];
this.$tab.navigateTo(
`/pages/common/webview/index?title=${site.title}&url=${site.url}`
);
},
//
handleUserAgrement() {
let site = this.globalConfig.appInfo.agreements[1];
this.$tab.navigateTo(
`/pages/common/webview/index?title=${site.title}&url=${site.url}`
);
},
//
getCode() {
getCodeImg().then((res) => {
this.captchaEnabled =
res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (this.captchaEnabled) {
this.codeUrl = "data:image/gif;base64," + res.img;
this.loginForm.uuid = res.uuid;
}
});
},
//
async handleLogin() {
if (this.loginForm.username === "") {
this.$modal.msgError("请输入您的账号");
} else if (this.loginForm.password === "") {
this.$modal.msgError("请输入您的密码");
} else if (this.loginForm.code === "" && this.captchaEnabled) {
this.$modal.msgError("请输入验证码");
} else {
this.$modal.loading("登录中,请耐心等待...");
this.pwdLogin();
}
created() {
this.getCode()
},
//
async pwdLogin() {
this.$store
.dispatch("Login", this.loginForm)
.then(() => {
this.$modal.closeLoading();
this.loginSuccess();
methods: {
//
handleUserRegister() {
this.$tab.redirectTo(`/pages/register`)
},
//
handlePrivacy() {
let site = this.globalConfig.appInfo.agreements[0]
this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
},
//
handleUserAgrement() {
let site = this.globalConfig.appInfo.agreements[1]
this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
},
//
getCode() {
getCodeImg().then(res => {
this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled
if (this.captchaEnabled) {
this.codeUrl = 'data:image/gif;base64,' + res.img
this.loginForm.uuid = res.uuid
}
})
.catch(() => {
},
//
async handleLogin() {
if (this.loginForm.username === "") {
this.$modal.msgError("请输入您的账号")
} else if (this.loginForm.password === "") {
this.$modal.msgError("请输入您的密码")
} else if (this.loginForm.code === "" && this.captchaEnabled) {
this.$modal.msgError("请输入验证码")
} else {
this.$modal.loading("登录中,请耐心等待...")
this.pwdLogin()
}
},
//
async pwdLogin() {
this.$store.dispatch('Login', this.loginForm).then(() => {
this.$modal.closeLoading()
this.loginSuccess()
}).catch(() => {
if (this.captchaEnabled) {
this.getCode();
this.getCode()
}
});
},
//
loginSuccess(result) {
//
this.$store.dispatch("GetInfo").then((res) => {
this.$tab.reLaunch("/pages/index");
});
},
},
};
})
},
//
loginSuccess(result) {
//
this.$store.dispatch('GetInfo').then(res => {
this.$tab.reLaunch('/pages/index')
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
.normal-login-container {
width: 100vw;
height: 100vh;
background-image: url("@/static/images/umale/login_bg.png");
background-size: 100% 100%;
background-repeat: no-repeat;
background-position-x: 0rpx;
background-position-y: 0rpx;
padding-top: 256rpx;
.view-title {
margin-left: 45rpx;
.title {
font-size: 56rpx;
font-family: Source Han Sans CN;
font-weight: bold;
color: #2e2f31;
letter-spacing: 4rpx;
}
page {
background-color: #ffffff;
}
.logo-content {
.normal-login-container {
width: 100%;
font-size: 21px;
text-align: center;
padding-top: 15%;
image {
border-radius: 4px;
}
.sutitle {
margin-left: 10px;
font-size: 40rpx;
font-family: Source Han Sans CN;
font-weight: bold;
color: #367bef;
letter-spacing: 4rpx;
}
}
.login-form-content {
text-align: center;
margin: 20px auto;
margin-top: 15%;
width: 80%;
.logo-content {
width: 100%;
font-size: 21px;
text-align: center;
padding-top: 15%;
.input-item {
margin: 20px auto;
height: 98rpx;
background: #ffffff;
border: 2rpx solid #dce3ec;
box-shadow: 0rpx 0rpx 20rpx rgba(57, 118, 241, 0.06);
opacity: 1;
border-radius: 49rpx;
.icon {
font-size: 38rpx;
margin-left: 36rpx;
color: #999;
}
.icon-users {
width: 36rpx;
height: 36rpx;
background-image: url("@/static/images/umale/user.png");
background-size: cover;
background-repeat: no-repeat;
image {
border-radius: 4px;
}
.icon-passwords {
width: 36rpx;
height: 36rpx;
background-image: url("@/static/images/umale/pwd.png");
background-size: cover;
background-repeat: no-repeat;
}
.input {
width: 100%;
font-size: 36rpx;
line-height: 20px;
font-family: PingFang SC;
font-weight: 400;
letter-spacing: 4rpx;
text-align: left;
padding-left: 15px;
}
.input-placeholder {
color: #bcbcbc;
.title {
margin-left: 10px;
}
}
.login-btn {
margin-top: 40px;
height: 98rpx;
background: linear-gradient(180deg, #4787f3 0%, #1868ef 100%);
box-shadow: 0 14rpx 25rpx -10rpx rgba(57, 118, 241, 1);
border-radius: 49rpx;
}
.reg {
margin-top: 15px;
}
.login-form-content {
text-align: center;
margin: 20px auto;
margin-top: 15%;
width: 80%;
.input-item {
margin: 20px auto;
background-color: #f5f6f7;
height: 45px;
border-radius: 20px;
.icon {
font-size: 38rpx;
margin-left: 10px;
color: #999;
}
.xieyi {
color: #333;
margin-top: 20px;
}
.input {
width: 100%;
font-size: 14px;
line-height: 20px;
text-align: left;
padding-left: 15px;
}
.login-code {
height: 38px;
float: right;
}
.login-code-img {
height: 38px;
position: absolute;
margin-left: 10px;
width: 200rpx;
.login-btn {
margin-top: 40px;
height: 45px;
}
.reg {
margin-top: 15px;
}
.xieyi {
color: #333;
margin-top: 20px;
}
.login-code {
height: 38px;
float: right;
.login-code-img {
height: 38px;
position: absolute;
margin-left: 10px;
width: 200rpx;
}
}
}
}
}
</style>

@ -1,48 +1,48 @@
<template>
<view class="about-container">
<view class="header-section text-center">
<image style="width: 150rpx;height: 150rpx;" src="/static/logo200.png" mode="widthFix">
</image>
<uni-title type="h2" title="若依移动端"></uni-title>
</view>
<view class="content-section">
<view class="menu-list">
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>版本信息</view>
<view class="text-right">v{{version}}</view>
</view>
</view>
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>官方邮箱</view>
<view class="text-right">ruoyi@xx.com</view>
</view>
</view>
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>服务热线</view>
<view class="text-right">400-999-9999</view>
</view>
</view>
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>公司网站</view>
<view class="text-right">
<uni-link :href="url" :text="url" showUnderLine="false"></uni-link>
</view>
</view>
</view>
</view>
</view>
<view class="copyright">
<view>Copyright &copy; 2022 ruoyi.vip All Rights Reserved.</view>
</view>
</view>
</template>
<template>
<view class="about-container">
<view class="header-section text-center">
<image style="width: 150rpx;height: 150rpx;" src="/static/logo200.png" mode="widthFix">
</image>
<uni-title type="h2" title="若依移动端"></uni-title>
</view>
<view class="content-section">
<view class="menu-list">
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>版本信息</view>
<view class="text-right">v{{version}}</view>
</view>
</view>
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>官方邮箱</view>
<view class="text-right">ruoyi@xx.com</view>
</view>
</view>
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>服务热线</view>
<view class="text-right">400-999-9999</view>
</view>
</view>
<view class="list-cell list-cell-arrow">
<view class="menu-item-box">
<view>公司网站</view>
<view class="text-right">
<uni-link :href="url" :text="url" showUnderLine="false"></uni-link>
</view>
</view>
</view>
</view>
</view>
<view class="copyright">
<view>Copyright &copy; 2022 ruoyi.vip All Rights Reserved.</view>
</view>
</view>
</template>
<script>
export default {
data() {
@ -52,24 +52,24 @@
}
}
}
</script>
<style lang="scss">
page {
background-color: #f8f8f8;
}
.copyright {
margin-top: 50rpx;
text-align: center;
line-height: 60rpx;
color: #999;
}
.header-section {
display: flex;
padding: 30rpx 0 0;
flex-direction: column;
align-items: center;
}
</script>
<style lang="scss">
page {
background-color: #f8f8f8;
}
.copyright {
margin-top: 50rpx;
text-align: center;
line-height: 60rpx;
color: #999;
}
.header-section {
display: flex;
padding: 30rpx 0 0;
flex-direction: column;
align-items: center;
}
</style>

File diff suppressed because it is too large Load Diff

@ -1,112 +1,112 @@
<template>
<view class="help-container">
<view v-for="(item, findex) in list" :key="findex" :title="item.title" class="list-title">
<view class="text-title">
<view :class="item.icon"></view>{{ item.title }}
</view>
<view class="childList">
<view v-for="(child, zindex) in item.childList" :key="zindex" class="question" hover-class="hover"
@click="handleText(child)">
<view class="text-item">{{ child.title }}</view>
<view class="line" v-if="zindex !== item.childList.length - 1"></view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [{
icon: 'iconfont icon-github',
title: '若依问题',
childList: [{
title: '若依开源吗?',
content: '开源'
}, {
title: '若依可以商用吗?',
content: '可以'
}, {
title: '若依官网地址多少?',
content: 'http://ruoyi.vip'
}, {
title: '若依文档地址多少?',
content: 'http://doc.ruoyi.vip'
}]
},
{
icon: 'iconfont icon-help',
title: '其他问题',
childList: [{
title: '如何退出登录?',
content: '请点击[我的] - [应用设置] - [退出登录]即可退出登录',
}, {
title: '如何修改用户头像?',
content: '请点击[我的] - [选择头像] - [点击提交]即可更换用户头像',
}, {
title: '如何修改登录密码?',
content: '请点击[我的] - [应用设置] - [修改密码]即可修改登录密码',
}]
}
]
}
},
methods: {
handleText(item) {
this.$tab.navigateTo(`/pages/common/textview/index?title=${item.title}&content=${item.content}`)
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #f8f8f8;
}
.help-container {
margin-bottom: 100rpx;
padding: 30rpx;
}
.list-title {
margin-bottom: 30rpx;
}
.childList {
background: #ffffff;
box-shadow: 0px 0px 10rpx rgba(193, 193, 193, 0.2);
border-radius: 16rpx;
margin-top: 10rpx;
}
.line {
width: 100%;
height: 1rpx;
background-color: #F5F5F5;
}
.text-title {
color: #303133;
font-size: 32rpx;
font-weight: bold;
margin-left: 10rpx;
.iconfont {
font-size: 16px;
margin-right: 10rpx;
}
}
.text-item {
font-size: 28rpx;
padding: 24rpx;
}
.question {
color: #606266;
font-size: 28rpx;
}
<template>
<view class="help-container">
<view v-for="(item, findex) in list" :key="findex" :title="item.title" class="list-title">
<view class="text-title">
<view :class="item.icon"></view>{{ item.title }}
</view>
<view class="childList">
<view v-for="(child, zindex) in item.childList" :key="zindex" class="question" hover-class="hover"
@click="handleText(child)">
<view class="text-item">{{ child.title }}</view>
<view class="line" v-if="zindex !== item.childList.length - 1"></view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [{
icon: 'iconfont icon-github',
title: '若依问题',
childList: [{
title: '若依开源吗?',
content: '开源'
}, {
title: '若依可以商用吗?',
content: '可以'
}, {
title: '若依官网地址多少?',
content: 'http://ruoyi.vip'
}, {
title: '若依文档地址多少?',
content: 'http://doc.ruoyi.vip'
}]
},
{
icon: 'iconfont icon-help',
title: '其他问题',
childList: [{
title: '如何退出登录?',
content: '请点击[我的] - [应用设置] - [退出登录]即可退出登录',
}, {
title: '如何修改用户头像?',
content: '请点击[我的] - [选择头像] - [点击提交]即可更换用户头像',
}, {
title: '如何修改登录密码?',
content: '请点击[我的] - [应用设置] - [修改密码]即可修改登录密码',
}]
}
]
}
},
methods: {
handleText(item) {
this.$tab.navigateTo(`/pages/common/textview/index?title=${item.title}&content=${item.content}`)
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #f8f8f8;
}
.help-container {
margin-bottom: 100rpx;
padding: 30rpx;
}
.list-title {
margin-bottom: 30rpx;
}
.childList {
background: #ffffff;
box-shadow: 0px 0px 10rpx rgba(193, 193, 193, 0.2);
border-radius: 16rpx;
margin-top: 10rpx;
}
.line {
width: 100%;
height: 1rpx;
background-color: #F5F5F5;
}
.text-title {
color: #303133;
font-size: 32rpx;
font-weight: bold;
margin-left: 10rpx;
.iconfont {
font-size: 16px;
margin-right: 10rpx;
}
}
.text-item {
font-size: 28rpx;
padding: 24rpx;
}
.question {
color: #606266;
font-size: 28rpx;
}
</style>

@ -1,258 +1,198 @@
<template>
<view class="mine-container">
<view class="mine-bg"></view>
<view class="mine-main" :style="{ top: statusBarHeight + 'px' }">
<view class="mine-name">我的</view>
<view class="user-cell">
<image
class="user-image"
src="/static/images/user-image.png"
mode="aspectFill"
@click="handleProfile()"
></image>
<view class="user-systeam">
<view class="user-isLogin">{{ userInfo ? userInfo.account : "登录/注册" }}</view>
<view class="user-hint">欢迎来到系统</view>
</view>
</view>
<view class="mine-cell-group">
<u-cell-group :border="false">
<u-cell icon="setting-fill" title="我的事件" :isLink="true" @click="myEvent">
<image
src="/static/images/cell1-mine.png"
mode="aspectFill"
slot="icon"
class="cell-icon"
>
</image>
</u-cell>
<u-cell icon="setting-fill" title="我的任务" :isLink="true" @click="myTask">
<image
src="/static/images/cell2-mine.png"
mode="aspectFill"
slot="icon"
class="cell-icon"
>
</image>
</u-cell>
<!-- <u-cell icon="setting-fill" title="我的考勤" :isLink="true">
<image
src="/static/images/cell3-mine.png"
mode="aspectFill"
slot="icon"
class="cell-icon"
>
</image>
</u-cell>
<u-cell icon="setting-fill" title="我的请假" :isLink="true">
<image
src="/static/images/cell4-mine.png"
mode="aspectFill"
slot="icon"
class="cell-icon"
>
</image>
</u-cell>
<u-cell
icon="setting-fill"
title="修改密码"
:isLink="true"
url="/subcontract/mine/ChangePassword/ChangePassword"
>
<image
src="/static/images/cell5-mine.png"
mode="aspectFill"
slot="icon"
class="cell-icon"
>
</image>
</u-cell> -->
<u-cell
:border="false"
icon="setting-fill"
title="检查更新"
:isLink="true"
value="版本1.0.1"
>
<image
src="/static/images/cell6-mine.png"
mode="aspectFill"
slot="icon"
class="cell-icon"
>
</image>
</u-cell>
</u-cell-group>
</view>
<u-button
@click="editCG"
class="view-global"
:text="userInfo ? '退出登录' : '前往登录'"
:color="userInfo ? 'linear-gradient(90deg, #EA3330 0%, #F8404C 100%)' : 'linear-gradient(90deg, #3976F1 0%, #3CA0F6 100%)'"
:customStyle="{
height: '88rpx',
borderRadius: '24rpx',
}"
></u-button>
</view>
</view>
</template>
<script>
import {
removeToken
} from '@/utils/auth'
import { listNews } from "@/api/jn/news";
export default {
data() {
return {
statusBarHeight: null,
userInfo:null,
};
},
onLoad() {
this.statusBarHeight = uni.$u.sys().statusBarHeight; //
},
mounted() {
this.userInfo = uni.getStorageSync("userInfo")
},
onShow() {
this.getNumber();
},
methods: {
getNumber(){
listNews({status: 0}).then((res) => {
if(res.code == 200) {
this.$nextTick(()=>{
uni.setTabBarBadge({
//
index: 1, //tabbar
text: res.total + '', //
});
})
}
})
},
//
handleProfile() {
uni.$u.route({
url: "/subcontract/mine/ChangeProfile/ChangeProfile",
});
},
// 退,
editCG(){
if(this.userInfo) {
this.$modal.confirm('确定注销并退出系统吗?').then(() => {
removeToken();
this.$tab.reLaunch("/pages/myLogin");
})
}
},
//
myEvent(){
uni.$u.route({
url: "/subcontract/mine/event/index",
});
},
//
myTask(){
uni.$u.route({
url: "/subcontract/mine/task/task",
});
}
},
};
</script>
<style lang="scss" scoped>
.mine-bg {
height: 380rpx;
width: 100%;
background: url("@/static/images/mineBg.png");
background-size: 100% 100%;
}
.mine-main {
position: fixed;
top: 0;
left: 0;
z-index: 10;
width: 100%;
box-sizing: border-box;
padding: 0 30rpx;
.mine-name {
height: 44px;
line-height: 44px;
font-size: 40rpx;
font-weight: bold;
color: #ffffff;
text-align: center;
letter-spacing: 2px;
margin-bottom: 130rpx;
}
.user-cell {
display: flex;
align-items: center;
box-sizing: border-box;
padding: 25rpx 45rpx;
background-color: #ffffff;
border-radius: 24rpx;
box-shadow: 0rpx 6rpx 20rpx rgba(57, 118, 241, 0.1);
.user-image {
height: 128rpx;
width: 128rpx;
border-radius: 50%;
margin-right: 20rpx;
}
.user-isLogin {
font-size: 44rpx;
font-weight: bold;
color: #34373b;
}
.user-hint {
font-size: 28rpx;
font-weight: 400;
color: #aec1d9;
margin-top: 20rpx;
}
}
.mine-cell-group {
margin-top: 50rpx;
background: #ffffff;
box-shadow: 0rpx 6rpx 20rpx rgba(57, 118, 241, 0.1);
border-radius: 24rpx;
box-sizing: border-box;
padding: 0rpx 20rpx;
overflow: hidden;
margin-bottom: 39rpx;
}
}
.cell-icon {
display: inline-block;
height: 39rpx;
width: 37rpx;
margin-right: 25rpx;
}
/deep/.u-cell .u-cell__body {
padding: 30rpx 20rpx;
}
/deep/.u-cell__title .u-cell__title-text {
font-size: 34rpx;
font-weight: 500;
color: #34373b;
}
/deep/.u-cell__body .u-cell__value {
font-size: 28rpx;
font-weight: 400;
color: #616367;
}
</style>
<template>
<view class="mine-container" :style="{height: `${windowHeight}px`}">
<!--顶部个人信息栏-->
<view class="header-section">
<view class="flex padding justify-between">
<view class="flex align-center">
<view v-if="!avatar" class="cu-avatar xl round bg-white">
<view class="iconfont icon-people text-gray icon"></view>
</view>
<image v-if="avatar" @click="handleToAvatar" :src="avatar" class="cu-avatar xl round" mode="widthFix">
</image>
<view v-if="!name" @click="handleToLogin" class="login-tip">
点击登录
</view>
<view v-if="name" @click="handleToInfo" class="user-info">
<view class="u_title">
用户名{{ name }}
</view>
</view>
</view>
<view @click="handleToInfo" class="flex align-center">
<text>个人信息</text>
<view class="iconfont icon-right"></view>
</view>
</view>
</view>
<view class="content-section">
<view class="mine-actions grid col-4 text-center">
<view class="action-item" @click="handleJiaoLiuQun">
<view class="iconfont icon-friendfill text-pink icon"></view>
<text class="text">交流群</text>
</view>
<view class="action-item" @click="handleBuilding">
<view class="iconfont icon-service text-blue icon"></view>
<text class="text">在线客服</text>
</view>
<view class="action-item" @click="handleBuilding">
<view class="iconfont icon-community text-mauve icon"></view>
<text class="text">反馈社区</text>
</view>
<view class="action-item" @click="handleBuilding">
<view class="iconfont icon-dianzan text-green icon"></view>
<text class="text">点赞我们</text>
</view>
</view>
<view class="menu-list">
<view class="list-cell list-cell-arrow" @click="handleToEditInfo">
<view class="menu-item-box">
<view class="iconfont icon-user menu-icon"></view>
<view>编辑资料</view>
</view>
</view>
<view class="list-cell list-cell-arrow" @click="handleHelp">
<view class="menu-item-box">
<view class="iconfont icon-help menu-icon"></view>
<view>常见问题</view>
</view>
</view>
<view class="list-cell list-cell-arrow" @click="handleAbout">
<view class="menu-item-box">
<view class="iconfont icon-aixin menu-icon"></view>
<view>关于我们</view>
</view>
</view>
<view class="list-cell list-cell-arrow" @click="handleToSetting">
<view class="menu-item-box">
<view class="iconfont icon-setting menu-icon"></view>
<view>应用设置</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import storage from '@/utils/storage'
export default {
data() {
return {
name: this.$store.state.user.name,
version: getApp().globalData.config.appInfo.version
}
},
computed: {
avatar() {
return this.$store.state.user.avatar
},
windowHeight() {
return uni.getSystemInfoSync().windowHeight - 50
}
},
methods: {
handleToInfo() {
this.$tab.navigateTo('/pages/mine/info/index')
},
handleToEditInfo() {
this.$tab.navigateTo('/pages/mine/info/edit')
},
handleToSetting() {
this.$tab.navigateTo('/pages/mine/setting/index')
},
handleToLogin() {
this.$tab.reLaunch('/pages/login')
},
handleToAvatar() {
this.$tab.navigateTo('/pages/mine/avatar/index')
},
handleLogout() {
this.$modal.confirm('确定注销并退出系统吗?').then(() => {
this.$store.dispatch('LogOut').then(() => {
this.$tab.reLaunch('/pages/index')
})
})
},
handleHelp() {
this.$tab.navigateTo('/pages/mine/help/index')
},
handleAbout() {
this.$tab.navigateTo('/pages/mine/about/index')
},
handleJiaoLiuQun() {
this.$modal.showToast('QQ群①133713780、②146013835')
},
handleBuilding() {
this.$modal.showToast('模块建设中~')
}
}
}
</script>
<style lang="scss">
page {
background-color: #f5f6f7;
}
.mine-container {
width: 100%;
height: 100%;
.header-section {
padding: 15px 15px 45px 15px;
background-color: #3c96f3;
color: white;
.login-tip {
font-size: 18px;
margin-left: 10px;
}
.cu-avatar {
border: 2px solid #eaeaea;
.icon {
font-size: 40px;
}
}
.user-info {
margin-left: 15px;
.u_title {
font-size: 18px;
line-height: 30px;
}
}
}
.content-section {
position: relative;
top: -50px;
.mine-actions {
margin: 15px 15px;
padding: 20px 0px;
border-radius: 8px;
background-color: white;
.action-item {
.icon {
font-size: 28px;
}
.text {
display: block;
font-size: 13px;
margin: 8px 0px;
}
}
}
}
}
</style>

@ -1,127 +1,127 @@
<template>
<view class="container">
<view class="example">
<uni-forms ref="form" :model="user" labelWidth="80px">
<uni-forms-item label="用户昵称" name="nickName">
<uni-easyinput v-model="user.nickName" placeholder="请输入昵称" />
</uni-forms-item>
<uni-forms-item label="手机号码" name="phonenumber">
<uni-easyinput v-model="user.phonenumber" placeholder="请输入手机号码" />
</uni-forms-item>
<uni-forms-item label="邮箱" name="email">
<uni-easyinput v-model="user.email" placeholder="请输入邮箱" />
</uni-forms-item>
<uni-forms-item label="性别" name="sex" required>
<uni-data-checkbox v-model="user.sex" :localdata="sexs" />
</uni-forms-item>
</uni-forms>
<button type="primary" @click="submit"></button>
</view>
</view>
</template>
<script>
import { getUserProfile } from "@/api/system/user"
import { updateUserProfile } from "@/api/system/user"
export default {
data() {
return {
user: {
nickName: "",
phonenumber: "",
email: "",
sex: ""
},
sexs: [{
text: '男',
value: "0"
}, {
text: '女',
value: "1"
}],
rules: {
nickName: {
rules: [{
required: true,
errorMessage: '用户昵称不能为空'
}]
},
phonenumber: {
rules: [{
required: true,
errorMessage: '手机号码不能为空'
}, {
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
errorMessage: '请输入正确的手机号码'
}]
},
email: {
rules: [{
required: true,
errorMessage: '邮箱地址不能为空'
}, {
format: 'email',
errorMessage: '请输入正确的邮箱地址'
}]
}
}
}
},
onLoad() {
this.getUser()
},
onReady() {
this.$refs.form.setRules(this.rules)
},
methods: {
getUser() {
getUserProfile().then(response => {
this.user = response.data
})
},
submit(ref) {
this.$refs.form.validate().then(res => {
updateUserProfile(this.user).then(response => {
this.$modal.msgSuccess("修改成功")
})
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
.example {
padding: 15px;
background-color: #fff;
}
.segmented-control {
margin-bottom: 15px;
}
.button-group {
margin-top: 15px;
display: flex;
justify-content: space-around;
}
.form-item {
display: flex;
align-items: center;
flex: 1;
}
.button {
display: flex;
align-items: center;
height: 35px;
line-height: 35px;
margin-left: 10px;
}
<template>
<view class="container">
<view class="example">
<uni-forms ref="form" :model="user" labelWidth="80px">
<uni-forms-item label="用户昵称" name="nickName">
<uni-easyinput v-model="user.nickName" placeholder="请输入昵称" />
</uni-forms-item>
<uni-forms-item label="手机号码" name="phonenumber">
<uni-easyinput v-model="user.phonenumber" placeholder="请输入手机号码" />
</uni-forms-item>
<uni-forms-item label="邮箱" name="email">
<uni-easyinput v-model="user.email" placeholder="请输入邮箱" />
</uni-forms-item>
<uni-forms-item label="性别" name="sex" required>
<uni-data-checkbox v-model="user.sex" :localdata="sexs" />
</uni-forms-item>
</uni-forms>
<button type="primary" @click="submit"></button>
</view>
</view>
</template>
<script>
import { getUserProfile } from "@/api/system/user"
import { updateUserProfile } from "@/api/system/user"
export default {
data() {
return {
user: {
nickName: "",
phonenumber: "",
email: "",
sex: ""
},
sexs: [{
text: '男',
value: "0"
}, {
text: '女',
value: "1"
}],
rules: {
nickName: {
rules: [{
required: true,
errorMessage: '用户昵称不能为空'
}]
},
phonenumber: {
rules: [{
required: true,
errorMessage: '手机号码不能为空'
}, {
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
errorMessage: '请输入正确的手机号码'
}]
},
email: {
rules: [{
required: true,
errorMessage: '邮箱地址不能为空'
}, {
format: 'email',
errorMessage: '请输入正确的邮箱地址'
}]
}
}
}
},
onLoad() {
this.getUser()
},
onReady() {
this.$refs.form.setRules(this.rules)
},
methods: {
getUser() {
getUserProfile().then(response => {
this.user = response.data
})
},
submit(ref) {
this.$refs.form.validate().then(res => {
updateUserProfile(this.user).then(response => {
this.$modal.msgSuccess("修改成功")
})
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
.example {
padding: 15px;
background-color: #fff;
}
.segmented-control {
margin-bottom: 15px;
}
.button-group {
margin-top: 15px;
display: flex;
justify-content: space-around;
}
.form-item {
display: flex;
align-items: center;
flex: 1;
}
.button {
display: flex;
align-items: center;
height: 35px;
line-height: 35px;
margin-left: 10px;
}
</style>

@ -1,44 +1,44 @@
<template>
<view class="container">
<uni-list>
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'person-filled'}" title="昵称" :rightText="user.nickName" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'phone-filled'}" title="手机号码" :rightText="user.phonenumber" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'email-filled'}" title="邮箱" :rightText="user.email" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'auth-filled'}" title="岗位" :rightText="postGroup" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'staff-filled'}" title="角色" :rightText="roleGroup" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'calendar-filled'}" title="创建日期" :rightText="user.createTime" />
</uni-list>
</view>
</template>
<script>
import { getUserProfile } from "@/api/system/user"
export default {
data() {
return {
user: {},
roleGroup: "",
postGroup: ""
}
},
onLoad() {
this.getUser()
},
methods: {
getUser() {
getUserProfile().then(response => {
this.user = response.data
this.roleGroup = response.roleGroup
this.postGroup = response.postGroup
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
</style>
<template>
<view class="container">
<uni-list>
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'person-filled'}" title="昵称" :rightText="user.nickName" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'phone-filled'}" title="手机号码" :rightText="user.phonenumber" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'email-filled'}" title="邮箱" :rightText="user.email" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'auth-filled'}" title="岗位" :rightText="postGroup" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'staff-filled'}" title="角色" :rightText="roleGroup" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'calendar-filled'}" title="创建日期" :rightText="user.createTime" />
</uni-list>
</view>
</template>
<script>
import { getUserProfile } from "@/api/system/user"
export default {
data() {
return {
user: {},
roleGroup: "",
postGroup: ""
}
},
onLoad() {
this.getUser()
},
methods: {
getUser() {
getUserProfile().then(response => {
this.user = response.data
this.roleGroup = response.roleGroup
this.postGroup = response.postGroup
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
</style>

@ -1,85 +1,85 @@
<template>
<view class="pwd-retrieve-container">
<uni-forms ref="form" :value="user" labelWidth="80px">
<uni-forms-item name="oldPassword" label="旧密码">
<uni-easyinput type="password" v-model="user.oldPassword" placeholder="请输入旧密码" />
</uni-forms-item>
<uni-forms-item name="newPassword" label="新密码">
<uni-easyinput type="password" v-model="user.newPassword" placeholder="请输入新密码" />
</uni-forms-item>
<uni-forms-item name="confirmPassword" label="确认密码">
<uni-easyinput type="password" v-model="user.confirmPassword" placeholder="请确认新密码" />
</uni-forms-item>
<button type="primary" @click="submit"></button>
</uni-forms>
</view>
</template>
<script>
import { updateUserPwd } from "@/api/system/user"
export default {
data() {
return {
user: {
oldPassword: undefined,
newPassword: undefined,
confirmPassword: undefined
},
rules: {
oldPassword: {
rules: [{
required: true,
errorMessage: '旧密码不能为空'
}]
},
newPassword: {
rules: [{
required: true,
errorMessage: '新密码不能为空',
},
{
minLength: 6,
maxLength: 20,
errorMessage: '长度在 6 到 20 个字符'
}
]
},
confirmPassword: {
rules: [{
required: true,
errorMessage: '确认密码不能为空'
}, {
validateFunction: (rule, value, data) => data.newPassword === value,
errorMessage: '两次输入的密码不一致'
}
]
}
}
}
},
onReady() {
this.$refs.form.setRules(this.rules)
},
methods: {
submit() {
this.$refs.form.validate().then(res => {
updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => {
this.$modal.msgSuccess("修改成功")
})
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
.pwd-retrieve-container {
padding-top: 36rpx;
padding: 15px;
}
<template>
<view class="pwd-retrieve-container">
<uni-forms ref="form" :value="user" labelWidth="80px">
<uni-forms-item name="oldPassword" label="旧密码">
<uni-easyinput type="password" v-model="user.oldPassword" placeholder="请输入旧密码" />
</uni-forms-item>
<uni-forms-item name="newPassword" label="新密码">
<uni-easyinput type="password" v-model="user.newPassword" placeholder="请输入新密码" />
</uni-forms-item>
<uni-forms-item name="confirmPassword" label="确认密码">
<uni-easyinput type="password" v-model="user.confirmPassword" placeholder="请确认新密码" />
</uni-forms-item>
<button type="primary" @click="submit"></button>
</uni-forms>
</view>
</template>
<script>
import { updateUserPwd } from "@/api/system/user"
export default {
data() {
return {
user: {
oldPassword: undefined,
newPassword: undefined,
confirmPassword: undefined
},
rules: {
oldPassword: {
rules: [{
required: true,
errorMessage: '旧密码不能为空'
}]
},
newPassword: {
rules: [{
required: true,
errorMessage: '新密码不能为空',
},
{
minLength: 6,
maxLength: 20,
errorMessage: '长度在 6 到 20 个字符'
}
]
},
confirmPassword: {
rules: [{
required: true,
errorMessage: '确认密码不能为空'
}, {
validateFunction: (rule, value, data) => data.newPassword === value,
errorMessage: '两次输入的密码不一致'
}
]
}
}
}
},
onReady() {
this.$refs.form.setRules(this.rules)
},
methods: {
submit() {
this.$refs.form.validate().then(res => {
updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => {
this.$modal.msgSuccess("修改成功")
})
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
.pwd-retrieve-container {
padding-top: 36rpx;
padding: 15px;
}
</style>

@ -1,78 +1,78 @@
<template>
<view class="setting-container" :style="{height: `${windowHeight}px`}">
<view class="menu-list">
<view class="list-cell list-cell-arrow" @click="handleToPwd">
<view class="menu-item-box">
<view class="iconfont icon-password menu-icon"></view>
<view>修改密码</view>
</view>
</view>
<view class="list-cell list-cell-arrow" @click="handleToUpgrade">
<view class="menu-item-box">
<view class="iconfont icon-refresh menu-icon"></view>
<view>检查更新</view>
</view>
</view>
<view class="list-cell list-cell-arrow" @click="handleCleanTmp">
<view class="menu-item-box">
<view class="iconfont icon-clean menu-icon"></view>
<view>清理缓存</view>
</view>
</view>
</view>
<view class="cu-list menu">
<view class="cu-item item-box">
<view class="content text-center" @click="handleLogout">
<text class="text-black">退出登录</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
windowHeight: uni.getSystemInfoSync().windowHeight
}
},
methods: {
handleToPwd() {
this.$tab.navigateTo('/pages/mine/pwd/index')
},
handleToUpgrade() {
this.$modal.showToast('模块建设中~')
},
handleCleanTmp() {
this.$modal.showToast('模块建设中~')
},
handleLogout() {
this.$modal.confirm('确定注销并退出系统吗?').then(() => {
this.$store.dispatch('LogOut').then(() => {
this.$tab.reLaunch('/pages/index')
})
})
}
}
}
</script>
<style lang="scss" scoped>
.page {
background-color: #f8f8f8;
}
.item-box {
background-color: #FFFFFF;
margin: 30rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 10rpx;
border-radius: 8rpx;
color: #303133;
font-size: 32rpx;
}
<template>
<view class="setting-container" :style="{height: `${windowHeight}px`}">
<view class="menu-list">
<view class="list-cell list-cell-arrow" @click="handleToPwd">
<view class="menu-item-box">
<view class="iconfont icon-password menu-icon"></view>
<view>修改密码</view>
</view>
</view>
<view class="list-cell list-cell-arrow" @click="handleToUpgrade">
<view class="menu-item-box">
<view class="iconfont icon-refresh menu-icon"></view>
<view>检查更新</view>
</view>
</view>
<view class="list-cell list-cell-arrow" @click="handleCleanTmp">
<view class="menu-item-box">
<view class="iconfont icon-clean menu-icon"></view>
<view>清理缓存</view>
</view>
</view>
</view>
<view class="cu-list menu">
<view class="cu-item item-box">
<view class="content text-center" @click="handleLogout">
<text class="text-black">退出登录</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
windowHeight: uni.getSystemInfoSync().windowHeight
}
},
methods: {
handleToPwd() {
this.$tab.navigateTo('/pages/mine/pwd/index')
},
handleToUpgrade() {
this.$modal.showToast('模块建设中~')
},
handleCleanTmp() {
this.$modal.showToast('模块建设中~')
},
handleLogout() {
this.$modal.confirm('确定注销并退出系统吗?').then(() => {
this.$store.dispatch('LogOut').then(() => {
this.$tab.reLaunch('/pages/index')
})
})
}
}
}
</script>
<style lang="scss" scoped>
.page {
background-color: #f8f8f8;
}
.item-box {
background-color: #FFFFFF;
margin: 30rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 10rpx;
border-radius: 8rpx;
color: #303133;
font-size: 32rpx;
}
</style>

@ -1,135 +0,0 @@
<template>
<view class="app-container">
<u-navbar title="消息列表" :autoBack="true" :placeholder="true" leftIcon="">
<view slot="right">
<text class="nav-right">全部清空</text>
</view>
</u-navbar>
<u-search
height="75rpx"
placeholder="搜索关键词"
v-model="keyword"
shape="square"
:showAction="false"
class="view-global"
bgColor="#fff"
></u-search>
<view class="msg-list">
<view class="msg-item view-global">
<view class="msg-icon" style="background-color: #367bef">
<u-badge
bgColor="#FE3434"
max="99"
value="9"
:absolute="true"
:offset="[0, 0]"
></u-badge>
<image src="/static/images/msg3.png" mode="aspectFill"></image>
</view>
<view class="msg-middle">
<view class="middle-main">执法二队-李小强</view>
<view class="middle-sub">这是一条普通的消息详情</view>
</view>
<view class="msg-date">19:18</view>
</view>
<view class="msg-item view-global">
<view class="msg-icon" style="background-color: #32b78b">
<u-badge
bgColor="#FE3434"
max="99"
value="99"
:absolute="true"
:offset="[0, 0]"
></u-badge>
<image src="/static/images/msg2.png" mode="aspectFill"></image>
</view>
<view class="msg-middle">
<view class="middle-main">消息通知</view>
<view class="middle-sub">这是一条普通的消息详情</view>
</view>
<view class="msg-date">19:18</view>
</view>
<view class="msg-item view-global">
<view class="msg-icon" style="background-color: #f08941">
<u-badge
bgColor="#FE3434"
max="99"
value="0"
:absolute="true"
:offset="[0, 0]"
></u-badge>
<image src="/static/images/msg1.png" mode="aspectFill"></image>
</view>
<view class="msg-middle">
<view class="middle-main">告警消息</view>
<view class="middle-sub">这是一条普通的消息详情</view>
</view>
<view class="msg-date">19:18</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
keyword: "",
};
},
onLoad() {},
};
</script>
<style lang="scss" scoped>
.msg-list {
.msg-item {
display: flex;
align-items: center;
background-color: #fff;
border-radius: 16rpx;
margin-top: 30rpx;
box-sizing: border-box;
padding: 20rpx;
.msg-icon {
position: relative;
height: 94rpx;
width: 94rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
image {
height: 44rpx;
width: 44rpx;
}
}
.msg-middle {
flex: 1;
box-sizing: border-box;
padding-left: 20rpx;
.middle-main {
font-size: 32rpx;
font-weight: bold;
color: #2e2f31;
}
.middle-sub {
margin-top: 12rpx;
font-size: 28rpx;
font-weight: 400;
color: #616367;
}
}
.msg-date {
font-size: 24rpx;
font-weight: 400;
color: #9da2ab;
}
}
}
</style>

@ -1,196 +0,0 @@
<template>
<view class="app-container">
<u-navbar title="消息列表" :autoBack="true" :placeholder="true" leftIcon="">
<view slot="right" @click="onAllclear">
<text class="nav-right">全部清空</text>
</view>
</u-navbar>
<u-search
height="75rpx"
placeholder="搜索关键词"
v-model="queryParams.title"
shape="square"
:showAction="false"
:clearabled="true"
class="view-global"
bgColor="#fff"
@search="onSearch"
@clear="onClear"
></u-search>
<view class="msg-list">
<view
class="msg-item view-global"
v-for="(item, index) in listMsgs"
:key="index"
>
<view class="msg-icon" style="background-color: #367bef">
<!-- value="9" -->
<u-badge
bgColor="#FE3434"
max="99"
:absolute="true"
:offset="[0, 0]"
></u-badge>
<image src="/static/images/msg3.png" mode="aspectFill"></image>
</view>
<view class="msg-middle">
<view class="middle-main">{{ item.title }}</view>
<view class="middle-sub">{{ item.content }}</view>
</view>
<view class="msg-date">{{ item.createTime }}</view>
</view>
<!-- <view class="msg-item view-global">
<view class="msg-icon" style="background-color: #32b78b">
<u-badge
bgColor="#FE3434"
max="99"
value="99"
:absolute="true"
:offset="[0, 0]"
></u-badge>
<image src="/static/images/msg2.png" mode="aspectFill"></image>
</view>
<view class="msg-middle">
<view class="middle-main">消息通知</view>
<view class="middle-sub">这是一条普通的消息详情</view>
</view>
<view class="msg-date">19:18</view>
</view>
<view class="msg-item view-global">
<view class="msg-icon" style="background-color: #f08941">
<u-badge
bgColor="#FE3434"
max="99"
value="0"
:absolute="true"
:offset="[0, 0]"
></u-badge>
<image src="/static/images/msg1.png" mode="aspectFill"></image>
</view>
<view class="msg-middle">
<view class="middle-main">告警消息</view>
<view class="middle-sub">这是一条普通的消息详情</view>
</view>
<view class="msg-date">19:18</view>
</view> -->
</view>
</view>
</template>
<script>
import { listNews, delNews } from "../../api/jn/news";
export default {
data() {
return {
listMsgs: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
title: "",
status: 0
},
};
},
onLoad() {
},
onShow() {
this.ListMsg();
},
methods: {
onAllclear() {
this.$modal.confirm('确定删除所有消息吗?').then(() => {
let ids = [];
this.listMsgs.forEach(element => {
ids.push(element.id);
});
if(ids.length == 0) {
return;
} else {
delNews(ids).then((res) => {
console.log(JSON.stringify(res),"删除接口");
if(res.code == 200) {
this.ListMsg();
}
});
}
})
},
onSearch() {
this.ListMsg();
},
onClear() {
this.queryParams.title = "";
this.ListMsg();
},
ListMsg() {
listNews(this.queryParams).then((res) => {
// console.log(res);
this.listMsgs = res.rows;
if(res.code == 200) {
uni.setTabBarBadge({
//
index: 1, //tabbar
text: res.total + '', //
});
}
});
},
},
};
</script>
<style lang="scss" scoped>
.msg-list {
.msg-item {
display: flex;
align-items: center;
background-color: #fff;
border-radius: 16rpx;
margin-top: 30rpx;
box-sizing: border-box;
padding: 20rpx;
.msg-icon {
position: relative;
height: 94rpx;
width: 94rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
image {
height: 44rpx;
width: 44rpx;
}
}
.msg-middle {
flex: 1;
box-sizing: border-box;
padding-left: 20rpx;
.middle-main {
font-size: 32rpx;
font-weight: bold;
color: #2e2f31;
}
.middle-sub {
margin-top: 12rpx;
font-size: 28rpx;
font-weight: 400;
color: #616367;
}
}
.msg-date {
font-size: 24rpx;
font-weight: 400;
color: #9da2ab;
}
}
}
</style>

@ -1,88 +0,0 @@
<template>
<view class="content">
<view class="param">{{ param }}</view>
</view>
</template>
<script>
import { getToken, setToken, removeToken } from "@/utils/auth";
import { getSqByaccesstoken, getUserinfo } from "@/api/jn/login.js";
export default {
data() {
return {
style: {
"padding-top": 0,
},
statusBarHeight: 0,
isApp: true,
webview: null,
param: "",
};
},
created() {},
mounted() {},
onLoad(options) {
let _this = this;
// #ifdef APP-PLUS
let curwebview = this.$mp.page.$getAppWebview();
this.webview = plus.webview.open(
"https://t-jn-development-manager.jsszkd.com/login?clientId=641775453324",
""
);
curwebview.append(this.webview);
this.webview.show();
this.webview.overrideUrlLoading({ mode: "reject" }, (e) => {
//,!url,.OK.json
console.warn("参数为:" + e.url);
// http://39.101.188.84:9999/demo/JiangNingUmale-App/#/?code=ckyb2r&clientId=641775453324&token=pygHmfvDNt4YxbucxXiIm0dN8d0IuLmd
// URL
var url = e.url;
console.warn("1:" + url);
//
var code = _this.getQueryString("code", url);
var clientId = _this.getQueryString("clientId", url);
var token = _this.getQueryString("token", url);
console.warn("code:" + _this.getQueryString("code", url));
console.warn("clientId:" + _this.getQueryString("clientId", url));
console.warn("token:" + _this.getQueryString("token", url));
if (token) {
uni.setStorageSync("token", token);
getSqByaccesstoken({ code: code,}).then((res) => {
// console.log("accessToken");
uni.setStorageSync("accessToken", res.data.accessToken);
return getUserinfo({accessToken: res.data.accessToken});
}).then((el) => {
this.$tab.switchTab("/pages/index");
uni.setStorageSync("userInfo", el.data);
setToken(el.data.token);
// location.reload();
console.log("用户信息", el);
});
}
});
// #endif
},
methods: {
getQueryString(name, url) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
const lastIndex = url.lastIndexOf("/");
const result = url.substring(lastIndex + 1);
const newUrl = result.replace(/\?/g, "&");
let r = newUrl.match(reg);
// console.log(r);
if (r != null) {
return decodeURIComponent(r[2]);
}
return null;
},
},
};
</script>
<style lang="less">
.content {
text-align: center;
}
</style>

@ -0,0 +1,183 @@
<template>
<view class="work-container">
<!-- 轮播图 -->
<uni-swiper-dot class="uni-swiper-dot-box" :info="data" :current="current" field="content">
<swiper class="swiper-box" :current="swiperDotIndex" @change="changeSwiper">
<swiper-item v-for="(item, index) in data" :key="index">
<view class="swiper-item" @click="clickBannerItem(item)">
<image :src="item.image" mode="aspectFill" :draggable="false" />
</view>
</swiper-item>
</swiper>
</uni-swiper-dot>
<!-- 宫格组件 -->
<uni-section title="系统管理" type="line"></uni-section>
<view class="grid-body">
<uni-grid :column="4" :showBorder="false" @change="changeGrid">
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="person-filled" size="30"></uni-icons>
<text class="text">用户管理</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="staff-filled" size="30"></uni-icons>
<text class="text">角色管理</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="color" size="30"></uni-icons>
<text class="text">菜单管理</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="settings-filled" size="30"></uni-icons>
<text class="text">部门管理</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="heart-filled" size="30"></uni-icons>
<text class="text">岗位管理</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="bars" size="30"></uni-icons>
<text class="text">字典管理</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="gear-filled" size="30"></uni-icons>
<text class="text">参数设置</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="chat-filled" size="30"></uni-icons>
<text class="text">通知公告</text>
</view>
</uni-grid-item>
<uni-grid-item>
<view class="grid-item-box">
<uni-icons type="wallet-filled" size="30"></uni-icons>
<text class="text">日志管理</text>
</view>
</uni-grid-item>
</uni-grid>
</view>
</view>
</template>
<script>
export default {
data() {
return {
current: 0,
swiperDotIndex: 0,
data: [{
image: '/static/images/banner/banner01.jpg'
},
{
image: '/static/images/banner/banner02.jpg'
},
{
image: '/static/images/banner/banner03.jpg'
}
]
}
},
methods: {
clickBannerItem(item) {
console.info(item)
},
changeSwiper(e) {
this.current = e.detail.current
},
changeGrid(e) {
this.$modal.showToast('模块建设中~')
}
}
}
</script>
<style lang="scss">
/* #ifndef APP-NVUE */
page {
display: flex;
flex-direction: column;
box-sizing: border-box;
background-color: #fff;
min-height: 100%;
height: auto;
}
view {
font-size: 14px;
line-height: inherit;
}
/* #endif */
.text {
text-align: center;
font-size: 26rpx;
margin-top: 10rpx;
}
.grid-item-box {
flex: 1;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
align-items: center;
justify-content: center;
padding: 15px 0;
}
.uni-margin-wrap {
width: 690rpx;
width: 100%;
;
}
.swiper {
height: 300rpx;
}
.swiper-box {
height: 150px;
}
.swiper-item {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
justify-content: center;
align-items: center;
color: #fff;
height: 300rpx;
line-height: 300rpx;
}
@media screen and (min-width: 500px) {
.uni-swiper-dot-box {
width: 400px;
/* #ifndef APP-NVUE */
margin: 0 auto;
/* #endif */
margin-top: 8px;
}
.image {
width: 100%;
}
}
</style>

@ -1,39 +1,39 @@
import { getToken, setToken, removeToken } from '@/utils/auth'
import { getToken } from '@/utils/auth'
// 登录页面
const loginPage = "/pages/myLogin"
// 页面白名单
const whiteList = [
'/pages/myLogin', '/pages/index', '/pages/login', '/pages/register', '/pages/common/webview/index'
]
// 检查地址白名单
function checkWhite(url) {
const path = url.split('?')[0]
return whiteList.indexOf(path) !== -1
}
// 页面跳转验证拦截器
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
list.forEach(item => {
uni.addInterceptor(item, {
invoke(to) {
console.log(to,"去往的页面");
if (getToken()) {
if (to.url === loginPage) {
uni.reLaunch({ url: "/" })
}
return true
} else {
if (checkWhite(to.url)) {
return true
}
uni.reLaunch({ url: loginPage })
return false
}
},
fail(err) {
console.log(err)
}
})
const loginPage = "/pages/login"
// 页面白名单
const whiteList = [
'/pages/login', '/pages/register', '/pages/common/webview/index'
]
// 检查地址白名单
function checkWhite(url) {
const path = url.split('?')[0]
return whiteList.indexOf(path) !== -1
}
// 页面跳转验证拦截器
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
list.forEach(item => {
uni.addInterceptor(item, {
invoke(to) {
if (getToken()) {
if (to.url === loginPage) {
uni.reLaunch({ url: "/" })
}
return true
} else {
if (checkWhite(to.url)) {
return true
}
uni.reLaunch({ url: loginPage })
return false
}
},
fail(err) {
console.log(err)
}
})
})

@ -1,60 +1,60 @@
import store from '@/store'
function authPermission(permission) {
const all_permission = "*:*:*"
const permissions = store.getters && store.getters.permissions
if (permission && permission.length > 0) {
return permissions.some(v => {
return all_permission === v || v === permission
})
} else {
return false
}
}
function authRole(role) {
const super_admin = "admin"
const roles = store.getters && store.getters.roles
if (role && role.length > 0) {
return roles.some(v => {
return super_admin === v || v === role
})
} else {
return false
}
}
export default {
// 验证用户是否具备某权限
hasPermi(permission) {
return authPermission(permission)
},
// 验证用户是否含有指定权限,只需包含其中一个
hasPermiOr(permissions) {
return permissions.some(item => {
return authPermission(item)
})
},
// 验证用户是否含有指定权限,必须全部拥有
hasPermiAnd(permissions) {
return permissions.every(item => {
return authPermission(item)
})
},
// 验证用户是否具备某角色
hasRole(role) {
return authRole(role)
},
// 验证用户是否含有指定角色,只需包含其中一个
hasRoleOr(roles) {
return roles.some(item => {
return authRole(item)
})
},
// 验证用户是否含有指定角色,必须全部拥有
hasRoleAnd(roles) {
return roles.every(item => {
return authRole(item)
})
}
}
import store from '@/store'
function authPermission(permission) {
const all_permission = "*:*:*"
const permissions = store.getters && store.getters.permissions
if (permission && permission.length > 0) {
return permissions.some(v => {
return all_permission === v || v === permission
})
} else {
return false
}
}
function authRole(role) {
const super_admin = "admin"
const roles = store.getters && store.getters.roles
if (role && role.length > 0) {
return roles.some(v => {
return super_admin === v || v === role
})
} else {
return false
}
}
export default {
// 验证用户是否具备某权限
hasPermi(permission) {
return authPermission(permission)
},
// 验证用户是否含有指定权限,只需包含其中一个
hasPermiOr(permissions) {
return permissions.some(item => {
return authPermission(item)
})
},
// 验证用户是否含有指定权限,必须全部拥有
hasPermiAnd(permissions) {
return permissions.every(item => {
return authPermission(item)
})
},
// 验证用户是否具备某角色
hasRole(role) {
return authRole(role)
},
// 验证用户是否含有指定角色,只需包含其中一个
hasRoleOr(roles) {
return roles.some(item => {
return authRole(item)
})
},
// 验证用户是否含有指定角色,必须全部拥有
hasRoleAnd(roles) {
return roles.every(item => {
return authRole(item)
})
}
}

@ -1,14 +1,14 @@
import tab from './tab'
import auth from './auth'
import modal from './modal'
export default {
install(Vue) {
// 页签操作
Vue.prototype.$tab = tab
// 认证对象
Vue.prototype.$auth = auth
// 模态框对象
Vue.prototype.$modal = modal
}
import auth from './auth'
import modal from './modal'
export default {
install(Vue) {
// 页签操作
Vue.prototype.$tab = tab
// 认证对象
Vue.prototype.$auth = auth
// 模态框对象
Vue.prototype.$modal = modal
}
}

@ -1,34 +0,0 @@
{
"type": "Feature",
"properties": {},
"geometry": {
"coordinates": [
[
120.73261373376607,
31.25073977461639
],
[
120.74078042393268,
31.25402113805667
],
[
120.74372043239208,
31.246387719524122
],
[
120.73541763072382,
31.244013786751168
],
[
120.73261373376607,
31.25073977461639
],
[
120.7328587344706,
31.250832864512475
]
],
"type": "LineString"
}
}
}

@ -1,34 +0,0 @@
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"coordinates": [
[
120.72749571970576,
31.258029375430894
],
[
120.73064263167993,
31.253765297491498
],
[
120.73807247779501,
31.256410834495384
],
[
120.7349777967234,
31.260395743950383
],
[
120.72746960425354,
31.258029375430894
]
],
"type": "LineString"
}
}
]
}

@ -1,74 +1,74 @@
export default {
// 消息提示
msg(content) {
uni.showToast({
title: content,
icon: 'none'
})
},
// 错误消息
msgError(content) {
uni.showToast({
title: content,
icon: 'error'
})
},
// 成功消息
msgSuccess(content) {
uni.showToast({
title: content,
icon: 'success'
})
},
// 隐藏消息
hideMsg(content) {
uni.hideToast()
},
// 弹出提示
alert(content, title) {
uni.showModal({
title: title || '系统提示',
content: content,
showCancel: false
})
},
// 确认窗体
confirm(content, title) {
return new Promise((resolve, reject) => {
uni.showModal({
title: title || '系统提示',
content: content,
cancelText: '取消',
confirmText: '确定',
success: function(res) {
if (res.confirm) {
resolve(res.confirm)
}
}
})
})
},
// 提示信息
showToast(option) {
if (typeof option === "object") {
uni.showToast(option)
} else {
uni.showToast({
title: option,
icon: "none",
duration: 2500
})
}
},
// 打开遮罩层
loading(content) {
uni.showLoading({
title: content,
icon: 'none'
})
},
// 关闭遮罩层
closeLoading() {
uni.hideLoading()
}
export default {
// 消息提示
msg(content) {
uni.showToast({
title: content,
icon: 'none'
})
},
// 错误消息
msgError(content) {
uni.showToast({
title: content,
icon: 'error'
})
},
// 成功消息
msgSuccess(content) {
uni.showToast({
title: content,
icon: 'success'
})
},
// 隐藏消息
hideMsg(content) {
uni.hideToast()
},
// 弹出提示
alert(content, title) {
uni.showModal({
title: title || '系统提示',
content: content,
showCancel: false
})
},
// 确认窗体
confirm(content, title) {
return new Promise((resolve, reject) => {
uni.showModal({
title: title || '系统提示',
content: content,
cancelText: '取消',
confirmText: '确定',
success: function(res) {
if (res.confirm) {
resolve(res.confirm)
}
}
})
})
},
// 提示信息
showToast(option) {
if (typeof option === "object") {
uni.showToast(option)
} else {
uni.showToast({
title: option,
icon: "none",
duration: 2500
})
}
},
// 打开遮罩层
loading(content) {
uni.showLoading({
title: content,
icon: 'none'
})
},
// 关闭遮罩层
closeLoading() {
uni.hideLoading()
}
}

@ -1,30 +1,30 @@
export default {
// 关闭所有页面,打开到应用内的某个页面
reLaunch(url) {
return uni.reLaunch({
url: url
})
},
// 跳转到tabBar页面并关闭其他所有非tabBar页面
switchTab(url) {
return uni.switchTab({
url: url
})
},
// 关闭当前页面,跳转到应用内的某个页面
redirectTo(url) {
return uni.redirectTo({
url: url
})
},
// 保留当前页面,跳转到应用内的某个页面
navigateTo(url) {
return uni.navigateTo({
url: url
})
},
// 关闭当前页面,返回上一页面或多级页面
navigateBack() {
return uni.navigateBack()
}
export default {
// 关闭所有页面,打开到应用内的某个页面
reLaunch(url) {
return uni.reLaunch({
url: url
})
},
// 跳转到tabBar页面并关闭其他所有非tabBar页面
switchTab(url) {
return uni.switchTab({
url: url
})
},
// 关闭当前页面,跳转到应用内的某个页面
redirectTo(url) {
return uni.redirectTo({
url: url
})
},
// 保留当前页面,跳转到应用内的某个页面
navigateTo(url) {
return uni.navigateTo({
url: url
})
},
// 关闭当前页面,返回上一页面或多级页面
navigateBack() {
return uni.navigateBack()
}
}

@ -23,23 +23,23 @@
.icon-code:before {
content: "\e699";
}
.icon-setting:before {
content: "\e6cc";
}
.icon-share:before {
content: "\e739";
}
}
.icon-edit:before {
content: "\e60c";
}
}
.icon-version:before {
content: "\e63f";
}
}
.icon-service:before {
content: "\e6ff";
}
@ -50,41 +50,41 @@
.icon-community:before {
content: "\e741";
}
}
.icon-people:before {
content: "\e736";
}
}
.icon-dianzan:before {
content: "\ec7f";
}
}
.icon-right:before {
content: "\e7eb";
}
}
.icon-logout:before {
content: "\e61d";
}
.icon-help:before {
content: "\e616";
}
}
.icon-github:before {
content: "\e628";
}
}
.icon-aixin:before {
content: "\e601";
}
.icon-clean:before {
content: "\e607";
}
.icon-refresh:before {
content: "\e604";
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

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

Loading…
Cancel
Save