鹿和sa0ChunLuyu 1 year ago
commit 1d8483168f

@ -0,0 +1,59 @@
<?php
namespace App\Http\Controllers\API\Admin\YeWu;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AnalysisTypeController extends Controller
{
public function GetList(){
$list = DB::table('analysis_types')->get();
return \Yz::Return(true,"查询完成",['list'=>$list]);
}
public function GetDetail()
{
$id = request('id');
$detail = DB::table('analysis_types')->where('id',$id)->first();
if(!!$detail){
$detail->range=json_decode($detail->range,true);
if(isset($detail->range['l'])){
$detail->range['l']=implode(',',$detail->range['l']);
}
if(isset($detail->range['r'])){
$detail->range['r']=implode(',',$detail->range['r']);
}
}
return \Yz::Return(true,"查询完成",['info'=>$detail]);
}
public function Save(){
$info = request('Info');
$range=[
"s"=>isset($info['range']['s'])?$info['range']['s']:0,
"r"=>isset($info['range']['r'])?explode(',', $info['range']['r']):[],
"l"=>isset($info['range']['l'])?explode(',', $info['range']['l']):[],
];
$data=[
'name'=>isset($info['name'])?$info['name']:'',
'range'=>json_encode($range,JSON_UNESCAPED_UNICODE),
'desc'=>isset($info['desc'])?$info['desc']:'',
'color'=>isset($info['color'])?$info['color']:'#78A155',
'mark'=>isset($info['mark'])?$info['mark']:'',
'content'=>isset($info['content'])?$info['content']:'',
'type'=>isset($info['type'])?$info['type']:0,
'status'=>isset($info['status'])?$info['status']:0,
];
if(isset($info['id']) and $info['id']>0){
$u= DB::table('analysis_types')->where('id',$info['id'])->update($data);
}else{
$u= DB::table('analysis_types')->insert($data);
}
if($u){
return \Yz::Return(true,"操作完成",[]);
}else{
return \Yz::echoError1("操作失败");
}
}
}

@ -28,4 +28,5 @@ class AnalysisTypeController extends Controller
} }
return \Yz::return(true,"查询完成",['list' => $analysis_list]); return \Yz::return(true,"查询完成",['list' => $analysis_list]);
} }
} }

