vue选择上下周,拖拽列表,随机背景色

news2024/10/7 7:26:12

安装拖拽插件 

npm install vuedraggable

<template>
  <!--排产计划-->
  <div class="app-container">
    <div class="mainbox">
      <div class="table-container table-fullscreen">
        <div class="title-name">
          <div class="sign"></div>
          <div class="text">创建排产计划</div>
        </div>
        <!-- 日期选择 -->
        <div class="date-box">
          <div class="btn-box">
            <el-button @click="getPreviousWeekDates">上一周</el-button>
            <div class="date"
                 v-if="nowDate[0]&&nowDate[6]">{{nowDate[0].nyr}} — {{nowDate[6].nyr}}</div>
            <el-button @click="getNextWeekDates">下一周</el-button>
          </div>
          <div class="save-box">
            <el-button>返回</el-button>
            <el-button type="primary">保存</el-button>
          </div>
        </div>
        <!-- 图例 -->
        <div class="legend-box">
          <div class="single-box">
            <div class="single"
                 v-for="item in legendList"
                 :key="item.id">
              <div class="round"
                   :style="{backgroundColor:item.color}"
                   @click="changeClick(item)"><span v-if="item.dxFlag">✔</span></div>
              <div class="zname">{{item.name}}</div>
            </div>
          </div>
          <div class="status-box">
            状态:待提交
          </div>

        </div>
        <!-- 表格 -->
        <div class="table-box">
          <div class="day-box"
               v-for="val in nowDate"
               :key="val.nyr">
            <div class="top">
              <div>{{val.xq }}({{ val.nyr }})</div>
            </div>
            <div class="infolist">
              <draggable v-model="msgList"
                         @start="drag=true"
                         @end="drag=false">
                <div class="onelist"
                     :style="{backgroundColor:item.color}"
                     v-for="item in msgList"
                     :key="item.id">
                  <img @click="delInfo(item.id)"
                       src="../../assets/icons/del.png"
                       alt="">
                  <div class="info-name">{{item.name}}</div>

                  <el-button size="mini"
                             round
                             type="warning"
                             @click="urgentClick()"
                             class="czbtn">加急</el-button>

                </div>
              </draggable>

            </div>
            <div class="add-btn">
              <div class="view-all">查看全部(8)</div>
              <div class="fhj">+</div>
            </div>

          </div>

        </div>

      </div>

    </div>

  </div>
</template>

