【愚公系列】《循序渐进Vue.js 3.x前端开发实践》070-商业项目:电商后台管理系统实战(商品管理模块的开发)

标题详情
作者简介愚公搬代码
头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎👍点赞、✍评论、⭐收藏

文章目录

  • 🚀前言
  • 🚀一、商品管理模块的开发
    • 🔎1.商品管理列表页
      • 🦋1.1 创建组件文件
      • 🦋1.2 注册路由
      • 🦋1.3 Mock 数据
      • 🦋1.4 商品列表页的代码(`Goods.vue`)
      • 🦋1.5 运行和测试
    • 🔎2.新建商品之基础配置
      • 🦋2.1 文件结构
      • 🦋2.2 AddGoods.vue
      • 🦋2.3 GoodsBaseSetting.vue
    • 🔎3.新建商品之价格和库存配置
      • 🦋3.1 文件结构
      • 🦋3.2 GoodsPriceSetting.vue
      • 🦋3.3 代码讲解
        • ☀️3.3.1 `<script setup>`
        • ☀️3.3.2 `<template>`
        • ☀️3.3.3 `<style scoped>`
    • 🔎4.新建商品之详情设置
      • 🦋4.1 安装wangEditor富文本编辑器插件
      • 🦋4.2 修改GoodsDetailSetting.vue文件
    • 🔎5.添加商品分类
      • 🦋5.1 GoodsCategory.vue
      • 🦋5.1 代码解析
      • 🦋5.2 路由配置


🚀前言

在电商平台中,商品管理模块是连接商家与消费者的重要桥梁。它不仅承担着商品信息的录入、修改与删除等基本功能,还涉及到库存管理、价格调整、上下架操作等多项关键任务。一个高效的商品管理模块能够帮助商家轻松管理各种商品,提高销售效率,并确保用户获得准确的信息。

本文将围绕电商后台管理系统中的商品管理模块的开发展开,带你深入了解如何构建一个功能全面、操作便捷的商品管理系统。我们将从需求分析开始,逐步实现商品的增删改查、分类管理、库存监控等功能。

🚀一、商品管理模块的开发

有了订单管理模块的开发经验,相信你再来编写商品管理模块将会非常容易。商品管理模块与订单管理模块的开发过程基本类似,先布局页面,再将获取到的数据绑定到页面上,最后处理用户交互即可。相比订单管理模块,商品管理模块的新增商品功能略显复杂。

🔎1.商品管理列表页

🦋1.1 创建组件文件

首先,在项目的 components 文件夹下新建一个 goods 子文件夹,创建两个 Vue 组件文件,分别命名为 Goods.vueAddGoods .vue。本节先只做商品列表页的开发,对于 AddGoods .vue 文件可以先不做处理。

🦋1.2 注册路由

Router.js 文件中注册新创建的这两个组件。首先引入组件:

import Goods from '../components/goods/Goods.vue';
import AddGoods from '../components/goods/AddGoods.vue';

home 路由下的 children 中新增两个子路由:

// 0是普通商品,1是秒杀商品,2是今日推荐
{path: 'goods/:type',component: Goods,name: 'Goods'
},
{path: 'addGoods/:type',// 0是普通商品,1是秒杀商品,2是今日推荐component: AddGoods,name: 'AddGoods'
}

🦋1.3 Mock 数据

Mock.js 文件中新增一个获取商品数据的方法,代码如下:

// 模拟获取商品数据
// type: 商品类型。0为普通商品,1为秒杀商品,2为今日推荐
getGoods(type) {let array = [];for (let i = 0; i < mockjs.Random.integer(5, 10); i++) {array.push(mockjs.mock({'name': (type == 0 ? '普通商品' : type == 1 ? '秒杀商品' : '今日推荐') + i,'img': mockjs.Random.dataImage('60x100', '商品示例图'),'price': mockjs.Random.integer(20, 500) + '元','sellCount': mockjs.Random.integer(10, 100),'count': mockjs.Random.integer(10, 100),'back': mockjs.Random.integer(10, 100),'backPrice': mockjs.Random.integer(0, 5000) + '元','owner': mockjs.Random.cname(),'time': mockjs.Random.datetime('yyyy-MM-dd A HH:mm:ss'),'state': mockjs.Random.boolean()}));}return array;
}

