狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

【W(wǎng)EB】自定義打印模板?如何實現(xiàn)拖拽元素到在線電子表格x-spreadsheet?

admin
2024年6月11日 16:10 本文熱度 1391

需求是實現(xiàn)自定義打印模板,經(jīng)過三天苦逼的調(diào)研,技術選型,分析,最佳的方式是拖拽參數(shù)變量到類Excel的電腦表格中,畢竟辦公人使用最多的就是Excel。最后選擇了x-spreadsheet,使用的是原生的HTML5拖拽API。

預覽地址: https://codepen.io/hlmcdh2023/pen/yLGgajp

頁面代碼:

<!DOCTYPE html>

<html>

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>x-data-spreadsheet電子表格</title>

  <link rel="stylesheet" href="https://unpkg.com/x-data-spreadsheet@1.1.9/dist/xspreadsheet.css">

  <script src="https://unpkg.com/x-data-spreadsheet@1.1.9/dist/xspreadsheet.js"></script>

  <script src="https://unpkg.com/x-data-spreadsheet@1.1.9/dist/locale/zh-cn.js"></script>

  <style type="text/css">

    .uni-flex {

      display: flex;

      flex-direction: row;

    }

    .uni-flex-item {

      flex: 1;

    }

    .menu-item {

      width: 200px;

    }

    .border-gray {

      border: solid 1px #DEDEDE;

    }

  </style>

</head>

<body>

<div class="uni-flex">

  <div class="menu-item">

    <ul>

      <li draggable="true" id='name'><span>【姓名】</span></li>

    </ul>

  </div>

  <div class="uni-flex-item border-gray" id="x-spreadsheet-demo"></div>

</div>

<script>

document.addEventListener('DOMContentLoaded', (evtAll) => {

  x_spreadsheet.locale('zh-cn');

  const xs = new x_spreadsheet("#x-spreadsheet-demo", {

    mode: 'edit', // edit | read

    showToolbar: true,

    showGrid: true,

    showContextmenu: true,

    view: {

      height: () => document.documentElement.clientHeight,

      width: () => document.documentElement.clientWidth - 200,

    },

    row: {

      len: 100,

      height: 25,

    },

    col: {

      len: 26,

      width: 100,

      indexWidth: 60,

      minWidth: 60,

    },

    style: {

      bgcolor: '#ffffff',

      align: 'left',

      valign: 'middle',

      textwrap: false,

      strike: false,

      underline: false,

      color: '#0a0a0a',

      font: {

        name: 'Helvetica',

        size: 10,

        bold: false,

        italic: false,

      },

    },

  })

  .loadData({}) // load data

  .change(data => {

    // save data to db

  });

 

  // data validation

  xs.validate();

 

  // 測試xs的方法

  setTimeout(() => {

    console.log('xs.data:', xs.sheet.data.getCellRectByXY(550, 310));

  }, 2000);

 

  function onSelected(event) {

    // event.target.style = 'background-color: blue';

    console.log('xxx')

  }

 

  document.getElementById('name').addEventListener('click', onSelected, false);

 

  /**

   * 拖拽開始

   * @param {DragEvent} event事件對象

   *

  */

  function onDragStart(event) {

    if(!event.target || !event.dataTransfer) {

      return;

    }

    let text = event.target.innerText;

    let children = event.target.children[0].innerText;

    console.log('from text:', text, 'children:', children);

    // 傳送的數(shù)據(jù)

    event.dataTransfer.setData('key', 'name');

    // 傳送的數(shù)據(jù)

    event.dataTransfer.setData('value', text);

  }


  document.getElementById('name').addEventListener('dragstart', onDragStart, false);


  // 拖動事件

  function onDragOver(event) {

    event.stopPropagation();

    event.preventDefault();

  }

 

  // 松開拖放

  function onDrop(event) {

    event.stopPropagation();

    event.preventDefault();

 

    const target = event.currentTarget;

    if(!target || !event.dataTransfer) {

      return;

    }

 

    let key = event.dataTransfer.getData('key');

    let value = event.dataTransfer.getData('value');

    // 目標位置

    var targetPosition = getTargetPosition(event);

    /**

     * 通過鼠標目標位置的x、y坐標,獲取所在的行下表、列下標

     * ri 行下標

     * ci 列下標

     */

    const { ri, ci } = xs.sheet.data.getCellRectByXY(targetPosition.x, targetPosition.y);

    xs.cellText(ri, ci, `${key}:${value}`).reRender();

  }

 

  // 監(jiān)聽事件

  document.getElementById('x-spreadsheet-demo').addEventListener('dragover', onDragOver, false);

  document.getElementById('x-spreadsheet-demo').addEventListener('drop', onDrop, false);

 

  // 獲取拖拽松開鼠標時,目標位置的x、y坐標

  function getTargetPosition(event) {

    const canvas = document.querySelector('.x-spreadsheet-table');

    const x = event.pageX - canvas.getBoundingClientRect().left;

    const y = event.pageY - canvas.getBoundingClientRect().top;

    return { x: x, y: y };

  }

 

});

</script>

</body>

</html>


該文章在 2024/6/11 16:10:01 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved