This commit is contained in:
2025-06-19 14:41:13 +08:00
commit 321d04f8b5
342 changed files with 41412 additions and 0 deletions

1
ruoyi-plus-vben5 Submodule

Submodule ruoyi-plus-vben5 added at 529263a443

7
ruoyi-uniapp/.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
/unpackage/dist/*
/unpackage/cache/*
/unpackage/release/*
/node_modules/*
/.hbuilderx/*
/.idea/*
deploy.sh

29
ruoyi-uniapp/App.vue Normal file
View File

@@ -0,0 +1,29 @@
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
onLaunch() {
// 国际化,设置当前语言
if (this.vuex_locale){
this.$i18n.locale = this.vuex_locale;
this.$u.api.lang({lang: this.vuex_locale});
}
// 设置底部导航栏角标
uni.setTabBarBadge({
index: 0,
text: '3'
});
// uni.removeTabBarBadge({
// index: 0
// });
}
}
</script>
<style>
@import url("~@/static/iconfont/iconfont.css");
</style>
<style lang="scss">
@import "uview-ui/index.scss";
@import "pages/common/aidex.scss";
</style>

21
ruoyi-uniapp/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 皮皮大刺猬
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.

179
ruoyi-uniapp/README.md Normal file
View File

@@ -0,0 +1,179 @@
# RuoYi-Uniapp若依-手机端)开源啦
#### 介绍
&nbsp; &nbsp; 若依-Ruoyi APP 移动解决方案,基于 uniapp+uView 封装的一套基础模版开箱即用一份代码多终端适配支持H5+支付宝小程序+微信小程序+APP实现了与ruoyi-vue后台完美对接的移动解决方案可直接开始快速开发业务需求全新UI设计更多交互细节我们将为您提供极致的交互体验体验持续推出高质量的交互产品。
如果对您有帮助,您可以点右上角 “Star” 收藏一下 获取第一时间更新谢谢刚刚开源BUG修复中
* 感谢jeesite项目参考自[JeeSite Mobile Uni-App](https://gitee.com/thinkgem/jeesite4-uniapp)
* 感谢[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)
* 适配ruoyi-vue后端将doc下的java类放进去即可
#### 快速体验
2、微信小程序端扫码访问目前只能用用户名密码方式登录用户名admin 密码admin123<br><br>
<img src="https://images.gitee.com/uploads/images/2021/1115/214722_20aaf4c8_9700683.jpeg" width="220" height="220" >
## 基于RuoYi修改的美化皮肤的样式地址
- [🎉 RuoYi + vue2.x + Max + element-uivue2.x 支持 PC、平板、手机](http://82.157.44.212:8091/index)
- [🎉 RuoYi + vue3.x + Max + element-plusvue3.x 支持 PC、平板、手机](http://82.157.44.212:8090/index)
- [🎉 RuoYi + vue2.x + Max + element-ui + Cloudvue2.x 支持 PC、平板、手机](http://82.157.44.212:8093/index)
- [🎉 RuoYi + vue3.x + Max + element-plus + Cloudvue3.x 支持 PC、平板、手机](http://82.157.44.212:8092/index)
- [🎉 RuoYi + vue3.x + element-plus + uniapp2vue3.x 支持 PC、平板、手机](http://82.157.44.212:8094/#/)
#### 我的另一个项目:
**AiDex Sharp 快速开发平台** 基于著名的开源项目“ **若依-RuoYi-Vue** ”改造而成,追求 **极致的UI交互体验****快速开发** ,一切向 **效率** 看齐, **重构优化** 后端的代码,对前端页面进行了 **美化****我们将持续升级,持续完善,欢迎友友们收藏和点赞**
* [打开Aidex Sharp](https://gitee.com/big-hedgehog/aidex-sharp)
<table>
<tr>
<td><img src="https://images.gitee.com/uploads/images/2021/0923/234748_170e4ee7_9700683.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184210_ffa2880b_9700683.png"/></td>
</tr>
</table>
#### 如何使用uni-app端
##### 一、导入uniapp项目
1. 首先下载HBuilderX并安装地址https://www.dcloud.io/hbuilderx.html
2. 打开HBuilderX -> 顶部菜单栏 -> 文件 -> 导入 -> 从本地目录导入 -> 选择uniapp端项目目录
3. 找到common/config.js文件找到里面的apiUrl项填入已搭建的后端url地址
4. 打开manifest.json文件选择微信小程序配置填写小程序的appid
##### 二、本地调试
1. 打开HBuilderX -> 顶部菜单栏 -> 运行 -> 运行到浏览器 -> Chrome
2. 如果请求后端api时 提示跨域错误可安装Chrome插件【Allow CORS: Access-Control-Allow-Origin】地址https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf
##### 三、打包发行H5
1. 打开HBuilderX -> 顶部菜单栏 -> 发行 -> 网站H5-手机版
2. 打包后的文件路径:/unpackage/dist/build/h5
3. 将打包完成的所有文件 复制到商城后端/pulic目录下全部替换
##### 四、打包发行(微信小程序)
1. 下载微信开发者工具并安装地址https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
2. 打开HBuilderX -> 顶部菜单栏 -> 发行 -> 小程序-微信
3. 打包后的文件路径:/unpackage/dist/build/mp-weixin
5. 打开微信开发者工具 导入 打包完成的项目
6. 检查没有运行错误,在右上方上传小程序
##### 5、后端代码适配ruoyi-vue
1. 可以启动后端直接访问http://aidex.vip的公共服务如果要自己适配请将doc目录下的代码放到项目中即可。
#### 界面截图
<table>
<tr>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/184344_b519b98b_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223144_43bc09a8_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223205_fd09aab2_9700683.png" width="300" height="480"/></td>
</tr>
<tr>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223528_bd934103_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223553_5d4f27a1_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223612_8ca07db6_9700683.png" width="300" height="480"/></td>
</tr>
<tr>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223248_7d40c45c_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223306_a6be218d_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223324_a3415319_9700683.png" width="300" height="480"/></td>
</tr>
<tr>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223405_a7fd6593_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223424_398ebcde_9700683.png" width="300" height="480"/></td>
<td style="border:5px"><img src="https://images.gitee.com/uploads/images/2021/1112/223501_db695cd4_9700683.png" width="300" height="480"/></td>
</tr>
</table>
## 我的另一个项目:
**AiDex Sharp 快速开发平台** 基于著名的开源项目“ **若依-RuoYi-Vue** ”改造而成,追求 **极致的UI交互体验****快速开发** ,一切向 **效率** 看齐, **重构优化** 后端的代码,对前端页面进行了 **美化****我们将持续升级,持续完善,欢迎友友们收藏和点赞**
* [打开Aidex Sharp](https://gitee.com/big-hedgehog/aidex-sharp)
官方QQ群
Aidex Sharp快速开发平台3群 208511180 使用问题请入群由专人负责简答
## 后台系统截图
<table>
<tr>
<td><img src="https://images.gitee.com/uploads/images/2021/0923/234823_7d05456a_9700683.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2021/0923/234748_170e4ee7_9700683.png"/></td>
</tr>
<tr>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184041_c4d1f1aa_9700683.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184055_0cf08e45_9700683.png"/></td>
</tr>
<tr>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184110_2e6df64f_9700683.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184125_3d5bdddf_9700683.png"/></td>
</tr>
<tr>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184139_092a8f07_9700683.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2021/0922/225255_f8710fb3_9700683.png"/></td>
</tr>
<tr>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184210_ffa2880b_9700683.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184223_8f57f5f0_9700683.png"/></td>
</tr>
<tr>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184238_5cb3e09e_9700683.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2021/0911/184256_5bc77bff_9700683.png"/></td>
</tr>
</table>
更多功能请访问系统体验
## 在线体验
演示地址http://aidex.vip 帐号admin 密码admin123
#### uniapp知识
1. <a href="https://uniapp.dcloud.io/README" target="blank">uni-app介绍</a>
2. <a href="https://ke.qq.com/course/3169971" target="blank">uni-app 官方视频教程</a>
3. <a href="https://www.dcloud.io/hbuilderx.html" target="blank">uni-app开发工具 HBuilderX 下载及使用说明</a>
4. <a href="http://ask.dcloud.net.cn/article/35657" target="blank">uni-app是什么能解决什么问题</a>
5. <a href="https://uniapp.dcloud.io/vue-basics" target="blank">Vue.js相关文档、视频教程</a>
#### 技术手册
* <a href="https://uniapp.dcloud.io/collocation/pages" target="blank">uni-app 框架文档</a>
* <a href="https://uniapp.dcloud.io/component/README" target="blank">uni-app 组件文档</a>
* <a href="https://uviewui.com/components/intro.html" target="blank">uView 组件文档</a>
* <a href="https://uviewui.com/js/intro.html" target="blank">uView JS 文档</a>
#### 授权许可协议条款
1. Ruoyi-Uniapp采用MIT开源协议协议。
2. 代码可用于个人项目等接私活或企业项目脚手架使用Ruoyi-Uniapp开源版完全免费。
3. 允许进行商用,但是不允许二次开源出来并进行收费,否则将追究侵权者法律责任。
4. 请不要删除和修改Ruoyi-Uniapp源码头部的版权与作者声明及出处。
5. 不得进行简单修改包装声称是自己的项目。
6. 我们已经申请了相关的软件开发著作权和相关登记
7. 需要在您的软件介绍明显位置说明出处举例本软件基于Ruoyi-Uniapp手机端
#### 关于我们
&nbsp; &nbsp; 我们擅长UI、前端开发、后端架构有一颗热爱开源的心致力于打造企业级的通用产品设计UI体系让项目
或者更直观更高效、更简单未来将持续关注UI交互持续推出高质量的交互产品。
######
<img src="https://images.gitee.com/uploads/images/2021/1112/114326_5eb079c2_9700683.jpeg" width="220" height="220" >&nbsp; &nbsp; &nbsp;&nbsp;
<img src="https://images.gitee.com/uploads/images/2021/1112/114207_bb1bac92_9700683.jpeg" width="220" height="220" >&nbsp; &nbsp; &nbsp;&nbsp;
<img src="https://images.gitee.com/uploads/images/2021/1115/164243_d4e0d61d_9700683.png" width="220" height="220" >&nbsp; &nbsp; &nbsp;&nbsp;
版权所有Copyright © 2017-2021 By AiDex (http://www.aidex.vip) All rights reserved

View File

@@ -0,0 +1,74 @@
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], function() {factory(root);});
} else factory(root);
// node.js has always supported base64 conversions, while browsers that support
// web workers support base64 too, but you may never know.
})(typeof exports !== "undefined" ? exports : this, function(root) {
if (root.atob) {
// Some browsers' implementation of atob doesn't support whitespaces
// in the encoded string (notably, IE). This wraps the native atob
// in a function that strips the whitespaces.
// The original function can be retrieved in atob.original
try {
root.atob(" ");
} catch(e) {
root.atob = (function(atob) {
var func = function(string) {
return atob(String(string).replace(/[\t\n\f\r ]+/g, ""));
};
func.original = atob;
return func;
})(root.atob);
}
return;
}
// base64 character set, plus padding character (=)
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// Regular expression to check formal correctness of base64 encoded strings
b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
root.btoa = function(string) {
string = String(string);
var bitmap, a, b, c,
result = "", i = 0,
rest = string.length % 3; // To determine the final padding
for (; i < string.length;) {
if ((a = string.charCodeAt(i++)) > 255
|| (b = string.charCodeAt(i++)) > 255
|| (c = string.charCodeAt(i++)) > 255)
throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
bitmap = (a << 16) | (b << 8) | c;
result += b64.charAt(bitmap >> 18 & 63) + b64.charAt(bitmap >> 12 & 63)
+ b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63);
}
// If there's need of padding, replace the last 'A's with equal signs
return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
};
root.atob = function(string) {
// atob can work with strings with whitespaces, even inside the encoded part,
// but only \t, \n, \f, \r and ' ', which can be stripped.
string = String(string).replace(/[\t\n\f\r ]+/g, "");
if (!b64re.test(string))
throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
// Adding the padding if missing, for semplicity
string += "==".slice(2 - (string.length & 3));
var bitmap, result = "", r1, r2, i = 0;
for (; i < string.length;) {
bitmap = b64.indexOf(string.charAt(i++)) << 18 | b64.indexOf(string.charAt(i++)) << 12
| (r1 = b64.indexOf(string.charAt(i++))) << 6 | (r2 = b64.indexOf(string.charAt(i++)));
result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255)
: r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255)
: String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
}
return result;
};
});

View File

@@ -0,0 +1,15 @@
/**
* 通用js方法封装处理
* Copyright (c) 2019 aidex
*/
export function replaceAll (text,stringToFind,stringToReplace) {
if ( stringToFind == stringToReplace) return this;
var temp = text;
var index = temp.indexOf(stringToFind);
while (index != -1) {
temp = temp.replace(stringToFind, stringToReplace);
index = temp.indexOf(stringToFind);
}
return temp;
}

View File

@@ -0,0 +1,29 @@
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
const config = {
// 产品名称
productName: 'Aidex Mobile',
// 公司名称
companyName: 'Aidex',
// 产品版本号
productVersion: 'V4.3.0',
// 版本检查标识
appCode: 'android',
// 内部版本号码
appVersion: 1,
// 管理基础路径
adminPath: ''
}
// 设置后台接口服务的基础地址
config.baseUrl = 'https://aidex.vip/api';
export default config;

View File

@@ -0,0 +1,76 @@
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
// 此处第二个参数vm就是我们在页面使用的this你可以通过vm获取vuex等操作
const install = (Vue, vm) => {
// 参数配置对象
const config = vm.vuex_config;
// 将各个定义的接口名称统一放进对象挂载到vm.$u.api(因为vm就是this也即this.$u.api)下
vm.$u.api = {
// 基础服务:登录登出、身份信息、菜单授权、切换系统、字典数据等
lang: (params = {}) => vm.$u.get('/lang/'+params.lang),
index: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index', params),
getUserInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/user/getUserInfo', params),
login: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/loginByPassword', params),
sendCode: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/sendCode', params),
registerUser: (params = {}) => vm.$u.post(config.adminPath+'/mobile/user/registerUser', params),
//首页相关api
getIndexCardInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getIndexCardInfo', params),
getM2mOrderFlowList: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getM2mOrderFlowList', params),
//获取卡可购买套餐包
getM2mOrderPackageList: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getM2mOrderPackageList', params),
logout: (params = {}) => vm.$u.get(config.adminPath+'/mobile/login/logout', params),
authInfo: (params = {}) => vm.$u.get(config.adminPath+'/authInfo', params),
menuTree: (params = {}) => vm.$u.get(config.adminPath+'/menuTree', params),
switchSys: (params = {}) => vm.$u.get(config.adminPath+'/switch/'+params.sysCode),
dictData: (params = {}) => vm.$u.get(config.adminPath+'/system/dict/data/type/'+params.dictType),
// 账号服务:验证码接口、忘记密码接口、注册账号接口等
validCode: (params = {}) => vm.$u.getText('/validCode', params),
getFpValidCode: (params = {}) => vm.$u.post('/account/getFpValidCode', params),
savePwdByValidCode: (params = {}) => vm.$u.post('/account/savePwdByValidCode', params),
getRegValidCode: (params = {}) => vm.$u.post('/account/getRegValidCode', params),
saveRegByValidCode: (params = {}) => vm.$u.post('/account/saveRegByValidCode', params),
// APP公共服务
upgradeCheck: () => vm.$u.post('/app/upgrade/check', {appCode: config.appCode, appVersion: config.appVersion}),
commentSave: (params = {}) => vm.$u.post('/app/comment/save', params),
// 个人信息修改
user: {
saveUserInfo: (params = {}) => vm.$u.post(config.adminPath+'/mobile/user/saveUserInfo', params),
infoSavePwd: (params = {}) => vm.$u.put(config.adminPath+'/system/user/profile/updatePwd', params),
infoSavePqa: (params = {}) => vm.$u.post(config.adminPath+'/sys/user/infoSavePqa', params),
},
// 员工用户查询
empUser: {
listData: (params = {}) => vm.$u.get(config.adminPath+'/sys/empUser/listData', params),
},
// 组织机构查询
office: {
treeData: (params = {}) => vm.$u.get(config.adminPath+'/sys/office/treeData', params),
},
// 增删改查例子
testData: {
form: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/form', params),
list: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/listData', params),
save: (params = {}) => vm.$u.postJson(config.adminPath+'/test/testData/save', params),
disable: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/disable', params),
enable: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/enable', params),
delete: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/delete', params),
},
};
}
export default {
install
}

View File

@@ -0,0 +1,120 @@
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
// 此处第二个参数vm就是我们在页面使用的this你可以通过vm获取vuex等操作
const install = (Vue, vm) => {
// 通用请求头设定
const ajaxHeader = 'x-ajax';
const sessionIdHeader = 'Authorization';
const rememberMeHeader = 'x-remember';
// 请求参数默认配置
Vue.prototype.$u.http.setConfig({
baseUrl: vm.vuex_config.baseUrl,
originalData: true,
// 默认头部http2约定header名称统一小写 aidex
header: {
'content-type': 'application/x-www-form-urlencoded',
'x-requested-with': 'XMLHttpRequest'
}
});
// 请求拦截配置Token等参数
Vue.prototype.$u.http.interceptor.request = (req) => {
if (!req.header){
req.header = [];
}
req.header["source"] = "app";
// 默认指定返回 JSON 数据
if (!req.header[ajaxHeader]){
req.header[ajaxHeader] = 'json';
}
// 设定传递 Token 认证参数 aidex
if (!req.header[sessionIdHeader] && vm.vuex_token){
req.header[sessionIdHeader] = vm.vuex_token;
}
// 为节省流量,记住我数据不是每次都发送的,当会话失效后,尝试重试登录 aidex
if (!req.header[rememberMeHeader] && vm.vuex_remember && req.remember){
req.header[rememberMeHeader] = vm.vuex_remember;
req.remember = false;
}
console.log('request', req);
return req;
}
// 响应拦截,判断状态码是否通过
Vue.prototype.$u.http.interceptor.response = async (res, req) => {
console.log('response', res);
let data = res.data;
if (!(data)){
vm.$u.toast('未连接到服务器')
return false;
}
if (typeof data === 'object' && !(data instanceof Array)){
if (data.token){
vm.$u.vuex('vuex_token', data.token);
if (data.user){
vm.$u.vuex('vuex_user', data.user);
}
vm.$u.vuex('vuex_isAgent', data.isAgent);
}
if (data.result === 'login'){
vm.$u.vuex('vuex_user', {});
if (req.tryagain == undefined || req.tryagain){
req.tryagain = false; req.remember = true;
await vm.$u.http.request(req).then(res => {
data = res;
});
}
if (data.result === 'login'){
if (!req.data.loginCheck){
vm.$u.toast(data.msg);
}
req.tryagain = true;
}
}
}
if (res.header && res.header[rememberMeHeader]){
let remember = res.header[rememberMeHeader];
if (remember && remember != 'deleteMe'){
vm.$u.vuex('vuex_remember', remember);
}else{
vm.$u.vuex('vuex_remember', '');
}
}
return data;
}
// 封装 get text 请求
vm.$u.getText = (url, data = {}, header = {}) => {
return vm.$u.http.request({
dataType: 'text',
method: 'GET',
url,
header,
data
})
}
// 封装 post json 请求
vm.$u.postJson = (url, data = {}, header = {}) => {
header['content-type'] = 'application/json';
return vm.$u.http.request({
url,
method: 'POST',
header,
data
})
}
}
export default {
install
}

