Explorar el Código

1、收入页面加合计

2、当月到账可能填错,在当月到账明细中添加修改功能

3、到账金额可能大于预算,大于时用负数表示溢出部分,但汇总时溢出部分不参与

4、导出报表添加合计

5、模板生成后,会对项目名称或项目进行增加,调整后不需要重新生成模板,功能参考调整模板预算金额
yanliming hace 11 meses
padre
commit
e80312e7f6

+ 1 - 1
.env.development

@@ -1,3 +1,3 @@
 OUT_PUT_DIR=dist/cy-revenue-budget-portal
 
-VUE_APP_BACKEND_URL=http://127.0.0.1:8086/cy-revenue-budget-server
+VUE_APP_BACKEND_URL=http://192.168.33.220:8086/cy-revenue-budget-server

+ 29 - 1
src/api/base/templateOption.js

@@ -9,10 +9,20 @@ function create() {
   return request.get(constant.serverUrl + "/base/templateOption/create");
 }
 
+function createFundIncome(templateId) {
+  return request.get(constant.serverUrl + "/base/templateOption/createFundIncome/"+templateId);
+}
+
+
 function edit(id) {
   return request.get(constant.serverUrl + "/base/templateOption/edit/" + id);
 }
 
+function editItem(id) {
+  return request.get(constant.serverUrl + "/base/templateOption/editItem/" + id);
+}
+
+
 
 function templateDepartmentEdit(id) {
   return request.get(constant.serverUrl + "/base/templateOption/templateDepartmentEdit/" + id);
@@ -41,6 +51,24 @@ function update(formModel) {
   });
 }
 
