From 588083b5e983686cebac8da2f26dbe231b824472 Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期五, 08 九月 2023 17:45:21 +0800
Subject: [PATCH] 1.数据导入60%   实现demo

---
 src/components/UploadExcel/index.vue   |  158 +++++++++++
 src/views/basicSettings/roleList.vue   |   84 +++---
 src/views/workOrder/workOrderClose.vue |   11 
 package.json                           |    3 
 src/api/Excel.js                       |   58 ++-
 src/views/systemSetting/dataImport.vue |  452 ++++++++++++++++++++++++++++++++
 src/router/index.js                    |    7 
 src/views/basicSettings/personList.vue |    8 
 8 files changed, 703 insertions(+), 78 deletions(-)

diff --git a/package.json b/package.json
index 13f5c8b..7b65d0d 100644
--- a/package.json
+++ b/package.json
@@ -42,7 +42,8 @@
     "vue-print-nb": "^1.7.5",
     "vue-router": "3.0.6",
     "vue-splitpane": "^1.0.6",
-    "vuedraggable": "^2.24.3"
+    "vuedraggable": "^2.24.3",
+    "xlsx": "0.14.1"
   },
   "devDependencies": {
     "@aspnet/signalr": "^1.0.27",
diff --git a/src/api/Excel.js b/src/api/Excel.js
index 53e6af9..5ea8c1a 100644
--- a/src/api/Excel.js
+++ b/src/api/Excel.js
@@ -1,6 +1,15 @@
 import request from '@/utils/request'
 
-// Excel瀵煎叆妯℃澘涓嬭浇
+// 鏌ヨexcel妯℃澘
+export function ExcelModelData(data) {
+  return request({
+    url: 'ImportExcel/ExcelModelData',
+    method: 'get',
+    params: data
+  })
+}
+
+// 涓嬭浇excel妯℃澘
 export function DownLoadExcel(data) {
   return request({
     url: 'ImportExcel/DownLoadExcel',
@@ -9,29 +18,38 @@
   })
 }
 
-// Excel瀵煎叆鏂囦欢涓婁紶銆佹ā鏉块獙璇併�佹暟鎹噺銆侀獙璇�
+// Excel瀵煎叆鏁版嵁鎻愪氦銆佹ā鏉块獙璇�
 export function ExcelModelCheck(data) {
   return request({
     url: 'ImportExcel/ExcelModelCheck',
     method: 'post',
-    params: data
+    data
   })
 }
 
-// Excel瀵煎叆鏁版嵁楠岃瘉
-export function ExcelCheckData(data) {
-  return request({
-    url: 'ImportExcel/ExcelCheckData',
-    method: 'post',
-    params: data
-  })
-}
-
-// Excel瀵煎叆鏁版嵁
-export function ExcelImportSubmit(data) {
-  return request({
-    url: 'ImportExcel/ExcelImportSubmit',
-    method: 'POST',
-    params: data
-  })
-}
+// Excel瀵煎叆鏂囦欢涓婁紶銆佹ā鏉块獙璇併�佹暟鎹噺銆侀獙璇�
+// export function ExcelModelCheck(data) {
+//   return request({
+//     url: 'ImportExcel/ExcelModelCheck',
+//     method: 'post',
+//     params: data
+//   })
+// }
+//
+// // Excel瀵煎叆鏁版嵁楠岃瘉
+// export function ExcelCheckData(data) {
+//   return request({
+//     url: 'ImportExcel/ExcelCheckData',
+//     method: 'post',
+//     params: data
+//   })
+// }
+//
+// // Excel瀵煎叆鏁版嵁
+// export function ExcelImportSubmit(data) {
+//   return request({
+//     url: 'ImportExcel/ExcelImportSubmit',
+//     method: 'POST',
+//     params: data
+//   })
+// }
diff --git a/src/components/UploadExcel/index.vue b/src/components/UploadExcel/index.vue
new file mode 100644
index 0000000..5f82c34
--- /dev/null
+++ b/src/components/UploadExcel/index.vue
@@ -0,0 +1,158 @@
+<template>
+  <div>
+    <input
+      ref="excel-upload-input"
+      class="excel-upload-input"
+      type="file"
+      accept=".xlsx, .xls"
+      @change="handleClick"
+    >
+    <el-button
+      :loading="loading"
+      style="margin-left:16px;"
+      :disabled="disabled"
+      type="primary"
+      @click="handleUpload"
+    >
+      鏂囦欢涓婁紶
+    </el-button>
+  </div>
+</template>
+
+<script>
+import XLSX from 'xlsx'
+
+export default {
+  props: {
+    disabled: Boolean,
+    beforeUpload: Function, // eslint-disable-line
+    onSuccess: Function// eslint-disable-line
+  },
+  data() {
+    return {
+      loading: false,
+      excelData: {
+        header: null,
+        results: null,
+        sheetName: null
+      }
+    }
+  },
+  methods: {
+    generateData({ header, results }) {
+      this.excelData.header = header // 鐢ㄥ仛el-table琛ㄥご
+      this.excelData.results = results // 鐢ㄥ仛el-table琛ㄤ綋
+      this.onSuccess && this.onSuccess(this.excelData)
+
+      // 鏁扮粍瀵硅薄鏇存崲閿悕
+      // const aaa = JSON.parse(JSON.stringify(results))
+      // const bb = aaa.map(({
+      //   搴忓彿, 濮撳悕
+      // }) => ({
+      //   index: 搴忓彿,
+      //   name: 濮撳悕
+      // }))
+      // console.log(bb, 321)
+    },
+    handleUpload() {
+      this.$refs['excel-upload-input'].click()
+    },
+    handleClick(e) {
+      const files = e.target.files
+      const rawFile = files[0] // only use files[0]
+      if (!rawFile) return
+      this.upload(rawFile)
+    },
+    upload(rawFile) {
+      this.$refs['excel-upload-input'].value = null // fix can't select the same excel
+      if (!this.beforeUpload) {
+        this.readerData(rawFile)
+        return
+      }
+      const before = this.beforeUpload(rawFile)
+      if (before) { // 鎵ц浜�
+        this.readerData(rawFile)
+      }
+    },
+    readerData(rawFile) {
+      this.loading = true
+      return new Promise((resolve, reject) => {
+        const reader = new FileReader()
+        reader.onload = e => {
+          const data = e.target.result
+          const workbook = XLSX.read(data, { type: 'array' })
+          let worksheet = []
+          const header = []
+          const results = []
+          workbook.SheetNames.forEach((item, index) => {
+            worksheet = workbook.Sheets[item]
+            header.push(this.getHeaderRow(worksheet))
+            results.push(XLSX.utils.sheet_to_json(worksheet))
+          })
+          this.excelData.sheetName = workbook.SheetNames
+          // console.log(header)
+          // console.log(results)
+          // const firstSheetName = workbook.SheetNames[0]
+          // const worksheet = workbook.Sheets[firstSheetName]
+          // const header = this.getHeaderRow(worksheet)
+          // const results = XLSX.utils.sheet_to_json(worksheet)
+          this.generateData({ header, results })
+          this.loading = false
+          resolve()
+        }
+        reader.readAsArrayBuffer(rawFile)
+      })
+    },
+    getHeaderRow(sheet) {
+      const headers = []
+      const range = XLSX.utils.decode_range(sheet['!ref'])
+      let C
+      const R = range.s.r
+      /* start in the first row */
+      for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
+        const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
+        /* find the cell in the first row */
+        let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
+        if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
+        headers.push(hdr)
+      }
+      return headers
+    },
+    isExcel(file) {
+      return /\.(xlsx|xls|csv)$/.test(file.name)
+    }
+  }
+}
+</script>
+
+<style scoped>
+.excel-upload-input {
+  display: none;
+  z-index: -9999;
+}
+
+.drop {
+  border: 2px dashed #bbb;
+  width: 600px;
+  height: 160px;
+  line-height: 160px;
+  margin: 0 auto;
+  font-size: 24px;
+  border-radius: 5px;
+  text-align: center;
+  color: #bbb;
+  position: relative;
+}
+
+</style>
+
+<style>
+
+/*.has-gutter{*/
+/*  color:  #34bfa3 !important;*/
+/*}*/
+
+/*.is-leaf{*/
+/*  background-color: #34bfa3 !important;*/
+/*}*/
+</style>
diff --git a/src/router/index.js b/src/router/index.js
index 1c2b7e5..0168fa4 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -450,6 +450,13 @@
         code: '0802',
         component: () => import('@/views/systemSetting/encodingRules'),
         meta: { code: '0802', title: '缂栫爜瑙勫垯', icon: '', keepAlive: true }