View File

@@ -0,0 +1,34 @@
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
common: {
title: 'Aidex',
},
nav: {
home: 'Home',
user: 'User',
msg: 'Msg'
},
login: {
title: 'Login',
placeholderAccount: 'Enter Account',
placeholderPassword: 'Enter Password',
autoLogin: 'Auto Login',
loginButton: 'Login',
logoutButton: 'Logout',
forget: 'Forget Password',
reg: 'Resister Account',
noLogin: 'No Login'
},
home: {
title: 'Home'
},
user: {
title: 'User'
},
msg: {
title: 'Message'
}
}

View File

@@ -0,0 +1,41 @@
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
common: {
title: 'Aidex',
},
nav: {
home: '消息',
workbench: '工作台',
user: '我的',
book: '通讯录',
msg: '消息',
},
login: {
title: '登录',
placeholderAccount: '请输入账号',
placeholderPassword: '请输入密码',
autoLogin: '自动登录',
loginButton: '登录',
logoutButton: '退出登录',
forget: '忘记密码',
reg: '注册账号',
noLogin: '未登录'
},
home: {
title: '消息'
},
workbench: {
title: '工作台'
},
user: {
title: '用户中心'
},
msg: {
title: '消息'
},
book: {
title: '通讯录'
}
}

View File

@@ -0,0 +1,751 @@
(function (factory) {
if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
// AMD
define(factory);
} else {
// Browser globals (with support for web workers)
var glob;
try {
glob = window;
} catch (e) {
glob = self;
}
glob.SparkMD5 = factory();
}
}(function (undefined) {
'use strict';
/*
* Fastest md5 implementation around (JKM md5).
* Credits: Joseph Myers
*
* @see http://www.myersdaily.org/joseph/javascript/md5-text.html
* @see http://jsperf.com/md5-shootout/7
*/
/* this function is much faster,
so if possible we use it. Some IEs
are the only ones I know of that
need the idiotic second function,
generated by an if clause. */
var add32 = function (a, b) {
return (a + b) & 0xFFFFFFFF;
},
hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
function cmn(q, a, b, x, s, t) {
a = add32(add32(a, q), add32(x, t));
return add32((a << s) | (a >>> (32 - s)), b);
}
function md5cycle(x, k) {
var a = x[0],
b = x[1],
c = x[2],
d = x[3];
a += (b & c | ~b & d) + k[0] - 680876936 | 0;
a = (a << 7 | a >>> 25) + b | 0;
d += (a & b | ~a & c) + k[1] - 389564586 | 0;
d = (d << 12 | d >>> 20) + a | 0;
c += (d & a | ~d & b) + k[2] + 606105819 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a) + k[3] - 1044525330 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a += (b & c | ~b & d) + k[4] - 176418897 | 0;
a = (a << 7 | a >>> 25) + b | 0;
d += (a & b | ~a & c) + k[5] + 1200080426 | 0;
d = (d << 12 | d >>> 20) + a | 0;
c += (d & a | ~d & b) + k[6] - 1473231341 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a) + k[7] - 45705983 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a += (b & c | ~b & d) + k[8] + 1770035416 | 0;
a = (a << 7 | a >>> 25) + b | 0;
d += (a & b | ~a & c) + k[9] - 1958414417 | 0;
d = (d << 12 | d >>> 20) + a | 0;
c += (d & a | ~d & b) + k[10] - 42063 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a) + k[11] - 1990404162 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a += (b & c | ~b & d) + k[12] + 1804603682 | 0;
a = (a << 7 | a >>> 25) + b | 0;
d += (a & b | ~a & c) + k[13] - 40341101 | 0;
d = (d << 12 | d >>> 20) + a | 0;
c += (d & a | ~d & b) + k[14] - 1502002290 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a) + k[15] + 1236535329 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a += (b & d | c & ~d) + k[1] - 165796510 | 0;
a = (a << 5 | a >>> 27) + b | 0;
d += (a & c | b & ~c) + k[6] - 1069501632 | 0;
d = (d << 9 | d >>> 23) + a | 0;
c += (d & b | a & ~b) + k[11] + 643717713 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a | d & ~a) + k[0] - 373897302 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a += (b & d | c & ~d) + k[5] - 701558691 | 0;
a = (a << 5 | a >>> 27) + b | 0;
d += (a & c | b & ~c) + k[10] + 38016083 | 0;
d = (d << 9 | d >>> 23) + a | 0;
c += (d & b | a & ~b) + k[15] - 660478335 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a | d & ~a) + k[4] - 405537848 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a += (b & d | c & ~d) + k[9] + 568446438 | 0;
a = (a << 5 | a >>> 27) + b | 0;
d += (a & c | b & ~c) + k[14] - 1019803690 | 0;
d = (d << 9 | d >>> 23) + a | 0;
c += (d & b | a & ~b) + k[3] - 187363961 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a | d & ~a) + k[8] + 1163531501 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a += (b & d | c & ~d) + k[13] - 1444681467 | 0;
a = (a << 5 | a >>> 27) + b | 0;
d += (a & c | b & ~c) + k[2] - 51403784 | 0;
d = (d << 9 | d >>> 23) + a | 0;
c += (d & b | a & ~b) + k[7] + 1735328473 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a | d & ~a) + k[12] - 1926607734 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a += (b ^ c ^ d) + k[5] - 378558 | 0;
a = (a << 4 | a >>> 28) + b | 0;
d += (a ^ b ^ c) + k[8] - 2022574463 | 0;
d = (d << 11 | d >>> 21) + a | 0;
c += (d ^ a ^ b) + k[11] + 1839030562 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a) + k[14] - 35309556 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a += (b ^ c ^ d) + k[1] - 1530992060 | 0;
a = (a << 4 | a >>> 28) + b | 0;
d += (a ^ b ^ c) + k[4] + 1272893353 | 0;
d = (d << 11 | d >>> 21) + a | 0;
c += (d ^ a ^ b) + k[7] - 155497632 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a) + k[10] - 1094730640 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a += (b ^ c ^ d) + k[13] + 681279174 | 0;
a = (a << 4 | a >>> 28) + b | 0;
d += (a ^ b ^ c) + k[0] - 358537222 | 0;
d = (d << 11 | d >>> 21) + a | 0;
c += (d ^ a ^ b) + k[3] - 722521979 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a) + k[6] + 76029189 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a += (b ^ c ^ d) + k[9] - 640364487 | 0;
a = (a << 4 | a >>> 28) + b | 0;
d += (a ^ b ^ c) + k[12] - 421815835 | 0;
d = (d << 11 | d >>> 21) + a | 0;
c += (d ^ a ^ b) + k[15] + 530742520 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a) + k[2] - 995338651 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;
a = (a << 6 | a >>> 26) + b | 0;
d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;
d = (d << 10 | d >>> 22) + a | 0;
c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;
b = (b << 21 |b >>> 11) + c | 0;
a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;
a = (a << 6 | a >>> 26) + b | 0;
d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;
d = (d << 10 | d >>> 22) + a | 0;
c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;
b = (b << 21 |b >>> 11) + c | 0;
a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;
a = (a << 6 | a >>> 26) + b | 0;
d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;
d = (d << 10 | d >>> 22) + a | 0;
c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;
b = (b << 21 |b >>> 11) + c | 0;
a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;
a = (a << 6 | a >>> 26) + b | 0;
d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;
d = (d << 10 | d >>> 22) + a | 0;
c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;
b = (b << 21 | b >>> 11) + c | 0;
x[0] = a + x[0] | 0;
x[1] = b + x[1] | 0;
x[2] = c + x[2] | 0;
x[3] = d + x[3] | 0;
}
function md5blk(s) {
var md5blks = [],
i; /* Andy King said do it this way. */
for (i = 0; i < 64; i += 4) {
md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
}
return md5blks;
}
function md5blk_array(a) {
var md5blks = [],
i; /* Andy King said do it this way. */
for (i = 0; i < 64; i += 4) {
md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);
}
return md5blks;
}
function md51(s) {
var n = s.length,
state = [1732584193, -271733879, -1732584194, 271733878],
i,
length,
tail,
tmp,
lo,
hi;
for (i = 64; i <= n; i += 64) {
md5cycle(state, md5blk(s.substring(i - 64, i)));
}
s = s.substring(i - 64);
length = s.length;
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
}
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
if (i > 55) {
md5cycle(state, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
// Beware that the final length might not fit in 32 bits so we take care of that
tmp = n * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(state, tail);
return state;
}
function md51_array(a) {
var n = a.length,
state = [1732584193, -271733879, -1732584194, 271733878],
i,
length,
tail,
tmp,
lo,
hi;
for (i = 64; i <= n; i += 64) {
md5cycle(state, md5blk_array(a.subarray(i - 64, i)));
}
// Not sure if it is a bug, however IE10 will always produce a sub array of length 1
// containing the last element of the parent array if the sub array specified starts
// beyond the length of the parent array - weird.
// https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue
a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);
length = a.length;
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= a[i] << ((i % 4) << 3);
}
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
if (i > 55) {
md5cycle(state, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
// Beware that the final length might not fit in 32 bits so we take care of that
tmp = n * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(state, tail);
return state;
}
function rhex(n) {
var s = '',
j;
for (j = 0; j < 4; j += 1) {
s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];
}
return s;
}
function hex(x) {
var i;
for (i = 0; i < x.length; i += 1) {
x[i] = rhex(x[i]);
}
return x.join('');
}
// In some cases the fast add32 function cannot be used..
if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {
add32 = function (x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
};
}
// ---------------------------------------------------
/**
* ArrayBuffer slice polyfill.
*
* @see https://github.com/ttaubert/node-arraybuffer-slice
*/
if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {
(function () {
function clamp(val, length) {
val = (val | 0) || 0;
if (val < 0) {
return Math.max(val + length, 0);
}
return Math.min(val, length);
}
ArrayBuffer.prototype.slice = function (from, to) {
var length = this.byteLength,
begin = clamp(from, length),
end = length,
num,
target,
targetArray,
sourceArray;
if (to !== undefined) {
end = clamp(to, length);
}
if (begin > end) {
return new ArrayBuffer(0);
}
num = end - begin;
target = new ArrayBuffer(num);
targetArray = new Uint8Array(target);
sourceArray = new Uint8Array(this, begin, num);
targetArray.set(sourceArray);
return target;
};
})();
}
// ---------------------------------------------------
/**
* Helpers.
*/
function toUtf8(str) {
if (/[\u0080-\uFFFF]/.test(str)) {
str = unescape(encodeURIComponent(str));
}
return str;
}
function utf8Str2ArrayBuffer(str, returnUInt8Array) {
var length = str.length,
buff = new ArrayBuffer(length),
arr = new Uint8Array(buff),
i;
for (i = 0; i < length; i += 1) {
arr[i] = str.charCodeAt(i);
}
return returnUInt8Array ? arr : buff;
}
function arrayBuffer2Utf8Str(buff) {
return String.fromCharCode.apply(null, new Uint8Array(buff));
}
function concatenateArrayBuffers(first, second, returnUInt8Array) {
var result = new Uint8Array(first.byteLength + second.byteLength);
result.set(new Uint8Array(first));
result.set(new Uint8Array(second), first.byteLength);
return returnUInt8Array ? result : result.buffer;
}
function hexToBinaryString(hex) {
var bytes = [],
length = hex.length,
x;
for (x = 0; x < length - 1; x += 2) {
bytes.push(parseInt(hex.substr(x, 2), 16));
}
return String.fromCharCode.apply(String, bytes);
}
// ---------------------------------------------------
/**
* SparkMD5 OOP implementation.
*
* Use this class to perform an incremental md5, otherwise use the
* static methods instead.
*/
function SparkMD5() {
// call reset to init the instance
this.reset();
}
/**
* Appends a string.
* A conversion will be applied if an utf8 string is detected.
*
* @param {String} str The string to be appended
*
* @return {SparkMD5} The instance itself
*/
SparkMD5.prototype.append = function (str) {
// Converts the string to utf8 bytes if necessary
// Then append as binary
this.appendBinary(toUtf8(str));
return this;
};
/**
* Appends a binary string.
*
* @param {String} contents The binary string to be appended
*
* @return {SparkMD5} The instance itself
*/
SparkMD5.prototype.appendBinary = function (contents) {
this._buff += contents;
this._length += contents.length;
var length = this._buff.length,
i;
for (i = 64; i <= length; i += 64) {
md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));
}
this._buff = this._buff.substring(i - 64);
return this;
};
/**
* Finishes the incremental computation, reseting the internal state and
* returning the result.
*
* @param {Boolean} raw True to get the raw string, false to get the hex string
*
* @return {String} The result
*/
SparkMD5.prototype.end = function (raw) {
var buff = this._buff,
length = buff.length,
i,
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
ret;
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);
}
this._finish(tail, length);
ret = hex(this._hash);
if (raw) {
ret = hexToBinaryString(ret);
}
this.reset();
return ret;
};
/**
* Resets the internal state of the computation.
*
* @return {SparkMD5} The instance itself
*/
SparkMD5.prototype.reset = function () {
this._buff = '';
this._length = 0;
this._hash = [1732584193, -271733879, -1732584194, 271733878];
return this;
};
/**
* Gets the internal state of the computation.
*
* @return {Object} The state
*/
SparkMD5.prototype.getState = function () {
return {
buff: this._buff,
length: this._length,
hash: this._hash.slice()
};
};
/**
* Gets the internal state of the computation.
*
* @param {Object} state The state
*
* @return {SparkMD5} The instance itself
*/
SparkMD5.prototype.setState = function (state) {
this._buff = state.buff;
this._length = state.length;
this._hash = state.hash;
return this;
};
/**
* Releases memory used by the incremental buffer and other additional
* resources. If you plan to use the instance again, use reset instead.
*/
SparkMD5.prototype.destroy = function () {
delete this._hash;
delete this._buff;
delete this._length;
};
/**
* Finish the final calculation based on the tail.
*
* @param {Array} tail The tail (will be modified)
* @param {Number} length The length of the remaining buffer
*/
SparkMD5.prototype._finish = function (tail, length) {
var i = length,
tmp,
lo,
hi;
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
if (i > 55) {
md5cycle(this._hash, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
// Do the final computation based on the tail and length
// Beware that the final length may not fit in 32 bits so we take care of that
tmp = this._length * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(this._hash, tail);
};
/**
* Performs the md5 hash on a string.
* A conversion will be applied if utf8 string is detected.
*
* @param {String} str The string
* @param {Boolean} [raw] True to get the raw string, false to get the hex string
*
* @return {String} The result
*/
SparkMD5.hash = function (str, raw) {
// Converts the string to utf8 bytes if necessary
// Then compute it using the binary function
return SparkMD5.hashBinary(toUtf8(str), raw);
};
/**
* Performs the md5 hash on a binary string.
*
* @param {String} content The binary string
* @param {Boolean} [raw] True to get the raw string, false to get the hex string
*
* @return {String} The result
*/
SparkMD5.hashBinary = function (content, raw) {
var hash = md51(content),
ret = hex(hash);
return raw ? hexToBinaryString(ret) : ret;
};
// ---------------------------------------------------
/**
* SparkMD5 OOP implementation for array buffers.
*
* Use this class to perform an incremental md5 ONLY for array buffers.
*/
SparkMD5.ArrayBuffer = function () {
// call reset to init the instance
this.reset();
};
/**
* Appends an array buffer.
*
* @param {ArrayBuffer} arr The array to be appended
*
* @return {SparkMD5.ArrayBuffer} The instance itself
*/
SparkMD5.ArrayBuffer.prototype.append = function (arr) {
var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),
length = buff.length,
i;
this._length += arr.byteLength;
for (i = 64; i <= length; i += 64) {
md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));
}
this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);
return this;
};
/**
* Finishes the incremental computation, reseting the internal state and
* returning the result.
*
* @param {Boolean} raw True to get the raw string, false to get the hex string
*
* @return {String} The result
*/
SparkMD5.ArrayBuffer.prototype.end = function (raw) {
var buff = this._buff,
length = buff.length,
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
i,
ret;
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= buff[i] << ((i % 4) << 3);
}
this._finish(tail, length);
ret = hex(this._hash);
if (raw) {
ret = hexToBinaryString(ret);
}
this.reset();
return ret;
};
/**
* Resets the internal state of the computation.
*
* @return {SparkMD5.ArrayBuffer} The instance itself
*/
SparkMD5.ArrayBuffer.prototype.reset = function () {
this._buff = new Uint8Array(0);
this._length = 0;
this._hash = [1732584193, -271733879, -1732584194, 271733878];
return this;
};
/**
* Gets the internal state of the computation.
*
* @return {Object} The state
*/
SparkMD5.ArrayBuffer.prototype.getState = function () {
var state = SparkMD5.prototype.getState.call(this);
// Convert buffer to a string
state.buff = arrayBuffer2Utf8Str(state.buff);
return state;
};
/**
* Gets the internal state of the computation.
*
* @param {Object} state The state
*
* @return {SparkMD5.ArrayBuffer} The instance itself
*/
SparkMD5.ArrayBuffer.prototype.setState = function (state) {
// Convert string to buffer
state.buff = utf8Str2ArrayBuffer(state.buff, true);
return SparkMD5.prototype.setState.call(this, state);
};
SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;
SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;
/**
* Performs the md5 hash on an array buffer.
*
* @param {ArrayBuffer} arr The array buffer
* @param {Boolean} [raw] True to get the raw string, false to get the hex one
*
* @return {String} The result
*/
SparkMD5.ArrayBuffer.hash = function (arr, raw) {
var hash = md51_array(new Uint8Array(arr)),
ret = hex(hash);
return raw ? hexToBinaryString(ret) : ret;
};
return SparkMD5;
}));

