Softhub軟件下載站實戰開發(十二):軟件管理編輯頁面實現

文章目錄

    • Softhub軟件下載站實戰開發(十二):軟件管理編輯頁面實現?
    • 功能概述 📋
    • 編輯頁面實現 🛠?
      • 1. 頁面結構設計
      • 2. aieEditor集成 🌟
        • 初始化配置
        • 編輯器功能
      • 3. 大整數處理 🔢
      • 4. 封面圖片上傳 📤
    • 關鍵代碼解析 💻
      • 編輯器保存處理
      • 編輯器初始化配置
    • 樣式優化 🎨
    • 效果展示

Softhub軟件下載站實戰開發(十二):軟件管理編輯頁面實現?

前面幾篇文章我們已經實現了軟件管理主要的接口,本篇文章來實現軟件管理的前端部分。

基礎代碼采用代碼生成器生成即可,再次不贅述

功能概述 📋

軟件管理模塊主要包含以下功能:

軟件管理
軟件列表
新增軟件
編輯軟件
刪除軟件
資源管理
基本信息編輯
詳情富文本編輯

編輯頁面實現 🛠?

1. 頁面結構設計

編輯頁面采用全屏彈窗設計,包含兩個標簽頁:

  1. 基本信息:軟件名稱、分類、平臺等基礎信息
  2. 軟件詳情:使用aieEditor實現的富文本編輯器
<template><div class="system-edit-post-container"><el-dialog v-model="isShowDialog" width="1200px" :fullscreen="true" class="edit-dialog"><template #header><div>{{ (formData.id === '0' ? '添加' : '修改') + '軟件表' }}</div></template><div class="edit-container"><el-card class="main-card"><el-tabs v-model="activeTab" class="software-tabs" tab-position="top"><el-tab-pane label="基本信息" name="basic"><div class="tab-content"><el-form ref="formRef" :model="formData" :rules="rules" size="default" label-width="100px"><el-row :gutter="24"><el-col :span="12"><el-form-item label="分類" prop="categoryId"><el-cascaderv-model="formData.categoryId":options="categoryOptions"placeholder="請選擇分類"size="large"clearable:props="{checkStrictly: true,value: 'id',label: 'categoryName',children: 'children',disabled: 'disabled',emitPath: false}"/></el-form-item></el-col><el-col :span="12"><el-form-item label="平臺" prop="platformIds"><el-selectv-model="formData.platformIds"placeholder="請選擇平臺"size="large"clearablemultiplecollapse-tagscollapse-tags-tooltip:empty-values="[null, undefined, []]"><el-option v-for="item in platformList" :key="item.id" :label="item.platformName" :value="item.id" /></el-select></el-form-item></el-col></el-row><el-row :gutter="24"><el-col :span="12"><el-form-item label="軟件名稱" prop="softwareName"><el-input v-model="formData.softwareName" placeholder="請輸入軟件名稱" clearable /></el-form-item></el-col><el-col :span="12"><el-form-item label="官網地址" prop="officialWebsite"><el-input v-model="formData.officialWebsite" placeholder="請輸入官網地址" clearable /></el-form-item></el-col></el-row><el-row :gutter="24"><el-col :span="12"><el-form-item label="Git倉庫" prop="gitRepo"><el-input v-model="formData.gitRepo" placeholder="請輸入Git倉庫地址" clearable /></el-form-item></el-col><el-col :span="12"><el-form-item label="備注" prop="remark"><el-input v-model="formData.remark" placeholder="請輸入備注" clearable /></el-form-item></el-col></el-row><el-row :gutter="24"><el-col :span="24"><el-form-item label="封面" prop="coverId"><div class="cover-upload-container"><el-uploadclass="cover-uploader":action="uploadAction":show-file-list="false":on-success="handleCoverSuccess":before-upload="beforeCoverUpload":headers="{ 'Authorization': `Bearer ${Session.get('token')}` }"><img v-if="coverUrl" :src="coverUrl" class="cover-image" /><div v-else class="cover-upload-placeholder"><el-icon class="cover-uploader-icon"><ele-Plus /></el-icon></div></el-upload><div class="cover-tips"><p>建議尺寸:400x300px,支持 JPG、PNG 格式,文件大小不超過 2MB</p></div></div></el-form-item></el-col></el-row></el-form></div></el-tab-pane><el-tab-pane label="軟件描述" name="detail"><div class="tab-content"><div class="editor-section"><div class="editor-header"><h3>軟件詳情</h3><p class="editor-tips">在這里詳細描述軟件的功能、特點、使用方法等信息</p></div><div id="aiEditor" ref="divRef" class="editor-container"><div class="aie-container"><div class="aie-container-header"></div><div class="aie-container-main"></div><div class="aie-container-footer"></div></div></div></div></div></el-tab-pane></el-tabs></el-card></div><div class="dialog-footer"><el-button @click="onCancel" size="default">取 消</el-button><el-button type="primary" @click="onSubmit" size="default" :loading="loading">{{ formData.id === '0' ? '新 增' : '修 改' }}</el-button></div></el-dialog></div>
</template>

