vue表单筛选

news2024/11/17 9:32:10

目录

筛选

HTML

scss*

filterComp

排序

表格

自定义数据样式

inner-table

分页

删除

default-modal

自定义元素的插槽-占位符


.search-wrap {
  height: 60px;
  display: flex;
  align-items: center;
  overflow: hidden;
  padding: 0 20px;

  .selected-options-wrap {
    flex: 1;

    .clear-btn {
      display: inline-block;
      text-align: center;
      color: #dd2100;
      margin-left: 12px;
      padding: 0 6px;
      border-radius: 4px;
      background-color: rgba(221, 33, 0, .1);
      cursor: pointer;
    }
  }

  .mds-tag {
    padding-right: 0;
    margin-left: 8px;
    border-radius: 4px;
    border: 1px solid #d9ecff;
    cursor:default;

    .mds-btn {
      height: auto;
    }
  }

  .mds-input-search {
    width: 240px;

    ::v-deep .mds-input {
      border-radius: 4px;
    }
  }

  .filter-btn {
    margin-left: 12px;
    position: relative;
    
    .mds-btn {
      padding: 0;
      width: 32px;
      height: 32px;
    }

    .filter-count {
      width: 18px;
      height: 18px;
      line-height: 18px;
      text-align: center;
      position: absolute;
      top: -9px;
      right: -9px;
      color: #fff;
      background-color: #0364ff;
      border-radius: 50%;
    }

    .filter-icon {
      width: 28px;
      height: 28px;
      object-fit: cover;
      position: relative;
      top: 1px;
    }

    .filter-num {
      position: absolute;
      top: -10px;
      right: -2px;
      width: 16px;
      height: 16px;
      border-radius: 50%;
      background-color: #1564ff;
      color: #fff;
      font-size: 12px;
      line-height: 16px;
    }
  }
}

filterComp

<template>
  <mds-drawer
    title="条件筛选"
    :visibility="visibility"
    size="720px"
    @close="cancelFilterDrawer"
  >
    <mds-form label-width="100px" :model="filterList" label-position="right">
      <mds-form-item label="发布状态">
        <mds-select placeholder="发布状态" style="width: 100%" clearable v-model="filterList.releStat">
          <mds-option label="未发布" value="0" />
          <mds-option label="已发布" value="1" />
        </mds-select>
      </mds-form-item>
...

      <mds-form-item label="更新时间">
        <mds-date-picker
          v-model="timeArr"
          type="daterange"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          format="yyyy-MM-dd"
          value-format="yyyy-MM-dd"
          @change="changeTime"
        ></mds-date-picker>
      </mds-form-item>
    </mds-form>

    <template slot="footer">
      <mds-button @click="cancelFilterDrawer">取消</mds-button>
      <mds-button type="primary" @click="saveFilter">确认</mds-button>
    </template>
  </mds-drawer>
</template>

<script lang="ts">
import { Component, Vue, Prop } from 'vue-property-decorator'

@Component({
  components: {}
})
export default class FilterComp extends Vue {
  @Prop({ required: true }) private visibility!: boolean

  timeArr = []

  filterList: any = {
    moduTyp: '', // 模块
    releStat: "", //发布状态
    updateStartDate: '',
    updateEndDate: ''
  }

  // 修改时间
  changeTime(val: any) {
    this.filterList.updateStartDate = val ? val[0] : ''
    this.filterList.updateEndDate = val ? val[1] : ''
  }

  // 清除选项
  clearOptions(option: string) {
    if (option === 'all') {
      this.filterList = {}
      this.timeArr = []
    } else if (option === 'time') {
      this.filterList.updateStartDate = ''
      this.filterList.updateEndDate = ''
      this.timeArr = []
    } else {
      this.filterList[option] = ''
    }

    this.saveFilter()
  }

  // 取消筛选
  cancelFilterDrawer() {
    this.$emit('update:visibility', false)
  }

  // 保存筛选
  saveFilter() {
    const data = {
      ...this.filterList
    }

    this.$emit('changeFilter', data)
    this.cancelFilterDrawer()
  }
}
</script>

