根据不同日期对应不同时间的数据设置

项目场景:

 

比如说,老师的课程安排每一天的工作时间是不一样的。

周一10点到11点,14点到15点;周二9点到10点,15点到16点。

周二的时间点又不一样。那怎么处理呢?

我采用tag标签让用户自定义选择

主要代码如下:

<template>
  <div>
    我是首页
    <el-button type="primary" @click="outerVisible = true"
      >添加教师,值班时间和地点</el-button
    >

    <el-dialog title="外层 Dialog" :visible.sync="outerVisible">
      <el-form ref="form" :model="form" label-width="80px">
        <el-form-item label="时间">
          <el-tag
            :key="tag"
            v-for="tag in dynamicTags"
            closable
            :disable-transitions="false"
            @close="handleClose(tag)"
          >
            {{ tag }}
          </el-tag>

          <el-button class="button-new-tag" size="small" @click="gettime"
            >+ 添加值班时间</el-button
          >
        </el-form-item>
      </el-form>

      <el-dialog
        width="80%"
        title="请选择时间"
        :visible.sync="innerVisible"
        append-to-body
      >
        请选择日期:
        <el-select v-model="form.days" multiple placeholder="请选择">
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
          </el-option> </el-select
        ><br /><br />
        请选择时间:
        <el-time-picker
          is-range
          v-model="form.time"
          range-separator="至"
          start-placeholder="开始时间"
          end-placeholder="结束时间"
          placeholder="选择时间范围"
        >
        </el-time-picker>
        <div slot="footer" class="dialog-footer">
          <el-button @click="innerVisible = false">取 消</el-button>
          <el-button type="primary" @click="addTime">添加</el-button>
        </div>
      </el-dialog>
    </el-dialog>
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      outerVisible: false,
      innerVisible: false,
      form: {},
      dynamicTags: [],

      // 星期下拉选项
      options: [
        {
          value: "1",
          label: "星期一",
        },
        {
          value: "2",
          label: "星期二",
        },
        {
          value: "3",
          label: "星期三",
        },
        {
          value: "4",
          label: "星期四",
        },
        {
          value: "5",
          label: "星期五",
        },
      ],
    };
  },
  methods: {
    onSubmit() {
      console.log("提交的数据样子", this.dynamicTags);
    },
    // 获取时间
    gettime() {
      console.log("我要添加时间了");
      this.innerVisible = true;
    },
    // 添加时间
    addTime() {
      this.form.days.forEach((item) => {
        let times = "";
        this.form.time.forEach((val) => {
          let hh = val.getHours(); //时
          let mm = val.getMinutes(); //分
          times += `~${hh}:${mm}`;
        });
        let beforPush = `${this.changeWeek(item)} ${times.substring(1)}`;
        // 判断用户是否重复添加数据(去重操作)
        let isOk = this.dynamicTags.every((ishas) => {
          //console.log(ishas, beforPush);
          return ishas != beforPush;
        });
        // 如果没用重复的则添加
        if (isOk) {
          this.dynamicTags.push(beforPush);
        }
      });

      this.innerVisible = false;
    },
    // 将value对应返回星期几
    changeWeek(data) {
      let arr = ["星期一", "星期二", "星期三", "星期四", "星期五"];
      return `${arr[data - 1]}`;
    },
    // 删除时间
    handleClose(tag) {
      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
    },
  },
};
</script>

<style scoped>
.el-tag + .el-tag {
  margin-left: 10px;
}
.button-new-tag {
  margin-left: 10px;
  height: 32px;
  line-height: 30px;
  padding-top: 0;
  padding-bottom: 0;
}
.input-new-tag {
  width: 90px;
  margin-left: 10px;
  vertical-align: bottom;
}
</style>

效果:

最终得到的数据:

 

配合其他表单:

