laraverl框架房源管理

路由
//列表展示
Route::get('/fangattr/index','User\FangAttrController@index')->name('user.fangattr.index');
// 文件上传
Route::post('fangattr/upfile','User\FangAttrController@upfile')->name('user.fangattr.upfile');
//文章添加页面
Route::get('/fangattr/create','User\FangAttrController@create')->name('user.fangattr.create');
Route::post('/fangattr/store','User\FangAttrController@store')->name('user.fangattr.store');

//修改
Route::get('/fangattr/{id}/edit','User\FangAttrController@edit')->name('user.fangattr.edit');
Route::put('/fangattr/{id}','User\FangAttrController@update')->name('user.fangattr.update');
//删除
Route::delete('/fangattr/delete/{id}','User\FangAttrController@delete')->name('user.fangattr.delete');
控制器
// App\Http\Controllers\User\FangAttrController.php
<?php
namespace App\Http\Controllers\User;

// 导入房源模型
use App\Models\Fangattr;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class FangAttrController extends Controller {
    /**
     * 列表
     */
    public function index() {
        // 实例化
        $model = new Fangattr();
        // 取数据
        $data = $model->getList();

        // 指定视图并赋值
        return view('user.fangattr.index', compact('data'));
    }

    /**
     * 添加界面显示
     */
    public function create() {
        // 获取顶部属性
        $data = Fangattr::where('pid', 0)->get();
        // 指定视图并赋值
        return view('user.fangattr.create', compact('data'));
    }

    // 文件上传
    public function upfile(Request $request) {
        // 默认图标
        $pic = config('up.pic');
        if ($request->hasFile('file')) {
            // 上传
            // 参数2 配置的节点名称
            $ret = $request->file('file')->store('', 'fangattr');
            $pic = '/uploads/fangattr/' . $ret;
        }
        return ['status' => 0, 'url' => $pic];
    }

    // 添加处理
    public function store(Request $request) {
        // 表单验证
        $this->validate($request, [
            'name' => 'required',
            //'field_name' => 'required'
        ]);

        // 验证通过后,入库并跳转到列表页面
        // 获取数据
        $postData = $request->except(['_token', 'file']);
        // 因为字段不能为null,而我们没有传数据,所以一定解决手段
        $postData['field_name'] = !empty($postData['field_name']) ? $postData['field_name'] : '';
        // 入库
        Fangattr::create($postData);
        // 跳转
        return redirect(route('user.fangattr.index'));
    }

    // 修改界面
    public function edit(Fangattr $fangattr ,$id) {
        // 获取顶部属性
        $fangattr=Fangattr::where('id',$id)->first();
        $data = Fangattr::where('pid', 0)->get();
        return view('user.fangattr.edit', compact('data', 'fangattr','id'));
    }

    // 修改处理
    public function update(Request $request, Fangattr $fangattr,$id) {
        // 表单验证
        $this->validate($request, [
            'name' => 'required',
        ]);

        // 验证通过后,入库并跳转到列表页面
        // 获取数据
        $postData = $request->except(['_token', 'file', '_method']);
        // 因为字段不能为null,而我们没有传数据,所以一定解决手段
        $postData['field_name'] = !empty($postData['field_name']) ? $postData['field_name'] : '';
        // 修改入库
        Fangattr::where('id',$id)->update($postData);
        // 跳转
        return redirect(route('user.fangattr.index'));
    }

    // 删除操作
    public function delete(Fangattr $fangattr,$id) {
        Fangattr::find($id)->delete();
        return ['status' => 0, 'msg' => '删除成功'];
    }
}

模型
// App\Models\Fangattr.php
<?php

namespace App\Models;

class Fangattr extends Base
{
    // 获取数据
    public function getList() {
        // 获取全部的数据
        $data = self::get()->toArray();
        // 调用父类中的递归层级函数
        return $this->treeLevel($data);
    }

    // 获取器
    public function getIconAttribute() {
        return config('url.domain').$this->attributes['icon'];
    }
}

配置上传文件的配置节点
// App\config\filesystems.php
 // 房源属性
        'fangattr' => [
            'driver' => 'local',
            // 上传图片的路径
            'root' => public_path('uploads/fangattr'),
        ],
        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],
列表模板
@extends('user.common.main')


