后台顾客地址管理

This commit is contained in:
TL 2022-06-29 09:30:37 +08:00
parent 2f4aed3922
commit 01a032d69e
7 changed files with 105 additions and 128 deletions

View File

@ -18,6 +18,7 @@ Route::prefix('admin')
Route::Resource('files', \Beike\Admin\Http\Controllers\FileController::class);
Route::Resource('customers', \Beike\Admin\Http\Controllers\CustomerController::class);
Route::resource('customers.addresses', \Beike\Admin\Http\Controllers\AddressController::class);
Route::put('products/restore', [\Beike\Admin\Http\Controllers\ProductController::class, 'restore']);
Route::resource('products', \Beike\Admin\Http\Controllers\ProductController::class);

View File

@ -17,5 +17,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
class Address extends Model
{
use HasFactory;
protected $fillable = ['customer_id', 'name', 'phone', 'country_id', 'state_id', 'state', 'city_id', 'city', 'zipcode', 'address_1', 'address_2'];
}

View File

@ -3,6 +3,7 @@
namespace Beike\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
@ -14,4 +15,9 @@ class Customer extends Authenticatable
const AUTH_GUARD = 'web_shop';
protected $fillable = ['name', 'email', 'password', 'status', 'avatar', 'customer_group_id', 'language_id', 'status', 'from'];
public function addresses(): HasMany
{
return $this->hasMany(Address::class);
}
}

View File

@ -11,7 +11,45 @@
namespace Beike\Repositories;
use Beike\Models\Address;
class AddressRepo
{
/**
* 创建一个address记录
* @param $data
* @return int
*/
public static function create($data)
{
return Address::query()->insertGetId($data);
}
/**
* @param $id
* @param $data
* @return bool|int
*/
public static function update($id, $data)
{
return Address::query()->find($id)->update($data);
}
/**
* @param $id
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model|null
*/
public static function find($id)
{
return Address::query()->find($id);
}
/**
* @param $id
* @return void
*/
public static function delete($id)
{
Address::query()->find($id)->delete();
}
}

View File

@ -0,0 +1,58 @@
@extends('admin::layouts.master')
@section('title', '顾客管理')
@push('header')
<style>
.el-tree-node__content {
height: 32px;
border-bottom: 1px solid #f9f9f9;
}
</style>
@endpush
@section('content')
<div id="customer-app" class="card">
<div class="card-body">
<a href="{{ admin_route('customers.create') }}" class="btn btn-primary">创建顾客</a>
<div class="mt-4" style="">
<el-tree :data="categories" default-expand-all :expand-on-click-node="false">
<div class="custom-tree-node" slot-scope="{ node, data }" style="flex:1;display:flex">
<span>@{{ data.id }}</span>
<span>@{{ data.email }}</span>
<span>@{{ data.avatar }}</span>
<span>@{{ data.from }}</span>
<div style="flex:1"></div>
<span class="mr-4">@{{ data.status ? '启用' : '禁用' }}</span>
<div>
<a :href="data.url_edit">编辑</a>
<a>删除</a>
</div>
</div>
</el-tree>
</div>
</div>
</div>
@endsection
@push('footer')
<script>
new Vue({
el: '#customer-app',
data: {
categories: @json($customers),
defaultProps: {
children: 'children',
label: 'name'
}
},
methods: {
handleNodeClick(data) {
console.log(data);
}
}
});
</script>
@endpush

View File

@ -1,97 +0,0 @@
@extends('admin::admin.layouts.master')
@section('title', '分类管理')
@push('header')
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.min.js"></script>
@endpush
@section('content')
<div id="app">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>编辑分类</span>
</div>
<el-form label-width="200px" size="small1">
<el-form-item label="分类名称">
<div style="max-width: 400px">
@foreach (locales() as $locale)
<el-input class="mb-1">
<template slot="append">{{ $locale['name'] }}</template>
</el-input>
@endforeach
</div>
</el-form-item>
<el-form-item label="分类描述">
<div style="max-width: 400px">
@foreach (locales() as $locale)
<el-input v-model="form.descriptions['{{ $locale['code'] }}'].content" class="mb-1">
<template slot="append">{{ $locale['name'] }}</template>
</el-input>
@endforeach
</div>
</el-form-item>
<el-form-item label="上级分类">
<el-select v-model="form.parent_id" placeholder="请选择上级分类">
@foreach ($categories as $_category)
<el-option label="{{ $_category->name }}" value="{{ $_category->id }}"></el-option>
@endforeach
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-radio-group v-model="form.active">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">禁用</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="save">立即创建</el-button>
<el-button>取消</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
@endsection
@push('footer')
<script>
new Vue({
el: '#app',
data() {
return {
form: {
parent_id: 0,
active: 1,
descriptions: {
zh_cn: {
name: '',
content: '',
},
en: {
name: '',
content: '',
}
}
}
};
},
methods: {
save() {
axios.post(@json(admin_route('categories.store')), this.form).then(response => {
this.loading = false;
}).catch(error => {
// this.$message.error(error.response.data.message);
});
}
}
});
</script>
@endpush

View File

@ -1,31 +0,0 @@
@extends('admin::layouts.master')
@section('title', '顾客管理')
@section('content')
<div id="customer-app" class="card">
<div class="card-header">
编辑顾客
</div>
<div class="card-body">
<form action="{{ admin_route($customer->id ? 'customers.update' : 'customers.store', $customer) }}"
method="POST">
@csrf
@method($customer->id ? 'PUT' : 'POST')
<input type="hidden" name="_redirect" value="{{ $_redirect }}">
<x-admin-form-switch title="状态" name="active" :value="old('active', $customer->active ?? 1)"/>
<x-admin::form.row>
<button type="submit" class="btn btn-primary">保存</button>
<a href="{{ $_redirect }}" class="btn btn-outline-secondary">返回</a>
</x-admin::form.row>
</form>
</div>
</div>
@endsection
@push('footer')
@endpush