vue + Lodop 制作可視化設計頁面 實現打印設計功能(二)

歷史:

vue2 + Lodop 制作可視化設計頁面 實現打印設計功能(一)

前言:

之前本來打算用直接拿之前做的vue2版本改改就發的,但考慮到現在主流都是vue3了,所以從這篇文章開始使用vue3來寫,以及最后的demo也使用vue3

考慮到之前發的一些點過于分散,這篇開始打算就從頭開始寫這個功能,每篇最后發個本篇的示例demo

主要技術棧:vue3+vite+pinia+less+typescript

目錄:

  1. 項目創建及模塊定義,簡單實現拖拽新增
  2. 組件點擊拖拽移動
  3. 新增第一個自定義組件-HPText(文本組件)
  4. 新增HPText組件的菜單,組件菜單設置時組件動態變化
  5. 框選組件,批量移動
  6. 引入lodop,打印預覽
  7. 待定...

正文:

創建vue3+vite項目

這個不用多說了,不屬于本系列的范圍

項目目錄

最后項目創建后的目錄大概長這樣

定義設計頁面viewport

<script setup lang="ts">
import {ref,h,resolveComponent} from 'vue'
import {QYComponent} from "../../../domains/qy-component.ts";const edit = ref(null)
const page = ref({height: 560,width: 944,
})const widgetStore = ref<QYComponent[]>([])const 測試數據 = [{uuid:'123',attr: {x: 10,y: 10,width: 90,height: 20,},
}]const dropToAddCom = (ev) => {ev.preventDefault()const rest = edit.value.getBoundingClientRect();測試數據[0].attr.x = Math.round(ev.clientX - rest.x)測試數據[0].attr.y = Math.round(ev.clientY - rest.y)widgetStore.value = [...測試數據];
}const dragOver = (ev) => {ev.preventDefault()
}const handleMouseDown = (ev) => {}</script><template><div class="holder" id="viewport" ref="viewport" data-type="viewport"><div:style="{height: page.height + 'px',width: page.width + 'px'}"ref="edit"class="screen"@dragover.prevent="dragOver"@drop="dropToAddCom($event)"><!-- 組件 --><divv-for="(moduleData,index) in widgetStore":style="{position: 'absolute',top: `${moduleData.attr.y}px`,left: `${moduleData.attr.x}px`,width: `${moduleData.attr.width}px`,height:`${moduleData.attr.height}px`}"><component:is="input":com="moduleData"></component></div></div></div>
</template><style scoped>
.holder {position: relative;width: 100%;display: flex;justify-content: left;overflow: auto;font-size: 0;border: 1px solid #f5f5f5;border-width: 0 1px;background-image: linear-gradient(45deg, #f5f5f5 25%, transparent 0, transparent 75%, #f5f5f5 0),linear-gradient(45deg, #f5f5f5 25%, transparent 0, transparent 75%, #f5f5f5 0);background-position: 0 0, 13px 13px;background-size: 26px 26px;
}.screen {margin: 20px;transform-origin: center top;position: relative;box-shadow: 0 0 5px 1px #cccccc;background-color: #ffffff;background-repeat: no-repeat;
}.wrapper {margin: 20px;position: relative;
}
</style>

定義組件列表components-panel

<script setup lang="ts">
import {ref} from 'vue'const dragStart = (ev) => {}
</script><template><div class="component-main" style="display: flex;flex-direction: column"><div style="margin: 5px;background: lightskyblue;color: white":draggable="true"@dragstart="dragStart($event)">文本</div></div>
</template><style scoped>
.component-main {border-radius: 5px;height: 100%;width: 200px;overflow-x: hidden;overflow-y: auto;
}
</style>

修改App.vue

<script setup lang="ts">
import viewport from './components/print-designer/viewport/index.vue'
import componentsPanel from './components/print-designer/components-panel/index.vue'</script><template><div class="main" data-theme="qy-designer"><components-panel/><viewport/></div>
</template><style scoped>
.main {display: flex;flex-direction: row;width: 100%;height: 100%;user-select: none;
}
</style>

效果

注:這里使用的技術點因為已經在第一篇講了,所以這里就不再贅述了

demo示例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36858.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

速盾:cdn加速js

