后台管理问答、获取问答题目接口

wenjuan
yanzai 1 year ago
parent 0b18348f7f
commit 6fe042afc9

@ -15,9 +15,64 @@ class QuestionController extends Controller
if (!isset($searchInfo['q_type'])) return \Yz::echoError1("问卷类型不能为空"); if (!isset($searchInfo['q_type'])) return \Yz::echoError1("问卷类型不能为空");
$list = DB::table('questions') $list = DB::table('questions')
->where(['hospital_id'=>$searchInfo['hospital_id'], ->where(['hospital_id'=>$searchInfo['hospital_id'],
'q_type'=>$searchInfo['q_type'] 'q_type'=>$searchInfo['q_type'],
'is_del'=>0,
])->orderBy('order','asc')->get(); ])->orderBy('order','asc')->get();
return \Yz::Return(true,"查询成功",['list'=>$list]); return \Yz::Return(true,"查询成功",['list'=>$list]);
}
public function Save()
{
$QuestionInfo = request('QuestionInfo');
$params = [
'hospital_id'=>isset($QuestionInfo['hospital_id'])?$QuestionInfo['hospital_id']:null,
'question'=>isset($QuestionInfo['question'])?$QuestionInfo['question']:null,
'content'=>(isset($QuestionInfo['content']) and !empty($QuestionInfo['content']))?json_encode($QuestionInfo['content'],JSON_UNESCAPED_UNICODE):null,
'type'=>isset($QuestionInfo['type'])?$QuestionInfo['type']:null,
'status'=>isset($QuestionInfo['status'])?$QuestionInfo['status']:null,
'order'=>isset($QuestionInfo['order'])?$QuestionInfo['order']:null,
'q_type'=>isset($QuestionInfo['q_type'])?$QuestionInfo['q_type']:null,
];
$requiredFields = [
'hospital_id','question','content','type','status','order','q_type'
];
// 判断是否为空
foreach ($requiredFields as $field) {
if (!isset($params[$field]) || $params[$field] === null) {
return \Yz::echoError1('参数' . $field . '不能为空');
}
}
if(isset($QuestionInfo['id']) and $QuestionInfo['id']<>0){
$insert=DB::table('questions')->where(['id'=>$QuestionInfo['id'],'is_del'=>0])->update($params);
}else{
$insert=DB::table('questions')->insert($params);
}
if($insert){
return \Yz::Return(true,'操作成功',[]);
}else{
return \Yz::echoError1('操作失败');
}
}
public function GetDetail()
{
$id = request('id');
$info=DB::table('questions')->where(['id'=>$id,'is_del'=>0])->first();
if(!!$info){
$info->content=json_decode($info->content,true);
}
return \Yz::Return(true,'查询完成',$info);
}
public function Del()
{
$id = request('id');
$del=DB::table('questions')->where(['id'=>$id])->update([
'is_del'=>1
]);
if($del){
return \Yz::Return(true,'操作成功',[]);
}else{
return \Yz::echoError1('操作失败');
}
} }
} }

@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers\API\H5;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class QuestionController extends Controller
{
public function GetList()
{
$hospital_id = request('hospital_id');
$q_type = request('q_type');
if (!isset($hospital_id)) return \Yz::echoError1("医院id不能为空");
if (!isset($q_type)) return \Yz::echoError1("问卷类型不能为空");
$list = DB::table('questions')
->where(['hospital_id'=>$hospital_id,
'q_type'=>$q_type,
'status'=>1,
'is_del'=>0,
])->orderBy('order','asc')->get();
foreach ($list as $key=>$item){
$item->content=json_decode($item->content,true);
}
return \Yz::Return(true,"查询成功",['list'=>$list]);
}
}

