Parcourir la source

完善 费用管理 工时

xuwenhao il y a 8 mois
Parent
commit
ab62fd58e9

+ 2 - 2
server/dao/projectWorkingHours.go

@@ -69,7 +69,7 @@ func QueryWorkingHoursSum(limit, offset, people int, code, time, yearTime string
 	if yearTime != "" {
 		db = db.Where("DATE_FORMAT(people_time, '%Y') = ?", yearTime)
 	}
-	err = db.Group("people").Order("project_working_hours.id desc").Limit(limit).Offset(offset).Preload("Constructor").Count(&total).Scan(&results).Error
+	err = db.Group("people").Limit(limit).Offset(offset).Preload("Constructor").Count(&total).Scan(&results).Error
 	return results, total, err
 }
 
@@ -96,7 +96,7 @@ func (pwh ProjectWorkingHours) CreateWorkingHours() error {
 
 // UpdateWorkingHours 修改工时
 func (pwh ProjectWorkingHours) UpdateWorkingHours() error {
-	return global.GVA_DB.Model(&ProjectWorkingHours{}).Updates(&pwh).Error
+	return global.GVA_DB.Model(&ProjectWorkingHours{}).Where("id = ?", pwh.ID).Updates(&pwh).Error
 }
 
 // TODO:工时删除

+ 1 - 1
server/service/admin/project.go

@@ -115,7 +115,7 @@ func (ps *ProjectService) QueryReimbursementList(info request.SearchProjectList)
 		}
 		reimbursements[i].FeeDetails = details
 	}
-	return
+	return reimbursements, total, err
 }
 
 func (ps *ProjectService) QueryReimbursement(code string) ([]dao.Reimbursement, error) {

+ 41 - 1
web/src/api/finance.js

@@ -78,6 +78,14 @@ export const createBorrowing = (data) => {
   })
 }
 
