'单位信息、从业人员管理、申请人员、申请人员、保安待培训人员管理、保安培训项目管理、保安考试管理页面对接处理'

This commit is contained in:
esacpe
2025-09-23 18:03:42 +08:00
parent 446099015c
commit c23bcb30df
24 changed files with 504 additions and 313 deletions

View File

@ -9,11 +9,11 @@
</div>
<div class="cntBox">
<el-form :model="formData" ref="FormRef" label-width="120px">
<el-form :model="formData" ref="FormRef" label-width="120px" :rules="rules">
<el-row>
<el-col :span="12">
<el-form-item label="培训项目名称" prop="pxxm" style="width: 100%;">
<el-input v-model="formData.pxxm" placeholder="请输入培训项目名称" style="width: 100%;"></el-input>
<el-form-item label="培训项目名称" prop="xmmc" style="width: 100%;">
<el-input v-model="formData.xmmc" placeholder="请输入培训项目名称" style="width: 100%;"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@ -27,13 +27,13 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="培训开始时间" prop="pxksrq" style="width: 100%;">
<el-date-picker v-model="formData.pxksrq" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请输入培训开始时间" style="width: 100%;" />
<el-form-item label="培训开始时间" prop="kssj" style="width: 100%;">
<el-date-picker v-model="formData.kssj" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请输入培训开始时间" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="培训结束时间" prop="pxjsrq" style="width: 100%;">
<el-date-picker v-model="formData.pxjsrq" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请输入培训结束时间" style="width: 100%;" />
<el-form-item label="培训结束时间" prop="jssj" style="width: 100%;">
<el-date-picker v-model="formData.jssj" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请输入培训结束时间" style="width: 100%;" />
</el-form-item>
</el-col>
</el-row>
@ -41,7 +41,7 @@
<!-- 人员 -->
<el-row class="peoRow" v-for="(item, index) in formData.courceList" :key="index">
<el-col :span="12">
<el-form-item label="培训日期" prop="pxrq" style="width: 100%;">
<el-form-item label="培训日期" :prop="`courceList[${index}].pxrq`" style="width: 100%;" :rules="rules.pxrq">
<el-date-picker v-model="item.pxrq" type="date" value-format="YYYY-MM-DD" placeholder="请输入培训日期" style="width: 100%;" />
</el-form-item>
</el-col>
@ -51,26 +51,26 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课程名称" prop="pxkcxm" style="width: 100%;">
<el-input v-model="item.pxkcxm" placeholder="请输入课程名称" style="width: 100%;"></el-input>
<el-form-item label="课程名称" :prop="`courceList[${index}].kcmc`" style="width: 100%;" :rules="rules.kcmc">
<el-input v-model="item.kcmc" placeholder="请输入课程名称" style="width: 100%;"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="组织单位" prop="pxzcdw" style="width: 100%;">
<el-input v-model="item.pxzcdw" placeholder="请输入组织单位" style="width: 100%;"></el-input>
<el-form-item label="组织单位" :prop="`courceList[${index}].zzdw`" style="width: 100%;" :rules="rules.zzdw">
<el-input v-model="item.zzdw" placeholder="请输入组织单位" style="width: 100%;"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="授课教员" prop="pxfcy" style="width: 100%;">
<el-select v-model="item.pxfcy" placeholder="请选择授课教员" style="width: 100%;">
<el-form-item label="授课教员" :prop="`courceList[${index}].skjy`" style="width: 100%;" :rules="rules.skjy">
<el-select v-model="item.skjy" placeholder="请选择授课教员" style="width: 100%;">
<el-option label="张三" value="张三"></el-option>
<el-option label="李四" value="李四"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="培训内容" prop="pxnc" style="width: 100%;">
<el-input v-model="item.pxnc" placeholder="请输入培训内容" style="width: 100%;"></el-input>
<el-form-item label="培训内容" :prop="`courceList[${index}].pxnc`" style="width: 100%;" :rules="rules.pxnr">
<el-input v-model="item.pxnr" placeholder="请输入培训内容" style="width: 100%;"></el-input>
</el-form-item>
</el-col>
<span class="deleteIncon" @click.stop="delItem(item,index)">
@ -106,6 +106,8 @@ const formData = ref({
pxnc: '', //培训内容
}] //课程
})
const FormRef = ref(null)
const pageData = reactive({
tableData: [{xm: '张三', sfzh: '123456789012345678', lxdh: '13800000000'}],
keyCount: 0,
@ -129,6 +131,19 @@ const pageData = reactive({
]
});
const rules = {
xmmc: [{ required: true, message: "请输入培训项目名称", trigger: "change" }],
pxdz: [{ required: true, message: "请输入培训地址", trigger: "change" }],
xxdz: [{ required: true, message: "请输入详细地址", trigger: "change" }],
kssj: [{ required: true, message: "请输入培训开始时间", trigger: "change" }],
jssj: [{ required: true, message: "请输入培训结束时间", trigger: "change" }],
pxrq: [{ required: true, message: "请输入培训日期", trigger: "change" }],
kcmc: [{ required: true, message: "请输入课程名称", trigger: "change" }],
zzdw: [{ required: true, message: "请输入组织单位", trigger: "change" }],
skjy: [{ required: true, message: "请选择授课教员", trigger: "change" }],
pxnr: [{ required: true, message: "请输入培训内容", trigger: "change" }]
}
const addItem = () => {
formData.value.courceList.push({
pxkcxm: '', //课程名称
@ -151,6 +166,12 @@ const close = () => {
showDialog.value = false
}
const save = async () => {
FormRef.value.validate((valid) => {
})
}
defineExpose({
init
})

View File

@ -9,22 +9,26 @@
</div>
<div class="cntinfo">
<el-descriptions column="2" border label-width="120px">
<el-descriptions-item label="培训项目名称">{{ formData.xm }}</el-descriptions-item>
<el-descriptions-item label="培训地址">{{ formData.sfzh }}</el-descriptions-item>
<el-descriptions-item label="详地址">{{ formData.lxdh }}</el-descriptions-item>
<el-descriptions-item label="培训开始时间">{{ formData.jzdz }}</el-descriptions-item>
<el-descriptions-item label="培训结束时间">{{ formData.rzsj }}</el-descriptions-item>
<el-descriptions-item label="培训项目名称">{{ formData.xmmc }}</el-descriptions-item>
<el-descriptions-item label="培训地址">{{ formData.pxdz }}</el-descriptions-item>
<el-descriptions-item label="详地址">{{ formData.xxdz }}</el-descriptions-item>
<el-descriptions-item label="培训开始时间">{{ formData.kssj }}</el-descriptions-item>
<el-descriptions-item label="培训结束时间">{{ formData.jssj }}</el-descriptions-item>
</el-descriptions>
<el-descriptions column="2" border class="label" label-width="120px">
<el-descriptions-item label="培训日期">{{ formData.xm }}</el-descriptions-item>
<el-descriptions-item label="培训时间">{{ formData.sfzh }}</el-descriptions-item>
<el-descriptions-item label="课程名称">{{ formData.lxdh }}</el-descriptions-item>
<el-descriptions-item label="组织单位">{{ formData.jzdz }}</el-descriptions-item>
<el-descriptions-item label="授课教员">{{ formData.rzsj }}</el-descriptions-item>
<el-descriptions-item label="培训内容">{{ formData.ssbmdm }}</el-descriptions-item>
<el-descriptions-item label="已培训人员" :span="2">{{ formData.ssbmdm }}</el-descriptions-item>
<el-descriptions-item label="培训照片" :span="2"></el-descriptions-item>
<el-descriptions-item label="培训日期">{{ courseInfo.pxrq }}</el-descriptions-item>
<el-descriptions-item label="培训时间">{{ courseInfo.pxsj }}</el-descriptions-item>
<el-descriptions-item label="课程名称">{{ courseInfo.kcmc }}</el-descriptions-item>
<el-descriptions-item label="组织单位">{{ courseInfo.zzdw }}</el-descriptions-item>
<el-descriptions-item label="授课教员">{{ courseInfo.skjy }}</el-descriptions-item>
<el-descriptions-item label="培训内容">{{ courseInfo.pxnr }}</el-descriptions-item>
<el-descriptions-item label="已培训人员" :span="2">{{ courseInfo.ypxry }}</el-descriptions-item>
<el-descriptions-item label="培训照片" :span="2">
<div class="imgWrapper">
<Upload v-model="courseInfo.pxzp" />
</div>
</el-descriptions-item>
</el-descriptions>
<!-- <el-descriptions title="考试人员" column="2" border class="mt20"> -->
@ -39,7 +43,6 @@
</MyTable>
<!-- </el-descriptions> -->
<!-- <view-and-upload-dialog ref="viewAndUploadRef" v-model="viewAndUploadVisible" /> -->
</div>
</div>
</template>
@ -48,7 +51,7 @@
import { ref, computed, reactive, getCurrentInstance } from 'vue'
import { qcckPost } from "@/api/qcckApi.js";
import MyTable from '@/components/aboutTable/MyTable.vue';
// import viewAndUploadDialog from './viewAndUploadDialog.vue';
import Upload from "@/components/MyComponents/Upload/index.vue"
const { proxy } = getCurrentInstance()
const title = ref('保安培训项目详情')
@ -56,8 +59,6 @@ const loading = ref(false)
const disabled = ref(false)
const FormRef = ref(null)
const visible = ref(true)
const viewAndUploadRef = ref(null)
const viewAndUploadVisible = ref(false)
const props = defineProps({
modelValue: {
@ -106,11 +107,20 @@ const pageData = reactive({
});
const formData = ref({})
const courseInfo = ref({})
const close = () => {
dialogVisible.value = false
}
// 获取保安信息培训课程管理详情
const getbaInfo = async () => {
const res = await qcckPost({}, `/mosty-base/baxx/pxkc/getInfo/${id}`)
if (res) {
courseInfo.value = res
}
}
const open = (row = {}, type = 'view') => {
disabled.value = false
dialogVisible.value = true
@ -118,6 +128,7 @@ const open = (row = {}, type = 'view') => {
if (type === 'view') {
title.value = '保安线下考试详情'
visible.value = true
getbaInfo()
} else if (type === 'edit') {
title.value = '保安证申请'
visible.value = false
@ -139,9 +150,6 @@ const save = () => {
});
}
// const addEdit = (type, row) => {
// viewAndUploadRef.value?.open(row, type)
// }
defineExpose({ open })
</script>
@ -149,6 +157,26 @@ defineExpose({ open })
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.dialog {
::v-deep {
.imgWrapper {
display: flex;
.el-upload-list__item {
height: 80px;
width: 90%;
}
.form-item-box {
width: auto !important;
}
}
.el-upload--picture-card, .el-upload-list--picture-card .el-upload-list__item-actions span+span {
display: none !important;
}
}
}
.label {
margin-top: 20px;
color: #000;

View File

@ -9,12 +9,14 @@
</div>
<div class="cntinfo">
<el-descriptions column="2" border label-width="120px">
<el-descriptions-item label="培训项目名称">{{ formData.xm }}</el-descriptions-item>
<el-descriptions-item label="考试时间">{{ formData.sfzh }}</el-descriptions-item>
<el-descriptions-item label="考试辖区">{{ formData.lxdh }}</el-descriptions-item>
<el-descriptions-item label="考试地址">{{ formData.jzdz }}</el-descriptions-item>
<el-descriptions-item label="监考民警">{{ formData.rzsj }}</el-descriptions-item>
<el-descriptions-item label="考试方式">{{ formData.ssbmdm }}</el-descriptions-item>
<el-descriptions-item label="培训项目名称">{{ formData.xmmc }}</el-descriptions-item>
<el-descriptions-item label="考试时间">{{ formData.kskssj }}</el-descriptions-item>
<el-descriptions-item label="考试辖区">{{ formData.ksxq }}</el-descriptions-item>
<el-descriptions-item label="考试地址">{{ formData.ksdz }}</el-descriptions-item>
<el-descriptions-item label="监考民警">{{ formData.jkrxm }}</el-descriptions-item>
<el-descriptions-item label="考试方式">
<DictTag :value="formData.ksfs" :tag="false" :options="D_BAXX_KSFS" />
</el-descriptions-item>
</el-descriptions>
<!-- <el-descriptions title="考试人员" column="2" border class="mt20"> -->
@ -29,7 +31,6 @@
</MyTable>
<!-- </el-descriptions> -->
<!-- <view-and-upload-dialog ref="viewAndUploadRef" v-model="viewAndUploadVisible" /> -->
</div>
</div>
</template>
@ -38,16 +39,15 @@
import { ref, computed, reactive, getCurrentInstance } from 'vue'
import { qcckPost } from "@/api/qcckApi.js";
import MyTable from '@/components/aboutTable/MyTable.vue';
// import viewAndUploadDialog from './viewAndUploadDialog.vue';
const { proxy } = getCurrentInstance()
const { D_BAXX_KSFS } = proxy.$dict("D_BAXX_KSFS");
const title = ref('保安培训项目新增')
const loading = ref(false)
const disabled = ref(false)
const FormRef = ref(null)
const visible = ref(true)
const viewAndUploadRef = ref(null)
const viewAndUploadVisible = ref(false)
const props = defineProps({
modelValue: {