spring
2025-03-19 07a41ade45c962e93a9d449ce1be0eec52e66a6a
src/components/view/b2-standard-template.vue
@@ -40,7 +40,7 @@
   <div class="standard-template">
      <div>
         <el-row class="title">
            <el-col :span="12" style="padding-left: 20px;">原始记录模板</el-col>
            <el-col :span="12" style="padding-left: 20px;text-align: left;">原始记录模板</el-col>
            <el-col :span="12" style="text-align: right;">
               <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">新增</el-button>
            </el-col>
@@ -62,8 +62,8 @@
            :upUrl="$api.StandardTemplate.upStandardTemplate" :delUrl="$api.StandardTemplate.delStandardTemplate"
            :componentData="componentData" :key="upIndex" />
      </div>
      <el-dialog title="模板编制" :visible.sync="isShow" width="80%" :before-close="isClose">
         <div style="width: 100%;height: 80vh;overflow: auto;" v-if="isShow">
      <el-dialog title="模板编制" :visible.sync="isShow" width="85%" :before-close="isClose">
         <div style="width: 100%;height: 82vh;overflow: auto;" v-if="isShow">
            <Excel :data="row.thing" :execlTitle="row.name" v-loading="loading"></Excel>
         </div>
      </el-dialog>
@@ -73,6 +73,8 @@
<script>
   import ValueTable from '../tool/value-table.vue'
   import Excel from '../tool/excel.vue'
  // import XLSX from 'xlsx'
  // import XLSXS from 'xlsx-style'
   export default {
      components: {
         ValueTable,
@@ -110,7 +112,8 @@
               tagField: {},
               selectField: {},
               requiredAdd: ['name'],
               requiredUp: ['name']
               requiredUp: ['name'],
          needSort: ['createTime', 'updateTime', 'name'],
            },
            entityCopy: {},
            upIndex: 0,
@@ -129,10 +132,12 @@
         this.entityCopy = this.HaveJson(this.componentData.entity)
         this.getPower()
         window.excelClosed = this.closed
      window.returnView = this.returnView
         // window.excelExport = this.excelExport
      },
      methods: {
         refreshTable() {
            this.$refs['ValueTable'].selectList()
         refreshTable(e) {
            this.$refs['ValueTable'].selectList(e)
         },
         refresh() {
            this.componentData.entity = this.HaveJson(this.entityCopy)
@@ -162,14 +167,24 @@
               this.componentData.do.splice(1, 1)
            }
            if (!up) {
          this.componentData.do.splice(2, 1)
               this.componentData.do.splice(0, 1)
            }
            this.addPower = add
         },
         templateWrite(row) {
            this.isShow = true
            this.row = row
            this.$axios.get(this.$api.StandardTemplate.getEditTemplatePreparation + '?id=' + row.id).then(res => {
          if(res.code != 200){
            return
          }
               this.row = row
               this.row.thing = res.data
               this.isShow = true
            })
         },
      returnView () {
        this.isShow = false
      },
         closed() {
            this.loading = true
            let data = luckysheet.toJson()
@@ -215,9 +230,222 @@
               this.loading = false
               this.$message.success('已保存')
               this.isShow = false
               this.refreshTable()
            })
         },
      // excelExport () {
      //   let data = luckysheet.toJson()
      //   let allSheetData = luckysheet.getluckysheetfile();
      //   let sheet1 = allSheetData[0];
      //   console.log('allSheetData---', allSheetData)
      //   let downOriginData = sheet1.data;
      //   let arr = [];  // 所有的单元格数据组成的二维数组
      //   let bgConfig = {};
      //   let faObj = {};
      //   let fsObj = {};
      //   let fcObj = {};
      //   let percentageReg = /%$/;
      //   let cellValue = null;
      //
      //   //列下标 数字转字母
      //   function chatatABC(n){
      //     var orda = 'a'.charCodeAt(0);
      //     var ordz = 'z'.charCodeAt(0);
      //     var len = ordz - orda + 1;
      //     var s = "";
      //     while( n >= 0 ) {
      //       s = String.fromCharCode(n % len + orda) + s;
      //       n = Math.floor(n / len) - 1;
      //     }
      //     return s.toUpperCase();
      //   }
      //   //转化颜色
      //   function getHexColor(color) {
      //     let values = color
      //       .replace(/rgba?\(/, '')
      //       .replace(/\)/, '')
      //       .replace(/[\s+]/g, '')
      //       .split(',')
      //     let a = parseFloat(values[3] || 1),
      //       r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255),
      //       g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255),
      //       b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255)
      //     return '#' +
      //       ('0' + r.toString(16)).slice(-2) +
      //       ('0' + g.toString(16)).slice(-2) +
      //       ('0' + b.toString(16)).slice(-2)
      //   }
      //   // 获取单元格的背景色
      //   function setBackground(row, col, bg) {
      //     console.log('bg----', bg)
      //     let colA = chatatABC(col);
      //     let key = colA + (row + 1);
      //     bgConfig[key] = getHexColor(bg).replace(/\#?/, '');
      //   }
      //   // 获取单元格的字体样式
      //   function setFontStyle(row, col, fa, fs, fc) {
      //     console.log('fc---', fc)
      //     let colA = chatatABC(col);
      //     let key = colA + (row + 1);
      //     faObj[key] = fa; // 字体名称
      //     fsObj[key] = fs; // 字体大小
      //     fcObj[key] = fc ? getHexColor(fc).replace(/\#?/, '') : ''; // 字体颜色
      //   }
      //
      //   // 判断值类型是否为百分比 %
      //   function isPercentage(value) {
      //     return percentageReg.test(value.m) && value.ct && value.ct.t === 'n'
      //   }
      //
      //   // 获取二维数组
      //   for (let row = 0; row < downOriginData.length; row++) {
      //     let arrRow = [];
      //     for (let col = 0; col < downOriginData[row].length; col++) {
      //       if (cellValue != downOriginData[row][col]) {
      //         // 处理单元格的背景颜色
      //         if (downOriginData[row][col].bg) {
      //           setBackground(row, col, downOriginData[row][col].bg)
      //         }
      //         // 处理单元格字体
      //         if (downOriginData[row][col].v) {
      //           setFontStyle(row, col, downOriginData[row][col].ct.fa, downOriginData[row][col].fs, downOriginData[row][col].fc);
      //         }
      //         if (downOriginData[row][col].ct != null && downOriginData[row][col].ct.t == 'd') {
      //           //  d为时间格式  2019-01-01   或者2019-01-01 10:10:10
      //           arrRow.push(new Date(downOriginData[row][col].m.replace(/\-/g, '/'))) //兼容IE
      //         } else if (downOriginData[row][col].m && isPercentage(downOriginData[row][col])) {
      //           //百分比问题
      //           arrRow.push(downOriginData[row][col].m)
      //         } else {
      //           arrRow.push(downOriginData[row][col].v)
      //         }
      //       }
      //     }
      //     arr.push(arrRow)
      //   }
      //   let opts = {
      //     dateNF: 'm/d/yy h:mm',
      //     cellDates: true,
      //     cellStyles: true
      //   }
      //   let ws = XLSX.utils.aoa_to_sheet(arr, opts)
      //   console.log('ws----', ws)
      //   let reg = /[\u4e00-\u9fa5]/g;
      //   for (let key in ws) {
      //     let item = ws[key]
      //     if (item.t === 'd') {
      //       if (item.w) {
      //         //时间格式的设置
      //         let arr = item.w.split(' ')
      //         if (arr[1] && arr[1] == '0:00') {
      //           ws[key].z = 'm/d/yy'
      //         } else {
      //           item.z = 'yyyy/m/d h:mm:ss'
      //         }
      //       }
      //     } else if (item.t === 's') {
      //       //百分比设置格式
      //       if (item.v && !item.v.match(reg) && item.v.indexOf('%') > -1) {
      //         item.t = 'n'
      //         item.z = '0.00%'
      //         item.v = Number.parseFloat(item.v) / 100
      //       }
      //       else if (item.v && item.v.match(reg)) {
      //         //含有中文的设置居中样式
      //         item['s'] = {
      //           alignment: { vertical: 'center', horizontal: 'center' }
      //         }
      //       }
      //     }
      //     // 设置单元格样式
      //     if (bgConfig[key] && item.v) {
      //       ws[key]['s'] = {
      //         alignment: { vertical: 'center', horizontal: 'center' },
      //         fill: { fgColor: { rgb: bgConfig[key] }},
      //         border: {
      //           top: { style: 'thin', color: { theme: "1" } },
      //           bottom: { style: 'thin', color: { theme: "1" } },
      //           left: { style: 'thin', color: { theme: "1" } },
      //           right: { style: 'thin', color: { theme: "1" } }
      //         },
      //         font: {
      //           color: { rgb: fcObj[key] },
      //           size: fsObj[key],
      //           name: faObj[key],
      //         }
      //       }
      //     }
      //   }
      //   let name = 'sheet1';
      //   let tmpWB = {
      //     SheetNames: [name], //保存的表标题
      //     Sheets: {
      //       [name]: Object.assign({},ws)//内容
      //     }
      //   }
      //   let mergeConfig = sheet1.config.merge
      //   let mergeArr = [];
      //   if (JSON.stringify(mergeConfig) !== '{}') {
      //     mergeArr = handleMergeData(mergeConfig)
      //     console.log('mergeArr', mergeArr)
      //     tmpWB.Sheets[name]['!merges'] = mergeArr
      //   }
      //   //处理合并单元格config数据
      //   function handleMergeData(origin) {  let result = []
      //     if (origin instanceof Object) {
      //       var r = "r",
      //         c = "c",
      //         cs = "cs",
      //         rs = "rs";
      //       for (var key in origin) {
      //         var startR = origin[key][r];
      //         var endR = origin[key][r];
      //         var startC = origin[key][c];
      //         var endC = origin[key][c];
      //
      //         // 如果只占一行 为1 如果占两行 为2
      //         if (origin[key][cs] > 0) {
      //           endC = startC + (origin[key][cs] - 1);
      //         }
      //         if (origin[key][rs] > 0) {
      //           endR = startR + (origin[key][rs] - 1);
      //         }
      //         // s为合并单元格的开始坐标  e为结束坐标
      //         var obj = { s: { "r": startR, "c": startC }, e: { "r": endR, "c": endC } }
      //         result.push(obj)
      //       }
      //     }  return result
      //   }
      //   function s2ab(s) {
      //     if (typeof ArrayBuffer !== 'undefined') {
      //       var buf = new ArrayBuffer(s.length);
      //       var view = new Uint8Array(buf);
      //       for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
      //       return buf;
      //     } else {
      //       var buf = new Array(s.length);
      //       for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
      //       return buf;
      //     }
      //   }
      //   function saveAs(obj, fileName) {
      //     var tmpa = document.createElement("a");
      //     tmpa.download = fileName || "download";
      //     tmpa.href = URL.createObjectURL(obj);
      //     tmpa.click();
      //     setTimeout(function () {
      //       URL.revokeObjectURL(obj);
      //     }, 100);
      //   }
      //
      //   ws = new Blob(
      //     [
      //       s2ab(
      //         XLSXS.write(tmpWB, { bookType: 'xlsx', bookSST: false, type: 'binary' })//这里的数据是用来定义导出的格式类型
      //       )
      //     ]
      //   )
      //   saveAs(ws, data.title + '.xlsx')
      // },
         isClose(done) {
            this.$confirm('是否需要保存?', "警告", {
               confirmButtonText: "确定",