Merge branch 'feature-analysis-RLR-renpy' into feature/spectrum-analysis
This commit is contained in:
		
						commit
						890bc9fa73
					
				| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
NODE_ENV=development
 | 
			
		||||
VUE_APP_API_BASE_URL=http://182.92.183.230:9999
 | 
			
		||||
VUE_APP_API_BASE_URL=http://bdyift.natappfree.cc
 | 
			
		||||
VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas
 | 
			
		||||
VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,9 @@
 | 
			
		|||
    "echarts": "^5.4.2",
 | 
			
		||||
    "echarts-gl": "^2.0.9",
 | 
			
		||||
    "enquire.js": "^2.1.6",
 | 
			
		||||
    "file-saver": "^2.0.5",
 | 
			
		||||
    "js-cookie": "^2.2.0",
 | 
			
		||||
    "jszip": "^3.10.1",
 | 
			
		||||
    "lodash.get": "^4.4.2",
 | 
			
		||||
    "lodash.pick": "^4.4.0",
 | 
			
		||||
    "md5": "^2.2.1",
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +58,7 @@
 | 
			
		|||
    "xss": "^1.0.13"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
 | 
			
		||||
    "@babel/polyfill": "^7.2.5",
 | 
			
		||||
    "@types/crypto-js": "^4.1.1",
 | 
			
		||||
    "@vue/cli-plugin-babel": "^3.3.0",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
import Vue from 'vue'
 | 
			
		||||
import { axios } from '@/utils/request'
 | 
			
		||||
import signMd5Utils from '@/utils/encryption/signMd5Utils'
 | 
			
		||||
import qs from "qs";
 | 
			
		||||
 | 
			
		||||
