活动介绍

<el-table ref="tableRef" :data="datas.list" table-layout="fixed" border class="table-print" style="width: 100%" show-summary :summary-method="getSummaries" highlight-current-row> <el-table-column prop="purFormDetail.purForm.opTime" label="时间" /> <el-table-column prop="purPayment.paymentMethod.name" label="付款方式" /> <el-table-column prop="purPayment.company.name" label="汇款帐户名称" /> <el-table-column prop="purPayment.amount" label="汇款金额" :formatter="formatScore" /> <el-table-column prop="purFormDetail.storePosition.product.name" label="产品名称" /> <el-table-column prop="purFormDetail.storePosition.productSpec.name" label="规格" /> <el-table-column prop="purFormDetail.storePosition.productState.name" label="交货状态" /> <el-table-column prop="purFormDetail.quantity" label="数量" :formatter="formatScore" /> <el-table-column prop="purFormDetail.storePosition.productUnit.name" label="单位" width="50" /> <el-table-column prop="purFormDetail.number" label="辅助数量" :formatter="formatScore" /> <el-table-column prop="purFormDetail.storePosition.supportUnit.name" label="单位" width="50"/> <el-table-column prop="purFormDetail.price" label="价格" :formatter="formatScore" /> <el-table-column prop="purFormDetail.priceType.name" label="价格类型" /> <el-table-column prop="purFormDetail.amounts" :formatter="formatScore" label="发货金额"/> <el-table-column label="期未余额"> <template #default="{row,$index}"> {{getEndBalance(row,$index)}} </template> </el-table-column> </el-table>printJS({ printable: 'purAccountDetail-print', type: 'html', targetStyles: ['*'], maxWidth: 1400, font_size: 'llllll', style: `@media print { /* 表格行高设置 - 针对Element UI表格结构 */ #purAccountDetail-print .el-table__body tr { height: 15px !important; } @page { margin: 0; /* 设置页面边距 */ size: A4 landscape; /* 页面大小自适应 */ /* 隐藏页眉和页脚 */ @top-left { content: 'TCM管理软件'; font-size: 10px; } @top-center { content: ''; } @top-right { content: ''; } @bottom-left { content: ''; } @bottom-center { content: ''; } @bottom-right { content: ''; } } #purAccountDetail-print::before { content: "TCM 管理软件"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(-45deg); font-size: 48px; opacity: 0.1; /* 调整透明度 */ color: #000; pointer-events: none; z-index: 9999; } }` });}catch (error) { ElMessage({ message: '打印过程中出错: ' + error.message, type: 'error', }); }打印样式的行高设置没作用