@ -78,6 +78,9 @@ Route::group(['middleware' => ['checktoken', 'log'], 'prefix' => 'v1'], function
Route::post('admin/ComboCrowdGetList', 'App\Http\Controllers\API\Admin\YeWu\ComboCrowdController@GetList');//套餐适应人群 Route::post('admin/ComboCrowdGetList', 'App\Http\Controllers\API\Admin\YeWu\ComboCrowdController@GetList');//套餐适应人群
Route::post('admin/OrderGetList', 'App\Http\Controllers\API\Admin\YeWu\OrderController@GetList');//订单列表 Route::post('admin/OrderGetList', 'App\Http\Controllers\API\Admin\YeWu\OrderController@GetList');//订单列表
Route::post('admin/QuestionGetList', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@GetList');//问答列表 Route::post('admin/QuestionGetList', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@GetList');//问答列表
Route::post('admin/QuestionSave', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@Save');//保存题目
Route::post('admin/QuestionGetDetail', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@GetDetail');//题目详情
Route::post('admin/QuestionDel', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@Del');//删除题目

@ -43,6 +43,7 @@ Route::group(['prefix' => 'H5'], function () {
Route::post('/GetPersonList', 'App\Http\Controllers\API\H5\UserController@GetPersonList');//获取名下全部体检人 Route::post('/GetPersonList', 'App\Http\Controllers\API\H5\UserController@GetPersonList');//获取名下全部体检人
Route::post('/SetDefaultPerson', 'App\Http\Controllers\API\H5\UserController@SetDefaultPerson');//设置默认体检人 Route::post('/SetDefaultPerson', 'App\Http\Controllers\API\H5\UserController@SetDefaultPerson');//设置默认体检人
Route::post('/HospitalIntroduction', 'App\Http\Controllers\API\H5\HospitalExtraController@Introduction');//医院简介 Route::post('/HospitalIntroduction', 'App\Http\Controllers\API\H5\HospitalExtraController@Introduction');//医院简介
Route::post('/QuestionGetList', 'App\Http\Controllers\API\H5\QuestionController@GetList');//问题列表
}); });

@ -221,3 +221,15 @@ export const OrderGetList = (data={}) => {
export const QuestionGetList = (data={}) => { export const QuestionGetList = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionGetList',data:data}) return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionGetList',data:data})
} }
//保存题目
export const QuestionSave = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionSave',data:data})
}
//获取题目详情
export const QuestionGetDetail = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionGetDetail',data:data})
}
//删除题目
export const QuestionDel = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionDel',data:data})
}

