Compare commits
2 Commits
2b53f1cf47
...
15097de339
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15097de339 | ||
|
|
45d9d9fd1c |
36
README.md
36
README.md
|
|
@ -112,34 +112,18 @@ https://ciyon.ciy.cn/
|
|||
|
||||
https://ciyon.ciy.cn/admin/
|
||||
|
||||
# Windows开发环境部署
|
||||
安装环境: Nginx、PHP8、MariaDB10、Golang
|
||||
开发必备: Git、VSCode(Cursor、Claude Code等替代)、HBuilder、微信开发者工具
|
||||
开发推荐: Navicat 17+、WinSCP5+、Chrome、Apifox、S3 Browser、Node.js
|
||||
工具推荐: Notepad3、draw.io、XMind、Everything
|
||||
# 环境部署建议
|
||||
|
||||
nginx关键配置(PHP):
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name ciyon.local.ciy.cn;
|
||||
root D:/Dreams/ciy/ciyon/web;
|
||||
include ssl_params;
|
||||
include ciyon5_params;
|
||||
}
|
||||
安装Nginx
|
||||
统一处理80/443端口
|
||||
|
||||
nginx关键配置(Golang):
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name ciyongo.local.ciy.cn;
|
||||
root D:/Dreams/ciy/ciyon/web;
|
||||
include ssl_params;
|
||||
set $ipport http://127.0.0.1:4003;
|
||||
include ciyon5go_params;
|
||||
}
|
||||
安装MariaDB数据库
|
||||
开启慢查询日志
|
||||
|
||||
*.local.ciy.cn SSL证书下载 https://ciyon.ciy.cn/ud/install/ssl_local.zip
|
||||
webserver打包下载 https://ciyon.ciy.cn/ud/install/webserver.zip
|
||||
mariadb下载 https://ciyon.ciy.cn/ud/install/mariadb-10.5.10-winx64.msi
|
||||
PHP需配置PHP-fpm,建议用PHP8
|
||||
|
||||
# Linux生产环境部署
|
||||
Golang虽然可以独立运行,但建议Nginx转发
|
||||
|
||||
IDE开发工具
|
||||
PC端推荐用VSCode、Cursor
|
||||
移动端推荐用Uniapp、VSCode
|
||||
|
|
|
|||
1521
c5_labsci.sql
1521
c5_labsci.sql
File diff suppressed because it is too large
Load Diff
|
|
@ -34,12 +34,20 @@
|
|||
// selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
|
||||
// icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
|
||||
// });
|
||||
var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M207,110h614c109,0,197,88,197,197v416c0,109-88,197-197,197H207c-109,0-197-88-197-197V308C9,198,97,110,207,110z" fill="{{bg2}}"></path><path d="M865,819H118c-10,0-19-9-19-19c0-3,1-7,2-10l26-35c3-6,10-9,17-9h748c10,0,19,9,19,19c0,3-1,7-2,10l-26,35C878,815,872,819,865,819z M451,285c0-8-6-14-14-14h-246c-8,0-14,6-14,14v246c0,8,6,14,14,14h246c8,0,14-6,14-14V285z M909,503c0-8-6-14-14-14H562c-8,0-14,6-14,14v25c0,8,6,14,14,14h333c8,0,14-6,14-14V503z" fill="{{bg1}}"></path></svg>';
|
||||
// var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M207,110h614c109,0,197,88,197,197v416c0,109-88,197-197,197H207c-109,0-197-88-197-197V308C9,198,97,110,207,110z" fill="{{bg2}}"></path><path d="M865,819H118c-10,0-19-9-19-19c0-3,1-7,2-10l26-35c3-6,10-9,17-9h748c10,0,19,9,19,19c0,3-1,7-2,10l-26,35C878,815,872,819,865,819z M451,285c0-8-6-14-14-14h-246c-8,0-14,6-14,14v246c0,8,6,14,14,14h246c8,0,14-6,14-14V285z M909,503c0-8-6-14-14-14H562c-8,0-14,6-14,14v25c0,8,6,14,14,14h333c8,0,14-6,14-14V503z" fill="{{bg1}}"></path></svg>';
|
||||
// app.globalData.tabbarArr.push({
|
||||
// name: 'tabbar.cd',
|
||||
// fullpath: '/pages/card',
|
||||
// selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
|
||||
// icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
|
||||
// });
|
||||
// 消息中心 SVG(带{{bg1}}/{{bg2}}占位符,适配你的替换逻辑)
|
||||
var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512.3 79.6c-243 0-440 165.9-440 370.5 0 122.6 70.7 231.3 179.7 298.8 12.2 7.5 19.1 21.3 18.1 35.6L259 939c-0.7 9.2 8.8 15.8 17.3 12L543 828.9c16.1-7.4 33.3-11.8 50.8-14.6 204.1-32.2 358.5-183 358.5-364.2 0-204.7-197-370.5-440-370.5z" fill="{{bg2}}"></path><path d="M256.2 511.1c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.6 64-64 64z m256.1 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z m256 3.4c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.6 64-64 64z" fill="{{bg1}}"></path></svg>';
|
||||
app.globalData.tabbarArr.push({
|
||||
name: 'tabbar.notify',
|
||||
fullpath: '/pages/main/notify',
|
||||
selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
|
||||
icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
|
||||
name: 'tabbar.message',
|
||||
fullpath: '/pages/main/message',
|
||||
selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
|
||||
icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
|
||||
});
|
||||
var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M706,460c64-38,107-104,107-179c0-118-106-213-237-213c-131,0-237,95-237,213c0,75,43,141,107,179c-181,51-311,206-311,385c0,39,35,70,78,70H938c43,0,78-32,78-70v-5C1017,661,886,511,706,460L706,460z" fill="{{bg1}}"/><path d="M580,472c64-42,107-115,107-197c0-131-106-237-237-237c-131,0-237,106-237,237c0,83,43,155,107,199c-181,57-311,228-311,427c0,43,14,76,57,76l745,1c43,0,78-35,78-78v-6C891,696,761,528,580,472L580,472z" fill="{{bg2}}"/></svg>';
|
||||
app.globalData.tabbarArr.push({
|
||||
|
|
@ -57,7 +65,7 @@
|
|||
app.globalData.srv = 't';
|
||||
app.globalData.jsnajax = 'ambap/';
|
||||
app.globalData.jsnurl = {};
|
||||
app.globalData.jsnurl.t = 'https://labsci.ciy.cn/';
|
||||
app.globalData.jsnurl.t = 'https://labsci.local.ciy.cn/';
|
||||
app.globalData.demourl = 'https://i.qiboc.cn/app.goc'; //原型图地址
|
||||
app.globalData.tokenfield = "ciyap";
|
||||
app.globalData.tokensalt = "ast34h$3";
|
||||
|
|
@ -67,7 +75,7 @@
|
|||
app.globalData.dupsec = 60;
|
||||
app.globalData.storselect = '/';
|
||||
app.globalData.storlist = {
|
||||
'/': 'https://labsci.ciy.cn/ud/',
|
||||
'/': 'https://labsci.local.ciy.cn/ud/',
|
||||
'A': 'https://cf5.nyyzsoft.cn/ud/'
|
||||
};
|
||||
app.globalData.stortransfer = ['/'];
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<template>
|
||||
<view :animation="anidataauth" class="auth">
|
||||
<view class="swiper" :style="{transform: 'translateX(' + pg + 'vw)',height:height}">
|
||||
<!-- 注册页面 -->
|
||||
<view class="content">
|
||||
<view class="title">
|
||||
<ciy-gesture @toleft="gopg(1)" class="mid" style="letter-spacing: 1em;">{{lang('login.tabreg')}}</ciy-gesture>
|
||||
|
|
@ -43,7 +42,6 @@
|
|||
</form>
|
||||
</view>
|
||||
|
||||
<!-- 登录页面 -->
|
||||
<view class="content">
|
||||
<view class="title">
|
||||
<view @tap="gopg(0)" style="padding-right:2em;">{{lang('login.tabreg')}}</view>
|
||||
|
|
@ -87,7 +85,6 @@
|
|||
</form>
|
||||
</view>
|
||||
|
||||
<!-- 忘记密码页面 -->
|
||||
<view class="content">
|
||||
<view class="title">
|
||||
<view @tap="gopg(0)">{{lang('login.tabreg')}}</view>
|
||||
|
|
@ -105,7 +102,7 @@
|
|||
<view class="ciy-form">
|
||||
<label>验证码</label>
|
||||
<view>
|
||||
<ciy-capcode hasmore name="captcha" btntxt="发送短信" :account="forgetmobile" :func="smsfunc" placeholder="请输入验证码"></ciy-capcode>
|
||||
<ciy-capcode hasmore name="capsms" btntxt="发送短信" :account="forgetmobile" :func="smsfunc" placeholder="请输入验证码"></ciy-capcode>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
|
|
@ -171,6 +168,7 @@
|
|||
.auth {
|
||||
position: fixed;
|
||||
z-index: 50002;
|
||||
/*51*/
|
||||
bottom: -2em;
|
||||
left: 0;
|
||||
right: 0;
|
||||
|
|
@ -180,6 +178,7 @@
|
|||
.authbg {
|
||||
position: fixed;
|
||||
z-index: 50001;
|
||||
/*50*/
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: -0.5em;
|
||||
|
|
@ -205,7 +204,6 @@
|
|||
box-shadow: 2px 2px 20px -10px var(--bg9);
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import md5 from '@/util/md5.js';
|
||||
export default {
|
||||
|
|
@ -217,7 +215,7 @@
|
|||
user: '',
|
||||
pass: '',
|
||||
xieyi: false,
|
||||
pg: -100,
|
||||
pg: -100, //-100
|
||||
ver: 6,
|
||||
height: '28em',
|
||||
tusers: [],
|
||||
|
|
@ -228,9 +226,10 @@
|
|||
options: {
|
||||
virtualHost: true
|
||||
},
|
||||
watch: {},
|
||||
computed: {},
|
||||
mounted() {},
|
||||
methods: {
|
||||
// 打开登录弹窗
|
||||
async Open(authcb, must) {
|
||||
this.authcb = authcb;
|
||||
if (!must) {
|
||||
|
|
@ -250,7 +249,7 @@
|
|||
onlyAuthorize: true
|
||||
});
|
||||
var retjson = await this.callfunc({
|
||||
func: 'login.json_wx_autouser',
|
||||
func: 'login.wx_autouser',
|
||||
loadhide: true,
|
||||
data: {
|
||||
code: res.code,
|
||||
|
|
@ -263,7 +262,6 @@
|
|||
return;
|
||||
//#endif
|
||||
}
|
||||
// 动画显示
|
||||
var animation = uni.createAnimation({
|
||||
timingFunction: 'ease'
|
||||
});
|
||||
|
|
@ -272,7 +270,6 @@
|
|||
duration: 700
|
||||
});
|
||||
this.anidataauth = animation.export();
|
||||
|
||||
var animation = uni.createAnimation({
|
||||
timingFunction: 'ease'
|
||||
});
|
||||
|
|
@ -281,16 +278,12 @@
|
|||
duration: 400
|
||||
});
|
||||
this.anidatabg = animation.export();
|
||||
|
||||
this.user = this.getstorage('login_mb');
|
||||
this.smsfunc = 'login.json_sendsms';
|
||||
this.smsfunc = 'login.sendsms';
|
||||
},
|
||||
|
||||
// 登录提交
|
||||
async submitlogin(e) {
|
||||
var app = getApp();
|
||||
var post = e.detail.value;
|
||||
|
||||
if (post.user.length > 0)
|
||||
this.setstorage('login_mb', post.user);
|
||||
if (post.user == '')
|
||||
|
|
@ -299,33 +292,23 @@
|
|||
return this.toast('请填写密码');
|
||||
if (!this.xieyi && await this.askmsg('是否阅读并同意协议?', '同意') != 'ok')
|
||||
return;
|
||||
|
||||
// 时间戳(毫秒级)
|
||||
post.auth = (new Date()).getTime();
|
||||
post.appcid = app.globalData._appcid;
|
||||
|
||||
// 密码加密:md5(用户输入密码MD5 + auth时间戳)
|
||||
var userPassMd5 = md5.md5(post.pass);
|
||||
post.pass = md5.md5(userPassMd5 + post.auth);
|
||||
|
||||
// 调用登录接口
|
||||
var epass = md5.md5(post.pass + app.globalData.tokensalt);
|
||||
post.pass = md5.md5(epass + post.auth);
|
||||
//._from = app.globalData._sysinfo;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'login.json_login_mobile',
|
||||
func: 'login.login_mobile', // login.login
|
||||
data: post
|
||||
});
|
||||
|
||||
if (retjson.code != 1)
|
||||
return this.toast(retjson.errmsg);
|
||||
|
||||
this.setstorage('_dbgs', retjson.dbgs);
|
||||
this.tologin(retjson);
|
||||
},
|
||||
|
||||
// 注册提交
|
||||
async submitreg(e) {
|
||||
var app = getApp();
|
||||
var post = e.detail.value;
|
||||
|
||||
if (post.user == '')
|
||||
return this.toast('请填写手机号');
|
||||
if (post.pass == '')
|
||||
|
|
@ -334,32 +317,24 @@
|
|||
return this.toast('两次密码输入不同');
|
||||
if (!this.xieyi && await this.askmsg('是否阅读并同意协议?', '同意') != 'ok')
|
||||
return;
|
||||
|
||||
post.upid = app.getstorage('upid');
|
||||
post.appcid = app.globalData._appcid;
|
||||
// 密码加密:MD5(用户输入密码)
|
||||
post.pass = md5.md5(post.pass);
|
||||
post.pass = md5.md5(post.pass + app.globalData.tokensalt);
|
||||
post.pass2 = '';
|
||||
|
||||
// 调用注册接口
|
||||
//._from = app.globalData._sysinfo;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'login.json_reg_mobile',
|
||||
func: 'login.reg_mobile', // login.reg
|
||||
data: post
|
||||
});
|
||||
|
||||
if (retjson.code != 1)
|
||||
return this.toast(retjson.errmsg);
|
||||
|
||||
this.setstorage('login_mb', post.user);
|
||||
this.tologin(retjson);
|
||||
this.toast('注册成功,已自动登录');
|
||||
},
|
||||
|
||||
// 忘记密码提交
|
||||
async submitforget(e) {
|
||||
var app = getApp();
|
||||
var post = e.detail.value;
|
||||
|
||||
if (post.user == '')
|
||||
return this.toast('请填写手机号');
|
||||
if (post.captcha == '')
|
||||
|
|
@ -368,24 +343,16 @@
|
|||
return this.toast('请填写密码');
|
||||
if (post.pass != post.pass2)
|
||||
return this.toast('两次密码输入不同');
|
||||
|
||||
// 密码加密:MD5(用户输入密码)
|
||||
post.pass = md5.md5(post.pass);
|
||||
|
||||
// 调用忘记密码接口
|
||||
post.pass = md5.md5(post.pass + app.globalData.tokensalt);
|
||||
var retjson = await this.callfunc({
|
||||
func: 'login.json_forgetpass',
|
||||
func: 'login.forgetpass', // login.reg
|
||||
data: post
|
||||
});
|
||||
|
||||
if (retjson.code != 1)
|
||||
return this.toast(retjson.errmsg);
|
||||
|
||||
this.tologin(retjson);
|
||||
this.toast('密码找回成功,已自动登录');
|
||||
},
|
||||
|
||||
// 登录成功处理
|
||||
tologin(json) {
|
||||
var app = getApp();
|
||||
var auth = app.setuserstorage(json);
|
||||
|
|
@ -394,13 +361,9 @@
|
|||
this.authcb = null;
|
||||
this.close();
|
||||
},
|
||||
|
||||
// 切换页面
|
||||
gopg(idx) {
|
||||
this.pg = idx * -100;
|
||||
},
|
||||
|
||||
// 关闭登录弹窗
|
||||
close() {
|
||||
if (this.authcb != null)
|
||||
this.authcb({
|
||||
|
|
@ -409,7 +372,6 @@
|
|||
}
|
||||
});
|
||||
this.authcb = null;
|
||||
|
||||
var animation = uni.createAnimation({
|
||||
timingFunction: 'ease'
|
||||
});
|
||||
|
|
@ -418,7 +380,6 @@
|
|||
duration: 1000
|
||||
});
|
||||
this.anidataauth = animation.export();
|
||||
|
||||
var animation = uni.createAnimation({
|
||||
timingFunction: 'ease'
|
||||
});
|
||||
|
|
@ -428,8 +389,6 @@
|
|||
});
|
||||
this.anidatabg = animation.export();
|
||||
},
|
||||
|
||||
// 显示调试用户
|
||||
async showver(e) {
|
||||
this.ver--;
|
||||
if (this.ver !== 0)
|
||||
|
|
@ -437,94 +396,17 @@
|
|||
var app = getApp();
|
||||
if (app.globalData._wxenv == 'release')
|
||||
return;
|
||||
|
||||
var retjson = await this.callfunc({
|
||||
func: 'login.json_debug_list',
|
||||
func: 'login.debug_list',
|
||||
data: {}
|
||||
});
|
||||
this.tusers = retjson.list;
|
||||
},
|
||||
|
||||
// 设置调试用户
|
||||
setdbg(idx) {
|
||||
this.xieyi = true;
|
||||
this.user = this.tusers[idx].user;
|
||||
this.pass = this.tusers[idx].pass;
|
||||
},
|
||||
|
||||
// 获取用户信息
|
||||
getme() {
|
||||
return uni.getStorageSync('me') || {id: 0};
|
||||
},
|
||||
|
||||
// 获取本地存储
|
||||
getstorage(key) {
|
||||
return uni.getStorageSync(key) || '';
|
||||
},
|
||||
|
||||
// 设置本地存储
|
||||
setstorage(key, value) {
|
||||
uni.setStorageSync(key, value);
|
||||
},
|
||||
|
||||
// 转整数
|
||||
toint(val) {
|
||||
return parseInt(val) || 0;
|
||||
},
|
||||
|
||||
// 提示框
|
||||
toast(msg) {
|
||||
uni.showToast({
|
||||
title: msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
});
|
||||
},
|
||||
|
||||
// 确认弹窗
|
||||
askmsg(content, confirmText = '确定') {
|
||||
return new Promise((resolve) => {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: content,
|
||||
confirmText: confirmText,
|
||||
success: (res) => {
|
||||
resolve(res.confirm ? 'ok' : 'cancel');
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 接口调用封装
|
||||
async callfunc(options) {
|
||||
return new Promise((resolve) => {
|
||||
uni.request({
|
||||
url: 'http://localhost:5173/ambap/login.php', // 根据实际接口地址调整
|
||||
method: 'POST',
|
||||
data: {
|
||||
act: options.func,
|
||||
...options.data
|
||||
},
|
||||
success: (res) => {
|
||||
resolve(res.data || {code: 0, errmsg: '接口返回异常'});
|
||||
},
|
||||
fail: (err) => {
|
||||
this.toast('网络请求失败');
|
||||
resolve({code: 0, errmsg: '网络错误'});
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 跳转链接(用户协议)
|
||||
gourl(e) {
|
||||
var url = e.currentTarget.dataset.url;
|
||||
if (url) {
|
||||
uni.navigateTo({
|
||||
url: url
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -227,18 +227,19 @@
|
|||
},
|
||||
computed: {
|
||||
tvalue() {
|
||||
var v = this.val;
|
||||
var ret = {};
|
||||
ret.value = v;
|
||||
var pimgs = v.split('~');
|
||||
ret.imgs = [];
|
||||
for (var i in pimgs) {
|
||||
if (!pimgs[i])
|
||||
continue;
|
||||
ret.imgs.push(pimgs[i]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
// 修复:若 this.val 是 null/undefined,默认赋值为空字符串
|
||||
var v = this.val || '';
|
||||
var ret = {};
|
||||
ret.value = v;
|
||||
var pimgs = v.split('~'); // 此时v不会是null,split可安全调用
|
||||
ret.imgs = [];
|
||||
for (var i in pimgs) {
|
||||
if (!pimgs[i])
|
||||
continue;
|
||||
ret.imgs.push(pimgs[i]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
var app = getApp();
|
||||
|
|
|
|||
|
|
@ -18,8 +18,17 @@
|
|||
"pagePath": "pages/main/index"
|
||||
},
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"pagePath": "pages/main/message"
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/main/me"
|
||||
}
|
||||
|
||||
=======
|
||||
"pagePath": "pages/main/me"
|
||||
}
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
]
|
||||
},
|
||||
"preloadRule": {
|
||||
|
|
|
|||
|
|
@ -7,13 +7,22 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"path": "pages/main/me",
|
||||
=======
|
||||
"path": "pages/main/notify",
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
"style": {
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},
|
||||
<<<<<<< HEAD
|
||||
{
|
||||
"path": "pages/main/message",
|
||||
=======
|
||||
{
|
||||
"path": "pages/main/me",
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
"style": {
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
|
|
@ -58,7 +67,11 @@
|
|||
"pagePath": "pages/main/index"
|
||||
},
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"pagePath": "pages/main/message"
|
||||
=======
|
||||
"pagePath": "pages/main/notify"
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/main/me"
|
||||
|
|
@ -412,6 +425,20 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"root": "pages/lab",
|
||||
"pages": [
|
||||
{
|
||||
"path": "user_list"
|
||||
|
||||
|
||||
},
|
||||
{
|
||||
"path": "user_edit"
|
||||
}
|
||||
]
|
||||
}
|
||||
=======
|
||||
"root": "pages/lab",
|
||||
"pages": [
|
||||
{
|
||||
|
|
@ -422,5 +449,6 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,287 @@
|
|||
<template>
|
||||
<ciy-header title="新增/编辑页" ref="header"></ciy-header>
|
||||
<view v-if="init.code != 1">
|
||||
<view class="px4 py4">
|
||||
<view style="height:2em;width:60%;" class="ciy-skeleton"></view>
|
||||
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view>
|
||||
<view style="height:1em;width:50%;" class="ciy-skeleton"></view>
|
||||
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else>
|
||||
<view class="ciy-form-group">
|
||||
<view class="ciy-form">
|
||||
<label class="imp">默认标题</label>
|
||||
<view>
|
||||
<ciy-input name="name" v-model="editdata.name"></ciy-input>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>所属菜单</label>
|
||||
<view>
|
||||
<ciy-select :range="g.zc_menu" name="menuid" v-model="editdata.menuid"></ciy-select>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>文件大小</label>
|
||||
<view>
|
||||
<ciy-inputbet bet="1024" unit="KB" name="filesize" v-model="editdata.filesize"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>长度</label>
|
||||
<view>
|
||||
<ciy-inputbet bet="1000" unit="米" :ciystyle="{width:'8em'}" name="metre" v-model="editdata.metre"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>贷款金额</label>
|
||||
<view>
|
||||
<ciy-inputbet bet="1000000" unit="万元" name="bankmoney" v-model="editdata.bankmoney"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>设置日期</label>
|
||||
<view>
|
||||
<ciy-inputdatetime name="setdate" v-model="editdata.setdate"></ciy-inputdatetime>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>设置时间</label>
|
||||
<view>
|
||||
<ciy-inputdatetime btime name="settimes" v-model="editdata.settimes"></ciy-inputdatetime>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>营业时间</label>
|
||||
<view>
|
||||
<ciy-inputtimepoint bsec name="dayclock" v-model="editdata.dayclock"></ciy-inputtimepoint>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>文档</label>
|
||||
<view>
|
||||
<ciy-upload num="5" filetype="all" imgwidth="1000" sourcetype="album,message" path="demo" name="downurl" v-model="editdata.downurl"></ciy-upload>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>头像</label>
|
||||
<view>
|
||||
<ciy-upload imgwidth="600" imgheight="600" path="demo" name="avar" v-model="editdata.avar"></ciy-upload>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>是否使用</label>
|
||||
<view>
|
||||
<ciy-selbool name="isuse" v-model="editdata.isuse"></ciy-selbool>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>是否开启</label>
|
||||
<view>
|
||||
<ciy-selbool y="开启" n="关闭" name="isopen" v-model="editdata.isopen"></ciy-selbool>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>库存单位</label>
|
||||
<view>
|
||||
<ciy-inputunitedit name="unit" v-model="editdata.unit"></ciy-inputunitedit>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>单选状态</label>
|
||||
<view>
|
||||
<ciy-radio left :range="g.auditstatus" name="sigstatus" v-model="editdata.sigstatus"></ciy-radio>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>多选状态</label>
|
||||
<view>
|
||||
<ciy-checkbox itemright line :range="g.auditstatus" name="mauditstatus" v-model="editdata.mauditstatus"></ciy-checkbox>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>组织结构</label>
|
||||
<view>
|
||||
<ciy-selcas :range="g.zc_depart" name="prodcata" v-model="editdata.prodcata"></ciy-selcas>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>所在地区</label>
|
||||
<view>
|
||||
<ciy-selcas :range="g.ciy_arearpc" name="areacode" v-model="editdata.areacode"></ciy-selcas>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>认证情况</label>
|
||||
<view>
|
||||
<ciy-checkbox bin left line :range="g.renzheng" name="renzheng" v-model="editdata.renzheng"></ciy-checkbox>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>临时字典</label>
|
||||
<view>
|
||||
<ciy-select :range="g.ppint" name="ppint" v-model="editdata.ppint"></ciy-select>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>执行周期</label>
|
||||
<view>
|
||||
<ciy-inputcyc name="npcyc" v-model="editdata.npcyc"></ciy-inputcyc>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>执行用时</label>
|
||||
<view>
|
||||
<ciy-input name="runsec" v-model="editdata.runsec"></ciy-input>
|
||||
</view>
|
||||
<view style="flex:none;">秒</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>活动期数</label>
|
||||
<view class="flex flex-center" style="justify-content: flex-end;">
|
||||
第
|
||||
<ciy-input :ciystyle="{width:'3em',margin:'0 0.5em',textAlign:'center',display:'inline-block'}" name="acttm" v-model="editdata.acttm"></ciy-input>
|
||||
期
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>活动花絮</label>
|
||||
<view>
|
||||
<ciy-upload num="9" imgwidth="1920" zipjpg="80" path="demo" name="imgs" v-model="editdata.imgs"></ciy-upload>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>吨位</label>
|
||||
<view>
|
||||
<ciy-inputbet bb bet="1000000" unit="吨" :ciystyle="{width:'8em'}" name="ton" v-model="editdata.ton"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>单价</label>
|
||||
<view>
|
||||
<ciy-inputbet bet="100" unit="元" name="price" v-model="editdata.price"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>位置</label>
|
||||
<view>
|
||||
<ciy-selmap name="loc" v-model:lng="editdata.lng" v-model:lat="editdata.lat"></ciy-selmap>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>百分比</label>
|
||||
<view>
|
||||
<ciy-inputbet bet="100" unit="%" name="pct" v-model="editdata.pct"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>链接</label>
|
||||
<view>
|
||||
<ciy-input name="url" v-model="editdata.url"></ciy-input>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>体重</label>
|
||||
<view>
|
||||
<ciy-inputbet bet="1000" unit="公斤" name="weightg" v-model="editdata.weightg"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>耳温</label>
|
||||
<view>
|
||||
<ciy-inputbet bet="1000" unit="℃" name="eartmpr" v-model="editdata.eartmpr"></ciy-inputbet>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>身份证号</label>
|
||||
<view>
|
||||
<ciy-input name="idcard" v-model="editdata.idcard"></ciy-input>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ciy-form">
|
||||
<label>介绍</label>
|
||||
<view>
|
||||
<ciy-textarea name="content" v-model="editdata.content"></ciy-textarea>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="ciy-form v">
|
||||
<label>富文本</label>
|
||||
<view>
|
||||
<ciy-mdedit name="md" v-model="editdata.md"></ciy-mdedit>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
<view class="tabbar ciy-bottom">
|
||||
<button class="btn lg cc long" @tap="edited">{{lang('page.btn_submit')}}</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: ['id'],
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
onLoad() {
|
||||
if (!this.pagedata.demo)
|
||||
return this.alert('不能直接访问,请重新进入'); //独立进入写后端函数获取数据
|
||||
this.editdata = {...this.pagedata.demo};
|
||||
this.getdata();
|
||||
},
|
||||
watch: {},
|
||||
computed: {},
|
||||
methods: {
|
||||
async getdata() {
|
||||
var act = 'edit';
|
||||
var page = getApp().getpage(1);
|
||||
if (page && page.init._editonce)
|
||||
act = '';
|
||||
if (this._loading)
|
||||
return;
|
||||
this._loading = true;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.getdata',
|
||||
data: {
|
||||
...this.opn,
|
||||
act: act
|
||||
}
|
||||
});
|
||||
this._loading = false;
|
||||
if (retjson.code != 1)
|
||||
return this.init = retjson;
|
||||
if (act == 'edit') {
|
||||
page.init._editonce = true;
|
||||
page.g.zc_menu = retjson.zc_menu;
|
||||
this.g.zc_menu = retjson.zc_menu;
|
||||
}
|
||||
this.init = this.objdeepmerge(this.init, retjson);
|
||||
},
|
||||
async edited() {
|
||||
if (this._loading)
|
||||
return;
|
||||
this._loading = true;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.update',
|
||||
data: {
|
||||
...this.editdata
|
||||
}
|
||||
});
|
||||
this._loading = false;
|
||||
if (retjson.code != 1)
|
||||
return this.alert(retjson.errmsg);
|
||||
var page = getApp().getpage(1);
|
||||
if (page?.init?.list)
|
||||
this.objtolist(page.init.list, retjson.data);
|
||||
// const eventChannel = this.getOpenerEventChannel();
|
||||
// eventChannel.emit('writedata', retjson.data);
|
||||
uni.navigateBack();
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,331 @@
|
|||
<template>
|
||||
<ciy-header title="搜索/列表/删除页" ref="header"></ciy-header>
|
||||
<view v-if="init.code != 1">
|
||||
<view class="px4 py4">
|
||||
<view style="height:2em;width:60%;" class="ciy-skeleton"></view>
|
||||
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view>
|
||||
<view style="height:1em;width:50%;" class="ciy-skeleton"></view>
|
||||
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else>
|
||||
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
|
||||
<ciy-segment :lis="init.lis" all="全部" @change="segment_change"></ciy-segment>
|
||||
<ciy-query ref="query" :gdict="g" :qry="init.searchinput" @confirm="query_confirm">
|
||||
<template v-slot="{itm}">
|
||||
<ciy-input :name="itm.item.form" v-model="itm.data[itm.item.form]"></ciy-input>
|
||||
</template>
|
||||
</ciy-query>
|
||||
</view>
|
||||
<view class="ciy-list" :class="{del:item._del}" v-for="(item,index) in init.list" :key="item.id" @tap="showmenu(index)">
|
||||
<view class="l0">No: {{item.id}}</view>
|
||||
<view v-if="item.id%2 == 0" class="rt">
|
||||
<view class="code b" :class="ccode(g.auditstatus, item.auditstatus,'clas')">{{ccode(g.auditstatus, item.auditstatus)}}</view>
|
||||
</view>
|
||||
<view v-else class="rtz liner" :class="ccode(g.auditstatus, item.auditstatus,'clas')">
|
||||
{{ccode(g.auditstatus, item.auditstatus)}}
|
||||
</view>
|
||||
<view class="l1 c">
|
||||
<view>{{item.name}}</view>
|
||||
</view>
|
||||
|
||||
<view class="ciy-hr"></view>
|
||||
<view class="l2">审核人 {{ccode('xa_user', item.audituser)}}</view>
|
||||
<view class="l2" v-if="item.auditmsg">审核理由 <text v-html="tobr(item.auditmsg)"></text></view>
|
||||
<view class="l2">审核时间 {{todatetime(item.audittimes)}}</view>
|
||||
<view class="ciy-hr"></view>
|
||||
|
||||
<view class="l2">
|
||||
<label>所属菜单</label>
|
||||
<view>{{ccode(init.zc_menu, item.menuid)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>文件大小</label>
|
||||
<view>{{tofix(item.filesize/1024, -2)}}KB</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>长度</label>
|
||||
<view>{{tofix(item.metre/1000, -2)}}米</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>贷款金额</label>
|
||||
<view>{{tofix(item.bankmoney/1000000)}}万元</view>
|
||||
</view>
|
||||
|
||||
<view class="l2">
|
||||
<label>设置日期</label>
|
||||
<view>{{todatetime(item.setdate, 'd')}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>设置时间</label>
|
||||
<view>{{todatetime(item.settimes)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>营业时间</label>
|
||||
<view>{{totimepoint(item.dayclock, true)}}</view>
|
||||
</view>
|
||||
<ciy-showimgs label="文档" :src="item.downurl"></ciy-showimgs>
|
||||
<ciy-showimgs :src="item.avar" width="20em" mode="widthFix"></ciy-showimgs>
|
||||
|
||||
<view class="l2">
|
||||
<label>是否使用</label>
|
||||
<view>{{item.isuse==1?'√':'×'}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>是否开启</label>
|
||||
<view>{{item.isopen==1?'开启':'关闭'}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>库存单位</label>
|
||||
<view>{{tounit(item.unit)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>单选状态</label>
|
||||
<view>{{ccode(g.auditstatus, item.sigstatus)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>多选状态</label>
|
||||
<view>
|
||||
<view class="kbd" v-for="(itm, index) in scode(g.auditstatus, item.mauditstatus)" :key="index">{{itm.name}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>组织结构</label>
|
||||
<view>{{mcode(g.zc_depart, item.prodcata, 'name').join(' . ')}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>所在地区</label>
|
||||
<view>
|
||||
<text class="code" v-for="(itm, index) in mcode(g.ciy_arearpc, item.areacode)" :key="index">{{itm.name}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>认证情况</label>
|
||||
<view>
|
||||
<text class="kbd" v-for="(itm, index) in bcode(g.renzheng, item.renzheng)" :key="index">{{itm.name}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>临时字典</label>
|
||||
<view>{{ccode(g.ppint, item.ppint)}}</view>
|
||||
</view>
|
||||
|
||||
<view class="l2">
|
||||
<label>执行周期</label>
|
||||
<view>{{tocyc(item.npcyc)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>执行用时</label>
|
||||
<view>{{totimesec(item.runsec)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>活动期数</label>
|
||||
<view>第{{item.acttm}}期</view>
|
||||
</view>
|
||||
<ciy-showimgs label="活动花絮" :src="item.imgs"></ciy-showimgs>
|
||||
<view class="l2">
|
||||
<label>吨位</label>
|
||||
<view>{{tofix(item.ton/1000000, 3)}}吨</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>单价</label>
|
||||
<view>{{tofix(item.price/100, 2)}}元</view>
|
||||
</view>
|
||||
|
||||
<view class="l2">
|
||||
<label>位置</label>
|
||||
<view><text style="text-decoration: underline;" @tap.stop="goloc(item.lat, item.lng)">查看位置</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>百分比</label>
|
||||
<view>{{tofix(item.pct/100, 2)}}%</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>链接</label>
|
||||
<view><text style="text-decoration: underline;" @tap.stop="goweb(item.url)">转到链接</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>体重</label>
|
||||
<view>{{tofix(item.weightg/1000)}}公斤</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>耳温</label>
|
||||
<view>{{tofix(item.eartmpr/1000, 1)}}℃</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>身份证号</label>
|
||||
<view>{{tomsk(item.idcard,'******#*')}}</view>
|
||||
</view>
|
||||
<view class="rb">
|
||||
添加时间 {{todatetime(item.addtimes)}}
|
||||
</view>
|
||||
</view>
|
||||
<ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend>
|
||||
<view class="ciy-add" @tap="edit()"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
onLoad() {
|
||||
this.load_ciydict(this.file_stor('/dict/ciy_arearpc.js')).then(json => {
|
||||
if (json.code != 1)
|
||||
return this.alert(json.errmsg);
|
||||
this.g.ciy_arearpc = json.arr;
|
||||
});
|
||||
this.getlist();
|
||||
},
|
||||
onReachBottom(b) {
|
||||
console.log('onReachBottom page', this.pageno);
|
||||
if (this.init.code != 1)
|
||||
return;
|
||||
this.getlist();
|
||||
},
|
||||
onPullDownRefresh(b) {
|
||||
console.log('onPullDownRefresh page');
|
||||
this.pageno = 0;
|
||||
this._stopPullDown = true;
|
||||
this.getlist();
|
||||
},
|
||||
watch: {},
|
||||
computed: {},
|
||||
methods: {
|
||||
async getlist() {
|
||||
if (this.pageno < 0)
|
||||
return;
|
||||
if (this._loading)
|
||||
return;
|
||||
this.pagepost.pageno = this.pageno + 1;
|
||||
this.pagepost.once = !this.init.once;
|
||||
this._loading = true;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.list',
|
||||
data: this.pagepost
|
||||
});
|
||||
this._loading = false;
|
||||
if (retjson.code != 1)
|
||||
return this.alert(retjson.errmsg);
|
||||
this.pageno++;
|
||||
if (this.pageno == 1)
|
||||
this.init.list = [];
|
||||
this.init = this.objdeepmerge(this.init, retjson);
|
||||
if (retjson.once) {
|
||||
this.init.lis = [...this.g.auditstatus];
|
||||
this.g.zc_depart = retjson.zc_depart;
|
||||
this.g.ppint = retjson.ppint;
|
||||
}
|
||||
this.getrefs('query').then(ref => {
|
||||
ref.setdata(retjson.where);
|
||||
});
|
||||
if (retjson.list.length < retjson.pagecount)
|
||||
this.pageno = -1;
|
||||
},
|
||||
segment_change(e) {
|
||||
this.pagepost.liid = e.value.id;
|
||||
this.pageno = 0;
|
||||
this.getlist();
|
||||
uni.pageScrollTo({
|
||||
scrollTop: 0,
|
||||
duration: 800
|
||||
});
|
||||
},
|
||||
query_confirm(dat) {
|
||||
this.pagepost.query = dat;
|
||||
this.pageno = 0;
|
||||
this.getlist();
|
||||
uni.pageScrollTo({
|
||||
scrollTop: 0,
|
||||
duration: 800
|
||||
});
|
||||
},
|
||||
async edit(item) {
|
||||
item = item || {
|
||||
url: '',
|
||||
data: {
|
||||
id: 0,
|
||||
_idx: -1
|
||||
}
|
||||
};
|
||||
this.gourl('user_edit?id=' + item.data.id, 'navigate', item.data, 'lab');
|
||||
},
|
||||
async del(item) {
|
||||
if (await this.askmsg('是否删除?', '删除') != 'ok')
|
||||
return;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.del',
|
||||
data: {
|
||||
id: item.data.id
|
||||
}
|
||||
});
|
||||
if (retjson.code != 1)
|
||||
return this.alert(retjson.errmsg);
|
||||
this.init.list[item.data._idx]._del = true;
|
||||
setTimeout(() => {
|
||||
this.init.list.splice(item.data._idx, 1);
|
||||
}, 500);
|
||||
},
|
||||
async audit(item) {
|
||||
var msg = await this.inputmsg({
|
||||
title: '请填写审核理由',
|
||||
ele: 'textarea'
|
||||
}, [{
|
||||
name: '审核通过',
|
||||
btn: 'ok'
|
||||
}, {
|
||||
name: '驳回',
|
||||
btn: 'ng',
|
||||
cls: 'dag liner'
|
||||
}, {
|
||||
name: '取消',
|
||||
btn: 'cancel',
|
||||
cls: 'def'
|
||||
}]);
|
||||
if (msg.btn == 'cancel')
|
||||
return;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.audit',
|
||||
data: {
|
||||
id: item.data.id,
|
||||
msg: msg.text,
|
||||
status: msg.btn == 'ng' ? 90 : 100,
|
||||
}
|
||||
});
|
||||
if (retjson.code != 1)
|
||||
return this.alert(retjson.errmsg);
|
||||
this.init.list[item.data._idx] = this.objdeepmerge(this.init.list[item.data._idx], retjson.data);
|
||||
},
|
||||
showmenu(idx) {
|
||||
var dat = this.init.list[idx];
|
||||
dat._idx = idx;
|
||||
var items = [];
|
||||
items.push({
|
||||
func: 'audit',
|
||||
name: '审核',
|
||||
data: dat
|
||||
});
|
||||
items.push({
|
||||
func: 'edit',
|
||||
name: '变更',
|
||||
data: dat
|
||||
});
|
||||
items.push({
|
||||
func: 'del',
|
||||
name: '删除',
|
||||
style: 'color:var(--dag5)',
|
||||
data: dat
|
||||
});
|
||||
this.popmenu({
|
||||
items
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -22,7 +22,11 @@
|
|||
<view class="icon" :style="{backgroundImage:svg2bg(svg.cqd)}"></view>
|
||||
<view class="name">游客页面</view>
|
||||
</view>
|
||||
<<<<<<< HEAD
|
||||
<view class="grid" @tap="gourl" data-url="$/pages/lab/user_list">
|
||||
=======
|
||||
<view class="grid" @tap="gourl" data-url="$/pages/lab/userlist">
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
<view class="icon" :style="{backgroundImage:svg2bg(svg.cjf)}"></view>
|
||||
<view class="name">成员管理</view>
|
||||
</view>
|
||||
|
|
@ -55,7 +59,10 @@
|
|||
}
|
||||
},
|
||||
onLoad() {
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
console.log('onload');
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
if (this.opn.u) {
|
||||
uni.navigateTo({
|
||||
url: decodeURIComponent(this.opn.u)
|
||||
|
|
@ -77,7 +84,10 @@
|
|||
onShow() {
|
||||
if (this._meid === this.me.id)
|
||||
return;
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
console.log('onshow 12');
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
this._meid = this.me.id;
|
||||
this.pageno = 0;
|
||||
this.init.members = [];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,331 @@
|
|||
<template>
|
||||
<ciy-header title="搜索/列表/删除页" ref="header"></ciy-header>
|
||||
<view v-if="init.code != 1">
|
||||
<view class="px4 py4">
|
||||
<view style="height:2em;width:60%;" class="ciy-skeleton"></view>
|
||||
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view>
|
||||
<view style="height:1em;width:50%;" class="ciy-skeleton"></view>
|
||||
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else>
|
||||
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
|
||||
<ciy-segment :lis="init.lis" all="全部" @change="segment_change"></ciy-segment>
|
||||
<ciy-query ref="query" :gdict="g" :qry="init.searchinput" @confirm="query_confirm">
|
||||
<template v-slot="{itm}">
|
||||
<ciy-input :name="itm.item.form" v-model="itm.data[itm.item.form]"></ciy-input>
|
||||
</template>
|
||||
</ciy-query>
|
||||
</view>
|
||||
<view class="ciy-list" :class="{del:item._del}" v-for="(item,index) in init.list" :key="item.id" @tap="showmenu(index)">
|
||||
<view class="l0">No: {{item.id}}</view>
|
||||
<view v-if="item.id%2 == 0" class="rt">
|
||||
<view class="code b" :class="ccode(g.auditstatus, item.auditstatus,'clas')">{{ccode(g.auditstatus, item.auditstatus)}}</view>
|
||||
</view>
|
||||
<view v-else class="rtz liner" :class="ccode(g.auditstatus, item.auditstatus,'clas')">
|
||||
{{ccode(g.auditstatus, item.auditstatus)}}
|
||||
</view>
|
||||
<view class="l1 c">
|
||||
<view>{{item.name}}</view>
|
||||
</view>
|
||||
|
||||
<view class="ciy-hr"></view>
|
||||
<view class="l2">审核人 {{ccode('xa_user', item.audituser)}}</view>
|
||||
<view class="l2" v-if="item.auditmsg">审核理由 <text v-html="tobr(item.auditmsg)"></text></view>
|
||||
<view class="l2">审核时间 {{todatetime(item.audittimes)}}</view>
|
||||
<view class="ciy-hr"></view>
|
||||
|
||||
<view class="l2">
|
||||
<label>所属菜单</label>
|
||||
<view>{{ccode(init.zc_menu, item.menuid)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>文件大小</label>
|
||||
<view>{{tofix(item.filesize/1024, -2)}}KB</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>长度</label>
|
||||
<view>{{tofix(item.metre/1000, -2)}}米</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>贷款金额</label>
|
||||
<view>{{tofix(item.bankmoney/1000000)}}万元</view>
|
||||
</view>
|
||||
|
||||
<view class="l2">
|
||||
<label>设置日期</label>
|
||||
<view>{{todatetime(item.setdate, 'd')}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>设置时间</label>
|
||||
<view>{{todatetime(item.settimes)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>营业时间</label>
|
||||
<view>{{totimepoint(item.dayclock, true)}}</view>
|
||||
</view>
|
||||
<ciy-showimgs label="文档" :src="item.downurl"></ciy-showimgs>
|
||||
<ciy-showimgs :src="item.avar" width="20em" mode="widthFix"></ciy-showimgs>
|
||||
|
||||
<view class="l2">
|
||||
<label>是否使用</label>
|
||||
<view>{{item.isuse==1?'√':'×'}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>是否开启</label>
|
||||
<view>{{item.isopen==1?'开启':'关闭'}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>库存单位</label>
|
||||
<view>{{tounit(item.unit)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>单选状态</label>
|
||||
<view>{{ccode(g.auditstatus, item.sigstatus)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>多选状态</label>
|
||||
<view>
|
||||
<view class="kbd" v-for="(itm, index) in scode(g.auditstatus, item.mauditstatus)" :key="index">{{itm.name}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>组织结构</label>
|
||||
<view>{{mcode(g.zc_depart, item.prodcata, 'name').join(' . ')}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>所在地区</label>
|
||||
<view>
|
||||
<text class="code" v-for="(itm, index) in mcode(g.ciy_arearpc, item.areacode)" :key="index">{{itm.name}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>认证情况</label>
|
||||
<view>
|
||||
<text class="kbd" v-for="(itm, index) in bcode(g.renzheng, item.renzheng)" :key="index">{{itm.name}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>临时字典</label>
|
||||
<view>{{ccode(g.ppint, item.ppint)}}</view>
|
||||
</view>
|
||||
|
||||
<view class="l2">
|
||||
<label>执行周期</label>
|
||||
<view>{{tocyc(item.npcyc)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>执行用时</label>
|
||||
<view>{{totimesec(item.runsec)}}</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>活动期数</label>
|
||||
<view>第{{item.acttm}}期</view>
|
||||
</view>
|
||||
<ciy-showimgs label="活动花絮" :src="item.imgs"></ciy-showimgs>
|
||||
<view class="l2">
|
||||
<label>吨位</label>
|
||||
<view>{{tofix(item.ton/1000000, 3)}}吨</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>单价</label>
|
||||
<view>{{tofix(item.price/100, 2)}}元</view>
|
||||
</view>
|
||||
|
||||
<view class="l2">
|
||||
<label>位置</label>
|
||||
<view><text style="text-decoration: underline;" @tap.stop="goloc(item.lat, item.lng)">查看位置</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>百分比</label>
|
||||
<view>{{tofix(item.pct/100, 2)}}%</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>链接</label>
|
||||
<view><text style="text-decoration: underline;" @tap.stop="goweb(item.url)">转到链接</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>体重</label>
|
||||
<view>{{tofix(item.weightg/1000)}}公斤</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>耳温</label>
|
||||
<view>{{tofix(item.eartmpr/1000, 1)}}℃</view>
|
||||
</view>
|
||||
<view class="l2">
|
||||
<label>身份证号</label>
|
||||
<view>{{tomsk(item.idcard,'******#*')}}</view>
|
||||
</view>
|
||||
<view class="rb">
|
||||
添加时间 {{todatetime(item.addtimes)}}
|
||||
</view>
|
||||
</view>
|
||||
<ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend>
|
||||
<view class="ciy-add" @tap="edit()"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
onLoad() {
|
||||
this.load_ciydict(this.file_stor('/dict/ciy_arearpc.js')).then(json => {
|
||||
if (json.code != 1)
|
||||
return this.alert(json.errmsg);
|
||||
this.g.ciy_arearpc = json.arr;
|
||||
});
|
||||
this.getlist();
|
||||
},
|
||||
onReachBottom(b) {
|
||||
console.log('onReachBottom page', this.pageno);
|
||||
if (this.init.code != 1)
|
||||
return;
|
||||
this.getlist();
|
||||
},
|
||||
onPullDownRefresh(b) {
|
||||
console.log('onPullDownRefresh page');
|
||||
this.pageno = 0;
|
||||
this._stopPullDown = true;
|
||||
this.getlist();
|
||||
},
|
||||
watch: {},
|
||||
computed: {},
|
||||
methods: {
|
||||
async getlist() {
|
||||
if (this.pageno < 0)
|
||||
return;
|
||||
if (this._loading)
|
||||
return;
|
||||
this.pagepost.pageno = this.pageno + 1;
|
||||
this.pagepost.once = !this.init.once;
|
||||
this._loading = true;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.list',
|
||||
data: this.pagepost
|
||||
});
|
||||
this._loading = false;
|
||||
if (retjson.code != 1)
|
||||
return this.alert(retjson.errmsg);
|
||||
this.pageno++;
|
||||
if (this.pageno == 1)
|
||||
this.init.list = [];
|
||||
this.init = this.objdeepmerge(this.init, retjson);
|
||||
if (retjson.once) {
|
||||
this.init.lis = [...this.g.auditstatus];
|
||||
this.g.zc_depart = retjson.zc_depart;
|
||||
this.g.ppint = retjson.ppint;
|
||||
}
|
||||
this.getrefs('query').then(ref => {
|
||||
ref.setdata(retjson.where);
|
||||
});
|
||||
if (retjson.list.length < retjson.pagecount)
|
||||
this.pageno = -1;
|
||||
},
|
||||
segment_change(e) {
|
||||
this.pagepost.liid = e.value.id;
|
||||
this.pageno = 0;
|
||||
this.getlist();
|
||||
uni.pageScrollTo({
|
||||
scrollTop: 0,
|
||||
duration: 800
|
||||
});
|
||||
},
|
||||
query_confirm(dat) {
|
||||
this.pagepost.query = dat;
|
||||
this.pageno = 0;
|
||||
this.getlist();
|
||||
uni.pageScrollTo({
|
||||
scrollTop: 0,
|
||||
duration: 800
|
||||
});
|
||||
},
|
||||
async edit(item) {
|
||||
item = item || {
|
||||
url: '',
|
||||
data: {
|
||||
id: 0,
|
||||
_idx: -1
|
||||
}
|
||||
};
|
||||
this.gourl('demo_edit?id=' + item.data.id, 'navigate', item.data, 'demo');
|
||||
},
|
||||
async del(item) {
|
||||
if (await this.askmsg('是否删除?', '删除') != 'ok')
|
||||
return;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.del',
|
||||
data: {
|
||||
id: item.data.id
|
||||
}
|
||||
});
|
||||
if (retjson.code != 1)
|
||||
return this.alert(retjson.errmsg);
|
||||
this.init.list[item.data._idx]._del = true;
|
||||
setTimeout(() => {
|
||||
this.init.list.splice(item.data._idx, 1);
|
||||
}, 500);
|
||||
},
|
||||
async audit(item) {
|
||||
var msg = await this.inputmsg({
|
||||
title: '请填写审核理由',
|
||||
ele: 'textarea'
|
||||
}, [{
|
||||
name: '审核通过',
|
||||
btn: 'ok'
|
||||
}, {
|
||||
name: '驳回',
|
||||
btn: 'ng',
|
||||
cls: 'dag liner'
|
||||
}, {
|
||||
name: '取消',
|
||||
btn: 'cancel',
|
||||
cls: 'def'
|
||||
}]);
|
||||
if (msg.btn == 'cancel')
|
||||
return;
|
||||
var retjson = await this.callfunc({
|
||||
func: 'demo/demo.audit',
|
||||
data: {
|
||||
id: item.data.id,
|
||||
msg: msg.text,
|
||||
status: msg.btn == 'ng' ? 90 : 100,
|
||||
}
|
||||
});
|
||||
if (retjson.code != 1)
|
||||
return this.alert(retjson.errmsg);
|
||||
this.init.list[item.data._idx] = this.objdeepmerge(this.init.list[item.data._idx], retjson.data);
|
||||
},
|
||||
showmenu(idx) {
|
||||
var dat = this.init.list[idx];
|
||||
dat._idx = idx;
|
||||
var items = [];
|
||||
items.push({
|
||||
func: 'audit',
|
||||
name: '审核',
|
||||
data: dat
|
||||
});
|
||||
items.push({
|
||||
func: 'edit',
|
||||
name: '变更',
|
||||
data: dat
|
||||
});
|
||||
items.push({
|
||||
func: 'del',
|
||||
name: '删除',
|
||||
style: 'color:var(--dag5)',
|
||||
data: dat
|
||||
});
|
||||
this.popmenu({
|
||||
items
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"hash": "6d91775e",
|
||||
"configHash": "990dbd84",
|
||||
"lockfileHash": "e3b0c442",
|
||||
"browserHash": "29c7d720",
|
||||
"optimized": {},
|
||||
"chunks": {}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"type": "module"
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
9098
|
||||
|
|
@ -19,8 +19,13 @@
|
|||
"多语言切换": "多语言切换",
|
||||
|
||||
"tabbar.index": "广场",
|
||||
<<<<<<< HEAD
|
||||
"tabbar.me": "我的",
|
||||
"tabbar.message":"消息中心",
|
||||
=======
|
||||
"tabbar.notify": "消息",
|
||||
"tabbar.me": "我的",
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
"login.xieyi": "/pages/main/paper?id=3",
|
||||
"login.tablogin": "登录",
|
||||
"login.tabreg": "注册",
|
||||
|
|
|
|||
|
|
@ -38,6 +38,9 @@ export default defineConfig({
|
|||
scss: {},
|
||||
},
|
||||
},
|
||||
<<<<<<< HEAD
|
||||
server: {},
|
||||
=======
|
||||
server: {
|
||||
// 仅新增这一段代理配置,其他保持不变
|
||||
port: 5173, // 保留你原本的5173端口
|
||||
|
|
@ -49,4 +52,5 @@ export default defineConfig({
|
|||
}
|
||||
}
|
||||
},
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
})
|
||||
|
|
@ -42,7 +42,11 @@ function verifyuser($post = null) {
|
|||
$auth = json_decode(encrypt($ciyauth, 'D', $_token['salt']), true);
|
||||
if ($auth == null)
|
||||
return null;
|
||||
<<<<<<< HEAD
|
||||
$csql = new \ciy\sql('ap_user'); //弃用redis集群
|
||||
=======
|
||||
$csql = new \ciy\sql('lab_user'); //弃用redis集群
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
$csql->where('id', $auth['id']);
|
||||
$userrow = $db->getone($csql);
|
||||
if (!is_array($userrow))
|
||||
|
|
@ -53,12 +57,29 @@ function verifyuser($post = null) {
|
|||
return null;
|
||||
if ($userrow['exptimes'] < time() - $_token['expsec'])
|
||||
return null;
|
||||
<<<<<<< HEAD
|
||||
if ($post && $userrow['upid'] == 0) {
|
||||
$upid = $post->getint('upid');
|
||||
if ($upid > 0) {
|
||||
$updata = array();
|
||||
$updata['upid'] = $upid;
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('id', $userrow['id']);
|
||||
$db->update($csql, $updata);
|
||||
}
|
||||
}
|
||||
=======
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
if ($userrow['exptimes'] > time())
|
||||
return $userrow;
|
||||
$exp = time() + $_token['swapsec'];
|
||||
$sid = randstr(10);
|
||||
$auth['_s'] = $sid;
|
||||
<<<<<<< HEAD
|
||||
if ($db->execute('update ap_user set exptimes=?,sid=? where id=?', array($exp, $sid, $auth['id'])) === false)
|
||||
=======
|
||||
if ($db->execute('update lab_user set exptimes=?,sid=? where id=?', array($exp, $sid, $auth['id'])) === false)
|
||||
>>>>>>> 2b53f1cf47e1dea64c20044ab860c92bfd595c2a
|
||||
return null;
|
||||
$authstr = json_encode($auth, JSON_PARTIAL_OUTPUT_ON_ERROR);
|
||||
$enauth = encrypt($authstr, 'E', $_token['salt']);
|
||||
|
|
|
|||
|
|
@ -15,164 +15,176 @@ class login {
|
|||
}
|
||||
return succjson();
|
||||
}
|
||||
|
||||
// 登录接口 - 去掉权限限制 + 匹配前端MD5加密逻辑
|
||||
public static function json_login_mobile() {
|
||||
global $db;
|
||||
global $_token;
|
||||
$post = new \ciy\post();
|
||||
$model = $post->get('model');
|
||||
$appcid = $post->get('appcid');
|
||||
$user = $post->get('user');
|
||||
|
||||
if (empty($user))
|
||||
return errjson('请填写用户名');
|
||||
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql->where('mobile', $user);
|
||||
$rsuser = $db->getone($csql);
|
||||
|
||||
if ($rsuser === false)
|
||||
return errjson($db->error);
|
||||
|
||||
if (!is_array($rsuser)) {
|
||||
savelog($db, 0, 'LOGINERR', '用户[' . $user . ']不存在,在尝试登录');
|
||||
return errjson('用户名不存在');
|
||||
public static function json_login_mobile() {
|
||||
global $db;
|
||||
global $_token;
|
||||
$post = new \ciy\post();
|
||||
$model = $post->get('model');
|
||||
$appcid = $post->get('appcid');
|
||||
$user = $post->get('user');
|
||||
if (empty($user))
|
||||
return errjson('请填写用户名');
|
||||
|
||||
// 改动1:表名从 ap_user 改为 lab_user
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql->where('mobile', $user);
|
||||
$rsuser = $db->getone($csql);
|
||||
if ($rsuser === false)
|
||||
return errjson($db->error);
|
||||
if (!is_array($rsuser)) {
|
||||
savelog($db, 0, 'LOGINERR', '用户[' . $user . ']不存在,在尝试登录');
|
||||
return errjson('用户名不存在');
|
||||
}
|
||||
|
||||
// 改动2:校验字段名对齐(确保 lab_user 有 trytime 字段,若无则注释/调整)
|
||||
if ($rsuser['trytime'] > 10) {
|
||||
if (tostamp() - $rsuser['logintimes'] < 600) {
|
||||
savelog($db, $rsuser['id'], 'LOGINERR', '用户[' . $user . ']登录连续失败');
|
||||
return errjson('连续输入密码错误,10分钟后再来登录.');
|
||||
}
|
||||
|
||||
// 去掉状态权限限制 - 所有用户均可登录
|
||||
// 注释掉原有的stpstatus校验逻辑
|
||||
// if (!in_array($rsuser['stpstatus'], [10, 30, 50])) {
|
||||
// savelog($db, $rsuser['id'], 'LOGINERR', '用户[' . $user . ']被禁用,在尝试登录');
|
||||
// return errjson('您的账户已经被禁用.');
|
||||
// }
|
||||
|
||||
// 密码错误次数限制(可选保留,如需关闭可注释)
|
||||
if ($rsuser['trytime'] > 10) {
|
||||
if (tostamp() - $rsuser['logintimes'] < 600) {
|
||||
savelog($db, $rsuser['id'], 'LOGINERR', '用户[' . $user . ']登录连续失败');
|
||||
return errjson('连续输入密码错误,10分钟后再来登录.');
|
||||
}
|
||||
}
|
||||
|
||||
$authtime = $post->getint('auth');
|
||||
$authSec = $authtime / 1000;
|
||||
// 时间戳校验(兼容毫秒级)
|
||||
if (abs($authSec - tostamp()) > 300)
|
||||
return errjson('您的本地时间与服务器时间相差超过5分钟,请调整本机时间。<br/>服务器时间: ' . date('Y-m-d H:i:s') . '<br/>您本机时间: ' . date('Y-m-d H:i:s', (int)$authSec));
|
||||
|
||||
// 密码校验:匹配前端加密逻辑 md5(数据库存储的MD5密码 + auth时间戳)
|
||||
$checkPass = md5($rsuser['password'] . $authtime);
|
||||
if ($post->get('pass') != $checkPass) {
|
||||
$updata = array();
|
||||
$updata['trytime'] = array('trytime+1');
|
||||
$updata['logintimes'] = tostamp();
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql->where('id', $rsuser['id']);
|
||||
$db->update($csql, $updata);
|
||||
savelog($db, $rsuser['id'], 'LOGINERR', '用户[' . $user . ']登录密码错误');
|
||||
return errjson('用户名或密码错误.');
|
||||
}
|
||||
|
||||
// 登录成功 - 更新用户状态
|
||||
$sid = randstr(10);
|
||||
$exp = tostamp() + $_token['swapsec'];
|
||||
$id = $rsuser['id'];
|
||||
}
|
||||
|
||||
$authtime = $post->getint('auth');
|
||||
if (abs($authtime / 1000 - tostamp()) > 300)
|
||||
return errjson('您的本地时间与服务器时间相差超过5分钟,请调整本机时间。<br/>服务器时间: ' . date('Y-m-d H:i:s') . '<br/>您本机时间: ' . date('Y-m-d H:i:s', (int)($authtime / 1000)));
|
||||
|
||||
// 改动4:密码校验逻辑(确保 lab_user 密码字段是 password,加密规则不变)
|
||||
if ($post->get('pass') != md5($rsuser['password'] . $authtime)) {
|
||||
$updata = array();
|
||||
$updata['trytime'] = array('trytime+1');
|
||||
$updata['logintimes'] = tostamp();
|
||||
$updata['trytime'] = 0;
|
||||
$updata['sid'] = $sid;
|
||||
$updata['exptimes'] = $exp;
|
||||
$updata['ip'] = getip();
|
||||
|
||||
// 改动5:更新操作表名改为 lab_user
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
return errjson('user数据库更新失败:' . $db->error);
|
||||
$csql->where('id', $rsuser['id']);
|
||||
$db->update($csql, $updata);
|
||||
savelog($db, $rsuser['id'], 'LOGINERR', '用户[' . $user . ']登录密码错误' . md5('1' . $_token['salt']));
|
||||
return errjson('用户名或密码错误.');
|
||||
}
|
||||
|
||||
$sid = randstr(10);
|
||||
$exp = tostamp() + $_token['swapsec'];
|
||||
$id = $rsuser['id'];
|
||||
$updata = array();
|
||||
$updata['logintimes'] = tostamp();
|
||||
$updata['trytime'] = 0;
|
||||
$updata['sid'] = $sid;
|
||||
$updata['exptimes'] = $exp;
|
||||
$updata['ip'] = getip();
|
||||
|
||||
// 改动6:登录成功更新表名改为 lab_user
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
return errjson('user数据库更新失败:' . $db->error);
|
||||
|
||||
self::savelug($db, 1, $rsuser['id'], $model);
|
||||
$ret = self::getsync($rsuser, $sid);
|
||||
|
||||
// 调试用户逻辑
|
||||
if (!empty($appcid)) {
|
||||
// 改动7:若 ap_usr_ext 关联 lab_user,需确认表名是否改为 lab_usr_ext(若无则保留,仅改关联id为lab_user的id)
|
||||
$csql = new \ciy\sql('ap_usr_ext');
|
||||
$csql->where('id', $rsuser['id']);
|
||||
$extrow = $db->getone($csql);
|
||||
if (is_array($extrow)) {
|
||||
if ($extrow['appcid'] != $appcid) {
|
||||
$updata = array();
|
||||
$updata['appcid'] = $appcid;
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('ext更新失败:' . $db->error);
|
||||
}
|
||||
} else {
|
||||
$updata = array();
|
||||
$updata['appcid'] = $appcid;
|
||||
$updata['id'] = $rsuser['id'];
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
throw new \Exception('ext新增失败:' . $db->error);
|
||||
}
|
||||
}
|
||||
|
||||
self::savelug($db, 1, $rsuser['id'], $model);
|
||||
$ret = self::getsync($rsuser, $sid);
|
||||
|
||||
// 改动8:调试用户表若关联 lab_user,需确认 zc_debug_user 的 user 字段是 lab_user 的 id(若无则保留)
|
||||
$csql = new \ciy\sql('zc_debug_user');
|
||||
$csql->where('targettype', 21);
|
||||
$csql->where('isuse', 1);
|
||||
$csql->where('user', $id);
|
||||
if (is_array($db->getone($csql))) {
|
||||
$csql = new \ciy\sql('zc_debug_user');
|
||||
$csql->where('targettype', 21);
|
||||
$csql->where('isuse', 1);
|
||||
$csql->where('user', $id);
|
||||
if (is_array($db->getone($csql))) {
|
||||
$csql = new \ciy\sql('zc_debug_user');
|
||||
$csql->where('targettype', 21);
|
||||
$csql->column('user,name');
|
||||
$ret['dbgs'] = $db->get($csql);
|
||||
}
|
||||
return $ret;
|
||||
$csql->column('user,name');
|
||||
$ret['dbgs'] = $db->get($csql);
|
||||
}
|
||||
|
||||
// 注册接口 - 去掉权限限制 + 密码存储为MD5
|
||||
return $ret;
|
||||
}
|
||||
public static function json_reg_mobile() {
|
||||
global $db;
|
||||
global $_token;
|
||||
$post = new \ciy\post();
|
||||
$model = $post->get('model');
|
||||
$appcid = $post->get('appcid');
|
||||
$user = $post->get('user');
|
||||
$pass = $post->get('pass');
|
||||
|
||||
if (empty($user))
|
||||
return errjson('请填写手机号');
|
||||
if (empty($pass))
|
||||
return errjson('请填写密码');
|
||||
global $db;
|
||||
global $_token;
|
||||
$post = new \ciy\post();
|
||||
$model = $post->get('model');
|
||||
$appcid = $post->get('appcid');
|
||||
$upid = $post->getint('upid');
|
||||
$user = $post->get('user');
|
||||
$pass = $post->get('pass');
|
||||
if (empty($user))
|
||||
return errjson('请填写手机号');
|
||||
if (empty($pass))
|
||||
return errjson('请填写密码');
|
||||
|
||||
// 改动1:表名从 ap_user 改为 lab_user
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql->where('mobile', $user);
|
||||
$rsuser = $db->getone($csql);
|
||||
if ($rsuser === false)
|
||||
return errjson($db->error);
|
||||
if (is_array($rsuser))
|
||||
return errjson('该手机号已被注册');
|
||||
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql->where('mobile', $user);
|
||||
$rsuser = $db->getone($csql);
|
||||
|
||||
if ($rsuser === false)
|
||||
return errjson($db->error);
|
||||
if (is_array($rsuser))
|
||||
return errjson('该手机号已被注册');
|
||||
$sid = randstr(10);
|
||||
$exp = tostamp() + $_token['swapsec']; //默认三天过期,每天换秘钥
|
||||
$rsuser = array();
|
||||
|
||||
$sid = randstr(10);
|
||||
$exp = tostamp() + $_token['swapsec'];
|
||||
$rsuser = array();
|
||||
$rsuser['stpstatus'] = 30; // 任意状态均可登录(已去掉限制)
|
||||
$rsuser['userlevel'] = 10;
|
||||
$rsuser['name'] = ':' . substr($user, -4);
|
||||
$rsuser['mobile'] = $user;
|
||||
$rsuser['password'] = $pass; // 存储前端传递的MD5密码
|
||||
$rsuser['trytime'] = 0;
|
||||
$rsuser['logintimes'] = tostamp();
|
||||
$rsuser['addtimes'] = tostamp();
|
||||
$rsuser['sid'] = $sid;
|
||||
$rsuser['exptimes'] = $exp;
|
||||
$rsuser['ip'] = getip();
|
||||
$rsuser['laborgid'] = 0;
|
||||
$rsuser['usertitle'] = 0;
|
||||
$rsuser['sn'] = '';
|
||||
$rsuser['sex'] = 0;
|
||||
$rsuser['totalpnt'] = 0;
|
||||
$rsuser['dvotecnt'] = 0;
|
||||
$rsuser['email'] = '';
|
||||
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
if ($db->insert($csql, $rsuser) === false)
|
||||
return errjson('注册用户失败:' . $db->error);
|
||||
$id = $db->insert_id();
|
||||
$rsuser['id'] = $id;
|
||||
|
||||
if (!empty($appcid)) {
|
||||
$updata = array();
|
||||
$updata['id'] = $id;
|
||||
$updata['appcid'] = $appcid;
|
||||
$csql = new \ciy\sql('ap_usr_ext');
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
return errjson('更新appcid失败:' . $db->error);
|
||||
}
|
||||
|
||||
self::savelug($db, 1, $rsuser['id'], '手机注册:' . $model);
|
||||
return self::getsync($rsuser, $sid);
|
||||
$rsuser['laborgid'] = 0;
|
||||
$rsuser['name'] = ':' . substr($user, -4); // 姓名(默认值,若前端传则改为 $post->get('name'))
|
||||
$rsuser['usertitle'] = 0; // 职称(默认值)
|
||||
$rsuser['education'] = 0; // 学历(默认值)
|
||||
$rsuser['sn'] = ''; // 编号(默认值)
|
||||
$rsuser['sex'] = 90; // 性别(默认值)
|
||||
$rsuser['stpstatus'] = 10; // 状态(启用)
|
||||
$rsuser['userlevel'] = 10; // 用户等级
|
||||
$rsuser['mobile'] = $user;
|
||||
$rsuser['email'] = '';
|
||||
$rsuser['password'] = $pass; // 密码(保持原加密规则)
|
||||
$rsuser['dvotecnt'] = 0; // 投票数(默认值)
|
||||
$rsuser['trytime'] = 0;
|
||||
$rsuser['logintimes'] = tostamp();
|
||||
$rsuser['addtimes'] = tostamp();
|
||||
$rsuser['sid'] = $sid;
|
||||
$rsuser['exptimes'] = $exp;
|
||||
$rsuser['ip'] = getip();
|
||||
|
||||
// 改动3:插入操作表名改为 lab_user
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
if ($db->insert($csql, $rsuser) === false)
|
||||
return errjson('注册用户失败:' . $db->error);
|
||||
$id = $db->insert_id();
|
||||
$rsuser['id'] = $id;
|
||||
|
||||
if (!empty($appcid)) {
|
||||
$updata = array();
|
||||
$updata['id'] = $id;
|
||||
$updata['appcid'] = $appcid;
|
||||
// 改动4:若 ap_usr_ext 关联 lab_user,需确认表名(若无则保留)
|
||||
$csql = new \ciy\sql('ap_usr_ext');
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
return errjson('更新appcid失败:' . $db->error);
|
||||
}
|
||||
|
||||
// 微信自动登录
|
||||
|
||||
if ($upid > 0) {
|
||||
//上级用户统计(如需关联 lab_user 则调整,否则保留)
|
||||
}
|
||||
|
||||
self::savelug($db, 1, $rsuser['id'], '手机注册:' . $model);
|
||||
return self::getsync($rsuser, $sid);
|
||||
}
|
||||
public static function json_wx_autouser() {
|
||||
global $db;
|
||||
global $_token;
|
||||
|
|
@ -181,7 +193,6 @@ class login {
|
|||
$upid = $post->getint('upid');
|
||||
$weixinapi = new \web\api\weixin(1);
|
||||
$wxret = $weixinapi->call('https://api.weixin.qq.com/sns/jscode2session?grant_type=authorization_code&appid={appid}&secret={appsecret}&js_code=' . $code);
|
||||
|
||||
if (is_string($wxret))
|
||||
return errjson($wxret);
|
||||
|
||||
|
|
@ -192,8 +203,7 @@ class login {
|
|||
$rsuser = $db->getone($csql);
|
||||
$userid = 0;
|
||||
$sid = randstr(10);
|
||||
$exp = tostamp() + $_token['swapsec'];
|
||||
|
||||
$exp = tostamp() + $_token['swapsec']; //默认三天过期,每天换秘钥
|
||||
if (is_array($rsuser)) {
|
||||
$userid = $rsuser['id'];
|
||||
if ($rsuser['upid'] == 0 && $upid > 0 && $upid != $userid)
|
||||
|
|
@ -207,13 +217,12 @@ class login {
|
|||
$rsuser['sid'] = $sid;
|
||||
$rsuser['exptimes'] = $exp;
|
||||
$rsuser['ip'] = getip();
|
||||
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('id', $userid);
|
||||
if ($db->update($csql, $rsuser) === false)
|
||||
return errjson('wx更新失败:' . $db->error);
|
||||
} else {
|
||||
$newpnt = 1000;
|
||||
$newpnt = 1000; //注册赠送积分
|
||||
$rsuser = array();
|
||||
$rsuser['upid'] = $upid;
|
||||
if (isset($wxret['unionid']))
|
||||
|
|
@ -236,12 +245,10 @@ class login {
|
|||
$rsuser['exptimes'] = $exp;
|
||||
$rsuser['accounttimes'] = tostamp() + 86400 * 3;
|
||||
$rsuser['ip'] = getip();
|
||||
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
if ($db->insert($csql, $rsuser) === false)
|
||||
return errjson('wx新增失败:' . $db->error);
|
||||
$rsuser['id'] = $db->insert_id();
|
||||
|
||||
if ($newpnt > 0) {
|
||||
$updata = array();
|
||||
$updata['pnt'] = 1000;
|
||||
|
|
@ -252,11 +259,17 @@ class login {
|
|||
if ($db->insert($csql, $updata) === false)
|
||||
return errjson('reward新增失败:' . $db->error);
|
||||
}
|
||||
if ($upid > 0) {
|
||||
// $updata = array();
|
||||
// $updata['upall'] = array('upall+1');
|
||||
// $csql = new \ciy\sql('ap_user');
|
||||
// $csql->where('id', $upid);
|
||||
// if ($db->update($csql, $updata) === false)
|
||||
// return errjson('上线统计失败:' . $db->error);
|
||||
}
|
||||
}
|
||||
return self::getsync($rsuser, $sid);
|
||||
}
|
||||
|
||||
// 忘记密码
|
||||
public static function json_forgetpass() {
|
||||
global $db;
|
||||
global $_token;
|
||||
|
|
@ -264,9 +277,8 @@ class login {
|
|||
$model = $post->get('model');
|
||||
$mobile = $post->get('user');
|
||||
$pass = $post->get('pass');
|
||||
$code = $post->get('captcha');
|
||||
$code = $post->get('capsms');
|
||||
$codeid = $post->getint('capsms_id');
|
||||
|
||||
if (empty($code))
|
||||
return errjson('请填写验证码');
|
||||
if (empty($mobile))
|
||||
|
|
@ -274,28 +286,23 @@ class login {
|
|||
if (empty($pass))
|
||||
return errjson('请填写密码');
|
||||
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('mobile', $mobile);
|
||||
$rsuser = $db->getone($csql);
|
||||
|
||||
if (!is_array($rsuser))
|
||||
return errjson('该手机号未注册');
|
||||
|
||||
$csql = new \ciy\sql('ap_usr_capcode');
|
||||
$csql->where('id', $codeid);
|
||||
$caprow = $db->getone($csql);
|
||||
|
||||
if (!is_array($caprow))
|
||||
return errjson('未发送验证码');
|
||||
if ($caprow['exptimes'] < time())
|
||||
return errjson('验证码已过期');
|
||||
|
||||
$errmsg = '';
|
||||
if ($caprow['account'] != $mobile)
|
||||
$errmsg = '验证码与手机号不匹配';
|
||||
if ($caprow['code'] != $code)
|
||||
$errmsg = '验证码错误';
|
||||
|
||||
if (!empty($errmsg)) {
|
||||
$updata = array();
|
||||
$updata['exptimes'] = array('exptimes-180');
|
||||
|
|
@ -305,49 +312,41 @@ class login {
|
|||
return errjson('减扣失败:' . $db->error);
|
||||
return errjson($errmsg);
|
||||
}
|
||||
|
||||
$sid = randstr(10);
|
||||
$exp = tostamp() + $_token['swapsec'];
|
||||
$exp = tostamp() + $_token['swapsec']; //默认三天过期,每天换秘钥
|
||||
$updata = array();
|
||||
$updata['trytime'] = 0;
|
||||
$updata['password'] = $pass; // 存储MD5密码
|
||||
$updata['password'] = $pass;
|
||||
$updata['logintimes'] = tostamp();
|
||||
$updata['trytime'] = 0;
|
||||
$updata['sid'] = $sid;
|
||||
$updata['exptimes'] = $exp;
|
||||
$updata['ip'] = getip();
|
||||
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('id', $caprow['vuser']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
return errjson('密码更新失败:' . $db->error);
|
||||
|
||||
self::savelug($db, 1, $rsuser['id'], '密码找回成功:' . $model);
|
||||
return self::getsync($rsuser, $sid);
|
||||
return succjson();
|
||||
}
|
||||
|
||||
// 发送短信验证码
|
||||
public static function json_sendsms() {
|
||||
global $db;
|
||||
$post = new \ciy\post();
|
||||
$mobile = $post->get('account');
|
||||
$length = $post->getint('length');
|
||||
|
||||
if ($length < 3 || $length > 8)
|
||||
return errjson('验证码长度必须在3-8位之间');
|
||||
|
||||
$csql = new \ciy\sql('lab_user');
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('mobile', $mobile);
|
||||
$rsuser = $db->getone($csql);
|
||||
|
||||
if (!is_array($rsuser))
|
||||
return errjson('该手机号未注册');
|
||||
|
||||
$csql = new \ciy\sql('ap_usr_capcode');
|
||||
$csql->where('account', $mobile);
|
||||
$csql->where('addtimes>', tostamp() - 60);
|
||||
$csql->where('addtimes>', tostamp() - 1);
|
||||
$cnt = $db->get1($csql);
|
||||
|
||||
if ($cnt > 0)
|
||||
return errjson('验证码发送频繁,请1分钟后再尝试');
|
||||
|
||||
|
|
@ -358,11 +357,9 @@ class login {
|
|||
$updata['code'] = $code;
|
||||
$updata['addtimes'] = tostamp();
|
||||
$updata['exptimes'] = tostamp() + 600;
|
||||
|
||||
$csql = new \ciy\sql('ap_usr_capcode');
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
return errjson('更新失败:' . $db->error);
|
||||
|
||||
$id = $db->insert_id();
|
||||
$data = array();
|
||||
$data['txt'] = $code;
|
||||
|
|
@ -372,69 +369,82 @@ class login {
|
|||
"data" => $data,
|
||||
"sendnow" => true,
|
||||
);
|
||||
|
||||
$retapi = ciy_api('sms', $param);
|
||||
if ($retapi !== true)
|
||||
return errjson($retapi);
|
||||
|
||||
$ret['id'] = $id;
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
// 重新获取存储信息
|
||||
public static function json_restorage() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
return self::getsync($rsuser);
|
||||
}
|
||||
|
||||
// 生成登录返回数据
|
||||
static function getsync($userrow, $sid = '') {
|
||||
global $db;
|
||||
global $_token;
|
||||
$ret = array();
|
||||
|
||||
if (!empty($sid)) {
|
||||
$auth = array();
|
||||
$auth['id'] = $userrow['id'];
|
||||
$auth["_s"] = $sid;
|
||||
$authstr = json_encode($auth, JSON_PARTIAL_OUTPUT_ON_ERROR);
|
||||
$enauth = encrypt($authstr, 'E', $_token['salt']);
|
||||
|
||||
if ($_token['type'] == 'cookie') {
|
||||
$headercookie = 'Set-Cookie: ' . $_token['field'] . '=' . $enauth . '; expires=' . gmdate('D, d-M-Y H:i:s T', time() + $_token['swapsec'] + $_token['expsec']) . '; path=/; SameSite=None; Secure; httponly';
|
||||
header($headercookie);
|
||||
header($headercookie); //Cookie方式,安全性好
|
||||
} else {
|
||||
$ret['_ciyauth'] = $enauth;
|
||||
$ret['_ciyauth'] = $enauth; //Localstorage方式,兼容性更好
|
||||
//header($_token['field'] . ': ' . $enauth); //有坑
|
||||
}
|
||||
}
|
||||
|
||||
$ret['storage'] = array();
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
$csql->column('id,name');
|
||||
$ret['storage']['adminuser'] = $db->get($csql);
|
||||
|
||||
$csql = new \ciy\sql('zc_cata');
|
||||
$csql->order('csort');
|
||||
$ret['storage']['cata'] = $db->get($csql);
|
||||
|
||||
$csql = new \ciy\sql('ap_pnt_track');
|
||||
$ret['pnttrack'] = $db->get($csql);
|
||||
|
||||
$ret['me'] = array();
|
||||
$ret['me']['addtimes'] = $userrow['addtimes'];
|
||||
$ret['me']['accounttimes'] = $userrow['accounttimes'];
|
||||
//$ret['me']['saasid_a'] = $userrow['saasid_a'];
|
||||
$ret['me']['id'] = $userrow['id'];
|
||||
$ret['me']['eid'] = enid($userrow['id']);
|
||||
$ret['me']['upid'] = $userrow['upid'];
|
||||
$ret['me']['icon'] = $userrow['icon'];
|
||||
$ret['me']['mobile'] = $userrow['mobile'];
|
||||
$ret['me']['name'] = $userrow['name'];
|
||||
$ret['me']['dvotecnt'] = $userrow['dvotecnt'];
|
||||
$ret['me']['userlevel'] = $userrow['userlevel'];
|
||||
$ret['me']['mymoney'] = $userrow['mymoney'];
|
||||
$ret['me']['mycashmoney'] = $userrow['mycashmoney'];
|
||||
$ret['me']['myinvmoney'] = $userrow['myinvmoney'];
|
||||
$ret['me']['mybondmoney'] = $userrow['mybondmoney'];
|
||||
$ret['me']['mypnt'] = $userrow['mypnt'];
|
||||
$ret['me']['certs'] = $userrow['certs'];
|
||||
$ret['me']['needpass'] = empty($userrow['password']);
|
||||
$ret['me']['cciy'] = '';
|
||||
|
||||
$csql = new \ciy\sql('ap_usr_ext');
|
||||
$csql->where('id', $userrow['id']);
|
||||
$extrow = $db->getone($csql);
|
||||
if (is_array($extrow)) {
|
||||
$ret['me']['truename'] = $extrow['truename'];
|
||||
$ret['me']['email'] = $extrow['email'];
|
||||
$ret['me']['wxno'] = $extrow['wxno'];
|
||||
$ret['me']['idid'] = $extrow['idid'];
|
||||
$ret['me']['cciy'] = $extrow['cciy'] . '';
|
||||
$ret['me']['cashtype'] = $extrow['cashtype'];
|
||||
$ret['me']['bankno'] = $extrow['bankno'];
|
||||
$ret['me']['bankname'] = $extrow['bankname'];
|
||||
$ret['me']['bankaccount'] = $extrow['bankaccount'];
|
||||
$ret['me']['bankcode'] = $extrow['bankcode'];
|
||||
} else {
|
||||
$ret['me']['truename'] = '';
|
||||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
// 退出登录
|
||||
public static function json_logout() {
|
||||
global $db;
|
||||
$rsuser = verifyuser();
|
||||
|
|
@ -443,50 +453,38 @@ class login {
|
|||
}
|
||||
return succjson();
|
||||
}
|
||||
|
||||
// 调试切换用户
|
||||
public static function json_debug_chguser() {
|
||||
global $db;
|
||||
global $_token;
|
||||
$post = new \ciy\post();
|
||||
$usercode = $post->getint('code');
|
||||
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('id', $usercode);
|
||||
$rsuser = $db->getone($csql);
|
||||
|
||||
if (!is_array($rsuser))
|
||||
return errjson('用户不存在');
|
||||
|
||||
$sid = randstr(10);
|
||||
$exp = tostamp() + $_token['swapsec'];
|
||||
$id = $rsuser['id'];
|
||||
$updata = array();
|
||||
$updata['sid'] = $sid;
|
||||
$updata['exptimes'] = $exp;
|
||||
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
return errjson('user数据库更新失败:' . $db->error);
|
||||
|
||||
return self::getsync($rsuser, $sid);
|
||||
}
|
||||
|
||||
// 调试操作用户
|
||||
public static function json_debug_opuser() {
|
||||
global $db;
|
||||
$post = new \ciy\post();
|
||||
$code = $post->getint('text');
|
||||
$btn = $post->get('btn');
|
||||
|
||||
$csql = new \ciy\sql('ap_user');
|
||||
$csql->where('id', $code);
|
||||
$rsuser = $db->getone($csql);
|
||||
|
||||
if (!is_array($rsuser))
|
||||
return errjson('用户不存在');
|
||||
|
||||
if ($btn == 'del') {
|
||||
$csql = new \ciy\sql('zc_debug_user');
|
||||
$csql->where('targettype', 21);
|
||||
|
|
@ -495,43 +493,36 @@ class login {
|
|||
return errjson('dbg删除失败:' . $db->error);
|
||||
return succjson();
|
||||
}
|
||||
|
||||
$csql = new \ciy\sql('zc_debug_user');
|
||||
$csql->where('targettype', 21);
|
||||
$csql->where('user', $code);
|
||||
|
||||
if (is_array($db->getone($csql)))
|
||||
return errjson('已存在');
|
||||
|
||||
$updata = array();
|
||||
$updata['targettype'] = 21;
|
||||
$updata['isuse'] = 2;
|
||||
$updata['name'] = $rsuser['name'];
|
||||
$updata['user'] = $code;
|
||||
$updata['pass'] = '';
|
||||
|
||||
$csql = new \ciy\sql('zc_debug_user');
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
return errjson('debug_user新增失败:' . $db->error);
|
||||
|
||||
$ret['data'] = array('user' => $code, 'name' => $rsuser['name']);
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
// 获取APP版本
|
||||
public static function json_getappver() {
|
||||
global $dbn;
|
||||
//0a.0b.000c,如果版本a.b有变化,先给app链接。如果只有c有变化,给wgt
|
||||
//$rsuser = verifytob();//根据用户灰度升级
|
||||
$post = new \ciy\post();
|
||||
$cplat = $post->get('plat');
|
||||
$cplat = $post->get('plat'); //android,ios,harmony
|
||||
$vercode = $post->getint('vercode');
|
||||
$ver = (int)getconfig($dbn, 'ver' . $cplat . 'code');
|
||||
$ret = array();
|
||||
|
||||
if ($ver > $vercode) {
|
||||
$urlb = getconfig($dbn, 'ver' . $cplat . 'url');
|
||||
$url = $urlb . $ver . '.wgt';
|
||||
$ver = (int)($ver / 10000);
|
||||
|
||||
if ($ver > (int)($vercode / 10000)) {
|
||||
$url = $urlb . $ver . '.apk';
|
||||
}
|
||||
|
|
@ -539,19 +530,6 @@ class login {
|
|||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
// 调试用户列表
|
||||
public static function json_debug_list() {
|
||||
global $db;
|
||||
$csql = new \ciy\sql('zc_debug_user');
|
||||
$csql->where('targettype', 21);
|
||||
$csql->where('isuse', 1);
|
||||
$csql->column('user,name,pass');
|
||||
$list = $db->get($csql);
|
||||
return succjson(['list' => $list]);
|
||||
}
|
||||
|
||||
// 保存登录日志
|
||||
private static function savelug($db, $isinout, $userid, $model = '') {
|
||||
$updata = array();
|
||||
$updata['isinout'] = $isinout;
|
||||
|
|
@ -559,9 +537,8 @@ class login {
|
|||
$updata['addtimes'] = tostamp();
|
||||
$updata['ip'] = getip();
|
||||
$updata['model'] = dbstr($model, 250);
|
||||
|
||||
$csql = new \ciy\sql('ap_lug');
|
||||
$db->insert($csql, $updata);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
cqd:<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M546.334118 258.198588V106.315294h288.527058V57.825882c0-31.924706-25.840941-57.825882-57.825882-57.825882H103.002353a57.825882 57.825882 0 0 0-57.825882 57.825882v886.66353C45.176471 976.414118 71.077647 1002.315294 103.002353 1002.315294H777.035294a57.765647 57.765647 0 0 0 57.795765-57.825882v-63.668706H121.133176v-151.853177H834.861176v-55.717647H121.133176v-151.823058H834.861176v-55.717648h-288.527058v-151.823058h288.527058v-55.717647h-288.527058z" fill="#A267F8"></path><path d="M834.861176 465.679059h121.494589V313.825882H834.861176z" fill="#F9D11F"></path><path d="M546.334118 465.679059h288.527058V313.825882h-288.527058z" fill="#7E42B9"></path><path d="M834.861176 673.249882h121.494589v-151.853176H834.861176z" fill="#F9D11F"></path><path d="M121.103059 673.249882h713.728v-151.853176H121.103059z" fill="#7E42B9"></path><path d="M834.861176 258.168471h121.494589V106.315294H834.861176z" fill="#F9D11F"></path><path d="M546.334118 258.168471h288.527058V106.315294h-288.527058z" fill="#7E42B9"></path><path d="M834.861176 880.790588h121.494589v-151.853176H834.861176z" fill="#F9D11F"></path><path d="M121.103059 880.790588h713.728v-151.853176H121.103059z" fill="#7E42B9"></path><path d="M485.586824 465.709176H121.103059v-81.799529a70.053647 70.053647 0 0 1 70.053647-70.053647h224.37647a70.053647 70.053647 0 0 1 70.053648 70.053647v81.799529zM386.891294 189.831529a83.516235 83.516235 0 1 1-167.03247 0 83.516235 83.516235 0 0 1 167.03247 0" fill="#FFFFFF"></path></svg>
|
||||
cjf:<svg t="1769005770717" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5486" width="200" height="200"><path d="M 501.76 20.48 C 225.28 20.48 0 245.76 0 522.24 S 225.28 1024 501.76 1024 S 1003.52 798.72 1003.52 522.24 S 778.24 20.48 501.76 20.48 Z m 303.104 342.016 c -8.192 81.92 -53.248 61.44 -28.672 112.64 c -45.056 6.144 -43.008 10.24 -90.112 0 c 0 0 2.048 -2.048 2.048 -4.096 c 24.576 -47.104 -22.528 -28.672 -30.72 -112.64 c -10.24 -120.832 161.792 -120.832 147.456 4.096 Z m -55.296 155.648 c -2.048 8.192 -6.144 16.384 -10.24 22.528 l -20.48 -24.576 c 0 -2.048 -2.048 -2.048 -2.048 -4.096 l 32.768 6.144 Z M 493.568 206.848 c 118.784 0 104.448 135.168 69.632 192.512 c -20.48 32.768 -36.864 22.528 -14.336 71.68 c -61.44 8.192 -51.2 10.24 -114.688 0 c 0 0 2.048 -2.048 0 -2.048 c 24.576 -38.912 4.096 -40.96 -12.288 -67.584 c -43.008 -75.776 -38.912 -194.56 71.68 -194.56 Z m -161.792 159.744 c -4.096 22.528 -12.288 45.056 -22.528 59.392 s -22.528 28.672 -6.144 47.104 c -28.672 14.336 -57.344 10.24 -88.064 2.048 c 28.672 -49.152 -24.576 -32.768 -30.72 -118.784 c -6.144 -116.736 165.888 -116.736 147.456 10.24 Z m -61.44 145.408 l -10.24 16.384 c -4.096 6.144 -6.144 6.144 -10.24 10.24 l -12.288 -24.576 l 32.768 -2.048 Z m -49.152 77.824 c -2.048 12.288 -10.24 34.816 -14.336 55.296 c -4.096 20.48 -4.096 38.912 -6.144 59.392 c -51.2 -6.144 -118.784 -8.192 -143.36 -43.008 v -40.96 c 20.48 -47.104 6.144 -53.248 45.056 -92.16 c 20.48 -20.48 51.2 -40.96 90.112 -45.056 c 8.192 12.288 30.72 90.112 28.672 106.496 Z m 512 147.456 c -69.632 45.056 -313.344 36.864 -405.504 20.48 c -81.92 -14.336 -94.208 -30.72 -90.112 -83.968 c 8.192 -110.592 71.68 -174.08 174.08 -192.512 c 18.432 24.576 34.816 139.264 53.248 174.08 c 2.048 -22.528 8.192 -47.104 14.336 -69.632 c 12.288 -47.104 -6.144 -28.672 -6.144 -63.488 h 40.96 c 2.048 6.144 4.096 6.144 0 18.432 c 0 2.048 -8.192 14.336 -8.192 14.336 c -6.144 12.288 14.336 83.968 20.48 96.256 l 47.104 -172.032 c 102.4 20.48 165.888 75.776 182.272 188.416 c 4.096 34.816 2.048 53.248 -22.528 69.632 Z m 157.696 -47.104 c -30.72 8.192 -73.728 14.336 -106.496 14.336 c -4.096 -57.344 -20.48 -118.784 -20.48 -118.784 c 0 -8.192 10.24 -43.008 14.336 -53.248 l 18.432 -49.152 c 71.68 12.288 118.784 53.248 133.12 122.88 c 10.24 51.2 6.144 69.632 -38.912 83.968 Z" fill="#2b5deb" p-id="5487"></path></svg>
|
||||
cjf:<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M902.384941 257.114353H245.338353a98.454588 98.454588 0 0 0-98.454588 98.424471V746.315294a98.484706 98.484706 0 0 0 98.484706 98.454588h57.675294v141.914353c0 13.914353 16.745412 20.841412 26.593882 11.023059l152.937412-152.937412h419.84a98.484706 98.484706 0 0 0 98.42447-98.484706V355.568941a98.454588 98.454588 0 0 0-98.454588-98.42447" fill="#FF7E50"></path><path d="M98.424471 0h657.046588a98.454588 98.454588 0 0 1 98.484706 98.424471v390.806588a98.424471 98.424471 0 0 1-98.484706 98.42447H697.825882v141.914353a15.570824 15.570824 0 0 1-26.593882 11.023059l-152.997647-152.937412H98.424471A98.454588 98.454588 0 0 1 0 489.231059V98.424471A98.484706 98.484706 0 0 1 98.484706 0" fill="#F9D11F"></path><path d="M671.232 740.592941a15.600941 15.600941 0 0 0 26.624-11.023059v-141.94447h57.645176a98.394353 98.394353 0 0 0 98.424471-98.424471V257.084235H245.338353a98.424471 98.424471 0 0 0-98.424471 98.424471v232.116706h371.350589l152.967529 152.997647z" fill="#ED4042"></path><path d="M303.043765 468.269176h394.812235V358.098824H303.043765z" fill="#FFFFFF"></path></svg>
|
||||
cmh:<svg viewBox="0 0 1355 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M663.491765 1002.315294c-162.454588 0-294.159059-131.734588-294.159059-294.189176V109.236706A109.236706 109.236706 0 0 1 478.569412 0h369.844706a109.236706 109.236706 0 0 1 109.236706 109.236706v598.889412c0 162.454588-131.704471 294.159059-294.159059 294.159058" fill="#31EC7C"></path><path d="M871.484235 916.148706c-114.868706 114.868706-301.116235 114.868706-416.015059 0L32.015059 492.634353a109.206588 109.206588 0 0 1 0-154.443294l261.511529-261.541647a109.206588 109.206588 0 0 1 154.443294 0l423.514353 423.454117c114.868706 114.928941 114.868706 301.176471 0 416.045177" fill="#A267F8"></path><path d="M455.499294 916.148706c-114.868706-114.868706-114.868706-301.116235 0-416.015059L879.013647 76.649412a109.206588 109.206588 0 0 1 154.443294 0l261.541647 261.541647a109.206588 109.206588 0 0 1 0 154.443294L871.514353 916.148706c-114.898824 114.868706-301.176471 114.868706-416.015059 0" fill="#F83CB6"></path><path d="M871.484235 500.133647L663.491765 292.141176l-208.022589 207.992471c-114.838588 114.868706-114.838588 301.116235 0 416.015059 114.898824 114.868706 301.176471 114.868706 416.015059 0 114.868706-114.898824 114.868706-301.146353 0-416.015059" fill="#7E42B9"></path><path d="M740.532706 636.235294a101.707294 101.707294 0 0 1-143.811765 143.811765 101.707294 101.707294 0 0 1 143.811765-143.811765" fill="#FFFFFF"></path></svg>
|
||||
ctg:<svg viewBox="0 0 1114 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M801.039059 672.677647l-198.415059 198.415059-198.415059-198.415059-155.888941-155.888941 198.415059-198.415059 155.888941 155.888941 220.16-220.129882V133.150118a133.150118 133.150118 0 0 0-133.150118-133.12H118.211765C44.664471 0 0 59.632941 0 133.12v735.954824C0 942.682353 44.664471 1002.315294 118.211765 1002.315294h571.422117a133.12 133.12 0 0 0 133.12-133.180235v-218.172235l-21.714823 21.744941z" fill="#F9D11F"></path><path d="M1105.92 367.766588l-198.384941-198.415059-84.751059 84.781177v396.8z" fill="#3193FF"></path><path d="M446.735059 318.403765L248.32 516.818824l155.888941 155.888941 198.415059 198.415059 198.415059-198.415059 21.744941-21.744941V254.132706l-220.16 220.16z" fill="#006FD9"></path><path d="M119.657412 239.344941h583.439059v-134.625882H119.657412zM119.687529 882.627765h179.501177v-134.625883h-179.501177z" fill="#FFFFFF"></path></svg>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user