解决导入成功弹窗不关闭问题,升级vite至安全版本

pull/653/head
hky 2024-12-27 12:23:31 +08:00
parent 9c897e521f
commit 52c9601609
6 changed files with 419 additions and 581 deletions

View File

@ -70,7 +70,7 @@
"video.js": "^7.21.5",
"vue": "3.5.12",
"vue-dompurify-html": "^4.1.4",
"vue-i18n": "9.10.2",
"vue-i18n": "10.0.5",
"vue-router": "4.4.5",
"vue-types": "^5.1.1",
"vuedraggable": "^4.1.0",
@ -124,7 +124,7 @@
"unplugin-auto-import": "^0.16.7",
"unplugin-element-plus": "^0.8.0",
"unplugin-vue-components": "^0.25.2",
"vite": "5.1.4",
"vite": "5.4.6",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-ejs": "^1.7.0",
"vite-plugin-eslint": "^1.8.1",

File diff suppressed because it is too large Load Diff

View File

@ -1,176 +0,0 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="职级" prop="level">
<el-input v-model="formData.level" placeholder="请输入职级" />
</el-form-item>
<el-form-item label="档位1" prop="gear1">
<el-input v-model="formData.gear1" placeholder="请输入档位1" />
</el-form-item>
<el-form-item label="档位2" prop="gear2">
<el-input v-model="formData.gear2" placeholder="请输入档位2" />
</el-form-item>
<el-form-item label="档位3" prop="gear3">
<el-input v-model="formData.gear3" placeholder="请输入档位3" />
</el-form-item>
<el-form-item label="档位4" prop="gear4">
<el-input v-model="formData.gear4" placeholder="请输入档位4" />
</el-form-item>
<el-form-item label="档位5" prop="gear5">
<el-input v-model="formData.gear5" placeholder="请输入档位5" />
</el-form-item>
<el-form-item label="档位6" prop="gear6">
<el-input v-model="formData.gear6" placeholder="请输入档位6" />
</el-form-item>
<el-form-item label="档位7" prop="gear7">
<el-input v-model="formData.gear7" placeholder="请输入档位7" />
</el-form-item>
<el-form-item label="档位8" prop="gear8">
<el-input v-model="formData.gear8" placeholder="请输入档位8" />
</el-form-item>
<el-form-item label="档位9" prop="gear9">
<el-input v-model="formData.gear9" placeholder="请输入档位9" />
</el-form-item>
<el-form-item label="档位10" prop="gear10">
<el-input v-model="formData.gear10" placeholder="请输入档位10" />
</el-form-item>
<el-form-item label="档位11" prop="gear11">
<el-input v-model="formData.gear11" placeholder="请输入档位11" />
</el-form-item>
<el-form-item label="档位12" prop="gear12">
<el-input v-model="formData.gear12" placeholder="请输入档位12" />
</el-form-item>
<el-form-item label="档位13" prop="gear13">
<el-input v-model="formData.gear13" placeholder="请输入档位13" />
</el-form-item>
<el-form-item label="档差" prop="gearDiff">
<el-input v-model="formData.gearDiff" placeholder="请输入档差" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { LevelSalaryApi, LevelSalaryVO } from '@/api/arcb/levelsalary'
/** 基本工资档级 表单 */
defineOptions({ name: 'LevelSalaryForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
level: undefined,
gear1: undefined,
gear2: undefined,
gear3: undefined,
gear4: undefined,
gear5: undefined,
gear6: undefined,
gear7: undefined,
gear8: undefined,
gear9: undefined,
gear10: undefined,
gear11: undefined,
gear12: undefined,
gear13: undefined,
gearDiff: undefined,
})
const formRules = reactive({
level: [{ required: true, message: '职级不能为空', trigger: 'blur' }],
gear1: [{ required: true, message: '档位1不能为空', trigger: 'blur' }],
gear2: [{ required: true, message: '档位2不能为空', trigger: 'blur' }],
gear3: [{ required: true, message: '档位3不能为空', trigger: 'blur' }],
gear4: [{ required: true, message: '档位4不能为空', trigger: 'blur' }],
gear5: [{ required: true, message: '档位5不能为空', trigger: 'blur' }],
gear6: [{ required: true, message: '档位6不能为空', trigger: 'blur' }],
gear7: [{ required: true, message: '档位7不能为空', trigger: 'blur' }],
gear8: [{ required: true, message: '档位8不能为空', trigger: 'blur' }],
gear9: [{ required: true, message: '档位9不能为空', trigger: 'blur' }],
gear10: [{ required: true, message: '档位10不能为空', trigger: 'blur' }],
gear11: [{ required: true, message: '档位11不能为空', trigger: 'blur' }],
gear12: [{ required: true, message: '档位12不能为空', trigger: 'blur' }],
gear13: [{ required: true, message: '档位13不能为空', trigger: 'blur' }],
gearDiff: [{ required: true, message: '档差不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await LevelSalaryApi.getLevelSalary(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as LevelSalaryVO
if (formType.value === 'create') {
await LevelSalaryApi.createLevelSalary(data)
message.success(t('common.createSuccess'))
} else {
await LevelSalaryApi.updateLevelSalary(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
level: undefined,
gear1: undefined,
gear2: undefined,
gear3: undefined,
gear4: undefined,
gear5: undefined,
gear6: undefined,
gear7: undefined,
gear8: undefined,
gear9: undefined,
gear10: undefined,
gear11: undefined,
gear12: undefined,
gear13: undefined,
gearDiff: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -8,13 +8,13 @@
v-loading="formLoading"
>
<el-form-item label="姓名" prop="empName">
<el-input v-model="formData.empName" placeholder="请输入姓名" />
<el-input v-model="formData.empName" placeholder="请输入姓名"/>
</el-form-item>
<el-form-item label="身份证号" prop="idNo">
<el-input v-model="formData.idNo" placeholder="请输入身份证号" />
<el-input v-model="formData.idNo" placeholder="请输入身份证号"/>
</el-form-item>
<el-form-item label="工号" prop="empNo">
<el-input v-model="formData.empNo" placeholder="请输入工号" />
<el-input v-model="formData.empNo" placeholder="请输入工号"/>
</el-form-item>
<el-form-item label="岗位" prop="station">
<el-select
@ -22,6 +22,7 @@
placeholder="请选择岗位"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in stationOptions"
@ -32,7 +33,7 @@
</el-select>
</el-form-item>
<el-form-item label="银行卡号" prop="bankNo">
<el-input v-model="formData.bankNo" placeholder="请输入银行卡号" />
<el-input v-model="formData.bankNo" placeholder="请输入银行卡号"/>
</el-form-item>
<el-form-item label="所属机构" prop="orgNo">
<el-select
@ -40,6 +41,7 @@
placeholder="请选择所属机构"
size="large"
style="width: 240px"
clearable
>
<el-option
v-for="item in deptOptions"
@ -50,16 +52,16 @@
</el-select>
</el-form-item>
<el-form-item label="企业年金帐号" prop="annuityNo">
<el-input v-model="formData.annuityNo" placeholder="请输入企业年金帐号" />
<el-input v-model="formData.annuityNo" placeholder="请输入企业年金帐号"/>
</el-form-item>
<el-form-item label="社保账号" prop="socialSecurityNo">
<el-input v-model="formData.socialSecurityNo" placeholder="请输入社保账号" />
<el-input v-model="formData.socialSecurityNo" placeholder="请输入社保账号"/>
</el-form-item>
<el-form-item label="养老金帐号" prop="pensionNo">
<el-input v-model="formData.pensionNo" placeholder="请输入养老金帐号" />
<el-input v-model="formData.pensionNo" placeholder="请输入养老金帐号"/>
</el-form-item>
<el-form-item label="住房公积金账号" prop="housingFundNo">
<el-input v-model="formData.housingFundNo" placeholder="请输入住房公积金账号" />
<el-input v-model="formData.housingFundNo" placeholder="请输入住房公积金账号"/>
</el-form-item>
<el-form-item label="参加工作时间" prop="workTime">
<el-date-picker
@ -88,15 +90,15 @@
</Dialog>
</template>
<script setup lang="ts">
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { EmployeeApi, EmployeeVO } from '@/api/arcb/salary/employee'
import {StationApi,StationVO} from '@/api/arcb/salary/station'
import {getStrDictOptions, DICT_TYPE} from '@/utils/dict'
import {EmployeeApi, EmployeeVO} from '@/api/arcb/salary/employee'
import {StationApi, StationVO} from '@/api/arcb/salary/station'
import {DeptVO, getDeptPage} from "@/api/system/dept";
/** 员工花名册 表单 */
defineOptions({ name: 'EmployeeForm' })
defineOptions({name: 'EmployeeForm'})
const { t } = useI18n() //
const {t} = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
@ -121,18 +123,24 @@ const formData = ref({
empStatus: undefined,
})
const formRules = reactive({
empName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
idNo: [{ required: true, message: '身份证号不能为空', trigger: 'blur' }],
empNo: [{ required: true, message: '工号不能为空', trigger: 'blur' }],
station: [{ required: true, message: '岗位不能为空', trigger: 'blur' }],
bankNo: [{ required: true, message: '银行卡号不能为空', trigger: 'blur' }],
orgNo: [{ required: true, message: '所属机构不能为空', trigger: 'blur' }],
annuityNo: [{ required: true, message: '企业年金帐号不能为空', trigger: 'blur' }],
socialSecurityNo: [{ required: true, message: '社保账号不能为空', trigger: 'blur' }],
pensionNo: [{ required: true, message: '养老金帐号不能为空', trigger: 'blur' }],
housingFundNo: [{ required: true, message: '住房公积金账号不能为空', trigger: 'blur' }],
workTime: [{ required: true, message: '参加工作时间不能为空', trigger: 'blur' }],
empStatus: [{ required: true, message: '员工状态不能为空', trigger: 'blur' }],
empName: [{required: true, message: '姓名不能为空', trigger: 'blur'}],
idNo: [{required: true, message: '身份证号不能为空', trigger: 'blur'},
{
pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
message: '请输入有效的身份证号',
trigger: 'blur'
}],
empNo: [{required: true, message: '工号不能为空', trigger: 'blur'},
{ pattern: /^\d{6}$/, message: '工号必须是6位数字', trigger: 'blur' }],
station: [{required: true, message: '岗位不能为空', trigger: 'blur'}],
bankNo: [{required: true, message: '银行卡号不能为空', trigger: 'blur'}],
orgNo: [{required: true, message: '所属机构不能为空', trigger: 'blur'}],
annuityNo: [{required: true, message: '企业年金帐号不能为空', trigger: 'blur'}],
socialSecurityNo: [{required: true, message: '社保账号不能为空', trigger: 'blur'}],
pensionNo: [{required: true, message: '养老金帐号不能为空', trigger: 'blur'}],
housingFundNo: [{required: true, message: '住房公积金账号不能为空', trigger: 'blur'}],
workTime: [{required: true, message: '参加工作时间不能为空', trigger: 'blur'}],
empStatus: [{required: true, message: '员工状态不能为空', trigger: 'blur'}],
})
const formRef = ref() // Ref
@ -154,10 +162,10 @@ const open = async (type: string, id?: number) => {
}
}
}
defineExpose({ open }) // open
defineExpose({open}) // open
//
const getStationOptions = async () =>{
const getStationOptions = async () => {
stationOptions.value = (await StationApi.getStationPage({
pageNo: 1,
pageSize: 100
@ -169,7 +177,7 @@ const getStationOptions = async () =>{
})
}
const getOrgNo = async () =>{
const getOrgNo = async () => {
getDeptPage({
pageNo: 1,
pageSize: 200

View File

@ -92,17 +92,17 @@ const submitFormSuccess = (response: any) => {
}
//
const data = response.data
let text = '上传成功数量:' + data.createUsernames.length + ';'
for (let username of data.createUsernames) {
text += '< ' + username + ' >'
let text = '上传成功数量:' + data.createEmployees.length + ';'
for (let empNo of data.createEmployees) {
text += '< ' + empNo + ' >'
}
text += '更新成功数量:' + data.updateUsernames.length + ';'
for (const username of data.updateUsernames) {
text += '< ' + username + ' >'
text += '更新成功数量:' + data.updateEmployees.length + ';'
for (const empNo of data.updateEmployees) {
text += '< ' + empNo + ' >'
}
text += '更新失败数量:' + Object.keys(data.failureUsernames).length + ';'
for (const username in data.failureUsernames) {
text += '< ' + username + ': ' + data.failureUsernames[username] + ' >'
text += '更新失败数量:' + Object.keys(data.failureEmployees).length + ';'
for (const empNo in data.failureEmployees) {
text += '< ' + empNo + ': ' + data.failureEmployees[empNo] + ' >'
}
message.alert(text)
formLoading.value = false
@ -133,6 +133,6 @@ const handleExceed = (): void => {
/** 下载模板操作 */
const importTemplate = async () => {
const res = await EmpApi.EmployeeApi.importEmpTemplate()
download.excel(res, '员工花名册导入模版.xls')
download.excel(res, '员工花名册导入模版.xlsx')
}
</script>

View File

@ -116,7 +116,7 @@
<el-table-column label="姓名" align="center" prop="empName" />
<el-table-column label="身份证号" align="center" prop="idNo" />
<el-table-column label="工号" align="center" prop="empNo" />
<el-table-column label="岗位" align="center" prop="station" >
<el-table-column label="岗位" align="center" prop="station">
<template #default="scope">
<el-tag
v-for="item in stationOptions.filter(option => option.value === scope.row.station)"