@section('cnt')
    <nav class="breadcrumb">
        <i class="Hui-iconfont">&#xe67f;</i> 首页
        <span class="c-gray en">&gt;</span> 房源属性管理
        <span class="c-gray en">&gt;</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">&#xe68f;</i></a>
    </nav>
    {{-- 消息提示 --}}
    @include('user.common.msg')

    <div class="page-container">
        <form method="get" class="text-c"> 输入想要搜索的权限名称:
            <input type="text" class="input-text" style="width:250px" placeholder="节点" value="{{ request()->get('name') }}" name="name" autocomplete="off">
            <button type="submit" class="btn btn-success radius"><i class="Hui-iconfont">&#xe665;</i> 搜节点</button>
        </form>
        <div class="cl pd-5 bg-1 bk-gray mt-20">
        <span class="l">
            <a href="/fangattr/create" class="btn btn-primary radius">
                <i class="Hui-iconfont">&#xe600;</i> 添加房源属性
            </a>
        </span>
        </div>
        <div class="mt-20">
            <table class="table table-border table-bordered table-hover table-bg table-sort">
                <thead>
                <tr class="text-c">
                    <th width="80">ID</th>
                    <th width="80">字段名</th>
                    <th width="80">上级ID</th>
                    <th width="100">属性名称</th>
                    <th width="100">图标</th>
                    <th width="130">加入时间</th>
                    <th width="100">操作</th>
                </tr>
                </thead>
                <tbody>
                @foreach($data as $item)
                    <tr class="text-c">
                        <td>{{ $item['id'] }}</td>
                        <td class="text-l">
                            {{ $item['html'] }}
                            {{ $item['name'] }}
                        </td>
                        <td>{{$item['pid']}}</td>
                        <td>{{$item['field_name']}}</td>
                        <td><img src="{{ $item['icon'] }}" style="width: 50px;"/></td>
                        <td>{{ $item['created_at'] }}</td>
                        <td class="td-manage">
                            <a href="{{ route('user.fangattr.edit',['id'=>$item['id']]) }}" class="label label-secondary radius">修改</a>
                            <a data-href="{{ route('user.fangattr.delete',['id'=>$item['id']]) }}" class="delbtn label label-warning radius">删除</a>
                        </td>
                    </tr>
                @endforeach
                </tbody>
            </table>
        </div>
    </div>
@endsection
@section('js')
    <!--请在下方写此页面业务相关的脚本-->
    <script type="text/javascript" src="/admin/lib/My97DatePicker/4.8/WdatePicker.js"></script>
    <script type="text/javascript" src="/admin/lib/datatables/1.10.0/jquery.dataTables.min.js"></script>
    <script type="text/javascript" src="/admin/lib/laypage/1.2/laypage.js"></script>
    <script>
      // 删除事件绑定
      $('.delbtn').click(function (evt) {
        // 在html中以data-开头的属性,都在evt对象中有传递过来
        //console.log(evt.target.dataset);
        let _this = $(this);
        // 请求的url地址
        let url = _this.attr('data-href');
        // 确认弹框
        layer.confirm('您真的要删除此条记录信息吗?', {
          btn: ['确认删除', '考虑一下']
        }, () => { // 真的选择了删除
          // 发起ajax
          $.ajax({
            url,
            type: 'delete',
            data: {_token: "{{csrf_token()}}"}
          }).then(ret => {
            layer.msg(ret.msg, {icon: 1, time: 2000}, () => {
              _this.parents('tr').remove();
            });
          });
        });
      });
    </script>
@endsection