+function updateNameAndFundIncome(formModel) {
+  return request.post(constant.serverUrl + "/base/templateOption/updateNameAndFundIncome", formModel, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+
+function addAndFundIncome(formModel) {
+  return request.post(constant.serverUrl + "/base/templateOption/addAndFundIncome", formModel, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+
 function updateItem(formModel) {
   return request.post(constant.serverUrl + "/base/templateOption/updateItem", formModel, {
     headers: {
@@ -65,5 +93,5 @@ function batchRemove(idList) {
 
 export default {
   pageList, create, edit, add, update, remove, batchRemove,templateDepartmentEdit,departmentDetailEdit,
-  updateItem
+  updateItem,createFundIncome,addAndFundIncome,editItem,updateNameAndFundIncome
 }

+ 26 - 0
src/views/base/budgetModifyRecord-list.vue

@@ -19,6 +19,21 @@
             <el-table-column  prop="currentAmount"  label="修改后金额"></el-table-column>
             <el-table-column  prop="createTime"  label="修改时间"></el-table-column>
             <el-table-column  prop="createName"  label="修改人"></el-table-column>
+            <el-table-column  prop="image"  label="修改凭证">
+              <template slot-scope="scope">
+                <el-link type="primary" :href="scope.row.image" target="_blank" :underline="false">
+                <el-image
+                  style="width: 40px; height: 40px"
+                  v-if="scope.row.image&&isImageFile(scope.row.image)"
+                  :src="scope.row.image"
+                  fit="fit">
+                </el-image>
+                <span v-else>
+                  <span v-if="scope.row.image">附件</span>
+                </span>
+                </el-link>
+              </template>
+            </el-table-column>
         </el-table>
         <el-pagination
             style="text-align:center"
@@ -141,6 +156,17 @@
                 this.changePage(this.pageIndex);
             });
         },
+        isImageFile(url){
+          // 获取文件扩展名
+          const extension = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
+          // 支持的图片扩展名列表
+          const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp'];
+          // 判断当前文件扩展名是否为图片扩展名
+          if (imageExtensions.includes(extension)) {
+            return true;
+          }
+          return false;
+        },
     },
     async mounted() {
       this.changePage(1);

+ 2 - 8
src/views/base/departmentInfo-list.vue

@@ -94,10 +94,7 @@
   
       return {
         queryModel: {
-          realName: "",
-          phone:"",
-          idCard:"",
-          status:"",
+          name:"",
         },
         loading: false,
         tableData: [],
@@ -166,10 +163,7 @@
         else{
             formData.append("pageSize", self.pageSize);
         }
-        formData.append("realName", self.queryModel.realName);
-        formData.append("phone", self.queryModel.phone);
-        formData.append("idCard", self.queryModel.idCard);
-        formData.append("status", self.queryModel.status);
+        formData.append("name", self.queryModel.name);
   
         self.loading = true;
   

+ 4 - 4
src/views/base/fundIncomeInfo-list.vue

@@ -153,9 +153,9 @@
             <el-link v-if="!scope.row.isSum" type="primary" @click="handleDetail(scope.row)">查看明细</el-link>
           </template>
         </el-table-column>
-        <el-table-column  prop="curMonthReceived"  label="本月累计到账资金" width="200">
+        <el-table-column  prop="curMonthReceived"  label="本月本次到账资金" width="200">
           <template slot="header">
-            <span>本月累计到账资金</span>
+            <span>本月本次到账资金</span>
             <!-- <el-button style="margin-left:10px" type="primary" size="mini" plain @click="handleBatchSave">保存</el-button> -->
           </template>
             <div class="item" slot-scope="scope">
@@ -827,9 +827,9 @@
           self.businessKey = record.id;
           self.showModal2 = true;
         },
-        onDetailModalClose(refreshed) {
+        onDetailModalClose(refreshed,flag) {
           this.showModal = false;
-          if(refreshed) {
+          if(flag) {
             this.changePage(this.pageIndex);
           }
         },

+ 187 - 0
src/views/base/incomeModifyRecord-detail.vue

@@ -0,0 +1,187 @@
+
+<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="600px"
+    >
+      <div class="user-panel" v-loading="loading">
+        <el-form
+          ref="form"
+          :model="formModel"
+          :rules="ruleValidate"
+          :label-width="'150px'"
+          :inline="true"
+        >
+          <el-form-item label="本月到账金额" prop="currentAmount">
+            <el-input-number v-model="formModel.currentAmount" placeholder="请输入本月到账金额" style="width: 300px"></el-input-number>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDialog">取 消</el-button>
+        <el-button type="primary" @click="handleSubmit" :loading="submitting"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </template>
+  <script>
+  import Constant from "@/constant";
+  import { getToken } from "@/utils/auth"; // get token from cookie
+  import incomeModifyRecordApi from "@/api/base/incomeModifyRecord";
+  
+  export default {
+    props: ["businessKey2", "title"],
+    data() {
+      return {
+          showPwd: true,
+          ruleValidate: {
+            currentAmount: [
+              { required: true, message: "本月到账金额不能为空", trigger: "blur" },
+              ],
+          },
+          roleList: [],
+          formModel: {},
+          showDialog: true,
+          loading: false,
+          submitting: false,
+          typeList:[
+            {
+                "name":"收入",
+                "value":"1",
+            },
+            {
+                "name":"支出",
+                "value":"2",
+            }
+          ]
+      };
+    },
+    created() {
+    },
+    methods: {
+      closeDialog() {
+        this.$emit("close", false);
+      },
+      handleSubmit() {
+        var self = this;
+  
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            (function () {
+              var id = self.formModel.id;
+  
+              if (id == null || id.length == 0) {
+                return incomeModifyRecordApi.add(self.formModel);
+              } else {
+                return incomeModifyRecordApi.update(self.formModel);
+              }
+            })().then(function (response) {
+              var jsonData = response.data;
+  
+              if (jsonData.result) {
+                self.$message({
+                  message: "保存成功!",
+                  type: "success",
+                });
+  
+                self.$emit("close", true);
+              } else {
+                self.$message({
+                  message: jsonData.message + "",
+                  type: "warning",
+                });
+  
+                self.$emit("close", false);
+              }
+            });
+          }
+        });
+      },
+      handleAvatarSuccess(res, file) {
+          var self = this;
+          self.formModel.photo = res.data;
+  
+          self.fileUrl =
+            res.data + "?x-oss-process=image/resize,m_lfit,h_300,w_300";
+      },
+      beforeAvatarUpload(file) {
+          const isLt2M = file.size / 1024 / 1024 < 2;
+          if (!isLt2M) {
+              this.$message.error('上传头像图片大小不能超过 2MB!');
+          }
+          return isLt2M;
+      }
+    },
+    async mounted() {
+      var self = this;
+      self.loading = true;
+  
+      (function () {
+        if (self.businessKey2 != null && self.businessKey2.length > 0) {
+          return incomeModifyRecordApi.edit(self.businessKey2);
+        } else {
+          return incomeModifyRecordApi.create();
+        }
+      })()
+        .then((response) => {
+          var jsonData = response.data;
+  
+          if (jsonData.result) {
+              self.formModel = jsonData.data;
+  
+              let photo = self.formModel.photo;
+              if (photo != null) {
+                  self.fileUrl = photo 
+              }
+  
+              self.showModal = true;
+          } else {
+            self.$message.error(jsonData.message + "");
+          }
+  
+          self.loading = false;
+        })
+        .catch((error) => {
+          self.$message.error(error + "");
+          self.loading = false;
+        });
+    },
+    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>

+ 37 - 6
src/views/base/incomeModifyRecord-list.vue

@@ -17,8 +17,13 @@
         >
             <el-table-column  prop="curAccumulate"  label="本月累计到账金额"></el-table-column>
             <el-table-column  prop="currentAmount"  label="本次到账金额"></el-table-column>
-            <el-table-column  prop="createTime"  label="本次到账时间"></el-table-column>
+            <el-table-column  prop="createTime"  label="本次到账时间" width="200"></el-table-column>
             <el-table-column  prop="createName"  label="操作人"></el-table-column>
+            <el-table-column  label="操作">
+              <template slot-scope="{row}">
+                <el-link type="primary" @click="handleEdit(row)">修改金额</el-link>
+              </template>
+            </el-table-column>
         </el-table>
         <el-pagination
             style="text-align:center"
@@ -33,12 +38,20 @@
       <span slot="footer" class="dialog-footer">
         <el-button @click="closeDialog">关 闭</el-button>
       </span>
+      <incomeModifyRecord-detail
+        v-if="showModal"
+        :businessKey2="businessKey2"
+        :title="modalTitle"
+        @close="onDetailModalClose"
+      ></incomeModifyRecord-detail>
     </el-dialog>
+
   </template>
   <script>
   import Constant from "@/constant";
   import { getToken } from "@/utils/auth"; // get token from cookie
   import incomeModifyRecordApi from "@/api/base/incomeModifyRecord";
+  import incomeModifyRecordDetail from "./incomeModifyRecord-detail"
   
   export default {
     props: ["businessKey", "title"],
@@ -67,13 +80,16 @@
             direction: "",
             pageSizeList: [10, 20, 30],
             multipleSelection: [],
+            showModal:false,
+            modalTitle:"",
+            flag:false,
       };
     },
     created() {
     },
     methods: {
       closeDialog() {
-        this.$emit("close", false);
+        this.$emit("close", false,this.flag);
       },
       handleSubmit() {
         var self = this;
@@ -110,7 +126,7 @@
           }
         });
       },
-      changePage(pageIndex) {
+      changePage(pageIndex,flag) {
         var self = this;
 
         self.pageIndex = pageIndex;
@@ -138,15 +154,30 @@
             this.pageSize = pageSize;
 
             this.$nextTick(()=>{
-                this.changePage(this.pageIndex);
+                this.changePage(this.pageIndex,null);
             });
         },
+        handleEdit(record) {
+        var self = this;
+        
+        self.modalTitle = "编辑用户";
+        self.businessKey2 = record.id;
+        self.showModal = true;
+      },
+        onDetailModalClose(refreshed) {
+          this.showModal = false;
+          if(refreshed) {
+            this.flag = true;
+            this.changePage(this.pageIndex);
+          }
+        },
     },
     async mounted() {
-      this.changePage(1);
+      this.changePage(1,null);
     },
     components: {
-    },
+      "incomeModifyRecord-detail":incomeModifyRecordDetail,
+    }
   };
   </script>
   <style scoped>

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

@@ -60,9 +60,9 @@
         :row-class-name="tableRowClassName"
       >
         <el-table-column  prop="name"  label="收入子项目" width="300"></el-table-column>
-        <el-table-column  prop="budgetRevenue"  label="预算收入">
+        <el-table-column  prop="budgetRevenue"  label="预算收入(当前)">
             <template slot-scope="scope">
-                {{formaNum(scope.row.budgetRevenue)}}
+                {{formaNum(scope.row.curBudgetRevenue)}}
             </template>
         </el-table-column>
         <el-table-column  prop="curMonthReceived"  label="本月到账金额">

+ 153 - 0
src/views/base/templateDepartName-edit.vue

@@ -0,0 +1,153 @@
+
+<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="500px"
+    >
+      <div class="user-panel" v-loading="loading">
+        <el-form
+          ref="form"
+          :model="formModel"
+          :rules="ruleValidate"
+          :label-width="'100px'"
+          :inline="true"
+        >
+          <el-form-item label="名称" prop="name">
+            <el-input v-model="formModel.name" placeholder="请输入名称" style="width: 300px"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDialog">取 消</el-button>
+        <el-button type="primary" @click="handleSubmit" :loading="submitting"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </template>
+  <script>
+  import Constant from "@/constant";
+  import templateOptionApi from "@/api/base/templateOption";
+  
+  export default {
+    props: ["businessKey2", "title"],
+    data() {
+      return {
+          showPwd: true,
+          ruleValidate: {
+              name: [
+              { required: true, message: "名称不能为空", trigger: "blur" },
+              ],
+          },
+          roleList: [],
+          formModel: {},
+          showDialog: true,
+          loading: false,
+          submitting: false,
+      };
+    },
+    created() {
+    },
+    methods: {
+      closeDialog() {
+        this.$emit("close", false);
+      },
+      handleSubmit() {
+        var self = this;
+  
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            (function () {
+                var id = self.formModel.id;
+                return templateOptionApi.updateNameAndFundIncome(self.formModel);
+            })().then(function (response) {
+              var jsonData = response.data;
+  
+              if (jsonData.result) {
+                self.$message({
+                  message: "保存成功!",
+                  type: "success",
+                });
+  
+                self.$emit("close", true);
+              } else {
+                self.$message({
+                  message: jsonData.message + "",
+                  type: "warning",
+                });
+  
+                self.$emit("close", false);
+              }
+            });
+          }
+        });
+      },
+    },
+    async mounted() {
+      var self = this;
+      self.loading = true;
+  
+      (function () {
+          return templateOptionApi.editItem(self.businessKey2);
+      })()
+        .then((response) => {
+          var jsonData = response.data;
+  
+          if (jsonData.result) {
+              self.formModel = jsonData.data;
+  
+              let photo = self.formModel.photo;
+              if (photo != null) {
+                  self.fileUrl = photo 
+              }
+  
+              self.showModal = true;
+          } else {
+            self.$message.error(jsonData.message + "");
+          }
+  
+          self.loading = false;
+        })
+        .catch((error) => {
+          self.$message.error(error + "");
+          self.loading = false;
+        });
+    },
+    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>