CDN加速是一種將網站內容分布到全球各地的服務器上來提高網站訪問速度和穩定性的技術手段。CDN即內容分發網絡&#xff0c;其核心原理是將靜態資源&#xff08;例如圖片、CSS、JavaScript文件等&#xff09;緩存到離用戶最近的服務器節點上&#xff0c;使用戶可以更快地獲取網站…

三相LCL濾波型PWM逆變器仿真設計

參考并網電流外環電容電流前饋內環的雙閉環控制結構&#xff0c;在光伏和風力發電網側變換器中的應用&#xff0c;可以顯著提高系統的穩定性和效率。在并網電流外環中&#xff0c;通過檢測電網電流并與其參考值進行比較&#xff0c;可以得到一個電流誤差信號。這個電流誤差信號…

MySQL基礎查詢與復雜查詢

基礎查詢 1、查詢用戶信息&#xff0c;僅顯示用戶的姓名與手機號&#xff0c;用中文顯示列名。中文顯示姓名列與手機號列。 2、根據商品名稱進行模糊查詢&#xff0c;模糊查詢需要可以走索引&#xff0c;需要給出explain語句。使用explain測試給出的查詢語句&#xff0c;需要顯…

程序員職業發展指南,如何選擇適合自己的就業方向?

隨著科技的發展和數字化時代的到來&#xff0c;程序員是IT行業中的熱門職業。尤其是近幾年移動互聯網的迅速發展&#xff0c;IT人才更是緊缺&#xff0c;越來越多的人加入程序員這個行列。 從事程序員工作&#xff0c;如何接項目呢&#xff1f;YesPMP是一個專注于互聯網外包的平…

【知識學習】闡述Unity3D中動畫渲染的概念及使用方法示例

Unity3D中的卡通渲染&#xff08;Cartoon Rendering&#xff09;是一種渲染技術&#xff0c;它模仿傳統手繪動畫或漫畫的視覺效果。這種渲染風格通常具有鮮明的顏色、清晰的輪廓線和簡化的光影效果&#xff0c;常用于制作動畫、游戲和其他視覺媒體。 卡通渲染的基本概念 輪廓…

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件 一 如何安裝 Qualcomm Chromatix? 攝像頭校準工具二 如何使用 Qualcomm Chromatix? tuning工具創建tuning項目2.1 創建工程前提依賴2.2 創建工程2.3 添加場景2.4 編輯區域觸發器三 如何創建Tuning 樹一 如何安裝 Qualco…

postman教程-22-Newman結合Jenkins執行自動化測試

上一小節我們學習了Postman Newman運行集合生成測試報告的方法&#xff0c;本小節我們講解一下Postman Newman結合Jenkins執行自動化測試的方法。 在軟件開發過程中&#xff0c;持續集成&#xff08;CI&#xff09;是一種實踐&#xff0c;旨在通過自動化的測試和構建過程來頻繁…

【高等數學】一元函數積分及其應用:定積分與反常積分

文章目錄 第一節. 定積分一. 定積分的概念1. 定義2. 定積分存在定理3. 定積分的幾何意義與求解 二. 定積分的性質1. 不等式2. 中值定理 三. 積分上限&#xff08;為x&#xff09;函數1. 積分上限函數定義2. 積分函數求導3. 積分函數的奇偶性變化 四. 定積分的計算 第二節. 反常…

multiprocessing.Queue 多個進程生產和多個進程消費怎么處理

在這個示例中&#xff0c;我們創建了一個隊列 q&#xff0c;并通過 multiprocessing.Manager().Queue() 來確保隊列可以在多個進程之間共享。我們定義了 consumer 和 producer 函數&#xff0c;分別用于從隊列中獲取數據和向隊列中放入數據。 在主進程中&#xff0c;我們創建了…

IPython的使用技I巧整理

IPython 是一個強大的交互式 Python 解釋器&#xff0c;它提供了許多增強 Python 編程體驗的特性。以下是一些 IPython 的使用技巧&#xff1a; 自動補全&#xff1a; 按下 Tab 鍵可以自動完成代碼。 自動縮進&#xff1a; IPython 會自動縮進代碼&#xff0c;保持代碼格式整潔…

vue的ESLint 4格縮進 筆記