<script>
import draggable from 'vuedraggable';
export default {
  name: 'VueAdminSchedule',
  components: { draggable },
  data () {
    return {
      randomColor: '',
      msgList: [
        {
          id: 1,
          name: '委托单名称+高强钢实验+1t电渣炉1',
          zname: '冶炼组',
          color: '',

        },
        {
          id: 2,
          name: '委托单名称+高强钢实验+1t电渣炉2',
          color: '',
          zname: '机加工组',

        },
        {
          id: 3,
          name: '委托单名称+高强钢实验+1t电渣炉3',
          color: '',
          zname: '热轧组',

        },
        {
          id: 4,
          name: '委托单名称+高强钢实验+1t电渣炉4',
          color: '',
          zname: '深加工组',

        },
        {
          id: 5,
          name: '委托单名称+高强钢实验+1t电渣炉5',
          color: '',
          zname: 'XX组',

        },
        {
          id: 6,
          name: '委托单名称+高强钢实验+1t电渣炉6',
          color: '',
          zname: '冶炼组',

        },
        {
          id: 7,
          name: '委托单名称+高强钢实验+1t电渣炉7',
          color: '',
          zname: '机加工组',

        },
        {
          id: 8,
          name: '委托单名称+高强钢实验+1t电渣炉8',
          color: '',
          zname: '热轧组',

        },
        {
          id: 9,
          name: '委托单名称+高强钢实验+1t电渣炉9',
          color: '',
          zname: '热轧组',

        }

      ],
      legendList: [
        {
          id: 1,
          name: '冶炼组',
          color: '',
          dxFlag: false,
        },
        {
          id: 2,
          name: '机加工组',
          color: '',
          dxFlag: false,

        },
        {
          id: 3,
          name: '热轧组',
          color: '',
          dxFlag: false,
        },
        {
          id: 4,
          name: '深加工组',
          color: '',
          dxFlag: false,
        },
        {
          id: 5,
          name: 'XX组',
          color: '',
          dxFlag: false,
        },
        {
          id: 6,
          name: 'XX组',
          color: '',
          dxFlag: false,
        },
      ],
      dxFlag: false,
      nowDate: [],
      i: 0,
      y: 0,
      syz: [],
      xyz: []

    };
  },
  created () {
    this.initColor()


  },

  mounted () {
    this.getWeekDates();

  },

  methods: {
    // 加急
    urgentClick () {

    },
    // 删除
    delInfo (id) {
      console.log('id', id);
      // 遍历源数据
      this.msgList.forEach((v, i) => {
        // 如果选中数据和源数据的某一条唯一标识符相等,删除对应的源数据
        if (id === v.id) {
          this.msgList.splice(i, 1)
        }
      })

    },
    initColor () {
      this.legendList.forEach(item => {
        item.color = this.getRandomColor()
        this.msgList.forEach(val => {
          if (val.zname === item.name) {
            val.color = item.color
          }

        })

      })


    },
    // 随机生成颜色
    getRandomColor () {
      const letters = '0123456789ABCDEF';
      let color = '#';
      for (let i = 0; i < 6; i++) {
        color += letters[Math.floor(Math.random() * 16)];
      }
      console.log('color', color);
      return color;
    },

    changeClick (item) {
      item.dxFlag = !item.dxFlag
    },
    getWeekDates () {
      let date = new Date()
      let day = date.getDay()
      let diff = date.getDate() - day + (day === 0 ? -6 : 1) // 获取所在周的第一天
      let weekStart = new Date(date.setDate(diff))
      let weekDates = []
      for (let i = 0; i < 7; i++) {
        let currentDate = new Date(weekStart)
        currentDate.setDate(weekStart.getDate() + i)
        weekDates.push(currentDate)
      }
      weekDates.forEach((date) => {
        let year = date.getFullYear()
        let month = (date.getMonth() + 1).toString().padStart(2, '0')
        let day = date.getDate().toString().padStart(2, '0')
        let dayOfWeek = new Intl.DateTimeFormat('zh-CN', { weekday: 'long' }).format(date)
        console.log(year + '-' + month + '-' + day + ' (' + dayOfWeek + ')')
        this.nowDate.push({
          nyr: year + '-' + month + '-' + day,
          xq: dayOfWeek
        })
      })
    },
    getPreviousWeekDates () {
      this.nowDate = [];
      this.syz = []
      if (this.y > 0) {
        this.y = this.y - 1
      }
      this.i = this.i + 1
      let weeksAgo = this.i
      let today = new Date()
      if (this.xyz.length > 0) {
        today = new Date(this.xyz[0].nyr)
      }
      let firstDayOfWeek = today.getDate() - today.getDay() + (today.getDay() === 0 ? -6 : 1) // 获取本周的第一天
      let startingDate = new Date(today.setDate(firstDayOfWeek))

      let weekDates = []

      for (let i = 0; i < weeksAgo; i++) {
        startingDate.setDate(startingDate.getDate() - 7) // 递减起始日期

        for (let j = 0; j < 7; j++) {
          let currentDate = new Date(startingDate)
          currentDate.setDate(startingDate.getDate() + j)
          weekDates.push(currentDate)
        }
      }
      let remaining = []
      if (this.i > 1) {
        remaining = weekDates.slice((this.i - 1) * 7)
      } else {
        remaining = weekDates
      }
      remaining.forEach((date) => {
        let year = date.getFullYear()
        let month = (date.getMonth() + 1).toString().padStart(2, '0')
        let day = date.getDate().toString().padStart(2, '0')
        let dayOfWeek = new Intl.DateTimeFormat('zh-CN', { weekday: 'long' }).format(date)
        this.syz.push({
          nyr: year + '-' + month + '-' + day,
          xq: dayOfWeek
        })
        this.nowDate.push({
          nyr: year + '-' + month + '-' + day,
          xq: dayOfWeek
        })
        console.log(year + '-' + month + '-' + day + ' (' + dayOfWeek + ')')
        // console.log(this.syz)
      })

      return weekDates
    },

    getNextWeekDates () {
      this.xyz = [];
      this.nowDate = [];
      if (this.i > 0) {
        this.i = this.i - 1
      }
      this.y = this.y + 1 // 将 this.i 的值加 1
      let weeksAgo = this.y
      let today = new Date()
      if (this.syz.length > 0) {
        today = new Date(this.syz[6].nyr)
      }
      let firstDayOfWeek = today.getDate() - today.getDay() + (today.getDay() === 0 ? -6 : 1) // 获取本周的第一天
      let startingDate = new Date(today.setDate(firstDayOfWeek))

      let weekDates = []

      for (let i = 0; i < weeksAgo; i++) {
        startingDate.setDate(startingDate.getDate() + 7) // 递增起始日期
        for (let j = 0; j < 7; j++) {
          let currentDate = new Date(startingDate)
          currentDate.setDate(startingDate.getDate() + j)
          weekDates.push(currentDate)
        }
      }
      let remaining = []
      if (this.y > 1) {
        remaining = weekDates.slice((this.y - 1) * 7) // 获取下一周的日期
      } else {
        remaining = weekDates
      }

      remaining.forEach((date) => {
        let year = date.getFullYear()
        let month = (date.getMonth() + 1).toString().padStart(2, '0')
        let day = date.getDate().toString().padStart(2, '0')
        let dayOfWeek = new Intl.DateTimeFormat('zh-CN', { weekday: 'long' }).format(date)
        this.xyz.push({
          nyr: year + '-' + month + '-' + day,
          xq: dayOfWeek
        })
        // console.log(this.xyz)
        this.nowDate.push({
          nyr: year + '-' + month + '-' + day,
          xq: dayOfWeek
        })
        console.log(year + '-' + month + '-' + day + ' (' + dayOfWeek + ')')
      })

      return weekDates
    }

  },
};
</script>
<style lang="scss" scoped>
/* 为所有具有滚动条的元素自定义滚动条样式 */
::-webkit-scrollbar {
  width: 2px; /* 设置滚动条的宽度 */
}
.title-name {
  display: flex;
  align-items: center;
  .sign {
    width: 5px;
    height: 18px;
    background-color: #3461ff;
  }
  .text {
    margin-left: 10px;
    font-weight: 900;
  }
}
// 日期
.date-box {
  display: flex;
  .btn-box {
    display: flex;
    margin: 0 auto;
    align-items: center;
    .date {
      font-weight: 900;
      margin: 0 10px;
    }
  }
  .save-box {
  }
}
// 图例
.legend-box {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin: 10px 0;
  .single-box {
    display: flex;
    margin-right: 10px;
    align-items: center;
    .single {
      display: flex;
      margin-right: 10px;
      align-items: center;
      .round {
        cursor: pointer;
        width: 26px;
        height: 26px;
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 50%;
        & > span {
          color: #fff;
          font-size: 16px;
          text-align: center;
        }
      }
      .zname {
        margin-left: 5px;
      }
    }
  }

  .status-box {
    font-weight: 900;
  }
}
// 表格
.table-box {
  display: flex;
  flex-wrap: wrap;
  .day-box {
    width: 25%;
    position: relative;
    height: 400px;
    border: 1px solid rgba(211, 207, 207, 1);
    .top {
      text-align: center;
      height: 30px;
      width: 100%;
      font-weight: 900;
      line-height: 30px;
      border-bottom: 1px solid rgba(211, 207, 207, 1);
      background-color: rgb(241, 244, 250);
    }
    .infolist {
      width: 100%;
      height: 340px;
      overflow: scroll;
      .onelist {
        height: 40px;
        width: 100%;
        position: relative;
        line-height: 40px;
        padding: 0 15px;
        color: #fff;
        // background-color: #3461ff;
        border-bottom: 1px solid rgba(211, 207, 207, 1);
        // margin: 1px 0;
        & > img {
          cursor: pointer;
          width: 15px;
          height: 13px;
          position: absolute;
          top: 0;
          left: 0;
        }
        .info-name {
          width: 80%;
          overflow: hidden; /* 确保超出容器的文本被裁剪 */
          white-space: nowrap; /* 确保文本在一行内显示 */
          text-overflow: ellipsis; /* 使用省略号表示文本超出 */
        }
        .czbtn {
          // color: red;
          position: absolute;
          right: 5px;
          top: 5px;
        }
      }
    }
    .add-btn {
      position: absolute;
      bottom: 0;
      padding: 0 60px 0 80px;
      color: #3461ff;
      justify-content: space-between;
      display: flex;
      height: 40px;
      line-height: 40px;
      width: 100%;
      border-top: 1px solid rgba(211, 207, 207, 1);
      .view-all {
        cursor: pointer;
      }
      .fhj {
        cursor: pointer;
        font-size: 26px;
        font-weight: 900;
      }
    }
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1885810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

向openHarmony设备添加gdb调试工具

1. 下载gdb源码 国内从官网下载源码比较慢&#xff0c;可以从清华的镜像网站&#xff08;清华大学开源软件镜像站 | Tsinghua Open Source Mirror&#xff09;上下载。下载地址&#xff1a; Index of /gnu/gdb/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择…

喜讯|华院计算认知智能引擎算法平台荣登BPAA大赛创新组TOP50

6月25日&#xff0c;备受瞩目的BPAA第四届全球应用算法模型典范大赛&#xff08;以下简称“BPAA大赛”&#xff09;正式揭晓了《第四届全球应用算法模型典范大赛创业组TOP50榜单》和《第四届全球应用算法模型典范大赛创新组TOP50榜单》。其中&#xff0c;华院计算技术&#xff…

Python课程设计:python制作俄罗斯方块小游戏

基于python的俄罗斯方块小游戏 目录 基于python的俄罗斯方块小游戏 1.概述 1.1 摘要 1.2 开发背景 1.3 开发环境 1.4 实现功能 2.代码描述 2.1 模块导入 2.2 初始化变量 2.3 播放音乐 2.4 创建方块类 2.5 绘制游戏地图 2.6 游戏初始化 2.7 绘制有边框矩形 2.8 …

go使用grpc编辑器 windows

先看最后效果&#xff1a; 当我执行 protoc --go_out. proto.proto 会生成proto.pb.go文件&#xff0c;主要存储的是封装好的结构体 执行 protoc --go-grpc_out. proto.proto 会生成对应的方法 那么现在提供解决方案&#xff1a; https://github.com/protocolbuffers…

kafka的架构

一、架构图 Broker&#xff1a;一台 kafka 服务器就是一个 broker。一个kakfa集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 Producer&#xff1a;消息生产者&#xff0c;就是向 kafka broker 发消息的客户端 Consumer&#xff1a;消息消费者&#xff0c;向 kafk…

软考中级系统集成项目管理工程师备考笔记

目录 一&#xff0c;通用内容 &#xff08;一&#xff09;信息与信息化 1.1&#xff0c;信息 信息基本概念 信息的传输模型 信息的质量属性 1.2&#xff0c;信息系统 信息系统的基本概念 信息系统定义 信息系统集成 1.3&#xff0c;信息化 信息化层次 信息化的核心…

Prometheus在金融行业信息系统运维管理中的应用:实践与案例分析

Prometheus在金融行业信息系统运维管理中的应用&#xff1a;实践与案例分析 Prometheus是一款开源的监控系统和时序数据库&#xff0c;被广泛应用于各种行业的运维管理中&#xff0c;特别是在金融行业。它具有强大的数据采集和分析能力&#xff0c;能够实时监控系统的性能和状…

华为eNSP模拟器安装详细步骤

安装准备 安装eNSP需要先安装三个依赖软件才能运行&#xff0c;分别是VirtualBox、WinPcap、Wireshark 下载地址如下 eNSP&#xff1a;http://cloud.rsecc.cn/softlink/eNSP%20V100R003C00SPC100%20Setup.exe VirtualBox&#xff1a;http://cloud.rsecc.cn/softlink/Virtua…

Steam页面打不开?steam显示当前游戏不可用是怎么回事

Steam是全球最大的游戏综合发行平台&#xff0c;每年为无数玩家呈现了多款精彩游戏&#xff0c;不过由于网络问题或其他异常因素影响&#xff0c;有很多玩家会在访问steam或steam的游戏商品页时&#xff0c;遇到Steam提示当前游戏在您平台不可用、打不开游戏页面的情况&#xf…

自动化测试报告pytest-html样式美化

最近我将 pytest-html 样式优化了 一版 先看优化前&#xff1a; 优化后&#xff1a; 优化内容包括&#xff1a; 删除部分多余字段新增echart图表部分字体大小、行间距、颜色做了美化调整运行环境信息移至报告最后部分字段做了汉化处理&#xff08;没全部翻译是因为&#xf…

七天速通javaSE:第七天 面向对象:封装继承与多态

文章目录 前言一、封装1. 属性私有2. get&#xff0c;set3. 修饰符的可访问性4. 特点总结 二、继承1. 子承父业&#xff1a;extends2. 区分父子&#xff1a;super2.1 属性2.2 方法重写 三、多态&#xff08;不同类继承同一个类&#xff09; 前言 一、封装 概念&#xff1a;封装…

等保测评应该选择什么样的SSL证书

选择适合等保测评的SSL证书&#xff0c;需考虑证书的加密强度、认证机制以及是否满足国家相关的密码技术要求 1、证书类型&#xff1a;应选择符合国家或行业标准的SSL证书&#xff0c;这些证书通常采用RSA、DSA或ECC等国际认可的加密算法。同时&#xff0c;考虑到国内特定的合规…

IP地址修改方法攻略:类型、步骤与注意事项

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;其重要性不言而喻。然而&#xff0c;在某些特定场景下&#xff0c;如保护个人隐私、绕过网络限制或实现特定网络访问需求&#xff0c;修改IP地址就显得尤为关键。本文将详细介绍IP地址修改方法有哪几种类型…

13. Java 生产者与消费者案例

1. 前言 本节内容是通过之前学习的 synchronized 关键字&#xff0c;实现多线程并发编程中最经典的生产者与消费者模式&#xff0c;这是本节课程的核心内容&#xff0c;所有的知识点都是围绕这一经典模型展开的。本节有如下知识点&#xff1a; 生产者与消费者模型介绍&#x…

昇思25天学习打卡营第13天 | SSD目标检测

模型简介 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD对于输入尺寸300x300的网络&#xff0c;达到74.3%mAP(mean Average Precision)以及59FPS&#x…

周界入侵自动监测摄像机

当今&#xff0c;随着科技的快速发展&#xff0c;周界入侵自动监测摄像机作为安全监控领域的重要创新&#xff0c;正逐渐成为各类场所安全防范的核心设备。这种摄像机以其先进的监测和预警功能&#xff0c;有效提升了安全管理的效率和实时响应能力&#xff0c;被广泛应用于各类…

电子看板,帮助工厂实现数字化管理

在数字化浪潮的推动下&#xff0c;制造业正经历着深刻的变革&#xff0c;数字工厂成为了行业发展的新趋势。而生产管理看板作为一种重要的管理工具&#xff0c;在提升数字工厂管理效率方面发挥着关键作用。 生产管理看板通过实时数据的展示&#xff0c;为数字工厂提供了清晰的全…

【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(1)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Windows10录屏,教你3个方法,简单快速录屏

“我的电脑系统是Windows10的系统&#xff0c;今晚要进行线上开会&#xff0c;但我实在有事没办法参加会议&#xff0c;想把会议的内容录制下来方便我后续观看。但却找不到电脑录屏功能在哪里打开&#xff1f;求助一下&#xff0c;谁能帮帮我&#xff1f;” 在数字化时代&…

软考 有向图 数据库之关系模式范式

假设有一个关系 R(A, B, C, D)&#xff0c;并且已知以下函数依赖&#xff1a; A → B B → C BC → D 求候选键? 求候选码? 候选键/候选码 是同一个概念. 数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。 https://cloud.tencent.com/developer/article/2055118 2NF在1NF的基础…