/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$data = Fang::getFangAttr();
return view('admin.fang.create', $data);
}
/**
* Store a newly created resource in storage.
* 添加到es时机,在数据添加到数据库成功后,才来把数据添加到es索引中
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$params = $request->except(['_token', 'file']);
//获取房源的详细地址
$province = City::where('id', '=', $params['fang_province'])->value('name');
$city = City::where('id', '=', $params['fang_city'])->value('name');
$region = City::where('id', '=', $params['fang_region'])->value('name');
$address = $province . $city . $region . $params['fang_addr'];
//高德地图api
$url = sprintf(config('gaode.url'), $address);
//取出高德数据
$data = file_get_contents($url);
$location = json_decode($data, true)['geocodes'][0]['location'];
//获取经纬度
$newAddr = explode(',', $location);
$params['latitude'] = $newAddr[0];
$params['longitude'] = $newAddr[1];
// 入库
$data = Fang::create($params);
//建立es客户端对象
$client = ClientBuilder::create()->setHosts(config('es.host'))->build();
// 写文档
$params = [
'index' => 'fang',
'type' => '_doc',
'id' => $data->id,
'body' => [
'fang_name' => $data->fang_name,
'fang_desn' => $data->fang_desn,
],
];
$client->index($params);
// 跳转
return redirect(route('admin.fang.index'));
}
//创建es索引
public function esInit()
{
//建立es客户端对象
$client = ClientBuilder::create()->setHosts(config('es.host'))->build();
// 创建索引
$params = [
'index' => 'fang',
'body' => [
'settings' => [
'number_of_shards' => 5,
'number_of_replicas' => 1
],
'mappings' => [
'_doc' => [
'_source' => [
'enabled' => true
],
'properties' => [
'fang_owner'=>[
'type' => 'keyword',
],
'fang_name' => [
'type' => 'text',
'analyzer' => 'ik_max_word',
'search_analyzer' => 'ik_max_word'
],
'fang_desn' => [
'type' => 'text',
'analyzer' => 'ik_max_word',
'search_analyzer' => 'ik_max_word'
]
]
]
]
]
];
$response = $client->indices()->create($params);
dump($response);
}
//修改房源状态
public function fangStatus(Request $request)
{
//取出房源id
$fangID = $request->get('fang_id');
$fangStatus= $request->get('fang_status');
Fang::where('id','=',$fangID)->update(['fang_status'=>$fangStatus]);
return ['errorCode'=>0,'msg'=>'修改成功','data'=>''];
}
@extends('common.main')
@section('css')
{{-- webuploader上传样式 --}}
<link rel="stylesheet" type="text/css" href="/webuploader/webuploader.css"/>
@endsection
@section('cnt')
<nav class="breadcrumb">
<i class="Hui-iconfont"></i> 首页
<span class="c-gray en">></span> 管理
<span class="c-gray en">></span> 房源
<a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px"
href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont"></i></a>
</nav>
<article class="page-container">
{{-- 表单验证提示 --}}
@include('common.validate')
<form action="{{ route('house.store') }}" method="post" class="form form-horizontal" id="fang-add">
@csrf
<div class="row cl">
<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>名称:</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" class="input-text" name="name">
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>地址:</label>
<div class="formControls col-xs-4 col-sm-4">
<select name="province" style="width: 100px;" onchange="changeCity(this,'city')">
<option value="0">==请选择省==</option>
@foreach($city_data as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
<select name="city" id="city" style="width: 100px;"
onchange="changeCity(this,'region')">
<option value="0">==市==</option>
</select>
<select name="region" id="region" style="width: 100px;">
<option value="0">==区/县==</option>
</select>
</div>
{{-- <div class="row cl">--}}
{{-- <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>房屋图片:</label>--}}
{{-- <div class="formControls col-xs-2 col-sm-2">--}}
{{-- <div id="picker">房屋图片</div>--}}
{{-- </div>--}}
{{-- <div class="formControls col-xs-6 col-sm-7">--}}
{{-- <!-- 表单提交时,上传图片地址,以#隔开 -->--}}
{{-- <input type="hidden" name="fang_pic" id="fang_pic"/>--}}
{{-- <!-- 显示上传成功后的图片容器 -->--}}
{{-- <div id="imglist"></div>--}}
{{-- </div>--}}
{{-- </div>--}}
<div class="row cl">
<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>是否推荐:</label>
<div class="formControls col-xs-8 col-sm-9 skin-minimal">
<div class="radio-box">
<label>
<input name="is_recommend" type="radio" value="0" checked>
否
</label>
</div>
<div class="radio-box">
<label>
<input type="radio" value="1" name="is_recommend">
是
</label>
</div>
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>房屋详情:</label>
<div class="formControls col-xs-8 col-sm-9">
<textarea id="fang_body" name="body">详情信息添加</textarea>
</div>
</div>
<div class="row cl">
<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
<input class="btn btn-primary radius" type="submit" value="添加">
</div>
</div>
</form>
</article>
@endsection
@section('js')
<!-- webuploader上传js -->
<script type="text/javascript" src="/webuploader/webuploader.js"></script>
<script type="text/javascript" src="/static/lib/jquery.validation/1.14.0/jquery.validate.js"></script>
<script type="text/javascript" src="/static/lib/jquery.validation/1.14.0/validate-methods.js"></script>
<script type="text/javascript" src="/static/lib/jquery.validation/1.14.0/messages_zh.js"></script>
<!-- 配置文件 -->
<script type="text/javascript" src="/ueditor/ueditor.config.js"></script>
<!-- 编辑器源码文件 -->
<script type="text/javascript" src="/ueditor/ueditor.all.js"></script>
<script>
// 下拉选择市和地区
// obj 当前对象
// selectName 给选中下个处理html的ID 字符串
async function changeCity(obj, name) {
//原生js写法
// console.log(obj.value)
//jquery 写法
// console.log($(obj).val())
//取出选择的省份id
var id = obj.value;
//三级联动接口
var url = '{{route('fang.city')}}?id=' + id;
//使用fetch()方法发送请求,把异步变成同步,获取数据
let ret = await fetch(url)
//取到城市数据
let cityArr = await ret.json();
var html = '<option value="0">==市==</option>';
cityArr.map((item, index) => {
let {id, name} = item;
html += ` <option value="${id}">${name}</option>`
})
$('#' + name).html(html)
}
// 富文本编辑器
var ue = UE.getEditor('fang_body', {
initialFrameHeight: 200
});
// 初始化Web Uploader
var uploader = WebUploader.create({
// 选完文件后,是否自动上传
auto: true,
// swf文件路径
swf: '/webuploader/Uploader.swf',
// 文件接收服务端 上传PHP的代码
server: '{{ route('pic.upfile') }}',
// 文件上传是携带参数
formData: {
_token: '{{csrf_token()}}'
},
// 文件上传是的表单名称
fileVal: 'file',
// 选择文件的按钮
pick: {
id: '#picker',
// 是否开启选择多个文件的能力
multiple: true
},
// 压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
resize: true,
duplicate: true
});
// 上传成功时的回调方法
uploader.on('uploadSuccess', function (file, ret) {
// 解决表单提交时,图片以#隔开解决
let val = $('#fang_pic').val();
let tmp = val + '#' + ret.url;
$('#fang_pic').val(tmp);
// 图片显示
let imglist = $('#imglist');
// 注:一定要用追加还是不html覆盖
let html = `
<div style="position: relative;;width:100px;">
<img src="${ret.url}" style="width:100px;" />
<strong onclick="delpic(this,'${ret.url}')" style="position: absolute;right: 2px;top: 2px;color: white;font-size: 20px;">X<strong>
</div>
`;
imglist.append(html);
});
// 删除图片
function delpic(obj, picurl) {
{{--let url = "{{ route('admin.fang_owner.delfile') }}?file=" + picurl;--}}
// 发起请求删除
fetch(url);
// 删除当前点击图片显示
$(obj).parent().remove();
// 修改隐藏域表单
$('#pic').val($('#pic').val().replace(`#${picurl}`, ''));
}
// 前端表单验证
$("#fang-add").validate({
// 规则
rules: {
name: {
required: true
},
province: {
min: 1
},
city: {
min: 1
},
region: {
min: 1
},
},
messages: {
province: {
min: '省份不能为空'
},
city: {
min: '市不能为空'
},
region: {
min: '区或县不能为空'
}
},
// 取消键盘事件
onkeyup: false,
// 验证成功后的样式
success: "valid",
// 验证通过后,处理的方法 form dom对象
submitHandler: function (form) {
// 表单提交
form.submit();
}
});
</script>
@endsection
最后是路由
//上传图片路由
Route::post('fang_owner/upfile', 'FangOwnerController@upFile')->name('fang_owner.upfile');
//删除图片
Route::get('fang_owner/delfile','FangOwnerController@delFile')->name('fang_owner.delfile');
Route::get('fang_owner/export','FangOwnerController@export')->name('fang_owner.export');
//简历es索引
Route::get('fang/es/es_init','FangController@esInit')->name('fang.es_init');
//修改状态
Route::get('fang/chang_status','FangController@fangStatus')->name('fang.chang_status');
//资源路由
Route::resource('fang','FangController');
//城市表
Route::get('fang.city','CityController@fangCity')->name('fang.city');
最后还有个excel导出