rails_ship 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +32 -0
  4. data/Rakefile +32 -0
  5. data/app/controllers/ship/admin/addresses_controller.rb +48 -0
  6. data/app/controllers/ship/admin/base_controller.rb +5 -0
  7. data/app/controllers/ship/admin/home_controller.rb +8 -0
  8. data/app/controllers/ship/admin/packages_controller.rb +43 -0
  9. data/app/controllers/ship/admin/trade_items_controller.rb +72 -0
  10. data/app/controllers/ship/driver/base_controller.rb +9 -0
  11. data/app/controllers/ship/driver/favorites_controller.rb +39 -0
  12. data/app/controllers/ship/my/addresses_controller.rb +58 -0
  13. data/app/controllers/ship/my/base_controller.rb +5 -0
  14. data/app/controllers/ship/my/cars_controller.rb +54 -0
  15. data/app/controllers/ship/my/drivers_controller.rb +38 -0
  16. data/app/controllers/ship/my/favorites_controller.rb +40 -0
  17. data/app/controllers/ship/my/lines_controller.rb +71 -0
  18. data/app/controllers/ship/my/locations_controller.rb +60 -0
  19. data/app/controllers/ship/my/packages_controller.rb +53 -0
  20. data/app/controllers/ship/my/principal_addresses_controller.rb +26 -0
  21. data/app/controllers/ship/panel/base_controller.rb +5 -0
  22. data/app/controllers/ship/panel/lines_controller.rb +53 -0
  23. data/app/controllers/ship/panel/similars_controller.rb +61 -0
  24. data/app/jobs/ship/car_ocr_job.rb +11 -0
  25. data/app/jobs/ship/driver_ocr_job.rb +11 -0
  26. data/app/jobs/ship/location_geo_job.rb +10 -0
  27. data/app/models/ship/address.rb +7 -0
  28. data/app/models/ship/car.rb +5 -0
  29. data/app/models/ship/driver.rb +5 -0
  30. data/app/models/ship/ext/order.rb +7 -0
  31. data/app/models/ship/ext/trade_item.rb +11 -0
  32. data/app/models/ship/ext/user.rb +15 -0
  33. data/app/models/ship/favorite.rb +5 -0
  34. data/app/models/ship/line.rb +5 -0
  35. data/app/models/ship/line_similar.rb +5 -0
  36. data/app/models/ship/location.rb +5 -0
  37. data/app/models/ship/model/address.rb +10 -0
  38. data/app/models/ship/model/car.rb +34 -0
  39. data/app/models/ship/model/driver.rb +45 -0
  40. data/app/models/ship/model/favorite.rb +14 -0
  41. data/app/models/ship/model/line.rb +28 -0
  42. data/app/models/ship/model/line_similar.rb +16 -0
  43. data/app/models/ship/model/location.rb +53 -0
  44. data/app/models/ship/model/package.rb +28 -0
  45. data/app/models/ship/model/packaged.rb +29 -0
  46. data/app/models/ship/model/shipment.rb +22 -0
  47. data/app/models/ship/model/shipping.rb +9 -0
  48. data/app/models/ship/package.rb +6 -0
  49. data/app/models/ship/packaged.rb +5 -0
  50. data/app/models/ship/shipment.rb +5 -0
  51. data/app/models/ship.rb +11 -0
  52. data/app/views/admin/_ship_nav.html.erb +11 -0
  53. data/app/views/panel/_ship_nav.html.erb +10 -0
  54. data/app/views/ship/admin/addresses/_address.html.erb +24 -0
  55. data/app/views/ship/admin/addresses/_edit_form.html.erb +3 -0
  56. data/app/views/ship/admin/addresses/_form.html.erb +9 -0
  57. data/app/views/ship/admin/addresses/index.html.erb +36 -0
  58. data/app/views/ship/admin/base/_nav.html.erb +3 -0
  59. data/app/views/ship/admin/home/index.html.erb +0 -0
  60. data/app/views/ship/admin/packages/_button.html.erb +0 -0
  61. data/app/views/ship/admin/packages/_edit_form.html.erb +4 -0
  62. data/app/views/ship/admin/packages/_filter_form.html.erb +9 -0
  63. data/app/views/ship/admin/packages/_form.html.erb +5 -0
  64. data/app/views/ship/admin/packages/_index_tbody.html.erb +8 -0
  65. data/app/views/ship/admin/packages/_index_thead.html.erb +5 -0
  66. data/app/views/ship/admin/packages/_new_form.html.erb +4 -0
  67. data/app/views/ship/admin/packages/_show_table.html.erb +16 -0
  68. data/app/views/ship/admin/packages/index.html.erb +5 -0
  69. data/app/views/ship/admin/rallies/_filter.html.erb +7 -0
  70. data/app/views/ship/admin/rallies/_form.html+phone.erb +17 -0
  71. data/app/views/ship/admin/rallies/_show_table.html+phone.erb +24 -0
  72. data/app/views/ship/admin/rallies/_show_table.html.erb +12 -0
  73. data/app/views/ship/admin/rallies/index.html+phone.erb +26 -0
  74. data/app/views/ship/admin/rallies/show.html.erb +26 -0
  75. data/app/views/ship/admin/trade_items/_filter.html.erb +9 -0
  76. data/app/views/ship/admin/trade_items/_form.html.erb +7 -0
  77. data/app/views/ship/admin/trade_items/_show_table.html.erb +24 -0
  78. data/app/views/ship/admin/trade_items/index.html.erb +51 -0
  79. data/app/views/ship/driver/favorites/_button.html+phone.erb +4 -0
  80. data/app/views/ship/driver/favorites/_edit_form.html.erb +4 -0
  81. data/app/views/ship/driver/favorites/_filter_form.html+phone.erb +14 -0
  82. data/app/views/ship/driver/favorites/_filter_form.html.erb +9 -0
  83. data/app/views/ship/driver/favorites/_form.html.erb +3 -0
  84. data/app/views/ship/driver/favorites/_index_tbody.html.erb +6 -0
  85. data/app/views/ship/driver/favorites/_index_thead.html.erb +3 -0
  86. data/app/views/ship/driver/favorites/_index_tr.html.erb +4 -0
  87. data/app/views/ship/driver/favorites/_new_form.html.erb +4 -0
  88. data/app/views/ship/driver/favorites/_show_table.html.erb +8 -0
  89. data/app/views/ship/driver/favorites/index.html.erb +5 -0
  90. data/app/views/ship/my/addresses/_edit_form.html.erb +21 -0
  91. data/app/views/ship/my/addresses/_form.html.erb +23 -0
  92. data/app/views/ship/my/addresses/index.html.erb +44 -0
  93. data/app/views/ship/my/cars/_edit_form.html.erb +6 -0
  94. data/app/views/ship/my/cars/_filter_form.html.erb +9 -0
  95. data/app/views/ship/my/cars/_index_tbody.html.erb +3 -0
  96. data/app/views/ship/my/cars/_index_thead.html.erb +4 -0
  97. data/app/views/ship/my/cars/_new_form.html.erb +4 -0
  98. data/app/views/ship/my/cars/_show_table.html.erb +16 -0
  99. data/app/views/ship/my/cars/create.turbo_stream.erb +1 -0
  100. data/app/views/ship/my/cars/index.html+phone.erb +19 -0
  101. data/app/views/ship/my/cars/index.html.erb +5 -0
  102. data/app/views/ship/my/cars/new.html.erb +25 -0
  103. data/app/views/ship/my/drivers/_edit_form.html.erb +6 -0
  104. data/app/views/ship/my/drivers/_form.html.erb +4 -0
  105. data/app/views/ship/my/drivers/_index_tbody.html.erb +3 -0
  106. data/app/views/ship/my/drivers/_index_thead.html.erb +4 -0
  107. data/app/views/ship/my/drivers/_new_form.html.erb +4 -0
  108. data/app/views/ship/my/drivers/_show_table.html.erb +12 -0
  109. data/app/views/ship/my/drivers/_uploader.html.erb +22 -0
  110. data/app/views/ship/my/drivers/edit.html.erb +20 -0
  111. data/app/views/ship/my/drivers/show.html.erb +33 -0
  112. data/app/views/ship/my/favorites/_button.html+phone.erb +4 -0
  113. data/app/views/ship/my/favorites/_edit_form.html.erb +4 -0
  114. data/app/views/ship/my/favorites/_filter_form.html+phone.erb +14 -0
  115. data/app/views/ship/my/favorites/_filter_form.html.erb +9 -0
  116. data/app/views/ship/my/favorites/_form.html.erb +3 -0
  117. data/app/views/ship/my/favorites/_index_tbody.html.erb +6 -0
  118. data/app/views/ship/my/favorites/_index_thead.html.erb +3 -0
  119. data/app/views/ship/my/favorites/_new_form.html.erb +4 -0
  120. data/app/views/ship/my/favorites/_show_table.html.erb +8 -0
  121. data/app/views/ship/my/favorites/index.html.erb +5 -0
  122. data/app/views/ship/my/lines/_edit_form.html.erb +4 -0
  123. data/app/views/ship/my/lines/_filter_form.html.erb +1 -0
  124. data/app/views/ship/my/lines/_form.html.erb +3 -0
  125. data/app/views/ship/my/lines/_index_tbody.html.erb +6 -0
  126. data/app/views/ship/my/lines/_index_tr.html.erb +4 -0
  127. data/app/views/ship/my/lines/_item_field.html.erb +8 -0
  128. data/app/views/ship/my/lines/_item_location.html.erb +13 -0
  129. data/app/views/ship/my/lines/_new_form.html.erb +15 -0
  130. data/app/views/ship/my/lines/_select/_tab_bar.html.erb +10 -0
  131. data/app/views/ship/my/lines/_select.html.erb +10 -0
  132. data/app/views/ship/my/lines/_show/_index_tbody.html.erb +6 -0
  133. data/app/views/ship/my/lines/_show/_index_tr.html+phone.erb +6 -0
  134. data/app/views/ship/my/lines/_show_table.html.erb +9 -0
  135. data/app/views/ship/my/lines/add.turbo_stream.erb +1 -0
  136. data/app/views/ship/my/lines/index.html.erb +5 -0
  137. data/app/views/ship/my/lines/new.html.erb +1 -0
  138. data/app/views/ship/my/lines/requirement.html.erb +5 -0
  139. data/app/views/ship/my/lines/select.turbo_stream.erb +1 -0
  140. data/app/views/ship/my/lines/show.html+phone.erb +30 -0
  141. data/app/views/ship/my/locations/_edit_form.html.erb +4 -0
  142. data/app/views/ship/my/locations/_filter_form.html.erb +9 -0
  143. data/app/views/ship/my/locations/_form.html.erb +6 -0
  144. data/app/views/ship/my/locations/_index_tbody.html.erb +5 -0
  145. data/app/views/ship/my/locations/_index_thead.html.erb +6 -0
  146. data/app/views/ship/my/locations/_new_form.html.erb +4 -0
  147. data/app/views/ship/my/locations/_show_table.html.erb +20 -0
  148. data/app/views/ship/my/locations/index.html.erb +5 -0
  149. data/app/views/ship/my/packages/index.html.erb +31 -0
  150. data/app/views/ship/my/principal_addresses/index.html+phone.erb +32 -0
  151. data/app/views/ship/my/principal_addresses/plans.html+phone.erb +23 -0
  152. data/app/views/ship/my/principal_addresses/show.html+phone.erb +27 -0
  153. data/app/views/ship/panel/base/_nav.html.erb +3 -0
  154. data/app/views/ship/panel/lines/_edit_form.html.erb +4 -0
  155. data/app/views/ship/panel/lines/_filter_form.html.erb +9 -0
  156. data/app/views/ship/panel/lines/_form.html.erb +4 -0
  157. data/app/views/ship/panel/lines/_index_tbody.html.erb +4 -0
  158. data/app/views/ship/panel/lines/_index_thead.html.erb +5 -0
  159. data/app/views/ship/panel/lines/_index_tr.html.erb +19 -0
  160. data/app/views/ship/panel/lines/_new_form.html.erb +4 -0
  161. data/app/views/ship/panel/lines/_show_table.html.erb +12 -0
  162. data/app/views/ship/panel/lines/index.html.erb +5 -0
  163. data/app/views/ship/panel/similars/_breadcrumb.html.erb +7 -0
  164. data/app/views/ship/panel/similars/_button.html.erb +3 -0
  165. data/app/views/ship/panel/similars/_edit_form.html.erb +4 -0
  166. data/app/views/ship/panel/similars/_filter_form.html.erb +9 -0
  167. data/app/views/ship/panel/similars/_form.html.erb +4 -0
  168. data/app/views/ship/panel/similars/_index_tbody.html.erb +3 -0
  169. data/app/views/ship/panel/similars/_index_thead.html.erb +4 -0
  170. data/app/views/ship/panel/similars/_new/_button.html.erb +0 -0
  171. data/app/views/ship/panel/similars/_new/_index_tr.html.erb +10 -0
  172. data/app/views/ship/panel/similars/_new/_index_tr_remove.html.erb +10 -0
  173. data/app/views/ship/panel/similars/_new_form.html.erb +4 -0
  174. data/app/views/ship/panel/similars/_show_table.html.erb +12 -0
  175. data/app/views/ship/panel/similars/create.turbo_stream.erb +3 -0
  176. data/app/views/ship/panel/similars/destroy.turbo_stream.erb +3 -0
  177. data/app/views/ship/panel/similars/index.html.erb +5 -0
  178. data/app/views/ship/panel/similars/new.html.erb +16 -0
  179. data/config/locales/zh.attributes.yml +15 -0
  180. data/config/locales/zh.yml +51 -0
  181. data/config/routes.rb +66 -0
  182. data/lib/rails_ship/config.rb +11 -0
  183. data/lib/rails_ship/engine.rb +21 -0
  184. data/lib/rails_ship.rb +2 -0
  185. metadata +240 -0
