Ver Fonte

支部活动预告活动预算

Wang Zi Wen há 2 anos atrás
pai
commit
12e05414c2

+ 14 - 1
ruoyi-system/src/main/java/com/ruoyi/branch/domain/TBranchActivityNotice.java

@@ -1,6 +1,8 @@
 package com.ruoyi.branch.domain;
 
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -53,7 +55,18 @@ public class TBranchActivityNotice extends BaseEntity
     @Excel(name = "部门id")
     private Long deptId;
 
-    public void setNoticeId(Long noticeId) 
+    /** 活动经费预算 */
+    private List<TBranchActivityBudget> budgetList;
+
+    public List<TBranchActivityBudget> getBudgetList() {
+        return budgetList;
+    }
+
+    public void setBudgetList(List<TBranchActivityBudget> budgetList) {
+        this.budgetList = budgetList;
+    }
+
+    public void setNoticeId(Long noticeId)
     {
         this.noticeId = noticeId;
     }

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/branch/mapper/TBranchActivityBudgetMapper.java

@@ -51,6 +51,14 @@ public interface TBranchActivityBudgetMapper
      */
     public int deleteTBranchActivityBudgetByBudgetId(Long budgetId);
 
+    /**
+     * 删除支部活动预算
+     *
+     * @param noticeId 支部活动预告主键
+     * @return 结果
+     */
+    public int deleteTBranchActivityBudgetByNoticeId(Long noticeId);
+
     /**
      * 批量删除支部活动预算
      * 

+ 33 - 2
ruoyi-system/src/main/java/com/ruoyi/branch/service/impl/TBranchActivityNoticeServiceImpl.java

@@ -2,6 +2,8 @@ package com.ruoyi.branch.service.impl;
 
 import java.util.List;
 
+import com.ruoyi.branch.domain.TBranchActivityBudget;
+import com.ruoyi.branch.mapper.TBranchActivityBudgetMapper;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +24,9 @@ public class TBranchActivityNoticeServiceImpl implements ITBranchActivityNoticeS
     @Autowired
     private TBranchActivityNoticeMapper tBranchActivityNoticeMapper;
 
+    @Autowired
+    private TBranchActivityBudgetMapper tBranchActivityBudgetMapper;
+
     /**
      * 查询支部活动预告
      * 
@@ -31,7 +36,12 @@ public class TBranchActivityNoticeServiceImpl implements ITBranchActivityNoticeS
     @Override
     public TBranchActivityNotice selectTBranchActivityNoticeByNoticeId(Long noticeId)
     {
-        return tBranchActivityNoticeMapper.selectTBranchActivityNoticeByNoticeId(noticeId);
+        TBranchActivityNotice tBranchActivityNotice = tBranchActivityNoticeMapper.selectTBranchActivityNoticeByNoticeId(noticeId);
+        // 根据noticeId查询budgetList
+        TBranchActivityBudget budget = new TBranchActivityBudget();
+        budget.setNoticeId(noticeId);
+        tBranchActivityNotice.setBudgetList(tBranchActivityBudgetMapper.selectTBranchActivityBudgetList(budget));
+        return tBranchActivityNotice;
     }
 
     /**
@@ -57,7 +67,14 @@ public class TBranchActivityNoticeServiceImpl implements ITBranchActivityNoticeS
     public int insertTBranchActivityNotice(TBranchActivityNotice tBranchActivityNotice)
     {
         tBranchActivityNotice.setCreateTime(DateUtils.getNowDate());
-        return tBranchActivityNoticeMapper.insertTBranchActivityNotice(tBranchActivityNotice);
+        int result = tBranchActivityNoticeMapper.insertTBranchActivityNotice(tBranchActivityNotice);
+        // 添加相关活动预算
+        for (TBranchActivityBudget tBranchActivityBudget : tBranchActivityNotice.getBudgetList()) {
+            tBranchActivityBudget.setNoticeId(tBranchActivityNotice.getNoticeId());
+            tBranchActivityBudget.setDeptId(tBranchActivityNotice.getDeptId());
+            tBranchActivityBudgetMapper.insertTBranchActivityBudget(tBranchActivityBudget);
+        }
+        return result;
     }
 
     /**
@@ -70,6 +87,14 @@ public class TBranchActivityNoticeServiceImpl implements ITBranchActivityNoticeS
     public int updateTBranchActivityNotice(TBranchActivityNotice tBranchActivityNotice)
     {
         tBranchActivityNotice.setUpdateTime(DateUtils.getNowDate());
+        // 删除相关活动相关预算
+        tBranchActivityBudgetMapper.deleteTBranchActivityBudgetByNoticeId(tBranchActivityNotice.getNoticeId());
+        // 重新添加活动预算
+        for (TBranchActivityBudget tBranchActivityBudget : tBranchActivityNotice.getBudgetList()) {
+            tBranchActivityBudget.setNoticeId(tBranchActivityNotice.getNoticeId());
+            tBranchActivityBudget.setDeptId(tBranchActivityNotice.getDeptId());
+            tBranchActivityBudgetMapper.insertTBranchActivityBudget(tBranchActivityBudget);
+        }
         return tBranchActivityNoticeMapper.updateTBranchActivityNotice(tBranchActivityNotice);
     }
 
@@ -82,6 +107,10 @@ public class TBranchActivityNoticeServiceImpl implements ITBranchActivityNoticeS
     @Override
     public int deleteTBranchActivityNoticeByNoticeIds(Long[] noticeIds)
     {
+        for (Long noticeId : noticeIds) {
+            // 删除相关活动预算
+            tBranchActivityBudgetMapper.deleteTBranchActivityBudgetByNoticeId(noticeId);
+        }
         return tBranchActivityNoticeMapper.deleteTBranchActivityNoticeByNoticeIds(noticeIds);
     }
 
@@ -94,6 +123,8 @@ public class TBranchActivityNoticeServiceImpl implements ITBranchActivityNoticeS
     @Override
     public int deleteTBranchActivityNoticeByNoticeId(Long noticeId)
     {
+        // 删除相关活动预算
+        tBranchActivityBudgetMapper.deleteTBranchActivityBudgetByNoticeId(noticeId);
         return tBranchActivityNoticeMapper.deleteTBranchActivityNoticeByNoticeId(noticeId);
     }
 }

+ 4 - 0
ruoyi-system/src/main/resources/mapper/branch/TBranchActivityBudgetMapper.xml

@@ -92,6 +92,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update t_branch_activity_budget set del_flag = 2 where budget_id = #{budgetId}
     </update>
 
+    <update id="deleteTBranchActivityBudgetByNoticeId" parameterType="Long">
+        update t_branch_activity_budget set del_flag = 2 where notice_id = #{noticeId}
+    </update>
+
     <update id="deleteTBranchActivityBudgetByBudgetIds" parameterType="String">
         update t_branch_activity_budget set del_flag = 2 where budget_id in
         <foreach item="budgetId" collection="array" open="(" separator="," close=")">

+ 1 - 1
ruoyi-system/src/main/resources/mapper/branch/TBranchActivityNoticeMapper.xml

@@ -47,7 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         and u.del_flag = 0
     </select>
         
-    <insert id="insertTBranchActivityNotice" parameterType="TBranchActivityNotice">
+    <insert id="insertTBranchActivityNotice" parameterType="TBranchActivityNotice" useGeneratedKeys="true" keyProperty="noticeId">
         <selectKey keyProperty="noticeId" resultType="long" order="BEFORE">
             SELECT seq_t_branch_activity_notice.NEXTVAL as noticeId FROM DUAL
         </selectKey>

+ 127 - 35
ruoyi-ui/src/views/branch/zbfc/activitynotice/index.vue

@@ -132,41 +132,95 @@
     />
 
     <!-- 添加或修改支部活动预告对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="85px">
-        <el-form-item label="党支部" prop="deptId">
-          <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择党支部" />
-        </el-form-item>
-        <el-form-item label="联系点领导" prop="contactLeader">
-          <el-select v-model="form.contactLeader" multiple placeholder="请选择联系点领导">
-            <el-option
-              v-for="dict in userList"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="活动时间" prop="activityTime">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.activityTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择活动时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="活动地点" prop="activityVenue">
-          <el-input v-model="form.activityVenue" placeholder="请输入活动地点" />
-        </el-form-item>
-        <el-form-item label="活动内容" prop="activityContent">
-          <el-input v-model="form.activityContent" placeholder="请输入活动内容" type="textarea" :rows="4" />
-        </el-form-item>
-        <el-form-item label="联系点领导参加情况" prop="leaderAttendance">
-          <el-input v-model="form.leaderAttendance" placeholder="请输入联系点领导参加情况" />
-        </el-form-item>
-        <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
-        </el-form-item>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="党支部" prop="deptId" style="width: 300px;">
+              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择党支部" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系点领导" prop="contactLeader">
+              <el-select v-model="form.contactLeader" multiple placeholder="请选择联系点领导">
+                <el-option
+                  v-for="dict in userList"
+                  :key="dict.dictValue"
+                  :label="dict.dictLabel"
+                  :value="dict.dictValue"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="活动时间" prop="activityTime">
+              <el-date-picker clearable size="small" style="width: 200px"
+                              v-model="form.activityTime"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="选择活动时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="活动地点" prop="activityVenue">
+              <el-input v-model="form.activityVenue" placeholder="请输入活动地点" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="活动内容" prop="activityContent">
+              <el-input v-model="form.activityContent" placeholder="请输入活动内容" type="textarea" :rows="4" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="联系点领导参加情况" prop="leaderAttendance">
+              <el-input v-model="form.leaderAttendance" placeholder="请输入联系点领导参加情况" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="活动经费">
+              <el-table :data="activitybudgetList" border>
+                <el-table-column label="分项" align="center" prop="budgetItem">
+                  <template slot-scope="scope">
+                    <el-input v-model="scope.row.budgetItem" />
+                  </template>
+                </el-table-column>
+                <el-table-column label="预算金额" align="center" prop="budgetAmount">
+                  <template slot-scope="scope">
+                    <el-input v-model="scope.row.budgetAmount" @input="calcBudget"/>
+                  </template>
+                </el-table-column>
+                <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+                  <template slot-scope="scope">
+                    <el-button
+                      size="mini"
+                      type="text"
+                      icon="el-icon-delete"
+                      @click="handleDeleteBudget(scope.row)"
+                    >删除分项</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <el-button
+                type="primary"
+                plain
+                icon="el-icon-plus"
+                size="mini"
+                @click="handleAddBudget"
+              >添加分项</el-button>
+            </el-form-item>
+            </el-col>
+          <el-col :span="24">
+            <el-form-item label="预算总额" >
+              <span v-if="form.budget != null" v-text="form.budget"></span>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="备注" prop="remarks">
+              <el-input v-model="form.remarks" placeholder="请输入备注" />
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -207,7 +261,8 @@
 </template>
 
 <script>
-import { listActivitynotice, getActivitynotice, delActivitynotice, addActivitynotice, updateActivitynotice, exportActivitynotice, importTemplate} from "@/api/branch/activitynotice";
+import { listActivitybudget, getActivitybudget, delActivitybudget, addActivitybudget, updateActivitybudget, exportActivitybudget} from "@/api/branch/activitybudget";
+import { listActivitynotice, getActivitynotice, delActivitynotice, addActivitynotice, updateActivitynotice, exportActivitynotice} from "@/api/branch/activitynotice";
 import { treeselect } from "@/api/system/dept";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
@@ -235,6 +290,8 @@ export default {
       total: 0,
       // 支部活动预告表格数据
       activitynoticeList: [],
+      // 支部活动预算表格数据
+      activitybudgetList: [],
       // 弹出层标题
       title: "",
       // 部门树选项
@@ -304,6 +361,35 @@ export default {
     this.getTreeselect();
   },
   methods: {
+    calcBudget() {
+      let sum = 0;
+      for (let i = 0; i< this.activitybudgetList.length; i++) {
+        this.activitybudgetList[i].index = i;
+        if (!isNaN(this.activitybudgetList[i].budgetAmount)) {
+          sum += Number(this.activitybudgetList[i].budgetAmount);
+        }
+      }
+
+      this.form.budget = sum;
+      console.log(this.form.budget)
+    },
+    handleDeleteBudget(row) {
+      let newList = [];
+      for (let i = 0; i < this.activitybudgetList.length; i++) {
+        if (row.index != this.activitybudgetList[i].index) {
+          newList.push(this.activitybudgetList[i]);
+        }
+      }
+      this.activitybudgetList = newList;
+      this.calcBudget();
+    },
+    handleAddBudget() {
+      if (this.activitybudgetList.length == 0) {
+        this.activitybudgetList.push({ "index": 0,"budgetItem": null, "budgetAmount": null });
+      } else {
+        this.activitybudgetList.push({ "index": this.activitybudgetList[this.activitybudgetList.length-1].index+1,"budgetItem": null, "budgetAmount": null });
+      }
+    },
     /** 查询部门列表 */
     getDeptList() {
       listDept().then(response => {
@@ -405,13 +491,18 @@ export default {
       this.reset();
       this.open = true;
       this.title = "添加支部活动预告";
+      this.activitybudgetList = [];
+      this.activitybudgetList.push({ "index": 0,"budgetItem": null, "budgetAmount": null });
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
+      this.activitybudgetList = [];
       this.reset();
       const noticeId = row.noticeId || this.ids
       getActivitynotice(noticeId).then(response => {
         this.form = response.data;
+        this.activitybudgetList = response.data.budgetList;
+        this.calcBudget();
         if (this.form.contactLeader != null) {
           this.form.contactLeader = this.form.contactLeader.split(",").map(Number);
         }
@@ -424,6 +515,7 @@ export default {
         if (this.form.contactLeader != null) {
           this.form.contactLeader = this.form.contactLeader.join();
         }
+        this.form.budgetList = this.activitybudgetList;
           this.$refs["form"].validate(valid => {
               if (valid) {
                   if (this.form.noticeId != null) {