mine_add.blade.php 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089
  1. <style>
  2. .layui-upload-list {
  3. width: auto;
  4. height: auto;
  5. margin-bottom: 0;
  6. }
  7. .layui-elem-quote {
  8. padding-bottom: 5px;
  9. }
  10. .layui-upload-img {
  11. /*width: 92px;*/
  12. height: 92px;
  13. }
  14. hr {
  15. margin: 15px 0;
  16. }
  17. .uk-alert-danger {
  18. background: #fff1f0;
  19. color: #d85030;
  20. margin-bottom: 15px;
  21. padding: 10px;
  22. border: 1px solid rgba(216, 80, 48, .3);
  23. border-radius: 4px;
  24. text-shadow: 0 1px 0 #fff;
  25. }
  26. .imgItem {
  27. display: inline-block;
  28. position: relative;
  29. margin: 0 10px 10px 0;
  30. }
  31. .imgItem .layui-close {
  32. position: absolute;
  33. top: 0;
  34. right: 0;
  35. height: 16px;
  36. line-height: 16px;
  37. text-align: center;
  38. color: #000;
  39. width: 16px;
  40. border: 1px solid #000;
  41. background-color: #fff;
  42. }
  43. iframe.fr-iframe {
  44. padding: 0 20px;
  45. }
  46. .fr-wrapper.show-placeholder .fr-placeholder {
  47. padding-left: 30px !important;
  48. }
  49. .layui-form-label {
  50. width: {{ $colWidth }}px;
  51. }
  52. .layui-input-block {
  53. margin-left: {{ $colWidth + 30 }}px;
  54. }
  55. .weadmin-body {
  56. overflow: initial;
  57. }
  58. </style>
  59. <script src="/js/admin/xm-select.js"></script>
  60. <script src="/laydate/laydate.js"></script>
  61. <form class="layui-form" id="form-unify" method="post" action="{{ $path ?? '' }}" style="padding:20px;">
  62. @csrf
  63. <h2 class="uk-modal-title">{{ $fromTitle }}</h2>
  64. @if(isset($item[$primaryKey]))
  65. <input type="hidden" name="{{ $primaryKey }}" value="{{ $item[$primaryKey] }}">
  66. @endif
  67. <hr>
  68. @if ($errors->any())
  69. <div class="uk-alert-danger" uk-alert>
  70. <p>{{ $errors->first() }}</p>
  71. </div>
  72. @endif
  73. @foreach($columns as $key => $column)
  74. @switch($column['type'])
  75. @case('text')
  76. <div class="layui-form-item">
  77. <label class="layui-form-label">{{ $column['label'] }}</label>
  78. <div class="layui-input-block" style="line-height: 36px;">
  79. @if(isset($column['default']) && !empty($column['default']))
  80. @if($column['default'] instanceof Closure)
  81. {!! $column['default']($item) !!}
  82. @else
  83. {!! $column['default'] !!}
  84. @endif
  85. @else
  86. {!! $item[$key] ?? '' !!}
  87. @endif
  88. </div>
  89. </div>
  90. @break
  91. @case('input')
  92. {{-- <div class="layui-form-item">--}}
  93. {{-- <label class="layui-form-label">{{ $column['label'] }}</label>--}}
  94. {{-- <div class="layui-input-block">--}}
  95. {{-- <input class="layui-input" type="text"--}}
  96. {{-- placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}"--}}
  97. {{-- name="{{ $key }}"--}}
  98. {{-- value="{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}"/>--}}
  99. {{-- </div>--}}
  100. {{-- </div>--}}
  101. @break
  102. @case('password')
  103. <div class="layui-form-item">
  104. <label class="layui-form-label">{{ $column['label'] }}</label>
  105. <div class="layui-input-block">
  106. <input class="layui-input" type="password"
  107. placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}"
  108. name="{{ $key }}"
  109. value="{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}"/>
  110. </div>
  111. </div>
  112. @break
  113. @case('radio')
  114. {{-- <div class="layui-form-item">--}}
  115. {{-- <div class="layui-form-label">{{ $column['label'] }}</div>--}}
  116. {{-- <div class="layui-input-block">--}}
  117. {{-- @foreach($column['options'] as $k => $col)--}}
  118. {{-- <label><input type="radio" name="{{ $key }}" value="{{ $k }}"--}}
  119. {{-- @if((isset($item[$key]) && $item[$key] == $k) ||--}}
  120. {{-- old($key) === $k ||--}}
  121. {{-- (isset($column['default']) && $column['default'] === $k)) checked--}}
  122. {{-- @endif title="{{ $col }}"/>--}}
  123. {{-- </label>--}}
  124. {{-- @endforeach--}}
  125. {{-- </div>--}}
  126. {{-- </div>--}}
  127. @break
  128. @case('checkbox')
  129. <div class="layui-form-item">
  130. <div class="layui-form-label">{{ $column['label'] }}</div>
  131. <div class="layui-input-block">
  132. @foreach($column['options'] as $k => $col)
  133. <input type="checkbox" name="{{ $key.'['.$k.']' }}" value="{{ $k }}"
  134. @if((isset($item[$key]) && in_array($k, $item[$key])) ||
  135. (old($key) !== null && in_array($k, old($key))) ||
  136. (isset($column['default']) && !empty($column['default']) && in_array($k, $column['default']))) checked
  137. @endif title="{{ $col }}" lay-filter="demo{{ $k }}"/>
  138. @endforeach
  139. </div>
  140. </div>
  141. @break
  142. @case('textarea')
  143. <div class="layui-form-item">
  144. <label class="layui-form-label">{{ $column['label'] }}</label>
  145. <div class="layui-input-block">
  146. <textarea class="layui-textarea" name="{{ $key }}" cols="30" rows="3"
  147. placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}">{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}</textarea>
  148. </div>
  149. </div>
  150. @break
  151. @case('select')
  152. <div class="layui-form-item">
  153. <label class="layui-form-label">{{ $column['label'] }}</label>
  154. <div class="layui-input-block">
  155. <select name="{{ $key }}">
  156. <option value="0" @if(!isset($item)) selected @endif>无</option>
  157. @if(count($column['options']) > 0)
  158. @foreach($column['options'] as $k => $col)
  159. <option value="{{ $k }}"
  160. @if($column['default'] == $k || (isset($item[$key]) && $item[$key] == $k)) selected @endif>
  161. {{ $col }}
  162. </option>
  163. @endforeach
  164. @endif
  165. </select>
  166. </div>
  167. </div>
  168. @break
  169. {{--联动选择--}}
  170. @case('xselect')
  171. <div class="layui-form-item">
  172. <label class="layui-form-label">{{ $column['label'] }}</label>
  173. <div class="layui-input-block">
  174. <select name="{{ $key }}" xm-select="{{ $key }}" xm-select-radio="">
  175. <option value="">无</option>
  176. </select>
  177. </div>
  178. </div>
  179. <script>
  180. layui.use(['form', 'layer', 'formSelects'], function () {
  181. var form = layui.form, layer = layui.layer, formSelects = layui.formSelects;
  182. formSelects.config('{{ $key }}', {
  183. keyName: 'title', //自定义返回数据中name的key, 默认 name
  184. keyVal: 'id', //自定义返回数据中value的key, 默认 value
  185. keyChildren: 'child',
  186. }, true);
  187. formSelects.data('{{ $key }}', 'local', {
  188. arr: {!! json_encode($column['options'], JSON_UNESCAPED_UNICODE) !!},
  189. linkage: true,
  190. linkageWidth: 160
  191. });
  192. //如果有需要默认值的小伙伴请使用formSelects.value
  193. @if(isset($item[$key]))
  194. formSelects.value('{{ $key }}', ['{{ $item[$key] }}']);
  195. @endif
  196. });
  197. </script>
  198. @break
  199. {{--单选--}}
  200. @case('sselect')
  201. <div class="layui-form-item">
  202. <label class="layui-form-label">{{ $column['label'] }}</label>
  203. <div class="layui-input-block">
  204. <select name="{{ $key }}" xm-select="{{ $key }}" xm-select-radio="" xm-select-search=""
  205. xm-select-search-type="dl">
  206. <option value="">无</option>
  207. </select>
  208. </div>
  209. </div>
  210. <script>
  211. layui.use(['form', 'layer', 'formSelects'], function () {
  212. var form = layui.form, layer = layui.layer, formSelects = layui.formSelects;
  213. formSelects.config('{{ $key }}', {
  214. keyName: 'title', //自定义返回数据中name的key, 默认 name
  215. keyVal: 'id', //自定义返回数据中value的key, 默认 value
  216. keyChildren: 'child',
  217. }, true);
  218. formSelects.data('{{ $key }}', 'local', {
  219. arr: {!! json_encode($column['options'], JSON_UNESCAPED_UNICODE) !!}
  220. });
  221. //如果有需要默认值的小伙伴请使用formSelects.value
  222. @if(isset($item[$key]))
  223. formSelects.value('{{ $key }}', ['{{ $item[$key] }}']);
  224. @endif
  225. });
  226. </script>
  227. @break
  228. {{--多选--}}
  229. @case('mselect')
  230. <div class="layui-form-item">
  231. <label class="layui-form-label">{{ $column['label'] }}</label>
  232. <div class="layui-input-block">
  233. <select name="{{ $key }}" xm-select="{{ $key }}" xm-select-search=""
  234. xm-select-search-type="dl">
  235. <option value="">无</option>
  236. </select>
  237. </div>
  238. </div>
  239. <script>
  240. layui.use(['form', 'layer', 'formSelects'], function () {
  241. var form = layui.form, layer = layui.layer, formSelects = layui.formSelects;
  242. formSelects.config('{{ $key }}', {
  243. keyName: 'title', //自定义返回数据中name的key, 默认 name
  244. keyVal: 'id', //自定义返回数据中value的key, 默认 value
  245. keyChildren: 'child',
  246. }, true);
  247. formSelects.data('{{ $key }}', 'local', {
  248. arr: {!! json_encode($column['options'], JSON_UNESCAPED_UNICODE) !!}
  249. });
  250. //如果有需要默认值的小伙伴请使用formSelects.value
  251. @if(isset($item[$key]))
  252. formSelects.value('{{ $key }}', {!! json_encode($column['default'],JSON_UNESCAPED_UNICODE) !!});
  253. @endif
  254. });
  255. </script>
  256. @break
  257. @case('tselect')
  258. <div class="layui-form-item" id="section_{{ $key }}">
  259. <label class="layui-form-label">{{ $column['label'] }}</label>
  260. <div class="layui-input-block">
  261. <div id="{{ $key }}"></div>
  262. </div>
  263. </div>
  264. <script>
  265. xmSelect.render({
  266. el: '#{{ $key }}',
  267. name: '{{ $key }}',
  268. @if(isset($column['default']) && !empty($column['default']) && is_array($column['default']) && count($column['default']) > 0)
  269. initValue: {!! json_encode($column['default']) !!},
  270. @endif
  271. autoRow: true,
  272. filterable: true,
  273. tree: {
  274. show: true,
  275. showFolderIcon: true,
  276. showLine: true,
  277. indent: 20,
  278. },
  279. data() {
  280. return {!! json_encode($column['options']) !!};
  281. }
  282. });
  283. </script>
  284. @break
  285. @case('trselect')
  286. <div class="layui-form-item" id="section_{{ $key }}">
  287. <label class="layui-form-label">{{ $column['label'] }}</label>
  288. <div class="layui-input-block">
  289. <div id="{{ $key }}"></div>
  290. </div>
  291. </div>
  292. <script>
  293. xmSelect.render({
  294. el: '#{{ $key }}',
  295. name: '{{ $key }}',
  296. //单选
  297. radio: true,
  298. //选中关闭
  299. clickClose: true,
  300. @if(isset($column['default']) && !empty($column['default']) && is_array($column['default']) && count($column['default']) > 0)
  301. initValue: {!! json_encode($column['default']) !!},
  302. @endif
  303. autoRow: true,
  304. filterable: true,
  305. tree: {
  306. show: true,
  307. showFolderIcon: true,
  308. showLine: true,
  309. indent: 20,
  310. },
  311. data() {
  312. return {!! json_encode($column['options']) !!};
  313. }
  314. });
  315. </script>
  316. @break
  317. @case('trmselect')
  318. <div class="layui-form-item" id="section_{{ $key }}">
  319. <label class="layui-form-label">{{ $column['label'] }}</label>
  320. <div class="layui-input-block">
  321. <div id="{{ $key }}"></div>
  322. </div>
  323. </div>
  324. <script>
  325. xmSelect.render({
  326. el: '#{{ $key }}',
  327. name: '{{ $key }}',
  328. @if(isset($column['default']) && !empty($column['default']) && is_array($column['default']) && count($column['default']) > 0)
  329. initValue: {!! json_encode($column['default']) !!},
  330. @endif
  331. autoRow: true,
  332. filterable: true,
  333. tree: {
  334. show: true,
  335. showFolderIcon: true,
  336. showLine: true,
  337. indent: 20,
  338. },
  339. data() {
  340. return {!! json_encode($column['options']) !!};
  341. }
  342. });
  343. </script>
  344. @break
  345. @case('date')
  346. <div class="layui-form-item">
  347. <label class="layui-form-label">{{ $column['label'] }}</label>
  348. <div class="layui-input-block">
  349. <input class="layui-input date-input" type="text"
  350. placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}"
  351. name="{{ $key }}" autocomplete="off" readonly
  352. disableautocomplete value="{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}">
  353. </div>
  354. </div>
  355. @break
  356. @case('dateMonth')
  357. <div class="layui-form-item">
  358. <label class="layui-form-label">{{ $column['label'] }}</label>
  359. <div class="layui-input-block">
  360. <input class="layui-input dateMonth-input" type="text"
  361. placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}"
  362. name="{{ $key }}" autocomplete="off" readonly
  363. disableautocomplete value="{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}">
  364. </div>
  365. </div>
  366. @break
  367. @case('dateYear')
  368. <div class="layui-form-item">
  369. <label class="layui-form-label">{{ $column['label'] }}</label>
  370. <div class="layui-input-block">
  371. <input class="layui-input dateYear-input" type="text"
  372. placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}"
  373. name="{{ $key }}" autocomplete="off" readonly
  374. disableautocomplete value="{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}">
  375. </div>
  376. </div>
  377. @break
  378. @case('dateTime')
  379. <div class="layui-form-item">
  380. <label class="layui-form-label">{{ $column['label'] }}</label>
  381. <div class="layui-input-block">
  382. <input class="layui-input" type="text"
  383. id="{{ $key }}"
  384. placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}"
  385. lay-key="{{ rand(10000,99999) }}"
  386. name="{{ $key }}" autocomplete="off" readonly
  387. disableautocomplete value="{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}">
  388. </div>
  389. </div>
  390. <script>
  391. layui.use('laydate', function () {
  392. var laydate = layui.laydate;
  393. //执行一个laydate实例
  394. laydate.render({
  395. elem: '#{{ $key }}'
  396. , type: 'datetime'
  397. });
  398. });
  399. </script>
  400. @break
  401. @case('time')
  402. <div class="layui-form-item">
  403. <label class="layui-form-label">{{ $column['label'] }}</label>
  404. <div class="layui-input-block">
  405. <input class="layui-input time-input" type="text"
  406. placeholder="{{ $column['placeholder'] ?? '请输入'.$column['label'] }}"
  407. name="{{ $key }}"
  408. value="{{ $item[$key] ?? (old($key) ?? ($column['default'] ?? '')) }}">
  409. </div>
  410. </div>
  411. @break
  412. @case('tree_select')
  413. <div class="layui-form-item">
  414. <label class="layui-form-label">{{ $column['label'] }}</label>
  415. <div class="layui-input-block">
  416. {{-- {!! json_encode($column) !!} --}}
  417. <select name="{{ $key }}">
  418. @if($column['isShowNull'] == true)
  419. <option value="0" @if(!isset($item)) selected @endif>无</option>
  420. @endif
  421. @if(count($column['options']) > 0)
  422. @include('admin::component.multi_select_option', ['selects' => $column['options'], 'selectPid' => $item[$key] ?? ($column['default'] ?? '')])
  423. @endif
  424. </select>
  425. </div>
  426. </div>
  427. @break
  428. @case('icon')
  429. <div class="layui-form-item" style="position:relative;">
  430. <label class="layui-form-label">{{ $column['label'] }}</label>
  431. <div class="layui-input-block">
  432. <div id="iconShow" class="layui-form-mid">
  433. <i class="layui-icon layui-icon-{{ ($item[$key] ?? old($key)) ?? 'app' }}"></i>
  434. </div>
  435. <div class="layui-input-inline" id="iconInput">
  436. <input class="layui-input" type="text" placeholder="选择图标" id="iconInput"
  437. name="{{ $key }}" autocomplete="off"
  438. disableautocomplete value="{{ $item[$key] ?? old($key) }}">
  439. </div>
  440. </div>
  441. <div id="iconBox">
  442. @include('admin::component/icon_list')
  443. </div>
  444. </div>
  445. <script>
  446. $(function () {
  447. $('#iconInput').on('click', function () {
  448. $('#iconBox').toggle();
  449. })
  450. $('#iconBox li i').on('click', function () {
  451. var self = $(this);
  452. $('#iconInput input').val(self.data('icon'));
  453. $('#iconShow').html('<i class="layui-icon layui-icon-' + self.data('icon') + '"></i>');
  454. $('#iconBox').hide();
  455. })
  456. })
  457. </script>
  458. @break
  459. @case('uploadImg')
  460. <label class="layui-form-label">{{ $column['label'] }}</label>
  461. <div class="layui-upload">
  462. <img id="pre" class="layui-upload-img none">
  463. @if (strlen($column['default']) > 0)
  464. <script>
  465. $('#pre').attr('src', '{{ $column['default'] }}');
  466. </script>
  467. @endif
  468. <span style="display: inline-table;">
  469. <button type="button" class="layui-btn" id="selectImgBtn">上传图片</button>
  470. <p id="uploadTips">
  471. <input type="hidden" name="{{ $key }}" value="{{ $column['default'] ?? '' }}"/>
  472. </p>
  473. </span>
  474. </div>
  475. <style>
  476. .layui-upload-img {
  477. /*width: 92px;*/
  478. height: 92px;
  479. margin: 10px 10px 10px 10px;
  480. }
  481. #uploadTips {
  482. line-height: 30px;
  483. }
  484. </style>
  485. <script>
  486. layui.use('upload', function () {
  487. var $ = layui.jquery
  488. , upload = layui.upload;
  489. var uploadInst = upload.render({
  490. elem: '#selectImgBtn'
  491. , url: "{{ $column['uploadURLPath'] }}"
  492. , acceptMime: 'image/jpg, image/png, image/jpeg'
  493. , number: 1
  494. , before: function (obj) {
  495. //预读本地文件示例,不支持ie8
  496. obj.preview(function (index, file, result) {
  497. $('#pre').attr('src', result); //图片链接(base64)
  498. });
  499. }
  500. , done: function (res) {
  501. //如果上传失败
  502. if (res.code > 0) {
  503. return layer.msg('上传失败');
  504. }
  505. //上传成功
  506. $("input[name='{{ $key }}']").val(res.data.image_path);
  507. }
  508. , error: function () {
  509. //演示失败状态,并实现重传
  510. var uploadTips = $('#uploadTips');
  511. uploadTips.html('<span style="color: #FF5722; text-align:center">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
  512. uploadTips.find('.demo-reload').on('click', function () {
  513. uploadInst.upload();
  514. });
  515. }
  516. });
  517. });
  518. </script>
  519. @break
  520. @case('uploadImgs')
  521. <div class="layui-form-item">
  522. <label class="layui-form-label">{{ $column['label'] }}</label>
  523. <div class="layui-input-block">
  524. <div class="layui-upload">
  525. <blockquote class="layui-elem-quote layui-quote-nm">
  526. 预览图:
  527. <div class="layui-upload-list" id="{{ $key }}_list">
  528. @if(isset($column['default']) && !empty($column['default']))
  529. @foreach($column['default'] as $imgKey => $image)
  530. <span id="img{{ $imgKey }}" class="imgItem">
  531. <img src="{{ $image['path'] }}" alt="{{ $image['imageName'] }}"
  532. class="layui-upload-img"/>
  533. <a href="javascript:void(0);" class="layui-close">X</a>
  534. <input type="hidden" name="{{ $key }}[{{ $imgKey }}][path]"
  535. value="{{ $image['path'] }}">
  536. <input type="hidden" name="{{ $key }}[{{ $imgKey }}][imageName]"
  537. value="{{ $image['imageName'] }}">
  538. </span>
  539. @endforeach
  540. @endif
  541. </div>
  542. </blockquote>
  543. <button type="button" class="layui-btn" id="{{ $key }}_btn">多图片上传</button>
  544. </div>
  545. </div>
  546. </div>
  547. <script>
  548. layui.use('upload', function () {
  549. var upload = layui.upload;
  550. //多图片上传
  551. upload.render({
  552. elem: '#{{ $key }}_btn'
  553. , url: '{{ $column['uploadURLPath'] }}'
  554. , multiple: true
  555. , accept: 'images'
  556. , field: 'image'
  557. , before: function (obj) {
  558. //预读本地文件示例,不支持ie8
  559. obj.preview(function (index, file, result) {
  560. $('#{{ $key }}_list').append('<span id="img' + index + '" class="imgItem"><img src="' + result + '" alt="' + file.name + '" class="layui-upload-img"><a href="javascript:void(0);" class="layui-close">X</a></span>')
  561. });
  562. }
  563. , done: function (res, index) {
  564. if (res.code === 0) {
  565. $('#img' + index).append('<input type="hidden" name="{{ $key }}[' + index + '][path]" value="' + res.data.image_path + '"/>')
  566. $('#img' + index).append('<input type="hidden" name="{{ $key }}[' + index + '][imageName]" value="' + res.data.image_name + '"/>')
  567. }
  568. //上传完毕
  569. }
  570. });
  571. });
  572. </script>
  573. @break
  574. @case('uploadFiles')
  575. <div class="layui-form-item">
  576. <label class="layui-form-label">{{ $column['label'] }}</label>
  577. <div class="layui-input-block">
  578. <div class="layui-upload">
  579. <div class="layui-upload-list">
  580. <table class="layui-table">
  581. <thead>
  582. <tr>
  583. <th>文件名</th>
  584. <th>状态</th>
  585. <th>操作</th>
  586. </tr>
  587. </thead>
  588. <tbody id="{{ $key }}_list">
  589. @if(isset($column['default']) && !empty($column['default']))
  590. @foreach($column['default'] as $fileKey => $file)
  591. <tr>
  592. <td>
  593. <a href="/admin/file/download?name={{ $file['fileName'] }}&path={{ $file['path'] }}"
  594. target="_blank"></a>{{ $file['fileName'] }}</td>
  595. <td></td>
  596. <td>
  597. <button class="layui-btn layui-btn-xs layui-btn-danger file-delete">删除
  598. </button>
  599. <input type="hidden" name="{{ $key }}[{{ $fileKey }}][path]"
  600. value="{{ $file['path'] }}"/>
  601. <input type="hidden" name="{{ $key }}[{{ $fileKey }}][fileName]"
  602. value="{{ $file['fileName'] }}"/>
  603. <input type="hidden" name="{{ $key }}[{{ $fileKey }}][fileSize]"
  604. value="{{ $file['fileSize'] ?? 0 }}"/>
  605. </td>
  606. </tr>
  607. @endforeach
  608. @endif
  609. </tbody>
  610. </table>
  611. </div>
  612. <button type="button" class="layui-btn" id="{{ $key }}_btn">选择上传文件</button>
  613. </div>
  614. </div>
  615. </div>
  616. <script>
  617. layui.use('upload', function () {
  618. var upload = layui.upload;
  619. //多文件列表示例
  620. var fileListView = $('#{{ $key }}_list')
  621. , uploadListIns = upload.render({
  622. elem: '#{{ $key }}_btn'
  623. , url: '{{ $column['uploadURLPath'] }}'
  624. , accept: 'file'
  625. , multiple: true
  626. // , auto: false
  627. // , bindAction: '#testListAction'
  628. , choose: function (obj) {
  629. // var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
  630. //读取本地文件
  631. obj.preview(function (index, file, result) {
  632. var tr = $(['<tr id="upload-{{ $key }}-' + index + '">'
  633. , '<td>' + file.name + '</td>'
  634. // , '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>'
  635. , '<td>正在上传,请等待……</td>'
  636. , '<td>'
  637. , '<button class="layui-btn layui-btn-xs file-reload layui-hide">重传</button>'
  638. , '<button class="layui-btn layui-btn-xs layui-btn-danger file-delete">删除</button>'
  639. , '</td>'
  640. , '</tr>'].join(''));
  641. //单个重传
  642. tr.find('.file-reload').on('click', function () {
  643. obj.upload(index, file);
  644. });
  645. //删除
  646. tr.find('.file-delete').on('click', function () {
  647. // delete files[index]; //删除对应的文件
  648. tr.remove();
  649. uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
  650. });
  651. fileListView.append(tr);
  652. });
  653. }
  654. , done: function (res, index, upload) {
  655. if (res.code === 0) { //上传成功
  656. var tr = fileListView.find('tr#upload-{{ $key }}-' + index)
  657. , tds = tr.children();
  658. tds.eq(0).html('<a href="/admin/file/download?name=' + res.data.file_name + '&path=' + res.data.file_path + '" target="_blank">' + res.data.file_name + '</a>');
  659. tds.eq(1).html('<span style="color: #5FB878;">上传成功</span>');
  660. // tds.eq(3).html(''); //清空操作
  661. tds.eq(2).append('<input type="hidden" name="{{ $key }}[' + index + '][path]" value="' + res.data.file_path + '"/>');
  662. tds.eq(2).append('<input type="hidden" name="{{ $key }}[' + index + '][fileName]" value="' + res.data.file_name + '"/>');
  663. tds.eq(2).append('<input type="hidden" name="{{ $key }}[' + index + '][fileSize]" value="' + (res.data.file_size == undefined ? 0 : res.data.file_size) + '"/>');
  664. return;
  665. // return delete this.files[index]; //删除文件队列已经上传成功的文件
  666. }
  667. this.error(index, upload);
  668. }
  669. , error: function (index, upload) {
  670. var tr = fileListView.find('tr#upload-{{ $key }}-' + index)
  671. , tds = tr.children();
  672. tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
  673. tds.eq(3).find('.file-reload').removeClass('layui-hide'); //显示重传
  674. }
  675. });
  676. });
  677. </script>
  678. @break
  679. @case('hidden')
  680. <input type="hidden" name="{{ $key }}" value="{{ $column['label'] }}"/>
  681. @break
  682. @case('includeBlock')
  683. <div class="layui-form-item">
  684. <label class="layui-form-label">{{ $column['label'] }}</label>
  685. <div class="layui-input-block">
  686. @includeIf($column['path'], $column['itemValue'])
  687. </div>
  688. </div>
  689. @break
  690. @case('editor')
  691. <div class="layui-form-item">
  692. <label class="layui-form-label">{{ $column['label'] }}</label>
  693. <div class="layui-input-block">
  694. <div class="fr-view">
  695. <textarea id="editor_{{ $key }}"
  696. name="{{ $key }}">{!! $item[$key] ?? $column['default'] !!}</textarea>
  697. {{--<div id="editor_{{ $key }}">{!! $item[$key] ?? $column['default'] !!}</div>--}}
  698. </div>
  699. </div>
  700. </div>
  701. <script>
  702. var editor_{{ $key }} = new FroalaEditor('#editor_{{ $key }}', {
  703. language: 'zh_cn',
  704. iframe: true,
  705. quickInsertTags: [],
  706. events: {
  707. contentChanged: function () {
  708. $('#editor_{{ $key }}').val(this.html.get());
  709. }
  710. },
  711. // upload image
  712. imageUploadParam: 'file',
  713. imageUploadURL: '{{ $column['uploadURLPath'] }}',
  714. imageUploadMethod: 'POST',
  715. imageInsertButtons: ['imageBack', '|', 'imageUpload', 'imageByURL'],
  716. imageDefaultWidth: 500,
  717. // toolbar buttons
  718. toolbarButtons: ['bold', 'italic', 'underline', 'strikeThrough', '|',
  719. 'paragraphFormat', 'fontFamily', 'fontSize', 'textColor', 'backgroundColor', 'clearFormatting', '|',
  720. 'align', 'formatOLSimple', 'formatUL', 'outdent', 'indent', 'quote', '|',
  721. 'insertLink', 'insertImage', 'insertTable', 'insertHR', '|',
  722. 'selectAll', 'clearFormatting', '|',
  723. 'undo', 'redo'],
  724. requestWithCORS: true,
  725. requestHeaders: {
  726. 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  727. }
  728. });
  729. /**
  730. tinymce.init({
  731. selector: '#editor_{{ $key }}',
  732. menubar: false,
  733. height: 600,
  734. plugins: [
  735. 'advlist autolink link image imagetools lists charmap print preview hr anchor pagebreak spellchecker',
  736. 'searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking',
  737. 'save table contextmenu directionality emoticons template paste textcolor'
  738. ],
  739. toolbar: 'insertfile undo redo | bold italic underline strikethrough removeformat formats forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image table tabledelete',
  740. images_upload_handler: function (blobInfo, success, failure) {
  741. var xhr, formData;
  742. xhr = new XMLHttpRequest();
  743. xhr.withCredentials = false;
  744. xhr.open('POST', '{{ $column['uploadURLPath'] }}');
  745. var token = '{{ csrf_token() }}';
  746. xhr.setRequestHeader("X-CSRF-TOKEN", token);
  747. xhr.onload = function () {
  748. var json;
  749. if (xhr.status != 200) {
  750. failure('HTTP Error: ' + xhr.status);
  751. return;
  752. }
  753. json = JSON.parse(xhr.responseText);
  754. if (!json || typeof json.location != 'string') {
  755. failure('Invalid JSON: ' + xhr.responseText);
  756. return;
  757. }
  758. success(json.location);
  759. };
  760. formData = new FormData();
  761. formData.append('file', blobInfo.blob(), blobInfo.filename());
  762. xhr.send(formData);
  763. },
  764. language: 'zh_CN'
  765. });
  766. **/
  767. {{--layui.use('layedit', function () {--}}
  768. {{--var layedit = layui.layedit;--}}
  769. {{--layedit.set({--}}
  770. {{--uploadImage: {--}}
  771. {{--url: '{{ $column['uploadURLPath'] }}'--}}
  772. {{--, acceptMime: 'image/jpg, image/png, image/jpeg'--}}
  773. {{--, number: 1--}}
  774. {{--, type: 'post' //默认post--}}
  775. {{--, headers: {--}}
  776. {{--'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')--}}
  777. {{--}--}}
  778. {{--}--}}
  779. {{--, tool: [--}}
  780. {{--'undo', 'redo', 'strong', 'italic', 'underline', 'del', 'addhr'--}}
  781. {{--, '|', 'fontfamily', 'fontSize', 'fontBackColor', 'colorpicker', 'face'--}}
  782. {{--, '|', 'left', 'center', 'right'--}}
  783. {{--, '|', 'link', 'unlink', 'image_alt', 'images'--}}
  784. {{--, '|', 'table'--}}
  785. {{--]--}}
  786. {{--});--}}
  787. {{--var index = layedit.build('editor_{{ $key }}'); //建立编辑器--}}
  788. {{--});--}}
  789. </script>
  790. @break
  791. @default
  792. 暂无数据
  793. @endswitch
  794. @if($hasHr)
  795. <hr>
  796. @endif
  797. @endforeach
  798. <div class="layui-form-item" id="user_name">
  799. <label class="layui-form-label">区域名称</label>
  800. <div class="layui-input-block">
  801. <input class="layui-input" type="text" name="title" value="{{ $item['title'] ?? (old('title') ?? ($column['default'] ?? '')) }}"/>
  802. </div>
  803. </div>
  804. <div class="layui-form-item">
  805. <div class="layui-form-label">视频服务器类型</div>
  806. <div class="layui-input-block">
  807. @foreach($columns['is_hak']['options'] as $k => $col)
  808. <label><input type="radio" name="is_hak" lay-filter="is_hak" value="{{ $k }}"
  809. @if((isset($item['is_hak']) && $item['is_hak'] == $k)) checked @endif title="{{ $col }}"/>
  810. </label>
  811. @endforeach
  812. </div>
  813. </div>
  814. <div class="layui-form-item">
  815. <label class="layui-form-label">排序</label>
  816. <div class="layui-input-block">
  817. <input class="layui-input" type="text" name="sort" value="{{ $item['sort'] ?? (old('sort') ?? ($columns['sort']['default'] ?? '')) }}"/>
  818. </div>
  819. </div>
  820. <div class="layui-form-item" id="ip">
  821. <label class="layui-form-label">ip地址</label>
  822. <div class="layui-input-block">
  823. <input class="layui-input" type="text" name="ip" value="{{ $item['ip'] ?? (old('ip') ?? ($column['default'] ?? '')) }}"/>
  824. </div>
  825. </div>
  826. <div class="layui-form-item" id="port">
  827. <label class="layui-form-label">端口</label>
  828. <div class="layui-input-block">
  829. <input class="layui-input" type="text" name="port" value="{{ $item['port'] ?? (old('port') ?? ($column['default'] ?? '')) }}"/>
  830. </div>
  831. </div>
  832. <div class="layui-form-item" id="key">
  833. <label class="layui-form-label" id="key_name"></label>
  834. <div class="layui-input-block">
  835. <input class="layui-input" type="text" name="key" value="{{ $item['key'] ?? (old('key') ?? ($column['default'] ?? '')) }}"/>
  836. </div>
  837. </div>
  838. <div class="layui-form-item" id="secret">
  839. <label class="layui-form-label" id="secret_name"></label>
  840. <div class="layui-input-block">
  841. <input class="layui-input" type="text" name="secret" value="{{ $item['secret'] ?? (old('secret') ?? ($column['default'] ?? '')) }}"/>
  842. </div>
  843. </div>
  844. <div class="layui-form-item" id="sOrgId">
  845. <label class="layui-form-label" id="sOrgId">设备ID</label>
  846. <div class="layui-input-block">
  847. <input class="layui-input" type="text" name="sOrgId" value="{{ $item['sOrgId'] ?? (old('sOrgId') ?? ($column['default'] ?? '')) }}"/>
  848. </div>
  849. </div>
  850. <div id="kongbai">
  851. <br><br><br><br><br><br><br><br><br><br><br>
  852. </div>
  853. @if(!is_null($footBtns))
  854. <hr>
  855. <div style="text-align: right">
  856. @if(in_array('goback',$footBtns))
  857. @if($isAjax)
  858. <button class="layui-btn layui-btn-primary layui-layer-close" style="position:relative;"
  859. type="button">
  860. 取消
  861. </button>
  862. @else
  863. <button class="layui-btn layui-btn-primary layui-layer-close" style="position:relative;"
  864. type="button"
  865. onclick="javascript:history.go(-1);">返回
  866. </button>
  867. @endif
  868. @endif
  869. @if(in_array('save',$footBtns))
  870. <button class="layui-btn" type="submit" lay-submit lay-filter="formBox">保存</button>
  871. @endif
  872. </div>
  873. @endif
  874. </form>
  875. <script>
  876. if($('input:radio[name="is_hak"]:checked').val() == undefined){
  877. $("input:radio[name=is_hak][value=0]").attr("checked", "true");
  878. }
  879. //根据摄像头来源显示内容
  880. if($('input:radio[name="is_hak"]:checked').val() == 0){//其他
  881. document.getElementById("ip").style.display = 'none';
  882. document.getElementById("port").style.display = 'none';
  883. document.getElementById("key").style.display = 'none';
  884. document.getElementById("secret").style.display = 'none';
  885. document.getElementById("kongbai").style.display = 'block';
  886. document.getElementById("sOrgId").style.display = 'none';
  887. }
  888. if($('input:radio[name="is_hak"]:checked').val() == 1){//海康
  889. document.getElementById("ip").style.display = 'block';
  890. document.getElementById("port").style.display = 'block';
  891. document.getElementById("key").style.display = 'block';
  892. document.getElementById("secret").style.display = 'block';
  893. document.getElementById("key_name").innerHTML = "请求key";
  894. document.getElementById("secret_name").innerHTML = "请求secret";
  895. document.getElementById("kongbai").style.display = 'none';
  896. document.getElementById("sOrgId").style.display = 'none';
  897. }
  898. if($('input:radio[name="is_hak"]:checked').val() == 4){//天地伟业
  899. document.getElementById("ip").style.display = 'block';
  900. document.getElementById("port").style.display = 'block';
  901. document.getElementById("key").style.display = 'block';
  902. document.getElementById("secret").style.display = 'block';
  903. document.getElementById("key_name").innerHTML = "用户名";
  904. document.getElementById("secret_name").innerHTML = "密码";
  905. document.getElementById("kongbai").style.display = 'none';
  906. document.getElementById("sOrgId").style.display = 'block';
  907. }
  908. layui.use(['form', 'laydate', 'table'], function () {
  909. var form = layui.form, table = layui.table;
  910. form.render();
  911. form.on('checkbox', function (data) {
  912. $(data.othis).toggleClass('layui-form-checked');
  913. });
  914. form.on('radio(is_hak)', function(data){
  915. var val=data.value;
  916. if(val == 0){
  917. document.getElementById("ip").style.display = 'none';
  918. document.getElementById("port").style.display = 'none';
  919. document.getElementById("key").style.display = 'none';
  920. document.getElementById("secret").style.display = 'none';
  921. document.getElementById("kongbai").style.display = 'block';
  922. document.getElementById("sOrgId").style.display = 'none';
  923. }else if(val == 1){
  924. document.getElementById("ip").style.display = 'block';
  925. document.getElementById("port").style.display = 'block';
  926. document.getElementById("key").style.display = 'block';
  927. document.getElementById("secret").style.display = 'block';
  928. document.getElementById("key_name").innerHTML = "请求key";
  929. document.getElementById("secret_name").innerHTML = "请求secret";
  930. document.getElementById("kongbai").style.display = 'none';
  931. document.getElementById("sOrgId").style.display = 'none';
  932. }else if(val == 4){
  933. document.getElementById("ip").style.display = 'block';
  934. document.getElementById("port").style.display = 'block';
  935. document.getElementById("key").style.display = 'block';
  936. document.getElementById("secret").style.display = 'block';
  937. document.getElementById("key_name").innerHTML = "用户名";
  938. document.getElementById("secret_name").innerHTML = "密码";
  939. document.getElementById("kongbai").style.display = 'none';
  940. document.getElementById("sOrgId").style.display = 'block';
  941. }
  942. });
  943. @if($isAjax)
  944. form.on('submit(formBox)', function (data) {
  945. var urlPost = $('#form-unify').attr('action');
  946. var submitBtn = $(data.elem);
  947. submitBtn.addClass('layui-btn-disabled').prop('disabled', true).text('提交中……');
  948. $.ajax({
  949. url: urlPost,
  950. type: 'POST',
  951. dataType: 'json',
  952. data: data.field
  953. })
  954. .done(function (res) {
  955. if (res.code === 0) {
  956. submitBtn.text('完成');
  957. layer.msg('完成!', {anim: 0}, function () {
  958. if (res.data.table === '') {
  959. location.reload();
  960. } else {
  961. layer.closeAll();
  962. if (res.data.table !== undefined) {
  963. table.reload(res.data.table);
  964. }
  965. if (res.url !== undefined) {
  966. location.href = res.url;
  967. }
  968. }
  969. });
  970. } else {
  971. layer.msg(res.message, {anim: 0}, function () {
  972. submitBtn.removeClass('layui-btn-disabled').prop('disabled', false).text('重新保存');
  973. });
  974. }
  975. })
  976. .fail(function (res) {
  977. layer.msg(res.message, {anim: 0}, function () {
  978. submitBtn.removeClass('layui-btn-disabled').prop('disabled', false).text('重新保存');
  979. });
  980. });
  981. return false;
  982. });
  983. @endif
  984. });
  985. $('.layui-form').on('click', '.layui-close', function () {
  986. var self = $(this);
  987. self.closest('.imgItem').remove();
  988. });
  989. $('.layui-form').on('click', '.file-delete', function () {
  990. var self = $(this);
  991. self.closest('tr').remove();
  992. });
  993. $('.date-input').datepicker({
  994. language: 'zh-CN',
  995. format: 'yyyy-mm-dd',
  996. zIndex: 19999999,
  997. autoHide: true
  998. });
  999. $('.dateMonth-input').datepicker({
  1000. language: 'zh-CN',
  1001. format: 'yyyy-mm',
  1002. zIndex: 19999999,
  1003. autoHide: true
  1004. });
  1005. $('.dateYear-input').datepicker({
  1006. language: 'zh-CN',
  1007. format: 'yyyy',
  1008. zIndex: 19999999,
  1009. autoHide: true
  1010. });
  1011. </script>