Sfoglia il codice sorgente

台账管理页面-上传导入等

rui.jiang 1 anno fa
parent
commit
6211f48b0f

+ 41 - 2
src/api/ledger.js

@@ -322,7 +322,7 @@ export function delWindFieldById(data) {
 
 // 。。。。。。。。。。。。。。。。。。。。。上传下载
 
-// 风机下载模板
+// 下载模板
 export function getAllTemplate(data) {
   return request({
     url: '/energy-manage-service/sysTemplate/getAllTemplate',
@@ -330,7 +330,7 @@ export function getAllTemplate(data) {
     data
   })
 }
-// 机上传附件
+// 机上传附件
 export function powerWordCriterionImportData(data) {
   return request({
     url: '/energy-manage-service/api/powerword/criterion/powerWordCriterionImportData',
@@ -347,3 +347,42 @@ export function uploadFile(data) {
     data
   })
 }
+
+// 风场导入
+export function windFieldImportData(data) {
+  return request({
+    url: '/energy-manage-service/api/wind/field/windFieldImportData',
+    method: 'post',
+    data: jsonToFormData(data)
+  })
+}
+                                                                                                                                                                       
+
+// 合同附件提交
+export function powerWordContractImportData(data) {
+  return request({
+    url: '/energy-manage-service/api/powerword/contract/powerWordContractImportData',
+    method: 'post',
+    data: jsonToFormData(data)
+  })
+}
+
+
+// 风场导入
+export function windEngineGroupImportData(data) {
+  return request({
+    url: '/energy-manage-service/api/wind/engine/group/windEngineGroupImportData',
+    method: 'post',
+    data: jsonToFormData(data)
+  })
+}
+
+
+// 风场资源文件上传
+export function saveWindFieldResource(data) {
+  return request({
+    url: '/energy-manage-service/api/wind/field/saveWindFieldResource',
+    method: 'post',
+    data
+  })
+}

+ 1 - 1
src/views/admin/cockpitManage/Index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="map-ditu">
-    <!-- <Tmap ref="map" @feature-click="featureClick"></Tmap> -->
+    <Tmap ref="map" @feature-click="featureClick"></Tmap>
     <div class="ledata">
       <el-input v-model="treeval" @focus="showTree = true"></el-input>
       <div class="Showtree">

+ 1 - 1
src/views/admin/cockpitManage/electronicMap.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="map-ditu">
-    <!-- <Tmap ref="map"></Tmap> -->
+    <Tmap ref="map"></Tmap>
     <!-- <router-view></router-view> -->
   </div>
 </template>

+ 63 - 63
src/views/home/components/mockData.js

@@ -114,69 +114,69 @@ export const orgList = [
       },
     ],
   },
-  // {
-  //   name: "台账管理",
-  //   iconName: "Ledger",
-  //   path: "Ledger",
-  //   meta: {
-  //     hidden: false,
-  //   },
-  //   id: "4",
-  //   component: () =>
-  //     import(/*webpackChunkName:'system'*/ "@/views/system/index.vue"),
-  //   children: [
-  //     {
-  //       id: 41,
-  //       name: "企业信息",
-  //       path: "enterprise",
-  //       meta: {
-  //         hidden: false,
-  //       },
-  //       component: () =>
-  //         import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/enterprise.vue"),
-  //     },
-  //     {
-  //       id: 42,
-  //       name: "风场信息",
-  //       path: "windsite",
-  //       meta: {
-  //         hidden: false,
-  //       },
-  //       component: () =>
-  //         import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/windsite.vue"),
-  //     },
-  //     {
-  //       id: 43,
-  //       name: "风机信息",
-  //       path: "draught",
-  //       meta: {
-  //         hidden: false,
-  //       },
-  //       component: () =>
-  //         import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/draught.vue"),
-  //     },
-  //     {
-  //       id: 44,
-  //       name: "机型信息",
-  //       path: "milltype",
-  //       meta: {
-  //         hidden: false,
-  //       },
-  //       component: () =>
-  //         import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/milltype.vue"),
-  //     },
-  //     {
-  //       id: 45,
-  //       name: "测风塔信息",
-  //       path: "anemometer",
-  //       meta: {
-  //         hidden: false,
-  //       },
-  //       component: () =>
-  //         import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/anemometer.vue"),
-  //     },
-  //   ],
-  // },
+  {
+    name: "台账管理",
+    iconName: "Ledger",
+    path: "Ledger",
+    meta: {
+      hidden: false,
+    },
+    id: "4",
+    component: () =>
+      import(/*webpackChunkName:'system'*/ "@/views/system/index.vue"),
+    children: [
+      {
+        id: 41,
+        name: "企业信息",
+        path: "enterprise",
+        meta: {
+          hidden: false,
+        },
+        component: () =>
+          import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/enterprise.vue"),
+      },
+      {
+        id: 42,
+        name: "风场信息",
+        path: "windsite",
+        meta: {
+          hidden: false,
+        },
+        component: () =>
+          import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/windsite.vue"),
+      },
+      {
+        id: 43,
+        name: "风机信息",
+        path: "draught",
+        meta: {
+          hidden: false,
+        },
+        component: () =>
+          import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/draught.vue"),
+      },
+      {
+        id: 44,
+        name: "机型信息",
+        path: "milltype",
+        meta: {
+          hidden: false,
+        },
+        component: () =>
+          import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/milltype.vue"),
+      },
+      {
+        id: 45,
+        name: "测风塔信息",
+        path: "anemometer",
+        meta: {
+          hidden: false,
+        },
+        component: () =>
+          import(/*webpackChunkName:'Ledger'*/ "@/views/ledger/anemometer.vue"),
+      },
+    ],
+  },
   {
     name: "权限管理",
     iconName: "jurisdiction",

+ 2 - 2
src/views/ledger/anemometer.vue

@@ -353,16 +353,16 @@ export default {
         anemometerName: this.anemometerName,
         latitude: this.latitude,
         longitude: this.longitude,
-        anemometerTowerHeightDtoList: this.anemometerTowerHeightDtoList
       }
-
       if (!this.isEdit) {
+        paramsData.anemometerTowerHeightDtoList=this.anemometerTowerHeightDtoList
         createAnemometerTower(paramsData).then((res) => {
           this.nuedialog = false
           this.$message.success('新增成功')
           this.onSubmit()
         })
       } else {
+        paramsData.anemometerTowerHeightListDtos=this.anemometerTowerHeightDtoList
         paramsData.anemometerCode = this.detail.anemometerCode
         // delete objectval.parentCode
         updateAnemometerTower(paramsData).then((res) => {

+ 35 - 8
src/views/ledger/component/windsiteMessage.vue

@@ -36,21 +36,26 @@
                 </div>
             </div>
             <div class="attachment">
-                <p>下载合同功率曲线附件</p>
+                <p class="model-center" @click="download">合同功率曲线附件下载</p>
 
             </div>
             <p>下载资源文件附件</p>
-            <el-table :data="tableData" style="width: 100%">
-                <el-table-column prop="" label="文件名" width="180">
+            <el-table :data="unusualdialogdata.windFieldResourceVos
+                " style="width: 100%">
+                <el-table-column prop="fileName" label="文件名">
                 </el-table-column>
-                <el-table-column prop="" label="文件类型" width="180">
+                <el-table-column prop="type" label="文件类型">
                 </el-table-column>
-                <el-table-column prop="" label="文件大小"> </el-table-column>
+
                 <el-table-column fixed="right" label="操作" width="120">
                     <template slot-scope="scope">
+                        <el-button @click.native.prevent="resource(scope.row)" type="text" size="small">
+                            下载
+                        </el-button>
                         <el-button @click.native.prevent="deleteRow(scope.row)" type="text" size="small">
                             删除
                         </el-button>
+
                     </template>
                 </el-table-column>
             </el-table>
@@ -74,6 +79,7 @@ export default {
         return {
             tableData: [],
             anemometerText: "",
+            AllTemplateurl: "",
         }
     },
 
@@ -106,7 +112,25 @@ export default {
 
             // 将结果赋值给 anemometerText
             this.anemometerText = anemometerNames;
-        }
+        },
+        // 下载附件
+        download() {
+            if (this.unusualdialogdata.powerContractUrl) {
+                const link = document.createElement('a')
+                link.href = this.unusualdialogdata.powerContractUrl
+                link.download = '' // 可以设置默认下载文件名
+                link.target = '_blank' // 新窗口打开
+                document.body.appendChild(link)
+                link.click()
+                document.body.removeChild(link)
+            } else {
+                console.error('URL is not set')
+            }
+        },
+        // 测试玩
+        resource(row) {
+       
+        },
     }
 }
 </script>
@@ -147,9 +171,12 @@ export default {
     display: flex;
     padding-top: 10px;
 
-    p {
-        margin-right: 20px;
+    .model-center {
         color: #409eff;
+        cursor: pointer;
+        line-height: 40px;
+        height: 40px;
+        font-size: 14px;
     }
 }
 </style>

+ 100 - 18
src/views/ledger/component/windsitetolead.vue

@@ -1,22 +1,23 @@
 <template>
     <div>
         <el-dialog title="导入文件" :visible.sync="localtolead" width="400px" @close="handleClose">
+            <el-alert title="请点击模板下载文件附件" type="success" :closable="false">
+            </el-alert>
+            <p class="model-center" @click="download">模板下载</p>
             <div class="UPcondition">
                 <p>上级单位:</p>
-                <el-select v-model="superior" placeholder="请选择">
-                    <el-option v-for="item in superiorOptions" :key="item.value" :label="item.label"
-                        :value="item.value">
-                    </el-option>
-                </el-select>
+                <selecttree placeholder="请选择上级单位" :list="parentOptdata" v-model="companyCode" @change="parentChange">
+                </selecttree>
             </div>
-     
 
-            <el-upload class="upload-demo" :file-list="fileList" drag
-                action="https://jsonplaceholder.typicode.com/posts/" multiple>
+
+            <el-upload class="upload-demo" :file-list="fileList" drag action :multiple="false"
+                :before-upload="beforeUpload" :limit="1" :auto-upload="false" :on-change="handleOnChange"
+                accept=".xlsx">
                 <i class="el-icon-upload"></i>
                 <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
                 <div class="el-upload__tip" slot="tip">
-                    只能上传jpg/png文件,且不超过500kb
+                    只能上传xlsx文件,且不超过5MB
                 </div>
             </el-upload>
             <span slot="footer" class="dialog-footer">
@@ -27,12 +28,32 @@
 </template>
 
 <script>
+import selecttree from "../../../components/selecttree.vue"
+import {
+
+    windFieldImportData
+
+} from '@/api/ledger.js'
 export default {
+    components: {
+
+        selecttree,
+    },
+
     props: {
         tolead: {
             type: Boolean,
             default: false
-        }
+        },
+        parentOptdata: {
+            type: Array,
+            default: () => []
+        },
+        AllTemplateurl: {
+            type: Object,
+            default: () => { }
+        },
+
     },
     computed: {
         localtolead: {
@@ -47,35 +68,88 @@ export default {
     },
     data() {
         return {
+            companyCode: "",
             superior: "",
             superiorOptions: [],
             fileList: [
-                {
-                    name: "food.jpeg",
-                    url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
-                },
-
             ],
+       
         }
     },
+
     methods: {
+
         rowStyle() {
             return "text-align:center";
         },
+
+        // 下载附件
+        download() {
+            if (this.AllTemplateurl.field) {
+                const link = document.createElement('a')
+                link.href = this.AllTemplateurl.field
+                link.download = '' // 可以设置默认下载文件名
+                link.target = '_blank' // 新窗口打开
+                document.body.appendChild(link)
+                link.click()
+                document.body.removeChild(link)
+            } else {
+                console.error('URL is not set')
+            }
+        },
+
         handleClose() {
             this.$emit('handleClose', false, 'tolead');
         }
-        ,    // 附件提交
+        ,
+        // 附件提交
         filesubmit() {
-            this.$emit('handleClose', false, 'tolead');
+            console.log(this.globalFileList)
+            let filedata = {
+                companyCode: this.companyCode,
+                file: this.globalFileList
+            }
+            windFieldImportData(filedata).then((res) => {
+                console.log(res, 'rrr')
+                this.$message.success('上传成功')
+                this.$emit('handleClose', false, 'tolead');
+                this.$emit('onSubmit');
+            })
         },
-    }
+
+
+        parentChange(data) {
+            //data为当前选中对象`
+            console.log(data);
+        },
+        // 附件验证
+        beforeUpload(fileList) {
+            const isXLSX =
+                fileList.type ===
+                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+            if (!isXLSX) {
+                this.$message.error('只能上传xlsx文件')
+            }
+            const isLt5MB = fileList.size / 1024 / 1024 < 5
+            if (!isLt5MB) {
+                this.$message.error('文件大小不能超过5MB')
+            }
+            console.log(fileList, 'fileList')
+            return isXLSX && isLt5MB
+        },
+        handleOnChange(fileList) {
+            console.log(fileList)
+            this.globalFileList = fileList.raw
+        }
+    },
+
 }
 </script>
 
 <style lang="scss" scoped>
 .UPcondition {
     display: flex;
+    margin-bottom: 10px;
 
     p {
         width: 74px;
@@ -92,4 +166,12 @@ export default {
         margin-bottom: 20px;
     }
 }
+
+.model-center {
+    color: #409eff;
+    cursor: pointer;
+    line-height: 40px;
+    height: 40px;
+    font-size: 14px;
+}
 </style>

+ 182 - 25
src/views/ledger/component/windsiteup.vue

@@ -3,41 +3,76 @@
         <el-dialog title="上传文件" :visible.sync="localuploadingPOP" width="400px" @close="handleClose">
             <div class="UPcondition">
                 <p>文件类型:</p>
-                <el-select v-model="superior" placeholder="请选择">
+                <el-select v-model="superior" clearable placeholder="请选择">
                     <el-option v-for="item in superiorOptions" :key="item.value" :label="item.label"
                         :value="item.value">
                     </el-option>
                 </el-select>
             </div>
-            <p class="model-center">模板下载</p>
-
-            <el-upload class="upload-demo" :file-list="fileList" drag
-                action="https://jsonplaceholder.typicode.com/posts/" multiple>
-                <i class="el-icon-upload"></i>
-                <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-                <div class="el-upload__tip" slot="tip">
-                    只能上传jpg/png文件,且不超过500kb
-                </div>
-            </el-upload>
-            <span slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="filesubmit" size="small">提交</el-button>
-            </span>
+            <!-- <div v-show="fileShow">
+                <el-alert title="请点击模板下载文件附件" type="success" :closable="false">
+                </el-alert>
+                <p class="model-center" @click="download">模板下载</p>
+                <el-upload class="upload-demo" :file-list="fileList" drag action :multiple="false"
+                    :before-upload="beforeUpload" :limit="1" :auto-upload="false" :on-change="handleOnChange"
+                    accept=".xlsx">
+                    <i class="el-icon-upload"></i>
+                    <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+                    <div class="el-upload__tip" slot="tip">
+                        只能上传xlsx文件,且不超过5MB
+                    </div>
+                </el-upload>
+                <span slot="footer" class="dialog-footer">
+                    <el-button type="primary" @click="filesubmit" size="small">提交</el-button>
+                </span>
+            </div> -->
+            <div v-show="resourceShow">
+
+                <el-upload class="upload-demo" :file-list="resourcefileList"
+                    action="http://106.120.102.238:16600/energy-manage-service/api/check/upload" :multiple="false"
+                    :before-upload="resourcebeforeUpload" :limit="1" :auto-upload="false"
+                    :on-change="resourcehandleOnChange" accept=".jpg,.png,.pdf,.docx" ref="upload">
+                    <i class="el-icon-upload"></i>
+                    <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+                    <div class="el-upload__tip" slot="tip">
+                        只能上传jpg,png,pdf,docx文件,且不超过5MB
+                    </div>
+                </el-upload>
+                <span slot="footer" class="dialog-footer">
+                    <el-button type="primary" @click="resourcefilesubmit" size="small">提交</el-button>
+                </span>
+            </div>
+
         </el-dialog>
     </div>
 </template>
 
 <script>
+import {
+
+    powerWordContractImportData,
+    saveWindFieldResource
+
+} from '@/api/ledger.js'
 export default {
     props: {
         uploadingPOP: {
             type: Boolean,
             default: false
-        }
+        },
+        rowdata: {
+            type: Object,
+            default: () => { }
+        },
+        AllTemplateurlDR: {
+            type: Object,
+            default: () => { }
+        },
     },
     computed: {
         localuploadingPOP: {
             get() {
-                console.log(this.uploadingPOP);
+
                 return this.uploadingPOP;
             },
             set(value) {
@@ -48,27 +83,141 @@ export default {
     data() {
         return {
             superior: "",
-            superiorOptions: [],
+            superiorOptions: [{
+                value: '1',
+                label: '合同功率曲线'
+            }, {
+                value: '2',
+                label: "资源文件"
+            }],
             fileList: [
-                {
-                    name: "food.jpeg",
-                    url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
-                },
 
             ],
+            resourcefileList: [],
+            fileShow: true,
+            resourceShow: false,
+            globalFileList: [],
+            succeed: {},
+        }
+    },
+    watch: {
+        superior(newVal) {
+            if (newVal === '1' || newVal === '') {
+                this.fileShow = true;
+                this.resourceShow = false;
+            } else {
+                this.fileShow = false;
+                this.resourceShow = true;
+            }
         }
     },
+
     methods: {
         rowStyle() {
             return "text-align:center";
         },
-        handleClose() {
-            this.$emit('handleClose', false, 'uploadingPOP');
-        }
-        ,    // 附件提交
+
+        // 下载附件
+        download() {
+            if (this.AllTemplateurlDR.htPower) {
+                const link = document.createElement('a')
+                link.href = this.AllTemplateurlDR.htPower
+                link.download = '' // 可以设置默认下载文件名
+                link.target = '_blank' // 新窗口打开
+                document.body.appendChild(link)
+                link.click()
+                document.body.removeChild(link)
+            } else {
+
+            }
+        },
+        beforeUpload(fileList) {
+            const isXLSX =
+                fileList.type ===
+                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+            if (!isXLSX) {
+                this.$message.error('只能上传xlsx文件')
+            }
+            const isLt5MB = fileList.size / 1024 / 1024 < 5
+            if (!isLt5MB) {
+                this.$message.error('文件大小不能超过5MB')
+            }
+
+            return isXLSX && isLt5MB
+        },
+        handleOnChange(fileList) {
+
+            this.globalFileList = fileList.raw
+        },
+
+        // 附件提交
         filesubmit() {
+
+            let filedata = {
+                fieldCode: this.rowdata.fieldCode,
+                file: this.globalFileList
+            }
+
+            powerWordContractImportData(filedata).then((res) => {
+
+                this.$message.success('上传成功')
+                this.$emit('handleClose', false, 'tolead');
+            })
+        },
+
+        handleClose() {
             this.$emit('handleClose', false, 'uploadingPOP');
         },
+
+        // 资源文件
+        resourcebeforeUpload(file) {
+            const allowedTypes = [
+                'image/jpeg', // jpg
+                'image/png',  // png
+                'application/pdf', // pdf
+                'application/vnd.openxmlformats-officedocument.wordprocessingml.document' // docx
+            ];
+            const isAllowedType = allowedTypes.includes(file.type);
+            if (!isAllowedType) {
+                this.$message.error('只能上传jpg, png, pdf, docx文件');
+                return false; // 阻止文件上传
+            }
+            const isLt5MB = file.size / 1024 / 1024 < 5;
+            if (!isLt5MB) {
+                this.$message.error('文件大小不能超过5MB');
+                return false; // 阻止文件上传
+            }
+
+            return true; // 允许文件上传
+        },
+        resourcehandleOnChange(file, fileList) {
+
+            this.globalFileList = file.raw;
+            this.succeed = file.response
+            console.log(this.succeed, '   this.succeed');
+            console.log(this.globalFileList, '   this.globalFileList');
+            // 手动触发上传
+            if (file.status === 'ready') {
+                this.$refs.upload.submit();
+            }
+        },
+
+
+        resourcefilesubmit() {
+
+            let filedata = {
+                fieldCode: this.rowdata.fieldCode,
+                fileName: this.globalFileList.name,
+                resourceUrl: this.succeed.data,
+                type: this.globalFileList.type
+            }
+
+            saveWindFieldResource(filedata).then((res) => {
+
+                this.$message.success('上传成功')
+                this.$emit('handleClose', false, 'tolead');
+            })
+        },
     }
 }
 </script>
@@ -92,4 +241,12 @@ export default {
         margin-bottom: 20px;
     }
 }
+
+.model-center {
+    color: #409eff;
+    cursor: pointer;
+    line-height: 40px;
+    height: 40px;
+    font-size: 14px;
+}
 </style>

+ 88 - 19
src/views/ledger/draught.vue

@@ -74,21 +74,27 @@
     <!-- 弹出层 -->
     <!-- 导入 -->
     <el-dialog title="导入文件" :visible.sync="tolead" width="400px">
+      <el-alert title="请点击模板下载文件附件" type="success" :closable="false">
+      </el-alert>
+      <p class="model-center" @click="download">模板下载</p>
       <div class="UPcondition">
         <p>所属风场:</p>
-        <el-select v-model="fieldCode" placeholder="请选择">
-          <el-option v-for="item in fieldCodeOptions" :key="item.value" :label="item.label" :value="item.value">
+        <el-select v-model="subordinate" placeholder="请选择" value-key="fieldCode">
+          <el-option v-for="item in subordinatedata" :key="item.fieldCode" :label="item.fieldName"
+            :value="item.fieldCode">
           </el-option>
         </el-select>
       </div>
-      <el-upload class="upload-demo" :file-list="fileList" drag action="https://jsonplaceholder.typicode.com/posts/"
-        multiple>
+
+      <el-upload class="upload-demo" :file-list="fileList" drag action :multiple="false" :before-upload="beforeUpload"
+        :limit="1" :auto-upload="false" :on-change="handleOnChange" accept=".xlsx">
         <i class="el-icon-upload"></i>
         <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
         <div class="el-upload__tip" slot="tip">
-          只能上传jpg/png文件,且不超过500kb
+          只能上传xlsx文件,且不超过5MB
         </div>
       </el-upload>
+
       <span slot="footer" class="dialog-footer">
         <el-button @click="tolead = false" size="small">取 消</el-button>
         <el-button type="primary" @click="UPsubmit" size="small">提交</el-button>
@@ -139,7 +145,7 @@
         </div>
         <div class="form-row">
           <el-form-item label="是否标杆:" prop="sightcing">
-            <el-select v-model="ruleForm.sightcing" placeholder="请选择" size="small" >
+            <el-select v-model="ruleForm.sightcing" placeholder="请选择" size="small">
               <el-option v-for="item in sightcingOptions" :key="item.value" :label="item.label" :value="item.value">
               </el-option>
             </el-select>
@@ -242,7 +248,9 @@ import {
   getWindFieldNames,
   updateStateWindEngineGroup,
   updateWindEngineGroup,
-  windEngineGrouPage
+  windEngineGrouPage,
+  getAllTemplate,
+  windEngineGroupImportData 
 } from '@/api/ledger.js'
 export default {
   data() {
@@ -319,7 +327,9 @@ export default {
           { required: true, message: '请选择是否标杆', trigger: 'change' }
         ]
       },
-
+      subordinatedata: [],
+      subordinate: "",
+      AllTemplateurl: "",
       // 新增信息
       engineName: '',
       airdensity: '',
@@ -335,12 +345,9 @@ export default {
       sightcing: '',
 
       fileList: [
-        {
-          name: 'food.jpeg',
-          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
-        }
-      ],
 
+      ],
+      globalFileList: [],
       nuedialog: false,
       unusualdialog: false,
       tolead: false,
@@ -352,6 +359,7 @@ export default {
     this.onSubmit()
     this.windsite()
     this.relevancy()
+    this.getAllTemplate()
   },
   methods: {
     rowStyle() {
@@ -369,6 +377,26 @@ export default {
         this.endDate = null
       }
     },
+    //获取模板
+    getAllTemplate() {
+      getAllTemplate().then((res) => {
+        this.AllTemplateurl = res.data.draught
+      })
+    },
+    // 下载模板
+    download() {
+      if (this.AllTemplateurl) {
+        const link = document.createElement('a')
+        link.href = this.AllTemplateurl
+        link.download = '' // 可以设置默认下载文件名
+        link.target = '_blank' // 新窗口打开
+        document.body.appendChild(link)
+        link.click()
+        document.body.removeChild(link)
+      } else {
+        console.error('URL is not set')
+      }
+    },
     // 数字验证
     validateNumber(rule, value, callback) {
       const numberRegex = /^\d{1,4}(\.\d{1,2})?$/ // 匹配不超过四位数且小数点后不超过二位数的数字
@@ -463,6 +491,7 @@ export default {
       debugger
       getWindFieldNames().then((res) => {
         this.fieldCodeOptions = res.data
+        this.subordinatedata = res.data
       })
     },
     // 获取机型
@@ -484,7 +513,18 @@ export default {
     reset() { },
     //导入提交
     UPsubmit() {
-      this.tolead = false
+      console.log(this.globalFileList)
+      let filedata = {
+        fieldCode: this.subordinate,
+        file: this.globalFileList
+      }
+      windEngineGroupImportData(filedata).then((res) => {
+        console.log(res)
+        this.uploadingPOP = false
+        this.$message.success('上传成功')
+      })
+      console.log(filedata);
+      // this.tolead = false
     },
     // 新增
     newly() {
@@ -547,6 +587,26 @@ export default {
     newnuedialog() {
       this.nuedialog = true
       this.title = '新增'
+    },
+
+    // 附件验证
+    beforeUpload(fileList) {
+      const isXLSX =
+        fileList.type ===
+        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+      if (!isXLSX) {
+        this.$message.error('只能上传xlsx文件')
+      }
+      const isLt5MB = fileList.size / 1024 / 1024 < 5
+      if (!isLt5MB) {
+        this.$message.error('文件大小不能超过5MB')
+      }
+      console.log(fileList, 'fileList')
+      return isXLSX && isLt5MB
+    },
+    handleOnChange(fileList) {
+      console.log(fileList)
+      this.globalFileList = fileList.raw
     }
   }
 }
@@ -584,6 +644,7 @@ export default {
 
 .UPcondition {
   display: flex;
+  margin-bottom: 10px;
 
   p {
     width: 74px;
@@ -592,12 +653,12 @@ export default {
   }
 
   .el-select {
-      width: 260px;
-    }
+    width: 260px;
+  }
 
-    .el-input {
-      width: 260px;
-    }
+  .el-input {
+    width: 260px;
+  }
 }
 
 .attachment {
@@ -648,4 +709,12 @@ export default {
   margin-top: 20px;
   /* optional: adds some space above the buttons */
 }
+
+.model-center {
+  color: #409eff;
+  cursor: pointer;
+  line-height: 40px;
+  height: 40px;
+  font-size: 14px;
+}
 </style>

+ 6 - 4
src/views/ledger/milltype.vue

@@ -2,7 +2,7 @@
   <div class="global-variable">
     <div class="condition">
       <el-form :inline="true" :model="formInline" class="demo-form-inline">
-        <el-form-item label="机型型号:">
+        <el-form-item label="收资机型型号:">
           <el-input v-model="formInline.machineTypeCode" placeholder="请输入机型型号" size="small"></el-input>
         </el-form-item>
         <el-form-item label="选择日期:" size="small">
@@ -22,12 +22,14 @@
       </div>
 
       <el-table class="center-align-table" :data="tableData" border :cell-style="rowStyle">
-        <el-table-column align="center" fixed prop="machineTypeCode" label="机型型号">
+        <el-table-column align="center" fixed prop="machineTypeCode" label="收资机型型号">
           <template slot-scope="scope">
             <el-button @click="particulars(scope.row)" type="text" size="small">{{ scope.row.machineTypeCode
               }}</el-button>
           </template>
         </el-table-column>
+        <el-table-column prop="millTypeCode" align="center" label="系统机型编号">
+        </el-table-column>
 
         <el-table-column prop="manufacturerCode" align="center" label="厂商编号">
         </el-table-column>
@@ -73,7 +75,7 @@
     <el-dialog :title="title" :visible.sync="nuedialog" :before-close="handleClose" width="800px">
       <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm form-grid">
         <div class="form-row">
-          <el-form-item label="机型型号:" prop="machineTypeCode">
+          <el-form-item label="收资机型型号:" prop="machineTypeCode">
             <el-input v-model="ruleForm.machineTypeCode" size="small"></el-input>
           </el-form-item>
           <el-form-item label="厂商名称:" prop="manufacturerName">
@@ -127,7 +129,7 @@
     <el-dialog title="机型详情" :visible.sync="unusualdialog" width="600px">
       <div class="general">
         <div class="condition">
-          <p>机型型号:</p>
+          <p>收资机型型号:</p>
           <span>{{ particularsdata.machineTypeCode }}</span>
         </div>
         <div class="condition">

+ 75 - 191
src/views/ledger/windsite.vue

@@ -3,27 +3,15 @@
     <div class="condition">
       <el-form :inline="true" :model="formInline" class="demo-form-inline">
         <el-form-item label="风场名称:">
-          <el-input
-            v-model="formInline.fieldName"
-            placeholder="请输入风场名称"
-            size="small"
-          ></el-input>
+          <el-input v-model="formInline.fieldName" placeholder="请输入风场名称" size="small"></el-input>
         </el-form-item>
         <el-form-item label="选择日期:" size="small">
-          <el-date-picker
-            v-model="formInline.timeQuantum"
-            type="daterange"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            @change="onDateChange"
-          >
+          <el-date-picker v-model="formInline.timeQuantum" type="daterange" range-separator="至" start-placeholder="开始日期"
+            end-placeholder="结束日期" @change="onDateChange">
           </el-date-picker>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="onSubmit" size="small"
-            >查询</el-button
-          >
+          <el-button type="primary" @click="onSubmit" size="small">查询</el-button>
           <el-button @click="reset" size="small">重置</el-button>
         </el-form-item>
       </el-form>
@@ -31,36 +19,19 @@
     <div class="list-page">
       <div class="newly">
         <el-button @click="upfile" size="small">导入</el-button>
-        <el-button type="primary" @click="newnuedialog" size="small"
-          >新增</el-button
-        >
+        <el-button type="primary" @click="newnuedialog" size="small">新增</el-button>
       </div>
 
-      <el-table
-        class="center-align-table"
-        :data="tableData"
-        border
-        :cell-style="rowStyle"
-      >
+      <el-table class="center-align-table" :data="tableData" border :cell-style="rowStyle">
         <el-table-column align="center" fixed prop="" label="单位名称">
           <template slot-scope="scope">
-            <el-button
-              @click="particulars(scope.row)"
-              type="text"
-              size="small"
-              >{{ scope.row.fieldName }}</el-button
-            >
+            <el-button @click="particulars(scope.row)" type="text" size="small">{{ scope.row.fieldName }}</el-button>
           </template>
         </el-table-column>
 
         <el-table-column prop="windCompany" align="center" label="关联公司">
         </el-table-column>
-        <el-table-column
-          prop="windCompany"
-          align="center"
-          label="风机数量"
-          width="80"
-        >
+        <el-table-column prop="windCompany" align="center" label="风机数量" width="80">
           <template slot-scope="scope">
             <el-button @click="ONdraught(scope.row)" type="text" size="small">{{
               scope.row.wegNumber
@@ -68,35 +39,15 @@
           </template>
         </el-table-column>
 
-        <el-table-column
-          align="center"
-          prop="abnormal"
-          label="测风塔"
-          width="80"
-        >
+        <el-table-column align="center" prop="abnormal" label="测风塔" width="80">
           <template slot-scope="scope">
-            <el-button
-              @click="ONanemometer(scope.row)"
-              type="text"
-              size="small"
-              >{{ scope.row.atrNumber }}</el-button
-            >
+            <el-button @click="ONanemometer(scope.row)" type="text" size="small">{{ scope.row.atrNumber }}</el-button>
           </template>
         </el-table-column>
 
-        <el-table-column
-          prop="provinceName"
-          align="center"
-          label="所在省"
-          width="100"
-        >
+        <el-table-column prop="provinceName" align="center" label="所在省" width="100">
         </el-table-column>
-        <el-table-column
-          prop="cityName"
-          align="center"
-          label="所在市"
-          width="100"
-        >
+        <el-table-column prop="cityName" align="center" label="所在市" width="100">
         </el-table-column>
 
         <!-- <el-table-column prop="ratedCapacityNumber" align="center" label="总额定容量" width="100">
@@ -110,53 +61,19 @@
             {{ row.state == 1 ? "启用" : "停用" }}
           </template>
         </el-table-column>
-        <el-table-column
-          prop="transition"
-          align="center"
-          fixed="right"
-          label="操作"
-          width="200"
-        >
+        <el-table-column prop="transition" align="center" fixed="right" label="操作" width="200">
           <template slot-scope="scope">
-            <el-button @click="compile(scope.row)" type="text" size="small"
-              >编辑</el-button
-            >
-            <el-button @click="uploading(scope.row)" type="text" size="small"
-              >上传</el-button
-            >
-            <el-button
-              v-if="scope.row.state == 0"
-              @click="start(scope.row, 1)"
-              type="text"
-              size="small"
-              >启用</el-button
-            >
-            <el-button
-              v-else
-              style="color: #666"
-              @click="start(scope.row, 0)"
-              type="text"
-              size="small"
-              >停用</el-button
-            >
-            <el-button
-              style="color: #f00"
-              @click="deleted(scope.row)"
-              type="text"
-              size="small"
-              >删除</el-button
-            >
+            <el-button @click="compile(scope.row)" type="text" size="small">编辑</el-button>
+            <el-button @click="uploading(scope.row)" type="text" size="small">上传</el-button>
+            <el-button v-if="scope.row.state == 0" @click="start(scope.row, 1)" type="text" size="small">启用</el-button>
+            <el-button v-else style="color: #666" @click="start(scope.row, 0)" type="text" size="small">停用</el-button>
+            <el-button style="color: #f00" @click="deleted(scope.row)" type="text" size="small">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
       <div class="pagination-container">
-        <el-pagination
-          @current-change="handleCurrentChange"
-          :current-page.sync="formInline.pageNum"
-          layout="total, prev, pager, next"
-          :page-size="formInline.pageSize"
-          :total="formInline.totalSize"
-        >
+        <el-pagination @current-change="handleCurrentChange" :current-page.sync="formInline.pageNum"
+          layout="total, prev, pager, next" :page-size="formInline.pageSize" :total="formInline.totalSize">
         </el-pagination>
       </div>
     </div>
@@ -182,12 +99,7 @@
           <div class="row">
             <div class="condition">
               <el-form-item label="上级单位:" prop="companyCode">
-                <selecttree
-                  placeholder="请选择上级单位"
-                  :list="parentOpt"
-                  v-model="form.companyCode"
-                  @change="parentChange"
-                >
+                <selecttree placeholder="请选择上级单位" :list="parentOpt" v-model="form.companyCode" @change="parentChange">
                 </selecttree>
               </el-form-item>
             </div>
@@ -200,35 +112,17 @@
           <div class="row">
             <div class="condition">
               <el-form-item label="所在省:" prop="provinceName">
-                <el-select
-                  v-model="form.provinceName"
-                  placeholder="请选择"
-                  value-key="areaId"
-                  @change="fetchCities"
-                >
-                  <el-option
-                    v-for="item in provinceNameOptions"
-                    :key="item.areaId"
-                    :label="item.province"
-                    :value="item"
-                  >
+                <el-select v-model="form.provinceName" placeholder="请选择" value-key="areaId" @change="fetchCities">
+                  <el-option v-for="item in provinceNameOptions" :key="item.areaId" :label="item.province"
+                    :value="item">
                   </el-option>
                 </el-select>
               </el-form-item>
             </div>
             <div class="condition">
               <el-form-item label="所在市:" prop="cityName">
-                <el-select
-                  v-model="form.cityName"
-                  placeholder="请选择"
-                  value-key="areaId"
-                >
-                  <el-option
-                    v-for="item in cityNameOptions"
-                    :key="item.areaId"
-                    :label="item.city"
-                    :value="item"
-                  >
+                <el-select v-model="form.cityName" placeholder="请选择" value-key="areaId">
+                  <el-option v-for="item in cityNameOptions" :key="item.areaId" :label="item.city" :value="item">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -249,19 +143,10 @@
           <div class="row">
             <div class="condition">
               <el-form-item label="测风塔:" prop="anemometerTowerRelationDtos">
-                <el-select
-                  v-model="form.anemometerTowerRelationDtos"
-                  multiple
-                  collapse-tags
-                  placeholder="请选择"
-                  value-key="anemometerCode"
-                >
-                  <el-option
-                    v-for="item in options"
-                    :key="item.anemometerCode"
-                    :label="item.anemometerName"
-                    :value="item.anemometerCode"
-                  >
+                <el-select v-model="form.anemometerTowerRelationDtos" multiple collapse-tags placeholder="请选择"
+                  value-key="anemometerCode">
+                  <el-option v-for="item in options" :key="item.anemometerCode" :label="item.anemometerName"
+                    :value="item.anemometerCode">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -279,11 +164,7 @@
           <el-table-column prop="" label="文件大小"> </el-table-column>
           <el-table-column fixed="right" label="操作" width="120">
             <template slot-scope="scope">
-              <el-button
-                @click.native.prevent="deleteRow(scope.row)"
-                type="text"
-                size="small"
-              >
+              <el-button @click.native.prevent="deleteRow(scope.row)" type="text" size="small">
                 删除
               </el-button>
             </template>
@@ -291,46 +172,25 @@
         </el-table>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="handleClose(false, 'nuedialog')" size="small"
-          >取 消</el-button
-        >
-        <el-button type="primary" @click="newly('formRef')" size="small"
-          >确 定</el-button
-        >
+        <el-button @click="handleClose(false, 'nuedialog')" size="small">取 消</el-button>
+        <el-button type="primary" @click="newly('formRef')" size="small">确 定</el-button>
       </span>
     </el-dialog>
 
     <!-- 风场详情 -->
-    <WindsiteMessage
-      :unusualdialog="unusualdialog"
-      :unusualdialogdata="unusualdialogdata"
-      @handleClose="handleClose"
-    >
+    <WindsiteMessage :unusualdialog="unusualdialog" :unusualdialogdata="unusualdialogdata" @handleClose="handleClose">
     </WindsiteMessage>
     <!-- 测风塔 -->
-    <windsitemachine
-      :anemometerdialog="anemometerdialog"
-      :anemometerData="anemometerData"
-      @handleClose="handleClose"
-    >
+    <windsitemachine :anemometerdialog="anemometerdialog" :anemometerData="anemometerData" @handleClose="handleClose">
     </windsitemachine>
     <!-- 风机数量 -->
-    <windsitetower
-      :draught="draught"
-      :draughtData="draughtData"
-      @handleClose="handleClose"
-    ></windsitetower>
+    <windsitetower :draught="draught" :draughtData="draughtData" @handleClose="handleClose"></windsitetower>
     <!-- 上传 -->
-    <windsiteup
-      :uploadingPOP="uploadingPOP"
-      @handleClose="handleClose"
-    ></windsiteup>
+    <windsiteup :uploadingPOP="uploadingPOP" :rowdata="rowdata" :AllTemplateurlDR="AllTemplateurlDR"
+      @handleClose="handleClose"></windsiteup>
     <!-- 导入 -->
-    <windsitetolead
-    :parentOptdata="parentOptdata"
-      :tolead="tolead"
-      @handleClose="handleClose"
-    ></windsitetolead>
+    <windsitetolead :parentOptdata="parentOptdata" :AllTemplateurl="AllTemplateurl" :tolead="tolead"
+      @handleClose="handleClose" @onSubmit="onSubmit"></windsitetolead>
   </div>
 </template>
 
@@ -348,6 +208,7 @@ import {
   updateWindFieldStateById,
   windEngineGrouPage,
   windFieldDto,
+  getAllTemplate
 } from "@/api/ledger.js";
 import selecttree from "../../components/selecttree";
 import WindsiteMessage from "./component/windsiteMessage.vue";
@@ -426,7 +287,10 @@ export default {
       anemometerData: [],
       draughtData: [],
       unusualdialogdata: {},
-      parentOptdata:[],
+      parentOptdata: [],
+      AllTemplateurl: {},
+      AllTemplateurlDR: {},
+      rowdata: {},
       listedfiles: false,
       nuedialog: false,
       unusualdialog: false,
@@ -450,6 +314,7 @@ export default {
     this.postsheng();
     this.relevanceunit();
     this.TowerNameList();
+    this.getAllTemplate()
   },
   methods: {
     handleClose(value, dialogName) {
@@ -460,6 +325,13 @@ export default {
     rowStyle() {
       return "text-align:center";
     },
+    getAllTemplate() {
+      getAllTemplate().then((res) => {
+        this.AllTemplateurl = res.data
+        this.AllTemplateurlDR = res.data
+      })
+    },
+
     // 时间转换
     onDateChange(date) {
       if (Array.isArray(date)) {
@@ -514,6 +386,8 @@ export default {
       try {
         const res = await getAllWindCompany();
         this.parentOpt = res.data;
+        this.parentOptdata = res.data;
+
       } catch (error) {
         console.error("Error fetching wind company data:", error);
       }
@@ -605,7 +479,7 @@ export default {
       });
     },
     // 重置
-    reset() {},
+    reset() { },
     //导入提交
     UPsubmit() {
       this.tolead = false;
@@ -646,20 +520,30 @@ export default {
     compile(row) {
       console.log(row, "row");
       //编辑 接口WindFieldDto
-      const item = JSON.parse(JSON.stringify(row));
-      this.detail = item;
-      Object.keys(this.form).forEach((key) => {
-        this.form[key] = item[key];
+      getWindFieldVo({
+        fieldCode: row.fieldCode,
+      }).then((res) => {
+        const item = JSON.parse(JSON.stringify(res.data));
+        this.detail = item;
+        Object.keys(this.form).forEach((key) => {
+          this.form[key] = item[key];
+        });
+        this.form.anemometerTowerRelationDtos = item?.anemometerTowerByFieldVos.map(element => {
+          return element.anemometerCode
+        });
+        this.detail = row;
+        this.nuedialog = true;
+        this.listedfiles = true;
+        this.title = "编辑";
+        this.isEdit = true;
       });
-      this.detail = row;
-      this.nuedialog = true;
-      this.listedfiles = true;
-      this.title = "编辑";
-      this.isEdit = true;
+
     },
     // 上传附件
     uploading(row) {
       this.uploadingPOP = true;
+      this.rowdata = row
+
     },
 
     // 删除

+ 2 - 2
vue.config.js

@@ -66,8 +66,8 @@ module.exports = {
       "/api": {
         // target: "http://192.168.5.4:16200", // 石月
         // target: "http://192.168.50.235:16200", //内网
-        target: "http://192.168.5.15:16200",
-        // target: "http://106.120.102.238:16600", //外网
+        // target: "http://192.168.5.15:16200",
+        target: "http://106.120.102.238:16600", //外网
         changeOrigin: true,
         pathRewrite: {
           "^/api": "", // 需要rewrite重写的,