鹿和sa0ChunLuyu 2 years ago
parent a2198832b3
commit 1a8b630969

@ -5,18 +5,65 @@ namespace App\Http\Controllers\API\Admin\YeWu;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\Admin\YeWu\HealthCheckupService;
use App\Services\mH5\PersonService;
use Illuminate\Support\Facades\DB;
class HealthCheckupController extends Controller
{
//创建体检记录
public function CreateRecord(){
$CheckupInfo=request('CheckupInfo');
$CheckupInfo=request('checkup_info');
if(!$CheckupInfo) return \Yz::echoError1('检查信息为空');
if(!$CheckupInfo['name']) return \Yz::echoError1('姓名不能为空');
if(!isset($CheckupInfo['id_card_num'])) return \Yz::echoError1('id_card_num不能为空');
if(!isset($CheckupInfo['type'])) return \Yz::echoError1('type不能为空');
if(!isset($CheckupInfo['institution_id'])) return \Yz::echoError1('institution_id不能为空');
if(!isset($CheckupInfo['institution_sn'])) return \Yz::echoError1('institution_sn不能为空');
$s=app()->make(HealthCheckupService::class);
return $s->CreateRecord($CheckupInfo);
}
//查询能否进行免费体检
public function CheckRequirements(){
$id_card_num=request('id_card_num');
$s=app()->make(PersonService::class);
return $s->GetPersonRecode(['id_num'=>$id_card_num]);
}
//获取个人预约记录详情
public function GetAppointmentRecord(){
$id_card_num=request('id_card_num');
$s=app()->make(PersonService::class);
return $s->GetAppointmentRecord(['id_num'=>$id_card_num]);
}
//提交pdf文件
public function UploadFile(Request $request){
$file=request('file');
$id_card_num=request('id_card_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('未找到此用户的体检记录,无法存储报告');
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']]);
if($u>0){
return \Yz::Return(true,'上传成功',['file'=>$save['data']]);
}else{
return \Yz::echoError1('保存文件失败');
}
}else{
return \Yz::echoError1('获取文件失败');
}
}
}

@ -12,7 +12,7 @@ class HealthOrganizationController extends Controller
public function GetEnableList(Request $request){
$userid = $request->get('userid');//中间件产生的参数
$group = $request->get('role');//中间件产生的参数
if($group<>1 or $group<>7) return \Yz::echoError('无此接口访问权限');
if($group<>1 and $group<>7) return \Yz::echoError('无此接口访问权限');
$s=app()->make(HealthOrganizationService::class);
return $s->GetList(['type'=>'enable','group'=>$group,'userid'=>$userid]);

@ -23,7 +23,7 @@ class healthCalendarController extends Controller
$userid = $request->get('userid');//中间件产生的参数
$group = $request->get('role');//中间件产生的参数
$info= request('info');
if($group<>1 or $group<>7) return \Yz::echoError('无此接口访问权限');
if($group<>1 and $group<>7) return \Yz::echoError('无此接口访问权限');
$s=app()->make(HealthCalendarService::class);
return $s->CreateCalendar(['info'=>$info,'group'=>$group,'userid'=>$userid]);

@ -65,5 +65,6 @@ class Kernel extends HttpKernel
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'checktoken' => \App\Http\Middleware\CheckToken::class,
'log' => \App\Http\Middleware\Log::class,
'check.sign' => \App\Http\Middleware\CheckSign::class,
];
}

@ -0,0 +1,35 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CheckSign
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{ //验证接口调用签名。md5后转大写time为时间戳
date_default_timezone_set('PRC');
$app_id=$request->input('app_id');
$time=$request->input('time'); //时间戳
$nonce=$request->input('nonce');
$sign=$request->input('sign');
$timeDiff = abs(time() - $time); // 获取时间差的绝对值
if ($timeDiff >= 600) return \Yz::echoError1('时间异常');
$cha_s=DB::table('outside_user')->where(['app_id'=>$app_id])->get();
if(!count($cha_s)==1) return \Yz::echoError1('第三方用户不存在');
$s_sign=strtoupper(md5($app_id.$time.$nonce.$cha_s[0]->app_secrect));
if($sign<>$s_sign) return \Yz::echoError1('签名验证失败');
return $next($request);
}
}