1459
ruoyi-uniapp/common/uni.css Normal file

File diff suppressed because it is too large Load Diff

6
ruoyi-uniapp/common/vue-i18n.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,64 @@
<template>
<view class="wrap wrap-home">
<u-navbar :title="title" height="44" :is-back="false">
<!-- #ifdef APP-PLUS --><!-- #endif -->
<view slot="right">
<view style="color: #22262d;font-size: 20px;" class="iconfont icon-setting-two" @click="navTo('/pages/sys/user/setting')"></view>
</view>
<u-avatar class="home-head" :src="avatarUrl" @click="show = true"></u-avatar>
</u-navbar>
</view>
</template>
<script>
export default {
props: {
title: {
type: String,
required: true
}
},
data() {
return {
src: '',
show: false,
};
},
onLoad() {
},
computed: {
avatarUrl() {
var url = this.vuex_config.baseUrl + this.vuex_user.avatar || '/static/aidex/tabbar/my_2.png';
url = this.replaceAll(url,'\\','/');
return url + '?t=' + new Date().getTime();
}
},
methods: {
showPersonalInfo() {
this.show = true
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
};
</script>
<style lang="scss">
.slot-wrap {
display: flex;
align-items: center;
/* 如果您想让slot内容占满整个导航栏的宽度 */
/* flex: 1; */
/* 如果您想让slot内容与导航栏左右有空隙 */
/* padding: 0 30rpx; */
}
page {
background-color: #ffffff;
}
</style>

Binary file not shown.

50
ruoyi-uniapp/h5.html Normal file
View File

@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="PoweredByAidex"/>
<meta name="description" content="PoweredByAidex"/>
<link rel="shortcut icon" type="image/x-icon" href="<%= BASE_URL %>static/aidex/favicon.png">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title><%= htmlWebpackPlugin.options.title %></title>
<script>
window.onresize = function () {
if (document.documentElement.clientWidth >= 768) {
window.location.href = '<%= BASE_URL %>static/#/';
}
};
window.onresize();
</script>
<!-- 正式发布的时候使用,开发期间不启用。↓ -->
<script src="<%= BASE_URL %>static/common/js/touch-emulator.js"></script>
<script>
TouchEmulator();
</script>
<style>
::-webkit-scrollbar{
display: none;
}
</style>
<!-- 正式发布的时候使用,开发期间不启用。↑ -->
<script>
document.addEventListener('DOMContentLoaded', function() {
document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
})
</script>
<link rel="stylesheet" href="<%= BASE_URL %>static/index.css" />
</head>
<body>
<!-- 该文件为 H5 平台的模板 HTML并非应用入口。 -->
<!-- 请勿在此文件编写页面代码或直接运行此文件。 -->
<!-- 详见文档https://uniapp.dcloud.io/collocation/manifest?id=h5-template -->
<noscript>
<strong>本站点必须要开启JavaScript才能运行</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<script>
/*BAIDU_STAT*/
</script>
</body>
</html>

64
ruoyi-uniapp/main.js Normal file
View File

@@ -0,0 +1,64 @@
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import Vue from 'vue';
import App from './App';
Vue.config.productionTip = false;
App.mpType = 'app';
// 引入全局 uView 框架
import uView from 'uview-ui';
Vue.use(uView);
// 全局存储 vuex 的封装
import store from '@/store';
// 引入 uView 提供的对 vuex 的简写法文件
let vuexStore = require('@/store/$u.mixin.js');
Vue.mixin(vuexStore);
// 引入 uView 对小程序分享的 mixin 封装
let mpShare = require('uview-ui/libs/mixin/mpShare.js');
Vue.mixin(mpShare);
// Vue i18n 国际化
import VueI18n from '@/common/vue-i18n.min.js';
Vue.use(VueI18n);
// i18n 部分的配置,引入语言包,注意路径
import lang_zh_CN from '@/common/locales/zh_CN.js';
import lang_en from '@/common/locales/en.js';
const i18n = new VueI18n({
// 默认语言
locale: 'zh_CN',
// 引入语言文件
messages: {
'zh_CN': lang_zh_CN,
'en': lang_en,
}
});
// 由于微信小程序的运行机制问题需声明如下一行H5和APP非必填
Vue.prototype._i18n = i18n;
const app = new Vue({
i18n,
store,
...App
});
import { replaceAll } from '@/common/common.js'
Vue.prototype.replaceAll = replaceAll
// http 拦截器,将此部分放在 new Vue() 和 app.$mount() 之间,才能 App.vue 中正常使用
import httpInterceptor from '@/common/http.interceptor.js';
Vue.use(httpInterceptor, app);
// http 接口 API 抽离,免于写 url 或者一些固定的参数
import httpApi from '@/common/http.api.js';
Vue.use(httpApi, app);
app.$mount();

159
ruoyi-uniapp/manifest.json Normal file
View File

@@ -0,0 +1,159 @@
{
"name" : "aidexapp",
"appid" : "__UNI__3570A56",
"description" : "aidex敏捷开发平台",
"versionName" : "1.8.4",
"versionCode" : "100",
"transformPx" : false,
"app-plus" : {
// APP-VUE分包可提APP升启动速度2.7.12开始支持,兼容微信小程序分包方案,默认关闭
"optimization" : {
"subPackages" : true
},
"safearea" : {
"bottom" : {
"offset" : "none"
}
},
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
"usingComponents" : true,
"nvueCompiler" : "uni-app",
"compilerVersion" : 3,
"modules" : {
"Payment" : {}
},
"distribute" : {
"android" : {
"permissions" : [
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
},
"ios" : {},
"sdkConfigs" : {
"ad" : {},
"payment" : {
"alipay" : {
"__platform__" : [ "ios", "android" ]
},
"weixin" : {
"__platform__" : [ "ios", "android" ],
"appid" : "wxdf11ec8626d8a2cb",
"UniversalLinks" : ""
},
"appleiap" : {}
}
},
"icons" : {
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
},
"ios" : {
"appstore" : "unpackage/res/icons/1024x1024.png",
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
}
}
},
"splashscreen" : {
"androidStyle" : "default",
"android" : {
"hdpi" : "E:/vueworkspace/aidex-m2m/src/assets/logo.png",
"xhdpi" : "E:/vueworkspace/aidex-m2m/src/assets/logo.png",
"xxhdpi" : "E:/vueworkspace/aidex-m2m/src/assets/logo.png"
}
}
}
},
"quickapp" : {},
"mp-weixin" : {
"appid" : "wx04dd806ca2843cc1",
"setting" : {
"urlCheck" : true,
"es6" : false,
"minified" : true,
"postcss" : true
},
"optimization" : {
"subPackages" : true
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true,
"component2" : true
},
"mp-qq" : {
"optimization" : {
"subPackages" : true
},
"appid" : ""
},
"mp-baidu" : {
"usingComponents" : true,
"appid" : ""
},
"mp-toutiao" : {
"usingComponents" : true,
"appid" : ""
},
"h5" : {
"template" : "template.h5.html",
"router" : {
"mode" : "hash",
"base" : ""
},
"optimization" : {
"treeShaking" : {
"enable" : false
}
},
"title" : "uView UI"
}
}

32
ruoyi-uniapp/package-lock.json generated Normal file
View File

@@ -0,0 +1,32 @@
{
"name": "Aidex",
"version": "2.3.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@icon-park/vue": {
"version": "1.3.5",
"resolved": "https://registry.nlark.com/@icon-park/vue/download/@icon-park/vue-1.3.5.tgz",
"integrity": "sha1-twRuLCtdpexNZz/7Wta8gL6loTs=",
"requires": {
"@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
"csstype": "^3.0.3"
}
},
"@vue/babel-helper-vue-jsx-merge-props": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
"integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE="
},
"csstype": {
"version": "3.0.9",
"resolved": "https://registry.nlark.com/csstype/download/csstype-3.0.9.tgz?cache=0&sync_timestamp=1631540658518&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-3.0.9.tgz",
"integrity": "sha1-ZBCvMbJr0FIJM9AsvGT86c4/vws="
},
"vue-i18n": {
"version": "8.20.0",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.20.0.tgz",
"integrity": "sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg=="
}
}
}

27
ruoyi-uniapp/package.json Normal file
View File

@@ -0,0 +1,27 @@
{
"name": "Aidex",
"version": "2.3.0",
"description": "Aidex 移动端快速开发框架",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://gitee.com/aidex/aidex-uniapp.git"
},
"keywords": [
"Aidex",
"快速开发平台"
],
"author": "aidex",
"license": "MIT",
"bugs": {
"url": "https://github.com/aidex/aidex-uniapp/issues"
},
"homepage": "https://github.com/aidex/aidex-uniapp#readme",
"dependencies": {
"@icon-park/vue": "^1.3.5",
"vue-i18n": "^8.20.0"
}
}

255
ruoyi-uniapp/pages.json Normal file
View File

@@ -0,0 +1,255 @@
{
"easycom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
},
"pages": [
{
"path": "pages/sys/login/index",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/sys/login/forget",
"style": {
"navigationBarTitleText": "忘记密码"
}
},
{
"path": "pages/sys/login/reg",
"style": {
"navigationBarTitleText": "注册账号"
}
},
{
"path": "pages/sys/msg/index",
"style": {
"navigationBarTitleText": "消息"
}
},
{
"path": "pages/sys/msg/form",
"style": {
"navigationBarTitleText": "查看详情"
}
},
{
"path": "pages/sys/home/index",
"style": {
"navigationBarTitleText": "工作台",
"navigationStyle": "custom" // 隐藏系统导航栏
}
},
{
"path": "pages/sys/user/index",
"style": {
"navigationBarTitleText": "我的",
"navigationBarBackgroundColor":"#5b95ff",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/sys/user/info",
"style": {
"navigationBarTitleText": "个人信息"
}
},
{
"path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper",
"style": {
"navigationBarTitleText": "头像裁剪",
"navigationBarBackgroundColor": "#000000"
}
},
{
"path": "pages/sys/user/help",
"style": {
"navigationBarTitleText": "帮助中心"
}
},
{
"path": "pages/sys/user/pwd",
"style": {
"navigationBarTitleText": "修改密码"
}
},
{
"path": "pages/sys/user/setting",
"style": {
"navigationBarTitleText": "系统设置"
}
},
{
"path": "pages/sys/user/comment",
"style": {
"navigationBarTitleText": "意见反馈"
}
},
{
"path": "pages/sys/user/about",
"style": {
"navigationBarTitleText": "关于我们"
}
},
{
"path": "pages/testData/form",
"style": {
"navigationBarTitleText": "新增编辑"
}
},
{
"path": "pages/testData/index",
"style": {
"navigationBarTitleText": "增删改查"
}
},
{
"path": "pages/common/webview",
"style": {
"navigationBarTitleText": "浏览网页"
}
},
{
"path": "pages/sys/login/code",
"style": {
"navigationBarTitleText": "验证码"
}
},
{
"path": "pages/sys/login/registerCode",
"style": {
"navigationBarTitleText": "验证码"
}
},
{
"path": "pages/sys/user/service",
"style": {
"navigationBarTitleText": "联系客服"
}
},
{
"path": "pages/sys/user/problem",
"style": {
"navigationBarTitleText": "常见问题"
}
},
{
"path": "pages/sys/user/currency",
"style": {
"navigationBarTitleText": "通用"
}
},
{
"path": "pages/sys/user/clear-cache",
"style": {
"navigationBarTitleText": "清除缓存"
}
},
{
"path": "pages/sys/workbench/index",
"style": {
"navigationBarTitleText": "工作台"
}
},
{
"path": "pages/sys/book/index",
"style": {
"navigationBarTitleText": "通讯录"
}
},
{
"path": "pages/sys/book/personal-details",
"style": {
"navigationBarTitleText": "详情"
}
},
{
"path": "pages/sys/msg/list-item",
"style": {
"navigationBarTitleText": "列表"
}
},
{
"path": "pages/sys/workbench/add-form",
"style": {
"navigationBarTitleText": "请假申请"
}
},
{
"path": "pages/sys/msg/examine-item",
"style": {
"navigationBarTitleText": "网上报销"
}
},
{
"path": "pages/sys/msg/details",
"style": {
"navigationBarTitleText": "详情"
}
},
{
"path": "pages/sys/user/modify",
"style": {
"navigationBarTitleText": "修改"
}
},
{
"path": "pages/sys/workbench/install",
"style": {
"navigationBarTitleText": "常用设置",
"navigationStyle": "custom" // 隐藏系统导航栏
}
}
],
"subPackages": [
],
"preloadRule": {
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "Aidex",
"navigationBarBackgroundColor": "#ffffff"
},
"tabBar": {
"color": "#333333",
"selectedColor": "#4094ff",
"backgroundColor": "#ffffff",
"borderStyle": "white",
"list": [
{
"pagePath": "pages/sys/msg/index",
"iconPath": "static/aidex/tabbar/msg_1.png",
"selectedIconPath": "static/aidex/tabbar/msg_2.png",
"text": "消息"
},
// {
// "pagePath": "pages/sys/home/index",
// "iconPath": "static/aidex/tabbar/home_1.png",
// "selectedIconPath": "static/aidex/tabbar/home_2.png",
// "text": "首页"
// },
{
"pagePath": "pages/sys/workbench/index",
"iconPath": "static/aidex/tabbar/apply_1.png",
"selectedIconPath": "static/aidex/tabbar/apply_2.png",
"text": "工作台"
},
{
"pagePath": "pages/sys/book/index",
"iconPath": "static/aidex/tabbar/book_1.png",
"selectedIconPath": "static/aidex/tabbar/book_2.png",
"text": "通讯录"
},
{
"pagePath": "pages/sys/user/index",
"iconPath": "static/aidex/tabbar/my_1.png",
"selectedIconPath": "static/aidex/tabbar/my_2.png",
"text": "我的"
}
]
}
}

View File

@@ -0,0 +1,108 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.wrap {
.search{
padding: 20rpx 20rpx 0;
background: #f8f8f8;
height: 105rpx;
}
.scroll-list {
height: calc(100vh - var(--window-top) - var(--window-bottom) - 105rpx); // 105rpx 为 .search 的高度
width: 100%;
.loadmore {
padding: 30rpx;
}
}
.box {
padding-bottom: 10rpx;
.item {
margin: 0 20rpx 20rpx;
padding: 8rpx 20rpx;
border-radius: 20rpx;
box-sizing: border-box;
background-color: #fff;
font-size: 28rpx;
.title {
display: flex;
justify-content: space-between;
background-color: #fff;
padding-left: 15rpx;
align-items: center;
.text {
margin: 0 20rpx;
font-size: 35rpx;
font-weight: bold;
}
}
}
}
.list {
.u-cell-item-box {
.u-swipe-content {
width: 750rpx;
}
.u-cell_title {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
min-width: 655rpx;
}
.u-border-bottom:last-child:after {
border-bottom: 0;
}
}
}
.form {
display: flex;
flex-direction: column;
padding: 20rpx 30rpx;
.u-cell-item-box {
border-radius: 20rpx;
}
}
.form-footer {
display: flex;
margin: 10rpx;
padding-bottom: 30rpx;
.btn {
flex: 1;
margin: 20rpx;
}
}
.u-cell-box {
.u-cell {
font-size: 30rpx;
}
.u-cell_title {
font-size: 30rpx;
}
.u-cell__left-icon-wrap {
margin-right: 18rpx;
}
}
}

View File

@@ -0,0 +1,34 @@
<template>
<view>
<web-view :webview-styles="webviewStyles" :src="webviewUrl"></web-view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
webviewUrl: '',
webviewStyles: {
progress: {
color: '#FF7200'
}
}
};
},
onLoad(params) {
this.webviewUrl = params.url;
// this.webviewUrl = `http://127.0.0.1:8980/js/a/bpm/bpmCategory/index/process?__sid=${this.vuex_token}&__cookie=true`;
if (params.title != ''){
uni.setNavigationBarTitle({
title: params.title
})
}
}
};
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,35 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.toolbar {
padding-top: 5px;
background-color: #fff;
}
.wrap .box .item{
margin: 0 0 0px;
border-radius: 0;
.title {
padding-left:0;
.text {
font-size: 30rpx;
font-weight:500;
margin: 0;
color: #202328;
}
}
}
.grid {
.grid-icon {
color: #666;
}
.grid-text {
font-size: 24rpx;
padding: 15rpx;
color: #202328;
}
}

View File

@@ -0,0 +1,126 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<u-index-list :scrollTop="scrollTop">
<view class="personal-listitem" v-for="(items, idx) in indexList" :key="idx" :use-slot="true">
<u-index-anchor :index="items" />
<view class="list-cell" v-for="(item, index) in getRandomInt(1,6)" :key="index"
@click="navTo('/pages/sys/book/personal-details')">
<image class="user-images" :src="getReandomImage(index)"></image>
<view class="user-name"><span>{{nameList[index]}}</span><span
class="user-other">{{deptList[index]}}</span></view>
</view>
</view>
</u-index-list>
<u-divider>已经到底了</u-divider>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
keywords: '',
scrollTop: 0,
indexList: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
"T", "U",
"V", "W", "X", "Y", "Z"
],
nameList: ['安全', '安静', '白飞', '百威', '白智英', '李红', '博雅'],
deptList: ['甘肃分公司', '西藏分公司', '海南分公司', '湖南分公司', '深圳分公司', '广州分公司', '济南分公司'],
imageList: ['user01', 'user02', 'user03', 'user04', 'user05', 'user06'],
}
},
onLoad() {
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
methods: {
getRandomInt(min, max) {
let data = Math.floor(Math.random() * (max - min + 1)) + min;
return data;
},
getRandomName() {
const length = this.nameList.length;
const i = this.getRandomInt(0, length - 1);
return this.nameList[i];
},
getRandomDept() {
const length = this.deptList.length;
const i = this.getRandomInt(0, length - 1);
return this.deptList[i];
},
getReandomImage(i) {
// const length = this.imageList.length;
// const i = this.getRandomInt(0, length - 1);
return '/static/aidex/images/' + this.imageList[i] + '.png';
},
navTo(url) {
uni.navigateTo({
url: url
});
},
}
};
</script>
<style lang="scss">
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.wrap .search {
background: #ffffff;
}
.list-cell {
display: flex;
box-sizing: border-box;
width: 100%;
padding: 8px 24rpx;
overflow: hidden;
color: #323233;
font-size: 14px;
line-height: 24px;
background-color: #fff;
align-items: center;
border-bottom: 1px solid #ececec !important;
}
.personal-listitem .list-cell:last-of-type {
border-bottom: 0 !important;
}
.user-images {
width: 80rpx;
height: 80rpx;
margin-right: 10px;
}
.user-name {
font-size: 32rpx;
color: #000000;
flex: 1;
span {
display: block;
}
.user-other {
font-size: 26rpx;
color: #999999;
font-weight: normal;
}
}
</style>

