关于vue2:Vant-picker-多级联动操作回显默认值

<article class=“article fmt article-content”><p>官网链接</p><p>picker组件多级联动操作回显,官网文档只给了<code>default-index</code>单列抉择时,默认选中项的索引。<br/>多列联动如果设置默认值,回显示用户上次抉择的值那?<br/>通过网上查找没找到具体解决方案,通过多方剖析钻研具体解决方案如下:<br/>1.要先设置<code>default-index</code>属性。<br/>2.通过 ref 获取到 Picker 实例并调用实例办法<code>getIndexes</code></p><pre><code>// htm局部<van-popup v-model=“showPicker” position=“bottom”> <van-picker ref = “vanPicker” show-toolbar :columns=“columns” @cancel=“showPicker = false” @confirm=“onConfirm” default-index=“defaultIndex” /></van-popup>// data局部data(){ return { defaultIndex: 0, seleIndex:[0,0] showPicker: false, columns: [… ] } // 函数局部// 显示选项办法showPicker(){ this.showPicker=true; this.$refs.vanPicker?. setIndexes(this.seleIndex);}// 确认抉择办法onConfirm(val ,index){ this.seleIndex=index; this.defaultIndex= index[0]}</code></pre></article>

February 20, 2024 · 1 min · jiezi

关于vue2:vue2升级vue3遇到的问题汇总

Vue3中的透传Attributes / $attrs:简化组件开发的利器<template> <div> <component :is="dynamicComponent" v-bind="$attrs" /></div></template> <script setup>const dynamicComponent = 'ChildComponent';

September 6, 2023 · 1 min · jiezi

关于vue2:vue导出excel表格并支持样式行高修改xlsxxlsxstyle