<mds-option label="未发布" value="0" />  string

<mds-option label="未发布" :value="0" /> number

排序

<el-table :data="tableData" header-row-class-name="table-header" @sort-change="sortChange">
....
</el-table>
 confirmpageQuery() {
    this.loading = true
    const params = {
      pageNum: this.pageInfo.currentPage,
      pageSize: this.pageInfo.pageSize,
      moduTyp: '',
      releStat: "",
      fuzzySearch: this.searchVal,
      updateStartDate: "",
      // updateEndDate: "",
      updateEndDate: "",
      ...this.filterData,
      ...this.sortProps
    }

    confirmpageQuery(params).then((res: any) => {
      if (res && res.code == 200) {
        this.pageInfo.total = res.data.totalElements
        this.tableData = res.data.data || []
        this.permissionMap = res.data.permissionMap || {}
      }
    }).catch((e: any) => {
      this.$message.error(e && e.msg)
    }).finally(() => {
      this.loading = false
    })
  }

class YourClass {
  // 定义 sortProps 对象,用于存储排序属性的状态
  sortProps: any = {
    versionNumSort: '',
    releStatSort: '',
    updateDateSort: ''
  }

  // sortChange 方法用于处理排序变化
  sortChange(arguments: any) {
    const { column, prop, order } = arguments

    // 定义 orderVal 对象,用于存储排序方式的值(升序和降序)
    const orderVal: any = {
      ascending: 1,
      descending: 0
    }

    // 定义 propName 对象,用于映射排序属性和 sortProps 对象的属性名
    const propName: any = {
      versionNum: 'versionNumSort',
      releStat: 'releStatSort',
      updTm: 'updateDateSort'
    }

    // 将 sortProps 对象中所有属性的值初始化为空,以便重新设置排序状态
    for (let key in this.sortProps) {
      this.sortProps[key] = ''
    }

    // 根据传入的排序属性和排序方式,更新 sortProps 对象中对应的属性值
    this.sortProps[propName[prop]] = orderVal[order]

    // 调用 confirmpageQuery 方法,可能是用于触发其他逻辑或执行查询等操作
    this.confirmpageQuery()
  }

  // 定义 confirmpageQuery 方法,可能是其他逻辑处理的入口
  confirmpageQuery() {
    // 在这里执行其他逻辑或查询操作
    // ...
  }
}