https://chatgpt.com/share/738c8560-5271-45c4-9de0-511fad862109 一&#xff0c;代碼4格縮進設置 .eslintrc.js文件 module.exports { "rules": { "indent": ["error", 4] } }; 自動修復命令 npx eslint --fix "src/**/*.{…

作為圖形渲染API,OpenGL和Direct3D的全方位對比。

當你在網頁看到很多美輪美奐的圖形效果&#xff0c;3D交互效果&#xff0c;你知道是如何實現的嗎&#xff1f;當然是借助圖形渲染API了&#xff0c;說起這個不就不得說兩大陣營&#xff0c;OpenGL和Direct3D&#xff0c;貝格前端工場在本文對二者做個詳細對比。 一、什么是圖形…

springboot實習管理系統的設計與實現 LW +PPT+源碼+講解

第三章系統分析與設計 3.1 可行性分析 一個完整的系統&#xff0c;可行性分析是必須要有的&#xff0c;因為他關系到系統生存問題&#xff0c;對開發的意義進行分析&#xff0c;能否通過本系統來補充線下實習管理模式中的缺陷&#xff0c;去解決其中的不足等&#xff0c;通過對…

專業技術!最新氧化物異質結納米制備技術

網盤 https://pan.baidu.com/s/1vjO2yLxm638YpnqDQmX7-g?pwd3at5 MOF衍生的B_A_B結構氧化物異質結及其制備方法和應用.pdf 二硫化鉬-硫化鎘納米復合材料及其制備方法和應用.pdf 具有異質界面的耐輻照復合薄膜及其制備方法與應用.pdf 基于異質結雙界面層納米材料的復合介電薄膜…

MyBatis(10)實現一個簡單的MyBatis插件

MyBatis是一款優秀的持久層框架&#xff0c;它支持自定義插件&#xff0c;通過插件可以攔截在MyBatis核心代碼執行的某些點的方法調用&#xff0c;以實現特定功能&#xff0c;如查詢數據的性能分析、修改SQL語句等。MyBatis 插件是基于Java動態代理實現的&#xff0c;主要通過實…

Linux系統安裝桌面

適用于常見的Linux發行版&#xff0c;如CentOS和Ubuntu&#xff1a; 對于CentOS 7/8 安裝X Window系統和桌面環境&#xff08;如MATE或GNOME&#xff09; 連接到ECS實例&#xff1a;首先&#xff0c;確保您已通過SSH客戶端連接到您的ECS實例。 更新系統&#xff1a; sudo yu…

最新手動遷移WordPress方法

手動遷移WordPress網站主要步驟有&#xff1a;遷移文件、遷移數據庫、修復數據庫連接。 對于WordPress Installations&#xff0c;只有兩個主要組件&#xff0c;您需要訪問手動將安裝遷移到新主機&#xff1a;文件和數據庫。 遷移文件 將文件從舊主機遷移到新的最簡單方法之…

如何發布jar包到maven中央倉庫(2024年6月最新版含如何對原Jira系統內數據進行遷移)

1.準備工作 1.1 進入系統注冊賬號 https://central.sonatype.com/ 點擊右上角 Sign-in登錄 如果是首次登陸&#xff0c;需要點擊Sign-Up注冊賬號 2.命名空間管理 2.1 注冊Namespaces 點擊右上角自己的賬號->選中View Namespaces 進入命名空間列表后&#xff0c;點擊…

【軟考論文】項目背景及論文模版

目錄 一、項目核心功能二、論文模板一、項目核心功能 二、論文模板 論文字數說明 總字數 2500 = 500 + 400 +400 * 3 + 300 背景:500 回答問題:400 三段論:1200 = 400 * 3 結論:300 ~ 400 摘要(<300字) 本人于2022年1月參與了某車廠的全渠道數字化精準營銷平臺項目,該…

Spring Boot中實現定時任務最常用的方法 @Scheduled 注解和 TaskScheduler 接口【包含詳情代碼】

Spring Boot中實現定時任務最常用的方法 Scheduled 注解和 TaskScheduler 接口【包含詳情代碼】 學習總結 1、掌握 JAVA入門到進階知識(持續寫作中……&#xff09; 2、學會Oracle數據庫入門到入土用法(創作中……&#xff09; 3、手把手教你開發炫酷的vbs腳本制作(完善中………