| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- 奿©è®°å½ --> |
| | | <template> |
| | | <div class="app-container"> |
| | | <div style="display: flex; justify-content: space-between"> |
| | | <div style="display: flex"> |
| | | <div |
| | | style=" |
| | | margin-bottom: 18px; |
| | | margin-right: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | line-height: 32px; |
| | | " |
| | | > |
| | | <span |
| | | style=" |
| | | width: 48px; |
| | | font-size: 14px; |
| | | font-weight: 700; |
| | | color: #606266; |
| | | " |
| | | >å§å</span |
| | | > |
| | | <el-input |
| | | size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | v-model="search.userName" |
| | | @keyup.enter.native="getPersonnelTraining()" |
| | | ></el-input> |
| | | </div> |
| | | <div |
| | | style=" |
| | | margin-bottom: 18px; |
| | | margin-right: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | line-height: 32px; |
| | | " |
| | | > |
| | | <span |
| | | style=" |
| | | width: 88px; |
| | | font-size: 14px; |
| | | font-weight: 700; |
| | | color: #606266; |
| | | " |
| | | >奿©æ¥æ</span |
| | | > |
| | | <el-date-picker |
| | | v-model="search.searchTimeList" |
| | | :picker-options="pickerOptions" |
| | | align="right" |
| | | clearable |
| | | @change="getPersonnelTraining()" |
| | | end-placeholder="ç»ææ¥æ" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | range-separator="è³" |
| | | size="small" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | style="width: 100%" |
| | | type="daterange" |
| | | unlink-panels |
| | | :default-time="['00:00:00', '23:59:59']" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | > |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="line-height: 30px"> |
| | | <el-button size="mini" type="primary" @click="getPersonnelTraining()" |
| | | >æ¥è¯¢</el-button |
| | | > |
| | | <el-button size="mini" @click="refreshTable()">éç½®</el-button> |
| | | <el-button size="small" type="primary" @click="addRow" |
| | | >æ°å¢</el-button |
| | | > |
| | | <el-button |
| | | :loading="outLoading" |
| | | size="small" |
| | | type="success" |
| | | @click="handleDown" |
| | | >导åº</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <el-table |
| | | :data="tableData" |
| | | v-loading="tableLoading" |
| | | :header-cell-style="{ |
| | | background: '#f8f8f9', |
| | | color: '#515a6e', |
| | | textAlign: 'center', |
| | | }" |
| | | :cell-style="{ textAlign: 'center' }" |
| | | border |
| | | height="66.5vh" |
| | | style="width: 100%" |
| | | > |
| | | <el-table-column label="åºå·" type="index" width="80"></el-table-column> |
| | | <el-table-column |
| | | label="åå·¥ç¼å·" |
| | | min-width="120" |
| | | width="120" |
| | | prop="account" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="åå·¥å§å" |
| | | min-width="180" |
| | | width="120" |
| | | prop="userName" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="奿©åç§°" |
| | | min-width="140" |
| | | width="140" |
| | | prop="rewardPunishName" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="奿©æ¶é´" |
| | | min-width="160" |
| | | width="160" |
| | | prop="rewardPunishTime" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="奿©è®¡å" |
| | | min-width="120" |
| | | width="120" |
| | | prop="rewardPunishScore" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="奿©éé¢" |
| | | min-width="120" |
| | | width="120" |
| | | prop="rewardPunishSum" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="奿©å
容" |
| | | min-width="160" |
| | | prop="rewardPunishContent" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="å建人" |
| | | min-width="120" |
| | | width="120" |
| | | prop="createUserName" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="å建æ¶é´" |
| | | min-width="160" |
| | | width="160" |
| | | prop="createTime" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="æ´æ°äºº" |
| | | min-width="120" |
| | | width="120" |
| | | prop="updateUserName" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="æ´æ°æ¶é´" |
| | | min-width="160" |
| | | width="160" |
| | | prop="updateTime" |
| | | ></el-table-column> |
| | | <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" |
| | | 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]" |
| | | :total="search.total" |
| | | layout="->,total, sizes, prev, pager, next, jumper" |
| | | background |
| | | style="margin-top: 10px" |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | <el-dialog |
| | | :visible.sync="dialogVisible" |
| | | title="奿©è®°å½" |
| | | width="50%" |
| | | @open="getUserList" |
| | | > |
| | | <div style="height: 40vh"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åå·¥ç¼å·"> |
| | | <el-input |
| | | v-model="form.account" |
| | | disabled |
| | | size="small" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åå·¥å§å" prop="userId"> |
| | | <el-select |
| | | :disabled="form.id" |
| | | v-model="form.userId" |
| | | placeholder="è¯·éæ©åå·¥å§å" |
| | | size="small" |
| | | style="width: 100%" |
| | | @change="selectUserChange" |
| | | > |
| | | <el-option |
| | | v-for="item in responsibleOptions" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="奿©åç§°" prop="rewardPunishName"> |
| | | <el-input |
| | | placeholder="请è¾å
¥å¥æ©åç§°" |
| | | type="textarea" |
| | | :rows="1" |
| | | v-model="form.rewardPunishName" |
| | | size="small" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="奿©æ¶é´" prop="rewardPunishTime"> |
| | | <el-date-picker |
| | | v-model="form.rewardPunishTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="奿©è®¡å" prop="rewardPunishScore"> |
| | | <el-input-number |
| | | controls-position="right" |
| | | :precision="1" |
| | | style="width: 100%" |
| | | v-model="form.rewardPunishScore" |
| | | size="small" |
| | | placeholder="请è¾å
¥å¥æ©è®¡å" |
| | | ></el-input-number> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="奿©éé¢" prop="rewardPunishSum"> |
| | | <el-input-number |
| | | controls-position="right" |
| | | :precision="2" |
| | | style="width: 100%" |
| | | :min="0" |
| | | v-model="form.rewardPunishSum" |
| | | size="small" |
| | | placeholder="请è¾å
¥å¥æ©éé¢" |
| | | ></el-input-number> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="奿©å
容"> |
| | | <el-input |
| | | v-model="form.rewardPunishContent" |
| | | :rows="2" |
| | | size="small" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥å¥æ©å
容" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </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-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addOrUpdateRewardPunishment, |
| | | deleteRewardPunishment, |
| | | rewardPunishmentExport, |
| | | rewardPunishmentPage, |
| | | } from "@/api/cnas/personal/personRewardPunishmentRecord"; |
| | | import { selectUserListByPerformance } from "@/api/system/user"; |
| | | import { transformExcel } from "@/utils/file"; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | tableData: [], |
| | | tableLoading: false, |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | userName: "", |
| | | searchTimeList: [], |
| | | }, |
| | | form: { |
| | | account: "", |
| | | userId: null, |
| | | rewardPunishScore: null, |
| | | rewardPunishName: "", |
| | | rewardPunishTime: null, |
| | | rewardPunishSum: null, |
| | | rewardPunishContent: "", |
| | | }, |
| | | dialogVisible: false, |
| | | outLoading: false, |
| | | pickerOptions: { |
| | | shortcuts: [ |
| | | { |
| | | text: "æè¿ä¸å¨", |
| | | onClick(picker) { |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); |
| | | picker.$emit("pick", [start, end]); |
| | | }, |
| | | }, |
| | | { |
| | | text: "æè¿ä¸ä¸ªæ", |
| | | onClick(picker) { |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); |
| | | picker.$emit("pick", [start, end]); |
| | | }, |
| | | }, |
| | | { |
| | | text: "æè¿ä¸ä¸ªæ", |
| | | onClick(picker) { |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); |
| | | picker.$emit("pick", [start, end]); |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | rules: { |
| | | userId: [ |
| | | { |
| | | required: true, |
| | | message: "è¯·éæ©åå·¥", |
| | | trigger: "change", |
| | | }, |
| | | ], |
| | | rewardPunishScore: [ |
| | | { |
| | | required: true, |
| | | message: "请è¾å
¥å¥æ©è®¡å", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | rewardPunishName: [ |
| | | { |
| | | required: true, |
| | | message: "请è¾å
¥å¥æ©åç§°", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | rewardPunishTime: [ |
| | | { |
| | | required: true, |
| | | message: "请è¾å
¥å¥æ©æ¶é´", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | rewardPunishSum: [ |
| | | { |
| | | required: true, |
| | | message: "请è¾å
¥å¥æ©éé¢", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | }, |
| | | responsibleOptions: [], |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.getPersonnelTraining(); |
| | | this.getUserList(); |
| | | }, |
| | | methods: { |
| | | refreshTable() { |
| | | this.search.userName = ""; |
| | | this.search.searchTimeList = []; |
| | | this.$nextTick(() => { |
| | | this.getPersonnelTraining(); |
| | | }); |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.search.size = val; |
| | | this.getPersonnelTraining(); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val; |
| | | this.getPersonnelTraining(); |
| | | }, |
| | | async getPersonnelTraining() { |
| | | const params = { |
| | | userId: "", |
| | | departmentId: "", |
| | | 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], |
| | | }; |
| | | 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; |
| | | }, |
| | | handleDown() { |
| | | this.outLoading = true; |
| | | let params = { |
| | | userName: this.search.userName, |
| | | }; |
| | | if (this.search.searchTimeList && this.search.searchTimeList.length > 0) { |
| | | params.startTime = this.search.searchTimeList[0]; |
| | | params.endTime = this.search.searchTimeList[1]; |
| | | } |
| | | rewardPunishmentExport(params).then((res) => { |
| | | transformExcel(res, "ä¸å¤©èä¸è´¨éé¨å¥æ©è®°å½.xlsx"); |
| | | this.$message.success("å¯¼åºæå"); |
| | | this.$nextTick(() => { |
| | | this.outLoading = false; |
| | | }); |
| | | }); |
| | | }, |
| | | // è·åè´è´£äººä¿¡æ¯æ¥å£ |
| | | getUserList() { |
| | | this.responsibleOptions = []; |
| | | selectUserListByPerformance({ isTestUser: true }).then((res) => { |
| | | if (res.code == 200) { |
| | | this.responsibleOptions = res.data; |
| | | } |
| | | }); |
| | | }, |
| | | selectUserChange(val) { |
| | | const index = this.responsibleOptions.findIndex( |
| | | (item) => item.id === val |
| | | ); |
| | | console.log(val, index); |
| | | if (index > -1) { |
| | | this.form.userName = this.responsibleOptions[index].name; |
| | | this.form.account = this.responsibleOptions[index].account; |
| | | } |
| | | }, |
| | | // æå¼è¡¨åå¼¹æ¡ |
| | | editForm(row) { |
| | | this.dialogVisible = true; |
| | | this.form = { ...row }; |
| | | }, |
| | | // æäº¤è¡¨åæ°æ® |
| | | saveOrUpdate() { |
| | | this.$refs.form.validate(async (valid) => { |
| | | if (valid) { |
| | | addOrUpdateRewardPunishment(this.form).then((res) => { |
| | | this.dialogVisible = false; |
| | | this.$message.success("æä½æå"); |
| | | this.getPersonnelTraining(); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | 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(); |
| | | }) |
| | | .catch((e) => { |
| | | this.$message.error("å é¤å¤±è´¥"); |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | }, |
| | | watch: { |
| | | dialogVisible(newVal) { |
| | | if (newVal === false) { |
| | | this.form = {}; |
| | | this.$refs.form.resetFields(); |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | .dateTime >>> .el-form-item__content { |
| | | width: 260px; |
| | | } |
| | | </style> |