import SparkMD5 from 'spark-md5' import { getPublicImage } from '@/assets/js/middleGround/tool.js' import config from './config' import moment from "moment"; import dps5Api from '@/assets/js/middleGround/api/dps5.js' var tool = { secondToTime(second) { var minute = Math.floor(second / 60) var sec = second % 60 var time if (second < 60) { time = second + '"' } else { time = sec === 0 ? minute + "'" : minute + "'" + sec + '"' } return time }, setCookie: function (c_name, value, expiredays, path) { var exdate = new Date() exdate.setDate(exdate.getDate() + expiredays) document.cookie = c_name + '=' + escape(value) + (expiredays == null ? '' : ';expires=' + exdate.toGMTString()) + (path ? ';path=' + path : '') }, getCookie: function (c_name) { if (document.cookie.length > 0) { var c_start = document.cookie.indexOf(c_name + '=') if (c_start != -1) { c_start = c_start + c_name.length + 1 var c_end = document.cookie.indexOf(';', c_start) if (c_end == -1) c_end = document.cookie.length return unescape(document.cookie.substring(c_start, c_end)) } } return '' }, delCookie: function (name) { var exp = new Date() exp.setTime(exp.getTime() - 1) var cval = tool.getCookie(name) if (cval != null) document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString() }, // 强制保留2位小数,如:2,会在2后面补上00.即2.00 toDecimal2(x) { var f f = parseFloat(x) if (isNaN(f)) { return false } f = Math.round(x * 100) / 100 var s = f.toString() var rs = s.indexOf('.') if (rs < 0) { rs = s.length s += '.' } while (s.length <= rs + 2) { s += '0' } return s }, formateTime(date) { var newDate = new Date(+new Date(date) + 8 * 3600 * 1000) .toISOString() .replace(/T/g, ' ') .replace(/\.[\d]{3}Z/, '') var time = new Date(newDate) return time.getTime() } } //处理表单提交数据 export function worksData(res) { let arr = [] for (let i = 0; i < res.length; i++) { const item = res[i] if (item.typeField) { if (item.typeField.config) { item.typeField.options = JSON.parse(item.typeField.config).option } arr.push(item.typeField) } } return arr } export function worksDataBytool(res, value, linkList) { let arr = [] let nrr = [] if (linkList && linkList.length > 0) { linkList.forEach((e) => nrr.push({ linkProtectType: e.linkProtectType, linkType: e.linkType, md5: e.md5 }) ) } res.forEach((item) => { const obj = { baseType: item.typeField.baseType, order: 0, typeFieldId: item.typeField.id, sequenceNum: item.config ? JSON.parse(item.config).uuid : '', newDataAndFileLinkListRequest: [] } for (let k in value) { if (item.typeField.refCode === k) { if (item.typeField.type == 'File') { try { obj.strValue = JSON.stringify(value[k].map((citem) => citem.md5)) } catch (error) { obj.strValue = '' } obj.newDataAndFileLinkListRequest = nrr } else { if (typeof value[k] == 'object') { obj.strValue = JSON.stringify(value[k]) } else { if (obj.baseType === 'String') { obj.strValue = value[k] + '' } else if (obj.baseType === 'Text') { obj.textValue = value[k] + '' } else { obj.strValue = value[k] + '' } } } } } // if (obj.strValue || obj.textValue) { arr.push(obj) // } }) return arr } export function UpdateworksDataBytool(initData, res, value, linkList) { let arr = [] let newArr = [] for (let i = 0; i < initData.length; i++) { const ele = initData[i] for (let j = 0; j < res.length; j++) { const item = res[j] if (item.sequenceNum == ele.sequenceNum) { item.refCode = ele.typeField.refCode } } } initData.forEach((citem) => { const updateOldData = res.find((f) => f.sequenceNum == citem.sequenceNum) if (updateOldData) { const obj = { baseType: citem.typeField.baseType, order: 0, id: updateOldData.id, typeFieldId: citem.typeField.id, sequenceNum: citem.sequenceNum, setDataAndFileLinkListRequest: [] } for (let k in value) { if (citem.typeField.refCode === k) { if (typeof value[k] == 'object' && k != 'region') { obj.strValue = JSON.stringify(linkList) obj.setDataAndFileLinkListRequest = linkList } else if (typeof value[k] == 'object' && k == 'region') { obj.strValue = value[k]?.join('/') obj.setDataAndFileLinkListRequest = [{ area: value[k] }] } else { obj.strValue = value[k].toString() } } } if (obj.strValue) { arr.push(obj) } } else { const newObj = { baseType: citem.typeField.baseType, order: 0, typeFieldId: citem.typeField.id, sequenceNum: citem.sequenceNum, setDataAndFileLinkListRequest: [] } for (let k in value) { if (citem.typeField.refCode === k) { if (typeof value[k] == 'object') { newObj.strValue = JSON.stringify(linkList) newObj.setDataAndFileLinkListRequest = linkList } else { newObj.strValue = value[k].toString() } } } if (newObj.strValue) { newArr.push(newObj) } } }) return { updateData: arr, newData: newArr } } export function download(url) { const iframe = document.createElement('iframe') iframe.setAttribute('hidden', 'hidden') document.body.appendChild(iframe) iframe.onload = () => { if (iframe) { iframe.setAttribute('src', 'about:blank') } } iframe.setAttribute('src', url) } /** * 获取一个UUID * @param len * @param radix * @returns {string} */ export function uuid(len = 32, radix = 16) { const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('') let uuid = [], i radix = radix || chars.length if (len) { // Compact form for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)] } else { // rfc4122, version 4 form let r // rfc4122 requires these characters uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-' uuid[14] = '4' // Fill in random data. At i==19 set the high bits of clock sequence as // per rfc4122, sec. 4.1.5 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('') } export function getFileMd5(file, chunkSize) { return new Promise((resolve, reject) => { let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice let chunks = Math.ceil(file.size / chunkSize) let currentChunk = 0 let spark = new SparkMD5.ArrayBuffer() let fileReader = new FileReader() fileReader.onload = function (e) { spark.append(e.target.result) currentChunk++ if (currentChunk < chunks) { loadNext() } else { const md5 = spark.end() resolve(md5) } } fileReader.onerror = function (e) { reject(e) } function loadNext() { let start = currentChunk * chunkSize let end = start + chunkSize if (end > file.size) { end = file.size } fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)) } loadNext() }) } // 获取文件 export function getPublicFile(md5, isToken) { const { tokenKey, requestCtx } = config let src = null let token = localStorage.getItem(tokenKey) if (md5) { if (isToken) { src = requestCtx + `/file/api/ApiDownloadForAuthorize?md5=${md5}&token=${token}` } else { src = requestCtx + `/file/api/ApiDownload?md5=${md5}` } } else { return '' } return src } export function getCmsItem({ path, storeId, repositoryId, type, paging, sort, linkTypes, fields, filters, subQuery, keyword, itemId, resType, havePublishInfo, isRightSlider, direction, queryParent }) { const query = { AccessControl: { Path: path, StoreId: storeId + '', RepositoryId: repositoryId + '', Type: type ? type : '\\' }, PageQuery: paging, SortQuery: sort ? [sort] : [], CreateDate: [], Description: [], Name: [], RefCode: [], Type: [], SysType: [], TypeId: [], State: [], Tag: [], LinkDepartment: [], LinkOrg: [], LinkInfo: [], LinkId: [], LinkOrder: [], LinkParentId: [], LinkFile: [], LinkType: linkTypes ?? [], LinkStore: [], LinkRepository: [], LinkPath: [], LinkAppId: [], Creator: [], ...fields, ...filters, ...subQuery }; if (havePublishInfo) { query['PublishInfo'] = []; } if (queryParent) { query['QueryParent'] = { ...queryParent }; } if (keyword) { delete query.Name; query['Name*'] = [keyword]; } if (direction && isRightSlider) { query['Direction'] = [direction]; } if (itemId) query['Id='] = [`${itemId}`]; if (query['CreatorAndAppRole'] != null) { delete query.Creator; } const body = { query: JSON.stringify({ Query: [{ Q1: query }] }) }; return dps5Api.QueryCmsItem(body).then((res) => { if (res && res.length > 0) { const data = res[0]; const datas = handleCmsItemListRequestData(data.datas, fields, path, storeId, repositoryId); return { datas, total: data.totalCount }; } else { return { datas: [], total: 0 }; } }); } export const handleCmsItemListRequestData = (datas, fields, path, storeId, repositoryId) => { const dataList = []; for (let i = 0; i < datas.length; i++) { const item = datas[i]; const _fields = {}; const _datas = []; if (fields != null) { for (let fieldKey in fields) { // 兼容筛选条件的字段值获取,因为后台筛选和取值只能传一个,都会返回值 fieldKey = fieldKey.replace(/[!=<>*]/g, ''); if (item.datas[fieldKey]) { let values = []; if (typeof item.datas[fieldKey] == 'string') { values = JSON.parse(item.datas[fieldKey]); } else { values = item.datas[fieldKey]; } if (values ?.length > 0) { // 用字段名处理返回的字段值 if (values[0].Value) { _fields[fieldKey] = values[0].Value; values[0].sequenceNum = values[0].SequenceNum; } // 兼容处理数据返回的key是CmsItemData // if (values[0].CmsItemData) { // _fields[fieldKey] = values[0].CmsItemData.Value; // values[0].sequenceNum = values[0].CmsItemData.SequenceNum; // } item.datas[fieldKey] = values[0]; if (values ?.length > 1) { const isFile = values.find((citem) => citem.FileList ?.length > 0); const dataItems = deduplicateArray(values, 'FieldId'); if (!isFile) { _datas.push(dataItems[0]); } else { const customFile = { customFileList: values, name: fieldKey, md5: _fields[fieldKey], FieldId: values[0].FieldId, SequenceNum: values[0].SequenceNum }; _datas.push(customFile); } } else { _datas.push(values[0]); } } } } } if (item.datas.LogQuery) { item.datas.LogQuery = JSON.parse(item.datas.LogQuery); } const subDatas = {}; if (item.subDatas) { for (let subData of item.subDatas) { const tag = subData.queryTag.replace('Query', ''); subDatas[tag] = subData.datas; } } dataList.push({ ...item, id: item.id, name: item.datas.Name ? item.datas.Name : item.name, icon: item.datas.Icon, storeId: storeId, repositoryId: repositoryId, refCode: item.datas.RefCode === '[]' ? null : item.datas.RefCode, state: item.datas.State, type: item.datas.Type, tag: item.datas.Tag, creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined, linkType: item.datas.LinkType, childrenCount: parseInt(item.datas.ChildrenCount ?? '0'), childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'), childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'), childrenCmsItemCount: parseInt(item.datas.ChildrenCmsItemCount ?? '0'), childrenFileCount: parseInt(item.datas.ChildrenFileCount ?? '0'), createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD HH:mm:ss'), description: item.datas.Description, sysType: item.datas.SysType, idPath: path + '\\' + item.id, typeId: parseInt(item.datas.TypeId), linkAppId: item.datas.linkAppId, linkFile: JSON.parse(item.datas.LinkFile ?? '[]'), PublishInfo: JSON.parse(item.datas.PublishInfo ?? '[]'), linkInfo: item.datas.LinkInfo ? JSON.parse(item.datas.LinkInfo) : [], linkPath: item.datas.LinkPath ?? null, linkOrg: item.datas.LinkOrg ? JSON.parse(item.datas.LinkOrg) : [], linkDepartment: item.datas.LinkDepartment? JSON.parse(item.datas.LinkDepartment) : [], ..._fields, datas: item.datas, fieldList: _datas, subDatas }); } return dataList; }; // type结构处理 export const handleTypeList = (list) => { for (let i = 0; i < list.length; i++) { const type = list[i]; try { type.cfg = JSON.parse(type.config); } catch (error) { type.cfg = null; } const fieldRefcodeMap = {}; const tableHeaderFieldList = []; const isSearchFieldList = []; const isAdvSearchFieldList = []; const isFilterFieldList = []; handleType({ typeFieldList: type.typeLinkList, fieldRefcodeMap, tableHeaderFieldList, isSearchFieldList, isAdvSearchFieldList, isFilterFieldList }); type.fieldRefcodeMap = fieldRefcodeMap; type.tableHeaderFieldList = tableHeaderFieldList; type.isSearchFieldList = isSearchFieldList; type.isAdvSearchFieldList = isAdvSearchFieldList; type.isFilterFieldList = isFilterFieldList; } return list; }; const handleType = ({ typeFieldList, fieldRefcodeMap, tableHeaderFieldList, isSearchFieldList, isAdvSearchFieldList, isFilterFieldList }) => { for (let i = 0; i < typeFieldList.length; i++) { const item = typeFieldList[i]; try { item.cfg = JSON.parse(item.config); } catch (error) { item.cfg = null; } if (item.typeField) { try { item.typeField.cfg = JSON.parse(item.typeField.config); } catch (error) { item.typeField.cfg = null; } fieldRefcodeMap[item.typeField.refCode] = item; } if (item.cfg && item.cfg.isColHeader) { tableHeaderFieldList.push(item); } if (item.cfg && item.cfg.isSearch) { isSearchFieldList.push(item); } if (item.cfg && item.cfg.isAdvSearch) { isAdvSearchFieldList.push(item); } if (item.cfg && item.cfg.isFilter) { isFilterFieldList.push(item); } if (item.children && item.children.length) { handleType({ typeFieldList: item.children, fieldRefcodeMap, tableHeaderFieldList, isSearchFieldList, isAdvSearchFieldList, isFilterFieldList }); } } }; //处理树形结构 const handleTreeData = (datas, parent, noTriggerSelect = false) => { let parentData = {}; if (parent) { parentData = { ...parent, parent: null }; } else { parentData = null; } const list = []; for (let i = 0; i < datas.length; i++) { const data = datas[i]; const obj = { label: data.name, key: parentData ? parentData.key + "_" + i : i + "", namePath: parentData ? parentData.namePath + "\\" + data.name : data.name, icon: data.icon, data: data, parent: parentData, leaf: false, children: [], }; if (data["children"] && data["children"].length) { obj.leaf = false; obj.children = handleTreeData( data["children"], { ...data, key: obj.key, namePath: obj.namePath, }, i == 0 ? false : true // 如果有子数据处理,只有第一条数据需要展开和回调 ); } else { obj.leaf = !data["childrenChannelCount"] || data["childrenChannelCount"] == 0; } list.push(obj); } console.log(list, "list"); return list; }; //获取资源 const getResourceItem = async (path,storeInfo,filters,fields) => { const params = { path:path.data.idPath, storeId:storeInfo.storeId, repositoryId:storeInfo.repositoryId, type: "\\", sort: { LinkOrder: "Asc", }, paging: { Start: 0, Size: 50, }, filters:{...filters}, fields:{...fields} } const res = await getCmsItem(params); return res; } export default { ...tool, uuid, getFileMd5, worksDataBytool, UpdateworksDataBytool, getPublicImage, worksData, getCmsItem, getPublicFile, handleTypeList, handleTreeData, getResourceItem // parseHtml, }