licp
2024-07-01 c6334d29171e1d3edf2d10a01ab2489fbdd310c8
新增筛选
已修改6个文件
已添加1个文件
576 ■■■■ 文件已修改
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-ins-order/add.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-inspect-order-plan/Inspection.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tool/excel.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/util/downExcelByLuckSheet.js 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/util/excelFountion.js 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json
@@ -35,6 +35,7 @@
    "muse-ui": "^3.0.2",
    "node-emoji": "^1.11.0",
    "popper.js": "^1.16.1",
    "print-js": "^1.6.0",
    "qs": "^6.11.0",
    "sweetalert": "^2.1.2",
    "tinymce": "^5.10.3",
src/components/do/b1-ins-order/add.vue
@@ -414,7 +414,17 @@
        @selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect"
        :row-class-name="tableRowClassName" v-loading="getProductLoad" @select-all="handleAll">
        <el-table-column type="selection" width="65" :selectable="selectable" v-if="active==1"></el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip>
          <template slot="header" slot-scope="scope">
            <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
              <span>检验项</span>
              <el-input
              v-model="inspectionItem"
              size="mini"
              placeholder="请输入"/>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
          show-overflow-tooltip></el-table-column>
        <el-table-column prop="sonLaboratory" label="子实验室" min-width="130" show-overflow-tooltip :filters="filters"
