后台 趋势项目管理

main
yanzai 1 year ago
parent df6eec8d4b
commit 3df36aaf21

@ -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]);
} }
} }

@ -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');//趋势项目

@ -361,3 +361,16 @@ 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>
Loading…
Cancel
Save