<template>
  <div>
    我是首页
    <el-button type="primary" @click="outerVisible = true"
      >添加教师,值班时间和地点</el-button
    >

    <el-dialog title="外层 Dialog" :visible.sync="outerVisible">
      <el-form ref="form" :model="form" label-width="80px">
        <el-form-item label="活动名称">
          <el-input v-model="form.name"></el-input>
        </el-form-item>
        <el-form-item label="活动区域">
          <el-select v-model="form.region" placeholder="请选择活动区域">
            <el-option label="区域一" value="shanghai"></el-option>
            <el-option label="区域二" value="beijing"></el-option>
          </el-select>
        </el-form-item>
        <!-- <el-form-item label="活动时间">
          <el-col :span="11">
            <el-date-picker
              type="date"
              placeholder="选择日期"
              v-model="form.date1"
              style="width: 100%"
            ></el-date-picker>
          </el-col>
          <el-col class="line" :span="2">-</el-col>
          <el-col :span="11">
            <el-time-picker
              placeholder="选择时间"
              v-model="form.date2"
              style="width: 100%"
            ></el-time-picker>
          </el-col>
        </el-form-item> -->
        <el-form-item label="时间">
          <!--  ******* -->
          <el-tag
            :key="tag"
            v-for="tag in dynamicTags"
            closable
            :disable-transitions="false"
            @close="handleClose(tag)"
          >
            {{ tag }}
          </el-tag>

          <el-button class="button-new-tag" size="small" @click="gettime"
            >+ 添加值班时间</el-button
          >
        </el-form-item>
        <el-form-item label="即时配送">
          <el-switch v-model="form.delivery"></el-switch>
        </el-form-item>
        <el-form-item label="活动性质">
          <el-checkbox-group v-model="form.type">
            <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
            <el-checkbox label="地推活动" name="type"></el-checkbox>
            <el-checkbox label="线下主题活动" name="type"></el-checkbox>
            <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
          </el-checkbox-group>
        </el-form-item>
        <el-form-item label="特殊资源">
          <el-radio-group v-model="form.resource">
            <el-radio label="线上品牌商赞助"></el-radio>
            <el-radio label="线下场地免费"></el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="活动形式">
          <el-input type="textarea" v-model="form.desc"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="onSubmit">立即创建</el-button>
          <el-button>取消</el-button>
        </el-form-item>
      </el-form>

      <el-dialog
        width="80%"
        title="请选择时间"
        :visible.sync="innerVisible"
        append-to-body
      >
        请选择日期:
        <el-select v-model="form.days" multiple placeholder="请选择">
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
          </el-option> </el-select
        ><br /><br />
        请选择时间:
        <el-time-picker
          is-range
          v-model="form.time"
          range-separator="至"
          start-placeholder="开始时间"
          end-placeholder="结束时间"
          placeholder="选择时间范围"
        >
        </el-time-picker>
        <div slot="footer" class="dialog-footer">
          <el-button @click="innerVisible = false">取 消</el-button>
          <el-button type="primary" @click="addTime">添加</el-button>
        </div>
      </el-dialog>
    </el-dialog>
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      outerVisible: false,
      innerVisible: false,
      form: {
        name: "",
        region: "",
        days: [],
        time: "",
        delivery: false,
        type: [],
        resource: "",
        desc: "",
      },
      dynamicTags: ["标签一", "标签二", "标签三"],

      // 星期下拉选项
      options: [
        {
          value: "1",
          label: "星期一",
        },
        {
          value: "2",
          label: "星期二",
        },
        {
          value: "3",
          label: "星期三",
        },
        {
          value: "4",
          label: "星期四",
        },
        {
          value: "5",
          label: "星期五",
        },
      ],
    };
  },
  methods: {
    onSubmit() {
      console.log("submit!");
    },
    // 获取时间
    gettime() {
      console.log("进入了");
      this.innerVisible = true;
    },
    // 添加时间
    addTime() {
      console.log("日期", this.form.days);
      console.log("时间", this.form.time);

      this.form.days.forEach((item) => {
        let times = "";
        this.form.time.forEach((val) => {
          let hh = val.getHours(); //时
          let mm = val.getMinutes(); //分
          times += `~${hh}:${mm}`;
        });
        let beforPush = `${this.changeWeek(item)} ${times.substring(1)}`;
        let isOk = this.dynamicTags.every((ishas) => {
          console.log(ishas, beforPush);
          return ishas != beforPush;
        });
        console.log(isOk);
        if (isOk) {
          this.dynamicTags.push(beforPush);
        }
      });

      this.innerVisible = false;
    },
    changeWeek(data) {
      let arr = ["星期一", "星期二", "星期三", "星期四", "星期五"];
      return `${arr[data - 1]}`;
    },
    // 删除时间
    handleClose(tag) {
      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
    },
  },
};
</script>

<style scoped>
.el-tag + .el-tag {
  margin-left: 10px;
}
.button-new-tag {
  margin-left: 10px;
  height: 32px;
  line-height: 30px;
  padding-top: 0;
  padding-bottom: 0;
}
.input-new-tag {
  width: 90px;
  margin-left: 10px;
  vertical-align: bottom;
}
</style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值