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