Kaynağa Gözat

1.增加导入其他模板项目
2.增加从excel导入模板项目

yanliming 3 ay önce
ebeveyn
işleme
77c6d4b619

+ 6 - 1
src/api/base/fundIncomeInfo.js

@@ -66,6 +66,11 @@ function selectExportXls(formModel) {
   });
 }
 
+function childTemplateOption(formData) {
+  return request.post(constant.serverUrl + "/base/fundIncomeInfo/childTemplateOption", formData);
+}
+
 export default {
-  pageList, create, edit, add, update, remove, batchRemove,generateData,batchSave,summaryList,selectExportXls
+  pageList, create, edit, add, update, remove, batchRemove,generateData,batchSave,summaryList,selectExportXls,
+  childTemplateOption
 }

+ 31 - 2
src/views/base/sectionsSummary-list.vue

@@ -67,6 +67,8 @@
         v-loading="loading"
         row-key="id"
         height="500"
+        lazy
+        :load="load"
         @selection-change="handleSelectionChange"
         :row-class-name="tableRowClassName"
         :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
@@ -221,8 +223,11 @@
                     console.log(jsonData.data)
 
                     self.tableData = page.data;
-                    self.totalPages = page.totalPages;
-                    self.totalElements = page.recordsTotal;
+
+                    //加载数据后所有数据为折叠,为了刷新子节点数据
+                    self.$set(self.$refs.table1.store.states, "lazyTreeNodeMap", {});
+                    self.$set(self.$refs.table1.store.states, "treeData", {});
+                    self.$set(self.$refs.table1.store.states, "data", []);
                 }
             }
             else{
@@ -368,6 +373,30 @@
             return ''; 
           }
         },
