更新 后台 健康问卷

main
鹿和sa0ChunLuyu 1 year ago
parent 2fe6a0ac8c
commit 22b4bef7a3

@ -0,0 +1,104 @@
<?php
namespace App\Http\Controllers\API\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class QuestionListController extends Controller
{
public function create(Request $request)
{
$name = $request->post('name');
$desc = $request->post('desc');
$icon = $request->post('icon');
$order = $request->post('order');
$question = $request->post('question');
if (!$question) {
return \Yz::echoError('请选择问卷');
}
if (!$name) {
return \Yz::echoError('请填写名称');
}
if (mb_strlen($name) > 20) {
return \Yz::echoError('名称过长');
}
if (mb_strlen($desc) > 200) {
return \Yz::echoError('说明过长');
}
if (!$icon) {
return \Yz::echoError('请上传图片');
}
if (mb_strlen($icon) > 200) {
return \Yz::echoError('图片链接过长');
}
DB::table('question_lists')->insert([
'name' => $name,
'desc' => $desc ?? '',
'icon' => $icon,
'order' => $order ?? 0,
'question' => $question ?? 0,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
return \Yz::Return(true, '操作完成');
}
public function update(Request $request)
{
$id = $request->post('id');
$name = $request->post('name');
$desc = $request->post('desc');
$icon = $request->post('icon');
$order = $request->post('order');
$question = $request->post('question');
if (!$question) {
return \Yz::echoError('请选择问卷');
}
if (!$name) {
return \Yz::echoError('请填写名称');
}
if (mb_strlen($name) > 20) {
return \Yz::echoError('名称过长');
}
if (mb_strlen($desc) > 200) {
return \Yz::echoError('说明过长');
}
if (!$icon) {
return \Yz::echoError('请上传图片');
}
if (mb_strlen($icon) > 200) {
return \Yz::echoError('图片链接过长');
}
DB::table('question_lists')->where('id', $id)->update([
'name' => $name,
'desc' => $desc ?? '',
'icon' => $icon,
'order' => $order ?? 0,
'question' => $question ?? 0,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
return \Yz::Return(true, '操作完成');
}
public function delete(Request $request)
{
$id = $request->post('id');
DB::table('question_lists')->where('id', $id)->delete();
return \Yz::Return(true, '操作完成');
}
public function list(Request $request)
{
$search = $request->post('search');
$db = DB::table('question_lists');
if (!!$search) {
$db->where('name', 'like', "%$search%");
}
$list = $db->orderBy('order', 'desc')->get();
return \Yz::Return(true, '操作完成', [
'list' => $list
]);
}
}

@ -85,4 +85,13 @@ class QuestionnaireController extends Controller
'list' => $list 'list' => $list
]); ]);
} }
public function select(Request $request)
{
$db = DB::table('questionnaires');
$list = $db->select(['id', 'name'])->where('type', '问卷调查')->orderBy('id', 'desc')->get();
return \Yz::Return(true, '操作完成', [
'list' => $list
]);
}
} }