表格

      <el-table :data="tableData" header-row-class-name="table-header" @sort-change="sortChange">
        <!-- 展开 -->
        <el-table-column width="30" type="expand" class-name="expend-row">
          <!-- 自定义样式slot-scope="scope" {{ scope_sub.row.confmVersion }} -->
          <template slot-scope="scope">
            <el-table :data="scope.row.confmReleVOS" style="width: 100%;margin: 0;" class="inner-table">
              <!-- 缩进 -->
              <el-table-column width="30"></el-table-column>
              <el-table-column prop="confmVersion" label="版本号" width="120">
                <template slot-scope="scope_sub">
                  <div>
                    {{ scope_sub.row.confmVersion }}
                    <span v-if="scope_sub.row.isCurrentVersion" class="version-current">当前版本</span>
                  </div>
                </template>
              </el-table-column>

              <el-table-column prop="name" label="生效区间" width="220">
                <template slot-scope="scope_sub">
                  {{ scope_sub.row.effectiveDateRange }}
                </template>
              </el-table-column>

              <el-table-column prop="releName" label="发布名称" />
              <!-- show-overflow-tooltip在用户将鼠标悬停在容器上时显示一个工具提示,以显示溢出的内容 -->
              <el-table-column prop="releDesc" label="发布说明" show-overflow-tooltip />

              <el-table-column label="操作" width="150">
                <template slot-scope="scope_sub">
                  <!-- <span v-if="permissionMap.hasWorkbenchPageReleaseViewPer" class="table-operate" @click="toDetail(scope.row, scope_sub.row)">查看</span> -->
                  <span class="table-operate" @click="toDetail(scope.row, scope_sub.row)">查看</span>
                </template>
              </el-table-column>
            </el-table>
          </template>
        </el-table-column>

        <el-table-column prop="confmNm" label="数据确认版本名称" min-width="120" show-overflow-tooltip />
        <el-table-column prop="moduTyp" label="模块" width="170" />

        <el-table-column prop="releStat" label="当前状态" sortable="custom" width="120">
          <template slot-scope="scope">
            <div :class="{ 'status-published': scope.row.releStat === 1, 'status-unpublished': scope.row.releStat === 0 }">
              {{ scope.row.releStatNm }}
            </div>
            <!-- <div class="status-published" v-if="scope.row.releStat === 1">{{ scope.row.releStatNm }}</div>
            <div class="status-unpublished" v-if="scope.row.releStat === 0">{{ scope.row.releStatNm }}</div> -->
          </template>
        </el-table-column>

        <el-table-column prop="versionNum" label="版本数" sortable="custom" width="90" />
        <el-table-column prop="creator" label="创建人" width="120" />
        <el-table-column prop="updTm" label="更新时间" width="180" sortable="custom" />

        <!-- <el-table-column label="操作" width="220">
          <template slot-scope="scope">
            <span v-if="permissionMap.hasWorkbenchPageConfigEditPer" class="table-operate" @click="toEdit(scope.row)">编辑</span>
            <span v-if="permissionMap.hasWorkbenchPageConfigReleasePer" class="table-operate" @click="handlePublish(scope.row)">{{ scope.row.releStat === 0 ? '发布' : scope.row.releStat === 1 ? '再次发布' : '' }}</span>
            <span v-if="permissionMap.hasWorkbenchPageConfigDeletePer" class="table-operate" @click="handleDelete(scope.row)">删除</span>
          </template>
        </el-table-column> -->

        <el-table-column label="操作" width="220">
          <template slot-scope="scope">
            <span class="table-operate" @click="toEdit(scope.row)">编辑</span>
            <span class="table-operate" @click="handlePublish(scope.row)">{{ scope.row.releStat === 0 ? '发布' : scope.row.releStat === 1 ? '再次发布' : '' }}</span>
            <span class="table-operate" @click="handleDelete(scope.row)">删除</span>
          </template>
        </el-table-column>
      </el-table>

自定义数据样式

        <el-table-column prop="releStat" label="当前状态" sortable="custom" width="120">
          <template slot-scope="scope">
            <div :class="{ 'status-published': scope.row.releStat === 1, 'status-unpublished': scope.row.releStat === 0 }">
              {{ scope.row.releStatNm }}
            </div>
        </el-table-column>

inner-table

分页

删除

loading

 

 添加slot=footer覆盖原有样式

 

default-modal

<template>
  <mds-modal
    class="confirm-delete-modal"
    :class="{ 'confirm-delete-modal-warning': type === 'warning' }"
    :visibility="visibility"
    :title="title"
    :width="width"
    :show-close="false"
  >
    <div v-if="content" class="content">{{ content }}</div>
    <slot></slot>

    <span slot="footer" class="mds-dialog-footer">
      <mds-button @click="footActionClick('cancel')">{{ cancelText }}</mds-button>
      <mds-button
        type="primary"
        :loading="loading"
        @click="footActionClick('confirm')"
      >
        <mds-icon v-if="loading" type="line-sync" class="mds-btn-right" spin />
        {{ confirmText }}
      </mds-button>
    </span>
  </mds-modal>
</template>

<script lang="ts">
import { Component, Prop, Vue, Watch } from 'vue-property-decorator'

@Component({
  components: {}
})
export default class defaultModal extends Vue {
  @Prop({ required: true }) private visibility!: boolean
  // ! 表示非空断言,告诉 TypeScript 该属性不会为 null 或 undefined
  @Prop({ required: true }) private title!: string
  // ?: string 表示 content 是一个可选的属
  @Prop() private content?: string
  @Prop({ default: '420px' }) private width!: string
  @Prop({ default: false }) private showClose!: boolean
  @Prop({ default: '确定' }) private confirmText!: string
  @Prop({ default: '取消' }) private cancelText!: string
  @Prop({ default: 'normal' }) private type!: string
  @Prop({
    default: () => {
      return (cb: any) => {
        cb && cb()
      }
    }
  })
  private confirmCb!: any

  @Prop({
    default: () => {
      return (cb: any) => {
        cb && cb()
      }
    }
  })
  private cancelCb!: any

  private loading = false

  private loadingIns = {
    start: this.changeLoading.call(this, true),
    end: this.changeLoading.call(this, false)
  }

  private changeLoading(bool = false): any {
    return () => {
      this.loading = bool
    }
  }

  private footActionClick(type = 'cancel'): void {
    if (this.loading) return
    const cb = () => {
      this.$emit('update:visibility', false)
    }
    if (type === 'cancel') {
      this.cancelCb(cb, this.loadingIns)
    }
    if (type === 'confirm') {
      this.confirmCb(cb, this.loadingIns)
    }
  }

  private handleClose(done: any): void {
    if (this.loading) return
    this.$emit('update:visibility', false)
  }
}
</script>

<style lang="scss" scoped>
// ::v-deep .mds-modal-mask, .mds-modal-wrap {
//   z-index: 2000;
// }
.confirm-delete-modal {
  ::v-deep {
    .mds-modal-title {
      display: flex;
      align-content: center;
      // &::before {
      //   content: '\EBD2';
      //   color: #3370ff;
      //   display: inline-block;
      //   font-family: 'mdsicon';
      //   font-size: 22px;
      //   margin-right: 16px;
      // }
    }

    .mds-modal-bottom {
      border: none;
    }
  }

  .content {
    padding-left: 38px;
  }
}

.confirm-delete-modal-warning {
  // ::v-deep .mds-modal-title {
  //   &::before {
  //     content: '\EBC9';
  //     color: #f80;
  //   }
  // }

  .mds-dialog-footer {
    margin-top: 16px;
    font-size: 14px;
    text-align: right;

    // .mds-btn {
    //   font-size: 12px;
    //   height: 28px;
    //   line-height: 20px;
    //   min-width: 48px;
    //   padding: 3px 7px;
    //   color: #383c41;

    //   &:hover {
    //     background-color: #eee;
    //     border-color: #d9d9d9;
    //   }

    //   &:last-child {
    //     color: #f54a45;
    //     border-color: #f54a45;

    //     &:hover {
    //       background-color: rgb(255, 233, 233);
    //     }
    //   }
    // }

    .mds-btn-loading {
      background-color: transparent;
    }
  }
}

::v-deep .mds-modal-body {
  min-height: 0;
}
</style>

自定义元素的插槽-占位符

<!-- 自定义元素定义 -->
<custom-element>
  <h1><slot></slot></h1>
  <p>This is some default content.</p>
</custom-element>

<!-- 使用自定义元素 -->
<custom-element>
  Hello, I am inserted into the slot!
</custom-element>

 

<!-- 删除二次确认弹窗 -->
    <default-modal :visibility.sync="defaultModalInfo.visibility" :type="defaultModalInfo.type"
      :title="defaultModalInfo.title" :content="defaultModalInfo.content" :confirm-text="defaultModalInfo.confirmText"
      :cancel-text="defaultModalInfo.cancelText" :confirm-cb="defaultModalInfo.confirmCb">
      <div>
        <mds-icon type="fill-solid-exclamation-circle" style="color:#e6a23c;font-size:18px" />
        确定要删除数据吗?
      </div>
    </default-modal>
// 删除
handleDelete(row: any) {
  // 创建一个对象来设置模态框的信息
  this.defaultModalInfo = {
    visibility: true,     // 设置模态框可见性为true,即显示模态框
    type: 'warning',      // 设置模态框类型为警告,可以根据需要修改为其他类型
    title: '提示',        // 设置模态框标题为'提示'
    content: '',          // 设置模态框内容为空,可以根据需要填充具体的提示信息
    confirmText: '确定',  // 设置确认按钮文本为'确定'
    cancelText: '取消',   // 设置取消按钮文本为'取消'
    // @ts-ignore: 不可达代码错误(这里是为了忽略可能出现的编译错误,因为后面的 confirmCb 函数在当前环境下可能无法触发)
    confirmCb: (...args: any) => this.confirmDelete(row.id, ...args) // 设置确认按钮点击后的回调函数,传入当前行的id以及可能的其他参数
  };
}