时间: 2025-07-20 21:14:54 浏览: 2
<think>我们正在解决Element UI的el-table组件在打印时行高设置无效的问题。根据用户提供的引用和描述,我们可以尝试以下方法: 用户引用中提到了几种设置行高的方式: 1. 使用CSS深度选择器(/deep/ 或 ::v-deep)来设置表头(th)和单元格(td)的内边距(padding)和高度(height)、行高(line-height)[^1]。 2. 使用el-table的row-style和cell-style属性来设置行高和单元格内边距,同时设置表格的字体大小[^2]。 3. 调整表头行高时,设置header-cell-style,将内边置为0[^3]。 但是,这些设置在打印时可能无效,因为打印样式需要单独在@media print媒体查询中定义。 因此,我们可以在打印样式表中为打印时的表格设置行高。例如: ```css @media print { /deep/ .el-table th, /deep/ .el-table td { padding: 0 !important; height: 30px !important; /* 设置你期望的高度 */ line-height: 30px !important; /* 设置行高,确保文本垂直居中 */ } } ``` 注意:在Vue项目中,使用/deep/或::v-deep来穿透scoped样式。另外,打印时可能需要调整的内容不仅仅是行高,还可能有其他样式(如字体大小、边距等),需要一并考虑。 另外,用户提到在el-table上直接设置行高(:row-style)和单元格样式(:cell-style)的方法[^2],但打印时这些内联样式可能被浏览器默认的打印样式覆盖,因此建议在打印媒体查询中覆盖样式。 步骤: 1. 在组件的样式部分(如果是scoped样式,需要使用深度选择器)添加打印媒体查询。 2. 在媒体查询中,为表格的th和td设置高度、行高和内边距,并使用!important覆盖原有样式。 示例代码: ```vue <template> <el-table :data="tableData" style="width: 100%" class="print-table"> <!-- 表格列定义 --> </el-table> </template> <style scoped> /* 普通样式 */ </style> <style> /* 打印样式,注意:如果使用scoped,则深度选择器可能无法作用于el-table内部,因此可以单独放在一个非scoped的style标签中,或者使用::v-deep */ @media print { .print-table ::v-deep th, .print-table ::v-deep td { padding: 0 !important; height: 30px !important; line-height: 30px !important; font-size: 12px !important; /* 如果需要,调整字体大小 */ } } </style> ``` 注意:由于打印样式可能需要全局作用,所以如果放在scoped的style标签中,需要使用深度选择器(如::v-deep)。另外,确保在打印时表格的父元素没有设置固定高度,否则可能导致行高被压缩。 如果上述方法仍然无效,可能是因为打印时el-table生成的DOM结构比较复杂,可能存在多层嵌套,我们可以尝试更具体的选择器,例如: ```css @media print { .print-table ::v-deep .el-table__header-wrapper table tr th .cell, .print-table ::v-deep .el-table__body-wrapper table tr td .cell { height: 30px !important; line-height: 30px !important; } } ``` 因为el-table中的内容实际上是在.cell元素中,直接设置.cell元素的高度和行高可能更有效。 同时,用户也可以尝试调整行内样式,在打印媒体查询中覆盖行内样式: ```css @media print { .print-table ::v-deep tr>td, .print-table ::v-deep tr>th { height: 30px !important; line-height: 30px !important; } } ``` 请用户根据实际情况尝试以上方法。 相关问题: 1. 如何调整Element UI表格的打印样式? 2. 在打印时,Element UI表格的样式不生效怎么办? 3. 如何设置打印媒体查询来覆盖Element UI组件的样式?</think>### Element UI el-table 打印样式行高设置无效的解决方案 在设置 Element UI 表格的打印样式时,行高设置无效通常是由于**打印媒体查询未正确覆盖组件样式**或**CSS优先级问题**导致的。以下是具体解决方案: #### 方法一:使用打印媒体查询覆盖样式(推荐) 在全局 CSS 文件中添加打印样式: ```css @media print { /* 覆盖表头行高 */ .el-table__header-wrapper tr th { padding: 0 !important; height: 40px !important; /* 表头高度 */ line-height: 40px !important; } /* 覆盖表格行高 */ .el-table__body-wrapper tr td { padding: 0 !important; height: 35px !important; /* 内容行高度 */ line-height: 35px !important; } /* 单元格内容容器 */ .el-table .cell { line-height: inherit !important; transform: scale(0.9); /* 可选:缩放内容适应行高 */ } } ``` #### 方法二:强制穿透样式作用域 在组件样式中添加(使用 Vue 的深度选择器): ```vue <style scoped> /* 穿透组件样式作用域 */ ::v-deep .el-table__header tr, ::v-deep .el-table__header th { height: 40px !important; line-height: 40px !important; } ::v-deep .el-table__body tr, ::v-deep .el-table__body td { height: 35px !important; line-height: 35px !important; } </style> ``` #### 关键注意事项 1. **必须使用 `!important`** Element UI 的样式优先级较高,需用 `!important` 强制覆盖[^1][^2][^3] 2. **同时设置 `height` 和 `line-height`** 两者必须保持一致,否则内容会垂直偏移 3. **打印时移除内边距** `padding: 0 !important` 可避免默认间距影响行高[^1][^3] 4. **检查浏览器打印设置** 在浏览器打印预览中取消勾选 **"背景图形"** 选项,避免样式被忽略 #### 完整示例代码 ```vue <template> <el-table :data="tableData" class="print-table" :header-cell-style="{ padding: '0' }" :cell-style="{ padding: '0' }"> <!-- 列定义 --> </el-table> </template> <style scoped> .print-table ::v-deep th { height: 40px !important; line-height: 40px !important; } .print-table ::v-deep td { height: 35px !important; line-height: 35px !important; } </style> <style> @media print { .print-table .el-table__header th, .print-table .el-table__body td { padding: 0 !important; height: 35px !important; line-height: 35px !important; } } </style> ``` #### 验证步骤 1. 在浏览器中按 `Ctrl+P` 进入打印预览 2. 检查打印样式中行高是否生效 3. 若未生效,在开发者工具中检查哪些样式被覆盖 4. 逐步增加 CSS 选择器特异性(如添加父级类名) > 提示:打印样式可能需要调整 `transform: scale()` 使内容完全适应行高[^2]
阅读全文

相关推荐

<el-row type="flex" class="row-bg" justify="space-between" align="middle"> <el-col>{{datas.list[0]?.trader.name}}</el-col> </el-row> <el-row type="flex" class="row-bg" justify="space-between" align="middle"> <el-col>往来对帐单</el-col> </el-row> <el-row type="flex" class="row-bg" justify="space-between" align="middle"> <el-col :span="8">供货单位:{{datas.list[0]?.supplier.name}}</el-col> <el-col :span="8">对帐日期:{{formatDate(new Date())}}</el-col> <el-col :span="8">上期余额:{{datas.previousBalance}}</el-col> </el-row> <el-row> <el-table ref="tableRef" :data="datas.list" table-layout="fixed" border class="table-print" style="width: 100%" :summary-method="getSummaries" show-summary highlight-current-row> <el-table-column prop="purFormDetail.purForm.opTime" label="时间" /> <el-table-column prop="purPayment.paymentMethod.name" label="付款方式" /> <el-table-column prop="purPayment.company.name" label="汇款帐户名称" /> <el-table-column prop="purPayment.amount" label="汇款金额" :formatter="formatScore" /> <el-table-column prop="purFormDetail.storePosition.product.name" label="产品名称" /> <el-table-column prop="purFormDetail.storePosition.productSpec.name" label="规格" /> <el-table-column prop="purFormDetail.storePosition.productState.name" label="交货状态" /> <el-table-column prop="purFormDetail.quantity" label="数量" :formatter="formatScore" /> <el-table-column prop="purFormDetail.storePosition.productUnit.name" label="单位" width="50" /> <el-table-column prop="purFormDetail.number" label="辅助数量" :formatter="formatScore" /> <el-table-column prop="purFormDetail.storePosition.supportUnit.name" label="单位" width="50"/> <el-table-column prop="purFormDetail.price" label="价格" :formatter="formatScore" /> <el-table-column prop="purFormDetail.priceType.name" label="价格类型" /> <el-table-column prop="purFormDetail.amounts" :formatter="formatScore" label="发货金额"/> <el-table-column label="期未余额"> <template #default="{row,$index}"> {{getEndBalance(row,$index)}} </template> </el-table-column> </el-table> </el-row> 第 {{ currentPageNumber }} 页 / 共 {{ totalPages }} 页 printJS({ printable: 'purAccountDetail-print', type: 'html', targetStyles: ['*'], maxWidth: 1400, font_size: 'llllll', style: @media print { body { zoom: 58%; } @page { margin: 0; /* 设置页面边距 */ size: A4; /* 页面大小自适应 */ /* 隐藏页眉和页脚 */ @top-left { content: 'TCM管理软件'; font-size: 10px; } @top-center { content: ''; } @top-right { content: ''; } @bottom-left { content: ''; } @bottom-center { content: ''; } @bottom-right { content: ''; } } #purAccountDetail-print::before { content: "TCM 管理软件"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(-45deg); font-size: 48px; opacity: 0.1; /* 调整透明度 */ color: #000; pointer-events: none; z-index: 9999; } } });打印时表格的高度超出容器的高度,导致显示不完整