@@ -0,0 +1,19 @@
1
+ <div class="weui-panel">
2
+ <div class="weui-panel__hd">
3
+ <%= t('.title') %>
4
+ </div>
5
+ <div class="weui-panel__bd">
6
+ <% @cars.each do |car| %>
7
+ <%= link_to({ action: 'show', id: car.id }, class: 'weui-media-box weui-media-box_appmsg') do %>
8
+ <div class="weui-media-box__hd">
9
+ <%= image_tag car.registration, class: 'weui-media-box__thumb' if car.registration.attached? %>
10
+ </div>
11
+ <div class="weui-media-box__bd">
12
+ <h4 class="weui-media-box__title"><%= car.number %></h4>
13
+ </div>
14
+ <% end %>
15
+ <% end %>
16
+ </div>
17
+ <div class="weui-panel__ft"></div>
18
+ </div>
19
+ <%= render 'button' %>
@@ -0,0 +1,5 @@
1
+ <%= render layout: 'index_table', locals: { cache_key: Ship::Car.column_names.hash } do %>
2
+ <%= render partial: 'index_tbody', layout: 'index_tr', collection: @cars, as: :model %>
3
+ <% end %>
4
+
5
+ <%= paginate @cars %>
@@ -0,0 +1,25 @@
1
+ <%= content_for(:wechat_js) do %>
2
+ <%= wechat_config_js debug: false, apis: ['chooseImage', 'previewImage', 'uploadImage'] -%>
3
+ <meta name="turbo-visit-control" content="reload">
4
+ <% end %>
5
+
6
+ <div class="weui-uploader p-4">
7
+ <div class="weui-uploader__hd">
8
+ <h1 class="weui-uploader__title">上传行驶证</h1>
9
+ <div class="weui-uploader__info"></div>
10
+ </div>
11
+ <div class="weui-uploader__bd">
12
+ <div class="weui-uploader__input-box" data-controller="wechat">
13
+ <%= image_vite_tag 'registration.jpg', data: { wechat_target: 'preview' }, class: 'weui-uploader__preview' %>
14
+ <div class="weui-uploader__input" data-action="click->wechat#chooseImage"></div>
15
+ <%= form_with theme: nil, model: Wechat::Media.new, url: { controller: 'wechat/my/medias', action: 'create' } do |f| %>
16
+ <%= f.hidden_field :source_type, value: @car.class_name %>
17
+ <%= f.hidden_field :attachment_name, value: 'registration' %>
18
+ <%= f.hidden_field :media_id, data: { wechat_target: 'media' } %>
19
+ <% end %>
20
+ </div>
21
+ </div>
22
+ </div>
23
+
24
+ <%= turbo_stream_from 'car_new' %>
25
+ <div id="car_update"></div>
@@ -0,0 +1,6 @@
1
+ <%= form_with theme: 'weui', model: driver, url: { controller: 'ship/my/drivers', action: 'update', id: driver.id }, method: :patch, class: 'weui-form weui-form_normal pt-0' do |f| %>
2
+ <%= render 'error_messages', target: f.object %>
3
+ <%= f.text_field :name %>
4
+ <%= f.text_field :number %>
5
+ <%= f.submit nil, wrap: { all: nil } %>
6
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <%= render 'error_messages', target: f.object %>
2
+ <%= f.text_field :name %>
3
+ <%= f.text_field :number %>
4
+ <%= f.text_field :license %>
@@ -0,0 +1,3 @@
1
+ <td><%= model.name %></td>
2
+ <td><%= model.number %></td>
3
+ <td><%= model.license %></td>
@@ -0,0 +1,4 @@
1
+ <th><%= Ship::Driver.human_attribute_name(:name) %></th>
2
+ <th><%= Ship::Driver.human_attribute_name(:number) %></th>
3
+ <th><%= Ship::Driver.human_attribute_name(:license) %></th>
4
+ <th></th>
@@ -0,0 +1,4 @@
1
+ <%= form_with model: @driver, url: { action: 'create' } do |f| %>
2
+ <%= render partial: 'form', locals: { f: f } %>
3
+ <%= f.submit %>
4
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <tr>
2
+ <td class="has-text-right"><%= Ship::Driver.human_attribute_name(:name) %></td>
3
+ <td><%= @driver.name %></td>
4
+ </tr>
5
+ <tr>
6
+ <td class="has-text-right"><%= Ship::Driver.human_attribute_name(:number) %></td>
7
+ <td><%= @driver.number %></td>
8
+ </tr>
9
+ <tr>
10
+ <td class="has-text-right"><%= Ship::Driver.human_attribute_name(:license) %></td>
11
+ <td><%= @driver.license %></td>
12
+ </tr>
@@ -0,0 +1,22 @@
1
+ <%= content_for(:wechat_js) do %>
2
+ <%= wechat_config_js debug: false, apis: ['chooseImage', 'previewImage', 'uploadImage'] -%>
3
+ <meta name="turbo-visit-control" content="reload">
4
+ <% end %>
5
+
6
+ <div class="weui-uploader p-4">
7
+ <div class="weui-uploader__hd">
8
+ <div class="weui-uploader__title">驾驶证</div>
9
+ </div>
10
+ <div class="weui-uploader__bd">
11
+ <div class="weui-uploader__input-box" data-controller="wechat">
12
+ <%= image_vite_tag 'license.jpg', data: { wechat_target: 'preview' }, class: 'weui-uploader__preview' %>
13
+ <div class="weui-uploader__input" data-action="click->wechat#chooseImage"></div>
14
+ <%= form_with theme: nil, model: Wechat::Media.new, url: { controller: 'wechat/my/medias', action: 'create' } do |f| %>
15
+ <%= f.hidden_field :source_type, value: @driver.class_name %>
16
+ <%= f.hidden_field :source_id, value: @driver.id %>
17
+ <%= f.hidden_field :attachment_name, value: 'license' %>
18
+ <%= f.hidden_field :media_id, data: { wechat_target: 'media' } %>
19
+ <% end %>
20
+ </div>
21
+ </div>
22
+ </div>
@@ -0,0 +1,20 @@
1
+ <div class="weui-panel">
2
+ <div class="weui-panel__hd level is-flex">
3
+ <div class="level-left">
4
+ <span class="level-item"><%= t('.title') %></span>
5
+ </div>
6
+ <div class="level-right mt-0">
7
+ <%= link_to({ action: 'show' }, class: 'weui-btn weui-btn_mini weui-btn_default level-item') do %>
8
+ <span><%= t('.show') %></span>
9
+ <% end %>
10
+ </div>
11
+ </div>
12
+ <div class="weui-panel__bd">
13
+ <%= render 'uploader' %>
14
+ </div>
15
+ </div>
16
+
17
+ <%= render partial: 'edit_form', locals: { driver: @driver } %>
18
+
19
+ <%= turbo_stream_from 'driver_edit' %>
20
+ <div id="driver_update"></div>
@@ -0,0 +1,33 @@
1
+ <div class="weui-panel">
2
+ <div class="weui-panel__hd level is-flex">
3
+ <div class="level-left">
4
+ <span class="level-item"><%= t('.title') %></span>
5
+ </div>
6
+ <div class="level-right mt-0">
7
+ <%= link_to({ action: 'edit' }, class: 'weui-btn weui-btn_mini weui-btn_default level-item') do %>
8
+ <span><%= t('.edit') %></span>
9
+ <% end %>
10
+ </div>
11
+ </div>
12
+ <div class="weui-panel__bd">
13
+ <% if @driver.license.attached? %>
14
+ <%= image_tag @driver.license.url, class: 'image' %>
15
+ <% else %>
16
+ <%= render 'uploader' %>
17
+ <% end %>
18
+ <div class="weui-form-preview">
19
+ <div class="weui-form-preview__bd">
20
+ <div class="weui-form-preview__item">
21
+ <div class="weui-form-preview__label"><%= Ship::Driver.human_attribute_name(:name) %></div>
22
+ <div class="weui-form-preview__value"><%= @driver.name %></div>
23
+ </div>
24
+ <div class="weui-form-preview__item">
25
+ <div class="weui-form-preview__label"><%= Ship::Driver.human_attribute_name(:number) %></div>
26
+ <div class="weui-form-preview__value"><%= @driver.number %></div>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ <%= turbo_stream_from 'driver_edit' %>
33
+ <div id="driver_update"></div>
@@ -0,0 +1,4 @@
1
+ <%= link_to({ controller: 'wechat/my/users', action: 'invite_qrcode' }, class: 'weui-btn_cell weui-btn_cell-primary') do %>
2
+ <i class="fas fa-qrcode fa-fw"></i>
3
+ <span>邀请二维码</span>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <%= form_with model: @favorite, url: { action: 'update' } do |f| %>
2
+ <%= render partial: 'form', locals: { f: f } %>
3
+ <%= f.submit %>
4
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <div class="weui-search-bar" data-controller="search">
2
+ <%= form_with theme: nil, class: 'weui-search-bar__form', method: :get, local: true do |f| %>
3
+ <div class="weui-search-bar__box">
4
+ <i class="weui-icon-search"></i>
5
+ <%= f.search_field 'name-like', value: params['name-like'], class: 'weui-search-bar__input', placeholder: '搜索', data: { search_target: 'input' } %>
6
+ <a class="weui-icon-clear" data-action="search#clear"></a>
7
+ </div>
8
+ <label class="weui-search-bar__label" data-search-target="label" data-action="click->search#focus">
9
+ <i class="weui-icon-search"></i>
10
+ <span>搜索</span>
11
+ </label>
12
+ <% end %>
13
+ <a class="weui-search-bar__cancel-btn" data-action="search#cancel">取消</a>
14
+ </div>
@@ -0,0 +1,9 @@
1
+ <%= form_with theme: 'search', model: Ship::Favorite.new do |f| %>
2
+ <div class="field-body">
3
+ <%= f.text_field :name %>
4
+ <div class="field is-narrow">
5
+ <%= f.submit %>
6
+ <%= link_to t('.clear'), filter_params(except: [:name]), class: 'button is-light' %>
7
+ </div>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <%= render 'error_messages', target: f.object %>
2
+ <%= f.text_field :driver_avatar %>
3
+ <%= f.text_field :driver_name %>
@@ -0,0 +1,6 @@
1
+ <div class="weui-cell__hd">
2
+ <%= image_tag model.driver.license, class: 'image is-64x64' if model.driver.license.attached? %>
3
+ </div>
4
+ <div class="weui-cell__bd weui-cell_primary">
5
+ <span><%= model.driver.name %></span>
6
+ </div>
@@ -0,0 +1,3 @@
1
+ <th><%= Favorite.human_attribute_name(:driver_avatar) %></th>
2
+ <th><%= Favorite.human_attribute_name(:driver_name) %></th>
3
+ <th></th>
@@ -0,0 +1,4 @@
1
+ <%= form_with model: @favorite, url: { action: 'create' } do |f| %>
2
+ <%= render partial: 'form', locals: { f: f } %>
3
+ <%= f.submit %>
4
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <tr>
2
+ <td class="has-text-right"><%= Ship::Favorite.human_attribute_name(:driver_name) %></td>
3
+ <td><%= @favorite.driver.name %></td>
4
+ </tr>
5
+ <tr>
6
+ <td class="has-text-right"><%= Ship::Favorite.human_attribute_name(:driver_avatar) %></td>
7
+ <td><%= image_tag @favorite.driver.license if @favorite.driver.license.attached? %></td>
8
+ </tr>
@@ -0,0 +1,5 @@
1
+ <%= render layout: 'index_table', locals: { cache_key: Ship::Favorite.column_names.hash } do %>
2
+ <%= render partial: 'index_tbody', layout: 'index_tr', collection: @favorites, as: :model %>
3
+ <% end %>
4
+
5
+ <%= paginate @favorites %>
@@ -0,0 +1,4 @@
1
+ <%= form_with model: @line, url: { action: 'update' } do |f| %>
2
+ <%= render partial: 'form', locals: { f: f } %>
3
+ <%= f.submit %>
4
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <%= render 'error_messages', target: f.object %>
2
+ <%= f.text_field :start_name %>
3
+ <%= f.text_field :finish_name %>
@@ -0,0 +1,6 @@
1
+ <div class="weui-cell__hd"></div>
2
+ <div class="weui-cell__bd weui-cell_primary">
3
+ <span class="has-dot-success"><%= model.start_name %></span>
4
+ <i class="fas fa-arrow-right has-text-grey"></i>
5
+ <span class="has-dot-danger"><%= model.finish_name %></span>
6
+ </div>
@@ -0,0 +1,4 @@
1
+ <%= link_to({ action: 'show', id: model.id }, class: 'weui-cell weui-cell_active weui-cell_access') do %>
2
+ <%= yield %>
3
+ <span class="weui-cell__ft"></span>
4
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <%= f.fields :locations, model: @line.locations.sort_by(&:position) do |ef| %>
2
+ <%= ef.hidden_field :poiname %>
3
+ <%= ef.hidden_field :poiaddress %>
4
+ <%= ef.hidden_field :cityname %>
5
+ <%= ef.hidden_field :lat %>
6
+ <%= ef.hidden_field :lng %>
7
+ <%= ef.hidden_field :position %>
8
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <tr id="tr_<%= location.position %>">
2
+ <td class="has-text-right"><%= location.position_text %></td>
3
+ <td>
4
+ <%= button_to({ action: 'select', index: location.position - 1 }, form_class: 'button_box') do %>
5
+ <span id="<%= location.position - 1 %>_name"><%= location.poiname %></span>
6
+ <% end %>
7
+ </td>
8
+ <td style="width: 5em">
9
+ <button class="button is-white" data-controller="former" data-former-id-value="new_line" data-former-url-value="<%= url_for({ action: 'add', position: location.position }) %>" data-action="former#submit">
10
+ <i class="fas fa-plus fa-lg"></i>
11
+ </button>
12
+ </td>
13
+ </tr>
@@ -0,0 +1,15 @@
1
+ <table class="table is-fullwidth is-hoverable as-show" id="line-table" style="table-layout: fixed">
2
+ <tbody>
3
+ <%= render partial: 'item_location', collection: @line.locations.sort_by(&:position), as: :location %>
4
+ </tbody>
5
+ <tfoot>
6
+ <tr>
7
+ <td colspan="3">
8
+ <%= form_with model: @line, url: { action: 'create' }, id: 'new_line' do |f| %>
9
+ <%= render partial: 'item_field', locals: { f: f } %>
10
+ <button type="submit" form="new_line" class="weui-btn weui-btn_primary">确认</button>
11
+ <% end %>
12
+ </td>
13
+ </tr>
14
+ </tfoot>
15
+ </table>
@@ -0,0 +1,10 @@
1
+ <div class="weui-tabbar weui-tabbar_fixed" data-controller="qq-map" data-qq-map-id-value="qq-map">
2
+ <div class="weui-tabbar__item">
3
+ <%= link_to :back, class: 'weui-btn weui-btn_default' do %>
4
+ <span>取消</span>
5
+ <% end %>
6
+ </div>
7
+ <div class="weui-tabbar__item">
8
+ <button class="weui-btn weui-btn_primary">确认</button>
9
+ </div>
10
+ </div>
@@ -0,0 +1,10 @@
1
+ <iframe
2
+ class="as-top"
3
+ id="qq-map"
4
+ src="https://apis.map.qq.com/tools/locpicker?type=1&key=<%= SETTING.dig(:qq_map, :key) %>&referer=work_design"
5
+ data-controller="qq-map"
6
+ data-action="message@window->qq-map#selected"
7
+ data-qq-map-name-value="line_locations_attributes"
8
+ data-qq-map-index-value="<%= params[:index] %>"
9
+ >
10
+ </iframe>
@@ -0,0 +1,6 @@
1
+ <div class="weui-cell__hd"></div>
2
+ <div class="weui-cell__bd weui-cell_primary">
3
+ <span class="has-dot-success"><%= model.start_name %></span>
4
+ <i class="fas fa-arrow-right has-text-grey"></i>
5
+ <span class="has-dot-danger"><%= model.finish_name %></span>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="weui-cell">
2
+ <%= yield %>
3
+ <span class="weui-cell__ft">
4
+ <a href="tel:18571856813"><i class="fas fa-phone"></i></a>
5
+ </span>
6
+ </div>
@@ -0,0 +1,9 @@
1
+ <% @line.locations.each do |location| %>
2
+ <tr>
3
+ <td class="has-text-justified"><%= location.position_text %></td>
4
+ <td>
5
+ <span class="has-text-grey"><%= location.cityname %></span>
6
+ <span><%= location.poiname %></span>
7
+ </td>
8
+ </tr>
9
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= turbo_stream.replace 'line-table', partial: 'new_form' %>
@@ -0,0 +1,5 @@
1
+ <%= render layout: 'index_table', locals: { cache_key: Ship::Line.column_names.hash } do %>
2
+ <%= render partial: 'index_tbody', layout: 'index_tr', collection: @lines, as: :model %>
3
+ <% end %>
4
+
5
+ <%= paginate @lines %>
@@ -0,0 +1 @@
1
+ <%= render 'new_form' %>
@@ -0,0 +1,5 @@
1
+ <%= render layout: 'index_table', locals: { cache_key: Ship::Line.column_names.hash } do %>
2
+ <%= render partial: 'index_tbody', layout: 'index_tr', collection: @lines, as: :model %>
3
+ <% end %>
4
+
5
+ <%= paginate @lines %>
@@ -0,0 +1 @@
1
+ <%= turbo_stream.after 'line-table', partial: 'select' %>
@@ -0,0 +1,30 @@
1
+ <table class="table is-fullwidth is-hoverable as-show">
2
+ <thead>
3
+ <tr>
4
+ <th class="has-text-left">
5
+ <%= link_to({ action: 'index' }, class: 'button is-borderless') do %>
6
+ <i class="fas fa-angle-left fa-lg"></i>
7
+ <% end %>
8
+ </th>
9
+ <th class="has-text-right">
10
+ <button class="button is-borderless" data-controller="weui-actionsheet" data-weui-actionsheet-id-value="actionsheet" data-action="weui-actionsheet#toggle">
11
+ <i class="fas fa-ellipsis-h fa-lg"></i>
12
+ </button>
13
+ </th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+ <%= render 'show_table' %>
18
+ </tbody>
19
+ </table>
20
+
21
+ <div class="weui-panel">
22
+ <div class="weui-panel__hd"><%= t('.title') %></div>
23
+ <div class="weui-panel__bd">
24
+ <div class="weui-cells mt-0">
25
+ <%= render partial: 'index_tbody', layout: 'index_tr', collection: @similars, as: :model %>
26
+ </div>
27
+ </div>
28
+ </div>
29
+
30
+ <%= render 'actionsheet' %>
@@ -0,0 +1,4 @@
1
+ <%= form_with model: @location, url: { action: 'update' } do |f| %>
2
+ <%= render partial: 'form', locals: { f: f } %>
3
+ <%= f.submit %>
4
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <%= form_with theme: 'search', model: Ship::Location.new do |f| %>
2
+ <div class="field-body">
3
+ <%= f.text_field :name %>
4
+ <div class="field is-narrow">
5
+ <%= f.submit %>
6
+ <%= link_to t('.clear'), filter_params(except: [:name]), class: 'button is-light' %>
7
+ </div>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <%= render 'error_messages', target: f.object %>
2
+ <%= f.text_field :poiname %>
3
+ <%= f.text_field :poiaddress %>
4
+ <%= f.text_field :cityname %>
5
+ <%= f.text_field :lat %>
6
+ <%= f.text_field :lng %>
@@ -0,0 +1,5 @@
1
+ <td><%= model.poiname %></td>
2
+ <td><%= model.poiaddress %></td>
3
+ <td><%= model.cityname %></td>
4
+ <td><%= model.lat %></td>
5
+ <td><%= model.lng %></td>
@@ -0,0 +1,6 @@
1
+ <th><%= Ship::Location.human_attribute_name(:poiname) %></th>
2
+ <th><%= Ship::Location.human_attribute_name(:poiaddress) %></th>
3
+ <th><%= Ship::Location.human_attribute_name(:cityname) %></th>
4
+ <th><%= Ship::Location.human_attribute_name(:lat) %></th>
5
+ <th><%= Ship::Location.human_attribute_name(:lng) %></th>
6
+ <th></th>
@@ -0,0 +1,4 @@
1
+ <%= form_with model: @location, url: { action: 'create' } do |f| %>
2
+ <%= render partial: 'form', locals: { f: f } %>
3
+ <%= f.submit %>
4
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <tr>
2
+ <td class="has-text-right"><%= Ship::Location.human_attribute_name(:poiname) %></td>
3
+ <td><%= @location.poiname %></td>
4
+ </tr>
5
+ <tr>
6
+ <td class="has-text-right"><%= Ship::Location.human_attribute_name(:poiaddress) %></td>
7
+ <td><%= @location.poiaddress %></td>
8
+ </tr>
9
+ <tr>
10
+ <td class="has-text-right"><%= Ship::Location.human_attribute_name(:cityname) %></td>
11
+ <td><%= @location.cityname %></td>
12
+ </tr>
13
+ <tr>
14
+ <td class="has-text-right"><%= Ship::Location.human_attribute_name(:lat) %></td>
15
+ <td><%= @location.lat %></td>
16
+ </tr>
17
+ <tr>
18
+ <td class="has-text-right"><%= Ship::Location.human_attribute_name(:lng) %></td>
19
+ <td><%= @location.lng %></td>
20
+ </tr>
@@ -0,0 +1,5 @@
1
+ <%= render layout: 'index_table', locals: { cache_key: Ship::Location.column_names.hash } do %>
2
+ <%= render partial: 'index_tbody', layout: 'index_tr', collection: @locations, as: :model %>
3
+ <% end %>
4
+
5
+ <%= paginate @locations %>
@@ -0,0 +1,31 @@
1
+ <div class="weui-panel">
2
+ <div class="weui-panel__hd">
3
+ <%= @produce_plan.title %>
4
+ </div>
5
+ <div class="weui-panel__bd">
6
+ <% @packages.each do |package| %>
7
+ <div class="weui-media-box weui-media-box_appmsg">
8
+ <div class="weui-media-box__hd"><%= image_tag package.user.avatar_url, style: 'width: 20px;' %></div>
9
+ <div class="weui-media-box__bd">
10
+ <h4 class="weui-media-box__title"><%= package.user.account_identities.join(',') %></h4>
11
+ <div class="weui-media-box__desc">
12
+ <%= package.trade_items.map(&->(o){ o.good.name }).join(',') %>
13
+ </div>
14
+ </div>
15
+ <div class="weui-media-box__ft">
16
+ <% if package.wait_item %>
17
+ <div class="weui-btn weui-btn_mini weui-btn_primary">
18
+ <p><%= package.wait_item.position %></p>
19
+ <p><%= package.state_i18n %></p>
20
+ </div>
21
+ <% else %>
22
+ <%= link_to wait_my_principal_address_package_path(@address, package), method: :put, class: 'weui-btn weui-btn_mini weui-btn_primary' do %>
23
+ <%= t('.wait') %>
24
+ <% end %>
25
+ <% end %>
26
+ </div>
27
+ </div>
28
+ <% end %>
29
+ </div>
30
+ </div>
31
+
@@ -0,0 +1,32 @@
1
+ <%= content_for(:wechat_js) do %>
2
+ <%= wechat_config_js debug: false, apis: ['openAddress'] -%>
3
+ <% end %>
4
+
5
+ <div class="weui-panel">
6
+ <div class="weui-panel__hd"><%= t('.title') %></div>
7
+ <div class="weui-panel__bd">
8
+ <% @addresses.each do |address| %>
9
+ <div class="weui-media-box weui-media-box_appmsg">
10
+ <div class="weui-media-box__bd">
11
+ <h6 class="weui-media-box__title">
12
+ <%= link_to address.name, my_principal_address_path(address) %>
13
+ </h6>
14
+ <div class="weui-media-box__desc"><%= address.area.full_name %><%= address.detail %></div>
15
+ </div>
16
+ <div class="weui-media-box__ft">
17
+ <div class="weui-btn weui-btn_default">
18
+ <%= link_to '详情', plans_my_principal_address_path(address.id) %>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ <% end %>
23
+ </div>
24
+ <div class="weui-panel__ft">
25
+ <%= link_to fork_my_addresses_path, class: 'weui-cell weui-cell_access weui-cell_link' do %>
26
+ <div class="weui-cell__bd"><%= t('.new') %></div>
27
+ <span class="weui-cell__ft"></span>
28
+ <% end %>
29
+ </div>
30
+ </div>
31
+
32
+
@@ -0,0 +1,23 @@
1
+ <% @produce_plans.each do |produce_plan| %>
2
+ <div class="weui-form-preview">
3
+ <div class="weui-form-preview__hd">
4
+ <div class="weui-form-preview__item">
5
+ <label class="weui-form-preview__label"></label>
6
+ <em class="weui-form-preview__value"><%= produce_plan.title %></em>
7
+ </div>
8
+ </div>
9
+ <div class="weui-form-preview__bd">
10
+ <div class="weui-form-preview__item">
11
+ <label class="weui-form-preview__label"><%= ProducePlan.human_attribute_name(:start_at) %></label>
12
+ <span class="weui-form-preview__value"><time data-controller="time"><%= produce_plan.start_at.to_s(:rfc822) %></time></span>
13
+ </div>
14
+ <div class="weui-form-preview__item">
15
+ <label class="weui-form-preview__label"><%= ProducePlan.human_attribute_name(:finish_at) %></label>
16
+ <span class="weui-form-preview__value"><time data-controller="time"><%= produce_plan.finish_at.to_s(:rfc822) %></time></span>
17
+ </div>
18
+ </div>
19
+ <div class="weui-form-preview__ft">
20
+ <%= link_to '操作', my_principal_address_packages_path(@address, produce_plan_id: produce_plan.id), class: 'weui-form-preview__btn weui-form-preview__btn_primary' %>
21
+ </div>
22
+ </div>
23
+ <% end %>