+ 241 - 0
src/views/base/templateDepartTitle-edit.vue

@@ -0,0 +1,241 @@
+
+<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-form
+          ref="form"
+          :model="formModel"
+          :rules="ruleValidate"
+          :label-width="'100px'"
+          :inline="true"
+        >
+        <el-form-item label="序号" prop="serialNum">
+            <el-input v-model="formModel.serialNum" placeholder="请输入序号" style="width: 300px"></el-input>
+          </el-form-item>
+        <el-form-item label="名称" prop="name">
+            <el-input v-model="formModel.name" placeholder="请输入名称" style="width: 300px"></el-input>
+          </el-form-item>
+          <el-form-item label="预算收入" prop="budgetRevenue">
+            <el-input-number v-model="formModel.budgetRevenue" placeholder="请输入预算收入" style="width: 300px"></el-input-number>
+          </el-form-item>
+          <el-form-item label="是否合计" prop="isSum">
+            <el-select v-model="formModel.isSum" placeholder="请选择" style="width:300px">
+              <el-option
+                v-for="item in isSumList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="收入时间区间" prop="incomeTimeRangeArr">
+            <el-date-picker
+              style="width: 300px"
+              v-model="formModel.incomeTimeRangeArr"
+              type="monthrange"
+              range-separator="至"
+              start-placeholder="开始月份"
+              end-placeholder="结束月份"
+              value-format='yyyy-MM'
+              format='yyyy-MM'
+              >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="收入类型" prop="incomeType">
+            <el-select v-model="formModel.incomeType" clearable placeholder="请选择" style="width: 300px" >
+                <el-option
+                  v-for="item in typeList"
+                  :key="item.value"
+                  :label="item.name"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+          </el-form-item>
+          <el-form-item label="终止日" prop="endDate">
+            <el-date-picker
+              style="width: 300px"
+              v-model="formModel.endDate"
+              type="date"
+              placeholder="选择日期"
+              value-format='yyyy-MM-dd'
+              format='yyyy-MM-dd'>
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="责任人" prop="chargePerson">
+            <el-input style="width: 300px" v-model="formModel.chargePerson" placeholder="请输入责任人"></el-input>
+          </el-form-item>
+          <el-form-item label="排序号" prop="index">
+            <el-input-number v-model="formModel.index" placeholder="请输入排序号" style="width: 300px"></el-input-number>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDialog">取 消</el-button>
+        <el-button type="primary" @click="handleSubmit" :loading="submitting"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </template>
+  <script>
+  import Constant from "@/constant";
+  import { getToken } from "@/utils/auth"; // get token from cookie
+  import templateOptionApi from "@/api/base/templateOption";
+  
+  export default {
+    props: ["businessKey2", "title"],
+    data() {
+      return {
+          showPwd: true,
+          ruleValidate: {
+            serialNum: [
+              { required: true, message: "序号不能为空", trigger: "blur" },
+              ],
+              name: [
+              { required: true, message: "名称不能为空", trigger: "blur" },
+              ],
+              budgetRevenue: [
+              { required: true, message: "预算收入不能为空", trigger: "blur" },
+              ],
+              isSum: [
+              { required: true, message: "是否合计不能为空", trigger: "blur" },
+              ],
+              index: [
+              { required: true, message: "排序号不能为空", trigger: "blur" },
+              ],
+          },
+          roleList: [],
+          formModel: {},
+          showDialog: true,
+          loading: false,
+          submitting: false,
+          typeList:[
+            {
+                "name":"收入",
+                "value":"1",
+            },
+            {
+                "name":"支出",
+                "value":"2",
+            }
+          ],
+          isSumList:[
+            {
+              "label":"否",
+              "value":false
+            },
+            {
+              "label":"是",
+              "value":true
+            }]
+      };
+    },
+    created() {
+    },
+    methods: {
+      closeDialog() {
+        this.$emit("close", false);
+      },
+      handleSubmit() {
+        var self = this;
+  
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            (function () {
+              var id = self.formModel.id;
+              return templateOptionApi.addAndFundIncome(self.formModel);
+            })().then(function (response) {
+              var jsonData = response.data;
+  
+              if (jsonData.result) {
+                self.$message({
+                  message: "保存成功!",
+                  type: "success",
+                });
+  
+                self.$emit("close", true);
+              } else {
+                self.$message({
+                  message: jsonData.message + "",
+                  type: "warning",
+                });
+  
+                self.$emit("close", false);
+              }
+            });
+          }
+        });
+      },
+    },
+    async mounted() {
+      var self = this;
+      self.loading = true;
+  
+      (function () {
+        return templateOptionApi.createFundIncome(self.businessKey2);
+        
+      })()
+        .then((response) => {
+          var jsonData = response.data;
+  
+          if (jsonData.result) {
+              self.formModel = jsonData.data;
+  
+              let photo = self.formModel.photo;
+              if (photo != null) {
+                  self.fileUrl = photo 
+              }
+  
+              self.showModal = true;
+          } else {
+            self.$message.error(jsonData.message + "");
+          }
+  
+          self.loading = false;
+        })
+        .catch((error) => {
+          self.$message.error(error + "");
+          self.loading = false;
+        });
+    },
+    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>

