↓↓クリックして頂けると励みになります。
【37 | Googleマップ表示】 << 【ホーム】 >> 【39 | 配達依頼詳細ページ】
「core/templates/courier/available_jobs.html」ファイルを編集します。
記述編集 【Desktop/crowdsource/core/templates/courier/available_jobs.html】
{% extends 'courier/base.html' %} {% block head %} <script src="https://maps.googleapis.com/maps/api/js?key={{ GOOGLE_MAP_API_KEY }}&callback=initMap&libraries=places&v=weekly" defer></script> <script> function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 13, center: { lat: 43.062087, lng: 141.354404 }, }); // Get available jobs via API fetch("{% url 'courier:available_jobs_api' %}") .then(response => response.json()) .then(json => { // console.log(json); for (let i = 0; i < json.jobs.length; i++) { const job = json.jobs[i]; const position = { lat: job.pickup_lat, lng: job.pickup_lng }; const marker = new google.maps.Marker({ position, map, }); new google.maps.InfoWindow({ content: "<small><b>" + job.name + "</b></small><br/><small>" + job.distance + " Km</small>" }).open(map, marker); // Click event for each job marker.addListener("click", () => { showJobDetails(job); }); } }) } function showJobDetails(job) { $("#job-details").css("display", "block"); $("#job-name").html(job.name); $("#job-photo").attr('src', "/media/" + job.photo); $("#pickup-address").html(job.pickup_address); $("#delivery-address").html(job.delivery_address); $("#duration").html(job.duration); $("#distance").html(job.distance); $("#price").html(job.price); } </script> <style> .gm-ui-hover-effect { display: none !important; } #map { flex: 1; } small { font-size: 12px; line-height: 1.2rem; } .card { border: none; } #job-details { display: none; } </style> {% endblock %} {% block content %} <div class="d-flex flex-column h-100" style="padding-bottom: 60px"> <div id="map"></div> <div id="job-details" class="card"> <div class="card-body p-2"> <div class="media"> <img id="job-photo" class="rounded-lg mr-3" width="50px" height="50px"> <div class="media-body"> <b id="job-name"></b> <div class="d-flex"> <div class="flex-grow-1 mr-2"> <small class="text-success"> <i class="fas fa-car"></i> <span id="distance"></span> km <i class="far fa-clock ml-2"></i> <span id="duration"></span> 分 </small> <div class="d-flex align-items-center mt-2"> <i class="fas fa-map-marker-alt"></i> <small id="pickup-address" class="text-secondary ml-2"></small> </div> <div class="d-flex align-items-center mt-2"> <i class="fas fa-flag-checkered"></i> <small id="delivery-address" class="text-secondary ml-2"></small> </div> </div> <h3 id="price"></h3>円 </div> </div> </div> </div> </div> </div> {% include 'courier/bottom_tabs.html' %} {% endblock %}
ブラウザを確認します。
マーカーをクリックすると仕事の詳細がでるようになりました。
http://127.0.0.1:8000/courier/jobs/available/
マップの改善を行います。
「core/templates/courier/available_jobs.html」ファイルを編集します。
記述編集 【Desktop/crowdsource/core/templates/courier/available_jobs.html】
{% extends 'courier/base.html' %} {% block head %} <script src="https://maps.googleapis.com/maps/api/js?key={{ GOOGLE_MAP_API_KEY }}&callback=initMap&libraries=places&v=weekly" defer></script> <script> function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 13, center: { lat: 43.062087, lng: 141.354404 }, }); // Get available jobs via API fetch("{% url 'courier:available_jobs_api' %}") .then(response => response.json()) .then(json => { // console.log(json); // Create a new viewpoint bound var bounds = new google.maps.LatLngBounds(); for (let i = 0; i < json.jobs.length; i++) { const job = json.jobs[i]; const position = { lat: job.pickup_lat, lng: job.pickup_lng }; const marker = new google.maps.Marker({ position, map, }); // Increase the bounds to take this point bounds.extend(position); new google.maps.InfoWindow({ content: "<small><b>" + job.name + "</b></small><br/><small>" + job.distance + " Km</small>" }).open(map, marker); // Click event for each job marker.addListener("click", () => { showJobDetails(job); }); // Fit these bounds to the map map.fitBounds(bounds); } }) } function showJobDetails(job) { $("#job-details").css("display", "block"); $("#job-name").html(job.name); $("#job-photo").attr('src', "/media/" + job.photo); $("#pickup-address").html(job.pickup_address); $("#delivery-address").html(job.delivery_address); $("#duration").html(job.duration); $("#distance").html(job.distance); $("#price").html(job.price); } </script> <style> .gm-ui-hover-effect { display: none !important; } #map { flex: 1; } small { font-size: 12px; line-height: 1.2rem; } .card { border: none; } #job-details { display: none; } </style> {% endblock %} {% block content %} <div class="d-flex flex-column h-100" style="padding-bottom: 60px"> <div id="map"></div> <div id="job-details" class="card"> <div class="card-body p-2"> <div class="media"> <img id="job-photo" class="rounded-lg mr-3" width="50px" height="50px"> <div class="media-body"> <b id="job-name"></b> <div class="d-flex"> <div class="flex-grow-1 mr-2"> <small class="text-success"> <i class="fas fa-car"></i> <span id="distance"></span> km <i class="far fa-clock ml-2"></i> <span id="duration"></span> 分 </small> <div class="d-flex align-items-center mt-2"> <i class="fas fa-map-marker-alt"></i> <small id="pickup-address" class="text-secondary ml-2"></small> </div> <div class="d-flex align-items-center mt-2"> <i class="fas fa-flag-checkered"></i> <small id="delivery-address" class="text-secondary ml-2"></small> </div> </div> <h3 id="price"></h3>円 </div> </div> </div> </div> </div> </div> {% include 'courier/bottom_tabs.html' %} {% endblock %}
もう一つ仕事の依頼を追加しておいてください。
表示が改善されているのがわかります。
↓↓クリックして頂けると励みになります。
【37 | Googleマップ表示】 << 【ホーム】 >> 【39 | 配達依頼詳細ページ】