+      },
+      {
+        path: 'dataImport',
+        name: 'dataImportCancel',
+        code: '0803',
+        component: () => import('@/views/systemSetting/dataImport'),
+        meta: { code: '0803', title: '鏁版嵁瀵煎叆', icon: '', keepAlive: true }
       }
     ]
   }
diff --git a/src/views/basicSettings/personList.vue b/src/views/basicSettings/personList.vue
index 4635050..f7602ea 100644
--- a/src/views/basicSettings/personList.vue
+++ b/src/views/basicSettings/personList.vue
@@ -149,8 +149,8 @@
                 sortable="custom"
               >
                 <template slot-scope="{row}">
-                  <el-tag v-if="row.status==='Y'" size="small" type="success">姝e父</el-tag>
-                  <el-tag v-if="row.status==='N'" size="small" type="danger">鍋滅敤</el-tag>
+                  <el-tag v-if="row.status==='Y'" size="small" type="success">鍦ㄨ亴</el-tag>
+                  <el-tag v-if="row.status==='N'" size="small" type="danger">绂昏亴</el-tag>
                 </template>
               </el-table-column>
               <el-table-column
@@ -300,8 +300,8 @@
 
         <el-form-item required label="鐢ㄦ埛鐘舵��">
           <el-radio-group v-model="dialogForm.status" style="width: 200px;">