查询日期范围默认赋值: 1、开始时间为今天向前一个自然月的第一天; 2、结束时间为今天; 3、开始时间选择和结束时间选择区间最大1个月; <template> <dt-location :data="[{title:'报告管理'},{title:'车辆报告'}]"></dt-location> <dt-toolbar-box> <template #default> <el-button-group> <el-button icon="Plus" @click="$common.linkUrl('/vinReport/edit')">查询</el-button> <el-button icon="Download" @click="exportExcel">导出Excel</el-button> </el-button-group> <el-input placeholder="输入关健字" v-model="datas.keyword" @clear="initData" @keyup.enter.native="initData" clearable> <template #append> <el-button icon="Search" @click="initData"></el-button> </template> </el-input> </template> <template #more>
报告类型
<el-select v-model="datas.reportType" placeholder="请选择..." @change="initData"> <el-option label="全部类型" :value="-1"></el-option> <el-option label="精选-A" :value="1"></el-option> <el-option label="优选-A" :value="2"></el-option> <el-option label="优选-B" :value="3"></el-option> <el-option label="优选-D" :value="4"></el-option> <el-option label="优选-C" :value="5"></el-option> <el-option label="优选-E" :value="6"></el-option> <el-option label="精选-C" :value="7"></el-option> <el-option label="优选-F" :value="8"></el-option> <el-option label="优选-G" :value="9"></el-option> <el-option label="精选-D" :value="10"></el-option> <el-option label="优选-H" :value="11"></el-option> <el-option label="优选-I" :value="12"></el-option> <el-option label="精选-E" :value="13"></el-option> </el-select>
状态
<el-select v-model="datas.reportStatus" placeholder="请选择..." @change="initData"> <el-option label="全部状态" :value="-1"></el-option> <el-option label="待确认" :value="100"></el-option> <el-option label="待付款" :value="110"></el-option> <el-option label="生成中" :value="120"></el-option> <el-option label="已生效" :value="130"></el-option> <el-option label="已退单" :value="190"></el-option> <el-option label="查询失败" :value="199"></el-option> </el-select>
查询日期
<el-date-picker style="width:280px" v-model="datas.dateRange" type="daterange" value-format="YYYY-MM-DD" start-placeholder="开始时间" end-placeholder="结束时间" @change="initData"> </el-date-picker>
</template> </dt-toolbar-box> <el-card class="table-card"> <el-table ref="tableRef" v-loading="datas.loading" :data="datas.listData" stripe class="table-list" @selection-change="handleSelectionChange"> <el-table-column fixed="left" type="selection" width="45"></el-table-column> <el-table-column fixed="left" prop="reportNo" label="报告编号" min-width="200" show-overflow-tooltip></el-table-column> <el-table-column prop="userName" label="用户名" width="100" show-overflow-tooltip></el-table-column> <el-table-column label="报告类型" width="95"> <template #default="scope"> <el-tag size="small" type="info" effect="plain" v-if="scope.row.reportType==1">精选-A</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==2">优选-A</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==3">优选-B</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==4">优选-D</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==5">优选-C</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==6">优选-E</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==7">精选-C</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==8">优选-F</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==9">优选-G</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==10">精选-D</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==11">优选-H</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==12">优选-I</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==13">精选-E</el-tag> <el-tag size="small" type="info" effect="plain" v-else-if="scope.row.reportType==22">甄选-B</el-tag> <el-tag size="small" effect="info" v-else>未定义</el-tag> </template> </el-table-column> <el-table-column label="状态" width="95"> <template #default="scope"> <el-tag size="small" type="dark" effect="dark" v-if="scope.row.reportStatus==100">待确认</el-tag> <el-tag size="small" type="dark" effect="dark" v-else-if="scope.row.reportStatus==110">待付款</el-tag> <el-tag size="small" type="danger" effect="dark" v-else-if="scope.row.reportStatus==120">生成中</el-tag> <el-tag size="small" type="success" effect="dark" v-else-if="scope.row.reportStatus==130">已生效</el-tag> <el-tag size="small" type="info" effect="dark" v-else-if="scope.row.reportStatus==190">已退单</el-tag> <el-tag size="small" type="info" effect="dark" v-else-if="scope.row.reportStatus==199">查询失败</el-tag> <el-tag size="small" type="info" effect="dark" v-else>未知</el-tag> </template> </el-table-column> <el-table-column prop="vin" label="Vin" width="180" show-overflow-tooltip></el-table-column> <el-table-column label="报告内容" width="260" show-overflow-tooltip> <template #default="scope"> {{scope.row.reportContent}} </template> </el-table-column> <el-table-column label="报告链接" width="260" show-overflow-tooltip> <template #default="scope"> {{scope.row.reportUrl}} </template> </el-table-column> <el-table-column label="查询日期" width="160"> <template #default="scope"> {{scope.row.addTime}} </template> </el-table-column> <el-table-column fixed="right" label="操作" width="120"> </el-table-column> </el-table> </el-card> <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="datas.pageIndex" :page-sizes="[10, 20, 50, 100]" :page-size="datas.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="datas.totalCount"> </el-pagination>
</template> <script setup> import { ref, reactive, getCurrentInstance } from "vue" import DtToolbarBox from '../../components/layout/DtToolbarBox.vue' //获取全局属性 const { proxy } = getCurrentInstance() const tableRef = ref(null) //定义属性 const datas = reactive({ loading: false, keyword: '', totalCount: 0, pageSize: 10, pageIndex: 1, listData: [], multipleSelection: [], reportType: -1, reportStatus: -1, dateRange: [], }) //初始化工具栏 const initLoad = () => { } //初始化数据 const initData = async () => { let sendUrl = /vehicleReport/reports?pageSize=${datas.pageSize}&pageIndex=${datas.pageIndex} + &reportType=${datas.reportType} + &reportStatus=${datas.reportStatus} if (datas.dateRange.length > 0) { sendUrl += &startTime=${datas.dateRange[0]} sendUrl += &endTime=${datas.dateRange[1]} } if (datas.keyword.length > 0) { sendUrl += &keyword=${encodeURI(datas.keyword)} } //获取分页列表 await proxy.$api.request({ url: sendUrl, beforeSend() { datas.loading = true }, success(res) { datas.listData = res.data let pageInfo = JSON.parse(res.headers["x-pagination"]) datas.totalCount = pageInfo.totalCount datas.pageSize = pageInfo.pageSize datas.pageIndex = pageInfo.pageIndex }, error(err) { datas.listData = [] }, complete() { datas.loading = false } }) } //多选删除 const deleteCheckAll = () => { //拿到选中的数据 let list = datas.multipleSelection //检查是否有选中 if (!list.length) { proxy.$message({ type: 'warning', message: '请选择要删除的记录' }) return false } //执行删除操作 proxy.$confirm('确认要删除该记录吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { let ids = list.map(obj => obj.id) proxy.$api.request({ method: 'delete', url: /vehicleReport/reports?ids=${ids.toString()}, loading: true, successMsg: '已删除成功', success(res) { tableRef.value.clearSelection() //清除选中状态 initData() //重新加载列表 } }) }).catch(() => {}) } //单项删除 const deleteItem = (val) => { //执行删除操作 proxy.$confirm('确认要删除该记录吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { proxy.$api.request({ method: 'delete', url: /vehicleReport/reports/${val}, loading: true, successMsg: '已删除成功', success(res) { initData() //重新加载列表 } }) }).catch(() => {}) } //选中第几行 const handleSelectionChange = (val) => { datas.multipleSelection = val } //每页显示数量 const handleSizeChange = (val) => { if (datas.pageSize != val) { datas.pageSize = val initData() } } //跳转到第几页 const handleCurrentChange = (val) => { if (datas.pageIndex != val) { datas.pageIndex = val initData() } } // 导出处理方法 const exportExcel = async () => { try { const params = { StartTime: datas.dateRange[0], EndTime: datas.dateRange[1], ReportType: datas.reportType, ReportStatus: datas.reportStatus, Keyword: datas.keyword, Format: "xlsx" // 支持 csv 或 xlsx }; // 显示加载动画 if (proxy && proxy.$loading) { proxy.$loading.show(); } const response = await proxy.$api.request({ url: "/https/wenku.csdn.net/vehicleReport/ExportExcel", method: "POST", data: params, responseType: 'arraybuffer', // 确保以二进制形式接收数据 headers: { 'Content-Type': 'application/json' }, success(res) { console.log(res); // 检查 response 是否有效 if (!res || !res.data) { throw new Error("服务器未返回有效数据"); } // 创建Blob对象并下载文件 const blob = new Blob([res.data], { type: res.headers['content-type'] || "application/octet-stream" }); const url = window.URL.createObjectURL(blob); console.log(url); // 隐藏加载动画 if (proxy && proxy.$loading) { proxy.$loading.hide(); } // 创建下载链接 const link = document.createElement("a"); link.href = url; link.download = 车辆报告_${new Date().toISOString().slice(0, 10)}.${params.Format}; link.click(); // 释放 URL 对象 window.URL.revokeObjectURL(url); }, error(err) { throw new Error("服务器未返回有效数据"); }, complete() { datas.loading = false } }); } catch (error) { // 隐藏加载动画 if (proxy && proxy.$loading) { proxy.$loading.hide(); } console.error("导出失败:", error.message || error); proxy.$message.error("导出失败,请检查网络或联系管理员!"); } }; //初始化工具栏 initLoad() //执行初始化方法 initData() </script> // 样式 <style scoped> .el-tooltip { max-width: 600px; } </style>