@ -17,7 +17,8 @@ class HealthCheckupService
$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 {
@ -27,7 +28,7 @@ class HealthCheckupService
$u= DB::table('appointment_record')
->where([
'id_card_num'=>$CheckupInfo['id_card_num'],
'org_id'=>$CheckupInfo['institution_id'],
'org_id'=>$org_id[0]->id,
'status'=>1
])->whereBetween('created_at',[$firstDay,$lastDay])->update(['status'=>2]);
@ -36,7 +37,7 @@ class HealthCheckupService
$u2=DB::table('examination_records')->insert([
"id_card_num"=>$CheckupInfo['id_card_num'],
"type"=>$CheckupInfo['type'],
"institution_id"=>$CheckupInfo['institution_id']
"institution_id"=>$org_id[0]->id
]);
if($CheckupInfo['type']==1){
@ -72,4 +73,11 @@ class HealthCheckupService
}
}
//保存文件返回存储路径
public function SaveFile($arr){
$date = date("Ymd");
$path = $arr['file']->store('public/'.$date);
return \Yz::Return(true,'',$path);
}
}

@ -40,6 +40,8 @@ class PersonService
}
return $result;
}
//检测是否体检过
public function GetPersonRecode($arr){
$result=array();
$id_num='';
@ -78,4 +80,13 @@ class PersonService
}
return $result;
}
//获取个人预约记录详情
public function GetAppointmentRecord($arr){
$cha = DB::select("SELECT a.*,b.sex,b.tel,b.status,c.org_name from appointment_record as a INNER JOIN
persons as b on a.person_id=b.id INNER JOIN medical_institution as c on a.org_id=c.id where a.id_card_num=?
and a.status=1",[$arr['id_num']]);
if(!count($cha)>0) return \Yz::echoError1("未找到预约记录");
return \Yz::Return(true,'',$cha);
}
}

@ -7,7 +7,7 @@ return [
// 'WxAppid' => 'wx8f83ab76a99ba560',//测试
// 'WxAppSecret' => 'eebc53a9e94f676bd680d3a09eb20303',//测试
'BaseServerUrl' =>'http://localhostcommon',
'WxRedirectUrl'=>'https://www.yanzai.vip/common/laravel/public/wxGetCode', //微信授权登录,重定向地址
'WxReturnCodeUrl_local'=>'http://192.168.31.106:5173/#/getWxCode/', //获取code后引导返回到前端的地址 开发

@ -0,0 +1,53 @@
北京市从业人员健康证明
体检编号2311280001
食品类 照片
一般情况
张三 性别 男
姓名
身份证号 130321199778545
单位 测试单位
健康检查信息 检查结果 医生盖章 检查日期
疾病名称
有 无 备注
细菌性痢疾
√ 2023 年 11 月 28 日
伤寒和副伤寒 √ 2023 年 11 月 28 日
2023 年 11 月 28 日
病毒性肝炎 2023 年 11 月 28 日
√ 2023 年 11 月 28 日
2023 年 11 月 28 日
(甲型、戊型) 2023 年 11 月 28 日
活动性肺结核 √
化脓性或渗出性
皮肤病
手部真菌感染性
疾病(如手癣、指 √
甲癣)
霍乱 √
阿米巴性疾病 √ 2023 年 11 月 28 日
手部湿疹 √ 2023 年 11 月 28 日
2023 年 11 月 28 日
手部的银屑病或
者鳞癣
备注:此表自体检合格发表日起有效期一年,本次化验检查结果,只对本次送检标本负责。
医疗机构 (盖章有效) 日期2023 年 11 月 28 日

@ -61,4 +61,10 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1/mH5'],function ()
//对外接口
Route::get('CreateCheckupRecord','App\Http\Controllers\API\Admin\YeWu\HealthCheckupController@CreateRecord'); //创建预约记录
Route::group(['middleware'=>['check.sign','log'],'prefix'=>'v1'],function () {
Route::get('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');
});

@ -1,2 +0,0 @@
*
!.gitignore

@ -1,3 +1,4 @@
ENV = 'development'
VITE_APP_API = '/api/'
VITE_APP_WXCODE_URL = 'http://192.168.31.106/wxLogin/development'
VITE_APP_WXCODE_URL = 'http://192.168.31.106/wxLogin/development'
VITE_APPID = "wx526430047d34c85c"

@ -1,4 +1,4 @@
ENV = 'production'
VITE_APP_API = 'https://www.yanzai.vip/common/laravel/public/api/'
VITE_APP_WXCODE_URL = 'http://www.yanzai.vip/common/laravel/public/wxLogin/production'
VITE_APPID = "wx526430047d34c85c"

3698
mH5/package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -11,10 +11,12 @@
},
"dependencies": {
"axios": "^1.5.1",
"pdfjs-dist": "^4.0.269",
"pinia": "^2.1.6",
"vant": "^4.7.0",
"vue": "^3.3.4",
"vue-router": "^4.2.4"
"vue-router": "^4.2.4",
"weixin-js-sdk": "^1.6.3"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.3.3",
@ -23,6 +25,7 @@
"eslint": "^8.49.0",
"eslint-plugin-vue": "^9.17.0",
"prettier": "^3.0.3",
"vite": "^4.4.9"
"vite": "^4.4.9",
"vite-plugin-top-level-await": "^1.3.1"
}
}