前言应用插件xlsx、xlsx-style导出带有款式的表格,两者都能够实现创立excel,然而xlsx免费版仅仅只能做单元格合并,免费版能力设置单元格款式,所以须要用到xlsx-style插件实现表格款式的批改 一、应用步骤1. 装置环境vue: 2.5.22xlsx: 0.18.5xlsx-style: 0.8.132. 引入xlsx库npm i xlsx xlsx-style -S3. 批改js文件这里咱们须要两个文件: node_modules/xlsx/dist里的xlsx.extendscript.jsnode_modules/xlsx/dist里的xlsx.js 批改xlsx.extendscript.js里所有XLSX变量为XLSX2,防止和xlsx.js里的变量抵触var XLSX = {};...批改xlsx.js里的办法,使导出反对自定义行高性能// 减少行高设置var DEF_PPI = 96, PPI = DEF_PPI;function px2pt(px) { return px * 96 / PPI; }function pt2px(pt) { return pt * PPI / 96; }function write_ws_xml_data(ws, opts, idx, wb) { var o = [], r = [], range = safe_decode_range(ws['!ref']), cell="", ref, rr = "", cols = [], R=0, C=0, rows = ws['!rows']; var dense = Array.isArray(ws); var params = ({r:rr}), row, height = -1; for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C); for(R = range.s.r; R <= range.e.r; ++R) { r = []; rr = encode_row(R); for(C = range.s.c; C <= range.e.c; ++C) { ref = cols[C] + rr; var _cell = dense ? (ws[R]||[])[C]: ws[ref]; if(_cell === undefined) continue; if((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell); } if(r.length > 0 || (rows && rows[R])) { params = ({r:rr}); if(rows && rows[R]) { row = rows[R]; if(row.hidden) params.hidden = 1; height = -1; if (row.hpx) height = px2pt(row.hpx); else if (row.hpt) height = row.hpt; if (height > -1) { params.ht = height; params.customHeight = 1; } if (row.level) { params.outlineLevel = row.level; } } o[o.length] = (writextag('row', r.join(""), params)); } } if(rows) for(; R < rows.length; ++R) { if(rows && rows[R]) { params = ({r:R+1}); row = rows[R]; if(row.hidden) params.hidden = 1; height = -1; if (row.hpx) height = px2pt(row.hpx); else if (row.hpt) height = row.hpt; if (height > -1) { params.ht = height; params.customHeight = 1; } if (row.level) { params.outlineLevel = row.level; } o[o.length] = (writextag('row', "", params)); } } return o.join("");}创立自定义的js文件export2Excel.js 内容如下// 将一个sheet转成最终的excel文件的blob对象,而后利用URL.createObjectURL下载function sheet2blob(sheet, sheetName) { sheetName = sheetName || 'sheet1'; var workbook = { SheetNames: [sheetName], Sheets: {} }; workbook.Sheets[sheetName] = sheet; // 生成excel的配置项 var wopts = { bookType: 'xlsx', // 要生成的文件类型 bookSST: false, // 是否生成Shared String Table,官网解释是,如果开启生成速度会降落,但在低版本IOS设施上有更好的兼容性 type: 'binary' }; var wbout = XLSX.write(workbook, wopts); var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" }); // 字符串转ArrayBuffer function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } return blob;} // 将workbook装化成blob对象,可反对多个sheetfunction workbook2blob(workbook) { // 生成excel的配置项 var wopts = { // 要生成的文件类型 bookType: "xlsx", // 是否生成Shared String Table,官网解释是,如果开启生成速度会降落,但在低版本IOS设施上有更好的兼容性 bookSST: false, type: "binary" }; var wbout = XLSX.write(workbook, wopts); // 将字符串转ArrayBuffer function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff; return buf; } var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" }); return blob;}/** * 通用的关上下载对话框办法 * @param url 下载地址,也能够是一个blob对象,必选 * @param saveName 放弃文件名,可选 */function openDownloadDialog(url, saveName) { if (typeof url == 'object' && url instanceof Blob) { // 创立blob地址 url = URL.createObjectURL(url); } var aLink = document.createElement('a'); aLink.href = url; // HTML5新增的属性,指定保留文件名,能够不要后缀,留神,file:///模式下不会失效 aLink.download = saveName || ''; var event; if (window.MouseEvent) event = new MouseEvent('click'); else { event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); } aLink.dispatchEvent(event);}// 为合并项增加边框function addRangeBorder(range, ws) { let arr = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; range.forEach(item => { let startColNumber = Number(item.s.r), endColNumber = Number(item.e.r); let startRowNumber = Number(item.s.c), endRowNumber = Number(item.e.c); const test = ws[arr[startRowNumber] + (startColNumber + 1)]; for (let col = startColNumber; col <= endColNumber; col++) { for (let row = startRowNumber; row <= endRowNumber; row++) { ws[arr[row] + (col + 1)] = test; } } }) return ws;}4. index.html引入<script src="xlsx.js"></script><script src="export2Excel.js"></script><script src="xlsx.extendscript.js"></script>5. vue代码<template> <div class="config-form"> <el-button @click="exportExcel">下载文档</el-button> </div></template><script> export default { data() { return { value: [20, 50], excelAoa: [ ['XXXXXXXXXX记录表', null, null, null, null, null, null], ['与会者', null, null, null, null, null, null] ['序号', '姓名', '性别', '年龄', '批改人', '批改日期', '提交日期'] ] } }, methods: { exportExcel() { const aoa = [ ...this.excelAoa ]; //这个就是批改格局的代码 sheet["A1"].s = { font: { sz: 14, bold: true, color: { rgb: "0000FF" } }, fill: { bgColor: { indexed: 64 }, fgColor: { rgb: "FFFF00" } } }; //<====设置xlsx单元格款式 const sheet = this.xlsxAddStyle(aoa); openDownloadDialog(sheet2blob(sheet), '导出.xlsx'); }, // 表格款式设置 xlsxAddStyle(aoa) { // 留神XLSX2变量 const sheet = XLSX2.utils.aoa_to_sheet(aoa); // 合并单元格 s 开始坐标 e完结坐标 c-x轴 r-y轴 const mergeArr = [ {s: {c: 0, r: 0}, e: {c: 6, r: 0}}, {s: {c: 1, r: 1}, e: {c: 6, r: 1}} ] const rowH = []; // 表格每列高度 // 单元格外侧有框线 const borderAll = { top: { style: "thin" }, bottom: { style: "thin" }, left: { style: "thin" }, right: { style: "thin" }, }; // 单元格外侧无框线 const noBorder = { top: { style: "" }, bottom: { style: "" }, left: { style: "" }, right: { style: "" }, }; for (const key in sheet) { if (Object.hasOwnProperty.call(sheet, key)) { const element = sheet[key]; if (typeof element === "object") { const index = Number(key.slice(1)) - 1; rowH[index] = { hpx: 30 }; element.s = { alignment: { horizontal: "center", // 所有单元格右对齐 vertical: "center", // 所有单元格垂直居中 wrapText: true // 换行 }, font: { name: "微软雅黑", sz: 10, italic: false, underline: false, }, border: borderAll, fill: { fgColor: { rgb: "FFFFFFFF" }, }, }; // 题目的款式 if (['A1'].includes(key)) { element.s.alignment.horizontal = 'center'; element.s.font.bold = true; element.s.font.sz = 15; element.s.fill.border = noBorder; } } } } // 单元格的列宽 sheet["!cols"] = [ { wpx: 60 }, { wpx: 100 }, { wpx: 120 }, { wpx: 120 }, { wpx: 100 }, { wpx: 100 }, { wpx: 100 } ]; sheet["!rows"] = rowH; sheet["!merges"] = mergeArr; // 合并项增加边框 const sheetNew = addRangeBorder(sheet['!merges'], sheet); return sheetNew } } }</script>

