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

安装拖拽插件 

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.mfbz.cn/a/764516.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打假“AI换脸”,外滩大会·全球Deepfake攻防挑战赛启动报名

近日&#xff0c;外滩大会全球Deepfake攻防挑战赛正式启动报名。该赛事提供百万级的数据集&#xff0c;针对“AI换脸”的欺诈风险进行攻防实战演练&#xff0c;并设立100万元人民币的奖金池&#xff0c;鼓励推动AI向善的技术人才。 大赛由蚂蚁集团主办、蚂蚁数科承办&#xff0…

JeecgFlow定时器

概念 定时器事件&#xff08;Timer Events&#xff09;是由定义的计时器触发的事件。它们可以用作启动事件、中间事件或边界事件。边界事件可以中断&#xff0c;也可以不中断。 Camunda定时器事件包括&#xff1a;Timer Start Event&#xff08;定时启动事件&#xff09;、Time…

Unity解决报错:Execution failed for task ‘:unityLibrary:BuildIl2CppTask‘

目录 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报错(虽然会自动生成temp的AS工程&#xff0c;经过打开验证 也是无解的)&#xff1b; 唯一解决办法&#xff1a;Unity导出As工程没问题&#xff1b; 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报…

野外/工地车流计数摄像头,单人即可安装,简单低成本

在野外或工地这样的特殊环境中&#xff0c;对车流进行准确计数对于交通管理、资源调配以及安全保障都具有重要意义。而野外/工地车流计数摄像头的出现&#xff0c;以其单人即可安装、简单低成本的特点&#xff0c;为解决这些场景中的车流统计问题提供了理想的解决方案。 一、野…

《Linux开发笔记》C语言编译过程

C语言编译过程 编译过程主要分为四步&#xff1a;预处理、编译、汇编、链接 预处理&#xff1a;主要用于查找头文件、展开宏 编译&#xff1a;把.i文件编译成.s文件 汇编&#xff1a;把.s文件汇编为.o文件 链接&#xff1a;把多个.o文件链接成一个app 以上四个步骤主要由3个命…

外贸企业选择什么网络?

随着全球化的深入发展&#xff0c;越来越多的国内企业将市场拓展到海外。为了确保外贸业务的顺利进行&#xff0c;企业需要建立一个稳定、安全且高速的网络。那么&#xff0c;外贸企业应该选择哪种网络呢&#xff1f;本文将为您详细介绍。 外贸企业应选择什么网络&#xff1f; …

d3dx9_43.dll丢失怎么解决?d3dx9_43.dll怎么安装详细教程

在使用计算机中&#xff0c;如果遇到d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法运行打开软件怎么办&#xff1f;这个是非常常见问题&#xff0c;下面我详细介绍一下d3dx9_43.dll是什么文件与d3dx9_43.dll的各种问题以及d3dx9_43.dll丢失的多个解决方法&#xff01; 一、d3dx9…

四川赤橙宏海商务信息咨询有限公司是真的吗?

在数字经济的浪潮下&#xff0c;电商行业日新月异&#xff0c;各种创新模式层出不穷。其中&#xff0c;抖音电商以其独特的社交属性和短视频传播优势&#xff0c;迅速崛起成为电商领域的一匹黑马。在这个风起云涌的市场中&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其专…

AI网络爬虫004:从东方财富网批量获取上市公司的全部新闻资讯

文章目录 一、目标二、输入内容三、输出内容一、目标 用户输入一个上市公司名称,然后程序自动从东方财富网批量获取上市公司的全部新闻资讯 查看相关元素在源代码中的位置: 新闻标题:<a href="http://finance.eastmoney.com/a/202405233084538683.html" targ…

vue3 elementplus Springboot 课程购买系统案例源码

系统演示 项目获取地址 Springboot vue3 elementplus 课程购买系统案例源码 附带系统演示&#xff0c;环境搭建教程,开发工具 技术栈:SpringBoot Vue3 ElementPlus MybatisPlus 开发工具:idea 后端构建工具:Maven 前端构建工具:vite 运行环境:Windows Jdk版本:1.8 Nod…

云数据中心运维新纪元:让Linux服务器如虎添翼

文章目录 一、Linux系统管理的高级技巧1. 性能调优与监控&#xff1a;2. 自动化与脚本编写&#xff1a;3. 文件系统与存储管理&#xff1a; 二、服务器配置优化的策略1. 硬件选型与配置&#xff1a;2. 网络配置与优化&#xff1a;3. 应用部署与调优&#xff1a; 三、安全策略的…

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …

Nacos 2.x 系列【19】元数据管理

文章目录 1. 概述2. 元数据管理2.1 服务元数据2.2 实例元数据2.2.1 控制台2.2.2 客户端2.2.3 Open API 1. 概述 元信息&#xff1a;Nacos数据&#xff08;如配置和服务&#xff09;描述信息&#xff0c;如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (…

大数据之Zookeeper部署

文章目录 集群规划环境准备集群部署参考资料 集群规划 确定使用Hadoop101、hadoop102和hadoop103三台服务器来构建Zookeeper集群。 hadoop101hadoop102hadoop103zookeeperzookeeperzookeeper 环境准备 安装zookeeper前需要确保下面的环境配置成功&#xff0c;具体可以参考大…

DSPy:变革式大模型应用开发

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

DX-11A信号继电器 0.5A 柜内板前接线 约瑟JOSEF

DX-11,11A,11B,11C型信号继电器 DX-11信号继电器 DX-11B信号继电器 DX-11A信号继电器 DX-11C信号继电器 1 用途 该继电器用于直流操作的保护线路中&#xff0c;作为信号指示器。 2 结构和原理 该继电器具有电磁铁和带公共点的三付动合触点及一个信号牌&#xff0c;为电…

【哈尔滨等保测评标准解析】

哈尔滨信息安全等级保护测评&#xff08;等保测评&#xff09;标准解析如下&#xff1a; 一、总体概述 哈尔滨市在进行等保测评时&#xff0c;遵循国家统一的标准框架&#xff0c;并结合本省的实际情况&#xff0c;形成了具有地方特色的安全防护模式。等保测评的主要目的是确…

笔记101:OSQP求解器的底层算法 -- ADMM算法

前言1&#xff1a;这篇博客仅限于介绍拉格朗日乘子法&#xff0c;KKT条件&#xff0c;ALM算法&#xff0c;ADMM算法等最优化方法的使用以及简版代码实现&#xff0c;但不会涉及具体的数学推导&#xff1b;不过在下面我会给出具体数学推导的相关文章和截图&#xff0c;供学有余力…

数据结构_1.0

一、数据结构概述 1.1 概念 在计算机科学中&#xff0c;数据结构是一种数据组织、管理和存储的格式 。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技…

PCB中的4种接地方式

“地”是电子技术中一个很重要的概念。由于“地”的分类与作用有多种&#xff0c; 容易混淆。 电路板的GROUND&#xff08;简称GND&#xff09;&#xff0c;即电路设计中所说的“地”&#xff0c;严格来说&#xff0c;只有大地才是真正的“地”&#xff0c;电路板中的GND只是电…