+
+        load(tree, treeNode, resolve) {
+          var self = this;
+
+          var formData = new FormData();
+
+          formData.append("id", tree.id);
+          var serialNum = "";
+          if(tree.serialNum!=null){
+            serialNum = tree.serialNum;
+          }
+
+          formData.append("serialNum", serialNum);
+
+          formData.append("yearMonth", self.queryModel.yearMonth);
+
+          fundIncomeInfoApi.childTemplateOption(formData).then(function(response) {
+              var jsonData = response.data;
+              if(jsonData.result) {
+                  var page = jsonData.data;
+                  resolve(page);
+              }
+          })
+        }
     },
     mounted: function() {
       // var self = this;

+ 173 - 0
src/views/base/selectTemplateCopy-list.vue

@@ -0,0 +1,173 @@
+
+<template>
+    <el-dialog
+      :visible.sync="showDialog"
+      :title="title"
+      :modal-append-to-body="true"
+      style="text-align:left;"
+      :close-on-click-modal="true"
+      @close="closeDialog"
+      :append-to-body="true"
+      width="900px"
+    >
+      <div class="user-panel" v-loading="loading">
+            <el-table
+            :data="tableData"
+            style="min-height:400px;"
+            v-loading="loading"
+            highlight-current-row
+            @current-change="handleCurrentChange"
+        >
+            <el-table-column  prop="year"  label="所属年份"></el-table-column>
+            <el-table-column  prop="title"  label="标题" ></el-table-column>
+            <el-table-column  prop="subtitle"  label="副标题"></el-table-column>
+            <el-table-column  prop="type"  label="模板类型">
+                <template slot-scope="{row}">
+                    <span v-if="row.type=='1'">收入</span>
+                    <span v-else-if="row.type=='2'">支出</span>
+                </template>
+            </el-table-column>
+            <!-- <el-table-column  prop="serialNum"  label="序号"></el-table-column> -->
+            <el-table-column  prop="status"  label="状态">
+            <template slot-scope="{row}">
+                    <span v-if="row.status=='0'" style="color:#F56C6C">未审核</span>
+                    <span v-else-if="row.status=='1'" style="color:#67C23A">已审核</span>
+                </template>
+            </el-table-column>
+        </el-table>
+        <el-pagination
+            style="text-align:center"
+            :current-page.sync="pageIndex"
+            :total="totalElements"
+            :page-sizes="pageSizeList"
+            @current-change="changePage"
+            @size-change="pageSizeChange"
+            layout="total, sizes, prev, pager, next, jumper"
+        ></el-pagination>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDialog">取 消</el-button>
+        <el-button type="primary" @click="handleSubmit"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </template>
+  <script>
+  import Constant from "@/constant";
+  import templateInfoApi from "@/api/base/templateInfo";
+  
+  export default {
+    props: ["businessKey", "title"],
+    data() {
+      return {
+            formModel: {},
+            showDialog: true,
+            loading: false,
+            tableData: [],
+            pageIndex: 1,
+            pageSize: 10,
+            totalPages: 0,
+            totalElements: 0,
+            field: "",
+            direction: "",
+            pageSizeList: [10, 20, 30],
+            multipleSelection: [],
+            selectId:"",
+      };
+    },
+    created() {
+    },
+    methods: {
+      closeDialog() {
+        this.$emit("close", false);
+      },
+      handleSubmit() {
+        if(this.selectId==null||this.selectId==""){
+            this.$message.error("请选择一项需要复制项目的模板!");
+            return;
+        }
+        this.$emit("close", this.selectId);
+      },
+      changePage(pageIndex) {
+        var self = this;
+  
+        console.log(pageIndex);
+  
+        self.pageIndex = pageIndex;
+        var formData = new FormData();
+  
+        formData.append("pageIndex", self.pageIndex);
+        formData.append("pageSize", self.pageSize);
+  
+        self.loading = true;
+  
+        templateInfoApi.pageList(formData).then(function(response) {
+          self.loading = false;
+            var jsonData = response.data;
+            if(jsonData.result) {
+                //分页查看
+                var page = jsonData.data;
+
+                self.tableData = page.data;
+                self.totalPages = page.totalPages;
+                self.totalElements = page.recordsTotal;
+            }
+            else{
+                self.$message.warning(jsonData.message);
+            }
+        }).catch((error)=>{
+          self.loading = false;
+        });
+      },
+      pageSizeChange(pageSize) {
+        this.pageSize = pageSize;
+      },
+      sortChange(data) {
+        this.field = data.column.field;
+        this.direction = data.order == "ascending" ? "asc" : "desc";
+  
+        this.changePage(this.pageIndex);
+      },
+      handleSelectionChange(val) {
+        this.multipleSelection = val;
+      },
+      handleCurrentChange(row) {
+        this.selectId = row.id;
+      }
+    },
+    async mounted() {
+        this.changePage(1);
+    },
+    components: {
+    },
+  };
+  </script>
+  <style scoped>
+  .user-panel {
+    margin: 10px auto;
+  }
+  .avatar-uploader .el-upload {
+      border: 1px dashed #d9d9d9;
+      border-radius: 6px;
+      cursor: pointer;
+      position: relative;
+      overflow: hidden;
+    }
+    .avatar-uploader .el-upload:hover {
+      border-color: #409EFF;
+    }
+    .avatar-uploader-icon {
+      font-size: 28px;
+      color: #8c939d;
+      width: 178px;
+      height: 178px;
+      line-height: 178px;
+      text-align: center;
+    }
+    .avatar {
+      width: 178px;
+      height: 178px;
+      display: block;
+    }
+  </style>

+ 99 - 6
src/views/base/templateInfo-option-list.vue

@@ -10,6 +10,26 @@
       width="1500px"
     >
       <div class="user-panel" v-loading="loading">
+        <el-row class="button-group">
+          <el-upload
+            class="upload-demo"
+            accept=".xlsx"
+            name="uploadFile"
+            :headers="headers"
+            :action="uploadUrlXls"
+            :data="uploadXlsData"
+            :on-preview="handlePreview"
+            :on-remove="handleRemove"
+            :before-remove="beforeRemove"
+            :on-exceed="handleExceed"
+            :on-success="handleSuccess"
+            :file-list="fileList">
+            <el-button size="small" plain icon="el-icon-upload2" type="success">导入EXCEL项目</el-button>
+            <div slot="tip" class="el-upload__tip">只能上传.xlsx文件</div>
+          </el-upload>
+          <el-button style="float:right" type="primary" size="small" plain icon="el-icon-document-copy" @click="handleCopy">从其它模板复制项目</el-button>
+        </el-row>
+
         <el-form
           ref="form"
           :model="formModel"
@@ -59,18 +79,18 @@
                         </el-form-item>
                     </template>
                 </el-table-column>
-                <el-table-column prop="budgetRevenue" label="预算收(元)" width="160">
+                <el-table-column prop="budgetRevenue" label="预算收(元)" width="160">
                     <template slot-scope="scope">
                         <el-form-item
                         :prop="'optionList.' + scope.$index + '.budgetRevenue'"
                         :rules="ruleValidate['budgetRevenue']"
                         >
-                        <el-input-number v-if="!scope.row.isSum" placeholder="预算收"  v-model="scope.row.budgetRevenue"  size="mini" style="width:130px"> 
+                        <el-input-number v-if="!scope.row.isSum" placeholder="预算收"  v-model="scope.row.budgetRevenue"  size="mini" style="width:130px"> 
                         </el-input-number>
                         </el-form-item>
                     </template>
                 </el-table-column>
-                <el-table-column prop="incomeTimeRangeArr" label="收区间" width="250">
+                <el-table-column prop="incomeTimeRangeArr" label="收区间" width="250">
                     <template slot-scope="scope">
                         <el-form-item
                         :prop="'optionList.' + scope.$index + '.incomeTimeRangeArr'"
@@ -168,6 +188,11 @@
           >确 定</el-button
         >
       </span>
+      <selectTemplateCopy-list
+        v-if="showModal"
+        :title="modalTitle"
+        @close="onDetailModalClose"
+      ></selectTemplateCopy-list>
     </el-dialog>
   </template>
   <script>
@@ -175,6 +200,7 @@
   import { getToken } from "@/utils/auth"; // get token from cookie
   import templateOptionApi from "@/api/base/templateOption";
   import departmentInfoApi from "@/api/base/departmentInfo";
+  import selectTemplateCopyList from "./selectTemplateCopy-list";
   
   export default {
     props: ["businessKey", "title"],
@@ -198,6 +224,7 @@
           enterpriseList:[],
           optionList:[],
           departmentList:[],
+          showModal:false,
           isSumList:[
             {
               "label":"否",
@@ -206,7 +233,15 @@
             {
               "label":"是",
               "value":true
-            }]
+            }],
+          uploadUrlXls: Constant.serverUrl + "/base/templateOption/importXls",
+          uploadXlsData: {
+            templateId:this.businessKey
+          },
+          headers: {
+              Authorization: getToken(),
+          },
+          fileList:[],
       };
     },
     created() {
@@ -278,6 +313,63 @@
         var optionList = this.formModel.optionList;
         optionList.splice(optionList.indexOf(row), 1);
       },
