Skip to content
Snippets Groups Projects
WishlistPage.vue 6.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • fz2907's avatar
    fz2907 committed
    <template>
      <el-row :gutter="20">
        <el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col>
        <el-col :span="16">
          <el-card style="width: 100%">
            <template #header>
              <div class="card-header">
    
    fz2907's avatar
    fz2907 committed
                <span>Your Wishlist Information</span>
    
    fz2907's avatar
    fz2907 committed
              </div>
            </template>
    
            <div class="common-layout">
              <el-container>
                <!-- Aside Coding Area -->
                <el-aside width="300px">
                  <el-space direction="vertical" width="100%">
                    <el-card
    
    fz2907's avatar
    fz2907 committed
                      v-for="(item, index) in wishlistList"
    
    fz2907's avatar
    fz2907 committed
                      shadow="hover"
                      style="width: 280px"
    
    fz2907's avatar
    fz2907 committed
                      @click="selectItem(index)"
    
    fz2907's avatar
    fz2907 committed
                      <span>{{ item.cityName }}</span>
    
    fz2907's avatar
    fz2907 committed
                      <div class="bottom">
                        <time class="time">"2077-7-77 to 2077-7-77"</time>
                      </div>
                    </el-card>
    
    fz2907's avatar
    fz2907 committed
                    <el-card
                      shadow="hover"
                      style="width: 280px"
                      @click="addNewWishlistItem()"
                    >
                      <el-icon><Plus /></el-icon>
                      <span> + Add New Item To Wishlist</span>
    
    fz2907's avatar
    fz2907 committed
                    </el-card>
                  </el-space>
                </el-aside>
                <!-- Main Coding Area -->
    
    fz2907's avatar
    fz2907 committed
                <el-main>
    
    fz2907's avatar
    fz2907 committed
                  <el-card shadow="never" class="main-card">
    
    fz2907's avatar
    fz2907 committed
                    <span>Wishlist Item Detail</span>
                    <el-form
                      ref="ruleFormRef"
                      :model="wishlistItem"
                      :rules="rules"
                      label-width="120px"
                      :label-position="'left'"
                      class="demo-ruleForm"
                      :size="formSize"
                      status-icon
                    >
                      <el-form-item></el-form-item>
    
    fz2907's avatar
    fz2907 committed
                      <el-form-item label="City Name:" prop="cityName">
                        <el-input v-model="wishlistItem.cityName" />
                      </el-form-item>
    
    fz2907's avatar
    fz2907 committed
                      <el-form-item label="State:" prop="state">
                        <el-input v-model="wishlistItem.state" />
                      </el-form-item>
    
    fz2907's avatar
    fz2907 committed
                      <el-form-item label="Trip Start Time" required>
                        <el-form-item prop="startTime">
                          <el-date-picker
                            v-model="wishlistItem.startTime"
                            type="date"
                            label="Pick a date"
                            placeholder="Pick a date"
                            style="width: 100%"
                          />
                        </el-form-item>
                      </el-form-item>
    
                      <el-form-item label="Trip End Time" required>
                        <el-form-item prop="endTime">
                          <el-date-picker
                            v-model="wishlistItem.endTime"
                            type="date"
                            label="Pick a date"
                            placeholder="Pick a date"
                            style="width: 100%"
                          />
                        </el-form-item>
                      </el-form-item>
    
    fz2907's avatar
    fz2907 committed
                      <el-form-item label="Details:" prop="details">
                        <el-input
                          v-model="wishlistItem.details"
                          type="textarea"
                          placeholder="Trip plan or want to visit places..."
                        />
                      </el-form-item>
    
    fz2907's avatar
    fz2907 committed
                      <el-button type="primary" @click="submitForm(ruleFormRef)"
                        >Create</el-button
                      >
                      <el-button @click="resetForm(ruleFormRef)">Reset</el-button>
                    </el-form>
                  </el-card>
                </el-main>
    
    fz2907's avatar
    fz2907 committed
              </el-container>
            </div>
          </el-card>
        </el-col>
        <el-col :span="4"><div class="grid-content ep-bg-purple" /></el-col>
      </el-row>
    </template>
    
    fz2907's avatar
    fz2907 committed
    <script lang="ts">
    
    fz2907's avatar
    fz2907 committed
    import { reactive, ref } from "vue";
    import type { FormInstance, FormRules } from "element-plus";
    
    fz2907's avatar
    fz2907 committed
    import { WishlistItemModel } from "@/models/WishlistItemModel";
    import { defineComponent } from "vue";
    
    fz2907's avatar
    fz2907 committed
    const formSize = ref("default");
    const ruleFormRef = ref<FormInstance>();
    
    fz2907's avatar
    fz2907 committed
    let wishlistList = [
    
    fz2907's avatar
    fz2907 committed
        wishlistId: 1,
        userId: 1,
    
    fz2907's avatar
    fz2907 committed
        cityName: "Example City Name1",
        state: "Example State",
    
    fz2907's avatar
    fz2907 committed
        stateCode: 51,
    
    fz2907's avatar
    fz2907 committed
        startTime: "date1",
        endTime: "date2",
        details: "Plans",
      },
      {
    
    fz2907's avatar
    fz2907 committed
        wishlistId: 2,
        userId: 1,
    
    fz2907's avatar
    fz2907 committed
        cityName: "Example City Name2",
        state: "Example State",
    
    fz2907's avatar
    fz2907 committed
        stateCode: 51,
    
    fz2907's avatar
    fz2907 committed
        startTime: "date1",
        endTime: "date2",
        details: "Plans",
      },
    
    fz2907's avatar
    fz2907 committed
    ];
    
    fz2907's avatar
    fz2907 committed
    const rules = reactive<FormRules>({
      cityName: [
        {
          required: true,
          message: "Please give which city you want to visit.",
          trigger: "blur",
        },
        { min: 0, max: 20, message: "Length should be 0 to 20", trigger: "blur" },
      ],
      state: [
        {
          required: true,
          message: "Please give the stat of the city located.",
          trigger: "blur",
        },
      ],
      startTime: [
        {
          type: "date",
          required: true,
          message: "Please pick a date",
          trigger: "change",
        },
      ],
      endTime: [
        {
          type: "date",
          required: true,
          message: "Please pick a time",
          trigger: "change",
        },
      ],
    });
    
    
    fz2907's avatar
    fz2907 committed
    export default defineComponent({
      data() {
        return {
          wishlistItem: new WishlistItemModel(),
          wishlistList,
          rules,
        };
      },
      methods: {
        selectItem(idx: number) {
          console.log("Selected wishlist Item: " + idx);
          this.wishlistItem = wishlistList[idx];
        },
        addNewWishlistItem() {
          console.log("addNewWishlistItem");
          this.wishlistItem = new WishlistItemModel();
        },
        async submitForm(formEl: FormInstance | undefined) {
          if (!formEl) return;
          await formEl.validate((valid, fields) => {
            if (valid) {
              console.log("submit!");
            } else {
              console.log("error submit!", fields);
            }
          });
        },
        resetForm(formEl: FormInstance | undefined) {
          if (!formEl) return;
          formEl.resetFields();
        },
      },
    });
    
    fz2907's avatar
    fz2907 committed
    <style scoped>
    .time {
      font-size: 12px;
      color: #999;
    }
    
    .bottom {
      margin-top: 13px;
      line-height: 12px;
      display: flex;
      justify-content: space-between;
      align-items: center;
    }
    
    fz2907's avatar
    fz2907 committed
    .el-main {
    
    fz2907's avatar
    fz2907 committed
      --el-main-padding: 0px 20px 20px 20px;
    }
    
    .main-card {
      padding: 0px 0px 0px 20px;
    
    fz2907's avatar
    fz2907 committed
    }
    
    fz2907's avatar
    fz2907 committed
    </style>