@ -28,7 +28,7 @@ class PlanController extends Controller
$list=DB::table('plans') $list=DB::table('plans')
->whereBetween('date',[$first_day,$last_day])->whereIn('status',[1]) ->whereBetween('date',[$first_day,$last_day])->whereIn('status',[1])
->whereRaw('CONCAT(date, " ", time) >?', [$currentDateTime]) ->whereRaw('CONCAT(date, " ", time) >?', [$currentDateTime])
->whereRaw('JSON_CONTAINS(checkup_type_id, ?, "$")', [$checkup_type_id]) ->whereRaw('JSON_CONTAINS(checkup_type_id, ?, "$")', [json_encode($checkup_type_id)])
->where(['hospital_id'=>$hospital_id,'type'=>1]) ->where(['hospital_id'=>$hospital_id,'type'=>1])
->whereIn('use_type',[0,$use_type]); ->whereIn('use_type',[0,$use_type]);
// if($use_type==1){ // if($use_type==1){
@ -96,7 +96,7 @@ class PlanController extends Controller
$list=DB::table('plans') $list=DB::table('plans')
->where('date',$date)->whereIn('status',[1,2]) ->where('date',$date)->whereIn('status',[1,2])
->whereRaw('CONCAT(date, " ", time) >?', [$currentDateTime]) ->whereRaw('CONCAT(date, " ", time) >?', [$currentDateTime])
->whereRaw('JSON_CONTAINS(checkup_type_id, ?, "$")', [$checkup_type_id]) ->whereRaw('JSON_CONTAINS(checkup_type_id, ?, "$")',[$checkup_type_id])
->where(['hospital_id'=>$hospital_id,'type'=>1]) ->where(['hospital_id'=>$hospital_id,'type'=>1])
->whereIn('use_type',[0,$use_type]); ->whereIn('use_type',[0,$use_type]);
if ($use_type == 1) { if ($use_type == 1) {

@ -115,6 +115,9 @@ Route::group(['middleware' => ['checktoken', 'log'], 'prefix' => 'v1'], function
Route::post('admin/ArticleSave', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@Save');//文章保存 Route::post('admin/ArticleSave', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@Save');//文章保存
Route::post('admin/ArticleGetDetail', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@GetDetail');//文章详情 Route::post('admin/ArticleGetDetail', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@GetDetail');//文章详情
Route::post('admin/ArticleGetDel', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@Del');//文章详情 Route::post('admin/ArticleGetDel', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@Del');//文章详情
Route::post('admin/AnalysisTypeGetList', 'App\Http\Controllers\API\Admin\YeWu\AnalysisTypeController@GetList');//趋势项目
Route::post('admin/AnalysisTypeGetDetail', 'App\Http\Controllers\API\Admin\YeWu\AnalysisTypeController@GetDetail');//趋势项目
Route::post('admin/AnalysisTypeSave', 'App\Http\Controllers\API\Admin\YeWu\AnalysisTypeController@Save');//趋势项目

@ -360,4 +360,17 @@ export const QuestionListListAction = (data = {}) => {
export const QuestionSelectAction = (data = {}) => { export const QuestionSelectAction = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/question/select`, data: data }) return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/question/select`, data: data })
}
//趋势项目列表
export const AnalysisTypeGetList = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/AnalysisTypeGetList`, data: data })
}
//趋势项目详情
export const AnalysisTypeGetDetail = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/AnalysisTypeGetDetail`, data: data })
}
//趋势项目保存
export const AnalysisTypeSave = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/AnalysisTypeSave`, data: data })
} }

@ -204,6 +204,13 @@ const router = createRouter({
meta: { meta: {
title: '套餐适用人群' title: '套餐适用人群'
} }
},{
path: '/h5mngr/analysistypes',
name: 'H5MngrAnalysisTypes',
component: () => import('../views/H5Mngr/AnalysisTypes.vue'),
meta: {
title: '趋势分析项目'
}
}] }]
}, },

@ -0,0 +1,203 @@
<template>
<div>
<div class="head">
<div class="head">
<el-row>
<!-- <el-form-item>
<el-input v-model="searchInfo.name" placeholder="请输入类型名称" style="margin-left: 10px;" />
</el-form-item>
<el-button type="primary" @click="GetList()" style="margin-left: 10px;">查询</el-button> -->
<el-button type="success" @click="Add()" style="margin-left: 10px;">添加</el-button>
</el-row>
</div>
</div>
<el-table :data="tableData" style="width: 100%;" row-key="id" v-loading="loading">
<el-table-column prop="id" label="Id" width="100" v-if="false" />
<el-table-column prop="name" label="名称" />
<el-table-column prop="desc" label="说明" />
<el-table-column prop="type" label="分类">
<template #default="scope">
<span v-if="scope.row.type==1"></span>
<span v-if="scope.row.type==2"></span>
<span v-if="scope.row.type==3"></span>
</template>
</el-table-column>
<el-table-column prop="status" label="状态">
<template #default="scope">
<el-tag v-if="scope.row.status==1" class="ml-2" type="success"></el-tag>
<el-tag v-if="scope.row.status==0" class="ml-2" type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column prop="" label="操作" width="150">
<template #default="scope">
<el-button type="primary" @click="Edit(scope.row)" size="small">修改</el-button>
<!-- <el-button type="danger" @click="Del(scope.row.id)" size="small">删除</el-button> -->
</template>
</el-table-column>
</el-table>
<el-dialog v-model="dialogVisible" title="适应人群设置">
<div class="chuansuokuang" v-loading="loading">
<el-form :model="Info" label-width="150" style="max-width: 600px">
<el-form-item label="名称">
<el-input v-model="Info.name" />
</el-form-item>
<el-form-item v-if="Info.range" label="折线图步长">
<el-input v-model="Info.range.s" />
</el-form-item>
<el-form-item v-if="Info.range" label="取值范围">
<el-input v-model="Info.range.r" />
取值范围 正常值用 min,max 代替数值用英文逗号隔开
</el-form-item>
<el-form-item v-if="Info.range" label="仪表盘标签">
<el-input v-model="Info.range.l" />
仪表盘标签用英文逗号隔开
</el-form-item>
<el-form-item label="颜色">
<el-input v-model="Info.color" />
</el-form-item>
<el-form-item label="项目标识">
<el-input v-model="Info.mark" />
</el-form-item>
<el-form-item label="临床意义">
<el-input type="textarea" v-model="Info.content" />
</el-form-item>
<el-form-item label="说明">
<el-input v-model="Info.desc" />
</el-form-item>
<el-form-item label="分类">
<el-radio-group v-model="Info.type">
<el-radio :label="1">临床生化</el-radio>
<el-radio :label="2">临床免疫</el-radio>
<el-radio :label="3">常规</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态">
<el-switch v-model="Info.status" size="large" active-text="" inactive-text=""
:active-value="1" :inactive-value="0" />
</el-form-item>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="Save()">
确定
</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue';
import {
ElMessage,
ElMessageBox
} from 'element-plus'
import {
AnalysisTypeGetList,
AnalysisTypeSave,
AnalysisTypeGetDetail
} from '@/api/api.js'
let loading = ref(false)
let searchInfo = ref({})
let tableData = ref([])
let currentPage = ref(1) //
let pageSize = ref(15) //
let total = 0 //
const PageSizeChange = (e) => { //
pageSize.value = e
GetList()
}
const PageCurrentChange = (e) => { //
currentPage.value = e
GetList()
}
const GetList = () => {
loading.value = true
AnalysisTypeGetList({
searchInfo: searchInfo.value,
page: currentPage.value,
pageSize: pageSize.value
}).then(res => {
loading.value = false
if (res.status) {
tableData.value = res.data.list
total = res.data.count
} else {
ElMessage.error(res.msg)
}
})
}
let Info = ref({});
let dialogVisible = ref(false);
const Add = () => {
Info.value = {}
Info.value.id = 0
Info.value.range = {}
Info.value.status = 1
dialogVisible.value = true
}
const Save = () => {
loading.value = true
AnalysisTypeSave({
Info: Info.value
}).then(res => {
loading.value = false
if (res.status) {
dialogVisible.value = false
GetList()
} else {
ElMessage.error(res.msg)
}
})
}
const Edit = (row) => {
dialogVisible.value = true
GetDetailFunc(row.id)
}
//
const GetDetailFunc = (id) => {
loading.value = true
AnalysisTypeGetDetail({
id: id
}).then(res => {
loading.value = false
if (res.status) {
Info.value = res.data.info
} else {
ElMessage.error(res.msg)
}
})
}
const Del = (id) => {
loading.value = true
ComboCrowdDel({
id: id
}).then(res => {
loading.value = false
if (res.status) {
GetList()
} else {
ElMessage.error(res.msg)
}
})
}
onMounted(() => {
GetList()
})
</script>
<style scoped>
.head {
margin: 10px auto;
}
</style>

@ -281,7 +281,7 @@
</view> </view>
</view> </view>
</view> </view>
<view class="botm_blank_wrapper" style="font-size: 18rpx;color: #ccc;">10210900</view> <view class="botm_blank_wrapper" style="font-size: 18rpx;color: #ccc;">10221910</view>
</view> </view>
</view> </view>
</template> </template>

@ -361,9 +361,13 @@ onShow(() => {
} }
}); });
const toRouter = (url, status) => { const toRouter = (url, status, index) => {
if (status) { if (status) {
console.log(index);
yytjInfo.value.nmrIndex = index;
console.log(yytjInfo.value);
uni.setStorageSync("yytjInfoS", yytjInfo.value); uni.setStorageSync("yytjInfoS", yytjInfo.value);
$store.setYytjInfo(yytjInfo.value);
} }
uni.navigateTo({ uni.navigateTo({
url: url, url: url,
@ -618,13 +622,13 @@ const toRouter = (url, status) => {
更改预约人 更改预约人
</button> </button>
</view> </view>
<view <view class="text-24rpx text-#040404 mb-30rpx">
class="text-24rpx text-#040404 mb-30rpx"
@click="toRouter('/pages/main/yytjsj/yytjsj', 1)"
>
<view <view
class="mb-20rpx between" class="mb-20rpx between"
v-for="(val, index) in yytjInfo?.nmr_list" v-for="(val, index) in yytjInfo?.nmr_list"
@click="
toRouter('/pages/main/yytjsj/yytjsj', 1, val.time ? index : 0)
"
:key="index" :key="index"
v-if="yytjInfo?.nmr_list?.length" v-if="yytjInfo?.nmr_list?.length"
> >
@ -638,7 +642,10 @@ const toRouter = (url, status) => {
val.time ? "重新预约" : "预约时间" val.time ? "重新预约" : "预约时间"
}}</text> }}</text>
</view> </view>
<view class="mb-20rpx between"> <view
class="mb-20rpx between"
@click="toRouter('/pages/main/yytjsj/yytjsj', 1, 0)"
>
<text>体检医生</text> <text>体检医生</text>
<text class="text-30rpx">{{ <text class="text-30rpx">{{
yytjInfo?.doctor_name || "选择医生" yytjInfo?.doctor_name || "选择医生"

@ -58,8 +58,9 @@ const getnmrList = async () => {
itemsInfo.value = response.data.items_info; itemsInfo.value = response.data.items_info;
truePrice.value = response.data.true_price; truePrice.value = response.data.true_price;
currentDate.value = getToday(); //huo currentDate.value = getToday(); //huo
console.log(yytjInfo.value, "cfvghbjnkmljhbgvfcgvhbjnk");
if (!yytjInfo.value?.nmr_list?.length) { if (!yytjInfo.value?.nmr_list?.length) {
yytjInfo.value.nmrIndex = 0;
yytjInfo.value.nmr_list = response.data.nmr_list.map((val) => { yytjInfo.value.nmr_list = response.data.nmr_list.map((val) => {
return { return {
...val, ...val,
@ -74,8 +75,9 @@ const getnmrList = async () => {
id: "", id: "",
}); });
} }
console.log(yytjInfo.value.nmr_list[0]); nmrIndex.value = yytjInfo.value.nmrIndex;
xmmcClick(yytjInfo.value.nmr_list[0], 0); console.log(yytjInfo.value.nmr_list[nmrIndex.value]);
xmmcClick(yytjInfo.value.nmr_list[nmrIndex.value], nmrIndex.value);
uni.hideLoading(); uni.hideLoading();
}); });
}; };
@ -508,7 +510,7 @@ onShow(() => {
</view> </view>
</view> </view>
</view> </view>
<view class="center mt-20rpx text-#8B8B8B text-24rpx"> <!-- <view class="center mt-20rpx text-#8B8B8B text-24rpx">
<text>体检医生 - </text> <text>体检医生 - </text>
<text <text
class="ml-10rpx text-#0E0E0E center mr-auto" class="ml-10rpx text-#0E0E0E center mr-auto"
@ -517,7 +519,7 @@ onShow(() => {
{{ yytjInfo?.doctor_name || "请选择" }} {{ yytjInfo?.doctor_name || "请选择" }}
<uni-icons type="right" size="14"></uni-icons> <uni-icons type="right" size="14"></uni-icons>
</text> </text>
</view> </view> -->
</view> </view>
<view <view
style="box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(0, 0, 0, 0.04)" style="box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(0, 0, 0, 0.04)"
@ -641,6 +643,16 @@ onShow(() => {
{{ item.time }} {{ item.time }}
</view> </view>
</view> </view>
<view
class="p-20rpx pl-10rpx pr-10rpx rounded-15rpx between"
@click="clickDoctor"
>
<text>体检医生</text>
<text class="ml-10rpx text-#0E0E0E center">
{{ yytjInfo?.doctor_name || "请选择" }}
<uni-icons type="right" size="14"></uni-icons>
</text>
</view>
</view> </view>
</view> </view>
</view> </view>

Loading…
Cancel
Save