diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/ComboController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/ComboController.php index 0b51f6e..582ec95 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/ComboController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/ComboController.php @@ -9,7 +9,7 @@ use Illuminate\Support\Facades\DB; class ComboController extends Controller { - //获取套餐列表 + //获取套餐 public function UpdateCombo() { $hospital_id =request('hospital'); @@ -20,9 +20,23 @@ class ComboController extends Controller $peis=new PEISApiController(); $info= $peis::Post('套餐查询',$hospital_id,$data,false); $successCount=0;//成功的数量 - if(count($info['data'])>0){ $combos=$info['data']; + //查询医院下所有缓存的套餐 + $db_combo_all=DB::table('combos')->where(['hospital_id'=>$hospital_id])->get(); + foreach($db_combo_all as $key=>$db_combo){ + $cunzai=false; + foreach ($combos as $c_key=>$combo){ + if($db_combo->combo_id==$combo['Id']){ + $cunzai=true; + } + } + if(!$cunzai){ + DB::table('combos')->where(['id'=>$db_combo->id])->update([ + 'status'=>0 + ]); + } + } foreach ($combos as $c_key=>$combo){ $item=[]; @@ -37,25 +51,31 @@ class ComboController extends Controller 'desc'=>$v['简介'], ]; } - $item=json_encode($item,JSON_UNESCAPED_UNICODE); + $sex=null; + if(isset($combo['性别限制'])){ + $sex_array=['全部'=>0,'男'=>1,'女'=>2]; + $sex=$sex_array[$combo['性别限制']]>=0?$sex_array[$combo['性别限制']]:null; + } - - $db_combo=DB::table('combos')->where(['combo_id'=>$combo['Id']])->first(); + $db_combo=DB::table('combos')->where(['hospital_id'=>$hospital_id,'combo_id'=>$combo['Id']])->first(); $comboData=[ 'hospital_id'=>$hospital_id, 'combo_id'=>$combo['Id'], + 'sex'=>$sex, 'name'=>$combo['名称'], 'original_price'=>$combo['原价'], 'price'=>$combo['价格'], 'items'=>$item, + 'status'=>1, 'updated_at'=>date('Y-m-d H:i:s'), ]; if(!!$db_combo){ //如果存在套餐 - $u=DB::table('combos')->where(['combo_id'=>$combo['Id']])->update($comboData); + $u=DB::table('combos')->where(['hospital_id'=>$hospital_id,'combo_id'=>$combo['Id']])->update($comboData); }else{ //如果不存在套餐 + $comboData['tags']=json_encode([]); $u= DB::table('combos')->insert($comboData); } if($u){ @@ -80,4 +100,51 @@ class ComboController extends Controller return \Yz::echoError1('未查询到套餐'); } } + public function GetList() + { + $page = request('page'); + $pageSize = request('pageSize'); + $searchInfo = request('searchInfo'); + $list=DB::table('combos') + ->select('combos.*','hospital.name as hospital_name') + ->leftJoin('hospital','hospital.id','=','combos.hospital_id'); + if(isset($searchInfo['name'])){ + + $list = $list->where('combos.name', 'like', '%' . $searchInfo['name'] . '%'); + } + $count=$list->count(); + $list=$list + ->skip(($page-1)*$pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + + return \Yz::Return(true,"查询完成",['list'=>$list,'count'=>$count]); + } + public function GetDetail() + { + $id = request('id'); + $query=DB::table('combos')->where(['id'=>$id])->first(); + if(!!$query){ + $query->tags=implode(", ", json_decode($query->tags,true)); + $query->items=json_decode($query->items); + return \Yz::Return(true,"查询完成",$query); + }else{ + return \Yz::echoError1("获取详情失败"); + } + } + public function Save() + { + $Info = request('Info'); + $u=DB::table('combos')->where(['id'=>$Info['id']])->update([ + 'tags'=>json_encode($Info['tags'],JSON_UNESCAPED_UNICODE), + 'cover'=>$Info['cover'], + 'intro'=>$Info['intro'], + 'sub_intro'=>$Info['sub_intro'], + 'desc'=>$Info['desc'] + ]); + if($u){ + return \Yz::Return(true,"更新完成",[]); + }else{ + return \Yz::echoError1("没有数据更新"); + } + } } diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/ItemController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/ItemController.php new file mode 100644 index 0000000..8c41482 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/ItemController.php @@ -0,0 +1,79 @@ +"0","价格上限"=>"999999","性别"=>null,"妇检"=>false,"套餐Id"=>null,"项目Id列表"=>[],"请求来源"=>"小程序" + ]; + $peis=new PEISApiController(); + $info= $peis::Post('自选项目查询',$hospital_id,$data,false); + $successCount=0;//成功的数量 + + if(count($info['data'])>0){ + $items=$info['data']; + //查询医院下所有缓存的套餐 + $db_items_all=DB::table('items')->where(['hospital_id'=>$hospital_id])->get(); + foreach($db_items_all as $key=>$db_items){ + $cunzai=false; + foreach ($items as $c_key=>$item){ + if($db_items->item_id==$item['Id']){ + $cunzai=true; + } + } + if(!$cunzai){ + DB::table('items')->where(['id'=>$db_items->id])->update([ + 'status'=>0 + ]); + } + } + foreach ($items as $c_key=>$item){ + $sex=null; + if(isset($item['性别限制'])){ + $sex_array=['全部'=>0,'男'=>1,'女'=>2]; + $sex=$sex_array[$item['性别限制']]>=0?$sex_array[$item['性别限制']]:null; + } + + $db_item=DB::table('items')->where(['hospital_id'=>$hospital_id,'item_id'=>$item['Id']])->first(); + $ItemData=[ + 'hospital_id'=>$hospital_id, + 'item_id'=>$item['Id'], + 'sex'=>$sex, + 'name'=>$item['名称'], + 'price'=>$item['价格'], + 'status'=>1, + 'updated_at'=>date('Y-m-d H:i:s'), + ]; + if(!!$db_item){ + //如果存在项目 + $u=DB::table('items')->where(['hospital_id'=>$hospital_id,'item_id'=>$item['Id']])->update($ItemData); + }else{ + //如果不存在套餐 + $u= DB::table('items')->insert($ItemData); + } + if($u){ + $successCount++; + }else{ + return \Yz::echoError1('更新失败'); + } + + } + + return \Yz::Return(true,'操作完成',['success_count'=>$successCount,'combos_count'=>count($items)]); + + }else{ + return \Yz::echoError1('未查询到套餐'); + } + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/LinkUnitsController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/LinkUnitsController.php new file mode 100644 index 0000000..6f62f0c --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/LinkUnitsController.php @@ -0,0 +1,62 @@ +where(['is_del'=>0]); + if(isset($searchInfo['name'])){ + $list = $list->where('name', 'like', '%' . $searchInfo['name'] . '%'); + } + $count=$list->count(); + $list=$list + ->skip(($page-1)*$pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + + return \Yz::Return(true,"查询完成",['list'=>$list,'count'=>$count]); + } + public function Save() + { + $Info = request('Info'); + $data=[ + 'name'=>$Info['name'], + 'img'=>$Info['logo'], + 'url'=>$Info['url'], + 'type'=>$Info['type'], + 'status'=>$Info['status'], + ]; + if($Info['id']==0){ + $data['created_at']=date('Y-m-d H:i:s'); + $u=DB::table('link_units')->insert($data); + }else{ + $u=DB::table('link_units')->where(['id'=>$Info['id']])->update($data); + } + + if($u){ + return \Yz::Return(true,"操作完成",[]); + }else{ + return \Yz::echoError1("没有数据更新"); + } + } + public function Del() + { + $id = request('id'); + $d= DB::table('link_units')->where(['id'=>$id])->update([ + 'is_del'=>1 + ]); + if($d){ + return \Yz::Return(true,"操作完成",[]); + }else{ + return \Yz::echoError1("删除失败"); + } + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/NavController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/NavController.php new file mode 100644 index 0000000..e8e7075 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/NavController.php @@ -0,0 +1,56 @@ +where(['is_del'=>0]); + $count=$list->count(); + $list=$list + ->skip(($page-1)*$pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + + return \Yz::Return(true,"查询完成",['list'=>$list,'count'=>$count]); + } + public function Save() + { + $Info = request('Info'); + $data=[ + 'title'=>$Info['title'], + 'l_title'=>$Info['l_title'], + 'url'=>$Info['url'] + ]; + if($Info['id']==0){ + $u=DB::table('web_nav')->insert($data); + }else{ + $u=DB::table('web_nav')->where(['id'=>$Info['id']])->update($data); + } + + if($u){ + return \Yz::Return(true,"操作完成",[]); + }else{ + return \Yz::echoError1("没有数据更新"); + } + } + public function Del() + { + $id = request('id'); + $d= DB::table('web_nav')->where(['id'=>$id])->update([ + 'is_del'=>1 + ]); + if($d){ + return \Yz::Return(true,"操作完成",[]); + }else{ + return \Yz::echoError1("删除失败"); + } + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/WebMngrController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/WebMngrController.php new file mode 100644 index 0000000..f4ff71b --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/WebMngrController.php @@ -0,0 +1,57 @@ +where(['label' => '首页轮播'])->update([ + 'value' => $urls + ]); + if(isset($links)){ + $u = DB::table('configs')->where(['label' => '轮播链接'])->update([ + 'value' =>json_encode($links) + ]); + } + if ($u) { + return \Yz::Return(true, '保存成功', []); + } else { + return \Yz::echoError1("没有数据更新"); + } + } + + public function GetAllConfigs() + { + $configArray = request('configArray'); + $all = DB::table('configs')->whereIn('label',$configArray)->get(); + foreach ($all as $key=>$v){ + if(in_array($v->label,['首页轮播','轮播链接','广告图片','广告链接'])){ + $all[$key]->value= json_decode($v->value, true); + } + } + return \Yz::Return(true, '保存成功', $all); + } + public function SaveWebConfig() + { + $configInfo = request('configInfo'); + if(!empty($configInfo)){ + foreach ($configInfo as $key=>$item){ + DB::table('configs')->where(['label'=>$item['label']])->update([ + 'value'=>$item['value'] + ]); + } + return \Yz::Return(true, '保存成功', []); + }else{ + return \Yz::echoError1("没有数据更新"); + } + } +} diff --git a/Laravel/app/Http/Controllers/API/UpLoadController.php b/Laravel/app/Http/Controllers/API/UpLoadController.php index 8c9bb1f..debf925 100644 --- a/Laravel/app/Http/Controllers/API/UpLoadController.php +++ b/Laravel/app/Http/Controllers/API/UpLoadController.php @@ -12,19 +12,40 @@ class UpLoadController extends Controller { public function UpFile(){ $file=request('file'); - - if ($file->isValid()) { + $WangEditorImageFile=request('WangEditorImageFile'); + if(isset($file)){ + if ($file->isValid()) { // $s=app()->make(HealthCheckupService::class); // $save=$s->SaveFile(['file'=>$file]); - $date = date("Ymd"); - $save = $file->store('public/'.$date); - return \Yz::Return(true,'上传成功',Storage::url($save)); - - + $date = date("Ymd"); + $save = $file->store('public/'.$date); + return \Yz::Return(true,'上传成功',Storage::url($save)); + }else{ + return \Yz::echoError1("上传失败"); + } + } + if(isset($WangEditorImageFile)){ + $result = array(); + if ($WangEditorImageFile->isValid()) { + $date = date("Ymd"); + $save = $WangEditorImageFile->store('public/'.$date); + + + $result['status'] = true; + $result['msg'] ='上传成功'; + $result['data'] = ["url"=>env('APP_URL').Storage::url($save)]; + $result['errno'] = 0; + + }else{ + $result['status'] = false; + $result['msg'] ='失败'; + $result['message'] ='上传失败'; + $result['data'] = []; + $result['errno'] = 1; + } + return $result; + } - }else{ - return \Yz::echoError1('获取文件失败'); - } } } diff --git a/Laravel/app/Http/Controllers/ViewController.php b/Laravel/app/Http/Controllers/ViewController.php index 3ea006d..8fea298 100644 --- a/Laravel/app/Http/Controllers/ViewController.php +++ b/Laravel/app/Http/Controllers/ViewController.php @@ -25,7 +25,13 @@ class ViewController extends Controller { $request = request(); $search = $request->get('search') ?? ''; + $configs=DB::table('configs')->whereIn('label',['客服电话','客服在线时间'])->get()->toArray(); + $c_arr=[]; + foreach ($configs as $key=>$value){ + $c_arr= array_merge($c_arr,[$value->label=>$value->value]); + } return [ + 'configs'=>$c_arr, 'search_value' => $search, 'search_tags' => ['女性', '男性', '入职', '父母', '高端'] ]; @@ -191,11 +197,32 @@ class ViewController extends Controller foreach ($hospital_list as $hospital) { $hospital->tags_arr = json_decode($hospital->tags, true); } - return view('home.home', [ + + //获取配置信息 + $configs=DB::table('configs')->whereIn('label',['首页轮播'])->get(); + $c_arr=[]; + foreach ($configs as $key=>$value){ + if($value->label=='首页轮播'){ + $c_arr= array_merge($c_arr,[$value->label=>json_decode($value->value, true)]); + }else{ + $c_arr= array_merge($c_arr,[$value->label=>$value->value]); + // $c_arr[]=[$value->label=>$value->value]; + } + } + //首页导航 + $navs=DB::table('web_nav')->where(['is_del'=>0])->get(); + $nav_list=['navs'=>$navs]; + + //合作单位和机构 + $link_units=DB::table('link_units')->where(['status'=>1,'is_del'=>0])->get(); + $link_units=['link_units'=>$link_units]; + $arr= [ 'public_config' => self::public_config(), 'combos' => $combos, 'hospitals' => $hospital_list, - ]); + ]; + $arr=array_merge($c_arr,$arr,$nav_list,$link_units); + return view('home.home', $arr); } public function combo(Request $request) diff --git a/Laravel/app/Services/Admin/MenuService.php b/Laravel/app/Services/Admin/MenuService.php index 8810803..456a0be 100644 --- a/Laravel/app/Services/Admin/MenuService.php +++ b/Laravel/app/Services/Admin/MenuService.php @@ -6,14 +6,13 @@ class MenuService public function GetBaseMenuList($arr){ $result=array(); if($arr['userid']=='search'){ - $menulist=DB::select("select b.id,b.pid,b.order,b.icon, b.name,b.url from group_menu as a left join menu as b on a.menu_id=b.id where a.group_id =? and b.status=1",[$arr['group']]); + $menulist=DB::select("select b.id,b.pid,b.order,b.icon, b.name,b.url from group_menu as a left join menu as b on a.menu_id=b.id where a.group_id =? and b.status=1 order by `order` ",[$arr['group']]); $result['list']=$menulist; $result['status']='ok'; }else{ $query=DB::select("select `group` from users where id =? ",[$arr['userid']]); if($query[0]->group==$arr['group']){ - $menulist=DB::select("select b.id,b.pid,b.order,b.icon, b.name,b.url from group_menu as a left join menu as b on a.menu_id=b.id where a.group_id =? and b.status=1 and b.is_menu=1",[$arr['group']]); - + $menulist=DB::select("select b.id,b.pid,b.order,b.icon, b.name,b.url from group_menu as a left join menu as b on a.menu_id=b.id where a.group_id =? and b.status=1 order by `order`",[$arr['group']]); $result['list']=$menulist; $result['status']='ok'; diff --git a/Laravel/resources/views/components/header.blade.php b/Laravel/resources/views/components/header.blade.php index 5db9d4b..d44cf21 100644 --- a/Laravel/resources/views/components/header.blade.php +++ b/Laravel/resources/views/components/header.blade.php @@ -39,8 +39,8 @@
-
4000-3333-2222
-
客服在线时间:07:30 - 22:00
+
{{$public_config['configs']['客服电话']}}
+
客服在线时间:{{$public_config['configs']['客服在线时间']}}
公立医院授权
diff --git a/Laravel/resources/views/home/home.blade.php b/Laravel/resources/views/home/home.blade.php index 195d227..115cde6 100644 --- a/Laravel/resources/views/home/home.blade.php +++ b/Laravel/resources/views/home/home.blade.php @@ -12,23 +12,32 @@
@@ -106,11 +115,13 @@
部分合作医院&机构
- @for($i = 0; $i < 8; $i++) -
- -
- @endfor + @foreach($link_units as $key=>$link_unit) + @if($link_unit->type == 1 and $key<8) +
+ +
+ @endif + @endforeach
@@ -122,11 +133,13 @@
部分合作企业&单位
- @for($i = 0; $i < 8; $i++) -
- -
- @endfor + @foreach($link_units as $key=>$link_unit) + @if($link_unit->type == 2 and $key<8) +
+ +
+ @endif + @endforeach
diff --git a/Laravel/resources/views/home/home.css b/Laravel/resources/views/home/home.css index cf074c1..e65318f 100644 --- a/Laravel/resources/views/home/home.css +++ b/Laravel/resources/views/home/home.css @@ -16,7 +16,7 @@ .hospital_item_wrapper { width: 280px; height: 100px; - border: 1px solid #8c939d; + border: 1px solid #ddd; margin: 10px 5px; overflow: hidden; } @@ -28,7 +28,22 @@ object-fit: contain; } +.hospital_item_wrapper:hover { + animation: shadow-drop-1-center 0.2s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; +} +@keyframes shadow-drop-1-center { + 0% { + transform: translateZ(0); + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + + } + 100% { + transform: translateZ(50px); + box-shadow: 0 0 20px 0px rgba(0, 0, 0, 0.2); + border: 1px solid #fff; + } +} .hospital_item_blank_wrapper { width: 290px; } @@ -56,6 +71,10 @@ height: 150px; margin: 5px; } +.ad_item_wrapper:hover { + animation: shadow-drop-2-center 0.2s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; +} + .ad_item_wrapper img { width: 380px; @@ -106,6 +125,9 @@ padding-left: 30px; margin-top: 20px; } +.banner_menu_item_wrapper:hover { + color:#333; +} .banner_wrapper { width: 1200px; @@ -190,6 +212,24 @@ height: 200px; object-fit: cover; } +.combo_cover_wrapper:hover { + animation: shadow-drop-2-center 0.2s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; +} + + +@keyframes shadow-drop-2-center { + 0% { + transform: translateZ(0); + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + margin-top: 0px; + } + 100% { + transform: translateZ(50px); + box-shadow: 0 0 20px 0px rgba(0, 0, 0, 0.35); + margin-top: -8px; + } +} + .combo_item_wrapper { width: 25%; @@ -207,3 +247,22 @@ width: 1200px; margin: 20px auto 0; } +.demonstration { + color: var(--el-text-color-secondary); +} + +.el-carousel__item h3 { + color: #475669; + opacity: 0.75; + line-height: 450px; + margin: 0; + text-align: center; +} + +.el-carousel__item:nth-child(2n) { + background-color: #99a9bf; +} + +.el-carousel__item:nth-child(2n + 1) { + background-color: #d3dce6; +} diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index 8c8d609..b1684c9 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -59,12 +59,23 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { Route::post('admin/HospitalGetList','App\Http\Controllers\API\Admin\YeWu\HospitalController@GetList'); Route::post('admin/GetBaseInfoDetail','App\Http\Controllers\API\Admin\YeWu\HospitalController@GetBaseInfoDetail'); Route::post('admin/SaveCacheInfo','App\Http\Controllers\API\Admin\YeWu\HospitalController@SaveCacheInfo'); - - + Route::post('admin/ComboGetList','App\Http\Controllers\API\Admin\YeWu\ComboController@GetList');//获取套餐列表 + Route::post('admin/ComboGetDetail','App\Http\Controllers\API\Admin\YeWu\ComboController@GetDetail');//获取套餐详情 + Route::post('admin/ComboSave','App\Http\Controllers\API\Admin\YeWu\ComboController@Save');//获取套餐详情保存 + Route::post('admin/WebMngrSaveLunBo','App\Http\Controllers\API\Admin\YeWu\WebMngrController@SaveLunBo');//保存轮播 + Route::post('admin/GetAllConfigs','App\Http\Controllers\API\Admin\YeWu\WebMngrController@GetAllConfigs'); + Route::post('admin/SaveWebConfig','App\Http\Controllers\API\Admin\YeWu\WebMngrController@SaveWebConfig'); + Route::post('admin/NavGetList','App\Http\Controllers\API\Admin\YeWu\NavController@GetList'); + Route::post('admin/NavSave','App\Http\Controllers\API\Admin\YeWu\NavController@Save'); + Route::post('admin/NavDel','App\Http\Controllers\API\Admin\YeWu\NavController@Del'); + Route::post('admin/LinkUnitsGetList','App\Http\Controllers\API\Admin\YeWu\LinkUnitsController@GetList'); + Route::post('admin/LinkUnitsSave','App\Http\Controllers\API\Admin\YeWu\LinkUnitsController@Save'); + Route::post('admin/LinkUnitsDel','App\Http\Controllers\API\Admin\YeWu\LinkUnitsController@Del'); }); Route::post('admin/UpdateCombo','App\Http\Controllers\API\Admin\YeWu\ComboController@UpdateCombo')->middleware('log'); +Route::post('admin/UpdateItem','App\Http\Controllers\API\Admin\YeWu\ItemController@UpdateItem')->middleware('log'); diff --git a/admin/package-lock.json b/admin/package-lock.json index c2d3307..1faf739 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -10,6 +10,8 @@ "dependencies": { "@element-plus/icons-vue": "^2.1.0", "@vueuse/core": "^10.4.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", "axios": "^1.5.1", "echarts": "^5.4.3", "element-plus": "^2.3.14", @@ -48,6 +50,17 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@ctrl/tinycolor": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", @@ -603,6 +616,16 @@ "integrity": "sha512-EF3948ckf3f5uPgYbQ6GhyA56Dmv8yg0+ir+BroRjwdxyZJsekhZzawOecC2rOTPCz173t7ZcR1HHZu0dZgOCw==", "dev": true }, + "node_modules/@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==" + }, + "node_modules/@types/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@types/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==" + }, "node_modules/@types/lodash": { "version": "4.14.199", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", @@ -621,6 +644,56 @@ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" }, + "node_modules/@uppy/companion-client": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-2.2.2.tgz", + "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==", + "dependencies": { + "@uppy/utils": "^4.1.2", + "namespace-emitter": "^2.0.1" + } + }, + "node_modules/@uppy/core": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.3.4.tgz", + "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", + "dependencies": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^2.1.1", + "@uppy/utils": "^4.1.3", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "nanoid": "^3.1.25", + "preact": "^10.5.13" + } + }, + "node_modules/@uppy/store-default": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@uppy/store-default/-/store-default-2.1.1.tgz", + "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==" + }, + "node_modules/@uppy/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==", + "dependencies": { + "lodash.throttle": "^4.1.1" + } + }, + "node_modules/@uppy/xhr-upload": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", + "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", + "dependencies": { + "@uppy/companion-client": "^2.2.2", + "@uppy/utils": "^4.1.2", + "nanoid": "^3.1.25" + }, + "peerDependencies": { + "@uppy/core": "^2.3.3" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", @@ -838,6 +911,156 @@ } } }, + "node_modules/@wangeditor/basic-modules": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", + "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", + "dependencies": { + "is-url": "^1.2.4" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/code-highlight": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz", + "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==", + "dependencies": { + "prismjs": "^1.23.0" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/core": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz", + "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", + "dependencies": { + "@types/event-emitter": "^0.3.3", + "event-emitter": "^0.3.5", + "html-void-elements": "^2.0.0", + "i18next": "^20.4.0", + "scroll-into-view-if-needed": "^2.2.28", + "slate-history": "^0.66.0" + }, + "peerDependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor": { + "version": "5.1.23", + "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz", + "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", + "dependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "^1.1.7", + "@wangeditor/code-highlight": "^1.0.3", + "@wangeditor/core": "^1.1.19", + "@wangeditor/list-module": "^1.0.5", + "@wangeditor/table-module": "^1.1.4", + "@wangeditor/upload-image-module": "^1.0.2", + "@wangeditor/video-module": "^1.1.4", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor-for-vue": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", + "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", + "peerDependencies": { + "@wangeditor/editor": ">=5.1.0", + "vue": "^3.0.5" + } + }, + "node_modules/@wangeditor/list-module": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-1.0.5.tgz", + "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/table-module": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-1.1.4.tgz", + "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/upload-image-module": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", + "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", + "peerDependencies": { + "@uppy/core": "^2.0.3", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "1.x", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.foreach": "^4.5.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/video-module": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-1.1.4.tgz", + "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", + "peerDependencies": { + "@uppy/core": "^2.1.4", + "@uppy/xhr-upload": "^2.0.7", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -1063,6 +1286,11 @@ "node": ">= 0.8" } }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1100,6 +1328,18 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", @@ -1207,6 +1447,14 @@ "node": ">=6.0.0" } }, + "node_modules/dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "dependencies": { + "ssr-window": "^3.0.0-alpha.1" + } + }, "node_modules/echarts": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", @@ -1344,6 +1592,43 @@ "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -1542,6 +1827,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -1606,6 +1905,15 @@ "node": ">=0.10.0" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -1629,6 +1937,14 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1884,6 +2200,15 @@ "node": ">=8" } }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", @@ -1893,6 +2218,14 @@ "node": ">=14.18.0" } }, + "node_modules/i18next": { + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz", + "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -1902,6 +2235,15 @@ "node": ">= 4" } }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -1987,6 +2329,11 @@ "node": ">=0.10.0" } }, + "node_modules/is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==" + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -2023,6 +2370,14 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", @@ -2035,6 +2390,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -2155,12 +2515,47 @@ "lodash-es": "*" } }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2225,6 +2620,14 @@ "node": ">= 0.6" } }, + "node_modules/mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==", + "dependencies": { + "wildcard": "^1.1.0" + } + }, "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", @@ -2266,6 +2669,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -2289,6 +2697,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, "node_modules/normalize-wheel-es": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", @@ -2583,6 +2996,15 @@ "node": ">=4" } }, + "node_modules/preact": { + "version": "10.22.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.1.tgz", + "integrity": "sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2619,6 +3041,14 @@ "node": ">=6.0.0" } }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -2670,6 +3100,11 @@ } ] }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2860,6 +3295,14 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -2907,6 +3350,35 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/slate": { + "version": "0.72.8", + "resolved": "https://registry.npmjs.org/slate/-/slate-0.72.8.tgz", + "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", + "dependencies": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-history": { + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.66.0.tgz", + "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==", + "engines": { + "node": ">=12.17.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -2915,6 +3387,11 @@ "node": ">=0.10.0" } }, + "node_modules/ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2997,6 +3474,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "node_modules/titleize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", @@ -3027,6 +3509,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3200,6 +3687,11 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, + "node_modules/wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==" + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/admin/package.json b/admin/package.json index a35e531..0fad301 100644 --- a/admin/package.json +++ b/admin/package.json @@ -12,6 +12,8 @@ "dependencies": { "@element-plus/icons-vue": "^2.1.0", "@vueuse/core": "^10.4.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", "axios": "^1.5.1", "echarts": "^5.4.3", "element-plus": "^2.3.14", diff --git a/admin/src/api/api.js b/admin/src/api/api.js index 42a122e..5cdd24f 100644 --- a/admin/src/api/api.js +++ b/admin/src/api/api.js @@ -145,4 +145,52 @@ export const UpdateCombo = (data={}) => { //更新缓存 export const SaveCacheInfo = (data={}) => { return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveCacheInfo',data:data}) -} \ No newline at end of file +} +//获取套餐列表 +export const ComboGetList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboGetList',data:data}) +} +//获取套餐详情 +export const ComboGetDetail = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboGetDetail',data:data}) +} +//保存套餐详情 +export const ComboSave = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboSave',data:data}) +} +//保存轮播 +export const WebMngrSaveLunBo = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/WebMngrSaveLunBo',data:data}) +} +//获取轮播 +export const GetAllConfigs = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetAllConfigs',data:data}) +} +//保存网站配置信息 +export const SaveWebConfig = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveWebConfig',data:data}) +} +//获取网站导航菜单列表 +export const NavGetList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/NavGetList',data:data}) +} +//保存网站导航菜单 +export const NavSave = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/NavSave',data:data}) +} +//删除网站导航 +export const NavDel = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/NavDel',data:data}) +} +//获取合作单位列表 +export const LinkUnitsGetList = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/LinkUnitsGetList',data:data}) +} +//保存合作单位信息 +export const LinkUnitsSave = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/LinkUnitsSave',data:data}) +} +//删除合作单位信息 +export const LinkUnitsDel = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/LinkUnitsDel',data:data}) +} diff --git a/admin/src/router/index.js b/admin/src/router/index.js index 7607b92..dc7167c 100644 --- a/admin/src/router/index.js +++ b/admin/src/router/index.js @@ -98,6 +98,34 @@ const router = createRouter({ meta: { title: '医院管理' } + },{ + path: '/combo/combomngr', + name: 'ComboComboMngr', + component: () => import('../views/Combo/ComboMngr.vue'), + meta: { + title: '套餐管理' + } + },{ + path: '/webmngr/pageindex', + name: 'WebMngrPageIndex', + component: () => import('../views/WebMngr/PageIndex.vue'), + meta: { + title: '首页设置' + } + },{ + path: '/webmngr/nav', + name: 'WebMngrNav', + component: () => import('../views/WebMngr/Nav.vue'), + meta: { + title: '导航设置' + } + },{ + path: '/webmngr/linkunits', + name: 'WebMngrLinkUnits', + component: () => import('../views/WebMngr/LinkUnits.vue'), + meta: { + title: '合作单位机构' + } }] }, diff --git a/admin/src/views/Combo/ComboMngr.vue b/admin/src/views/Combo/ComboMngr.vue new file mode 100644 index 0000000..eff0717 --- /dev/null +++ b/admin/src/views/Combo/ComboMngr.vue @@ -0,0 +1,233 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/WebMngr/LinkUnits.vue b/admin/src/views/WebMngr/LinkUnits.vue new file mode 100644 index 0000000..416b4c0 --- /dev/null +++ b/admin/src/views/WebMngr/LinkUnits.vue @@ -0,0 +1,198 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/WebMngr/Nav.vue b/admin/src/views/WebMngr/Nav.vue new file mode 100644 index 0000000..0b86a98 --- /dev/null +++ b/admin/src/views/WebMngr/Nav.vue @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/admin/src/views/WebMngr/PageIndex.vue b/admin/src/views/WebMngr/PageIndex.vue new file mode 100644 index 0000000..66ffce2 --- /dev/null +++ b/admin/src/views/WebMngr/PageIndex.vue @@ -0,0 +1,213 @@ + + + + + \ No newline at end of file