From ceb802af0b9630b30c7f973f05da8d2ed9e9c16f Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 14 八月 2025 15:52:12 +0800
Subject: [PATCH] yys  新增劳保统计

---
 src/views/index.vue                       |    6 
 src/views/lavorissue/ledger/Form.vue      |   34 +++++
 src/api/lavorissce/ledger.js              |   13 +
 src/views/lavorissue/statistics/index.vue |  239 +++++++++++++++++++++++++++++++++++++++
 src/views/lavorissue/ledger/index.vue     |   62 +++++++++
 5 files changed, 340 insertions(+), 14 deletions(-)

diff --git a/src/api/lavorissce/ledger.js b/src/api/lavorissce/ledger.js
index 5b7c94a..049dc7c 100644
--- a/src/api/lavorissce/ledger.js
+++ b/src/api/lavorissce/ledger.js
@@ -1,11 +1,20 @@
 import request from '@/utils/request'
 
 // 鍒嗛〉鏌ヨ
-export function listPage(data) {
+export function listPage(params) {
     return request({
         url: '/lavorIssue/listPage',
         method: 'get',
-        data
+        params
+    })
+}
+
+// 鍒嗛〉鏌ヨ
+export function statistics(params) {
+    return request({
+        url: '/lavorIssue/statistics',
+        method: 'get',
+        params
     })
 }
 
diff --git a/src/views/index.vue b/src/views/index.vue
index 95fe72c..154c476 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -68,11 +68,11 @@
 					<li v-for="item in todoList" :key="item.id">
 						<div style="display: flex;flex-direction: column;justify-content: space-between;width: 100%;gap: 20px">
 							<div style="display: flex;justify-content: space-between;align-items: center;">
-								<div class="todo-title">娴佺▼缂栧彿锛歿{item.approveId}}</div>
-								<div class="todo-division">鐢宠閮ㄩ棬锛歿{item.approveDeptName}}</div>
+								<div class="todo-title">寰呭姙缂栧彿锛歿{item.approveId}}</div>
+								<div class="todo-division">閮ㄩ棬锛歿{item.approveDeptName}}</div>
 								<div class="todo-time">{{item.approveTime}}</div>
 							</div>
-							<div class="todo-division">瀹℃壒浜嬬敱锛歿{item.approveReason}}</div>
+							<div class="todo-division">寰呭姙浜嬬敱锛歿{item.approveReason}}</div>
 						</div>
 					</li>
 				</ul>
diff --git a/src/views/lavorissue/ledger/Form.vue b/src/views/lavorissue/ledger/Form.vue
index 071bc66..7031957 100644
--- a/src/views/lavorissue/ledger/Form.vue
+++ b/src/views/lavorissue/ledger/Form.vue
@@ -19,6 +19,15 @@
             <el-option :label="item.staffName" :value="item.id" v-for="(item,index) in personList" :key="id" />
           </el-select>
         </el-form-item>
+        <el-form-item label="鍔充繚绫诲瀷" prop="dictType">
+          <el-select
+              v-model="form.dictType"
+              placeholder="璇烽�夋嫨"
+              clearable
+          >
+            <el-option :label="item.label" :value="item.value" v-for="(item,index) in sys_lavor_issue_type" :key="value" />
+          </el-select>
+        </el-form-item>
         <el-form-item label="鍔充繚闃插叿" prop="dictId">
           <el-select
               v-model="form.dictId"
@@ -28,16 +37,16 @@
             <el-option :label="item.label" :value="item.value" v-for="(item,index) in sys_lavor_issue" :key="value" />
           </el-select>
         </el-form-item>
-        <el-form-item label="棰嗙敤鏁伴噺" prop="num">
+        <el-form-item label="鍙戞斁鏁伴噺" prop="num">
           <el-input-number :step="1" :min="0" style="width: 100%"
             v-model="form.num"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
-        <el-form-item label="棰嗙敤鏃ユ湡" prop="adoptedDate">
+        <el-form-item label="杩涘巶鏃ユ湡" prop="factoryDate">
           <el-date-picker
               style="width: 100%"
