| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?php
- namespace App\Admin\Extensions\Form;
- use Dcat\Admin\Admin;
- use Dcat\Admin\Form\Field;
- use Dcat\Admin\Support\Helper;
- /**
- * Form页面复制功能
- *
- * 为Form页面的字段添加复制按钮功能
- */
- class Copyable extends Field
- {
- /**
- * 添加复制功能的JavaScript脚本
- */
- protected function addScript()
- {
- $script = <<<'JS'
- $('.form-field-copyable').off('click').on('click', function (e) {
- e.preventDefault();
-
- var content = $(this).data('content');
-
- // 创建临时输入框
- var $temp = $('<input>');
- $("body").append($temp);
- $temp.val(content).select();
-
- // 执行复制
- try {
- var successful = document.execCommand('copy');
- if (successful) {
- // 显示成功提示
- Dcat.success('复制成功');
- } else {
- Dcat.error('复制失败');
- }
- } catch (err) {
- // 使用现代API作为备选方案
- if (navigator.clipboard) {
- navigator.clipboard.writeText(content).then(function() {
- Dcat.success('复制成功');
- }).catch(function() {
- Dcat.error('复制失败');
- });
- } else {
- Dcat.error('浏览器不支持复制功能');
- }
- }
-
- $temp.remove();
- });
- JS;
- Admin::script($script);
- }
- /**
- * 渲染复制按钮
- *
- * @return string
- */
- public function render()
- {
- $this->addScript();
- $value = Helper::htmlEntityEncode($this->value());
-
- if ($this->value() === '' || $this->value() === null) {
- return '<div class="form-group"></div>';
- }
- $label = $this->label;
- $id = $this->id();
- $html = <<<HTML
- <div class="form-group">
- <label for="{$id}" class="col-sm-2 control-label">{$label}</label>
- <div class="col-sm-8">
- <div class="form-field-copyable-wrapper">
- <p class="form-control-static">{$value}</p>
- <a href="javascript:void(0);"
- class="form-field-copyable btn btn-sm btn-outline-secondary"
- data-content="{$value}"
- title="点击复制">
- <i class="fa fa-copy"></i> 复制
- </a>
- </div>
- </div>
- </div>
- HTML;
- return $html;
- }
- }
|