wxku_commodity.rb 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. # encoding:utf-8
  2. require 'uuid'
  3. class WxkuCommodity < ActiveRecord::Base
  4. has_paper_trail
  5. self.table_name = "wxku_commodities"
  6. before_save :before_save
  7. after_destroy :after_destroy
  8. belongs_to :product
  9. validates :product_id, :title,presence: true
  10. attr_accessor :v_image_info_1, :v_image_info_2, :v_image_info_3, :v_image_info_4, :v_image_info_5
  11. attr_accessor :is_delete_v_image_info_1, :is_delete_v_image_info_2, :is_delete_v_image_info_3, :is_delete_v_image_info_4, :is_delete_v_image_info_5
  12. IMG_STORE_PATH = "wxku_commodities"
  13. #图书,女装,男装,美妆个护,母婴,食品生鲜,数码家电,珠宝配饰,鞋靴箱包,运动户外,家居百货,汽车用品
  14. OFFICIALCATEGORYINFO_ENUM = [
  15. ["食品生鲜","食品生鲜"],
  16. ["图书","图书"],
  17. ["女装","女装"],
  18. ["男装","男装"],
  19. ["美妆个护","美妆个护"],
  20. ["母婴","母婴"],
  21. ["数码家电","数码家电"],
  22. ["珠宝配饰","珠宝配饰"],
  23. ["鞋靴箱包","鞋靴箱包"],
  24. ["运动户外","运动户外"],
  25. ["家居百货","家居百货"],
  26. ["汽车用品","汽车用品"]]
  27. SOURCE_ENUM = [["平台自营",1],["非平台自营",0]]
  28. SALE_STATUS_ENUM = [["上架","on"],["下架","off"]]
  29. rails_admin do
  30. navigation_label '商品管理'
  31. weight -240
  32. list do
  33. filters [:id]
  34. field :id
  35. field :product
  36. field :image_info_1 do
  37. formatted_value do
  38. bindings[:view].tag(:img,{:src => bindings[:object].get_image_info_1,
  39. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  40. :onClick => "javascript:window.open('#{bindings[:object].get_image_info_1}')"})
  41. end
  42. end
  43. field :image_info_2 do
  44. formatted_value do
  45. bindings[:view].tag(:img,{:src => bindings[:object].get_image_info_2,
  46. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  47. :onClick => "javascript:window.open('#{bindings[:object].get_image_info_2}')"})
  48. end
  49. end
  50. field :category_info
  51. field :official_category_info, :enum do
  52. enum do
  53. OFFICIALCATEGORYINFO_ENUM
  54. end
  55. end
  56. # field :url
  57. field :title
  58. field :sub_title
  59. field :brand
  60. field :source, :enum do
  61. enum do
  62. SOURCE_ENUM
  63. end
  64. end
  65. # field :desc
  66. field :min_price do
  67. label "现价最低价(元)"
  68. formatted_value do # used in form views
  69. value.to_f / 100
  70. end
  71. end
  72. field :max_price do
  73. label "现价最高价(元)"
  74. formatted_value do # used in form views
  75. value.to_f / 100
  76. end
  77. end
  78. field :min_ori_price do
  79. label "原价最低价(元)"
  80. formatted_value do # used in form views
  81. value.to_f / 100
  82. end
  83. end
  84. field :max_ori_price do
  85. label "原价最高价(元)"
  86. formatted_value do # used in form views
  87. value.to_f / 100
  88. end
  89. end
  90. field :sale_status, :enum do
  91. enum do
  92. SALE_STATUS_ENUM
  93. end
  94. end
  95. field :stock
  96. field :created_at
  97. end
  98. show do
  99. field :id
  100. field :product
  101. field :product_id
  102. field :image_info_1 do
  103. formatted_value do
  104. bindings[:view].tag(:img,{:src => bindings[:object].get_image_info_1,
  105. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  106. :onClick => "javascript:window.open('#{bindings[:object].get_image_info_1}')"})
  107. end
  108. end
  109. field :image_info_2 do
  110. formatted_value do
  111. bindings[:view].tag(:img,{:src => bindings[:object].get_image_info_2,
  112. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  113. :onClick => "javascript:window.open('#{bindings[:object].get_image_info_2}')"})
  114. end
  115. end
  116. field :image_info_3 do
  117. formatted_value do
  118. bindings[:view].tag(:img,{:src => bindings[:object].get_image_info_3,
  119. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  120. :onClick => "javascript:window.open('#{bindings[:object].get_image_info_3}')"})
  121. end
  122. end
  123. field :image_info_4 do
  124. formatted_value do
  125. bindings[:view].tag(:img,{:src => bindings[:object].get_image_info_4,
  126. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  127. :onClick => "javascript:window.open('#{bindings[:object].get_image_info_4}')"})
  128. end
  129. end
  130. field :image_info_5 do
  131. formatted_value do
  132. bindings[:view].tag(:img,{:src => bindings[:object].get_image_info_5,
  133. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  134. :onClick => "javascript:window.open('#{bindings[:object].get_image_info_5}')"})
  135. end
  136. end
  137. field :category_info
  138. field :official_category_info, :enum do
  139. enum do
  140. OFFICIALCATEGORYINFO_ENUM
  141. end
  142. end
  143. field :url
  144. field :title
  145. field :sub_title
  146. field :brand
  147. field :source, :enum do
  148. enum do
  149. SOURCE_ENUM
  150. end
  151. end
  152. field :desc
  153. field :min_price do
  154. label "现价最低价(元)"
  155. formatted_value do # used in form views
  156. value.to_f / 100
  157. end
  158. end
  159. field :max_price do
  160. label "现价最高价(元)"
  161. formatted_value do # used in form views
  162. value.to_f / 100
  163. end
  164. end
  165. field :min_ori_price do
  166. label "原价最低价(元)"
  167. formatted_value do # used in form views
  168. value.to_f / 100
  169. end
  170. end
  171. field :max_ori_price do
  172. label "原价最高价(元)"
  173. formatted_value do # used in form views
  174. value.to_f / 100
  175. end
  176. end
  177. field :sale_status, :enum do
  178. enum do
  179. SALE_STATUS_ENUM
  180. end
  181. end
  182. field :stock
  183. field :status_ticket
  184. field :created_at
  185. field :updated_at
  186. end
  187. edit do
  188. field :product_id
  189. field :v_image_info_1, :file_upload do
  190. pretty_value do
  191. bindings[:view].tag(:img, {:src => bindings[:object].get_image_info_1, :class => 'preview'})
  192. end
  193. end
  194. field :is_delete_v_image_info_1, :boolean do
  195. visible do
  196. bindings[:object].image_info_1 != "" && bindings[:object].image_info_1 != nil
  197. end
  198. end
  199. field :v_image_info_2, :file_upload do
  200. pretty_value do
  201. bindings[:view].tag(:img, {:src => bindings[:object].get_image_info_2, :class => 'preview'})
  202. end
  203. end
  204. field :is_delete_v_image_info_2, :boolean do
  205. visible do
  206. bindings[:object].image_info_2 != "" && bindings[:object].image_info_2 != nil
  207. end
  208. end
  209. field :v_image_info_3, :file_upload do
  210. pretty_value do
  211. bindings[:view].tag(:img, {:src => bindings[:object].get_image_info_3, :class => 'preview'})
  212. end
  213. end
  214. field :is_delete_v_image_info_3, :boolean do
  215. visible do
  216. bindings[:object].image_info_3 != "" && bindings[:object].image_info_3 != nil
  217. end
  218. end
  219. field :v_image_info_4, :file_upload do
  220. pretty_value do
  221. bindings[:view].tag(:img, {:src => bindings[:object].get_image_info_4, :class => 'preview'})
  222. end
  223. end
  224. field :is_delete_v_image_info_4, :boolean do
  225. visible do
  226. bindings[:object].image_info_4 != "" && bindings[:object].image_info_4 != nil
  227. end
  228. end
  229. field :v_image_info_5, :file_upload do
  230. pretty_value do
  231. bindings[:view].tag(:img, {:src => bindings[:object].get_image_info_5, :class => 'preview'})
  232. end
  233. end
  234. field :is_delete_v_image_info_5, :boolean do
  235. visible do
  236. bindings[:object].image_info_5 != "" && bindings[:object].image_info_5 != nil
  237. end
  238. end
  239. field :category_info
  240. field :official_category_info, :enum do
  241. enum do
  242. OFFICIALCATEGORYINFO_ENUM
  243. end
  244. end
  245. field :url
  246. field :title
  247. field :sub_title
  248. field :brand
  249. field :source, :enum do
  250. enum do
  251. SOURCE_ENUM
  252. end
  253. end
  254. field :desc
  255. field :min_price do
  256. label "现价最低价(分)"
  257. end
  258. field :max_price do
  259. label "现价最高价(分)"
  260. end
  261. field :min_ori_price do
  262. label "原价最低价(分)"
  263. end
  264. field :max_ori_price do
  265. label "原价最高价(分)"
  266. end
  267. field :sale_status, :enum do
  268. enum do
  269. SALE_STATUS_ENUM
  270. end
  271. end
  272. field :stock
  273. field :status_ticket
  274. end
  275. end
  276. def v_image_info_1=file
  277. unless file.blank?
  278. clear_image_info_1
  279. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  280. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  281. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  282. self.image_info_1 = file_path
  283. self.save
  284. end
  285. end
  286. def clear_image_info_1
  287. file_path = "#{self.image_info_1}"
  288. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  289. end
  290. def get_image_info_1
  291. if self.image_info_1 != ""
  292. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.image_info_1}"
  293. return url
  294. end
  295. return ""
  296. end
  297. def v_image_info_2=file
  298. unless file.blank?
  299. clear_image_info_2
  300. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  301. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  302. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  303. self.image_info_2 = file_path
  304. self.save
  305. end
  306. end
  307. def clear_image_info_2
  308. file_path = "#{self.image_info_2}"
  309. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  310. end
  311. def get_image_info_2
  312. if self.image_info_2 != ""
  313. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.image_info_2}"
  314. return url
  315. end
  316. return ""
  317. end
  318. def v_image_info_3=file
  319. unless file.blank?
  320. clear_image_info_3
  321. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  322. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  323. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  324. self.image_info_3 = file_path
  325. self.save
  326. end
  327. end
  328. def clear_image_info_3
  329. file_path = "#{self.image_info_3}"
  330. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  331. end
  332. def get_image_info_3
  333. if self.image_info_3 != ""
  334. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.image_info_3}"
  335. return url
  336. end
  337. return ""
  338. end
  339. def v_image_info_4=file
  340. unless file.blank?
  341. clear_image_info_4
  342. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  343. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  344. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  345. self.image_info_4 = file_path
  346. self.save
  347. end
  348. end
  349. def clear_image_info_4
  350. file_path = "#{self.image_info_4}"
  351. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  352. end
  353. def get_image_info_4
  354. if self.image_info_4 != ""
  355. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.image_info_4}"
  356. return url
  357. end
  358. return ""
  359. end
  360. def v_image_info_5=file
  361. unless file.blank?
  362. clear_image_info_5
  363. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  364. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  365. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  366. self.image_info_5 = file_path
  367. self.save
  368. end
  369. end
  370. def clear_image_info_5
  371. file_path = "#{self.image_info_5}"
  372. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  373. end
  374. def get_image_info_5
  375. if self.image_info_5 != ""
  376. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.image_info_5}"
  377. return url
  378. end
  379. return ""
  380. end
  381. def before_save
  382. if self.is_delete_v_image_info_1.to_i == 1
  383. clear_image_info_1
  384. self.image_info_1 = ""
  385. end
  386. if self.is_delete_v_image_info_2.to_i == 1
  387. clear_image_info_2
  388. self.image_info_2 = ""
  389. end
  390. if self.is_delete_v_image_info_3.to_i == 1
  391. clear_image_info_3
  392. self.image_info_3 = ""
  393. end
  394. if self.is_delete_v_image_info_4.to_i == 1
  395. clear_image_info_4
  396. self.image_info_4 = ""
  397. end
  398. if self.is_delete_v_image_info_5.to_i == 1
  399. clear_image_info_5
  400. self.image_info_5 = ""
  401. end
  402. end
  403. def after_destroy
  404. clear_image_info_1
  405. clear_image_info_2
  406. clear_image_info_3
  407. clear_image_info_4
  408. clear_image_info_5
  409. end
  410. end