Skip to content
Snippets Groups Projects
Feature_edit.vue 33.4 KiB
Newer Older
    <script
      type="application/javascript"
      :src="
        baseUrl +
DESPRES Damien's avatar
DESPRES Damien committed
        'resources/leaflet-control-geocoder-1.13.0/Control.Geocoder.js'
      "
    ></script>
      <h1 v-if="feature && currentRouteName === 'editer-signalement'">
Timothee P's avatar
Timothee P committed
        Mise à jour du signalement "{{ feature.title || feature.feature_id }}"
        v-else-if="feature_type && currentRouteName === 'ajouter-signalement'"
        Création d'un signalement <small>[{{ feature_type.title }}]</small>
      </h1>

      <form
        id="form-feature-edit"
        action=""
        method="post"
        enctype="multipart/form-data"
        class="ui form"
      >
        <!-- Feature Fields -->
        <div class="two fields">
leandro's avatar
leandro committed
          <div :class="field_title">
            <label :for="form.title.id_for_label">{{ form.title.label }}</label>
              :maxlength="form.title.field.max_length"
              :name="form.title.html_name"
              :id="form.title.id_for_label"
              v-model="form.title.value"
            <ul id="errorlist-title" class="errorlist">
              <li v-for="error in form.title.errors" :key="error">
                {{ error }}
              </li>
            </ul>
            <label :for="form.status.id_for_label">{{
              form.status.label
              :options="allowedStatusChoices"
              :selected="selected_status.name"
          <label :for="form.description.id_for_label">{{
            form.description.label
            :name="form.description.html_name"
            v-model="form.description.value"
          ></textarea>
        </div>

        <!-- Geom Field -->
        <div class="field">
          <label :for="form.geom.id_for_label">{{ form.geom.label }}</label>
          <div v-frag v-if="feature_type && feature_type.geom_type === 'point'">
                id="add-geo-image"
                type="button"
                class="ui compact button"
              >
                <i class="file image icon"></i>Importer une image géoréférencée
              </button>
              Vous pouvez utiliser une image géoréférencée pour localiser le
              signalement.
            </p>

            <div
              v-if="showGeoRef"
              class="ui dimmer modals page transition visible active"
              style="display: flex !important"
            >
              <div
                class="ui mini modal transition visible active"
                style="display: block !important"
                <i class="close icon" @click="toggleGeoRefModal"></i>
                <div class="content">
                  <h3>Importer une image géoréférencée</h3>
                  <form
                    id="form-geo-image"
                    class="ui form"
                    enctype="multipart/form-data"
                  >
                    <p>
                      Attention, si vous avez déjà saisi une géométrie, celle
                      issue de l'image importée l'écrasera.
                    </p>
                    <div class="field georef-btn">
                      <label>Image (png ou jpeg)</label>
                      <label class="ui icon button" for="image_file">
                        <i class="file icon"></i>
                        <span class="label">{{ geoRefFileLabel }}</span>
                      </label>
                      <input
                        type="file"
                        accept="image/jpeg, image/png"
                        style="display: none"
                        ref="file"
                        v-on:change="handleFileUpload"
                        name="image_file"
                        class="image_file"
                        id="image_file"
                      />
                      <ul v-if="erreurUploadMessage" class="errorlist">
                        <li>
                          {{ erreurUploadMessage }}
                        </li>
                      </ul>
                    </div>
                    <button
                      @click="georeferencement"
                      id="get-geom-from-image-file"
                      type="button"
                      :class="[
                        'ui compact button',
                        file && !erreurUploadMessage ? 'green' : 'disabled',
                        { red: erreurUploadMessage },
                      ]"
                    >
                      <i class="plus icon"></i>
                      Importer
                    </button>
                  </form>
                </div>
              </div>
DESPRES Damien's avatar
DESPRES Damien committed
            </div>
DESPRES Damien's avatar
DESPRES Damien committed
            <p v-if="showGeoPositionBtn">
Timothee P's avatar
Timothee P committed
                @click="create_point_geoposition"
                id="create-point-geoposition"
                type="button"
                class="ui compact button"
              >
                <i class="ui map marker alternate icon"></i>Positionner le
                signalement à partir de votre géolocalisation
              </button>
            </p>
            <span
              id="erreur-geolocalisation"
              v-if="erreurGeolocalisationMessage"
            >
              <div class="ui negative message">
                <div class="header">
                  Une erreur est survenue avec la fonctionnalité de
                  géolocalisation
                </div>
                <p id="erreur-geolocalisation-message">
                  {{ erreurGeolocalisationMessage }}
                </p>
          <ul id="errorlist-geom" class="errorlist">
            <li v-for="error in form.geom.errors" :key="error">
              {{ error }}
            </li>
          </ul>
            :name="form.geom.html_name"
            :id="form.geom.id_for_label"
            v-model="form.geom.value"
          />
          <div class="ui tab active map-container" data-tab="map">
            <div id="map"></div>
            <!-- // todo: ajouter v-if -->
            <!-- {% if serialized_base_maps|length > 0 %} {% include
            "geocontrib/map-layers/sidebar-layers.html" with
            basemaps=serialized_base_maps layers=serialized_layers
            project=project.slug%} {% endif %} -->
            <SidebarLayers v-if="basemaps && map" />
        <div class="ui horizontal divider">DONNÉES MÉTIER</div>
          v-for="(field, index) in orderedCustomFields"
          :key="field.field_type + index"
          class="field"
        >
          <FeatureExtraForm :field="field" />
          <div class="ui horizontal divider">PIÈCES JOINTES</div>
          <div v-if="isOffline() !== true" id="formsets-attachment">
            <FeatureAttachmentForm
              v-for="form in attachmentFormset"
              :key="form.dataKey"
              :attachmentForm="form"
              ref="attachementForm"
            />
          </div>
          <button
            @click="add_attachement_formset"
            id="add-attachment"
            type="button"
            class="ui compact basic button button-hover-green"
          >
            <i class="ui plus icon"></i>Ajouter une pièce jointe
          </button>
        </div>
          <div class="ui horizontal divider">SIGNALEMENTS LIÉS</div>
          <div id="formsets-link">
            <FeatureLinkedForm
              v-for="form in linkedFormset"
              :key="form.dataKey"
              :linkedForm="form"
              :features="features"
              ref="linkedForm"
            />
          </div>
          <button
            @click="add_linked_formset"
            id="add-link"
            type="button"
            class="ui compact basic button button-hover-green"
          >
            <i class="ui plus icon"></i>Ajouter une liaison
          </button>
        <button @click="postForm" type="button" class="ui teal icon button">
          <i class="white save icon"></i> Enregistrer les changements
        </button>
      </form>
    </div>
  </div>
</template>

<script>
import frag from "vue-frag";
import { mapState, mapGetters } from "vuex";
import FeatureAttachmentForm from "@/components/feature/FeatureAttachmentForm";
import FeatureLinkedForm from "@/components/feature/FeatureLinkedForm";
import FeatureExtraForm from "@/components/feature/FeatureExtraForm";
import Dropdown from "@/components/Dropdown.vue";
import SidebarLayers from "@/components/map-layers/SidebarLayers";
import featureAPI from "@/services/feature-api";
DESPRES Damien's avatar
DESPRES Damien committed
import L from "leaflet";
import "leaflet-draw";
import { mapUtil } from "@/assets/js/map-util.js";
const axios = require("axios");
import flip from "@turf/flip";
axios.defaults.headers.common["X-CSRFToken"] = ((name) => {
  var re = new RegExp(name + "=([^;]+)");
  var value = re.exec(document.cookie);
Timothee P's avatar
Timothee P committed
  return value !== null ? unescape(value[1]) : null;
Loading
Loading full blame...