Parcourir la source

Merge remote-tracking branch 'origin/dev' into dev

xu il y a 2 ans
Parent
commit
82bf640e4b

+ 1 - 1
web/.env.development

@@ -11,4 +11,4 @@ VITE_EDITOR = webstorm
 
 // VITE_EDITOR = webstorm 如果使用webstorm开发且要使用dom定位到代码行功能 请先自定添加 webstorm到环境变量 再将VITE_EDITOR值修改为webstorm
 // 如果使用docker-compose开发模式,设置为下面的地址或本机主机IP
-//VITE_BASE_PATH = http://106.52.134.22
+// VITE_BASE_PATH = http://106.52.134.22

+ 4 - 31
web/src/api/cost.js

@@ -136,38 +136,11 @@ export const delProjectCostType = (data) => {
   })
 }
 
-// 查询公司费用类型
-export const firmCostType = () => {
+// 查询备用金信息
+export const getStandbyMoney = () => {
   return service({
-    url: '/finance/queryExpensesGenre',
-    method: 'get'
-  })
-}
-
-// 新增公司费用类型
-export const postFirmCostType = (data) => {
-  return service({
-    url: '/finance/createExpensesGenre',
-    method: 'post',
-    data
-  })
-}
-
-// 更新公司费用类型
-export const putFirmCostType = (data) => {
-  return service({
-    url: '/finance/updateExpensesGenre',
-    method: 'put',
-    data
-  })
-}
-
-// 删除公司费用类型
-export const delFirmCostType = (data) => {
-  return service({
-    url: '/finance/updateExpensesGenre',
-    method: 'delete',
-    data
+    url: '/finance/queryReserveBalance',
+    method: 'GET'
   })
 }
 

+ 23 - 0
web/src/pinia/node/node.js

@@ -0,0 +1,23 @@
+import { defineStore } from 'pinia'
+import { reactive } from 'vue'
+import { getNodeList } from '@/api/node'
+export const nodeData = defineStore('node', () => {
+  const nodeList = reactive([])
+  const nodeListCondition = reactive({
+    page: 1,
+    pageSize: 10
+  })
+  const queryNodeList = () => {
+    getNodeList(nodeListCondition).then(res => {
+      if (res.code === 0) {
+        console.log('节点列表', res.data)
+        nodeList.length = 0
+        nodeList.push(...res.data.list)
+      }
+    })
+  }
+  return {
+    nodeList,
+    queryNodeList
+  }
+})

+ 254 - 0
web/src/view/approve/flowManage/components/nodeManage.vue

@@ -0,0 +1,254 @@
+<template>
+  <div>
+    <el-row>
+      <el-col
+        :span="24"
+      >
+        <el-form :inline="true">
+          <el-form-item label="审批人:">
+            <el-select
+              v-model="approverValue"
+              placeholder="请选择审核人员"
+              filterable
+              clearable
+              @click="changeApprover"
+              @clear="clearApprover"
+            >
+              <el-option
+                v-for="item in approverList"
+                :key="item.ID"
+                :label="item.user.nickName"
+                :value="item.ID"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button
+              icon="Search"
+              type="primary"
+              @click="queryApproverNode"
+            >查询</el-button>
+          </el-form-item>
+          <el-form-item>
+            <el-button
+              icon="Plus"
+              type="primary"
+              @click="openAddDialog"
+            >新增</el-button>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+    <el-row style="margin-top: 20px">
+      <el-col :span="24">
+        <el-table :data="point.nodeList">
+          <el-table-column
+            prop="nodeName"
+            label="节点名称"
+            align="center"
+          />
+          <el-table-column
+            prop="approver.nickName"
+            label="审核人"
+            align="center"
+          />
+          <el-table-column
+            prop="nodeOrder"
+            label="节点顺序"
+            align="center"
+          />
+          <el-table-column
+            label="操作"
+            align="center"
+          >
+            <template #default="scope">
+              <el-popover
+                placement="top"
+                trigger="click"
+                :width="200"
+                :content="scope.row.nodeDescription"
+              >
+                <template #reference>
+                  <el-button
+                    text
+                    type="primary"
+                    icon="Memo"
+                    size="small"
+                  >描述</el-button>
+                </template>
+              </el-popover>
+              <el-button
+                text
+                type="primary"
+                icon="Memo"
+                size="small"
+                @click="deleteNode(scope.row)"
+              >删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+    <el-dialog
+      v-model="addDialogShow"
+      title="新增节点"
+    >
+      <el-form
+        size="large"
+        label-width="110"
+        label-position="left"
+      >
+        <el-form-item label="审批节点名称:">
+          <el-input
+            v-model="createNodeData.nodeName"
+            placeholder="请输入审批节点名称"
+          />
+        </el-form-item>
+        <el-form-item label="审批人:">
+          <el-select
+            v-model="createNodeData.approverId"
+            placeholder="请选择审核人员"
+            filterable
+          >
+            <el-option
+              v-for="item in approverList"
+              :key="item.ID"
+              :label="item.user.nickName"
+              :value="item.ID"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="节点顺序:">
+          <el-select v-model="createNodeData.nodeOrder">
+            <el-option
+              v-for="(item,index) in orderList"
+              :key="index"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="节点描述:">
+          <el-input
+            v-model="createNodeData.nodeDescription"
+            type="textarea"
+            maxlength="200"
+            show-word-limit
+            :rows="6"
+            placeholder="请输入节点相关描述"
+          />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button
+            size="large"
+            type="primary"
+            @click="createNode"
+          >确认</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { reactive, onMounted, ref } from 'vue'
+import { getApprovePerson } from '@/api/approver'
+import { getApproverNode, delNode } from '@/api/node'
+import { nodeData } from '@/pinia/node/node'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { postNode } from '@/api/node'
+defineOptions({
+  name: 'NodeManage'
+})
+onMounted(() => {
+  queryApprover()
+})
+const point = nodeData()
+// 按审核人查询节点
+const condition = reactive({
+  approverId: 0
+})
+const approverValue = ref('')
+
+const changeApprover = (val) => {
+  condition.approverId = val
+  approverList.forEach(item => {
+    if (item.ID === val) {
+      approverValue.value = item.user.nickName
+    }
+  })
+}
+const clearApprover = () => {
+  condition.approverId = 0
+  approverValue.value = ''
+}
+const queryApproverNode = () => {
+  getApproverNode(condition).then(res => {
+    if (res.code === 0) {
+      console.log(res)
+    }
+  })
+}
+
+// 审核人列表
+const approverList = reactive([])
+const queryApprover = () => {
+  getApprovePerson().then(res => {
+    if (res.code === 0) {
+      approverList.length = 0
+      approverList.push(...res.data)
+    }
+  })
+}
+
+// 新增节点
+const addDialogShow = ref(false)
+const orderList = reactive([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
+const createNodeData = reactive({
+  nodeName: '',
+  approverId: 0,
+  nodeOrder: 0,
+  nodeDescription: ''
+})
+const openAddDialog = () => {
+  addDialogShow.value = true
+  createNodeData.approverId = approverList[0].ID
+  createNodeData.nodeOrder = orderList[0]
+}
+const createNode = () => {
+  postNode(createNodeData).then(res => {
+    console.log(res)
+    if (res.code === 0) {
+      point.queryNodeList()
+      ElMessage.success('新增节点成功')
+    }
+  })
+}
+
+// 删除节点
+const deleteNode = (val) => {
+  console.log(val)
+  // ElMessageBox.confirm(
+  //   '确定要删除此费用记录吗?',
+  //   '删除记录',
+  //   {
+  //     confirmButtonText: '删除',
+  //     cancelButtonText: '取消',
+  //     type: 'warning',
+  //   }
+  // )
+  //   .then(() => {})
+  //   .catch(() => {
+  //     ElMessage({
+  //       type: 'info',
+  //       message: '取消删除',
+  //     })
+  //   })
+}
+</script>
+
+<style scoped>
+
+</style>

+ 22 - 114
web/src/view/approve/flowManage/flowManage.vue

@@ -1,132 +1,40 @@
 <template>
   <div>
-    <el-drawer
-      v-model="nodeManageShow"
-      title="节点管理"
-    />
     <el-row>
-      <el-col
-        :span="23"
-        :offset="1"
-      >
-        <el-form :inline="true">
-          <el-form-item label="审批人:">
-            <el-select
-              v-model="approverValue"
-              placeholder="请选择审核人员"
-              filterable
-              clearable
-              @click="changeApprover"
-              @clear="clearApprover"
-            >
-              <el-option
-                v-for="item in approverList"
-                :key="item.ID"
-                :label="item.user.nickName"
-                :value="item.ID"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-button @click="queryApproverNode">查询</el-button>
-          </el-form-item>
-          <el-form-item>
-            <el-button @click="createNode">新增</el-button>
-          </el-form-item>
-        </el-form>
-      </el-col>
-    </el-row>
-    <el-row style="margin-top: 40px">
-      <el-col :span="24">
-        <el-table />
+      <el-col :span="3">
+        <el-button
+          icon="Edit"
+          type="primary"
+          @click="openNodeManage"
+        >节点编辑</el-button>
       </el-col>
     </el-row>
+    <el-drawer
+      v-model="nodeManageShow"
+      title="节点管理"
+      size="50%"
+    >
+      <node-manage />
+    </el-drawer>
   </div>
 </template>
 
 <script setup>
-import { reactive, onMounted, ref } from 'vue'
-import { getApprovePerson } from '@/api/approver'
-import { getApproverNode, getNodeList, postNode } from '@/api/node'
-
+import NodeManage from './components/nodeManage.vue'
+import { ref, onMounted } from 'vue'
+import { nodeData } from '@/pinia/node/node'
 defineOptions({
   name: 'FlowManage'
 })
-
+const record = nodeData()
 onMounted(() => {
-  queryApprover()
-  queryNodeList()
-})
-// 节点列表
-const nodeList = reactive([])
-
-// 按审核人查询节点
-const condition = reactive({
-  approverId: 0
+  // 获取节点列表
+  record.queryNodeList()
 })
-const approverValue = ref('')
-
-const changeApprover = (val) => {
-  condition.approverId = val
-  approverList.forEach(item => {
-    if (item.ID === val) {
-      approverValue.value = item.user.nickName
-    }
-  })
-}
-const clearApprover = () => {
-  condition.approverId = 0
-  approverValue.value = ''
-}
-const queryApproverNode = () => {
-  getApproverNode(condition).then(res => {
-    if (res.code === 0) {
-      console.log(res)
-    }
-  })
-}
-
-// 查询节点列表
-const nodeListCondition = reactive({
-  page: 0,
-  pageSize: 0
-})
-const queryNodeList = () => {
-  getNodeList(nodeListCondition).then(res => {
-    if (res.code === 0) {
-      console.log('节点列表', res.data)
-      nodeList.length = 0
-      nodeList.push(...res.data)
-    }
-  })
+const nodeManageShow = ref(false)
+const openNodeManage = () => {
+  nodeManageShow.value = true
 }
-
-// 审核人列表
-const approverList = reactive([])
-const queryApprover = () => {
-  getApprovePerson().then(res => {
-    if (res.code === 0) {
-      approverList.length = 0
-      approverList.push(...res.data)
-    }
-  })
-}
-
-// 新增节点
-const createNodeData = reactive({
-  nodeName: '',
-  approverId: '',
-  nodeOrder: '',
-  nodeDescription: ''
-})
-const createNode = () => {
-  postNode(createNodeData).then(res => {
-    if (res.code === 0) {
-      console.log(res.data)
-    }
-  })
-}
-
 </script>
 
 <style scoped>

+ 4 - 4
web/src/view/finance/financeAnalysis/financeAnalysis.vue

@@ -147,16 +147,16 @@
             />
           </el-tab-pane>
           <el-tab-pane
-            label="项目费用汇总"
+            label="项目收款"
             :name="3"
           >
-            <CostSum ref="sumOut" />
+            <payment ref="paymentOut" />
           </el-tab-pane>
           <el-tab-pane
-            label="项目收款"
+            label="项目费用汇总"
             :name="4"
           >
-            <payment ref="paymentOut" />
+            <CostSum ref="sumOut" />
           </el-tab-pane>
         </el-tabs>
       </el-col>

+ 308 - 0
web/src/view/standby/standby.vue

@@ -0,0 +1,308 @@
+<template>
+  <div>
+    <el-row
+      class="bg-white"
+      style="height: 80px"
+      align="middle"
+      justify="space-around"
+    >
+      <el-col
+        :span="3"
+        class="flex align-center justify-around"
+      >
+        <el-image
+          :src="expense"
+          style="width: 50px;height: 50px"
+        />
+        <el-text style="font-size: 20px;font-weight: 550;color: #409eff">备用金收支</el-text>
+      </el-col>
+      <el-col :span="21">
+        <el-row align="middle">
+          <el-col
+            :span="4"
+            :offset="1"
+          >
+            <el-row
+              justify="center"
+              align="middle"
+            >
+              <el-text
+                style="font-size: 20px;color: #409eff;"
+                tag="b"
+                :line-clamp="1"
+              >
+                {{ reserve.reserveAmount }}元
+              </el-text>
+            </el-row>
+            <el-row
+              justify="center"
+              align="middle"
+              style="margin-top: 8px"
+            >
+              <el-text>备用金支入</el-text>
+            </el-row>
+          </el-col>
+          <el-col :span="4">
+            <el-row
+              justify="center"
+              align="middle"
+            >
+              <el-text
+                style="font-size: 20px;color: #409eff;"
+                tag="b"
+                :line-clamp="1"
+              >
+                {{ reserve.expenditureAmount }}元
+              </el-text>
+            </el-row>
+            <el-row
+              justify="center"
+              align="middle"
+              style="margin-top: 8px"
+            >
+              <el-text>备用金支出</el-text>
+            </el-row>
+          </el-col>
+          <el-col :span="4">
+            <el-row
+              justify="center"
+              align="middle"
+            >
+              <el-text
+                style="font-size: 20px;color: #409eff;"
+                tag="b"
+                :line-clamp="1"
+              >
+                {{ reserve.balance }}元
+              </el-text>
+            </el-row>
+            <el-row
+              justify="center"
+              align="middle"
+              style="margin-top: 8px"
+            >
+              <el-text>备用金余额</el-text>
+            </el-row>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+    <el-row
+      class="bg-white"
+      style="height: 600px;margin-top: 20px"
+    >
+      <el-row>
+        <el-col
+          :span="24"
+        >
+          <el-form
+            :inline="true"
+            style="margin: 5px 0 15px 0;height: 40px"
+          >
+            <el-form-item label="时间类型:">
+              <el-select
+                v-model="timeTypeValue"
+                placeholder="请选择日期选择器"
+                @change="changeTimeType"
+              >
+                <el-option
+                  v-for="item in timeTypeList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              v-if="timeTypeValue === 'date'"
+              label="日期:"
+            >
+              <el-date-picker
+                v-model="condition.dayTime"
+                type="date"
+                placeholder="请选择日期"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+                clearable
+                @clear="condition.dayTime = ''"
+              />
+            </el-form-item>
+            <el-form-item
+              v-if="timeTypeValue === 'month'"
+              label="月份:"
+            >
+              <el-date-picker
+                v-model="condition.monthTime"
+                type="month"
+                placeholder="请选择月份"
+                format="YYYY-MM"
+                value-format="YYYY-MM"
+                clearable
+                @clear="condition.monthTime = ''"
+              />
+            </el-form-item>
+            <el-form-item
+              v-if="timeTypeValue === 'year'"
+              label="年份:"
+            >
+              <el-date-picker
+                v-model="condition.yearTime"
+                type="year"
+                placeholder="请选择年份"
+                format="YYYY"
+                value-format="YYYY"
+                clearable
+                @clear="condition.yearTime = ''"
+              />
+            </el-form-item>
+            <el-form-item label="项目:">
+              <el-select
+                v-model="projectSelect"
+                placeholder="请选择项目"
+                clearable
+                @clear="clearProjectSelect"
+              >
+                <el-option
+                  v-for="item in projectList"
+                  :key="item.ID"
+                  :label="item.name"
+                  :value="item.ID"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="人员:">
+              <el-select
+                v-model="projectSelect"
+                placeholder="请选择人员名称"
+                clearable
+                filterable
+                @clear="clearPeopleSelect"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.ID"
+                  :label="item.nickName"
+                  :value="item.ID"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item>
+              <el-dropdown
+                split-button
+                type="primary"
+              >
+                操作
+                <template #dropdown>
+                  <el-dropdown-menu>
+                    <el-dropdown-item>
+                      <el-button
+                        type="primary"
+                        icon="Search"
+                        @click="consultPayList"
+                      >查询</el-button>
+                    </el-dropdown-item>
+                    <el-dropdown-item>
+                      <el-button
+                        type="primary"
+                        icon="Refresh"
+                        @click="payListReset"
+                      >重置</el-button>
+                    </el-dropdown-item>
+                    <el-dropdown-item>
+                      <el-button
+                        type="primary"
+                        icon="Plus"
+                        @click="addDetailRecord"
+                      >添加</el-button>
+                    </el-dropdown-item>
+                  </el-dropdown-menu>
+                </template>
+              </el-dropdown>
+            </el-form-item>
+            <el-form-item>
+              <el-button
+                type="primary"
+                @click="costTypePopup = true"
+              >费用类型</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-row>
+    </el-row>
+  </div>
+</template>
+
+<script setup>
+import { getStandbyMoney } from '@/api/cost'
+import { getAllProject } from '@/api/project'
+import { onMounted, reactive, ref } from 'vue'
+import expense from '@/assets/expenses.png'
+defineOptions({
+  name: 'Standby'
+})
+onMounted(() => {
+  queryAllProject()
+  queryStandbyMoney()
+})
+// 备用金汇总
+const reserve = reactive({})
+const queryStandbyMoney = () => {
+  getStandbyMoney().then(res => {
+    if (res.code === 0) {
+      console.log(res.data)
+      Object.assign(reserve, res.data)
+    }
+  })
+}
+// 搜索条件
+const condition = reactive({
+  pageInfo: {
+    page: 1,
+    pageSize: 8
+  },
+  reimburser: 0,
+  projectCode: '',
+  genre: 0,
+  dayTime: '',
+  monthTime: '',
+  yearTime: ''
+})
+// 日期查询
+const timeTypeValue = ref('date')
+const timeTypeList = reactive([
+  { label: '按日期查询', value: 'date' },
+  { label: '按月份查询', value: 'month' },
+  { label: '按年份查询', value: 'year' }
+])
+const changeTimeType = (value) => {
+  if (value === 'year') {
+    condition.monthTime = ''
+    condition.dayTime = ''
+  } else if (value === 'month') {
+    condition.yearTime = ''
+    condition.dayTime = ''
+  } else {
+    condition.yearTime = ''
+    condition.monthTime = ''
+  }
+}
+
+// 查询所有项目
+const projectSelect = ref('')
+const projectList = reactive([])
+const queryAllProject = () => {
+  getAllProject().then(res => {
+    if (res.code === 0) {
+      projectList.length = 0
+      projectList.push(res.data)
+    }
+  })
+}
+
+// 删除项目
+const clearPeopleSelect = () => {}
+</script>
+
+<style scoped>
+
+</style>