// 确认删除
private async confirmDelete(id: number, cb: any, loadingIns: any) {
  // 如果loadingIns存在并且具有start方法,则调用它,用于开始加载状态
  loadingIns && loadingIns.start && loadingIns.start();

  // 调用服务器端接口执行删除操作,传入id参数
  const res: any = await confirmpageDelete(id);

  // 如果loadingIns存在并且具有end方法,则调用它,用于结束加载状态
  loadingIns && loadingIns.end && loadingIns.end();

  // 如果服务器返回结果为空或者code不等于200,则删除失败,不做任何操作
  if (!res || res.code != 200) {
    // 可以根据需要,使用某种方式显示删除失败的提示信息,这里是注释掉的代码
    // this.$message.error(res && res.msg)
    return;
  }

  // 如果传入了回调函数cb,则执行回调函数
  cb && cb();

  // 使用消息框提示删除成功
  this.$message.success('删除成功');

  // 调用刷新列表的方法,以更新数据
  this.confirmpageQuery();
}

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

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

相关文章

PostgreSQL数据库中,查询时提示表不存在的解决办法

最近遇到一个奇怪的问题&#xff0c;以前从来没有遇到过&#xff0c;在postgres SCHEMA下执行select * from table1语句时&#xff0c;提示表不存在&#xff0c;而实际这个表确是存在的&#xff0c;只不过是在public SCHEMA下。在public SCHEMA下执行这个sql语句是没有问题的。…

主成分分析PCA算法

Principal Components Analysis 这个协方差矩阵是一个nXn的&#xff0c;且是对称矩阵&#xff0c;就会有n个特征值λ和特征向量v&#xff0c;每个特征向量也是n维的。第一行特征向量v对应特征值λ1 。 D(yk)&#xff1a;表示主成分yk的方差。方差越大&#xff0c;说明携带的信…

如何在不使用脚本和插件的情况下手动删除 3Ds Max 中的病毒?

如何加快3D项目的渲染速度&#xff1f; 3D项目渲染慢、渲染卡顿、渲染崩溃&#xff0c;本地硬件配置不够&#xff0c;想要加速渲染&#xff0c;在不增加额外的硬件成本投入的情况下&#xff0c;最好的解决方式是使用渲云云渲染&#xff0c;在云端批量渲染&#xff0c;批量出结…

【迁移】Mysql数据库备份 迁移

【迁移】Mysql数据库备份 迁移 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有…

金蝶云星空任意文件读取漏洞复现(0day)

0x01 产品简介 金蝶云星空是一款云端企业资源管理&#xff08;ERP&#xff09;软件&#xff0c;为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织&#xff0c;多利润中心的大中型企业&#xff0c;以 “开放、标准、社交”三大特性为数字…

【Linux】 UDP网络套接字编程

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统网络编程 文章目录 一、网络通信的本质&#xff08;port标识的进程间通信&#xff09;二、传输层协议UDP/TCP认识传输层协议UDP/TCP网络字节序问题&#xff08;规定大端&#xff09; 三、socket编…

ClickHouse的安装启动

安装步骤 1.关闭防火墙 2.修改资源限制配置文件 2.1 路径&#xff1a;/etc/security/limits.conf 在末尾添加&#xff1a; * soft nofile 65536 #任何用户可以打开的最大的文件描述符数量&#xff0c;默认1024 这里的设置会限制tcp连接数 * hard nofile 65536 * soft nproc…

什么是架构 架构图

如何画架构图_个人渣记录仅为自己搜索用的博客-CSDN博客 什么是架构&#xff1f;要表达的到底是什么&#xff1f; Linus 03 年在聊到拆分和集成时有一个很好的描述&#xff1a; I claim that you want to start communicating between independent modules no sooner than you…

【指针三:穿越编程边界的超能力】

本章重点 9.指针和数组面试题的解析 10. 指针笔试题 九、指针和数组面试题的解析 1、一维数组的sizeof #include<stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n", s…