<template> <view class="wrap"> <view class="dev-area"> <view style="width: 100%;padding: 20px;font-size: 24px;font-weight: bold;">实时数据监测</view> <view class="dev-cart"> <view class=""> <view class="dev-name">土壤湿度</view> <image class="dev-logo" src="../../static/temp.png" mode=""></image> </view> <view class="dev-data">{{(datas.Intelligent1)}} ℃</view> </view> <view class="dev-cart"> <view class=""> <view class="dev-name">人体检测</view> <image class="dev-logo" src="../../static/shuiwei.png" mode=""></image> </view> <view class="dev-data">{{datas.HC}} Pa</view> </view> <view class="dev-cart"> <view class=""> <view class="dev-name">天气</view> <image class="dev-logo" src="../../static/qiti.png" mode=""></image> </view> <view class="dev-data">{{ datas.rain >= 0 && datas.PRESSURE <= 100? '闲置' : (datas.PRESSURE > 100 && datas.PRESSURE <= 200? "已穿鞋" : (datas.PRESSURE > 200? '行走' : 0)) }}</view> </view> <view class="dev-cart"> <view class=""> <view class="dev-name">光照强度</view> <image class="dev-logo" src="../../static/gz.png" mode=""></image> </view> <view class="dev-data">{{datas.LDR1}} %</view> </view> <view style="width: 100%;padding: 20px;font-size: 24px;font-weight: bold;">远程控制</view> <button :type="active? 'primary' : 'default'" @click="autoMode('aaa','mode')">自动模式</button> <button :type="active? 'default' : 'primary'" @click="autoMode('bbb','mode')">手动模式</button> <view v-if="!active"> <view style="width: 100%; padding: 20px; font-size: 24px; font-weight: bold;">灯光控制</view> <view class="dev-cart" style="width: 640rpx;"> <button v-if="lightOpenCondition" class="small-button" style="background-color: #2b9939;" @click="autoMode('LEDN')">开启</button> <button v-else class="small-button" style="background-color: #999192;" @click="autoMode('LEDF')">开启</button> <button v-if="lightCloseCondition" class="small-button" style="background-color: #2b9939;" @click="autoMode('LEDF')">关闭</button> <button v-else class="small-button" style="background-color: #999192;" @click="setBfyVal2('BARN111CONT',1)">关闭</button> </view> <button v-if="datas.BARN111CONT === 2" class="small-button" style="background-color: #2b9939;" @click="setBfyVal2('BARN111CONT',2)">强制关闭</button> <button v-else class="small-button" style="background-color: #999192;" @click="setBfyVal2('BARN111CONT',2)">强制关闭</button> <view style="width: 100%; padding: 20px; font-size: 24px; font-weight: bold;">水泵控制</view> <view class="dev-cart" style="width: 640rpx;"> <button v-if="pumpOpenCondition" class="small-button" style="background-color: #2b9939;" @click="autoMode('BON')">开启</button> <button v-else class="small-button" style="background-color: #999192;" @click="autoMode('LEDF')">开启</button> <button v-if="pumpCloseCondition" class="small-button" style="background-color: #2b9939;" @click="autoMode('BOFF')">关闭</button> <button v-if="datas.BARN111CONT === 0" class="small-button" style="background-color: #2b9939;" @click="setBfyVal2('BARN111CONT',0)">开启</button> <button v-else class="small-button" style="background-color: #999192;" @click="setBfyVal2('BARN111CONT',0)">开启</button> <button v-if="datas.BARN111CONT === 1" class="small-button" style="background-color: #2b9939;" @click="setBfyVal2('BARN111CONT',1)">关闭</button> <button v-else class="small-button" style="background-color: #999192;" @click="setBfyVal2('BARN111CONT',1)">关闭</button> </view> </view> </view> </view> </view> </template> <script> const { createCommonToken } = require('@/key.js') export default { data() { return { //active: 1, productId: '799knCKRru', deviceName: "test", temp: '', humi: '', led: true, bee: true, //datas: {}, uid: 'a86461193caac133ec583a2dd6e5c8c3', TUL004: '', HUL004: '', LUL004: '', FEED111LIM: '', FEED111TIME2: '', FEED111TIME: '1000', active: false, datas: { BARN111CONT: 0 }, // 新增灯光控制条件变量 lightOpenCondition: true, lightCloseCondition: true, // 新增水泵控制条件变量 pumpOpenCondition: true, pumpCloseCondition: true }; }, onLoad() { const params = { author_key: 'OkuBMchdHrZPKiGNt6kl2fUYSJ8UNbEiznFEArJt/OhmRUvWLKYoGJGE9BUITojxlqnB0cN61//gll6vFEtjauw==', version: '2022-05-01', user_id: '4053575', product: this.productId, device: this.deviceName, } this.token = createCommonToken(params); this.fetchDevData(); setInterval(() => { this.fetchDevData(); }, 3000) }, // computed: { // result() { // if (this.datas.PRESSURE >= 0 && datas.PRESSURE <= 100) { // return '闲置'; // } else if (this.datas.PRESSURE > 100 && this.datas.PRESSURE <= 200) { // return '已穿上'; // } else if (this.datas.PRESSURE > 200) { // return "行走"; // } // } // }, onShow() {}, methods: { autoMode(param) { // 自动模式方法逻辑 console.log('执行自动模式操作', param); }, setBfyVal2(key, value) { // 设置值方法逻辑 console.log('设置值操作', key, value); this.datas[key] = value; // autoMode(msg, mode) { // if (mode == 'mode') { // this.active = !this.active // } // wx.request({ // url: 'https://apis.bemfa.com/va/postJsonMsg', //api接口,详见接入文档 // method: "POST", // data: { // uid: this.uid, // topic: "LED", // type: 3, // msg: msg // }, // success(res) { // console.log(res, 'kkkkkkkk') // // that.fetchDevData(); // } // }) // }, bindTimeChange(e) { this.FEED111TIME2 = e.target.value; this.FEED111TIME = e.target.value.replace(':', ''); }, fetchDevData() { var that = this; uni.request({ url: 'https://apis.bemfa.com/va/alltopic?uid=' + this.uid + "&type=3", //get接口,详见巴法云接入文档 data: { uid: this.uid, type: 3, }, success(res) { var dataArr = res.data.data; var datas = {}; for (let obj of dataArr) { datas[obj.topic] = obj.msg; that.datas = datas; } } }) }, setBfyVal(val, t) { var that = this; var msg = parseInt(this[val]); if (t == 's') { msg = msg + '' } wx.request({ url: 'https://apis.bemfa.com/va/postJsonMsg', //api接口,详见接入文档 method: "POST", data: { uid: this.uid, topic: val, type: 3, msg: msg }, success(res) { console.log(res.data) that.fetchDevData(); } }) }, setBfyVal2(val, t) { var that = this; wx.request({ url: 'https://apis.bemfa.com/va/postJsonMsg', //api接口,详见接入文档 method: "POST", data: { uid: this.uid, topic: val, type: 3, msg: t + '' }, success(res) { console.log(res.data) that.fetchDevData(); } }) }, setFlagVal(flag) { var params = {}; flag = "" + flag; params[flag] = parseInt(this[flag]); uni.request({ url: 'https://iot-api.heclouds.com/thingmodel/set-device-property', method: 'POST', data: { product_id: this.productId, device_name: this.deviceName, params: params }, header: { 'authorization': this.token //自定义请求头信息 }, success: () => { console.log('dantemp updated successfully:'); }, fail: (error) => { console.error('Request failed:'); } }); }, // onDANHUMISwitch(event) { // console.log('Submitting dantemp:', this.dantemp); // 日志输出 // console.log(event.detail.value); // let value = event.detail.value; // uni.request({ // url: 'https://iot-api.heclouds.com/thingmodel/set-device-property', //仅为示例,并非真实接口地址。 // method: 'POST', // data: { // product_id: '799knCKRru', // device_name: 'test', // params: { // "tar_humi": parseInt(this.danhumi) // } // }, // header: { // 'authorization': this.token //自定义请求头信息 // }, // success: () => { // console.log('danhumi updated successfully'); // }, // fail: (error) => { // console.error('Request failed:', error); // } // }); // }, } } </script> <style> .zt { background-color: #2b9939; } .wrap { padding: 30rpx; } .dev-area { display: flex; justify-content: space-between; flex-wrap: wrap; } .dev-cart { height: 150rpx; width: 320rpx; border-radius: 30rpx; margin-top: 30rpx; display: flex; justify-content: space-around; align-items: center; box-shadow: 0 0 15rpx #ccc; } .dev-name { font-size: 20rpx; text-align: center; color: #6d6d6d; } .dev-logo { width: 70rpx; height: 70rpx; margin-top: 10rpx; } .dev-data { font-size: 30rpx; color: #6d6d6d; } .small-button { padding: 10rpx 20rpx; font-size: 24rpx; border-radius: 15rpx; background-color: #2b9939; color: white; border: none; } </style> 检测代码是否有问题

<template> 正在{{ name_local }}商铺中 <van-row> <van-col span="24" class="custom-border"> <swipe-perso :datas="images" :comunicas="comunica"></swipe-perso> </van-col> </van-row> <select-protuct style="padding-bottom: 10px; padding-top: 10px" :key_local="key_local" ></select-protuct> <flot-video :url_video="url_video"></flot-video> <show-grid :list_protuct="list_ptoruct" :comunicas="comunica"></show-grid> </template> <script setup> import ShowGrid from "@/components/ShowLocalPer.vue"; import SwipePerso from "@/components/SwipePerso.vue"; import { ref, onMounted } from "vue"; import { showNotify } from "vant"; import { useRouter, useRoute } from "vue-router"; import FlotVideo from "@/components/FlotShow.vue"; import { SetInforProtuct } from "@/network/intermedio/publicidad.js"; import SelectProtuct from "./select_protuct.vue"; const router = useRouter(); const route = useRoute(); const list_ptoruct = ref([]); const swiper = ref([]); const comunica = ref([]); //假设为后台传来的值 const images = ref([]); const key_local = ref(""); const url_video = ref(""); const query = route.query; const name_local = ref(""); console.log("父组件", list_ptoruct.value); onMounted(() => { if (Object.keys(query).length === 0) { // 没有传值直接点开的 swiper.value = images.value; } else { // 从其他页面传过来的值 name_local.value = "(" + query.key_local + ")" + query.name_local; key_local.value = query.key_local; const formData = new FormData(); formData.append( "data", JSON.stringify({ key_local: query.key_local, key_protuct: query.key_protuct, }) ); SetInforProtuct(formData).then((res) => { if (res.code == 0) { if (res.data.list_sweiper.length == 0) { showNotify({ type: "primary", message: "这个商店所有产品都是精品,没有重点推荐的@~@~!", }); } else { images.v

最新推荐

recommend-type

零点GZDSP 4.80A-PRO电脑DSP调音软件下载

零点GZDSP 4.80A-PRO电脑DSP调音软件下载
recommend-type

云计算-软件开发云PPT课件(1).pptx

云计算-软件开发云PPT课件(1).pptx
recommend-type

《Excel-电子表格制作案例教程》成绩评定表(排序、筛选).xlsx

《Excel-电子表格制作案例教程》成绩评定表(排序、筛选).xlsx
recommend-type

【精美排版】基于反向引用的电子商务信用评价算法及其在云计算平台中的实现精.doc

【精美排版】基于反向引用的电子商务信用评价算法及其在云计算平台中的实现精.doc
recommend-type

【税会实务】电子商务的发展对财务会计所造成的冲击与影响.doc

【税会实务】电子商务的发展对财务会计所造成的冲击与影响.doc
recommend-type

C++实现的DecompressLibrary库解压缩GZ文件

根据提供的文件信息,我们可以深入探讨C++语言中关于解压缩库(Decompress Library)的使用,特别是针对.gz文件格式的解压过程。这里的“lib”通常指的是库(Library),是软件开发中用于提供特定功能的代码集合。在本例中,我们关注的库是用于处理.gz文件压缩包的解压库。 首先,我们要明确一个概念:.gz文件是一种基于GNU zip压缩算法的压缩文件格式,广泛用于Unix、Linux等操作系统上,对文件进行压缩以节省存储空间或网络传输时间。要解压.gz文件,开发者需要使用到支持gzip格式的解压缩库。 在C++中,处理.gz文件通常依赖于第三方库,如zlib或者Boost.IoStreams。codeproject.com是一个提供编程资源和示例代码的网站,程序员可以在该网站上找到现成的C++解压lib代码,来实现.gz文件的解压功能。 解压库(Decompress Library)提供的主要功能是读取.gz文件,执行解压缩算法,并将解压缩后的数据写入到指定的输出位置。在使用这些库时,我们通常需要链接相应的库文件,这样编译器在编译程序时能够找到并使用这些库中定义好的函数和类。 下面是使用C++解压.gz文件时,可能涉及的关键知识点: 1. Zlib库 - zlib是一个用于数据压缩的软件库,提供了许多用于压缩和解压缩数据的函数。 - zlib库支持.gz文件格式,并且在多数Linux发行版中都预装了zlib库。 - 在C++中使用zlib库,需要包含zlib.h头文件,同时链接z库文件。 2. Boost.IoStreams - Boost是一个提供大量可复用C++库的组织,其中的Boost.IoStreams库提供了对.gz文件的压缩和解压缩支持。 - Boost库的使用需要下载Boost源码包,配置好编译环境,并在编译时链接相应的Boost库。 3. C++ I/O操作 - 解压.gz文件需要使用C++的I/O流操作,比如使用ifstream读取.gz文件,使用ofstream输出解压后的文件。 - 对于流操作,我们常用的是std::ifstream和std::ofstream类。 4. 错误处理 - 解压缩过程中可能会遇到各种问题,如文件损坏、磁盘空间不足等,因此进行适当的错误处理是必不可少的。 - 正确地捕获异常,并提供清晰的错误信息,对于调试和用户反馈都非常重要。 5. 代码示例 - 从codeproject找到的C++解压lib很可能包含一个或多个源代码文件,这些文件会包含解压.gz文件所需的函数或类。 - 示例代码可能会展示如何初始化库、如何打开.gz文件、如何读取并处理压缩数据,以及如何释放资源等。 6. 库文件的链接 - 编译使用解压库的程序时,需要指定链接到的库文件,这在不同的编译器和操作系统中可能略有不同。 - 通常,在编译命令中加入-l参数,比如使用g++的话可能是`g++ -o DecompressLibrary DecompressLibrary.cpp -lz`,其中`-lz`表示链接zlib库。 7. 平台兼容性 - 在不同平台上使用解压库可能需要考虑平台兼容性问题。 - Windows系统可能需要额外的配置和库文件,因为zlib或其他库可能不是默认预装的。 根据以上知识点,我们可以得出,在C++中解压.gz文件主要涉及到对zlib或类似库的使用,以及熟悉C++的I/O操作。正确使用这些库,能够有效地对压缩文件进行解压,并处理可能出现的错误情况。如果从codeproject获取到的C++解压lib确实是针对.gz文件格式的,那么它很可能已经封装好了大部分的操作细节,让开发者能够以更简单的方式实现解压功能。
recommend-type

【数据融合技术】:甘肃土壤类型空间分析中的专业性应用

# 摘要 数据融合技术作为一种集成多源数据信息的方法,在土壤类型空间分析中发挥着关键作用。本文介绍了数据融合技术的基本概念及其理论基础,阐述了数据预处理、同步整合及冲突解决等关键技术,并详细描述了甘肃土壤类型数据准备的流程,包括数据采集、质量评估、空间化处理及融合实践准备。通过具体案例分析,展示了数据融合在土壤类型空间分布分析、土壤质量评估及土壤保护规划中的应用。同时,文
recommend-type

VM ware如何查看软件版本信息

<think>首先,用户的问题是:“我想查找VMware软件版本信息的查看方法请问如何在VMware中查看软件版本信息”。用户参考了之前的引用,但那些引用主要是关于查看VMware版本的一般方法,现在用户具体想知道在VMware软件中如何查看版本信息。回顾之前的对话:-用户第一次问的是VSCode的版本查看方法。-现在用户问的是VMware的版本查看方法。-系统级指令要求使用中文回答,正确格式化数学表达式(如果需要),但这里可能不需要数学表达式。-指令还要求生成相关问题,并在回答中引用段落时添加引用标识。用户提供的引用[1]到[5]是关于VMware版本的查看方法、下载等,但用户特别强调“参考
recommend-type

数据库课程设计报告:常用数据库综述

数据库是现代信息管理的基础,其技术广泛应用于各个领域。在高等教育中,数据库课程设计是一个重要环节,它不仅是学习理论知识的实践,也是培养学生综合运用数据库技术解决问题能力的平台。本知识点将围绕“经典数据库课程设计报告”展开,详细阐述数据库的基本概念、课程设计的目的和内容,以及在设计报告中常用的数据库技术。 ### 1. 数据库基本概念 #### 1.1 数据库定义 数据库(Database)是存储在计算机存储设备中的数据集合,这些数据集合是经过组织的、可共享的,并且可以被多个应用程序或用户共享访问。数据库管理系统(DBMS)提供了数据的定义、创建、维护和控制功能。 #### 1.2 数据库类型 数据库按照数据模型可以分为关系型数据库(如MySQL、Oracle)、层次型数据库、网状型数据库、面向对象型数据库等。其中,关系型数据库因其简单性和强大的操作能力而广泛使用。 #### 1.3 数据库特性 数据库具备安全性、完整性、一致性和可靠性等重要特性。安全性指的是防止数据被未授权访问和破坏。完整性指的是数据和数据库的结构必须符合既定规则。一致性保证了事务的执行使数据库从一个一致性状态转换到另一个一致性状态。可靠性则保证了系统发生故障时数据不会丢失。 ### 2. 课程设计目的 #### 2.1 理论与实践结合 数据库课程设计旨在将学生在课堂上学习的数据库理论知识与实际操作相结合,通过完成具体的数据库设计任务,加深对数据库知识的理解。 #### 2.2 培养实践能力 通过课程设计,学生能够提升分析问题、设计解决方案以及使用数据库技术实现这些方案的能力。这包括需求分析、概念设计、逻辑设计、物理设计、数据库实现、测试和维护等整个数据库开发周期。 ### 3. 课程设计内容 #### 3.1 需求分析 在设计报告的开始,需要对项目的目标和需求进行深入分析。这涉及到确定数据存储需求、数据处理需求、数据安全和隐私保护要求等。 #### 3.2 概念设计 概念设计阶段要制定出数据库的E-R模型(实体-关系模型),明确实体之间的关系。E-R模型的目的是确定数据库结构并形成数据库的全局视图。 #### 3.3 逻辑设计 基于概念设计,逻辑设计阶段将E-R模型转换成特定数据库系统的逻辑结构,通常是关系型数据库的表结构。在此阶段,设计者需要确定各个表的属性、数据类型、主键、外键以及索引等。 #### 3.4 物理设计 在物理设计阶段,针对特定的数据库系统,设计者需确定数据的存储方式、索引的具体实现方法、存储过程、触发器等数据库对象的创建。 #### 3.5 数据库实现 根据物理设计,实际创建数据库、表、视图、索引、触发器和存储过程等。同时,还需要编写用于数据录入、查询、更新和删除的SQL语句。 #### 3.6 测试与维护 设计完成之后,需要对数据库进行测试,确保其满足需求分析阶段确定的各项要求。测试过程包括单元测试、集成测试和系统测试。测试无误后,数据库还需要进行持续的维护和优化。 ### 4. 常用数据库技术 #### 4.1 SQL语言 SQL(结构化查询语言)是数据库管理的国际标准语言。它包括数据查询、数据操作、数据定义和数据控制四大功能。SQL语言是数据库课程设计中必备的技能。 #### 4.2 数据库设计工具 常用的数据库设计工具包括ER/Studio、Microsoft Visio、MySQL Workbench等。这些工具可以帮助设计者可视化地设计数据库结构,提高设计效率和准确性。 #### 4.3 数据库管理系统 数据库管理系统(DBMS)是用于创建和管理数据库的软件。关系型数据库管理系统如MySQL、PostgreSQL、Oracle、SQL Server等是数据库课程设计中的核心工具。 #### 4.4 数据库安全 数据库安全涉及用户认证、授权、数据加密、审计日志记录等方面,以确保数据的完整性和保密性。设计报告中应考虑如何通过DBMS内置的机制或额外的安全措施来保护数据。 ### 5. 结语 综上所述,一个经典数据库课程设计报告包含了从需求分析到数据库安全的全过程,涵盖了数据库设计的各个方面。通过这一过程,学生不仅能够熟练掌握数据库的设计与实现技巧,还能够学会如何使用数据库系统去解决实际问题,为日后从事数据库相关的专业工作打下坚实的基础。
recommend-type

【空间分布规律】:甘肃土壤类型与农业生产的关联性研究

# 摘要 本文对甘肃土壤类型及其在农业生产中的作用进行了系统性研究。首先概述了甘肃土壤类型的基础理论,并探讨了土壤类型与农业生产的理论联系。通过GIS技术分析,本文详细阐述了甘肃土壤的空间分布规律,并对其特征和影响因素进行了深入分析。此外,本文还研究了甘肃土壤类型对农业生产实际影响,包括不同区域土壤改良和作物种植案例,以及土壤养分、水分管理对作物生长周期和产量的具体影响。最后,提出了促进甘肃土壤与农业可持续发展的策略,包括土壤保护、退化防治对策以及土壤类型优化与农业创新的结合。本文旨在为