-            <el-radio label="Y">姝e父</el-radio>
-            <el-radio label="N">鍋滅敤</el-radio>
+            <el-radio label="Y">鍦ㄨ亴</el-radio>
+            <el-radio label="N">绂昏亴</el-radio>
           </el-radio-group>
         </el-form-item>
 
diff --git a/src/views/basicSettings/roleList.vue b/src/views/basicSettings/roleList.vue
index c6ff9a3..272698c 100644
--- a/src/views/basicSettings/roleList.vue
+++ b/src/views/basicSettings/roleList.vue
@@ -190,55 +190,55 @@
           <el-input v-model="dialogForm.rolename" style="width: 200px" />
         </el-form-item>
 
-<!--        <el-form-item required label="鏁版嵁鑼冨洿">-->
-<!--          <el-select-->
-<!--            v-model="dialogForm.datacode"-->
-<!--            style="width:200px"-->
-<!--            placeholder="璇烽�夋嫨"-->
-<!--            :popper-append-to-body="false"-->
-<!--          >-->
-<!--            <el-option-->
-<!--              v-for="item in datacodeArr"-->
-<!--              :key="item.datacode"-->
-<!--              :label="item.dataname"-->
-<!--              :value="item.datacode"-->
-<!--            />-->
-<!--          </el-select>-->
-<!--        </el-form-item>-->
+        <!--        <el-form-item required label="鏁版嵁鑼冨洿">-->
+        <!--          <el-select-->
+        <!--            v-model="dialogForm.datacode"-->
+        <!--            style="width:200px"-->
+        <!--            placeholder="璇烽�夋嫨"-->
+        <!--            :popper-append-to-body="false"-->
+        <!--          >-->
+        <!--            <el-option-->
+        <!--              v-for="item in datacodeArr"-->
+        <!--              :key="item.datacode"-->
+        <!--              :label="item.dataname"-->
+        <!--              :value="item.datacode"-->
+        <!--            />-->
+        <!--          </el-select>-->
+        <!--        </el-form-item>-->
         <el-form-item required label="鐘舵��">
           <el-radio-group v-model="dialogForm.status" style="width: 200px">
             <el-radio label="Y">姝e父</el-radio>
             <el-radio label="N">鍋滅敤</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item v-if="dialogForm.datacode==='CUSTOM'" label="鏁版嵁鏉冮檺" style="margin: 0">
