1
0

create.blade.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. @extends('admin.layouts')
  2. @section('css')
  3. <link href="/assets/global/vendor/dropify/dropify.min.css" rel="stylesheet">
  4. <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" rel="stylesheet">
  5. <link href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css" rel="stylesheet">
  6. <link href="/assets/global/vendor/bootstrap-tokenfield/bootstrap-tokenfield.min.css" rel="stylesheet">
  7. @endsection
  8. @section('content')
  9. <div class="page-content container">
  10. <x-ui.panel class="panel" :title="trans('admin.action.add_item', ['attribute' => trans('model.coupon.attribute')])">
  11. <x-slot:actions>
  12. <a class="btn btn-danger" href="{{ route('admin.coupon.index') }}">{{ trans('common.back') }}</a>
  13. </x-slot:actions>
  14. <x-slot:alert>
  15. @if (Session::has('successMsg'))
  16. <x-alert :message="Session::pull('successMsg')" />
  17. @endif
  18. @if ($errors->any())
  19. <x-alert type="danger" :message="$errors->all()" />
  20. @endif
  21. </x-slot:alert>
  22. <x-admin.form.container :route="route('admin.coupon.store')" enctype="true">
  23. <x-admin.form.input name="name" :label="trans('model.coupon.name')" :help="trans('admin.coupon.name_hint')" required />
  24. <x-admin.form.input name="sn" :label="trans('model.coupon.sn')" :help="trans('admin.coupon.sn_hint')" />
  25. <x-admin.form.input name="logo" type="file" :label="trans('model.coupon.logo')"
  26. attribute="data-plugin=dropify data-default-file={{ asset('/assets/images/default.png') }}" />
  27. <x-admin.form.radio-group name="type" :label="trans('model.common.type')" :options="[
  28. 1 => trans('admin.coupon.type.voucher'),
  29. 2 => trans('admin.coupon.type.discount'),
  30. 3 => trans('admin.coupon.type.charge'),
  31. ]" :help="trans('admin.coupon.type_hint')" />
  32. <x-admin.form.skeleton name="value" :label="trans('model.coupon.value')">
  33. <div class="input-group">
  34. <div class="input-group-prepend" id="amount">
  35. <span class="input-group-text">{{ array_column(config('common.currency'), 'symbol', 'code')[sysConfig('standard_currency')] }}</span>
  36. </div>
  37. <input class="form-control col-md-3" id="value" name="value" type="number" min="1" required />
  38. <span class="input-group-text discount" style="display: none;">%</span>
  39. </div>
  40. <span class="text-help discount" style="display: none;"> {{ trans('admin.coupon.value_hint') }}</span>
  41. </x-admin.form.skeleton>
  42. <div class="usage">
  43. <x-admin.form.input name="priority" type="number" :label="trans('model.coupon.priority')" min="1" max="255" :help="trans('admin.coupon.priority_hint')" />
  44. <x-admin.form.input-group name="usable_times" type="number" :label="trans('model.coupon.usable_times')" min="1" :append="trans('admin.times')" />
  45. <hr />
  46. <x-admin.form.input-group name="minimum" type="number" :label="trans('model.coupon.minimum')" step="0.01" :help="trans('admin.coupon.minimum_hint', ['num' => 'N']) . ' ' . trans('admin.zero_unlimited_hint')" :prepend="array_column(config('common.currency'), 'symbol', 'code')[sysConfig('standard_currency')]" />
  47. <x-admin.form.input-group name="used" type="number" :label="trans('model.coupon.used')" step="1" :help="trans('admin.coupon.used_hint', ['num' => 'N']) . ' ' . trans('admin.zero_unlimited_hint')" :append="trans('admin.times')" />
  48. <x-admin.form.select name="levels" :label="trans('model.coupon.levels')" :options="$levels" :help="trans('admin.coupon.levels_hint')" multiple />
  49. <x-admin.form.select name="groups" :label="trans('model.coupon.groups')" :options="$userGroups" :help="trans('admin.coupon.groups_hint')" multiple />
  50. <x-admin.form.input name="users_whitelist" :label="trans('model.coupon.users_whitelist')" attribute="data-plugin=tokenfield" :placeholder="trans('admin.coupon.users_placeholder')" :help="trans('admin.coupon.user_whitelist_hint')" />
  51. <x-admin.form.input name="users_blacklist" :label="trans('model.coupon.users_blacklist')" attribute="data-plugin=tokenfield" :placeholder="trans('admin.coupon.users_placeholder')" :help="trans('admin.coupon.users_blacklist_hint')" />
  52. <x-admin.form.input name="services_whitelist" :label="trans('model.coupon.services_whitelist')" attribute="data-plugin=tokenfield" :placeholder="trans('admin.coupon.services_placeholder')" :help="trans('admin.coupon.services_whitelist_hint')" />
  53. <x-admin.form.input name="services_blacklist" :label="trans('model.coupon.services_blacklist')" attribute="data-plugin=tokenfield" :placeholder="trans('admin.coupon.services_placeholder')" :help="trans('admin.coupon.services_blacklist_hint')" />
  54. <x-admin.form.skeleton name="newbie" :label="trans('model.coupon.newbie')">
  55. <ul class="list-unstyled">
  56. <li class="list-group-item p-0">
  57. <div class="checkbox-custom checkbox-primary">
  58. <input id="coupon" name="coupon" type="checkbox" />
  59. <label for="coupon">{{ trans('admin.coupon.newbie.first_discount') }}</label>
  60. </div>
  61. </li>
  62. <li class="list-group-item p-0">
  63. <div class="checkbox-custom checkbox-primary">
  64. <input id="order" name="order" type="checkbox" />
  65. <label for="order">{{ trans('admin.coupon.newbie.first_order') }}</label>
  66. </div>
  67. </li>
  68. <li class="list-group-item pb-0 pl-0">
  69. <div class="input-group">
  70. <div class="input-group-prepend">
  71. <label class="input-group-text" for="days">{{ trans('admin.coupon.newbie.created_days') }}</label>
  72. </div>
  73. <input class="form-control col-md-3" id="days" name="days" type="number" />
  74. <div class="input-group-append">
  75. <span class="input-group-text">{{ trans_choice('common.days.attribute', 0) }}</span>
  76. </div>
  77. </div>
  78. </li>
  79. </ul>
  80. <span class="text-help">{!! trans('admin.coupon.limit_hint') !!}</span>
  81. </x-admin.form.skeleton>
  82. <hr />
  83. </div>
  84. <x-admin.form.input name="num" type="number" :label="trans('model.coupon.num')" required />
  85. <x-admin.form.date-range start_name="start_time" end_name="end_time" :label="trans('common.available_date')" required />
  86. <div class="form-actions col-12 text-right">
  87. <button class="btn btn-success" type="submit">{{ trans('common.submit') }}</button>
  88. </div>
  89. </x-admin.form.container>
  90. </x-ui.panel>
  91. </div>
  92. @endsection
  93. @section('javascript')
  94. <script src="/assets/global/vendor/dropify/dropify.min.js"></script>
  95. <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
  96. <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js"></script>
  97. @if (app()->getLocale() !== 'en')
  98. <script src="/assets/global/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.{{ str_replace('_', '-', app()->getLocale()) }}.min.js" charset="UTF-8">
  99. </script>
  100. @endif
  101. <script src="/assets/global/vendor/bootstrap-tokenfield/bootstrap-tokenfield.min.js"></script>
  102. <script src="/assets/global/js/Plugin/dropify.js"></script>
  103. <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
  104. <script src="/assets/global/js/Plugin/bootstrap-datepicker.js"></script>
  105. <script src="/assets/global/js/Plugin/bootstrap-tokenfield.js"></script>
  106. <script>
  107. let couponData = {
  108. type: 1,
  109. usable_times: 1,
  110. start_time: "{{ date('Y-m-d') }}",
  111. end_time: "{{ date('Y-m-d', strtotime('+1 month')) }}"
  112. }
  113. @if (old())
  114. couponData = @json(old());
  115. @endif
  116. $(document).ready(function() {
  117. autoPopulateForm(couponData); // 填充表单数据
  118. });
  119. $('input[name="type"]').change(function() {
  120. const type = $(this).val();
  121. const isType2 = type === '2';
  122. const isType3 = type === '3';
  123. $('.discount').toggle(isType2);
  124. $('.usage').toggle(!isType3);
  125. $('#amount').toggle(!isType2);
  126. $('#value').attr('max', isType2 ? 99 : null);
  127. });
  128. </script>
  129. @endsection