@@ -865,7 +875,8 @@
        model: null,
        standardMethodListId: null,
        symbolList:[
        'RTS','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
        'RTS','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],
        inspectionItem:null,
      }
    },
    watch: {
src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -1251,8 +1251,10 @@
              })
            })
            if (item.v.ps != undefined && item.v.ps.value == '结论') {
              if (this.currentSample.insProduct.find(m => m.id == item.i)) {
              try {
                if (this.currentSample.insProduct.find(m => m.id == item.i)) {
                let ask = this.currentSample.insProduct.find(m => m.id == item.i).ask?this.currentSample.insProduct.find(m => m.id == item.i).ask.split('&'):null;
                console.log(comValue)
                let res = Object.values(comValue)[0]
                let comp = []
                console.log(res, ask)
@@ -1303,6 +1305,10 @@
                }
                this.saveInsContext()
              }
              } catch (error) {
              }
            } else {
              let comResult = ''
              try {
@@ -1409,26 +1415,34 @@
              //     }
              //     break;
              // }
              list.forEach(a => {
                if (a[0].r == item.r && comResult !== '') {
                  for (var b in a) {
                    if (a[b].c == item.c) {
                      try{
                        let val = parseFloat(comResult.toFixed(3))
                        a[b].v.v = isNaN(val) ? '' : val
                      }catch(e){
                        a[b].v.v = comResult
              try {
                list.forEach(a => {
                  if (a[0].r == item.r && comResult !== '') {
                    for (var b in a) {
                      if (a[b].c == item.c) {
                        try{
                          let val = parseFloat(comResult.toFixed(3))
                          a[b].v.v = isNaN(val) ? '' : val
                        }catch(e){
                          a[b].v.v = comResult
                        }
                        break
                      }
                      break
                    }
                  }
                }
              })
              this.changeInput(comResult, `${id}-${item.r}-${item.c}-${pId}`) //改变最终值
                })
                this.changeInput(comResult, `${id}-${item.r}-${item.c}-${pId}`) //改变最终值
              } catch (error) {
              }
            }
          }
        })
        this.getCurrentInsProduct(pId)
        try {
          this.getCurrentInsProduct(pId)
        } catch (error) {
        }
      },
      getCurrentInsProduct(pId) {
        if (!this.tableList[0].insProductResult) {
@@ -1743,15 +1757,17 @@
        return
      },
      saveInsContext() {
        this.$axios.post(this.$api.insOrderPlan.saveInsContext, {
          param: JSON.stringify(this.param)
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('保存失败')
            return
          }
          this.$message.success('已保存')
        })
        if(this.param){
          this.$axios.post(this.$api.insOrderPlan.saveInsContext, {
            param: JSON.stringify(this.param)
          }).then(res => {
            if (res.code == 201) {
              this.$message.error('保存失败')
              return
            }
            this.$message.success('已保存')
          })
        }
      },
      changeEquip(val, n) {
        for (let i in this.equipOptions) {
src/components/tool/excel.vue
@@ -39,7 +39,7 @@
</template>
<script>
import { data } from 'jquery';
import {exportExcel} from '../../util/downExcelByLuckSheet'
    // import { data } from 'jquery';
    export default {
        props: ['data', 'execlTitle'],
src/main.js
@@ -15,9 +15,9 @@
Vue.prototype.PROJECT = '检测中心'
// Vue.prototype.PROJECT = '装备电缆'
//本地
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
// Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
// const javaApi = 'http://127.0.0.1:8001';
const javaApi = 'http://192.168.0.104:8001';
const javaApi = 'http://192.168.47.249:8001';
//云
// Vue.prototype.LOCATIONVUE = "http://114.132.189.42:8080";
src/util/downExcelByLuckSheet.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,193 @@
// const Excel = require('exceljs')
const exportExcel =  async function (luckysheet) { // å‚数为luckysheet.getluckysheetfile()获取的对象
    // 1.创建工作簿,可以为工作簿添加属性
    const workbook = new Excel.Workbook()
    // 2.创建表格,第二个参数可以配置创建什么样的工作表
    luckysheet.every(function (table) {
        if (table.data.length === 0) return true
        const worksheet = workbook.addWorksheet(table.name)
        // 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值
        setStyleAndValue(table.data, worksheet)
        setMerge(table.config.merge, worksheet)
        setBorder(table.config.borderInfo, worksheet)
        return true
    })
    // 4.写入 buffer
    const buffer = await workbook.xlsx.writeBuffer()
    return buffer
}
var setMerge = function (luckyMerge = {}, worksheet) {
    const mergearr = Object.values(luckyMerge)
    mergearr.forEach(function (elem) { // elem格式:{r: 0, c: 0, rs: 1, cs: 2}
        // æŒ‰å¼€å§‹è¡Œï¼Œå¼€å§‹åˆ—,结束行,结束列合并(相当于 K10:M12)
        worksheet.mergeCells(elem.r + 1, elem.c + 1, elem.r + elem.rs, elem.c + elem.cs)
    })
}
var setBorder = function (luckyBorderInfo, worksheet) {
    if (!Array.isArray(luckyBorderInfo)) return
    luckyBorderInfo.forEach(function (elem) {
        let border = borderConvert(elem.borderType, elem.style, elem.color)
        let rang = elem.range[0]
        // console.log(rang.column_focus + 1, rang.row_focus + 1)
        worksheet.getCell(rang.row_focus + 1, rang.column_focus + 1).border = border
    })
}
var setStyleAndValue = function (cellArr, worksheet) {
    if (!Array.isArray(cellArr)) return
    cellArr.forEach(function (row, rowid) {
        row.every(function (cell, columnid) {
            if (!cell) return true
            let fill = fillConvert(cell.bg)
            let font = fontConvert(cell.ff, cell.fc, cell.bl, cell.it, cell.fs, cell.cl, cell.ul)
            let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb, cell.tr)
            let value
            if (cell.f) {
                value = { formula: cell.f, result: cell.v }
            } else {
                value = cell.v
            }
            let target = worksheet.getCell(rowid + 1, columnid + 1)
            target.fill = fill
            target.font = font
            target.alignment = alignment
            target.value = value
            return true
        })
    })
}
var fillConvert = function (bg) {
    if (!bg) {
        return {}
    }
    let fill = {
        type: 'pattern',
        pattern: 'solid',
        fgColor: {argb: bg.replace('#', '')}
    }
    return fill
}
var fontConvert = function (ff = 0, fc = '#000000', bl = 0, it = 0, fs = 10, cl = 0, ul = 0) { // luckysheet:ff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线)
    const luckyToExcel = {
        0: '微软雅黑',
        1: '宋体(Song)',
        2: '黑体(ST Heiti)',
        3: '楷体(ST Kaiti)',
        4: '仿宋(ST FangSong)',
        5: '新宋体(ST Song)',
        6: '华文新魏',
        7: '华文行楷',
        8: '华文隶书',
        9: 'Arial',
        10: 'Times New Roman ',
        11: 'Tahoma ',
        12: 'Verdana',
        num2bl: function (num) {
            return num === 0 ? false : true
        }
    }
    let font = {
        name: luckyToExcel[ff],
        family: 1,
        size: fs,
        color: {argb: fc.replace('#', '')},
        bold: luckyToExcel.num2bl(bl),
        italic: luckyToExcel.num2bl(it),
        underline: luckyToExcel.num2bl(ul),
        strike: luckyToExcel.num2bl(cl)
    }
    return font
}
var alignmentConvert = function (vt = 'default', ht = 'default', tb = 'default', tr = 'default') { // luckysheet:vt(垂直), ht(æ°´å¹³), tb(换行), tr(旋转)
    const luckyToExcel = {
        vertical: {
            0: 'middle',
            1: 'top',
            2: 'bottom',
            default: 'top'
        },
        horizontal: {
            0: 'center',
            1: 'left',
            2: 'right',
            default: 'left'
        },
        wrapText: {
            0: false,
            1: false,
            2: true,
            default: false
        },
        textRotation: {
            0: 0,
            1: 45,
            2: -45,
            3: 'vertical',
            4: 90,
            5: -90,
            default: 0
        }
    }
    let alignment = {
        vertical: luckyToExcel.vertical[vt],
        horizontal: luckyToExcel.horizontal[ht],
        wrapText: luckyToExcel.wrapText[tb],
        textRotation: luckyToExcel.textRotation[tr]
    }
    return alignment
}
var borderConvert = function (borderType, style = 1, color = '#000') { // å¯¹åº”luckysheet的config中borderinfo的的参数
    if (!borderType) {
        return {}
    }
    const luckyToExcel = {
        type: {
            'border-all': 'all',
            'border-top': 'top',
            'border-right': 'right',
            'border-bottom': 'bottom',
            'border-left': 'left'
        },
        style: {
            0: 'none',
            1: 'thin',
            2: 'hair',
            3: 'dotted',
            4: 'dashDot', // 'Dashed',
            5: 'dashDot',
            6: 'dashDotDot',
            7: 'double',
            8: 'medium',
            9: 'mediumDashed',
            10: 'mediumDashDot',
            11: 'mediumDashDotDot',
            12: 'slantDashDot',
            13: 'thick'
        }
    }
    let template = {style: luckyToExcel.style[style], color: {argb: color.replace('#', '')}}
    let border = {}
    if (luckyToExcel.type[borderType] === 'all') {
        border['top'] = template
        border['right'] = template
        border['bottom'] = template
        border['left'] = template
    } else {
        border[luckyToExcel.type[borderType]] = template
    }
    return border
}
export default{
  exportExcel
}
src/util/excelFountion.js
@@ -6,13 +6,17 @@
 * @returns è¿”回所有参数的和,如果参数列表为空或参数类型非数值型,则返回null
 */
function SUM(...val){
  let num = null;
  if(val&&val.length>0){
    val.forEach(item=>{
      num+=item;
    })
  try {
    let num = null;
    if(val&&val.length>0){
      val.forEach(item=>{
        num+=item;
      })
    }
    return num;
  } catch (error) {
  }
  return num;
}
/**
 * è®¡ç®—传入参数中的最大值
@@ -21,16 +25,20 @@
 * @returns è¿”回最大值,如果参数列表为空或为null/undefined/'',则返回null
 */
function MAX(...val){
  let max = null;
  if(val&&val.length>0){
    val = val.filter(item=>item!=null&&item!=='')
    if(val.length>0){
      max = Math.max(...val)
    }else{
      max = null;
  try {
    let max = null;
    if(val&&val.length>0){
      val = val.filter(item=>item!=null&&item!=='')
      if(val.length>0){
        max = Math.max(...val)
      }else{
        max = null;
      }
    }
    return max;
  } catch (error) {
  }
  return max;
}
/**
 * è®¡ç®—传入参数中的最小值
@@ -39,15 +47,19 @@
 * @returns è¿”回传入参数中的最小值,如果传入参数为空或所有值均为null或空字符串,则返回null
 */
function MIN(...val){
  let min = null;
  if(val&&val.length>0){
    val = val.filter(item=>item!=null&&item!=='')
    console.log(val)
    if(val.length>0){
      min = Math.min(...val)
  try {
    let min = null;
    if(val&&val.length>0){
      val = val.filter(item=>item!=null&&item!=='')
      console.log(val)
      if(val.length>0){
        min = Math.min(...val)
      }
    }
    return min;
  } catch (error) {
  }
  return min;
}
/**
 * è®¡ç®—给定数值的平均值
@@ -56,20 +68,24 @@
 * @returns è¿”回平均值,如果数值列表为空或包含非数值项,则返回null
 */
function AVERAGE(...val){
  let num = null;
  let arr = [];
  if(val&&val.length>0){
    arr = val.filter(item=>item!=null&&item!=='')
    arr.forEach(item=>{
      num+=item;
    })
    if(arr.length>0){
      return num/arr.length;
  try {
    let num = null;
    let arr = [];
    if(val&&val.length>0){
      arr = val.filter(item=>item!=null&&item!=='')
      arr.forEach(item=>{
        num+=item;
      })
      if(arr.length>0){
        return num/arr.length;
      }else{
        return null;
      }
    }else{
      return null;
    }
  }else{
    return null;
  } catch (error) {
  }
}
/**
@@ -79,7 +95,11 @@
 * @returns è¿”回该数值的绝对值
 */
function ABS(val){
  return Math.abs(val);
  try {
    return Math.abs(val);
  } catch (error) {
  }
}
/**
 * è®¡ç®—一组数字的中位数
@@ -88,24 +108,28 @@
 * @returns å¦‚果参数中有有效的数字,则返回计算出的中位数;否则返回null
 */
function MEDIAN(...val){
  let arr = [];
  if(val&&val.length>0){
    arr = val.filter(item=>item!=null&&item!=='')
    const sortedArr = arr.sort((a, b) => a - b);
    // è®¡ç®—中位数
    const half = Math.floor(sortedArr.length / 2);
    if(arr.length>0){
      // å¦‚果数组长度是奇数,直接取中间的元素
      if (sortedArr.length % 2 === 1) {
        return sortedArr[half];
      } else { // å¦‚果数组长度是偶数,取中间两个元素的平均值
        return (sortedArr[half - 1] + sortedArr[half]) / 2;
  try {
    let arr = [];
    if(val&&val.length>0){
      arr = val.filter(item=>item!=null&&item!=='')
      const sortedArr = arr.sort((a, b) => a - b);
      // è®¡ç®—中位数
      const half = Math.floor(sortedArr.length / 2);
      if(arr.length>0){
        // å¦‚果数组长度是奇数,直接取中间的元素
        if (sortedArr.length % 2 === 1) {
          return sortedArr[half];
        } else { // å¦‚果数组长度是偶数,取中间两个元素的平均值
          return (sortedArr[half - 1] + sortedArr[half]) / 2;
        }
      }else{
        return null;
      }
    }else{
      return null;
    }
  }else{
    return null;
  } catch (error) {
  }
}
@@ -184,27 +208,31 @@
 * @returns è¿”回一个包含坐标信息的数组
 */
function changeParameter(f){
  let arr = getABCList(f)
  let arr2 = []
  arr.forEach(item=>{
    if(item.includes(':')){
      let r0 = getIdFromColumnName(item.split(':')[0]).r;
      let c0 = getIdFromColumnName(item.split(':')[0]).c;
      let r1 = getIdFromColumnName(item.split(':')[1]).r;
      let c1 = getIdFromColumnName(item.split(':')[1]).c;
      for (let i = Number(r0); i <= Number(r1); i++) {
        for (let u = Number(c0); u <= Number(c1); u++) {
          arr2.push({
            r: i,
            c: u
          })
  try {
    let arr = getABCList(f)
    let arr2 = []
    arr.forEach(item=>{
      if(item.includes(':')){
        let r0 = getIdFromColumnName(item.split(':')[0]).r;
        let c0 = getIdFromColumnName(item.split(':')[0]).c;
        let r1 = getIdFromColumnName(item.split(':')[1]).r;
        let c1 = getIdFromColumnName(item.split(':')[1]).c;
        for (let i = Number(r0); i <= Number(r1); i++) {
          for (let u = Number(c0); u <= Number(c1); u++) {
            arr2.push({
              r: i,
              c: u
            })
          }
        }
      }else{
        arr2.push(getIdFromColumnName(item))
      }
    }else{
      arr2.push(getIdFromColumnName(item))
    }
  })
  return arr2;
    })
    return arr2;
  } catch (error) {
  }
}
/**
 * èŽ·å–åŒ…å« ABC å­—符的列表
@@ -213,22 +241,26 @@
 * @returns åŒ…含 ABC å­—符的数组列表
 */
function getABCList(f){
  let regex = /[=\+\-\*\%\(\)\/\^\s]/g;
  let fouList = [
    "SUM",
    'MAX',
    'MIN',
    'AVERAGE',
    'APS',
  ]
  f = f.replace(regex, ',')
  fouList.forEach(item=>{
    f = f.replaceAll(item,',')
  })
  let arr = f.split(',').filter(item=>{
    return item&& /[a-zA-Z]/.test(item)&&item!='undefined'&&item!='null'
  });
  return arr;
  try {
    let regex = /[=\+\-\*\%\(\)\/\^\s]/g;
    let fouList = [
      "SUM",
      'MAX',
      'MIN',
      'AVERAGE',
      'APS',
    ]
    f = f.replace(regex, ',')
    fouList.forEach(item=>{
      f = f.replaceAll(item,',')
    })
    let arr = f.split(',').filter(item=>{
      return item&& /[a-zA-Z]/.test(item)&&item!='undefined'&&item!='null'
    });
    return arr;
  } catch (error) {
  }
}
/**
 * èŽ·å–æ‰€æœ‰å•å…ƒæ ¼
@@ -237,12 +269,16 @@
 * @returns è¿”回一个对象,其键为单元格的唯一标识符(由列和行ID拼接而成),值为null
 */
function getAllCell(f){
  let arr = changeParameter(f)
  let arr0 = {}
  arr.forEach(item=>{
    arr0[getColumnNameFromId(`${item.c}`+'-'+`${item.r}`)] = null
  })
  return arr0;
  try {
    let arr = changeParameter(f)
    let arr0 = {}
    arr.forEach(item=>{
      arr0[getColumnNameFromId(`${item.c}`+'-'+`${item.r}`)] = null
    })
    return arr0;
  } catch (error) {
  }
}
/**
@@ -253,55 +289,54 @@
 * @returns è¿”回计算后的结果,如果计算失败则返回0
 */
function compute(f,comValue){
  let str = f
  // èŽ·å–å•å…ƒæ ¼å¯¹åº”å€¼
  let arr = getAllCell(f)
  for (var a in comValue) {
    if(comValue[a]!=='undefine'&&comValue[a]!=='null'&&comValue[a]!==undefined){
      arr[a] = comValue[a]
    }
  }
  // è§£æžå…¬å¼å‚数,特别是带:的
  let arr0 = getABCList(f)
  let obj = {}
  arr0.forEach(item=>{
    if(item.includes(':')){
      let arr1 = []
      let r0 = getIdFromColumnName(item.split(':')[0]).r;
      let c0 = getIdFromColumnName(item.split(':')[0]).c;
      let r1 = getIdFromColumnName(item.split(':')[1]).r;
      let c1 = getIdFromColumnName(item.split(':')[1]).c;
      for (let i = Number(r0); i <= Number(r1); i++) {
        for (let u = Number(c0); u <= Number(c1); u++) {
          arr1.push({
            r: i,
            c: u
          })
        }
  try {
    let str = f
    // èŽ·å–å•å…ƒæ ¼å¯¹åº”å€¼
    let arr = getAllCell(f)
    for (var a in comValue) {
      if(comValue[a]!=='undefine'&&comValue[a]!=='null'&&comValue[a]!==undefined){
        arr[a] = comValue[a]
      }
      let arr2 = []
      arr1.forEach(m=>{
        arr2.push(getColumnNameFromId(`${m.c}`+'-'+`${m.r}`))
      })
      obj[item.split(':').join('-')] = arr2.join(',')
    }else{
      obj[item] = item
    }
  })
  str = str.replaceAll(':', '-')
  // æ›¿æ¢å‚æ•°
  for (var a in obj) {
    str = str.replaceAll(a, obj[a])
  }
  // è®¡ç®—
  try{
    // è§£æžå…¬å¼å‚数,特别是带:的
    let arr0 = getABCList(f)
    let obj = {}
    arr0.forEach(item=>{
      if(item.includes(':')){
        let arr1 = []
        let r0 = getIdFromColumnName(item.split(':')[0]).r;
        let c0 = getIdFromColumnName(item.split(':')[0]).c;
        let r1 = getIdFromColumnName(item.split(':')[1]).r;
        let c1 = getIdFromColumnName(item.split(':')[1]).c;
        for (let i = Number(r0); i <= Number(r1); i++) {
          for (let u = Number(c0); u <= Number(c1); u++) {
            arr1.push({
              r: i,
              c: u
            })
          }
        }
        let arr2 = []
        arr1.forEach(m=>{
          arr2.push(getColumnNameFromId(`${m.c}`+'-'+`${m.r}`))
        })
        obj[item.split(':').join('-')] = arr2.join(',')
      }else{
        obj[item] = item
      }
    })
    str = str.replaceAll(':', '-')
    // æ›¿æ¢å‚æ•°
    for (var a in obj) {
      str = str.replaceAll(a, obj[a])
    }
    // è®¡ç®—
    for (var a in arr) {
      str = str.replaceAll(a, arr[a])
    }
    return eval(str)
  }catch(e){
    console.log('e',e)
    return 0
  } catch (error) {
  }
}