-          <el-checkbox-group v-model="checkboxGroupSelected" @change="checkboxGroupChange">
-            <el-checkbox v-for="item in checkboxGroup" :key="item" :label="item">
-              {{ item }}
-              <el-tooltip class="item" effect="dark" content="鍕鹃�夌埗鑺傜偣鏄惁鍚屾椂閫変腑瀛愯妭鐐�" placement="top">
-                <i v-if="item==='鐖跺瓙鑱斿姩'" class="el-icon-question" />
-              </el-tooltip>
-            </el-checkbox>
-          </el-checkbox-group>
-        </el-form-item>
-        <el-card
-          v-if="dialogForm.datacode==='CUSTOM'"
-          class="box-card"
-          shadow="never"
-          style="margin-bottom: 30px;width: 78%;margin-left: 12%;"
-        >
+        <!--        <el-form-item v-if="dialogForm.datacode==='CUSTOM'" label="鏁版嵁鏉冮檺" style="margin: 0">-->
+        <!--          <el-checkbox-group v-model="checkboxGroupSelected" @change="checkboxGroupChange">-->
+        <!--            <el-checkbox v-for="item in checkboxGroup" :key="item" :label="item">-->
+        <!--              {{ item }}-->
+        <!--              <el-tooltip class="item" effect="dark" content="鍕鹃�夌埗鑺傜偣鏄惁鍚屾椂閫変腑瀛愯妭鐐�" placement="top">-->
+        <!--                <i v-if="item==='鐖跺瓙鑱斿姩'" class="el-icon-question" />-->
+        <!--              </el-tooltip>-->
+        <!--            </el-checkbox>-->
+        <!--          </el-checkbox-group>-->
+        <!--        </el-form-item>-->
+        <!--        <el-card-->
+        <!--          v-if="dialogForm.datacode==='CUSTOM'"-->
+        <!--          class="box-card"-->
+        <!--          shadow="never"-->
+        <!--          style="margin-bottom: 30px;width: 78%;margin-left: 12%;"-->
+        <!--        >-->
 
-          <el-tree
-            ref="tree"
-            :key="checkboxGroupSelected.toString()"
-            :data="treeData"
-            show-checkbox
-            :check-strictly="!checkboxGroupSelected.includes('鐖跺瓙鑱斿姩')"
-            :default-expand-all="checkboxGroupSelected.includes('灞曞紑/鎶樺彔')"
-            node-key="torg_code"
-            :props="defaultProps"
-          />
-        </el-card>
+        <!--          <el-tree-->
+        <!--            ref="tree"-->
+        <!--            :key="checkboxGroupSelected.toString()"-->
+        <!--            :data="treeData"-->
+        <!--            show-checkbox-->
+        <!--            :check-strictly="!checkboxGroupSelected.includes('鐖跺瓙鑱斿姩')"-->
+        <!--            :default-expand-all="checkboxGroupSelected.includes('灞曞紑/鎶樺彔')"-->
+        <!--            node-key="torg_code"-->
+        <!--            :props="defaultProps"-->
+        <!--          />-->
+        <!--        </el-card>-->
 
         <el-form-item label="澶囨敞">
           <el-input v-model="dialogForm.description" type="textarea" style="width:500px" />
