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