mirror of
https://github.com/cjango/dcat-vue.git
synced 2025-12-06 22:40:03 +08:00
一些优化
This commit is contained in:
@@ -1 +1 @@
|
||||
.file-list-wrap[data-v-4317a8d6]{margin-top:6px!important}.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-wrap-box,.cropper-canvas{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.3333333333%;left:0;top:33.3333333333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.3333333333%;top:0;width:33.3333333333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:before,.cropper-center:after{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width: 768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width: 992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width: 1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(../images/bg.png)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.n-modal-container{z-index:99999999!important}.modal-container[data-v-14b01bbd]{border-radius:10px}.modal-container .cropper-container[data-v-14b01bbd]{width:480px;height:270px}.modal-container .cropper-container img[data-v-14b01bbd]{max-width:100%;display:block}.modal-container .large[data-v-14b01bbd]{width:960px!important;height:540px!important}.modal-container .cropper-controls[data-v-14b01bbd]{padding:11px 0 11px 11px;background-color:#c9c9c9;border-radius:0 0 6px 6px}.file-list-wrap[data-v-8ad40512]{margin-top:2px!important}.preview[data-v-8ad40512]{width:138px;height:138px;border:1px solid #dae1e7;border-radius:10px;background-color:#f1f1f1;display:flex;justify-content:center;align-items:center}.preview img[data-v-8ad40512]{max-width:100%;max-height:100%;border-radius:4px;padding:1px}.preview[data-v-8ad40512]:hover{border:1px dashed #2dd3c4}.custom-upload-dragger[data-v-8ad40512]{width:138px;height:138px;display:flex;justify-content:center;align-items:center;border-radius:10px}.custom-upload-dragger .btn-plus[data-v-8ad40512]{font-size:88px;color:#b0b0b0}.add[data-v-9ae53601]{font-size:20px}.map-container{margin-top:18px;height:var(--3ba32538)}.map-container canvas{border-radius:10px;box-shadow:1px 1px 6px #aaa}
|
||||
.file-list-wrap[data-v-4317a8d6]{margin-top:6px!important}.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-wrap-box,.cropper-canvas{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.3333333333%;left:0;top:33.3333333333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.3333333333%;top:0;width:33.3333333333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:before,.cropper-center:after{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width: 768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width: 992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width: 1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(../images/bg.png)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.n-modal-container{z-index:99999999!important}.modal-container[data-v-14b01bbd]{border-radius:10px}.modal-container .cropper-container[data-v-14b01bbd]{width:480px;height:270px}.modal-container .cropper-container img[data-v-14b01bbd]{max-width:100%;display:block}.modal-container .large[data-v-14b01bbd]{width:960px!important;height:540px!important}.modal-container .cropper-controls[data-v-14b01bbd]{padding:11px 0 11px 11px;background-color:#c9c9c9;border-radius:0 0 6px 6px}.file-list-wrap[data-v-8ad40512]{margin-top:2px!important}.preview[data-v-8ad40512]{width:138px;height:138px;border:1px solid #dae1e7;border-radius:10px;background-color:#f1f1f1;display:flex;justify-content:center;align-items:center}.preview img[data-v-8ad40512]{max-width:100%;max-height:100%;border-radius:4px;padding:1px}.preview[data-v-8ad40512]:hover{border:1px dashed #2dd3c4}.custom-upload-dragger[data-v-8ad40512]{width:138px;height:138px;display:flex;justify-content:center;align-items:center;border-radius:10px}.custom-upload-dragger .btn-plus[data-v-8ad40512]{font-size:88px;color:#b0b0b0}.add[data-v-9ae53601]{font-size:20px}.map-container{margin-top:18px;height:var(--f14f1f20)}.map-container canvas{border-radius:10px;box-shadow:1px 1px 6px #aaa}
|
||||
|
||||
1
resources/assets/js/bundle.js
Normal file
1
resources/assets/js/bundle.js
Normal file
@@ -0,0 +1 @@
|
||||
(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))l(t);new MutationObserver(t=>{for(const e of t)if(e.type==="childList")for(const r of e.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&l(r)}).observe(document,{childList:!0,subtree:!0});function i(t){const e={};return t.integrity&&(e.integrity=t.integrity),t.referrerpolicy&&(e.referrerPolicy=t.referrerpolicy),t.crossorigin==="use-credentials"?e.credentials="include":t.crossorigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function l(t){if(t.ep)return;t.ep=!0;const e=i(t);fetch(t.href,e)}})();const d="modulepreload",m=function(u){return"/"+u},f={},h=function(o,i,l){if(!i||i.length===0)return o();const t=document.getElementsByTagName("link");return Promise.all(i.map(e=>{if(e=m(e),e in f)return;f[e]=!0;const r=e.endsWith(".css"),a=r?'[rel="stylesheet"]':"";if(!!l)for(let s=t.length-1;s>=0;s--){const c=t[s];if(c.href===e&&(!r||c.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${a}`))return;const n=document.createElement("link");if(n.rel=r?"stylesheet":d,r||(n.as="script",n.crossOrigin=""),n.href=e,document.head.appendChild(n),r)return new Promise((s,c)=>{n.addEventListener("load",s),n.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${e}`)))})})).then(()=>o())};h(()=>import("./index.js"),["vendor/dcat-admin-extensions/weiwait/dcat-vue/js/index.js","vendor/dcat-admin-extensions/weiwait/dcat-vue/css/index.css"])();
|
||||
File diff suppressed because one or more lines are too long
@@ -2,7 +2,7 @@
|
||||
|
||||
<label class="{{$viewClass['label']}} control-label pt-0">{!! $label !!}</label>
|
||||
|
||||
<div class="{{$viewClass['field']}}" id="{{ $mountId }}">
|
||||
<div class="{{$viewClass['field']}}" id="{{ $vid }}">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -11,11 +11,11 @@
|
||||
const App = app()
|
||||
|
||||
App.provide('provides', @json($provides, true))
|
||||
App.mount('#{{ $mountId }}')
|
||||
App.mount('#{{ $vid }}')
|
||||
|
||||
if (!window.dv) {
|
||||
window.dv = {instances: {}, maps: {wemap: false}}
|
||||
}
|
||||
|
||||
window.dv.instances["{{ $mountId }}"] = App
|
||||
window.dv.instances["{{ $vid }}"] = App
|
||||
</script>
|
||||
|
||||
@@ -5,10 +5,11 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
|
||||
class DateRange extends Field\DateRange
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
public function render()
|
||||
{
|
||||
@@ -50,7 +51,6 @@ class DateRange extends Field\DateRange
|
||||
{
|
||||
$this->addVariables([
|
||||
'component' => 'DateRange',
|
||||
'mountId' => 'id' . md5(Str::uuid()),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,11 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Exception;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
|
||||
class Distpicker extends Field
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
// 地图高度
|
||||
protected string $height = '380px';
|
||||
// 模板id
|
||||
|
||||
@@ -3,15 +3,13 @@
|
||||
namespace Weiwait\DcatVue\Field;
|
||||
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
use Weiwait\DcatVue\Field\Traits\UploadTrait;
|
||||
|
||||
class Editor extends Field\Editor
|
||||
{
|
||||
use UploadTrait;
|
||||
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use UploadTrait, FieldCommon;
|
||||
|
||||
public function render()
|
||||
{
|
||||
|
||||
@@ -4,11 +4,13 @@ namespace Weiwait\DcatVue\Field;
|
||||
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
use Weiwait\DcatVue\Models\WeiwaitUpload;
|
||||
|
||||
class File extends Field\File
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
protected string $disk;
|
||||
|
||||
protected function prepareInputValue($file)
|
||||
|
||||
@@ -5,11 +5,13 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
use Weiwait\DcatVue\Models\WeiwaitUpload;
|
||||
|
||||
class Image extends Field\Image
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
protected string $disk;
|
||||
protected bool $disableCropper = false;
|
||||
|
||||
|
||||
@@ -7,11 +7,13 @@ use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
use function Swoole\Coroutine\map;
|
||||
|
||||
class KeyValue extends Field\KeyValue
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
private bool $is_list = false;
|
||||
private bool $is_serial = false;
|
||||
private bool $is_sortable = false;
|
||||
|
||||
@@ -5,10 +5,11 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
|
||||
class ListField extends Field\ListField
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
public function render()
|
||||
{
|
||||
|
||||
@@ -4,11 +4,13 @@ namespace Weiwait\DcatVue\Field;
|
||||
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
use Weiwait\DcatVue\Models\WeiwaitUpload;
|
||||
|
||||
class MultipleFile extends Field\MultipleFile
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
protected string $disk;
|
||||
|
||||
protected function prepareInputValue($file): array
|
||||
|
||||
@@ -5,11 +5,13 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
use Weiwait\DcatVue\Models\WeiwaitUpload;
|
||||
|
||||
class MultipleImage extends Field\MultipleImage
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
protected string $disk;
|
||||
|
||||
protected function prepareInputValue($file)
|
||||
|
||||
@@ -5,10 +5,12 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
|
||||
class MultipleSelect extends Field\MultipleSelect
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
private string $optionsFromKeyValueField = '';
|
||||
private string $concatSeparator = '';
|
||||
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
namespace Weiwait\DcatVue\Field;
|
||||
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
|
||||
class Number extends Field\Number
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
public function render()
|
||||
{
|
||||
@@ -44,7 +44,6 @@ class Number extends Field\Number
|
||||
{
|
||||
$this->addVariables([
|
||||
'component' => 'Number',
|
||||
'mountId' => 'id' . md5(Str::uuid()),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,11 +4,13 @@ namespace Weiwait\DcatVue\Field;
|
||||
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
use Weiwait\DcatVue\Field\Traits\HasOptions;
|
||||
|
||||
class Select extends Field\Select
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use HasOptions, FieldCommon;
|
||||
|
||||
private string $optionsFromKeyValueField = '';
|
||||
private string $concatSeparator = '';
|
||||
|
||||
@@ -69,7 +71,6 @@ class Select extends Field\Select
|
||||
{
|
||||
$this->addVariables([
|
||||
'component' => 'Select',
|
||||
'mountId' => 'id' . md5(Str::uuid()),
|
||||
'optionsFromKeyValueField' => $this->optionsFromKeyValueField,
|
||||
'concatSeparator' => $this->concatSeparator,
|
||||
]);
|
||||
|
||||
@@ -5,10 +5,11 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Illuminate\Support\Str;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
|
||||
class Tag extends Field\Tags
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
public function render()
|
||||
{
|
||||
|
||||
33
src/Field/Traits/FieldCommon.php
Normal file
33
src/Field/Traits/FieldCommon.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Weiwait\DcatVue\Field\Traits;
|
||||
|
||||
trait FieldCommon
|
||||
{
|
||||
protected string $vid;
|
||||
|
||||
public function __construct($column, $arguments = [])
|
||||
{
|
||||
parent::__construct($column, $arguments);
|
||||
|
||||
$this->view = 'weiwait.dcat-vue::common';
|
||||
|
||||
$this->makeVid();
|
||||
}
|
||||
|
||||
public function makeVid(): static
|
||||
{
|
||||
$this->vid = 'vid' . md5(uuid_create());
|
||||
|
||||
$this->addVariables([
|
||||
'vid' => $this->vid,
|
||||
]);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function vid(): string
|
||||
{
|
||||
return $this->vid;
|
||||
}
|
||||
}
|
||||
66
src/Field/Traits/HasOptions.php
Normal file
66
src/Field/Traits/HasOptions.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace Weiwait\DcatVue\Field\Traits;
|
||||
|
||||
use Dcat\Admin\Exception\RuntimeException;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
trait HasOptions
|
||||
{
|
||||
/**
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function modelLoad(string $model, string $id, string $field, array $filters = [], int $perPage = 0): static
|
||||
{
|
||||
if (! class_exists($model) || ! in_array(Model::class, class_parents($model))) {
|
||||
throw new RuntimeException("[$model] must be a valid model class");
|
||||
}
|
||||
|
||||
self::composing(function (Field $field) use($filters) {
|
||||
$refs = [];
|
||||
|
||||
foreach ($filters as $name => $condition) {
|
||||
if (is_numeric($name)) {
|
||||
$ref = explode('.', $condition);
|
||||
$name = $condition;
|
||||
$condition = $ref[0];
|
||||
} else {
|
||||
$ref = explode('.', $name);
|
||||
}
|
||||
|
||||
|
||||
$refField = $field->form
|
||||
->fields()
|
||||
->filter(fn(Field $field) => $field->column() === $ref[0])
|
||||
->values()
|
||||
->get($filter[1] ?? 0);
|
||||
|
||||
if (!$refField) {
|
||||
throw new \Exception("找不到参考字段[$ref[0]");
|
||||
}
|
||||
|
||||
$refs[] = ['vid' => $refField->vid(), 'name' => $name, 'condition' => $condition];
|
||||
}
|
||||
|
||||
$field->addVariables([
|
||||
'loadRefs' => $refs,
|
||||
]);
|
||||
});
|
||||
|
||||
$filters = array_map(fn($k, $v) => is_numeric($k) ? $v : $k, array_keys($filters), array_values($filters));
|
||||
|
||||
$this->addVariables([
|
||||
'load' => [
|
||||
'model' => $model,
|
||||
'id' => $id,
|
||||
'field' => $field,
|
||||
'perPage' => $perPage,
|
||||
'filters' => $filters,
|
||||
'url' => route('dcat.admin.weiwait.options.model'),
|
||||
]
|
||||
]);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,11 @@ namespace Weiwait\DcatVue\Field;
|
||||
use Dcat\Admin\Form\Field;
|
||||
use Dcat\Admin\Support\Helper;
|
||||
use Dcat\Admin\Widgets\Checkbox as WidgetCheckbox;
|
||||
use Weiwait\DcatVue\Field\Traits\FieldCommon;
|
||||
|
||||
class Vue extends Field\Checkbox
|
||||
{
|
||||
protected $view = 'weiwait.dcat-vue::common';
|
||||
use FieldCommon;
|
||||
|
||||
protected array $watch = [];
|
||||
|
||||
|
||||
56
src/Http/Controllers/OptionController.php
Normal file
56
src/Http/Controllers/OptionController.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace Weiwait\DcatVue\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Dcat\Admin\Exception\RuntimeException;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class OptionController extends Controller
|
||||
{
|
||||
/**
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function model(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'model' => 'required|string',
|
||||
'id' => 'required|string',
|
||||
'field' => 'required|string',
|
||||
'filters' => 'nullable|array',
|
||||
'page' => 'nullable|integer',
|
||||
'perPage' => 'nullable|integer',
|
||||
]);
|
||||
|
||||
$model = $request['model'];
|
||||
|
||||
if (! class_exists($model) || ! in_array(Model::class, class_parents($model))) {
|
||||
throw new RuntimeException("[$model] must be a valid model class");
|
||||
}
|
||||
|
||||
|
||||
/** @var Model $model */
|
||||
$query = $model::query()->where(
|
||||
collect($request['filters'])
|
||||
->filter()
|
||||
->map(fn($v, $k) => [$k, '=', $v])
|
||||
->values()
|
||||
->toArray()
|
||||
);
|
||||
|
||||
$page = null;
|
||||
if ($request['perPage']) {
|
||||
$page = $query->paginate(10, [$request['id'], $request['field']]);
|
||||
$options = $page->items();
|
||||
} else {
|
||||
$options = $query->get([$request['id'], $request['field']]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'options' => collect($options)->map(fn($item) => ['id' => $item[$request['id']], 'field' => $item[$request['field']]]),
|
||||
'nextPageUrl' => $page?->nextPageUrl(),
|
||||
'total' => $page?->total(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -31,3 +31,7 @@ Route::post('auth/login', [Controllers\DcatAuthController::class, 'postLogin']);
|
||||
// 同步存储
|
||||
Route::post('weiwait/storage/sync', [Controllers\DcatVueController::class, 'syncStorage'])
|
||||
->name('weiwait.storage.sync');
|
||||
|
||||
// 模型选项
|
||||
Route::post('weiwait/options/model', [Controllers\OptionController::class, 'model'])
|
||||
->name('weiwait.options.model');
|
||||
|
||||
Reference in New Issue
Block a user