Change plugin purchase process
wip wip wip wip admin ui optimization Optimize file manager
This commit is contained in:
parent
4869e4252e
commit
77bf0bca1a
|
|
@ -46,8 +46,8 @@ hr.horizontal.dark {
|
|||
// border-width: 2px;
|
||||
|
||||
.nav-item {
|
||||
margin-left: 0.75rem;
|
||||
margin-right: 0.75rem;
|
||||
margin-left: 0.65rem;
|
||||
margin-right: 0.65rem;
|
||||
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
|
|
@ -60,7 +60,7 @@ hr.horizontal.dark {
|
|||
.nav-link {
|
||||
color: #6c757d;
|
||||
border: none;
|
||||
padding: 0 .6rem 0.7rem;
|
||||
padding: 0 1rem 0.7rem;
|
||||
|
||||
&.active {
|
||||
color: $primary;
|
||||
|
|
@ -107,8 +107,11 @@ hr.horizontal.dark {
|
|||
table.table {
|
||||
thead {
|
||||
th {
|
||||
background-color: #f9fbfd;
|
||||
// background-color: #f9fbfd;
|
||||
background-color: #f5f7f8;
|
||||
// color: #74859e;
|
||||
padding-top: .7rem;
|
||||
padding-bottom: .7rem;
|
||||
font-size: .825rem;
|
||||
border-top-width: 0;
|
||||
border-bottom: none;
|
||||
|
|
@ -253,4 +256,54 @@ table.table {
|
|||
border-bottom-left-radius: 0 !important;
|
||||
margin-left: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination {
|
||||
> li {
|
||||
margin: 0 5px;
|
||||
font-weight: bold;
|
||||
a, span {
|
||||
text-align: center;
|
||||
border-radius: 2px !important;
|
||||
min-width: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
box-shadow: 0 .5rem 2rem 0.125rem rgba(140, 152, 164, 0.286);
|
||||
}
|
||||
|
||||
.input-locale-wrap {
|
||||
> .input-for-group, .input-group {
|
||||
& + .input-for-group, & + .input-group {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
input, span, textarea {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
// 选择第一个
|
||||
&:first-child {
|
||||
input, textarea {
|
||||
border-top-right-radius: 0.2rem;
|
||||
}
|
||||
|
||||
span {
|
||||
border-top-left-radius: 0.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
// 选择最后一个
|
||||
&:last-child {
|
||||
input, textarea {
|
||||
border-bottom-right-radius: 0.2rem;
|
||||
}
|
||||
|
||||
span {
|
||||
border-bottom-left-radius: 0.2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -49,9 +49,15 @@
|
|||
|
||||
&:hover {
|
||||
.input-wrap {
|
||||
background-color: #f0f3f8;
|
||||
background-color: #f1f3f8;
|
||||
.search-icon {
|
||||
color: #4f5b68;
|
||||
color: #2a343f;
|
||||
}
|
||||
}
|
||||
|
||||
input#header-search-input {
|
||||
&::-webkit-input-placeholder {
|
||||
color: #546371;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -65,20 +71,25 @@
|
|||
width: 330px;
|
||||
border-radius: 6px;
|
||||
font-size: 16px;
|
||||
background-color: #f6f7fa;
|
||||
background-color: #f2f4f7;
|
||||
|
||||
.search-icon {
|
||||
// color: #8c98a4;
|
||||
// color: #798591;
|
||||
color: #626f7c;
|
||||
color: #52606f;
|
||||
}
|
||||
|
||||
&.active {
|
||||
// background-color: #f6f7fa;
|
||||
background-color: #f0f3f8;
|
||||
background-color: #ebeff5;
|
||||
border-radius: 8px;
|
||||
height: 40px;
|
||||
.search-icon {
|
||||
color: #4f5b68;
|
||||
color: #2a343f;
|
||||
}
|
||||
|
||||
input#header-search-input {
|
||||
&::-webkit-input-placeholder {
|
||||
color: #546371;
|
||||
}
|
||||
}
|
||||
|
||||
.close-icon {
|
||||
|
|
@ -117,7 +128,7 @@
|
|||
height: 40px;
|
||||
// 设置 placeholder 颜色
|
||||
&::-webkit-input-placeholder {
|
||||
color: #8c98a4;
|
||||
color: #7b8996;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -274,6 +285,7 @@
|
|||
&:hover {
|
||||
.nav-link {
|
||||
background-color: #eee;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
|
|
@ -330,7 +342,11 @@
|
|||
}
|
||||
|
||||
a.nav-link {
|
||||
padding: 0 14px;
|
||||
padding: 0 20px;
|
||||
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
|
||||
&.update-btn a {
|
||||
|
|
|
|||
|
|
@ -50,7 +50,10 @@
|
|||
> .left {
|
||||
padding-top: 8px;
|
||||
min-width: 92px;
|
||||
background-color: #eff3f7;
|
||||
// background-color: #eff3f7;
|
||||
// background-color: #dce5ee;
|
||||
// background-color: #e4ebf2;
|
||||
background-color: #ebf1f6;
|
||||
max-width: 130px;
|
||||
|
||||
// 背景图
|
||||
|
|
@ -68,26 +71,20 @@
|
|||
color: #333;
|
||||
display: flex;
|
||||
text-decoration: none;
|
||||
&::after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
}
|
||||
|
||||
i {
|
||||
margin-right: 7px;
|
||||
}
|
||||
}
|
||||
|
||||
&.active, &:hover {
|
||||
background-color: #fff;
|
||||
&.active {
|
||||
a {
|
||||
font-weight: bold;
|
||||
&::after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.active, &:hover {
|
||||
background-color: #fff;
|
||||
|
||||
body.admin-home & {
|
||||
background-color: #f9fbfd;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,23 @@ $nav-link-color: #555;
|
|||
$nav-link-hover-color: #555;
|
||||
$nav-tabs-link-active-color: #222;
|
||||
|
||||
$pagination-border-width: 0;
|
||||
$pagination-bg: #f4f4f5;
|
||||
$pagination-color: #606266;
|
||||
$pagination-border-radius: 2px;
|
||||
$pagination-disabled-bg: $pagination-bg;
|
||||
$pagination-disabled-color: #c0c4cc;
|
||||
$pagination-hover-color: $primary;
|
||||
$pagination-padding-x: 4px;
|
||||
$pagination-padding-y: .3rem;
|
||||
$pagination-focus-color: #606266;
|
||||
|
||||
$dropdown-box-shadow: 0 0.8rem 2.5rem 0.6125rem rgba(140, 152, 164, 0.286);
|
||||
$dropdown-item-padding-y: 0.45rem;
|
||||
$dropdown-border-color: rgba(0, 0, 0, 0.064);
|
||||
// $dropdown-border-color: transparent;
|
||||
$dropdown-border-radius: 0.4rem;
|
||||
|
||||
@import './bootstrap-icons';
|
||||
@import 'node_modules/bootstrap/scss/bootstrap';
|
||||
// @import 'node_modules/bootstrap/scss/bootstrap';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<x-admin::form.row :title="$title" :required="$required">
|
||||
<div class="input-locale-wrap">
|
||||
@foreach (locales() as $index => $locale)
|
||||
<div class="d-flex wp-{{ $width }} input-for-group">
|
||||
<span class="input-group-text wp-100 px-1" id="basic-addon1">{{ $locale['name'] }}</span>
|
||||
|
|
@ -13,4 +14,5 @@
|
|||
@enderror
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
</x-admin::form.row>
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
<li class="nav-item me-3">
|
||||
<div class="dropdown">
|
||||
<a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
|
||||
<span class="text-dark ml-2">{{ current_user()->name }}</span>
|
||||
<span class="ml-2">{{ current_user()->name }}</span>
|
||||
</a>
|
||||
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdownMenuLink">
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
@section('title', __('admin/attribute_group.index'))
|
||||
|
||||
@section('content')
|
||||
<div id="customer-app" class="card" v-cloak>
|
||||
<div id="customer-app" class="card h-min-600" v-cloak>
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between mb-4">
|
||||
<button type="button" class="btn btn-primary" @click="checkedCustomersCreate('add', null)">{{ __('admin/attribute_group.create_at_groups') }}</button>
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<el-pagination v-if="attributes.data.length" layout="total, prev, pager, next" background :page-size="attributes.per_page" :current-page.sync="page"
|
||||
<el-pagination v-if="attributes.data.length" layout="prev, pager, next" background :page-size="attributes.per_page" :current-page.sync="page"
|
||||
:total="attributes.total"></el-pagination>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<tr v-for="brand, index in brands.data" :key="index">
|
||||
<td>@{{ brand.id }}</td>
|
||||
<td>@{{ brand.name }}</td>
|
||||
<td><div class="wh-50"><img :src="thumbnail(brand.logo)" class="img-fluid"></div></td>
|
||||
<td><div class="wh-50 border d-flex justify-content-center rounded-2 align-items-center"><img :src="thumbnail(brand.logo)" class="img-fluid rounded-2"></div></td>
|
||||
<td>@{{ brand.sort_order }}</td>
|
||||
<td>@{{ brand.first }}</td>
|
||||
<td>
|
||||
|
|
|
|||
|
|
@ -1,92 +0,0 @@
|
|||
@extends('admin::admin.layouts.master')
|
||||
|
||||
@section('title', '分类管理')
|
||||
|
||||
@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
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
@section('body-class', 'page-categories')
|
||||
|
||||
@section('content')
|
||||
<div id="category-app" class="card">
|
||||
<div id="category-app" class="card h-min-600">
|
||||
<div class="card-body">
|
||||
<a href="{{ admin_route('categories.create') }}" class="btn btn-primary">{{ __('admin/category.categories_create') }}</a>
|
||||
<div class="mt-4" style="" v-if="categories.length">
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
@section('title', __('admin/common.customer_groups_index'))
|
||||
|
||||
@section('content')
|
||||
<div id="customer-app" class="card" v-cloak>
|
||||
<div id="customer-app" class="card h-min-600" v-cloak>
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between mb-4">
|
||||
<button type="button" class="btn btn-primary" @click="checkedCustomersCreate('add', null)">{{ __('admin/customer_group.customer_groups_create') }}</button>
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
@section('title', __('admin/common.customer'))
|
||||
|
||||
@section('content')
|
||||
<div id="customer-app" class="card" v-cloak>
|
||||
<div id="customer-app" class="card h-min-600" v-cloak>
|
||||
<div class="card-body">
|
||||
<div class="bg-light p-4 mb-3">
|
||||
<el-form :inline="true" :model="filter" class="demo-form-inline" label-width="100px">
|
||||
<el-form :inline="true" :model="filter" class="demo-form-inline" label-width="70px">
|
||||
<div>
|
||||
<el-form-item label="{{ __('customer.name') }}">
|
||||
<el-input @keyup.enter.native="search" v-model="filter.name" size="small" placeholder="{{ __('customer.name') }}"></el-input>
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
</el-form>
|
||||
|
||||
<div class="row">
|
||||
<label class="wp-100"></label>
|
||||
<label style="width: 70px"></label>
|
||||
<div class="col-auto">
|
||||
<button type="button" @click="search" class="btn btn-outline-primary btn-sm">{{ __('common.filter') }}</button>
|
||||
<button type="button" @click="resetSearch" class="btn btn-outline-secondary btn-sm ms-1">{{ __('common.reset') }}</button>
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@
|
|||
<el-switch v-model="currentMenu.isFull"></el-switch>
|
||||
</div>
|
||||
</div>
|
||||
<draggable class="children-group d-lg-flex" style="margin: 0 -0.5rem" :list="currentMenu.childrenGroup"
|
||||
<draggable class="children-group d-lg-flex flex-wrap" style="margin: 0 -0.5rem" :list="currentMenu.childrenGroup"
|
||||
:options="{ animation: 330, handle: '.el-icon-rank' }">
|
||||
<div class="card border mx-2 mb-3 group-item" v-for="group, group_index in currentMenu.childrenGroup"
|
||||
:key="group_index">
|
||||
|
|
|
|||
|
|
@ -489,7 +489,7 @@
|
|||
type: 'warning'
|
||||
}).then(() => {
|
||||
$http.delete(`file_manager/directories`, {
|
||||
name: this.folderCurrent
|
||||
name: data.path
|
||||
}).then((res) => {
|
||||
layer.msg(res.message)
|
||||
this.$refs.tree.setCurrentKey(node.parent.data.path)
|
||||
|
|
@ -522,13 +522,22 @@
|
|||
},
|
||||
|
||||
openInputBox(type, node, data) {
|
||||
let fileSuffix, fileName = '';
|
||||
|
||||
if (type == 'image') {
|
||||
const image = this.images[this.selectImageIndex].name;
|
||||
// 获取文件后缀
|
||||
fileSuffix = image.substring(image.lastIndexOf('.') + 1);
|
||||
// 获取文件名
|
||||
fileName = image.substring(0, image.lastIndexOf('.'));
|
||||
}
|
||||
|
||||
this.$prompt('', type == 'addFolder' ? '{{ __('admin/file_manager.new_folder') }}' : '{{ __('admin/file_manager.rename') }}', {
|
||||
confirmButtonText: '{{ __('common.confirm') }}',
|
||||
cancelButtonText: '{{ __('common.cancel') }}',
|
||||
inputPattern: /^.+$/,
|
||||
closeOnClickModal: false,
|
||||
inputValue: type == 'image' ? this.images[this.selectImageIndex].name : (type == 'renameFolder' ? data
|
||||
.name : '{{ __('admin/file_manager.new_folder') }}'),
|
||||
inputValue: type == 'image' ? fileName : (type == 'renameFolder' ? data.name : '{{ __('admin/file_manager.new_folder') }}'),
|
||||
inputErrorMessage: '{{ __('admin/file_manager.can_empty') }}'
|
||||
}).then(({
|
||||
value
|
||||
|
|
@ -555,8 +564,10 @@
|
|||
}
|
||||
|
||||
if (type == 'renameFolder') {
|
||||
this.folderCurrent = data.path;
|
||||
|
||||
$http.post(`file_manager/rename`, {
|
||||
origin_name: this.folderCurrent,
|
||||
origin_name: data.path,
|
||||
new_name: value
|
||||
}).then((res) => {
|
||||
layer.msg(res.message)
|
||||
|
|
@ -574,8 +585,9 @@
|
|||
|
||||
$http.post(`file_manager/rename`, {
|
||||
origin_name: origin_name,
|
||||
new_name: value
|
||||
new_name: value + '.' + fileSuffix
|
||||
}).then((res) => {
|
||||
this.images[this.selectImageIndex].name = value + '.' + fileSuffix;
|
||||
layer.msg(res.message)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ $data = $plugin['data'];
|
|||
<img src="{{ $data['icon_big'] }}" class="img-fluid plugin-icon">
|
||||
<img src="{{ $data['icon_big'] }}" class="img-fluid plugin-icon-shadow">
|
||||
</div>
|
||||
<div class="ms-lg-5 mt-2">
|
||||
<div class="ms-lg-5">
|
||||
<h2 class="card-title mb-4">{{ $data['name'] }}</h2>
|
||||
<div class="plugin-item d-lg-flex align-items-center mb-4 lh-1 text-secondary">
|
||||
<div class="mx-3 ms-0">{{ __('admin/marketing.download_count') }}:{{ $data['downloaded'] }}</div><span
|
||||
|
|
@ -35,23 +35,23 @@ $data = $plugin['data'];
|
|||
class="lh-1 bg-secondary"></span>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="mb-2 fw-bold">{{ __('product.price') }}:</div>
|
||||
<div class="fs-3 fw-bold">{{ $data['price_format'] }}</div>
|
||||
<div class="mb-3">
|
||||
<div class="mb-1 fw-bold">{{ __('product.price') }}:</div>
|
||||
<div class="fs-3 fw-bold" style="margin-left: -4px">{{ $data['price_format'] }}</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="mb-2 fw-bold">{{ __('admin/marketing.text_version') }}:</div>
|
||||
<div class="mb-3">
|
||||
<div class="mb-1 fw-bold">{{ __('admin/marketing.text_version') }}:</div>
|
||||
<div>{{ $data['version'] }}</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="mb-2 fw-bold">{{ __('admin/marketing.text_compatibility') }}:</div>
|
||||
<div class="mb-3">
|
||||
<div class="mb-1 fw-bold">{{ __('admin/marketing.text_compatibility') }}:</div>
|
||||
<div>{{ $data['version_name_format'] }}</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="mb-2 fw-bold">{{ __('admin/marketing.text_author') }}:</div>
|
||||
<div class="mb-3">
|
||||
<div class="mb-1 fw-bold">{{ __('admin/marketing.text_author') }}:</div>
|
||||
<div class="d-inline-block">
|
||||
<a href="{{ config('app.url') }}/account/{{ $data['developer']['id'] }}" target="_blank"
|
||||
class="d-flex align-items-center text-dark">
|
||||
|
|
@ -101,26 +101,25 @@ $data = $plugin['data'];
|
|||
<div class="d-flex justify-content-center align-items-center" id="code-info"></div>
|
||||
</div>
|
||||
|
||||
<el-dialog title="{{ __('admin/marketing.set_token') }}" :close-on-click-modal="false"
|
||||
:visible.sync="setTokenDialog.show" width="820px" @close="dialogOnClose">
|
||||
{{-- <el-input type="textarea" :rows="3" placeholder="{{ __('admin/marketing.set_token') }}"
|
||||
v-model="setTokenDialog.token">
|
||||
</el-input>
|
||||
<div class="mt-3 text-secondary fs-6">{{ __('admin/marketing.get_token_text') }} <a
|
||||
href="{{ config('beike.api_url') }}/account/websites?domain={{ $domain }}" class="link-primary"
|
||||
target="_blank">{{ __('admin/marketing.get_token') }}</a></div>
|
||||
<div class="d-flex justify-content-end align-items-center mt-4">
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="setTokenDialog.show = false">{{ __('common.cancel') }}</el-button>
|
||||
<el-button type="primary" @click="submitToken">{{ __('common.confirm') }}</el-button>
|
||||
</span>
|
||||
</div> --}}
|
||||
<div class="login-wrap d-flex mb-4 px-2">
|
||||
<div class="card w-50 border-0 p-0 shadow-none">
|
||||
<div class="p-0 card-header">
|
||||
<h5 class="bg-light px-2 py-3 text-black mb-3">{{ __('shop/login.login') }}</h5>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<el-dialog title="{{ __('admin/marketing.bind_bk_token') }}" :close-on-click-modal="false"
|
||||
:visible.sync="setTokenDialog.show" width="520px" @close="dialogOnClose">
|
||||
|
||||
<div class="login-wrap mb-4 px-2" style="margin-top: -20px">
|
||||
<ul class="nav nav-tabs nav-bordered mb-3" role="tablist">
|
||||
<li class="nav-item flex-1 text-center" role="presentation">
|
||||
<button class="nav-link active w-100" data-bs-toggle="tab" data-bs-target="#tab-login" type="button" >{{ __('shop/login.login') }}</button>
|
||||
</li>
|
||||
<li class="nav-item flex-1 text-center" role="presentation">
|
||||
<button class="nav-link w-100" data-bs-toggle="tab" data-bs-target="#tab-register" type="button">{{ __('shop/login.register') }}</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade show active" id="tab-login">
|
||||
<div class="alert alert-info" role="alert">
|
||||
<i class="bi bi-question-circle"></i> {!! __('admin/marketing.bk_login_hint') !!}
|
||||
</div>
|
||||
|
||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules">
|
||||
<el-form-item label="{{ __('shop/login.email') }}" prop="email">
|
||||
<el-input @keyup.enter.native="checkedBtnLogin('loginForm')" v-model="loginForm.email"
|
||||
|
|
@ -138,16 +137,12 @@ $data = $plugin['data'];
|
|||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex vr-wrap mx-5">
|
||||
<div class="vr bg-secondary"></div>
|
||||
</div>
|
||||
<div class="card w-50 border-0 p-0 shadow-none">
|
||||
<div class="p-0 card-header">
|
||||
<h5 class="bg-light px-2 py-3 text-black mb-3">{{ __('shop/login.new') }}</h5>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="tab-pane fade" id="tab-register">
|
||||
<div class="alert alert-info" role="alert">
|
||||
<i class="bi bi-question-circle"></i> {!! __('admin/marketing.bk_register_hint') !!}
|
||||
</div>
|
||||
|
||||
<el-form ref="registerForm" :model="registerForm" :rules="registeRules">
|
||||
<el-form-item label="{{ __('admin/customer.user_name') }}" prop="name">
|
||||
<el-input @keyup.enter.native="checkedBtnLogin('registerForm')" v-model="registerForm.name"
|
||||
|
|
@ -208,51 +203,51 @@ $data = $plugin['data'];
|
|||
},
|
||||
|
||||
loginForm: {
|
||||
email: '',
|
||||
password: '',
|
||||
},
|
||||
email: '',
|
||||
password: '',
|
||||
},
|
||||
|
||||
registerForm: {
|
||||
email: '',
|
||||
name: '',
|
||||
telephone: '',
|
||||
qq: '',
|
||||
password: '',
|
||||
},
|
||||
registerForm: {
|
||||
email: '',
|
||||
name: '',
|
||||
telephone: '',
|
||||
qq: '',
|
||||
password: '',
|
||||
},
|
||||
|
||||
loginRules: {
|
||||
email: [
|
||||
{required: true, message: '{{ __('shop/login.enter_email') }}', trigger: 'change'},
|
||||
{type: 'email', message: '{{ __('shop/login.email_err') }}', trigger: 'change'},
|
||||
],
|
||||
password: [
|
||||
{required: true, message: '{{ __('shop/login.enter_password')}}', trigger: 'change'}
|
||||
]
|
||||
},
|
||||
loginRules: {
|
||||
email: [
|
||||
{required: true, message: '{{ __('shop/login.enter_email') }}', trigger: 'change'},
|
||||
{type: 'email', message: '{{ __('shop/login.email_err') }}', trigger: 'change'},
|
||||
],
|
||||
password: [
|
||||
{required: true, message: '{{ __('shop/login.enter_password')}}', trigger: 'change'}
|
||||
]
|
||||
},
|
||||
|
||||
registeRules: {
|
||||
name: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('admin/customer.user_name')]) }}', trigger: 'change'},
|
||||
],
|
||||
telephone: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('address.phone')]) }}', trigger: 'change'},
|
||||
],
|
||||
email: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('shop/login.email')]) }}', trigger: 'change'},
|
||||
{type: 'email', message: '{{ __('shop/login.email_err') }}', trigger: 'change'},
|
||||
],
|
||||
password: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('shop/login.password')]) }}', trigger: 'change'},
|
||||
],
|
||||
},
|
||||
registeRules: {
|
||||
name: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('admin/customer.user_name')]) }}', trigger: 'change'},
|
||||
],
|
||||
telephone: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('address.phone')]) }}', trigger: 'change'},
|
||||
],
|
||||
email: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('shop/login.email')]) }}', trigger: 'change'},
|
||||
{type: 'email', message: '{{ __('shop/login.email_err') }}', trigger: 'change'},
|
||||
],
|
||||
password: [
|
||||
{required: true, message: '{{ __('common.error_required', ['name' => __('shop/login.password')]) }}', trigger: 'change'},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
checkedBtnLogin(form) {
|
||||
let _data = this.loginForm, url = '/login'
|
||||
let _data = this.loginForm, url = `${config.api_url}/api/login?domain=${config.app_url}`
|
||||
|
||||
if (form == 'registerForm') {
|
||||
_data = this.registerForm, url = '/register'
|
||||
_data = this.registerForm, url = `${config.api_url}/api/register?domain=${config.app_url}`
|
||||
}
|
||||
|
||||
this.$refs['loginForm'].clearValidate();
|
||||
|
|
@ -264,10 +259,19 @@ $data = $plugin['data'];
|
|||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
$http.post(url, _data).then((res) => {
|
||||
layer.msg(res.message)
|
||||
if (res.status == 'fail') {
|
||||
layer.msg(res.message, ()=>{});
|
||||
return;
|
||||
}
|
||||
|
||||
layer.msg(res.message);
|
||||
|
||||
this.setTokenDialog.token = res.data.token;
|
||||
|
||||
$http.post('{{ admin_route('settings.store_token') }}', {developer_token: this.setTokenDialog.token}).then((res) => {
|
||||
this.setTokenDialog.show = false;
|
||||
})
|
||||
})
|
||||
});
|
||||
},
|
||||
|
|
@ -294,7 +298,6 @@ $data = $plugin['data'];
|
|||
|
||||
marketingBuy() {
|
||||
if (!this.setTokenDialog.token) {
|
||||
console.log(1);
|
||||
return this.setTokenDialog.show = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,15 +67,15 @@
|
|||
:list="form.images"
|
||||
:options="{animation: 200, handle: '.product-item'}"
|
||||
>
|
||||
<div v-for="image, index in form.images" :key="index" class="wh-80 product-item position-relative me-2 mb-2 border d-flex justify-content-center align-items-center max-h-100 overflow-hidden">
|
||||
<div v-for="image, index in form.images" :key="index" class="wh-80 rounded-2 product-item position-relative me-2 mb-2 border d-flex justify-content-center align-items-center max-h-100 overflow-hidden">
|
||||
<div class="position-absolute top-0 end-0">
|
||||
<button class="btn btn-danger btn-sm wh-20 p-0" @click="removeImages(index)" type="button"><i class="bi bi-trash"></i></button>
|
||||
</div>
|
||||
<img :src="thumbnail(image)" class="img-fluid">
|
||||
<img :src="thumbnail(image)" class="img-fluid rounded-2">
|
||||
<input type="hidden" name="images[]" :value="image">
|
||||
</div>
|
||||
<div v-if="!form.images.length" class="d-none"><input type="hidden" name="images[]" value=""></div>
|
||||
<div class="set-product-img wh-80" @click="addProductImages"><i class="bi bi-plus fs-1 text-muted"></i></div>
|
||||
<div class="set-product-img wh-80 rounded-2" @click="addProductImages"><i class="bi bi-plus fs-1 text-muted"></i></div>
|
||||
</draggable>
|
||||
<div class="help-text mb-1 mt-1">{{ __('admin/product.image_help') }}</div>
|
||||
</x-admin::form.row>
|
||||
|
|
@ -318,6 +318,7 @@
|
|||
</x-admin::form.row>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab-attribute">
|
||||
<h6 class="border-bottom pb-3 mb-4">{{ __('admin/attribute.index') }}</h6>
|
||||
<x-admin::form.row title="{{ __('admin/attribute.set_attribute') }}">
|
||||
<div class="pdf-table">
|
||||
<table class="table table-bordered w-max-600">
|
||||
|
|
@ -372,26 +373,32 @@
|
|||
|
||||
<x-admin-form-input-locale :width="600" name="descriptions.*.meta_title" title="Meta title" :value="$descriptions"/>
|
||||
<x-admin::form.row title="Meta keywords">
|
||||
@foreach ($languages as $language)
|
||||
<div class="input-group w-max-600">
|
||||
<span class="input-group-text wp-100">{{ $language['name'] }}</span>
|
||||
<textarea rows="2" type="text" name="descriptions[{{ $language['code'] }}][meta_keywords]" class="form-control wp-400" placeholder="Meta keywords">{{ old('meta_keywords', $product->descriptions->keyBy('locale')[$language->code]->meta_keywords ?? '') }}</textarea>
|
||||
<div class="input-locale-wrap">
|
||||
@foreach ($languages as $language)
|
||||
<div class="input-group w-max-600">
|
||||
<span class="input-group-text wp-100">{{ $language['name'] }}</span>
|
||||
<textarea rows="2" type="text" name="descriptions[{{ $language['code'] }}][meta_keywords]" class="form-control wp-400" placeholder="Meta keywords">{{ old('meta_keywords', $product->descriptions->keyBy('locale')[$language->code]->meta_keywords ?? '') }}</textarea>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@endforeach
|
||||
</x-admin::form.row>
|
||||
<x-admin::form.row title="Meta description">
|
||||
@foreach ($languages as $language)
|
||||
<div class="input-group w-max-600">
|
||||
<span class="input-group-text wp-100">{{ $language['name'] }}</span>
|
||||
<textarea rows="2" type="text" name="descriptions[{{ $language['code'] }}][meta_description]" class="form-control wp-400" placeholder="Meta description">{{ old('meta_description', $product->descriptions->keyBy('locale')[$language->code]->meta_description ?? '') }}</textarea>
|
||||
<div class="input-locale-wrap">
|
||||
@foreach ($languages as $language)
|
||||
<div class="input-group w-max-600">
|
||||
<span class="input-group-text wp-100">{{ $language['name'] }}</span>
|
||||
<textarea rows="2" type="text" name="descriptions[{{ $language['code'] }}][meta_description]" class="form-control wp-400" placeholder="Meta description">{{ old('meta_description', $product->descriptions->keyBy('locale')[$language->code]->meta_description ?? '') }}</textarea>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@endforeach
|
||||
</x-admin::form.row>
|
||||
|
||||
@hook('admin.product.seo.after')
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade" id="tab-relations">
|
||||
<h6 class="border-bottom pb-3 mb-4">{{ __('admin/product.product_relations') }}</h6>
|
||||
|
||||
<x-admin::form.row title="{{ __('admin/product.product_relations') }}">
|
||||
<div class="module-edit-group wp-600">
|
||||
<div class="autocomplete-group-wrapper">
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
@endif
|
||||
|
||||
<div id="product-app">
|
||||
<div class="card">
|
||||
<div class="card h-min-600">
|
||||
<div class="card-body">
|
||||
<div class="bg-light p-4">
|
||||
<div class="row">
|
||||
|
|
@ -125,7 +125,7 @@
|
|||
<td><input type="checkbox" :value="{{ $product['id'] }}" v-model="selectedIds" /></td>
|
||||
<td>{{ $product['id'] }}</td>
|
||||
<td>
|
||||
<div class="wh-60 border d-flex justify-content-between align-items-center"><img src="{{ $product['images'][0] ?? 'image/placeholder.png' }}" class="img-fluid"></div>
|
||||
<div class="wh-60 border d-flex rounded-2 justify-content-between align-items-center"><img src="{{ $product['images'][0] ?? 'image/placeholder.png' }}" class="img-fluid rounded-2"></div>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ $product['url'] }}" target="_blank" title="{{ $product['name'] }}" class="text-dark">{{ $product['name'] }}</a>
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
|
||||
<span class="page-link" aria-hidden="true">‹</span>
|
||||
<span class="page-link" aria-hidden="true"><i class="bi bi-chevron-left"></i></span>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')"><i class="bi bi-chevron-left"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
|
|
@ -34,11 +34,11 @@
|
|||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')"><i class="bi bi-chevron-right"></i></a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
|
||||
<span class="page-link" aria-hidden="true">›</span>
|
||||
<span class="page-link" aria-hidden="true"><i class="bi bi-chevron-right"></i></span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -74,6 +74,17 @@ $alert-padding-y: 0.5rem;
|
|||
$form-feedback-icon-valid: none;
|
||||
$form-feedback-icon-valid-color: inherit;
|
||||
|
||||
$pagination-border-width: 0;
|
||||
$pagination-bg: #f4f4f5;
|
||||
$pagination-color: #606266;
|
||||
$pagination-border-radius: 2px;
|
||||
$pagination-disabled-bg: $pagination-bg;
|
||||
$pagination-disabled-color: #c0c4cc;
|
||||
$pagination-hover-color: $primary;
|
||||
$pagination-padding-x: 4px;
|
||||
$pagination-padding-y: .3rem;
|
||||
$pagination-focus-color: #606266;
|
||||
|
||||
// $dropdown-divider-bg: rgba(0, 0, 0, 0.1);
|
||||
@import './bootstrap-icons';
|
||||
@import 'node_modules/bootstrap/scss/bootstrap';
|
||||
|
|
@ -164,4 +175,16 @@ $form-feedback-icon-valid-color: inherit;
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pagination {
|
||||
> li {
|
||||
margin: 0 5px;
|
||||
font-weight: bold;
|
||||
a, span {
|
||||
text-align: center;
|
||||
border-radius: 2px !important;
|
||||
min-width: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -36,4 +36,7 @@ return [
|
|||
'ali_pay_text' => 'Payment has been completed, please refresh the page',
|
||||
'version_compatible_text' => 'This plugin is not compatible with the current system version, please upgrade to <a href="' . config('beike.api_url') . '/download" target="_blank">Latest Version</a>',
|
||||
'to_update' => 'To Upgrade',
|
||||
'bk_register_hint' => 'Register a new account with <a href="https://beikeshop.com/account" target="_blank">beikeshop.com</a>',
|
||||
'bk_login_hint' => 'login with <a href="https://beikeshop.com/account" target="_blank">beikeshop.com</a> account',
|
||||
'bind_bk_token' => 'Bind BeikeShop account and get Token automatically',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
*/
|
||||
|
||||
return [
|
||||
'admin_panel' => 'バックステージ管理',
|
||||
'admin_panel' => 'バックステージ',
|
||||
'edit' => '編集',
|
||||
'status' => 'ステータス',
|
||||
'action' => 'アクション',
|
||||
|
|
@ -22,21 +22,23 @@ return [
|
|||
'has_no_permission' => 'このページにアクセスする権限がありません。システム管理者に連絡してください。 ',
|
||||
|
||||
// header
|
||||
'home' => 'ホームページを管理する',
|
||||
'order' => '注文管理',
|
||||
'rma' => 'アフターサービス管理',
|
||||
'rma_reason' => '返品理由管理',
|
||||
'product' => '製品管理',
|
||||
'brand' => 'ブランド管理',
|
||||
'attribute' => 'attribute',
|
||||
'attribute_group' => 'attribute group',
|
||||
'category' => 'カテゴリ管理',
|
||||
'customer_group' => '顧客グループ管理',
|
||||
'customer' => '顧客管理',
|
||||
'page' => 'コンテンツ管理',
|
||||
'page_category' => 'Page Category',
|
||||
'home' => '表紙',
|
||||
'order' => '注文',
|
||||
'rma' => 'アフターサービス',
|
||||
'rma_reason' => '返品理由',
|
||||
'product' => '製品',
|
||||
'brand' => 'ブランド',
|
||||
'attribute' => '属性管理',
|
||||
'attribute_group' => '属性グループ',
|
||||
'category' => 'カテゴリ',
|
||||
'customer_group' => '顧客グループ',
|
||||
'customer' => '顧客',
|
||||
'page' => 'コンテンツ',
|
||||
'page_category' => '記事の分類',
|
||||
'setting' => 'システム設定',
|
||||
'plugin' => 'プラグイン管理',
|
||||
'plugin' => 'プラグイン',
|
||||
'design' => 'デザイン',
|
||||
'marketing' => 'プラグイン市場',
|
||||
'admin_user' => 'バックエンド ユーザー',
|
||||
'admin_role' => 'ユーザーの役割',
|
||||
'region' => '地域のグループ化',
|
||||
|
|
|
|||
|
|
@ -37,4 +37,7 @@ return [
|
|||
'ali_pay_text' => '已完成支付,请刷新页面',
|
||||
'version_compatible_text' => '该插件不兼容当前系统版本,请升级到 <a href="' . config('beike.api_url') . '/download" target="_blank">最新版本</a>',
|
||||
'to_update' => '去升级',
|
||||
'bk_register_hint' => '用 <a href="https://beikeshop.com/account" target="_blank">beikeshop.com</a> 上注册新账号',
|
||||
'bk_login_hint' => '用 <a href="https://beikeshop.com/account" target="_blank">beikeshop.com</a> 账号登录',
|
||||
'bind_bk_token' => '绑定BeikeShop账号,自动获取Token',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -5,11 +5,15 @@
|
|||
@section('content')
|
||||
<x-shop-breadcrumb type="brand" :value="$brand" />
|
||||
<div class="container">
|
||||
@if (count($products_format))
|
||||
<div class="row">
|
||||
@foreach ($products_format as $product)
|
||||
<div class="col-6 col-md-3">@include('shared.product')</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@else
|
||||
<x-shop-no-data />
|
||||
@endif
|
||||
|
||||
{{ $products->links('shared/pagination/bootstrap-4') }}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
|
||||
<span class="page-link" aria-hidden="true">‹</span>
|
||||
<span class="page-link" aria-hidden="true"><i class="bi bi-chevron-left"></i></span>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')"><i class="bi bi-chevron-left"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
{{-- Pagination Elements --}}
|
||||
|
|
@ -31,11 +31,11 @@
|
|||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')"><i class="bi bi-chevron-right"></i></a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
|
||||
<span class="page-link" aria-hidden="true">›</span>
|
||||
<span class="page-link" aria-hidden="true"><i class="bi bi-chevron-right"></i></span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
|
|
|
|||
Loading…
Reference in New Issue