-              v-model="form.adoptedDate"
+              v-model="form.factoryDate"
               format="YYYY-MM-DD"
               value-format="YYYY-MM-DD"
               type="date"
@@ -45,6 +54,17 @@
               clearable
           />
         </el-form-item>
+    <el-form-item label="鍙戞斁鏃ユ湡" prop="issueDate">
+      <el-date-picker
+          style="width: 100%"
+          v-model="form.issueDate"
+          format="YYYY-MM-DD"
+          value-format="YYYY-MM-DD"
+          type="date"
+          placeholder="璇烽�夋嫨鏃ユ湡"
+          clearable
+      />
+    </el-form-item>
         
   </el-form>
 </template>
@@ -66,23 +86,30 @@
   name: "鏂板鏀跺叆",
 });
 const { sys_lavor_issue } = proxy.useDict("sys_lavor_issue")
+const { sys_lavor_issue_type } = proxy.useDict("sys_lavor_issue_type")
 const formRef = ref(null);
 const productOptions = ref([]);
 const personList = ref([]);
 const formRules = {
   deptId: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
+  dictType: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
   staffId: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
   dictId: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
   num: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
   adoptedDate: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
+  factoryDate: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
+  issueDate: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
 }
 
 const { form, resetForm } = useFormData({
   deptId: undefined, //
+  dictType: undefined,
   staffId: undefined, //
   dictId: undefined, //
   num: undefined, //
   adoptedDate: undefined,
+  factoryDate: undefined,
+  issueDate: undefined,
 });
 const getPersonList = () => {
   getStaffOnJob().then(res => {
@@ -112,7 +139,6 @@
   getPersonList();
 };
 onMounted(() => {
-  console.log(sys_lavor_issue)
   form.deptId = userStore.currentDeptId
   getProductOptions();
   getPersonList();
diff --git a/src/views/lavorissue/ledger/index.vue b/src/views/lavorissue/ledger/index.vue
index 27cd948..6441247 100644
--- a/src/views/lavorissue/ledger/index.vue
+++ b/src/views/lavorissue/ledger/index.vue
@@ -3,7 +3,7 @@
     <el-form :model="filters" :inline="true">
       <el-form-item label="鍛樺伐鍚嶇О:">
         <el-input
-            v-model="filters.supplierName"
+            v-model="filters.staffName"
             style="width: 240px"
             placeholder="璇疯緭鍏�"
             @change="handleQuery"
@@ -49,6 +49,9 @@
           <el-button type="primary" text @click="edit(row)" icon="editPen">
             缂栬緫
           </el-button>
+          <el-button type="primary" :disabled="row.adoptedDate ? true : false" text @click="adopted(row)">
+            棰嗙敤
+          </el-button>
         </template>
       </PIMTable>
     </div>
@@ -59,7 +62,7 @@
 
 <script setup>
 import { usePaginationApi } from "@/hooks/usePaginationApi";
-import { listPage,deleteLedger } from "@/api/lavorissce/ledger";
+import { listPage,deleteLedger,update } from "@/api/lavorissce/ledger";
 import { onMounted, getCurrentInstance } from "vue";
 import Modal from "./Modal.vue";
 import { ElMessageBox, ElMessage } from "element-plus";
@@ -85,9 +88,14 @@
 } = usePaginationApi(
     listPage,
     {
-      incomeMethod: undefined,
+      staffName: '',
     },
     [
+      {
+        label: "鍔充繚鍗曞彿",
+        align: "center",
+        prop: "orderNo",
+      },
       {
         label: "鍛樺伐鍚嶇О",
         align: "center",
@@ -98,6 +106,13 @@
         align: "center",
         prop: "staffNo"
       },
+
+      {
+        label: "鍔充繚绫诲瀷",
+        align: "center",
+        prop: "dictTypeName",
+
+      },
       {
         label: "鍔充繚闃插叿",
         align: "center",
@@ -105,9 +120,21 @@
 
       },
       {
-        label: "棰嗙敤鏁伴噺",
+        label: "鍙戞斁鏁伴噺",
         align: "center",
         prop: "num",
+
+      },
+      {
+        label: "杩涘巶鏃ユ湡",
+        align: "center",
+        prop: "factoryDate",
+
+      },
+      {
+        label: "鍙戞斁鏃ユ湡",
+        align: "center",
+        prop: "issueDate",
 
       },
       {
@@ -132,11 +159,37 @@
   multipleList.value = selectionList;
 };
 
+const adopted = (row) => {
+  ElMessageBox.confirm("鏄惁纭棰嗙敤?", "鎻愮ず", {
+    confirmButtonText: "纭畾",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  }).then(async () => {
+    const params = {
+      id: row.id,
+      adoptedDate: dayjs().format("YYYY-MM-DD")
+    }
+    const { code } = await update(params);
+    if (code == 200) {
+      ElMessage({
+        type: "success",
+        message: "棰嗙敤鎴愬姛",
+      });
+      getTableData();
+    }
+  })
+}
+
 const add = () => {
   modalRef.value.openModal();
 };
 const edit = (row) => {
   modalRef.value.loadForm(row);
+};
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+const handleQuery = () => {
+  getTableData();
 };
 const changePage = ({ page, limit }) => {
   pagination.currentPage = page;
@@ -192,7 +245,6 @@
 };
 
 onMounted(() => {
-  console.log(12331)
   filters.entryDate = [
     dayjs().format("YYYY-MM-DD"),
     dayjs().add(1, "day").format("YYYY-MM-DD"),
diff --git a/src/views/lavorissue/statistics/index.vue b/src/views/lavorissue/statistics/index.vue
new file mode 100644
index 0000000..a2fd6a8
--- /dev/null
+++ b/src/views/lavorissue/statistics/index.vue
@@ -0,0 +1,239 @@
+<template>
+  <div class="app-container">
+    <el-form :model="filters" :inline="true">
+      <el-form-item label="鍙戞斁瀛e害:" prop="season">
+        <el-select
+            :disabled="filters.issueDate ? true : false"
+            style="width: 200px;"
+            @change="getList"
+            v-model="filters.season"
+            placeholder="璇烽�夋嫨"
+            clearable
+        >
+          <el-option :label="item.label" :value="item.value" v-for="(item,index) in jidu" :key="value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鍙戞斁鏈堜唤:" prop="issueDate">
+        <el-date-picker
+            :disabled="filters.season ? true : false"
+            v-model="filters.issueDate"
+            @change="getList"
+            type="month"
+            value-format="YYYY-MM-DD"
+            format="YYYY-MM"
+            placeholder="璇烽�夋嫨鏈堜唤"
+            clearable
+            style="width: 100%"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getList">鎼滅储</el-button>
+        <el-button @click="resetParams">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="table_list">
+      <div class="actions">
+        <div class="head" @click="getList(1)">宸查鍙栧姵淇濇暟閲�:{{statisticsObj.ylqNum}}</div>
+        <div class="head" @click="getList(2)">鏈鍙栧姵淇濇暟閲�: {{ statisticsObj.wlqNum }}</div>
+        <div class="head" @click="getList(3)">瓒呮椂宸查鍙栧姵淇濇暟閲�: {{statisticsObj.csylqNum}}</div>
+        <div class="head" @click="getList(4)">瓒呮椂鏈鍙栧姵淇濇暟閲�: {{statisticsObj.cswlqNum}}</div>
+      </div>
+      <PIMTable
+          rowKey="id"
+          isSelection
+          :column="columns"
+          :tableData="dataList"
+          :page="{
+          current: pagination.currentPage,
+          size: pagination.pageSize,
+          total: pagination.total,
+        }"
+          @selection-change="handleSelectionChange"
+          @pagination="changePage"
+      >
+      </PIMTable>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { usePaginationApi } from "@/hooks/usePaginationApi";
+import { listPage,statistics } from "@/api/lavorissce/ledger";
+import { onMounted, getCurrentInstance } from "vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import dayjs from "dayjs";
+
+// 琛ㄦ牸澶氶�夋閫変腑椤�
+const multipleList = ref([]);
+const { proxy } = getCurrentInstance();
+const modalRef = ref();
+const filesDia = ref()
+const jidu = ref([
+  {
+    value: '1',
+    label: '绗竴瀛e害'
+  },
+  {
+    value: '2',
+    label: '绗簩瀛e害'
+  },
+  {
+    value: '3',
+    label: '绗笁瀛e害'
+  },
+  {
+    value: '4',
+    label: '绗洓瀛e害'
+  }
+])
+
+const {
+  filters,
+  columns,
+  dataList,
+  pagination,
+  getTableData,
+  resetFilters,
+  onCurrentChange,
+} = usePaginationApi(
+    listPage,
+    {
+      season: '',
+      issueDate: '',
+      status: 0
+    },
+    [
+      {
+        label: "鍔充繚鍗曞彿",
+        align: "center",
+        prop: "orderNo",
+      },
+      {
+        label: "鍛樺伐鍚嶇О",
+        align: "center",
+        prop: "staffName",
+      },
+      {
+        label: "鍛樺伐缂栧彿",
+        align: "center",
+        prop: "staffNo"
+      },
+
+      {
+        label: "鍔充繚绫诲瀷",
+        align: "center",
+        prop: "dictTypeName",
+
+      },
+      {
+        label: "鍔充繚闃插叿",
+        align: "center",
+        prop: "dictName",
+
+      },
+      {
+        label: "鍙戞斁鏁伴噺",
+        align: "center",
+        prop: "num",
+
+      },
+      {
+        label: "杩涘巶鏃ユ湡",
+        align: "center",
+        prop: "factoryDate",
+
+      },
+      {
+        label: "鍙戞斁鏃ユ湡",
+        align: "center",
+        prop: "issueDate",
+
+      },
+      {
+        label: "棰嗙敤鏃ユ湡",
+        align: "center",
+        prop: "adoptedDate",
+
+      }
+    ]
+);
+const statisticsObj = ref({
+  ylqNum: 0,  // 宸查鍙栨暟閲�
+  wlqNum: 0,  // 鏈鍙栨暟閲�
+  csylqNum: 0,  // 瓒呮椂宸查鍙栨暟閲�
+  cswlqNum: 0  // 瓒呮椂鏈鍙栨暟閲�
+})
+
+const resetParams = () => {
+  resetFilters();
+  getStatistics();
+};
+
+// 澶氶�夊悗鍋氫粈涔�
+const handleSelectionChange = (selectionList) => {
+  multipleList.value = selectionList;
+};
+const getList = (status) => {
+  switch (status){
+    case 1:
+      filters.status = 1
+      break;
+    case 2:
+      filters.status = 2
+      break;
+    case 3:
+      filters.status = 3
+      break;
+    case 4:
+      filters.status = 4
+      break;
+    default:
+      filters.status = 0
+  }
+  console.log(filters)
+  getTableData();
+  getStatistics();
+};
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+const handleQuery = () => {
+  page.current = 1;
+  getTableData();
+};
+const changePage = ({ page, limit }) => {
+  pagination.currentPage = page;
+  pagination.pageSize = limit;
+  onCurrentChange(page);
+};
+const getStatistics = () => {
+  statistics(filters).then(res => {
+    statisticsObj.value.cswlqNum = res.data.cswlqNum
+    statisticsObj.value.csylqNum = res.data.csylqNum
+    statisticsObj.value.ylqNum = res.data.ylqNum
+    statisticsObj.value.wlqNum = res.data.wlqNum
+  })
+}
+
+onMounted(() => {
+  getList()
+});
+</script>
+
+<style lang="scss" scoped>
+.table_list {
+  margin-top: unset;
+}
+.actions {
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+  //margin-top: 20px;
+  margin-bottom: 30px;
+}
+.head{
+  cursor: pointer;
+  font-size: 18px;
+  font-weight: 600;
+}
+</style>
+

--
Gitblit v1.9.3