后台完善文章管理、记录小程序接口日志、调整部分接口

wenjuan
yanzai 1 year ago
parent a80048a3f7
commit dc86e4ee19

@ -18,7 +18,27 @@ class ArticleController extends Controller
} }
public function Save() public function Save()
{ {
$Info=request('Info');
if(!isset($Info['id'])) return \Yz::echoError1("id不能为空");
$data=[
'title'=>$Info['title'],
'type'=>$Info['type'],
'head_img'=>$Info['head_img'],
'content'=>$Info['content'],
'author'=>$Info['author'],
'order'=>$Info['order'],
];
$do=false;
if($Info['id']===0){
$do=DB::table('articles')->insert($data);
}else{
$do= DB::table('articles')->where(['id'=>$Info['id'],'is_del'=>0])->update($data);
}
if($do){
return \Yz::Return(true,"操作成功",[]);
}else{
return \Yz::echoError1("操作失败");
}
} }
//获取详情 //获取详情
@ -27,10 +47,20 @@ class ArticleController extends Controller
$id=request('id'); $id=request('id');
$info = DB::table('articles')->where(['id'=>$id,'is_del'=>0,'status'=>1])->first(); $info = DB::table('articles')->where(['id'=>$id,'is_del'=>0,'status'=>1])->first();
if($info){ if($info){
return \Yz::Return(true,"查询完成",['info'=>$info]); return \Yz::Return(true,"查询完成",$info);
}else{ }else{
return \Yz::echoError1("文章内容查询失败"); return \Yz::echoError1("文章内容查询失败");
} }
} }
public function Del()
{
$id=request('id');
$d=DB::table('articles')->where(['id'=>$id])->update(['is_del'=>1]);
if($d){
return \Yz::Return(true,"操作完成",[]);
}else{
return \Yz::echoError1("删除失败");
}
}
} }

@ -35,6 +35,9 @@ class ApiMapController extends Controller
'GetGeJianButtonList' => $base_url . '/api/H5/GetGeJianButtonList', 'GetGeJianButtonList' => $base_url . '/api/H5/GetGeJianButtonList',
'ArticleGetList' => $base_url . '/api/H5/ArticleGetList', 'ArticleGetList' => $base_url . '/api/H5/ArticleGetList',
'ArticleGetDetail' => $base_url . '/api/H5/ArticleGetDetail', 'ArticleGetDetail' => $base_url . '/api/H5/ArticleGetDetail',
'GetAllItems' => $base_url . '/api/H5/GetAllItems',//获取全部自选项目
'BuyInfo' => $base_url . '/api/H5/BuyInfo',//获取全部自选项目
'GetComboSort' => $base_url . '/api/H5/GetComboSort',//套餐排序、筛选标签
]; ];
} }

