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

wenjuan
yanzai 1 year ago
parent a80048a3f7
commit dc86e4ee19

@ -18,7 +18,27 @@ class ArticleController extends Controller
}
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');
$info = DB::table('articles')->where(['id'=>$id,'is_del'=>0,'status'=>1])->first();
if($info){
return \Yz::Return(true,"查询完成",['info'=>$info]);
return \Yz::Return(true,"查询完成",$info);
}else{
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',
'ArticleGetList' => $base_url . '/api/H5/ArticleGetList',
'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');
$doctor = $request->post('doctor');
$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();
$user=DB::table('web_users')->where(['openid'=>$openid,'status'=>1,'is_del'=>0])->first();
if(!$user) return \Yz::echoError1('openid对应用户不存在');
@ -45,9 +52,48 @@ class ComboController extends Controller
if(!$person) return \Yz::echoError1("请选择就诊人");
//用户绑定就诊人数量
$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 (
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){
$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();
$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)
{
$XCX=new XCXApiController();
// $list=$XCX::Post('就诊人列表',['a'=>1]);
// $openid = "234243";
$list=$XCX::Post('就诊人列表',['a'=>1]);
$ApiPersonList = [
[
'ghzid' => 'ghz11',

@ -3,11 +3,15 @@
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Schema;
class XCXApiController extends Controller
{
public static $request;
public static function Api($url_code)
{
$url = 'https://dqgatjzx-wx.sixinyun.com';
@ -19,13 +23,58 @@ class XCXApiController extends Controller
public static function Post($url_code, $data)
{
$url = self::Api($url_code);
self::RequestLog($url, $data, $url_code,'小程序接口');
$response = Http::post($url,$data);
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 {
// 处理失败的响应
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/QuestionDel', 'App\Http\Controllers\API\Admin\YeWu\QuestionController@Del');//删除题目
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={}) => {
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()">
<el-radio-button :label="1">健康指导</el-radio-button>
<el-radio-button :label="2">注意事项</el-radio-button>
<el-radio-button :label="3">院内介绍</el-radio-button>
</el-radio-group>
</el-form-item>
</el-row>
@ -27,7 +28,6 @@
</el-table-column>
<el-table-column prop="author" label="作者" />
<el-table-column prop="order" label="排序" />
<el-table-column prop="show_date" label="显示时间" />
<el-table-column label="操作">
<template #default="scope">
<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"
@size-change="PageSizeChange" @current-change="PageCurrentChange" />
</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-item label="名称">
{{Info.name}}
<el-form-item label="标题">
<el-input v-model="Info.title" />
</el-form-item>
<el-form-item label="Logo">
<el-upload class="avatar-uploader" :action="upfileurl" :headers="headerObj"
@ -54,37 +54,11 @@
</el-icon>
</el-upload>
</el-form-item>
<el-form-item label="体检类型">
<el-checkbox-group v-model="Info.checkup_type_id">
<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 label="作者">
<el-input v-model="Info.author" />
</el-form-item>
<el-form-item label="套餐类型">
<el-select :filterable="true" clearable v-model="Info.type_id" placeholder="选择套餐类型">
<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 label="排序">
<el-input-number v-model="Info.order" :min="1" :max="999" />
</el-form-item>
<el-form-item label="详情">
<div style="border: 1px solid #ccc">
@ -120,11 +94,11 @@
Toolbar
} from '@wangeditor/editor-for-vue'
import {
ElMessage
ElMessage,ElMessageBox
} from 'element-plus'
import {
UpFileUrl,
ArticleGetList
ArticleGetList,ArticleSave,ArticleGetDetail,ArticleGetDel
} from '@/api/api.js'
import {
Edit,
@ -154,7 +128,7 @@
let BaseUrl = ref(import.meta.env.VITE_APP_FILE)
const upLoadSuccess = (res) => {
logo.value = BaseUrl.value + res.data
Info.value.cover = res.data
Info.value.head_img = res.data
}
let searchInfo = ref({});
let Info = ref({});
@ -212,16 +186,76 @@
editorRef.value = editor // editor
}
const ArticleTypeChange = () => {
Info.value.type = searchInfo.value.ArticleType
GetList()
}
const AddClick=()=>{
dialogVisible.value = true
Info.value.order = 1
Info.value.id=0
}
const EditClick = () => {
const EditClick = (row) => {
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(() => {
searchInfo.value.ArticleType = 1
Info.value.type=1
GetList()
})
</script>

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

Loading…
Cancel
Save