123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <template>
- <div>
- <div id="pdfDom" ref="pdfDom" style="padding: 20px 20px 0; text-align: center;font-size:12px;color:#333333" v-loading="loading">
- <table border="1" style="width: 100%" class="table">
- <tr>
- <td :colspan="salaryStructureData.length+3" class="title">薪资确认单</td>
- </tr>
- <tr>
- <td colspan="2">所属主体</td>
- <td colspan="2">{{pdfData.companyName}}</td>
- <td colspan="1">部门</td>
- <td colspan="2">{{pdfData.deptName}}</td>
- <td colspan="1">入职日期</td>
- <td colspan="2">{{pdfData.entryDate}}</td>
- </tr>
- <tr>
- <td colspan="2">员工姓名</td>
- <td colspan="2">{{pdfData.nickName}}</td>
- <td colspan="1">岗位</td>
- <td colspan="2">{{pdfData.post}}</td>
- <td colspan="1">生效日期</td>
- <td colspan="2">{{pdfData.effectiveDate}}</td>
- </tr>
- <tr>
- <td colspan="2">学历</td>
- <td colspan="2">{{pdfData.education}}</td>
- <td colspan="1">试用期限</td>
- <td colspan="2">{{pdfData.probationPeriod}}</td>
- <td colspan="1">转正日期</td>
- <td colspan="2">{{pdfData.fullTimeDate}}</td>
- </tr>
- <tr>
- <td colspan="2">
- 上班时长
- </td>
- <td :colspan="salaryStructureData.length+3-2" style="text-align:left">
- 月休{{pdfData.monthRest}}天,{{pdfData.dailyHours}}小时/天(上午{{pdfData.morningBeginTime}}至{{pdfData.morningEndTime}}
- ;下午{{pdfData.afternoonBeginTime}}至{{pdfData.afternoonEndTime}}
- )</td>
- </tr>
- <tr>
- <td rowspan="5" style="width:5%">
- 薪资
- </td>
- <td :colspan="salaryStructureData.length+2">
- 考勤结算 or 业绩/记件结算
- </td>
- </tr>
- <tr>
- <td rowspan="2" style="width:5%">考勤结算</td>
- <td v-for="col in salaryStructureData" :key="col.value" :style="`width:${parseFloat(80/salaryStructureData.length).toFixed(2)}%`">
- {{col.label}}
- </td>
- <td style="width:10%">合计</td>
- </tr>
- <tr>
- <td v-for="col in salaryStructureData" :key="col.value" :style="`width:${parseFloat(80/salaryStructureData.length).toFixed(2)}%`">
- <el-input-number onmousewheel="return false;" v-model="pdfData.salaryData[col.value+'-10']" placeholder=" " style="width: 100%"
- :precision="2" :controls="false" :min="0" @change="changeAmount('10')" />
- </td>
- <td>{{pdfData.amount}}</td>
- </tr>
- <tr>
- <td rowspan="2">业绩/记件结算</td>
- <td v-for="col in salaryStructureData" :key="col.value">
- {{col.label}}
- </td>
- <td>合计</td>
- </tr>
- <tr>
- <td v-for="col in salaryStructureData" :key="col.value">
- <el-input-number onmousewheel="return false;" v-model="pdfData.salaryData[col.value+'-20']" placeholder=" " style="width: 100%"
- :precision="2" :controls="false" :min="0" @change="changeAmount('20')" />
- </td>
- <td>{{pdfData.perfAmount}}</td>
- </tr>
- <tr>
- <td colspan="2">
- 薪资说明
- </td>
- <td :colspan="salaryStructureData.length+3-2" style="text-align:left">{{pdfData.salaryRemark}}</td>
- </tr>
- <tr>
- <td colspan="2">
- 员工签字
- </td>
- <td colspan="3"></td>
- <td colspan="1">
- 主管签字
- </td>
- <td colspan="4"></td>
- </tr>
- <tr>
- <td colspan="2">
- 副总审批
- </td>
- <td colspan="3"></td>
- <td colspan="1">
- 总经理审批
- </td>
- <td colspan="4"></td>
- </tr>
- </table>
- </div>
- <div style="text-align: center;margin-top:20px">
- <el-button type="primary" v-print="printObj" size="default" v-debounce>打印</el-button>
- <el-button type="primary" @click="clickDownload()" size="default" v-debounce>下载PDF</el-button>
- <el-button type="primary" @click="exportExcel()" size="default" v-debounce>导出Excel</el-button>
- <el-button type="primary" @click="saveData()" size="default" v-debounce>保存</el-button>
- </div>
- </div>
- </template>
- <script setup>
- import $ from "jquery";
- const { proxy } = getCurrentInstance();
- const pdfData = ref({});
- const props = defineProps({
- rowData: Object,
- });
- const salaryStructureData = ref([]);
- const getData = () => {
- proxy
- .post("/salaryStructure/page", {
- pageNum: 1,
- pageSize: 999,
- })
- .then((res) => {
- salaryStructureData.value = res.rows
- .map((item) => {
- return {
- label: item.name,
- value: item.id,
- };
- })
- .reverse();
- });
- };
- getData();
- const loading = ref(false);
- const getPdfData = (query) => {
- loading.value = true;
- proxy.post("/userSalaryManage/detail", query).then((res) => {
- res.salaryData = {};
- if (res.userSalaryDetailList && res.userSalaryDetailList.length > 0) {
- for (let i = 0; i < res.userSalaryDetailList.length; i++) {
- const row = res.userSalaryDetailList[i];
- res.salaryData[row.salaryStructureId + "-" + row.type] = row.money;
- }
- }
- console.log(res.salaryData);
- pdfData.value = res;
- loading.value = false;
- });
- };
- watch(
- () => props.rowData,
- (val) => {
- if (props.rowData.id) {
- getPdfData({ userId: props.rowData.id });
- }
- },
- {
- immediate: true,
- deep: true,
- }
- );
- const printObj = ref({
- id: "pdfDom",
- popTitle: "",
- extraCss:
- "https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css, https://cdn.bootcdn.net/ajax/libs/hover.css/2.3.1/css/hover-min.css",
- extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
- });
- const clickDownload = () => {
- proxy.getPdf("薪资确认单PDF文件");
- };
- const pdfDom = ref(null);
- const exportExcel = () => {
- // pdfDom.value.exportExcel();
- // isShowImg.value = false;
- loading.value = true;
- setTimeout(() => {
- $("#pdfDom").table2excel({
- exclude: ".noExl",
- sheetName: `${pdfData.value.nickName} 薪资确认单`,
- filename: `${pdfData.value.nickName} 薪资确认单`,
- exclude_img: false,
- exclude_links: false,
- exclude_inputs: true,
- });
- // isShowImg.value = true;
- loading.value = false;
- }, 500);
- };
- const saveData = () => {
- let userSalaryDetailList = [];
- for (const key in pdfData.value.salaryData) {
- let arr = key.split("-");
- userSalaryDetailList.push({
- salaryStructureId: arr[0],
- type: arr[1],
- money: pdfData.value.salaryData[key],
- });
- }
- pdfData.value.userSalaryDetailList = userSalaryDetailList;
- proxy.post("/userSalaryManage/edit", pdfData.value).then((res) => {
- getPdfData({ userId: props.rowData.id });
- proxy.msgTip("操作成功", 1);
- proxy.$emit("getList");
- });
- };
- const changeAmount = (type) => {
- let userSalaryDetailList = [];
- for (const key in pdfData.value.salaryData) {
- let arr = key.split("-");
- userSalaryDetailList.push({
- salaryStructureId: arr[0],
- type: arr[1],
- money: pdfData.value.salaryData[key],
- });
- }
- pdfData.value.userSalaryDetailList = userSalaryDetailList;
- let amount = pdfData.value.userSalaryDetailList
- .filter((x) => x.type == "10")
- .reduce(
- (total, x) => Number(parseFloat((total += Number(x.money))).toFixed(2)),
- 0
- );
- pdfData.value.amount = amount;
- let perfAmount = pdfData.value.userSalaryDetailList
- .filter((x) => x.type == "20")
- .reduce(
- (total, x) => Number(parseFloat((total += Number(x.money))).toFixed(2)),
- 0
- );
- pdfData.value.perfAmount = perfAmount;
- };
- </script>
- <style lang="scss" scoped>
- .table {
- .title {
- font-size: 26px;
- // font-weight: 700;
- }
- border-collapse: collapse;
- border-spacing: 0;
- width: 100%;
- td {
- text-align: center;
- padding: 6px;
- font-size: 12px;
- // padding: 5px 10px;
- }
- .align-right {
- text-align: right;
- }
- }
- :deep(.el-input__wrapper) {
- box-shadow: none;
- }
- </style>
|