From 49a435043b0b1a289a24606e35253365d7ab3956 Mon Sep 17 00:00:00 2001
From: QYF-GitLab1 <1940665526@qq.com>
Date: 星期一, 25 八月 2025 17:51:57 +0800
Subject: [PATCH] 首页、及教学出版样式修改

---
 src/assets/js/middleGround/tool.js |  416 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 416 insertions(+), 0 deletions(-)

diff --git a/src/assets/js/middleGround/tool.js b/src/assets/js/middleGround/tool.js
new file mode 100644
index 0000000..6ffb8f5
--- /dev/null
+++ b/src/assets/js/middleGround/tool.js
@@ -0,0 +1,416 @@
+import { requestCtx, appId } from '@/assets/js/config.js'
+// import defaultImg from '@/assets/images/default-book-img.png'
+// import defaultBookFair from '@/assets/images/default-bookFair.png'
+import bookCover from '@/assets/images/book-cover.png'
+// import defaultPub from '@/assets/images/math/default-pub.png'
+// import defaultAudio from '@/assets/images/math/default-audio.png'
+import moment from 'moment'
+// 澶勭悊鍒楄〃鏌ヨ缁撴灉
+export function handleQueryResourceListData({
+  datas,
+  fields,
+  path,
+  storeInfo,
+  repositoryInfo,
+  coverSize,
+  handelEBooK,
+}) {
+  const dataList = []
+  for (let i = 0; i < datas.length; i++) {
+    const item = datas[i]
+    // 澶勭悊瀛楁
+    const _fields = {}
+    if (fields != null) {
+      for (let fieldKey in fields) {
+        if (item.datas[fieldKey]) {
+          const values = JSON.parse(item.datas[fieldKey])
+          if (values.length > 0) {
+            // 鐢ㄥ瓧娈靛悕澶勭悊杩斿洖鐨勫瓧娈靛��
+            if (values[0].Value) {
+              _fields[fieldKey] = values[0].Value
+            } else if (values[0].Data) {
+              _fields[fieldKey] = values[0].Data.Value
+            }
+            item.datas[fieldKey] = values[0]
+          }
+        }
+      }
+    }
+    const subDatas = {}
+    if (item.subDatas) {
+      for (let subData of item.subDatas) {
+        const tag = subData.queryTag.replace('Query', '')
+        subDatas[tag] = subData.datas
+      }
+    }
+
+    let obj = {
+      ...item,
+      id: item.id,
+      name: item.datas.Name,
+      icon: getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height, storeInfo),
+      repositoryInfo: repositoryInfo,
+      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,
+      storeInfo: storeInfo,
+      linkType: item.datas.LinkType,
+      childrenCount: parseInt(item.datas.ChildrenCount ?? '0'),
+      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'),
+      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'),
+      createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD'),
+      beginDate: moment(item.datas.BeginDate).format('YYYY-MM-DD'),
+      endDate: moment(item.datas.EndDate).format('YYYY-MM-DD'),
+      description: item.datas.Description,
+      sysType: item.datas.SysType,
+      idPath: path + '\\' + item.id,
+      typeId: parseInt(item.datas.TypeId),
+      linkFile: JSON.parse(item.datas.LinkFile ?? '[]'),
+      cmsItemType: item.datas.CmsItemType,
+      allowDonate: item.datas.AllowDonate == 'True',
+      // donatePriceList: JSON.parse(item.datas.DonatePriceList ?? "[]"),
+      productLinkInfo: item.datas.ProductLinkInfo ?? '[]',
+      storeEvent: JSON.parse(item.datas.StoreEvent ?? '[]'),
+      linkInfo: JSON.parse(item.datas.LinkInfo ?? '[]'),
+      saleMethod: JSON.parse(item.datas.SaleMethod ?? '[]'),
+      subProductCount: parseInt(item.datas.SubProductCount),
+      ..._fields,
+      datas: item.datas,
+      subDatas,
+    }
+
+    // 缁熶竴澶勭悊浠锋牸
+    if (obj.defaultSaleMethod) {
+      if (handelEBooK) {
+        // 鑾峰彇闅忎功璧勬簮鐨勯攢鍞柟寮�
+        let saleMethod = []
+        try {
+          saleMethod = obj.cmsDatas[0].datas.find(
+            (item) => item.datas.RefCode == 'accompanyingResources',
+          ).datas.SaleMethod
+          saleMethod = JSON.parse(saleMethod)
+        } catch (error) {
+          saleMethod = []
+        }
+        if (saleMethod.length) {
+          Object.keys(saleMethod[0]).map((key) => {
+            let newKey = key.replace(key[0], key[0].toLowerCase())
+            saleMethod[0][newKey] = saleMethod[0][key]
+            delete saleMethod[0][key]
+          })
+          obj.defaultSaleMethod = saleMethod[0]
+          obj.defaultSaleMethodId = saleMethod[0].id
+          obj.alreadyBuy = obj.purchasedSaleMethodIdList.indexOf(obj.defaultSaleMethodId) > -1
+        }
+      }
+      if (obj.defaultSaleMethod.allowEvent && obj.storeEvent.length) {
+        // 宸插弬鍔犳椿鍔紝鑾峰彇鏈夋晥娲诲姩骞惰绠椾环鏍�
+        let time = new Date().getTime()
+        // 杩囨护杩囨湡娲诲姩
+        let event = obj.storeEvent.filter((item) => {
+          let endTime = new Date(item.EndDate).getTime()
+          return endTime > time
+        })
+
+        // 鍙鐞嗕竴鏉℃湁鏁堟椿鍔�
+        if (event.length) {
+          obj.price = (obj.defaultSaleMethod.price * event[0].Value).toFixed(2)
+          obj.oldPrice = obj.defaultSaleMethod.price
+          obj.storeEventId = event[0].Id
+          if (
+            moment().format('YYYY-MM-DD') <
+            moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+          ) {
+            obj.defaultSaleMethodState = 'Normal'
+          } else {
+            obj.defaultSaleMethodState = 'Beyond'
+          }
+        }
+      } else {
+        if (
+          moment().format('YYYY-MM-DD') < moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+        ) {
+          obj.defaultSaleMethodState = 'Normal'
+        } else {
+          obj.defaultSaleMethodState = 'Beyond'
+        }
+        obj.price = obj.defaultSaleMethod.price
+        obj.oldPrice = obj.defaultSaleMethod.virtualPrice
+      }
+    }
+    dataList.push(obj)
+  }
+  return dataList
+}
+
+// 澶勭悊璇︽儏鏌ヨ缁撴灉
+export function handleDetailQueryRequestData({
+  item,
+  fields,
+  path,
+  coverSize,
+  itemFields,
+  handelEBooK,
+}) {
+  item.fileMap = {}
+  let itemFieldsData = []
+  for (const key in itemFields) {
+    itemFieldsData.push(key)
+  }
+  let fieldsData = []
+  for (const key in fields) {
+    fieldsData.push(key)
+  }
+  for (let i = 0; i < fieldsData.length; i++) {
+    const field = fieldsData[i]
+    item.datas[field] = JSON.parse(item.datas[field])
+    const datas = item.datas[field]
+    if (datas.length > 0) {
+      if (datas[0].Value) {
+        item[field] = datas[0].Value
+        if (datas[0].Data.FileLinkList && datas[0].Data.FileLinkList.length) {
+          item.fileMap = {
+            ...item.fileMap,
+            ...handleLinkFileInfo(
+              datas[0].Data.FileLinkList.map((item) => {
+                return {
+                  ...item.File,
+                  ...item,
+                }
+              }),
+            ),
+          }
+        }
+      } else if (datas[0].Data) {
+        item[field] = datas[0].Data.Value
+        if (datas[0].Data.FileLinkList && datas[0].Data.FileLinkList.length) {
+          item.fileMap = {
+            ...item.fileMap,
+            ...handleLinkFileInfo(
+              datas[0].Data.FileLinkList.map((item) => {
+                return {
+                  ...item.File,
+                  ...item,
+                }
+              }),
+            ),
+          }
+        }
+      }
+    }
+  }
+
+  // 澶勭悊cms璧勬簮
+  const subDatas = item.subDatas
+  const linkItemsMap = {}
+  if (subDatas) {
+    for (const sdata of subDatas) {
+      const tag = sdata.queryTag
+      for (const subItem of sdata.datas) {
+        convertCmsItemBase(subItem, coverSize, handelEBooK)
+        subItem.fileMap = {}
+        for (let i = 0; i < itemFieldsData.length; i++) {
+          const itemField = itemFieldsData[i]
+          try {
+            subItem.datas[itemField] = JSON.parse(subItem.datas[itemField])
+          } catch (error) {
+            subItem.datas[itemField] = []
+          }
+          const itemDatas = subItem.datas[itemField]
+          if (itemDatas.length > 0) {
+            if (itemDatas[0].Value) {
+              subItem[itemField] = itemDatas[0].Value
+              if (itemDatas[0].FileList && itemDatas[0].FileList.length) {
+                subItem.fileMap = {
+                  ...subItem.fileMap,
+                  ...handleLinkFileInfo(itemDatas[0].FileList),
+                }
+              }
+            } else if (itemDatas[0].Data) {
+              subItem[itemField] = itemDatas[0].Data.Value
+              if (itemDatas[0].Data.FileList && itemDatas[0].Data.FileList.length) {
+                subItem.fileMap = {
+                  ...subItem.fileMap,
+                  ...handleLinkFileInfo(itemDatas[0].Data.FileList),
+                }
+              }
+            } else if (itemDatas[0].CmsItemData) {
+              subItem[itemField] = itemDatas[0].CmsItemData.Value
+              if (itemDatas[0].CmsItemData.FileList && itemDatas[0].CmsItemData.FileList.length) {
+                subItem.fileMap = {
+                  ...subItem.fileMap,
+                  ...handleLinkFileInfo(itemDatas[0].CmsItemData.FileList),
+                }
+              }
+            }
+          }
+        }
+        if (subItem.productLinkInfo && subItem.productLinkInfo.length) {
+          let itemProductLinkInfo = subItem.productLinkInfo.find(
+            (citem) => citem.Name == item.datas.Name,
+          )
+          subItem.productLinkPath =
+            itemProductLinkInfo.LinkPath + '\\' + itemProductLinkInfo.CmsItemId
+        }
+        if (subItem.linkInfo && subItem.linkInfo.length)
+          subItem.linkPath = subItem.linkInfo[0].LinkPath + '\\' + subItem.linkInfo[0].CmsItemId
+      }
+      linkItemsMap[tag] = sdata.datas
+    }
+  }
+  convertCmsItemBase(item, coverSize, handelEBooK)
+  item.idPath = path + '\\' + item.id
+  item.subItems = linkItemsMap
+  return item
+}
+
+const handleLinkFileInfo = (linkList) => {
+  let linkFileMap = {}
+  for (let z = 0; z < linkList.length; z++) {
+    const linkItem = linkList[z]
+    linkFileMap[linkItem.Md5] = {
+      linkType: linkItem.LinkType,
+      extension: linkItem.Extension,
+      fileName: linkItem.FileName,
+      fileType: linkItem.Type,
+      md5: linkItem.Md5,
+      icon: linkItem.Icon,
+      size: linkItem.Size,
+      // metaData: JSON.parse(linkItem.MetaData ?? "{}"),
+      order: linkItem.Order,
+      protectType: linkItem.ProtectType,
+    }
+  }
+  return linkFileMap
+}
+
+const convertCmsItemBase = (item, coverSize, handelEBooK) => {
+  item.name = item.datas.Name
+  item.description = item.datas.Description
+  item.refCode = item.datas.RefCode
+  item.state = item.datas.State
+  item.type = item.datas.Type
+  item.tag = item.datas.Tag
+  item.typeId = parseInt(item.datas.TypeId)
+  item.icon = getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height)
+  item.sysType = item.datas.SysType
+  item.linkFile = JSON.parse(item.datas.LinkFile ?? '[]')
+  item.linkType = item.datas.LinkType
+  item.linkAppId = parseInt(item.datas.LinkAppId)
+  item.linkStoreId = parseInt(item.datas.LinkStore)
+  item.linkRepoId = item.datas.LinkRepository
+  item.childrenCount = parseInt(item.datas.ChildrenCount ?? '0')
+  ;((item.childrenFolderCount = parseInt(item.datas.ChildrenFolderCount ?? '0')),
+    (item.childrenChannelCount = parseInt(item.datas.ChildrenChannelCount ?? '0')),
+    (item.linkId = parseInt(item.datas.LinkId)))
+  item.linkOrg = JSON.parse(item.datas.LinkOrg ?? '[]')[0]
+  item.linkDepartment = JSON.parse(item.datas.LinkDepartment ?? '[]')[0]
+  item.linkInfo = JSON.parse(item.datas.LinkInfo ?? '[]')
+  item.productLinkInfo = JSON.parse(item.datas.ProductLinkInfo ?? '[]')
+  item.saleMethod = JSON.parse(item.datas.SaleMethod ?? '[]')
+  item.allowDonate = item.datas.AllowDonate == 'True'
+  // item.donatePriceList = JSON.parse(item.datas.DonatePriceList ?? "[]");
+  item.createDate = moment(item.datas.CreateDate).format('YYYY-MM-DD')
+  item.beginDate = moment(item.datas.BeginDate).format('YYYY-MM-DD')
+  item.endDate = moment(item.datas.EndDate).format('YYYY-MM-DD')
+  item.storeEvent = JSON.parse(item.datas.StoreEvent ?? '[]')
+  // 缁熶竴澶勭悊浠锋牸
+  if (item.defaultSaleMethod) {
+    if (handelEBooK) {
+      // 鑾峰彇闅忎功璧勬簮鐨勯攢鍞柟寮�
+      let saleMethod = item.cmsDatas[0].datas.find(
+        (item) => item.refCode == 'accompanyingResources',
+      ).saleMethod
+      if (saleMethod && saleMethod.length > 0) {
+        Object.keys(saleMethod[0]).map((key) => {
+          let newKey = key.replace(key[0], key[0].toLowerCase())
+          saleMethod[0][newKey] = saleMethod[0][key]
+          delete saleMethod[0][key]
+        })
+        item.defaultSaleMethod = saleMethod[0]
+        item.defaultSaleMethodId = saleMethod[0].id
+        item.alreadyBuy = item.purchasedSaleMethodIdList.indexOf(item.defaultSaleMethodId) > -1
+      }
+    }
+    if (item.defaultSaleMethod.allowEvent && item.storeEvent.length) {
+      // 宸插弬鍔犳椿鍔紝鑾峰彇鏈夋晥娲诲姩骞惰绠椾环鏍�
+      let time = new Date().getTime()
+      // 杩囨护杩囨湡娲诲姩
+      let event = item.storeEvent.filter((item) => {
+        let endTime = new Date(item.EndDate).getTime()
+        return endTime > time
+      })
+      // 鍙鐞嗕竴鏉℃湁鏁堟椿鍔�
+      if (event.length) {
+        item.price = (item.defaultSaleMethod.price * event[0].Value).toFixed(2)
+        item.oldPrice = item.defaultSaleMethod.price
+        if (
+          moment().format('YYYY-MM-DD') <
+          moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+        ) {
+          item.defaultSaleMethodState = 'Normal'
+        } else {
+          item.defaultSaleMethodState = 'Beyond'
+        }
+        item.storeEventId = event[0].Id
+      }
+    } else {
+      item.price = item.defaultSaleMethod.price
+      item.oldPrice = item.defaultSaleMethod.virtualPrice
+      if (
+        moment().format('YYYY-MM-DD') < moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+      ) {
+        item.defaultSaleMethodState = 'Normal'
+      } else {
+        item.defaultSaleMethodState = 'Beyond'
+      }
+    }
+  }
+}
+
+export function getTopicMsgCmsItemFile(fileType, fileList) {
+  let obj = {}
+  fileType.forEach((item) => {
+    item.sequenceNum = item.config ? JSON.parse(item.config).uuid : ''
+    fileList.forEach((e) => {
+      if (item.sequenceNum == e.sequenceNum) {
+        try {
+          if (e.fileLinkList.length > 0) {
+            for (let i = 0; i < e.fileLinkList.length; i++) {
+              const ele = e.fileLinkList[i]
+              ele.name = ele.file.fileName
+              ele.md5 = ele.file.md5
+              ele.status = 'success'
+            }
+            obj[item.typeField.refCode] = e.fileLinkList
+          } else {
+            const val = JSON.parse(e.value)
+            obj[item.typeField.refCode] = val
+          }
+        } catch (error) {
+          obj[item.typeField.refCode] = e.value
+        }
+      }
+    })
+  })
+  return obj
+}
+
+// 鑾峰彇涓嶅彈淇濇姢鐨勫浘鐗�
+export function getPublicImage(md5, width, height, storeInfo) {
+  let src = null
+  if (md5) {
+    src = requestCtx + `/file/GetPreViewImage?md5=${md5}`
+  } else {
+    if (storeInfo == `defaultGoodsStore${appId}`) {
+      return bookCover
+    } else {
+      return ''
+    }
+  }
+  if (width && src) src += `&width=${width}`
+  if (height && src) src += `&height=${height}`
+  return src
+}

--
Gitblit v1.9.1