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,
|
}
|