@ -10,13 +10,14 @@
:value="item.id" /> :value="item.id" />
</el-select> </el-select>
<el-button type="primary" style="margin-left: 10px;" @click="ChangeHospital()"></el-button> <el-button type="primary" style="margin-left: 10px;" @click="ChangeHospital()"></el-button>
<el-button type="success" style="margin-left: 10px;" @click="EditClick()"></el-button>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<el-form-item> <el-form-item>
问卷类型 问卷类型
<el-radio-group style="margin-left: 8px;" v-model="searchInfo.q_type" <el-radio-group style="margin-left: 8px;" v-model="searchInfo.q_type"
@change="QuestionTypeChange()"> @change="QuestionBigTypeChange()">
<el-radio-button :label="2">满意度调查</el-radio-button> <el-radio-button :label="2">满意度调查</el-radio-button>
<el-radio-button :label="1">健康问卷</el-radio-button> <el-radio-button :label="1">健康问卷</el-radio-button>
</el-radio-group> </el-radio-group>
@ -38,19 +39,74 @@
<el-tag v-if="scope.row.status==0" class="ml-2" type="danger"></el-tag> <el-tag v-if="scope.row.status==0" class="ml-2" type="danger"></el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="必填"> <!-- <el-table-column prop="" label="必填">
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.must==1" class="ml-2" type="success"></el-tag> <el-tag v-if="scope.row.must==1" class="ml-2" type="success"></el-tag>
<el-tag v-else class="ml-2"></el-tag> <el-tag v-else class="ml-2"></el-tag>
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column prop="order" label="排序" />
<el-table-column prop="created_at" label="创建时间" /> <el-table-column prop="created_at" label="创建时间" />
<el-table-column label="操作"> <el-table-column label="操作">
<template #default="scope"> <template #default="scope">
<el-button type="primary" @click="Add(scope.row)" :icon="Edit" circle /> <el-button type="primary" @click="EditClick(scope.row)" :icon="Edit" circle />
<el-button type="danger" @click="Del(scope.row)" :icon="Delete" circle />
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-dialog v-model="dialogVisible" title="编辑题目">
<div v-loading="loading">
<el-form :model="QuestionInfo" label-width="80px">
<el-form-item label="名称">
<el-input v-model="QuestionInfo.question" style="width: 300px;" />
</el-form-item>
<el-form-item label="类型">
<el-radio-group style="margin-left: 8px;" v-model="QuestionInfo.type"
@change="QuestionTypeChange">
<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-input v-model="QuestionInfo.Tempcontent" style="width: 300px;" />
<el-button v-if="QuestionInfo.type==2 ||QuestionInfo.type==3" type="primary"
style="margin-left: 10px;" @click="QuestionOptionAdd()">添加</el-button>
</el-form-item>
<el-form-item>
<div style="display: flex;flex-direction: column;">
<div style="display: flex;flex-direction: row;margin-bottom: 4px;" v-for="(item,index) in QuestionInfo.item"
:key="index">
<el-input v-model="QuestionInfo.item[index]" style="width: 300px;" />
<el-button type="primary" plain style="margin-left: 10px;" :disabled="index==0" @click="OptionUp(index)"
:icon="Top" />
<el-button type="primary" plain style="margin-left: 10px;" :disabled="index==QuestionInfo.item.length-1" @click="OptionDown(index)"
:icon="Bottom" />
<el-button type="danger" plain style="margin-left: 10px;" @click="OptionDel(index)"
:icon="Delete" />
</div>
</div>
</el-form-item>
<el-form-item label="状态">
<el-switch v-model="QuestionInfo.status" size="large" active-text="" inactive-text=""
:active-value="1" :inactive-value="0" />
</el-form-item>
<el-form-item label="排序">
<el-input-number v-model="QuestionInfo.order" :min="1" :max="999" />
</el-form-item>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="AddQuestion()">
确定
</el-button>
</span>
</template>
</el-dialog>
</div> </div>
</template> </template>
@ -60,14 +116,16 @@
onMounted onMounted
} from 'vue' } from 'vue'
import { import {
ElMessage ElMessage,ElMessageBox
} from 'element-plus' } from 'element-plus'
import { import {
HospitalGetEnableList, HospitalGetEnableList,
QuestionGetList QuestionGetList,QuestionSave,QuestionGetDetail,QuestionDel
} from '@/api/api.js' } from '@/api/api.js'
import { import {
Edit Edit,
Top,
Bottom,Delete
} from '@element-plus/icons-vue' } from '@element-plus/icons-vue'
let loading = ref(false) let loading = ref(false)
let tableData = ref([]) let tableData = ref([])
@ -87,8 +145,34 @@
const ChangeHospital = () => { const ChangeHospital = () => {
GetList() GetList()
} }
const QuestionTypeChange = () => { const QuestionBigTypeChange = () => {
GetList() GetList()
}
//
const QuestionTypeChange = () => {
QuestionInfo.value.Tempcontent = ''
QuestionInfo.value.item = []
}
//
const QuestionOptionAdd = () => {
if (QuestionInfo.value.Tempcontent.length > 0) {
QuestionInfo.value.item.push(QuestionInfo.value.Tempcontent)
QuestionInfo.value.Tempcontent = ''
}
}
const OptionUp=(index)=>{
let temp = QuestionInfo.value.item[index-1];
QuestionInfo.value.item[index-1]=QuestionInfo.value.item[index]
QuestionInfo.value.item[index]=temp
}
const OptionDown=(index)=>{
let temp = QuestionInfo.value.item[index+1];
QuestionInfo.value.item[index+1]=QuestionInfo.value.item[index]
QuestionInfo.value.item[index]=temp
}
const OptionDel=(index)=>{
QuestionInfo.value.item.splice(index, 1);
} }
let hospital_list = ref([]); let hospital_list = ref([]);
const GetEnableHospitalList_func = () => { const GetEnableHospitalList_func = () => {
@ -104,6 +188,90 @@
} }
}) })
} }
let QuestionInfo = ref({});
const EditClick = (row='') => {
dialogVisible.value = true
QuestionInfo.value.order = 1
QuestionInfo.value.status = 1
QuestionInfo.value.Tempcontent = ''
QuestionInfo.value.item = []
QuestionInfo.value.id=0
if(row!=''){
GetDetail(row.id);
}
}
//
const GetDetail=(id)=>{
loading.value = true
QuestionGetDetail({
id: id
}).then(res => {
loading.value = false
if (res.status) {
QuestionInfo.value=res.data
if(QuestionInfo.value.type===1){
QuestionInfo.value.Tempcontent=res.data.content
}else{
QuestionInfo.value.item=res.data.content
}
} else {
ElMessage.error(res.msg)
}
})
}
const Del=(row)=>{
ElMessageBox.confirm(
'确定删除吗?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
loading.value = true
QuestionDel({
id: row.id
}).then(res => {
loading.value = false
if (res.status) {
ElMessage({
type: 'success',
message: '删除完成',
})
GetList()
} else {
ElMessage.error(res.msg)
}
})
})
}
const AddQuestion=()=>{
QuestionInfo.value.q_type=searchInfo.value.q_type
QuestionInfo.value.hospital_id=searchInfo.value.hospital_id
QuestionInfo.value.content=QuestionInfo.value.item
if(QuestionInfo.value.type===1){
QuestionInfo.value.content=QuestionInfo.value.Tempcontent
}
console.log(QuestionInfo.value);
loading.value = true
QuestionSave({
QuestionInfo: QuestionInfo.value
}).then(res => {
loading.value = false
if (res.status) {
dialogVisible.value = false
GetList()
} else {
ElMessage.error(res.msg)
}
})
}
const GetList = () => { const GetList = () => {
loading.value = true loading.value = true
QuestionGetList({ QuestionGetList({
@ -118,7 +286,7 @@
}) })
} }
onMounted(() => { onMounted(() => {
searchInfo.value.q_type =2 searchInfo.value.q_type = 2
GetEnableHospitalList_func() GetEnableHospitalList_func()
}) })

Loading…
Cancel
Save