diff --git a/src/views/systemSetting/dataImport.vue b/src/views/systemSetting/dataImport.vue
new file mode 100644
index 0000000..6462bdf
--- /dev/null
+++ b/src/views/systemSetting/dataImport.vue
@@ -0,0 +1,452 @@
+<template>
+  <div class="" :style="{height:mainHeight+'px'}">
+
+    <div style="display: flex;margin: 20px 10px;">
+
+      <el-select
+        v-model="excelCode"
+        style="width:200px"
+        placeholder="璇烽�夋嫨妯℃澘鏂囦欢"
+        :popper-append-to-body="false"
+        clearable
+      >
+        <el-option
+          v-for="item in excelArr"
+          :key="item.fileCode"
+          :label="item.fileName"
+          :value="item.fileCode"
+        />
+      </el-select>
+
+      <el-button
+        type="primary"
+        style="margin-left: 20px"
+        :disabled="excelCode===''"
+        @click="getExcel"
+      >涓嬭浇妯℃澘
+      </el-button>
+
+      <upload-excel-component
+        :on-success="handleSuccess"
+        :before-upload="beforeUpload"
+        :disabled="excelCode===''"
+      />
+
+      <el-button
+        type="info"
+        style="margin-left: 20px"
+        :disabled="excelCode===''"
+        @click="reset"
+      >閲嶇疆
+      </el-button>
+
+      <el-button
+        type="primary"
+        style="margin-left: 20px"
+        :disabled="excelCode===''"
+        @click="submit"
+      >鎻愪氦
+      </el-button>
+
+    </div>
+
+    <div
+      v-if="sheetName.length>0"
+      style="margin: 10px"
+    >
+
+      <el-tabs type="border-card">
+        <el-tab-pane
+          v-for="(i,j) in sheetName"
+          :key="i+j"
+          :label="i"
+        >
+          <!--          height:(mainHeight-180)+'px',-->
+          <el-table
+            ref="tableDataRef"
+            :data="tableData[j]"
+            border
+            :height="(mainHeight-180)+'px'"
+            :header-cell-style="headerCellStyle"
+            :cell-style="cellStyle"
+            :style="{width: 100+'%',height:(mainHeight-180)+'px',zIndex:10}"
+            style="overflow-y: scroll;"
+            highlight-current-row
+          >
+            <!--          <el-table-column-->
+            <!--            type="selection"-->
+            <!--            width="55"-->
+            <!--          />-->
+            <el-table-column
+              type="index"
+              label="搴忓彿"
+              width="55"
+              fixed
+              align="center"
+            />
+
+            <el-table-column
+              v-for="item of tableHeader[j]"
+              :key="item"
+              :prop="item"
+              :label="item"
+              align="center"
+              :render-header="addRedStar"
+              width="220"
+            >
+              <template slot-scope="{row}">
+
+                <div
+                  v-if="item.indexOf('鐢ㄦ埛缂栧彿(鍞竴)')!==-1||
+                    item.indexOf('鐢ㄦ埛濮撳悕')!==-1||
+                    item.indexOf('瀵嗙爜')!==-1||
+                    item.indexOf('鎵嬫満鍙�')!==-1||
+                    item.indexOf('閭')!==-1
+                  "
+                >
+                  <el-input v-model="row[item]" placeholder="璇疯緭鍏�" />
+                </div>
+                <div v-else-if="item.indexOf('鍦ㄨ亴鐘舵��')!==-1">
+                  <el-select
+                    v-model="row[item]"
+                    placeholder="璇烽�夋嫨"
+                    filterable
+                    clearable
+                  >
+                    <el-option
+                      v-for="item in statusArr"
+                      :key="item.code"
+                      :label="item.name"
+                      :value="item.code"
+                    />
+                  </el-select>
+                </div>
+
+                <div v-else-if="item.indexOf('鎵�灞炲矖浣嶇紪鐮�')!==-1">
+                  <el-select
+                    v-model="row[item]"
+                    style="width: 100%;"
+                    placeholder="璇烽�夋嫨"
+                    multiple
+                    filterable
+                    collapse-tags
+                    clearable
+                  >
+
+                    <el-option
+                      v-for="item in postArr"
+                      :key="item.postcode"
+                      :label="item.postname"
+                      :value="item.postcode"
+                    />
+                  </el-select>
+                </div>
+                <div v-else-if="item.indexOf('鎵�灞炶鑹茬紪鐮�')!==-1">
+                  <el-select
+                    v-model="row[item]"
+                    style="width: 100%;"
+                    placeholder="璇烽�夋嫨"
+                    multiple
+                    filterable
+                    collapse-tags
+                    clearable
+                  >
+                    <el-option
+                      v-for="item in roleArr"
+                      :key="item.rolecode"
+                      :label="item.rolename"
+                      :value="item.rolecode"
+                    />
+                  </el-select>
+                </div>
+                <div v-else-if="item.indexOf('鎵�灞炵彮缁勭紪鐮�')!==-1">
+                  <el-select
+                    v-model="row[item]"
+                    style="width: 100%;"
+                    placeholder="璇烽�夋嫨"
+                    collapse-tags
+                    multiple
+                    filterable
+                    clearable
+                  >
+                    <el-option
+                      v-for="item in groupArr"
+                      :key="item.usergroupcode"
+                      :label="item.usergroupname"
+                      :value="item.usergroupcode"
+                    />
+                  </el-select>
+                </div>
+                <div v-else-if="item.indexOf('鎵�灞炵粍缁囩紪鐮�')!==-1">
+                  <el-select
+                    v-model="row[item]"
+                    style="width: 100%;"
+                    placeholder="璇烽�夋嫨"
+                    filterable
+                    clearable
+                  >
+                    <el-option
+                      v-for="item in orgArr"
+                      :key="item.torg_code"
+                      :label="item.torg_name"
+                      :value="item.torg_code"
+                    />
+                  </el-select>
+                </div>
+                <div v-else> {{ row[item] }}</div>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="鎿嶄綔"
+              width="120"
+              fixed="right"
+            />
+          </el-table>
+        </el-tab-pane>
+      </el-tabs>
+
+    </div>
+
+    <!--    <div v-for="(i,j) in tableHeader" :key="i">-->
+    <!--      <el-table :data="tableData[j]" border highlight-current-row style="width: 100%;margin-top:20px;">-->
+    <!--        <el-table-column v-for="item of tableHeader[j]" :key="item" :prop="item" :label="item" />-->
+    <!--      </el-table>-->
+    <!--    </div>-->
+  </div>
+</template>
+
+<script>
+import UploadExcelComponent from '@/components/UploadExcel/index.vue'
+import { DownLoadExcel, ExcelModelCheck, ExcelModelData } from '@/api/Excel'
+import { GroupsPermissions, PostPermissions, PrentOrganization, RolePermissions } from '@/api/GeneralBasicData'
+
+export default {
+  name: 'UploadExcel',
+  components: { UploadExcelComponent },
+  data() {
+    return {
+      mainHeight: window.innerHeight - 85,
+
+      tableData: [],
+      tableHeader: [],
+      sheetName: [],
+
+      excelCode: '',
+      excelArr: [],
+
+      statusArr: [
+        { code: 'Y', name: '鍦ㄨ亴' },
+        { code: 'N', name: '绂昏亴' }
+      ],
+      orgArr: [], // 缁勭粐
+      postArr: [], // 宀椾綅
+      roleArr: [], // 瑙掕壊
+      groupArr: []// 鐝粍
+
+    }
+  },
+  mounted() {
+    this.getExcelModelData()
+
+    this.getSelectArr()
+    window.addEventListener('resize', this.getHeight)
+  },
+  methods: { // 鑾峰彇椤甸潰楂樺害
+    getHeight() {
+      this.$nextTick(() => {
+        this.mainHeight = window.innerHeight - 85
+
+        // this.$nextTick(() => {
+        //   this.$refs.tableDataRef.doLayout()
+        // })
+      })
+    },
+    async beforeUpload(file) {
+      const isLt1M = file.size / 1024 / 1024 < 1
+      if (isLt1M) {
+        return true
+      }
+
+      this.$message({
+        message: 'Please do not upload files larger than 1m in size.',
+        type: 'warning'
+      })
+      return false
+    },
+    async handleSuccess({ results, header, sheetName }) {
+      this.tableData = results
+      this.tableHeader = header
+      this.sheetName = sheetName
+
+      // 鐢ㄦ埛娓呭崟瀵煎叆鍒ゆ柇
+      if (this.sheetName.indexOf('鐢ㄦ埛娓呭崟') !== -1) {
+        const postArr = this.postArr.map(i => i.postcode)
+        const roleArr = this.roleArr.map(i => i.rolecode)
+        const groupArr = this.groupArr.map(i => i.usergroupcode)
+        const orgArr = this.orgArr.map(i => i.torg_code)
+        this.tableData[this.sheetName.indexOf('鐢ㄦ埛娓呭崟')].forEach(j => {
+          j.鎵�灞炲矖浣嶇紪鐮� = j.鎵�灞炲矖浣嶇紪鐮�.split(',').filter(e => postArr.includes(e))
+          j.鎵�灞炶鑹茬紪鐮� = j.鎵�灞炶鑹茬紪鐮�.split(',').filter(e => roleArr.includes(e))
+          j.鎵�灞炵彮缁勭紪鐮� = j.鎵�灞炵彮缁勭紪鐮�.split(',').filter(e => groupArr.includes(e))
+          j['*鎵�灞炵粍缁囩紪鐮�'] = orgArr.includes(j['*鎵�灞炵粍缁囩紪鐮�']) ? j['*鎵�灞炵粍缁囩紪鐮�'] : ''
+          j['*鍦ㄨ亴鐘舵��'] = this.statusArr.find(e => e.name === j['*鍦ㄨ亴鐘舵��']).code
+        })
+      }
+    },
+    async getExcelModelData() {
+      const { data: res } = await ExcelModelData()
+      this.excelArr = res
+    },
+    async getExcel() {
+      const res = await DownLoadExcel({ FileCode: this.excelCode })
+      window.location.href = res.data
+    },
+    submit() {
+      // console.log(this.excelCode)
+      // console.log(JSON.stringify(this.sheetName))
+      // console.log(JSON.stringify(this.tableHeader))
+      // console.log(JSON.stringify(this.tableData))
+
+      this.$confirm('鏄惁纭鎻愪氦?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        let flag = true
+        let msg = ''
+        if (this.sheetName.indexOf('鐢ㄦ埛娓呭崟') !== -1) {
+          // if ([...new Set(this.tableData[0].filter(i => i['*鐢ㄦ埛缂栧彿(鍞竴)'] !== '').map(i => i['*鐢ㄦ埛缂栧彿(鍞竴)']))].length !== this.tableData[0].length) {
+          if ([...new Set(this.tableData[0].map(i => i['*鐢ㄦ埛缂栧彿(鍞竴)']))].length !== this.tableData[0].length) {
+            return this.$message.info('缂栫爜涓嶈兘閲嶅锛�')
+          }
+          this.tableData[0].forEach(j => {
+            if (j['*鐢ㄦ埛缂栧彿(鍞竴)'].trim() === '') {
+              flag = false
+              msg = '*鐢ㄦ埛缂栧彿(鍞竴)'
+            }
+            if (j['*鐢ㄦ埛濮撳悕'].trim() === '') {
+              flag = false
+              msg = '*鐢ㄦ埛濮撳悕'
+            }
+            if (j['*瀵嗙爜'].trim() === '') {
+              flag = false
+              msg = '*瀵嗙爜'
+            }
+            if (j['*鍦ㄨ亴鐘舵��'].trim() === '') {
+              flag = false
+              msg = '*鍦ㄨ亴鐘舵��'
+            }
+            if (j['*鎵�灞炵粍缁囩紪鐮�'].trim() === '') {
+              flag = false
+              msg = '*鎵�灞炵粍缁囩紪鐮�'
+            }
+          })
+
+          if (!flag) {
+            return this.$message.info(msg + '涓嶈兘涓虹┖锛�')
+          }
+
+          this.tableData[0].forEach(j => {
+            j.鎵�灞炲矖浣嶇紪鐮� = j.鎵�灞炲矖浣嶇紪鐮�.join(',')
+            j.鎵�灞炵彮缁勭紪鐮� = j.鎵�灞炵彮缁勭紪鐮�.join(',')
+            j.鎵�灞炶鑹茬紪鐮� = j.鎵�灞炶鑹茬紪鐮�.join(',')
+          })
+        }
+        const data = {
+          fileCode: this.excelCode,
+          tableData: this.tableData
+        }
+        // console.log(JSON.stringify(this.tableData))
+        ExcelModelCheck(data).then(res => {
+          if (res.code === '200') {
+            this.$notify.success('鎻愪氦鎴愬姛!')
+            this.tableData = []
+            this.tableHeader = []
+            this.sheetName = []
+            this.excelCode = ''
+          }
+        })
+      }).catch(() => {
+        this.$notify.info('宸插彇娑堟彁浜わ紒')
+      })
+    },
+    reset() {
+      this.tableData = []
+      this.tableHeader = []
+      this.sheetName = []
+      this.excelCode = ''
+    },
+    async getSelectArr() {
+      await this.getPrentOrganization()
+      await this.getPostPermissions()
+      await this.getRolePermissions()
+      await this.getGroupsPermissions()
+    },
+    // 缁勭粐鏋舵瀯绾ц仈閫夋嫨鍣�
+    async getPrentOrganization() {
+      const { data: res } = await PrentOrganization()
+      this.orgArr = res
+      // this.cascaderOptions = arrayToTree(res, {
+      //   parentProperty: 'parent_id',
+      //   customID: 'torg_code',
+      //   childrenProperty: 'children'
+      // })
+    },
+    // 鑾峰彇宀椾綅涓嬫媺鏁扮粍
+    async getPostPermissions() {
+      const { data: res } = await PostPermissions()
+      this.postArr = res
+    },
+    // 鑾峰彇瑙掕壊涓嬫媺鏁扮粍
+    async getRolePermissions() {
+      const { data: res } = await RolePermissions()
+      this.roleArr = res
+    },
+    // 鑾峰彇鐝粍涓嬫媺鏁扮粍
+    async getGroupsPermissions() {
+      const { data: res } = await GroupsPermissions()
+      this.groupArr = res
+    },
+    headerCellStyle({ row, column, rowIndex, columnIndex }) {
+      let string = ''
+      if (column.label.indexOf('*') !== -1 && rowIndex === 0) {
+        string = 'background:#ffc000;'
+      } else if (column.label.indexOf('*') === -1 && rowIndex === 0) {
+        string = 'background:#00b0f0;'
+      }
+      return string + 'padding: 5px 0; fontWeight: 500;'
+    },
+    cellStyle() {
+      const option = {
+        padding: '5px 0'
+      }
+      return option
+    },
+    addRedStar(h, { column }) {
+      if (column.label.indexOf('*') !== -1) { // 蹇呭~瀛楁
+        return [
+          h('span', { style: 'color:#F56C6C' }, ' * '),
+          h('span', { style: 'color:#FFF' }, column.label.substring(1))
+        ]
+      } else { // 闈炲繀濉瓧娈�
+        return [
+          // h('span', { style: 'color:#F56C6C' }, ' * '),
+          h('span', { style: 'color:#FFF' }, column.label)
+        ]
+      }
+    }
+
+  }
+}
+</script>
+
+<style scoped lang="scss">
+//::v-deep .el-table__body-wrapper {
+  //overflow-y: auto;
+  //overflow-x: scroll !important;
+  //height: calc(100% - 34px);
+  //width: 100% !important;
+//}
+
+</style>
+
diff --git a/src/views/workOrder/workOrderClose.vue b/src/views/workOrder/workOrderClose.vue
index 753842b..e69de29 100644
--- a/src/views/workOrder/workOrderClose.vue
+++ b/src/views/workOrder/workOrderClose.vue
@@ -1,11 +0,0 @@
-<template />
-
-<script>
-export default {
-  name: 'WorkOrderClose'
-}
-</script>
-
-<style scoped>
-
-</style>

--
Gitblit v1.9.3