| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647 |
- # encoding:utf-8
- require 'uuid'
- class ShareMaterial < ActiveRecord::Base
- has_paper_trail
- self.table_name = "share_materials"
- before_save :before_save
-
- belongs_to :wx_user, :foreign_key => :wx_uid
- validates :type_id,presence: true
- attr_accessor :v_image_1, :v_image_2, :v_image_3, :v_image_4, :v_image_5, :v_image_6, :v_image_7, :v_image_8, :v_image_9
- attr_accessor :is_delete_image_1, :is_delete_image_2, :is_delete_image_3, :is_delete_image_4, :is_delete_image_5, :is_delete_image_6, :is_delete_image_7, :is_delete_image_8, :is_delete_image_9
- attr_accessor :image_ratio_1, :image_ratio_2, :image_ratio_3, :image_ratio_4, :image_ratio_5, :image_ratio_6, :image_ratio_7, :image_ratio_8, :image_ratio_9
- MTYPE_ENUM = [["商品","product"],["项目","project"]]
- def type_title
- if m_type == "project"
- project = Project.where("id = ?", self.type_id).first
- if !project.blank?
- return project.title
- end
- elsif m_type == "product"
- product = Product.where("id = ?", self.type_id).first
- if !product.blank?
- return product.name
- end
- end
- return "-"
- end
-
- IMG_STORE_PATH = "share_materials"
- rails_admin do
- navigation_label '发圈素材管理'
- weight -240
- list do
- filters [:id]
- field :id
- field :wx_user
- field :m_type, :enum do
- enum do
- MTYPE_ENUM
- end
- end
- field :type_title
- field :type_id
- field :image_1st do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(1),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(1)}')"
- }
- )
- end
- end
- field :image_2nd do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(2),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(2)}')"
- }
- )
- end
- end
- field :is_published
- field :created_at
- end
- show do
- field :id
- field :wx_user
- field :m_type, :enum do
- enum do
- MTYPE_ENUM
- end
- end
- field :type_title
- field :type_id
- field :material_text
- field :image_1st do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(1),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(1)}')"
- }
- )
- end
- end
- field :image_2nd do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(2),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(2)}')"
- }
- )
- end
- end
- field :image_3rd do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(3),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(3)}')"
- }
- )
- end
- end
- field :image_4th do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(4),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(4)}')"
- }
- )
- end
- end
- field :image_5th do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(5),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(5)}')"
- }
- )
- end
- end
- field :image_6th do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(6),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(6)}')"
- }
- )
- end
- end
- field :image_7th do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(7),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(7)}')"
- }
- )
- end
- end
- field :image_8th do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(8),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(8)}')"
- }
- )
- end
- end
- field :image_9th do
- formatted_value do
- bindings[:view].tag(
- :img,
- {
- :src => bindings[:object].get_img(9),
- :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
- :onClick => "javascript:window.open('#{bindings[:object].get_img(9)}')"
- }
- )
- end
- end
- field :is_published
- field :created_at
- field :updated_at
- end
- edit do
- field :wx_uid
- field :m_type, :enum do
- enum do
- MTYPE_ENUM
- end
- end
- field :type_id
- field :material_text
- field :v_image_1, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(1), :class => 'preview'})
- end
- end
- field :image_ratio_1, :integer
- field :is_delete_image_1, :boolean do
- visible do
- bindings[:object].image_1st != "" && bindings[:object].image_1st != nil
- end
- end
- field :v_image_2, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(2), :class => 'preview'})
- end
- end
- field :image_ratio_2, :integer
- field :is_delete_image_2, :boolean do
- visible do
- bindings[:object].image_2nd != "" && bindings[:object].image_2nd != nil
- end
- end
- field :v_image_3, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(3), :class => 'preview'})
- end
- end
- field :image_ratio_3, :integer
- field :is_delete_image_3, :boolean do
- visible do
- bindings[:object].image_3rd != "" && bindings[:object].image_3rd != nil
- end
- end
- field :v_image_4, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(4), :class => 'preview'})
- end
- end
- field :image_ratio_4, :integer
- field :is_delete_image_4, :boolean do
- visible do
- bindings[:object].image_4th != "" && bindings[:object].image_4th != nil
- end
- end
- field :v_image_5, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(5), :class => 'preview'})
- end
- end
- field :image_ratio_5, :integer
- field :is_delete_image_5, :boolean do
- visible do
- bindings[:object].image_5th != "" && bindings[:object].image_5th != nil
- end
- end
- field :v_image_6, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(6), :class => 'preview'})
- end
- end
- field :image_ratio_6, :integer
- field :is_delete_image_6, :boolean do
- visible do
- bindings[:object].image_6th != "" && bindings[:object].image_6th != nil
- end
- end
- field :v_image_7, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(7), :class => 'preview'})
- end
- end
- field :image_ratio_7, :integer
- field :is_delete_image_7, :boolean do
- visible do
- bindings[:object].image_7th != "" && bindings[:object].image_7th != nil
- end
- end
- field :v_image_8, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(8), :class => 'preview'})
- end
- end
- field :image_ratio_8, :integer
- field :is_delete_image_8, :boolean do
- visible do
- bindings[:object].image_8th != "" && bindings[:object].image_8th != nil
- end
- end
- field :v_image_9, :file_upload do
- pretty_value do
- bindings[:view].tag(:img, {:src => bindings[:object].get_img(9), :class => 'preview'})
- end
- end
- field :image_ratio_9, :integer
- field :is_delete_image_9, :boolean do
- visible do
- bindings[:object].image_9th != "" && bindings[:object].image_9th != nil
- end
- end
- field :is_published
- end
- end
-
- after_destroy :after_destroy
- def v_image_1=file
- upload(file, 1)
- end
- def v_image_2=file
- upload(file, 2)
- end
- def v_image_3=file
- upload(file, 3)
- end
- def v_image_4=file
- upload(file, 4)
- end
- def v_image_5=file
- upload(file, 5)
- end
- def v_image_6=file
- upload(file, 6)
- end
- def v_image_7=file
- upload(file, 7)
- end
- def v_image_8=file
- upload(file, 8)
- end
- def v_image_9=file
- upload(file, 9)
- end
- # ?x-oss-process=image/quality,q_70 控制图片质量,CDN转换也可以用
- def upload(file, img_idx)
- unless file.blank?
- clear_img(img_idx)
- file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
- file_path = "#{IMG_STORE_PATH}/#{file_name}"
- Ali::Oss::store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
- case img_idx
- when 1
- self.image_1st = file_path
- when 2
- self.image_2nd = file_path
- when 3
- self.image_3rd = file_path
- when 4
- self.image_4th = file_path
- when 5
- self.image_5th = file_path
- when 6
- self.image_6th = file_path
- when 7
- self.image_7th = file_path
- when 8
- self.image_8th = file_path
- when 9
- self.image_9th = file_path
- end
- end
- end
- def getImageFilePath(img_idx)
- case img_idx
- when 1
- if self.image_1st != nil && self.image_1st != ""
- if self.image_ratio_1 != nil && self.image_ratio_1 !=""
- if self.image_1st.include?"?x-oss-process=image/quality,q_"
- self.image_1st = self.image_1st[0, self.image_1st.rindex("_")+1] + self.image_ratio_1
- else
- self.image_1st = self.image_1st + "?x-oss-process=image/quality,q_" + self.image_ratio_1
- end
- else
- if !self.image_1st.include?"?x-oss-process=image/quality,q_"
- self.image_1st = self.image_1st + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 2
- if self.image_2nd != nil && self.image_2nd != ""
- if self.image_ratio_2 != nil && self.image_ratio_2 != ""
- if self.image_2nd.include?"?x-oss-process=image/quality,q_"
- self.image_2nd = self.image_2nd[0, self.image_2nd.rindex("_")+1] + self.image_ratio_2
- else
- self.image_2nd = self.image_2nd + "?x-oss-process=image/quality,q_" + self.image_ratio_2
- end
- else
- if !self.image_2nd.include?"?x-oss-process=image/quality,q_"
- self.image_2nd = self.image_2nd + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 3
- if self.image_3rd != nil && self.image_3rd != ""
- if self.image_ratio_3 != nil && self.image_ratio_3 != ""
- if self.image_3rd.include?"?x-oss-process=image/quality,q_"
- self.image_3rd = self.image_3rd[0, self.image_3rd.rindex("_")+1] + self.image_ratio_3
- else
- self.image_3rd = self.image_3rd + "?x-oss-process=image/quality,q_" + self.image_ratio_3
- end
- else
- if !self.image_3rd.include?"?x-oss-process=image/quality,q_"
- self.image_3rd = self.image_3rd + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 4
- if self.image_4th != nil && self.image_4th != ""
- if self.image_ratio_4 != nil && self.image_ratio_4 != ""
- if self.image_4th.include?"?x-oss-process=image/quality,q_"
- self.image_4th = self.image_4th[0, self.image_4th.rindex("_")+1] + self.image_ratio_4
- else
- self.image_4th = self.image_4th + "?x-oss-process=image/quality,q_" + self.image_ratio_4
- end
- else
- if !self.image_4th.include?"?x-oss-process=image/quality,q_"
- self.image_4th = self.image_4th + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 5
- if self.image_5th != nil && self.image_5th != ""
- if self.image_ratio_5 != nil && self.image_ratio_5 != ""
- if self.image_5th.include?"?x-oss-process=image/quality,q_"
- self.image_5th = self.image_5th[0, self.image_5th.rindex("_")+1] + self.image_ratio_5
- else
- self.image_5th = self.image_5th + "?x-oss-process=image/quality,q_" + self.image_ratio_5
- end
- else
- if !self.image_5th.include?"?x-oss-process=image/quality,q_"
- self.image_5th = self.image_5th + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 6
- if self.image_6th != nil && self.image_6th != ""
- if self.image_ratio_6 != nil && self.image_ratio_6 != ""
- if self.image_6th.include?"?x-oss-process=image/quality,q_"
- self.image_6th = self.image_6th[0, self.image_6th.rindex("_")+1] + self.image_ratio_6
- else
- self.image_6th = self.image_6th + "?x-oss-process=image/quality,q_" + self.image_ratio_6
- end
- else
- if !self.image_6th.include?"?x-oss-process=image/quality,q_"
- self.image_6th = self.image_6th + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 7
- if self.image_7th != nil && self.image_7th != ""
- if self.image_ratio_7 != nil && self.image_ratio_7 != ""
- if self.image_7th.include?"?x-oss-process=image/quality,q_"
- self.image_7th = self.image_7th[0, self.image_7th.rindex("_")+1] + self.image_ratio_7
- else
- self.image_7th = self.image_7th + "?x-oss-process=image/quality,q_" + self.image_ratio_7
- end
- else
- if !self.image_7th.include?"?x-oss-process=image/quality,q_"
- self.image_7th = self.image_7th + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 8
- if self.image_8th != nil && self.image_8th != ""
- if self.image_ratio_8 != nil && self.image_ratio_8 != ""
- if self.image_8th.include?"?x-oss-process=image/quality,q_"
- self.image_8th = self.image_8th[0, self.image_8th.rindex("_")+1] + self.image_ratio_8
- else
- self.image_8th = self.image_8th + "?x-oss-process=image/quality,q_" + self.image_ratio_8
- end
- else
- if !self.image_8th.include?"?x-oss-process=image/quality,q_"
- self.image_8th = self.image_8th + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- when 9
- if self.image_9th != nil && self.image_9th != ""
- if self.image_ratio_9 != nil && self.image_ratio_9 != ""
- if self.image_9th.include?"?x-oss-process=image/quality,q_"
- self.image_9th = self.image_9th[0, self.image_9th.rindex("_")+1] + self.image_ratio_9
- else
- self.image_9th = self.image_9th + "?x-oss-process=image/quality,q_" + self.image_ratio_9
- end
- else
- if !self.image_9th.include?"?x-oss-process=image/quality,q_"
- self.image_9th = self.image_9th + "?x-oss-process=image/quality,q_100"
- end
- end
- end
- end
- end
- def get_img(img_idx)
- store_name = ""
- case img_idx
- when 1
- store_name = self.image_1st
- when 2
- store_name = self.image_2nd
- when 3
- store_name = self.image_3rd
- when 4
- store_name = self.image_4th
- when 5
- store_name = self.image_5th
- when 6
- store_name = self.image_6th
- when 7
- store_name = self.image_7th
- when 8
- store_name = self.image_8th
- when 9
- store_name = self.image_9th
- end
- if store_name != "" && store_name != nil
- url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{store_name}"
- return url
- end
- return ""
- end
- def clear_img(img_idx)
- file_path = ""
- case img_idx
- when 1
- file_path = "#{self.image_1st}"
- when 2
- file_path = "#{self.image_2nd}"
- when 3
- file_path = "#{self.image_3rd}"
- when 4
- file_path = "#{self.image_4th}"
- when 5
- file_path = "#{self.image_5th}"
- when 6
- file_path = "#{self.image_6th}"
- when 7
- file_path = "#{self.image_7th}"
- when 8
- file_path = "#{self.image_8th}"
- when 9
- file_path = "#{self.image_9th}"
- end
- Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
- end
- def after_destroy
- for i in 1..9
- clear_img(i)
- end
- end
- def is_delete_img(img_idx, is_delete)
- case img_idx
- when 1
- if is_delete == 1
- clear_img(1)
- self.image_1st = ""
- end
- when 2
- if is_delete == 1
- clear_img(2)
- self.image_2nd = ""
- end
- when 3
- if is_delete == 1
- clear_img(3)
- self.image_3rd = ""
- end
- when 4
- if is_delete == 1
- clear_img(4)
- self.image_4th = ""
- end
- when 5
- if is_delete == 1
- clear_img(5)
- self.image_5th = ""
- end
- when 6
- if is_delete == 1
- clear_img(6)
- self.image_6th = ""
- end
- when 7
- if is_delete == 1
- clear_img(7)
- self.image_7th = ""
- end
- when 8
- if is_delete == 1
- clear_img(8)
- self.image_8th = ""
- end
- when 9
- if is_delete == 1
- clear_img(9)
- self.image_9th = ""
- end
- end
- end
- def get_is_delete(img_idx)
- case img_idx
- when 1
- return self.is_delete_image_1.to_i
- when 2
- return self.is_delete_image_2.to_i
- when 3
- return self.is_delete_image_3.to_i
- when 4
- return self.is_delete_image_4.to_i
- when 5
- return self.is_delete_image_5.to_i
- when 6
- return self.is_delete_image_6.to_i
- when 7
- return self.is_delete_image_7.to_i
- when 8
- return self.is_delete_image_8.to_i
- when 9
- return self.is_delete_image_9.to_i
- end
- end
- def before_save
- for i in 1..9
- is_delete_img(i, get_is_delete(i))
- end
- for i in 1..9
- getImageFilePath(i)
- end
- end
- end
|