rails_crm 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -23
- data/app/controllers/crm/admin/addresses_controller.rb +57 -0
- data/app/controllers/crm/admin/agencies_controller.rb +65 -0
- data/app/controllers/crm/admin/card_purchases_controller.rb +16 -0
- data/app/controllers/crm/admin/card_templates_controller.rb +49 -0
- data/app/controllers/crm/admin/home_controller.rb +8 -0
- data/app/controllers/crm/admin/maintain_logs_controller.rb +2 -20
- data/app/controllers/crm/admin/maintain_sources_controller.rb +2 -20
- data/app/controllers/crm/admin/maintain_tags_controller.rb +3 -21
- data/app/controllers/crm/admin/maintains_controller.rb +53 -94
- data/app/controllers/crm/admin/orders_controller.rb +70 -0
- data/app/controllers/crm/admin/payments_controller.rb +11 -0
- data/app/controllers/crm/admin/wallet_logs_controller.rb +25 -0
- data/app/controllers/crm/admin/wallet_payments_controller.rb +41 -0
- data/app/controllers/crm/admin/wallet_templates_controller.rb +44 -0
- data/app/controllers/crm/admin/wallets_controller.rb +41 -0
- data/app/controllers/crm/controller/me.rb +16 -0
- data/app/controllers/crm/me/agencies_controller.rb +69 -0
- data/app/controllers/crm/me/base_controller.rb +4 -0
- data/app/controllers/crm/me/home_controller.rb +12 -0
- data/app/controllers/crm/me/maintain_sources_controller.rb +38 -0
- data/app/controllers/crm/me/maintains_controller.rb +5 -0
- data/app/controllers/crm/my/agencies_controller.rb +53 -0
- data/app/controllers/crm/panel/base_controller.rb +5 -0
- data/app/controllers/crm/panel/home_controller.rb +8 -0
- data/app/controllers/crm/panel/qrcodes_controller.rb +29 -0
- data/app/controllers/crm/panel/sources_controller.rb +23 -0
- data/app/controllers/crm/panel/tags_controller.rb +26 -0
- data/app/controllers/crm/panel/texts_controller.rb +29 -0
- data/app/imports/crm/maintain_import.rb +11 -0
- data/app/jobs/crm/order_maintain_sync_job.rb +9 -0
- data/app/models/crm/agency.rb +5 -0
- data/app/models/crm/ext/address.rb +10 -0
- data/app/models/crm/ext/agency.rb +18 -0
- data/app/models/crm/ext/agent.rb +13 -0
- data/app/models/crm/ext/client.rb +13 -0
- data/app/models/crm/ext/maintainable.rb +24 -0
- data/app/models/crm/ext/member.rb +11 -0
- data/app/models/crm/{model → ext}/organ.rb +3 -3
- data/app/models/crm/maintain.rb +1 -1
- data/app/models/crm/model/agency.rb +11 -6
- data/app/models/crm/model/maintain.rb +54 -22
- data/app/models/crm/model/maintain_log.rb +2 -1
- data/app/models/crm/model/maintain_source.rb +5 -3
- data/app/models/crm/model/maintain_tag.rb +6 -5
- data/app/models/crm/model/qrcode.rb +54 -0
- data/app/models/crm/model/source.rb +55 -0
- data/app/models/crm/model/source_contact.rb +40 -0
- data/app/models/crm/model/{maintain_tag_template.rb → tag.rb} +1 -1
- data/app/models/crm/model/text.rb +45 -0
- data/app/models/crm/qrcode.rb +5 -0
- data/app/models/crm/source.rb +18 -0
- data/app/models/crm/source_contact.rb +5 -0
- data/app/models/crm/tag.rb +5 -0
- data/app/models/crm/text.rb +5 -0
- data/app/views/admin/_crm_nav.html.erb +9 -9
- data/app/views/crm/admin/addresses/_index/_breadcrumb.html.erb +6 -0
- data/app/views/crm/admin/addresses/_index/_top_bar.html+phone.erb +9 -0
- data/app/views/crm/admin/addresses/_nav.html.erb +4 -0
- data/app/views/crm/admin/addresses/_new/_top_bar.html.erb +12 -0
- data/app/views/crm/admin/addresses/_order/_weui_dialog_ft.html.erb +4 -0
- data/app/views/crm/admin/addresses/_order_from/_weui_dialog_ft.html.erb +4 -0
- data/app/views/crm/admin/addresses/index.html+phone.erb +7 -0
- data/app/views/crm/admin/agencies/_filter_form.html.erb +9 -0
- data/app/views/crm/admin/agencies/_form.html.erb +5 -0
- data/app/views/crm/admin/agencies/_index/_index_tbody.html.erb +38 -0
- data/app/views/crm/admin/agencies/_index/_index_thead.html.erb +7 -0
- data/app/views/crm/admin/agencies/_show_table.html.erb +33 -0
- data/app/views/crm/admin/agencies/edit_crowd.html.erb +6 -0
- data/app/views/crm/admin/base/_nav.html.erb +4 -0
- data/app/views/crm/admin/card_purchases/_index/_top_bar.html+phone.erb +12 -0
- data/app/views/crm/admin/card_templates/_index/_index_table.html+phone.erb +8 -0
- data/app/views/crm/admin/card_templates/_index/_index_tbody.html+phone.erb +6 -0
- data/app/views/crm/admin/card_templates/_index/_index_tr.html+phone.erb +6 -0
- data/app/views/crm/admin/card_templates/_index/_top_bar.html+phone.erb +11 -0
- data/app/views/crm/admin/card_templates/_show/_top_bar.html+phone.erb +12 -0
- data/app/views/crm/admin/home/index.html.erb +0 -0
- data/app/views/crm/admin/maintain_logs/_filter_form.html.erb +1 -1
- data/app/views/crm/admin/maintain_logs/_form.html.erb +2 -6
- data/app/views/crm/admin/maintain_logs/{_breadcrumb.html.erb → _index/_breadcrumb.html.erb} +1 -1
- data/app/views/crm/admin/maintain_logs/{_index_tbody.html.erb → _index/_index_tbody.html.erb} +1 -1
- data/app/views/crm/admin/maintain_logs/_index/_index_thead.html.erb +13 -0
- data/app/views/crm/admin/maintain_logs/_show_table.html.erb +5 -5
- data/app/views/crm/admin/maintain_sources/_filter_form.html.erb +1 -1
- data/app/views/crm/admin/maintain_sources/_form.html.erb +0 -1
- data/app/views/crm/admin/maintain_sources/_index/_index_tbody.html.erb +2 -0
- data/app/views/crm/admin/maintain_sources/_index/_index_thead.html.erb +2 -0
- data/app/views/crm/admin/maintain_sources/_index/_index_tr.html.erb +13 -0
- data/app/views/crm/admin/maintain_sources/templates.html.erb +0 -1
- data/app/views/crm/admin/maintain_tags/_form.html.erb +1 -2
- data/app/views/crm/admin/maintain_tags/{_index_tbody.html.erb → _index/_index_tbody.html.erb} +3 -1
- data/app/views/crm/admin/maintain_tags/_index/_index_thead.html.erb +5 -0
- data/app/views/crm/admin/maintain_tags/_show_table.html.erb +6 -6
- data/app/views/crm/admin/maintain_tags/templates.html.erb +6 -6
- data/app/views/crm/admin/maintains/_actions.html.erb +36 -0
- data/app/views/crm/admin/maintains/_agent_form.html.erb +14 -0
- data/app/views/crm/admin/maintains/_base/_agent_detect.html.erb +16 -0
- data/app/views/crm/admin/maintains/_base/_agent_show_table.html.erb +30 -0
- data/app/views/crm/admin/maintains/_base/_agent_tbody.html.erb +5 -0
- data/app/views/crm/admin/maintains/_base/_agent_thead.html.erb +5 -0
- data/app/views/crm/admin/maintains/_base/_filter_table.html+phone.erb +0 -0
- data/app/views/crm/admin/maintains/_base/_filter_table.html.erb +35 -0
- data/app/views/crm/admin/maintains/_base/_tabs.html.erb +7 -0
- data/app/views/crm/admin/maintains/_client_form.html+phone.erb +15 -0
- data/app/views/crm/admin/maintains/_client_form.html.erb +11 -0
- data/app/views/crm/admin/maintains/_create_detect.html.erb +9 -21
- data/app/views/crm/admin/maintains/_edit_assign.html.erb +10 -19
- data/app/views/crm/admin/maintains/_edit_form.html.erb +4 -2
- data/app/views/crm/admin/maintains/_edit_transfer.html.erb +8 -17
- data/app/views/crm/admin/maintains/_form.html.erb +15 -33
- data/app/views/crm/admin/maintains/_index/_button.html+phone.erb +4 -0
- data/app/views/crm/admin/maintains/_index/_button.html.erb +4 -0
- data/app/views/crm/admin/maintains/_index/_filter_form.html+phone.erb +14 -0
- data/app/views/crm/admin/maintains/{_filter_form.html.erb → _index/_filter_form.html.erb} +5 -5
- data/app/views/crm/admin/maintains/_index/_index_tbody.html+phone.erb +9 -0
- data/app/views/crm/admin/maintains/_index/_index_tbody.html.erb +49 -0
- data/app/views/crm/admin/maintains/_index/_index_thead.html.erb +42 -0
- data/app/views/crm/admin/maintains/_index/_index_tr.html+phone.erb +10 -0
- data/app/views/crm/admin/maintains/_index/_index_tr.html.erb +30 -0
- data/app/views/crm/admin/maintains/_new_batch_assign.html.erb +4 -13
- data/app/views/crm/admin/maintains/_new_detect/_new_detect.html+phone.erb +10 -0
- data/app/views/crm/admin/maintains/_new_detect/_new_detect.html.erb +4 -0
- data/app/views/crm/admin/maintains/_new_form.html+phone.erb +4 -0
- data/app/views/crm/admin/maintains/_new_form.html.erb +4 -2
- data/app/views/crm/admin/maintains/_public/_filter_form.html.erb +10 -0
- data/app/views/crm/admin/maintains/_public/_index_tbody.html.erb +33 -0
- data/app/views/crm/admin/maintains/_public/_index_thead.html.erb +33 -0
- data/app/views/crm/admin/maintains/_public/_index_tr.html.erb +24 -0
- data/app/views/crm/admin/maintains/_show/_external.html.erb +19 -0
- data/app/views/crm/admin/maintains/_show/_profile.html.erb +24 -0
- data/app/views/crm/admin/maintains/_show/_show_head.html+phone.erb +16 -0
- data/app/views/crm/admin/maintains/_show_table.html.erb +4 -49
- data/app/views/crm/admin/maintains/assume.turbo_stream.erb +3 -0
- data/app/views/crm/admin/maintains/create_detect.html.erb +3 -0
- data/app/views/crm/admin/maintains/detach.turbo_stream.erb +3 -0
- data/app/views/crm/admin/maintains/edit_assign.html.erb +3 -0
- data/app/views/crm/admin/maintains/edit_transfer.html.erb +3 -0
- data/app/views/crm/admin/maintains/index.html+phone.erb +8 -0
- data/app/views/crm/admin/maintains/index.html.erb +9 -26
- data/app/views/crm/admin/maintains/new_batch_assign.html.erb +3 -0
- data/app/views/crm/admin/maintains/new_detect.html.erb +7 -0
- data/app/views/crm/admin/maintains/public.html.erb +6 -80
- data/app/views/crm/admin/orders/_actions.html+phone.erb +16 -0
- data/app/views/crm/admin/orders/_add/_top_bar.html.erb +18 -0
- data/app/views/crm/admin/orders/_base/_address.html+phone.erb +25 -0
- data/app/views/crm/admin/orders/_base/_from_address.html+phone.erb +25 -0
- data/app/views/crm/admin/{maintains/_edit_order.html.erb → orders/_edit_form.html.erb} +1 -1
- data/app/views/crm/admin/orders/_index/_breadcrumb.html.erb +6 -0
- data/app/views/crm/admin/orders/_index/_button.html+phone.erb +4 -0
- data/app/views/crm/admin/orders/_index/_button.html.erb +4 -0
- data/app/views/crm/admin/orders/_index/_index_tbody.html+phone.erb +10 -0
- data/app/views/crm/admin/orders/_index/_index_tr.html+phone.erb +10 -0
- data/app/views/crm/admin/orders/_index/_index_tr.html.erb +16 -0
- data/app/views/crm/admin/orders/_index/_top_bar.html+phone.erb +13 -0
- data/app/views/crm/admin/orders/_nav.html.erb +4 -0
- data/app/views/crm/admin/orders/_new/_address_button.html.erb +4 -0
- data/app/views/crm/admin/orders/_new/_breadcrumb.html.erb +7 -0
- data/app/views/crm/admin/orders/_new/_head.html.erb +3 -0
- data/app/views/crm/admin/orders/_new/_top_bar.html.erb +12 -0
- data/app/views/crm/admin/orders/index.html+phone.erb +7 -0
- data/app/views/crm/admin/orders/index.html.erb +7 -0
- data/app/views/crm/admin/orders/payment_types.html+phone.erb +19 -0
- data/app/views/crm/admin/orders/payment_types.html.erb +17 -0
- data/app/views/crm/admin/payments/create.turbo_stream+phone.erb +3 -0
- data/app/views/crm/admin/payments/destroy.turbo_stream+phone.erb +3 -0
- data/app/views/crm/admin/payments/order_create.turbo_stream+phone.erb +3 -0
- data/app/views/crm/admin/wallet_logs/_index/_top_bar.html+phone.erb +12 -0
- data/app/views/crm/admin/wallet_payments/_index/_top_bar.html+phone.erb +12 -0
- data/app/views/crm/admin/wallet_templates/_index/_breadcrumb.html.erb +12 -0
- data/app/views/crm/admin/wallet_templates/_index/_filter_form.html.erb +0 -0
- data/app/views/crm/admin/wallet_templates/_index/_index_table.html+phone.erb +8 -0
- data/app/views/crm/admin/wallet_templates/_index/_index_tbody.html+phone.erb +6 -0
- data/app/views/crm/admin/wallet_templates/_index/_index_tbody.html.erb +13 -0
- data/app/views/crm/admin/wallet_templates/_index/_index_thead.html.erb +2 -0
- data/app/views/crm/admin/wallet_templates/_index/_index_tr.html+phone.erb +6 -0
- data/app/views/crm/admin/wallet_templates/_index/_top_bar.html+phone.erb +11 -0
- data/app/views/crm/admin/wallet_templates/_show/_top_bar.html+phone.erb +12 -0
- data/app/views/crm/admin/{maintain_sources → wallets/_index}/_breadcrumb.html.erb +2 -1
- data/app/views/crm/admin/wallets/_index/_index_table.html.erb +12 -0
- data/app/views/crm/admin/wallets/_index/_index_tbody.html.erb +25 -0
- data/app/views/crm/admin/wallets/_index/_index_thead.html.erb +5 -0
- data/app/views/crm/admin/wallets/_index/_index_tr.html.erb +19 -0
- data/app/views/crm/admin/wallets/_index/_tab_bar_footer.html.erb +4 -0
- data/app/views/crm/admin/wallets/_index/_template_tbody.html.erb +12 -0
- data/app/views/crm/admin/wallets/_index/_template_tr.html.erb +10 -0
- data/app/views/crm/admin/wallets/_index/_top_bar.html+phone.erb +11 -0
- data/app/views/crm/admin/wallets/_index/_wallet.html.erb +21 -0
- data/app/views/crm/admin/wallets/index.html+phone.erb +3 -0
- data/app/views/crm/admin/wallets/index.html.erb +6 -0
- data/app/views/crm/me/agencies/_client_form.html.erb +9 -0
- data/app/views/crm/me/agencies/_filter.html.erb +8 -0
- data/app/views/crm/me/agencies/_form.html.erb +7 -0
- data/app/views/crm/me/agencies/_show_table.html.erb +36 -0
- data/app/views/crm/me/agencies/index.html+phone.erb +18 -0
- data/app/views/crm/me/agencies/index.html.erb +40 -0
- data/app/views/crm/me/home/_cart_item.html.erb +15 -0
- data/app/views/crm/me/home/index.html+phone.erb +38 -0
- data/app/views/crm/me/maintain_sources/_about_item.html.erb +33 -0
- data/app/views/crm/me/maintain_sources/_order.html.erb +11 -0
- data/app/views/crm/me/maintain_sources/index.html.erb +20 -0
- data/app/views/crm/me/maintain_sources/list.html.erb +13 -0
- data/app/views/crm/me/maintain_sources/source.html.erb +33 -0
- data/app/views/crm/my/agencies/_client_form.html.erb +9 -0
- data/app/views/crm/my/agencies/_edit_form.html.erb +4 -0
- data/app/views/crm/{admin/maintain_source_templates → my/agencies}/_filter_form.html.erb +1 -1
- data/app/views/crm/my/agencies/_form.html.erb +19 -0
- data/app/views/crm/my/agencies/_new_form.html.erb +4 -0
- data/app/views/crm/my/agencies/_show_table.html.erb +36 -0
- data/app/views/crm/my/agencies/index.html+phone.erb +24 -0
- data/app/views/crm/my/agencies/index.html.erb +40 -0
- data/app/views/crm/panel/base/_nav.html.erb +4 -0
- data/app/views/crm/panel/home/index.html.erb +0 -0
- data/app/views/crm/panel/qrcodes/_form.html.erb +5 -0
- data/app/views/crm/panel/qrcodes/_index/_breadcrumb.html.erb +7 -0
- data/app/views/crm/panel/qrcodes/_index/_index_tbody.html.erb +13 -0
- data/app/views/crm/panel/qrcodes/_index/_index_thead.html.erb +11 -0
- data/app/views/crm/panel/qrcodes/_show_table.html.erb +4 -0
- data/app/views/crm/panel/qrcodes/index.html.erb +3 -0
- data/app/views/crm/panel/sources/_form.html.erb +4 -0
- data/app/views/crm/{admin/maintain_tag_templates → panel/sources/_index}/_filter_form.html.erb +1 -1
- data/app/views/crm/panel/sources/_index/_index_tbody.html.erb +13 -0
- data/app/views/crm/panel/sources/_index/_index_thead.html.erb +3 -0
- data/app/views/crm/panel/sources/_index/_index_tr.html.erb +25 -0
- data/app/views/crm/panel/sources/_show/_breadcrumb.html.erb +6 -0
- data/app/views/crm/panel/sources/_show/_qrcode_button.html.erb +4 -0
- data/app/views/crm/panel/sources/_show/_qrcode_table.html.erb +18 -0
- data/app/views/crm/panel/sources/_show/_qrcode_tbody.html.erb +13 -0
- data/app/views/crm/panel/sources/_show/_qrcode_thead.html.erb +11 -0
- data/app/views/crm/panel/sources/_show/_qrcode_tr.html.erb +16 -0
- data/app/views/crm/panel/sources/_show/_show_table.html.erb +16 -0
- data/app/views/crm/panel/sources/_show/_text_button.html.erb +4 -0
- data/app/views/crm/panel/sources/_show/_text_table.html.erb +18 -0
- data/app/views/crm/panel/sources/_show/_text_tbody.html.erb +9 -0
- data/app/views/crm/panel/sources/_show/_text_thead.html.erb +9 -0
- data/app/views/crm/panel/sources/_show/_text_tr.html.erb +16 -0
- data/app/views/crm/panel/sources/index.html.erb +8 -0
- data/app/views/crm/panel/sources/show.html.erb +14 -0
- data/app/views/crm/{admin/maintain_tag_templates → panel/tags}/_form.html.erb +0 -1
- data/app/views/crm/{admin/maintain_tag_templates → panel/tags/_index}/_index_tbody.html.erb +4 -2
- data/app/views/crm/panel/tags/_index/_index_thead.html.erb +8 -0
- data/app/views/crm/panel/tags/_show_table.html.erb +20 -0
- data/app/views/crm/panel/texts/_form.html.erb +5 -0
- data/app/views/crm/panel/texts/_index/_breadcrumb.html.erb +7 -0
- data/app/views/crm/panel/texts/_index/_index_tbody.html.erb +9 -0
- data/app/views/crm/panel/texts/_index/_index_thead.html.erb +9 -0
- data/app/views/crm/panel/texts/_show_table.html.erb +4 -0
- data/app/views/crm/panel/texts/index.html.erb +3 -0
- data/app/views/panel/_crm_nav.html.erb +11 -0
- data/config/locales/en.enum.yml +6 -0
- data/config/locales/zh.attributes.yml +16 -7
- data/config/locales/zh.controller.yml +82 -5
- data/config/locales/zh.enum.yml +40 -2
- data/config/routes.rb +88 -14
- data/lib/rails_crm/engine.rb +2 -6
- metadata +254 -80
- data/app/controllers/crm/admin/maintain_source_templates_controller.rb +0 -52
- data/app/controllers/crm/admin/maintain_tag_templates_controller.rb +0 -56
- data/app/models/crm/maintain_source_template.rb +0 -5
- data/app/models/crm/maintain_tag_template.rb +0 -5
- data/app/models/crm/model/maintain_source_template.rb +0 -12
- data/app/models/crm/model/member.rb +0 -11
- data/app/models/crm/model/order.rb +0 -10
- data/app/views/crm/admin/maintain_logs/_index_thead.html.erb +0 -14
- data/app/views/crm/admin/maintain_logs/_maintain_log.json.jbuilder +0 -11
- data/app/views/crm/admin/maintain_logs/_show.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_logs/index.json.jbuilder +0 -2
- data/app/views/crm/admin/maintain_source_templates/_edit_form.html.erb +0 -4
- data/app/views/crm/admin/maintain_source_templates/_form.html.erb +0 -2
- data/app/views/crm/admin/maintain_source_templates/_index_tbody.html.erb +0 -14
- data/app/views/crm/admin/maintain_source_templates/_index_thead.html.erb +0 -2
- data/app/views/crm/admin/maintain_source_templates/_maintain_source.json.jbuilder +0 -7
- data/app/views/crm/admin/maintain_source_templates/_new_form.html.erb +0 -4
- data/app/views/crm/admin/maintain_source_templates/_show.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_source_templates/_show_table.html.erb +0 -8
- data/app/views/crm/admin/maintain_source_templates/index.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_sources/_edit_form.html.erb +0 -4
- data/app/views/crm/admin/maintain_sources/_index_tbody.html.erb +0 -12
- data/app/views/crm/admin/maintain_sources/_index_thead.html.erb +0 -3
- data/app/views/crm/admin/maintain_sources/_maintain_source.json.jbuilder +0 -6
- data/app/views/crm/admin/maintain_sources/_show.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_sources/index.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_tag_templates/_edit_form.html.erb +0 -4
- data/app/views/crm/admin/maintain_tag_templates/_index_thead.html.erb +0 -7
- data/app/views/crm/admin/maintain_tag_templates/_maintain_tag_template.json.jbuilder +0 -11
- data/app/views/crm/admin/maintain_tag_templates/_new_form.html.erb +0 -4
- data/app/views/crm/admin/maintain_tag_templates/_show.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_tag_templates/_show_table.html.erb +0 -20
- data/app/views/crm/admin/maintain_tag_templates/index.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_tags/_breadcrumb.html.erb +0 -6
- data/app/views/crm/admin/maintain_tags/_edit_form.html.erb +0 -4
- data/app/views/crm/admin/maintain_tags/_filter_form.html.erb +0 -9
- data/app/views/crm/admin/maintain_tags/_index_thead.html.erb +0 -6
- data/app/views/crm/admin/maintain_tags/_maintain_tag.json.jbuilder +0 -9
- data/app/views/crm/admin/maintain_tags/_new_form.html.erb +0 -4
- data/app/views/crm/admin/maintain_tags/_show.json.jbuilder +0 -1
- data/app/views/crm/admin/maintain_tags/index.json.jbuilder +0 -1
- data/app/views/crm/admin/maintains/_button.html.erb +0 -3
- data/app/views/crm/admin/maintains/_filter_table.html.erb +0 -54
- data/app/views/crm/admin/maintains/_index_thead.html.erb +0 -40
- data/app/views/crm/admin/maintains/_index_tr.html.erb +0 -36
- data/app/views/crm/admin/maintains/_maintain.json.jbuilder +0 -24
- data/app/views/crm/admin/maintains/_new_detect.html.erb +0 -15
- data/app/views/crm/admin/maintains/_show.json.jbuilder +0 -1
- data/app/views/crm/admin/maintains/create_detect.js.erb +0 -3
- data/app/views/crm/admin/maintains/edit_assign.js +0 -8
- data/app/views/crm/admin/maintains/edit_assign.js.erb +0 -3
- data/app/views/crm/admin/maintains/edit_order.js.erb +0 -12
- data/app/views/crm/admin/maintains/edit_transfer.js +0 -8
- data/app/views/crm/admin/maintains/edit_transfer.js.erb +0 -3
- data/app/views/crm/admin/maintains/index.json.jbuilder +0 -2
- data/app/views/crm/admin/maintains/new.json.jbuilder +0 -5
- data/app/views/crm/admin/maintains/new_batch_assign.js.erb +0 -3
- data/app/views/crm/admin/maintains/new_detect.js.erb +0 -1
- data/app/views/crm/admin/maintains/orders.html.erb +0 -54
- data/app/views/crm/admin/maintains/public.json.jbuilder +0 -2
@@ -5,40 +5,74 @@ module Crm
|
|
5
5
|
included do
|
6
6
|
attribute :note, :string
|
7
7
|
attribute :position, :integer
|
8
|
+
attribute :deposit_ratio, :integer, default: 100, comment: '最小预付比例'
|
9
|
+
attribute :client_type, :string, default: 'Profiled::Profile'
|
10
|
+
attribute :agent_type, :string, default: 'Profiled::Profile'
|
11
|
+
attribute :wallets_count, :integer, default: 0
|
12
|
+
attribute :cards_count, :integer, default: 0
|
13
|
+
attribute :orders_count, :integer, default: 0
|
8
14
|
|
9
|
-
belongs_to :organ, optional: true
|
10
|
-
belongs_to :member, inverse_of: :maintains, optional: true
|
15
|
+
belongs_to :organ, class_name: 'Org::Organ', optional: true
|
16
|
+
belongs_to :member, class_name: 'Org::Member', inverse_of: :maintains, optional: true
|
17
|
+
belongs_to :task_template, class_name: 'Bench::TaskTemplate', optional: true
|
18
|
+
belongs_to :payment_strategy, class_name: 'Trade::PaymentStrategy', optional: true
|
19
|
+
|
20
|
+
belongs_to :client_user, class_name: 'Auth::User', optional: true
|
21
|
+
belongs_to :client_member, class_name: 'Org::Member', optional: true
|
22
|
+
belongs_to :profile_client, class_name: 'Profiled::Profile', foreign_key: :client_id, optional: true
|
23
|
+
belongs_to :profile_agent, class_name: 'Profiled::Profile', foreign_key: :agent_id, optional: true
|
24
|
+
accepts_nested_attributes_for :profile_client, reject_if: :all_blank
|
25
|
+
accepts_nested_attributes_for :profile_agent, reject_if: :all_blank
|
26
|
+
|
27
|
+
has_many :orders, class_name: 'Trade::Order', dependent: :nullify
|
28
|
+
has_many :addresses, class_name: 'Profiled::Address', dependent: :nullify
|
29
|
+
has_many :wallets, class_name: 'Trade::Wallet', dependent: :nullify
|
30
|
+
has_many :cards, class_name: 'Trade::Card', dependent: :nullify
|
31
|
+
|
32
|
+
belongs_to :client, polymorphic: true, inverse_of: :client_maintains, autosave: true, optional: true
|
33
|
+
belongs_to :agent, polymorphic: true, inverse_of: :agent_maintains, optional: true
|
34
|
+
belongs_to :agency, optional: true
|
11
35
|
belongs_to :maintain_source, optional: true
|
12
|
-
belongs_to :
|
13
|
-
belongs_to :
|
14
|
-
belongs_to :client, class_name: 'Profile', inverse_of: :client_maintains
|
15
|
-
belongs_to :agent, class_name: 'User', inverse_of: :agent_maintains, optional: true
|
16
|
-
belongs_to :upstream, class_name: self.name
|
17
|
-
belongs_to :source, class_name: self.name
|
36
|
+
belongs_to :upstream, class_name: self.name, optional: true
|
37
|
+
belongs_to :original, class_name: self.name, optional: true
|
18
38
|
|
19
39
|
has_many :maintain_logs, dependent: :delete_all
|
20
40
|
has_many :maintain_tags, -> { distinct }, through: :maintain_logs
|
21
|
-
has_many :orders, dependent: :nullify
|
22
41
|
|
23
42
|
accepts_nested_attributes_for :agency, reject_if: :all_blank
|
24
|
-
accepts_nested_attributes_for :agent, reject_if: :all_blank
|
25
|
-
accepts_nested_attributes_for :client, reject_if: :all_blank
|
26
43
|
|
27
44
|
enum state: {
|
28
45
|
init: 'init',
|
29
|
-
|
46
|
+
ordered: 'ordered'
|
30
47
|
}, _default: 'init'
|
31
48
|
|
32
|
-
before_validation
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
49
|
+
before_validation :init_stream, if: :new_record?
|
50
|
+
before_validation :sync_pipeline_member, if: -> { task_template_id_changed? }
|
51
|
+
after_save_commit :sync_user_to_orders, if: -> { saved_change_to_client_user_id? }
|
52
|
+
after_save_commit :sync_member_to_orders, if: -> { saved_change_to_client_member_id? }
|
53
|
+
end
|
54
|
+
|
55
|
+
def init_stream
|
56
|
+
self.upstream ||= self
|
57
|
+
self.original ||= self
|
58
|
+
end
|
59
|
+
|
60
|
+
def sync_member_to_orders
|
61
|
+
return unless client_member
|
62
|
+
orders.update_all member_id: client_member_id
|
63
|
+
wallets.update_all member_id: client_member_id
|
64
|
+
cards.update_all member_id: client_member_id
|
65
|
+
end
|
66
|
+
|
67
|
+
def sync_user_to_orders
|
68
|
+
orders.update_all user_id: client_user_id
|
69
|
+
wallets.update_all user_id: client_user_id
|
70
|
+
cards.update_all user_id: client_user_id
|
38
71
|
end
|
39
72
|
|
40
73
|
def sync_pipeline_member
|
41
|
-
self.
|
74
|
+
#self.task_member ||= self.task_template.pipeline_members.first if self.pipeline
|
75
|
+
#self.position = self.pipeline_member&.position
|
42
76
|
end
|
43
77
|
|
44
78
|
def tags
|
@@ -47,13 +81,11 @@ module Crm
|
|
47
81
|
end
|
48
82
|
|
49
83
|
def transfer!
|
50
|
-
self.state = 'transferred'
|
51
|
-
|
52
84
|
next_member = pipeline_member&.next_member
|
53
85
|
if next_member
|
54
86
|
m = Maintain.new
|
55
87
|
m.upstream = self
|
56
|
-
m.
|
88
|
+
m.original = self.original
|
57
89
|
m.pipeline_member = next_member
|
58
90
|
m.assign_attributes self.attributes.slice('organ_id', 'client_type', 'client_id', 'agent_type', 'agent_id', 'agency_id', 'maintain_source_id', 'pipeline_id')
|
59
91
|
|
@@ -8,8 +8,9 @@ module Crm
|
|
8
8
|
attribute :tag_sequence, :integer
|
9
9
|
attribute :extra, :json
|
10
10
|
|
11
|
+
belongs_to :member, class_name: 'Org::Member'
|
12
|
+
|
11
13
|
belongs_to :maintain
|
12
|
-
belongs_to :member
|
13
14
|
belongs_to :logged, polymorphic: true, optional: true
|
14
15
|
belongs_to :maintain_tag, counter_cache: true, optional: true
|
15
16
|
end
|
@@ -5,13 +5,15 @@ module Crm
|
|
5
5
|
included do
|
6
6
|
attribute :name, :string
|
7
7
|
attribute :maintains_count, :integer, default: 0
|
8
|
-
|
9
|
-
belongs_to :
|
8
|
+
|
9
|
+
belongs_to :organ, class_name: 'Org::Organ', optional: true
|
10
|
+
|
11
|
+
belongs_to :source, optional: true
|
10
12
|
|
11
13
|
validates :name, presence: true
|
12
14
|
|
13
15
|
before_validation do
|
14
|
-
self.name
|
16
|
+
self.name ||= source.name if source
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
@@ -12,16 +12,17 @@ module Crm
|
|
12
12
|
attribute :color, :string, default: '#2A92CA'
|
13
13
|
attribute :maintain_logs_count, :integer, default: 0
|
14
14
|
|
15
|
-
belongs_to :organ, optional: true
|
16
|
-
|
15
|
+
belongs_to :organ, class_name: 'Org::Organ', optional: true
|
16
|
+
|
17
|
+
belongs_to :tag, optional: true
|
17
18
|
|
18
19
|
validates :logged_type, uniqueness: { scope: [:organ_id, :sequence] }, allow_blank: true
|
19
20
|
validates :name, presence: true
|
20
21
|
|
21
22
|
before_validation do
|
22
|
-
if
|
23
|
-
self.name =
|
24
|
-
self.color =
|
23
|
+
if tag
|
24
|
+
self.name = tag.name
|
25
|
+
self.color = tag.color
|
25
26
|
self.manual = false
|
26
27
|
end
|
27
28
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Crm
|
2
|
+
module Model::Qrcode
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
attribute :margin_x, :integer, default: 0
|
7
|
+
attribute :margin_y, :integer, default: 0
|
8
|
+
attribute :fixed_width, :integer, default: 0
|
9
|
+
|
10
|
+
enum align: {
|
11
|
+
center: 'center',
|
12
|
+
north: 'north',
|
13
|
+
south: 'south',
|
14
|
+
west: 'west',
|
15
|
+
east: 'east',
|
16
|
+
northwest: 'northwest',
|
17
|
+
northeast: 'northeast',
|
18
|
+
southwest: 'southwest',
|
19
|
+
southeast: 'southeast'
|
20
|
+
}, _prefix: true, _default: 'northwest'
|
21
|
+
|
22
|
+
belongs_to :source
|
23
|
+
has_one_attached :picture
|
24
|
+
end
|
25
|
+
|
26
|
+
def width
|
27
|
+
if picture.attached?
|
28
|
+
picture.blob.metadata.fetch('width', 0)
|
29
|
+
else
|
30
|
+
0
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def height
|
35
|
+
if picture.attached?
|
36
|
+
picture.blob.metadata.fetch('height', 0)
|
37
|
+
else
|
38
|
+
0
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def watermark(blob = nil)
|
43
|
+
blob ||= picture
|
44
|
+
"/watermark/url/#{Base64.urlsafe_encode64('/' + [blob.service.try(:folder), blob.key].compact.join('/'))}/align/#{align}/margin/#{margin_x}x#{margin_y}/percent/#{percent}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def percent
|
48
|
+
min = [source.width, source.height].min
|
49
|
+
r = (fixed_width / min.to_f) * 100
|
50
|
+
r.round
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Crm
|
2
|
+
module Model::Source
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
attribute :name, :string
|
7
|
+
attribute :materialize, :boolean, default: false
|
8
|
+
attribute :fixed_width, :integer, default: 0
|
9
|
+
|
10
|
+
has_one :qrcode, dependent: :destroy
|
11
|
+
has_many :qrcodes, dependent: :destroy
|
12
|
+
has_many :texts, dependent: :destroy
|
13
|
+
has_many :maintain_sources, dependent: :nullify
|
14
|
+
has_many :source_contacts
|
15
|
+
|
16
|
+
has_one_attached :picture
|
17
|
+
has_one_attached :logo
|
18
|
+
end
|
19
|
+
|
20
|
+
def width
|
21
|
+
if picture.attached?
|
22
|
+
picture.blob.metadata.fetch('width', 0)
|
23
|
+
else
|
24
|
+
0
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def height
|
29
|
+
if picture.attached?
|
30
|
+
picture.blob.metadata.fetch('height', 0)
|
31
|
+
else
|
32
|
+
0
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def h_by_w
|
37
|
+
Rational(height, width)
|
38
|
+
end
|
39
|
+
|
40
|
+
def fh
|
41
|
+
(fw * h_by_w).to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
def url_with_watermark(replace = nil)
|
45
|
+
t = "/fw/#{fixed_width}"
|
46
|
+
t += qrcode.watermark(replace) if qrcode
|
47
|
+
texts.each do |text|
|
48
|
+
t += text.watermark
|
49
|
+
end
|
50
|
+
|
51
|
+
[picture.url, t.presence].compact.join('!')
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Crm
|
2
|
+
module Model::SourceContact
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
belongs_to :organ, class_name: 'Org::Organ', optional: true
|
7
|
+
|
8
|
+
belongs_to :maintain_source
|
9
|
+
belongs_to :source
|
10
|
+
belongs_to :contact, class_name: 'Wechat::Contact'
|
11
|
+
belongs_to :trade_item, class_name: 'Trade::TradeItem', optional: true
|
12
|
+
|
13
|
+
has_one :qy_media, class_name: 'Wechat::QyMedia', as: :medium
|
14
|
+
end
|
15
|
+
|
16
|
+
def url_with_watermark
|
17
|
+
source.url_with_watermark(contact.file)
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_qy_media
|
21
|
+
r = nil
|
22
|
+
Tempfile.open do |file|
|
23
|
+
file.binmode
|
24
|
+
res = HTTPX.get url_with_watermark
|
25
|
+
res.body.each do |fragment|
|
26
|
+
file.write fragment
|
27
|
+
end if res.error.nil?
|
28
|
+
|
29
|
+
file.rewind
|
30
|
+
qy_media || build_qy_media(corp_id: contact.corp_id, suite_id: contact.suite_id)
|
31
|
+
r = qy_media.corp.api.uploadimg(file)
|
32
|
+
qy_media.url = r['url']
|
33
|
+
qy_media.save
|
34
|
+
logger.debug "#{r}"
|
35
|
+
end
|
36
|
+
r
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Crm
|
2
|
+
module Model::Text
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
attribute :note, :string
|
7
|
+
attribute :margin_x, :integer, default: 0
|
8
|
+
attribute :margin_y, :integer, default: 0
|
9
|
+
|
10
|
+
enum font: {
|
11
|
+
simsun: 'simsun',
|
12
|
+
simhei: 'simhei',
|
13
|
+
simkai: 'simkai',
|
14
|
+
simli: 'simli',
|
15
|
+
simyou: 'simyou',
|
16
|
+
simfang: 'simfang',
|
17
|
+
sc: 'sc',
|
18
|
+
tc: 'tc',
|
19
|
+
arial: 'arial',
|
20
|
+
georgia: 'georgia',
|
21
|
+
helvetica: 'helvetica',
|
22
|
+
roman: 'roman'
|
23
|
+
}, _prefix: true, _default: 'simsun'
|
24
|
+
|
25
|
+
enum align: {
|
26
|
+
center: 'center',
|
27
|
+
north: 'north',
|
28
|
+
south: 'south',
|
29
|
+
west: 'west',
|
30
|
+
east: 'east',
|
31
|
+
northwest: 'northwest',
|
32
|
+
northeast: 'northeast',
|
33
|
+
southwest: 'southwest',
|
34
|
+
southeast: 'southeast'
|
35
|
+
}, _prefix: true, _default: 'northwest'
|
36
|
+
|
37
|
+
belongs_to :source
|
38
|
+
end
|
39
|
+
|
40
|
+
def watermark
|
41
|
+
"/watermark/text/#{Base64.urlsafe_encode64(note)}/font/#{font}/align/#{align}/margin/#{margin_x}x#{margin_y}"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Crm
|
2
|
+
class Source < ApplicationRecord
|
3
|
+
include Model::Source
|
4
|
+
include Com::Ext::Taxon
|
5
|
+
include Trade::Ext::Good
|
6
|
+
|
7
|
+
def order_paid(trade_item)
|
8
|
+
maintain_source = maintain_sources.find_or_initialize_by(organ_id: trade_item.member_organ_id)
|
9
|
+
|
10
|
+
mc = source_contacts.build
|
11
|
+
mc.trade_item = trade_item
|
12
|
+
mc.maintain_source = maintain_source
|
13
|
+
mc.contact_id = Hash(trade_item.extra).fetch('contact_id')
|
14
|
+
|
15
|
+
mc.save
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
<div class="<%= active_helper(modules: 'crm/admin', active: 'menu ex-accordion is-active', item: 'menu ex-accordion') %>" data-controller="menu">
|
2
|
-
<%= content_tag :div, class: 'menu-list' do %>
|
3
|
-
<%= link_to t('crm.admin.maintains.index.title'), { controller: 'crm/admin/maintains' }, class: active_helper(controllers: ['maintain_logs'], 'maintains': ['index', 'show'], active: 'is-active') %>
|
4
|
-
<%= link_to t('crm.admin.maintains.public.title'), { controller: 'crm/admin/maintains', action: 'public' }, class: active_helper('maintains': 'public', active: 'is-active') %>
|
5
|
-
<%= link_to t('crm.admin.maintain_source_templates.index.title'), { controller: 'crm/admin/maintain_source_templates' }, class: active_helper(controllers: 'maintain_source_templates', active: 'is-active') %>
|
6
|
-
<%= link_to t('crm.admin.maintain_tag_templates.index.title'), { controller: 'crm/admin/maintain_tag_templates' }, class: active_helper(controllers: 'maintain_tag_templates', active: 'is-active') -%>
|
7
|
-
<% end %>
|
1
|
+
<div class="<%= active_helper(modules: ['crm/admin', 'trade/admin'], active: 'menu ex-accordion is-active', item: 'menu ex-accordion') %>" data-controller="menu empty">
|
8
2
|
<a class="menu-label" data-action="menu#toggle">
|
9
|
-
<i class="
|
3
|
+
<i class="fa-solid fa-chart-line fa-fw"></i>
|
10
4
|
<span><%= t('crm.admin.title') %></span>
|
11
|
-
<i class="
|
5
|
+
<i class="fa-solid dropdown"></i>
|
12
6
|
</a>
|
7
|
+
<div class="menu-list">
|
8
|
+
<%= link_to t('crm.admin.maintains.index.title'), { controller: 'crm/admin/maintains' }, class: active_helper(controllers: ['maintain_logs'], 'maintains': ['index', 'show'], active: 'is-active') %>
|
9
|
+
<%= link_to t('crm.admin.maintains.public.title'), { controller: 'crm/admin/maintains', action: 'public' }, class: active_helper('maintains': 'public', active: 'is-active') %>
|
10
|
+
<%= link_to t('crm.admin.maintain_sources.index.title'), { controller: 'crm/admin/maintain_sources' }, class: active_helper(controllers: 'maintain_sources', active: 'is-active') %>
|
11
|
+
<%= link_to t('crm.admin.maintain_tags.index.title'), { controller: 'crm/admin/maintain_tags' }, class: active_helper(controllers: 'maintain_tags', active: 'is-active') %>
|
12
|
+
</div>
|
13
13
|
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="weui-panel is-borderless">
|
2
|
+
<div data-controller="mini-program" data-mini-program-pt-class="pt-0" class="weui-panel__hd as-bar">
|
3
|
+
<%= link_to({ controller: @maintain.client_type == 'Wechat::External' ? 'wechat/me/follows' : 'maintains' }, class: 'px-4') do %>
|
4
|
+
<i class="fa-regular fa-angle-left"></i>
|
5
|
+
<% end %>
|
6
|
+
<div class="weui-title"><%= t('.title') %></div>
|
7
|
+
<i class="px-4" style="width: 48.75px"></i>
|
8
|
+
</div>
|
9
|
+
</div>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div class="weui-panel is-borderless">
|
2
|
+
<div data-controller="mini-program" data-mini-program-pt-class="pt-0" class="weui-panel__hd as-bar">
|
3
|
+
<%= link_to({ controller: 'addresses' }, class: 'px-4') do %>
|
4
|
+
<i class="fa-regular fa-angle-left"></i>
|
5
|
+
<% end %>
|
6
|
+
<div class="weui-title has-text-grey-dark">
|
7
|
+
<span><%= @maintain.remark %></span>
|
8
|
+
<span class="pl-4"><%= t('.title') %></span>
|
9
|
+
</div>
|
10
|
+
<i class="px-4" style="width: 48.75px"></i>
|
11
|
+
</div>
|
12
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= form_with theme: 'search', model: Agency.new do |f| %>
|
2
|
+
<div class="field-body">
|
3
|
+
<%= f.text_field 'pupil.real_name' %>
|
4
|
+
<div class="field is-narrow">
|
5
|
+
<%= f.submit %>
|
6
|
+
<%= link_to t('.clear'), filter_params(except: ['pupil.real_name']), class: 'button is-light' %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<td><%= model.client.real_name %></td>
|
2
|
+
<td><%= model.client.age %></td>
|
3
|
+
<td>
|
4
|
+
<span class="ui icon label">
|
5
|
+
<i class="fa-light <%= model.client.male? ? 'fa-male' : 'fa-female' %>"></i>
|
6
|
+
<%= model.client.gender_i18n %>
|
7
|
+
</span>
|
8
|
+
</td>
|
9
|
+
<td><%= model.client.note %></td>
|
10
|
+
<td>
|
11
|
+
<% model.crowds.each do |crowd| %>
|
12
|
+
<div class="ui image label">
|
13
|
+
<%= image_tag crowd.logo if crowd.logo.present? %>
|
14
|
+
<%= crowd.name %>
|
15
|
+
<%= link_to crowd_admin_agency_path(model, crowd_id: crowd.id), method: :delete, remote: true do %>
|
16
|
+
<i class="delete icon"></i>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
<%= link_to crowd_admin_agency_path(model), aria: { label: '分班' }, class: 'button is-small is-rounded is-light', remote: true do %>
|
21
|
+
<i class="hand point right icon"></i>
|
22
|
+
<% end %>
|
23
|
+
</td>
|
24
|
+
<td>
|
25
|
+
<% model.cards.each do |card| %>
|
26
|
+
<div class="ui image label">
|
27
|
+
<%= link_to card.card_uuid, admin_card_card_logs_path(card), text: true %>
|
28
|
+
<%= link_to card_admin_agency_path(model, card_id: card.id), method: :delete do %>
|
29
|
+
<i class="delete icon"></i>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
<% end %>
|
33
|
+
</td>
|
34
|
+
<td>
|
35
|
+
<%= link_to admin_agency_path(model), class: 'button is-small is-rounded is-light', remote: true do %>
|
36
|
+
<i class="fa-light fa-circle-info"></i>
|
37
|
+
<% end %>
|
38
|
+
</td>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<th><%= Agential::Agency.human_attribute_name('client.name') %></th>
|
2
|
+
<th><%= Agential::Agency.human_attribute_name('client.age') %></th>
|
3
|
+
<th><%= Agential::Agency.human_attribute_name('client.gender') %></th>
|
4
|
+
<th><%= Agential::Agency.human_attribute_name('client.note') %></th>
|
5
|
+
<th>班级</th>
|
6
|
+
<th>会员卡</th>
|
7
|
+
<th></th>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<table class="table is-hoverable is-fullwidth">
|
2
|
+
<tbody>
|
3
|
+
<tr>
|
4
|
+
<td class="has-text-right"><%= Agency.human_attribute_name('client.real_name') %></td>
|
5
|
+
<td><%= @agency.client.real_name %></td>
|
6
|
+
</tr>
|
7
|
+
<tr>
|
8
|
+
<td class="has-text-right"><%= Agency.human_attribute_name('client.age') %></td>
|
9
|
+
<td><%= @agency.client.age %></td>
|
10
|
+
</tr>
|
11
|
+
<tr>
|
12
|
+
<td class="has-text-right"><%= Agency.human_attribute_name('client.gender') %></td>
|
13
|
+
<td><%= @agency.client.gender %></td>
|
14
|
+
</tr>
|
15
|
+
<tr>
|
16
|
+
<td class="has-text-right"><%= Agency.human_attribute_name(:note) %></td>
|
17
|
+
<td><%= @agency.client.note %></td>
|
18
|
+
</tr>
|
19
|
+
<tr>
|
20
|
+
<td class="has-text-right"><%= Agency.human_attribute_name('agent.identity') %></td>
|
21
|
+
<td>
|
22
|
+
<%= @agency.tutelar.identity %>
|
23
|
+
<% if @agency.tutelar.user && @agency.tutelar.account&.wechat_response %>
|
24
|
+
<%= image_tag @agency.tutelar.account.qrcode_url, class: 'ui small image' %>
|
25
|
+
<% else %>
|
26
|
+
<%= link_to qrcode_admin_profile_path(@agency.tutelar), method: :patch, remote: true, id: 'account_qrcode' do %>
|
27
|
+
<i class="fa-light fa-qrcode"></i>
|
28
|
+
<% end %>
|
29
|
+
<% end %>
|
30
|
+
</td>
|
31
|
+
</tr>
|
32
|
+
</tbody>
|
33
|
+
</table>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div class="weui-panel is-borderless">
|
2
|
+
<div data-controller="mini-program" data-mini-program-pt-class="pt-0" class="weui-panel__hd as-bar">
|
3
|
+
<%= link_to({ controller: 'card_templates', action: 'show', id: @card.card_template_id }, class: 'px-4') do %>
|
4
|
+
<i class="fa-regular fa-angle-left"></i>
|
5
|
+
<% end %>
|
6
|
+
<div class="weui-title">
|
7
|
+
<span><%= @maintain.remark %></span>
|
8
|
+
<span class="pl-1"><%= t('.title') %></span>
|
9
|
+
</div>
|
10
|
+
<i class="px-4" style="width: 37.5px"></i>
|
11
|
+
</div>
|
12
|
+
</div>
|