探索运营商渠道佣金数字化运营

当前全球经济增长放缓&#xff0c;行业竞争持续加剧已是常态&#xff0c;用户需求越发苛刻、经营成本不断上升。内忧外患&#xff0c;企业经营如何突围&#xff1f;越来越多的企业发现&#xff0c;融合数字化技术的IT解决方案为企业提供了一种解决问题的可能。 数字化运营可以帮…

反转链表(JS)

反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&…

809协议

809协议 目录概述需求&#xff1a; 设计思路实现思路分析1.809协议数据流——链路管理类 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,…

【吐槽贴】项目居然因为采购管理失控被迫暂停了?

最近&#xff0c;手上的一个大型项目好不容易解决了进度延误、范围蔓延、质量不过关等难点&#xff0c;结果差点掉进了成本失控的坑里。没想到咱项目经理还要全权负责项目的采购管理&#xff0c;必须要分享出来&#xff0c;让大家避避雷。 先给大家介绍一下背景&#xff1a; 我…

ns3.39编译时报错与解决_包括netanim-3.109(NetAnim)

ns&#xff08;来源于“network simulator”&#xff09;是一系列离散事件网络模拟器&#xff0c;包括ns-1、ns-2和ns-3。他们主要应用于研究和教学。ns-3是自由软件&#xff0c;以GNU GPLv2协议分发。​——百度百科 熟悉ns的朋友都知道&#xff0c;使用build.py编译时会先编…

【HttpRunnerManager】搭建接口自动化测试平台实战

目录 一、需要准备的知识点 二、我搭建的环境 三、搭建过程 四、访问链接 五、两个问题点 【整整200集】超超超详细的Python接口自动化测试进阶教程&#xff0c;真实模拟企业项目实战&#xff01;&#xff01; 一、需要准备的知识点 1. linux: 安装 python3、nginx 安装和…

ssl证书费用

SSL证书是一种广泛应用于网站的安全协议&#xff0c;可以确保网站上所有传输的数据加密&#xff0c;避免数据的泄露和篡改。因此&#xff0c;许多网站都会申请SSL证书来保护用户数据的安全性。不过&#xff0c;SSL证书的申请会涉及到费用问题&#xff0c;因此需要考虑一些费用方…

真空电子管、晶体管DRAM

文章目录 1. 导读读完这篇文章&#xff0c;你可以回答什么&#xff1f; 2. 起源3. Q1->A14. Q2->A25. Q3->A36. Reference7. 声明 1. 导读 读完这篇文章&#xff0c;你可以回答什么&#xff1f; 什么是真空电子管&#xff1f;真空电子管的基本原理&#xff1f;为什么…

【MIPI协议 D-PHY基础介绍】

MIPI协议 D-PHY基础介绍 前言一、MIPI介绍1.1 D-PHY MIPI 简单介绍1.2 C-PHY MIPI 简单介绍1.3 M-PHY MIPI 简单介绍 二、D-PHY具体介绍2.1 DSI分层结构2.2 D-PHY电气特性介绍2.3 D-PHY 工作模 三、LINE线上的模式3.1 line线上 state code3.2 high speed data line传输3.3 Low …

后端技术趋势指南|如何选择自己的技术方向

编程多条路&#xff0c;条条通罗马 后台大佬 后台路线都是面对后台服务器业务&#xff0c;比如web后台服务器&#xff0c;视频后台服务器&#xff0c;搜索后台服务器&#xff0c;游戏后台服务器&#xff0c;直播后台服务器&#xff0c;社交IM后台服务器等等&#xff0c;大部分…

全球宕机!以色列最大的炼油厂遭遇黑客攻击

以色列最大的炼油厂运营商BAZAN Group的网站遭遇黑客入侵&#xff0c;全球大范围宕机。 BAZAN集团总部位于海法湾&#xff0c;前身为石油精炼厂有限公司&#xff0c;每年原油炼化规模约980万吨&#xff0c;年收入超135亿美元&#xff0c;员工超过1800人。 BAZAN网站被切断网络…