2.ai配置提取

// 初始化 IndexedDB
const initDB = async () => {try {const db = await openDB('softhub', 1, {upgrade(db) {// 創建存儲對象const store = db.createObjectStore('aiConfig', { keyPath: 'id' })// 創建索引store.createIndex('current', 'id', { unique: true })}})return db} catch (error) {console.error('初始化數據庫失敗:', error)throw error}
}// 嘗試讀取配置
const config = await db.get('aiConfig', 'current')
console.log('讀取到的配置:', config)let aiConfig = {}

2. aieEditor集成 🌟

初始化配置

配置ai、圖片上傳下載以及視頻上傳下載接口

const initAiEditor = async () => {await nextTick()if (divRef.value && !aiEditor) {const db = await initDB()// 嘗試讀取配置const config = await db.get('aiConfig', 'current')console.log('讀取到的配置:', config)let aiConfig = {}if (config.provide == "custom"){aiConfig =  {models:{openai:{endpoint:  config.apiEndpoint || '',apiKey:  config.apiKey || '',model:  config.model || '',}}}}else{aiConfig =  {models:{openai:{customUrl:  config.customEndpoint || '',apiKey:  config.apiKey || '',model:  config.model || '',}}}}console.log(aiConfig)aiEditor = new AiEditor({element: divRef.value as Element,placeholder: '點擊輸入內容...',ai: aiConfig,toolbarExcludeKeys: ["attachment","printer"],image: {uploadUrl: import.meta.env.VITE_API_URL + '/api/v1/admin/ds/dsImage/upload',uploadHeaders: {'Authorization': `Bearer ${Session.get('token')}`},uploaderEvent: {onSuccess: (file, response) => {console.log("response@@@@",response)if (response.code === 0) {let res =  {errorCode: 0,data: {src: response.data.url,alt: file.name}}console.log("res@@@",res)return res}return false},onError: (file, error) => {console.error('圖片上傳失敗:', error)ElMessage.error('圖片上傳失敗')return false}},uploadFormName: 'file'},video: {uploadUrl: import.meta.env.VITE_API_URL + '/api/v1/admin/ds/dsVidio/upload',uploadHeaders: {'Authorization': `Bearer ${Session.get('token')}`},uploaderEvent: {onSuccess: (file, response) => {console.log("response@@@@",response)if (response.code === 0) {let res =  {errorCode: 0,data: {src: response.data.url,poster: response.data.poster}}console.log("res@@@",res)return res}return false},onError: (file, error) => {console.error('視頻上傳失敗:', error)ElMessage.error('視頻上傳失敗')return false}},uploadFormName: 'file'}})}
}
編輯器功能
  • AI輔助寫作 🤖:集成OpenAI API提供智能寫作建議
  • 多媒體支持 🖼?:支持圖片、視頻上傳
  • Markdown兼容 📝:同時支持富文本和Markdown編輯
  • 響應式設計 📱:適配不同屏幕尺寸
aieEditor
文本編輯
圖片上傳
視頻上傳
AI輔助
代碼高亮
表格支持

3. 大整數處理 🔢

由于JavaScript的Number類型限制,對于大整數ID我們做了特殊處理:

// 大整數轉換工具函數
const toBigIntString = (id: number | string): string => {try {return BigInt(id).toString()} catch {return String(id)}
}// 數據處理示例
const processedRow = {...row,id: toBigIntString(row.id),coverId: row.coverId ? toBigIntString(row.coverId) : ''
}

4. 封面圖片上傳 📤

<el-uploadclass="cover-uploader":action="uploadAction":show-file-list="false":on-success="handleCoverSuccess":before-upload="beforeCoverUpload"><img v-if="coverUrl" :src="coverUrl" class="cover-image" /><div v-else class="cover-upload-placeholder"><el-icon><ele-Plus /></el-icon></div>
</el-upload>

上傳限制:

  • 僅支持圖片格式
  • 大小不超過2MB
  • 建議尺寸400x300px

關鍵代碼解析 💻

編輯器保存處理

const onSubmit = async () => {const detail = aiEditor?.getHtml() || '';if (!detail) {ElMessage.error('軟件詳情不能為空');return;}const submitData = {...formData,detail,id: toBigIntString(formData.id),coverId: formData.coverId ? toBigIntString(formData.coverId) : 0};if (formData.id === '0') {await addDsSoftware(submitData);ElMessage.success('添加成功');} else {await editDsSoftware(submitData);ElMessage.success('修改成功');}
}

編輯器初始化配置

從IndexedDB中讀取AI配置:

const initDB = async () => {const db = await openDB('softhub', 1, {upgrade(db) {db.createObjectStore('aiConfig', { keyPath: 'id' });}});const config = await db.get('aiConfig', 'current');return {models: {openai: {endpoint: config.apiEndpoint,apiKey: config.apiKey,model: config.model}}};
}

樣式優化 🎨

編輯頁面采用了全屏彈窗設計,并優化了編輯器的顯示區域:

.editor-container {flex: 1;overflow: hidden;min-height: 500px;border: 1px solid var(--el-border-color);border-radius: 6px;:deep(.aie-container-main) {height: calc(100% - 40px);}
}

效果展示

image.png
image.png


softhub系列往期文章

  1. Softhub軟件下載站實戰開發(一):項目總覽
  2. Softhub軟件下載站實戰開發(二):項目基礎框架搭建
  3. Softhub軟件下載站實戰開發(三):平臺管理模塊實戰
  4. Softhub軟件下載站實戰開發(四):代碼生成器設計與實現
  5. Softhub軟件下載站實戰開發(五):分類模塊實現
  6. Softhub軟件下載站實戰開發(六):軟件配置面板實現
  7. Softhub軟件下載站實戰開發(七):集成MinIO實現文件存儲功能
  8. Softhub軟件下載站實戰開發(八):編寫軟件后臺管理
  9. Softhub軟件下載站實戰開發(九):編寫軟件配置管理界面
  10. Softhub軟件下載站實戰開發(十):實現圖片視頻上傳下載接口
  11. Softhub軟件下載站實戰開發(十一):軟件分片上傳接口實現

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

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

相關文章

微服務外聯Feign調用:第三方API調用的負載均衡與容災實戰

01Feign 簡介 Feign 是 Spring Cloud Netflix 中的 聲明式 HTTP 客戶端&#xff0c;它如同一位貼心的信使&#xff0c;幫我們化繁為簡&#xff0c;讓服務間的調用變得輕松又高效。 Feign 的核心優勢在于&#xff1a;。 ? 聲明式調用&#xff1a;開發者只需定義接口和注解&a…

k8s pod調度基礎

目錄 一&#xff1a;replication controller和replicaset 1&#xff1a;replication controller replication controller的使用示例。 2&#xff1a;標簽與標簽選擇器 &#xff08;1&#xff09;標簽 &#xff08;2&#xff09;標簽選擇器 &#xff08;3&#xff09;標簽…

學習者的Python項目靈感

一、實用工具類 - 文件批量重命名工具 用 os 模塊實現按規則&#xff08;如添加日期、序號、替換關鍵詞&#xff09;批量重命名文件&#xff0c;適合處理大量圖片/文檔。 - 簡易待辦事項管理器&#xff08;To-Do List&#xff09; 用 tkinter 或 PyQt 做GUI界面&#xff0c;…

gRPC服務發現

基于 etcd 實現的服務發現&#xff0c;按照非規范化的 etcd key 實現&#xff0c;詳細見代碼注釋。 package discoveryimport ("context""encoding/json""fmt""go.etcd.io/etcd/api/v3/mvccpb"clientv3 "go.etcd.io/etcd/client/…

基于Linux的Spark本地模式環境搭建實驗指南

一、實驗目的 掌握Spark本地模式的安裝與配置方法驗證Spark本地環境是否搭建成功了解Spark基本操作和運行原理 二、實驗環境準備 操作系統&#xff1a;Linux&#xff08;推薦ubuntu&#xff09;Java環境&#xff1a;JDK 1.8或以上版本內存&#xff1a;至少4GB&#xff08;推…

數學建模_時間序列

什么是時間序列時間序列預測方法/模型條件&#xff1a;非白噪音平穩平穩性評估不平穩變成平穩然后用ARIMA模型確定p,qAR模型(ARMA特例)MA模型(ARMA特例)ARMA模型(普適)灰色模型神經網絡/LSTM組合預測模型向量數據預測結果和為1的情況什么是時間序列 省略具體圖形例子 時間序列…

linux用rpm包升級sudo包為sudo-1.9.17-2版本

rpm下載地址&#xff1a; https://www.sudo.ws/dist/packages/1.9.17p1/ 備注&#xff1a;其他壓縮包下載地址&#xff1a;https://www.sudo.ws/download.html sudo-1.9.17-2.el7.x86_64.rpm 檢查一下&#xff0c;本地sudo版本&#xff0c;執行&#xff1a;sudo -V 或者sudo -…

【開源項目】一款真正可修改視頻MD5工具視頻質量不損失

文章目錄 視頻MD5修改工具 ???? 目錄? 功能特點?? 系統要求??? 設計架構?? 技術原理?? 核心代碼1. 視頻MD5修改核心邏輯2. 前端異步處理代碼3. 錯誤處理與日志記錄?? 安裝方法方法一:直接下載方法二:使用本地服務器?? 使用教程基本使用步驟高級使用技巧??…

Day05: Python 中的并發和并行(1)

理解 Python 中的線程和進程 理解線程和進程是實現在 Python 中并發和并行的基礎。這種知識使你能夠編寫能夠看似同時執行多個任務的程序&#xff0c;從而提高性能和響應能力。本課程將深入探討線程和進程的核心概念、它們的區別&#xff0c;以及它們如何為更高級的并發技術奠…

Spring Boot 集成 MinIO 實現分布式文件存儲與管理

Spring Boot 集成 MinIO 實現分布式文件存儲與管理 一、MinIO 簡介 MinIO 是一個高性能的分布式對象存儲服務器&#xff0c;兼容 Amazon S3 API。它具有以下特點&#xff1a; 輕量級且易于部署高性能&#xff08;讀寫速度可達每秒數GB&#xff09;支持數據加密和訪問控制提供…

從小白入門,基于Cursor開發一個前端小程序之Cursor 編程實踐與案例分析

Cursor 編程實踐與案例分析 Cursor 編程實踐與案例分析 1. 什么是 Cursor&#xff1f; Cursor 是一款面向開發者的 AI 編程助手&#xff0c;集成于本地 IDE&#xff0c;支持自然語言與代碼的無縫協作。它不僅能自動補全、重構、查找代碼&#xff0c;還能理解業務上下文&#…

一、如何用MATLAB畫一個三角形 代碼

一、如何用MATLAB畫一個三角形 代碼在MATLAB中繪制三角形可以通過指定三個頂點的坐標并使用 fill 或 patch 函數實現。以下是詳細代碼示例&#xff1a;方法1&#xff1a;使用 fill 函數&#xff08;簡單填充&#xff09;% 定義三角形的三個頂點坐標 (x, y) x [0, 1, 0.5]; % …

Postman自動化測試提取相應body體中的參數

文章目錄Postman自動化測試提取相應body體中的參數1. 示例響應 Body 參數2. 提取響應 Body 參數Postman自動化測試提取相應body體中的參數 上一篇的文中介紹了使用postman自動化測試時從響應的header中提取token參數&#xff0c;很多同學私信問如何從響應體body中提取參數。 有…

vue-39(為復雜 Vue 組件編寫單元測試)

實際練習:為復雜 Vue 組件編寫單元測試 單元測試對于確保復雜 Vue 組件的可靠性和可維護性至關重要。通過隔離和測試代碼的各個單元,您可以在開發過程的早期發現并修復錯誤,從而構建更健壯和可預測的應用程序。本課程重點介紹為復雜 Vue 組件編寫單元測試的實用方面,建立在…

c語言中的函數IV

函數的先后關系 直接把函數放在程序上方是可以的 在實際開發中&#xff0c;我們更希望把main函數放在前面 這樣子直接把自己定義的函數放在main函數下方&#xff0c;編譯會出現warning和error正確的解決方案是&#xff1a;把函數的頭放到main函數上方&#xff0c;這樣就能正常…

大模型Decoder-Only深入解析

Decoder-Only整體結構 我們以模型Llama-3.1-8B-Instruct為例&#xff0c;打印其結構如下&#xff08;后面會慢慢解析每一部分&#xff0c;莫慌&#xff09;&#xff1a; LlamaForCausalLM((model): LlamaModel((embed_tokens): VocabParallelEmbedding(num_embeddings128256,…

web網頁,在線%電商,茶葉,商城,網上商城系統%分析系統demo,于vscode,vue,java,jdk,springboot,mysql數據庫

經驗心得 這也是幫之前一客戶加了幾個功能&#xff0c;需要掌握crud&#xff0c;前后端開發&#xff0c;前后端怎么對接&#xff0c;前后端通訊是以那種格式&#xff0c;把這些掌握后咱們就可以進行網站開發了。后端記好一定要分層開發&#xff0c;不要像老早一起所有代碼寫到一…

MybatisPlus-05.核心功能-條件構造器

一.條件構造器 我們前面使用的MP功能主要是根據id進行操作的&#xff0c;并未涉及到復雜查詢。而根據id所進行的增刪改查操作在MP中都有直接的封裝。但是遇到復雜的查詢條件時&#xff0c;如何使用MP進行操作是我們要考慮的問題。因此MP為我們提供了條件構造器。 在BaseMapper…

ES6從入門到精通:常用知識點

變量聲明ES6引入了let和const替代var。let用于聲明可變的塊級作用域變量&#xff0c;const用于聲明不可變的常量。塊級作用域有效避免了變量提升和污染全局的問題。let name Alice; const PI 3.1415;箭頭函數箭頭函數簡化了函數寫法&#xff0c;且自動綁定當前上下文的this值…

51單片機教程(十一)- 單片機定時器

11、單片機定時器 項目目標 通過定時器/計數器實現流水燈控制。知識要點 定時器的結構。TMOD和TCON;定時/計數器工作方式;定時/計數器編程步驟;1、項目分析 前面的流水燈的時間控制通過空循環語句來實現,定時不是很精確。本章通過用定時器來控制流水燈任務可以實現精確的時…