@ -10,23 +10,17 @@ class QuestionnaireController extends Controller
{ {
public function list(Request $request) public function list(Request $request)
{ {
$list = [[ $db = DB::table('question_lists');
'id' => 3, $question = $db->orderBy('order', 'desc')->get();
'title' => '健康问卷完整版', $list = [];
'icon' => '/assets/h5/question1.png', foreach ($question as $key => $value) {
'desc' => '共20道题约3分钟', $list[] = [
], [ 'id' => $value->id,
'id' => 3, 'title' => $value->name,
'title' => '健康问卷简易版', 'icon' => $value->icon,
'icon' => '/assets/h5/question1.png', 'desc' => $value->desc,
'desc' => '共10道题约1分钟', ];
], [ }
'id' => 3,
'title' => '心理健康评估问卷',
'icon' => '/assets/h5/question2.png',
'desc' => '共15道题约2分钟',
]];
return \Yz::Return(true, '操作完成', [ return \Yz::Return(true, '操作完成', [
'list' => $list 'list' => $list
]); ]);

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class QuestionList extends Model
{
use HasFactory;
}

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateQuestionListsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('question_lists', function (Blueprint $table) {
$table->id();
$table->string('name', 50);
$table->string('desc', 200);
$table->string('icon', 200);
$table->bigInteger('order');
$table->bigInteger('question');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('question_lists');
}
}

@ -24,10 +24,16 @@ Route::post('/tokenRefresh', 'App\Http\Controllers\API\TokenController@TokenRefr
Route::group(['middleware' => ['checktoken', 'log'], 'prefix' => 'v1'], function () { //路由分组 Route::group(['middleware' => ['checktoken', 'log'], 'prefix' => 'v1'], function () { //路由分组
// 问卷调查 开始 // 问卷调查 开始
Route::post('admin/questionList/create', 'App\Http\Controllers\API\Admin\QuestionListController@create');
Route::post('admin/questionList/update', 'App\Http\Controllers\API\Admin\QuestionListController@update');
Route::post('admin/questionList/delete', 'App\Http\Controllers\API\Admin\QuestionListController@delete');
Route::post('admin/questionList/list', 'App\Http\Controllers\API\Admin\QuestionListController@list');
Route::post('admin/question/create', 'App\Http\Controllers\API\Admin\QuestionnaireController@create'); Route::post('admin/question/create', 'App\Http\Controllers\API\Admin\QuestionnaireController@create');
Route::post('admin/question/update', 'App\Http\Controllers\API\Admin\QuestionnaireController@update'); Route::post('admin/question/update', 'App\Http\Controllers\API\Admin\QuestionnaireController@update');
Route::post('admin/question/delete', 'App\Http\Controllers\API\Admin\QuestionnaireController@delete'); Route::post('admin/question/delete', 'App\Http\Controllers\API\Admin\QuestionnaireController@delete');
Route::post('admin/question/list', 'App\Http\Controllers\API\Admin\QuestionnaireController@list'); Route::post('admin/question/list', 'App\Http\Controllers\API\Admin\QuestionnaireController@list');
Route::post('admin/question/select', 'App\Http\Controllers\API\Admin\QuestionnaireController@select');
Route::post('admin/questionQuestion/select', 'App\Http\Controllers\API\Admin\QuestionQuestionController@select'); Route::post('admin/questionQuestion/select', 'App\Http\Controllers\API\Admin\QuestionQuestionController@select');
Route::post('admin/questionQuestion/create', 'App\Http\Controllers\API\Admin\QuestionQuestionController@create'); Route::post('admin/questionQuestion/create', 'App\Http\Controllers\API\Admin\QuestionQuestionController@create');

@ -1,322 +1,363 @@
import axios from "@/tools/axios.js"; import axios from '@/tools/axios.js'
//登录 //登录
export const Login = (data) => { export const Login = (data) => {
return axios({url:import.meta.env.VITE_APP_API+'admin/login',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'admin/login', data: data })
} }
//admin后台获取当前用户菜单 //admin后台获取当前用户菜单
export const GetAdminBaseMenuList = (data={}) => { export const GetAdminBaseMenuList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getBaseMenuList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getBaseMenuList', data: data })
} }
//Token刷新 //Token刷新
export const TokenRefresh = (data={}) => { export const TokenRefresh = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'tokenRefresh',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'tokenRefresh', data: data })
} }
//获取admin后台用户list //获取admin后台用户list
export const getAdminUserList = (data={}) => { export const getAdminUserList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getUserList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getUserList', data: data })
} }
//admin后台获取所有菜单列表 //admin后台获取所有菜单列表
export const GetAdminMenuList = (data={}) => { export const GetAdminMenuList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getMenuList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getMenuList', data: data })
} }
//admin后台获取一级菜单 //admin后台获取一级菜单
export const GetFatherMenuList = (data={}) => { export const GetFatherMenuList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetFatherMenuList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetFatherMenuList', data: data })
} }
//admin后台添加菜单 //admin后台添加菜单
export const AddMenu = (data={}) => { export const AddMenu = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/AddMenu',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/AddMenu', data: data })
} }
//admin后台编辑菜单 //admin后台编辑菜单
export const EditMenu = (data={}) => { export const EditMenu = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/EditMenu',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/EditMenu', data: data })
} }
//admin后台组列表 //admin后台组列表
export const getGroupList = (data={}) => { export const getGroupList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/getGroupList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getGroupList', data: data })
} }
//admin后台修改组菜单 //admin后台修改组菜单
export const GroupChangeMenu = (data={}) => { export const GroupChangeMenu = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GroupChangeMenu',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GroupChangeMenu', data: data })
} }
//admin后台添加组 //admin后台添加组
export const SaveGroup = (data={}) => { export const SaveGroup = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveGroup',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveGroup', data: data })
} }
//admin后台保存用户信息 //admin后台保存用户信息
export const SaveSystemUserInfo = (data={}) => { export const SaveSystemUserInfo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveSystemUserInfo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveSystemUserInfo', data: data })
} }
//admin后台获取用户详细信息 //admin后台获取用户详细信息
export const GetSystemUserDetail = (data={}) => { export const GetSystemUserDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetSystemUserDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetSystemUserDetail', data: data })
} }
//admin后台修改密码 //admin后台修改密码
export const adminChangePwd = (data={}) => { export const adminChangePwd = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/adminChangePwd',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/adminChangePwd', data: data })
} }
//admin后台获取登录用户基本信息 //admin后台获取登录用户基本信息
export const GetBaseAdminUserInfo = (data={}) => { export const GetBaseAdminUserInfo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetBaseUserInfo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetBaseUserInfo', data: data })
} }
//admin后台管理员查询分组使用的菜单 //admin后台管理员查询分组使用的菜单
export const AdminGetGroupMenuList = (data={}) => { export const AdminGetGroupMenuList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetGroupMenuList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetGroupMenuList', data: data })
} }
//admin后台创建体检日历 //admin后台创建体检日历
export const CreateCalendar = (data={}) => { export const CreateCalendar = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CreateCalendar',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CreateCalendar', data: data })
} }
//admin后台获取日历列表 //admin后台获取日历列表
export const CalendarGetList = (data={}) => { export const CalendarGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CalendarGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CalendarGetList', data: data })
} }
//admin后台删除日历列表 //admin后台删除日历列表
export const CalendarDel = (data={}) => { export const CalendarDel = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CalendarListDel',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CalendarListDel', data: data })
} }
//admin后台更新日历 //admin后台更新日历
export const CalendarChangeInfo = (data={}) => { export const CalendarChangeInfo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CalendarChangeInfo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CalendarChangeInfo', data: data })
} }
//admin后台更新日历 //admin后台更新日历
export const CheckMenuAuth = (data={}) => { export const CheckMenuAuth = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CheckMenuAuth',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CheckMenuAuth', data: data })
} }
//上传图片 //上传图片
// export const UpFile = (data={}) => { // export const UpFile = (data={}) => {
// return axios({url:import.meta.env.VITE_APP_API+'v1/UpFile',data:data}) // return axios({url:import.meta.env.VITE_APP_API+'v1/UpFile',data:data})
// } // }
export const UpFileUrl= () => { export const UpFileUrl = () => {
return import.meta.env.VITE_APP_API+'v1/UpFile' return import.meta.env.VITE_APP_API + 'v1/UpFile'
} }
//admin后台修改自身用户信息 //admin后台修改自身用户信息
export const ChangInfo = (data={}) => { export const ChangInfo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ChangInfo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ChangInfo', data: data })
} }
//admin后台获取站点配置信息 //admin后台获取站点配置信息
export const GetConfigInfo = (data={}) => { export const GetConfigInfo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetConfigInfo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetConfigInfo', data: data })
} }
//admin后台保存站点配置信息 //admin后台保存站点配置信息
export const SaveConfigInfo = (data={}) => { export const SaveConfigInfo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveConfigInfo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveConfigInfo', data: data })
} }
//获取日志列表 //获取日志列表
export const SystemLogGetList = (data={}) => { export const SystemLogGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SystemLogGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SystemLogGetList', data: data })
} }
//获取日志表名 //获取日志表名
export const GetLogTableName = (data={}) => { export const GetLogTableName = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetLogTableName',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetLogTableName', data: data })
} }
//获取号源类型列表 //获取号源类型列表
export const PlanTypeGetList = (data={}) => { export const PlanTypeGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanTypeGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanTypeGetList', data: data })
} }
//可用体检类型列表 //可用体检类型列表
export const CheckUpTypeGetEnableList = (data={}) => { export const CheckUpTypeGetEnableList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CheckUpTypeGetEnableList',data:data}) return axios({
url: import.meta.env.VITE_APP_API + 'v1/admin/CheckUpTypeGetEnableList',
data: data
})
} }
//号源类型保存 //号源类型保存
export const PlanTypeSave = (data={}) => { export const PlanTypeSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanTypeSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanTypeSave', data: data })
} }
//号源类型详情 //号源类型详情
export const PlanTypeGetDetail = (data={}) => { export const PlanTypeGetDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanTypeGetDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanTypeGetDetail', data: data })
} }
//删除号源类型 //删除号源类型
export const PlanTypeDel = (data={}) => { export const PlanTypeDel = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanTypeDel',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanTypeDel', data: data })
} }
//号源模板获取时间段列表 //号源模板获取时间段列表
export const PlanModelTimeList = (data={}) => { export const PlanModelTimeList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanModelTimeList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelTimeList', data: data })
} }
//保存号源模板 //保存号源模板
export const PlanModelSave = (data={}) => { export const PlanModelSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanModelSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelSave', data: data })
} }
//号源模板列表 //号源模板列表
export const PlanModelGetList = (data={}) => { export const PlanModelGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanModelGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelGetList', data: data })
} }
//号源模板详情 //号源模板详情
export const PlanModelGetDetail = (data={}) => { export const PlanModelGetDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanModelGetDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelGetDetail', data: data })
} }
//删除号源模板 //删除号源模板
export const PlanModelDel = (data={}) => { export const PlanModelDel = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanModelDel',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelDel', data: data })
} }
//生成号源 //生成号源
export const PlanCreate = (data={}) => { export const PlanCreate = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/CreatePlan',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CreatePlan', data: data })
} }
//号源列表 //号源列表
export const PlanGetList = (data={}) => { export const PlanGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanGetList', data: data })
} }
//号源详情 //号源详情
export const PlanGetDetail = (data={}) => { export const PlanGetDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanGetDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanGetDetail', data: data })
} }
//号源详情 //号源详情
export const PlanSave = (data={}) => { export const PlanSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/PlanSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanSave', data: data })
} }
//获取套餐列表 //获取套餐列表
export const ComboGetList = (data={}) => { export const ComboGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ComboGetList', data: data })
} }
//获取套餐详情 //获取套餐详情
export const ComboGetDetail = (data={}) => { export const ComboGetDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboGetDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ComboGetDetail', data: data })
} }
//保存套餐详情 //保存套餐详情
export const ComboSave = (data={}) => { export const ComboSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ComboSave', data: data })
} }
//保存医院信息 //保存医院信息
export const HospitalSave = (data={}) => { export const HospitalSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/HospitalSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/HospitalSave', data: data })
} }
//获取医院列表 //获取医院列表
export const HospitalGetList = (data={}) => { export const HospitalGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/HospitalGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/HospitalGetList', data: data })
} }
//获取可用的医院列表 //获取可用的医院列表
export const HospitalGetEnableList = (data={}) => { export const HospitalGetEnableList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/HospitalGetEnableList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/HospitalGetEnableList', data: data })
} }
//获取医院基本信息 //获取医院基本信息
export const GetBaseInfoDetail = (data={}) => { export const GetBaseInfoDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetBaseInfoDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetBaseInfoDetail', data: data })
} }
//更新套餐 //更新套餐
export const UpdateCombo = (data={}) => { export const UpdateCombo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'admin/UpdateCombo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'admin/UpdateCombo', data: data })
} }
//更新缓存 //更新缓存
export const SaveCacheInfo = (data={}) => { export const SaveCacheInfo = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SaveCacheInfo',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveCacheInfo', data: data })
} }
//获取套餐类型 //获取套餐类型
export const ComboTypeGetList = (data={}) => { export const ComboTypeGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboTypeGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ComboTypeGetList', data: data })
} }
//获取套餐适用人群 //获取套餐适用人群
export const ComboCrowdGetList = (data={}) => { export const ComboCrowdGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboCrowdGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ComboCrowdGetList', data: data })
} }
//获取套餐适用人群save //获取套餐适用人群save
export const ComboCrowdSave = (data={}) => { export const ComboCrowdSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboCrowdSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ComboCrowdSave', data: data })
} }
//获取套餐适用人群del //获取套餐适用人群del
export const ComboCrowdDel = (data={}) => { export const ComboCrowdDel = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ComboCrowdDel',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ComboCrowdDel', data: data })
} }
//获取订单列表 //获取订单列表
export const OrderGetList = (data={}) => { export const OrderGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/OrderGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/OrderGetList', data: data })
} }
//获取订单详情 //获取订单详情
export const OrderGetDetail = (data={}) => { export const OrderGetDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/OrderGetDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/OrderGetDetail', data: data })
} }
//保存订单信息 //保存订单信息
export const OrderSave = (data={}) => { export const OrderSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/OrderSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/OrderSave', data: 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={}) => { export const QuestionSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/QuestionSave', data: data })
} }
//获取题目详情 //获取题目详情
export const QuestionGetDetail = (data={}) => { export const QuestionGetDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionGetDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/QuestionGetDetail', data: data })
} }
//删除题目 //删除题目
export const QuestionDel = (data={}) => { export const QuestionDel = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/QuestionDel',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/QuestionDel', data: data })
} }
//获取文章列表 //获取文章列表
export const ArticleGetList = (data={}) => { export const ArticleGetList = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ArticleGetList',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ArticleGetList', data: data })
} }
//保存文章 //保存文章
export const ArticleSave = (data={}) => { export const ArticleSave = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ArticleSave',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ArticleSave', data: data })
} }
//文章详情 //文章详情
export const ArticleGetDetail = (data={}) => { export const ArticleGetDetail = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ArticleGetDetail',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ArticleGetDetail', data: data })
} }
//删除文章 //删除文章
export const ArticleGetDel = (data={}) => { export const ArticleGetDel = (data = {}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ArticleGetDel',data:data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ArticleGetDel', data: data })
} }
// 问卷调查 // 问卷调查
export const QuestionCreateAction = (data = {}) => { export const QuestionCreateAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/question/create', data: data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/question/create', data: data })
} }
export const QuestionUpdateAction = (data = {}) => { export const QuestionUpdateAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/question/update', data: data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/question/update', data: data })
} }
export const QuestionDeleteAction = (data = {}) => { export const QuestionDeleteAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/question/delete', data: data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/question/delete', data: data })
} }
export const QuestionListAction = (data = {}) => { export const QuestionListAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + `v1/admin/question/list?page=${data.page}`, data: data}) return axios({
url: import.meta.env.VITE_APP_API + `v1/admin/question/list?page=${data.page}`,
data: data
})
} }
export const QuestionQuestionCreateAction = (data = {}) => { export const QuestionQuestionCreateAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/questionQuestion/create', data: data}) return axios({
url: import.meta.env.VITE_APP_API + 'v1/admin/questionQuestion/create',
data: data
})
} }
export const QuestionQuestionUpdateAction = (data = {}) => { export const QuestionQuestionUpdateAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/questionQuestion/update', data: data}) return axios({
url: import.meta.env.VITE_APP_API + 'v1/admin/questionQuestion/update',
data: data
})
} }
export const QuestionQuestionDeleteAction = (data = {}) => { export const QuestionQuestionDeleteAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/questionQuestion/delete', data: data}) return axios({
url: import.meta.env.VITE_APP_API + 'v1/admin/questionQuestion/delete',
data: data
})
} }
export const QuestionQuestionListAction = (data = {}) => { export const QuestionQuestionListAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionQuestion/list?page=${data.page}`, data: data}) return axios({
url: import.meta.env.VITE_APP_API + `v1/admin/questionQuestion/list?page=${data.page}`,
data: data
})
} }
// 题目列表[全部] // 题目列表[全部]
export const QuestionQuestionSelectAction = (data = {}) => { export const QuestionQuestionSelectAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionQuestion/select`, data: data}) return axios({
url: import.meta.env.VITE_APP_API + `v1/admin/questionQuestion/select`,
data: data
})
} }
export const QuestionItemCreateAction = (data = {}) => { export const QuestionItemCreateAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/questionItem/create', data: data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/questionItem/create', data: data })
} }
export const QuestionItemUpdateAction = (data = {}) => { export const QuestionItemUpdateAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/questionItem/update', data: data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/questionItem/update', data: data })
} }
export const QuestionItemDeleteAction = (data = {}) => { export const QuestionItemDeleteAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + 'v1/admin/questionItem/delete', data: data}) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/questionItem/delete', data: data })
} }
export const QuestionItemListAction = (data = {}) => { export const QuestionItemListAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/list?page=${data.page}`, data: data}) return axios({
url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/list?page=${data.page}`,
data: data
})
} }
// 问卷调查 获取 检测项目列表 // 问卷调查 获取 检测项目列表
export const QuestionItemItemAction = (data = {}) => { export const QuestionItemItemAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/item`, data: data}) return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/item`, data: data })
} }
// 问卷调查 获取 套餐列表 // 问卷调查 获取 套餐列表
export const QuestionItemComboAction = (data = {}) => { export const QuestionItemComboAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/combo`, data: data}) return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/combo`, data: data })
} }
// 项目列表[全部] // 项目列表[全部]
export const QuestionItemSelectAction = (data = {}) => { export const QuestionItemSelectAction = (data = {}) => {
return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/select`, data: data}) return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/select`, data: data })
}
export const QuestionListCreateAction = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/questionList/create', data: data })
}
export const QuestionListUpdateAction = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/questionList/update', data: data })
}
export const QuestionListDeleteAction = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/questionList/delete', data: data })
}
export const QuestionListListAction = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/questionList/list`, data: data })
}
export const QuestionSelectAction = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + `v1/admin/question/select`, data: data })
} }

@ -190,6 +190,13 @@ const router = createRouter({
meta: { meta: {
title: '问卷项目' title: '问卷项目'
} }
},{
path: '/Question/QuestionList',
name: 'QuestionList',
component: () => import('../views/Question/QuestionList.vue'),
meta: {
title: '健康问卷'
}
},{ },{
path: '/comboMngr/crowd', path: '/comboMngr/crowd',
name: 'ComboMngrCrowd', name: 'ComboMngrCrowd',

@ -29,7 +29,7 @@ onBeforeRouteUpdate((to) => {
const item_list = ref([]) const item_list = ref([])
const QuestionItemItem = async () => { const QuestionItemItem = async () => {
const response = await QuestionItemItemAction({}) const response = await QuestionItemItemAction({})
if (response.status) { if (response.status !== 'no') {
item_list.value = response.data.list.map((item) => { item_list.value = response.data.list.map((item) => {
return { return {
...item, ...item,
@ -43,7 +43,7 @@ const QuestionItemItem = async () => {
const question_list = ref([]) const question_list = ref([])
const QuestionQuestionSelect = async () => { const QuestionQuestionSelect = async () => {
const response = await QuestionQuestionSelectAction({}) const response = await QuestionQuestionSelectAction({})
if (response.status) { if (response.status !== 'no') {
question_list.value = response.data.list question_list.value = response.data.list
} else { } else {
ElMessage.error(response.msg) ElMessage.error(response.msg)
@ -53,7 +53,7 @@ const table_list = ref([])
const last_page = ref(0) const last_page = ref(0)
const QuestionList = async () => { const QuestionList = async () => {
const response = await QuestionListAction(page_options.value) const response = await QuestionListAction(page_options.value)
if (response.status) { if (response.status !== 'no') {
table_list.value = response.data.list.data.map((item) => { table_list.value = response.data.list.data.map((item) => {
return { return {
...item, ...item,
@ -115,7 +115,7 @@ const editDoneClick = async () => {
items: JSON.stringify(edit_data.value.items), items: JSON.stringify(edit_data.value.items),
questions: JSON.stringify(edit_data.value.questions), questions: JSON.stringify(edit_data.value.questions),
}) })
if (response.status) { if (response.status !== 'no') {
edit_show.value = false edit_show.value = false
await QuestionList() await QuestionList()
} else { } else {
@ -125,7 +125,7 @@ const editDoneClick = async () => {
const QuestionDelete = async (id) => { const QuestionDelete = async (id) => {
const response = await QuestionDeleteAction({id}) const response = await QuestionDeleteAction({id})
if (response.status) { if (response.status !== 'no') {
await QuestionList() await QuestionList()
} else { } else {
ElMessage.error(response.msg) ElMessage.error(response.msg)

@ -27,7 +27,7 @@ onBeforeRouteUpdate((to) => {
const combo_list = ref([]) const combo_list = ref([])
const QuestionItemCombo = async () => { const QuestionItemCombo = async () => {
const response = await QuestionItemComboAction({}) const response = await QuestionItemComboAction({})
if (response.status) { if (response.status !== 'no') {
combo_list.value = response.data.list combo_list.value = response.data.list
} else { } else {
ElMessage.error(response.msg) ElMessage.error(response.msg)
@ -37,7 +37,7 @@ const table_list = ref([])
const last_page = ref(0) const last_page = ref(0)
const QuestionItemList = async () => { const QuestionItemList = async () => {
const response = await QuestionItemListAction(page_options.value) const response = await QuestionItemListAction(page_options.value)
if (response.status) { if (response.status !== 'no') {
table_list.value = response.data.list.data table_list.value = response.data.list.data
last_page.value = response.data.list.last_page last_page.value = response.data.list.last_page
} else { } else {
@ -82,7 +82,7 @@ const editDoneClick = async () => {
const response = await $func({ const response = await $func({
...edit_data.value ...edit_data.value
}) })
if (response.status) { if (response.status !== 'no') {
edit_show.value = false edit_show.value = false
await QuestionItemList() await QuestionItemList()
} else { } else {
@ -92,7 +92,7 @@ const editDoneClick = async () => {
const QuestionItemDelete = async (id) => { const QuestionItemDelete = async (id) => {
const response = await QuestionItemDeleteAction({ id }) const response = await QuestionItemDeleteAction({ id })
if (response.status) { if (response.status !== 'no') {
await QuestionItemList() await QuestionItemList()
} else { } else {
ElMessage.error(response.msg) ElMessage.error(response.msg)

@ -0,0 +1,226 @@
<script setup>
/**
* name
* usersa0ChunLuyu
* date2024年10月12日 16:29:26
*/
import { ref, onMounted } from 'vue'
import $router from '@/router'
import { onBeforeRouteUpdate } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
import {
UpFileUrl,
QuestionListCreateAction,
QuestionListUpdateAction,
QuestionListDeleteAction,
QuestionListListAction,
QuestionSelectAction
} from '@/api/api.js'
const default_page_options = {
search: ''
}
const page_options = ref(JSON.parse(JSON.stringify(default_page_options)))
onBeforeRouteUpdate((to) => {
routerChange(to.query)
})
const question_list = ref([])
const QuestionSelect = async () => {
const response = await QuestionSelectAction({})
if (response.status !== 'no') {
question_list.value = response.data.list
} else {
ElMessage.error(response.msg)
}
}
const table_list = ref([])
const QuestionListList = async () => {
const response = await QuestionListListAction(page_options.value)
if (response.status !== 'no') {
table_list.value = response.data.list
} else {
ElMessage.error(response.msg)
}
}
const routerChange = (query) => {
page_options.value = {
search: query.search || default_page_options.search
}
QuestionListList()
}
const searchClick = (page = 1) => {
page_options.value.page = page
$router.push({
query: JSON.parse(JSON.stringify(page_options.value))
})
}
const edit_data_default = {
id: 0,
name: '',
desc: '',
icon: '',
order: '0',
question: null
}
const edit_data = ref(JSON.parse(JSON.stringify(edit_data_default)))
const edit_show = ref(false)
const createClick = () => {
updateClick(edit_data_default)
}
const updateClick = (row) => {
edit_data.value = JSON.parse(JSON.stringify(row))
if (!!edit_data.value.icon) {
logo.value = JSON.parse(JSON.stringify(BaseUrl.value + edit_data.value.icon))
} else {
logo.value = ''
}
edit_show.value = true
}
const editDoneClick = async () => {
const $func = edit_data.value.id !== 0 ? QuestionListUpdateAction : QuestionListCreateAction
const response = await $func({
...edit_data.value
})
if (response.status !== 'no') {
edit_show.value = false
await QuestionListList()
} else {
ElMessage.error(response.msg)
}
}
const QuestionListDelete = async (id) => {
const response = await QuestionListDeleteAction({ id })
if (response.status !== 'no') {
await QuestionListList()
} else {
ElMessage.error(response.msg)
}
}
const deleteClick = (id) => {
ElMessageBox.confirm('是否确认删除该项目?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
QuestionListDelete(id)
})
.catch(() => {})
}
let upfileurl = UpFileUrl()
let headerObj = {
Authorization: 'Bearer ' + sessionStorage.getItem('token')
}
let logo = ref('')
let BaseUrl = ref(import.meta.env.VITE_APP_FILE)
const upLoadSuccess = (res) => {
logo.value = BaseUrl.value + res.data
edit_data.value.icon = res.data
}
onMounted(() => {
routerChange($router.currentRoute.value.query)
QuestionSelect()
})
</script>
<template>
<div>
<el-dialog v-model="edit_show" :title="`${!!edit_data.id ? '编辑' : '新建'}`">
<div>
<el-form label-width="150">
<el-form-item label="名称">
<el-input v-model="edit_data.name" placeholder="请输入名称"></el-input>
</el-form-item>
<el-form-item label="说明">
<el-input v-model="edit_data.desc" placeholder="请输入说明"></el-input>
</el-form-item>
<el-form-item label="图标">
<el-upload
class="avatar-uploader"
:action="upfileurl"
:headers="headerObj"
:show-file-list="false"
:on-success="upLoadSuccess"
>
<img v-if="logo" :src="logo" class="avatar" style="width: 60px" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</el-form-item>
<el-form-item label="关联问卷">
<el-select v-model="edit_data.question" placeholder="请选择关联问卷">
<el-option
v-for="(i, k) in question_list"
:key="k"
:label="i.name"
:value="i.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="排序">
<el-input v-model="edit_data.order" placeholder="请输入项目说明"></el-input>
</el-form-item>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="edit_show = false">取消</el-button>
<el-button type="primary" @click="editDoneClick()"></el-button>
</span>
</template>
</el-dialog>
<div class="head">
<div class="head">
<el-row>
<el-form-item>
<el-input v-model="page_options.search" placeholder="搜索问卷" />
</el-form-item>
<el-button type="primary" @click="searchClick()" style="margin-left: 10px"
>查询</el-button
>
<el-button type="success" @click="createClick()" style="margin-left: 10px"
>添加</el-button
>
</el-row>
</div>
</div>
<el-table
:data="table_list"
style="width: 100%"
row-key="id"
:tooltip-options="{
popperClass: 'popper_class_wrapper'
}"
>
<el-table-column prop="id" label="ID" width="100" />
<el-table-column prop="name" label="名称" width="200" />
<el-table-column prop="desc" label="说明" width="200" />
<el-table-column label="图标" show-overflow-tooltip>
<template #default="scope">
<img :src="BaseUrl + scope.row.icon" class="avatar" style="width: 60px" />
</template>
</el-table-column>
<el-table-column prop="order" label="排序" width="200" />
<el-table-column label="操作" width="140">
<template #default="scope">
<el-button type="primary" @click="updateClick(scope.row)" size="small">修改</el-button>
<el-button type="danger" @click="deleteClick(scope.row.id)" size="small">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<style>
.popper_class_wrapper {
width: 300px;
}
</style>
<style scoped></style>

@ -4,10 +4,10 @@
* usersa0ChunLuyu * usersa0ChunLuyu
* date2024年10月12日 16:29:26 * date2024年10月12日 16:29:26
*/ */
import {ref, onMounted, nextTick} from 'vue'; import { ref, onMounted, nextTick } from 'vue'
import $router from '@/router' import $router from '@/router'
import {onBeforeRouteUpdate} from "vue-router"; import { onBeforeRouteUpdate } from 'vue-router'
import {ElMessage, ElMessageBox} from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { import {
QuestionQuestionSelectAction, QuestionQuestionSelectAction,
QuestionItemSelectAction, QuestionItemSelectAction,
@ -19,7 +19,7 @@ import {
const default_page_options = { const default_page_options = {
search: '', search: '',
page: 1, page: 1
} }
const page_options = ref(JSON.parse(JSON.stringify(default_page_options))) const page_options = ref(JSON.parse(JSON.stringify(default_page_options)))
onBeforeRouteUpdate((to) => { onBeforeRouteUpdate((to) => {
@ -29,7 +29,7 @@ const table_list = ref([])
const last_page = ref(0) const last_page = ref(0)
const QuestionQuestionList = async () => { const QuestionQuestionList = async () => {
const response = await QuestionQuestionListAction(page_options.value) const response = await QuestionQuestionListAction(page_options.value)
if (response.status) { if (response.status !== 'no') {
table_list.value = response.data.list.data.map((item) => { table_list.value = response.data.list.data.map((item) => {
return { return {
...item, ...item,
@ -45,7 +45,7 @@ const QuestionQuestionList = async () => {
const routerChange = (query) => { const routerChange = (query) => {
page_options.value = { page_options.value = {
search: query.search || default_page_options.search, search: query.search || default_page_options.search,
page: Number(query.page) || default_page_options.page, page: Number(query.page) || default_page_options.page
} }
QuestionQuestionList() QuestionQuestionList()
} }
@ -58,9 +58,9 @@ const searchClick = (page = 1) => {
} }
const select_option = { const select_option = {
value: [ value: [
{content: 'A. ', type: 'items', items: [], questions: []}, { content: 'A. ', type: 'items', items: [], questions: [] },
{content: 'B. ', type: 'items', items: [], questions: []}, { content: 'B. ', type: 'items', items: [], questions: [] },
{content: 'C. ', type: 'items', items: [], questions: []}, { content: 'C. ', type: 'items', items: [], questions: [] }
] ]
} }
const input_option = { const input_option = {
@ -73,8 +73,8 @@ const edit_data_default = {
type: 'input', type: 'input',
option: { option: {
input: JSON.parse(JSON.stringify(input_option)), input: JSON.parse(JSON.stringify(input_option)),
select: JSON.parse(JSON.stringify(select_option)), select: JSON.parse(JSON.stringify(select_option))
}, }
} }
const edit_data = ref(JSON.parse(JSON.stringify(edit_data_default))) const edit_data = ref(JSON.parse(JSON.stringify(edit_data_default)))
const edit_show = ref(false) const edit_show = ref(false)
@ -86,12 +86,13 @@ const updateClick = (row) => {
edit_show.value = true edit_show.value = true
} }
const editDoneClick = async () => { const editDoneClick = async () => {
const $func = edit_data.value.id !== 0 ? QuestionQuestionUpdateAction : QuestionQuestionCreateAction const $func =
edit_data.value.id !== 0 ? QuestionQuestionUpdateAction : QuestionQuestionCreateAction
const response = await $func({ const response = await $func({
...edit_data.value, ...edit_data.value,
option: JSON.stringify(edit_data.value.option), option: JSON.stringify(edit_data.value.option)
}) })
if (response.status) { if (response.status !== 'no') {
edit_show.value = false edit_show.value = false
await QuestionQuestionList() await QuestionQuestionList()
} else { } else {
@ -100,8 +101,8 @@ const editDoneClick = async () => {
} }
const QuestionQuestionDelete = async (id) => { const QuestionQuestionDelete = async (id) => {
const response = await QuestionQuestionDeleteAction({id}) const response = await QuestionQuestionDeleteAction({ id })
if (response.status) { if (response.status !== 'no') {
await QuestionQuestionList() await QuestionQuestionList()
} else { } else {
ElMessage.error(response.msg) ElMessage.error(response.msg)
@ -109,18 +110,15 @@ const QuestionQuestionDelete = async (id) => {
} }
const deleteClick = (id) => { const deleteClick = (id) => {
ElMessageBox.confirm( ElMessageBox.confirm('是否确认删除该题目?', '提示', {
'是否确认删除该题目?', confirmButtonText: '确认',
'提示', cancelButtonText: '取消',
{ type: 'warning'
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
QuestionQuestionDelete(id)
}).catch(() => {
}) })
.then(() => {
QuestionQuestionDelete(id)
})
.catch(() => {})
} }
const edit_item_data = ref({ const edit_item_data = ref({
active: 0, active: 0,
@ -130,7 +128,7 @@ const edit_item_show = ref(false)
const question_list = ref([]) const question_list = ref([])
const QuestionQuestionSelect = async () => { const QuestionQuestionSelect = async () => {
const response = await QuestionQuestionSelectAction() const response = await QuestionQuestionSelectAction()
if (response.status) { if (response.status !== 'no') {
question_list.value = response.data.list question_list.value = response.data.list
} else { } else {
ElMessage.error(response.msg) ElMessage.error(response.msg)
@ -151,7 +149,9 @@ const editItemClick = async (index) => {
} }
const editItemDoneClick = () => { const editItemDoneClick = () => {
const type = edit_data.value.option.select.value[edit_item_data.value.active].type const type = edit_data.value.option.select.value[edit_item_data.value.active].type
edit_data.value.option.select.value[edit_item_data.value.active][type] = JSON.parse(JSON.stringify(edit_item_data.value.items)) edit_data.value.option.select.value[edit_item_data.value.active][type] = JSON.parse(
JSON.stringify(edit_item_data.value.items)
)
edit_item_show.value = false edit_item_show.value = false
} }
const filterMethod = (query, item) => { const filterMethod = (query, item) => {
@ -165,7 +165,7 @@ const filterMethod = (query, item) => {
const item_list = ref([]) const item_list = ref([])
const QuestionItemSelect = async () => { const QuestionItemSelect = async () => {
const response = await QuestionItemSelectAction() const response = await QuestionItemSelectAction()
if (response.status) { if (response.status !== 'no') {
item_list.value = response.data.list item_list.value = response.data.list
} else { } else {
ElMessage.error(response.msg) ElMessage.error(response.msg)
@ -174,7 +174,9 @@ const QuestionItemSelect = async () => {
const moveQuestionClick = (index, type) => { const moveQuestionClick = (index, type) => {
if (edit_data.value.option.select.value.length - 1 >= index + type) { if (edit_data.value.option.select.value.length - 1 >= index + type) {
const question = edit_data.value.option.select.value[index] const question = edit_data.value.option.select.value[index]
edit_data.value.option.select.value[index] = JSON.parse(JSON.stringify(edit_data.value.option.select.value[index + type])) edit_data.value.option.select.value[index] = JSON.parse(
JSON.stringify(edit_data.value.option.select.value[index + type])
)
edit_data.value.option.select.value[index + type] = JSON.parse(JSON.stringify(question)) edit_data.value.option.select.value[index + type] = JSON.parse(JSON.stringify(question))
} }
} }
@ -182,7 +184,7 @@ const delQuestionClick = (index) => {
edit_data.value.option.select.value.splice(index, 1) edit_data.value.option.select.value.splice(index, 1)
} }
const addQuestionClick = () => { const addQuestionClick = () => {
edit_data.value.option.select.value.push({content: '', type: 'items', items: [], questions: []}) edit_data.value.option.select.value.push({ content: '', type: 'items', items: [], questions: [] })
} }
const question_type_map = { const question_type_map = {
select: '选择题', select: '选择题',
@ -195,19 +197,34 @@ onMounted(() => {
</script> </script>
<template> <template>
<div> <div>
<el-dialog v-model="edit_item_show" title="关联管理" width="610px" <el-dialog
:close-on-click-modal="false" v-model="edit_item_show"
:close-on-press-escape="false" title="关联管理"
:show-close="false"> width="610px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="false"
>
<div> <div>
<el-transfer <el-transfer
:titles="['可选', '已选']" v-if="!!edit_item_show"
:props="{key: 'id', label: edit_data.option.select.value[edit_item_data.active].type === 'items' ? 'name' : 'question'}" :titles="['可选', '已选']"
v-model="edit_item_data.items" :props="{
filterable key: 'id',
:filter-method="filterMethod" label:
filter-placeholder="搜索" edit_data.option.select.value[edit_item_data.active].type === 'items'
:data="edit_data.option.select.value[edit_item_data.active].type === 'items' ? item_list : question_list" ? 'name'
: 'question'
}"
v-model="edit_item_data.items"
filterable
:filter-method="filterMethod"
filter-placeholder="搜索"
:data="
edit_data.option.select.value[edit_item_data.active].type === 'items'
? item_list
: question_list
"
/> />
</div> </div>
<template #footer> <template #footer>
@ -233,10 +250,16 @@ onMounted(() => {
<el-form-item label="题目配置"> <el-form-item label="题目配置">
<div> <div>
<div class="select_item_wrapper"> <div class="select_item_wrapper">
<el-input class="select_input_wrapper" v-model="edit_data.option.input.value" <el-input
placeholder="请输入默认值"></el-input> class="select_input_wrapper"
<el-input class="select_input_wrapper" v-model="edit_data.option.input.placeholder" v-model="edit_data.option.input.value"
placeholder="请输入占位符"></el-input> placeholder="请输入默认值"
></el-input>
<el-input
class="select_input_wrapper"
v-model="edit_data.option.input.placeholder"
placeholder="请输入占位符"
></el-input>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
@ -244,33 +267,62 @@ onMounted(() => {
<template v-else-if="edit_data.type === 'select'"> <template v-else-if="edit_data.type === 'select'">
<el-form-item label="题目配置"> <el-form-item label="题目配置">
<div> <div>
<div class="select_item_wrapper" v-for="(_,k) in edit_data.option.select.value" :key="k"> <div
<el-input class="select_input_wrapper" v-model="edit_data.option.select.value[k].content" class="select_item_wrapper"
placeholder="请输入"></el-input> v-for="(_, k) in edit_data.option.select.value"
<el-select class="select_select_wrapper" v-model="edit_data.option.select.value[k].type" :key="k"
placeholder="请选择题目类型"> >
<el-input
class="select_input_wrapper"
v-model="edit_data.option.select.value[k].content"
placeholder="请输入"
></el-input>
<el-select
class="select_select_wrapper"
v-model="edit_data.option.select.value[k].type"
placeholder="请选择题目类型"
>
<el-option label="项目" value="items"></el-option> <el-option label="项目" value="items"></el-option>
<el-option label="题目" value="questions"></el-option> <el-option label="题目" value="questions"></el-option>
</el-select> </el-select>
<span style="margin-right: 10px;">{{ <span style="margin-right: 10px"
>{{
edit_data.option.select.value[k].type === 'items' edit_data.option.select.value[k].type === 'items'
? edit_data.option.select.value[k].items.length ? edit_data.option.select.value[k].items.length
: edit_data.option.select.value[k].questions.length : edit_data.option.select.value[k].questions.length
}}{{ edit_data.option.select.value[k].type === 'items' ? '项目' : '题目' }}</span> }}{{
edit_data.option.select.value[k].type === 'items' ? '项目' : '题目'
}}</span
>
<el-button type="primary" size="small" @click="editItemClick(k)"> <el-button type="primary" size="small" @click="editItemClick(k)">
编辑{{ edit_data.option.select.value[k].type === 'items' ? '项目' : '题目' }} 编辑{{ edit_data.option.select.value[k].type === 'items' ? '项目' : '题目' }}
</el-button> </el-button>
<el-button :disabled="k===0" type="primary" size="small" @click="moveQuestionClick(k, -1)"> <el-button
:disabled="k === 0"
type="primary"
size="small"
@click="moveQuestionClick(k, -1)"
>
</el-button> </el-button>
<el-button :disabled="k===edit_data.option.select.value.length - 1" type="primary" size="small" <el-button
@click="moveQuestionClick(k, 1)"> :disabled="k === edit_data.option.select.value.length - 1"
type="primary"
size="small"
@click="moveQuestionClick(k, 1)"
>
</el-button> </el-button>
<el-button :disabled="edit_data.option.select.value.length === 1" type="primary" size="small" <el-button
@click="delQuestionClick(k)">X :disabled="edit_data.option.select.value.length === 1"
type="primary"
size="small"
@click="delQuestionClick(k)"
>X
</el-button> </el-button>
</div> </div>
<div> <div>
<el-button type="primary" size="small" @click="addQuestionClick()"></el-button> <el-button type="primary" size="small" @click="addQuestionClick()"
>添加选项</el-button
>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
@ -278,10 +330,10 @@ onMounted(() => {
</el-form> </el-form>
</div> </div>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="edit_show = false">取消</el-button> <el-button @click="edit_show = false">取消</el-button>
<el-button type="primary" @click="editDoneClick()"></el-button> <el-button type="primary" @click="editDoneClick()"></el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
@ -289,18 +341,27 @@ onMounted(() => {
<div class="head"> <div class="head">
<el-row> <el-row>
<el-form-item> <el-form-item>
<el-input v-model="page_options.search" placeholder="搜索题目"/> <el-input v-model="page_options.search" placeholder="搜索题目" />
</el-form-item> </el-form-item>
<el-button type="primary" @click="searchClick()" style="margin-left: 10px;">查询</el-button> <el-button type="primary" @click="searchClick()" style="margin-left: 10px"
<el-button type="success" @click="createClick()" style="margin-left: 10px;">添加</el-button> >查询</el-button
>
<el-button type="success" @click="createClick()" style="margin-left: 10px"
>添加</el-button
>
</el-row> </el-row>
</div> </div>
</div> </div>
<el-table :data="table_list" style="width: 100%;" row-key="id" :tooltip-options="{ <el-table
:data="table_list"
style="width: 100%"
row-key="id"
:tooltip-options="{
popperClass: 'popper_class_wrapper' popperClass: 'popper_class_wrapper'
}"> }"
<el-table-column prop="id" label="ID" width="100"/> >
<el-table-column prop="question" label="题目" width="200" show-overflow-tooltip/> <el-table-column prop="id" label="ID" width="100" />
<el-table-column prop="question" label="题目" width="200" show-overflow-tooltip />
<el-table-column label="类型" width="100"> <el-table-column label="类型" width="100">
<template #default="scope"> <template #default="scope">
{{ question_type_map[scope.row.type] }} {{ question_type_map[scope.row.type] }}
@ -309,20 +370,23 @@ onMounted(() => {
<el-table-column label="题目配置"> <el-table-column label="题目配置">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.type === 'input'" class="select_item_wrapper"> <div v-if="scope.row.type === 'input'" class="select_item_wrapper">
<span class="title_wrapper">占位符</span><span <span class="title_wrapper">占位符</span
style="margin: 0 10px;">{{ scope.row.option.input.placeholder }}</span> ><span style="margin: 0 10px">{{ scope.row.option.input.placeholder }}</span>
<span v-if="!!scope.row.option.input.value" class="title_wrapper">默认值:</span><span style="margin: 0 10px;">{{ <span v-if="!!scope.row.option.input.value" class="title_wrapper"></span
scope.row.option.input.value ><span style="margin: 0 10px">{{ scope.row.option.input.value }}</span>
}}</span>
</div> </div>
<div v-else-if="scope.row.type === 'select'"> <div v-else-if="scope.row.type === 'select'">
<div class="select_item_wrapper" v-for="(i,k) in scope.row.option.select.value" :key="k"> <div
<span style="margin-right: 10px;width: 400px;">{{ i.content }}</span> class="select_item_wrapper"
v-for="(i, k) in scope.row.option.select.value"
:key="k"
>
<span style="margin-right: 10px; width: 400px">{{ i.content }}</span>
<span class="title_wrapper">带出</span> <span class="title_wrapper">带出</span>
<span>{{ <span>{{ scope.row.option.select.value[k].type === 'items' ? '项目' : '题目' }}</span>
scope.row.option.select.value[k].type === 'items' ? '项目' : '题目' <span style="margin: 0 5px">{{
}}</span> scope.row.option.select.value[k][scope.row.option.select.value[k].type].length
<span style="margin: 0 5px;">{{ scope.row.option.select.value[k][scope.row.option.select.value[k].type].length }}</span> }}</span>
<span></span> <span></span>
</div> </div>
</div> </div>
@ -337,8 +401,15 @@ onMounted(() => {
</el-table> </el-table>
<div class="page"> <div class="page">
<el-pagination v-if="last_page > 0" :current-page="page_options.page" mt-2 background layout="prev, pager, next" <el-pagination
:page-count="last_page" @update:current-page="searchClick"/> v-if="last_page > 0"
:current-page="page_options.page"
mt-2
background
layout="prev, pager, next"
:page-count="last_page"
@update:current-page="searchClick"
/>
</div> </div>
</div> </div>
</template> </template>

Loading…
Cancel
Save