diff --git a/Laravel/app/Http/Controllers/API/Admin/LoginController.php b/Laravel/app/Http/Controllers/API/Admin/LoginController.php index 0e60ef4..89ff60b 100644 --- a/Laravel/app/Http/Controllers/API/Admin/LoginController.php +++ b/Laravel/app/Http/Controllers/API/Admin/LoginController.php @@ -6,6 +6,8 @@ use App\Http\Controllers\Controller; use App\Services\Login\LoginService; use Illuminate\Http\Request; use Yz; +use App\Lib\HSM; +use App\Lib\XTSign; class LoginController extends Controller { public function Login(){ @@ -15,4 +17,37 @@ class LoginController extends Controller //$login= new LoginService(); return Yz::echo($login->Login(['username'=>$username,'password'=>$password])); } + public function test(){ + //加密解密测试 + // dd( HSM::HsmDecrypt("9bef05d29d91d1058b742261638b8d1c")); + + //登录签名测试 + $data=[ + "userName"=>"张三", + "idType"=>"SF", + "idNumber"=>"513436200005039287", + "department"=>'QT', + "mobile"=>"18745292116", + ]; + + //产生激活码测试 + $data=[ + 'userId'=>'b24d281af0b7f2bc3a49c90cf1853cd2e59569c982cb10970aa60a254bcc83f7' + ]; + + //添加任务签名 + $data=[ + // "userId"=>"b24d281af0b7f2bc3a49c90cf1853cd2e59569c982cb10970aa60a254bcc83f7", + "title"=>"测试签名", + "dataType"=>"DATA", + "algo"=>"SM3withSM2", + "description"=>"签名数据描述信息", + "expiryDate"=>"1440", + "data"=>"562+5ZCN5rWL6K+V5pWw5o2u", + "requireQrCode"=>"N", + "callBackUrl"=>"https://www.yanzai.vip/common/laravel/public/api/XTSignNotify" + ]; + $r=XTSign::XTRequest('addSignJob',$data); + return $r; + } } diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/HealthCheckupController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/HealthCheckupController.php index 718bfa2..d9f2646 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/HealthCheckupController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/HealthCheckupController.php @@ -17,6 +17,10 @@ class HealthCheckupController extends Controller if(!isset($CheckupInfo['id_card_num'])) return \Yz::echoError1('id_card_num不能为空'); if(!isset($CheckupInfo['type'])) return \Yz::echoError1('type不能为空'); if(!isset($CheckupInfo['institution_sn'])) return \Yz::echoError1('institution_sn不能为空'); + if(!isset($CheckupInfo['tijian_num'])) return \Yz::echoError1('体检号tijian_num不能为空'); + if(!isset($CheckupInfo['tijian_time'])) return \Yz::echoError1('体检时间tijian_time不能为空'); + if(!isset($CheckupInfo['fee_type'])) return \Yz::echoError1('收费类型fee_type不能为空'); + if(!isset($CheckupInfo['report_content'])) return \Yz::echoError1('报告内容report_content不能为空'); $s=app()->make(HealthCheckupService::class); return $s->CreateRecord($CheckupInfo); } @@ -38,19 +42,20 @@ class HealthCheckupController extends Controller public function UploadFile(Request $request){ $file=request('file'); $id_card_num=request('id_card_num'); + $tijian_num=request('tijian_num'); date_default_timezone_set('PRC'); $currentYear = date('Y'); $firstDay = date('Y-01-01', strtotime($currentYear)); $lastDay = date('Y-12-31', strtotime($currentYear)); - $cha=DB::table('examination_records')->where(['id_card_num'=>$id_card_num])->whereBetween('created_at', [$firstDay, $lastDay])->get(); - if(count($cha)==0) return \Yz::echoError1('未找到此用户的体检记录,无法存储报告'); - + $cha=DB::table('examination_records')->where(['id_card_num'=>$id_card_num,'tijian_num'=>$tijian_num])->whereBetween('created_at', [$firstDay, $lastDay])->get(); + if(count($cha)==0) return \Yz::echoError1('未找到此用户对应的体检号记录,无法存储报告'); + if ($file->isValid()) { + $s=app()->make(HealthCheckupService::class); $save=$s->SaveFile(['file'=>$file]); - if(!$save['status']) return \Yz::echoError1('文件保持失败'); $u=DB::table('examination_records')->where(['id'=>$cha[0]->id])->update(['report_file'=>$save['data']]); @@ -64,6 +69,17 @@ class HealthCheckupController extends Controller return \Yz::echoError1('获取文件失败'); } - + } + //根据身份证号码查询体检记录列表 + public function GetPersonCheckUpList(){ + $id_card_num=request('id_card_num'); + $s=app()->make(HealthCheckupService::class); + return $s->GetPersonCheckUpList(['id_card_num'=>$id_card_num]); + } + //根据体检号查询体检详情 + public function GetPersonCheckUpDetail(){ + $tijian_num=request('tijian_num'); + $s=app()->make(HealthCheckupService::class); + return $s->GetPersonCheckUpDetail(['tijian_num'=>$tijian_num]); } } diff --git a/Laravel/app/Http/Controllers/API/UpLoadController.php b/Laravel/app/Http/Controllers/API/UpLoadController.php new file mode 100644 index 0000000..8f56ae4 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/UpLoadController.php @@ -0,0 +1,30 @@ +isValid()) { +// $s=app()->make(HealthCheckupService::class); +// $save=$s->SaveFile(['file'=>$file]); + $date = date("Ymd"); + $save = $file->store('public/H5Upload/'.$date); + + return \Yz::Return(true,'上传成功',$save); + + + + + }else{ + return \Yz::echoError1('获取文件失败'); + } + } +} diff --git a/Laravel/app/Http/Controllers/API/XTSignController.php b/Laravel/app/Http/Controllers/API/XTSignController.php new file mode 100644 index 0000000..1b58f59 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/XTSignController.php @@ -0,0 +1,135 @@ +"b24d281af0b7f2bc3a49c90cf1853cd2e59569c982cb10970aa60a254bcc83f7", + "title"=>"用户身份确认签名", + "dataType"=>"DATA", + "algo"=>"SM3withSM2", + "description"=>"用户身份确认签名", + "expiryDate"=>"1440", + "data"=>"562+5ZCN5rWL6K+V5pWw5o2u", + "requireQrCode"=>"N", + "callBackUrl"=>"https://www.yanzai.vip/common/laravel/public/api/XTSignNotify" + ]; + return XTSign::XTRequest('addSignJob',$data); + + } + //用户绑定协同签名id + public function bindUser(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $pwd=request('pwd'); //密码 + $signJobId=request('signJobId'); //签名任务 id + $cha=DB::table('xt_sign_notify')->where(['sign_job_id'=>$signJobId])->get(); + if(count($cha)>0){ + //解析证书信息 + $data=[ + "cert"=>$cha[0]->sign_cert + ]; + $certInfo= XTSign::XTRequest('getCertInfo',$data); + if($certInfo['status']){ + $s=app()->make(LoginService::class); + $check=$s->CheckPwd(['userid'=>$userid,'password'=>$pwd]); + if($check['status']){ + $u=DB::table('users')->where(['id'=>$userid])->update([ + 'xtsign_userid'=>$certInfo['data']['userId'], + 'xtsign_username'=>$certInfo['data']['certCN'] + ]); + if($u){ + return \Yz::Return(true,'绑定成功',[]); + }else{ + return \Yz::echoError1("绑定失败"); + } + }else{ + return \Yz::echoError1("密码验证失败"); + } + } + } + + } + //检查协同签名回调状态 + public function CheckNotify(){ + + $notifyType=request('notifyType'); //回调类型 + + $signJobId=request('signJobId'); //签名任务 id + $cha=DB::table('xt_sign_notify')->where(['sign_job_id'=>$signJobId])->get(); + if(count($cha)>0){ + //如果查到回调结果,判断回调结果,进行验签和查询证书详情获取用户信息 + if($notifyType=='bind') { //绑定操作 + return \Yz::Return(true,'扫码成功',[]); + } + //解析证书信息 + $data=[ + "cert"=>$cha[0]->sign_cert + ]; + $certInfo= XTSign::XTRequest('getCertInfo',$data); + if($certInfo['status']){ + $query= DB::table('users')->where(['xtsign_userid'=>$certInfo['data']['userId'],'status'=>1])->get(); + if(count($query)>0){ + + $jwt= new JWT(); + $accessTimeout = $jwt -> GetGetSecretTimeOut(); + $refreshTimeout = $jwt -> GetRefreshTokenTimeOut(); + $access_token = $jwt->BuildJWT('yz','access',$query[0]->id,$query[0]->group,$accessTimeout); + $refresh_token = $jwt->BuildJWT('yz','refresh',$query[0]->id,'',$refreshTimeout); + if(!empty($arr['mian7'])){ + $mian7_token = $jwt->BuildJWT('yz','mian7',$query[0]->id,'',$jwt -> GetMian7TokenTimeOut()); + $result['mian7_token']=$mian7_token; + } + DB::table('users')->where(['id'=>$query[0]->id,'status'=>1])->update(['token'=>md5($refresh_token)]); + $result['token']=$access_token; + $result['refresh_token']=$refresh_token; + $result['status']='ok'; + + return \Yz::Return(true,'用户匹配成功',$result); + }else{ + return \Yz::echoError1("扫码失败,未找到关联此用户的信息"); + } + + + } + // return \Yz::Return(true,'查到回调信息',$cha); + }else{ + return \Yz::echoError1("暂未回调"); + } + } + //协同签名回调 + public function Notify(){ + $signJobId=request('signJobId'); //签名任务 id + $status =request('status'); //签名任务状态 + $msspId=request('msspId'); //用户唯一标识 + $signResult =request('signResult'); //签名结果 + $signCert =request('signCert'); //签名证书 + $i=DB::table('xt_sign_notify')->insert([ + 'sign_job_id'=>$signJobId, + 'status'=>$status, + 'mssp_id'=>$msspId, + 'sign_result'=>$signResult, + 'sign_cert'=>$signCert + ]); + if($i){ + $rd=[ + "status"=>200, + "message"=>"SUCCESS", + "data"=>[ + "signJobId"=>$signJobId, + "status"=>$status + ] + ]; + return $rd; + } + } +} diff --git a/Laravel/app/Http/Controllers/API/mH5/OrganizationController.php b/Laravel/app/Http/Controllers/API/mH5/OrganizationController.php index c0e9843..35dbd99 100644 --- a/Laravel/app/Http/Controllers/API/mH5/OrganizationController.php +++ b/Laravel/app/Http/Controllers/API/mH5/OrganizationController.php @@ -32,7 +32,8 @@ class OrganizationController extends Controller } $s=app()->make(OrganizationService::class); - return $s->StartYuYue(['openid'=>$openid,'group'=>$group,'info'=>$subinfo]); + $type=1;//1 健康证体检 2老年人体检 + return $s->StartYuYue(['openid'=>$openid,'group'=>$group,'info'=>$subinfo],$type); }else{ return \Yz::echoError1("参数不完整"); } diff --git a/Laravel/app/Lib/HSM.php b/Laravel/app/Lib/HSM.php new file mode 100644 index 0000000..713de38 --- /dev/null +++ b/Laravel/app/Lib/HSM.php @@ -0,0 +1,66 @@ +self::$keyIndex, + "encAlg"=>self::$encAlg, + "iv"=>self::$iv, + "plainData"=>$str + ]; + $data=json_encode($data); + $encryptStr=self::post($url,$data); + $r_data=json_decode($encryptStr, true); + // dd($r_data); + if($r_data['status']==0){ + return ['encrypt_str'=>$r_data['body']['cipherData'],'status'=>true]; + }else{ + return ['status'=>false]; + } + } + //解密 + public static function HsmDecrypt($str){ + $url= self::$baseurl."/api/hsm/sym/symDecryptInternalForKEK"; + $data=[ + "keyIndex"=>self::$keyIndex, + "encAlg"=>self::$encAlg, + "iv"=>self::$iv, + "cipherData"=>$str + ]; + $data=json_encode($data); + $encryptStr=self::post($url,$data); + $r_data=json_decode($encryptStr, true); + if($r_data['status']==0){ + return ['decrypt_str'=>hex2bin($r_data['body']['plain']),'status'=>true]; + }else{ + return ['status'=>false]; + } + } + public function post($url, $data_string) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json; charset=utf-8', + 'Content-Length: ' . strlen($data_string) + ]); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); + $r = curl_exec($curl); + curl_close($curl); + return $r; + } +} diff --git a/Laravel/app/Lib/XTSign.php b/Laravel/app/Lib/XTSign.php new file mode 100644 index 0000000..0b207e4 --- /dev/null +++ b/Laravel/app/Lib/XTSign.php @@ -0,0 +1,107 @@ +self::BaseUrl."/coss/service/v1/addUser", //注册 + 'getAuthCode'=>self::BaseUrl."/coss/service/v1/getAuthCode", //产生激活码 + 'addSignJob'=>self::BaseUrl."/coss/service/v1/addSignJob", //添加签名任务 + 'verifySignData'=>self::BaseUrl."/coss/service/v1/verifySignData", //验签接口 3.4.9.3 + 'getCertInfo'=>self::BaseUrl."/coss/service/v1/getCertInfo", //解析证书信息 + ]; + + //系统签名接口调用 + public static function XTRequest($url,$data){ + if(!isset(self::ApiList[$url])) return \Yz::echoError1("接口不存在"); + $url= self::ApiList[$url]; + $baseData=[ + "version"=>"1.0", + "appId"=>self::Appid, + "signAlgo"=>"HMAC", + ]; + + $data=array_merge($baseData, $data); + + $sign=self::Sign($data); + $data= array_merge($data,['signature'=>$sign]); + // dd($data); + $data=json_encode($data); + $encryptStr=self::post($url,$data); + $r_data=json_decode($encryptStr, true); + if($r_data['status']==200){ + return \Yz::Return(true,$r_data['message'],$r_data['data']); + }else{ + return \Yz::echoError1($r_data['message']); + } + + + } + //产生激活码 +// public static function getAuthCode(){ +// $url= self::$baseUrl."/coss/service/v1/getAuthCode"; +// $data=[ +// "version"=>"1.0", +// "appId"=>self::$appid, +// "signAlgo"=>"HMAC", +// "userId"=>"915b164cd8e883f7fb289e3bcf34ac68d971c7e1058f18bcb24ad33ec7a201e1", +// ]; +// $sign=self::Sign($data); +// $data= array_merge($data,['signature'=>$sign]); +// // dd($data); +// $data=json_encode($data); +// $encryptStr=self::post($url,$data); +// $r_data=json_decode($encryptStr, true); +// +// return $r_data; +// } + public static function Sign($parameters){ + // 定义 M 集合内的参数值 +// $parameters = array( +// "key1" => "value1", +// "key2" => "value2", +// // ... +// ); + +// 按照参数名的 ASCII 码从小到大排序 + ksort($parameters); + +// 拼接参数为 URL 键值对字符串 + $stringA = ""; + foreach ($parameters as $key => $value) { + if ($value === "") { + // 参数值为空,进行相应的处理 + // 比如跳过该参数或者抛出异常 + continue; + } + $stringA .= $key . "=" . $value . "&"; + } + $stringA = rtrim($stringA, "&"); + +// HMAC 运算 + $secretKey =self::Key; + $signature = base64_encode(hash_hmac("sha256", $stringA, $secretKey, true)); + return $signature; + + } + + public function post($url, $data_string) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json; charset=utf-8', + 'Content-Length: ' . strlen($data_string) + ]); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); + $r = curl_exec($curl); + curl_close($curl); + return $r; + } +} diff --git a/Laravel/app/Services/Admin/UserService.php b/Laravel/app/Services/Admin/UserService.php index 4c72fa6..192d227 100644 --- a/Laravel/app/Services/Admin/UserService.php +++ b/Laravel/app/Services/Admin/UserService.php @@ -60,7 +60,7 @@ class UserService return $result; } public function GetDetail($arr){ - $c=DB::table('users')->select(['id','cn_name','username','status','group','img'])->where(['id'=>$arr['id']])->whereIn('status',[0,1])->get(); + $c=DB::table('users')->select(['id','cn_name','username','status','group','img','xtsign_userid','xtsign_username'])->where(['id'=>$arr['id']])->whereIn('status',[0,1])->get(); if(count($c)){ $result['info']=$c; $result['status']='ok'; diff --git a/Laravel/app/Services/Admin/YeWu/HealthCheckupService.php b/Laravel/app/Services/Admin/YeWu/HealthCheckupService.php index a5880f3..af57083 100644 --- a/Laravel/app/Services/Admin/YeWu/HealthCheckupService.php +++ b/Laravel/app/Services/Admin/YeWu/HealthCheckupService.php @@ -12,14 +12,19 @@ class HealthCheckupService $firstDay = date('Y-01-01', strtotime($currentYear)); $lastDay = date('Y-12-31', strtotime($currentYear)); - //检查今年是否体检过 - $s=app()->make(PersonService::class); - $check=$s->GetPersonRecode(['id_num'=>$CheckupInfo['id_card_num']]); - if(!$check['status']) return $check; + //如果此次报告内容是免费类型,则检查今年是否进行过免费体检 +// if($CheckupInfo['fee_type']==0){ +// $s=app()->make(PersonService::class); +// $check=$s->GetPersonRecode(['id_num'=>$CheckupInfo['id_card_num']]); +// +// if(!$check['status']) return $check; +// } + $org_id=DB::select("select id from medical_institution where sn=?",[$CheckupInfo['institution_sn']]); if(count($org_id)!=1) return \Yz::echoError1('机构码不存在'); $status=false; + DB::beginTransaction(); // 开始事务 try { // 执行数据库操作 @@ -34,10 +39,20 @@ class HealthCheckupService } + + //检查体检流水号是否存在,存在禁止再次插入。 + $check_cunzai=DB::table('examination_records')->where('tijian_num',$CheckupInfo['tijian_num'])->get(); + if(count($check_cunzai)>0) return \Yz::echoError1('此体检号已经存在,禁止创建'); + $u2=DB::table('examination_records')->insert([ + "name"=>$CheckupInfo['name'], "id_card_num"=>$CheckupInfo['id_card_num'], "type"=>$CheckupInfo['type'], - "institution_id"=>$org_id[0]->id + "institution_id"=>$org_id[0]->id, + "tijian_time"=>$CheckupInfo['tijian_time'], + "tijian_num"=>$CheckupInfo['tijian_num'], + "report_content"=>json_encode($CheckupInfo['report_content']), + "fee_type"=>$CheckupInfo['fee_type'] ]); if($CheckupInfo['type']==1){ @@ -62,12 +77,12 @@ class HealthCheckupService } catch (\Exception $e) { DB::rollBack(); // 回滚事务 - + dd($e); } if($status){ - return \Yz::Return(true,'ok',[]); + return \Yz::Return(true,'记录完成',["num"=>$CheckupInfo['tijian_num']]); }else{ return \Yz::echoError1("操作失败"); } @@ -76,8 +91,26 @@ class HealthCheckupService //保存文件返回存储路径 public function SaveFile($arr){ + $date = date("Ymd"); $path = $arr['file']->store('public/'.$date); return \Yz::Return(true,'',$path); } + //查询个人查询体检记录列表 + public function GetPersonCheckUpList($arr){ + $list = DB::table("examination_records")->where(['id_card_num'=>$arr['id_card_num']])->get(); + return \Yz::Return(true,'查询成功',['list'=>$list,'count'=>count($list)]); + } + //根据体检号查询体检详情 + public function GetPersonCheckUpDetail($arr){ + + $detail=DB::table('examination_records')->where(['tijian_num'=>$arr['tijian_num']])->first(); + if(!empty($detail)){ + return \Yz::Return(true,'查询成功',$detail); + }else{ + return \Yz::echoError1("未找到记录"); + } + + + } } diff --git a/Laravel/app/Services/mH5/OrganizationService.php b/Laravel/app/Services/mH5/OrganizationService.php index 1d0a59a..ecf8864 100644 --- a/Laravel/app/Services/mH5/OrganizationService.php +++ b/Laravel/app/Services/mH5/OrganizationService.php @@ -55,11 +55,12 @@ class OrganizationService return $result; } //开始预约 - public function StartYuYue($arr){ + public function StartYuYue($arr,$type=1){ $result=array(); $openid=$arr['openid']; $group=$arr['group']; $info=$arr['info']; + //判断用户是否有效 $cha_info=DB::table('persons')->select(['id','name','id_card_num'])->where(['openid'=>$openid,'status'=>1])->get(); if(!count($cha_info)){ @@ -76,7 +77,7 @@ class OrganizationService if(count($cha)) { return \Yz::Return(false,'本年度已经预约过,无法继续预约'); } - //判断是否体检过 + //判断是否免费体检过 $s=app()->make(PersonService::class); $char=$s->GetPersonRecode(['openid'=>$openid,'group'=>$group]); @@ -95,27 +96,52 @@ class OrganizationService } //如果都通过则继续 + DB::beginTransaction(); + try { + $idd=DB::table('appointment_record')->insertGetId( + [ + 'type'=>$type, + 'calendar_id' => $info['calendar_id'], + 'name' => $cha_info[0]->name, + 'id_card_num' => $cha_info[0]->id_card_num, + 'person_id'=>$cha_info[0]->id, + 'openid'=>$openid, + 'date'=>$q_date[0]->date, + 'time'=>$q_date[0]->time, + 'doc_type_id'=>$info['doc_id'], + 'doc_type_name'=>$info['doc_name'], + 'org_id'=>$info['org_id'], + 'status'=>1 + ] + ); + $file=array(); + foreach ($info['upfileList'] as $key=> $fvalue) { + foreach ($fvalue as $key2=> $fvalue2) { + $file[]=[ + 'type' =>$key, + 'appointment_record_id' =>$idd, + 'imgurl' =>$fvalue2, + ]; + } + } - $i=DB::table('appointment_record')->insert( - [ - 'calendar_id' => $info['calendar_id'], - 'name' => $cha_info[0]->name, - 'id_card_num' => $cha_info[0]->id_card_num, - 'person_id'=>$cha_info[0]->id, - 'openid'=>$openid, - 'date'=>$q_date[0]->date, - 'time'=>$q_date[0]->time, - 'doc_type_id'=>$info['doc_id'], - 'doc_type_name'=>$info['doc_name'], - 'org_id'=>$info['org_id'], - 'status'=>1 - ] - ); - if($i){ - return \Yz::Return(true,'预约完成'); - }else{ + $i_img=DB::table('appointment_img')->insert($file); + if($i_img){ + DB::commit(); + return \Yz::Return(true,'预约完成'); + }else{ + DB::rollback(); + return \Yz::Return(false,'预约失败'); + } + + } catch (Exception $e) { + + DB::rollback(); return \Yz::Return(false,'预约失败'); } + + + } } diff --git a/Laravel/app/Services/mH5/PersonService.php b/Laravel/app/Services/mH5/PersonService.php index 1024edf..87f1ee0 100644 --- a/Laravel/app/Services/mH5/PersonService.php +++ b/Laravel/app/Services/mH5/PersonService.php @@ -41,7 +41,7 @@ class PersonService return $result; } - //检测是否体检过 + //检测是否进行过免费体检 public function GetPersonRecode($arr){ $result=array(); $id_num=''; @@ -64,15 +64,19 @@ class PersonService $currentYear = date('Y'); $firstDay = date('Y-01-01', strtotime($currentYear)); $lastDay = date('Y-12-31', strtotime($currentYear)); + //查询体检预约记录 - $c=DB::table('examination_records')->select(['id','id_card_num','created_at as insertime'])->where([['id_card_num','=',$id_num],['created_at','>=',$firstDay],['created_at','<=',$lastDay]])->get(); + //查询体检记录表 免费体检记录 + $c=DB::table('examination_records as a') ->join('medical_institution as b', 'a.institution_id', '=', 'b.id') + ->select(['a.id','a.institution_id','a.id_card_num','a.tijian_num','a.tijian_time','a.created_at as insertime','b.org_name'])->where([['a.id_card_num','=',$id_num],['a.fee_type','=',0],['a.created_at','>=',$firstDay],['a.created_at','<=',$lastDay]])->get(); if(count($c)>0){ $result['status']=false; $result['msg']='已体检过'; $result['info']=$c; }else{ $result['status']=true; - $result['msg']='可以继续,本年度无体检记录'; + $result['msg']='可以继续,本年度无免费体检记录'; + $result['info']=$c; } }else{ $result['status']=false; diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index 7d209fb..649e056 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -45,6 +45,7 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { Route::post('admin/CalendarGetList','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@getList'); //admin后台获取日历列表 Route::post('admin/CalendarListDel','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@Del'); //admin后台删除日历 Route::post('admin/CalendarChangeInfo','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@ChangeInfo'); //admin后台更新日历 + Route::post('admin/XTSignBindUser','App\Http\Controllers\API\XTSignController@bindUser');//admin后台用户绑定协同签名useid }); @@ -56,15 +57,23 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1/mH5'],function () Route::post('GetOrgEnableList','App\Http\Controllers\API\mH5\OrganizationController@GetEnableList'); //获取可用体检机构 Route::post('GetEnableCalendar','App\Http\Controllers\API\mH5\OrganizationController@GetEnableCalendar'); //获取可用体检机构日历 Route::post('StartYuYue','App\Http\Controllers\API\mH5\OrganizationController@StartYuYue'); //开始预约 + Route::post('UpFile','App\Http\Controllers\API\UpLoadController@UpFile'); //上传文件 }); //对外接口 Route::group(['middleware'=>['check.sign','log'],'prefix'=>'v1'],function () { - Route::get('CreateCheckupRecord','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@CreateRecord'); //创建预约记录 + Route::post('CreateCheckupRecord','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@CreateRecord'); //创建预约记录 Route::get('GetAppointmentRecord','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@GetAppointmentRecord'); //获取个人预约详情 Route::get('CheckRequirements','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@CheckRequirements'); //检查是否能进行免费体检 - Route::post('UploadFile','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@UploadFile'); + Route::post('UploadFile','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@UploadFile'); //上传体检报告pdf + Route::get('GetPersonCheckUpList','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@GetPersonCheckUpList');//查询个人查询体检记录列表 + Route::get('GetPersonCheckUpDetail','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@GetPersonCheckUpDetail');//根据体检号查询体检详情 }); + +Route::post('test','App\Http\Controllers\API\Admin\LoginController@test'); +Route::any('XTSignNotify','App\Http\Controllers\API\XTSignController@Notify'); +Route::post('XTSignCheckNotify','App\Http\Controllers\API\XTSignController@CheckNotify')->middleware('log'); ; +Route::post('addSignJob','App\Http\Controllers\API\XTSignController@addSignJob')->middleware('log'); ; //添加签名任务展示二维码 diff --git a/el-admin/package-lock.json b/el-admin/package-lock.json index c0626a5..c2d3307 100644 --- a/el-admin/package-lock.json +++ b/el-admin/package-lock.json @@ -14,6 +14,7 @@ "echarts": "^5.4.3", "element-plus": "^2.3.14", "pinia": "^2.1.6", + "qrcode": "^1.5.3", "vue": "^3.3.4", "vue-router": "^4.2.4" }, @@ -878,7 +879,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -887,7 +887,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1003,6 +1002,14 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1019,11 +1026,20 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1034,8 +1050,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -1107,6 +1122,14 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -1167,6 +1190,11 @@ "node": ">=0.4.0" } }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1306,6 +1334,16 @@ } } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -1764,6 +1802,14 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -1921,6 +1967,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2368,6 +2422,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2384,7 +2446,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -2474,6 +2535,14 @@ } } }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -2564,6 +2633,23 @@ "node": ">=6" } }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2584,6 +2670,19 @@ } ] }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2776,6 +2875,11 @@ "node": ">=10" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2811,11 +2915,23 @@ "node": ">=0.10.0" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3079,6 +3195,24 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3094,12 +3228,98 @@ "node": ">=12" } }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/el-admin/package.json b/el-admin/package.json index 659ce61..a35e531 100644 --- a/el-admin/package.json +++ b/el-admin/package.json @@ -16,6 +16,7 @@ "echarts": "^5.4.3", "element-plus": "^2.3.14", "pinia": "^2.1.6", + "qrcode": "^1.5.3", "vue": "^3.3.4", "vue-router": "^4.2.4" }, diff --git a/el-admin/src/api/api.js b/el-admin/src/api/api.js index d8642dc..3d65bf8 100644 --- a/el-admin/src/api/api.js +++ b/el-admin/src/api/api.js @@ -86,4 +86,16 @@ export const CalendarChangeInfo = (data={}) => { //admin后台更新日历 export const CheckMenuAuth = (data={}) => { return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CheckMenuAuth',data:data}) +} +//请求登录二维码 +export const addSignJob = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'addSignJob',data:data}) +} +//检查扫码回调结果 +export const XTSignCheckNotify = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'XTSignCheckNotify',data:data}) +} +//admin后台用户绑定协同签名useid +export const XTSignBindUser = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/XTSignBindUser',data:data}) } \ No newline at end of file diff --git a/el-admin/src/router/index.js b/el-admin/src/router/index.js index d085623..689ef23 100644 --- a/el-admin/src/router/index.js +++ b/el-admin/src/router/index.js @@ -55,7 +55,7 @@ const router = createRouter({ path: '/adminChangPwd', name: 'AdminChangPwd', component: AdminChangPwd, - meta: { title: '修改密码' } + meta: { title: '用户中心' } }, { path: '/healthCalendar', name: 'HealthCalendar', diff --git a/el-admin/src/views/Login.vue b/el-admin/src/views/Login.vue index 2af098c..f707885 100644 --- a/el-admin/src/views/Login.vue +++ b/el-admin/src/views/Login.vue @@ -2,38 +2,60 @@
- - - - - -
-
- + + + + + +
+
+ +
+
+ + + 登录您的账户 + + + + + + + + + 登录 + + + 手机协同签名登录 + +
+
+ + + + 请扫描二维码登录 + +
+ +
{{erweimaErrMsg}} +
+
- - - 登录您的账户 - - - - - - - - - 登录 - - -
-
-
-
-
+ + 返回账号密码 + +
+ + +
+ +
@@ -41,26 +63,32 @@ \ No newline at end of file diff --git a/el-admin/src/views/SystemMngr/User/ChangPwd.vue b/el-admin/src/views/SystemMngr/User/ChangPwd.vue index a2d4e52..9839c84 100644 --- a/el-admin/src/views/SystemMngr/User/ChangPwd.vue +++ b/el-admin/src/views/SystemMngr/User/ChangPwd.vue @@ -1,6 +1,23 @@ - \ No newline at end of file diff --git a/mH5/src/api/api.js b/mH5/src/api/api.js index 2147633..4c5d33f 100644 --- a/mH5/src/api/api.js +++ b/mH5/src/api/api.js @@ -23,4 +23,9 @@ export const GetEnableCalendar = (data) => { //开始预约 export const StartYuYue = (data) => { return axios({url:import.meta.env.VITE_APP_API+'v1/mH5/StartYuYue',data:data}) +} + +//上传图片 +export const UpFile = (data) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/mH5/UpFile',data:data}) } \ No newline at end of file diff --git a/mH5/src/components/Loading.vue b/mH5/src/components/Loading.vue index 31030a1..a3714f9 100644 --- a/mH5/src/components/Loading.vue +++ b/mH5/src/components/Loading.vue @@ -1,5 +1,5 @@