scale_user.rb 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. # encoding:utf-8
  2. class ScaleUser < ActiveRecord::Base
  3. has_paper_trail
  4. self.table_name = "scale_users"
  5. belongs_to :wx_user
  6. has_many :scale_results, :foreign_key => :user_id, :dependent => :destroy
  7. attr_accessor :v_avatar
  8. #after_create :update_paied_time
  9. SEX_ENUM = [["男",0],["女",1]]
  10. # 国家选项
  11. COUNTRY_ENUM = [
  12. ["中国", "china"],
  13. ["美国", "usa"],
  14. ["日本", "japan"],
  15. ["韩国", "korea"],
  16. ["马来西亚", "malaysia"],
  17. ["其他", "other"]
  18. ]
  19. # 种族选项
  20. RACE_ENUM = [
  21. ["亚洲人", "asian"],
  22. ["白人", "caucasian"],
  23. ["黑人", "black"],
  24. ["拉丁裔", "latino"],
  25. ["其他", "other"]
  26. ]
  27. # 职业选项
  28. OCCUPATION_ENUM = [
  29. ["IT/程序员", "it_programmer"],
  30. ["教师", "teacher"],
  31. ["医生", "doctor"],
  32. ["学生", "student"],
  33. ["自由职业", "freelancer"],
  34. ["退休", "retired"],
  35. ["其他", "other"]
  36. ]
  37. def wx_user_contact
  38. return "-" if wx_user.blank?
  39. user = wx_user.user
  40. return "-" if user.blank?
  41. contact = user.tel
  42. contact = user.email if contact.blank?
  43. contact.blank? ? "-" : contact
  44. end
  45. def get_avatar_img
  46. return "https://x-encrpt-bucket.s3.ap-southeast-2.amazonaws.com/encript/1766455493300.jpeg" if self.avatar.blank?
  47. return self.avatar if self.avatar.to_s.start_with?('http')
  48. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.avatar}"
  49. return url
  50. end
  51. # 获取国家显示名称
  52. def country_label
  53. COUNTRY_ENUM.find { |label, value| value == country }&.first || country || "-"
  54. end
  55. # 获取种族显示名称
  56. def race_label
  57. RACE_ENUM.find { |label, value| value == race }&.first || race || "-"
  58. end
  59. # 获取职业显示名称
  60. def occupation_label
  61. OCCUPATION_ENUM.find { |label, value| value == occupation }&.first || occupation || "-"
  62. end
  63. rails_admin do
  64. navigation_label '体脂秤用户'
  65. parent ScaleDevice
  66. weight 1
  67. list do
  68. filters [:wx_user,:created_at]
  69. field :id
  70. field :wx_user_id
  71. field :wx_user do
  72. pretty_value do
  73. bindings[:object].wx_user_contact
  74. end
  75. end
  76. field :nick_name
  77. field :avatar do
  78. formatted_value do
  79. bindings[:view].tag(:img,{:src => bindings[:object].get_avatar_img,
  80. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px',
  81. :onClick => "javascript:window.open('#{bindings[:object].get_avatar_img}')"})
  82. end
  83. end
  84. field :sex, :enum do
  85. filterable true
  86. enum do
  87. SEX_ENUM
  88. end
  89. end
  90. field :height
  91. field :age
  92. field :target_weight
  93. field :birthday
  94. field :country do
  95. pretty_value do
  96. bindings[:object].country_label
  97. end
  98. end
  99. field :race do
  100. pretty_value do
  101. bindings[:object].race_label
  102. end
  103. end
  104. field :occupation do
  105. pretty_value do
  106. bindings[:object].occupation_label
  107. end
  108. end
  109. field :created_at
  110. field :updated_at
  111. end
  112. show do
  113. field :wx_user_id
  114. field :wx_user do
  115. pretty_value do
  116. bindings[:object].wx_user_contact
  117. end
  118. end
  119. field :nick_name
  120. field :avatar do
  121. formatted_value do
  122. bindings[:view].tag(:img,{:src => bindings[:object].get_avatar_img,
  123. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px',
  124. :onClick => "javascript:window.open('#{bindings[:object].get_avatar_img}')"})
  125. end
  126. end
  127. field :sex, :enum do
  128. filterable true
  129. enum do
  130. SEX_ENUM
  131. end
  132. end
  133. field :height
  134. field :age
  135. field :target_weight
  136. field :birthday
  137. field :country do
  138. pretty_value do
  139. bindings[:object].country_label
  140. end
  141. end
  142. field :race do
  143. pretty_value do
  144. bindings[:object].race_label
  145. end
  146. end
  147. field :occupation do
  148. pretty_value do
  149. bindings[:object].occupation_label
  150. end
  151. end
  152. field :created_at
  153. field :updated_at
  154. end
  155. edit do
  156. # field :wx_user_id
  157. field :wx_user
  158. field :nick_name
  159. field :v_avatar, :file_upload do
  160. pretty_value do
  161. bindings[:view].tag(:img, {:src => bindings[:object].get_avatar_img, :class => 'preview'})
  162. end
  163. end
  164. field :sex, :enum do
  165. filterable true
  166. enum do
  167. SEX_ENUM
  168. end
  169. end
  170. field :height
  171. field :age
  172. field :target_weight
  173. field :birthday
  174. field :country, :enum do
  175. enum do
  176. COUNTRY_ENUM
  177. end
  178. end
  179. field :race, :enum do
  180. enum do
  181. RACE_ENUM
  182. end
  183. end
  184. field :occupation, :enum do
  185. enum do
  186. OCCUPATION_ENUM
  187. end
  188. end
  189. field :created_at
  190. field :updated_at
  191. end
  192. end
  193. def v_avatar=file
  194. unless file.blank?
  195. clear_avatar_img
  196. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  197. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  198. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  199. self.head = file_path
  200. self.save
  201. end
  202. end
  203. def clear_avatar_img
  204. file_path = "#{self.head}"
  205. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  206. end
  207. end