华为网站搭建,网页设计一般多少钱,网站开发及流行框架,网站的第二域名怎么用这是在vue2项目中使用到的#xff0c;偶尔同一个方法2和3在写法上会有些区别改动#xff0c;不然就报错
import { downFile, postDownFile} from /utils/request
import { MessageBox } from element-ui;/*** 输入框判空* param {*} str * returns */
export function getTe…这是在vue2项目中使用到的偶尔同一个方法2和3在写法上会有些区别改动不然就报错
import { downFile, postDownFile} from /utils/request
import { MessageBox } from element-ui;/*** 输入框判空* param {*} str * returns */
export function getText(str) {return str.replace(/nbsp;/gi, ) // 将所有 空格 replace .replace(/[^br/]/g, ) // 将所有 换行符 replace
}
export function isNull(str) {if (str ) return truevar regu ^[ ]$var re new RegExp(regu)return re.test(str)
}/*** 判断是否为中文* param {*} str * returns */
export function rulesCN(str) {let reg/^[\u4E00-\u9FA5]$/if(reg.test(str)) {// 中文return true}else {return false}
}/*** 判断是否为英文* param {*} str * returns */
export function rulesEN(str) {let reg/[^a-zA-Z]/gif(!reg.test(str)) {// 英文return true}else {return false}
}/*** 去掉空格* param {*} str * returns */
export function removeTrim(str) {str str.replaceAll( , )return str
}/*** 去掉中文和括号* param {*} strValue * returns */
export function removeChinese(strValue) { if(strValue! null strValue ! ){ var reg /[\u4e00-\u9fa5]/g; return strValue.replace(reg, ).replace(/\|/g,) } else return ;
}/*** 判空* param {*} val * returns */
export const isEmpty (val) {if(val || val {} || val [] || val null || val undefined) {return false}else {return true}
}/*** 当前zoom* returns */
export const zoom () {let zoom document.getElementsByTagName(body)[0].style.zoomreturn zoom
}/*** 设置菜单高亮* param {class类名} className * param {菜单路由} path */
export function MenuHighlight(className, path) {let menuItem document.getElementsByClassName(className)[0].childNodesfor(let i 0; i menuItem.length; i) {if(path.indexOf(menuItem[i].dataset.path) -1) {menuItem[i].setAttribute(class, el-menu-item is-active)}else {menuItem[i].setAttribute(class, el-menu-item)}}
}/*** 下载文件* param {接口地址} url * param {入参} parameter * param {文件名} fileName * returns */
export function downloadFile(url, parameter, fileName) {return downFile(url, parameter).then((data) {if (!data || data.size 0) { // 如果接口没有返回数据就提示下载失败this.$message.warning(存在异常数据文件导出失败)return }// window.navigator.msSaveBlob是显示保存按钮if (typeof window.navigator.msSaveBlob ! undefined) {window.navigator.msSaveBlob(new Blob([data]), fileName)return } else {let url window.URL.createObjectURL(new Blob([data]))let link document.createElement(a)link.style.display nonelink.href urllink.setAttribute(download, fileName)document.body.appendChild(link)link.click()document.body.removeChild(link) // 下载完成移除元素window.URL.revokeObjectURL(url) // 释放掉blob对象return}}).catch(err {this.$message.error(存在异常数据文件导出失败)})
}/*** 将树形结构数据转换为级联要求的字段* param tree* param map* returns*/
export const converTree (tree, map {label: name,value: id,children: children
}) {const result [];tree.forEach((item) {let value item[ map.value ];let label item[ map.label ];let children item[ map.children ];if (children) {children converTree(children, map);}result.push({ value, label, children });})return result
}/*** 将后台数据转换为树形结构* param pid* param arr* returns*/
export const getTrees (pid, arr) {return arr.filter((item) item.parentId pid).map((item) {// item.children getTrees(item.id, arr)let newArr getTrees(item.id, arr)if(Array.isArray(newArr ) newArr.length0){item.children newArr}return item})
}/*** 判断是否文本溢出* param e 事件对象* returns*/
export const isBeyond (e) {const ev window.event || e;const textRange (el) {const textContent elconst targetW textContent.getBoundingClientRect().widthconst range document.createRange()range.setStart(textContent, 0)range.setEnd(textContent, textContent.childNodes.length)const rangeWidth range.getBoundingClientRect().widthreturn rangeWidth targetW}return !textRange(ev.target)
}/**** param {*} form_key* param {*} form_data*/
export const mapKey (form_key, form_data ) {let form_bk {}Object.keys(form_key).forEach(key {form_bk[key] form_data[key]})return form_bk
}// 确认删除提示框
export const confirmDel (callback) {MessageBox.confirm(是否确认删除?,提示,{confirmButtonText: 确认,cancelButtonText: 取消,type: warning,}).then(() {callback()})
}/*** 高亮表格搜索列* param {表格列} tableColumns* param {搜索参数} params* returns*/
export const handleHighLight (tableColumns,params) {// 去除其他列的高亮tableColumns.forEach(item {if (item.className?.includes(is-active)) {let arr item.className.split( )item.className arr[0]}})// 高亮当前搜索列if (params.value ! ) {tableColumns.forEach(item {if (item.className params.field) {item.className params.field is-active}})}
}/*** 删除数组中指定对象* param {数组} arr* param {对象中匹配的key} key* returns*/
export const removeObjWithArr (arr,key) {arr.forEach((item,index,array){if(item.key key){array.splice(index,1)}})
}/*** 判断数据中是否存在某个对象* param {数组} arr* param {对象中的key} key* param {跟key比对的值} val* returns*/
export const findItem (arr,key,val) {for(let i 0; i arr.length; i) {if(arr[i][key] val) {return i}}return -1
}/*** 比对下拉数据* param {*} list * param {*} type * returns */
export const compare (list, type) {let cnName list?.forEach((i) {if(i.type type) {cnName i.name}})return cnName
}/*** 多维数组去重* param {*} list * param {*} type * returns */
export const handleUnique (arr) {// 因对象特别分出数组中的对象单独去重let objArr arr.filter((item) {return Object.prototype.toString.call(item) [object Object];});let otherTypeArr arr.filter((item) {return Object.prototype.toString.call(item) ! [object Object];});// 数组及简单类型处理let obj {};otherTypeArr otherTypeArr.filter((item, index) {let newItem item JSON.stringify(item);return obj.hasOwnProperty(newItem) ? false : (obj[newItem] true);});// 对象类型处理if (objArr.length ! 0) {// 将数组对象转成数组字符串var objToStrArr [];var keyArr [];var key ;var currentObj {};var currentStr ;objArr.forEach(item {// 对象属性排序keyArr [];for (key in item) {keyArr.push(key);}keyArr.sort(); // 降序currentObj {};keyArr.forEach(ele {currentObj[ele] item[ele];})currentStr JSON.stringify(currentObj);// 去除空格及\t空白字符currentStr currentStr.replace(/(\s|[\\t])/g, );objToStrArr.push(currentStr);})objToStrArr.sort();var tmepArr [];// 数组去重objToStrArr.forEach((item, i) {if (item ! tmepArr[tmepArr.length - 1]) {tmepArr.push(item);}})var resultArr [];// 新数组字符串转成数组对象tmepArr.forEach((item) {resultArr.push(JSON.parse(item));})objArr resultArr;}return [...otherTypeArr, ...objArr];
}这是在vue3项目中用到的
import router from /router/indexexport function pick(obj, arr) {return arr.reduce((iter, val) (val in obj (iter[val] obj[val]), iter),{});
}/*** 节流* param {function} fn* param {number} delay* returns {function}*/export function throttle(fn, delay) {let flag true;return function () {// 等上次执行结束if (!flag) return;flag false;fn();setTimeout(() {flag true;}, delay);};
}/*** 判空* param val * returns */
export function isEmpty(val: any) {if(val || val {} || val {} || val [] || val [] || val null || val undefined) {return true}else {return false}
}/*** 过滤对象中多余属性后赋值* param formKey 被赋值数据* param row 赋值数据*/
export function filterKey(formKey: Object, row: Object ) {Object.keys(formKey).forEach((key: string) {formKey[key] row[key]})
}/*** 获取assets静态资源 适用于处理多个链接的资源文件* param url 文件名* returns */
export const getAssetsFile (url: string) {return new URL(~/assets/images/${url}, import.meta.url).href
}/*** 判断是否文本溢出* param e 事件对象* returns*/
export const isBeyond (e: any) {const ev window.event || e;const textRange (el: any) {const textContent el;const targetW textContent.getBoundingClientRect().width;const range document.createRange();range.setStart(textContent, 0);range.setEnd(textContent, textContent.childNodes.length);const rangeWidth range.getBoundingClientRect().width;return rangeWidth targetW;};return !textRange(ev.target);
};/*** 防抖函数* param func * param delay * returns */
export const debounce (func, delay) {let timer;return function() {clearTimeout(timer);timer setTimeout(func, delay);};
}/*** 节流函数* param func * param delay * returns */
export const Throttle (func, delay) {let timer;let lastExecTime 0;return function(...args) {const context this;const currentTime Date.now();if (currentTime - lastExecTime delay) {lastExecTime currentTime;func.apply(context, args);} else {clearTimeout(timer);timer setTimeout(() {lastExecTime currentTime;func.apply(context, args);}, delay - (currentTime - lastExecTime));}};
}/*** 将后端返回的数据转换成echarts pie图需要的数据格式* param dataList * param nameField * param valueField * param paramsField * returns */
export const reconfigPie (dataList, nameField, valueField, paramsField undefined) {const result dataList?.map((item) ({ name: item[nameField], value: item[valueField],params: item[paramsField] item[paramsField],})); return result;
}/*** 将后端返回的数据转换成echarts bar图需要的数据格式* param dataList * param timeField * param yField * param nameField * param countField * returns */
export const reconfigBar (dataList, timeField, yField, nameField, countField) {let format {dtX: [],valY: [],legend: [],}dataList.map((item) {format.dtX.push(item[timeField]);for (let k of item[yField]) {let isExist format.valY.find((j) j.name k[nameField]);if (isExist) {isExist.data.push(k[countField]);} else {format.valY.push({name: k[nameField],data: [k[countField]],});}}});format.legend format.valY?.map(item {return item.name})return format
}/*** params路由传参刷新就消失将数据保存在sessionstorage中* param resultField * param sessionField * returns */
export const saveSessionParams (resultField, sessionField,) {const route router.currentRoute.valuelet paramsVal JSON.parse(sessionStorage.getItem(sessionField));if(!isEmpty(paramsVal)) {resultField paramsVal}else {resultField route.paramsroute.params sessionStorage.setItem(sessionField,JSON.stringify(route.params));}return resultField
}export const saveSessionParams1 (resultField, sessionField) {const route router.currentRoute.value;const paramsVal JSON.parse(sessionStorage.getItem(sessionField));if (Object.keys(route.params).length 0) { // 路由有传参resultField route.paramssessionStorage.setItem(sessionField, JSON.stringify(route.params));} else { // 路由没有传参if (paramsVal) {resultField paramsVal}}return resultField
}