June 8, 2023 · 5 min · jiezi

关于vue2:优化vue-项目启动编译过程中很慢问题

第一种办法:1.装置插件babel-plugin-dynamic-import-webpack npm install babel-plugin-dynamic-import-webpack --save-dev 2.在.babelrc内写入配置 "env": { "development": { "plugins": ["dynamic-import-webpack"]}} 亲测无效: 第二种办法:1.装置插件babel-plugin-dynamic-import-node npm install babel-plugin-dynamic-import-node 2.在.babelrc内写入配置 "env": { "development": { "plugins": ["dynamic-import-node"]}} 本我的项目没什么用,晓得其他人是不是也这样

March 29, 2023 · 1 min · jiezi

关于vue2:vue2使用sortablejs实现eltable的行拖拽

<!-- 全局组件 --><gl-dialog :title="dialogTitle" ref="dialog" top="2vh" :destroy-on-close="true" :visible.sync="visible" width="92%" @close="closeDialog"> <!-- 全局组件--> <gl-table v-if="visible" height="750px" row-key="id" :ref="tableKey" :loading="loading" :column="filterColumns" :table-data="dataList" :total="dataCount" :show-total="false" :display-label="displayLabel" :sortChange="sortChange" :hidePagination="true" @pagination="handlePagination"> <el-table-column label="操作" width="60" fixed="right" align="center" v-if="isEmptyData&&handleType==='edit'"> <template slot-scope="{row}"> <el-button size="mini" type="text" @click.stop="dialogHandle(row)">批改</el-button> </template> </el-table-column> </gl-table>js局部 setSort() { const table = this.$refs[this.tableKey].$refs.multipleTable; // 获取el-table的tbody的dom节点 const el = table.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0]; this.sortable = Sortable.create(el, { ghostClass: 'sortable-ghost', onEnd: evt => { const targetRow = this.dataList.splice(evt.oldIndex, 1)[0]; // this.dataList是table的数据,通过splice进行替换,从而达到数据更新目标 this.dataList.splice(evt.newIndex, 0, targetRow); this.$nextTick(() => { table.doLayout(); }) } }) },css局部 ...

August 30, 2022 · 1 min · jiezi

关于vue2:vue2veevalidate2表单校验

1.开发环境 vue2+vee-validate22.电脑系统 windows11专业版3.在开发的过程中,咱们常常会应用到表单来解决数据,然而表单的数据怎么校验呢?上面我来分享一下办法,心愿对你有所帮忙。4.装置: npm install vee-validate --save4-1.在main.js或者index.js中引入: import veeCustomSet from 'veeCustomSetAdmin';import VeeValidate from 'vee-validate';Vue.use(VeeValidate);veeCustomSet.localizeDictionary(VeeValidate);veeCustomSet.extendRegex(VeeValidate);4-2.在对应的页面中应用: // template代码<input type="text" name="phone" maxlength="11" v-model="FormData.phoneNumber" v-validate.inital="`required|cellphone|isCellPhone:电话号码,${oldPhone}`" placeholder="请输出11位电话号码"><p class="errormsg"> <span class="validateError" v-show="errors.has('phone')" v-html="errors.first('phone')"> </span></p>methods代码extendValidate() { this.$validator.extend('isCellPhone', { getMessage() { return `必填`; }, validate(value, arg) { if ((!!arg[1] && (arg[1] == value)) || value == '') { return true; } return new Promise((resolve) => { // _this.$Axios.post('',{ // phone: value // }).then((res) => { // let result = true; // if (res.code != 1000000) { // result = false; // } // return resolve({ // valid: result // }); // }); return resolve({ valid: true }); }); } });},// 成果如下:// 手机号输出不对 ...

April 20, 2022 · 2 min · jiezi