From fe67cd0c17d827b6a858ceff2eedf8b48e2f5f2a Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期五, 28 二月 2025 13:51:52 +0800 Subject: [PATCH] 人员-奖惩记录搬迁 --- src/views/CNAS/personnel/personnelInfo/index.vue | 8 +- src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue | 193 ++++++++++++++++++++++-------------------------- src/api/cnas/personal/personRewardPunishmentRecord.js | 35 ++++++++ 3 files changed, 128 insertions(+), 108 deletions(-) diff --git a/src/api/cnas/personal/personRewardPunishmentRecord.js b/src/api/cnas/personal/personRewardPunishmentRecord.js new file mode 100644 index 0000000..c160073 --- /dev/null +++ b/src/api/cnas/personal/personRewardPunishmentRecord.js @@ -0,0 +1,35 @@ +import request from "@/utils/request"; + +// 浜哄憳 - 濂栨儵璁板綍 鍒嗛〉鏌ヨ +export function rewardPunishmentPage(query) { + return request({ + url: "/personRewardPunishmentRecord/rewardPunishmentPage", + method: "get", + params: query + }); +} +// 浜哄憳 - 濂栨儵璁板綍 瀵煎嚭 +export function rewardPunishmentExport(query) { + return request({ + url: "/personRewardPunishmentRecord/rewardPunishmentExport", + method: "get", + params: query, + responseType: 'blob' + }); +} +// 浜哄憳 - 濂栨儵璁板綍 鏂板/鏇存柊 +export function addOrUpdateRewardPunishment(query) { + return request({ + url: "/personRewardPunishmentRecord/addOrUpdateRewardPunishment", + method: "post", + data: query, + }); +} +// 浜哄憳 - 濂栨儵璁板綍 鏂板/鏇存柊 +export function deleteRewardPunishment(query) { + return request({ + url: "/personRewardPunishmentRecord/deleteRewardPunishment", + method: "delete", + params: query, + }); +} diff --git a/src/views/CNAS/personnel/personnelInfo/index.vue b/src/views/CNAS/personnel/personnelInfo/index.vue index 216f325..f931306 100644 --- a/src/views/CNAS/personnel/personnelInfo/index.vue +++ b/src/views/CNAS/personnel/personnelInfo/index.vue @@ -66,10 +66,10 @@ :departId="departId" :isDepartment="isDepartment"></job-responsibilities> </el-tab-pane> -<!-- <el-tab-pane label="濂栨儵璁板綍" name="濂栨儵璁板綍">--> -<!-- <rewardPunishmentRecord v-if="activeName === '濂栨儵璁板綍'"--> -<!-- :departId="departId" :isDepartment="isDepartment"></rewardPunishmentRecord>--> -<!-- </el-tab-pane>--> + <el-tab-pane label="濂栨儵璁板綍" name="濂栨儵璁板綍"> + <rewardPunishmentRecord v-if="activeName === '濂栨儵璁板綍'" + :departId="departId" :isDepartment="isDepartment"></rewardPunishmentRecord> + </el-tab-pane> <!-- <el-tab-pane label="鍩硅璁板綍" name="鍩硅璁板綍">--> <!-- <training-record v-if="activeName === '鍩硅璁板綍'" ref="trainingRecord"--> <!-- :departId="departId"--> diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue b/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue index 344051f..bf5c9e4 100644 --- a/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue +++ b/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue @@ -1,33 +1,41 @@ <!-- 濂栨儵璁板綍 --> <template> <div> - <div style="text-align: left; margin-bottom: 15px;"> - <label>濮撳悕</label> - <el-input v-model="search.userName" clearable placeholder="璇疯緭鍏ュ叧閿瓧" size="small" style="width: 20vh;"></el-input> - <label style="margin-left: 1em">濂栨儵鏃ユ湡</label> - <el-date-picker - v-model="search.searchTimeList" - :picker-options="pickerOptions" - align="right" - clearable - end-placeholder="缁撴潫鏃ユ湡" - format="yyyy-MM-dd" - range-separator="鑷�" - size="small" - start-placeholder="寮�濮嬫棩鏈�" - style="width: 20%" - type="daterange" - unlink-panels - value-format="yyyy-MM-dd 00:00:00"> - </el-date-picker> - <el-button size="small" type="primary" @click="getPersonnelTraining(departId)">鏌ヨ</el-button> - <div style="float: right;"> - <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭</el-button> - <el-button size="small" type="primary" @click="addRow">鏂板</el-button> + <div class="view"> + <div style="display: flex;justify-content: space-between;"> + <el-form :model="search" ref="page" size="small" :inline="true"> + <el-form-item label="濮撳悕"> + <el-input v-model="search.userName" clearable placeholder="璇疯緭鍏ュ叧閿瓧" size="small" style="width: 20vh;"></el-input> + </el-form-item> + <el-form-item label="濂栨儵鏃ユ湡"> + <el-date-picker + v-model="search.searchTimeList" + :picker-options="pickerOptions" + align="right" + clearable + end-placeholder="缁撴潫鏃ユ湡" + format="yyyy-MM-dd" + range-separator="鑷�" + size="small" + start-placeholder="寮�濮嬫棩鏈�" + style="width: 100%" + type="daterange" + unlink-panels + value-format="yyyy-MM-dd 00:00:00"> + </el-date-picker> + </el-form-item> + <el-form-item> + <el-button size="small" type="primary" @click="getPersonnelTraining(departId)">鏌ヨ</el-button> + </el-form-item> + </el-form> + <div> + <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭</el-button> + <el-button size="small" type="primary" @click="addRow">鏂板</el-button> + </div> </div> </div> <div class="table"> - <el-table :data="tableData" height="70vh" style="width: 100%"> + <el-table :data="tableData" v-loading="tableLoading" height="66.5vh" style="width: 100%"> <el-table-column label="搴忓彿" type="index" width="120"> <template v-slot="scope"> <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> @@ -49,22 +57,24 @@ </el-table-column> <el-table-column label="鍒涘缓浜�" min-width="180" prop="createUserName"> </el-table-column> - <el-table-column fixed="right" label="鎿嶄綔" width="100"> + <el-table-column fixed="right" label="鎿嶄綔" width="100" align="center"> <template v-slot="scope"> <el-button size="small" type="text" @click="editForm(scope.row)">缂栬緫</el-button> - <el-button size="small" type="text" @click="deleteRow(scope.row)">鍒犻櫎</el-button> + <el-button size="small" type="text" style="color: #f56c6c" @click="deleteRow(scope.row)">鍒犻櫎</el-button> </template> </el-table-column> </el-table> - <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" + <el-pagination :current-page="1" :page-size="search.size" + :page-sizes="[10, 20, 30, 50, 100]" :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" + background @size-change="handleSizeChange" @current-change="handleCurrentChange"> </el-pagination> </div> <el-dialog :visible.sync="dialogVisible" - title="鎻愮ず" + title="濂栨儵璁板綍" width="50%" @open="getUserList"> <div style="height: 40vh"> @@ -119,14 +129,22 @@ </el-form> </div> <span slot="footer" class="dialog-footer"> - <el-button @click="dialogVisible = false">鍙� 娑�</el-button> - <el-button type="primary" @click="saveOrUpdate">纭� 瀹�</el-button> - </span> + <el-button @click="dialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="saveOrUpdate">纭� 瀹�</el-button> + </span> </el-dialog> </div> </template> <script> +import { + addOrUpdateRewardPunishment, deleteRewardPunishment, + rewardPunishmentExport, + rewardPunishmentPage +} from "@/api/cnas/personal/personRewardPunishmentRecord"; +import {selectUserCondition} from "@/api/system/user"; +import {delCustomById} from "@/api/system/customer"; + export default { props: { departId: { @@ -143,6 +161,7 @@ data() { return { tableData: [], + tableLoading: false, search: { size: 20, current: 1, @@ -213,23 +232,23 @@ this.getPersonnelTraining(this.departId); }, async getPersonnelTraining() { - const {code, data} = await this.$axios({ - method: 'get', - url: rewardPunishmentPageApi, - params: { - userId: this.isDepartment ? '' : this.departId, + const params = { + userId: this.isDepartment ? '' : this.departId, departmentId: this.isDepartment ? this.departId : '', current: this.search.curent, size: this.search.size, userName: this.search.userName, startTime: this.search.searchTimeList && this.search.searchTimeList[0], endTime: this.search.searchTimeList && this.search.searchTimeList[1], - } - }) - if (code == 200) { - this.tableData = data.records - this.search.total = data.total } + this.tableLoading = true + rewardPunishmentPage(params).then(res => { + this.tableLoading = false + this.tableData = res.data.records + this.search.total = res.data.total + }).catch(err => { + this.tableLoading = false + }) }, addRow () { this.dialogVisible = true @@ -240,60 +259,28 @@ }, handleDown(){ this.outLoading = true - this.$axios.post(this.$api.deviceCheck.rewardPunishmentExport,{ + rewardPunishmentExport({ userId: this.isDepartment ? '' : this.departId, departmentId: this.isDepartment ? this.departId : '', userName: this.search.userName, startTime: this.search.searchTimeList && this.search.searchTimeList[0], endTime: this.search.searchTimeList && this.search.searchTimeList[1] - },{responseType: 'blob'}).then(res => { + }).then(res => { this.outLoading = false const blob = new Blob([res], { type: 'application/force-download' }) - //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆 - let reader = new FileReader(); - reader.readAsText(blob, 'utf-8'); - reader.onload = () => { - try { - let result = JSON.parse(reader.result); - if (result.message) { - this.$message.error(result.message); - } else { - // 鍒涘缓涓�涓秴閾炬帴锛屽皢鏂囦欢娴佽祴杩涘幓锛岀劧鍚庡疄鐜拌繖涓秴閾炬帴鐨勫崟鍑讳簨浠� - const elink = document.createElement('a') - elink.download = decodeURI('濂栨儵璁板綍'+'.xlsx') - elink.style.display = 'none' - elink.href = URL.createObjectURL(blob) - document.body.appendChild(elink) - elink.click(); - URL.revokeObjectURL(elink.href) // 閲婃斁URL 瀵硅薄 - document.body.removeChild(elink) - this.$message.success('瀵煎嚭鎴愬姛') - } - } catch (err) { - console.log(err); - // 鍒涘缓涓�涓秴閾炬帴锛屽皢鏂囦欢娴佽祴杩涘幓锛岀劧鍚庡疄鐜拌繖涓秴閾炬帴鐨勫崟鍑讳簨浠� - const elink = document.createElement('a') - elink.download = decodeURI('濂栨儵璁板綍'+'.xlsx') - elink.style.display = 'none' - elink.href = URL.createObjectURL(blob) - document.body.appendChild(elink) - elink.click(); - URL.revokeObjectURL(elink.href) // 閲婃斁URL 瀵硅薄 - document.body.removeChild(elink) - this.$message.success('瀵煎嚭鎴愬姛') - } - } + this.$download.saveAs(blob, '濂栨儵璁板綍.xlsx') + this.$message.success('瀵煎嚭鎴愬姛') }) }, // 鑾峰彇璐熻矗浜轰俊鎭帴鍙� getUserList() { - this.$axios.get(this.$api.deviceScope.selectUserList).then(res => { + selectUserCondition().then(res => { if (res.code == 200) { this.responsibleOptions = res.data } - }) + }); }, selectUserChange(val) { const index = this.responsibleOptions.findIndex(item => item.id === val) @@ -302,42 +289,40 @@ this.form.account = this.responsibleOptions[index].account } }, + // 鎵撳紑琛ㄥ崟寮规 editForm(row) { this.dialogVisible = true this.form = {...row}; }, + // 鎻愪氦琛ㄥ崟鏁版嵁 saveOrUpdate() { this.$refs.form.validate(async (valid) => { if (valid) { - this.dialogVisible = false - const {code, data} = await this.$axios({ - method: 'post', - url: addOrUpdateRewardPunishmentApi, - data: this.form, - headers: { - 'Content-Type': 'application/json' - }, - noQs: true - }) - if (code == 200) { - this.$message.success("鎿嶄綔鎴愬姛锛�") + addOrUpdateRewardPunishment(this.form).then(res => { + this.dialogVisible = false + this.$message.success("鎿嶄綔鎴愬姛") this.getPersonnelTraining(this.departId); - } + }) } }) }, - async deleteRow(row) { - const {code, data} = await this.$axios({ - method: 'delete', - url: deleteRewardPunishmentApi, - params: { - id: row.id - } - }) - if (code == 200) { - this.$message.success("鎿嶄綔鎴愬姛锛�") - this.getPersonnelTraining(this.departId); - } + deleteRow(row) { + this.$confirm('鏄惁鍒犻櫎褰撳墠鏁版嵁?', "璀﹀憡", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }).then(() => { + deleteRewardPunishment({id: row.id}).then(res => { + if (res.code === 500) { + return + } + this.$message.success('鍒犻櫎鎴愬姛') + this.getPersonnelTraining(this.departId); + }).catch(e => { + this.$message.error('鍒犻櫎澶辫触') + }) + }).catch(() => {}) + } }, watch: { -- Gitblit v1.9.3