添加模板
@extends('user.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">&#xe67f;</i> 首页
        <span class="c-gray en">&gt;</span> 房源属性管理
        <span class="c-gray en">&gt;</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">&#xe68f;</i></a>
    </nav>
    <article class="page-container">
        {{-- 表单验证提示 --}}
        @include('user.common.validate')

        <form action="{{ route('user.fangattr.store') }}" id="form-member-add" method="post" class="form form-horizontal">
            @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">
                    <span class="select-box">
                        <select class="select" name="pid">
                            <option value="0">==顶级==</option>
                            @foreach($data as $item)
                                <option value="{{ $item->id }}">{{ $item->name }}</option>
                            @endforeach
                        </select>
                    </span>
                </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">
                    <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-5">
                    <!-- 图片上传 -->
                    <div id="picker">选择图标</div>
                </div>
                <div class="formControls col-xs-4 col-sm-4">
                    <input type="hidden" value="{{ config('up.pic') }}" name="icon" id="icon"/>
                    <img src="{{ config('up.pic') }}" id="pic" style="width: 50px;">
                </div>
            </div>
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-3">字段名称:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    <input type="text" class="input-text" name="field_name"/>
                </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="/admin/lib/jquery.validation/1.14.0/jquery.validate.js"></script>
    <script type="text/javascript" src="/admin/lib/jquery.validation/1.14.0/validate-methods.js"></script>
    <script type="text/javascript" src="/admin/lib/jquery.validation/1.14.0/messages_zh.js"></script>
    <script>
      // 前端表单验证
      $("#form-member-add").validate({
        // 规则
        rules: {
          // 表单元素名称
          name: {
            // 验证规则
            required: true
          }
        },
        // 取消键盘事件
        onkeyup: false,
        // 验证成功后的样式
        success: "valid",
        // 验证通过后,处理的方法 form dom对象
        submitHandler: function (form) {
          // 表单提交
          form.submit();
        }
      });


      // 初始化Web Uploader
      var uploader = WebUploader.create({
        // 选完文件后,是否自动上传
        auto: true,
        // swf文件路径
        swf: '/webuploader/Uploader.swf',
        // 文件接收服务端 上传PHP的代码
        server: '{{ route('user.fangattr.upfile') }}',
        // 文件上传是携带参数
        formData: {
          _token: '{{csrf_token()}}'
        },
        // 文件上传是的表单名称
        fileVal: 'file',
        // 选择文件的按钮
        pick: {
          id: '#picker',
          // 是否开启选择多个文件的能力
          multiple: false
        },
        // 压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
        resize: true
      });
      // 上传成功时的回调方法
      uploader.on('uploadSuccess', function (file, ret) {
        // 图片路径
        let src = ret.url;
        // 给表单添加value值
        $('#icon').val(src);
        // 给图片添加src
        $('#pic').attr('src', src);

      });
    </script>
@endsection


修改模板
@extends('user.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">&#xe67f;</i> 首页
        <span class="c-gray en">&gt;</span> 房源属性管理
        <span class="c-gray en">&gt;</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">&#xe68f;</i></a>
    </nav>
    <article class="page-container">
        {{-- 表单验证提示 --}}
        @include('user.common.validate')

        <form action="{{ route('user.fangattr.update',$id) }}" id="form-member-add" method="post" class="form form-horizontal">
            @method('PUT')
            @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">
                    <span class="select-box">
                        <select class="select" name="pid">
                            <option value="0" @if($fangattr->pid==0) selected @endif>==顶级==</option>
                            @foreach($data as $item)
                                <option value="{{ $item->id }}" @if($fangattr->pid==$item->id) selected @endif>{{ $item->name }}</option>
                            @endforeach
                        </select>
                    </span>
                </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">
                    <input type="text" class="input-text" name="name" value="{{ $fangattr->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-5">
                    <!-- 图片上传 -->
                    <div id="picker">选择图标</div>
                </div>
                <div class="formControls col-xs-4 col-sm-4">
                    <input type="hidden" value="{{ $fangattr->icon }}" name="icon" id="icon"/>
                    <img src="{{ $fangattr->icon }}" id="pic" style="width: 50px;">
                </div>
            </div>
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-3">字段名称:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    <input type="text" class="input-text" name="field_name" value="{{ $fangattr->field_name }}"/>
                </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="/admin/lib/jquery.validation/1.14.0/jquery.validate.js"></script>
    <script type="text/javascript" src="/admin/lib/jquery.validation/1.14.0/validate-methods.js"></script>
    <script type="text/javascript" src="/admin/lib/jquery.validation/1.14.0/messages_zh.js"></script>
    <script>
      // 前端表单验证
      $("#form-member-add").validate({
        // 规则
        rules: {
          // 表单元素名称
          name: {
            // 验证规则
            required: true
          }
        },
        // 取消键盘事件
        onkeyup: false,
        // 验证成功后的样式
        success: "valid",
        // 验证通过后,处理的方法 form dom对象
        submitHandler: function (form) {
          // 表单提交
          form.submit();
        }
      });


      // 初始化Web Uploader
      var uploader = WebUploader.create({
        // 选完文件后,是否自动上传
        auto: true,
        // swf文件路径
        swf: '/webuploader/Uploader.swf',
        // 文件接收服务端 上传PHP的代码
        server: '{{ route('user.fangattr.upfile') }}',
        // 文件上传是携带参数
        formData: {
          _token: '{{csrf_token()}}'
        },
        // 文件上传是的表单名称
        fileVal: 'file',
        // 选择文件的按钮
        pick: {
          id: '#picker',
          // 是否开启选择多个文件的能力
          multiple: false
        },
        // 压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
        resize: true
      });
      // 上传成功时的回调方法
      uploader.on('uploadSuccess', function (file, ret) {
        // 图片路径
        let src = ret.url;
        // 给表单添加value值
        $('#icon').val(src);
        // 给图片添加src
        $('#pic').attr('src', src);

      });
    </script>
@endsection


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值