const api = {
 | 
			
		||||
  user: '/mock/api/user',
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +70,24 @@ export function getAction(url,parameter) {
 | 
			
		|||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function getFileAction(url,parameter) {
 | 
			
		||||
  let sign = signMd5Utils.getSign(url, parameter);
 | 
			
		||||
  //将签名和时间戳,添加在请求接口 Header
 | 
			
		||||
  // update-begin--author:taoyan---date:20220421--for: VUEN-410【签名改造】 X-TIMESTAMP牵扯
 | 
			
		||||
  let signHeader = {"X-Sign": sign,"X-TIMESTAMP": signMd5Utils.getTimestamp()};
 | 
			
		||||
  // update-end--author:taoyan---date:20220421--for: VUEN-410【签名改造】 X-TIMESTAMP牵扯
 | 
			
		||||
  return axios({
 | 
			
		||||
    url: url,
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    params: parameter,
 | 
			
		||||
    responseType:"blob",
 | 
			
		||||
    paramsSerializer: function (params) {  
 | 
			
		||||
      return qs.stringify(params, { arrayFormat: "repeat" });  
 | 
			
		||||
    },
 | 
			
		||||
    headers: signHeader
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//deleteAction
 | 
			
		||||
export function deleteAction(url,parameter) {
 | 
			
		||||
  return axios({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <a-modal :class="'custom-modal' + (innerFullscreen ? ' fullscreen' : '')" v-bind="_attrs" v-model="visible">
 | 
			
		||||
  <a-modal :class="'custom-modal' + (innerFullscreen ? ' fullscreen' : '')" v-bind="_attrs" v-model="visible" @cancel="handleCancel">
 | 
			
		||||
    <img slot="closeIcon" src="@/assets/images/global/close.png" />
 | 
			
		||||
    <div slot="title">
 | 
			
		||||
      <div class="custom-modal-title">
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +76,9 @@ export default {
 | 
			
		|||
    },
 | 
			
		||||
    onCancel() {
 | 
			
		||||
      this.visible = false
 | 
			
		||||
    },
 | 
			
		||||
    handleCancel() {
 | 
			
		||||
      this.$emit("cancel")
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
    </a-spin>
 | 
			
		||||
    <div slot="custom-footer" style="text-align: center;">
 | 
			
		||||
      <a-space :size="20">
 | 
			
		||||
        <a-button type="primary">Export</a-button>
 | 
			
		||||
        <a-button type="primary" @click="handleOk">Export</a-button>
 | 
			
		||||
        <a-button @click="visible = false">Cancel</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -15,6 +15,7 @@
 | 
			
		|||
<script>
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { getAction } from '../../../../api/manage'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '../../SampleDataMixin'
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [ModalMixin, SampleDataMixin],
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +31,8 @@ export default {
 | 
			
		|||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      content: '',
 | 
			
		||||
      isLoading: true
 | 
			
		||||
      isLoading: true,
 | 
			
		||||
      fileName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +64,7 @@ export default {
 | 
			
		|||
        if (res.success) {
 | 
			
		||||
          this.content = res.result
 | 
			
		||||
        } else {
 | 
			
		||||
          this.content = res
 | 
			
		||||
          this.content = ""
 | 
			
		||||
        }
 | 
			
		||||
      } catch (error) {
 | 
			
		||||
        console.error(error)
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +75,37 @@ export default {
 | 
			
		|||
 | 
			
		||||
    beforeModalOpen() {
 | 
			
		||||
      this.getContent()
 | 
			
		||||
    },
 | 
			
		||||
    handleOk() {
 | 
			
		||||
      this.fileName=""
 | 
			
		||||
      if (this.content) {
 | 
			
		||||
        let strData = new Blob([this.content], { type: 'text/plain;charset=utf-8' });
 | 
			
		||||
        // if (this.type == 1 || this.type == 3) {
 | 
			
		||||
        //   saveAs(strData, `${this.type == 1 ?'Gamma-':'Beta-'} ARR.txt`)
 | 
			
		||||
        // } else {
 | 
			
		||||
        //   saveAs(strData, `${this.type == 2 ?'Gamma-':'Beta-'} RRR.txt`)
 | 
			
		||||
        // }
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              _this.visible = false
 | 
			
		||||
              saveAs(strData, `${_this.fileName}.txt`)
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No data can be saved!")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,16 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <custom-modal v-model="visible" :width="1000" title="Auto Process Log Viewer" :okHandler="handleOk">
 | 
			
		||||
  <custom-modal v-model="visible" :width="1000" title="Auto Process Log Viewer">
 | 
			
		||||
    <a-spin :spinning="isLoading">
 | 
			
		||||
      <pre>
 | 
			
		||||
        {{ content }}
 | 
			
		||||
      </pre>
 | 
			
		||||
    </a-spin>
 | 
			
		||||
    <div slot="custom-footer" style="text-align: center;">
 | 
			
		||||
      <a-space :size="20">
 | 
			
		||||
        <a-button type="primary" @click="handleOk">Save</a-button>
 | 
			
		||||
        <a-button @click="visible = false">Cancel</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </div>
 | 
			
		||||
  </custom-modal>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +18,7 @@
 | 
			
		|||
import { getAction } from '@/api/manage'
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import SampleDataMixin from '@/views/spectrumAnalysis/SampleDataMixin'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [ModalMixin, SampleDataMixin],
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +29,8 @@ export default {
 | 
			
		|||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      content: ''
 | 
			
		||||
      content: '',
 | 
			
		||||
      fileName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +38,10 @@ export default {
 | 
			
		|||
      try {
 | 
			
		||||
        this.isLoading = true
 | 
			
		||||
        const { sampleId } = this.sampleData
 | 
			
		||||
        const res = await getAction(this.type == 1 ? '/gamma/viewAutomaticAnalysisLog' : '', {
 | 
			
		||||
        const res = await getAction(this.type == 1 ? '/gamma/viewAutomaticAnalysisLog' : '/gamma/viewAutomaticAnalysisLog', {  // 自动分析日志接口暂用都是gammam,beta暂时没有
 | 
			
		||||
          sampleId
 | 
			
		||||
        })
 | 
			
		||||
        this.content = res
 | 
			
		||||
        this.content = ""
 | 
			
		||||
      } catch (error) {
 | 
			
		||||
        console.error(error)
 | 
			
		||||
      } finally {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +54,31 @@ export default {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    handleOk() {
 | 
			
		||||
      console.log('%c [  ]-15', 'font-size:13px; background:pink; color:#bf2c9f;')
 | 
			
		||||
      this.fileName=""
 | 
			
		||||
      if (this.content) {
 | 
			
		||||
        let _this = this
 | 
			
		||||
        let strData = new Blob([this.content], { type: 'text/plain;charset=utf-8' });
 | 
			
		||||
        // saveAs(strData, `${this.type == 1 ?'Gamma-':'Beta-'}Automatic Analysis Log.txt`)
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              _this.visible = false
 | 
			
		||||
              saveAs(strData, `${_this.fileName}.txt`)
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No data can be saved!")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,16 +2,18 @@
 | 
			
		|||
  <custom-modal v-model="visible" :width="750" title="QC Result">
 | 
			
		||||
    <a-table :loading="isLoading" :columns="columns" :dataSource="list" :pagination="false"> </a-table>
 | 
			
		||||
    <a-space slot="custom-footer" :size="20">
 | 
			
		||||
      <a-button type="primary">Save Text</a-button>
 | 
			
		||||
      <a-button type="primary">Save Excel</a-button>
 | 
			
		||||
      <a-button type="primary" @click="SaveText">Save Text</a-button>
 | 
			
		||||
      <a-button type="primary" @click="handleExportToExcel">Save Excel</a-button>
 | 
			
		||||
      <a-button type="primary" @click="visible = false">Cancel</a-button>
 | 
			
		||||
    </a-space>
 | 
			
		||||
  </custom-modal>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import { getAction, getFileAction } from '@/api/manage'
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '@/views/spectrumAnalysis/SampleDataMixin'
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
  {
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +49,7 @@ const columns = [
 | 
			
		|||
]
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [ModalMixin],
 | 
			
		||||
  mixins: [ModalMixin, SampleDataMixin],
 | 
			
		||||
  props: {
 | 
			
		||||
    sampleId: {
 | 
			
		||||
      type: Number
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +59,10 @@ export default {
 | 
			
		|||
    this.columns = columns
 | 
			
		||||
    return {
 | 
			
		||||
      list: [],
 | 
			
		||||
      isLoading: false
 | 
			
		||||
      isLoading: false,
 | 
			
		||||
      text: '',
 | 
			
		||||
      fileName: '',
 | 
			
		||||
      fileName_excel: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -124,6 +129,74 @@ export default {
 | 
			
		|||
    beforeModalOpen() {
 | 
			
		||||
      this.list = []
 | 
			
		||||
      this.getData()
 | 
			
		||||
    },
 | 
			
		||||
    SaveText() {
 | 
			
		||||
      this.fileName=""
 | 
			
		||||
      this.text = `#QC RESULT\n${this.columns[0].title}                  ${this.columns[1].title}                  ${this.columns[2].title}                  ${this.columns[3].title}\n`
 | 
			
		||||
      this.list.forEach(item => {
 | 
			
		||||
        let str = ""
 | 
			
		||||
        str += `${item.qcFlags}                  `
 | 
			
		||||
        str += `${item.evaluationMetrics}                  `
 | 
			
		||||
        str += `${item.value}                  `
 | 
			
		||||
        str += `${item.status}                  \n`
 | 
			
		||||
        this.text+=str
 | 
			
		||||
      })
 | 
			
		||||
      let strData = new Blob([this.text], { type: 'text/plain;charset=utf-8' });
 | 
			
		||||
      let _this = this
 | 
			
		||||
      this.$confirm({
 | 
			
		||||
        title: 'Please enter file name',
 | 
			
		||||
        content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
        okText: 'Cancle',
 | 
			
		||||
        cancelText: 'Save',
 | 
			
		||||
        okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
        cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
        onOk() {
 | 
			
		||||
          console.log('Cancel');
 | 
			
		||||
        },
 | 
			
		||||
        onCancel() {
 | 
			
		||||
          if (_this.fileName) {
 | 
			
		||||
            _this.visible = false
 | 
			
		||||
            saveAs(strData, `${_this.fileName}.txt`)
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 导出到Excel
 | 
			
		||||
    handleExportToExcel() {
 | 
			
		||||
      this.fileName_excel = ""
 | 
			
		||||
      const { sampleId, inputFileName: fileName } = this.sampleData
 | 
			
		||||
      if (this.list.length>0) {
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName_excel} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName_excel) {
 | 
			
		||||
              let params = {
 | 
			
		||||
                sampleId: sampleId || "",
 | 
			
		||||
                fileName
 | 
			
		||||
              }
 | 
			
		||||
              getFileAction('/spectrumAnalysis/exportQCResult', params).then(res => {
 | 
			
		||||
                if (res.code && res.code == 500) {
 | 
			
		||||
                  this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
                } else {
 | 
			
		||||
                  const blob = new Blob([res], { type: "application/vnd.ms-excel" })
 | 
			
		||||
                  saveAs(blob, `${_this.fileName_excel}`)
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No downloadable data")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,8 +6,8 @@
 | 
			
		|||
 | 
			
		||||
    <div slot="custom-footer">
 | 
			
		||||
      <a-space :size="20">
 | 
			
		||||
        <a-button type="primary">Save Text</a-button>
 | 
			
		||||
        <a-button type="primary">Save Excel</a-button>
 | 
			
		||||
        <a-button type="primary" @click="saveText">Save Text</a-button>
 | 
			
		||||
        <a-button type="primary" @click="handleExportToExcel">Save Excel</a-button>
 | 
			
		||||
        <a-button @click="visible = false">Cancel</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -15,10 +15,12 @@
 | 
			
		|||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import { getAction, getFileAction } from '@/api/manage'
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '@/views/spectrumAnalysis/SampleDataMixin'
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [ModalMixin],
 | 
			
		||||
  mixins: [ModalMixin, SampleDataMixin],
 | 
			
		||||
  props: {
 | 
			
		||||
    sampleId: {
 | 
			
		||||
      type: Number
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +29,9 @@ export default {
 | 
			
		|||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      content: '',
 | 
			
		||||
      isLoading: true
 | 
			
		||||
      isLoading: true,
 | 
			
		||||
      fileName: '',
 | 
			
		||||
      fileName_excel: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +46,7 @@ export default {
 | 
			
		|||
          this.content = res.result
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          this.content = ""
 | 
			
		||||
          this.$message.error(res.message)
 | 
			
		||||
        }
 | 
			
		||||
      } catch (error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -55,6 +60,70 @@ export default {
 | 
			
		|||
      if (this.sampleId) {
 | 
			
		||||
        this.getContent()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    saveText() {
 | 
			
		||||
      this.fileName=""
 | 
			
		||||
      if (this.content) { 
 | 
			
		||||
        let strData = new Blob([this.content], { type: 'text/plain;charset=utf-8' });
 | 
			
		||||
        // saveAs(strData, `Beta-View Sample Infomation.txt`)
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              _this.visible = false
 | 
			
		||||
              saveAs(strData, `${_this.fileName}.txt`)
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No data can be saved!")
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 导出到Excel
 | 
			
		||||
    handleExportToExcel() {
 | 
			
		||||
      this.fileName_excel = ""
 | 
			
		||||
      const { sampleId, inputFileName: fileName } = this.sampleData
 | 
			
		||||
      if (this.content) {
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName_excel} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName_excel) {
 | 
			
		||||
              let params = {
 | 
			
		||||
                sampleId: sampleId || "",
 | 
			
		||||
                fileName
 | 
			
		||||
              }
 | 
			
		||||
              getFileAction('/spectrumAnalysis/exportSampleInformation', params).then(res => {
 | 
			
		||||
                if (res.code && res.code == 500) {
 | 
			
		||||
                  this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
                } else {
 | 
			
		||||
                  const blob = new Blob([res], { type: "application/vnd.ms-excel" })
 | 
			
		||||
                  saveAs(blob, `${_this.fileName_excel}`)
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No downloadable data")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <custom-modal v-model="visible" :width="1000" title="View Spectrum" :footer="null" destroyOnClose>
 | 
			
		||||
  <custom-modal v-model="visible" :width="1000" title="View Spectrum" destroyOnClose>
 | 
			
		||||
    <a-spin :spinning="isLoading">
 | 
			
		||||
      <a-tabs :animated="false">
 | 
			
		||||
      <a-tabs :animated="false" @change="handleTabChange">
 | 
			
		||||
        <a-tab-pane tab="Sample Spectrum" :key="1">
 | 
			
		||||
          <pre>{{ content.sample.join('\n') }}</pre>
 | 
			
		||||
        </a-tab-pane>
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,12 @@
 | 
			
		|||
        </a-tab-pane>
 | 
			
		||||
      </a-tabs>
 | 
			
		||||
    </a-spin>
 | 
			
		||||
    <div slot="custom-footer">
 | 
			
		||||
      <a-space :size="20">
 | 
			
		||||
        <a-button type="primary" @click="handleOk">Save Text</a-button>
 | 
			
		||||
        <a-button @click="visible = false">Cancel</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </div>
 | 
			
		||||
  </custom-modal>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +43,9 @@ export default {
 | 
			
		|||
        qc: [],
 | 
			
		||||
        sample: []
 | 
			
		||||
      },
 | 
			
		||||
      isLoading: true
 | 
			
		||||
      isLoading: true,
 | 
			
		||||
      fileName: '',
 | 
			
		||||
      currTab: 1
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -63,6 +71,46 @@ export default {
 | 
			
		|||
      if (this.sampleId) {
 | 
			
		||||
        this.getContent()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    handleTabChange(key) {
 | 
			
		||||
      this.currTab = key
 | 
			
		||||
    },
 | 
			
		||||
    handleOk() {
 | 
			
		||||
      this.fileName=""
 | 
			
		||||
      let text = ""
 | 
			
		||||
      if (this.currTab == 1) {
 | 
			
		||||
        text=this.content.sample.join('\n')
 | 
			
		||||
      } else if (this.currTab == 2) {
 | 
			
		||||
        text=this.content.gasBg.join('\n')
 | 
			
		||||
      }else if (this.currTab == 3) {
 | 
			
		||||
        text=this.content.detBg.join('\n')
 | 
			
		||||
      }else if (this.currTab == 4) {
 | 
			
		||||
        text=this.content.qc.join('\n')
 | 
			
		||||
      }
 | 
			
		||||
      if (text) { 
 | 
			
		||||
        let strData = new Blob([text], { type: 'text/plain;charset=utf-8' });
 | 
			
		||||
        // saveAs(strData, `GammaViewer Log.txt`)
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              _this.visible = false
 | 
			
		||||
              saveAs(strData, `${_this.fileName}.txt`)
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No data can be saved!")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,18 +3,19 @@
 | 
			
		|||
    <a-spin :spinning="isLoading">
 | 
			
		||||
      <pre class="data-processing-log">{{ text }}</pre>
 | 
			
		||||
    </a-spin>
 | 
			
		||||
      <div slot="custom-footer" style="text-align: center;">
 | 
			
		||||
        <a-space :size="20">
 | 
			
		||||
          <a-button type="primary">Export</a-button>
 | 
			
		||||
          <a-button @click="visible = false">Cancel</a-button>
 | 
			
		||||
        </a-space>
 | 
			
		||||
      </div>
 | 
			
		||||
    <div slot="custom-footer" style="text-align: center;">
 | 
			
		||||
      <a-space :size="20">
 | 
			
		||||
        <a-button type="primary" @click="handleOk">Export</a-button>
 | 
			
		||||
        <a-button @click="visible = false">Cancel</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </div>
 | 
			
		||||
  </custom-modal>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '../../SampleDataMixin'
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [ModalMixin, SampleDataMixin],
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +23,7 @@ export default {
 | 
			
		|||
    return {
 | 
			
		||||
      text: "",
 | 
			
		||||
      isLoading: false,
 | 
			
		||||
      fileName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -35,14 +37,42 @@ export default {
 | 
			
		|||
        sampleId,
 | 
			
		||||
        fileName
 | 
			
		||||
      }
 | 
			
		||||
      getAction("/gamma/viewGammaviewerLog", params).then(res => {
 | 
			
		||||
      getAction("/gamma/viewGammaViewerLog", params).then(res => {
 | 
			
		||||
        this.isLoading = false
 | 
			
		||||
        if (res.success) {
 | 
			
		||||
          this.text = res.result
 | 
			
		||||
        } else {
 | 
			
		||||
          this.text = ""
 | 
			
		||||
          this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleOk() {
 | 
			
		||||
      this.fileName=""
 | 
			
		||||
      if (this.text) {
 | 
			
		||||
        let strData = new Blob([this.text], { type: 'text/plain;charset=utf-8' });
 | 
			
		||||
        // saveAs(strData, `GammaViewer Log.txt`)
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content: h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              _this.visible = false
 | 
			
		||||
              saveAs(strData, `${_this.fileName}.txt`)
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No data can be saved!")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,49 +1,125 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <custom-modal v-model="visible" :width="1200" title="Load Data From File">
 | 
			
		||||
    <a-table :data-source="list" :columns="columns" :pagination="false" bordered>
 | 
			
		||||
      <template slot="sampleData" slot-scope="text, record">
 | 
			
		||||
        <phd-select type="file" @change="handleFileChange(record, 'sampleData', $event)" :title="text && text.name">
 | 
			
		||||
          {{ text && text.name }}
 | 
			
		||||
        </phd-select>
 | 
			
		||||
  <div>
 | 
			
		||||
    <custom-modal v-model="visible" :width="1200" title="Load Data From File">
 | 
			
		||||
      <a-table 
 | 
			
		||||
        :data-source="list" 
 | 
			
		||||
        :columns="columns" 
 | 
			
		||||
        :loading="loading_list" 
 | 
			
		||||
        :pagination="false" 
 | 
			
		||||
        bordered
 | 
			
		||||
      >
 | 
			
		||||
        <template slot="sampleData" slot-scope="text, record">
 | 
			
		||||
          <div class="file-name file-ellipsis" :title="text" @dblclick="handleFileSelect('_S_',record)">
 | 
			
		||||
            {{ text }}
 | 
			
		||||
          </div>
 | 
			
		||||
          <!-- <phd-select type="file" @change="handleFileChange(record, 'sampleData', $event)" @select="handleFileSelect" :title="text && text.name">
 | 
			
		||||
            {{ text }}
 | 
			
		||||
          </phd-select> -->
 | 
			
		||||
        </template>
 | 
			
		||||
        <template slot="gasBkData" slot-scope="text, record">
 | 
			
		||||
          <div class="file-ellipsis" :title="text" @dblclick="handleFileSelect('_G_',record)">
 | 
			
		||||
            {{ text }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </template>
 | 
			
		||||
        <template slot="detBkData" slot-scope="text, record">
 | 
			
		||||
          <div class="file-ellipsis" :title="text" @dblclick="handleFileSelect('_D_',record)">
 | 
			
		||||
            {{ text }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </template>
 | 
			
		||||
        <template slot="qcData" slot-scope="text, record">
 | 
			
		||||
          <div class="file-ellipsis" :title="text" @dblclick="handleFileSelect('_Q_',record)">
 | 
			
		||||
            {{ text }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </template>
 | 
			
		||||
        <template slot="status" slot-scope="text,record">
 | 
			
		||||
          <span :class="[record.detFileStatus&&record.gasFileStatus&&record.qcFileStatus?'status_true':'status_false','status']"></span>
 | 
			
		||||
        </template>
 | 
			
		||||
      </a-table>
 | 
			
		||||
  
 | 
			
		||||
      <!-- 底部按钮 -->
 | 
			
		||||
      <template slot="custom-footer">
 | 
			
		||||
        <a-space>
 | 
			
		||||
          <a-upload accept=".PHD,.phd" :custom-request="handleUpload" :multiple="true" :show-upload-list="false" :before-upload="beforeUpload" >
 | 
			
		||||
            <a-button type="primary" :loading="uploading">
 | 
			
		||||
              Upload
 | 
			
		||||
            </a-button>
 | 
			
		||||
          </a-upload>
 | 
			
		||||
          <a-button type="primary" @click="handleReset">Reset</a-button>
 | 
			
		||||
          <a-button type="primary" @click="handleLoad">Load</a-button>
 | 
			
		||||
          <a-button type="primary" @click="handleCancel">Cancel</a-button>
 | 
			
		||||
        </a-space>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template slot="gasBkData" slot-scope="text, record">
 | 
			
		||||
        <phd-select type="file" @change="handleFileChange(record, 'gasBkData', $event)" :title="text && text.name">
 | 
			
		||||
          {{ text && text.name }}
 | 
			
		||||
        </phd-select>
 | 
			
		||||
      <!-- 底部按钮结束 -->
 | 
			
		||||
    </custom-modal>
 | 
			
		||||
    <a-modal v-model="visible_file" :width="1200" title="File List" @cancel="cancelFileModale">
 | 
			
		||||
      <a-spin :spinning="loading_file">
 | 
			
		||||
        <div style="position: relative;padding-bottom: 40px;height: 460px;overflow: hidden;">
 | 
			
		||||
          <a-row type="flex" style="margin-bottom: 15px;">
 | 
			
		||||
            <a-col flex="400px">
 | 
			
		||||
              <a-input placeholder="search..." v-model="searchName" />
 | 
			
		||||
            </a-col>
 | 
			
		||||
            <a-col flex="108px">
 | 
			
		||||
              <a-button class="search-btn" type="primary" @click="onSearchFileName">
 | 
			
		||||
                <img src="@/assets/images/global/search.png" alt="" />
 | 
			
		||||
                Search
 | 
			
		||||
              </a-button>
 | 
			
		||||
            </a-col>
 | 
			
		||||
          </a-row>
 | 
			
		||||
          <a-table 
 | 
			
		||||
            v-if="tableType=='multiple'"
 | 
			
		||||
            :data-source="list_file" 
 | 
			
		||||
            :columns="columns_file"
 | 
			
		||||
            :pagination="false"
 | 
			
		||||
            :customRow="customRow"
 | 
			
		||||
            :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
 | 
			
		||||
            :scroll="{ y: 375 }"
 | 
			
		||||
          >
 | 
			
		||||
          </a-table>
 | 
			
		||||
          <custom-table
 | 
			
		||||
            v-if="tableType=='single'"
 | 
			
		||||
            rowKey="id"
 | 
			
		||||
            size="middle"
 | 
			
		||||
            :columns="columns_file"
 | 
			
		||||
            :list="list_file"
 | 
			
		||||
            :pagination="false"
 | 
			
		||||
            :selectedRowKeys.sync="selectedRowKeys_edit"
 | 
			
		||||
            :selectionRows.sync="selectionRows_edit"
 | 
			
		||||
          >
 | 
			
		||||
          </custom-table>
 | 
			
		||||
          <a-pagination 
 | 
			
		||||
            size="small"
 | 
			
		||||
            v-model="ipagination.current" 
 | 
			
		||||
            :pageSize="ipagination.pageSize"
 | 
			
		||||
            :page-size-options="ipagination.pageSizeOptions"
 | 
			
		||||
            show-size-changer
 | 
			
		||||
            show-quick-jumper
 | 
			
		||||
            :total="ipagination.total"
 | 
			
		||||
            :show-total="(total, range) => `Total ${total} items Page ${ipagination.current} / ${Math.ceil(total / ipagination.pageSize)}`"
 | 
			
		||||
            show-less-items 
 | 
			
		||||
            @change="handlePageChange"
 | 
			
		||||
            @showSizeChange="handleSizeChange"
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
      </a-spin>
 | 
			
		||||
      <template slot="footer">
 | 
			
		||||
        <a-space class="operators" :size="20">
 | 
			
		||||
          <a-button type="success" @click="saveFileName">Save</a-button>
 | 
			
		||||
          <a-button type="warn"  @click="cancelFileModale">Cancel</a-button>
 | 
			
		||||
        </a-space>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template slot="detBkData" slot-scope="text, record">
 | 
			
		||||
        <phd-select type="file" @change="handleFileChange(record, 'detBkData', $event)" :title="text && text.name">
 | 
			
		||||
          {{ text && text.name }}
 | 
			
		||||
        </phd-select>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template slot="qcData" slot-scope="text, record">
 | 
			
		||||
        <phd-select type="file" @change="handleFileChange(record, 'qcData', $event)" :title="text && text.name">
 | 
			
		||||
          {{ text && text.name }}
 | 
			
		||||
        </phd-select>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template slot="status" slot-scope="text">
 | 
			
		||||
        <span class="status"></span>
 | 
			
		||||
      </template>
 | 
			
		||||
    </a-table>
 | 
			
		||||
 | 
			
		||||
    <!-- 底部按钮 -->
 | 
			
		||||
    <template slot="custom-footer">
 | 
			
		||||
      <a-space>
 | 
			
		||||
        <a-button type="primary" @click="handleReset">Reset</a-button>
 | 
			
		||||
        <a-button type="primary" @click="handleLoad">Load</a-button>
 | 
			
		||||
        <a-button type="primary" @click="handleCancel">Cancel</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </template>
 | 
			
		||||
    <!-- 底部按钮结束 -->
 | 
			
		||||
  </custom-modal>
 | 
			
		||||
    </a-modal>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import JSZip from 'jszip'
 | 
			
		||||
import FileSaver from 'file-saver'
 | 
			
		||||
import PhdSelect from '../PHDSelect.vue'
 | 
			
		||||
import { getAction,postAction } from '../../../../api/manage'
 | 
			
		||||
const columns = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'SampleData',
 | 
			
		||||
    dataIndex: 'sampleData',
 | 
			
		||||
    dataIndex: 'sampleFileName',
 | 
			
		||||
    width: '23%',
 | 
			
		||||
    ellipsis: true,
 | 
			
		||||
    scopedSlots: {
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +128,7 @@ const columns = [
 | 
			
		|||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'GasBkData',
 | 
			
		||||
    dataIndex: 'gasBkData',
 | 
			
		||||
    dataIndex: 'gasFileName',
 | 
			
		||||
    width: '23%',
 | 
			
		||||
    ellipsis: true,
 | 
			
		||||
    scopedSlots: {
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +137,7 @@ const columns = [
 | 
			
		|||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'DetBkData',
 | 
			
		||||
    dataIndex: 'detBkData',
 | 
			
		||||
    dataIndex: 'detFileName',
 | 
			
		||||
    width: '23%',
 | 
			
		||||
    ellipsis: true,
 | 
			
		||||
    scopedSlots: {
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +146,7 @@ const columns = [
 | 
			
		|||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'QCData',
 | 
			
		||||
    dataIndex: 'qcData',
 | 
			
		||||
    dataIndex: 'qcFileName',
 | 
			
		||||
    width: '23%',
 | 
			
		||||
    ellipsis: true,
 | 
			
		||||
    scopedSlots: {
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +161,23 @@ const columns = [
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
const columns_file = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Name',
 | 
			
		||||
    dataIndex: 'name',
 | 
			
		||||
    width: '45%',
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    ellipsis: true
 | 
			
		||||
  },{
 | 
			
		||||
    title: 'UpdateDate',
 | 
			
		||||
    dataIndex: 'updateDate',
 | 
			
		||||
    align: 'left',
 | 
			
		||||
  },{
 | 
			
		||||
    title: 'Size',
 | 
			
		||||
    dataIndex: 'size',
 | 
			
		||||
    align: 'left'
 | 
			
		||||
  },
 | 
			
		||||
]
 | 
			
		||||
export default {
 | 
			
		||||
  components: { PhdSelect },
 | 
			
		||||
  props: {
 | 
			
		||||
| 
						 | 
				
			
			@ -96,30 +188,200 @@ export default {
 | 
			
		|||
  data() {
 | 
			
		||||
    this.columns = columns
 | 
			
		||||
    return {
 | 
			
		||||
      list: this.getInitialList()
 | 
			
		||||
      visible_file: false,
 | 
			
		||||
      list_file: [],
 | 
			
		||||
      columns_file,
 | 
			
		||||
      loading_file: false,
 | 
			
		||||
      loading_list: false,
 | 
			
		||||
      list: this.getInitialList(),
 | 
			
		||||
      ipagination:{
 | 
			
		||||
        current: 1,
 | 
			
		||||
        pageSize: 10,
 | 
			
		||||
        pageSizeOptions: ['10', '20', '30'],
 | 
			
		||||
        showTotal: (total, range) => {
 | 
			
		||||
          const { current, pageSize } = this.ipagination
 | 
			
		||||
          return `Total ${total} items Page ${current} / ${Math.ceil(total / pageSize)}`
 | 
			
		||||
        },
 | 
			
		||||
        showQuickJumper: true,
 | 
			
		||||
        showSizeChanger: true,
 | 
			
		||||
        total: 0
 | 
			
		||||
      },
 | 
			
		||||
      selectedRowKeys: [],
 | 
			
		||||
      selectedFiles: [],
 | 
			
		||||
      fileList: [],
 | 
			
		||||
      fileNum: 0,
 | 
			
		||||
      uploading: false,
 | 
			
		||||
      currRowData: {},
 | 
			
		||||
      currFileType: "_S_",
 | 
			
		||||
      selectedRowKeys_edit: [],
 | 
			
		||||
      selectionRows_edit: [],
 | 
			
		||||
      tableType: "multiple",
 | 
			
		||||
      searchName: ""
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    // 初始化为10*4的表格
 | 
			
		||||
    getInitialList() {
 | 
			
		||||
      return new Array(10).fill(0).map(() => ({
 | 
			
		||||
        sampleData: undefined,
 | 
			
		||||
        gasBkData: undefined,
 | 
			
		||||
        detBkData: undefined,
 | 
			
		||||
        qcData: undefined
 | 
			
		||||
        sampleFileName: undefined,
 | 
			
		||||
        gasFileName: undefined,
 | 
			
		||||
        detFileName: undefined,
 | 
			
		||||
        qcFileName: undefined
 | 
			
		||||
      }))
 | 
			
		||||
    },
 | 
			
		||||
    customRow(record, index) {
 | 
			
		||||
      const that = this;
 | 
			
		||||
      return {
 | 
			
		||||
        // class: that.selectedRowKeys==record.id ? 'ant-table-row-selected' : '',
 | 
			
		||||
        on: {
 | 
			
		||||
          click: () => {
 | 
			
		||||
            console.log("选中行",record.id);
 | 
			
		||||
            that.selectedRowKeys.push( record.id)
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleFileChange(record, key, fileInfo) {
 | 
			
		||||
      record[key] = fileInfo
 | 
			
		||||
    },
 | 
			
		||||
    handleFileSelect(str, record) {
 | 
			
		||||
      this.currRowData = record
 | 
			
		||||
      this.currFileType = str
 | 
			
		||||
      this.selectedRowKeys = []
 | 
			
		||||
      this.selectedFiles = []
 | 
			
		||||
      this.visible_file = true
 | 
			
		||||
      this.tableType = str==="_S_"?"multiple":"single"
 | 
			
		||||
      this.getSpectrumFile({pageNo:1,pageSize:10})
 | 
			
		||||
    },
 | 
			
		||||
    onSearchFileName() {
 | 
			
		||||
      this.getSpectrumFile({pageNo:1,pageSize:10})
 | 
			
		||||
    },
 | 
			
		||||
    getSpectrumFile(params) {
 | 
			
		||||
      this.loading_file = true
 | 
			
		||||
      let params_arg = {...params,name:`${this.searchName?this.searchName+',':''}${this.currFileType}`}
 | 
			
		||||
      getAction("/spectrumFile/get", params_arg).then(res => {
 | 
			
		||||
        this.loading_file = false
 | 
			
		||||
        if (res.success) {
 | 
			
		||||
          res.result.records.forEach((item,index) => {
 | 
			
		||||
            item.id = index
 | 
			
		||||
          })
 | 
			
		||||
          this.ipagination.total = res.result.total
 | 
			
		||||
          this.ipagination.current = res.result.current
 | 
			
		||||
          this.ipagination.pageSize = res.result.size
 | 
			
		||||
          this.list_file = res.result.records
 | 
			
		||||
        } else {
 | 
			
		||||
          this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handlePageChange(page, pageSize) {
 | 
			
		||||
      this.ipagination.current = page
 | 
			
		||||
      this.ipagination.pageSize = pageSize
 | 
			
		||||
      this.getSpectrumFile({
 | 
			
		||||
        pageNo: page,
 | 
			
		||||
        pageSize: pageSize
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleSizeChange(current, size) {
 | 
			
		||||
      this.ipagination.current = current
 | 
			
		||||
      this.ipagination.pageSize = size
 | 
			
		||||
      this.getSpectrumFile({
 | 
			
		||||
        pageNo: current,
 | 
			
		||||
        pageSize: size
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    onSelectChange(selectedRowKeys, selectedRows) {
 | 
			
		||||
      this.selectedRowKeys = selectedRowKeys
 | 
			
		||||
      this.selectedFiles = selectedRows.map(item => {
 | 
			
		||||
        return item.name
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    saveFileName() {
 | 
			
		||||
      this.visible_file = false
 | 
			
		||||
      if (this.tableType ==="multiple" ) {
 | 
			
		||||
        this.loading_list = true
 | 
			
		||||
        let params = {
 | 
			
		||||
          fileName: this.selectedFiles.join(",")
 | 
			
		||||
        }
 | 
			
		||||
        getAction("/spectrumAnalysis/getFilesBySampleFile", params).then(res => {
 | 
			
		||||
          this.loading_list = false
 | 
			
		||||
          if (res.success) {
 | 
			
		||||
            let idx = res.result.length
 | 
			
		||||
            this.list.splice(0,idx,...res.result)
 | 
			
		||||
          } else {
 | 
			
		||||
            this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      } else {
 | 
			
		||||
        let currFileName = this.selectionRows_edit[0].name
 | 
			
		||||
        if (currFileName.includes(this.currFileType)) {
 | 
			
		||||
          this.currRowData.gasFileName = currFileName
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    cancelFileModale() {
 | 
			
		||||
      this.visible_file = false
 | 
			
		||||
      this.list_file=[]
 | 
			
		||||
    },
 | 
			
		||||
    beforeUpload(file,fileList) {
 | 
			
		||||
      this.fileList = fileList
 | 
			
		||||
    },
 | 
			
		||||
    handleUpload({ file }) {
 | 
			
		||||
      this.uploading = true
 | 
			
		||||
      this.fileNum += 1
 | 
			
		||||
      if (this.fileNum == this.fileList.length) {
 | 
			
		||||
        this.zipFile(this.fileList)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    async zipFile(fileList, onProgress) {
 | 
			
		||||
      const zip = new JSZip()
 | 
			
		||||
      const promises=[]
 | 
			
		||||
      fileList.forEach(file => {
 | 
			
		||||
        promises.push(this.readAsArrayBuffer(file))
 | 
			
		||||
      })
 | 
			
		||||
      Promise.all(promises).then(result => {
 | 
			
		||||
        result.forEach(res => {
 | 
			
		||||
          zip.file(res.fileName, res.data)
 | 
			
		||||
        })
 | 
			
		||||
        zip.generateAsync({ type: 'blob' }).then(content => {
 | 
			
		||||
          let file = new File([content], 'test.zip', { type: content.type })
 | 
			
		||||
          const formData = new FormData()
 | 
			
		||||
          formData.append("file",file)
 | 
			
		||||
          postAction("/spectrumFile/upload", formData).then(res => {
 | 
			
		||||
            this.uploading = false
 | 
			
		||||
            this.fileNum = 0
 | 
			
		||||
            if (res.success) {
 | 
			
		||||
              this.$message.success(res.message)
 | 
			
		||||
            } else {
 | 
			
		||||
              this.$message.warning(res.message)
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    async readAsArrayBuffer(file){
 | 
			
		||||
      return new Promise((resolve) => {
 | 
			
		||||
        let reader = new FileReader()
 | 
			
		||||
        reader.readAsArrayBuffer(file)
 | 
			
		||||
        reader.onload = (e) => {
 | 
			
		||||
          resolve({
 | 
			
		||||
            fileName: file.name,
 | 
			
		||||
            data: e.target.result
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleReset() {
 | 
			
		||||
      this.list = this.getInitialList()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleLoad() {
 | 
			
		||||
      console.log('%c [ handleLoad ]-123', 'font-size:13px; background:pink; color:#bf2c9f;', this.list)
 | 
			
		||||
      this.visible = false
 | 
			
		||||
      this.$emit('loadFormFile', this.list)
 | 
			
		||||
      // console.log('%c [ handleLoad ]-123', 'font-size:13px; background:pink; color:#bf2c9f;', this.list)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleCancel() {
 | 
			
		||||
| 
						 | 
				
			
			@ -149,6 +411,12 @@ export default {
 | 
			
		|||
 | 
			
		||||
  background-color: #00e170;
 | 
			
		||||
}
 | 
			
		||||
.status_true{
 | 
			
		||||
  background-color: #00e170;
 | 
			
		||||
}
 | 
			
		||||
.status_false{
 | 
			
		||||
  background-color: red;
 | 
			
		||||
}
 | 
			
		||||
::v-deep {
 | 
			
		||||
  @tableBorderColor: #000;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -168,5 +436,55 @@ export default {
 | 
			
		|||
    padding-top: 0 !important;
 | 
			
		||||
    padding-bottom: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
  .ant-pagination{
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
  }
 | 
			
		||||
  .ant-select {
 | 
			
		||||
    .ant-select-arrow-icon {
 | 
			
		||||
      transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
 | 
			
		||||
    }
 | 
			
		||||
    &-open {
 | 
			
		||||
      .ant-select-arrow-icon {
 | 
			
		||||
        transform: rotate(180deg);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .ant-modal-title{
 | 
			
		||||
    letter-spacing: 1px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.item-label{
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  font-size: 16px;
 | 
			
		||||
  font-family: ArialMT;
 | 
			
		||||
  color: #ade6ee;
 | 
			
		||||
  line-height: 32px;
 | 
			
		||||
  height: 32px;
 | 
			
		||||
  margin-right: 10px;
 | 
			
		||||
}
 | 
			
		||||
.operators {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  .ant-btn {
 | 
			
		||||
    width: 92px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.file-name {
 | 
			
		||||
  height: 42px;
 | 
			
		||||
  line-height: 42px;
 | 
			
		||||
}
 | 
			
		||||
.file-ellipsis{
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  text-overflow: ellipsis;
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
/deep/.ant-table-tbody .ant-table-row td{
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.ant-input{
 | 
			
		||||
  width: 380px;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,8 +46,9 @@
 | 
			
		|||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import { getAction, getFileAction } from '@/api/manage'
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '../../SampleDataMixin'
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +127,8 @@ export default {
 | 
			
		|||
      isLoading: false,
 | 
			
		||||
 | 
			
		||||
      list: [],
 | 
			
		||||
      compareList: []
 | 
			
		||||
      compareList: [],
 | 
			
		||||
      fileName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +166,42 @@ export default {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    // 导出到Excel
 | 
			
		||||
    handleExportToExcel() {}
 | 
			
		||||
    handleExportToExcel() {
 | 
			
		||||
      this.fileName = ""
 | 
			
		||||
      const { sampleId, inputFileName: fileName } = this.sampleData
 | 
			
		||||
      if (this.list.length > 0) {
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              let params = {
 | 
			
		||||
                sampleId,
 | 
			
		||||
                fileName
 | 
			
		||||
              }
 | 
			
		||||
              getFileAction('/gamma/exportRadionuclideActivity', params).then(res => {
 | 
			
		||||
                if (res.code && res.code == 500) {
 | 
			
		||||
                  this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
                } else {
 | 
			
		||||
                  const blob = new Blob([res], { type: "application/vnd.ms-excel" })
 | 
			
		||||
                  saveAs(blob, `${_this.fileName}`)
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No downloadable data")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,15 +3,15 @@
 | 
			
		|||
    <a-spin :spinning="isLoading">
 | 
			
		||||
      <a-table :columns="columns" :dataSource="list" :pagination="false" />
 | 
			
		||||
    </a-spin>
 | 
			
		||||
    <a-button slot="custom-footer" type="primary">Export to Excel</a-button>
 | 
			
		||||
    <a-button slot="custom-footer" type="primary" @click="handleExportToExcel">Export to Excel</a-button>
 | 
			
		||||
  </custom-modal>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import { getAction, getFileAction } from '@/api/manage'
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '../../SampleDataMixin'
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Name',
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,8 @@ export default {
 | 
			
		|||
    this.columns = columns
 | 
			
		||||
    return {
 | 
			
		||||
      isLoading: false,
 | 
			
		||||
      list: []
 | 
			
		||||
      list: [],
 | 
			
		||||
      fileName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -90,6 +91,43 @@ export default {
 | 
			
		|||
 | 
			
		||||
    beforeModalOpen() {
 | 
			
		||||
      this.getData()
 | 
			
		||||
    },
 | 
			
		||||
    // 导出到Excel
 | 
			
		||||
    handleExportToExcel() {
 | 
			
		||||
      this.fileName = ""
 | 
			
		||||
      const { sampleId, inputFileName: fileName } = this.sampleData
 | 
			
		||||
      if (this.list.length > 0) {
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              let params = {
 | 
			
		||||
                sampleId,
 | 
			
		||||
                fileName
 | 
			
		||||
              }
 | 
			
		||||
              getFileAction('/gamma/exportQCResult', params).then(res => {
 | 
			
		||||
                if (res.code && res.code == 500) {
 | 
			
		||||
                  this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
                } else {
 | 
			
		||||
                  const blob = new Blob([res], { type: "application/vnd.ms-excel" })
 | 
			
		||||
                  saveAs(blob, `${_this.fileName}`)
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No downloadable data")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div class="editable-cell">
 | 
			
		||||
    <div v-if="editable" class="editable-cell-input-wrapper">
 | 
			
		||||
      <a-input ref="myInput" :value="value" @change="handleChange" @blur="handleBlur" />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div v-else class="editable-cell-text-wrapper" @click="handleCellClick">
 | 
			
		||||
      {{ value || ' ' }}
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  export default {
 | 
			
		||||
    props: {
 | 
			
		||||
    text: String,
 | 
			
		||||
    },
 | 
			
		||||
    data() {
 | 
			
		||||
      return {
 | 
			
		||||
        value: this.text,
 | 
			
		||||
        editable: false,
 | 
			
		||||
      };
 | 
			
		||||
  },
 | 
			
		||||
    methods: {
 | 
			
		||||
      handleCellClick() {
 | 
			
		||||
        console.log("点击单元格");
 | 
			
		||||
        this.editable = true
 | 
			
		||||
        this.$nextTick(() => {
 | 
			
		||||
          this.$refs.myInput.focus()
 | 
			
		||||
          this.$refs.myInput.select()
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
      handleChange(e) {
 | 
			
		||||
        this.value = e.target.value
 | 
			
		||||
      },
 | 
			
		||||
      handleBlur() {
 | 
			
		||||
        this.editable = false
 | 
			
		||||
        this.$emit('change', this.value);
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="less" scoped>
 | 
			
		||||
/deep/.ant-input{
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.editable-cell-text-wrapper {
 | 
			
		||||
  min-height: 32px;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -6,52 +6,61 @@
 | 
			
		|||
 | 
			
		||||
<script>
 | 
			
		||||
import TableWithOperators from './TableWithOperators.vue'
 | 
			
		||||
import { cloneDeep } from 'lodash'
 | 
			
		||||
const columns = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Index',
 | 
			
		||||
    dataIndex: 'key',
 | 
			
		||||
    align: 'center',
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    customRender: (text,record,index) => `${index+1}`,//此处为重点
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Energy(keV)',
 | 
			
		||||
    dataIndex: 'energy',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'energy' }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Energy_err(%)',
 | 
			
		||||
    dataIndex: 'energyErr',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'energyErr' },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Net Area',
 | 
			
		||||
    dataIndex: 'netArea',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'netArea' },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Area_err(%)',
 | 
			
		||||
    dataIndex: 'areaErr',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'areaErr' },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'NetCountRate',
 | 
			
		||||
    dataIndex: 'netCountRate',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'netCountRate' },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'NCRate_err(%)',
 | 
			
		||||
    dataIndex: 'ncRateErr',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'ncRateErr' },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'LC',
 | 
			
		||||
    dataIndex: 'lc',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'lc' },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Significance',
 | 
			
		||||
    dataIndex: 'significance',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
    align: 'left',
 | 
			
		||||
    scopedSlots: { customRender: 'significance' },
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,18 +69,22 @@ export default {
 | 
			
		|||
    TableWithOperators
 | 
			
		||||
  },
 | 
			
		||||
  props: {
 | 
			
		||||
    allData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: ()=>{}
 | 
			
		||||
    tableData: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: ()=>[]
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    allData: {
 | 
			
		||||
      handler(val) {
 | 
			
		||||
    tableData: {
 | 
			
		||||
      handler(val, old) {
 | 
			
		||||
        console.log(val);
 | 
			
		||||
        this.list = cloneDeep(val)
 | 
			
		||||
        this.list.forEach((item, index) => {
 | 
			
		||||
          item.id = this.guid()
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
      deep: true,
 | 
			
		||||
      immediate:true
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      deep:true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
| 
						 | 
				
			
			@ -80,8 +93,14 @@ export default {
 | 
			
		|||
      list: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted () {
 | 
			
		||||
    this.list = this.allData.peakFit
 | 
			
		||||
  methods: {
 | 
			
		||||
    guid() {
 | 
			
		||||
      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
 | 
			
		||||
        var r = Math.random() * 16 | 0,
 | 
			
		||||
            v = c == 'x' ? r : (r & 0x3 | 0x8);
 | 
			
		||||
        return v.toString(16);
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,57 +1,34 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <div class="operators">
 | 
			
		||||
      <a-button type="primary">Insert Before</a-button>
 | 
			
		||||
      <a-button type="primary">Insert After</a-button>
 | 
			
		||||
      <a-button type="primary">Delete</a-button>
 | 
			
		||||
      <a-button type="primary" @click="insertBefore">Insert Before</a-button>
 | 
			
		||||
      <a-button type="primary" @click="insertAfter">Insert After</a-button>
 | 
			
		||||
      <a-button type="primary" @click="handleDelete">Delete</a-button>
 | 
			
		||||
    </div>
 | 
			
		||||
    <a-table
 | 
			
		||||
      size="small"
 | 
			
		||||
      :class="list.length ? 'has-data' : ''"
 | 
			
		||||
      :rowKey="(record, index) => { return record.id }" 
 | 
			
		||||
      :class="dataSource.length ? 'has-data' : ''"
 | 
			
		||||
      :columns="columns"
 | 
			
		||||
      :dataSource="list"
 | 
			
		||||
      :dataSource="dataSource"
 | 
			
		||||
      :pagination="false"
 | 
			
		||||
      :scroll="{ y: 470 }"
 | 
			
		||||
      :customRow="customRow"
 | 
			
		||||
    >
 | 
			
		||||
  </a-table>
 | 
			
		||||
      <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record">
 | 
			
		||||
        <editable-cell :text="text" :key="col.id" @change="onCellChange(record.id, col.dataIndex, $event)" />
 | 
			
		||||
      </template>
 | 
			
		||||
    </a-table>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
const columns = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Nuclide1',
 | 
			
		||||
    dataIndex: 'nuclide1',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Nuclide2',
 | 
			
		||||
    dataIndex: 'nuclide2',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Ratio',
 | 
			
		||||
    dataIndex: 'ratio',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Ratio_err(%)',
 | 
			
		||||
    dataIndex: 'ratioErr',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Reference Time',
 | 
			
		||||
    dataIndex: 'referenceTime',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Zero Time',
 | 
			
		||||
    dataIndex: 'zeroTime',
 | 
			
		||||
    align: 'center'
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
import EditableCell from './EditableCell.vue';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  components: {
 | 
			
		||||
    EditableCell,
 | 
			
		||||
  },
 | 
			
		||||
  props: {
 | 
			
		||||
    columns: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +38,141 @@ export default {
 | 
			
		|||
      type: Array,
 | 
			
		||||
      required: true
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      selectedKey: "",
 | 
			
		||||
      dataSource: this.list,
 | 
			
		||||
      isEmpty:false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  // mounted() {
 | 
			
		||||
  //   this.dataSource.forEach((item, index) => {
 | 
			
		||||
  //     item.id = this.guid()
 | 
			
		||||
  //   })
 | 
			
		||||
  // },
 | 
			
		||||
  methods: {
 | 
			
		||||
    guid() {
 | 
			
		||||
      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
 | 
			
		||||
        var r = Math.random() * 16 | 0,
 | 
			
		||||
            v = c == 'x' ? r : (r & 0x3 | 0x8);
 | 
			
		||||
        return v.toString(16);
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 实现单击选中/反选功能
 | 
			
		||||
    customRow(record, index) {
 | 
			
		||||
      const that = this;
 | 
			
		||||
      return {
 | 
			
		||||
        class: that.selectedKey==record.id ? 'ant-table-row-selected' : '',
 | 
			
		||||
        on: {
 | 
			
		||||
          click: () => {
 | 
			
		||||
            console.log("选中行",record.id);
 | 
			
		||||
            that.selectedKey = record.id
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    initList() {
 | 
			
		||||
      let arr = []
 | 
			
		||||
      let keys = 0
 | 
			
		||||
      this.dataSource.forEach((item,index) => {
 | 
			
		||||
        let num = 0
 | 
			
		||||
        keys=Object.keys(item).length
 | 
			
		||||
        Object.keys(item).forEach(key => {
 | 
			
		||||
          if (item[key]!=="") {
 | 
			
		||||
            num++
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
        arr[index] = num
 | 
			
		||||
      })
 | 
			
		||||
      let idx = arr.findIndex(cont => {
 | 
			
		||||
        return cont!==keys
 | 
			
		||||
      })
 | 
			
		||||
      if (idx>-1) {
 | 
			
		||||
        this.isEmpty = true
 | 
			
		||||
      } else {
 | 
			
		||||
        this.isEmpty = false
 | 
			
		||||
      }
 | 
			
		||||
      sessionStorage.setItem("isCellEmpty",this.isEmpty)
 | 
			
		||||
    },
 | 
			
		||||
    insertBefore() {
 | 
			
		||||
      this.initList()
 | 
			
		||||
      if (this.isEmpty) {
 | 
			
		||||
        this.$message.warning("Please finishi ti edit new inserted row first.")
 | 
			
		||||
      } else {
 | 
			
		||||
        let obj = {
 | 
			
		||||
          id: this.guid(),
 | 
			
		||||
          energy: "",
 | 
			
		||||
          energyErr: "",
 | 
			
		||||
          netArea: "",
 | 
			
		||||
          areaErr: "",
 | 
			
		||||
          netCountRate: "",
 | 
			
		||||
          ncRateErr: "",
 | 
			
		||||
          lc: "",
 | 
			
		||||
          significance: ""
 | 
			
		||||
        }
 | 
			
		||||
        if (this.selectedKey) {
 | 
			
		||||
          let idx = this.dataSource.findIndex(item => {
 | 
			
		||||
            return item.id === this.selectedKey
 | 
			
		||||
          })
 | 
			
		||||
          this.dataSource.splice(idx, 0, obj)
 | 
			
		||||
        } else {
 | 
			
		||||
          this.dataSource.unshift(obj)
 | 
			
		||||
        }
 | 
			
		||||
        sessionStorage.setItem("isCellEmpty",true)
 | 
			
		||||
        this.selectedKey = obj.id
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    insertAfter() {
 | 
			
		||||
      if (this.isEmpty) {
 | 
			
		||||
        this.$message.warning("Please finishi ti edit new inserted row first.")
 | 
			
		||||
      } else { 
 | 
			
		||||
        let obj = {
 | 
			
		||||
          id:this.guid(),
 | 
			
		||||
          energy: "",
 | 
			
		||||
          energyErr: "",
 | 
			
		||||
          netArea: "",
 | 
			
		||||
          areaErr: "",
 | 
			
		||||
          netCountRate: "",
 | 
			
		||||
          ncRateErr: "",
 | 
			
		||||
          lc: "",
 | 
			
		||||
          significance: ""
 | 
			
		||||
        }
 | 
			
		||||
        if (this.selectedKey) {
 | 
			
		||||
          let idx = this.dataSource.findIndex(item => {
 | 
			
		||||
            return item.id === this.selectedKey
 | 
			
		||||
          })
 | 
			
		||||
          this.dataSource.splice(idx+1, 0, obj)
 | 
			
		||||
        } else {
 | 
			
		||||
          this.dataSource.push(obj)
 | 
			
		||||
        }
 | 
			
		||||
        sessionStorage.setItem("isCellEmpty",true)
 | 
			
		||||
        this.selectedKey = obj.id
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    handleDelete() {
 | 
			
		||||
      console.log("this.selectedKey", this.selectedKey);
 | 
			
		||||
      if (this.selectedKey) {
 | 
			
		||||
        let idx = this.dataSource.findIndex(item => {
 | 
			
		||||
          return item.id === this.selectedKey
 | 
			
		||||
        })
 | 
			
		||||
        this.dataSource.splice(idx, 1)
 | 
			
		||||
        this.initList()
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("Please select the data you want to delete.")
 | 
			
		||||
      }
 | 
			
		||||
      this.selectedKey = ""
 | 
			
		||||
    },
 | 
			
		||||
    onCellChange(id, dataIndex, value) {
 | 
			
		||||
      const dataSource = [...this.dataSource];
 | 
			
		||||
      const target = dataSource.find(item => item.id === id);
 | 
			
		||||
      if (target) {
 | 
			
		||||
        target[dataIndex] = value;
 | 
			
		||||
        this.dataSource = dataSource;
 | 
			
		||||
      }
 | 
			
		||||
      this.initList()
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <custom-modal v-model="visible" :width="1280" title="Mini Radionuclide Laboratory Reports" :destroyOnClose="true">
 | 
			
		||||
  <custom-modal v-model="visible" :width="1280" title="Mini Radionuclide Laboratory Reports" :destroyOnClose="true" @cancel="handleCancel">
 | 
			
		||||
    <a-spin :spinning="isLoading">
 | 
			
		||||
      <div class="rlr">
 | 
			
		||||
        <div class="rlr-tabs">
 | 
			
		||||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
            :class="activeKey == index ? 'active' : ''"
 | 
			
		||||
            v-for="(tab, index) in tabs"
 | 
			
		||||
            :key="index"
 | 
			
		||||
            @click="activeKey = index"
 | 
			
		||||
            @click="handleChangeView(index)"
 | 
			
		||||
          >
 | 
			
		||||
            {{ tab }}
 | 
			
		||||
          </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
              <peaks-method :allData="allInfo" />
 | 
			
		||||
            </template>
 | 
			
		||||
            <template v-if="activeKey == 6">
 | 
			
		||||
              <peak-fit :allData="allInfo" />
 | 
			
		||||
              <peak-fit :tableData="allInfo.peakFit" />
 | 
			
		||||
            </template>
 | 
			
		||||
            <template v-if="activeKey == 7">
 | 
			
		||||
              <g-analysis-methods :allData="allInfo" />
 | 
			
		||||
| 
						 | 
				
			
			@ -68,6 +68,12 @@
 | 
			
		|||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </a-spin>
 | 
			
		||||
    <div slot="custom-footer" style="text-align: center;">
 | 
			
		||||
      <a-space :size="20">
 | 
			
		||||
        <a-button type="primary" @click="handleSave">Save</a-button>
 | 
			
		||||
        <a-button @click="handleCancel">Cancel</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </div>
 | 
			
		||||
  </custom-modal>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -90,6 +96,7 @@ import Mda from './components/MDA.vue'
 | 
			
		|||
import Conclusions from './components/Conclusions.vue'
 | 
			
		||||
import Comment from './components/Comment.vue'
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import Custom from '@/views/account/settings/Custom.vue'
 | 
			
		||||
import SampleDataMixin from '@/views/spectrumAnalysis/SampleDataMixin'
 | 
			
		||||
 | 
			
		||||
const tabs = [
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +136,8 @@ export default {
 | 
			
		|||
    GCoincidenceCorrection,
 | 
			
		||||
    Mda,
 | 
			
		||||
    Conclusions,
 | 
			
		||||
    Comment
 | 
			
		||||
    Comment,
 | 
			
		||||
    Custom
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    this.tabs = tabs
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +147,30 @@ export default {
 | 
			
		|||
      allInfo: {}
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted () {
 | 
			
		||||
    sessionStorage.removeItem("isCellEmpty")
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    handleSave() {
 | 
			
		||||
      let val = sessionStorage.getItem("isCellEmpty")
 | 
			
		||||
      if (val=="false") {
 | 
			
		||||
        this.visible = false
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("Please finishi ti edit new inserted row first.")
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    handleCancel() {
 | 
			
		||||
      this.visible = false
 | 
			
		||||
      sessionStorage.removeItem("isCellEmpty")
 | 
			
		||||
    },
 | 
			
		||||
    handleChangeView(index) {
 | 
			
		||||
      let val = sessionStorage.getItem("isCellEmpty")
 | 
			
		||||
      if (val=="false"||!val) {
 | 
			
		||||
        this.activeKey = index
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("Please finishi ti edit new inserted row first.")
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    beforeModalOpen() {
 | 
			
		||||
      this.activeKey = 0
 | 
			
		||||
      this.getGammaViewRLR();
 | 
			
		||||
| 
						 | 
				
			
			@ -202,4 +233,7 @@ export default {
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
/deep/.ant-modal-title{
 | 
			
		||||
  letter-spacing: 1px;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@
 | 
			
		|||
    </a-spin>
 | 
			
		||||
    <div slot="custom-footer" style="text-align: center;">
 | 
			
		||||
      <a-space :size="20">
 | 
			
		||||
        <a-button type="primary">Export to Excel</a-button>
 | 
			
		||||
        <a-button type="primary" @click="handleExportToExcel">Export to Excel</a-button>
 | 
			
		||||
        <a-button @click="visible = false">Close</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -23,8 +23,9 @@
 | 
			
		|||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import { getAction, getFileAction } from '@/api/manage'
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '../../SampleDataMixin'
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +93,8 @@ export default {
 | 
			
		|||
    this.columns = columns
 | 
			
		||||
    return {
 | 
			
		||||
      isLoading: false,
 | 
			
		||||
      data: {}
 | 
			
		||||
      data: {},
 | 
			
		||||
      fileName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -120,6 +122,43 @@ export default {
 | 
			
		|||
    beforeModalOpen() {
 | 
			
		||||
      this.data = {}
 | 
			
		||||
      this.getInfo()
 | 
			
		||||
    },
 | 
			
		||||
    // 导出到Excel
 | 
			
		||||
    handleExportToExcel() {
 | 
			
		||||
      this.fileName = ""
 | 
			
		||||
      const { sampleId, inputFileName: fileName } = this.sampleData
 | 
			
		||||
      if (Object.keys(this.data).length > 0) {
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              let params = {
 | 
			
		||||
                sampleId,
 | 
			
		||||
                fileName
 | 
			
		||||
              }
 | 
			
		||||
              getFileAction('/gamma/exportSampleInformation', params).then(res => {
 | 
			
		||||
                if (res.code && res.code == 500) {
 | 
			
		||||
                  this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
                } else {
 | 
			
		||||
                  const blob = new Blob([res], { type: "application/vnd.ms-excel" })
 | 
			
		||||
                  saveAs(blob, `${_this.fileName}`)
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No downloadable data")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,8 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <label class="file-select">
 | 
			
		||||
    <input type="file" @change="handleFileChange" accept=".phd, .PHD" />
 | 
			
		||||
    <!-- <input type="file" @change="handleFileChange" @click="handleFileSelect" accept=".phd, .PHD" /> -->
 | 
			
		||||
    <input @click="handleFileSelect" />
 | 
			
		||||
    <!-- <div @click="handleFileSelect"></div> -->
 | 
			
		||||
    <div class="file-name">
 | 
			
		||||
      <slot />
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +18,10 @@ export default {
 | 
			
		|||
        this.$emit('change', file)
 | 
			
		||||
      }
 | 
			
		||||
      e.target.value = ''
 | 
			
		||||
    },
 | 
			
		||||
    handleFileSelect() {
 | 
			
		||||
      console.log("dsfasdf");
 | 
			
		||||
      this.$emit("select")
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,8 @@
 | 
			
		|||
 | 
			
		||||
<script>
 | 
			
		||||
import ModalMixin from '@/mixins/ModalMixin'
 | 
			
		||||
import { getAction } from '@/api/manage'
 | 
			
		||||
import { getAction, getFileAction } from '@/api/manage'
 | 
			
		||||
import { saveAs } from 'file-saver';
 | 
			
		||||
import SampleDataMixin from '../SampleDataMixin'
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +89,8 @@ export default {
 | 
			
		|||
      list: [],
 | 
			
		||||
      compareList: [],
 | 
			
		||||
      compareVisible: false, // 是否显示比较
 | 
			
		||||
      isLoading: false
 | 
			
		||||
      isLoading: false,
 | 
			
		||||
      fileName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +125,42 @@ export default {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    // 导出到Excel
 | 
			
		||||
    handleExportToExcel() {}
 | 
			
		||||
    handleExportToExcel() {
 | 
			
		||||
      this.fileName = ""
 | 
			
		||||
      const { sampleId, inputFileName: fileName } = this.sampleData
 | 
			
		||||
      if (this.list.length > 0) {
 | 
			
		||||
        let _this = this
 | 
			
		||||
        this.$confirm({
 | 
			
		||||
          title: 'Please enter file name',
 | 
			
		||||
          content:  h => <a-input v-model={_this.fileName} />,
 | 
			
		||||
          okText: 'Cancle',
 | 
			
		||||
          cancelText: 'Save',
 | 
			
		||||
          okButtonProps: {style: {backgroundColor: "#b98326", color: "#fff", borderColor: "transparent"}},
 | 
			
		||||
          cancelButtonProps: {style: {color: "#fff", backgroundColor: "#31aab0", borderColor: "transparent"}},
 | 
			
		||||
          onOk() {
 | 
			
		||||
            console.log('Cancel');
 | 
			
		||||
          },
 | 
			
		||||
          onCancel() {
 | 
			
		||||
            if (_this.fileName) {
 | 
			
		||||
              let params = {
 | 
			
		||||
                sampleId,
 | 
			
		||||
                fileName
 | 
			
		||||
              }
 | 
			
		||||
              getFileAction('/gamma/exportPeakInformation', params).then(res => {
 | 
			
		||||
                if (res.code && res.code == 500) {
 | 
			
		||||
                  this.$message.warning("This operation fails. Contact your system administrator")
 | 
			
		||||
                } else {
 | 
			
		||||
                  const blob = new Blob([res], { type: "application/vnd.ms-excel" })
 | 
			
		||||
                  saveAs(blob, `${_this.fileName}`)
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.warning("No downloadable data")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@
 | 
			
		|||
    <!-- 从数据库加载结束 -->
 | 
			
		||||
 | 
			
		||||
    <!-- 从文件加载开始 -->
 | 
			
		||||
    <load-from-file-modal v-model="loadFromFileModalVisible" />
 | 
			
		||||
    <load-from-file-modal v-model="loadFromFileModalVisible" @loadFormFile="handleLoadSampleFromFile" />
 | 
			
		||||
    <!-- 从文件加载结束 -->
 | 
			
		||||
 | 
			
		||||
    <!-- Strip 弹窗开始 -->
 | 
			
		||||
| 
						 | 
				
			
			@ -383,6 +383,19 @@ export default {
 | 
			
		|||
      const willAddList = sampleList.filter(item => !ids.includes(item.sampleId))
 | 
			
		||||
      this.sampleList = this.sampleList.concat(willAddList)
 | 
			
		||||
    },
 | 
			
		||||
    handleLoadSampleFromFile(sampleList) {
 | 
			
		||||
      let arr = sampleList.filter(item => {
 | 
			
		||||
        return Object.keys(item).length>4
 | 
			
		||||
      })
 | 
			
		||||
      arr.forEach(item => {
 | 
			
		||||
        item.sampleId = ""
 | 
			
		||||
        item.inputFileName = item.sampleFileName
 | 
			
		||||
        item.sampleType = item.sampleSystemType
 | 
			
		||||
      })
 | 
			
		||||
      const names = this.sampleList.map(item => item.inputFileName) // 当前Sample列表中的所有id
 | 
			
		||||
      const willAddList = arr.filter(item => !names.includes(item.inputFileName))
 | 
			
		||||
      this.sampleList = this.sampleList.concat(willAddList)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // 加载选中的样本
 | 
			
		||||
    async loadSelectedSample(sample) {
 | 
			
		||||
| 
						 | 
				
			
			@ -899,7 +912,7 @@ export default {
 | 
			
		|||
                  type: 'a-menu-item',
 | 
			
		||||
                  title: 'Automatic Analysis Log',
 | 
			
		||||
                  handler: () => {
 | 
			
		||||
                    this.autoAnalysisMogModalType = 1
 | 
			
		||||
                    this.autoAnalysisMogModalType = this.isGamma?1:this.isBetaGamma?2:1
 | 
			
		||||
                    this.autoAnalysisMogModalVisible = true
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,6 +69,19 @@ module.exports = {
 | 
			
		|||
      .use()
 | 
			
		||||
      .loader('babel-loader')
 | 
			
		||||
      .end()
 | 
			
		||||
    config.module
 | 
			
		||||
      .rule('ol')
 | 
			
		||||
      .test(/\.js$/)
 | 
			
		||||
      .include
 | 
			
		||||
        .add(resolve('node_modules/ol'))
 | 
			
		||||
        .end()
 | 
			
		||||
      .use()
 | 
			
		||||
      .loader('babel-loader')
 | 
			
		||||
      .options({
 | 
			
		||||
        presets: ['@babel/preset-env'],
 | 
			
		||||
        plugins: ['@babel/plugin-proposal-nullish-coalescing-operator']
 | 
			
		||||
      })
 | 
			
		||||
      .end()
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  css: {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										356
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										356
									
								
								yarn.lock
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -312,6 +312,11 @@
 | 
			
		|||
  resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
 | 
			
		||||
  integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
 | 
			
		||||
 | 
			
		||||
"@babel/helper-plugin-utils@^7.18.6":
 | 
			
		||||
  version "7.22.5"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
 | 
			
		||||
  integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
 | 
			
		||||
 | 
			
		||||
"@babel/helper-regex@^7.10.4":
 | 
			
		||||
  version "7.10.4"
 | 
			
		||||
  resolved "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz#59b373daaf3458e5747dece71bbaf45f9676af6d"
 | 
			
		||||
| 
						 | 
				
			
			@ -427,6 +432,14 @@
 | 
			
		|||
    "@babel/helper-plugin-utils" "^7.10.4"
 | 
			
		||||
    "@babel/plugin-syntax-json-strings" "^7.8.0"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6":
 | 
			
		||||
  version "7.18.6"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1"
 | 
			
		||||
  integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.18.6"
 | 
			
		||||
    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-proposal-object-rest-spread@^7.3.4":
 | 
			
		||||
  version "7.10.4"
 | 
			
		||||
  resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0"
 | 
			
		||||
| 
						 | 
				
			
			@ -487,6 +500,13 @@
 | 
			
		|||
  dependencies:
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.10.4"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
 | 
			
		||||
  version "7.8.3"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
 | 
			
		||||
  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.8.0"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0":
 | 
			
		||||
  version "7.8.3"
 | 
			
		||||
  resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
 | 
			
		||||
| 
						 | 
				
			
			@ -821,6 +841,13 @@
 | 
			
		|||
  dependencies:
 | 
			
		||||
    regenerator-runtime "^0.13.4"
 | 
			
		||||
 | 
			
		||||
"@babel/runtime@^7.13.10":
 | 
			
		||||
  version "7.22.11"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4"
 | 
			
		||||
  integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    regenerator-runtime "^0.14.0"
 | 
			
		||||
 | 
			
		||||
"@babel/template@^7.10.4":
 | 
			
		||||
  version "7.10.4"
 | 
			
		||||
  resolved "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
 | 
			
		||||
| 
						 | 
				
			
			@ -895,10 +922,39 @@
 | 
			
		|||
    cssnano-preset-default "^4.0.0"
 | 
			
		||||
    postcss "^7.0.0"
 | 
			
		||||
 | 
			
		||||
"@jeecg/antd-online-mini@3.1.0-beta":
 | 
			
		||||
  version "3.1.0-beta"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@jeecg/antd-online-mini/-/antd-online-mini-3.1.0-beta.tgz#cf3e254259503405a5e83ffa6775ac9fa02fe74c"
 | 
			
		||||
  integrity sha512-pW0zWzExnxjlC3e7DzGYjQibLU22K/7N0kp1ddJrGgX33Ia/wq7ELOcwn6bLzITD89RcvX1JUW/om+IJ1PxOSw==
 | 
			
		||||
"@jeecg/antd-online-mini@3.4.3-beta2":
 | 
			
		||||
  version "3.4.3-beta2"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@jeecg/antd-online-mini/-/antd-online-mini-3.4.3-beta2.tgz#5903547f48a7d51f2df9773b85d25d28807e57ae"
 | 
			
		||||
  integrity sha512-uZLjtQG/vAcBsCEysE1HceUyzwiHwU+JlNzvHxNnenNDHeaawZa9CfILUImNFJ5JQVqE5J11QpQNb6i5Boo3Gw==
 | 
			
		||||
 | 
			
		||||
"@mapbox/jsonlint-lines-primitives@~2.0.2":
 | 
			
		||||
  version "2.0.2"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234"
 | 
			
		||||
  integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==
 | 
			
		||||
 | 
			
		||||
"@mapbox/mapbox-gl-style-spec@^13.23.1":
 | 
			
		||||
  version "13.28.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.28.0.tgz#2ec226320a0f77856046e000df9b419303a56458"
 | 
			
		||||
  integrity sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@mapbox/jsonlint-lines-primitives" "~2.0.2"
 | 
			
		||||
    "@mapbox/point-geometry" "^0.1.0"
 | 
			
		||||
    "@mapbox/unitbezier" "^0.0.0"
 | 
			
		||||
    csscolorparser "~1.0.2"
 | 
			
		||||
    json-stringify-pretty-compact "^2.0.0"
 | 
			
		||||
    minimist "^1.2.6"
 | 
			
		||||
    rw "^1.3.3"
 | 
			
		||||
    sort-object "^0.3.2"
 | 
			
		||||
 | 
			
		||||
"@mapbox/point-geometry@^0.1.0":
 | 
			
		||||
  version "0.1.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2"
 | 
			
		||||
  integrity sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==
 | 
			
		||||
 | 
			
		||||
"@mapbox/unitbezier@^0.0.0":
 | 
			
		||||
  version "0.0.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e"
 | 
			
		||||
  integrity sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==
 | 
			
		||||
 | 
			
		||||
"@mrmlnc/readdir-enhanced@^2.2.1":
 | 
			
		||||
  version "2.2.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -913,6 +969,11 @@
 | 
			
		|||
  resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
 | 
			
		||||
  integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
 | 
			
		||||
 | 
			
		||||
"@petamoriken/float16@^3.4.7":
 | 
			
		||||
  version "3.8.3"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@petamoriken/float16/-/float16-3.8.3.tgz#adf9dcb5d46b5976b347310f22ce247b8bb48ef9"
 | 
			
		||||
  integrity sha512-an2OZ7/6er9Jja8EDUvU/tmtGIutdlb6LwXOwgjzoCjDRAsUd8sRZMBjoPEy78Xa9iOp+Kglk2CHgVwZuZbWbw==
 | 
			
		||||
 | 
			
		||||
"@simonwep/pickr@~1.7.0":
 | 
			
		||||
  version "1.7.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.7.1.tgz#7bdcccca2041967434f9d7e18720e85598601008"
 | 
			
		||||
| 
						 | 
				
			
			@ -962,6 +1023,11 @@
 | 
			
		|||
  resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
 | 
			
		||||
  integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
 | 
			
		||||
 | 
			
		||||
"@types/crypto-js@^4.1.1":
 | 
			
		||||
  version "4.1.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d"
 | 
			
		||||
  integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==
 | 
			
		||||
 | 
			
		||||
"@types/d3-format@*":
 | 
			
		||||
  version "1.3.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.3.1.tgz#35bf88264bd6bcda39251165bb827f67879c4384"
 | 
			
		||||
| 
						 | 
				
			
			@ -3160,6 +3226,11 @@ circular-json@^0.3.1:
 | 
			
		|||
  resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
 | 
			
		||||
  integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
 | 
			
		||||
 | 
			
		||||
clamp@^1.0.1:
 | 
			
		||||
  version "1.0.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634"
 | 
			
		||||
  integrity sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==
 | 
			
		||||
 | 
			
		||||
clap@^1.0.9:
 | 
			
		||||
  version "1.2.3"
 | 
			
		||||
  resolved "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
 | 
			
		||||
| 
						 | 
				
			
			@ -3182,6 +3253,11 @@ classnames@^2.2.5:
 | 
			
		|||
  resolved "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
 | 
			
		||||
  integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
 | 
			
		||||
 | 
			
		||||
claygl@^1.2.1:
 | 
			
		||||
  version "1.3.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz#7a6e2903210519ac358848f5d78070ed211685f3"
 | 
			
		||||
  integrity sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==
 | 
			
		||||
 | 
			
		||||
clean-css@4.2.x, clean-css@^4.2.3:
 | 
			
		||||
  version "4.2.3"
 | 
			
		||||
  resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
 | 
			
		||||
| 
						 | 
				
			
			@ -3741,6 +3817,11 @@ crypto-browserify@^3.11.0:
 | 
			
		|||
    randombytes "^2.0.0"
 | 
			
		||||
    randomfill "^1.0.3"
 | 
			
		||||
 | 
			
		||||
crypto-js@^4.1.1:
 | 
			
		||||
  version "4.1.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
 | 
			
		||||
  integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
 | 
			
		||||
 | 
			
		||||
css-color-names@0.0.4, css-color-names@^0.0.4:
 | 
			
		||||
  version "0.0.4"
 | 
			
		||||
  resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
 | 
			
		||||
| 
						 | 
				
			
			@ -3862,6 +3943,11 @@ css@^2.0.0:
 | 
			
		|||
    source-map-resolve "^0.5.2"
 | 
			
		||||
    urix "^0.1.0"
 | 
			
		||||
 | 
			
		||||
csscolorparser@~1.0.2:
 | 
			
		||||
  version "1.0.3"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b"
 | 
			
		||||
  integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==
 | 
			
		||||
 | 
			
		||||
cssesc@^3.0.0:
 | 
			
		||||
  version "3.0.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
 | 
			
		||||
| 
						 | 
				
			
			@ -4560,6 +4646,11 @@ duplexify@^3.4.2, duplexify@^3.6.0:
 | 
			
		|||
    readable-stream "^2.0.0"
 | 
			
		||||
    stream-shift "^1.0.0"
 | 
			
		||||
 | 
			
		||||
earcut@^2.2.3:
 | 
			
		||||
  version "2.2.4"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a"
 | 
			
		||||
  integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==
 | 
			
		||||
 | 
			
		||||
easy-stack@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788"
 | 
			
		||||
| 
						 | 
				
			
			@ -4573,6 +4664,22 @@ ecc-jsbn@~0.1.1:
 | 
			
		|||
    jsbn "~0.1.0"
 | 
			
		||||
    safer-buffer "^2.1.0"
 | 
			
		||||
 | 
			
		||||
echarts-gl@^2.0.9:
 | 
			
		||||
  version "2.0.9"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/echarts-gl/-/echarts-gl-2.0.9.tgz#ee228a6c7520a6fb7bbb71ea94394f3637ade033"
 | 
			
		||||
  integrity sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    claygl "^1.2.1"
 | 
			
		||||
    zrender "^5.1.1"
 | 
			
		||||
 | 
			
		||||
echarts@^5.4.2:
 | 
			
		||||
  version "5.4.3"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz#f5522ef24419164903eedcfd2b506c6fc91fb20c"
 | 
			
		||||
  integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    tslib "2.3.0"
 | 
			
		||||
    zrender "5.4.4"
 | 
			
		||||
 | 
			
		||||
ee-first@1.1.1:
 | 
			
		||||
  version "1.1.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
 | 
			
		||||
| 
						 | 
				
			
			@ -5696,6 +5803,19 @@ gensync@^1.0.0-beta.1:
 | 
			
		|||
  resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
 | 
			
		||||
  integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
 | 
			
		||||
 | 
			
		||||
geotiff@^2.0.7:
 | 
			
		||||
  version "2.0.7"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/geotiff/-/geotiff-2.0.7.tgz#358e578233af70bfb0b4dee62d599ad78fc5cfca"
 | 
			
		||||
  integrity sha512-FKvFTNowMU5K6lHYY2f83d4lS2rsCNdpUC28AX61x9ZzzqPNaWFElWv93xj0eJFaNyOYA63ic5OzJ88dHpoA5Q==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@petamoriken/float16" "^3.4.7"
 | 
			
		||||
    lerc "^3.0.0"
 | 
			
		||||
    pako "^2.0.4"
 | 
			
		||||
    parse-headers "^2.0.2"
 | 
			
		||||
    quick-lru "^6.1.1"
 | 
			
		||||
    web-worker "^1.2.0"
 | 
			
		||||
    xml-utils "^1.0.2"
 | 
			
		||||
 | 
			
		||||
get-caller-file@^1.0.1:
 | 
			
		||||
  version "1.0.3"
 | 
			
		||||
  resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
 | 
			
		||||
| 
						 | 
				
			
			@ -6224,6 +6344,11 @@ icss-utils@^2.1.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    postcss "^6.0.1"
 | 
			
		||||
 | 
			
		||||
ieee754@^1.1.12:
 | 
			
		||||
  version "1.2.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
 | 
			
		||||
  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
 | 
			
		||||
 | 
			
		||||
ieee754@^1.1.4:
 | 
			
		||||
  version "1.1.13"
 | 
			
		||||
  resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
 | 
			
		||||
| 
						 | 
				
			
			@ -6254,6 +6379,11 @@ image-size@~0.5.0:
 | 
			
		|||
  resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
 | 
			
		||||
  integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
 | 
			
		||||
 | 
			
		||||
immediate@~3.0.5:
 | 
			
		||||
  version "3.0.6"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
 | 
			
		||||
  integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
 | 
			
		||||
 | 
			
		||||
import-cwd@^2.0.0:
 | 
			
		||||
  version "2.1.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
 | 
			
		||||
| 
						 | 
				
			
			@ -6947,6 +7077,11 @@ json-stable-stringify-without-jsonify@^1.0.1:
 | 
			
		|||
  resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
 | 
			
		||||
  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
 | 
			
		||||
 | 
			
		||||
json-stringify-pretty-compact@^2.0.0:
 | 
			
		||||
  version "2.0.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885"
 | 
			
		||||
  integrity sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==
 | 
			
		||||
 | 
			
		||||
json-stringify-safe@~5.0.1:
 | 
			
		||||
  version "5.0.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
 | 
			
		||||
| 
						 | 
				
			
			@ -7007,6 +7142,16 @@ jsprim@^1.2.2:
 | 
			
		|||
    json-schema "0.2.3"
 | 
			
		||||
    verror "1.10.0"
 | 
			
		||||
 | 
			
		||||
jszip@^3.10.1:
 | 
			
		||||
  version "3.10.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
 | 
			
		||||
  integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    lie "~3.3.0"
 | 
			
		||||
    pako "~1.0.2"
 | 
			
		||||
    readable-stream "~2.3.6"
 | 
			
		||||
    setimmediate "^1.0.5"
 | 
			
		||||
 | 
			
		||||
killable@^1.0.0, killable@^1.0.1:
 | 
			
		||||
  version "1.0.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
 | 
			
		||||
| 
						 | 
				
			
			@ -7063,6 +7208,11 @@ lcid@^1.0.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    invert-kv "^1.0.0"
 | 
			
		||||
 | 
			
		||||
lerc@^3.0.0:
 | 
			
		||||
  version "3.0.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/lerc/-/lerc-3.0.0.tgz#36f36fbd4ba46f0abf4833799fff2e7d6865f5cb"
 | 
			
		||||
  integrity sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==
 | 
			
		||||
 | 
			
		||||
less-loader@^4.1.0:
 | 
			
		||||
  version "4.1.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e"
 | 
			
		||||
| 
						 | 
				
			
			@ -7097,6 +7247,13 @@ levn@^0.3.0, levn@~0.3.0:
 | 
			
		|||
    prelude-ls "~1.1.2"
 | 
			
		||||
    type-check "~0.3.2"
 | 
			
		||||
 | 
			
		||||
lie@~3.3.0:
 | 
			
		||||
  version "3.3.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
 | 
			
		||||
  integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    immediate "~3.0.5"
 | 
			
		||||
 | 
			
		||||
lines-and-columns@^1.1.6:
 | 
			
		||||
  version "1.1.6"
 | 
			
		||||
  resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
 | 
			
		||||
| 
						 | 
				
			
			@ -7306,6 +7463,11 @@ lodash.restparam@^3.0.0:
 | 
			
		|||
  resolved "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
 | 
			
		||||
  integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
 | 
			
		||||
 | 
			
		||||
lodash.throttle@^4.0.0:
 | 
			
		||||
  version "4.1.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
 | 
			
		||||
  integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
 | 
			
		||||
 | 
			
		||||
lodash.toarray@^4.4.0:
 | 
			
		||||
  version "4.4.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
 | 
			
		||||
| 
						 | 
				
			
			@ -7424,6 +7586,16 @@ map-visit@^1.0.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    object-visit "^1.0.0"
 | 
			
		||||
 | 
			
		||||
mapbox-to-css-font@^2.4.1:
 | 
			
		||||
  version "2.4.2"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/mapbox-to-css-font/-/mapbox-to-css-font-2.4.2.tgz#a9e31b363ad8ca881cd339ca99f2d2a6b02ea5dd"
 | 
			
		||||
  integrity sha512-f+NBjJJY4T3dHtlEz1wCG7YFlkODEjFIYlxDdLIDMNpkSksqTt+l/d4rjuwItxuzkuMFvPyrjzV2lxRM4ePcIA==
 | 
			
		||||
 | 
			
		||||
material-colors@^1.0.0:
 | 
			
		||||
  version "1.2.6"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46"
 | 
			
		||||
  integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==
 | 
			
		||||
 | 
			
		||||
math-expression-evaluator@^1.2.14:
 | 
			
		||||
  version "1.2.22"
 | 
			
		||||
  resolved "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz#c14dcb3d8b4d150e5dcea9c68c8dad80309b0d5e"
 | 
			
		||||
| 
						 | 
				
			
			@ -7619,6 +7791,11 @@ minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5:
 | 
			
		|||
  resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
 | 
			
		||||
  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
 | 
			
		||||
 | 
			
		||||
minimist@^1.2.6:
 | 
			
		||||
  version "1.2.8"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
 | 
			
		||||
  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
 | 
			
		||||
 | 
			
		||||
minipass-collect@^1.0.2:
 | 
			
		||||
  version "1.0.2"
 | 
			
		||||
  resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
 | 
			
		||||
| 
						 | 
				
			
			@ -8074,6 +8251,26 @@ obuf@^1.0.0, obuf@^1.1.2:
 | 
			
		|||
  resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
 | 
			
		||||
  integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
 | 
			
		||||
 | 
			
		||||
ol-mapbox-style@^10.1.0:
 | 
			
		||||
  version "10.7.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/ol-mapbox-style/-/ol-mapbox-style-10.7.0.tgz#8837912da2a16fbd22992d76cbc4f491c838b973"
 | 
			
		||||
  integrity sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@mapbox/mapbox-gl-style-spec" "^13.23.1"
 | 
			
		||||
    mapbox-to-css-font "^2.4.1"
 | 
			
		||||
    ol "^7.3.0"
 | 
			
		||||
 | 
			
		||||
ol@^7.3.0, ol@^7.4.0:
 | 
			
		||||
  version "7.5.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/ol/-/ol-7.5.1.tgz#76e7a8b2cabf36124ce3123d22af08e7c4e86087"
 | 
			
		||||
  integrity sha512-CFXDhO8YdQt7I+zwrGYSONo/ZM2oLr7vUvxqpLEUyy+USaQjUeE8L6FBOWIPboopGVhnSVYd5hdEirn9ifKBZQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    earcut "^2.2.3"
 | 
			
		||||
    geotiff "^2.0.7"
 | 
			
		||||
    ol-mapbox-style "^10.1.0"
 | 
			
		||||
    pbf "3.2.1"
 | 
			
		||||
    rbush "^3.0.1"
 | 
			
		||||
 | 
			
		||||
omit.js@^1.0.0:
 | 
			
		||||
  version "1.0.2"
 | 
			
		||||
  resolved "https://registry.npmjs.org/omit.js/-/omit.js-1.0.2.tgz#91a14f0eba84066dfa015bf30e474c47f30bc858"
 | 
			
		||||
| 
						 | 
				
			
			@ -8274,7 +8471,12 @@ p-try@^2.0.0:
 | 
			
		|||
  resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
 | 
			
		||||
  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
 | 
			
		||||
 | 
			
		||||
pako@~1.0.5:
 | 
			
		||||
pako@^2.0.4:
 | 
			
		||||
  version "2.1.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86"
 | 
			
		||||
  integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==
 | 
			
		||||
 | 
			
		||||
pako@~1.0.2, pako@~1.0.5:
 | 
			
		||||
  version "1.0.11"
 | 
			
		||||
  resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
 | 
			
		||||
  integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
 | 
			
		||||
| 
						 | 
				
			
			@ -8322,6 +8524,11 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
 | 
			
		|||
    pbkdf2 "^3.0.3"
 | 
			
		||||
    safe-buffer "^5.1.1"
 | 
			
		||||
 | 
			
		||||
parse-headers@^2.0.2:
 | 
			
		||||
  version "2.0.5"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9"
 | 
			
		||||
  integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==
 | 
			
		||||
 | 
			
		||||
parse-json@^2.2.0:
 | 
			
		||||
  version "2.2.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
 | 
			
		||||
| 
						 | 
				
			
			@ -8462,6 +8669,14 @@ path-type@^3.0.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    pify "^3.0.0"
 | 
			
		||||
 | 
			
		||||
pbf@3.2.1:
 | 
			
		||||
  version "3.2.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a"
 | 
			
		||||
  integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    ieee754 "^1.1.12"
 | 
			
		||||
    resolve-protobuf-schema "^2.1.0"
 | 
			
		||||
 | 
			
		||||
pbkdf2@^3.0.3:
 | 
			
		||||
  version "3.1.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
 | 
			
		||||
| 
						 | 
				
			
			@ -9242,6 +9457,11 @@ promise@^7.1.1:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    asap "~2.0.3"
 | 
			
		||||
 | 
			
		||||
protocol-buffers-schema@^3.3.1:
 | 
			
		||||
  version "3.6.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03"
 | 
			
		||||
  integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==
 | 
			
		||||
 | 
			
		||||
proxy-addr@~2.0.5:
 | 
			
		||||
  version "2.0.6"
 | 
			
		||||
  resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
 | 
			
		||||
| 
						 | 
				
			
			@ -9366,6 +9586,16 @@ querystringify@^2.1.1:
 | 
			
		|||
  resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
 | 
			
		||||
  integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
 | 
			
		||||
 | 
			
		||||
quick-lru@^6.1.1:
 | 
			
		||||
  version "6.1.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-6.1.1.tgz#f8e5bf9010376c126c80c1a62827a526c0e60adf"
 | 
			
		||||
  integrity sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==
 | 
			
		||||
 | 
			
		||||
quickselect@^2.0.0:
 | 
			
		||||
  version "2.0.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018"
 | 
			
		||||
  integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==
 | 
			
		||||
 | 
			
		||||
raf@^3.4.0:
 | 
			
		||||
  version "3.4.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
 | 
			
		||||
| 
						 | 
				
			
			@ -9403,6 +9633,13 @@ raw-body@2.4.0:
 | 
			
		|||
    iconv-lite "0.4.24"
 | 
			
		||||
    unpipe "1.0.0"
 | 
			
		||||
 | 
			
		||||
rbush@^3.0.1:
 | 
			
		||||
  version "3.0.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf"
 | 
			
		||||
  integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    quickselect "^2.0.0"
 | 
			
		||||
 | 
			
		||||
read-pkg-up@^1.0.1:
 | 
			
		||||
  version "1.0.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
 | 
			
		||||
| 
						 | 
				
			
			@ -9531,6 +9768,11 @@ regenerator-runtime@^0.13.4:
 | 
			
		|||
  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
 | 
			
		||||
  integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
 | 
			
		||||
 | 
			
		||||
regenerator-runtime@^0.14.0:
 | 
			
		||||
  version "0.14.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
 | 
			
		||||
  integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
 | 
			
		||||
 | 
			
		||||
regenerator-transform@^0.10.0:
 | 
			
		||||
  version "0.10.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
 | 
			
		||||
| 
						 | 
				
			
			@ -9773,6 +10015,13 @@ resolve-from@^4.0.0:
 | 
			
		|||
  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
 | 
			
		||||
  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
 | 
			
		||||
 | 
			
		||||
resolve-protobuf-schema@^2.1.0:
 | 
			
		||||
  version "2.1.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758"
 | 
			
		||||
  integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    protocol-buffers-schema "^3.3.1"
 | 
			
		||||
 | 
			
		||||
resolve-url-loader@^2.1.1:
 | 
			
		||||
  version "2.3.2"
 | 
			
		||||
  resolved "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.3.2.tgz#83bb9ebc392b66c563795eef22f078970357a26e"
 | 
			
		||||
| 
						 | 
				
			
			@ -9898,7 +10147,7 @@ run-queue@^1.0.0, run-queue@^1.0.3:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    aproba "^1.1.1"
 | 
			
		||||
 | 
			
		||||
rw@1, rw@^1.3.2:
 | 
			
		||||
rw@1, rw@^1.3.2, rw@^1.3.3:
 | 
			
		||||
  version "1.3.3"
 | 
			
		||||
  resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
 | 
			
		||||
  integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
 | 
			
		||||
| 
						 | 
				
			
			@ -9982,6 +10231,11 @@ schema-utils@^2.6.1, schema-utils@^2.6.5:
 | 
			
		|||
    ajv "^6.12.2"
 | 
			
		||||
    ajv-keywords "^3.4.1"
 | 
			
		||||
 | 
			
		||||
scrollparent@^2.0.1:
 | 
			
		||||
  version "2.1.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/scrollparent/-/scrollparent-2.1.0.tgz#6cae915c953835886a6ba0d77fdc2bb1ed09076d"
 | 
			
		||||
  integrity sha512-bnnvJL28/Rtz/kz2+4wpBjHzWoEzXhVg/TE8BeVGJHUqE8THNIRnDxDWMktwM+qahvlRdvlLdsQfYe+cuqfZeA==
 | 
			
		||||
 | 
			
		||||
select-hose@^2.0.0:
 | 
			
		||||
  version "2.0.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
 | 
			
		||||
| 
						 | 
				
			
			@ -10083,7 +10337,7 @@ set-value@^2.0.0, set-value@^2.0.1:
 | 
			
		|||
    is-plain-object "^2.0.3"
 | 
			
		||||
    split-string "^3.0.1"
 | 
			
		||||
 | 
			
		||||
setimmediate@^1.0.4:
 | 
			
		||||
setimmediate@^1.0.4, setimmediate@^1.0.5:
 | 
			
		||||
  version "1.0.5"
 | 
			
		||||
  resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
 | 
			
		||||
  integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
 | 
			
		||||
| 
						 | 
				
			
			@ -10264,6 +10518,16 @@ sockjs@0.3.20:
 | 
			
		|||
    uuid "^3.4.0"
 | 
			
		||||
    websocket-driver "0.6.5"
 | 
			
		||||
 | 
			
		||||
sort-asc@^0.1.0:
 | 
			
		||||
  version "0.1.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/sort-asc/-/sort-asc-0.1.0.tgz#ab799df61fc73ea0956c79c4b531ed1e9e7727e9"
 | 
			
		||||
  integrity sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==
 | 
			
		||||
 | 
			
		||||
sort-desc@^0.1.1:
 | 
			
		||||
  version "0.1.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/sort-desc/-/sort-desc-0.1.1.tgz#198b8c0cdeb095c463341861e3925d4ee359a9ee"
 | 
			
		||||
  integrity sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==
 | 
			
		||||
 | 
			
		||||
sort-keys@^1.0.0:
 | 
			
		||||
  version "1.1.2"
 | 
			
		||||
  resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
 | 
			
		||||
| 
						 | 
				
			
			@ -10271,6 +10535,14 @@ sort-keys@^1.0.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    is-plain-obj "^1.0.0"
 | 
			
		||||
 | 
			
		||||
sort-object@^0.3.2:
 | 
			
		||||
  version "0.3.2"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/sort-object/-/sort-object-0.3.2.tgz#98e0d199ede40e07c61a84403c61d6c3b290f9e2"
 | 
			
		||||
  integrity sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    sort-asc "^0.1.0"
 | 
			
		||||
    sort-desc "^0.1.1"
 | 
			
		||||
 | 
			
		||||
sortablejs@^1.10.1:
 | 
			
		||||
  version "1.10.2"
 | 
			
		||||
  resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290"
 | 
			
		||||
| 
						 | 
				
			
			@ -10905,6 +11177,11 @@ tiny-emitter@^2.0.0:
 | 
			
		|||
  resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
 | 
			
		||||
  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
 | 
			
		||||
 | 
			
		||||
tinycolor2@^1.1.2:
 | 
			
		||||
  version "1.6.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
 | 
			
		||||
  integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
 | 
			
		||||
 | 
			
		||||
tinycolor2@^1.4.1:
 | 
			
		||||
  version "1.4.1"
 | 
			
		||||
  resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
 | 
			
		||||
| 
						 | 
				
			
			@ -11019,6 +11296,11 @@ tsconfig-paths@^3.9.0:
 | 
			
		|||
    minimist "^1.2.0"
 | 
			
		||||
    strip-bom "^3.0.0"
 | 
			
		||||
 | 
			
		||||
tslib@2.3.0:
 | 
			
		||||
  version "2.3.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
 | 
			
		||||
  integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
 | 
			
		||||
 | 
			
		||||
tslib@^1.10.0, tslib@^1.9.0:
 | 
			
		||||
  version "1.13.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
 | 
			
		||||
| 
						 | 
				
			
			@ -11363,6 +11645,16 @@ vue-area-linkage@^5.1.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    lodash.find "^4.6.0"
 | 
			
		||||
 | 
			
		||||
vue-color@^2.8.1:
 | 
			
		||||
  version "2.8.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/vue-color/-/vue-color-2.8.1.tgz#a090f3dcf8ed6f07afdb865cac84b19a73302e70"
 | 
			
		||||
  integrity sha512-BoLCEHisXi2QgwlhZBg9UepvzZZmi4176vbr+31Shen5WWZwSLVgdScEPcB+yrAtuHAz42309C0A4+WiL9lNBw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    clamp "^1.0.1"
 | 
			
		||||
    lodash.throttle "^4.0.0"
 | 
			
		||||
    material-colors "^1.0.0"
 | 
			
		||||
    tinycolor2 "^1.1.2"
 | 
			
		||||
 | 
			
		||||
vue-cropper@^0.5.4:
 | 
			
		||||
  version "0.5.4"
 | 
			
		||||
  resolved "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.5.4.tgz#0db3776894eea8673a3203a1513882a0eb4558ad"
 | 
			
		||||
| 
						 | 
				
			
			@ -11437,6 +11729,11 @@ vue-ls@^3.2.0:
 | 
			
		|||
  resolved "https://registry.npmjs.org/vue-ls/-/vue-ls-3.2.1.tgz#25d1c75b3a51c17018129de607b44bb120a3385a"
 | 
			
		||||
  integrity sha512-JoZDpSu0qV5AM50vspEzOut2lcm8R0tr5WG99jMHh14qFXkUes3ZdmDMG/p8iSQVQpg0pd/svGwM9Nd7OI2oaw==
 | 
			
		||||
 | 
			
		||||
vue-observe-visibility@^0.4.4:
 | 
			
		||||
  version "0.4.6"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz#878cb8ebcf3078e40807af29774e97105ebd519e"
 | 
			
		||||
  integrity sha512-xo0CEVdkjSjhJoDdLSvoZoQrw/H2BlzB5jrCBKGZNXN2zdZgMuZ9BKrxXDjNP2AxlcCoKc8OahI3F3r3JGLv2Q==
 | 
			
		||||
 | 
			
		||||
vue-photo-preview@^1.1.3:
 | 
			
		||||
  version "1.1.3"
 | 
			
		||||
  resolved "https://registry.npmjs.org/vue-photo-preview/-/vue-photo-preview-1.1.3.tgz#8ee62923e865d3cbaf010b07b0cc841892633028"
 | 
			
		||||
| 
						 | 
				
			
			@ -11459,11 +11756,30 @@ vue-photo-preview@^1.1.3:
 | 
			
		|||
    webpack "^3.6.0"
 | 
			
		||||
    webpack-dev-server "^2.9.1"
 | 
			
		||||
 | 
			
		||||
vue-print-nb-jeecg@^1.0.12:
 | 
			
		||||
  version "1.0.12"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/vue-print-nb-jeecg/-/vue-print-nb-jeecg-1.0.12.tgz#975e1dac3da8c9736ac81b82a2b099cafe1bb3df"
 | 
			
		||||
  integrity sha512-jHyWm6/TxB1iU2nHL7upQdHVdxb1SJQ9n3XKeYTaruFdbSphLo1vDtTunS2qVCjupk8lui7FlF5rxxSNr0zjZg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    babel-plugin-transform-runtime "^6.23.0"
 | 
			
		||||
 | 
			
		||||
vue-ref@^2.0.0:
 | 
			
		||||
  version "2.0.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/vue-ref/-/vue-ref-2.0.0.tgz#483084d732abed11da796778a8266a3af0ea1a9c"
 | 
			
		||||
  integrity sha512-uKNKpFOVeWNqS2mrBZqnpLyXJo5Q+vnkex6JvpENvhXHFNBW/SJTP8vJywLuVT3DpxwXcF9N0dyIiZ4/NpTexQ==
 | 
			
		||||
 | 
			
		||||
vue-resize@^0.4.5:
 | 
			
		||||
  version "0.4.5"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/vue-resize/-/vue-resize-0.4.5.tgz#4777a23042e3c05620d9cbda01c0b3cc5e32dcea"
 | 
			
		||||
  integrity sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==
 | 
			
		||||
 | 
			
		||||
vue-resize@^1.0.1:
 | 
			
		||||
  version "1.0.1"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/vue-resize/-/vue-resize-1.0.1.tgz#c120bed4e09938771d622614f57dbcf58a5147ee"
 | 
			
		||||
  integrity sha512-z5M7lJs0QluJnaoMFTIeGx6dIkYxOwHThlZDeQnWZBizKblb99GSejPnK37ZbNE/rVwDcYcHY+Io+AxdpY952w==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/runtime" "^7.13.10"
 | 
			
		||||
 | 
			
		||||
vue-router@^3.0.1:
 | 
			
		||||
  version "3.3.4"
 | 
			
		||||
  resolved "https://registry.npmjs.org/vue-router/-/vue-router-3.3.4.tgz#4e38abc34a11c41b6c3d8244449a2e363ba6250b"
 | 
			
		||||
| 
						 | 
				
			
			@ -11503,6 +11819,15 @@ vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0:
 | 
			
		|||
  resolved "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
 | 
			
		||||
  integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
 | 
			
		||||
 | 
			
		||||
vue-virtual-scroller@^1.1.2:
 | 
			
		||||
  version "1.1.2"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/vue-virtual-scroller/-/vue-virtual-scroller-1.1.2.tgz#b8a6362f177abf3f2149ce1eac18013c71fe353b"
 | 
			
		||||
  integrity sha512-SkUyc7QHCJFB5h1Fya7LxVizlVzOZZuFVipBGHYoTK8dwLs08bIz/tclvRApYhksaJIm/nn51inzO2UjpGJPMQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    scrollparent "^2.0.1"
 | 
			
		||||
    vue-observe-visibility "^0.4.4"
 | 
			
		||||
    vue-resize "^0.4.5"
 | 
			
		||||
 | 
			
		||||
vue@^2.4.4, vue@^2.5.17, vue@^2.5.3, vue@^2.6.10:
 | 
			
		||||
  version "2.6.11"
 | 
			
		||||
  resolved "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
 | 
			
		||||
| 
						 | 
				
			
			@ -11569,6 +11894,11 @@ wcwidth@^1.0.1:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    defaults "^1.0.3"
 | 
			
		||||
 | 
			
		||||
web-worker@^1.2.0:
 | 
			
		||||
  version "1.2.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da"
 | 
			
		||||
  integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==
 | 
			
		||||
 | 
			
		||||
webpack-bundle-analyzer@^3.3.0:
 | 
			
		||||
  version "3.8.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16"
 | 
			
		||||
| 
						 | 
				
			
			@ -11909,6 +12239,11 @@ xe-utils@2.4.8:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/xe-utils/-/xe-utils-2.4.8.tgz#0efda3ca81f6b55f68a8a31e276fb17da59c98b3"
 | 
			
		||||
  integrity sha512-/95ZaQK9GJE/EYrpMv9lgKdkEMQwWv4a4TF4dddi4gSzZ33vp/rZvzJNNV9XknaOkMizK9IBSX8CB/nL+SAk0Q==
 | 
			
		||||
 | 
			
		||||
xml-utils@^1.0.2:
 | 
			
		||||
  version "1.7.0"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/xml-utils/-/xml-utils-1.7.0.tgz#333ce391d8918f872aaf98d2cf90f9ef9b82bd0f"
 | 
			
		||||
  integrity sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw==
 | 
			
		||||
 | 
			
		||||
xregexp@^4.2.4:
 | 
			
		||||
  version "4.3.0"
 | 
			
		||||
  resolved "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
 | 
			
		||||
| 
						 | 
				
			
			@ -12074,3 +12409,10 @@ yorkie@^2.0.0:
 | 
			
		|||
    is-ci "^1.0.10"
 | 
			
		||||
    normalize-path "^1.0.0"
 | 
			
		||||
    strip-indent "^2.0.0"
 | 
			
		||||
 | 
			
		||||
zrender@5.4.4, zrender@^5.1.1:
 | 
			
		||||
  version "5.4.4"
 | 
			
		||||
  resolved "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz#8854f1d95ecc82cf8912f5a11f86657cb8c9e261"
 | 
			
		||||
  integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    tslib "2.3.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user