zouyu
2025-03-18 1c598b62976901679a6ba723d6fbe2dc6771f11f
检验任务&首页代码迁移
已添加13个文件
已重命名2个文件
已修改16个文件
已删除1个文件
1995 ■■■■■ 文件已修改
.env.production 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/report.js 补丁 | 查看 | 原始文档 | blame | 历史
src/api/chart/dailyBusinessStatistical.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/login.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/notice.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/gcyq.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/guocheng.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/jiegou.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/jixiao.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/kanban.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/kexue.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/source.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/testaa.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/tixi.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/svg/tongyong.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pay.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/styles/element-ui.scss 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionOrder/add.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/Inspection.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 628 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/logindemo.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/thirdpartylogin.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/workers/InspectionWorker.worker.js 946 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/workers/InspectionWorkerAsData.worker.js 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.production
@@ -8,4 +8,4 @@
VUE_APP_BASE_API = '/prod-api'
# ç”Ÿäº§çŽ¯å¢ƒip+端口
VUE_BASE_URL = ''
VUE_BASE_URL = 'https://zttx-lims.ztt.cn:8021/'
public/favicon.ico

src/api/business/report.js
src/api/chart/dailyBusinessStatistical.js
@@ -24,3 +24,30 @@
        params: params
    })
}
//添加日程
export function addSchedule(data) {
    return resquest({
        url: '/report/addSchedule',
        method: 'post',
        params: data
    })
}
//查询日历任务图
export function calendarWorkByWeek() {
    return resquest({
        url: '/report/calendarWorkByWeek',
        method: 'get',
    })
}
//查询日历任务图
export function ScheduleByMe(data) {
    return resquest({
        url: '/report/ScheduleByMe',
        method: 'post',
        params:data
    })
}
src/api/login.js
@@ -19,6 +19,27 @@
  })
}
// èŽ·å–å•ç‚¹ç™»å½•åœ°å€
export function getSsoAuthUrl() {
  return request({
    url: '/getSsoAuthUrl',
    method: 'get'
  })
}
// å•点登录
export function LoginBySSO(accessToken) {
  return request({
    url: '/loginBySSO',
    headers: {
      isToken: false,
      repeatSubmit: false
    },
    method: 'post',
    params: accessToken
  })
}
// æ³¨å†Œæ–¹æ³•
export function register(data) {
  return request({
src/api/system/notice.js
@@ -42,3 +42,64 @@
    method: 'delete'
  })
}
// æ¶ˆæ¯é€šçŸ¥-滚动分页查询
export function pageNotice(query) {
  return request({
    url: '/informationNotification/page',
    method: 'get',
    params: query
  })
}
// æ¶ˆæ¯é€šçŸ¥-更新消息状态(拒绝、接收)
export function updateMessageStatus(query) {
  return request({
    url: '/informationNotification/updateMessageStatus',
    method: 'put',
    data: query
  })
}
// æ¶ˆæ¯é€šçŸ¥-标记所有信息为已读/删除所有已读消息
export function informationReadOrDelete(isMarkAllInformationRead) {
  return request({
    url: '/informationNotification/informationReadOrDelete/' + isMarkAllInformationRead,
    method: 'put',
  })
}
// æ¶ˆæ¯é€šçŸ¥-删除数据
export function deleteDataBasedOnId(query) {
  return request({
    url: '/informationNotification/deleteDataBasedOnId',
    method: 'delete',
    params: query
  })
}
// æ¶ˆæ¯é€šçŸ¥-查询是否存在未读数据
export function checkForUnreadData() {
  return request({
    url: '/informationNotification/checkForUnreadData',
    method: 'get',
  })
}
// æ¶ˆæ¯é€šçŸ¥-点击详情触发修改状态为已读
export function triggerModificationStatusToRead(id) {
  return request({
    url: '/informationNotification/triggerModificationStatusToRead/' + id,
    method: 'put',
  })
}
// æ¶ˆæ¯é€šçŸ¥-获取首页四种消息数量
export function getNumberFourTypesMessagesHomePage() {
  return request({
    url: '/informationNotification/getNumberFourTypesMessagesHomePage',
    method: 'get',
  })
}
src/assets/icons/svg/gcyq.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742292324381" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15701" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M197.8368 862.45376c43.008-12.288 73.728-49.152 79.872-92.16 67.584 61.44 153.6 98.304 245.76 98.304s184.32-36.864 245.76-98.304c18.432 43.008 49.152 79.872 92.16 92.16-86.016 79.872-202.752 129.024-331.776 129.024-129.024 0-245.76-49.152-331.776-129.024z m-36.864-178.176c36.864 0 61.44 24.576 61.44 61.44s-24.576 61.44-61.44 61.44-61.44-24.576-61.44-61.44 24.576-61.44 61.44-61.44zM873.6768 622.87872c12.288-36.864 24.576-79.872 24.576-122.88 0-172.032-116.736-313.344-270.336-356.352 12.288-18.432 24.576-43.008 24.576-73.728 0-18.432-6.144-30.72-12.288-49.152 221.184 49.152 380.928 245.76 380.928 479.232 0 61.44-12.288 116.736-30.72 165.888-18.432-24.576-55.296-43.008-92.16-43.008h-24.576zM419.0208 20.72576c-6.144 18.432-12.288 30.72-12.288 49.152 0 30.72 12.288 55.296 24.576 73.728-153.6 43.008-270.336 184.32-270.336 356.352 0 43.008 6.144 86.016 24.576 122.88h-24.576c-36.864 0-73.728 18.432-92.16 43.008-18.432-49.152-30.72-104.448-30.72-165.888 0-233.472 159.744-430.08 380.928-479.232zM529.6128 8.43776c36.864 0 61.44 24.576 61.44 61.44s-24.576 61.44-61.44 61.44-61.44-24.576-61.44-61.44 24.576-61.44 61.44-61.44zM898.2528 684.27776c36.864 0 61.44 24.576 61.44 61.44s-24.576 61.44-61.44 61.44-61.44-24.576-61.44-61.44 24.576-61.44 61.44-61.44z" fill="#2c2c2c" p-id="15702"></path></svg>
src/assets/icons/svg/guocheng.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742295109366" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="52688" width="128" height="128"><path d="M197.8368 862.45376c43.008-12.288 73.728-49.152 79.872-92.16 67.584 61.44 153.6 98.304 245.76 98.304s184.32-36.864 245.76-98.304c18.432 43.008 49.152 79.872 92.16 92.16-86.016 79.872-202.752 129.024-331.776 129.024-129.024 0-245.76-49.152-331.776-129.024z m-36.864-178.176c36.864 0 61.44 24.576 61.44 61.44s-24.576 61.44-61.44 61.44-61.44-24.576-61.44-61.44 24.576-61.44 61.44-61.44zM873.6768 622.87872c12.288-36.864 24.576-79.872 24.576-122.88 0-172.032-116.736-313.344-270.336-356.352 12.288-18.432 24.576-43.008 24.576-73.728 0-18.432-6.144-30.72-12.288-49.152 221.184 49.152 380.928 245.76 380.928 479.232 0 61.44-12.288 116.736-30.72 165.888-18.432-24.576-55.296-43.008-92.16-43.008h-24.576zM419.0208 20.72576c-6.144 18.432-12.288 30.72-12.288 49.152 0 30.72 12.288 55.296 24.576 73.728-153.6 43.008-270.336 184.32-270.336 356.352 0 43.008 6.144 86.016 24.576 122.88h-24.576c-36.864 0-73.728 18.432-92.16 43.008-18.432-49.152-30.72-104.448-30.72-165.888 0-233.472 159.744-430.08 380.928-479.232zM529.6128 8.43776c36.864 0 61.44 24.576 61.44 61.44s-24.576 61.44-61.44 61.44-61.44-24.576-61.44-61.44 24.576-61.44 61.44-61.44zM898.2528 684.27776c36.864 0 61.44 24.576 61.44 61.44s-24.576 61.44-61.44 61.44-61.44-24.576-61.44-61.44 24.576-61.44 61.44-61.44z" p-id="52689"></path></svg>
src/assets/icons/svg/jiegou.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742295073668" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="51639" width="128" height="128"><path d="M157.57312 744.2432c70.00064 0 126.85312 61.76768 126.85312 137.87136s-56.9344 137.91232-126.85312 137.91232C87.6544 1020.02688 30.72 958.21824 30.72 882.11456s56.85248-137.91232 126.85312-137.91232z m0 168.83712c15.64672 0 28.4672-13.9264 28.4672-30.96576 0-16.9984-12.82048-30.96576-28.4672-30.96576-15.7696 0-28.50816 13.9264-28.50816 30.96576 0 17.12128 12.86144 30.96576 28.50816 30.96576zM886.90688 36.98688c69.91872 0 126.85312 61.80864 126.85312 137.91232s-56.9344 137.78944-126.85312 137.78944c-69.87776 0-126.85312-61.8496-126.85312-137.91232 0-76.10368 56.9344-137.78944 126.85312-137.78944z m0 168.87808c15.64672 0 28.4672-13.9264 28.4672-30.96576s-12.6976-30.96576-28.4672-30.96576c-15.7696 0-28.4672 13.9264-28.4672 30.96576 0 16.9984 12.82048 30.96576 28.4672 30.96576zM339.06688 228.9664c70.0416 0 126.85312 61.8496 126.85312 137.95328 0 76.10368-56.9344 137.87136-126.85312 137.87136-69.87776 0-126.81216-61.76768-126.81216-137.87136S269.1072 228.9664 339.06688 228.9664z m0 169.04192c15.7696 0 28.50816-13.9264 28.50816-30.96576 0-17.16224-12.6976-30.96576-28.50816-30.96576-15.72864 0-28.4672 13.9264-28.4672 30.96576 0 17.12128 12.82048 30.96576 28.4672 30.96576zM700.94848 594.61632c70.00064 0 126.73024 61.80864 126.73024 137.78944s-56.85248 137.91232-126.73024 137.91232c-69.91872 0-126.85312-61.8496-126.85312-137.91232 0-76.10368 56.85248-137.78944 126.85312-137.78944z m0 168.7552c15.64672 0 28.4672-13.9264 28.4672-30.96576s-12.82048-30.96576-28.4672-30.96576c-15.7696 0-28.4672 13.9264-28.4672 30.96576 0 16.9984 12.82048 30.96576 28.4672 30.96576z" p-id="51640"></path><path d="M129.76128 932.08576c-25.31328-10.48576-38.05184-41.45152-28.38528-68.97664L282.91072 347.83232c5.85728-16.54784 18.92352-28.95872 34.816-32.9728 15.85152-4.01408 32.5632 0.8192 44.52352 12.9024l307.4048 310.51776 160.84992-481.64864c9.25696-27.77088 37.51936-41.94304 62.95552-32.03072 25.51808 10.07616 38.66624 40.79616 29.45024 68.4032l-185.9584 557.54752a50.66752 50.66752 0 0 1-34.69312 33.66912 46.61248 46.61248 0 0 1-45.01504-12.73856l-308.4288-311.5008-155.56608 441.22112c-7.49568 21.2992-26.09152 34.4064-45.8752 34.4064-5.89824 0-11.75552-1.18784-17.6128-3.56352z" p-id="51641"></path></svg>
src/assets/icons/svg/jixiao.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742295159707" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="55724" id="mx_n_1742295159708" width="128" height="128"><path d="M265.626741 519.173705c118.701281 118.701281 311.150529 118.701281 429.851811 0 118.701281-118.701281 118.701281-311.150529 0-429.851811-118.701281-118.701281-311.150529-118.687019-429.851811 0.014262-118.701281 118.687019-118.701281 311.136267 0 429.837549z" p-id="55725"></path><path d="M719.195989 649.141838c-64.691699-27.839109-144.329805-41.074095-238.686128-41.074094C190.595209 608.067744 38.506964 732.54507 38.506964 1022.459721h452.043231c-10.610808-29.550529-16.315543-61.382953-16.315543-94.584512-0.114095-142.960669 106.792646-261.048691 244.961337-278.733371z" p-id="55726"></path><path d="M902.2039 915.096602c0 10.610808-8.557103 19.167911-19.167911 19.167911-10.610808 0-19.167911-8.557103-19.167911-19.167911V832.035655h-83.060947c-10.610808 0-19.167911-8.557103-19.167911-19.167911 0-10.610808 8.557103-19.167911 19.167911-19.167911h121.396769v121.396769z m-47.463399-47.577493l-43.926462 73.134707h-105.081226l-58.302395 58.302396c-3.765125 3.765125-8.671198 5.590641-13.57727 5.59064-4.906072 0-9.812145-1.825515-13.577271-5.59064a19.143666 19.143666 0 0 1 0-27.154541l69.483677-69.483677h99.262396l32.745181-54.53727c5.476546-9.013482 17.228301-11.979944 26.241783-6.617493 9.241671 5.476546 12.208134 17.228301 6.731587 26.355878z m-86.711977-156.880223c-119.913538 0-217.236323 97.208691-217.236323 217.236323 0 34.000223 7.98663 66.060836 21.906183 94.698607H963.244568c13.919554-28.637772 21.906184-60.698384 21.906184-94.698607 0.114095-119.913538-97.094596-217.236323-217.122228-217.236323z" p-id="55727"></path></svg>
src/assets/icons/svg/kanban.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742295203078" class="icon" viewBox="0 0 1047 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="56784" width="128" height="128"><path d="M960 2.91c48.198 0 87.273 39.074 87.273 87.272v669.09c0 48.199-39.075 87.273-87.273 87.273H87.273C39.075 846.545 0 807.471 0 759.273V90.182C0 41.984 39.075 2.909 87.273 2.909H960zM858.53 239.795a43.636 43.636 0 0 0-59.723 0.786l-1.92 1.978L602.91 454.69l-114.996-184-1.542-2.297a43.636 43.636 0 0 0-65.746-6.01l-1.92 1.995-232.727 254.546-1.803 2.094a43.636 43.636 0 0 0 2.501 57.542l2.066 2.007 2.094 1.804a43.636 43.636 0 0 0 57.542-2.502l2.007-2.065 193.979-212.16 115.008 184.029 1.547 2.298a43.636 43.636 0 0 0 65.746 6.004l1.92-1.99L861.312 301.44l1.804-2.095a43.636 43.636 0 0 0-4.573-59.549h-0.012z m14.197 694.022a43.636 43.636 0 0 1 2.56 87.203l-2.56 0.07H174.545a43.636 43.636 0 0 1-2.56-87.203l2.56-0.07h698.182z" p-id="56785"></path></svg>
src/assets/icons/svg/kexue.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742295043227" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="50552" width="128" height="128"><path d="M224 85.312a32 32 0 0 1 32-32h512a32 32 0 0 1 0 64H256a32 32 0 0 1-32-32z" p-id="50553"></path><path d="M352.384 85.312a32 32 0 0 1 32-32h256.192a32 32 0 0 1 32 32v228.16l150.784 312.576a32 32 0 0 1-57.6 27.84L611.776 334.72a32 32 0 0 1-3.2-13.888v-203.52H416.384v203.52a32 32 0 0 1-3.2 13.888l-154.496 319.168a32 32 0 1 1-57.6-27.84l151.296-312.576V85.312z" p-id="50554"></path><path d="M166.272 931.648a69.76 69.76 0 0 1-32.384-93.248l96-198.4S384 746.624 512 640c128-106.688 282.56 0 282.56 0l95.808 198.464a69.76 69.76 0 0 1-62.912 100.16H196.736c-10.56 0-20.992-2.368-30.464-6.976z" p-id="50555"></path><path d="M693.76 631.104c-48.576-11.84-107.584-11.2-161.28 33.472-74.304 61.952-156.416 61.376-217.088 46.528a347.52 347.52 0 0 1-71.552-26.368l-81.152 167.68a37.76 37.76 0 0 0 34.048 54.272h630.784a37.824 37.824 0 0 0 34.048-54.272l28.8-13.888-28.8 13.888-91.776-190.208a285.888 285.888 0 0 0-76.032-31.104z m100.864 8.96l18.176-26.368a32 32 0 0 1 10.624 12.416l95.744 198.528-27.072 13.056 27.072-13.056a101.76 101.76 0 0 1-91.648 146.048H196.736a101.824 101.824 0 0 1-91.648-146.176l96-198.4a32 32 0 0 1 46.976-12.48l0.064 0.064-18.176 26.304 18.176-26.304h0.064l0.96 0.64 4.224 2.688a284.352 284.352 0 0 0 77.184 31.872c48.384 11.84 107.328 11.264 160.96-33.472 74.368-61.952 156.608-61.312 217.344-46.528a350.208 350.208 0 0 1 101.376 43.136l1.728 1.088 0.512 0.384 0.192 0.064v0.064h0.064l-18.112 26.368z" p-id="50556"></path><path d="M512 832a64 64 0 1 1-128 0 64 64 0 0 1 128 0zM768 736a32 32 0 1 1-64 0 32 32 0 0 1 64 0zM640 672a32 32 0 1 1-64 0 32 32 0 0 1 64 0z" p-id="50557"></path></svg>
src/assets/icons/svg/source.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742292810401" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23099" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M522.24 407.87968l-491.52-163.84v-40.96l491.52-163.84 491.52 163.84v40.96l-491.52 163.84z m-491.52 0v40.96l491.52 163.84 491.52-163.84v-40.96l-122.88-40.96-368.64 122.88-368.64-122.88-122.88 40.96z" fill="#FFFFFF" p-id="23100"></path><path d="M30.72 612.67968v40.96l491.52 163.84 491.52-163.84v-40.96l-122.88-40.96-368.64 122.88-368.64-122.88-122.88 40.96z m0 204.8v40.96l491.52 163.84 491.52-163.84v-40.96l-122.88-40.96-368.64 122.88-368.64-122.88-122.88 40.96z" fill="#FFFFFF" p-id="23101"></path></svg>
src/assets/icons/svg/testaa.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742294201092" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="41989" id="mx_n_1742294201092" width="128" height="128"><path d="M831.825474 63.940169H191.939717C121.2479 63.940169 63.940169 121.2479 63.940169 191.939717v639.885757C63.940169 902.517291 121.2479 959.825022 191.939717 959.825022h639.885757c70.691817 0 127.999548-57.307731 127.999548-127.999548V191.939717C959.825022 121.2479 902.517291 63.940169 831.825474 63.940169zM895.884854 831.998871A63.835408 63.835408 0 0 1 831.912173 895.884854H192.087827c-17.112123 0-33.270563-6.574639-45.372232-18.67631S127.880338 849.110994 127.880338 831.998871V192.001129A64.236389 64.236389 0 0 1 192.087827 127.880338h639.824346A64.037705 64.037705 0 0 1 895.884854 192.001129v639.997742z" p-id="41990"></path><path d="M791.998335 351.851551h-255.999097a31.970084 31.970084 0 0 0 0 63.940169h255.999097a31.970084 31.970084 0 0 0 0-63.940169zM791.998335 607.973471h-255.999097a31.970084 31.970084 0 0 0 0 63.940169h255.999097a31.970084 31.970084 0 0 0 0-63.940169zM344.001722 527.997686c-61.855792 0-111.985607 50.144265-111.985607 111.985606s50.144265 111.985607 111.985607 111.985607 111.985607-50.144265 111.985606-111.985607-50.129815-111.985607-111.985606-111.985606z m33.982213 145.982269a48.045438 48.045438 0 1 1 14.088511-33.982213 47.745605 47.745605 0 0 1-14.088511 33.985826zM417.395643 297.394035L311.999125 402.78694 270.6078 361.392003a31.970084 31.970084 0 1 0-45.213286 45.213285l63.997968 64.001581a31.970084 31.970084 0 0 0 45.213286 0l127.999548-127.999549a31.970084 31.970084 0 0 0-45.209673-45.213285z" p-id="41991"></path></svg>
src/assets/icons/svg/tixi.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742294944205" class="icon" viewBox="0 0 1066 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="44647" width="128" height="128"><path d="M763.094151 511.488085c74.824863-49.698384 120.29995-139.155474 120.001333-235.438093 1.834361-72.051991-22.652225-141.800367-67.956674-193.674388-45.26179-51.831361-107.502083-81.607732-172.771205-82.375604-134.078987 2.388935-241.111815 124.267289-239.149475 272.295951-1.493084 97.647725 44.109982 188.725879 119.958674 239.192134a215.260123 215.260123 0 0 0 239.917347 0zM358.126979 325.663056h-298.616897c-20.476587 1.493084-36.815197 19.410098-38.180304 42.104983v636.309948h170.42493C146.748875 794.235627 251.22213 652.861856 396.307282 552.739877V361.027829c-1.834361-21.329778-18.898184-37.113814-38.222963-35.322113zM311.84136 460.296617c0 13.224463-9.683719 24.10265-21.841693 24.10265H136.595901c-11.987335 0-21.841693-10.750208-21.841693-24.10265 0-13.267122 9.811698-24.10265 21.841693-24.102649h153.361106c12.029995 0 21.841693 10.707549 21.841693 24.102649z" p-id="44648"></path><path d="M136.595901 518.185636h153.403766c11.987335 0 21.841693 10.750208 21.841693 24.102649 0 13.224463-9.726379 24.10265-21.841693 24.10265H136.595901a20.732545 20.732545 0 0 1-15.4001-7.081487 25.510415 25.510415 0 0 1-6.398934-17.021163c0-6.398934 2.260957-12.49925 6.398934-17.063822a20.732545 20.732545 0 0 1 15.4001-7.038827zM673.125146 715.272788c2.85819-17.917014 9.385102-34.980837 19.068822-49.570405 12.925846-35.364773 19.111481-49.613064-12.925846-70.686886a55.457424 55.457424 0 0 0-46.882853-5.417763 62.837527 62.837527 0 0 0-36.260623 33.274454c-12.925846 35.407432 19.111481 49.613064 19.111481 70.686885-4.564573 37.967005-10.963506 75.592735-19.111481 112.791869-8.105316 37.241793 0 27.89935-31.994668-42.104983a1739.05949 1739.05949 0 0 1-63.392101-177.549075c-172.429928 65.48242-261.75904 191.797367-261.75904 376.129312 0 70.644226 786.044993 105.966339 805.113814-42.147642 18.983503-148.24196-223.706716-394.942176-249.643726-324.255291v-0.767872l-89.329112 211.335444-31.994667-91.718047z" p-id="44649"></path></svg>
src/assets/icons/svg/tongyong.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
<svg t="1742295020185" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="49469" width="128" height="128"><path d="M286.88384 18.6368a206.19264 206.19264 0 0 1 177.3568 145.53088 206.56128 206.56128 0 0 1 8.84736 59.92448v235.9296H237.1584a207.38048 207.38048 0 0 1-97.32096-24.33024A206.35648 206.35648 0 0 1 30.72 253.5424v-29.4912A206.4384 206.4384 0 0 1 237.11744 17.65376h29.4912c6.79936 0 13.5168 0.32768 20.2752 0.98304zM196.85376 996.7616A206.35648 206.35648 0 0 1 30.72 794.2144v-29.4912a206.39744 206.39744 0 0 1 206.4384-206.4384h235.9296v235.9296a206.11072 206.11072 0 0 1-60.45696 145.98144 206.6432 206.6432 0 0 1-145.98144 60.45696h-29.53216a205.94688 205.94688 0 0 1-40.26368-3.93216zM757.63712 999.71072a206.68416 206.68416 0 0 1-151.47008-90.7264 205.824 205.824 0 0 1-34.77504-114.688v-235.9296h235.9296a206.11072 206.11072 0 0 1 171.66336 91.70944 205.78304 205.78304 0 0 1 34.77504 114.688v29.4912a206.4384 206.4384 0 0 1-206.39744 206.4384h-29.4912c-6.7584 0-13.5168-0.32768-20.23424-0.98304zM847.62624 21.62688a206.0288 206.0288 0 0 1 141.76256 105.14432 205.6192 205.6192 0 0 1 24.3712 97.32096v29.4912a206.0288 206.0288 0 0 1-46.85824 130.99008 206.35648 206.35648 0 0 1-159.58016 75.44832h-235.9296v-235.9296a206.0288 206.0288 0 0 1 75.48928-159.58016 205.86496 205.86496 0 0 1 110.71488-45.8752c6.71744-0.65536 13.47584-0.98304 20.23424-0.98304h29.53216a206.0288 206.0288 0 0 1 40.26368 3.97312z" p-id="49470"></path></svg>
src/assets/images/pay.png
Binary files differ
src/assets/styles/element-ui.scss
@@ -134,3 +134,60 @@
  color: #333;
  padding: 6px 15px !important;
}
.el-calendar .el-calendar__header {
  display: none;
}
.el-calendar .el-calendar__body {
  padding: 0;
}
.el-calendar .el-calendar-table:not(.is-range) td.next {
  /*隐藏下个月的日期*/
  display: none;
}
.el-calendar .el-calendar-day {
  height: 40px;
}
.el-calendar .el-calendar-table td {
  border: 0;
  font-size: 14px;
}
.el-calendar .el-calendar-table tr td:first-child {
  border-left: 0;
}
.el-calendar .el-calendar-day span {
  display: inline-block;
  width: 30px;
  height: 30px;
  line-height: 30px;
  text-align: center;
  border-radius: 4px;
}
.el-calendar .is-selected {
  background: transparent !important;
}
.el-calendar .is-selected .el-calendar-day {
  background: transparent !important;
}
.el-calendar .is-selected .el-calendar-day span {
  background: #3a7bfa !important;
  color: #fff !important;
}
.el-calendar .el-calendar-day:hover {
  background: transparent;
}
.el-calendar .el-calendar-day span:hover {
  background: #3a7bfa !important;
  color: #fff !important;
}
src/main.js
@@ -51,6 +51,7 @@
import Moment from "moment";
import basicContainer from './components/basic-container/main'
// å…¨å±€æ–¹æ³•挂载
Vue.prototype.getDicts = getDicts;
Vue.prototype.getConfigKey = getConfigKey;
@@ -65,8 +66,8 @@
Vue.prototype.HaveJson = (val) => {
  return JSON.parse(JSON.stringify(val));
};
Vue.prototype.javaApi = process.env.VUE_APP_BASE_API
  ? process.env.VUE_APP_BASE_API
