测试app文件上传

This commit is contained in:
tsf 2024-06-07 16:49:19 +08:00
parent fbe38770cc
commit 082d3fb1e0
23 changed files with 1013 additions and 68 deletions

View File

@ -0,0 +1,108 @@
<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use app\bj\controller\Common;
use think\helper\hash\Md5;
use think\Log;
use \think\Validate;
class Appversion extends Base{
protected $page_num = 10;
protected $file_max = 1024*1024*50;//10MB
public function index($page = 1){
$data = input();
$pd = true;
$parameter = [];
if(array_key_exists('tt', $data)){
$page = $data['page_num'];
unset($data['page_num']);
unset($data['tt']);
$pd = false;
// if($data['status_num'] === "0" || $data['status_num'] === "1"){
// $parameter['is_del'] = $data['status_num'];
// }
// if($data['tel']){
// $parameter['tel'] = $data['tel'];
// }
// if($data['email']){
// $parameter['email'] = $data['email'];
// }
// if($data['s_time']){
// $parameter['create_time'] = ['>=',$data['s_time']];
// }
// if($data['e_time']){
// $parameter['create_time'] = ['<=',$data['e_time']];
// }
}
$num = Db::table('app_version_log')->where($parameter)->count();
$result = Db::table('app_version_log')->order('id desc')->page($page,$this->page_num)->select();
if(!$pd){
$result['num'] = $num;
$result['data'] = $result;
return $this->msg(0,'success',$result);
}
$this->assign([
'result' => $result,
'num' => $num,
]);
return $this->fetch();
}
public function app_add(){
return $this->fetch();
}
public function app_add_action(){
$file = request()->file('apk');
$name = request()->param();
$num = Db::table('app_version_log')->where(['name'=>$name['file_name'],'version_num'=>$name['version_num']])->count();
// dump($num);
if($num > 0){
return $this->msg(10001,'版本号已存在');
}
if($file){
// 移动到框架应用根目录/public/uploads/ 目录下
$file_name_new = $name['file_name'].'_'.$name['version_num'].'.apk';
$info = $file->validate(['size'=>$this->file_max,'ext'=>'apk'])->move(ROOT_PATH . 'public' . DS . 'app_update_file',$file_name_new);
if($info){
$result = Db::table('app_version_log')->insert([
'name'=>$name['file_name'],
'version_num'=>$name['version_num'],
'content'=>$name['content'],
'download_url'=>'http://tc.pcxbc.com/app_update_file/'.$file_name_new,
'create_time'=>date('Y-m-d H:i:s'),
]);
if($result){
return $this->msg([]);
}else{
return $this->msg(10002);
}
// 成功上传后 获取上传信息
// 输出 jpg
// echo $info->getExtension();
// // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getSaveName();
// // 输出 42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getFilename();
}else{
// 上传失败获取错误信息
return $this->msg(10001, $file->getError());
// echo $file->getError();
}
}else{
return $this->msg(10001, '文件缺失');
}
}
################################################################other################################################################
################################################################other################################################################
################################################################other################################################################
}

View File

@ -0,0 +1,216 @@
<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use think\Cache;
use think\Log;
class Base extends Controller{
protected $ceshiyong_token = 'caadd1be045a65f30b92aa805f1de54a';
protected $token_time = 86400*3;
protected $return_data_all = [
// '0' => ['success',[]],
'10001'=>'关键参数缺失',
'10002'=>'操作失败',
'10003'=>'信息核实错误',
'10004'=>'未找到有效数据',
'10005'=>'参数格式错误',
'10006'=>'参数不能为空',
'10007'=>'',
'10008'=>'',
'10009'=>'',
'10010'=>'',
'20001'=>'登录失效',
];
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
// 操作记录留存
// $data = ['aud_id'=>'xxxxxxxxxxxxxxx','order_list'=>[1,2,3,4,5]]
public function abnormal_data_log_action($dacall_methoda = 0,$content='未记录的内容',$use_database_name='未记录的数据库名'){
$result = Db::table('app_data_log')->insert([
'create_time'=>date('Y-m-d H:i:s'),
'call_method'=>$this->base_call_method[$dacall_methoda],
'content'=>$content,
'use_database_name'=>$use_database_name,
]);
}
// 检查变量是否是一个只有数字的一维数组
public function is_num_array($array = [1,2,3],$type=1) {
if (!is_array($array)) {
return false; // 变量不是数组
}
foreach ($array as $value) {
if (!is_numeric($value)) {
return false; // 数组中包含非数字元素
}
}
if($type!=1){
return true;
}
$result = Db::table('app_card_data')->where(['is_del'=>0])->cache(true,3600)->select();//查询结果缓存3600秒
if(empty(array_diff($array, array_column($result, 'id')))){
return true;// 数组是一维的且只包含数字,且已经跟数据库比对过,每个数值都是有效
}else{
return false;//跟数据库比对过,存在无效数值
}
}
public function validate_user_identity($data) {
$validate_user = Db::table('app_user_data')->where(['id'=>$data])->count();
if($validate_user<=0){
return false;
}else{
return true;
}
}
// 判断字符串是手机还是邮箱
public function is_tel_email($str) {
// 手机号码的正则表达式(中国大陆格式)(下面正则实际判断的是是否为11位数字)
$mobilePattern = '/^\d{11}$/';
// 电子邮件地址的正则表达式
$emailPattern = '/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
// 判断是否为手机号码
if (preg_match($mobilePattern, $str)) {
return 'tel';
}
// 判断是否为电子邮件地址
if (preg_match($emailPattern, $str)) {
return 'email';
}
// 如果都不是,返回其他
return false;
}
// 计算年龄
public function calculate_age($data = '1991-04-20'){
$today = time(); // 获取当前时间的 Unix 时间戳
$birthDate = strtotime($data); // 将出生日期字符串转换为 Unix 时间戳
if ($birthDate !== false) {
$age = date('Y', $today) - date('Y', $birthDate);
// 如果当前年份的月份和日期小于出生年份的月份和日期,那么年龄减一
if (date('m-d', $today) < date('m-d', $birthDate)) {
$age--;
}
return $age;
} else {
return false;
}
}
// 秒转化格式00:00:00
public function handle_hour_branch_second($data = '2000'){
$hours = intval($data / 3600);
$minutes = intval(($data % 3600) / 60);
$remainingSeconds = $data % 60;
return [
'h' => str_pad($hours, 2, '0', STR_PAD_LEFT),
'm' => str_pad($minutes, 2, '0', STR_PAD_LEFT),
's' => str_pad($remainingSeconds, 2, '0', STR_PAD_LEFT)
];
}
// 判断token是否过期
public function token_time_validate($token){
// cache($token,time());
// return true;
$time = cache($token);
// dump($time);
if($time === false){
return false;
}
$diff_time = time() - $time;
// dump($diff_time);
if($diff_time > $this->token_time){
return false;
}
cache($token, time());
return true;
}
// 计算天数
public function daysSince($pastDate,$now = false)
{
// 创建一个表示过去日期的 DateTime 对象
$past = new \DateTime($pastDate);
if($now === false){
// 创建一个表示当前日期的 DateTime 对象
$now = new \DateTime();
}else{
$now = new \DateTime($now);
}
// 使用 DateTime::diff() 方法计算两个日期之间的差值
$interval = $past->diff($now);
// 返回相差的天数
return $interval->format('%a');
}
// 计算月份
public function calculateAgeInMonthsWithPrecision($birthDateStr) {
// 获取当前日期
$now = new \DateTime();
// 将出生日期字符串转换为 DateTime 对象
$birthDate = \DateTime::createFromFormat('Y-m-d', $birthDateStr);
// 计算两者之间的差距(以月为单位,包含部分月份的小数)
$interval = $now->diff($birthDate);
$ageInMonths = $interval->y * 12 + $interval->m; // 年份乘以12加上月份
$remainingDays = $interval->d; // 当前月内的剩余天数
// 将剩余天数转换为小数月份假设一个月为30天进行近似计算
$partialMonth = $remainingDays / 30;
// 结果精确到小数点后两位
$ageInMonthsPrecise = round($ageInMonths + $partialMonth, 2);
return $ageInMonthsPrecise;
}
// 曲线页面-底部统计动作
public function base_target_initial_cumulative_weight($data = []){
// 第一种:用户详情(所有数据都有)
// 第二种:手动记录(只有最新体重)
// 第三种:修改原始体重(只有原始体重)
// dump($data);
if(count($data) > 0){
$result_data['target_weight'] = $data['target_weight'];
$result_data['initial_weight'] = $data['initial_weight'];
$result_data['cumulative_weight'] = bcsub($data['weight'],$data['initial_weight'],2);
$result_data['cumulative_day'] = $data['initial_date'] == 0?0:$this->daysSince($data['initial_date']);
}else{
$result_data['target_weight'] = 0;
$result_data['initial_weight'] = 0;
$result_data['cumulative_weight'] = 0;
$result_data['cumulative_day'] = 0;
}
// dump($result_data);
return $result_data;
}
// 判断一个参数是否为数字且大于等于0
function isPositiveNumber($value) {
return is_numeric($value) && $value >= 0;
}
public function msg($data,$str=''){
if(is_array($data)){
return json(['code'=>0,'msg'=>'操作成功','data'=>$data]);
}else{
if($str != ''){
return json(['code'=>$data,'msg'=>$str]);
}
return json(['code'=>$data,'msg'=>$this->return_data_all[$data]]);
}
}
public function ceshiyong(){
$result = Db::query("select * from app_card_data");
dump($result);
$result2 = Db::table('app_card_data')->select();
dump($result2);
}
}

