From 40f5cf2a8c324bf08fd5f0aec2e9da00e5f59f76 Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期六, 11 四月 2026 20:29:40 +0800
Subject: [PATCH] fix(user): 在职员工界面优化
---
src/views/user/components/AdvancedQuery.vue | 213 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 213 insertions(+), 0 deletions(-)
diff --git a/src/views/user/components/AdvancedQuery.vue b/src/views/user/components/AdvancedQuery.vue
new file mode 100644
index 0000000..b33c555
--- /dev/null
+++ b/src/views/user/components/AdvancedQuery.vue
@@ -0,0 +1,213 @@
+<template>
+ <div>
+ <el-row>
+ <el-col :span="3">员工编号:
+ <el-input v-model="localParams.empNumb" size="small" maxlength="20" style="width:85px" />
+ </el-col>
+ <el-col :span="3">姓名:
+ <el-input v-model="localParams.empName" size="small" maxlength="10" style="width:110px" />
+ </el-col>
+ <el-col :span="4">身份证号:
+ <el-input v-model="localParams.certificateNumb" size="small" maxlength="18" style="width:140px" />
+ </el-col>
+ <el-col :span="4">部门(护卫点):
+ <el-input v-model="localParams.deptName" size="small" maxlength="20" style="width:100px" />
+ </el-col>
+ <el-col :span="7">入职日期:
+ <el-date-picker
+ v-model="localParams.entryDateStr"
+ size="small"
+ type="daterange"
+ align="right"
+ unlink-panels
+ range-separator="~"
+ value-format="yyyy-MM-dd"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ style="width: 300px;"
+ />
+ </el-col>
+ <el-col :span="3">
+ <el-button size="mini" class="hr-but-all" type="primary" @click="handleSearch">查询</el-button>
+ <el-button size="mini" class="hr-but" type="danger" @click="handleReset">重置</el-button>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <table class="searchTable">
+ <tr v-for="field in dictFilterFields" :key="field.paramKey">
+ <td class="td">{{ field.label }}:</td>
+ <td class="td-group">
+ <el-checkbox-group v-model="localParams[field.paramKey]" class="fj-checkbox">
+ <el-checkbox label="" @change="(val) => handleSelectAll(field, val)">全部</el-checkbox>
+ <el-checkbox
+ v-for="data in getDictOptions(field.dictType)"
+ :key="data.dicItemName"
+ :label="data.dicItemCode"
+ >
+ {{ data.dicItemName }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </td>
+ </tr>
+ <tr>
+ <td class="td">入职类型:</td>
+ <td class="td-group">
+ <el-checkbox-group v-model="localParams.entryType" class="fj-checkbox">
+ <el-checkbox label="" @change="handleSelectAllEntryType">全部</el-checkbox>
+ <el-checkbox
+ v-for="item in entryTypeOptions"
+ :key="item.dicItemCode"
+ :label="item.dicItemCode"
+ >
+ {{ item.dicItemName }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </td>
+ </tr>
+ </table>
+ </el-col>
+ </el-row>
+ </div>
+</template>
+
+<script>
+import dictMixin from '@/utils/dictMixin'
+
+export default {
+ name: 'AdvancedQuery',
+ mixins: [dictMixin],
+ props: {
+ queryParams: {
+ type: Object,
+ required: true
+ }
+ },
+ data() {
+ return {
+ // 字典筛选配置
+ dictFilterFields: [
+ { label: '性别', paramKey: 'sex', dictType: 'sex' },
+ { label: '学历', paramKey: 'education', dictType: 'EDUCATION' },
+ { label: '政治面貌', paramKey: 'politics', dictType: 'PLITICAL' },
+ { label: '年龄', paramKey: 'ageStr', dictType: 'ageStr' },
+ { label: '档案情况', paramKey: 'archivesStatus', dictType: 'archivesStatus' },
+ { label: '社保档位', paramKey: 'insuranceType', dictType: 'INSURANCETYPE' },
+ { label: '工作证', paramKey: 'empCardStatus', dictType: 'empCardStatus' },
+ { label: '员工手册', paramKey: 'handbookStatus', dictType: 'handbookStatus' },
+ { label: '员工类型', paramKey: 'empType', dictType: 'EMPTYPE' },
+ { label: '相关证件', paramKey: 'certificateList', dictType: 'certificateList' }
+ ],
+ // 入职类型特殊选项(硬编码)
+ entryTypeOptions: [
+ { dicItemCode: 20, dicItemName: '新入职' },
+ { dicItemCode: 21, dicItemName: '重新入职' },
+ { dicItemCode: 22, dicItemName: '返聘入职' }
+ ],
+ // 本地查询参数(从 props 复制,避免直接修改)
+ localParams: {},
+ // 防止 watch 循环更新标志
+ isUpdating: false
+ }
+ },
+ watch: {
+ queryParams: {
+ handler(val) {
+ if (!this.isUpdating) {
+ this.localParams = { ...val }
+ }
+ },
+ immediate: true,
+ deep: true
+ },
+ localParams: {
+ handler(val) {
+ this.isUpdating = true
+ this.$emit('update:queryParams', val)
+ this.$nextTick(() => {
+ this.isUpdating = false
+ })
+ },
+ deep: true
+ }
+ },
+ mounted() {
+ this.initDictTypes([
+ 'sex', 'EDUCATION', 'PLITICAL', 'ageStr', 'archivesStatus',
+ 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'EMPTYPE', 'certificateList'
+ ])
+ },
+ methods: {
+ // 通用全选/取消全选
+ handleSelectAll(field, val) {
+ if (val) {
+ const options = this.getDictOptions(field.dictType)
+ this.$set(this.localParams, field.paramKey, options.map(item => item.dicItemCode))
+ } else {
+ this.$set(this.localParams, field.paramKey, [])
+ }
+ },
+ // 入职类型全选/取消全选
+ handleSelectAllEntryType(val) {
+ if (val) {
+ this.$set(this.localParams, 'entryType', [20, 21, 22])
+ } else {
+ this.$set(this.localParams, 'entryType', [])
+ }
+ },
+ // 查询
+ handleSearch() {
+ this.$emit('search')
+ },
+ // 重置
+ handleReset() {
+ this.localParams = {
+ empNumb: '',
+ vague: '',
+ sex: [],
+ education: [],
+ politics: [],
+ ageStr: [],
+ archivesStatus: [],
+ insuranceType: [],
+ empStatus: [],
+ empCardStatus: [],
+ handbookStatus: [],
+ baseKey: '',
+ empType: [],
+ entryType: [],
+ certificateList: []
+ }
+ this.$emit('reset')
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+.searchTable {
+ margin-top: 10px;
+ border-collapse: collapse;
+ width: 100%;
+
+ tr {
+ border-bottom: 1px dashed #d9dadb;
+ }
+
+ .td {
+ width: 90px;
+ text-align: right;
+ }
+
+ .td-group {
+ padding-left: 20px;
+ }
+}
+
+.searchTable td,
+.searchTable th {
+ color: #000;
+ height: 50px;
+ background-color: #fff;
+}
+</style>
--
Gitblit v1.8.0