@ -38,6 +38,13 @@ class ComboController extends Controller
$hospital = $request->post('hospital'); $hospital = $request->post('hospital');
$doctor = $request->post('doctor'); $doctor = $request->post('doctor');
$openid = $request->post('openid'); $openid = $request->post('openid');
$combo_sort = $request->post('combo_sort');
$combo_type = $request->post('combo_type');
$combo_crowd = $request->post('combo_crowd');
$combo_price = $request->post('combo_price');
$combo_item = $request->post('combo_item');
$hospital= DB::table('hospitals')->select('id','name','address','latitude','longitude')->where(['id'=>$hospital])->first(); $hospital= DB::table('hospitals')->select('id','name','address','latitude','longitude')->where(['id'=>$hospital])->first();
$user=DB::table('web_users')->where(['openid'=>$openid,'status'=>1,'is_del'=>0])->first(); $user=DB::table('web_users')->where(['openid'=>$openid,'status'=>1,'is_del'=>0])->first();
if(!$user) return \Yz::echoError1('openid对应用户不存在'); if(!$user) return \Yz::echoError1('openid对应用户不存在');
@ -45,9 +52,48 @@ class ComboController extends Controller
if(!$person) return \Yz::echoError1("请选择就诊人"); if(!$person) return \Yz::echoError1("请选择就诊人");
//用户绑定就诊人数量 //用户绑定就诊人数量
$personCount=DB::table('web_user_person')->where(['user_id'=>$user->id,'is_del'=>0])->count(); $personCount=DB::table('web_user_person')->where(['user_id'=>$user->id,'is_del'=>0])->count();
$canshu=[];
$sql='';
if(isset($combo_price)){
$price_list=[
"1"=>[0,299],
"2"=>[300,999],
"3"=>[1000,1499],
"4"=>[1500,2999],
"5"=>[3000,999999],
];
$sql=" and (a.price>=? and a.price<=?) ";
$canshu[]=$price_list[$combo_price][0];
$canshu[]=$price_list[$combo_price][1];
}
if(isset($combo_type)){
$sql=$sql." and a.type_id=? ";
$canshu[]=$combo_type;
}
if(isset($combo_crowd)){
$sql=$sql." and a.crowd_id=? ";
$canshu[]=$combo_crowd;
}
if(isset($combo_sort)){
if($combo_sort==1){
$sql=$sql." ";
}
if($combo_sort==2){
$sql=$sql." ";
}
if($combo_sort==3){
$sql=$sql." order by a.price";
}
if($combo_sort==4){
$sql=$sql." order by a.price desc";
}
}
$combos=DB::select("select * from combos as a LEFT JOIN ( $combos=DB::select("select * from combos as a LEFT JOIN (
select combo_id as c_id,count(*) as count from orders where status in(2,4) group by combo_id select combo_id as c_id,count(*) as count from orders where status in(2,4) group by combo_id
) as b on a.combo_id=b.c_id where a.status=1"); ) as b on a.combo_id=b.c_id where a.status=1".$sql,$canshu);
foreach ($combos as $key=>$combo){ foreach ($combos as $key=>$combo){
$tags=json_decode($combo->tags,true); $tags=json_decode($combo->tags,true);
@ -121,7 +167,28 @@ select combo_id as c_id,count(*) as count from orders where status in(2,4) group
{ {
$type=DB::table('combo_type')->get(); $type=DB::table('combo_type')->get();
$crowd=DB::table('combo_crowd')->get(); $crowd=DB::table('combo_crowd')->get();
return \Yz::Return(true,"查询成功",['type'=>$type,'crowd'=>$crowd]); $sort_list=[
["id"=>1,'name'=>'综合排序'],
["id"=>2,'name'=>'预约最多'],
["id"=>3,'name'=>'低价优先'],
["id"=>4,'name'=>'高价优先'],
];
$price_list=[
['name'=>'300以下','id'=>1],
['name'=>'300-1000','id'=>2],
['name'=>'1000-1500','id'=>3],
['name'=>'1500-3000','id'=>4],
['name'=>'3000以上','id'=>5],
];
$item_label=[
["id"=>1,'name'=>'一般检查'],
["id"=>2,'name'=>'血常规'],
["id"=>3,'name'=>'尿常规'],
["id"=>4,'name'=>'肝功能'],
["id"=>5,'name'=>'肾功能'],
["id"=>6,'name'=>'血糖']
];
return \Yz::Return(true,"查询成功",['sort_list'=>$sort_list,'combo_type'=>$type,'combo_crowd'=>$crowd,'combo_price'=>$price_list,'combo_item'=>$item_label]);
} }
//获取购买详情内容(详情页信息) //获取购买详情内容(详情页信息)

@ -102,8 +102,8 @@ class UserController extends Controller
public function UpdatePersonList($openid) public function UpdatePersonList($openid)
{ {
$XCX=new XCXApiController(); $XCX=new XCXApiController();
// $list=$XCX::Post('就诊人列表',['a'=>1]); $list=$XCX::Post('就诊人列表',['a'=>1]);
// $openid = "234243";
$ApiPersonList = [ $ApiPersonList = [
[ [
'ghzid' => 'ghz11', 'ghzid' => 'ghz11',

@ -3,11 +3,15 @@
namespace App\Http\Controllers\API; namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Schema;
class XCXApiController extends Controller class XCXApiController extends Controller
{ {
public static $request;
public static function Api($url_code) public static function Api($url_code)
{ {
$url = 'https://dqgatjzx-wx.sixinyun.com'; $url = 'https://dqgatjzx-wx.sixinyun.com';
@ -19,13 +23,58 @@ class XCXApiController extends Controller
public static function Post($url_code, $data) public static function Post($url_code, $data)
{ {
$url = self::Api($url_code); $url = self::Api($url_code);
self::RequestLog($url, $data, $url_code,'小程序接口');
$response = Http::post($url,$data); $response = Http::post($url,$data);
if ($response->successful()) { if ($response->successful()) {
// 处理成功的响应 // 处理成功的响应
dd($response); $res_string = json_encode($response->json(),JSON_UNESCAPED_UNICODE);
$str_len = mb_strlen($res_string, 'utf-8');
$str_size = $str_len / 1024;
$save_res = $res_string;
if ($str_size > 10) $save_res = '{"data":"Row size too large"}';
self::$request->response_data = $save_res;
self::$request->save();
} else { } else {
// 处理失败的响应 // 处理失败的响应
dd($response); self::$request->response_data = "请求失败";
self::$request->save();
} }
} }
public static function RequestLog($url, $post_data, $mark ,$code=0)
{
self::CheckTableName();
foreach ($post_data as $key => $post_datum) {
$str_len = mb_strlen(json_encode($post_datum, JSON_UNESCAPED_UNICODE), 'utf-8');
$str_size = $str_len / 1024;
if ($str_size > 10) {
$post_data["$key"] = 'Row size too large';
}
}
$post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE);
self::$request->code = $code;
self::$request->mark = $mark;
self::$request->post_data = $post_data == '[]' ? '{}' : $post_data;
self::$request->request_url = $url;
self::$request->save();
}
public static function CheckTableName()
{
$table_name = 'zz_peis_log_' . date('ym');
$table_count = DB::select('select count(1) as c from information_schema.TABLES where table_schema = ? and table_name = ?', [env('DB_DATABASE'), $table_name])[0];
if ($table_count->c === 0) {
Schema::create($table_name, function (Blueprint $table) {
$table->id();
$table->string('code', 50)->index();
$table->string('mark', 50)->index();
$table->text('post_data');
$table->text('response_data')->nullable();
$table->string('request_url', 300);
$table->timestamps();
});
}
self::$request = new \App\Models\PEISLog();
self::$request->setTable($table_name);
}
} }

@ -82,6 +82,9 @@ Route::group(['middleware' => ['checktoken', 'log'], 'prefix' => 'v1'], function
Route::post('admin/QuestionGetDetail', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@GetDetail');//题目详情 Route::post('admin/QuestionGetDetail', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@GetDetail');//题目详情
Route::post('admin/QuestionDel', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@Del');//删除题目 Route::post('admin/QuestionDel', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@Del');//删除题目
Route::post('admin/ArticleGetList', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@GetList');//获取文章列表 Route::post('admin/ArticleGetList', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@GetList');//获取文章列表
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/ArticleGetDel', 'App\Http\Controllers\API\Admin\YeWu\ArticleController@Del');//文章详情

@ -236,4 +236,16 @@ export const QuestionDel = (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={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ArticleSave',data:data})
}
//文章详情
export const ArticleGetDetail = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ArticleGetDetail',data:data})
}
//删除文章
export const ArticleGetDel = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/ArticleGetDel',data:data})
} }

@ -13,6 +13,7 @@
@change="ArticleTypeChange()"> @change="ArticleTypeChange()">
<el-radio-button :label="1">健康指导</el-radio-button> <el-radio-button :label="1">健康指导</el-radio-button>
<el-radio-button :label="2">注意事项</el-radio-button> <el-radio-button :label="2">注意事项</el-radio-button>
<el-radio-button :label="3">院内介绍</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-row> </el-row>
@ -27,7 +28,6 @@
</el-table-column> </el-table-column>
<el-table-column prop="author" label="作者" /> <el-table-column prop="author" label="作者" />
<el-table-column prop="order" label="排序" /> <el-table-column prop="order" label="排序" />
<el-table-column prop="show_date" label="显示时间" />
<el-table-column label="操作"> <el-table-column label="操作">
<template #default="scope"> <template #default="scope">
<el-button type="primary" @click="EditClick(scope.row)" :icon="Edit" circle /> <el-button type="primary" @click="EditClick(scope.row)" :icon="Edit" circle />
@ -40,10 +40,10 @@
:page-sizes="[15, 50, 100, 200]" layout="total,sizes, prev, pager, next" :total="total" :page-sizes="[15, 50, 100, 200]" layout="total,sizes, prev, pager, next" :total="total"
@size-change="PageSizeChange" @current-change="PageCurrentChange" /> @size-change="PageSizeChange" @current-change="PageCurrentChange" />
</div> </div>
<el-dialog v-model="dialogVisible" title="套餐信息" width="60%"> <el-dialog v-model="dialogVisible" title="文章编辑" width="60%">
<el-form :model="Info" label-width="100px" v-loading="loading"> <el-form :model="Info" label-width="100px" v-loading="loading">
<el-form-item label="名称"> <el-form-item label="标题">
{{Info.name}} <el-input v-model="Info.title" />
</el-form-item> </el-form-item>
<el-form-item label="Logo"> <el-form-item label="Logo">
<el-upload class="avatar-uploader" :action="upfileurl" :headers="headerObj" <el-upload class="avatar-uploader" :action="upfileurl" :headers="headerObj"
@ -54,37 +54,11 @@
</el-icon> </el-icon>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="体检类型"> <el-form-item label="作者">
<el-checkbox-group v-model="Info.checkup_type_id"> <el-input v-model="Info.author" />
<el-select :filterable="true" clearable v-model="Info.checkup_type_id" placeholder="选择体检类型">
<el-option v-for="(item,index) in CheckUpTypeEnableList" :key="index" :label="item.name"
:value="item.id" />
</el-select>
</el-checkbox-group>
</el-form-item> </el-form-item>
<el-form-item label="套餐类型"> <el-form-item label="排序">
<el-select :filterable="true" clearable v-model="Info.type_id" placeholder="选择套餐类型"> <el-input-number v-model="Info.order" :min="1" :max="999" />
<el-option v-for="(item,index) in ComboTypeList" :key="index" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="适应人群">
<el-select :filterable="true" clearable v-model="Info.crowd_id" placeholder="选择适应人群">
<el-option v-for="(item,index) in ComboCrowdList" :key="index" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="标签">
<el-input v-model="Info.tags" type="textarea" />
</el-form-item>
<el-form-item label="标签2">
<el-input v-model="Info.tags2" type="textarea" />
</el-form-item>
<el-form-item label="简介">
<el-input v-model="Info.intro" type="textarea" />
</el-form-item>
<el-form-item label="服务承诺">
<el-input v-model="Info.sub_intro" type="textarea" />
</el-form-item> </el-form-item>
<el-form-item label="详情"> <el-form-item label="详情">
<div style="border: 1px solid #ccc"> <div style="border: 1px solid #ccc">
@ -120,11 +94,11 @@
Toolbar Toolbar
} from '@wangeditor/editor-for-vue' } from '@wangeditor/editor-for-vue'
import { import {
ElMessage ElMessage,ElMessageBox
} from 'element-plus' } from 'element-plus'
import { import {
UpFileUrl, UpFileUrl,
ArticleGetList ArticleGetList,ArticleSave,ArticleGetDetail,ArticleGetDel
} from '@/api/api.js' } from '@/api/api.js'
import { import {
Edit, Edit,
@ -154,7 +128,7 @@
let BaseUrl = ref(import.meta.env.VITE_APP_FILE) let BaseUrl = ref(import.meta.env.VITE_APP_FILE)
const upLoadSuccess = (res) => { const upLoadSuccess = (res) => {
logo.value = BaseUrl.value + res.data logo.value = BaseUrl.value + res.data
Info.value.cover = res.data Info.value.head_img = res.data
} }
let searchInfo = ref({}); let searchInfo = ref({});
let Info = ref({}); let Info = ref({});
@ -212,16 +186,76 @@
editorRef.value = editor // editor editorRef.value = editor // editor
} }
const ArticleTypeChange = () => { const ArticleTypeChange = () => {
Info.value.type = searchInfo.value.ArticleType
GetList() GetList()
} }
const AddClick=()=>{ const AddClick=()=>{
dialogVisible.value = true dialogVisible.value = true
Info.value.order = 1
Info.value.id=0
} }
const EditClick = () => { const EditClick = (row) => {
dialogVisible.value = true dialogVisible.value = true
loading.value = true
ArticleGetDetail({
id:row.id
}).then(res => {
loading.value = false
if (res.status) {
Info.value = res.data
logo.value = BaseUrl.value + res.data.head_img
editorRef.value.setHtml(Info.value.content)
} else {
ElMessage.error(res.msg)
}
})
}
const Save=()=>{
Info.value.content = editorRef.value.getHtml()
loading.value = true
ArticleSave({
Info:Info.value
}).then(res => {
loading.value = false
if (res.status) {
dialogVisible.value = false
GetList()
} else {
ElMessage.error(res.msg)
}
})
}
const Del=(row)=>{
ElMessageBox.confirm(
'确定删除吗?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
loading.value = true
ArticleGetDel({
id: row.id
}).then(res => {
loading.value = false
if (res.status) {
ElMessage({
type: 'success',
message: '删除完成',
})
GetList()
} else {
ElMessage.error(res.msg)
}
})
})
} }
onMounted(() => { onMounted(() => {
searchInfo.value.ArticleType = 1 searchInfo.value.ArticleType = 1
Info.value.type=1
GetList() GetList()
}) })
</script> </script>

@ -134,6 +134,7 @@
<style scoped> <style scoped>
.Dashboard{ .Dashboard{
padding: 20px; padding: 20px;
display: none;
} }
.MonthCount{ .MonthCount{
height: 400px; height: 400px;

Loading…
Cancel
Save