+      handleCopy(){
+        var self = this;
+        
+        self.modalTitle = "选择复制模板项目";
+        self.showModal = true;
+      },
+      onDetailModalClose(selectId) {
+          var self = this;
+
+          self.showModal = false;
+
+          //alert(selectId)
+
+          self.loading = true;
+
+          var formData = new FormData();
+  
+          formData.append("selectId", selectId);
+          formData.append("templateId", self.businessKey);
+
+          templateOptionApi.copyOptionList(formData).then(function(response) {
+            self.loading = false;
+            var jsonData = response.data;
+            if(jsonData.result) {
+              self.formModel = jsonData.data;
+              self.formModel.optionList = jsonData.data.templateOptionList;
+            }
+          })
+      },
+
+      //批量导入-预览
+      handlePreview(file) {
+        console.log(file.url);
+      },
+      //批量导入-移除
+      handleRemove(file, fileList) {
+        console.log(file, fileList);
+      },
+      //批量导入-移除前操作
+      beforeRemove(file, fileList) {
+        console.log(file, fileList);
+      },
+      //批量导入-文件超出个数限制时的钩子
+      handleExceed(files, fileList) {
+        this.$message.warning(
+            `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
+            files.length + fileList.length
+            } 个文件`
+          );
+      },
+      handleSuccess(res, file) {
+        var self = this;
+        if(res.result){
+          self.formModel = res.data;
+          self.formModel.optionList = res.data.templateOptionList;
+        }
+      },
     },
     async mounted() {
       var self = this;
@@ -297,7 +389,7 @@
             self.formModel.templateId = jsonData.data.templateId;
             self.formModel.optionList = jsonData.data.templateOptionList;
   
-              self.showModal = true;
+              //self.showModal = true;
           } else {
             self.$message.error(jsonData.message + "");
           }
@@ -310,7 +402,8 @@
         });
     },
     components: {
-    },
+        "selectTemplateCopy-list":selectTemplateCopyList
+    }
   };
   </script>
   <style scoped>