提交修改

ln_ry20250512
dshclm 4 days ago
parent 0440642b68
commit de3f0a623d

@ -37,7 +37,7 @@ public class ChangePdfController {
if (sex != null) formData.put("性别", sex);
if (phone != null) formData.put("联系电话", phone);
if (smPost != null) formData.put("原涉密岗位名称", smPost);
if (smPost != null) formData.put("原涉密等级", smGrade);
if (smGrade != null) formData.put("原涉密等级", smGrade);
// 构建图片数据
Map<String, MultipartFile> imageData = new HashMap<>();

@ -183,7 +183,7 @@
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-phone"></i>
</span>
<input required type="text" id="phone" v-model="formData.phone"
<input @blur="phoneCheck(formData.phone)" required type="text" id="phone" v-model="formData.phone"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200"
placeholder="请输入联系方式">
</div>
@ -194,7 +194,7 @@
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-id-card"></i>
</span>
<input required type="text" id="cerno" v-model="formData.cerno"
<input @blur="cernoCheck(formData.cerno)" required type="text" id="cerno" v-model="formData.cerno"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200"
placeholder="请输入身份证号">
</div>
@ -552,6 +552,26 @@
});
});
},
phoneCheck(phone){
// 验证联系方式(仅检查位数)
if (phone.length !== 11) {
this.$message({
message: '联系方式应为11位数字',
type: 'warning'
})
return;
}
},
cernoCheck(cerno){
// 验证身份证号
if (!this.validateCerno(cerno)) {
this.$message({
message: '请输入有效的身份证号码',
type: 'warning'
})
return;
}
},
// 身份证号验证函数
validateCerno(cerno) {
// 身份证号码正则表达式

@ -183,7 +183,7 @@
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-phone"></i>
</span>
<input required type="text" id="phone" v-model="formData.phone"
<input @blur="phoneCheck(formData.phone)" required type="text" id="phone" v-model="formData.phone"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200"
placeholder="请输入联系方式">
</div>
@ -194,7 +194,7 @@
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-id-card"></i>
</span>
<input required type="text" id="cerno" v-model="formData.cerno"
<input @blur="cernoCheck(formData.cerno)" required type="text" id="cerno" v-model="formData.cerno"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200"
placeholder="请输入身份证号">
</div>
@ -533,6 +533,26 @@
});
});
},
phoneCheck(phone){
// 验证联系方式(仅检查位数)
if (phone.length !== 11) {
this.$message({
message: '联系方式应为11位数字',
type: 'warning'
})
return;
}
},
cernoCheck(cerno){
// 验证身份证号
if (!this.validateCerno(cerno)) {
this.$message({
message: '请输入有效的身份证号码',
type: 'warning'
})
return;
}
},
// 身份证号验证函数
validateCerno(cerno) {
// 身份证号码正则表达式

@ -276,8 +276,8 @@
</div>
</div>
<!-- 按钮 -->
<div class="row" style="display: ruby;">
<button type="submit" class="group relative w-full max-w-xs flex justify-center py-3 px-6 border border-transparent text-base font-medium rounded-lg text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-all duration-300">
<div class="row">
<button style="float: left;margin-right: 10px;" type="submit" class="group relative w-full max-w-xs flex justify-center py-3 px-6 border border-transparent text-base font-medium rounded-lg text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-all duration-300">
<span class="absolute left-0 inset-y-0 flex items-center pl-3" style="margin-right: 5px;">
<i class="fa-solid fa-file-pdf text-white transform group-hover:translate-x-0.5 transition-transform duration-200"></i>
</span>

@ -275,8 +275,8 @@
</div>
</div>
</div>
<div style="display: ruby;" class="flex items-center justify-between mb-4">
<button type="submit" class="group relative w-full max-w-xs flex justify-center py-3 px-6 border border-transparent text-base font-medium rounded-lg text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-all duration-200">
<div class="row">
<button style="float: left;margin-right: 10px;" type="submit" class="group relative w-full max-w-xs flex justify-center py-3 px-6 border border-transparent text-base font-medium rounded-lg text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-all duration-200">
<span class="absolute left-0 inset-y-0 flex items-center pl-3" style="margin-right: 5px;">
<i class="fa-solid fa-file-pdf text-white transform group-hover:translate-x-0.5 transition-transform duration-200"></i>
</span>

@ -55,6 +55,10 @@
.space-y-3{
margin-bottom: 1.5rem;
}
.form-horizontal .control-label {
text-align: left;
padding-top: 0;
}
</style>
</head>
<body class="bg-gray-50 font-sans">
@ -252,26 +256,38 @@
placeholder="请输入单位及职务职称">
</div>
</div>
<!-- 已(拟)任涉密岗位 - 修改为下拉框 -->
<div class="space-y-3">
<label for="smPost" class="block text-sm font-medium text-gray-700">已(拟)任涉密岗位</label>
<label for="smPost" class="block text-sm font-medium text-gray-700 is-required control-label">已(拟)任涉密岗位</label>
<div class="relative">
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-shield-halved"></i>
</span>
<input disabled type="text" id="smPost" v-model="formData.smPost"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200"
placeholder="请输入已(拟)任涉密岗位">
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-shield-halved"></i>
</span>
<select required id="smPost" v-model="formData.smPost"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200 appearance-none">
<option value="">请选择岗位</option>
<option v-for="post in postOptions" :value="post">{{ post }}</option>
</select>
<div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none">
<i class="fa-solid fa-chevron-down text-gray-400"></i>
</div>
</div>
</div>
<!-- 涉密等级 - 修改为下拉框 -->
<div class="space-y-3">
<label for="smGrade" class="block text-sm font-medium text-gray-700">涉密等级</label>
<label for="smGrade" class="block text-sm font-medium text-gray-700 is-required control-label">涉密等级</label>
<div class="relative">
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-lock"></i>
</span>
<input disabled type="text" id="smGrade" v-model="formData.smGrade"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200"
placeholder="请输入涉密等级">
<span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500">
<i class="fa-solid fa-lock"></i>
</span>
<select required id="smGrade" v-model="formData.smGrade"
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200 appearance-none">
<option value="">请选择等级</option>
<option v-for="level in levelOptions" :value="level">{{ level }}</option>
</select>
<div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none">
<i class="fa-solid fa-chevron-down text-gray-400"></i>
</div>
</div>
</div>
</div>
@ -282,8 +298,8 @@
<!-- </a>-->
<!-- </div>-->
<!-- 按钮 -->
<div class="row" style="display: ruby;">
<button type="submit" class="group relative w-full max-w-xs flex justify-center py-3 px-6 border border-transparent text-base font-medium rounded-lg text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-all duration-300">
<div class="row">
<button style="float: left;margin-right: 10px;" type="submit" class="group relative w-full max-w-xs flex justify-center py-3 px-6 border border-transparent text-base font-medium rounded-lg text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-all duration-300">
<span class="absolute left-0 inset-y-0 flex items-center pl-3" style="margin-right: 5px;">
<i class="fa-solid fa-file-pdf text-white transform group-hover:translate-x-0.5 transition-transform duration-200"></i>
</span>
@ -350,12 +366,24 @@
<div class="row mt-6">
<div class="col-sm-offset-5 col-sm-10" style="display: flex;">
<!-- <button type="button" class="btn btn-sm btn-primary" @click="submitHandler()"><i class="fa fa-check"></i>提 交</button>&nbsp;-->
<button type="button" class="btn btn-sm btn-primary" @click="submitHandler()"><i class="fa fa-check"></i>保 存</button>&nbsp;
<button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭
</button>
</div>
</div>
</div>
<!-- 加载中 -->
<div v-if="isLoading" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
<div class="bg-white rounded-xl p-6 shadow-lg max-w-md w-full">
<div class="flex items-center">
<div class="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-primary mr-4"></div>
<div>
<h3 class="text-lg font-medium text-gray-800">正在处理</h3>
<p class="text-sm text-gray-500 mt-1">请稍候系统正在生成您的PDF文件...</p>
</div>
</div>
</div>
</div>
<!-- 上传成功提示 -->
<div v-if="uploadSuccess" class="fixed bottom-4 right-4 bg-green-500 text-white px-6 py-3 rounded-lg shadow-lg transform transition-all duration-500 translate-y-0 opacity-100">
<div class="flex items-center">
@ -390,7 +418,7 @@
<th:block th:include="include :: jasny-bootstrap-js"/>
<th:block th:include="include :: element-js"/>
<script type="text/javascript" th:inline="javascript">
var prefix = ctx + "system/applyList";
var prefix = ctx + "system/onDutyList";
new Vue({
el: '#app',
data: {
@ -427,7 +455,12 @@
previewingFile: {},
uploadSuccess: false,
uploadSuccessMessage: '',
prefix: ctx + "system/applyList",
prefix: ctx + "system/onDutyList",
// 新增下拉框数据
postOptions: [], // 已(拟)任涉密岗位选项
levelOptions: [], // 涉密等级选项
isLoadingPosts: false,
isLoadingLevels: false
},
computed: {
previewUrl() {
@ -613,9 +646,38 @@
this.$message.error('下载文件时出错');
});
},
// 新增获取下拉框数据的方法
fetchPostOptions() {
this.isLoadingPosts = true;
axios.post('/system/classifiedPost/getPostNames')
.then(response => {
// 直接使用返回的字符串数组
this.postOptions = response.data.data || [];
this.isLoadingPosts = false;
})
.catch(error => {
console.error('获取涉密岗位数据失败:', error);
this.isLoadingPosts = false;
this.$message.error('获取涉密岗位数据失败,请刷新页面重试');
});
},
fetchLevelOptions() {
this.isLoadingLevels = true;
axios.post('/system/classifiedPost/getClassifiedLevels')
.then(response => {
// 直接使用返回的字符串数组
this.levelOptions = response.data.data || [];
this.isLoadingLevels = false;
})
.catch(error => {
console.error('获取涉密等级数据失败:', error);
this.isLoadingLevels = false;
this.$message.error('获取涉密等级数据失败,请刷新页面重试');
});
},
submitHandler() {
if (this.uploadedFiles.length == 0) {
this.$message.warning('请上传所需材料');
if (this.formData.smGrade != '' && !this.formData.smPost != '') {
this.$message.warning('请选择部门或岗位');
return;
}
@ -624,7 +686,7 @@
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
$.operate.saveTab(`${this.prefix}/submit?applyId=${this.formData.applyId}`);
$.operate.saveTab(`${this.prefix}/saveDuty`,this.formData);
}).catch(() => {
this.$message({
type: 'info',
@ -742,6 +804,9 @@
// 获取已上传文件
this.getUploadedFiles();
// 页面加载时获取下拉框数据
this.fetchPostOptions();
this.fetchLevelOptions();
}
});

@ -71,6 +71,12 @@
<div class="bg-white rounded-xl shadow-soft p-6 mb-8 scale-hover">
<form class="form-horizontal space-y-6">
<h4 class="form-header h4">基本信息</h4>
<!-- 模版下载按钮 -->
<div class="row mt-6">
<a :href="pdfUrl" download="保密教育培训登记表.pdf" class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors duration-200">
<i class="fa-solid fa-download mr-2"></i> 下载培训登记表模板
</a>
</div>
<!-- 文本字段 -->
<div class="grid md:grid-cols-4 gap-6">
<!-- 第一行前两列:姓名、所在部门 -->
@ -194,12 +200,6 @@
</div>
</div>
</div>
<!-- 模版下载按钮 -->
<div class="row mt-6">
<a :href="pdfUrl" download="保密教育培训登记表.pdf" class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors duration-200">
<i class="fa-solid fa-download mr-2"></i> 下载培训登记表模板
</a>
</div>
</form>
<!-- 材料上传区域 -->

Loading…
Cancel
Save