+ 55 - 8
src/views/base/templateDepartment-detail.vue

@@ -7,7 +7,7 @@
       style="text-align: left;"
       @close="closeDialog"
       :close-on-click-modal="false"
-      width="1350px"
+      width="1380px"
     >
       <div class="user-panel" v-loading="loading">
         <el-form
@@ -17,6 +17,10 @@
           :label-width="'100px'"
           :inline="true"
         >
+        <el-row class="button-group">
+          <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd">新增新项</el-button>
+        </el-row>
+        <el-divider></el-divider>
             <el-table 
                 class="compact-table"
                 :data="formModel.optionList" >
@@ -39,10 +43,11 @@
                 </el-table-column>
                 <el-table-column prop="chargePerson" label="责任人"></el-table-column>
                 <el-table-column prop="index" label="排序号" ></el-table-column>
-                <el-table-column label="操作"  width="130">
+                <el-table-column label="操作"  width="180">
                   <template slot-scope="{row}">
                     <el-link v-if="formModel.status=='0'" type="warning" @click="handleEdit(row)" style="margin-right:10px">编辑 -</el-link>
-                    <el-link v-if="!row.isSum" type="primary" @click="handlebudgetEdit(row)">修改预算</el-link>
+                    <el-link v-if="!row.isSum" type="primary" @click="handlebudgetEdit(row)">修改预算-</el-link>
+                    <el-link type="primary" @click="handleNameEdit(row)">修改名称</el-link>
                   </template>
                 </el-table-column>
             </el-table>