+export const createFeeGenre = (data) => {
+  return service({
+    url: '/finance/createExpensesGenre',
+    method: 'post',
+    data
+  })
+}
+
 export const updateConstructor = (data) => {
   return service({
     url: '/constructor/updateConstructor',
@@ -102,6 +110,22 @@ export const updateBorrowing = (data) => {
   })
 }
 
+export const updateFeeGenre = (data) => {
+  return service({
+    url: '/finance/updateExpensesGenre',
+    method: 'put',
+    data
+  })
+}
+
+export const updateWorkingHours = (data) => {
+  return service({
+    url: '/project/updateWorkingHours',
+    method: 'put',
+    data
+  })
+}
+
 export const deleteConstructor = (data) => {
   return service({
     url: '/constructor/deleteConstructor',
@@ -124,4 +148,20 @@ export const deleteBorrowing = (data) => {
     method: 'delete',
     data
   })
-}
+}
+
+export const deleteFeeGenre = (data) => {
+  return service({
+    url: '/finance/deleteExpensesGenre',
+    method: 'delete',
+    data
+  })
+}
+
+export const deleteWorkingHours = (data) => {
+  return service({
+    url: '/project/deleteWorkingHours',
+    method: 'delete',
+    data
+  })
+}

+ 195 - 10
web/src/view/finance/borrowing/borrowing.vue

@@ -49,6 +49,7 @@
               </el-form>
             </el-col>
             <el-col :span="4">
+              <el-button @click="openFeeGenre = true">费用类型</el-button>
               <el-button @click="dailyExpensesOpen">新增记录</el-button>
             </el-col>
           </el-row>
@@ -239,6 +240,80 @@
               </div>
             </template>
           </el-drawer>
+          <!--          费用类型-->
+          <el-dialog
+            v-model="openFeeGenre"
+            title="费用类型"
+            width="800"
+            align-center
+          >
+            <el-collapse v-model="activeNames">
+              <el-collapse-item
+                title="操作"
+                name="1"
+              >
+                <el-form>
+                  <el-form-item label="施工人员">
+                    <el-input
+                      v-model="feeGenreData.name"
+                      style="width: 400px"
+                    >
+                      <template #prepend>
+                        <el-select
+                          v-model="feeGenreData.id"
+                          placeholder="查询"
+                          style="width: 115px"
+                          clearable
+                          filterable
+                        >
+                          <el-option
+                            v-for="item in feeGenre"
+                            :key="item.ID"
+                            :label="item.name"
+                            :value="item.ID"
+                          />
+                        </el-select>
+                      </template>
+                      <template #append>
+                        <el-button @click="erasureFeeGenre">删除</el-button>
+                      </template>
+                    </el-input>
+                  </el-form-item>
+                  <el-form-item>
+                    <el-button @click="saveFeeGenre">保存</el-button>
+                  </el-form-item>
+                </el-form>
+              </el-collapse-item>
+              <el-collapse-item
+                title="列表"
+                name="2"
+              >
+                <div>
+                  <el-table :data="feeGenre">
+                    <el-table-column
+                      prop="ID"
+                      label="编号"
+                    />
+                    <el-table-column
+                      prop="name"
+                      label="姓名"
+                    />
+                  </el-table>
+                </div>
+              </el-collapse-item>
+            </el-collapse>
+            <template #footer>
+              <div class="dialog-footer">
+                <el-button @click="openFeeGenre = false">取消</el-button>
+                <el-button
+                  type="primary"
+                  @click="openFeeGenre = false"
+                >
+                  确定
+                </el-button>
+              </div>
+            </template>
+          </el-dialog>
         </el-main>
       </el-tab-pane>
       <el-tab-pane
@@ -269,7 +344,9 @@
                 </el-form-item>
               </el-form>
             </el-col>
-            <el-col :span="4" />
+            <el-col :span="4">
+              <el-button @click="addBorrowing">新增数据</el-button>
+            </el-col>
           </el-row>
         </el-header>
         <el-main>
@@ -321,7 +398,10 @@
             align-center
           >
             <div>
-              <el-form>
+              <el-form
+                label-width="auto"
+                style="max-width: 400px"
+              >
                 <el-form-item label="名称">
                   <el-input v-model="borrowingData.name" />
                 </el-form-item>
@@ -360,7 +440,7 @@
               <div class="dialog-footer">
                 <el-button
                   type="warning"
-                  @click="borrowingDialog = false"
+                  @click="erasureBorrowing"
                 >删除</el-button>
                 <el-button @click="borrowingDialog = false">取消</el-button>
                 <el-button
@@ -382,12 +462,12 @@
 import { onMounted, ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import {
-  createBorrowing,
-  createDailyExpenses,
-  deleteDailyExpenses, queryBorrowingList,
+  createBorrowing, createConstructor,
+  createDailyExpenses, createFeeGenre, deleteBorrowing, deleteConstructor,
+  deleteDailyExpenses, deleteFeeGenre, queryBorrowingList,
   queryDailyExpensesList,
-  queryExpensesGenre, updateBorrowing,
-  updateDailyExpenses
+  queryExpensesGenre, updateBorrowing, updateConstructor,
+  updateDailyExpenses, updateFeeGenre
 } from '@/api/finance'
 import { getAllUsers } from '@/api/user'
 
@@ -443,6 +523,7 @@ const queryData = async() => {
     searchDailyExpenses.value.state = null
   }
   await queryExpensesGenre().then(res => {
+    console.log(res.data)
     feeGenre.value = res.data
   })
   await getAllUsers().then(res => {
@@ -600,14 +681,32 @@ const erasureDailyExpenses = async() => {
 // 支借
 const borrowingDialog = ref(false)
 
-const borrowingData = ref()
+const borrowingData = ref({
+  ID: null,
+  name: '',
+  applicant: '',
+  applicationTime: '',
+  charge: null,
+  price: 0
+})
 
 const openBorrowing = (val) => {
-  console.log(val)
   borrowingData.value = val
   borrowingDialog.value = true
 }
 
+const addBorrowing = () => {
+  borrowingData.value = {
+    ID: null,
+    name: '',
+    applicant: '',
+    applicationTime: '',
+    charge: null,
+    price: 0
+  }
+  borrowingDialog.value = true
+}
+
 // 保存
 const saveBorrowing = async() => {
   const dd = borrowingData.value
@@ -635,6 +734,92 @@ const saveBorrowing = async() => {
   }
 }
 
+// 删除
+const erasureBorrowing = async() => {
+  const dd = dailyExpensesData.value
+  ElMessageBox.confirm(
+    '确定进行删除操作吗?',
+    '删除',
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }
+  )
+    .then(async() => {
+      await deleteBorrowing(dd).then(res => {
+        console.log(res)
+        if (res.code === 0) {
+          ElMessage.success('删除成功')
+          queryData()
+          borrowingDialog.value = false
+        }
+      })
+    })
+}
+
+// 费用类型
+const activeNames = ref(['1'])
+const openFeeGenre = ref(false)
+
+const feeGenreData = ref({
+  id: null,
+  name: ''
+})
+
+const saveFeeGenre = async() => {
+  if (feeGenreData.value.name === '') {
+    ElMessage.error('数据不能为空')
+    return false
+  }
+  if (feeGenreData.value.id === null ) {
+    await createFeeGenre(feeGenreData.value).then(res => {
+      if (res.code === 0) {
+        ElMessage.success('新增成功')
+      }
+      queryData()
+    })
+  } else {
+    await updateFeeGenre(feeGenreData.value).then(res => {
+      if (res.code === 0) {
+        ElMessage.success('修改成功')
+      }
+      queryData()
+    })
+  }
+}
+
+// 删除
+const erasureFeeGenre = async() => {
+  if (feeGenreData.value.id === null) {
+    ElMessage.error('请选择人员')
+    return false
+  }
+  ElMessageBox.confirm(
+    '确定进行删除操作吗?',
+    '删除',
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }
+  )
+    .then(async() => {
+      await deleteFeeGenre(feeGenreData.value).then(res => {
+        if (res.code === 0) {
+          ElMessage.success('删除成功')
+        }
+        queryData()
+      })
+    })
+    .catch(() => {
+      ElMessage({
+        type: 'info',
+        message: '取消删除',
+      })
+    })
+}
+
 onMounted(() => {
   queryData()
 })

+ 100 - 2
web/src/view/finance/workingHours/workingHours.vue

@@ -86,6 +86,18 @@
             prop="peopleTime"
             label="时间"
           />
+          <el-table-column label="操作">
+            <template #default="scope">
+              <el-button
+                type="primary"
+                @click="openWorkingHours(scope.row)"
+              >修改</el-button>
+              <el-button
+                type="danger"
+                @click="erasureWorkingHours(scope.row)"
+              >删除</el-button>
+            </template>
+          </el-table-column>
         </el-table>
       </div>
       <div v-if="isOpen === 2">
@@ -206,6 +218,47 @@
           </div>
         </template>
       </el-dialog>
+      <!--      修改-->
+      <el-dialog
+        v-model="workingDialog"
+        title="Warning"
+        width="500"
+        align-center
+      >
+        <div>
+          <el-form label-width="auto">
+            <el-form-item label="编号">
+              <el-input
+                v-model="workingHoursData.projectCode"
+                disabled
+              />
+            </el-form-item>
+            <el-form-item label="人员">
+              <el-input
+                v-model="workingHoursData.constructor.name"
+                disabled
+              />
+            </el-form-item>
+            <el-form-item label="天数">
+              <el-input-number
+                v-model.number="workingHoursData.days"
+                :precision="1"
+              />
+            </el-form-item>
+          </el-form>
+        </div>
+        <template #footer>
+          <div class="dialog-footer">
+            <el-button @click="workingDialog = false">取消</el-button>
+            <el-button
+              type="primary"
+              @click="modifyWorkingHours"
+            >
+              修改
+            </el-button>
+          </div>
+        </template>
+      </el-dialog>
     </el-main>
   </el-container>
 </template>
@@ -214,10 +267,10 @@
 import { ref, onMounted } from 'vue'
 import {
   createConstructor,
-  deleteConstructor,
+  deleteConstructor, deleteWorkingHours,
   queryConstructor,
   queryConstructorList, queryWorkingHoursList, queryWorkingHoursSum,
-  updateConstructor
+  updateConstructor, updateWorkingHours
 } from '@/api/finance'
 import { ElMessage, ElMessageBox } from 'element-plus'
 
@@ -377,6 +430,51 @@ const erasureConstructor = async() => {
     })
 }
 
+// 工时
+const workingDialog = ref(false)
+const workingHoursData = ref()
+const openWorkingHours = (val) => {
+  workingHoursData.value = val
+  workingDialog.value = true
+}
+
+const modifyWorkingHours = async() => {
+  await updateWorkingHours(workingHoursData.value).then(res => {
+    if (res.code === 0) {
+      ElMessage.success('修改成功')
+    }
+    queryData()
+    workingDialog.value = false
+  })
+}
+
+// 删除
+const erasureWorkingHours = async(val) => {
+  ElMessageBox.confirm(
+    '确定进行删除操作吗?',
+    '删除',
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }
+  )
+    .then(async() => {
+      await deleteWorkingHours(val).then(res => {
+        if (res.code === 0) {
+          ElMessage.success('删除成功')
+        }
+        queryData()
+      })
+    })
+    .catch(() => {
+      ElMessage({
+        type: 'info',
+        message: '取消删除',
+      })
+    })
+}
+
 onMounted(() => {
   queryData()
 })