import api from '@/api' import router from '../router' import { Message } from 'element-ui' import Permission from '@/utils/permissions' import showPermissionDialog from "@/utils/model/noPermission/index"; import { Base64 } from 'js-base64'; import Config from '@/config' import moment from "moment"; export default { /** * 防抖 * @param {Function} func * @param {Number} duration * @returns */ debounce(func, duration = 500) { let timer; return () => { clearTimeout(timer) timer = setTimeout(func, duration) } }, /** * 节流 * @param {Function} func * @param {Number} delay * @returns */ throttle(func, delay = 2000) { let flag = true return () => { if (!flag) return; flag = false; setTimeout(() => { func() flag = true }, delay) } }, /** * 树形数据转成扁平数据 * @param {Array} data 树形数据 * @param {Object} prop 配置 * @returns */ treeToArray(data,prop={children:children}){ let res = [] data.forEach(el=>{ res.push(el) el[prop.children] && res.push(...this.treeToArray(el[prop.children])) }) return res }, //对象转数组 objectToArray(val){ var data = [] if (Object.keys(val).length > 0) { Object.keys(val).forEach(item => { if(val[item]){ data.push( { key: item, value: val[item] } ) } }) } else { return [] } return data }, //转简单数组 ArrayToArray(data){ var arr = [] data.forEach(item => { if (item.type == 3) { arr.push({ key:item.value, value:item.searchValue.map(itemValue => { return itemValue.value }) }) } else { arr.push({ key:item.value, value:item.searchValue.label }) } }) return arr }, /** * 获取uuid * @param {*} len 长度 * @param {*} radix 进制 * @returns */ uuid(len, radix) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); var uuid = [], i; radix = radix || chars.length; if (len) { for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix]; } else { var r; uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random()*16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(''); }, /** * 有空格添加引号 * @param {String} val * @returns */ AddQuotationMarks(val){ var sign = ['and','AND','OR','or','NOT','not'] if(typeof val != 'string'){ val = val.toString() } var arr = val.split(/(\s+ and | AND | OR | or | NOT | not \s+)/g) var regex = /\s/ var regex1 = /^["].*["]$|^['].*[']$|^[“].*[”]$|^[‘].*[’]$/ var values = [] for(var i = 0;i 0) { Object.keys(val).forEach(item => { data.push( { key: item, value: val[item] } ) }) } else { return '' } } else if (val.constructor == Array) { if (val.length > 0) { data = val } else { return '' } } else { return val } // 生成字符串 var str = '' data.forEach(item => { var value = '' if (Array.isArray(item.value)) { value = '(' item.value.forEach((i,index)=>{ if(/\s/.test(i)){ value += `"${i}"` }else{ value += i } if(index!= item.value.length- 1){ value += ' OR ' } }) value += ')' } else { if (item.value) { var values = this.AddQuotationMarks(item.value) value = values.join('') } else { return } } if (str) { str = str + ' AND ' + item.key + '=' + value } else { str = str + item.key + '=' + value } }) return str }, /** * 导出Excel * @param {string} head excel头,可为空 * @param {String} body excel体,可为空 * @param {String} worksheetName excel的worksheet名,可为空 * @param {String} ExcelName excel文件名,可为空 */ exportExcel(head, body, worksheetName='Sheet1', ExcelName){ // Worksheet名 const worksheet = worksheetName const uri = 'data:application/vnd.ms-excel;base64,' //文件名 if(!ExcelName){ ExcelName = moment().format('YYYYMMDDHHmmss') } // 下载的表格模板数据 const template = ` ${head}${body}
` // 下载模板 let link = document.createElement('a') link.setAttribute('href', uri + window.btoa(unescape(encodeURIComponent(template)))) link.setAttribute('download', ExcelName + '.xls') link.click() link = null }, /** * 获取字段列表 * @param {Array} array * @param {Function} fun * @param {Object} props * @returns */ getField(array, fun, props) { var type = { 'Array': '3', 'DateTime': '2', 'String': '1' } //获取规范数据 var keys = [] var arr = [] if (props) { keys = Object.keys(props) } //获取所需要的数据 var newArray = array.filter(item => { return fun(item) }) if (keys.length > 0) { newArray.forEach(item => { var obj = {} keys.forEach(key => { if (key == 'type') { obj[key] = type[item[props[key]]] || item[props[key]] }else if(key == 'value' && props.value == 'value'){ obj[key] = item.field }else{ obj[key] = item[props[key]] } }) // 过滤不需要的数据 if (['id'].includes(obj.value) == false) { arr.push(obj) } }) return arr; } return newArray }, /** * 获取表格数据 * @author zhuliu * @param {object} row 当前行数据 * @param {object} field 对应的栏位 * @param {String} prop 数据类型为数组对象时所需要使用的字段 * @param {object} data 需要获取对应label值时的字典对象(包含数据以及配置及{data,prop}) * @param {object} data.prop * @return {String} 返回值 * @example * getColumnData({value:1},{type:'String',value:'value'}) //返回字符串1 */ getColumnData(row, field, prop, data) { if (field.type == 'Array') { if (row[field.value] && row[field.value].length > 0) { if (prop) { return row[field.value].map(item => { return item[prop] }).join('、') } return row[field.value].join('、') } else { return '--' } } else if (field.type == 'Object') { if (!row[field.value]) { return '--' } if (prop) { return row[field.value][prop] } return row[field.value].name } else { if (data) { if (data.data.constructor == Array) { var dataProp = data.prop || { label: 'label', value: 'value' } var obj = data.data.find(item => { return item[dataProp.value] == row[field.value] }) if (obj) { return obj[dataProp.label] } else { return '--' } } else { return data.data[row[field.value]] } } if (row[field.value] == '0') { return '0' } return row[field.value] || '--' } }, //查看图片1 checkViewer(guid) { if(!guid){ return '' } return `/api/fileManager/downloadFile?fileId=${guid}` }, //查看图片2 checkGuid(guid,type='pdf') { if(!guid){ return '' } var src = this.checkViewer(guid) var previewUrl = src + '&fullfilename=test.'+type return `http://${Config.staticURL}:8012/onlinePreview?url=` + encodeURIComponent(Base64.encode(window.location.origin+previewUrl)) }, //跳转预览界面 previewFile(data,guid,type='pdf'){ var FileUrl = this.checkGuid(guid,type) const router1 = router.resolve({ path: '/checkFile', query: { ...data, FileUrl: FileUrl, guid:guid } }) window.open(router1.href, '_blank'); }, //查看专利详情 checkPatentDetails(patentNo,projectId) { router.push( { path: '/patentDetails/' + patentNo, query: { projectId: projectId, } } ) }, /** * 查看显示栏位管理 * @param {*} type //表格类型 * @param {*} patentObj 参数配置 * @param {*} url 接口名称 * @returns */ async getCustomField(type, patentObj = {},url) { var params = { tableName: type, ...patentObj, } var apiItem = '' if(url){ apiItem = url }else{ // apiItem = Object.keys(patentObj).length > 0 ? 'getTableColumns':'getCustomField' apiItem = 'getTableColumns' } var a = [] await api[apiItem](params).then((response) => { if (response.code == 200) { a = response.data.data } }).catch(error => { return [] }); return a }, /** * 获取排序字段(sortProp:{order}) * @param {Object} param0 {sort,column, prop, order,sortProp,defaultValue,multiple} * @returns */ getSortData({ sort, column, prop, order, sortProp, defaultValue, multiple }) { var sortProp1 = sortProp || { "orderBy": "orderBy", "orderType": 'orderType' } if (multiple) { var sortData = sort } else { var sortData = [] } if (order == null) { if (defaultValue) { this.sort = [defaultValue] } this.sort = [ { "orderBy": "createTime", "orderType": 1 } ] } else { var orderType = { ascending: 0, descending: 1 } var params = sortData.find(item => { return item[sortProp1.orderBy] == prop }) if (params) { params[sortProp1.orderType] = orderType[order] } else { params = {} params[sortProp1.orderBy] = prop params[sortProp1.orderType] = orderType[order] sortData.push(params) } } return sortData }, //显示表头数据 renderHeaderMethods(h, { column }, message) { var message = '点击升序' switch (column.order) { case "": message = '点击升序' break; case "ascending": message = '点击降序' break; case 'descending': message = '点击取消排序' break } return [ , h( 'el-tooltip', { props: { content: message, // 鼠标悬停时要展示的文字提示 placement: 'top' // 悬停内容展示的位置 } }, [h('span', column.label)] // 图标 ) ] }, /** * 跳转到导入专利界面 * @param {Object} data 参数 * @param {*} type 导入类型 */ toImportParent(data, type) { if(!(Permission.FunPermissions('xiaoshi/patentImport'))){ showPermissionDialog() return false } var types = { 1: '/import', 2: '/PatentNoImport', 4: '/conditionImport' } router.push( { path: types[type], query: { ...data } } ) }, // 校验文件是否全部上传并处理文件的guid allUploadFile(form) { var arr =[] let allUpload = this.validFile(form.systemFileList,arr) if (allUpload) { Message.warning('文件未全部上传,请耐心等待') return false } if(form.systemFileList && form.systemFileList.length>0){ form.fileGuids = form.systemFileList.map(item => { return item.guid }) }else{ form.fileGuids = [] } }, //校验文件是否全部上传 validFile(data,arr) { if (data && data.length > 0) { for(var i =0;i