| | |
| | | <div> |
| | | <span class="search_title">主题:</span> |
| | | <el-input |
| | | v-model="searchForm.title" |
| | | v-model="searchForm.salaryTitle" |
| | | style="width: 240px" |
| | | placeholder="请输入主题" |
| | | clearable |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button @click="issueDialogVisible = false">取消</el-button> |
| | | <el-button type="primary" :loading="issueLoading" @click="confirmIssue"> |
| | | 确定 |
| | | </el-button> |
| | | <el-button @click="issueDialogVisible = false">取消</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="auditDialogVisible" title="工资审核" width="720px"> |
| | | <el-form label-position="top"> |
| | | <el-form-item label="审核结果" required> |
| | | <el-radio-group v-model="auditForm.result"> |
| | | <el-radio :value="4">通过</el-radio> |
| | | <el-radio :value="2">不通过</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button @click="auditDialogVisible = false">取消</el-button> |
| | | <el-button type="primary" :loading="auditLoading" @click="confirmAudit"> |
| | | 确定 |
| | | </el-button> |
| | | </template> |
| | | </el-dialog> |
| | | <audit-dia |
| | | v-model="auditDialogVisible" |
| | | :row="auditRow" |
| | | @close="auditDialogVisible = false" |
| | | @success="handleAuditSuccess" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import Cookies from "js-cookie"; |
| | | import FormDia from "./components/formDia.vue"; |
| | | import BankSettingDia from "./components/bankSettingDia.vue"; |
| | | import AuditDia from "./components/auditDia.vue"; |
| | | import PIMTable from "@/components/PIMTable/PIMTable.vue"; |
| | | import { bankList } from "@/api/personnelManagement/bank.js"; |
| | | import { |
| | |
| | | |
| | | const data = reactive({ |
| | | searchForm: { |
| | | title: "", |
| | | salaryTitle: "", |
| | | status: "", |
| | | salaryMonth: "", |
| | | }, |
| | |
| | | const tableColumn = ref([ |
| | | { label: "工资主题", prop: "salaryTitle", minWidth: 140 }, |
| | | { label: "工资月份", prop: "salaryMonth", width: 120 }, |
| | | { label: "状态", prop: "statusName", width: 110 }, |
| | | { |
| | | label: "状态", |
| | | prop: "statusName", |
| | | width: 110, |
| | | dataType: "tag", |
| | | formatType: (status) => { |
| | | const statusMap = { |
| | | "草稿": "info", |
| | | "审核未通过": "danger", |
| | | "待审核": "warning", |
| | | "待发放": "primary", |
| | | "已发放": "success" |
| | | }; |
| | | return statusMap[status] || "info"; |
| | | } |
| | | }, |
| | | { label: "工资总额", prop: "totalSalary", width: 120 }, |
| | | { label: "支付银行", prop: "payBank", width: 120 }, |
| | | { label: "审核人", prop: "auditUserName", width: 110 }, |
| | |
| | | { |
| | | name: "编辑", |
| | | type: "text", |
| | | showHide: (row) => Number(row?.status) === 1 || Number(row?.status) === 2, |
| | | disabled: (row) => Number(row?.status) !== 1 && Number(row?.status) !== 2, |
| | | clickFun: (row) => openForm("edit", row), |
| | | }, |
| | | { |
| | | name: "审核", |
| | | type: "text", |
| | | showHide: (row) => Number(row?.status) === 3, |
| | | disabled: (row) => Number(row?.status) !== 3, |
| | | clickFun: (row) => openAudit(row), |
| | | }, |
| | | { |
| | | name: "发放", |
| | | type: "text", |
| | | showHide: (row) => Number(row?.status) === 4, |
| | | disabled: (row) => Number(row?.status) !== 4, |
| | | clickFun: (row) => openIssue(row), |
| | | }, |
| | | ], |
| | |
| | | const issueRow = ref(null); |
| | | const issueForm = reactive({ bank: "" }); |
| | | const auditDialogVisible = ref(false); |
| | | const auditLoading = ref(false); |
| | | const auditRow = ref(null); |
| | | const auditForm = reactive({ result: 4 }); // 4=通过(待发放) 2=不通过 |
| | | const auditDiaRef = ref(null); |
| | | |
| | | const issueBankOptions = computed(() => { |
| | | const options = Array.isArray(bankSetting.value?.options) ? bankSetting.value.options : []; |
| | |
| | | }; |
| | | |
| | | const handleReset = () => { |
| | | searchForm.value.title = ""; |
| | | searchForm.value.salaryTitle = ""; |
| | | searchForm.value.status = ""; |
| | | searchForm.value.salaryMonth = ""; |
| | | page.current = 1; |
| | |
| | | .then((res) => { |
| | | tableLoading.value = false; |
| | | const records = res.data?.records ?? res.data?.list ?? []; |
| | | console.log('列表接口返回数据:', records); |
| | | // 兼容后端字段:若接口仍返回台账结构,可在此做映射 |
| | | tableData.value = records.map((item) => ({ |
| | | ...item, |
| | |
| | | }; |
| | | |
| | | const openAudit = (row) => { |
| | | console.log('打开审核,传入的数据:', row); |
| | | auditRow.value = row || null; |
| | | auditForm.result = 4; |
| | | auditDialogVisible.value = true; |
| | | nextTick(() => { |
| | | auditDiaRef.value?.openDialog(row); |
| | | }); |
| | | }; |
| | | |
| | | const handleAuditSuccess = () => { |
| | | getList(); |
| | | }; |
| | | |
| | | const openIssue = (row) => { |
| | |
| | | issueDialogVisible.value = true; |
| | | }; |
| | | |
| | | const confirmAudit = () => { |
| | | const row = auditRow.value; |
| | | if (!row?.id) { |
| | | auditDialogVisible.value = false; |
| | | return; |
| | | } |
| | | const username = Cookies.get("username") || ""; |
| | | const userIdRaw = Cookies.get("userId"); |
| | | const auditUserId = userIdRaw ? Number(userIdRaw) : undefined; |
| | | auditLoading.value = true; |
| | | staffSalaryMainUpdate({ |
| | | id: row.id, |
| | | status: Number(auditForm.result) === 2 ? 2 : 4, |
| | | auditUserId, |
| | | auditUserName: username, |
| | | }) |
| | | .then(() => { |
| | | proxy?.$modal?.msgSuccess?.("审核成功"); |
| | | auditDialogVisible.value = false; |
| | | getList(); |
| | | }) |
| | | .finally(() => { |
| | | auditLoading.value = false; |
| | | }); |
| | | }; |
| | | |
| | | |
| | | const confirmIssue = () => { |
| | | const bank = issueForm.bank ? String(issueForm.bank).trim() : ""; |