View File

@@ -0,0 +1,82 @@
<template>
<view class="wrap">
<view class="list-cell">
<image class="user-images" src="/static/aidex/images/user06.png"></image>
<view class="user-name">
<span>安静</span><u-icon size="32" color="#f04d94" name="woman"></u-icon><br>
<span class="user-other">员工编号8888 8888</span>
</view>
</view>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="公司" value="科技有限公司" icon="home" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="所属部门" value="人事部" icon="file-text" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="岗位" value="秘书" icon="account" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="手机" class="connect" value="13898987878" icon="phone" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="邮箱" class="connect" value="upugpbvrtge@188.com" icon="email" :title-width="180" :arrow="false"></u-cell-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
</u-cell-group>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
}
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
}
};
</script>
<style lang="scss">
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.list-cell {
display: flex;
box-sizing: border-box;
width: 100%;
padding: 10px 24rpx;
overflow: hidden;
color: #323233;
font-size: 14px;
line-height: 24px;
background-color: #fff;
align-items: center;
}
.user-images{
width: 80rpx;
height: 80rpx;
margin-right: 10px;
}
.user-name{
font-size: 32rpx;
color: #000000;
span{
}
.user-other{
font-size: 26rpx;
color: #999999;
font-weight: normal;
}
}
</style>

View File

@@ -0,0 +1,35 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.toolbar {
padding-top: 5px;
background-color: #fff;
}
.wrap .box .item{
margin: 0 0 0px;
border-radius: 0;
.title {
padding-left:0;
.text {
font-size: 30rpx;
font-weight:500;
margin: 0;
color: #202328;
}
}
}
.grid {
.grid-icon {
color: #666;
}
.grid-text {
font-size: 24rpx;
padding: 15rpx;
color: #202328;
}
}

View File

@@ -0,0 +1,88 @@
<template>
<view class="wrap">
<head-nav-bar
title="首页"
/>
<u-swiper :height="270" :list="imgList" :title="false" @click="imgListClick"></u-swiper>
<u-collapse-item style="display: none;">
</u-collapse-item>
<u-divider>已经到底了</u-divider>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
show: false,
head: '/static/aidex/images/head.png',
imgList: [
{image: '/static/aidex/banner/banner01.png'},
{image: '/static/aidex/banner/banner02.png'},
{image: '/static/aidex/banner/banner03.png'}
],
todoCount: 3
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
imgListClick(index) {
console.log(`点击了第${index + 1}页图片`)
},
itemClick(index) {
console.log(index);
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.banner-box{
padding: 0 2%;
width: 96%;
height: 170rpx;
margin: 30rpx 0 30rpx;
}
.u-swiper-wrap{
padding:0 10px;
}
.banner-pic{
width: 47%;
float: left;
display: inline-block;
margin: 0 1.5%;
}
.banner-pic image{
width: 100%;
height: 170rpx;
border-radius: 12rpx;
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
}
.u-mode-light-info{
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top:-3px;
}
</style>

View File

@@ -0,0 +1,113 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">验证手机号</view>
<view class="remind-text">请输入发送至<em>{{phoneNo}}</em>的6位验证码,有效期10分钟如未收到,请重新获取验证码</view>
<u-message-input mode="box" @finish="finish" :maxlength="6" :breathe="true"></u-message-input>
<view class="remind-text">
<view v-if="!codeDisabled">{{loadTime}}秒后可重新获取验证码<br> </view>
<!-- <view class="button" :disabled="getCodeDisabled" @click="getCode()"><text>重新获取验证码</text></view> -->
<u-verification-code :keep-running="true" :seconds="seconds" @end="end" @start="start" ref="uCode"
@change="codeChange" :startText="startText" :changeText="changeText" :endText="endText">
</u-verification-code>
<u-button v-if="codeDisabled" class="button" @tap="getCode">{{tips}}</u-button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phoneNo: '',
verificationCode:'',
tips: '',
seconds: 60,
refCode: null,
startText: '重新获取验证码',
changeText: 'X秒重新获取',
endText: '重新获取验证码',
loadTime:60,
codeDisabled:false,
timer:''
};
},
onLoad(option) {
this.phoneNo = option.phoneNo
},
created() {
this.timer = setInterval(this.getTime, 1000)
},
watch:{
},
methods: {
getTime () {
this.loadTime--
if (this.loadTime === 0) {
clearInterval(this.timer)
this.codeDisabled = true
}
},
codeChange(text) {
this.tips = text;
},
getCode() {
if (this.$refs.uCode.canGetCode) {
uni.hideLoading();
// 这里此提示会被this.start()方法中的提示覆盖
this.$u.toast('验证码已发送');
// 通知验证码组件内部开始倒计时
this.$refs.uCode.start();
this.$u.api.sendCode({
phoneno: this.phoneNo,
validCodeType:'2'
})
.then(res => {
if (res.code == '200') {
} else {
this.$refs.uCode.reset();
this.$u.toast(res.msg);
}
});
} else {
this.$u.toast('请稍后重新获取');
}
},
finish(e){
this.$u.api.login({
phoneNo: this.phoneNo,
validCode: e,
loginType: '0'
})
.then(res => {
if(res.msg){
this.$u.toast(res.msg);
}
if (res.code == '200') {
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/home/index'
});
}, 500);
}
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.remind-text {
padding: 30rpx 70rpx;
color: #666666;
em {
font-weight: bold;
color: #242424;
font-style: normal;
margin: 0 5px;
}
}
</style>

View File