View File

@ -0,0 +1,197 @@
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>app版本管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" href="/x_admin/css/font.css">
<link rel="stylesheet" href="/x_admin/css/xadmin.css">
<script type="text/javascript" src="/x_admin/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="/x_admin/js/xadmin.js"></script>
<script type="text/javascript" src="/x_admin/js/jq.js"></script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form">
<div class="layui-form-item">
<label for="L_email" class="layui-form-label">
<!-- <span class="x-red">*</span>邮箱 -->
</label>
<div class="layui-input-inline">
<!-- <input type="text" id="L_email" name="email" required="" lay-verify="email" autocomplete="off" class="layui-input"> -->
<input type="file" id="upload_file_app" lay-verify="upload_file_app" name="data_excel">
</div>
<!-- <div class="layui-form-mid layui-word-aux">
<span class="x-red">*</span>将会成为您唯一的登入名
</div> -->
</div>
<div class="layui-form-item">
<label for="file_name" class="layui-form-label">
<span class="x-red"></span>文件名</label>
<div class="layui-input-inline">
<input type="text" id="file_name" name="file_name" required="" lay-verify="file_name" autocomplete="off" class="layui-input" readonly></div>
</div>
<div class="layui-form-item">
<label for="version_num" class="layui-form-label">
<span class="x-red">*</span>版本号</label>
<div class="layui-input-inline">
<input type="text" id="version_num" name="version_num" required="" lay-verify="version_num" autocomplete="off" class="layui-input"></div>
<div class="layui-form-mid layui-word-aux">以大写V开头最多10个字符由数字跟英文"."组成)</div></div>
<div class="layui-form-item">
<label for="content" class="layui-form-label">
<span class="x-red">*</span>描述</label>
<div class="layui-input-inline">
<input type="text" id="content" name="content" required="" lay-verify="content" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label"></label>
<div class="layui-btn" id="add" lay-filter="add" lay-submit="">增加</div>
<!-- <input value="登录" lay-submit lay-filter="add" type="submit" class="layui-btn">
<button class="layui-btn" lay-filter="add" lay-submit="">增加</button> -->
</div>
</form>
</div>
</div>
<!-- <div class="layui-fluid">
<div id="official_1" class="layui-row">
<div style="margin-left: 8%;margin-top: 5%;font-size: 25px;">请先下载模板文件,信息填写完成并上传该文件后点击生成</div>
<img style="width: 90%;margin-left: 3%;"src="/uploads/code_demo.png?v=1.0" alt="">
<div class="layui-form-item" style="width: 30%;margin-left: 33%;margin-top: 5%;">
<span>步骤1</span><a href="/uploads/code_demo.xlsx" class="layui-btn" lay-filter="add">下载模板文件</a>
</div>
<div class="layui-form-item" style="width: 50%;margin-left: 33%;margin-top: 5%;">
<span>步骤2</span><input type="file" id="data_excel" name="data_excel">
</div>
<div class="layui-form-item" style="width: 30%;margin-left: 33%;margin-top: 5%;">
<span>步骤3</span><button class="layui-btn" lay-filter="add" lay-submit="" onclick="add_data()">生成</button>
</div>
</div>
</div> -->
<script>
$(document).ready(function(){
var file_name_all = ''
var file_name = ''
var file_extension = ''
var pd = true
$('#upload_file_app').on('change', function() {
// 获取被选择的文件
var fileInput = $(this)[0];
var file = fileInput.files[0];
// 检查是否有文件被选择
if (file) {
// 获取文件的名称
file_name_all = file.name;
// 使用lastIndexOf和substring来获取文件名不包括后缀
var lastIndex = file_name_all.lastIndexOf('.');
file_name = lastIndex !== -1 ? file_name_all.substring(0, lastIndex) : file_name_all;
// 获取文件后缀
file_extension = lastIndex !== -1 ? file_name_all.substring(lastIndex + 1) : '';
$('#file_name').val(file_name)
// console.log($('#upload_file_app')[0].files[0])
// formdata.append('apk',$('#upload_file_app')[0].files[0])
}
});
$('#add').click(function(){
var formdata = new FormData();
formdata.append('apk',$('#upload_file_app')[0].files[0])
formdata.append('file_name',$('#file_name').val())
formdata.append('version_num',$('#version_num').val())
formdata.append('content',$('#content').val())
// return
if(pd){
// pd = false
console.log('进来了')
$.ajax({
url:"/appversion/app_add_action", //请求的url地址
contentType:false,
processData:false,
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:formdata, //参数值
type:"POST", //请求方式
success:function(req){
//请求成功时处理
// layer.alert("增加成功", {icon: 6},function() {
// //关闭当前frame
// xadmin.close();
// // 可以对父窗口进行刷新
// xadmin.father_reload();
// });
console.log(req)
},
error:function(){
//请求出错处理
pd = true
}
});
}
})
layui.use(['form', 'layer','jquery'],function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
// upload_file_app: function(value) {
// if (value == '') {
// return '请先选择文件';
// }
// },
// file_name: function(value) {
// if (value == '') {
// return '必须填写文件名';
// }
// },
// version_num: [/^V[\d.]{0,9}$/, '版本号必须以大写V开头最多10个字符由数字跟英文"."组成)'],
// content: function(value) {
// if (value == '') {
// return '必须填写描述';
// }
// },
});
//监听提交
form.on('submit(add)',function(data) {
//发异步把数据提交给php
return false;
});
});
//加载提示开启
function load() {
var index = layer.load(1, {
shade: [0.1, '#fff'] //0.1透明度的白色背景
});
}
// 关闭加载提示
function c_load() {
layer.close(layer.index)
}
});
// });
</script>
</body>
</html>