@@ -65,6 +70,18 @@
         :title="modalTitle3"
         @close="onDetailModalClose3"
       ></budgetModify-detail>
+      <templateDepartTitle-edit
+        v-if="showModal4"
+        :businessKey2="businessKey2"
+        :title="modalTitle4"
+        @close="onDetailModalClose4"
+      ></templateDepartTitle-edit>
+      <templateDepartName-edit
+        v-if="showModal5"
+        :businessKey2="businessKey2"
+        :title="modalTitle5"
+        @close="onDetailModalClose5"
+      ></templateDepartName-edit>
     </el-dialog>
   </template>
   <script>
@@ -73,7 +90,10 @@
   import templateOptionApi from "@/api/base/templateOption";
   import departmentInfoApi from "@/api/base/departmentInfo";
   import templateDepartmentEdit from "./templateDepartment-edit";
+  import templateDepartTitleEdit from "./templateDepartTitle-edit";
   import budgetModifyDetail from "./budgetModify-detail";
+  import templateDepartNameEdit from "./templateDepartName-edit";
+
  
   
   export default {
@@ -109,7 +129,12 @@
           }],
           showModal: false,
           showModal3: false,
+          showModal4:false,
+          showModal5:false,
           modalTitle3:"",
+          modalTitle4:"",
+          modalTitle5:"",
+          
       };
     },
     computed:{
@@ -172,10 +197,11 @@
         });
       },
       handleAdd() {
-        this.formModel.optionList.push({
-            serialNumber: "",
-            name: "",
-        });
+        var self = this;
+        
+        self.modalTitle4 = "新增项目";
+        self.businessKey2 = self.formModel.templateId;
+        self.showModal4 = true;
       },
       handleInsert(row) {
         this.formModel.optionList.push({
@@ -202,6 +228,13 @@
         self.businessKey2 = record.id;
         self.showModal3 = true;
       },
+      handleNameEdit(record) {
+        var self = this;
+        
+        self.modalTitle5 = "编辑项目";
+        self.businessKey2 = record.id;
+        self.showModal5 = true;
+      },
       onDetailModalClose(refreshed) {
         this.showModal = false;
         if(refreshed) {
@@ -214,6 +247,18 @@
           this.loadDataList(this.businessKey)
         }
       },
+      onDetailModalClose4(refreshed) {
+        this.showModal4 = false;
+        if(refreshed) {
+          this.loadDataList(this.businessKey)
+        }
+      },
+      onDetailModalClose5(refreshed) {
+        this.showModal5 = false;
+        if(refreshed) {
+          this.loadDataList(this.businessKey)
+        }
+      },
       loadDataList(businessKey){
         var self = this;
         self.loading = true;
@@ -244,7 +289,9 @@
     },
     components: {
       "templateDepartment-edit":templateDepartmentEdit,
-      "budgetModify-detail":budgetModifyDetail
+      "budgetModify-detail":budgetModifyDetail,
+      "templateDepartTitle-edit":templateDepartTitleEdit,
+      "templateDepartName-edit":templateDepartNameEdit
     },
   };
   </script>

+ 16 - 1
src/views/base/templateDepartment-list.vue

@@ -71,10 +71,13 @@
             <el-link type="primary" :href="scope.row.attachment" target="_blank" :underline="false">
             <el-image
               style="width: 40px; height: 40px"
-              v-if="scope.row.attachment"
+              v-if="scope.row.attachment&&isImageFile(scope.row.attachment)"
               :src="scope.row.attachment"
               fit="fit">
             </el-image>
+            <span v-else>
+              <span v-if="scope.row.attachment">附件</span>
+            </span>
             </el-link>
           </template>
         </el-table-column>
@@ -542,6 +545,18 @@
             });
           });
         },
+        isImageFile(url){
+          // 获取文件扩展名
+          const extension = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
+          // 支持的图片扩展名列表
+          const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp'];
+          // 判断当前文件扩展名是否为图片扩展名
+          if (imageExtensions.includes(extension)) {
+            return true;
+          }
+          return false;
+        },
+
     },
     mounted: function() {
       var self = this;

+ 3 - 3
src/views/base/templateInfo-list.vue

@@ -83,9 +83,9 @@
         <el-table-column  prop="createTime"  label="创建时间" width="180"></el-table-column>
         <el-table-column label="操作" width="250">
           <template slot-scope="{row}" >
-            <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
-            <el-button size="mini" type="primary" @click="handleOption(row)">模板选项</el-button>
-            <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
+            <el-button v-if="row.status=='0'" size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
+            <el-button v-if="row.status=='0'" size="mini" type="primary" @click="handleOption(row)">模板选项</el-button>
+            <el-button v-if="row.status=='0'" size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
           </template>
         </el-table-column>
       </el-table>