🦋1.4 商品列表页的代码(Goods.vue

以下是 Goods.vue 的完整代码:

<template><div class="content-container" direction="vertical"><!-- input --><div><el-container class="content-row"><div class="input-tip">商品名称:</div><div class="input-field"><el-input v-model="queryParams.name"></el-input></div><div class="input-tip">商品编号:</div><div class="input-field"><el-input v-model="queryParams.id"></el-input></div><div class="input-tip">商品分类:</div><div class="input-field"><el-select style="width:150px;" v-model="queryParams.category" placeholder="请选择分类"><el-option v-for="item in categorys" :key="item" :label="item" :value="item"></el-option></el-select></div></el-container><el-container class="content-row"><div class="input-tip">是否上架:</div><div class="input-field"><el-select v-model="sellModeString" style="width: 150px;"><el-option key="0" label="否" value="0"></el-option><el-option key="1" label="是" value="1"></el-option><el-option key="2" label="全部" value="2"></el-option></el-select></div><div class="input-tip">是否过期:</div><div class="input-field"><el-select v-model="expModeString" style="width:150px;"><el-option key="0" label="否" value="0"></el-option><el-option key="1" label="是" value="1"></el-option><el-option key="2" label="全部" value="2"></el-option></el-select></div></el-container></div><!-- button --><div class="content-row"><el-container><el-button type="primary" @click="requestData">检索</el-button><el-button type="primary" @click="clear">显示全部</el-button><el-button type="success" @click="addGood">新增商品</el-button></el-container></div><!-- list --><div><el-table :data="goodsData" tooltip-effect="dark" style="width:100%"><el-table-column label="商品" width="100"><template #default="scope"><div style="text-align:center"><el-image :src="scope.row.img" style="width: 60px; height: 100px"></el-image></div><div style="text-align:center">{{ scope.row.name }}</div></template></el-table-column><el-table-column label="价格" width="100" prop="price"></el-table-column><el-table-column label="销量" width="100" prop="sellCount"></el-table-column><el-table-column label="库存" width="100" prop="count"></el-table-column><el-table-column label="退款数量" width="100" prop="back"></el-table-column><el-table-column label="退款金额" width="100" prop="backPrice"></el-table-column><el-table-column label="操作" width="100" prop="name"><template #default="scope"><el-button @click="operate(scope.row)" :type="scope.row.state ? 'danger' : 'success'">{{ scope.row.state ? '下架' : '上架' }}</el-button></template></el-table-column><el-table-column label="管理员" width="100" prop="owner"></el-table-column><el-table-column label="更新时间" width="200" prop="time"></el-table-column></el-table></div></div>
</template><script setup>
import Mock from '../../mock/Mock'
import { ref, computed, onMounted } from 'vue'
import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'const route = useRoute()
const router = useRouter()
const goodsData = ref([])// 模拟分类数据
const categorys = ref(["全部","男装","女装"
])const queryParams = ref({name: "",id: "",category: "",sellMode: 2,  // 0否,1是,2全部expMode: 2   // 0否,1是,2全部
})const sellModeString = computed({get() {if (queryParams.value.sellMode === 2) {return '全部'}return queryParams.value.sellMode === 0 ? '否' : '是'},set(val) {queryParams.value.sellMode = val}
})const expModeString = computed({get() {if (queryParams.value.expMode === 2) {return '全部'}return queryParams.value.expMode === 0 ? '否' : '是'},set(val) {queryParams.value.expMode = val}
})// 组件挂载时获取数据
onMounted(() => {goodsData.value = Mock.getGoods(route.params.type)
})// 路由更新时刷新数据
onBeforeRouteUpdate((to) => {goodsData.value = Mock.getGoods(to.params.type)
})function requestData() {ElMessage({message: '筛选请求参数: ' + JSON.stringify(queryParams.value),type: 'success'})goodsData.value = Mock.getGoods(route.params.type)
}// 进行上架、下架操作
function operate(item) {item.state = !item.state
}// 清空筛选项
function clear() {queryParams.value = {name: "",id: "",category: "",sellMode: 2,expMode: 2,}goodsData.value = Mock.getGoods(route.params.type)
}// 新增商品
function addGood() {router.push({ name: 'AddGoods', params: { type: route.params.type } })
}
</script>

🦋1.5 运行和测试

运行当前工程,访问商品列表页面,检查页面中的交互元素是否能正确执行对应的方法。

在这里插入图片描述

🔎2.新建商品之基础配置

在商品管理列表页中,有一个“新增商品”按钮。点击此按钮后,会跳转到“新建商品”页面。在此页面中,需要对商品的诸多属性进行设置。为了方便管理和用户体验,可以使用 el-tab 组件将商品设置分成几个模块,如基础设置、价格库存设置和商品详情设置等。每一个设置模块都可以封装成一个独立的组件。

🦋2.1 文件结构

首先,在工程的 goods 文件夹下新建以下文件:

  • GoodsBaseSetting.vue
  • GoodsPriceSetting.vue
  • GoodsDetailSetting.vue

AddGoods.vue 中引入这3个子组件。

🦋2.2 AddGoods.vue

以下是 AddGoods.vue 的代码:

<script setup>
import { ref } from 'vue';
import BaseSetting from './GoodsBaseSetting.vue';
import PriceSetting from './GoodsPriceSetting.vue';
import DetailSetting from './GoodsDetailSetting.vue';const activeTab = ref("1");function handleClick(idx) {// 处理Tab点击事件
}
</script><template><div class="content-container" direction="vertical"><el-tabs v-model="activeTab" type="card" @tab-click="handleClick"><el-tab-pane label="基础设置" name="1"><BaseSetting></BaseSetting></el-tab-pane><el-tab-pane label="价格库存" name="2"><PriceSetting></PriceSetting></el-tab-pane><el-tab-pane label="商品详情" name="3"><DetailSetting></DetailSetting></el-tab-pane></el-tabs></div>
</template>

🦋2.3 GoodsBaseSetting.vue

接下来编写 GoodsBaseSetting.vue 组件的代码:

<script setup>
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { ElMessage } from 'element-plus';const router = useRouter();
const queryParams = ref({name: "",desc: "",timeRange: "",category: 0,
});function cancel() {router.go(-1);
}function submit() {ElMessage({type: 'success',message: '设置商品基本属性: ' + JSON.stringify(queryParams.value),});
}
</script><template><div><el-container class="content-row"><div class="input-tip">商品名称:</div><div class="input-field"><el-input v-model="queryParams.name"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">商品简介:</div><div class="input-field"><el-input type="textarea" :rows="3" v-model="queryParams.desc"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">商品封面:</div><el-upload :auto-upload="false" :limit="1" list-type="picture-card"><el-icon><Plus/></el-icon></el-upload></el-container><el-container class="content-row"><div class="input-tip">列表图片:</div><el-upload :auto-upload="false" :limit="5" list-type="picture-card"><el-icon><Plus/></el-icon></el-upload></el-container><el-container class="content-row"><div class="input-tip">上架日期:</div><div class="input-field"><el-date-picker type="daterange" range-separator="至"start-placeholder="开始日期" end-placeholder="结束日期"v-model="queryParams.timeRange"></el-date-picker></div></el-container><el-container class="content-row"><div class="input-tip">商品分类:</div><div class="input-field"><el-select style="width: 150px;" v-model="queryParams.category"><el-option key="0" label="男装" :value="0"></el-option><el-option key="1" label="男鞋" :value="1"></el-option><el-option key="2" label="围巾" :value="2"></el-option></el-select></div><div style="margin-top:6px"><el-button type="primary" size="small" round>添加分类</el-button></div></el-container><el-container class="content-row"><el-button type="success" plain @click="submit">提交</el-button><div style="margin-left:40px"></div><el-button type="warning" plain @click="cancel">取消</el-button></el-container></div>
</template>

在这里插入图片描述

🔎3.新建商品之价格和库存配置

价格和库存配置模块相对简单,只需要布局一些输入框来接收用户的输入配置即可。在 GoodsPriceSetting.vue 中编写如下代码。

🦋3.1 文件结构

确保在 goods 文件夹下已经新建了 GoodsPriceSetting.vue 文件。

🦋3.2 GoodsPriceSetting.vue

以下是 GoodsPriceSetting.vue 的代码:

<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
const router = useRouter()
const queryParams = ref({maketPrice:0,showPrice:0,coin:0,price:0,limit:0,count:0,sellCount:0,viewCount:0
})
function cancel(){router.go(-1);
}
function submit() {ElMessage({type:'success',message:'设置价格与库存:' + JSON.stringify(queryParams.value)})
}
</script>
<template><div><div class="title"><div style="line-height:35px;margin-left:20px">价格设置</div></div><el-container class="content-row"><div class="input-tip">市场价:</div><div class="input-field"><el-input v-model="queryParams.maketPrice"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">展示价:</div><div class="input-field"><el-input v-model="queryParams.showPrice"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">积分数:</div><div class="input-field"><el-input v-model="queryParams.coin"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">成本价:</div><div class="input-field"><el-input v-model="queryParams.price"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">限购数:</div><div class="input-field"><el-input v-model="queryParams.limit"></el-input></div></el-container><div class="title"><div style="line-height:35px;margin-left:20px">库存设置</div></div><el-container class="content-row"><div class="input-tip">库存数量:</div><div class="input-field"><el-input v-model="queryParams.count"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">基础销量:</div><div class="input-field"><el-input v-model="queryParams.sellCount"></el-input></div></el-container><el-container class="content-row"><div class="input-tip">浏览数量:</div><div class="input-field"><el-input v-model="queryParams.viewCount"></el-input></div></el-container><el-container class="content-row"><el-button type="success" plain @click="submit">提交</el-button><div style="margin-left:40px"></div><el-button type="warning" plain @click="cancel">取消</el-button></el-container></div>
</template>
<style scoped>
.title {background-color:#e1e1e1;height: 35px;margin-bottom: 15px;
}
</style>

在这里插入图片描述

🦋3.3 代码讲解

☀️3.3.1 <script setup>
  • import { ref } from 'vue'; 引入 ref 函数来创建响应式数据。
  • import { useRouter } from 'vue-router'; 引入 useRouter 钩子函数来使用路由功能。
  • import { ElMessage } from 'element-plus'; 引入 ElMessage 来显示消息提示。

const queryParams = ref({...}) 定义了一个响应式对象 queryParams,用于存储用户输入的商品价格和库存信息。

function cancel() {...} 定义了取消按钮的点击事件处理函数,点击后返回上一页。

function submit() {...} 定义了提交按钮的点击事件处理函数,点击后显示一个成功消息。

☀️3.3.2 <template>
  • 使用 el-container 组件来布局输入框,每个 el-container 包含一个标签和一个输入框。
  • v-model 双向绑定 queryParams 中对应的属性和输入框的值。
☀️3.3.3 <style scoped>
  • .title 设置标题的样式。
  • .content-row 设置每一行内容之间的间距。
  • .input-tip 设置输入框标签的样式。
  • .input-field 设置输入框的样式。

🔎4.新建商品之详情设置

商品详情的定制性通常较强,通常在商品上架添加时进行定制化设置。商品详情编辑推荐使用富文本编辑器,这类编辑器能够将富文本内容转换为HTML格式,操作简便。尽管富文本编辑器需要支持多种样式的文本、图片和超链接等功能,其实现可能较为复杂,但幸运的是,互联网上提供了许多优秀的富文本编辑器插件,它们可以直接使用,避免了重复开发的工作。

🦋4.1 安装wangEditor富文本编辑器插件

首先,在项目工程目录下执行以下命令来安装wangEditor富文本编辑器插件:

npm install wangeditor --save

安装成功后,在goods文件夹下新建一个名为GoodsEdit.vue的文件,在其中编写如下代码:

<script setup>
import E from "wangeditor"
import { ref, onMounted, getCurrentInstance } from 'vue'
// 用来获取当前组件实例
const instance = getCurrentInstance()
// 定义组件事件,内容改变时调用
const emit = defineEmits(['contentChange'])
// 编辑器对象的引用
let editor = null
const editorContent = ref('')
onMounted(()=>{editor = new E(instance.proxy.$refs.editorElem);// 编辑器的事件,每次改变会获取其html内容editor.config.onchange = contentChangeeditor.config.menus = [// 菜单配置'head', // 标题'bold', // 粗体'fontSize', // 字号'fontName', // 字体'italic', // 斜体'underline', // 下划线'strikeThrough', // 删除线'foreColor', // 文字颜色'backColor', // 背景颜色'link', // 插入链接'list', // 列表'justify', // 对齐方式'quote', // 引用'emoticon', // 表情'image', // 插入图片'table', // 表格'code', // 插入代码'undo', // 撤销'redo' // 重复];editor.create(); // 创建富文本实例
})function contentChange(html) {editorContent.value = html;emit('contentChange', editorContent.value); 
}</script>
<template><div id="wangeditor"><div ref="editorElem" style="text-align:left;"></div></div>
</template>

上述代码有详细的注释,通过一些简单的配置即可使用此富文本组件。

🦋4.2 修改GoodsDetailSetting.vue文件

下面是修改后的GoodsDetailSetting.vue文件的代码:

<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import GoodsEdit from './GoodsEdit.vue'
const router = useRouter()
const content = ref("")
// 富文本组件内容变化的回调
function contentChange(c) {content.value = c;
}
function cancel() {router.go(-1)
}
function submit() {ElMessage({type:'success',message:'设置详情HTML:' + content.value})
}
</script>
<template><div style="margin-bottom:20px"><goods-edit @contentChange="contentChange"></goods-edit></div><el-container class="content-row"><el-button type="success" plain @click="submit">提交</el-button><div style="margin-left:40px"></div><el-button type="warning" plain @click="cancel">取消</el-button></el-container>
</template>

运行代码,商品详情编辑页如图所示。
在这里插入图片描述

🔎5.添加商品分类

商品分类管理模块的实现相对简单,通过一个列表展示已有的分类,并提供删除和新增分类的功能。在 goods 文件夹下新建一个名为 GoodsCategory.vue 的文件,编写如下示例代码:

🦋5.1 GoodsCategory.vue

<script setup>
import { ref } from 'vue'
import { ElMessageBox } from 'element-plus'const categoryList = ref([{id:1231, name:"男装", manager:"管理员用户01"},{id:1131, name:"男鞋", manager:"管理员用户01"},{id:1031, name:"帽子", manager:"管理员用户01"}
])function deleteCategory(index) {categoryList.value.splice(index,1)
}function addCategory() {ElMessageBox.prompt('请输入分类名','新增分类',{confirmButtonText: '确定',cancelButtonText: '取消',}).then(({value})=>{categoryList.value.push({id:1000,name:value,manager:"管理员用户01"})});
}
</script>
<template><div class="content-container" direction="vertical"><el-container class="content-row"><el-button type="primary" @click="addCategory">添加分类</el-button></el-container><div><el-table :data="categoryList" tooltip-effect="dark" style="width: 100%"><el-table-column label="分类ID" width="100" prop="id"></el-table-column><el-table-column label="分类名称" width="100" prop="name"></el-table-column><el-table-column label="分类负责人" width="500" prop="manager"></el-table-column><el-table-column label="操作" width="200" prop="time"><template #default="scope"><el-button size="small" @click="deleteCategory(scope.$index)">删除</el-button></template></el-table-column></el-table></div></div>
</template>

🦋5.1 代码解析

  1. 模板部分 (<template>):

    • el-button 用于触发新增分类的按钮。
    • el-table 用于展示分类列表,包含分类ID、分类名称、分类负责人和操作列。
    • el-table-column 定义表格的列结构。
    • 删除按钮使用 @click 事件绑定 deleteCategory 方法。
  2. 脚本部分 (<script setup>):

    • 使用 ref 定义 categoryList,存储分类数据。
    • deleteCategory 方法用于删除指定索引的分类。
    • addCategory 方法使用 ElMessageBox.prompt 弹出对话框,获取用户输入的分类名,并将新分类添加到 categoryList
  3. 样式部分 (<style scoped>):

    • 定义了一些基本的样式,用于调整布局和间距。

🦋5.2 路由配置

不要忘记在 Router.js 中补充对应的路由配置,确保可以从其他页面跳转到商品分类管理页面。

示例路由配置:

import { createRouter, createWebHistory } from 'vue-router';
import GoodsCategory from './components/goods/GoodsCategory.vue';const routes = [// 其他路由配置{path:'category',component:GoodsCategory,name:"GoodsCategory"}
];const router = createRouter({history: createWebHistory(),routes
});export default router;

运行上面的代码后,你应该会看到一个商品分类管理页面,能够展示已有的分类,并提供删除和新增分类的功能。效果如图所示。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5 个释放 安卓潜力的 Shizuku 应用

Shizuku 软件推荐&#xff1a;释放安卓潜力的五款应用 Shizuku (日语&#xff1a;雫&#xff0c;意为“水滴”) 正如其名&#xff0c;是一款轻巧但功能强大的安卓工具。它无需 Root 权限&#xff0c;通过 ADB (Android Debug Bridge) 授权&#xff0c;即可让应用调用系统 API&…

前端权限控制和管理

前端权限控制和管理 1.前言2.权限相关概念2.1权限的分类(1)后端权限(2)前端权限 2.2前端权限的意义 3.前端权限控制思路3.1菜单的权限控制3.2界面的权限控制3.3按钮的权限控制3.4接口的权限控制 4.实现步骤4.1菜单栏控制4.2界面的控制(1)路由导航守卫(2)动态路由 4.3按钮的控制…

分布式kettle调度平台- web版转换,作业编排新功能介绍

介绍 Kettle&#xff08;也称为Pentaho Data Integration&#xff09;是一款开源的ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;由Pentaho&#xff08;现为Hitachi Vantara&#xff09;开发和维护。它提供了一套强大的数据集成和转换功能&#xff0c…

Docker容器访问外网:启动时的网络参数配置指南

在启动Docker镜像时,可以通过设置网络参数来确保容器能够访问外网。以下是几种常见的方法: 1. 使用默认的bridge网络 Docker的默认网络模式是bridge,它会创建一个虚拟网桥,将容器连接到宿主机的网络上。在大多数情况下,使用默认的bridge网络配置即可使容器访问外网。 启动…

大语言模型RAG,transformer

1、RAG技术流总结 第一张图是比较经典的RAG知识图谱&#xff0c;第二张图是更加详细扎实的介绍图。 1.1 索引 坦白来说这部分的技术并不是大模型领域的&#xff0c;更像是之前技术在大模型领域的应用&#xff1b;早在2019年我就做过faiss部分的尝试&#xff0c;彼时索引技术已…

数据结构与算法(test3)

七、查找 1. 看图填空 查找表是由同一类型的数据元素&#xff08;或记录&#xff09;构成的集合。例如上图就是一个查找表。 期中&#xff08;1&#xff09;是______________. (2)是______________(3)是_____关键字_______。 2. 查找(Searching) 就是根据给定的某个值, 在查…

机器学习在癌症分子亚型分类中的应用

学习笔记&#xff1a;机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题&#xff1a;Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊&#xff1a;Cancer Cell发表时间&#xff1a;20…

48V电气架构全面科普和解析:下一代智能电动汽车核心驱动

48V电气架构&#xff1a;下一代智能电动汽车核心驱动 随着全球汽车产业迈入电动化、智能化的新时代&#xff0c;传统12V电气系统逐渐暴露出其无法满足现代高功率需求的不足。在此背景下&#xff0c;48V电气架构应运而生&#xff0c;成为现代电动汽车&#xff08;EV&#xff09…

Mac(m1)本地部署deepseek-R1模型

1. 下载安装ollama 直接下载软件&#xff0c;下载完成之后&#xff0c;安装即可&#xff0c;安装完成之后&#xff0c;命令行中可出现ollama命令 2. 在ollama官网查看需要下载的模型下载命令 1. 在官网查看deepseek对应的模型 2. 选择使用电脑配置的模型 3. copy 对应模型的安…

操作教程丨使用1Panel开源面板快速部署DeepSeek-R1

近期&#xff0c;DeepSeek-R1模型因其在数学推理、代码生成与自然语言推理等方面的优异表现而受到广泛关注。作为能够有效提升生产力的工具&#xff0c;许多个人和企业用户都希望能在本地部署DeepSeek-R1模型。 通过1Panel的应用商店能够简单、快速地在本地部署DeepSeek-R1模型…

免费在腾讯云Cloud Studio部署DeepSeek-R1大模型

2024年2月2日&#xff0c;腾讯云宣布DeepSeek-R1大模型正式支持一键部署至腾讯云HAI&#xff08;高性能应用服务&#xff09;。开发者仅需3分钟即可完成部署并调用模型&#xff0c;大幅简化了传统部署流程中买卡、装驱动、配网络、配存储、装环境、装框架、下载模型等繁琐步骤。…

C语言-结构体

1.共用体: union //联合--共用体 早期的时候&#xff0c;计算机的硬件资源有限&#xff0c; 能不能让多个成员变量 公用同一块空间 //使用方式 类似 结构体 --- 也是构造类型 struct 结构体名 { 成员变量名 }; union 共用体名 { 成员变量名 }; //表示构造了一个共用体…

多头自注意力中的多头作用及相关思考

文章目录 1. num_heads2. pytorch源码演算 1. num_heads 将矩阵的最后一维度进行按照num_heads的方式进行切割矩阵&#xff0c;具体表示如下&#xff1a; 2. pytorch源码演算 pytorch 代码 import torch import torch.nn as nn import torch.nn.functional as Ftorch.set…

数据仓库和商务智能:洞察数据,驱动决策

在数据管理的众多领域中&#xff0c;数据仓库和商务智能&#xff08;BI&#xff09;是将数据转化为洞察力、支持决策制定的关键环节。它们通过整合、存储和分析数据&#xff0c;帮助组织更好地理解业务运营&#xff0c;预测市场趋势&#xff0c;从而制定出更明智的战略。今天&a…

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…

半导体制造工艺讲解

目录 一、半导体制造工艺的概述 二、单晶硅片的制造 1.单晶硅的制造 2.晶棒的切割、研磨 3.晶棒的切片、倒角和打磨 4.晶圆的检测和清洗 三、晶圆制造 1.氧化与涂胶 2.光刻与显影 3.刻蚀与脱胶 4.掺杂与退火 5.薄膜沉积、金属化和晶圆减薄 6.MOSFET在晶圆表面的形…

Avnet RFSoC基于maltab得5G 毫米波 开发工具箱

使用 MATLAB 连接到 AMD Zynq™ RFSoC 评估板。使用 RF 附加卡执行 OTA 测试。使用 HDL Coder 部署算法 版本要求&#xff1a; 大于 2023b 需要以下支持包之一&#xff1a; 适用于 Xilinx 基于 Zynq 的无线电&#xff08;R2023b 及更早版本&#xff09;的通信工具箱支持包适…

第三节 docker基础之---Commit+Dockerfile制作

docker目前镜像的制作两种方法&#xff1a; 1&#xff0c;基于docker Commit制作镜像 2&#xff0c;基于dockerfile制作镜像&#xff0c;Dockerfile 为主流的制作方式 如果不制作镜像删除容器之后则里面配置的文件也随之删除&#xff1a; [rootdocker ~]# docker images 查看…

推荐一个免费的、开源的大数据工程学习教程

在当今信息爆炸的时代&#xff0c;每一个企业都会产生大量的数据&#xff0c;而大数据也已经成为很多企业发展的重要驱动力&#xff0c;然而如何有效得处理和分析这些海量的数据&#xff0c;却是一个非常有挑战的技术。 今天推荐一个免费的数据工程教程&#xff0c;带你系统化…

【文档智能多模态】英伟达ECLAIR-端到端的文档布局提取,并集成阅读顺序方法

笔者在前期一个系列分享了各种文档智能相关的技术方法&#xff0c;可以参考《文档智能系列栏目》&#xff0c;涵盖各种常见方法。 下面直接看看这个端到端的文档智能结构化方法&#xff0c;供参考。 方法 一、架构 ECLAIR 采用了一个较大的视觉编码器&#xff08;657M 参数…