|
@@ -4,6 +4,7 @@ namespace Dcat\Admin\Layout;
|
|
|
|
|
|
use Dcat\Admin\Admin;
|
|
|
use Dcat\Admin\Color;
|
|
|
+use function GuzzleHttp\Psr7\parse_query;
|
|
|
use Illuminate\Support\Str;
|
|
|
|
|
|
class Asset
|
|
@@ -75,7 +76,10 @@ class Asset
|
|
|
'js' => '@admin/dcat/plugins/bootstrap-validator/validator.min.js',
|
|
|
],
|
|
|
'@select2' => [
|
|
|
- 'js' => '@admin/dcat/plugins/select/select2.full.min.js',
|
|
|
+ 'js' => [
|
|
|
+ '@admin/dcat/plugins/select/select2.full.min.js',
|
|
|
+ '@admin/dcat/plugins/select/i18n/{lang}.js',
|
|
|
+ ],
|
|
|
'css' => '@admin/dcat/plugins/select/select2.min.css',
|
|
|
],
|
|
|
'@bootstrap-datetimepicker' => [
|
|
@@ -314,7 +318,7 @@ class Asset
|
|
|
}
|
|
|
|
|
|
if ($value === null) {
|
|
|
- return $this->alias[$name] ?? [];
|
|
|
+ return $this->getAlias($name);
|
|
|
}
|
|
|
|
|
|
if (mb_strpos($name, '@') !== 0) {
|
|
@@ -324,12 +328,79 @@ class Asset
|
|
|
$this->alias[$name] = $value;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取别名.
|
|
|
+ *
|
|
|
+ * @param string $name
|
|
|
+ * @param array $params
|
|
|
+ *
|
|
|
+ * @return array|string
|
|
|
+ */
|
|
|
+ public function getAlias($name, array $params = [])
|
|
|
+ {
|
|
|
+ if (mb_strpos($name, '@') !== 0) {
|
|
|
+ $name = '@'.$name;
|
|
|
+ }
|
|
|
+
|
|
|
+ [$name, $query] = $this->parseParams($name);
|
|
|
+
|
|
|
+ $params += $query;
|
|
|
+
|
|
|
+ $assets = $this->alias[$name] ?? [];
|
|
|
+
|
|
|
+ // 路径别名
|
|
|
+ if (is_string($assets)) {
|
|
|
+ return $assets;
|
|
|
+ }
|
|
|
+
|
|
|
+ $normalize = function ($files) use ($params) {
|
|
|
+ $files = (array) $files;
|
|
|
+ foreach ($files as $k => &$file) {
|
|
|
+ foreach ($params as $k => $v) {
|
|
|
+ $file = str_replace("{{$k}}", $v, $file);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return array_filter($files, function ($file) {
|
|
|
+ return ! mb_strpos($file, '{');
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'js' => $normalize($assets['js'] ?? []) ?: null,
|
|
|
+ 'css' => $normalize($assets['css'] ?? []) ?: null,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析参数.
|
|
|
+ *
|
|
|
+ * @param string $name
|
|
|
+ *
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ protected function parseParams($name)
|
|
|
+ {
|
|
|
+ $name = explode('?', $name);
|
|
|
+
|
|
|
+ if (empty($name[1])) {
|
|
|
+ return [$name[0], []];
|
|
|
+ }
|
|
|
+
|
|
|
+ parse_str($name[1], $params);
|
|
|
+
|
|
|
+ return [$name[0], $params];
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据别名设置需要载入的js和css脚本.
|
|
|
*
|
|
|
* @param string|array $alias
|
|
|
+ * @param array $params
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
*/
|
|
|
- public function require($alias)
|
|
|
+ public function require($alias, array $params = [])
|
|
|
{
|
|
|
if (is_array($alias)) {
|
|
|
foreach ($alias as $v) {
|
|
@@ -339,12 +410,10 @@ class Asset
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (mb_strpos($alias, '@') !== 0) {
|
|
|
- $alias = '@'.$alias;
|
|
|
- }
|
|
|
+ $assets = $this->getAlias($alias, $params);
|
|
|
|
|
|
- $this->js($this->alias[$alias]['js'] ?? null);
|
|
|
- $this->css($this->alias[$alias]['css'] ?? null);
|
|
|
+ $this->js($assets['js']);
|
|
|
+ $this->css($assets['css']);
|
|
|
}
|
|
|
|
|
|
/**
|