View File

@ -0,0 +1,348 @@
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>app版本管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" href="/x_admin/css/font.css">
<link rel="stylesheet" href="/x_admin/css/xadmin.css">
<script src="/x_admin/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="/x_admin/js/xadmin.js"></script>
<style>
/* th{
min-width:30px;
} */
</style>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">演示</a>
<a>
<cite>导航元素</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<!-- <div class="layui-card-body ">
<form class="layui-form layui-col-space5">
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="s_time">
</div>
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="e_time">
</div>
<div class="layui-inline layui-show-xs-block">
<input type="text" name="username" placeholder="请输入用户手机" autocomplete="off" class="layui-input" id="tel">
</div>
<div class="layui-inline layui-show-xs-block">
<input type="text" name="username" placeholder="请输入用户邮箱" autocomplete="off" class="layui-input" id="email">
</div>
<div class="layui-input-inline layui-show-xs-block">
<select name="contrller" id="status_num">
<option value="">状态</option>
<option value="0">启用</option>
<option value="1">停用</option>
</select>
</div>
<div class="layui-inline layui-show-xs-block">
<div class="layui-btn" lay-submit="" lay-filter="sreach" onclick="find('y')"><i class="layui-icon">&#xe615;</i></div>
</div>
</form>
</div> -->
<div class="layui-card-header">
<!-- <button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量停用</button> -->
<!-- <button class="layui-btn" onclick="xadmin.open('添加用户','/appversion/app_add','100%','100%')"><i class="layui-icon"></i>添加</button> -->
<button class="layui-btn" onclick="xadmin.open('添加版本','/appversion/app_add','80%','60%')"><i class="layui-icon"></i>添加</button>
</div>
<div class="layui-card-body layui-table-body layui-table-main">
<table class="layui-table layui-form">
<thead>
<tr>
<!-- <th><input type="checkbox" lay-filter="checkall" name="" lay-skin="primary"></th> -->
<th>ID</th>
<th>文件名</th>
<th>版本号</th>
<th>描述</th>
<th>创建时间</th>
<!-- <th>操作</th></tr> -->
</thead>
<tbody id='content'>
{volist name="result" id="vo"}
<tr>
<!-- <td><input type="checkbox" name="id" value="{$vo.id}" lay-skin="primary"></td> -->
<td>{$vo.id}</td>
<td>{$vo.name}</td>
<td>{$vo.version_num}</td>
<td>{$vo.content}</td>
<td>{$vo.create_time}</td>
</tr>
{/volist}
</tbody>
</table>
</div>
<div class="layui-card-body ">
<div id="page" style="text-align: center;">
</div>
</div>
<!-- <div class="layui-card-body ">
<div class="page">
<div>
<a class="prev" href="">&lt;&lt;</a>
<a class="num" href="">1</a>
<span class="current">2</span>
<a class="num" href="">3</a>
<a class="num" href="">489</a>
<a class="next" href="">&gt;&gt;</a>
</div>
</div>
</div> -->
</div>
</div>
</div>
</div>
</body>
<script>
var form
layui.use(['laydate','form'], function(){
var laydate = layui.laydate;
form = layui.form;
// 监听全选
form.on('checkbox(checkall)', function(data){
if(data.elem.checked){
$('tbody input').prop('checked',true);
}else{
$('tbody input').prop('checked',false);
}
form.render('checkbox');
});
//执行一个laydate实例
laydate.render({
elem: '#s_time' //指定元素
});
//执行一个laydate实例
laydate.render({
elem: '#e_time' //指定元素
});
});
var page_num;
var laypage;
var all_page = "{$num}";
layui.use('laypage', function () {
laypage = layui.laypage;
//执行一个laypage实例
laypage.render({
elem: 'page',
count: all_page, //数据总数,从服务端得到
limit: 10,
groups:10,
jump: function (obj, first) {
//首次不执行
if (!first) {
//obj包含了当前分页的所有参数比如
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
page_num = obj.curr;
find("n")
}
}
});
});
/*用户-停用*/
function member_stop(obj,id){
// return
var title = '',is_del,num
if($(obj).attr('title')=='启用'){
title = '停用'
is_del = 1
num = 5
}else{
title = '启用'
is_del = 0
num = 6
}
// console.log('点击时'+$(obj).attr('title')+'====='+id+'===传到后台是否删除:'+is_del)
layer.confirm('确认要'+ title +'吗?',function(index){
load()
$.ajax({
url:"member_is_del", //请求的url地址
dataType:"json", //返回格式为json
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:{"id":id,'is_del':is_del}, //参数值
type:"POST", //请求方式
success:function(req){
c_load()
//请求成功时处理
if(req['code'] == 0){
//发异步把用户状态进行更改
$(obj).attr('title',title)
if(is_del == 1){
$(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已'+ title);
}else{
$(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已'+ title);
}
layer.msg('已停用!',{icon: num});
}else{
layer.msg('操作失败!',{icon: 5});
}
},
error:function(){
//请求出错处理
}});
});
}
function delAll (argument) {
// layer.msg('停用成功', {icon: 2});
// return
var ids = [];
// 获取选中的id
$('tbody input').each(function(index, el) {
if($(this).prop('checked')){
ids.push($(this).val())
}
});
if(ids.length <= 0){
return
}
console.log(ids);
layer.confirm('确认要停用吗ID为'+ids.toString(),function(index){
//捉到所有被选中的,发异步进行删除
$.ajax({
url:"member_is_del", //请求的url地址
dataType:"json", //返回格式为json
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:{"id":ids,'is_del':1}, //参数值
type:"POST", //请求方式
success:function(req){
c_load()
//请求成功时处理
if(req['code'] == 0){
//发异步把用户状态进行更改
layer.msg('停用成功', {icon: 1});
$(".layui-form-checked").not('.header').parents('tr').find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
}else{
layer.msg('操作失败!',{icon: 2});
}
},
error:function(){
//请求出错处理
}});
});
}
function find(pd) {
if(!page_num || pd == 'y'){
page_num = 1;
}
page({
"status_num":$('#status_num').val(),
"tel":$('#tel').val(),
"email":$('#email').val(),
"s_time":$('#s_time').val(),
"e_time":$('#e_time').val(),
"page_num":page_num,
"tt":1},pd);
}
function page(data,pd) {
console.log(data)
load()
$.ajax({
url: "member_list", //请求的url地址s
dataType: "json", //返回格式为json
async: true,//请求是否异步默认为异步这也是ajax重要特性
data: data, //参数值
type: "POST", //请求方式
success: function (req) {
console.log(req)
c_load();
if (req['code'] == 0) {
var str,str_s,str_c,str_all="";
for (let i = 0; i < req['data']['data'].length; i++) {
if(req['data']['data'][i]['is_del'] == 1){
str = '<span onclick="member_stop(this,\''+req['data']['data'][i]['id']+'\')" class="layui-btn layui-btn-normal layui-btn-mini layui-btn-disabled" title="停用">已停用</span>'
}else{
str = '<span onclick="member_stop(this,\''+ req['data']['data'][i]['id'] +'\')" class="layui-btn layui-btn-normal layui-btn-mini" title="启用">已启用</span>'
}
str_c = "<tr>"+
'<td><input type="checkbox" name="id" value="'+req['data']['data'][i]['id']+'" lay-skin="primary"></td>'+
'<td>'+req['data']['data'][i]['id']+'</td>'+
'<td>'+req['data']['data'][i]['token']+'</td>'+
'<td>'+req['data']['data'][i]['tel']+'</td>'+
'<td>'+req['data']['data'][i]['email']+'</td>'+
'<td>'+req['data']['data'][i]['create_time']+'</td>'+
'<td class="td-status">'+
str+
'</td>'
'</tr>'
str_all = str_all+str_c;
}
$('#content').html(str_all);
form.render();
if(pd == 'y'){
$("#page").html("")
laypage.render({
elem: 'page',
count: req['data']['num'], //数据总数,从服务端得到
limit: 10,
groups:10,
jump: function (obj, first) {
//首次不执行
if (!first) {
//obj包含了当前分页的所有参数比如
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
page_num = obj.curr;
// page({"page":page_num,"tt":1});
find("n")
}
}
});
}
} else {
layer.msg(req['msg'])
}
},
error: function () {
//请求出错处理
}
});
}
//加载提示开启
function load() {
var index = layer.load(1, {
shade: [0.1, '#fff'] //0.1透明度的白色背景
});
}
// 关闭加载提示
function c_load() {
layer.close(layer.index)
}
</script>
</html>

View File

@ -103,14 +103,14 @@
</li>
<li>
<a href="javascript:;">
<i class="iconfont left-nav-li" lay-tips="分类管理">&#xe723;</i>
<cite>分类管理</cite>
<i class="iconfont left-nav-li" lay-tips="APP版本管理">&#xe723;</i>
<cite>APP版本管理</cite>
<i class="iconfont nav_right">&#xe697;</i></a>
<ul class="sub-menu">
<li>
<a onclick="xadmin.add_tab('多级分类','cate.html')">
<a onclick="xadmin.add_tab('APP版本管理','/appversion/index')">
<i class="iconfont">&#xe6a7;</i>
<cite>多级分类</cite></a>
<cite>APP版本管理</cite></a>
</li>
</ul>
</li>
@ -306,7 +306,7 @@
</div>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<iframe src='welcome' frameborder="0" scrolling="yes" class="x-iframe"></iframe>
<iframe src='/admin/welcome' frameborder="0" scrolling="yes" class="x-iframe"></iframe>
</div>
</div>
<div id="tab_show"></div>

View File

@ -9,6 +9,7 @@ use think\Log;
class Base extends Controller{
protected $ceshiyong_token = 'caadd1be045a65f30b92aa805f1de54a';
protected $base_call_method = ['内部'];
protected $token_time = 86400*3;
protected $return_data_all = [
@ -117,6 +118,7 @@ class Base extends Controller{
// 判断token是否过期
public function token_time_validate($token){
// cache($token,time());
// return true;
$time = cache($token);
// dump($time);
if($time === false){
@ -194,7 +196,7 @@ class Base extends Controller{
public function msg($data,$str=''){
if(is_array($data)){
return json(['code'=>0,'msg'=>'success','data'=>$data]);
return json(['code'=>0,'msg'=>'操作成功','data'=>$data]);
}else{
if($str != ''){
return json(['code'=>$data,'msg'=>$str]);

View File

@ -26,7 +26,7 @@ class Calculatebody extends Controller{
// $result['fat_w'] = $result['fat_r'] / 100 * $data['weight'];
$result['fat_w'] = bcmul(bcdiv($result['fat_r'],'100',20),$data['weight'],2);
// $result['proteinval'] = $result['protein'] / 100 * $data['weight'];
$result['proteinval'] = bcmul(bcdiv($result['protein'],'100',20),$data['weight'],3);
$result['proteinval'] = bcmul(bcdiv($result['protein'],'100',20),$data['weight'],2);
//肌肉量=体重-脂肪量-骨量
// $result['muscleval'] = $result['weight'] - $result['fat_w'] - $result['bone'];
$result['muscleval'] = bcsub(bcsub($result['weight'],$result['fat_w'],20),$result['bone'],2);
@ -34,7 +34,7 @@ class Calculatebody extends Controller{
$result['muscle'] = bcmul(bcdiv($result['muscleval'],$data['weight'],20),'100.0',2);
// 水份=肌肉量-蛋白量
// $result['water'] = $result['muscleval'] - $result['proteinval'];
$result['water'] = bcsub($result['muscleval'],$result['proteinval'],3);
$result['water'] = bcsub($result['muscleval'],$result['proteinval'],2);
// $result['lbm'] = (1 - $result['fat_r'] / 100) * $data['weight'];
$result['lbm'] = bcmul(bcsub('1',bcdiv($result['fat_r'],'100',20),20),$data['weight'],2);
@ -283,9 +283,9 @@ class Calculatebody extends Controller{
// 除 bcdiv(,,20)
if ($gender == 1){
// $num2 = 0.015 * $weight + (2.0 - 0.00055 * $impedance) * $height / 100 - 1.15;
$num2 = bcsub(bcadd(bcmul('0.015',$weight,20),bcdiv(bcmul(bcsub('2.0',bcmul('0.00055',$impedance,20),20),$height,20),'100.0',20),20),'1.15',1);
$num2 = bcsub(bcadd(bcmul('0.015',$weight,20),bcdiv(bcmul(bcsub('2.0',bcmul('0.00055',$impedance,20),20),$height,20),'100.0',20),20),'1.15',2);
// $num3 = (0.0 - (0.00115 * $impedance + 0.01)) * $weight + (49.64 - 0.031 * $impedance) * $height / 100.0 + $impedance * 0.08 + $age * 0.04 + 15.4;
$num3 = bcsub(bcsub(bcsub(bcsub(bcmul(bcsub('0.0',bcadd(bcmul('0.00115',$impedance,20),'0.01',20),20),$weight,20),bcdiv(bcmul(bcsub('49.64',bcmul('0.031',$impedance,20)),$height,20),'100.0',20),20),bcmul($impedance,'0.08'),20),bcmul($age,'0.04'),20),'15.4',20);
$num3 = bcsub(bcsub(bcsub(bcsub(bcmul(bcsub('0.0',bcadd(bcmul('0.00115',$impedance,20),'0.01',20),20),$weight,20),bcdiv(bcmul(bcsub('49.64',bcmul('0.031',$impedance,20)),$height,20),'100.0',20),20),bcmul($impedance,'0.08'),20),bcmul($age,'0.04'),20),'15.4',2);
// $num4 = 1000000.0/($num*(2.688*$impedance-78.28))-(10058/$impedance)-0.22*$age+52.6;
$num4 = bcadd(bcsub(bcsub(bcdiv('1000000.0',bcmul($num,bcsub(bcmul('2.688',$impedance,20),'78.28',20),20),20),bcdiv('10058',$impedance,20),20),bcmul('0.22',$age,20),20),'52.6',20);
// $num5 = -930000.0 / $num / (1.966 * $impedance - 58.46) + (13176 / $impedance) - 0.06 * $age + 40.0;
@ -295,7 +295,7 @@ class Calculatebody extends Controller{
// $num7 = 0.895 * $num4;
$num7 = bcmul('0.895',$num4,20);
// $num8 = 0.8 * (100.0 - $num5 - $num4 - $num2 / $weight);
$num8 = bcmul('0.8',bcsub(bcsub(bcsub('100.0',$num5,20),$num4,20),bcdiv($num2,$weight,20),20),1);
$num8 = bcmul('0.8',bcsub(bcsub(bcsub('100.0',$num5,20),$num4,20),bcdiv($num2,$weight,20),20),2);
// $num9 = 0.304 * $weight - 25.58 * $height / 100.0 + 0.131 * $age + 0.005 * $impedance + 22.0;
$num9 = bcadd(bcadd(bcadd(bcsub(bcmul('0.304',$weight,20),bcdiv(bcmul('25.58',$height,20),'100.0',20),20),bcmul('0.131',$age,20),20),bcmul('0.005',$impedance,20),20),'22.0',0);
// $num10 = (9.0 + 0.0015 * $impedance) * $weight + (1350.0 - 0.88 * $impedance) * $height / 100.0 + (188 / $age) + 0.748 * $impedance - 1053.0;
@ -308,7 +308,7 @@ class Calculatebody extends Controller{
}else{
// $num2 = 2.2E-05 * $impedance * $weight + (4.99 - 0.00284 * $impedance) * $height / 100.0 + 0.0012 * $impedance - 4.45;
$num2 = bcsub(bcadd(bcadd(bcmul(bcmul('0.000022',$impedance,20),$weight,20),bcdiv(bcmul(bcsub('4.99',bcmul('0.00284',$impedance,20),20),$height,20),'100.0',20),20),bcmul('0.0012',$impedance,20),20),'4.45',1);
$num2 = bcsub(bcadd(bcadd(bcmul(bcmul('0.000022',$impedance,20),$weight,20),bcdiv(bcmul(bcsub('4.99',bcmul('0.00284',$impedance,20),20),$height,20),'100.0',20),20),bcmul('0.0012',$impedance,20),20),'4.45',2);
// $num3 = (0.0 - (0.00115 * $impedance + 0.01)) * $weight + (49.64 - 0.031 * $impedance) * $height / 100.0 + $impedance * 0.08 + $age * 0.04 + 6.0;
$num3 = bcadd(bcadd(bcadd(bcadd(bcmul(bcsub('0.0',bcadd(bcmul('0.00115',$impedance,20),'0.01',20),20),$weight,20),bcdiv(bcmul(bcsub('49.64',bcmul('0.031',$impedance,20),20),$height,20),'100.0',20),20),bcmul($impedance,'0.08',20),20),bcmul($age,'0.04',20),20),'6.0',2);
// $num4 = 1000000.0 / ($num * (2.467 * $impedance - 75.37)) - (14215 / $impedance) - 0.034 * $age + 43.2;
@ -320,13 +320,13 @@ class Calculatebody extends Controller{
// $num7 = 0.857 * $num4 - 0.36;
$num7 = bcsub(bcmul('0.857',$num4,20),'0.36',20);
// $num8 = 0.75 * (100.0 - $num5 - $num4 - $num2 / $weight);
$num8 = bcmul('0.75',bcsub('100.0',bcsub($num5,bcsub($num4,bcdiv($num2,$weight,20),20),20),20),20);
$num8 = bcmul('0.75',bcsub('100.0',bcsub($num5,bcsub($num4,bcdiv($num2,$weight,20),20),20),20),2);
// $num9 = 0.304 * $weight - 25.58 * $height / 100.0 + 0.131 * $age + 0.005 * $impedance + 22.0;
$num9 = bcadd(bcadd(bcadd(bcsub(bcmul(0.304,$weight,20),bcdiv(bcmul(25.58,$height,20),'100.0',20),20),bcmul('0.131',$age,20),20),bcmul('0.005',$impedance,20),20),'22.0',0);
// $num10 = (0.00307 * $impedance + 1.5) * $weight + (1459.0 - 0.989 * $impedance) * $height / 100.0 + $age * 0.9 + 0.923 * $impedance - 950.0;
$num10 = bcsub(bcadd(bcadd(bcadd(bcmul(bcadd(bcmul('0.00307',$impedance,20),'1.5',20),$weight,20),bcdiv(bcmul(bcsub('1459.0',bcmul('0.989',$impedance,20),20),$height,20),'100.0',20),20),bcmul($age,'0.9',20),20),bcmul('0.923',$impedance,20),20),'950.0',0);
// $num11 = $age * (0.95 + 0.02 * ($num - 21.2)) + ($impedance - 500) * 0.02;
$num11 = bcadd(bcmul($age,bcadd(0.95,bcmul('0.02',bcsub($num,'21.2',20),20),20),20),bcmul(bcsub($impedance,'500',20),'0.02',20),20);
$num11 = bcadd(bcmul($age,bcadd(0.95,bcmul('0.02',bcsub($num,'21.2',20),20),20),20),bcmul(bcsub($impedance,'500',20),'0.02',20),0);
// $standard_weight = ($height-80)*0.7;
$standard_weight = bcmul(bcsub($height,'80',20),'0.6',20);
@ -335,11 +335,11 @@ class Calculatebody extends Controller{
$result_data['bmi'] = $num;
// $num2 = (($num2 > $weight * 0.15) ? ($weight * 0.15) : $num2);
if(bccomp($num2, bcmul($weight,'0.15',20), 20) === 1){
$num2 = bcmul($weight,'0.15',1);
$num2 = bcmul($weight,'0.15',2);
}
// $result_data['bone'] = ($num2 < $weight * 0.02) ? ($weight * 0.02) : $num2;
if(bccomp($num2, bcmul($weight,'0.02',20), 20) === -1){
$result_data['bone'] = bcmul($weight,'0.02',1);
$result_data['bone'] = bcmul($weight,'0.02',2);
}else{
$result_data['bone'] = $num2;
}
@ -350,7 +350,7 @@ class Calculatebody extends Controller{
// $result_data['muscle'] = ($num3 < 15.0) ? 15.0 : $num3;
// dump($num3);
if(bccomp($num3, '15.0', 20) === -1){
$result_data['muscle'] = '15.0';
$result_data['muscle'] = '15.00';
}else{
$result_data['muscle'] = $num3;
}
@ -361,7 +361,7 @@ class Calculatebody extends Controller{
}
// $result_data['water'] = ($num4 < 20.0) ? 20.0 : $num4;
if(bccomp($num4, '20.0', 20) === -1){
$result_data['water'] = '20.0';
$result_data['water'] = '20.00';
}else{
$result_data['water'] = $num4;
}
@ -372,7 +372,7 @@ class Calculatebody extends Controller{
// $result_data['fat_r'] = ($num5 < 5.0) ? 5.0 : $num5;
if(bccomp($num5, '5.0', 20) === -1){
$result_data['fat_r'] = '5.0';
$result_data['fat_r'] = '5.00';
}else{
// $result_data['fat_r'] = $num5;
// dump($num5);
@ -380,7 +380,7 @@ class Calculatebody extends Controller{
}
// $result_data['sfr'] = $num6 <= 0 ? "0" : $num6;
if(bccomp($num6, '0.0', 20) === -1){
$result_data['sfr'] = '0.0';
$result_data['sfr'] = '0.00';
}else{
$result_data['sfr'] = $num6;
}
@ -388,11 +388,11 @@ class Calculatebody extends Controller{
$result_data['skeletalmuscle'] = substr($num7, 0, strpos($num7, ".") + 3);
// $num8 = (($num8 > 50.0) ? 50.0 : $num8);
if(bccomp($num8, '50.0', 20) === 1){
$num8 = '50.0';
$num8 = '50.00';
}
// $result_data['protein'] = ($num8 < 10.0) ? 10.0 : $num8;
if(bccomp($num8, '10.0', 20) === -1){
$result_data['protein'] = '10.0';
$result_data['protein'] = '10.00';
}else{
$result_data['protein'] = $num8;
}

View File

@ -116,7 +116,7 @@ class Card extends Base{
// 手动记录
// $data = ['id'=>'2','time'=>'1991-04-20 10:10:10','height'=>'15.1','weight'=>'75.1']
public function card_manual_recording($data = ['aud_id'=>'25','time'=>'2024-04-11 10:10:15','height'=>'175.6','weight'=>'70.2','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function card_manual_recording($data = ['aud_id'=>'61','time'=>'2024-06-06 10:10:15','height'=>'175','weight'=>'68','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
if(count(input('post.')) > 0){
$data = input('post.');
}else{
@ -446,11 +446,11 @@ class Card extends Base{
'last_update_time'=>date('Y-m-d H:i:s'),
'age'=>$get_body_value['age'],
'height'=>$get_body_value['身高2'],
'height_data'=>$get_body_value['身高'],
'height_val'=>$get_body_value['身高'],
'weight'=>$get_body_value['体重2'],
'weight_data'=>$get_body_value['体重'],
'weight_val'=>$get_body_value['体重'],
'bmi'=>$get_body_value['BMI2'],
'bmi_data'=>$get_body_value['BMI'],
'bmi_val'=>$get_body_value['BMI'],
'score'=>$get_body_value['身体得分'],
'fat_r'=> implode(',',$get_body_value['脂肪率']),
'fat_w'=>implode(',',$get_body_value['脂肪量']),

View File

@ -15,7 +15,8 @@ class Index extends Base{
protected $default_card = ['2','6','8'];
protected $card_data = [
'2'=>['身体数据','body',['height'=>['身高','cm','-'],'weight'=>['体重','公斤','-'],'bmi'=>['BMI','无','-']]],
'6'=>['跳绳数据','skip',['jump_time'=>['用时','无','--:--:--'],'jump_num'=>['本次次数','次','-'],'average_num'=>['平均成绩','个','-'],'jump_kcal'=>['卡路里','kcal','-']]],
// '6'=>['跳绳数据','skip',['jump_time'=>['用时','无','--:--:--'],'jump_num'=>['本次次数','次','-'],'average_num'=>['平均成绩','个','-'],'jump_kcal'=>['卡路里','kcal','-']]],
'6'=>['跳绳数据','skip',['jump_time'=>['用时','无','--:--:--'],'jump_num'=>['本次次数','次','-'],'jump_kcal'=>['卡路里','kcal','-']]],
'8'=>['肺活量','vitalcapacity',['average'=>['本次数据','ml','-']]],
];
@ -147,6 +148,10 @@ class Index extends Base{
array_push($temporary_data,['id'=>$result[$i]['id'],'nickname'=>$result[$i]['nickname']]);
}
}else{
for ($i=0; $i < count($result); $i++) {
$result[$i]['age'] = $this->calculate_age($result[$i]['birthday']);
// array_push($temporary_data,['id'=>$result[$i]['id'],'nickname'=>$result[$i]['nickname'],'age'=>$this->calculate_age($result[$i]['birthday'])]);
}
$temporary_data = $result;
}
return $this->msg($temporary_data);
@ -421,6 +426,8 @@ class Index extends Base{
'birthday' => 'require|date',
'gender' => 'require|number|in:0,1,2',
'grade' => 'require',
'height' => 'require|number',
'weight' => 'require|number',
];
$msg = [
'aan_id.require' => '账号信息缺失',
@ -428,12 +435,16 @@ class Index extends Base{
'birthday.require' => '生日缺失',
'gender.require' => '性别缺失',
'grade.require' => '年级缺失',
'height.require' => '身高缺失',
'weight.require' => '体重缺失',
'aan_id.number' => '账号信息格式错误',
'nickname.chsAlpha' => '昵称只能是只能是汉字、字母',
'birthday.date' => '生日信息格式错误',
'gender.number' => '性别格式错误',
'gender.in' => '性别信息错误',
'height.number' => '身高必须为数字',
'weight.number' => '体重必须为数字',
];
$validate = new Validate($rule,$msg);
$result = $validate->check($data);
@ -447,6 +458,8 @@ class Index extends Base{
$parameter['gender'] = $data['gender'];
$parameter['grade'] = $data['grade'];
$parameter['card_order'] = '2,6,8';
$parameter['height'] = $data['height'];
$parameter['weight'] = $data['weight'];
$parameter['create_time'] = date('Y-m-d H:i:s');
$parameter['last_update_time'] = date('Y-m-d H:i:s');
$parameter_pd = Db::table('app_account_number')->where(['id'=>$parameter['aan_id']])->count();
@ -468,6 +481,8 @@ class Index extends Base{
'birthday' => 'require|date',
'gender' => 'require|number|in:0,1,2',
'grade' => 'require',
'height' => 'require|number',
'weight' => 'require|number',
];
$msg = [
'id.require' => '用户信息缺失',
@ -475,12 +490,16 @@ class Index extends Base{
'birthday.require' => '生日缺失',
'gender.require' => '性别缺失',
'grade.require' => '年级缺失',
'height.require' => '身高缺失',
'weight.require' => '体重缺失',
'id.number' => '用户信息格式错误',
'nickname.chsAlphaNum' => '昵称只能是只能是汉字、字母、数字',
'birthday.date' => '生日信息格式错误',
'gender.number' => '性别格式错误',
'gender.in' => '性别信息错误',
'height.number' => '身高必须为数字',
'weight.number' => '体重必须为数字',
];
$validate = new Validate($rule,$msg);
$result = $validate->check($data);
@ -491,6 +510,8 @@ class Index extends Base{
$parameter['id'] = $data['id'];
$parameter['nickname'] = $data['nickname'];
$parameter['birthday'] = $data['birthday'];
$parameter['height'] = $data['height'];
$parameter['weight'] = $data['weight'];
$parameter['gender'] = $data['gender'];
$parameter['grade'] = $data['grade'];
$parameter['last_update_time'] = date('Y-m-d H:i:s');

View File

@ -10,7 +10,7 @@ use \think\Validate;
use PHPMailer\PHPMailer\PHPMailer;
class Login extends Base{
protected $code_time = 3600;
protected $code_time = 60;
protected $default_head_pic = 'http://tc.pcxbc.com/tsf/head_pic.jpg';
@ -304,7 +304,7 @@ class Login extends Base{
public function check_code($data = 18530934717 , $code = 123456){
// 默认验证码正确
return true;
// return true;
// dump($data);
// dump(cache($data));
// die;

View File

@ -26,7 +26,7 @@ class Skip extends Base{
################################################################接口################################################################
################################################################接口################################################################
// 手动记录
public function skip_manual_recording($data = ['aud_id'=>'26','r_time'=>'2024-05-25 10:10:15','num'=>'582','time_m'=>'10','time_s'=>'00','type'=>'free','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function skip_manual_recording($data = ['aud_id'=>'58','r_time'=>'2024-05-25 10:10:15','num'=>'582','time_m'=>'10','time_s'=>'00','type'=>'free','token'=>'caadd1be045a65f30b92aa805f1de54a']){
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -34,6 +34,10 @@ class Skip extends Base{
if(!array_key_exists('aud_id', $data) || !array_key_exists('r_time', $data) || !array_key_exists('num', $data) || !array_key_exists('time_m', $data) || !array_key_exists('time_s', $data) || !array_key_exists('type', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
if(intval($data['num'] != $data['num']) || intval($data['time_m'] != $data['time_m']) || intval($data['time_s'] != $data['time_s'])){
return $this->msg(10005);
}
// cache($data['token'],time());
if($this->token_time_validate($data['token']) === false){
return $this->msg(20001);
}
@ -44,7 +48,9 @@ class Skip extends Base{
if(abs($data['time_s']) >= 60){
return $this->msg(10005);
}
// cache($data['token']);
// dump($data);
// die;
return $this->skip_manual_recording_action($data);
}
// 今日数据
@ -64,7 +70,7 @@ class Skip extends Base{
return $this->skip_today_data_action($data);
}
// 曲线
public function skip_curve_chart($data = ['aud_id'=>'26','time'=>'2024-05-25','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function skip_curve_chart($data = ['aud_id'=>'26','time'=>'2024/05/25','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -103,22 +109,29 @@ class Skip extends Base{
public function skip_manual_recording_action($data){
// 分秒转换为秒
$data['time'] = abs($data['time_m'])*60+abs($data['time_s']);
$last_data_body = Db::table('app_card_body_data')->where(['aud_id'=>$data['aud_id']])->order('record_time desc,id desc')->field('id,weight,record_time')->find();
$last_data_body = Db::table('app_card_body_data')->where(['aud_id'=>$data['aud_id']])->order('record_time desc,id desc')->field('id,weight_val,record_time')->find();
if(!$last_data_body){
return $this->msg(10004);
$last_data_body = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,weight as weight_val')->find();
if(!$last_data_body){
return $this->msg(10004);
}
}
$data_set = [
'create_time'=>date('Y-m-d H:i:s'),
'last_update_time'=>date('Y-m-d H:i:s'),
'jump_num'=>$data['num'],
'jump_time'=>$data['time'],
'jump_kcal'=>$this->skip_kcal_calculate($data['num'],$data['time'],$last_data_body['weight'])['totalCalories'],
'average_num'=>$this->skip_kcal_calculate($data['num'],$data['time'],$last_data_body['weight'])['averageAchievement'],
'average_kcal'=>$this->skip_kcal_calculate($data['num'],$data['time'],$last_data_body['weight'])['caloriesPerMinute'],
'jump_kcal'=>$this->skip_kcal_calculate($data['num'],$data['time'],$last_data_body['weight_val'])['totalCalories'],
'average_num'=>$this->skip_kcal_calculate($data['num'],$data['time'],$last_data_body['weight_val'])['averageAchievement'],
'average_kcal'=>$this->skip_kcal_calculate($data['num'],$data['time'],$last_data_body['weight_val'])['caloriesPerMinute'],
'aud_id'=>$data['aud_id'],
'record_time'=>$data['r_time'],
'jump_type'=>$data['type']
];
// dump($data);
// dump($last_data_body['weight_val']);
// dump($data_set);
// die;
$last_data_body = Db::table('app_card_skip_data')->insert($data_set);
$result = [
'today_jump_num'=>0,
@ -180,7 +193,7 @@ class Skip extends Base{
$audid = $data['aud_id'];
$timeData = explode('-', $data['time']);
$timeData = explode('/', $data['time']);
// 根据$timeData的长度构建不同的查询条件
$map = ['aud_id' => $audid];

View File

@ -16,12 +16,12 @@ class Sportstesting extends Base{
protected $page_num = 10;
protected $city_data_rule_name = [
'xc'=>'现场',
'xc'=>'现场类项目',
'xc_1'=>'第一类素质项目8分',
'xc_2'=>'第二类素质项目Ⅱ8分',
'xc_3'=>'第三类运动能力8分',
'xc_4'=>'第四类运动能力Ⅱ6分',
'gc'=>'过程',
'gc'=>'过程类项目',
'gc_8_m'=>'8年级体质健康统测10分',
'gc_8_r'=>'8年级体育与健康知识机考10分',
];
@ -799,7 +799,7 @@ class Sportstesting extends Base{
$user_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,grade')->find();
$result['list'] = [
[
'name'=>'现场',
'name'=>'现场类项目',
'key'=>'xc',
'list'=>[
['name'=>'第一类素质项目8分','key'=>'xc_1','list'=>[
@ -811,7 +811,7 @@ class Sportstesting extends Base{
],
],
[
'name'=>'过程',
'name'=>'过程类项目',
'key'=>'gc',
'list'=>[
['name'=>'8年级体质健康统测10分','key'=>'gc_8_m','list'=>[

View File

@ -13,8 +13,8 @@ class Vitalcapacity extends Base{
protected $standard = [
['min_val'=>'90','max_val'=>'100','text'=>'优秀','color'=>'#6492F6'],
['min_val'=>'80','max_val'=>'89','text'=>'良好','color'=>'#5AD06D'],
['min_val'=>'66','max_val'=>'79','text'=>'及格','color'=>'#FFAB00'],
['min_val'=>'10','max_val'=>'65','text'=>'不及格','color'=>'#FF5656'],
['min_val'=>'60','max_val'=>'79','text'=>'及格','color'=>'#FFAB00'],
['min_val'=>'10','max_val'=>'59','text'=>'不及格','color'=>'#FF5656'],
['min_val'=>'0','max_val'=>'9','text'=>'无效','color'=>'#FF5656'],
];
@ -36,7 +36,7 @@ class Vitalcapacity extends Base{
################################################################接口################################################################
// 数据记录
public function vitalcapacity_save_record_data($data = ['aud_id'=>'25','one'=>'1500','two'=>'1200','three'=>'1456','time'=>'2024-05-25 10:10:15','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function vitalcapacity_save_record_data($data = ['aud_id'=>'61','one'=>'1500','two'=>'3600','three'=>'2123','time'=>'2024-05-25 10:10:15','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -53,7 +53,7 @@ class Vitalcapacity extends Base{
return $this->vitalcapacity_save_record_data_action($data);
}
// 数据报告
public function vitalcapacity_data_report($data = ['aud_id'=>'25','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function vitalcapacity_data_report($data = ['aud_id'=>'58','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -67,7 +67,7 @@ class Vitalcapacity extends Base{
return $this->vitalcapacity_data_report_action($data);
}
// 曲线
public function vitalcapacity_curve_chart($data = ['aud_id'=>'25','time'=>'2024-05-25','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function vitalcapacity_curve_chart($data = ['aud_id'=>'60','time'=>'2024','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -99,19 +99,18 @@ class Vitalcapacity extends Base{
$user_msg = Db::name('app_user_data')->where(['id'=>$data['aud_id']])->field('grade,gender')->find();
if($user_msg){
$achievement_judge_data = $this->vitalcapacity_achievement_judge(['average'=>$temporary_arr['average'],'grade'=>$user_msg['grade'],'gender'=>$user_msg['gender']]);
$temporary_arr['score'] = $achievement_judge_data['score'].','.$achievement_judge_data['level'].','.$this->color[$achievement_judge_data['level']];
$temporary_arr['score_val'] = $achievement_judge_data['score'];
}else{
return $this->msg(10004);
}
$result = Db::table('app_card_vitalcapacity_data')->insert($temporary_arr);
if($result){
$time = $result[0]['record_time'];
$time = strtotime($time);
$time = date('Y年m月d日 H:i:s', $time);
return $this->msg(['average'=>$temporary_arr['average'].'ml','level'=>$achievement_judge_data['level'],'time'=>$time,'list'=>$this->standard0,'offset'=>$temporary_arr['score_val']]);
return $this->msg(['average'=>$temporary_arr['average'].'ml','level'=>$achievement_judge_data['level'],'time'=>$time,'list'=>$this->standard0,'offset'=>$this->vitalcapacity_standard_interval($temporary_arr['score_val'])]);
}else{
return $this->msg(10002);
}
@ -126,7 +125,9 @@ class Vitalcapacity extends Base{
$time = strtotime($time);
$time = date('Y年m月d日 H:i:s', $time);
$o_l = explode(',',$result[0]['score']);
return $this->msg(['average'=>$result[0]['average'].'ml','level'=>$o_l[1],'time'=>$time,'list'=>$this->standard0,'offset'=>$o_l[0]]);
// dump($o_l);
// $this->vitalcapacity_standard_interval($o_l[0]);
return $this->msg(['average'=>$result[0]['average'].'ml','level'=>$o_l[1],'time'=>$time,'list'=>$this->standard0,'offset'=>$this->vitalcapacity_standard_interval($o_l[0])]);
}
}
@ -134,7 +135,7 @@ class Vitalcapacity extends Base{
################################################################vitalcapacity_save_record_data
public function vitalcapacity_curve_chart_action($data){
$audid = $data['aud_id'];
$timeData = explode('-', $data['time']);
$timeData = explode('/', $data['time']);
// 根据$timeData的长度构建不同的查询条件
$map = ['aud_id' => $audid];
@ -152,6 +153,9 @@ class Vitalcapacity extends Base{
return $this->msg(10005); // 无效的时间数据格式
}
// dump($map);
// die;
// 使用查询构造器进行查询
$result = Db::name('app_card_vitalcapacity_data')->where($map)->field('one_val,two_val,three_val,average_val,score_val,aud_id,record_time,DATEPART(hour, record_time) AS hour,DATEPART(day, record_time) AS day,DATEPART(month, record_time) AS month')->order('record_time')->select();
@ -164,7 +168,7 @@ class Vitalcapacity extends Base{
$key_condition = 'month';
}
// dump($map);
// dump($result);
// dump($key_condition);
// die;
foreach ($this->curve_data_format as $key => $value) {
$temporary_arr['title'] = $value[0];
@ -174,6 +178,7 @@ class Vitalcapacity extends Base{
$temporary_arr['line']['series'][0]['name'] = $value[0];
$temporary_arr['line']['series'][0]['data'] = [];
foreach ($result as $k => $v) {
// dump($key_condition);
if($key_condition == 'hour'){
if(in_array($result[$k][$key_condition].'时',$temporary_arr['line']['categories'])){
$num = array_search($result[$k][$key_condition].'时', $temporary_arr['line']['categories']);
@ -182,7 +187,7 @@ class Vitalcapacity extends Base{
array_push($temporary_arr['line']['categories'],$result[$k][$key_condition].'时');
array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]);
}
}else if($key_condition = 'day'){
}else if($key_condition == 'day'){
if(in_array($result[$k]['month'].'/'.$result[$k][$key_condition],$temporary_arr['line']['categories'])){
$num = array_search($result[$k]['month'].'/'.$result[$k][$key_condition], $temporary_arr['line']['categories']);
$temporary_arr['line']['series'][0]['data'][$num] = bcadd($temporary_arr['line']['series'][0]['data'][$num],$result[$k][$key],2);
@ -190,7 +195,6 @@ class Vitalcapacity extends Base{
array_push($temporary_arr['line']['categories'],$result[$k]['month'].'/'.$result[$k][$key_condition]);
array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]);
}
}else{
if(in_array($result[$k]['month'].'月',$temporary_arr['line']['categories'])){
$num = array_search($result[$k]['month'].'月', $temporary_arr['line']['categories']);
@ -215,7 +219,10 @@ class Vitalcapacity extends Base{
################################################################肺活量数据卡片接口################################################################
################################################################肺活量数据卡片接口################################################################
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
// 肺活量成绩判断
public function vitalcapacity_achievement_judge($data){
$str = "sex = ".$data['gender']." and ".$data['grade']." <= ".$data['average'];
@ -228,6 +235,33 @@ class Vitalcapacity extends Base{
// 肺活量判断区间
public function vitalcapacity_standard_interval($data){
// 缓存一周
$temporary_qj = $this->standard;
$max = 0;
$min = 0;
$num = 0;
foreach ($temporary_qj as $key => $value) {
if($data >= $value['min_val'] && $data <= $value['max_val']){
$max = $value['max_val'];
$min = $value['min_val'];
$num = $key;
break;
}
}
$num = count($temporary_qj)-1-$num;
$temporary_num = bcmul(bcdiv(bcsub($data,$min,20),bcsub($max,$min,20),2),bcdiv(100,count($temporary_qj),2),2);
$result = bcadd(bcmul(bcdiv(100,count($temporary_qj),2),$num,2),$temporary_num,2);
// dump($data);
// dump($num);
// dump($result);
// dump($temporary_num);
// dump(bcdiv(100,count($temporary_qj),2));
// dump($temporary_num);
// dump($temporary_qj);
return $result;
}

View File

@ -26,6 +26,14 @@ Route::any('/admin/login', 'admin/login/login');
Route::post('/admin/login_action', 'admin/login/login_action');
// 管理后台首页
Route::any('/admin/index', 'admin/index/index');
Route::any('/admin/welcome', 'admin/index/welcome');
// APP版本管理
Route::any('/appversion/index', 'admin/appversion/index');
Route::any('/appversion/app_add', 'admin/appversion/app_add');
Route::any('/appversion/app_add_action', 'admin/appversion/app_add_action');
// // Route::get('/admin/welcome', 'admin/index/welcome');
// // // APP账号角色管理
// // // APP账号数据列表
@ -133,17 +141,6 @@ Route::any('/update_my_password', 'app/myinformation/update_my_password');
// Route::any('/vitalcapacity_data_report', 'app/sportstesting/vitalcapacity_data_report');
// // 曲线
// Route::any('/vitalcapacity_curve_chart', 'app/sportstesting/vitalcapacity_curve_chart');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// Route::any('/skip_device_check', 'app/skip/skip_device_check');
// // ################################################################其它测试################################################################
// // ################################################################其它测试################################################################
@ -155,6 +152,8 @@ Route::any('/update_my_password', 'app/myinformation/update_my_password');
Route::any('/wuyong', 'app/sportstesting/aaaaaaaaaaaaaaa');
// Route::any('/app_update_file/*', 'app/sportstesting/aaaaaaaaaaaaaaa');
// 处理404错误 z
Route::miss(function(){
return '404 Not Foundout';

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/tsf/青测_V46.apk Normal file

Binary file not shown.

5
public/x_admin/js/jq.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -74,6 +74,7 @@
* @return {[type]} [description]
*/
Xadmin.prototype.open = function (title,url,w,h,full) {
// console.log(title)
if (title == null || title == '') {
var title=false;
};
@ -86,9 +87,10 @@
if (h == null || h == '') {
var h=($(window).height() - 50);
};
// console.log(w+'======='+h)
var index = layer.open({
type: 2,
area: [w+'px', h +'px'],
area: [w, h],
fix: false, //不固定
maxmin: true,
shadeClose: true,