Vue.prototype.javaApi = process.env.VUE_BASE_URL
  ? process.env.VUE_BASE_URL
  : "http://127.0.0.1:8002";
Vue.prototype.checkPermi = checkPermi;
Vue.prototype.uploadHeader = {
src/permission.js
@@ -9,7 +9,7 @@
NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/register']
const whiteList = ['/login', '/register','/thirdpartylogin', '/logindemo']
const isWhiteList = (path) => {
  return whiteList.some(pattern => isPathMatch(pattern, path))
src/router/index.js
@@ -46,6 +46,18 @@
    component: () => import("@/views/login"),
    hidden: true,
  },
    // ç¬¬ä¸‰æ–¹ç™»å½•页
  {
    path: "/thirdpartylogin",
    component: () => import("@/views/thirdpartylogin"),
    hidden: true,
  },
  // ç¬¬ä¸‰æ–¹ç™»å½•页中转
  {
    path: "/logindemo",
    component: () => import("@/views/logindemo"),
    hidden: true,
  },
  {
    path: "/register",
    component: () => import("@/views/register"),
@@ -126,8 +138,8 @@
        // ä»»åŠ¡æ£€éªŒé¡µé¢
        path: 'inspection',
        component: () => import('@/views/business/inspectionTask/Inspection'),
        name: 'inspection',
        meta: { title: '委托单检验', activeMenu: '/business/inspectionTask' }
        name: 'Inspection',
        meta: {keepAlive: false, title: '委托单检验', activeMenu: '/business/inspectionTask' }
      },
      // {
      //   // æŸ¥çœ‹å§”托单详情页面
src/store/modules/user.js
@@ -1,4 +1,4 @@
import { login, logout, getInfo } from "@/api/login";
import { login, logout, getInfo,LoginBySSO } from "@/api/login";
import { getToken, setToken, removeToken } from "@/utils/auth";
import { isHttp, isEmpty } from "@/utils/validate";
import defAva from "@/assets/images/profile.jpg";
@@ -69,7 +69,23 @@
          });
      });
    },
    // å•点登录
    LoginBySSO({ commit }, accessToken) {
      return new Promise((resolve, reject) => {
        LoginBySSO(accessToken)
          .then((res) => {
            setToken(res.token);
            commit("SET_TOKEN", res.token);
            Vue.prototype.uploadHeader = {
              Authorization: "Bearer " + res.token,
            };
            resolve();
          })
          .catch((error) => {
            reject(error);
          });
      })
    },
    // èŽ·å–ç”¨æˆ·ä¿¡æ¯
    GetInfo({ commit, state }) {
      return new Promise((resolve, reject) => {
@@ -107,12 +123,16 @@
    LogOut({ commit, state }) {
      return new Promise((resolve, reject) => {
        logout(state.token)
          .then(() => {
          .then((res) => {
            if (res.data) {
              window.location.href = res.data
            } else {
            commit("SET_TOKEN", "");
            commit("SET_ROLES", []);
            commit("SET_PERMISSIONS", []);
            removeToken();
            resolve();
            }
          })
          .catch((error) => {
            reject(error);
src/views/business/inspectionOrder/add.vue
@@ -1565,6 +1565,7 @@
import getLodop from "@/utils/lodop";
import { bigEval } from "@/utils/bigEval";
import { getDicts } from "@/api/system/dict/data";
import Big from "big.js";
export default {
  components: {
    fiberOpticConfig,
@@ -2452,10 +2453,9 @@
          let arr1 = [];
          arr0.forEach((m) => {
            let index = code.findIndex((b) => m.includes(b));
            // console.log("index--》", index);
            if (index > -1) {
              let arr = m.split(code[index]).filter((b) => !!b);
              let calcNum = this.$Big(
              let calcNum = new Big(
                bigEval(this.replaceAll(arr[0], symbolItem, value))
              );
              let num = calcNum.toFixed(
@@ -2474,7 +2474,7 @@
          if (index > -1) {
            let arr = ask.split(code[index]).filter((b) => !!b);
            console.log("特殊值替换--》", arr);
            let calcNum = this.$Big(
            let calcNum = new Big(
              bigEval(this.replaceAll(arr[0], symbolItem, value))
            );
            let num = calcNum.toFixed(
src/views/business/inspectionTask/Inspection.vue
@@ -3383,7 +3383,11 @@
import excelFunction from "@/utils/excelFountion";
import { mapGetters } from "vuex";
import { getToken } from "@/utils/auth";
import Big from "big.js";
import InspectionWorker from "../../../workers/InspectionWorker.worker";
import InspectionWorkerAsData from "../../../workers/InspectionWorkerAsData.worker";
export default {
  name: "Inspection",
  components: {
    limsTable,
  },
@@ -3785,7 +3789,6 @@
    this.getComparisonList();
    this.getAuthorizedPerson();
    this.scrollInit();
    // this.getPower();
    this.startWorker();
  },
  watch: {
@@ -5060,12 +5063,12 @@
        this.stopWorker(); // ç¡®ä¿ä¹‹å‰çš„ Worker å·²åœæ­¢
      }
      // åˆ›å»º Worker å®žä¾‹
      this.worker = new Worker("/static/js/worker.js");
      this.worker = new InspectionWorker();
      if (this.worker0) {
        this.stopWorker(); // ç¡®ä¿ä¹‹å‰çš„ Worker å·²åœæ­¢
      }
      // åˆ›å»º Worker å®žä¾‹
      this.worker0 = new Worker("/static/js/worker0.js");
      this.worker0 = new InspectionWorkerAsData();
    },
    // åœæ­¢å¤šçº¿ç¨‹
    stopWorker() {
@@ -6844,7 +6847,7 @@
          )
        ) {
          if (parseFloat(n.v.v) >= 100000) {
            let num2 = new this.$Big(n.v.v);
            let num2 = new Big(n.v.v);
            n.v.v = num2.toExponential();
          }
        }
src/views/business/inspectionTask/index.vue
@@ -1876,7 +1876,7 @@
      }
      inspectorList.push(this.nickName);
      this.$router.push({
        name: "inspection",
        name: "Inspection",
        params: {
          inspectorList: inspectorList,
          state: 1,
src/views/index.vue
@@ -1,40 +1,96 @@
<template>
  <div class="bg-1">
  <div class="bg-1" style="padding: 15px 5px">
    <el-row :gutter="25">
      <el-col :lg="14" :md="14" :sm="24" :xl="14" :xs="24">
        <div class="left-1">
          <div class="say">
            <div style="display: flex;align-items: center;flex-wrap: wrap;">
              <div class="say-1">{{ user.name }} æ‚¨å¥½ï¼ç¥æ‚¨å¼€å¿ƒæ¯ä¸€å¤©</div>
            <div style="display: flex; align-items: center; flex-wrap: wrap">
              <div class="say-1">{{ nickName }} æ‚¨å¥½ï¼ç¥æ‚¨å¼€å¿ƒæ¯ä¸€å¤©</div>
              <div class="say-2">当前时间: {{ now }}</div>
            </div>
          </div>
        </div>
        <div v-loading="workLoading" class="left-2 card" style="overflow: hidden;">
          <div v-for="(item, index) in workDay" :key="index" class="left-2-item">
        <div
          v-loading="workLoading"
          class="left-2 card"
          style="overflow: hidden"
        >
          <div
            v-for="(item, index) in workDay"
            :key="index"
            class="left-2-item"
          >
            <div class="left-item-title">
              <span style="font-size: 18px;">{{ item }}</span>
              <span style="font-size: 14px;color: #999999;">{{ weekdays[index] }}</span>
              <span style="font-size: 18px">{{ item }}</span>
              <span style="font-size: 14px; color: #999999">{{
                weekdays[index]
              }}</span>
            </div>
            <div class="left-item-body">
              <div v-for="(m, i) in workList[index]" :key="i"
                :class="{ color0: m.type == 0, color1: m.type == 1, color2: m.type == 2 }" class="body-item">
              <div
                v-for="(m, i) in workList[index]"
                :key="i"
                :class="{
                  color0: m.type == 0,
                  color1: m.type == 1,
                  color2: m.type == 2,
                }"
                class="body-item"
              >
                <div>
                  <span style="font-size: 12px;margin-bottom: 17px;">{{ m.text }}</span>
                  <span style="font-size: 12px; margin-bottom: 17px">{{
                    m.text
                  }}</span>
                  <div style="display: flex">
                    <span class="body-item-name">{{ m.name }}</span>
                    <span v-if="m.insState == 0" class="body-item-insState"
                      style="background-color: #909399;font-size: 12px;">待检验</span>
                    <span v-if="m.insState == 1" class="body-item-insState"
                      style="background-color: #E6A23C;font-size: 12px;">检验中</span>
                    <span v-if="m.insState == 2" class="body-item-insState"
                      style="background-color: #67C23A;font-size: 12px;">已检验</span>
                    <span v-if="m.insState == 3" class="body-item-insState"
                      style="background-color: #E6A23C;font-size: 12px;">待复核</span>
                    <span v-if="m.insState == 4" class="body-item-insState"
                      style="background-color: #F56C6C;font-size: 9px;">复核未通过</span>
                    <span v-if="m.insState == 5" class="body-item-insState"
                      style="background-color: #67C23A;font-size: 10px;">复核通过</span>
                    <span
                      style="
                        display: inline-block;
                        height: 24px;
                        width: 24px;
                        border-radius: 50%;
                        line-height: 24px;
                        text-align: center;
                        background: #c0c4cc;
                        color: #fff;
                      "
                      >{{ m.name.charAt(0) }}</span
                    >
                    <span
                      v-if="m.insState == 0"
                      class="body-item-insState"
                      style="background-color: #909399; font-size: 12px"
                      >待检验</span
                    >
                    <span
                      v-if="m.insState == 1"
                      class="body-item-insState"
                      style="background-color: #e6a23c; font-size: 12px"
                      >检验中</span
                    >
                    <span
                      v-if="m.insState == 2"
                      class="body-item-insState"
                      style="background-color: #67c23a; font-size: 12px"
                      >已检验</span
                    >
                    <span
                      v-if="m.insState == 3"
                      class="body-item-insState"
                      style="background-color: #e6a23c; font-size: 12px"
                      >待复核</span
                    >
                    <span
                      v-if="m.insState == 4"
                      class="body-item-insState"
                      style="background-color: #f56c6c; font-size: 9px"
                      >复核未通过</span
                    >
                    <span
                      v-if="m.insState == 5"
                      class="body-item-insState"
                      style="background-color: #67c23a; font-size: 10px"
                      >复核通过</span
                    >
                  </div>
                </div>
              </div>
@@ -46,94 +102,160 @@
        <div class="right-1 card">
          <div class="right-1-item">
            <div class="img">
              <img alt="" src="@/assets/index_image/index-0.svg">
              <img alt="" src="@/assets/index_image/index-0.svg" />
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfMessages }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">我的待办</p>
              <p style="font-size: 20px">
                {{ getNumberFourTypes.totalNumberOfMessages }}
              </p>
              <p style="font-size: 14px; margin-bottom: 10px">我的待办</p>
            </div>
          </div>
          <div class="right-1-item">
            <div class="img">
              <img alt="" src="@/assets/index_image/index-1.svg">
              <img alt="" src="@/assets/index_image/index-1.svg" />
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfReadMessages }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">已办事宜</p>
              <p style="font-size: 20px">
                {{ getNumberFourTypes.totalNumberOfReadMessages }}
              </p>
              <p style="font-size: 14px; margin-bottom: 10px">已办事宜</p>
            </div>
          </div>
          <div class="right-1-item">
            <div class="img">
              <img alt="" src="@/assets/index_image/index-2.svg">
              <img alt="" src="@/assets/index_image/index-2.svg" />
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{ getNumberFourTypes.remainingToDo }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">剩余待办</p>
              <p style="font-size: 20px">
                {{ getNumberFourTypes.remainingToDo }}
              </p>
              <p style="font-size: 14px; margin-bottom: 10px">剩余待办</p>
            </div>
          </div>
          <div class="right-1-item">
            <div class="img">
              <img alt="" src="@/assets/index_image/index-3.svg">
              <img alt="" src="@/assets/index_image/index-3.svg" />
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfMessagesInThePastSevenDays }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">近期事宜</p>
              <p style="font-size: 20px">
                {{ getNumberFourTypes.totalNumberOfMessagesInThePastSevenDays }}
              </p>
              <p style="font-size: 14px; margin-bottom: 10px">近期事宜</p>
            </div>
          </div>
        </div>
        <div class="right-2 card">
          <div class="right-2-title">
            <span style="color: #333333;font-size: 16px;">我的日程</span>
            <span style="cursor: pointer;font-size: 12px;
color: #3A7BFA;" @click="dialogVisible = true">添加我的日程</span>
            <span style="color: #333333; font-size: 16px">我的日程</span>
            <span
              style="cursor: pointer; font-size: 12px; color: #3a7bfa"
              @click="dialogVisible = true"
              >添加我的日程</span
            >
          </div>
          <div class="right-2-body">
            <div class="calendar" style="width: 49%;">
            <div class="calendar" style="width: 49%">
              <div class="control">
                <el-button class="prevm" icon="el-icon-arrow-left" @click="prevMonth(calendarValue)"></el-button>
                <span>{{ calendarValue.getFullYear() + 'å¹´' + (calendarValue.getMonth() + 1) + '月' }}</span>
                <el-button class="nextm" icon="el-icon-arrow-right" @click="nextMonth(calendarValue)"></el-button>
                <el-button
                  class="prevm"
                  icon="el-icon-arrow-left"
                  @click="prevMonth(calendarValue)"
                ></el-button>
                <span>{{
                  calendarValue.getFullYear() +
                  "å¹´" +
                  (calendarValue.getMonth() + 1) +
                  "月"
                }}</span>
                <el-button
                  class="nextm"
                  icon="el-icon-arrow-right"
                  @click="nextMonth(calendarValue)"
                ></el-button>
              </div>
              <el-calendar v-model="calendarValue">
              <el-calendar v-model="calendarValue" class="calendar">
                <template slot="dateCell" slot-scope="{date, data}">
                  <span>
                    {{ data.day.split('-').slice(2) + '' }}
                    {{ data.day.split("-").slice(2) + "" }}
                  </span>
                  <!-- <el-badge v-if="data.isSelected" is-dot class="item">
                  </el-badge> -->
                </template>
              </el-calendar>
            </div>
            <div v-loading="scheduleLoading" class="right-2-list" style="width: 49%;height: 286px;">
              <div v-for="(m, i) in listScheduleByMe" :key="i" class="list2-item">
            <div
              v-loading="scheduleLoading"
              class="right-2-list"
              style="width: 49%; height: 286px"
            >
              <div
                v-for="(m, i) in listScheduleByMe"
                :key="i"
                class="list2-item"
              >
                <span>{{ m.scheduleTimes }}</span>
                <el-tooltip :content="m.text" effect="dark" placement="top" style="margin-left: 10px;">
                <el-tooltip
                  :content="m.text"
                  effect="dark"
                  placement="top"
                  style="margin-left: 10px"
                >
                  <p class="ellipsis-multiline">{{ m.text }}</p>
                </el-tooltip>
              </div>
              <span v-if="listScheduleByMe.length == 0"
                style="color:rgb(144, 147, 153);font-size: 14px;text-align: center;margin: 120px 0;display: inline-block;width: 100%;">暂无数据</span>
              <span
                v-if="listScheduleByMe.length == 0"
                style="
                  color: rgb(144, 147, 153);
                  font-size: 14px;
                  text-align: center;
                  margin: 120px 0;
                  display: inline-block;
                  width: 100%;
                "
                >暂无数据</span
              >
            </div>
          </div>
        </div>
        <div class="right-3 card" style="overflow: hidden;">
        <div class="right-3 card" style="overflow: hidden">
          <div class="right-3-tab">
            <!--            <div :class="{active:currentIndex==4}" class="tab-item" style="cursor: pointer;" @click="currentIndex=4">预警提醒</div>-->
            <div :class="{ active: currentIndex == 5 }" class="tab-item" style="cursor: pointer;"
              @click="currentIndexChange">
              CNAS通知通告</div>
            <div
              class="tab-item"
              style="cursor: pointer"
              :class="{ active: currentIndex == 4 }"
              @click="currentIndex = 4"
            >
              é¢„警提醒
          </div>
          <div v-loading="listLoading" class="right-3-list">
            <scroll-pagination v-if="list.length > 0 || listLoading" :finishLoding="finishLoding" :list="list"
              @load="getList">
              <div v-for="(m, i) in list" :key="i" class="list3-item">
            <div
              class="tab-item"
              style="cursor: pointer"
              :class="{ active: currentIndex == 5 }"
              @click="currentIndex = 5"
            >
              é€šçŸ¥é€šå‘Š
            </div>
          </div>
          <div class="right-3-list" v-loading="listLoading">
            <scroll-pagination
              @load="getList"
              :finishLoding="finishLoding"
              :list="list"
              v-if="list.length > 0 || listLoading"
            >
              <div class="list3-item" v-for="(m, i) in list" :key="i">
                <div class="list3-item-title">
                  <!--                <img alt="" src="../../../static/img/index-tip.svg">-->
                  <p style="color: #FF7756">{{ m.theme }}</p>
                  <img src="../assets/index_image/index-tip.svg" alt="" />
                  <p>{{ m.theme }}</p>
                </div>
                <div class="list3-item-info">
                  <p class="ellipsis-multiline" style="width: 73%;-webkit-line-clamp: 1;cursor: pointer;"
                    @click="goNoticeDetail(m)">
                  <p
                    style="width: 73%; -webkit-line-clamp: 1; cursor: pointer"
                    class="ellipsis-multiline"
                    @click="goNoticeDetail(m)"
                  >
                    <!-- ç¼–号<span style="color:#3A7BFA;"> SB20240101-001 </span>的设备将于2023-09-09 11:11:11过期 -->
                    {{ m.content }}
                  </p>
@@ -141,28 +263,53 @@
                </div>
              </div>
            </scroll-pagination>
            <div v-if="list.length < 1 && !listLoading"
              style="color:#909399;font-size:14px;text-align: center;margin-top:80px">暂无数据
            <div
              v-if="list.length < 1 && !listLoading"
              style="
                color: #909399;
                font-size: 14px;
                text-align: center;
                margin-top: 80px;
              "
            >
              æš‚无数据
            </div>
          </div>
        </div>
      </el-col>
    </el-row>
    <el-dialog :visible.sync="dialogVisible" title="日程添加" width="400px">
      <div class="body" style="max-height: 60vh;">
      <div class="body" style="max-height: 60vh">
        <el-row>
          <el-col :span="22" class="search_thing">
            <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>时间:</div>
            <div class="search_label">
              <span style="color: red; margin-right: 4px">*</span>时间:
            </div>
            <div class="search_input">
              <el-date-picker v-model="query.time" format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间" size="small"
                style="width: 100%;" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
              <el-date-picker
                v-model="query.time"
                format="yyyy-MM-dd HH:mm:ss"
                placeholder="选择日期时间"
                size="small"
                style="width: 100%"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
              >
              </el-date-picker>
            </div>
          </el-col>
          <el-col :span="22" class="search_thing">
            <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>内容:</div>
            <div class="search_label">
              <span style="color: red; margin-right: 4px">*</span>内容:
            </div>
            <div class="search_input">
              <el-input v-model="query.text" :rows="2" placeholder="请输入内容" size="small" type="textarea"></el-input>
              <el-input
                v-model="query.text"
                :rows="2"
                placeholder="请输入内容"
                size="small"
                type="textarea"
              ></el-input>
            </div>
          </el-col>
        </el-row>
@@ -170,7 +317,9 @@
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="handleCancel">取 æ¶ˆ</el-button>
          <el-button :loading="loading" type="primary" @click="submit">ç¡® å®š</el-button>
          <el-button :loading="loading" type="primary" @click="submit"
            >ç¡® å®š</el-button
          >
        </el-row>
      </span>
    </el-dialog>
@@ -178,22 +327,35 @@
</template>
<script>
import { getYearAndMonthAndDays } from '@/utils/date.js'
import ScrollPagination from '@/components/index/scroll-paging.vue'
import {
  pageNotice,
  triggerModificationStatusToRead,
  getNumberFourTypesMessagesHomePage,
} from "@/api/system/notice";
import {
  addSchedule,
  calendarWorkByWeek,
  ScheduleByMe,
} from "@/api/chart/dailyBusinessStatistical.js";
import { getYearAndMonthAndDays } from "@/utils/date.js";
import ScrollPagination from "@/components/index/scroll-paging.vue";
import { mapGetters } from "vuex";
export default {
  components: {
    ScrollPagination
    ScrollPagination,
  },
  computed: {
    ...mapGetters(["nickName"]),
  },
  data() {
    return {
      user: {},
      now: null,
      calendarValue: new Date(),
      currentIndex: 5,
      dialogVisible: false,
      query: {
        time: '',
        text: ''
        time: "",
        text: "",
      },
      loading: false,
      workLoading: false,
@@ -211,78 +373,88 @@
      timer: null,
      keyMap: {},
      getNumberFourTypes: {},
    }
    };
  },
  watch: {
    calendarValue(val) {
      this.getScheduleByMe()
      this.getScheduleByMe();
    },
    currentIndex() {
      this.keyMap = {}
      this.keyMap = {};
      this.currentPage = 1;
      this.list = [];
      this.getList();
    }
    },
  },
  mounted() {
    this.user = JSON.parse(localStorage.getItem('user'))
    this.nowTime()
    this.nowTime();
    setInterval(() => {
      this.nowTime()
    }, 1000)
    this.weekdays = this.getWeekdaysForNextWeek()
      this.nowTime();
    }, 1000);
    this.weekdays = this.getWeekdaysForNextWeek();
    this.init();
    this.currentPage = 1;
    this.keyMap = {}
    this.keyMap = {};
    this.list = [];
    this.getList();
    this.getScheduleByMe()
    this.timer && clearInterval(this.timer)
    this.getScheduleByMe();
    this.timer && clearInterval(this.timer);
    this.timer = setInterval(() => {
      this.init();
      this.currentPage = 1;
      this.keyMap = {}
      this.keyMap = {};
      this.list = [];
      this.getList();
      this.getScheduleByMe()
    }, 1000 * 60 * 10)
    this.getNumberFourTypesFun()
      this.getScheduleByMe();
    }, 1000 * 60 * 10);
    this.getNumberFourTypesFun();
  },
  methods: {
    changeState(val) {
      if (val == 0) {
        return '待检验'
        return "待检验";
      }
    },
    currentIndexChange() {
      this.keyMap = {}
      this.keyMap = {};
      this.currentPage = 1;
      this.list = [];
      this.getList();
    },
    getNumberFourTypesFun() {
      this.$axios.get(this.$api.informationNotification.getNumberFourTypesMessagesHomePage).then(res => {
        this.getNumberFourTypes = res.data
      getNumberFourTypesMessagesHomePage()
        .then((res) => {
          if (res.code === 200) {
            this.getNumberFourTypes = res.data;
          }
      })
        .catch((error) => {
          console.error(error);
        });
    },
    getList() {
      const key = `_${this.currentPage}`
      const value = this.keyMap[key]
      const key = `_${this.currentPage}`;
      const value = this.keyMap[key];
      // å¦‚æžœvalue存在,表示缓存有值,那么阻止请求
      if (value) {
        return
        return;
      }
      // value不存在,表示第一次请求,设置占位
      this.keyMap[key] = 'temp'
      this.keyMap[key] = "temp";
      if (this.currentPage == 1) {
        this.listLoading = true
        this.listLoading = true;
      }
      if (this.list.length == 0) {
        this.finishLoding = false;
      }
      this.$axios.get(this.$api.informationNotification.page + '?size=' + this.pageSize + '&current=' + this.currentPage + '&messageType=' + this.currentIndex).then(res => {
      pageNotice({
        size: this.pageSize,
        current: this.currentPage,
        messageType: this.currentIndex,
      })
        .then((res) => {
        if (res.code === 201) {
          return
            return;
        }
        let list = res.data.records;
        this.total = res.data.total;
@@ -292,14 +464,17 @@
          if (list.length < this.pageSize) {
            this.finishLoding = true;
          }
          this.list = this.list.concat(list)
            this.list = this.list.concat(list);
          if (this.total == this.list.length) {
            this.finishLoding = true;
          }
          this.currentPage++;
        }
        this.listLoading = false
          this.listLoading = false;
      })
        .catch((error) => {
          console.error(error);
        });
    },
    nowTime() {
      var date = new Date();
@@ -307,7 +482,7 @@
      var m = date.getMonth() + 1;
      var d = date.getDate();
      var h = date.getHours();
      this.timeH = h
      this.timeH = h;
      var min = date.getMinutes();
      var s = date.getSeconds();
      if (s < 10) {
@@ -344,13 +519,13 @@
      if (day > nextdays) {
        day = nextdays;
        if (day < 10) {
          day = '0' + day;
          day = "0" + day;
        }
      }
      if (nextmonth < 10) {
        nextmonth = '0' + nextmonth;
        nextmonth = "0" + nextmonth;
      }
      let nexttime = nextyear + '-' + nextmonth + '-' + day;
      let nexttime = nextyear + "-" + nextmonth + "-" + day;
      // å°†å¾—到的年月日格式转换为标准时间,与饿了么时间格式相同才能联动
      this.calendarValue = new Date(nexttime);
@@ -372,13 +547,13 @@
      if (day > prevdays) {
        day = prevdays;
        if (day < 10) {
          day = '0' + day;
          day = "0" + day;
        }
      }
      if (prevmonth < 10) {
        prevmonth = '0' + prevmonth;
        prevmonth = "0" + prevmonth;
      }
      let prevtime = prevyear + '-' + prevmonth + '-' + day;
      let prevtime = prevyear + "-" + prevmonth + "-" + day;
      // å°†å¾—到的年月日格式转换为标准时间,与饿了么时间格式相同才能联动
      this.calendarValue = new Date(prevtime);
@@ -386,45 +561,53 @@
    handleCancel() {
      this.dialogVisible = false;
      this.query = {
        time: '',
        text: ''
      }
        time: "",
        text: "",
      };
    },
    submit() {
      if (!this.query.time) {
        this.$message.error('时间未填写')
        return
        this.$message.error("时间未填写");
        return;
      }
      if (!this.query.text) {
        this.$message.error('内容未填写')
        return
        this.$message.error("内容未填写");
        return;
      }
      this.loading = true;
      this.$axios.post(this.$api.report.addSchedule, this.query).then(res => {
      addSchedule(this.query)
        .then((res) => {
        this.loading = false;
        if (res.code == 201) {
          this.$message.error('操作失败')
          return
            this.$message.error("操作失败");
            return;
        }
        this.$message.success('保存成功')
        this.handleCancel()
        this.getScheduleByMe()
          this.$message.success("保存成功");
          this.handleCancel();
          this.getScheduleByMe();
      })
        .catch((error) => {
          console.error(error);
        });
    },
    init() {
      this.workLoading = true;
      this.$axios.get(this.$api.report.calendarWorkByWeek).then(res => {
        if (res.code == 201) return
      calendarWorkByWeek()
        .then((res) => {
          if (res.code == 201) return;
        this.workLoading = false;
        this.workList = [];
        for (let i = 0; i < 7; i++) {
          this.workList.push(res.data[`work${i}`])
            this.workList.push(res.data[`work${i}`]);
        }
        this.workDay = res.data.weekDays.map(m => {
          let arr = m.split('-')
          return arr[2]
          this.workDay = res.data.weekDays.map((m) => {
            let arr = m.split("-");
            return arr[2];
          });
        })
      })
        .catch((error) => {
          console.error(error);
        });
    },
    getWeekdaysForNextWeek() {
      let weekdays = [];
@@ -434,75 +617,86 @@
        let day = date.getDay(); // 0-6 ä»£è¡¨æ˜ŸæœŸæ—¥åˆ°æ˜ŸæœŸå…­
        weekdays.push(day);
      }
      weekdays.reverse()
      weekdays = weekdays.map(m => {
        let day = ''
      weekdays.reverse();
      weekdays = weekdays.map((m) => {
        let day = "";
        switch (m) {
          case 0:
            day = '星期天'
            day = "星期天";
            break;
          case 1:
            day = '星期一'
            day = "星期一";
            break;
          case 2:
            day = '星期二'
            day = "星期二";
            break;
          case 3:
            day = '星期三'
            day = "星期三";
            break;
          case 4:
            day = '星期四'
            day = "星期四";
            break;
          case 5:
            day = '星期五'
            day = "星期五";
            break;
          case 6:
            day = '星期六'
            day = "星期六";
            break;
        }
        return day
      })
        return day;
      });
      return weekdays;
    },
    getScheduleByMe() {
      this.scheduleLoading = true;
      this.$axios.post(this.$api.report.ScheduleByMe, {
        date: getYearAndMonthAndDays(this.calendarValue)
      }).then(res => {
      ScheduleByMe({
        date: getYearAndMonthAndDays(this.calendarValue),
      })
        .then((res) => {
        this.loading = false;
        this.scheduleLoading = false;
        if (res.code == 201) {
          return
            return;
        }
        this.listScheduleByMe = res.data.map(m => {
          this.listScheduleByMe = res.data.map((m) => {
          if (m.scheduleTime) {
            let time = m.scheduleTime.split(' ')[1].split(':')
            m.scheduleTimes = time[0] + ':' + time[1]
              let time = m.scheduleTime.split(" ")[1].split(":");
              m.scheduleTimes = time[0] + ":" + time[1];
          } else {
            m.scheduleTimes = ''
              m.scheduleTimes = "";
          }
          return m
            return m;
          });
        })
      })
        .catch((error) => {
          console.error(error);
        });
    },
    goNoticeDetail(row) {
      this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead + '/' + row.id).then(res => {
      triggerModificationStatusToRead(row.id)
        .then((res) => {
        row.num = Math.random(100);
        this.$bus.$emit("change", JSON.stringify(row));
        this.$parent.addTab({
          this.$parent.addTab(
            {
          v: "消息详情",
          i: "el-icon-s-tools",
          u: "notice-detail",
          k: 35,
          p: "abcd"
        }, 29);
              p: "abcd",
            },
            29
          );
      })
        .catch((error) => {
          console.error(error);
        });
    },
  },
  deactivated() {
    this.timer && clearInterval(this.timer)
  }
}
    this.timer && clearInterval(this.timer);
  },
};
</script>
<style scoped lang="scss">
@@ -545,13 +739,14 @@
}
.card {
  background: #FFFFFF;
  background: #ffffff;
  border-radius: 16px;
  width: 100%;
  box-sizing: border-box;
}
.right-1 {
  height: 118px;
  padding: 10px 10px 4px;
  display: flex;
  align-items: center;
@@ -568,10 +763,11 @@
.right-1-item .mun {
  margin-left: 6px;
  color: #0166E2;
  color: #0166e2;
}
.right-2 {
  width: 100%;
  padding: 13px 14px 8px;
  margin-bottom: 16px;
}
@@ -590,32 +786,6 @@
  justify-content: space-between;
}
>>>.el-calendar__header {
  display: none;
}
>>>.el-calendar__body {
  padding: 0;
}
>>>.el-calendar-table:not(.is-range) td.next {
  /*隐藏下个月的日期*/
  display: none;
}
>>>.el-calendar-day {
  height: 40px;
}
>>>.el-calendar-table td {
  border: 0;
  font-size: 14px;
}
>>>.el-calendar-table tr td:first-child {
  border-left: 0;
}
.control {
  display: flex;
  align-items: center;
@@ -628,10 +798,10 @@
  width: 32px;
  height: 32px;
  border-radius: 8px;
  border: 1px solid #E8E8E8;
  border: 1px solid #e8e8e8;
  background: #fff;
  padding: 0;
  color: #0166E2;
  color: #0166e2;
  font-size: 20px;
}
@@ -645,47 +815,40 @@
.right-3-tab {
  display: flex;
  align-items: center;
  margin-bottom: 12px;
}
.tab-item {
  width: 50%;
  box-sizing: border-box;
  text-align: center;
  padding: 14px 0;
  font-size: 20px;
  background: #F5F7FB;
  background: #f5f7fb;
  color: #333333;
}
.tab-item.active {
  background: #fff;
  color: #FF3838;
  padding-left: 16px;
  text-align: left;
  color: #ff3838;
}
.right-3-list {
  padding: 0 12px 8px;
  box-sizing: border-box;
  height: 390px;
  overflow-y: auto;
}
.list3-item {
  padding: 6px 4px;
  margin: 8px 0;
}
.list3-item:hover {
  background: rgba(58, 123, 250, 0.05);
}
.list3-item-title {
  display: flex;
  align-items: flex-start;
  margin-bottom: 10px;
  align-items: center;
  p {
    margin: 0;
}
}
.list3-item-info {
  display: flex;
  align-items: center;
@@ -697,11 +860,11 @@
.left-2 {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  height: 777px;
  height: calc(100vh - 245px);
}
.left-2-item {
  border-right: 1px solid #F1F1F1;
  border-right: 1px solid #f1f1f1;
  overflow: hidden !important;
}
@@ -714,11 +877,11 @@
}
.left-2-item:hover .left-item-title span {
  color: #3A7BFA !important;
  color: #3a7bfa !important;
}
.left-item-title {
  border-bottom: 1px solid #F1F1F1;
  border-bottom: 1px solid #f1f1f1;
  display: flex;
  flex-direction: column;
  align-items: center;
@@ -734,22 +897,22 @@
}
.body-item {
  background: #70A090;
  background: #70a090;
  border-radius: 16px;
  overflow: hidden;
  margin-bottom: 8px;
}
.body-item.color0 {
  background: #70A090;
  background: #70a090;
}
.body-item.color1 {
  background: #EBD476;
  background: #ebd476;
}
.body-item.color2 {
  background: #FF3838;
  background: #ff3838;
}
.body-item>div {
@@ -773,37 +936,6 @@
  margin-bottom: 10px;
}
>>>.el-calendar-day span {
  display: inline-block;
  width: 30px;
  height: 30px;
  line-height: 30px;
  text-align: center;
  border-radius: 4px;
}
>>>.is-selected {
  background: transparent !important;
}
>>>.is-selected .el-calendar-day {
  background: transparent !important;
}
>>>.is-selected .el-calendar-day span {
  background: #3A7BFA !important;
  color: #fff !important;
}
>>>.el-calendar-day:hover {
  background: transparent;
}
>>>.el-calendar-day span:hover {
  background: #3A7BFA !important;
  color: #fff !important;
}
.body-item-name {
  display: inline-block;
  height: 22px;
@@ -811,9 +943,9 @@
  border-radius: 10px;
  line-height: 22px;
  text-align: center;
  background: #C0C4CC;
  background: #c0c4cc;
  color: #fff;
  font-size: 14px
  font-size: 14px;
}
.body-item-insState {
@@ -825,6 +957,6 @@
  line-height: 22px;
  text-align: center;
  color: #fff;
  font-size: 14px
  font-size: 14px;
}
</style>
src/views/login.vue
@@ -1,12 +1,17 @@
<template>
  <div class="login">
    <div class="leftImg">
      <img src="@/assets/images/loginBackground.png" alt="">
      <img src="@/assets/images/loginBackground.png" alt="" />
    </div>
    <div class="rightForm">
      <div class="title_big">欢迎您登录!</div>
      <div class="title_small">LIMS实验室管理系统</div>
      <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
      <el-form
        ref="loginForm"
        :model="loginForm"
        :rules="loginRules"
        class="login-form"
      >
        <el-form-item prop="username">
          <el-input
            v-model="loginForm.username"
@@ -14,7 +19,11 @@
            auto-complete="off"
            placeholder="账号"
          >
            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
            <svg-icon
              slot="prefix"
              icon-class="user"
              class="el-input__icon input-icon"
            />
          </el-input>
        </el-form-item>
        <el-form-item prop="password">
@@ -25,7 +34,11 @@
            placeholder="密码"
            @keyup.enter.native="handleLogin"
          >
            <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
            <svg-icon
              slot="prefix"
              icon-class="password"
              class="el-input__icon input-icon"
            />
          </el-input>
        </el-form-item>
        <el-form-item prop="code" v-if="captchaEnabled">
@@ -36,28 +49,41 @@
            style="width: 63%"
            @keyup.enter.native="handleLogin"
          >
            <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
            <svg-icon
              slot="prefix"
              icon-class="validCode"
              class="el-input__icon input-icon"
            />
          </el-input>
          <div class="login-code">
            <img :src="codeUrl" @click="getCode" class="login-code-img"/>
          </div>
        </el-form-item>
        <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
        <el-form-item style="width:100%;">
        <el-checkbox
          v-model="loginForm.rememberMe"
          style="margin: 0px 0px 25px 0px"
          >记住密码</el-checkbox
        >
        <el-form-item style="width: 100%">
          <el-button
            :loading="loading"
            size="medium"
            type="primary"
            style="width:100%;"
            style="width: 100%"
            @click.native.prevent="handleLogin"
          >
            <span v-if="!loading">登 å½•</span>
            <span v-else>登 å½• ä¸­...</span>
          </el-button>
          <div style="float: right;" v-if="register">
            <router-link class="link-type" :to="'/register'">立即注册</router-link>
          <div style="float: right" v-if="register">
            <router-link class="link-type" :to="'/register'"
              >立即注册</router-link
            >
          </div>
        </el-form-item>
        <el-button v-if="true" type="primary" plain @click="goLogin"
          >集团集成登录</el-button
        >
      </el-form>
    </div>
    <!--  åº•部  -->
@@ -68,9 +94,9 @@
</template>
<script>
import { getCodeImg } from "@/api/login";
import { getCodeImg, getSsoAuthUrl } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from '@/utils/jsencrypt'
import { encrypt, decrypt } from "@/utils/jsencrypt";
export default {
  name: "Login",
@@ -78,27 +104,27 @@
    return {
      codeUrl: "",
      loginForm: {
        username: "admin",
        password: "admin123",
        username: "",
        password: "",
        rememberMe: false,
        code: "",
        uuid: ""
        uuid: "",
      },
      loginRules: {
        username: [
          { required: true, trigger: "blur", message: "请输入您的账号" }
          { required: true, trigger: "blur", message: "请输入您的账号" },
        ],
        password: [
          { required: true, trigger: "blur", message: "请输入您的密码" }
          { required: true, trigger: "blur", message: "请输入您的密码" },
        ],
        code: [{ required: false, trigger: "change", message: "请输入验证码" }]
        code: [{ required: false, trigger: "change", message: "请输入验证码" }],
      },
      loading: false,
      // éªŒè¯ç å¼€å…³
      captchaEnabled: true,
      // æ³¨å†Œå¼€å…³
      register: false,
      redirect: undefined
      redirect: undefined,
    };
  },
  watch: {
@@ -106,17 +132,23 @@
      handler: function(route) {
        this.redirect = route.query && route.query.redirect;
      },
      immediate: true
    }
      immediate: true,
    },
  },
  created() {
    this.getCode();
    this.getCookie();
  },
  methods: {
    async goLogin() {
      await getSsoAuthUrl().then((res) => {
        window.location.href = res.data;
      });
    },
    getCode() {
      getCodeImg().then(res => {
        this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
      getCodeImg().then((res) => {
        this.captchaEnabled =
          res.captchaEnabled === undefined ? true : res.captchaEnabled;
        if (this.captchaEnabled) {
          this.codeUrl = "data:image/gif;base64," + res.img;
          this.loginForm.uuid = res.uuid;
@@ -126,29 +158,37 @@
    getCookie() {
      const username = Cookies.get("username");
      const password = Cookies.get("password");
      const rememberMe = Cookies.get('rememberMe')
      const rememberMe = Cookies.get("rememberMe");
      this.loginForm = {
        username: username === undefined ? this.loginForm.username : username,
        password: password === undefined ? this.loginForm.password : decrypt(password),
        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
        password:
          password === undefined ? this.loginForm.password : decrypt(password),
        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
      };
    },
    handleLogin() {
      this.$refs.loginForm.validate(valid => {
      this.$refs.loginForm.validate((valid) => {
        if (valid) {
          this.loading = true;
          if (this.loginForm.rememberMe) {
            Cookies.set("username", this.loginForm.username, { expires: 30 });
            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
            Cookies.set("password", encrypt(this.loginForm.password), {
              expires: 30,
            });
            Cookies.set("rememberMe", this.loginForm.rememberMe, {
              expires: 30,
            });
          } else {
            Cookies.remove("username");
            Cookies.remove("password");
            Cookies.remove('rememberMe');
            Cookies.remove("rememberMe");
          }
          this.$store.dispatch("Login", this.loginForm).then(() => {
          this.$store
            .dispatch("Login", this.loginForm)
            .then(() => {
            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
          }).catch(() => {
            })
            .catch(() => {
            this.loading = false;
            if (this.captchaEnabled) {
              this.getCode();
@@ -156,8 +196,8 @@
          });
        }
      });
    }
  }
    },
  },
};
</script>
@@ -194,13 +234,13 @@
    flex-direction: column;
    justify-content: center;
    .title_big {
      color: #004EA2;
      color: #004ea2;
      font-size: 40px;
      margin-bottom: 8px;
    }
    .title_small {
      color: #004EA2;
      color: #004ea2;
      font-size: 24px;
    }
    .login-form {
src/views/logindemo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<template>
  <div></div>
</template>
<script>
import { getSsoAuthUrl } from '@/api/login'
export default {
  data() {
    return {}
  },
  created() {
    this.goLogin()
  },
  computed: {},
  methods: {
    async goLogin() {
      await getSsoAuthUrl().then(res => {
        window.location.href = res.data
      })
    }
  }
}
</script>
<style scoped></style>
src/views/thirdpartylogin.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<template>
  <div></div>
</template>
<script>
export default {
  data() {
    return {
      code: null // ç”¨äºŽå­˜å‚¨èŽ·å–åˆ°çš„ code å‚æ•°
    };
  },
  created() {
    this.initLogin();
  },
  methods: {
    initLogin() {
      this.$store.dispatch('LoginBySSO', {code: this.$route.query.code}).then(() => {
        this.$router.push({path: '/'});
      });
    }
  }
};
</script>
<style scoped></style>
src/workers/InspectionWorker.worker.js
ÎļþÃû´Ó src/utils/thread/worker.js ÐÞ¸Ä
@@ -1,5 +1,6 @@
// å¤šçº¿ç¨‹é‡Œé¢éœ€è¦ä¿å­˜çš„æ•°æ®
'use strict';//为js脚本开启严格模式
import Big from "big.js";
let code = ''
// è¡¨æ ¼æ•°æ®ï¼ˆæ¸²æŸ“)
let tableList = null
@@ -1122,948 +1123,3 @@
    console.log('error',error)
  }
}
/*
 *  big.js v5.2.2
 *  A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.
 *  Copyright (c) 2018 Michael Mclaughlin <M8ch88l@gmail.com>
 *  https://github.com/MikeMcl/big.js/LICENCE
 */
;(function (GLOBAL) {
  'use strict';
  var Big,
/************************************** EDITABLE DEFAULTS *****************************************/
    // The default values below must be integers within the stated ranges.
    /*
     * The maximum number of decimal places (DP) of the results of operations involving division:
     * div and sqrt, and pow with negative exponents.
     */
    DP = 20,          // 0 to MAX_DP
    /*
     * The rounding mode (RM) used when rounding to the above decimal places.
     *
     *  0  Towards zero (i.e. truncate, no rounding).       (ROUND_DOWN)
     *  1  To nearest neighbour. If equidistant, round up.  (ROUND_HALF_UP)
     *  2  To nearest neighbour. If equidistant, to even.   (ROUND_HALF_EVEN)
     *  3  Away from zero.                                  (ROUND_UP)
     */
    RM = 1,             // 0, 1, 2 or 3
    // The maximum value of DP and Big.DP.
    MAX_DP = 1E6,       // 0 to 1000000
    // The maximum magnitude of the exponent argument to the pow method.
    MAX_POWER = 1E6,    // 1 to 1000000
    /*
     * The negative exponent (NE) at and beneath which toString returns exponential notation.
     * (JavaScript numbers: -7)
     * -1000000 is the minimum recommended exponent value of a Big.
     */
    NE = -7,            // 0 to -1000000
    /*
     * The positive exponent (PE) at and above which toString returns exponential notation.
     * (JavaScript numbers: 21)
     * 1000000 is the maximum recommended exponent value of a Big.
     * (This limit is not enforced or checked.)
     */
    PE = 21,            // 0 to 1000000
/**************************************************************************************************/
    // Error messages.
    NAME = '[big.js] ',
    INVALID = NAME + 'Invalid ',
    INVALID_DP = INVALID + 'decimal places',
    INVALID_RM = INVALID + 'rounding mode',
    DIV_BY_ZERO = NAME + 'Division by zero',
    // The shared prototype object.
    P = {},
    UNDEFINED = void 0,
    NUMERIC = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;
  /*
   * Create and return a Big constructor.
   *
   */
  function _Big_() {
    /*
     * The Big constructor and exported function.
     * Create and return a new instance of a Big number object.
     *
     * n {number|string|Big} A numeric value.
     */
    function Big(n) {
      var x = this;
      // Enable constructor usage without new.
      if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);
      // Duplicate.
      if (n instanceof Big) {
        x.s = n.s;
        x.e = n.e;
        x.c = n.c.slice();
      } else {
        parse(x, n);
      }
      /*
       * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which
       * points to Object.
       */
      x.constructor = Big;
    }
    Big.prototype = P;
    Big.DP = DP;
    Big.RM = RM;
    Big.NE = NE;
    Big.PE = PE;
    Big.version = '5.2.2';
    return Big;
  }
  /*
   * Parse the number or string value passed to a Big constructor.
   *
   * x {Big} A Big number instance.
   * n {number|string} A numeric value.
   */
  function parse(x, n) {
    var e, i, nl;
    // Minus zero?
    if (n === 0 && 1 / n < 0) n = '-0';
    else if (!NUMERIC.test(n += '')) throw Error(INVALID + 'number');
    // Determine sign.
    x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;
    // Decimal point?
    if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');
    // Exponential form?
    if ((i = n.search(/e/i)) > 0) {
      // Determine exponent.
      if (e < 0) e = i;
      e += +n.slice(i + 1);
      n = n.substring(0, i);
    } else if (e < 0) {
      // Integer.
      e = n.length;
    }
    nl = n.length;
    // Determine leading zeros.
    for (i = 0; i < nl && n.charAt(i) == '0';) ++i;
    if (i == nl) {
      // Zero.
      x.c = [x.e = 0];
    } else {
      // Determine trailing zeros.
      for (; nl > 0 && n.charAt(--nl) == '0';);
      x.e = e - i - 1;
      x.c = [];
      // Convert string to array of digits without leading/trailing zeros.
      for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);
    }
    return x;
  }
  /*
   * Round Big x to a maximum of dp decimal places using rounding mode rm.
   * Called by stringify, P.div, P.round and P.sqrt.
   *
   * x {Big} The Big to round.
   * dp {number} Integer, 0 to MAX_DP inclusive.
   * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)
   * [more] {boolean} Whether the result of division was truncated.
   */
  function round(x, dp, rm, more) {
    var xc = x.c,
      i = x.e + dp + 1;
    if (i < xc.length) {
      if (rm === 1) {
        // xc[i] is the digit after the digit that may be rounded up.
        more = xc[i] >= 5;
      } else if (rm === 2) {
        more = xc[i] > 5 || xc[i] == 5 &&
          (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);
      } else if (rm === 3) {
        more = more || !!xc[0];
      } else {
        more = false;
        if (rm !== 0) throw Error(INVALID_RM);
      }
      if (i < 1) {
        xc.length = 1;
        if (more) {
          // 1, 0.1, 0.01, 0.001, 0.0001 etc.
          x.e = -dp;
          xc[0] = 1;
        } else {
          // Zero.
          xc[0] = x.e = 0;
        }
      } else {
        // Remove any digits after the required decimal places.
        xc.length = i--;
        // Round up?
        if (more) {
          // Rounding up may mean the previous digit has to be rounded up.
          for (; ++xc[i] > 9;) {
            xc[i] = 0;
            if (!i--) {
              ++x.e;
              xc.unshift(1);
            }
          }
        }
        // Remove trailing zeros.
        for (i = xc.length; !xc[--i];) xc.pop();
      }
    } else if (rm < 0 || rm > 3 || rm !== ~~rm) {
      throw Error(INVALID_RM);
    }
    return x;
  }
  /*
   * Return a string representing the value of Big x in normal or exponential notation.
   * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.
   *
   * x {Big}
   * id? {number} Caller id.
   *         1 toExponential
   *         2 toFixed
   *         3 toPrecision
   *         4 valueOf
   * n? {number|undefined} Caller's argument.
   * k? {number|undefined}
   */
  function stringify(x, id, n, k) {
    var e, s,
      Big = x.constructor,
      z = !x.c[0];
    if (n !== UNDEFINED) {
      if (n !== ~~n || n < (id == 3) || n > MAX_DP) {
        throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);
      }
      x = new Big(x);
      // The index of the digit that may be rounded up.
      n = k - x.e;
      // Round?
      if (x.c.length > ++k) round(x, n, Big.RM);
      // toFixed: recalculate k as x.e may have changed if value rounded up.
      if (id == 2) k = x.e + n + 1;
      // Append zeros?
      for (; x.c.length < k;) x.c.push(0);
    }
    e = x.e;
    s = x.c.join('');
    n = s.length;
    // Exponential notation?
    if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {
      s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;
    // Normal notation.
    } else if (e < 0) {
      for (; ++e;) s = '0' + s;
      s = '0.' + s;
    } else if (e > 0) {
      if (++e > n) for (e -= n; e--;) s += '0';
      else if (e < n) s = s.slice(0, e) + '.' + s.slice(e);
    } else if (n > 1) {
      s = s.charAt(0) + '.' + s.slice(1);
    }
    return x.s < 0 && (!z || id == 4) ? '-' + s : s;
  }
  // Prototype/instance methods
  /*
   * Return a new Big whose value is the absolute value of this Big.
   */
  P.abs = function () {
    var x = new this.constructor(this);
    x.s = 1;
    return x;
  };
  /*
   * Return 1 if the value of this Big is greater than the value of Big y,
   *       -1 if the value of this Big is less than the value of Big y, or
   *        0 if they have the same value.
  */
  P.cmp = function (y) {
    var isneg,
      x = this,
      xc = x.c,
      yc = (y = new x.constructor(y)).c,
      i = x.s,
      j = y.s,
      k = x.e,
      l = y.e;
    // Either zero?
    if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;
    // Signs differ?
    if (i != j) return i;
    isneg = i < 0;
    // Compare exponents.
    if (k != l) return k > l ^ isneg ? 1 : -1;
    j = (k = xc.length) < (l = yc.length) ? k : l;
    // Compare digit by digit.
    for (i = -1; ++i < j;) {
      if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;
    }
    // Compare lengths.
    return k == l ? 0 : k > l ^ isneg ? 1 : -1;
  };
  /*
   * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,
   * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
   */
  P.div = function (y) {
    var x = this,
      Big = x.constructor,
      a = x.c,                  // dividend
      b = (y = new Big(y)).c,   // divisor
      k = x.s == y.s ? 1 : -1,
      dp = Big.DP;
    if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(INVALID_DP);
    // Divisor is zero?
    if (!b[0]) throw Error(DIV_BY_ZERO);
    // Dividend is 0? Return +-0.
    if (!a[0]) return new Big(k * 0);
    var bl, bt, n, cmp, ri,
      bz = b.slice(),
      ai = bl = b.length,
      al = a.length,
      r = a.slice(0, bl),   // remainder
      rl = r.length,
      q = y,                // quotient
      qc = q.c = [],
      qi = 0,
      d = dp + (q.e = x.e - y.e) + 1;    // number of digits of the result
    q.s = k;
    k = d < 0 ? 0 : d;
    // Create version of divisor with leading zero.
    bz.unshift(0);
    // Add zeros to make remainder as long as divisor.
    for (; rl++ < bl;) r.push(0);
    do {
      // n is how many times the divisor goes into current remainder.
      for (n = 0; n < 10; n++) {
        // Compare divisor and remainder.
        if (bl != (rl = r.length)) {
          cmp = bl > rl ? 1 : -1;
        } else {
          for (ri = -1, cmp = 0; ++ri < bl;) {
            if (b[ri] != r[ri]) {
              cmp = b[ri] > r[ri] ? 1 : -1;
              break;
            }
          }
        }
        // If divisor < remainder, subtract divisor from remainder.
        if (cmp < 0) {
          // Remainder can't be more than 1 digit longer than divisor.
          // Equalise lengths using divisor with extra leading zero?
          for (bt = rl == bl ? b : bz; rl;) {
            if (r[--rl] < bt[rl]) {
              ri = rl;
              for (; ri && !r[--ri];) r[ri] = 9;
              --r[ri];
              r[rl] += 10;
            }
            r[rl] -= bt[rl];
          }
          for (; !r[0];) r.shift();
        } else {
          break;
        }
      }
      // Add the digit n to the result array.
      qc[qi++] = cmp ? n : ++n;
      // Update the remainder.
      if (r[0] && cmp) r[rl] = a[ai] || 0;
      else r = [a[ai]];
    } while ((ai++ < al || r[0] !== UNDEFINED) && k--);
    // Leading zero? Do not remove if result is simply zero (qi == 1).
    if (!qc[0] && qi != 1) {
      // There can't be more than one zero.
      qc.shift();
      q.e--;
    }
    // Round?
    if (qi > d) round(q, dp, Big.RM, r[0] !== UNDEFINED);
    return q;
  };
  /*
   * Return true if the value of this Big is equal to the value of Big y, otherwise return false.
   */
  P.eq = function (y) {
    return !this.cmp(y);
  };
  /*
   * Return true if the value of this Big is greater than the value of Big y, otherwise return
   * false.
   */
  P.gt = function (y) {
    return this.cmp(y) > 0;
  };
  /*
   * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise
   * return false.
   */
  P.gte = function (y) {
    return this.cmp(y) > -1;
  };
  /*
   * Return true if the value of this Big is less than the value of Big y, otherwise return false.
   */
  P.lt = function (y) {
    return this.cmp(y) < 0;
  };
  /*
   * Return true if the value of this Big is less than or equal to the value of Big y, otherwise
   * return false.
   */
  P.lte = function (y) {
    return this.cmp(y) < 1;
  };
  /*
   * Return a new Big whose value is the value of this Big minus the value of Big y.
   */
  P.minus = P.sub = function (y) {
    var i, j, t, xlty,
      x = this,
      Big = x.constructor,
      a = x.s,
      b = (y = new Big(y)).s;
    // Signs differ?
    if (a != b) {
      y.s = -b;
      return x.plus(y);
    }
    var xc = x.c.slice(),
      xe = x.e,
      yc = y.c,
      ye = y.e;
    // Either zero?
    if (!xc[0] || !yc[0]) {
      // y is non-zero? x is non-zero? Or both are zero.
      return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);
    }
    // Determine which is the bigger number. Prepend zeros to equalise exponents.
    if (a = xe - ye) {
      if (xlty = a < 0) {
        a = -a;
        t = xc;
      } else {
        ye = xe;
        t = yc;
      }
      t.reverse();
      for (b = a; b--;) t.push(0);
      t.reverse();
    } else {
      // Exponents equal. Check digit by digit.
      j = ((xlty = xc.length < yc.length) ? xc : yc).length;
      for (a = b = 0; b < j; b++) {
        if (xc[b] != yc[b]) {
          xlty = xc[b] < yc[b];
          break;
        }
      }
    }
    // x < y? Point xc to the array of the bigger number.
    if (xlty) {
      t = xc;
      xc = yc;
      yc = t;
      y.s = -y.s;
    }
    /*
     * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only
     * needs to start at yc.length.
     */
    if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;
    // Subtract yc from xc.
    for (b = i; j > a;) {
      if (xc[--j] < yc[j]) {
        for (i = j; i && !xc[--i];) xc[i] = 9;
        --xc[i];
        xc[j] += 10;
      }
      xc[j] -= yc[j];
    }
    // Remove trailing zeros.
    for (; xc[--b] === 0;) xc.pop();
    // Remove leading zeros and adjust exponent accordingly.
    for (; xc[0] === 0;) {
      xc.shift();
      --ye;
    }
    if (!xc[0]) {
      // n - n = +0
      y.s = 1;
      // Result must be zero.
      xc = [ye = 0];
    }
    y.c = xc;
    y.e = ye;
    return y;
  };
  /*
   * Return a new Big whose value is the value of this Big modulo the value of Big y.
   */
  P.mod = function (y) {
    var ygtx,
      x = this,
      Big = x.constructor,
      a = x.s,
      b = (y = new Big(y)).s;
    if (!y.c[0]) throw Error(DIV_BY_ZERO);
    x.s = y.s = 1;
    ygtx = y.cmp(x) == 1;
    x.s = a;
    y.s = b;
    if (ygtx) return new Big(x);
    a = Big.DP;
    b = Big.RM;
    Big.DP = Big.RM = 0;
    x = x.div(y);
    Big.DP = a;
    Big.RM = b;
    return this.minus(x.times(y));
  };
  /*
   * Return a new Big whose value is the value of this Big plus the value of Big y.
   */
  P.plus = P.add = function (y) {
    var t,
      x = this,
      Big = x.constructor,
      a = x.s,
      b = (y = new Big(y)).s;
    // Signs differ?
    if (a != b) {
      y.s = -b;
      return x.minus(y);
    }
    var xe = x.e,
      xc = x.c,
      ye = y.e,
      yc = y.c;
    // Either zero? y is non-zero? x is non-zero? Or both are zero.
    if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0);
    xc = xc.slice();
    // Prepend zeros to equalise exponents.
    // Note: reverse faster than unshifts.
    if (a = xe - ye) {
      if (a > 0) {
        ye = xe;
        t = yc;
      } else {
        a = -a;
        t = xc;
      }
      t.reverse();
      for (; a--;) t.push(0);
      t.reverse();
    }
    // Point xc to the longer array.
    if (xc.length - yc.length < 0) {
      t = yc;
      yc = xc;
      xc = t;
    }
    a = yc.length;
    // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.
    for (b = 0; a; xc[a] %= 10) b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;
    // No need to check for zero, as +x + +y != 0 && -x + -y != 0
    if (b) {
      xc.unshift(b);
      ++ye;
    }
    // Remove trailing zeros.
    for (a = xc.length; xc[--a] === 0;) xc.pop();
    y.c = xc;
    y.e = ye;
    return y;
  };
  /*
   * Return a Big whose value is the value of this Big raised to the power n.
   * If n is negative, round to a maximum of Big.DP decimal places using rounding
   * mode Big.RM.
   *
   * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.
   */
  P.pow = function (n) {
    var x = this,
      one = new x.constructor(1),
      y = one,
      isneg = n < 0;
    if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) throw Error(INVALID + 'exponent');
    if (isneg) n = -n;
    for (;;) {
      if (n & 1) y = y.times(x);
      n >>= 1;
      if (!n) break;
      x = x.times(x);
    }
    return isneg ? one.div(y) : y;
  };
  /*
   * Return a new Big whose value is the value of this Big rounded using rounding mode rm
   * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a
   * multiple of 10**-dp.
   * If dp is not specified, round to 0 decimal places.
   * If rm is not specified, use Big.RM.
   *
   * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.
   * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)
   */
  P.round = function (dp, rm) {
    var Big = this.constructor;
    if (dp === UNDEFINED) dp = 0;
    else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) throw Error(INVALID_DP);
    return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);
  };
  /*
   * Return a new Big whose value is the square root of the value of this Big, rounded, if
   * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
   */
  P.sqrt = function () {
    var r, c, t,
      x = this,
      Big = x.constructor,
      s = x.s,
      e = x.e,
      half = new Big(0.5);
    // Zero?
    if (!x.c[0]) return new Big(x);
    // Negative?
    if (s < 0) throw Error(NAME + 'No square root');
    // Estimate.
    s = Math.sqrt(x + '');
    // Math.sqrt underflow/overflow?
    // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.
    if (s === 0 || s === 1 / 0) {
      c = x.c.join('');
      if (!(c.length + e & 1)) c += '0';
      s = Math.sqrt(c);
      e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);
      r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);
    } else {
      r = new Big(s);
    }
    e = r.e + (Big.DP += 4);
    // Newton-Raphson iteration.
    do {
      t = r;
      r = half.times(t.plus(x.div(t)));
    } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));
    return round(r, Big.DP -= 4, Big.RM);
  };
  /*
   * Return a new Big whose value is the value of this Big times the value of Big y.
   */
  P.times = P.mul = function (y) {
    var c,
      x = this,
      Big = x.constructor,
      xc = x.c,
      yc = (y = new Big(y)).c,
      a = xc.length,
      b = yc.length,
      i = x.e,
      j = y.e;
    // Determine sign of result.
    y.s = x.s == y.s ? 1 : -1;
    // Return signed 0 if either 0.
    if (!xc[0] || !yc[0]) return new Big(y.s * 0);
    // Initialise exponent of result as x.e + y.e.
    y.e = i + j;
    // If array xc has fewer digits than yc, swap xc and yc, and lengths.
    if (a < b) {
      c = xc;
      xc = yc;
      yc = c;
      j = a;
      a = b;
      b = j;
    }
    // Initialise coefficient array of result with zeros.
    for (c = new Array(j = a + b); j--;) c[j] = 0;
    // Multiply.
    // i is initially xc.length.
    for (i = b; i--;) {
      b = 0;
      // a is yc.length.
      for (j = a + i; j > i;) {
        // Current sum of products at this digit position, plus carry.
        b = c[j] + yc[i] * xc[j - i - 1] + b;
        c[j--] = b % 10;
        // carry
        b = b / 10 | 0;
      }
      c[j] = (c[j] + b) % 10;
    }
    // Increment result exponent if there is a final carry, otherwise remove leading zero.
    if (b) ++y.e;
    else c.shift();
    // Remove trailing zeros.
    for (i = c.length; !c[--i];) c.pop();
    y.c = c;
    return y;
  };
  /*
   * Return a string representing the value of this Big in exponential notation to dp fixed decimal
   * places and rounded using Big.RM.
   *
   * dp? {number} Integer, 0 to MAX_DP inclusive.
   */
  P.toExponential = function (dp) {
    return stringify(this, 1, dp, dp);
  };
  /*
   * Return a string representing the value of this Big in normal notation to dp fixed decimal
   * places and rounded using Big.RM.
   *
   * dp? {number} Integer, 0 to MAX_DP inclusive.
   *
   * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.
   * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
   */
  P.toFixed = function (dp) {
    return stringify(this, 2, dp, this.e + dp);
  };
  /*
   * Return a string representing the value of this Big rounded to sd significant digits using
   * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent
   * the integer part of the value in normal notation.
   *
   * sd {number} Integer, 1 to MAX_DP inclusive.
   */
  P.toPrecision = function (sd) {
    return stringify(this, 3, sd, sd - 1);
  };
  /*
   * Return a string representing the value of this Big.
   * Return exponential notation if this Big has a positive exponent equal to or greater than
   * Big.PE, or a negative exponent equal to or less than Big.NE.
   * Omit the sign for negative zero.
   */
  P.toString = function () {
    return stringify(this);
  };
  /*
   * Return a string representing the value of this Big.
   * Return exponential notation if this Big has a positive exponent equal to or greater than
   * Big.PE, or a negative exponent equal to or less than Big.NE.
   * Include the sign for negative zero.
   */
  P.valueOf = P.toJSON = function () {
    return stringify(this, 4);
  };
  // Export
  Big = _Big_();
  Big['default'] = Big.Big = Big;
  //AMD.
  if (typeof define === 'function' && define.amd) {
    define(function () { return Big; });
  // Node and other CommonJS-like environments that support module.exports.
  } else if (typeof module !== 'undefined' && module.exports) {
    module.exports = Big;
  //Browser.
  } else {
    GLOBAL.Big = Big;
  }
})(this);
src/workers/InspectionWorkerAsData.worker.js
vue.config.js
@@ -7,7 +7,7 @@
const CompressionPlugin = require("compression-webpack-plugin");
const name = process.env.VUE_APP_TITLE || "若依管理系统"; // ç½‘页标题
const name = process.env.VUE_APP_TITLE || "LIMS实验室管理系统"; // ç½‘页标题
const port = process.env.port || process.env.npm_config_port || 80; // ç«¯å£
@@ -37,7 +37,7 @@
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: `http://127.0.0.1:8002`,
        // target: `http://127.0.0.1:8002`,
        // target: `https://zttx-lims.ztt.cn:8021`,
        changeOrigin: true,
        pathRewrite: {
          ["^" + process.env.VUE_APP_BASE_API]: "",
@@ -55,6 +55,19 @@
  },
  configureWebpack: {
    name: name,
    module: {
      rules: [
        {
          test: /\.worker\.js$/,
          use: {
            loader: "worker-loader",
            options: {
              inline: "fallback",
            },
          },
        },
      ],
    },
    resolve: {
      alias: {
        "@": resolve("src"),