@ -62,6 +62,7 @@ body {
min-height: 100vh;
color: var(--color-text);
background: var(--color-background);
background-color: #fff;
transition:
color 0.5s,
background-color 0.5s;

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

@ -5,7 +5,9 @@ import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
import { Button,Toast,Loading,Field,RadioGroup,Radio,Icon,Col, Row,Step, Steps,Empty,Calendar,Cell, CellGroup,Picker,Popup,Overlay } from 'vant';
import { Button,Toast,Loading,Field,RadioGroup,Radio,Icon,Col,
Row,Step, Steps,Empty,Calendar,Cell, CellGroup,Picker,Popup,
Overlay,Uploader ,Image as VanImage } from 'vant';
import LoadingD from '@/components/Loading.vue'
import 'vant/lib/index.css';
@ -34,5 +36,7 @@ app.use(CellGroup);
app.use(Picker);
app.use(Popup);
app.use(Overlay);
app.use(Uploader);
app.use(VanImage);
app.mount('#app')

@ -31,7 +31,7 @@ const router = createRouter({
},{
path: '/documentSubmit',
name: 'DocumentSubmit',
component: () => import('../views/DocumentSubmit.vue')
component: () => import('../views/SelectIndustry.vue')
},{
path: '/selectDate',
name: 'SelectDate',
@ -48,6 +48,14 @@ const router = createRouter({
path: '/healthCertificate',
name: 'HealthCertificate',
component: () => import('../views/HealthCertificate.vue')
},{
path: '/uploadFiles',
name: 'UploadFiles',
component: () => import('../views/UploadFiles.vue')
},{
path: '/previewReport',
name: 'PreviewReport',
component: () => import('../views/PreviewReport.vue')
}]
})

@ -11,5 +11,81 @@ export const usePiniaStore = defineStore('usePiniaStore', () => {
function ChangeYuYueInfo(info){
yuyue_info.value=info
}
return { count, doubleCount, increment,yuyue_info,ChangeYuYueInfo }
let hangyeInfo=ref([{
id:1,
label:'食品类',
content:'《食品生产许可证》《食品经营许可证》《北京市小规模食品生产经营许可证》《北京市小食杂店备案卡》或《网络食品交易第三方平台提供者备案信息表》复印件。(以上材料有其一即可)',
img:'foodpng',
fileList:[
{label:'1.《食品生产许可证》《食品经营许可证》《北京市小规模食品生产经营许可证》《北京市小食杂店备案卡》或《网络食品交易第三方平台提供者备案信息表》复印件。(以上材料有其一即可)',
fileurl:''},
{label:'2.用工证明或拟录用证明(如劳动合同、工作证、就业协议书等;原件现场核查,复印件加盖用人单位公章存档)',
fileurl:''},
{label:'3.免费健康检查申请单',
fileurl:''},
{label:'4.从业人员有效身份证件',
fileurl:''},
]
},{
id:2,
label:'化妆品类',
content:'《化妆品生产许可证》复印件、营业执照复印件(经营范围应包括:化妆品生产或相关内容)、化妆品注册备案信息服务平台中的化妆品注册人/备案人企业信息资料管理界面截图。(以上材料有其一即可)',
img:'huazhuangpin',
fileList:[
{label:'1.《化妆品生产许可证》复印件、营业执照复印件(经营范围应包括:化妆品生产或相关内容)、化妆品注册备案信息服务平台中的化妆品注册人/备案人企业信息资料管理界面截图。(以上材料有其一即可)',
fileurl:''},
{label:'2.用工证明或拟录用证明(如劳动合同、工作证、就业协议书等;原件现场核查,复印件加盖用人单位公章存档)',
fileurl:''},
{label:'3.免费健康检查申请单',
fileurl:''},
{label:'4.从业人员有效身份证件',
fileurl:''},
]
},{
id:3,
label:'公共场所类',
content:'《卫生许可证》复印件',
img:'gonggongpng',
fileList:[
{label:'1.《卫生许可证》复印件',
fileurl:''},
{label:'2.用工证明或拟录用证明(如劳动合同、工作证、就业协议书等;原件现场核查,复印件加盖用人单位公章存档)',
fileurl:''},
{label:'3.免费健康检查申请单',
fileurl:''},
{label:'4.从业人员有效身份证件',
fileurl:''},
]
},{
id:4,
label:'生活饮用水类',
content:'营业执照(经营范围应包括:饮用水供水服务或相关内容)或《卫生许可证》复印件。(以上材料有其一即可)',
img:'yinyongshui',
fileList:[
{label:'1.营业执照(经营范围应包括:饮用水供水服务或相关内容)或《卫生许可证》复印件。(以上材料有其一即可)',
fileurl:''},
{label:'2.用工证明或拟录用证明(如劳动合同、工作证、就业协议书等;原件现场核查,复印件加盖用人单位公章存档)',
fileurl:''},
{label:'3.免费健康检查申请单',
fileurl:''},
{label:'4.从业人员有效身份证件',
fileurl:''},
]
},{
id:5,
label:'消毒产品生产类',
content:'营业执照(经营范围应包括:生产消毒产品)或《消毒产品生产卫生许可证》复印件。(以上材料有其一即可)',
img:'xiaodupng',
fileList:[
{label:'1.营业执照(经营范围应包括:生产消毒产品)或《消毒产品生产卫生许可证》复印件。(以上材料有其一即可)',
fileurl:''},
{label:'2.用工证明或拟录用证明(如劳动合同、工作证、就业协议书等;原件现场核查,复印件加盖用人单位公章存档)',
fileurl:''},
{label:'3.免费健康检查申请单',
fileurl:''},
{label:'4.从业人员有效身份证件',
fileurl:''},
]
}])
return { count, doubleCount, increment,yuyue_info,ChangeYuYueInfo,hangyeInfo }
})

@ -4,7 +4,7 @@
<div class="title">北京市从业人员健康证明</div>
<div class="info">
<div class="left">
<div class="pic">头像</div>
<div class="pic"><img src="@/assets/image/touxiang.jpg"></div>
<div class="left_xia">
<div>类型食品</div>
<div>日期2023-05-01</div>
@ -13,7 +13,9 @@
</div>
<div class="right">
<div class="right_shang">
<div class="erweima">222</div>
<div class="erweima">
<img src="@/assets/image/erweima.jpg">
</div>
<div class="userinfo">
<div class="name">李梦<span class="sex">()</span></div>
<div class="sfz">身份证号130666454545454545</div>
@ -65,12 +67,16 @@
</div>
</div>
</div>
<div class="bottom">22</div>
</div>
<div class="zhang">
<img src="@/assets/image/zhang.png">
</div>
</div>
</template>
<script>
document.title='报告查询'
</script>
<style scoped>
.HealthCertificate{
background-color: #f5f5f5;
@ -90,12 +96,15 @@
}
.info{
display: flex;
height: 85%;
height: 80%;
}
.bottom{
height: 5%;
background-color: #1b2f60;
}
.left{
width: 30%;
height: 100%;
background-color: #c3ff83;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
@ -103,14 +112,16 @@
}
.pic{
width: 80%;
height: 60%;
border: 1px solid red;
height: 65%;
padding-top: 10%;
}
.pic img{
width: 100%;
}
.left_xia{
display: flex;
flex-direction: column;
border: 1px solid green;
height: 40%;
flex-direction: column;
height: 35%;
justify-content: space-between;
font-size: 2.5vw;
padding-top:10% ;
@ -118,25 +129,29 @@
}
.right{
height: 100%;
width: 70%;
background-color: #93d2ff;
width: 70%;
}
.right_shang{
display: flex;
height: 33%;
border: 1px solid #222;
height: 33%;
}
.erweima{
width: 30%;
border: 1px solid #fff;
width: 30%;
height: 100%;
padding: 4% ;
}
.erweima img{
width: 100%;
margin-left: -3%;
}
.userinfo{
width: 70%;
padding: 5% 10% 0 5%;
padding: 5% 10% 0 2%;
}
.name{
font-size: 5vw;
@ -153,25 +168,33 @@
font-weight: 500;
}
.right_xia{
padding-top: 3%;
padding-top: 5%;
padding-right: 2%;
padding-left: 2%;
}
table{
width: 100%;
text-align: center;
border: 1px solid #000;
font-size: 2.3vw;
font-size: 2.1vw;
}
td{
border: 1px solid #000;
padding: 0px;
}
tr{
padding: 0px;
}
.zhang{
position: absolute;
top: 25%;
top: 35vw;
left: 20%;
}
.zhang img{
width: 21vw;
}
</style>

@ -0,0 +1,21 @@
<template>
<div>
<img
style="width: 100%;"
src="../assets/report.png"
/>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
onMounted(()=>{
})
</script>
<style>
</style>

@ -11,9 +11,9 @@
<div style="color:#55b2d3">
选择您所在的行业类型
</div>
<van-radio-group v-model="type">
<van-radio-group v-model="type" class="radioGroup">
<div v-for=" item in DocInfo" class="item" :class="type==item.id?'active':''" @click="check(item.id,item.label)">
<div v-for=" item in DocInfo" :key="item.id" class="item" :class="type==item.id?'active':''" @click="check(item.id,item.label)">
<div class="logo"><img :src="item.img"/></div>
<div class="name">
@ -34,12 +34,11 @@
import yinyongshui from '@/assets/image/yinyongshui.png'
import xiaodupng from '@/assets/image/xiaodu.png'
import {
ref,
onMounted
ref
} from 'vue';
import Loading from '@/components/Loading.vue'
import {
showDialog,showToast
showDialog
} from 'vant';
import {useRouter} from "vue-router"
import {
@ -97,7 +96,10 @@
});
}
const to=()=>{
router.push('/selectDate')
// router.push('/selectDate')
router.push('/uploadFiles')
}
</script>
@ -122,7 +124,7 @@
border-radius: 10px;
height: 70px;
background: linear-gradient(to right, #aee3f1, #fff);
margin-top: 30px;
margin-top: 15px;
}
.active{
border: 2px solid #33cdc9;
@ -157,6 +159,10 @@
bottom: 20px;
border: 3px solid #fff;
}
.radioGroup{
}
</style>
<style>
.van-step__title {

@ -4,7 +4,7 @@
<div v-if="orgList.length>0">
<div class="title">请选择预约体检机构</div>
<div class="title2">请就近选择体检机构</div>
<van-radio-group v-model="organization">
<van-radio-group v-model="organization" >
<div v-for=" item in orgList" class="item" :key="item.id" :class="organization==item.id?'active':''"
@click="organization=item.id">
<div class="logo"><img src="../assets/image/map.png" /></div>
@ -116,7 +116,7 @@
border-radius: 10px;
height: 70px;
background: linear-gradient(to right, #a8f1ef, #fff);
margin-top: 30px;
margin-top: 20px;
}
.active {
@ -155,4 +155,5 @@
position: fixed;
bottom: 20px;
}
</style>

@ -14,9 +14,8 @@
<van-col span="18">131122115511555111</van-col>
</van-row>
<van-row class="button">
<van-col span="8"><RouterLink to="/showReport"><van-button size="small" plain>查询体检结果</van-button></RouterLink></van-col>
<van-col span="8"><RouterLink to="/healthCertificate"><van-button size="small" plain>查看健康证</van-button></RouterLink></van-col>
<van-col span="8"><van-button size="small" plain>下载报告</van-button></van-col>
<van-col span="12"><RouterLink to="/healthCertificate"><van-button size="small" plain>查看健康证</van-button></RouterLink></van-col>
<van-col span="12"><van-button size="small" @click="previewReport" plain>查看报告</van-button></van-col>
</van-row>
<div class="title1">北京市从业人员体检结果</div>
</div>
@ -38,7 +37,8 @@
</div>
</template>
<script setup>
import { RouterLink } from 'vue-router';
import { RouterLink ,useRouter} from 'vue-router';
const router = useRouter();
let list = [
{
@ -46,10 +46,10 @@ let list = [
value: "无"
}, {
name: "伤寒和副伤赛",
value: ""
value: ""
}, {
name: "病毒性肝炎(甲型、戌型)",
value: ""
value: ""
}, {
name: "活动性肺结核",
value: "无"
@ -74,6 +74,11 @@ let list = [
value: "无"
},
]
document.title='报告查询'
//
const previewReport=()=>{
router.push('/previewReport')
}
</script>
<style scoped >
.showreport {

@ -0,0 +1,88 @@
<template>
<div class="uploadfiles">
<van-steps active="0" active-icon="checked" active-color="#33cdc9">
<van-step>类型选择(上传)</van-step>
<van-step>选择日期</van-step>
<van-step>预约完成</van-step>
</van-steps>
<div class="head" >
请上传"{{needinfo.label}}"相关证件
</div>
<div v-for="(item,index) in needinfo.fileList">
<div class="l_title">
{{item.label}}
</div>
<van-uploader :ref="`uploader${index}`" :name="index" :key="index" :after-read="afterRead">
<van-button icon="plus" plain size="small" type="primary">上传文件</van-button>
</van-uploader>
<div style="font-size: 12px; color: #797979; margin: 5px;">{{item.fileurl}}</div>
</div>
<van-button type="primary" class="button" round @click="to()"></van-button>
</div>
</template>
<script setup>
import {
onMounted,ref
} from 'vue';
import {
useRouter
} from "vue-router"
import {
usePiniaStore
} from '@/stores/index.js'
const pinia = usePiniaStore()
const router = useRouter();
const to = () => {
router.push('/selectDate')
}
let needinfo=ref([])//
onMounted(() => {
console.log(pinia.yuyue_info)
if(pinia.yuyue_info.doc_id){
needinfo.value=pinia.hangyeInfo[pinia.yuyue_info.doc_id-1]
}
})
const afterRead = (file,detail) => {
console.log(detail);
needinfo.value.fileList[detail.name].fileurl=file.file.name
console.log(needinfo.value);
}
</script>
<style scoped>
.uploadfiles {
height: 100vh;
background-image: url('../assets/image/r_head2.jpg');
background-size: 50vw;
background-repeat: no-repeat;
background-position: 100% 100%;
padding: 20px;
}
.head {
font-size: 20px;
font-weight: 700;
color: #175e5c;
padding-top: 10px;
}
.l_title {
font-size: 14px;
color: #4e4e4e;
margin: 5px
}
.button {
width: calc(100vw - 40px);
background-color: #33cdc9;
border: 0px;
position: fixed;
bottom: 20px;
border: 3px solid #fff;
left: 20px
}
</style>

@ -2,7 +2,7 @@ import {
fileURLToPath,
URL
} from 'node:url'
import topLevelAwait from 'vite-plugin-top-level-await'
import {
defineConfig
} from 'vite'
@ -13,7 +13,14 @@ export default defineConfig({
base: "./",
plugins: [
vue(),
topLevelAwait({
promiseExportName: '__tla',
promiseImportName: i=> `__tla_${i}`
})
],
build:{
target:['es2020']
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))

Loading…
Cancel
Save