@@ -0,0 +1,149 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">忘记密码</view>
<view class="list">
<view class="list-call">
<view class="iconfont icon-shouji" style="font-size: 22px;color:#5473e8;"></view>
<u-field
v-model="mobile"
label="+86"
placeholder="请填写手机号"
style="width: 100%;"
>
</u-field>
</view>
</view>
<view class="button" @click="code()"><text>获取验证码</text></view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
loginCode: '',
password: '',
validCode: '',
fpValidCode: '',
showPassword: false,
imgValidCodeSrc: null,
tips: '获取验证码',
seconds: 60
};
},
onLoad() {
this.refreshImgValidCode();
},
methods: {
code(){
uni.reLaunch({
url: '/pages/sys/login/code'
});
},
showPass() {
this.showPassword = !this.showPassword;
},
refreshImgValidCode(e) {
if (this.vuex_token == '') {
this.$u.api.index().then(res => {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid='
+ res.sessionid + '&t=' + new Date().getTime();
});
} else {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid='
+ this.vuex_token + '&t=' + new Date().getTime();
}
this.validCode = '';
},
codeChange(text) {
this.tips = text;
},
formValid() {
if (this.loginCode.length == 0) {
this.$u.toast('请输入账号');
return false;
}
if (this.password.length == 0) {
this.$u.toast('请输入新密码');
return false;
}
if (this.validCode.length == 0) {
this.$u.toast('请输入图片验证码');
return false;
}
return true;
},
getValidCode() {
if (!this.formValid()) {
return;
}
if (this.$refs.uCode.canGetCode) {
this.$u.api.validCode({
validCode: this.validCode
})
.then(res => {
if (res !== 'true') {
this.$u.toast('图片验证码错误');
return;
}
this.$u.api.getFpValidCode({
loginCode: this.loginCode,
validCode: this.validCode,
validType: 'mobile'
})
.then(res => {
this.$u.toast(res.message, 3000);
if (res.result == 'false') {
this.refreshImgValidCode();
}
});
this.$refs.uCode.start();
});
}
},
submit() {
if (!this.formValid()) {
return;
}
if (this.fpValidCode.length == 0) {
this.$u.toast('请输入手机验证码');
return false;
}
this.$u.api.savePwdByValidCode({
loginCode: this.loginCode,
fpValidCode: this.fpValidCode,
password: this.password
})
.then(res => {
uni.showModal({
title: '提示',
content: res.message,
showCancel: false,
success: function () {
if (res.result == 'true') {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}
}
});
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.uni-input-placeholder{
font-size: 32rpx;
}
.uni-input-input{
font-size: 32rpx;
}
.u-border-bottom:after {
border-bottom-width: 0px!important;
}
</style>

View File

@@ -0,0 +1,114 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.wrap {
display: flex;
flex-direction: column;
justify-content: center;
}
.pages-sys-login-index .wrap {
background: url(../../../static/aidex/login-bg.png) no-repeat left top;
background-size: 100% auto;
}
.list {
display: flex;
flex-direction: column;
padding: 40rpx 70rpx 40rpx 70rpx;
}
.list-call {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding-top: 10rpx;
height: 120rpx;
font-weight: normal;
color: #333333;
border-bottom: 0.5px solid #e2e2e2;
}
.list-call .u-input {
flex: 1;
font-size: 39rpx;
text-align: left;
margin-left: 16rpx;
}
.list-call .u-icon-right {
color: #aaaaaa;
width: 50rpx;
height: 40rpx;
}
.button {
color: #ffffff;
font-size: 32rpx;
width: 80%;
height: 80rpx;
background: #497bff;
box-shadow: 0rpx 0rpx 13rpx 0rpx rgba(15, 168, 250, 0.4);
border-radius: 10rpx;
line-height: 80rpx;
text-align: center;
margin: 50rpx auto 0;
}
.img-valid-code img {
width: 30rpx;
heigth: 50rpx;
}
.btn-valid-code {
color: #da7918;
font-size: 30rpx;
line-height: 48rpx;
padding: 6rpx 35rpx;
border: 1rpx solid #da7918;
border-radius: 50rpx;
}
.btn-valid-code-hover {
background-color: #f3f3f3;
}
.btn-valid-codes {
color: #999999 !important;
border: 1rpx solid #999999;
}
.login-bottom-box{
position: fixed;
bottom:40rpx;
text-align: center;
width: 100%;
}
.copyright{
text-align: center;
color: #939393;
width: 100%;
font-size: 24rpx;
.u-link{
margin: 0 10rpx;
font-size: 24rpx!important;
}
}
.pages-sys-login-index, .pages-sys-login-reg, .pages-sys-login-forget {
.u-checkbox__label{
font-size: 28rpx!important;
}
.u-label{
flex: 0 0 35px!important;
width: 35px!important;
}
}
.reg-text{
font-size: 42rpx;
color: #000;
padding: 40rpx 70rpx 10rpx;
}

View File

@@ -0,0 +1,272 @@
<template>
<view class="wrap">
<view class="logo">若依移动APP</view>
<div v-if="loginType === 'currentPhone'">
<u-tabs :list="list" :is-scroll="false" :current="current" @change="onClickItem"></u-tabs>
<view v-if="current === 0">
<view class="list">
<view class="list-call">
<view class="iconfont icon-avatar" style="font-size: 22px;color:#5473e8;"></view>
<input class="u-input" type="text" v-model="username" maxlength="32" :placeholder="$t('login.placeholderAccount')" value="admin"/>
</view>
<view class="list-call">
<view class="iconfont icon-key" style="font-size: 22px;color:#5473e8;"></view>
<input class="u-input" type="text" v-model="password" maxlength="32" :placeholder="$t('login.placeholderPassword')" :password="!showPassword" value="admin123" />
<image class="u-icon-right" :src="'/static/aidex/login/eye_' + (showPassword ? 'open' : 'close') + '.png'" @click="showPass()"></image>
</view>
<div style="padding:15rpx 0 0;">
<view class="register">
<navigator class="register-link" url="forget" open-type="navigate">{{$t('login.forget')}}</navigator>
<!-- <navigator class="register-link" url="reg" open-type="navigate">{{$t('login.reg')}}</navigator> -->
</view>
<u-checkbox v-model="remember" active-color="#5473e8">{{$t('login.autoLogin')}}</u-checkbox>
</div>
</view>
<view class="button" @click="submit('1')"><text>登录</text></view>
<view class="login-bottom-box">
<u-divider> 更多登录方式 </u-divider>
<view class="oauth2">
<u-icon class="u-icon" size="100" color="#36c956" name="weixin-circle-fill" @click="wxLogin"></u-icon>
<u-icon class="u-icon" size="100" color="#23a0f0" name="qq-circle-fill" @click="qqLogin"></u-icon>
</view>
<view class="copyright">
登录即代表您已阅读并同意<u-link href="#">用户协议</u-link> <u-link href="#">隐私政策</u-link>
</view>
</view>
</view>
<view v-if="current === 1">
<view class="list">
<view class="list-call" >
<view class="iconfont icon-shouji" style="font-size: 22px;color:#5473e8;"></view>
<u-field
v-model="phoneNo"
label="+86"
placeholder="请填写手机号"
style="width: 100%;"
:border-bottom="false"
>
</u-field>
</view>
<div style="padding:25rpx 0 0;">
还没有账号<navigator class="reg-link" url="reg" open-type="navigate">{{$t('login.reg')}}</navigator>
</div>
</view>
<view class="button" @click="nextStep()"><text>下一步</text></view>
<view class="login-bottom-box">
<u-divider> 更多登录方式 </u-divider>
<view class="oauth2">
<u-icon class="u-icon" size="100" color="#36c956" name="weixin-circle-fill" @click="wxLogin"></u-icon>
<u-icon class="u-icon" size="100" color="#23a0f0" name="qq-circle-fill" @click="qqLogin"></u-icon>
</view>
<view class="copyright">
登录即代表您已阅读并同意<u-link href="#">用户协议</u-link> <u-link href="#">隐私政策</u-link>
</view>
</view>
</view>
</div>
<div v-if="loginType !== 'currentPhone'">
<view class="currentPhone-box">
<view class="number-text">183****1005</view>
<view class="other-text">认证服务由中国移动提供</view>
<u-button type="primary" @click="submit('3')">本机号码一键登录</u-button>
<u-button @click="qiehuanLogin()">其他登录方式</u-button>
</view>
<view class="login-bottom-box">
<view class="copyright">
登录即代表您已阅读并同意<u-link href="#">用户协议</u-link> <u-link href="#">隐私政策</u-link>
</view>
</view>
</div>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import base64 from '@/common/base64.js';
export default {
data() {
return {
phoneNo:'',
username: '',
password: '',
loginType: 'currentPhone',
showPassword: false,
remember: true,
isValidCodeLogin: false,
validCode: '',
imgValidCodeSrc: null,
list: [{name: '用户名'}, {name: '手机号'}],
current: 0,
activeColor: '#007aff',
};
},
onLoad() {
this.$u.api.index({loginCheck: true}).then(res => {
if (res.code == '200'){
uni.reLaunch({
url: '/pages/sys/msg/index'
});
}
});
},
methods: {
showPass() {
this.showPassword = !this.showPassword;
},
qiehuanLogin(){
this.loginType = 'other'
},
onClickItem(index) {
this.current = index;
},
refreshImgValidCode(e) {
if (this.vuex_token == '') {
this.$u.api.index().then(res => {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid='
+ res.sessionid + '&t=' + new Date().getTime();
});
} else {
this.imgValidCodeSrc = this.vuex_config.baseUrl + '/validCode?__sid='
+ this.vuex_token + '&t=' + new Date().getTime();
}
this.validCode = '';
},
nextStep(){
//验证码登录下一步
uni.showLoading({
title: '正在获取验证码',
mask: true
})
this.$u.api.sendCode({
phoneNo: this.phoneNo,
validCodeType:'2'
})
.then(res => {
if (res.code == '200') {
setTimeout(() => {
uni.navigateTo({
url: '/pages/sys/login/code?phoneNo='+this.phoneNo
});
}, 500);
}else{
this.$u.toast(res.msg);
setTimeout(() => {
uni.navigateTo({
url: '/pages/sys/login/code?phoneNo='+this.phoneNo
});
}, 500);
}
});
},
submit(loginType) {
if (this.username.length == 0) {
this.$u.toast('请输入账号');
return;
}
if (this.password.length == 0) {
this.$u.toast('请输入密码');
return;
}
this.$u.api.login({
username: this.username,
password: this.password,
validCode: this.validCode,
loginType: loginType
})
.then(res => {
if(res.msg){
this.$u.toast(res.msg);
}
if (res.code == '200') {
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/msg/index'
});
}, 500);
}
if (res.isValidCodeLogin){
this.isValidCodeLogin = true;
this.refreshImgValidCode();
}
});
},
wxLogin(res) {
this.$u.toast('微信登录');
},
qqLogin() {
this.$u.toast('QQ 登录');
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.logo {
width: 80%;
font-size:64rpx;
color: #5473e8;
margin: 80rpx auto 80rpx auto;
}
.list-call-icon{
color: #ff0000;
}
.currentPhone-box{
text-align: center;
padding: 40rpx 80rpx;
.number-text{
color: #000000;
font-size: 60rpx;
}
.other-text{
color: #999999;
font-size: 26rpx;
padding: 20rpx 0;
}
.u-btn{
margin: 30rpx auto;
}
.u-hairline-border{
border: 1px solid #fff;
}
}
.register {
display:inline-block;
color: #5473e8;
height: 40rpx;
line-height: 40rpx;
font-size: 28rpx;
float:right;
margin-top: 6rpx;
}
.register-link{
float: right;
padding: 0 16rpx;
}
.reg-link{
display: inline-block;
color: #5473e8;
}
.oauth2 {
display: flex;
flex-direction: row;
justify-content: space-around;
margin: 0rpx 100rpx 30rpx;
image {
height: 80rpx;
width: 80rpx;
}
}
.u-tabs{
padding: 0 70rpx;
}
</style>

View File

@@ -0,0 +1,91 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">欢迎注册</view>
<view class="list">
<view class="list-call">
<view class="iconfont icon-shouji" style="font-size: 22px;color:#5473e8;"></view>
<u-field
v-model="phoneNo"
label="+86"
placeholder="请输入手机号码"
style="width: 100%;"
>
</u-field>
</view>
</view>
<view class="button" @click="getCode()"><text>获取验证码</text></view>
<view class="bottom-box">
<view class="copyright">
注册即代表您已阅读并同意<u-link href="#">用户协议</u-link> <u-link href="#">隐私政策</u-link>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phoneNo: '',
};
},
onLoad() {
},
methods: {
getCode(){
uni.showLoading({
title: '正在获取验证码',
mask: true
})
this.$u.api.sendCode({
phoneNo: this.phoneNo,
validCodeType:'1'
})
.then(res => {
if (res.code == '200') {
setTimeout(() => {
uni.navigateTo({
url: '/pages/sys/login/registerCode?phoneNo='+this.phoneNo
});
}, 500);
}else{
this.$u.toast(res.msg);
}
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.agreement {
display:flex;
flex-direction:row;
align-items:center;
margin-left:90rpx;
color:#666;
}
.uni-input-placeholder{
font-size: 32rpx;
}
.uni-input-input{
font-size: 32rpx;
}
.bottom-box{
position: fixed;
bottom:40rpx;
text-align: center;
width: 100%;
}
.copyright{
text-align: center;
color: #939393;
width: 100%;
font-size: 24rpx;
.u-link{
margin: 0 10rpx;
font-size: 24rpx!important;
}
}
</style>

View File

@@ -0,0 +1,111 @@
<template>
<view class="wrap" style="padding-top:50rpx;">
<view class="reg-text">验证手机号</view>
<view class="remind-text">请输入发送至<em>{{phoneNo}}</em>的6位验证码,有效期10分钟如未收到,请重新获取验证码</view>
<u-message-input mode="box" @finish="finish" :maxlength="6" :breathe="true"></u-message-input>
<view class="remind-text">
<view v-if="!codeDisabled">{{loadTime}}秒后可重新获取验证码<br> </view>
<!-- <view class="button" :disabled="getCodeDisabled" @click="getCode()"><text>重新获取验证码</text></view> -->
<u-verification-code :keep-running="true" :seconds="seconds" @end="end" @start="start" ref="uCode"
@change="codeChange" :startText="startText" :changeText="changeText" :endText="endText">
</u-verification-code>
<u-button v-if="codeDisabled" class="button" @tap="getCode">{{tips}}</u-button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phoneNo: '',
verificationCode:'',
tips: '',
seconds: 60,
refCode: null,
startText: '重新获取验证码',
changeText: 'X秒重新获取',
endText: '重新获取验证码',
loadTime:60,
codeDisabled:false,
timer:''
};
},
onLoad(option) {
this.phoneNo = option.phoneNo
},
created() {
this.timer = setInterval(this.getTime, 1000)
},
watch:{
},
methods: {
getTime () {
this.loadTime--
if (this.loadTime === 0) {
clearInterval(this.timer)
this.codeDisabled = true
}
},
codeChange(text) {
this.tips = text;
},
getCode() {
if (this.$refs.uCode.canGetCode) {
uni.hideLoading();
// 这里此提示会被this.start()方法中的提示覆盖
this.$u.toast('验证码已发送');
// 通知验证码组件内部开始倒计时
this.$refs.uCode.start();
this.$u.api.sendCode({
phoneNo: this.phoneNo,
validCodeType:'1'
})
.then(res => {
if (res.code == '200') {
} else {
this.$refs.uCode.reset();
this.$u.toast(res.msg);
}
});
} else {
this.$u.toast('请稍后重新获取');
}
},
finish(e){
this.$u.api.registerUser({
phoneNo: this.phoneNo,
validCode: e
})
.then(res => {
if(res.msg){
this.$u.toast(res.msg);
}
if (res.code == '200') {
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/home/index'
});
}, 500);
}
});
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.remind-text {
padding: 30rpx 70rpx;
color: #666666;
em {
font-weight: bold;
color: #242424;
font-style: normal;
margin: 0 5px;
}
}
</style>

View File

@@ -0,0 +1,306 @@
<template>
<view class="wrap" style="padding-bottom: 60px;">
<view class="header">
<view class="userinfo" @click="navTo('info')">
<view class="image">
<!-- <image :src="avatarUrl"></image> -->
<u-avatar size="80" :src="avatarUrl"></u-avatar>
</view>
<view class="info" style="flex:1;display: flex;justify-content: space-between;">
<view>
<view class="username">请假</view>
<view class="usercode">王天翔</view>
</view>
<u-tag text="待审核" shape="circle" type="warning" style="height: 55rpx;" />
</view>
</view>
</view>
<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
<!-- 当前套餐 -->
<view v-if="current === 0">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group class="datails-examine">
<u-cell-item title="申请编号" label="211110" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="所属部门" label="人事部" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="请假类型" label="事假" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="开始时间" label="2021年10月25日09:00" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="结束时间" label="2021年10月25日18:00" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="时长" label="8h" :arrow="false" :border-bottom="false"></u-cell-item>
<u-cell-item title="请假事由" label="感冒了,请假一天,望领导批准!" :arrow="false" :border-bottom="false"></u-cell-item>
</u-cell-group>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-time-line>
<u-time-line-item nodeTop="2">
<!-- 此处自定义了左边内容用一个图标替代 -->
<template v-slot:node>
<image class="user-images" src="/static/aidex/images/user06.png"></image>
</template>
<template v-slot:content>
<view style="justify-content: space-between;display: flex;">
<view class="u-order-title">发起人</view>
<view class="u-order-time">05-08 12:12</view>
</view>
</template>
</u-time-line-item>
<u-time-line-item nodeTop="2">
<!-- 此处自定义了左边内容用一个图标替代 -->
<template v-slot:node>
<image class="user-images" src="/static/aidex/images/user06.png"></image>
</template>
<template v-slot:content>
<view style="justify-content: space-between;display: flex;">
<view class="u-order-title">部门领导</view>
<view class="u-order-time">05-08 12:12</view>
</view>
<view class="u-order-desc">同意</view>
</template>
</u-time-line-item>
<u-time-line-item nodeTop="2">
<!-- 此处自定义了左边内容用一个图标替代 -->
<template v-slot:node>
<image class="user-images" src="/static/aidex/images/user06.png"></image>
</template>
<template v-slot:content>
<view style="justify-content: space-between;display: flex;">
<view class="u-order-title">公司领导</view>
<view class="u-order-time">05-08 12:12</view>
</view>
<view class="u-order-desc">同意</view>
</template>
</u-time-line-item>
</u-time-line>
<u-row gutter="32" class="bottom-box" justify="center">
<u-col span="5">
<view><u-button :plain="true" type="primary" shape="circle" @click="navTo('/pages/sys/home/index')">拒绝</u-button></view>
</u-col>
<u-col span="5">
<view><u-button type="primary" shape="circle" @click="navTo('/pages/sys/home/index')">确定</u-button></view>
</u-col>
</u-row>
</view>
<view v-if="current === 1">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #f28c03;">
待审核
</view>
</u-card>
</view>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
list: [{
name: '申请详情'
}, {
name: '查看数据',
}],
m2mSimflowList:[],
m2mOrderFlowList:[],
current: 0,
status: 'loadmore',
iconType: 'circle',
isDot: false,
loadText: {
loadmore: '点击加载更多',
loading: '正在加载...',
nomore: '没有更多了'
},
}
},
created(){
},
methods: {
change(index) {
this.current = index;
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.apply-text{
font-size: 28rpx;
color: #333333;
span{
color: #999999;
}
}
.user-images{
width: 28px;
height:28px;
margin-right: 8px;
}
.apply-list-foot{
font-size: 28rpx;
}
.personnel-list{
display: flex;
align-items: center;
flex-wrap:wrap;
.personnel-user{
position: relative;
margin: 5px 9px 0;
}
.user-images{
width: 32px;
height:32px;
margin-right:0;
}
.iconfont{
position: absolute;
top:-12px;
right:-5px;
color: #FE0100;
}
}
.header {
background-color: #ffffff;
.userinfo {
display: flex;
padding: 20rpx 20rpx 10rpx;
.image {
flex-shrink: 0;
width: 80rpx;
height: 80rpx;
image {
border-radius: 100%;
width: 100%;
height: 100%;
}
}
.info {
display: flex;
flex-flow: wrap;
padding-left: 30rpx;
color: #333333;
.username {
width: 100%;
font-size: 32rpx;
}
.usercode {
padding: 0;
font-size: 24rpx;
color: #999999;
}
}
}
.logout {
flex-shrink: 0;
position: absolute;
right: 70rpx;
top: 65rpx;
.u-btn {
font-size: 30rpx;
}
}
}
.u-node {
width: 44rpx;
height: 44rpx;
border-radius: 100rpx;
display: flex;
justify-content: center;
align-items: center;
background: #d0d0d0;
}
.u-order-title {
color: #333333;
font-weight: bold;
font-size: 30rpx;
}
.u-order-desc {
color: rgb(150, 150, 150);
font-size: 28rpx;
margin-bottom: 6rpx;
}
.u-order-time {
color: rgb(200, 200, 200);
font-size: 26rpx;
}
</style>

View File

@@ -0,0 +1,330 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
<view v-if="current === 0">
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<view class="msg-time">11:05</view>
<u-card class="task-list-item" :border="false" padding="20" margin="10rpx 20rpx" @click="navTo('/pages/sys/msg/details')">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot">
<u-row gutter="16">
<u-col span="6" text-align="center">
<view class="agree-text">同意</view>
</u-col>
<u-col span="6" text-align="center">
<view class="refuse-text">拒绝</view>
</u-col>
</u-row>
</view>
</u-card>
<view class="msg-time">11月10日 15:32</view>
<u-card class="task-list-item" :border="false" padding="20" margin="10rpx 20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot">
<u-row gutter="16">
<u-col span="6" text-align="center">
<view class="agree-text">同意</view>
</u-col>
<u-col span="6" text-align="center">
<view class="refuse-text">拒绝</view>
</u-col>
</u-row>
</view>
</u-card>
<view class="msg-time">11月08日 10:05</view>
<u-card class="task-list-item" :border="false" padding="20" margin="10rpx 20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot">
<u-row gutter="16">
<u-col span="6" text-align="center">
<view class="agree-text">同意</view>
</u-col>
<u-col span="6" text-align="center">
<view class="refuse-text">拒绝</view>
</u-col>
</u-row>
</view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
<view v-if="current === 1">
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
<view v-if="current === 2">
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
list: [{
name: '待办'
}, {
name: '已办',
}, {
name: '已发送',
}],
m2mSimflowList:[],
m2mOrderFlowList:[],
current: 0,
status: 'loadmore',
iconType: 'circle',
isDot: false,
loadText: {
loadmore: '点击加载更多',
loading: '正在加载...',
nomore: '没有更多了'
},
};
},
onLoad() {
},
methods: {
change(index) {
this.current = index;
},
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
@import '../../../common/uni.css';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.u-dropdown {
background: #ffffff;
}
.msg-time{
font-size: 26rpx;
padding: 5px 0;
color: #999999;
text-align: center;
}
.u-card__foot{
.u-icon{
margin-right: 10px;
}
}
.apply-text{
font-size: 28rpx;
color: #333333;
span{
color: #999999;
}
}
.user-images{
width: 28px;
height:28px;
margin-right: 8px;
}
.apply-list-foot{
font-size: 28rpx;
justify-content: space-around;
}
.personnel-list{
display: flex;
align-items: center;
flex-wrap:wrap;
.personnel-user{
position: relative;
margin: 5px 9px 0;
}
.user-images{
width: 32px;
height:32px;
margin-right:0;
}
.iconfont{
position: absolute;
top:-12px;
right:-5px;
color: #FE0100;
}
}
.agree-text{
color: #4094ff;
}
.refuse-text{
color: #ff4400;
}
</style>

View File

@@ -0,0 +1,98 @@
<template>
<view class="wrap">
<view class="article-title">AiDex Sharp快速开发平台</view>
<view class="article-meta">
系统管理员 发起于 2021-4-20 12:30</text>
</view>
<view class="article-content">
<p>
AiDex Sharp快速开发平台基于若依-ruoyi-vue项目扩展前端采用Ant-Design-VUE代码易读易懂界面简洁美观不仅仅是一个后台开发框架它是一个企业级快速开发解决方案我们将把UI交互快速开发能力追求到极致适配国产数据库国产中间件将支持多租户flowable工作流移动APP更多插件正在扩展中
</p>
<div class="banner-pic">
<image src="../../../static/aidex/images/new-pic.png"></image>
</div>
<p>
aidex 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能经典架构会的人多让开发者注重专注业务其余有平台来封装技术细节降低技术难度从而节省人力成本缩短项目周期提高软件安全质量
</p>
<p>
aidex 2013 年发布以来已被广大爱好者用到了企业政府医疗金融互联网等各个领域中aidex 架构精良易于扩展大众思维的设计模式工匠精神打磨每一个细节深入开发者的内心并荣获开源中国最受欢迎中国开源软件奖杯期间也帮助了不少刚毕业的大学生教师作为入门教材快速的去实践
</p>
<p>
aidex 的升级作者结合了多年总结和经验以及各方面的应用案例对架构完成了一次全部重构也纳入很多新的思想不管是从开发者模式底层架构逻辑处理还是到用户界面用户交互体验上都有很大的进步在不忘学习成本提高开发效率的情况下安全方面也做和很多工作包括身份认证密码策略安全审计日志收集等众多安全选项供你选择努力为大中小微企业打造全方位企业级快速开发解决方案
</p>`
</view>
<view class="article-foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #ffffff;
}
.article-title {
font-size: 40rpx;
font-weight: 400;
text-align: left;
padding-bottom: 10rpx;
font-weight: bold;
margin: 30rpx 30rpx 0;
color: #333333;
}
.article-meta {
padding: 10rpx 30rpx 30rpx;
color: #999999;
border-bottom: 1px solid #ededed;
}
.article-content {
padding: 30rpx 30rpx 0rpx;
overflow: hidden;
font-size: 30rpx;
line-height: 50rpx;
/deep/ p {
margin-bottom: 20rpx;
text-indent: 60rpx;
}
.banner-pic{
margin: 10px auto;
text-align: center;
uni-image{
width: 300px;
height: 160px;
box-shadow:0 3px 10px rgba(0,0,0,0.15);
}
}
}
.article-foot{
padding:0 30rpx 20rpx;
font-size: 26rpx;
color: #999999;
.u-icon{
margin-right: 10px;
}
}
</style>

View File

@@ -0,0 +1,151 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<scroll-view class="scroll-list" scroll-y="true">
<view class="uni-list">
<uni-view class="uni-list-cell">
<view class="uni-media-list" @click="navTo('/pages/sys/msg/list-item')">
<view class="home-icon icon-color03">
<i class="iconfont icon-tongzhi1"><u-badge type="error" count="2"></u-badge></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>通知公告</span><span style="font-size: 26rpx;color: #999999;">12:35</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>关于元旦放假的通知</span></uni-text>
</uni-view>
</uni-view>
</view>
</uni-view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/list-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color04">
<i class="iconfont icon-xinwen"><u-badge type="error" count="1"></u-badge></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>新闻动态</span><span style="font-size: 26rpx;color: #999999;">09:07</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>神十三航天员圆满完成出舱任务</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/examine-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color06">
<i class="iconfont icon-msg-system"></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>日常办公</span><span style="font-size: 26rpx;color: #999999;">11月07日</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>王梓涵提交的请假申请待你审批</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/list-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiao"></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>网上报销</span><span style="font-size: 26rpx;color: #999999;">11月06日</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>吴天祥提交的差旅费报销待你审批</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
<view class="uni-list-cell" @click="navTo('/pages/sys/msg/list-item')">
<uni-view class="uni-media-list">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<uni-view class="uni-media-list-body">
<uni-view class="uni-media-list-text-top"><span>我的邮件</span><span style="font-size: 26rpx;color: #999999;">11月06日</span></uni-view>
<uni-view class="uni-media-list-text-bottom">
<uni-text><span>邮件提醒邮件提醒15封新邮件未读</span></uni-text>
</uni-view>
</uni-view>
</uni-view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
@import '../../../common/uni.css';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.uni-title{
font-size: 30rpx;
color: #333333;
padding: 10px;
background: #fff;
border-top:1px solid #ededed;
margin-top: 20rpx;
}
.uni-media-list {
padding: 15px 15px;
}
.uni-media-list-body {
height: 42px;
padding-left:20rpx;
}
.uni-media-list-text-top{
height: 40rpx;
overflow: hidden;
width: 100%;
line-height: 40rpx;
font-size: 32rpx;
display: flex;
justify-content: space-between;
}
.uni-media-list-text-bottom {
width: 100%;
line-height: 24rpx;
font-size: 26rpx;
color: #666666;
span{
margin-right: 10rpx;
}
}
</style>

View File

@@ -0,0 +1,96 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<scroll-view class="scroll-list msg-list-item" scroll-y="true">
<view class="msg-time">11:05</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月08日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中微信微信好友和朋友圈微博QQQQ好友和QQ空间是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="7"></u-icon></view>
</u-card>
<view class="msg-time">11月10日 15:32</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月10日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中微信微信好友和朋友圈微博QQQQ好友和QQ空间是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</u-card>
<view class="msg-time">11月08日 10:05</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月08日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中微信微信好友和朋友圈微博QQQQ好友和QQ空间是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</u-card>
<view class="msg-time">11月08日 09:32</view>
<u-card title="用户分享内容到社交媒体或好友" sub-title="11月08日" padding="20" margin="0rpx 20rpx" thumb="/static/aidex/images/list-icon.png" @click="navTo('/pages/sys/msg/form')">
<view class="" slot="body">
<view class="u-body-item u-flex u-col-between u-p-t-0">
<view class="u-body-item-title u-line-2">在常用的社交分享组件中微信微信好友和朋友圈微博QQQQ好友和QQ空间是三大主要平台 ...</view>
</view>
</view>
<view class="" slot="foot"><u-icon name="eye" size="34" color="" label="30"></u-icon> <u-icon name="thumb-up" size="34" color="" label="15"></u-icon></view>
</u-card>
<u-divider>已经到底了</u-divider>
</scroll-view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
@import '../../../common/uni.css';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.msg-time{
font-size: 26rpx;
padding: 10px 0;
color: #999999;
text-align: center;
}
.u-card__foot{
.u-icon{
margin-right: 10px;
}
}
</style>

View File

@@ -0,0 +1,99 @@
<template>
<view class="wrap">
<view class="u-p-t-30 u-p-b-30 u-flex u-flex-col u-text-center">
<!-- <u-avatar size="250" src="/static/aidex/logo200.png"></u-avatar> -->
<view class="title">若依移动APP</view>
<!-- <view class="version">{{vuex_config.productVersion}}</view> -->
</view>
<u-cell-group class="form" :border="false">
<navigator url="" open-type="navigate">
<u-cell-item :arrow="true" title="公司首页"></u-cell-item>
</navigator>
<navigator>
<u-cell-item :arrow="false" title="技术服务">15389457063</u-cell-item>
</navigator>
<navigator url="" open-type="navigate">
<u-cell-item :arrow="true" title="服务条款"></u-cell-item>
</navigator>
</u-cell-group>
<u-row gutter="16" style="margin-top: 20px;">
<u-col span="6" text-align="center">
<view class="cade-box"><image src="/static/aidex/images/code01.jpg"></image></view>
<view class="cade-text">公众号</view>
</u-col>
<u-col span="6" text-align="center">
<view class="cade-box"><image src="/static/aidex/images/code02.jpg"></image></view>
<view class="cade-text">扫一扫 加我微信</view>
</u-col>
</u-row>
<view class="copyright">
<view> 版权所有</view>
<view>Copyright &copy; 2021 baidu.com</view>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
methods: {
upgrade(){
// #ifdef APP-PLUS
this.$u.api.upgradeCheck().then(res => {
if (res.result == 'true'){
uni.showModal({
title: '提示',
content: res.message + '是否下载更新?',
showCancel: true,
success: function (res2) {
if (res2.confirm) {
plus.runtime.openURL(res.data.apkUrl);
}
}
});
}else{
this.$u.toast(res.message);
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版无需检查更新');
// #endif
}
}
};
</script>
<style lang="scss" scoped>
page {
background-color: #f5f5f5;
}
.title {
display: flex;
margin: 30rpx 0 10px;
font-size: 50rpx;
}
.version {
margin-bottom: 10rpx;
font-size: 40rpx;
}
.copyright {
margin-top: 50rpx;
text-align: center;
line-height: 60rpx;
color: #999;
}
.cade-box{
uni-image{
width: 120px;
height:120px;
border: 1px solid #dcdcdc;
padding: 5px;
background: #ffffff;
}
}
.cade-text{
color: #999999;
font-size:12px;
}
</style>

View File

@@ -0,0 +1,46 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="清除缓存" :arrow="false">
<view solt="right-icon">
15M
</view>
</u-cell-item>
</u-cell-group>
<view class="u-m-40">
<u-button type="primary" @click="logout" :hair-line="false">清除缓存</u-button>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
};
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
}
}
};
</script>
<style lang="scss">
@import '../home/index.scss';
page {
background-color: #f8f8f8;
}
/deep/ .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>

View File

@@ -0,0 +1,94 @@
<template>
<view class="wrap yjfk-form-right">
<u-form class="form" :model="model" :rules="rules" ref="uForm" label-position="top">
<u-form-item label="问题和意见" prop="content">
<u-input type="textarea" placeholder="请填写10个字以上的问题描述以便我们提供更好的帮助"
v-model="model.content" height="200" maxlength="500" />
</u-form-item>
<u-form-item label="联系方式手机、邮箱、QQ号码" prop="contact">
<u-input class="input-left-form" placeholder="选填,便于我们与你联系,进一步沟通"
v-modtel="model.contact" type="text" maxlength="200"></u-input>
</u-form-item>
</u-form>
<view class="form-footer">
<u-button class="btn" type="primary" @click="submit">提交</u-button>
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
model: {
id: '',
category: '',
content: '',
contact: '',
deviceInfo: ''
},
rules: {
category: [
{
required: true,
message: '请选择问题和意见的分类',
trigger: ['change','blur'],
}
],
content: [
{
required: true,
min: 10, max: 500,
message: '问题和意见在 10 到 500 个字符之间',
trigger: ['change','blur'],
}
],
}
};
},
onReady() {
this.$refs.uForm.setRules(this.rules);
// 获取设备信息
uni.getSystemInfo({
success: res => {
this.model.deviceInfo = JSON.stringify(res);
}
});
},
methods: {
submit() {
// console.log(this.model)
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.commentSave(this.model).then(res => {
uni.showModal({
title: '提示',
content: res.message,
showCancel: false,
success: function () {
if (res.result == 'true') {
uni.navigateBack();
}
}
});
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss" scoped>
.input-placeholder{
text-align: right;
}
</style>

View File

@@ -0,0 +1,84 @@
<template>
<view class="wrap">
<u-cell-group :border="false" title="消息提醒">
<u-cell-item title="接受消息提醒" :arrow="false">
<u-switch v-model="message" slot="right-icon" class="u-m-l-20"></u-switch>
</u-cell-item>
<u-cell-item title="通知栏显示消息详情" :arrow="false">
<u-switch v-model="messageBar" slot="right-icon" class="u-m-l-20"></u-switch>
<text slot="label">关闭后当收到消息的时候只显示有提示不显示消息内容</text>
</u-cell-item>
</u-cell-group>
<u-cell-group :border="false" title="声音与振动">
<u-cell-item title="收到消息后播放声音或振动" @click="openSettings">
<text slot="label">前往系统设置中修改声音与振动</text>
</u-cell-item>
</u-cell-group>
<u-cell-group :border="false" title="软件更新提醒">
<u-cell-item title="软件更新提醒" :arrow="false">
<u-switch v-model="upgrade" slot="right-icon" class="u-m-l-20"></u-switch>
<text slot="label">当本软件有新版本发布时给予提醒</text>
</u-cell-item>
</u-cell-group>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
message: true,
messageBar: true,
upgrade: true
};
},
methods: {
openSettings() {
// #ifdef APP-PLUS
uni.getSystemInfo({
success(res) {
if(res.platform == 'ios'){
plus.runtime.openURL("app-settings://");
} else if (res.platform == 'android'){
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var mIntent = new Intent('android.settings.SOUND_SETTINGS');
main.startActivity(mIntent);
}
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版无需检查更新');
// #endif
},
logout() {
this.$u.api.logout().then(res => {
this.$u.toast(res.msg);
if (res.code == '200') {
let self = this;
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}, 500);
}
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #f8f8f8;
}
/deep/ .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>

View File

@@ -0,0 +1,106 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<view class="u-p-t-5 u-p-b-5">
<u-collapse class="box" :accordion="false" :arrow="false">
<view class="item" v-for="(item, index) in list" :key="item.code">
<u-collapse-item :open="true">
<view class="title" slot="title">
<u-icon :name="item.icon != '' ? item.icon : 'home'" :size="35"></u-icon>
<view class="text">{{item.name}}</view>
</view>
<u-cell-group class="list" :border="false">
<u-cell-item :arrow="true" v-for="(child, index2) in item.childList" :key="child.code" @click="navTo('/pages/sys/msg/form')">
<text slot="title">{{child.name}}</text>
<text slot="label">发送者{{child.createByName}} &nbsp;|&nbsp; 时间{{child.createDate}}</text>
</u-cell-item>
</u-cell-group>
</u-collapse-item>
</view>
</u-collapse>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
list: [
{
code: 'a',
name: '常见问题',
icon: 'error-circle',
childList: [
{
code: 'a1',
name: '为什么没有消息提醒?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a2',
name: '怎么关闭消息提醒?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a3',
name: '怎么办理工单?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
}
]
},
{
code: 'a-1',
name: '任务相关',
icon: 'clock',
childList: [
{
code: 'a1',
name: '怎么办理任务?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a2',
name: '怎么完成任务?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
},
{
code: 'a3',
name: '怎么查询任务?',
createByName: '管理员',
createDate: '2021-4-6 12:10'
}
]
}
],
};
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
search(value) {
this.$u.toast('搜索内容为:' + value)
}
}
};
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
</style>

View File

@@ -0,0 +1,130 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.header {
background-color: #5b95ff;
.userinfo {
display: flex;
padding: 0rpx 30rpx 10rpx;
.image {
flex-shrink: 0;
width: 100rpx;
height: 100rpx;
image {
border-radius: 100%;
width: 100%;
height: 100%;
}
}
.info {
display: flex;
flex-flow: wrap;
padding-left: 30rpx;
color: #fff;
.username {
width: 100%;
font-size: 40rpx;
}
.usercode {
height: 36rpx;
padding: 0 20rpx;
margin-top: 10rpx;
background-color: rgba(0, 0, 0, 0.1);
border-radius: 20rpx;
font-size: 20rpx;
}
}
}
.logout {
flex-shrink: 0;
position: absolute;
right: 70rpx;
top: 65rpx;
.u-btn {
font-size: 30rpx;
}
}
}
.toolbar {
padding: 0 4%;
margin-bottom: 5rpx;
border-radius: 0 0 100% 100%;
background-color: #4094ff;
.box {
display: flex;
flex-direction: row;
justify-content: space-around;
padding: 10rpx;
border-radius: 15rpx;
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.15);
background-color: #fefefe;
.item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
// flex-flow: wrap;
height: 120rpx;
color: #666666;
font-size: 30rpx;
padding: 10rpx 10rpx;
.icon {
font-size: 50rpx;
}
.label {
padding: 10rpx;
}
}
.hover {
background-color: #f6f6f6;
border-radius: 15rpx;
}
}
}
.uni-input-input{
border: 1px solid red;
}
.userinfo-topbox{
padding: 10px 15px;
color: #ffffff;
.number{
font-size: 20px;
em{
font-style: normal;
font-size: 12px;
}
}
}
.user-order-top{
padding: 10px 15px;
background: #ffffff;
}
.user-order-box{
padding: 10px 15px;
background: #ffffff;
border-bottom: 1px solid #ededed;
.u-col{
position: relative;
}
.u-badge{
top:-8px!important;
right:5px!important;
background: #ff7001;
border: 1px solid #ffffff;
box-sizing: content-box;
}
}

View File

@@ -0,0 +1,134 @@
<template>
<view class="wrap">
<view class="header">
<view class="userinfo">
<view class="image" @click="navTo('info')">
<!-- <image :src="avatarUrl"></image> -->
<u-avatar size="100" src="/static/aidex/images/user01.png"></u-avatar>
</view>
<view class="info" style="display: flex;justify-content: space-between;">
<view>
<view class="username">管理员</view>
<view class="usercode">普通会员</view>
</view>
<view class="sign-in-images"><image src="/static/aidex/images/sign-in.png"></image></view>
</view>
</view>
<u-row class="userinfo-topbox" gutter="16" justify="center">
<u-col span="4" text-align="center">
<view class="number">9,999<em></em></view>
<view>余额</view>
</u-col>
<u-col span="4" text-align="center" @click="navTo('/pages/sys/application/recharge')">
<view><u-icon size="28px" color="#ffffff" name="rmb-circle"></u-icon></view>
<view>充值</view>
</u-col>
<u-col span="4" text-align="center" @click="navTo('/pages/sys/application/balance-details')">
<view>
<view class="iconfont icon-faan" style="font-size: 24px;color:#ffffff;"></view>
</view>
<view>余额明细</view>
</u-col>
</u-row>
</view>
<view class="list">
<view>
<u-cell-group class="personal-list">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item icon="question-circle" :iconStyle="{ color: '#ff8d06' }" title="常见问题" @click="navTo('problem')"></u-cell-item>
<u-cell-item icon="kefu-ermai" :iconStyle="{ color: '#5f8dff' }" title="意见反馈" @click="navTo('comment')"></u-cell-item>
<u-cell-item icon="map" :iconStyle="{ color: '#316ede' }" title="账号安全" @click="navTo('pwd')"></u-cell-item>
<u-cell-item icon="order" :iconStyle="{ color: '#59bdf9' }" title="清除缓存" @click="navTo('clear-cache')"></u-cell-item>
<u-cell-item icon="account" :iconStyle="{ color: '#27c0dc' }" title="关于我们" @click="navTo('about')"></u-cell-item>
<u-cell-item icon="kefu-ermai" :iconStyle="{ color: '#ff8a00' }" title="联系客服" @click="navTo('service')"></u-cell-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item icon="setting" :iconStyle="{ color: '#2767dc' }" title="系统设置" @click="navTo('setting')"></u-cell-item>
</u-cell-group>
</view>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
iconSize: 38
};
},
computed: {
avatarUrl() {
// let url = this.vuex_user.avatarUrl || '/ctxPath/static/images/user1.jpg';
// url = url.replace('/ctxPath/', this.vuex_config.baseUrl + '/');
let url = this.vuex_config.baseUrl+ this.vuex_user.avatar || '/static/aidex/tabbar/my_2.png';
url = this.replaceAll(url,'\\','/');
return url + '?t=' + new Date().getTime();
}
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
logout() {
this.$u.api.logout().then(res => {
this.$u.toast(res.msg);
if (res.code == '200' || res.code == '401') {
let self = this;
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}, 500);
}
});
},
upgrade(){
// #ifdef APP-PLUS
this.$u.api.upgradeCheck().then(res => {
if (res.result == 'true'){
uni.showModal({
title: '提示',
content: res.message + '是否下载更新?',
showCancel: true,
success: function (res2) {
if (res2.confirm) {
plus.runtime.openURL(res.data.apkUrl);
}
}
});
}else{
this.$u.toast(res.message);
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端无需检查更新')
// #endif
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.wrap .u-cell-box .u-cell_title{
color:#202328;
}
.sign-in-images{
width: 125rpx;
height:50rpx;
position: absolute;
right: 0;
top:5px;
uni-image{
width: 125rpx;
height:50rpx;
}
}
</style>

View File

@@ -0,0 +1,151 @@
<template>
<view class="wrap" style="padding-bottom: 60px;">
<u-cell-group :border="false">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item title="头像" :arrow="true">
<u-avatar size="60" bg-color='#000;' :src="avatarUrl" @click="chooseAvatar" style="position: absolute;right: 35px;top:12px;"></u-avatar>
</u-cell-item>
<u-cell-item title="公司" value="科技有限公司" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="所属部门" value="人事部" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="岗位" value="秘书" :title-width="180" :arrow="false"></u-cell-item>
<u-cell-item title="手机" value="15389457063" :title-width="180" @click="navTo('/pages/sys/user/modify')"></u-cell-item>
<u-cell-item title="邮箱" :title-width="180"></u-cell-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
</u-cell-group>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
model: {
sex: '1'
},
rules: {
},
avatarBase64: ''
};
},
onLoad() {
this.$u.api.getUserInfo().then(res => {
if (res.code == '200'){
this.model = {
id: res.user.id,
name: res.user.name,
sex: res.user.sex,
email: res.user.email,
phonenumber: res.user.phonenumber,
officeTel: res.user.officeTel,
loginDate: res.user.loginDate,
loginIp: res.user.loginIp
}
}else if (res.result == 'login'){
uni.reLaunch({
url: '/pages/sys/login/index'
});
}else{
this.$u.toast(res.message);
}
});
uni.$on('uAvatarCropper', path => {
this.avatarBase64 = path;
})
},
computed: {
avatarUrl() {
if (this.avatarBase64 != ''){
return this.avatarBase64;
}
let url = this.vuex_config.baseUrl+ this.vuex_user.avatar || '/static/aidex/tabbar/my_2.png';
url = this.replaceAll(url,'\\','/');
//url = url.replace('/aidex/', this.vuex_config.baseUrl + '/');
/* alert(url); */
return url;
}
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods: {
chooseAvatar() {
this.$u.route({
url: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',
params: {
destWidth: 200, // 输出图片宽高
rectWidth: 200, // 裁剪框的宽高
fileType: 'jpg', // 输出的图片类型,如果'png'类型发现裁剪的图片太大,改成"jpg"即可
}
})
},
submit() {
this.$refs.uForm.validate(valid => {
if (valid) {
// #ifdef MP-WEIXIN || MP-TOUTIAO
this.$u.toast('您填写的信息有误11。');
if (this.avatarBase64 != '' && !this.avatarBase64.startsWith('data:')){
this.avatarBase64 = 'data:image/jpeg;base64,' + uni.getFileSystemManager()
.readFileSync(this.avatarBase64, "base64")
}
// #endif
this.model.avatarBase64 = this.avatarBase64;
this.$u.api.user.saveUserInfo(this.model).then(res => {
if(res.code == '200'){
this.vuex_user.avatar = res.imgUrl;
this.$u.vuex('vuex_user', this.vuex_user);
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false,
success: function () {
uni.navigateBack();
}
});
}else{
this.$u.toast(res.msg);
}
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss" scoped>
page{
background: #f5f5f5;
}
.u-form{
background: #fff;
padding:0 15px;
}
.u-size-medium{
height: 60rpx;
line-height: 60rpx;
padding: 0 20px;
font-size:28rpx;
background-color: rgba(0, 0, 0, 0.1);
color:#fff;
border: 1px solid #5186e7;
}
.u-hairline-border:after{
border: 1px solid #5186e7!important;
}
.input-placeholder{
text-align: right;
}
.u-input{
text-align: right !important;
}
.u-form-item{
font-size:36rpx;
}
</style>

View File

@@ -0,0 +1,112 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form class="task-form-field" :model="model" :rules="rules" ref="uForm">
<u-form-item label="修改姓名" label-width="180">
<u-input placeholder="请输入姓名"></u-input>
</u-form-item>
</u-form>
<view class="form-footer">
<u-button class="btn" type="primary" @click="submit">保存</u-button>
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import base64 from '@/common/base64.js';
export default {
data() {
return {
model: {
oldPassword: '',
newPassword: '',
confirmNewPassword: ''
},
rules: {
oldPassword: [
{
required: true,
message: '请输入旧密码',
trigger: ['change','blur'],
}
],
newPassword: [
{
required: true,
message: '请输入新密码',
trigger: ['change','blur'],
},
{
pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/,
message: '需同时含有字母和数字长度在6-12之间',
trigger: ['change','blur'],
}
],
confirmPassword: [
{
required: true,
message: '请重新输入密码',
trigger: ['change','blur'],
},
{
validator: (rule, value, callback) => {
return value === this.model.newPassword;
},
message: '两次输入的密码不相等',
trigger: ['change','blur'],
}
],
}
};
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods: {
submit() {
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.user.infoSavePwd({
oldPassword: this.model.oldPassword,
newPassword: this.model.newPassword
}).then(res => {
if(res.code == '200'){
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false,
success: function () {
uni.navigateBack();
}
});
}else{
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false
});
}
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss">
page{
background: #f5f5f5;
}
.remind-text{
padding: 20rpx 30rpx;
color: #666666;
}
</style>

View File

@@ -0,0 +1,76 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="如何切换用户?" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="如何修改密码?" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="如何找回密码?" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="如何更新系统?" @click="navTo('')" :arrow="true"></u-cell-item>
</u-cell-group>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
message: true,
messageBar: true,
upgrade: true
};
},
methods: {
openSettings() {
// #ifdef APP-PLUS
uni.getSystemInfo({
success(res) {
if(res.platform == 'ios'){
plus.runtime.openURL("app-settings://");
} else if (res.platform == 'android'){
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var mIntent = new Intent('android.settings.SOUND_SETTINGS');
main.startActivity(mIntent);
}
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版无需检查更新');
// #endif
},
logout() {
this.$u.api.logout().then(res => {
this.$u.toast(res.msg);
if (res.code == '200') {
let self = this;
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}, 500);
}
});
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
/deep/ .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>

View File

@@ -0,0 +1,126 @@
<template>
<view class="wrap">
<view class="remind-text">请设置登录密码<br>
定期更新密码提高安全性</view>
<u-form class="form" :model="model" :rules="rules" ref="uForm">
<u-form-item label="旧密码" prop="oldPassword" label-width="180">
<u-input type="password" v-model="model.oldPassword" placeholder="请输入旧密码"></u-input>
</u-form-item>
<u-form-item label="新密码" prop="newPassword" label-width="180">
<u-input type="password" v-model="model.newPassword" placeholder="请输入新密码"></u-input>
</u-form-item>
<u-form-item label="确认密码" prop="confirmPassword" label-width="180">
<u-input type="password" v-model="model.confirmPassword" placeholder="请确认新密码"></u-input>
</u-form-item>
</u-form>
<view class="remind-text">
<u-icon name="question-circle" color="#2767dc" size="28"></u-icon>
密码必须是8-16位的数字字符组合不能是纯数字</view>
<view class="form-footer">
<u-button class="btn" type="primary" @click="submit">提交</u-button>
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
import base64 from '@/common/base64.js';
export default {
data() {
return {
model: {
oldPassword: '',
newPassword: '',
confirmNewPassword: ''
},
rules: {
oldPassword: [
{
required: true,
message: '请输入旧密码',
trigger: ['change','blur'],
}
],
newPassword: [
{
required: true,
message: '请输入新密码',
trigger: ['change','blur'],
},
{
pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/,
message: '需同时含有字母和数字长度在6-12之间',
trigger: ['change','blur'],
}
],
confirmPassword: [
{
required: true,
message: '请重新输入密码',
trigger: ['change','blur'],
},
{
validator: (rule, value, callback) => {
return value === this.model.newPassword;
},
message: '两次输入的密码不相等',
trigger: ['change','blur'],
}
],
}
};
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods: {
submit() {
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.user.infoSavePwd({
oldPassword: this.model.oldPassword,
newPassword: this.model.newPassword
}).then(res => {
if(res.code == '200'){
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false,
success: function () {
uni.navigateBack();
}
});
}else{
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false
});
}
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss">
page{
background: #f5f5f5;
}
.u-form{
background: #fff;
padding: 0px 15px;
}
.remind-text{
padding: 20rpx 30rpx;
color: #666666;
}
</style>

View File

@@ -0,0 +1,19 @@
<template>
<view class="wrap">
<view class="service-banner">
<image class="" src="/static/aidex/images/service02.png"></image>
</view>
<u-gap height="20" bg-color="#ffffff"></u-gap>
<u-cell-group class="service-box">
<u-cell-item icon="phone-fill" title="联系电话" label="15389457063" :arrow="true"></u-cell-item>
<u-cell-item icon="weixin-circle-fill" title="官方微信" label="识别二维码,关注官方微信" :arrow="true"></u-cell-item>
<u-cell-item icon="qq-circle-fill" title="官方QQ" label="1125373337、487477889" :arrow="true"></u-cell-item>
</u-cell-group>
</view>
</template>
<script>
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,79 @@
<template>
<view class="wrap">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-group :border="false">
<u-cell-item title="通用" @click="navTo('/pages/sys/user/currency')" :arrow="true"></u-cell-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-cell-item title="版本更新" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="隐私政策" @click="navTo('')" :arrow="true"></u-cell-item>
<u-cell-item title="用户协议" @click="navTo('')" :arrow="true"></u-cell-item>
</u-cell-group>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<view>
<u-button class="sign-out" @click="logout" :hair-line="false">退出登录</u-button>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
};
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
openSettings() {
// #ifdef APP-PLUS
uni.getSystemInfo({
success(res) {
if(res.platform == 'ios'){
plus.runtime.openURL("app-settings://");
} else if (res.platform == 'android'){
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var mIntent = new Intent('android.settings.SOUND_SETTINGS');
main.startActivity(mIntent);
}
}
});
// #endif
// #ifndef APP-PLUS
this.$u.toast('小程序端或H5端已是最新版无需检查更新');
// #endif
},
logout() {
this.$u.api.logout().then(res => {
this.$u.toast(res.msg);
if (res.code == '200') {
let self = this;
setTimeout(() => {
uni.reLaunch({
url: '/pages/sys/login/index'
});
}, 500);
}
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
/deep/ .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
</style>

View File

@@ -0,0 +1,217 @@
<template>
<view class="wrap" style="padding-bottom: 60px;">
<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
<!-- 当前套餐 -->
<view v-if="current === 0">
<u-form :model="form" class="apply-form-field">
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="请假类型" label-width="150" right-icon="arrow-right">
<u-input placeholder="请选择" type="select" class="form-field-select"/>
</u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="开始时间" label-width="150" right-icon="arrow-right">
<u-input placeholder="请选择" type="select" class="form-field-select"/>
</u-form-item>
<u-form-item label="结束时间" label-width="150" right-icon="arrow-right">
<u-input placeholder="请选择" type="select" class="form-field-select"/>
</u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="请假事由" label-width="150"></u-form-item>
<u-form-item><u-input type="textarea" placeholder="请输入内容"/></u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="图片" label-width="150">
<view solt="right" style="flex:1;text-align: right;align-items: center;">
<i class="add-user iconfont icon-tupian"></i>
</view>
</u-form-item>
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
<u-form-item label="选人处理人" label-width="150">
<view solt="right" style="flex:1;text-align: right;align-items: center;">
<i class="add-user iconfont icon-zengjia"></i>
</view>
</u-form-item>
<u-form-item>
<view class="personnel-list">
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user01.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user02.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user03.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user04.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
<view class="personnel-user">
<image class="user-images" src="/static/aidex/images/user05.png"></image>
<i class="iconfont icon-close-circle-fill"></i>
</view>
</view>
</u-form-item>
</u-form>
<u-row gutter="32" class="bottom-box" justify="center">
<u-col span="10">
<view><u-button type="primary" shape="circle" @click="navTo('/pages/sys/home/index')">确定</u-button></view>
</u-col>
</u-row>
</view>
<view v-if="current === 1">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #58ca93;">
审批通过
</view>
</u-card>
<u-card class="task-list-item" :border="false" padding="20" margin="20rpx">
<view slot="head" style="display: flex;align-items: center;justify-content: space-between;">
<view style="display: flex;align-items: center;font-size: 30rpx;"><image class="user-images" src="/static/aidex/images/user06.png"></image>李毅的请假申请</view><view style="color: #999999;font-size: 22rpx;">2021年10月24日</view>
</view>
<view class="" slot="body">
<u-row gutter="16">
<u-col span="12">
<view class="apply-text"><span>假期类型</span>年假</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>开始时间</span>2021年10月25日14:30</view>
</u-col>
<u-col span="12">
<view class="apply-text"><span>结束时间</span>2021年10月27日14:30</view>
</u-col>
</u-row>
</view>
<view class="apply-list-foot" slot="foot" style="text-align: right;color: #f28c03;">
待审核
</view>
</u-card>
</view>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
list: [{
name: '发起申请'
}, {
name: '查看数据',
}],
m2mSimflowList:[],
m2mOrderFlowList:[],
current: 0,
status: 'loadmore',
iconType: 'circle',
isDot: false,
loadText: {
loadmore: '点击加载更多',
loading: '正在加载...',
nomore: '没有更多了'
},
}
},
created(){
},
methods: {
change(index) {
this.current = index;
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
}
</script>
<style lang="scss" scoped>
@import 'index.scss';
page {
background-color: #f5f5f5;
}
.wrap .search{
background: #ffffff;
}
.apply-text{
font-size: 28rpx;
color: #333333;
span{
color: #999999;
}
}
.user-images{
width: 28px;
height:28px;
margin-right: 8px;
}
.apply-list-foot{
font-size: 28rpx;
}
.personnel-list{
display: flex;
align-items: center;
flex-wrap:wrap;
.personnel-user{
position: relative;
margin: 5px 9px 0;
}
.user-images{
width: 48px;
height:48px;
margin-right:0;
}
.iconfont{
position: absolute;
top:-12px;
right:-5px;
color: #FE0100;
}
}
</style>

View File

@@ -0,0 +1,35 @@
/*!
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
* @author aidex
* @version 2020-9-1
*/
.toolbar {
background-color: #fff;
}
.wrap .box .item{
margin: 0 0 0px;
border-radius: 0;
.title {
padding-left:0;
.text {
font-size: 30rpx;
font-weight:500;
margin: 0;
color: #202328;
}
}
}
.grid {
.grid-icon {
color: #666;
}
.grid-text {
font-size: 24rpx;
padding: 15rpx;
color: #202328;
}
}

View File

@@ -0,0 +1,207 @@
<template>
<view class="wrap">
<u-swiper :height="270" :list="imgList" :title="false" @click="imgListClick"></u-swiper>
<view class="workbench-title">常用应用</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('/pages/sys/workbench/add-form')" >
<view class="home-icon icon-color01">
<i class="iconfont icon-qingjia"></i>
</view>
<view class="grid-text">请假申请</view>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">合同申请</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-chucha"></i>
</view>
<view class="grid-text">出差申请</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-ribao"></i>
</view>
<view class="grid-text">日报</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<view class="grid-text">邮件</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">会议室</view>
</u-grid-item>
<u-grid-item @click="navTo('/pages/sys/workbench/install')">
<view class="home-icon icon-color13">
<i class="iconfont icon-tianjia" style="color:#90949d;"></i>
</view>
<view class="grid-text">添加常用</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">日常办公</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-yongche"></i>
</view>
<view class="grid-text">用车</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-jiabanshenqing"></i>
</view>
<view class="grid-text">加班</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-kaoqinchuqin"></i>
</view>
<view class="grid-text">考勤</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-haocaifei"></i>
</view>
<view class="grid-text">耗材</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color01">
<i class="iconfont icon-gongwujiedai"></i>
</view>
<view class="grid-text">接待</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-baoming"></i>
</view>
<view class="grid-text">报名</view>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">财务报销</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-finance"></i>
</view>
<view class="grid-text">费用报销</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-mall-bag"></i>
</view>
<view class="grid-text">采购申请</view>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiaodan"></i>
</view>
<view class="grid-text">付款申请</view>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">用章申请</view>
</u-grid-item>
</u-grid>
</view>
<u-divider>已经到底了</u-divider>
</view>
</template>
<script>
import HeadNavBar from '@/components/headnavbar/index';
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
components: {
HeadNavBar
},
data() {
return {
show: false,
head: '/static/aidex/images/head.png',
imgList: [
{image: '/static/aidex/banner/banner01.png'},
{image: '/static/aidex/banner/banner02.png'},
{image: '/static/aidex/banner/banner03.png'}
],
todoCount: 3
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.navigateTo({
url: url
});
},
imgListClick(index) {
console.log(`点击了第${index + 1}页图片`)
},
itemClick(index) {
console.log(index);
}
}
};
</script>
<style lang="scss">
@import 'index.scss';
.banner-box{
padding: 0 2%;
width: 96%;
height: 170rpx;
margin: 30rpx 0 30rpx;
}
.u-swiper-wrap{
padding:0 10px;
}
.banner-pic{
width: 47%;
float: left;
display: inline-block;
margin: 0 1.5%;
}
.banner-pic image{
width: 100%;
height: 170rpx;
border-radius: 12rpx;
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
}
.u-mode-light-info{
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top:-3px;
}
.workbench-title{
font-size: 32rpx;
font-weight: bold;
color: #333333;
padding: 15px 30rpx;
}
.home-icon i.icon-tongzhi{
font-size: 22px;
}
</style>

View File

@@ -0,0 +1,217 @@
<template>
<view class="wrap">
<u-navbar class="custom-header" title="常用设置" height="44" >
<view slot="right">
<u-button size="mini" type="primary" style="margin-right:10px" @click="navTo('/pages/sys/workbench/index')">保存</u-button>
</view>
</u-navbar>
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<view class="workbench-title">常用应用</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color01">
<i class="iconfont icon-qingjia"></i>
</view>
<view class="grid-text">请假申请</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="1" @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-hetongguanli"></i>
</view>
<view class="grid-text">合同申请</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-chucha"></i>
</view>
<view class="grid-text">出差申请</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-ribao"></i>
</view>
<view class="grid-text">日报</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-tongzhi"></i>
</view>
<view class="grid-text">邮件</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color05">
<i class="iconfont icon-huiyishi"></i>
</view>
<view class="grid-text">会议室</view>
<i class="install-icon iconfont icon-minus-circle-fill"></i>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">日常办公</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-yongche"></i>
</view>
<view class="grid-text">用车</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-jiabanshenqing"></i>
</view>
<view class="grid-text">加班</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-kaoqinchuqin"></i>
</view>
<view class="grid-text">考勤</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-haocaifei"></i>
</view>
<view class="grid-text">耗材</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color01">
<i class="iconfont icon-gongwujiedai"></i>
</view>
<view class="grid-text">接待</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-baoming"></i>
</view>
<view class="grid-text">报名</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
</u-grid>
</view>
<view class="workbench-title">财务报销</view>
<view class="toolbar">
<u-grid class="grid" :col="4" :border="false">
<u-grid-item :index="0" @click="navTo('')" >
<view class="home-icon icon-color04">
<i class="iconfont icon-finance"></i>
</view>
<view class="grid-text">费用报销</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color03">
<i class="iconfont icon-mall-bag"></i>
</view>
<view class="grid-text">采购申请</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item :index="2" @click="navTo('')">
<view class="home-icon icon-color12">
<i class="iconfont icon-baoxiaodan"></i>
</view>
<view class="grid-text">付款申请</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
<u-grid-item @click="navTo('')">
<view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i>
</view>
<view class="grid-text">用章申请</view>
<i class="addinstall-icon iconfont icon-plus-circle-fill"></i>
</u-grid-item>
</u-grid>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
show: false,
};
},
onLoad() {
},
methods: {
navTo(url) {
uni.reLaunch({
url: url
});
},
back(){
uni.navigateBack();
}
}
};
</script>
<style lang="scss" scoped>
@import 'index.scss';
page {
background-color: #ffffff;
}
.wrap .search{
background: #ffffff;
}
.u-swiper-wrap{
padding:0 10px;
}
.u-mode-light-info{
background-color: #ffffff;
color: #666666;
border: 1px solid #e9ecf6;
font-size: 12px;
padding: 2px 8px;
position: relative;
top:-3px;
}
.workbench-title{
font-size: 32rpx;
font-weight: bold;
color: #333333;
padding: 15px 30rpx;
}
.home-icon i.icon-tongzhi{
font-size: 22px;
}
.grid .u-grid-item{
position: relative;
.install-icon{
position: absolute;
top:-10px;
right:50%;
margin-right: -30px;
color: #FE0100;
}
.addinstall-icon{
position: absolute;
top:-10px;
right:50%;
margin-right: -30px;
color: #4285F4;
}
}
</style>

View File

@@ -0,0 +1,120 @@
<template>
<view class="wrap form_right">
<u-form class="form" :model="model" :rules="rules" ref="uForm" label-position="left">
<u-form-item label="编号" prop="id" label-width="180">
<u-input placeholder="请输入编号" v-model="model.id" type="text" maxlength="64" style="text-align: right;"></u-input>
</u-form-item>
<u-form-item label="单行文本" prop="testInput" label-width="180">
<u-input placeholder="请输入单行文本" v-model="model.testInput" type="text" maxlength="200" style="text-align: right;"></u-input>
</u-form-item>
<u-form-item label="多行文本" prop="testTextarea" label-width="180" label-position="top">
<u-input type="textarea" placeholder="请输入多行文本" v-model="model.testTextarea" style="text-align: left;" height="100" maxlength="500" />
</u-form-item>
</u-form>
<view class="form-footer">
<u-button class="btn" type="primary" @click="submit">提交</u-button>
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
model: {
id: '',
testInput: '',
testTextarea: '',
testSelect: '',
testSelectMultiple: '',
testSelectMultipleLabel: '',
testRadio: '',
testCheckbox: '',
testUser: {
userCode: '',
userName: ''
},
testOffice: {
officeCode: '',
officeName: ''
}
},
rules: {
testInput: [
{
required: true,
message: '请输入单行文本',
trigger: ['change','blur'],
}
]
},
officeSelectList: [],
userSelectList: [],
};
},
onLoad(params){
if (params.id){
this.$u.api.testData.form({id: params.id}).then(res => {
Object.assign(this.model, res.testData);
});
}
},
onReady() {
this.$refs.uForm.setRules(this.rules);
// 机构数据
this.$u.api.office.treeData().then(res => {
this.officeSelectList = res;
});
// 人员和机构数据
this.$u.api.office.treeData({isLoadUser: true}).then(res => {
this.userSelectList = res;
});
},
methods: {
submit() {
console.log(this.model)
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.testData.save(this.model).then(res => {
uni.showModal({
title: '提示',
content: res.message,
showCancel: false,
success: function () {
if (res.result == 'true') {
uni.navigateBack();
}
}
});
});
} else {
this.$u.toast('您填写的信息有误,请根据提示修正。');
}
});
},
cancel() {
uni.navigateBack();
}
}
};
</script>
<style lang="scss" scoped>
.input-placeholder{
text-align: right;
}
.u-input{
text-align: right!important;
}
.u-form-item__message{
text-align: right!important;
}
.uni-textarea-placeholder{
text-align: left;
}
.u-form-item{
font-size:36rpx;
}
</style>

View File

@@ -0,0 +1,117 @@
<template>
<view class="wrap">
<view class="search">
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
</view>
<scroll-view class="scroll-list" scroll-y="true" @scrolltolower="loadMore">
<u-cell-group class="list" :border="false">
<u-swipe-action :options="options" v-for="(item, index) in list" :key="item.id" :index="index" @click="optionsClick">
<u-cell-item :arrow="true" @click="navTo('form?id='+item.id)">
<text slot="title">{{item.testInput || item.id}}</text>
<text slot="label">创建者{{item.createBy}} &nbsp;|&nbsp; 时间{{item.createDate}}</text>
</u-cell-item>
</u-swipe-action>
</u-cell-group>
<view class="loadmore" @click="loadMore">
<u-loadmore :status="loadStatus"></u-loadmore>
</view>
</scroll-view>
<view class="btn-plus" @click="navTo('form')">
<u-icon name="plus-circle-fill" size="90" color="#3d87ff"></u-icon>
</view>
</view>
</template>
<script>
/**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/
export default {
data() {
return {
keywords: '',
query: {
pageNo: 1,
pageSize: 20
},
list: [],
count: 0,
loadStatus: 'loadmore',
options: [
{text: '删除', style: { background: '#dd524d'}}
]
};
},
onLoad() {
this.loadList();
},
methods: {
loadMore() {
this.loadStatus = "loading";
setTimeout(() => {
this.query.pageNo += 1;
this.loadList();
}, 100);
},
loadList() {
this.$u.api.testData.list(this.query).then(res => {
if (!res.list || res.list.length == 0){
this.loadStatus = "nomore";
return;
}
this.list = this.list.concat(res.list);
this.count = res.count;
this.query.pageNo = res.pageNo;
this.query.pageSize = res.pageSize;
this.loadStatus = "loadmore";
});
},
optionsClick(rowIndex, btnIndex) {
if(btnIndex == 0) {
let self = this;
uni.showModal({
title: '提示',
content: '确认要删除该数据吗?',
showCancel: true,
success: function (res2) {
if (res2.confirm) {
let row = self.list[rowIndex];
self.$u.api.testData.delete({id: row.id}).then(res => {
self.$u.toast(res.message);
if (res.result == 'true'){
self.list.splice(rowIndex, 1);
}
});
}
}
});
}
},
search(value) {
this.list = [];
this.query.pageNo = 0;
this.query.testInput = value;
this.loadList();
},
navTo(url) {
uni.navigateTo({
url: url
});
}
}
};
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
.btn-plus {
position: absolute;
bottom: 50rpx;
right: 50rpx;
z-index: 1;
opacity: 0.6;
}
.btn-plus:hover {
opacity: 1;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -0,0 +1,363 @@
(function(window, document, exportName, undefined) {
"use strict";
var isMultiTouch = false;
var multiTouchStartPos;
var eventTarget;
var touchElements = {};
// polyfills
if(!document.createTouch) {
document.createTouch = function(view, target, identifier, pageX, pageY, screenX, screenY, clientX, clientY) {
// auto set
if(clientX == undefined || clientY == undefined) {
clientX = pageX - window.pageXOffset;
clientY = pageY - window.pageYOffset;
}
return new Touch(target, identifier, {
pageX: pageX,
pageY: pageY,
screenX: screenX,
screenY: screenY,
clientX: clientX,
clientY: clientY
});
};
}
if(!document.createTouchList) {
document.createTouchList = function() {
var touchList = new TouchList();
for (var i = 0; i < arguments.length; i++) {
touchList[i] = arguments[i];
}
touchList.length = arguments.length;
return touchList;
};
}
/**
* create an touch point
* @constructor
* @param target
* @param identifier
* @param pos
* @param deltaX
* @param deltaY
* @returns {Object} touchPoint
*/
function Touch(target, identifier, pos, deltaX, deltaY) {
deltaX = deltaX || 0;
deltaY = deltaY || 0;
this.identifier = identifier;
this.target = target;
this.clientX = pos.clientX + deltaX;
this.clientY = pos.clientY + deltaY;
this.screenX = pos.screenX + deltaX;
this.screenY = pos.screenY + deltaY;
this.pageX = pos.pageX + deltaX;
this.pageY = pos.pageY + deltaY;
}
/**
* create empty touchlist with the methods
* @constructor
* @returns touchList
*/
function TouchList() {
var touchList = [];
touchList.item = function(index) {
return this[index] || null;
};
// specified by Mozilla
touchList.identifiedTouch = function(id) {
return this[id + 1] || null;
};
return touchList;
}
/**
* Simple trick to fake touch event support
* this is enough for most libraries like Modernizr and Hammer
*/
function fakeTouchSupport() {
var objs = [window, document.documentElement];
var props = ['ontouchstart', 'ontouchmove', 'ontouchcancel', 'ontouchend'];
for(var o=0; o<objs.length; o++) {
for(var p=0; p<props.length; p++) {
if(objs[o] && objs[o][props[p]] == undefined) {
objs[o][props[p]] = null;
}
}
}
}
/**
* we don't have to emulate on a touch device
* @returns {boolean}
*/
function hasTouchSupport() {
return ("ontouchstart" in window) || // touch events
(window.Modernizr && window.Modernizr.touch) || // modernizr
(navigator.msMaxTouchPoints || navigator.maxTouchPoints) > 2; // pointer events
}
/**
* disable mouseevents on the page
* @param ev
*/
function preventMouseEvents(ev) {
// 注释启用默认事件
// ev.preventDefault();
// ev.stopPropagation();
}
/**
* only trigger touches when the left mousebutton has been pressed
* @param touchType
* @returns {Function}
*/
function onMouse(touchType) {
return function(ev) {
// prevent mouse events
preventMouseEvents(ev);
if (ev.which !== 1) {
return;
}
// The EventTarget on which the touch point started when it was first placed on the surface,
// even if the touch point has since moved outside the interactive area of that element.
// also, when the target doesnt exist anymore, we update it
if (ev.type == 'mousedown' || !eventTarget || (eventTarget && !eventTarget.dispatchEvent)) {
eventTarget = ev.target;
}
// shiftKey has been lost, so trigger a touchend
if (isMultiTouch && !ev.shiftKey) {
triggerTouch('touchend', ev);
isMultiTouch = false;
}
triggerTouch(touchType, ev);
// we're entering the multi-touch mode!
if (!isMultiTouch && ev.shiftKey) {
isMultiTouch = true;
multiTouchStartPos = {
pageX: ev.pageX,
pageY: ev.pageY,
clientX: ev.clientX,
clientY: ev.clientY,
screenX: ev.screenX,
screenY: ev.screenY
};
triggerTouch('touchstart', ev);
}
// reset
if (ev.type == 'mouseup') {
multiTouchStartPos = null;
isMultiTouch = false;
eventTarget = null;
}
}
}
/**
* trigger a touch event
* @param eventName
* @param mouseEv
*/
function triggerTouch(eventName, mouseEv) {
var touchEvent = document.createEvent('Event');
touchEvent.initEvent(eventName, true, true);
touchEvent.altKey = mouseEv.altKey;
touchEvent.ctrlKey = mouseEv.ctrlKey;
touchEvent.metaKey = mouseEv.metaKey;
touchEvent.shiftKey = mouseEv.shiftKey;
touchEvent.touches = getActiveTouches(mouseEv, eventName);
touchEvent.targetTouches = getActiveTouches(mouseEv, eventName);
touchEvent.changedTouches = getChangedTouches(mouseEv, eventName);
eventTarget.dispatchEvent(touchEvent);
}
/**
* create a touchList based on the mouse event
* @param mouseEv
* @returns {TouchList}
*/
function createTouchList(mouseEv) {
var touchList = new TouchList();
if (isMultiTouch) {
var f = TouchEmulator.multiTouchOffset;
var deltaX = multiTouchStartPos.pageX - mouseEv.pageX;
var deltaY = multiTouchStartPos.pageY - mouseEv.pageY;
touchList.push(new Touch(eventTarget, 1, multiTouchStartPos, (deltaX*-1) - f, (deltaY*-1) + f));
touchList.push(new Touch(eventTarget, 2, multiTouchStartPos, deltaX+f, deltaY-f));
} else {
touchList.push(new Touch(eventTarget, 1, mouseEv, 0, 0));
}
return touchList;
}
/**
* receive all active touches
* @param mouseEv
* @returns {TouchList}
*/
function getActiveTouches(mouseEv, eventName) {
// empty list
if (mouseEv.type == 'mouseup') {
return new TouchList();
}
var touchList = createTouchList(mouseEv);
if(isMultiTouch && mouseEv.type != 'mouseup' && eventName == 'touchend') {
touchList.splice(1, 1);
}
return touchList;
}
/**
* receive a filtered set of touches with only the changed pointers
* @param mouseEv
* @param eventName
* @returns {TouchList}
*/
function getChangedTouches(mouseEv, eventName) {
var touchList = createTouchList(mouseEv);
// we only want to return the added/removed item on multitouch
// which is the second pointer, so remove the first pointer from the touchList
//
// but when the mouseEv.type is mouseup, we want to send all touches because then
// no new input will be possible
if(isMultiTouch && mouseEv.type != 'mouseup' &&
(eventName == 'touchstart' || eventName == 'touchend')) {
touchList.splice(0, 1);
}
return touchList;
}
/**
* show the touchpoints on the screen
*/
function showTouches(ev) {
var touch, i, el, styles;
// first all visible touches
for(i = 0; i < ev.touches.length; i++) {
touch = ev.touches[i];
el = touchElements[touch.identifier];
if(!el) {
el = touchElements[touch.identifier] = document.createElement("div");
document.body.appendChild(el);
}
styles = TouchEmulator.template(touch);
for(var prop in styles) {
el.style[prop] = styles[prop];
}
}
// remove all ended touches
if(ev.type == 'touchend' || ev.type == 'touchcancel') {
for(i = 0; i < ev.changedTouches.length; i++) {
touch = ev.changedTouches[i];
el = touchElements[touch.identifier];
if(el) {
el.parentNode.removeChild(el);
delete touchElements[touch.identifier];
}
}
}
}
/**
* TouchEmulator initializer
*/
function TouchEmulator() {
if (hasTouchSupport()) {
return;
}
fakeTouchSupport();
window.addEventListener("mousedown", onMouse('touchstart'), true);
window.addEventListener("mousemove", onMouse('touchmove'), true);
window.addEventListener("mouseup", onMouse('touchend'), true);
window.addEventListener("mouseenter", preventMouseEvents, true);
window.addEventListener("mouseleave", preventMouseEvents, true);
window.addEventListener("mouseout", preventMouseEvents, true);
window.addEventListener("mouseover", preventMouseEvents, true);
// it uses itself!
window.addEventListener("touchstart", showTouches, true);
window.addEventListener("touchmove", showTouches, true);
window.addEventListener("touchend", showTouches, true);
window.addEventListener("touchcancel", showTouches, true);
}
// start distance when entering the multitouch mode
TouchEmulator.multiTouchOffset = 75;
/**
* css template for the touch rendering
* @param touch
* @returns object
*/
TouchEmulator.template = function(touch) {
var size = 0;
var transform = 'translate('+ (touch.clientX-(size/2)) +'px, '+ (touch.clientY-(size/2)) +'px)';
return {
position: 'fixed',
left: 0,
top: 0,
background: '#fff',
border: 'solid 1px #999',
opacity: .6,
borderRadius: '100%',
height: size + 'px',
width: size + 'px',
padding: 0,
margin: 0,
display: 'block',
overflow: 'hidden',
pointerEvents: 'none',
webkitUserSelect: 'none',
mozUserSelect: 'none',
userSelect: 'none',
webkitTransform: transform,
mozTransform: transform,
transform: transform,
zIndex: 100
}
};
// export
if (typeof define == "function" && define.amd) {
define(function() {
return TouchEmulator;
});
} else if (typeof module != "undefined" && module.exports) {
module.exports = TouchEmulator;
} else {
window[exportName] = TouchEmulator;
}
})(window, document, "TouchEmulator");

View File

@@ -0,0 +1,463 @@
@font-face {
font-family: "iconfont"; /* Project id 2874232 */
src: url('~@/static/iconfont/iconfont.woff2?t=1636514770782') format('woff2'),
url('~@/static/iconfont/iconfont.woff?t=1636514770782') format('woff'),
url('~@/static/iconfont/iconfont.ttf?t=1636514770782') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-minus-circle-fill:before {
content: "\e844";
}
.icon-close-circle-fill:before {
content: "\e845";
}
.icon-plus-circle-fill:before {
content: "\e846";
}
.icon-tupian:before {
content: "\e8ba";
}
.icon-xiangji:before {
content: "\e8bc";
}
.icon-zengjia:before {
content: "\e8c0";
}
.icon-youhuiquan:before {
content: "\e8c1";
}
.icon-quanbudingdan:before {
content: "\e600";
}
.icon-moban:before {
content: "\e6bb";
}
.icon-hetongqianzi:before {
content: "\e615";
}
.icon-gongwujiedai:before {
content: "\e609";
}
.icon-kaoqinchuqin:before {
content: "\e8d0";
}
.icon-haocaifei:before {
content: "\e6bc";
}
.icon-huiyishi1:before {
content: "\e662";
}
.icon-baoming1:before {
content: "\e632";
}
.icon-jiabanshenqing:before {
content: "\e651";
}
.icon-hetongxieyi:before {
content: "\e64b";
}
.icon-jiabanshenpi:before {
content: "\e774";
}
.icon-yongche:before {
content: "\e601";
}
.icon-baoming:before {
content: "\e664";
}
.icon-qingjia:before {
content: "\e624";
}
.icon-tianshenpi:before {
content: "\eb67";
}
.icon-icon_yingyongguanli:before {
content: "\eb8f";
}
.icon-xingzhuang-xingxing:before {
content: "\eb9a";
}
.icon-gongnengdingyi:before {
content: "\ebb7";
}
.icon-kongxinduigou:before {
content: "\ebe5";
}
.icon-tianjia:before {
content: "\e620";
}
.icon-chucha:before {
content: "\e60f";
}
.icon-gongdan:before {
content: "\ec37";
}
.icon-daibanshixiang2:before {
content: "\ec4e";
}
.icon-bianjisekuai:before {
content: "\ec7c";
}
.icon-hetongguanli:before {
content: "\e625";
}
.icon-huiyishi:before {
content: "\e608";
}
.icon-ribao:before {
content: "\e835";
}
.icon-banjieshiwu:before {
content: "\e602";
}
.icon-daibanshiwu:before {
content: "\e603";
}
.icon-kaoheguanli:before {
content: "\e606";
}
.icon-shiyanshikaohe:before {
content: "\e607";
}
.icon-baoxiao:before {
content: "\e605";
}
.icon-shenpi:before {
content: "\e626";
}
.icon-baoxiaodan:before {
content: "\e61b";
}
.icon-xinwen:before {
content: "\e639";
}
.icon-tongzhi:before {
content: "\e648";
}
.icon-fujian:before {
content: "\e655";
}
.icon-msg-system:before {
content: "\e6b9";
}
.icon-daibanshixiang:before {
content: "\e65d";
}
.icon-tongzhi1:before {
content: "\e64a";
}
.icon-daibanshixiang1:before {
content: "\e6ba";
}
.icon-search:before {
content: "\e6b4";
}
.icon-view-list:before {
content: "\e6b5";
}
.icon-headset-one:before {
content: "\e6b6";
}
.icon-list-checkbox:before {
content: "\e6b7";
}
.icon-jiyika:before {
content: "\e6b8";
}
.icon-chart-histogram-two:before {
content: "\e679";
}
.icon-audit:before {
content: "\e67a";
}
.icon-check-one:before {
content: "\e67b";
}
.icon-bookmark-one:before {
content: "\e67c";
}
.icon-a-comment1:before {
content: "\e67d";
}
.icon-avatar:before {
content: "\e67e";
}
.icon-collection-files:before {
content: "\e67f";
}
.icon-copy-one:before {
content: "\e680";
}
.icon-add:before {
content: "\e681";
}
.icon-currency:before {
content: "\e682";
}
.icon-edit-two:before {
content: "\e683";
}
.icon-finance:before {
content: "\e684";
}
.icon-find:before {
content: "\e685";
}
.icon-folder-plus:before {
content: "\e686";
}
.icon-link-break:before {
content: "\e687";
}
.icon-financing-one:before {
content: "\e688";
}
.icon-help:before {
content: "\e689";
}
.icon-chart-pie:before {
content: "\e68a";
}
.icon-id-card:before {
content: "\e68b";
}
.icon-a-lock1:before {
content: "\e68c";
}
.icon-list:before {
content: "\e68d";
}
.icon-lock:before {
content: "\e68e";
}
.icon-key:before {
content: "\e68f";
}
.icon-a-key1:before {
content: "\e690";
}
.icon-me:before {
content: "\e691";
}
.icon-equalizer:before {
content: "\e692";
}
.icon-comment:before {
content: "\e693";
}
.icon-log:before {
content: "\e694";
}
.icon-mall-bag:before {
content: "\e695";
}
.icon-list-view:before {
content: "\e696";
}
.icon-send:before {
content: "\e697";
}
.icon-people:before {
content: "\e698";
}
.icon-peoples:before {
content: "\e699";
}
.icon-a-message-one1:before {
content: "\e69a";
}
.icon-phone-telephone:before {
content: "\e69b";
}
.icon-internal-transmission:before {
content: "\e69c";
}
.icon-schedule:before {
content: "\e69d";
}
.icon-more-one:before {
content: "\e69e";
}
.icon-sim:before {
content: "\e69f";
}
.icon-a-peoples1:before {
content: "\e6a0";
}
.icon-wallet:before {
content: "\e6a1";
}
.icon-permissions:before {
content: "\e6a2";
}
.icon-faan:before {
content: "\e6a3";
}
.icon-transporter:before {
content: "\e6a4";
}
.icon-transaction-order:before {
content: "\e6a5";
}
.icon-message-one:before {
content: "\e6a6";
}
.icon-shouji:before {
content: "\e6a7";
}
.icon-liebiaochakanmoshi_view-grid-list:before {
content: "\e6a8";
}
.icon-time:before {
content: "\e6a9";
}
.icon-transaction:before {
content: "\e6aa";
}
.icon-setting-two:before {
content: "\e6ab";
}
.icon-plan:before {
content: "\e6ac";
}
.icon-a-time1:before {
content: "\e6ad";
}
.icon-shezhi_setting:before {
content: "\e6ae";
}
.icon-zanting:before {
content: "\e6af";
}
.icon-sousuo_search:before {
content: "\e6b0";
}
.icon-xiangqingliebiao:before {
content: "\e6b1";
}
.icon-workbench:before {
content: "\e6b2";
}
.icon-shujubiao_data-sheet:before {
content: "\e6b3";
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="PoweredByAidex"/>
<link rel="shortcut icon" type="image/x-icon" href="static/aidex/favicon.png">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>aidex Mobile APP</title>
<script>
window.onresize = function () {
if (document.documentElement.clientWidth < 768) {
window.location.href = '../#/';
}
};
window.onresize();
</script>
<style>
.mobile-model {
margin: 10px auto;
background-color: #fff;
width: 330px;
margin-top: calc(50vh - 350px);
box-sizing: border-box;
background-image: url(common/img/iPhoneX.png);
background-repeat: no-repeat;
background-size: 100%;
border-radius: 30px;
padding: 48px 23px 38px 16px;
}
.mobile-content {
box-sizing: border-box;
width: 298px;
height: 582px;
border-bottom-left-radius: 20px;
}
.mobile-iframe {
height: 100%;
width: 100%;
border-radius: 20px;
}
</style>
</head>
<body>
<div class="mobile-model">
<div class="mobile-content">
<iframe src="../#/" class="mobile-iframe" scrolling="auto" frameborder="0"></iframe>
</div>
</div>
</body>
</html>

BIN
ruoyi-uniapp/static/uni.ttf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

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